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