xref: /haiku/src/system/kernel/arch/arm/arch_timer_generic.h (revision 388d91a7b829b91b95abd2505437d431c468ce7d)
1 /*
2  * Copyright 2022 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef ARCH_ARM_TIMER_GENERIC_H
6 #define ARCH_ARM_TIMER_GENERIC_H
7 
8 #include <new>
9 #include <SupportDefs.h>
10 
11 #include "soc.h"
12 
13 class ARMGenericTimer : public HardwareTimer {
14 public:
15 	void SetTimeout(bigtime_t timeout);
16 	void Clear();
17 	bigtime_t Time();
18 
19 	static status_t Init() {
20 		ARMGenericTimer *timer = new(std::nothrow) ARMGenericTimer();
21 		return timer != NULL ? B_OK : B_NO_MEMORY;
22 	}
23 
24 	static bool IsAvailable();
25 protected:
26 	ARMGenericTimer();
27 
28 private:
29 	static int32 _InterruptWrapper(void *data);
30 	int32 HandleInterrupt();
31 
32 	uint32_t fTimerFrequency;
33 	uint32_t fTimerFrequencyMHz;
34 };
35 
36 #endif /* ARCH_ARM_TIMER_GENERIC_H */
37