1/* 2 * Copyright 2007-2022, Haiku Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Fran��ois Revol <revol@free.fr> 7 * Ithamar R. Adema <ithamar@upgrade-android.com> 8 * 9 * Copyright 2001, Travis Geiselbrecht. All rights reserved. 10 * Distributed under the terms of the NewOS License. 11 */ 12 13 14#include <boot/stage2.h> 15#include <kernel.h> 16#include <debug.h> 17 18#include <timer.h> 19#include <arch/timer.h> 20#include <arch/cpu.h> 21 22#include <drivers/bus/FDT.h> 23#include "arch_timer_generic.h" 24#include "soc.h" 25 26#include "soc_pxa.h" 27#include "soc_omap3.h" 28 29//#define TRACE_ARCH_TIMER 30#ifdef TRACE_ARCH_TIMER 31# define TRACE(x...) dprintf(x) 32#else 33# define TRACE(x...) ; 34#endif 35 36 37void 38arch_timer_set_hardware_timer(bigtime_t timeout) 39{ 40 HardwareTimer *timer = HardwareTimer::Get(); 41 if (timer != NULL) 42 timer->SetTimeout(timeout); 43} 44 45 46void 47arch_timer_clear_hardware_timer() 48{ 49 HardwareTimer *timer = HardwareTimer::Get(); 50 if (timer != NULL) 51 timer->Clear(); 52} 53 54int 55arch_init_timer(kernel_args *args) 56{ 57 TRACE("%s\n", __func__); 58 59 if (ARMGenericTimer::IsAvailable()) { 60 TRACE("init ARMv7 generic timer\n"); 61 ARMGenericTimer::Init(); 62 } else if (strncmp(args->arch_args.timer.kind, TIMER_KIND_OMAP3, 63 sizeof(args->arch_args.timer.kind)) == 0) { 64 OMAP3Timer::Init(args->arch_args.timer.regs.start, 65 args->arch_args.timer.interrupt); 66 } else if (strncmp(args->arch_args.timer.kind, TIMER_KIND_PXA, 67 sizeof(args->arch_args.timer.kind)) == 0) { 68 PXATimer::Init(args->arch_args.timer.regs.start); 69 } else { 70 panic("No hardware timer found!\n"); 71 } 72 73 return B_OK; 74} 75 76 77bigtime_t 78system_time(void) 79{ 80 HardwareTimer *timer = HardwareTimer::Get(); 81 if (timer != NULL) 82 return timer->Time(); 83 84 return 0; 85} 86