xref: /inferno-os/os/ks32/io.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth /*
2*74a4d8c2SCharles.Forsyth  * Memory Map for Samsung ks32c50100
3*74a4d8c2SCharles.Forsyth  */
4*74a4d8c2SCharles.Forsyth 
5*74a4d8c2SCharles.Forsyth #define SFRbase	0x7ff0000
6*74a4d8c2SCharles.Forsyth 
7*74a4d8c2SCharles.Forsyth #define SYSCFG	(*(ulong *)(SFRbase + 0))
8*74a4d8c2SCharles.Forsyth 
9*74a4d8c2SCharles.Forsyth #define IOPbase	(SFRbase + 0x5000)
10*74a4d8c2SCharles.Forsyth #define IOPMOD	(*(ulong *)(IOPbase + 0))
11*74a4d8c2SCharles.Forsyth #define IOPCON	(*(ulong *)(IOPbase + 4))
12*74a4d8c2SCharles.Forsyth #define IOPDATA	(*(ulong *)(IOPbase + 8))
13*74a4d8c2SCharles.Forsyth 
14*74a4d8c2SCharles.Forsyth #define MaxIRQbit		20			/* Maximum IRQ */
15*74a4d8c2SCharles.Forsyth #define EXT0bit		0
16*74a4d8c2SCharles.Forsyth #define EXT1bit		1
17*74a4d8c2SCharles.Forsyth #define EXT2bit		2
18*74a4d8c2SCharles.Forsyth #define EXT3bit		3
19*74a4d8c2SCharles.Forsyth #define UART0TXbit		4
20*74a4d8c2SCharles.Forsyth #define UART0RXbit		5
21*74a4d8c2SCharles.Forsyth #define UART1TXbit		6
22*74a4d8c2SCharles.Forsyth #define UART1RXbit		7
23*74a4d8c2SCharles.Forsyth #define GDMA0		8
24*74a4d8c2SCharles.Forsyth #define GDMA1		9
25*74a4d8c2SCharles.Forsyth #define TIMER0bit		10
26*74a4d8c2SCharles.Forsyth #define TIMER1bit		11
27*74a4d8c2SCharles.Forsyth #define HDLCATXbit		12
28*74a4d8c2SCharles.Forsyth #define HDLCARXbit		13
29*74a4d8c2SCharles.Forsyth #define HDLCBTXbit		14
30*74a4d8c2SCharles.Forsyth #define HDLCBRXbit		15
31*74a4d8c2SCharles.Forsyth #define ETHBDMATXbit	16
32*74a4d8c2SCharles.Forsyth #define ETHBDMARXbit	17
33*74a4d8c2SCharles.Forsyth #define ETHMACRXint	18
34*74a4d8c2SCharles.Forsyth #define ETHMAXTXint	19
35*74a4d8c2SCharles.Forsyth #define IICbit			20
36*74a4d8c2SCharles.Forsyth 
37*74a4d8c2SCharles.Forsyth #define TIMERbit(n) 		(TIMER0bit + n)
38*74a4d8c2SCharles.Forsyth #define UARTTXbit(n)	(UART0TXbit + (n) * 2)
39*74a4d8c2SCharles.Forsyth #define UARTRXbit(n)	(UART0RXbit + (n) * 2)
40*74a4d8c2SCharles.Forsyth 
41*74a4d8c2SCharles.Forsyth /*
42*74a4d8c2SCharles.Forsyth   * Interrupt controller
43*74a4d8c2SCharles.Forsyth   */
44*74a4d8c2SCharles.Forsyth 
45*74a4d8c2SCharles.Forsyth #define INTbase	(SFRbase + 0x4000)
46*74a4d8c2SCharles.Forsyth #define INTREG	((IntReg *)INTbase)
47*74a4d8c2SCharles.Forsyth 
48*74a4d8c2SCharles.Forsyth typedef struct IntReg IntReg;
49*74a4d8c2SCharles.Forsyth struct IntReg {
50*74a4d8c2SCharles.Forsyth 	ulong	mod;		/* 00 */
51*74a4d8c2SCharles.Forsyth 	ulong	pnd;			/* 04 */
52*74a4d8c2SCharles.Forsyth 	ulong	msk;			/* 08 */
53*74a4d8c2SCharles.Forsyth 	ulong	pri[6];		/* 0c */
54*74a4d8c2SCharles.Forsyth 	ulong	offset;		/* 24 */
55*74a4d8c2SCharles.Forsyth 	ulong	pndpri;		/* 28 */
56*74a4d8c2SCharles.Forsyth 	ulong	pndtst;		/* 2c */
57*74a4d8c2SCharles.Forsyth 	ulong	oset_fiq;		/* 30 */
58*74a4d8c2SCharles.Forsyth 	ulong	oset_irq;		/* 34 */
59*74a4d8c2SCharles.Forsyth };
60*74a4d8c2SCharles.Forsyth 
61*74a4d8c2SCharles.Forsyth /*
62*74a4d8c2SCharles.Forsyth   * UARTs
63*74a4d8c2SCharles.Forsyth   */
64*74a4d8c2SCharles.Forsyth #define UART0base	(SFRbase + 0xd000)
65*74a4d8c2SCharles.Forsyth #define UART1base	(SFRbase + 0xe000)
66*74a4d8c2SCharles.Forsyth #define UARTREG	((UartReg *)UART0base)
67*74a4d8c2SCharles.Forsyth 
68*74a4d8c2SCharles.Forsyth typedef struct UartReg UartReg;
69*74a4d8c2SCharles.Forsyth struct UartReg {
70*74a4d8c2SCharles.Forsyth 	ulong	lcon;		/* 00 */
71*74a4d8c2SCharles.Forsyth 	ulong	con;		/* 04 */
72*74a4d8c2SCharles.Forsyth 	ulong	stat;		/* 08 */
73*74a4d8c2SCharles.Forsyth 	ulong	txbuf;	/* 0c */
74*74a4d8c2SCharles.Forsyth 	ulong	rxbuf;	/* 10 */
75*74a4d8c2SCharles.Forsyth 	ulong	brdiv;	/* 14 */
76*74a4d8c2SCharles.Forsyth 	ulong	pad[(UART1base - UART0base - 0x18) / 4];
77*74a4d8c2SCharles.Forsyth };
78*74a4d8c2SCharles.Forsyth 
79*74a4d8c2SCharles.Forsyth #define ULCON_WLMASK		0x03
80*74a4d8c2SCharles.Forsyth #define ULCON_WL5		0x00
81*74a4d8c2SCharles.Forsyth #define ULCON_WL6		0x01
82*74a4d8c2SCharles.Forsyth #define ULCON_WL7		0x02
83*74a4d8c2SCharles.Forsyth #define ULCON_WL8		0x03
84*74a4d8c2SCharles.Forsyth 
85*74a4d8c2SCharles.Forsyth #define ULCON_STOPMASK	0x04
86*74a4d8c2SCharles.Forsyth #define ULCON_STOP1		0x00
87*74a4d8c2SCharles.Forsyth #define ULCON_STOP2		0x04
88*74a4d8c2SCharles.Forsyth 
89*74a4d8c2SCharles.Forsyth #define ULCON_PMDMASK	0x38
90*74a4d8c2SCharles.Forsyth #define ULCON_PMDNONE	0x00
91*74a4d8c2SCharles.Forsyth #define ULCON_PMDODD	(4 << 3)
92*74a4d8c2SCharles.Forsyth #define ULCON_PMDEVEN	(5 << 3)
93*74a4d8c2SCharles.Forsyth #define ULCON_PMDFORCE1	(6 << 3)
94*74a4d8c2SCharles.Forsyth #define ULCON_PMDFORCE0	(7 << 3)
95*74a4d8c2SCharles.Forsyth 
96*74a4d8c2SCharles.Forsyth #define ULCON_CLOCKMASK	0x40
97*74a4d8c2SCharles.Forsyth #define ULCON_CLOCKMCLK	0x00
98*74a4d8c2SCharles.Forsyth #define ULCON_CLOCKUCLK	(1 << 6)
99*74a4d8c2SCharles.Forsyth 
100*74a4d8c2SCharles.Forsyth #define ULCON_IRMASK		0x80
101*74a4d8c2SCharles.Forsyth #define ULCON_IROFF		0x00
102*74a4d8c2SCharles.Forsyth #define ULCON_IRON		0x80
103*74a4d8c2SCharles.Forsyth 
104*74a4d8c2SCharles.Forsyth #define UCON_RXMDMASK	0x03
105*74a4d8c2SCharles.Forsyth #define UCON_RXMDOFF		0x00
106*74a4d8c2SCharles.Forsyth #define UCON_RXMDINT		0x01
107*74a4d8c2SCharles.Forsyth #define UCON_RXMDGDMA0	0x02
108*74a4d8c2SCharles.Forsyth #define UCON_RXMDGDMA1	0x03
109*74a4d8c2SCharles.Forsyth 
110*74a4d8c2SCharles.Forsyth #define UCON_SINTMASK	0x04
111*74a4d8c2SCharles.Forsyth #define UCON_SINTOFF		0x00
112*74a4d8c2SCharles.Forsyth #define UCON_SINTON		0x04
113*74a4d8c2SCharles.Forsyth 
114*74a4d8c2SCharles.Forsyth #define UCON_TXMDMASK	0x18
115*74a4d8c2SCharles.Forsyth #define UCON_TXMDOFF		(0 << 3)
116*74a4d8c2SCharles.Forsyth #define UCON_TXMDINT		(1 << 3)
117*74a4d8c2SCharles.Forsyth #define UCON_TXMDGDMA0	(2 << 3)
118*74a4d8c2SCharles.Forsyth #define UCON_TXMDGDMA1	(3 << 3)
119*74a4d8c2SCharles.Forsyth 
120*74a4d8c2SCharles.Forsyth #define UCON_DSRMASK		0x20
121*74a4d8c2SCharles.Forsyth #define UCON_DSRON		(1 << 5)
122*74a4d8c2SCharles.Forsyth #define UCON_DSROFF		(0 << 5)
123*74a4d8c2SCharles.Forsyth 
124*74a4d8c2SCharles.Forsyth #define UCON_BRKMASK		0x40
125*74a4d8c2SCharles.Forsyth #define UCON_BRKON		(1 << 6)
126*74a4d8c2SCharles.Forsyth #define UCON_BRKOFF		(0 << 6)
127*74a4d8c2SCharles.Forsyth 
128*74a4d8c2SCharles.Forsyth #define UCON_LOOPMASK	0x80
129*74a4d8c2SCharles.Forsyth #define UCON_LOOPON		0x80
130*74a4d8c2SCharles.Forsyth #define UCON_LOOPOFF		0x00
131*74a4d8c2SCharles.Forsyth 
132*74a4d8c2SCharles.Forsyth #define USTAT_OV			0x01
133*74a4d8c2SCharles.Forsyth #define USTAT_PE			0x02
134*74a4d8c2SCharles.Forsyth #define USTAT_FE			0x04
135*74a4d8c2SCharles.Forsyth #define USTAT_BKD			0x08
136*74a4d8c2SCharles.Forsyth #define USTAT_DTR			0x10
137*74a4d8c2SCharles.Forsyth #define USTAT_RDR			0x20
138*74a4d8c2SCharles.Forsyth #define USTAT_TBE			0x40
139*74a4d8c2SCharles.Forsyth #define USTAT_TC			0x80
140*74a4d8c2SCharles.Forsyth 
141*74a4d8c2SCharles.Forsyth /*
142*74a4d8c2SCharles.Forsyth   * Timers
143*74a4d8c2SCharles.Forsyth   */
144*74a4d8c2SCharles.Forsyth #define TIMERbase	(SFRbase + 0x6000)
145*74a4d8c2SCharles.Forsyth #define TIMERREG	((TimerReg *)TIMERbase)
146*74a4d8c2SCharles.Forsyth 
147*74a4d8c2SCharles.Forsyth typedef struct TimerReg TimerReg;
148*74a4d8c2SCharles.Forsyth struct TimerReg {
149*74a4d8c2SCharles.Forsyth 	ulong mod;
150*74a4d8c2SCharles.Forsyth 	ulong data[2];
151*74a4d8c2SCharles.Forsyth 	ulong cnt[2];
152*74a4d8c2SCharles.Forsyth };
153*74a4d8c2SCharles.Forsyth 
154*74a4d8c2SCharles.Forsyth /*
155*74a4d8c2SCharles.Forsyth  *	PC compatibility support for PCMCIA drivers
156*74a4d8c2SCharles.Forsyth  */
157*74a4d8c2SCharles.Forsyth 
158*74a4d8c2SCharles.Forsyth extern ulong ins(ulong);		/* return ulong to prevent unecessary compiler shifting */
159*74a4d8c2SCharles.Forsyth void outs(ulong, int);
160*74a4d8c2SCharles.Forsyth #define inb(addr)	(*((uchar*)(addr)))
161*74a4d8c2SCharles.Forsyth #define inl(addr)	(*((ulong*)(addr)))
162*74a4d8c2SCharles.Forsyth ulong ins(ulong);
163*74a4d8c2SCharles.Forsyth #define outb(addr, val)	*((uchar*)(addr)) = (val)
164*74a4d8c2SCharles.Forsyth #define outl(addr, val)	*((ulong*)(addr)) = (val)
165*74a4d8c2SCharles.Forsyth 
166*74a4d8c2SCharles.Forsyth void inss(ulong, void*, int);
167*74a4d8c2SCharles.Forsyth void outss(ulong, void*, int);
168*74a4d8c2SCharles.Forsyth 
169