1*74a4d8c2SCharles.Forsyth /* 2*74a4d8c2SCharles.Forsyth * Definitions for IO devices. Used only in C. 3*74a4d8c2SCharles.Forsyth */ 4*74a4d8c2SCharles.Forsyth 5*74a4d8c2SCharles.Forsyth enum 6*74a4d8c2SCharles.Forsyth { 7*74a4d8c2SCharles.Forsyth /* hardware counter frequency */ 8*74a4d8c2SCharles.Forsyth ClockFreq= 3686400, 9*74a4d8c2SCharles.Forsyth }; 10*74a4d8c2SCharles.Forsyth 11*74a4d8c2SCharles.Forsyth /* 12*74a4d8c2SCharles.Forsyth * IRQ's defined by SA1100 13*74a4d8c2SCharles.Forsyth */ 14*74a4d8c2SCharles.Forsyth enum 15*74a4d8c2SCharles.Forsyth { 16*74a4d8c2SCharles.Forsyth IRQgpio0= 0, 17*74a4d8c2SCharles.Forsyth IRQgpio1= 1, 18*74a4d8c2SCharles.Forsyth IRQgpio2= 2, 19*74a4d8c2SCharles.Forsyth IRQgpio3= 3, 20*74a4d8c2SCharles.Forsyth IRQgpio4= 4, 21*74a4d8c2SCharles.Forsyth IRQgpio5= 5, 22*74a4d8c2SCharles.Forsyth IRQgpio6= 6, 23*74a4d8c2SCharles.Forsyth IRQgpio7= 7, 24*74a4d8c2SCharles.Forsyth IRQgpio8= 8, 25*74a4d8c2SCharles.Forsyth IRQgpio9= 9, 26*74a4d8c2SCharles.Forsyth IRQgpio10= 10, 27*74a4d8c2SCharles.Forsyth IRQgpiohi= 11, 28*74a4d8c2SCharles.Forsyth IRQlcd= 12, 29*74a4d8c2SCharles.Forsyth IRQudc= 13, 30*74a4d8c2SCharles.Forsyth IRQuart1b= 15, 31*74a4d8c2SCharles.Forsyth IRQuart2= 16, 32*74a4d8c2SCharles.Forsyth IRQuart3= 17, 33*74a4d8c2SCharles.Forsyth IRQmcp= 18, 34*74a4d8c2SCharles.Forsyth IRQssp= 19, 35*74a4d8c2SCharles.Forsyth IRQdma0= 20, 36*74a4d8c2SCharles.Forsyth IRQdma1= 21, 37*74a4d8c2SCharles.Forsyth IRQdma2= 22, 38*74a4d8c2SCharles.Forsyth IRQdma3= 23, 39*74a4d8c2SCharles.Forsyth IRQdma4= 24, 40*74a4d8c2SCharles.Forsyth IRQdma5= 25, 41*74a4d8c2SCharles.Forsyth IRQtimer0= 26, 42*74a4d8c2SCharles.Forsyth IRQtimer1= 27, 43*74a4d8c2SCharles.Forsyth IRQtimer2= 28, 44*74a4d8c2SCharles.Forsyth IRQtimer3= 29, 45*74a4d8c2SCharles.Forsyth IRQsecond= 30, 46*74a4d8c2SCharles.Forsyth IRQrtc= 31, 47*74a4d8c2SCharles.Forsyth }; 48*74a4d8c2SCharles.Forsyth 49*74a4d8c2SCharles.Forsyth /* 50*74a4d8c2SCharles.Forsyth * GPIO lines (signal names from compaq document). _i indicates input 51*74a4d8c2SCharles.Forsyth * and _o output. 52*74a4d8c2SCharles.Forsyth */ 53*74a4d8c2SCharles.Forsyth enum 54*74a4d8c2SCharles.Forsyth { 55*74a4d8c2SCharles.Forsyth GPIO_PWR_ON_i= 1<<0, /* power button */ 56*74a4d8c2SCharles.Forsyth GPIO_UP_IRQ_i= 1<<1, /* microcontroller interrupts */ 57*74a4d8c2SCharles.Forsyth GPIO_LDD8_o= 1<<2, /* LCD data 8-15 */ 58*74a4d8c2SCharles.Forsyth GPIO_LDD9_o= 1<<3, 59*74a4d8c2SCharles.Forsyth GPIO_LDD10_o= 1<<4, 60*74a4d8c2SCharles.Forsyth GPIO_LDD11_o= 1<<5, 61*74a4d8c2SCharles.Forsyth GPIO_LDD12_o= 1<<6, 62*74a4d8c2SCharles.Forsyth GPIO_LDD13_o= 1<<7, 63*74a4d8c2SCharles.Forsyth GPIO_LDD14_o= 1<<8, 64*74a4d8c2SCharles.Forsyth GPIO_LDD15_o= 1<<9, 65*74a4d8c2SCharles.Forsyth GPIO_CARD_IND1_i= 1<<10, /* card inserted in PCMCIA socket 1 */ 66*74a4d8c2SCharles.Forsyth GPIO_CARD_IRQ1_i= 1<<11, /* PCMCIA socket 1 interrupt */ 67*74a4d8c2SCharles.Forsyth GPIO_CLK_SET0_o= 1<<12, /* clock selects for audio codec */ 68*74a4d8c2SCharles.Forsyth GPIO_CLK_SET1_o= 1<<13, 69*74a4d8c2SCharles.Forsyth GPIO_L3_SDA_io= 1<<14, /* UDA1341 interface */ 70*74a4d8c2SCharles.Forsyth GPIO_L3_MODE_o= 1<<15, 71*74a4d8c2SCharles.Forsyth GPIO_L3_SCLK_o= 1<<16, 72*74a4d8c2SCharles.Forsyth GPIO_CARD_IND0_i= 1<<17, /* card inserted in PCMCIA socket 0 */ 73*74a4d8c2SCharles.Forsyth GPIO_KEY_ACT_i= 1<<18, /* hot key from cradle */ 74*74a4d8c2SCharles.Forsyth GPIO_SYS_CLK_i= 1<<19, /* clock from codec */ 75*74a4d8c2SCharles.Forsyth GPIO_BAT_FAULT_i= 1<<20, /* battery fault */ 76*74a4d8c2SCharles.Forsyth GPIO_CARD_IRQ0_i= 1<<21, /* PCMCIA socket 0 interrupt */ 77*74a4d8c2SCharles.Forsyth GPIO_LOCK_i= 1<<22, /* expansion pack lock/unlock */ 78*74a4d8c2SCharles.Forsyth GPIO_COM_DCD_i= 1<<23, /* DCD from UART3 */ 79*74a4d8c2SCharles.Forsyth GPIO_OPT_IRQ_i= 1<<24, /* expansion pack IRQ */ 80*74a4d8c2SCharles.Forsyth GPIO_COM_CTS_i= 1<<25, /* CTS from UART3 */ 81*74a4d8c2SCharles.Forsyth GPIO_COM_RTS_o= 1<<26, /* RTS to UART3 */ 82*74a4d8c2SCharles.Forsyth GPIO_OPT_IND_i= 1<<27, /* expansion pack inserted */ 83*74a4d8c2SCharles.Forsyth 84*74a4d8c2SCharles.Forsyth /* Peripheral Unit GPIO pin assignments: alternate functions */ 85*74a4d8c2SCharles.Forsyth GPIO_SSP_TXD_o= 1<<10, /* SSP Transmit Data */ 86*74a4d8c2SCharles.Forsyth GPIO_SSP_RXD_i= 1<<11, /* SSP Receive Data */ 87*74a4d8c2SCharles.Forsyth GPIO_SSP_SCLK_o= 1<<12, /* SSP Sample CLocK */ 88*74a4d8c2SCharles.Forsyth GPIO_SSP_SFRM_o= 1<<13, /* SSP Sample FRaMe */ 89*74a4d8c2SCharles.Forsyth /* ser. port 1: */ 90*74a4d8c2SCharles.Forsyth GPIO_UART_TXD_o= 1<<14, /* UART Transmit Data */ 91*74a4d8c2SCharles.Forsyth GPIO_UART_RXD_i= 1<<15, /* UART Receive Data */ 92*74a4d8c2SCharles.Forsyth GPIO_SDLC_SCLK_io= 1<<16, /* SDLC Sample CLocK (I/O) */ 93*74a4d8c2SCharles.Forsyth GPIO_SDLC_AAF_o= 1<<17, /* SDLC Abort After Frame */ 94*74a4d8c2SCharles.Forsyth GPIO_UART_SCLK1_i= 1<<18, /* UART Sample CLocK 1 */ 95*74a4d8c2SCharles.Forsyth /* ser. port 4: */ 96*74a4d8c2SCharles.Forsyth GPIO_SSP_CLK_i= 1<<19, /* SSP external CLocK */ 97*74a4d8c2SCharles.Forsyth /* ser. port 3: */ 98*74a4d8c2SCharles.Forsyth GPIO_UART_SCLK3_i= 1<<20, /* UART Sample CLocK 3 */ 99*74a4d8c2SCharles.Forsyth /* ser. port 4: */ 100*74a4d8c2SCharles.Forsyth GPIO_MCP_CLK_i= 1<<21, /* MCP CLocK */ 101*74a4d8c2SCharles.Forsyth /* test controller: */ 102*74a4d8c2SCharles.Forsyth GPIO_TIC_ACK_o= 1<<21, /* TIC ACKnowledge */ 103*74a4d8c2SCharles.Forsyth GPIO_MBGNT_o= 1<<21, /* Memory Bus GraNT */ 104*74a4d8c2SCharles.Forsyth GPIO_TREQA_i= 1<<22, /* TIC REQuest A */ 105*74a4d8c2SCharles.Forsyth GPIO_MBREQ_i= 1<<22, /* Memory Bus REQuest */ 106*74a4d8c2SCharles.Forsyth GPIO_TREQB_i= 1<<23, /* TIC REQuest B */ 107*74a4d8c2SCharles.Forsyth GPIO_1Hz_o= 1<<25, /* 1 Hz clock */ 108*74a4d8c2SCharles.Forsyth GPIO_RCLK_o= 1<<26, /* internal (R) CLocK (O, fcpu/2) */ 109*74a4d8c2SCharles.Forsyth GPIO_32_768kHz_o= 1<<27, /* 32.768 kHz clock (O, RTC) */ 110*74a4d8c2SCharles.Forsyth }; 111*74a4d8c2SCharles.Forsyth 112*74a4d8c2SCharles.Forsyth /* 113*74a4d8c2SCharles.Forsyth * types of interrupts 114*74a4d8c2SCharles.Forsyth */ 115*74a4d8c2SCharles.Forsyth enum 116*74a4d8c2SCharles.Forsyth { 117*74a4d8c2SCharles.Forsyth GPIOrising, 118*74a4d8c2SCharles.Forsyth GPIOfalling, 119*74a4d8c2SCharles.Forsyth GPIOboth, 120*74a4d8c2SCharles.Forsyth IRQ, 121*74a4d8c2SCharles.Forsyth }; 122*74a4d8c2SCharles.Forsyth 123*74a4d8c2SCharles.Forsyth /* hardware registers */ 124*74a4d8c2SCharles.Forsyth typedef struct Uartregs Uartregs; 125*74a4d8c2SCharles.Forsyth struct Uartregs 126*74a4d8c2SCharles.Forsyth { 127*74a4d8c2SCharles.Forsyth ulong ctl[4]; 128*74a4d8c2SCharles.Forsyth ulong dummya; 129*74a4d8c2SCharles.Forsyth ulong data; 130*74a4d8c2SCharles.Forsyth ulong dummyb; 131*74a4d8c2SCharles.Forsyth ulong status[2]; 132*74a4d8c2SCharles.Forsyth }; 133*74a4d8c2SCharles.Forsyth Uartregs *uart3regs; 134*74a4d8c2SCharles.Forsyth 135*74a4d8c2SCharles.Forsyth /* general purpose I/O lines control registers */ 136*74a4d8c2SCharles.Forsyth typedef struct GPIOregs GPIOregs; 137*74a4d8c2SCharles.Forsyth struct GPIOregs 138*74a4d8c2SCharles.Forsyth { 139*74a4d8c2SCharles.Forsyth ulong level; /* 1 == high */ 140*74a4d8c2SCharles.Forsyth ulong direction; /* 1 == output */ 141*74a4d8c2SCharles.Forsyth ulong set; /* a 1 sets the bit, 0 leaves it alone */ 142*74a4d8c2SCharles.Forsyth ulong clear; /* a 1 clears the bit, 0 leaves it alone */ 143*74a4d8c2SCharles.Forsyth ulong rising; /* rising edge detect enable */ 144*74a4d8c2SCharles.Forsyth ulong falling; /* falling edge detect enable */ 145*74a4d8c2SCharles.Forsyth ulong edgestatus; /* writing a 1 bit clears */ 146*74a4d8c2SCharles.Forsyth ulong altfunc; /* turn on alternate function for any set bits */ 147*74a4d8c2SCharles.Forsyth }; 148*74a4d8c2SCharles.Forsyth 149*74a4d8c2SCharles.Forsyth extern GPIOregs *gpioregs; 150*74a4d8c2SCharles.Forsyth 151*74a4d8c2SCharles.Forsyth /* extra general purpose I/O bits, output only */ 152*74a4d8c2SCharles.Forsyth enum 153*74a4d8c2SCharles.Forsyth { 154*74a4d8c2SCharles.Forsyth EGPIO_prog_flash= 1<<0, 155*74a4d8c2SCharles.Forsyth EGPIO_pcmcia_reset= 1<<1, 156*74a4d8c2SCharles.Forsyth EGPIO_exppack_reset= 1<<2, 157*74a4d8c2SCharles.Forsyth EGPIO_codec_reset= 1<<3, 158*74a4d8c2SCharles.Forsyth EGPIO_exp_nvram_power= 1<<4, 159*74a4d8c2SCharles.Forsyth EGPIO_exp_full_power= 1<<5, 160*74a4d8c2SCharles.Forsyth EGPIO_lcd_3v= 1<<6, 161*74a4d8c2SCharles.Forsyth EGPIO_rs232_power= 1<<7, 162*74a4d8c2SCharles.Forsyth EGPIO_lcd_ic_power= 1<<8, 163*74a4d8c2SCharles.Forsyth EGPIO_ir_power= 1<<9, 164*74a4d8c2SCharles.Forsyth EGPIO_audio_power= 1<<10, 165*74a4d8c2SCharles.Forsyth EGPIO_audio_ic_power= 1<<11, 166*74a4d8c2SCharles.Forsyth EGPIO_audio_mute= 1<<12, 167*74a4d8c2SCharles.Forsyth EGPIO_fir= 1<<13, /* not set is sir */ 168*74a4d8c2SCharles.Forsyth EGPIO_lcd_5v= 1<<14, 169*74a4d8c2SCharles.Forsyth EGPIO_lcd_9v= 1<<15, 170*74a4d8c2SCharles.Forsyth }; 171*74a4d8c2SCharles.Forsyth extern ulong *egpioreg; 172*74a4d8c2SCharles.Forsyth 173*74a4d8c2SCharles.Forsyth /* Peripheral pin controller registers */ 174*74a4d8c2SCharles.Forsyth typedef struct PPCregs PPCregs; 175*74a4d8c2SCharles.Forsyth struct PPCregs { 176*74a4d8c2SCharles.Forsyth ulong direction; 177*74a4d8c2SCharles.Forsyth ulong state; 178*74a4d8c2SCharles.Forsyth ulong assignment; 179*74a4d8c2SCharles.Forsyth ulong sleepdir; 180*74a4d8c2SCharles.Forsyth ulong flags; 181*74a4d8c2SCharles.Forsyth }; 182*74a4d8c2SCharles.Forsyth extern PPCregs *ppcregs; 183*74a4d8c2SCharles.Forsyth 184*74a4d8c2SCharles.Forsyth /* Synchronous Serial Port controller registers */ 185*74a4d8c2SCharles.Forsyth typedef struct SSPregs SSPregs; 186*74a4d8c2SCharles.Forsyth struct SSPregs { 187*74a4d8c2SCharles.Forsyth ulong control0; 188*74a4d8c2SCharles.Forsyth ulong control1; 189*74a4d8c2SCharles.Forsyth ulong dummy0; 190*74a4d8c2SCharles.Forsyth ulong data; 191*74a4d8c2SCharles.Forsyth ulong dummy1; 192*74a4d8c2SCharles.Forsyth ulong status; 193*74a4d8c2SCharles.Forsyth }; 194*74a4d8c2SCharles.Forsyth extern SSPregs *sspregs; 195*74a4d8c2SCharles.Forsyth 196*74a4d8c2SCharles.Forsyth /* Multimedia Communications Port controller registers */ 197*74a4d8c2SCharles.Forsyth typedef struct MCPregs MCPregs; 198*74a4d8c2SCharles.Forsyth struct MCPregs { 199*74a4d8c2SCharles.Forsyth ulong control0; 200*74a4d8c2SCharles.Forsyth ulong reserved0; 201*74a4d8c2SCharles.Forsyth ulong data0; 202*74a4d8c2SCharles.Forsyth ulong data1; 203*74a4d8c2SCharles.Forsyth ulong data2; 204*74a4d8c2SCharles.Forsyth ulong reserved1; 205*74a4d8c2SCharles.Forsyth ulong status; 206*74a4d8c2SCharles.Forsyth ulong reserved[11]; 207*74a4d8c2SCharles.Forsyth ulong control1; 208*74a4d8c2SCharles.Forsyth }; 209*74a4d8c2SCharles.Forsyth extern MCPregs *mcpregs; 210*74a4d8c2SCharles.Forsyth 211*74a4d8c2SCharles.Forsyth /* 212*74a4d8c2SCharles.Forsyth * memory configuration 213*74a4d8c2SCharles.Forsyth */ 214*74a4d8c2SCharles.Forsyth enum 215*74a4d8c2SCharles.Forsyth { 216*74a4d8c2SCharles.Forsyth /* bit shifts for pcmcia access time counters */ 217*74a4d8c2SCharles.Forsyth MECR_io0= 0, 218*74a4d8c2SCharles.Forsyth MECR_attr0= 5, 219*74a4d8c2SCharles.Forsyth MECR_mem0= 10, 220*74a4d8c2SCharles.Forsyth MECR_fast0= 11, 221*74a4d8c2SCharles.Forsyth MECR_io1= MECR_io0+16, 222*74a4d8c2SCharles.Forsyth MECR_attr1= MECR_attr0+16, 223*74a4d8c2SCharles.Forsyth MECR_mem1= MECR_mem0+16, 224*74a4d8c2SCharles.Forsyth MECR_fast1= MECR_fast0+16, 225*74a4d8c2SCharles.Forsyth }; 226*74a4d8c2SCharles.Forsyth 227*74a4d8c2SCharles.Forsyth typedef struct MemConfRegs MemConfRegs; 228*74a4d8c2SCharles.Forsyth struct MemConfRegs 229*74a4d8c2SCharles.Forsyth { 230*74a4d8c2SCharles.Forsyth ulong mdcnfg; /* dram */ 231*74a4d8c2SCharles.Forsyth ulong mdcas00; /* dram banks 0/1 */ 232*74a4d8c2SCharles.Forsyth ulong mdcas01; 233*74a4d8c2SCharles.Forsyth ulong mdcas02; 234*74a4d8c2SCharles.Forsyth ulong msc0; /* static */ 235*74a4d8c2SCharles.Forsyth ulong msc1; 236*74a4d8c2SCharles.Forsyth ulong mecr; /* pcmcia */ 237*74a4d8c2SCharles.Forsyth ulong mdrefr; /* dram refresh */ 238*74a4d8c2SCharles.Forsyth ulong mdcas20; /* dram banks 2/3 */ 239*74a4d8c2SCharles.Forsyth ulong mdcas21; 240*74a4d8c2SCharles.Forsyth ulong mdcas22; 241*74a4d8c2SCharles.Forsyth ulong msc2; /* static */ 242*74a4d8c2SCharles.Forsyth ulong smcnfg; /* SMROM config */ 243*74a4d8c2SCharles.Forsyth }; 244*74a4d8c2SCharles.Forsyth extern MemConfRegs *memconfregs; 245*74a4d8c2SCharles.Forsyth 246*74a4d8c2SCharles.Forsyth /* 247*74a4d8c2SCharles.Forsyth * power management 248*74a4d8c2SCharles.Forsyth */ 249*74a4d8c2SCharles.Forsyth typedef struct PowerRegs PowerRegs; 250*74a4d8c2SCharles.Forsyth struct PowerRegs 251*74a4d8c2SCharles.Forsyth { 252*74a4d8c2SCharles.Forsyth ulong pmcr; /* Power manager control register */ 253*74a4d8c2SCharles.Forsyth ulong pssr; /* Power manager sleep status register */ 254*74a4d8c2SCharles.Forsyth ulong pspr; /* Power manager scratch pad register */ 255*74a4d8c2SCharles.Forsyth ulong pwer; /* Power manager wakeup enable register */ 256*74a4d8c2SCharles.Forsyth ulong pcfr; /* Power manager general configuration register */ 257*74a4d8c2SCharles.Forsyth ulong ppcr; /* Power manager PPL configuration register */ 258*74a4d8c2SCharles.Forsyth ulong pgsr; /* Power manager GPIO sleep state register */ 259*74a4d8c2SCharles.Forsyth ulong posr; /* Power manager oscillator status register */ 260*74a4d8c2SCharles.Forsyth }; 261*74a4d8c2SCharles.Forsyth extern PowerRegs *powerregs; 262