]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/drivers/arm/sa1100.cpp
da67fd755f3c5a23c6aaee83f6854db760b8f3ce
[l4.git] / kernel / fiasco / src / drivers / arm / sa1100.cpp
1 INTERFACE [sa1100]:
2
3 #include "types.h"
4
5 template< unsigned long Hw_regs_base >
6 class Sa1100_generic 
7 {
8 public:
9   enum {
10     RSRR = Hw_regs_base + 0x030000,
11
12     /* interrupt controller */
13     ICIP = Hw_regs_base + 0x050000,
14     ICMR = Hw_regs_base + 0x050004,
15     ICLR = Hw_regs_base + 0x050008,
16     ICCR = Hw_regs_base + 0x05000c,
17     ICFP = Hw_regs_base + 0x050010,
18     ICPR = Hw_regs_base + 0x050020,
19
20     /* OS Timer */
21     OSMR0 = Hw_regs_base + 0x000000,
22     OSMR1 = Hw_regs_base + 0x000004,
23     OSMR2 = Hw_regs_base + 0x000008,
24     OSMR3 = Hw_regs_base + 0x00000c,
25     OSCR  = Hw_regs_base + 0x000010,
26     OSSR  = Hw_regs_base + 0x000014,
27     OWER  = Hw_regs_base + 0x000018,
28     OIER  = Hw_regs_base + 0x00001c,
29
30     RSRR_SWR = 1,
31   };
32
33   static inline void  hw_reg( Mword value, Mword reg );
34   static inline Mword hw_reg( Mword reg );
35 };
36
37 //---------------------------------------------------------------------------
38 IMPLEMENTATION [sa1100]:
39
40 IMPLEMENT inline
41 template< unsigned long Hw_regs_base >
42 void Sa1100_generic<Hw_regs_base>::hw_reg( Mword value, Mword reg )
43 {
44   *(Mword volatile*)reg = value;
45 }
46
47 IMPLEMENT inline
48 template< unsigned long Hw_regs_base >
49 Mword Sa1100_generic<Hw_regs_base>::hw_reg( Mword reg )
50 {
51   return *(Mword volatile*)reg;
52 }
53