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