1#ifndef ARCH_ARM_SOC_H
2#define ARCH_ARM_SOC_H
3
4class InterruptController;
5
6#include <drivers/bus/FDT.h>
7#include <private/kernel/int.h>
8#include <private/kernel/timer.h>
9
10// ------------------------------------------------------ InterruptController
11
12class InterruptController {
13public:
14	virtual void EnableInterrupt(int32 irq) = 0;
15	virtual void DisableInterrupt(int32 irq) = 0;
16
17	virtual void HandleInterrupt() = 0;
18
19	static InterruptController* Get() {
20		return sInstance;
21	}
22
23protected:
24	InterruptController()
25	{
26		if (sInstance) {
27			panic("Multiple InterruptController objects created; that is currently unsupported!");
28		}
29		sInstance = this;
30	}
31
32	static InterruptController *sInstance;
33};
34
35
36// ------------------------------------------------------ HardwareTimer
37
38class HardwareTimer {
39public:
40	virtual void SetTimeout(bigtime_t timeout) = 0;
41	virtual bigtime_t Time() = 0;
42	virtual void Clear() = 0;
43
44	static HardwareTimer* Get() {
45		return sInstance;
46	}
47
48protected:
49	HardwareTimer()
50	{
51		if (sInstance) {
52			panic("Multiple HardwareTimer objects created; that is currently unsupported!");
53		}
54		sInstance = this;
55	}
56
57	static HardwareTimer *sInstance;
58};
59
60#endif // ARCH_ARM_SOC_H
61