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