1#ifndef ARCH_ARM_SOC_OMAP3_H 2#define ARCH_ARM_SOC_OMAP3_H 3 4class OMAP3InterruptController; 5 6#include "soc.h" 7 8#include <new> 9 10 11class OMAP3InterruptController : public InterruptController { 12public: 13 OMAP3InterruptController(uint32_t reg_base); 14 void EnableInterrupt(int32 irq); 15 void DisableInterrupt(int32 irq); 16 void HandleInterrupt(); 17 18protected: 19 void SoftReset(); 20 21 area_id fRegArea; 22 uint32 *fRegBase; 23 uint32 fNumPending; 24}; 25 26class OMAP3Timer : public HardwareTimer { 27public: 28 void SetTimeout(bigtime_t timeout); 29 bigtime_t Time(); 30 void Clear(); 31 32 static status_t Init(uint32_t reg_base, uint32_t interrupt) { 33 if (sInstance == NULL) { 34 OMAP3Timer *timer = new(std::nothrow) OMAP3Timer(reg_base, interrupt); 35 // XXX implement InitCheck() functionality 36 return timer != NULL ? B_OK : B_NO_MEMORY; 37 } else { 38 // XXX We have multiple timers; just create the first one 39 // and ignore the rest 40 return B_OK; 41 } 42 } 43 44private: 45 OMAP3Timer(uint32_t reg_base, uint32_t interrupt); 46 47 static int32 _InterruptWrapper(void *data); 48 int32 HandleInterrupt(); 49 50 bigtime_t fSystemTime; 51 area_id fRegArea; 52 uint32 *fRegBase; 53 int fInterrupt; 54}; 55 56#endif /* ARCH_ARM_SOC_OMAP3_H */ 57