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