1154abd99SDavid du Colombier enum { 2154abd99SDavid du Colombier BusCBUS = 0, /* Corollary CBUS */ 3154abd99SDavid du Colombier BusCBUSII, /* Corollary CBUS II */ 4154abd99SDavid du Colombier BusEISA, /* Extended ISA */ 5154abd99SDavid du Colombier BusFUTURE, /* IEEE Futurebus */ 6154abd99SDavid du Colombier BusINTERN, /* Internal bus */ 7154abd99SDavid du Colombier BusISA, /* Industry Standard Architecture */ 8154abd99SDavid du Colombier BusMBI, /* Multibus I */ 9154abd99SDavid du Colombier BusMBII, /* Multibus II */ 10154abd99SDavid du Colombier BusMCA, /* Micro Channel Architecture */ 11154abd99SDavid du Colombier BusMPI, /* MPI */ 12154abd99SDavid du Colombier BusMPSA, /* MPSA */ 13154abd99SDavid du Colombier BusNUBUS, /* Apple Macintosh NuBus */ 14154abd99SDavid du Colombier BusPCI, /* Peripheral Component Interconnect */ 15154abd99SDavid du Colombier BusPCMCIA, /* PC Memory Card International Association */ 16154abd99SDavid du Colombier BusTC, /* DEC TurboChannel */ 17154abd99SDavid du Colombier BusVL, /* VESA Local bus */ 18154abd99SDavid du Colombier BusVME, /* VMEbus */ 19154abd99SDavid du Colombier BusXPRESS, /* Express System Bus */ 20154abd99SDavid du Colombier BUSUNKNOWN = -1 21154abd99SDavid du Colombier }; 22154abd99SDavid du Colombier 23154abd99SDavid du Colombier #define MKBUS(t,b,d,f) (((t)<<24)|(((b)&0xFF)<<16)|(((d)&0x1F)<<11)|(((f)&0x07)<<8)) 24154abd99SDavid du Colombier #define BUSFNO(tbdf) (((tbdf)>>8)&0x07) 25154abd99SDavid du Colombier #define BUSDNO(tbdf) (((tbdf)>>11)&0x1F) 26154abd99SDavid du Colombier #define BUSBNO(tbdf) (((tbdf)>>16)&0xFF) 27154abd99SDavid du Colombier #define BUSTYPE(tbdf) ((tbdf)>>24) 28154abd99SDavid du Colombier #define BUSBDF(tbdf) ((tbdf)&0x00FFFF00) 29154abd99SDavid du Colombier 30154abd99SDavid du Colombier /* 31154abd99SDavid du Colombier * PCI support code. 32154abd99SDavid du Colombier */ 33154abd99SDavid du Colombier enum { /* type 0 & type 1 pre-defined header */ 34154abd99SDavid du Colombier PciVID = 0x00, /* vendor ID */ 35154abd99SDavid du Colombier PciDID = 0x02, /* device ID */ 36154abd99SDavid du Colombier PciPCR = 0x04, /* command */ 37154abd99SDavid du Colombier PciPSR = 0x06, /* status */ 38154abd99SDavid du Colombier PciRID = 0x08, /* revision ID */ 39154abd99SDavid du Colombier PciCCRp = 0x09, /* programming interface class code */ 40154abd99SDavid du Colombier PciCCRu = 0x0A, /* sub-class code */ 41154abd99SDavid du Colombier PciCCRb = 0x0B, /* base class code */ 42154abd99SDavid du Colombier PciCLS = 0x0C, /* cache line size */ 43154abd99SDavid du Colombier PciLTR = 0x0D, /* latency timer */ 44154abd99SDavid du Colombier PciHDT = 0x0E, /* header type */ 45154abd99SDavid du Colombier PciBST = 0x0F, /* BIST */ 46154abd99SDavid du Colombier }; 47154abd99SDavid du Colombier 48154abd99SDavid du Colombier /* ccrb (base class code) values; controller types */ 49154abd99SDavid du Colombier enum { 50154abd99SDavid du Colombier Pcibcpci1 = 0, /* pci 1.0; no class codes defined */ 51154abd99SDavid du Colombier Pcibcstore = 1, /* mass storage */ 52154abd99SDavid du Colombier Pcibcnet = 2, /* network */ 53154abd99SDavid du Colombier Pcibcdisp = 3, /* display */ 54154abd99SDavid du Colombier Pcibcmmedia = 4, /* multimedia */ 55154abd99SDavid du Colombier Pcibcmem = 5, /* memory */ 56154abd99SDavid du Colombier Pcibcbridge = 6, /* bridge */ 57154abd99SDavid du Colombier Pcibccomm = 7, /* simple comms (e.g., serial) */ 58154abd99SDavid du Colombier Pcibcbasesys = 8, /* base system */ 59154abd99SDavid du Colombier Pcibcinput = 9, /* input */ 60154abd99SDavid du Colombier Pcibcdock = 0xa, /* docking stations */ 61154abd99SDavid du Colombier Pcibcproc = 0xb, /* processors */ 62154abd99SDavid du Colombier Pcibcserial = 0xc, /* serial bus (e.g., USB) */ 63154abd99SDavid du Colombier Pcibcwireless = 0xd, /* wireless */ 64154abd99SDavid du Colombier Pcibcintell = 0xe, /* intelligent i/o */ 65154abd99SDavid du Colombier Pcibcsatcom = 0xf, /* satellite comms */ 66154abd99SDavid du Colombier Pcibccrypto = 0x10, /* encryption/decryption */ 67154abd99SDavid du Colombier Pcibcdacq = 0x11, /* data acquisition & signal proc. */ 68154abd99SDavid du Colombier }; 69154abd99SDavid du Colombier 70154abd99SDavid du Colombier /* ccru (sub-class code) values; common cases only */ 71154abd99SDavid du Colombier enum { 72154abd99SDavid du Colombier /* mass storage */ 73154abd99SDavid du Colombier Pciscscsi = 0, /* SCSI */ 74154abd99SDavid du Colombier Pciscide = 1, /* IDE (ATA) */ 75154abd99SDavid du Colombier 76154abd99SDavid du Colombier /* network */ 77154abd99SDavid du Colombier Pciscether = 0, /* Ethernet */ 78154abd99SDavid du Colombier 79154abd99SDavid du Colombier /* display */ 80154abd99SDavid du Colombier Pciscvga = 0, /* VGA */ 81154abd99SDavid du Colombier Pciscxga = 1, /* XGA */ 82154abd99SDavid du Colombier Pcisc3d = 2, /* 3D */ 83154abd99SDavid du Colombier 84154abd99SDavid du Colombier /* bridges */ 85154abd99SDavid du Colombier Pcischostpci = 0, /* host/pci */ 86154abd99SDavid du Colombier Pciscpcicpci = 1, /* pci/pci */ 87154abd99SDavid du Colombier 88154abd99SDavid du Colombier /* simple comms */ 89154abd99SDavid du Colombier Pciscserial = 0, /* 16450, etc. */ 90154abd99SDavid du Colombier Pciscmultiser = 1, /* multiport serial */ 91154abd99SDavid du Colombier 92154abd99SDavid du Colombier /* serial bus */ 93154abd99SDavid du Colombier Pciscusb = 3, /* USB */ 94154abd99SDavid du Colombier }; 95154abd99SDavid du Colombier 96154abd99SDavid du Colombier enum { /* type 0 pre-defined header */ 97154abd99SDavid du Colombier PciCIS = 0x28, /* cardbus CIS pointer */ 98154abd99SDavid du Colombier PciSVID = 0x2C, /* subsystem vendor ID */ 99154abd99SDavid du Colombier PciSID = 0x2E, /* cardbus CIS pointer */ 100154abd99SDavid du Colombier PciEBAR0 = 0x30, /* expansion ROM base address */ 101154abd99SDavid du Colombier PciMGNT = 0x3E, /* burst period length */ 102154abd99SDavid du Colombier PciMLT = 0x3F, /* maximum latency between bursts */ 103154abd99SDavid du Colombier }; 104154abd99SDavid du Colombier 105154abd99SDavid du Colombier enum { /* type 1 pre-defined header */ 106154abd99SDavid du Colombier PciPBN = 0x18, /* primary bus number */ 107154abd99SDavid du Colombier PciSBN = 0x19, /* secondary bus number */ 108154abd99SDavid du Colombier PciUBN = 0x1A, /* subordinate bus number */ 109154abd99SDavid du Colombier PciSLTR = 0x1B, /* secondary latency timer */ 110154abd99SDavid du Colombier PciIBR = 0x1C, /* I/O base */ 111154abd99SDavid du Colombier PciILR = 0x1D, /* I/O limit */ 112154abd99SDavid du Colombier PciSPSR = 0x1E, /* secondary status */ 113154abd99SDavid du Colombier PciMBR = 0x20, /* memory base */ 114154abd99SDavid du Colombier PciMLR = 0x22, /* memory limit */ 115154abd99SDavid du Colombier PciPMBR = 0x24, /* prefetchable memory base */ 116154abd99SDavid du Colombier PciPMLR = 0x26, /* prefetchable memory limit */ 117154abd99SDavid du Colombier PciPUBR = 0x28, /* prefetchable base upper 32 bits */ 118154abd99SDavid du Colombier PciPULR = 0x2C, /* prefetchable limit upper 32 bits */ 119154abd99SDavid du Colombier PciIUBR = 0x30, /* I/O base upper 16 bits */ 120154abd99SDavid du Colombier PciIULR = 0x32, /* I/O limit upper 16 bits */ 121154abd99SDavid du Colombier PciEBAR1 = 0x28, /* expansion ROM base address */ 122154abd99SDavid du Colombier PciBCR = 0x3E, /* bridge control register */ 123154abd99SDavid du Colombier }; 124154abd99SDavid du Colombier 125154abd99SDavid du Colombier enum { /* type 2 pre-defined header */ 126154abd99SDavid du Colombier PciCBExCA = 0x10, 127154abd99SDavid du Colombier PciCBSPSR = 0x16, 128154abd99SDavid du Colombier PciCBPBN = 0x18, /* primary bus number */ 129154abd99SDavid du Colombier PciCBSBN = 0x19, /* secondary bus number */ 130154abd99SDavid du Colombier PciCBUBN = 0x1A, /* subordinate bus number */ 131154abd99SDavid du Colombier PciCBSLTR = 0x1B, /* secondary latency timer */ 132154abd99SDavid du Colombier PciCBMBR0 = 0x1C, 133154abd99SDavid du Colombier PciCBMLR0 = 0x20, 134154abd99SDavid du Colombier PciCBMBR1 = 0x24, 135154abd99SDavid du Colombier PciCBMLR1 = 0x28, 136154abd99SDavid du Colombier PciCBIBR0 = 0x2C, /* I/O base */ 137154abd99SDavid du Colombier PciCBILR0 = 0x30, /* I/O limit */ 138154abd99SDavid du Colombier PciCBIBR1 = 0x34, /* I/O base */ 139154abd99SDavid du Colombier PciCBILR1 = 0x38, /* I/O limit */ 140154abd99SDavid du Colombier PciCBSVID = 0x40, /* subsystem vendor ID */ 141154abd99SDavid du Colombier PciCBSID = 0x42, /* subsystem ID */ 142154abd99SDavid du Colombier PciCBLMBAR = 0x44, /* legacy mode base address */ 143154abd99SDavid du Colombier }; 144154abd99SDavid du Colombier 145154abd99SDavid du Colombier typedef struct Pcisiz Pcisiz; 146154abd99SDavid du Colombier struct Pcisiz 147154abd99SDavid du Colombier { 148154abd99SDavid du Colombier Pcidev* dev; 149154abd99SDavid du Colombier int siz; 150154abd99SDavid du Colombier int bar; 151154abd99SDavid du Colombier }; 152154abd99SDavid du Colombier 153154abd99SDavid du Colombier typedef struct Pcidev Pcidev; 154154abd99SDavid du Colombier struct Pcidev 155154abd99SDavid du Colombier { 156154abd99SDavid du Colombier int tbdf; /* type+bus+device+function */ 157154abd99SDavid du Colombier ushort vid; /* vendor ID */ 158154abd99SDavid du Colombier ushort did; /* device ID */ 159154abd99SDavid du Colombier 160154abd99SDavid du Colombier ushort pcr; 161154abd99SDavid du Colombier 162154abd99SDavid du Colombier uchar rid; 163154abd99SDavid du Colombier uchar ccrp; 164154abd99SDavid du Colombier uchar ccru; 165154abd99SDavid du Colombier uchar ccrb; 166154abd99SDavid du Colombier uchar cls; 167154abd99SDavid du Colombier uchar ltr; 168154abd99SDavid du Colombier 169154abd99SDavid du Colombier struct { 170154abd99SDavid du Colombier ulong bar; /* base address */ 171154abd99SDavid du Colombier int size; 172154abd99SDavid du Colombier } mem[6]; 173154abd99SDavid du Colombier 174154abd99SDavid du Colombier struct { 175154abd99SDavid du Colombier ulong bar; 176154abd99SDavid du Colombier int size; 177154abd99SDavid du Colombier } rom; 178154abd99SDavid du Colombier uchar intl; /* interrupt line */ 179154abd99SDavid du Colombier 180154abd99SDavid du Colombier Pcidev* list; 181154abd99SDavid du Colombier Pcidev* link; /* next device on this bno */ 182154abd99SDavid du Colombier 183154abd99SDavid du Colombier Pcidev* bridge; /* down a bus */ 184154abd99SDavid du Colombier struct { 185154abd99SDavid du Colombier ulong bar; 186154abd99SDavid du Colombier int size; 187154abd99SDavid du Colombier } ioa, mema; 188154abd99SDavid du Colombier 189154abd99SDavid du Colombier int pmrb; /* power management register block */ 190154abd99SDavid du Colombier }; 191154abd99SDavid du Colombier 192154abd99SDavid du Colombier #define PCIWINDOW 0 193154abd99SDavid du Colombier #define PCIWADDR(va) (PADDR(va)+PCIWINDOW) 194154abd99SDavid du Colombier 195154abd99SDavid du Colombier /* 1965e27dea9SDavid du Colombier * Kirkwood stuff 197154abd99SDavid du Colombier */ 198154abd99SDavid du Colombier 199154abd99SDavid du Colombier enum { 2008a12d8dfSDavid du Colombier AddrEfuse = PHYSIO+0x1008c, 201*7365b686SDavid du Colombier Addrpci = PHYSIO+0x40000, /* for registers below */ 202*7365b686SDavid du Colombier Addrpcibase = PHYSIO+0x41800, /* for registers below */ 203*7365b686SDavid du Colombier AddrMpp = PHYSIO+0x10000, 2048a12d8dfSDavid du Colombier AddrSdio = PHYSIO+0x90000, 205154abd99SDavid du Colombier }; 206154abd99SDavid du Colombier 207154abd99SDavid du Colombier enum { 208897ae9c1SDavid du Colombier Socrevz0, 209897ae9c1SDavid du Colombier Socreva0 = 2, 210897ae9c1SDavid du Colombier Socreva1, 211897ae9c1SDavid du Colombier }; 212897ae9c1SDavid du Colombier 213897ae9c1SDavid du Colombier enum { 214*7365b686SDavid du Colombier /* registers; if we actually use these, change to soc.pci(base)->reg */ 215154abd99SDavid du Colombier PciBAR0 = Addrpcibase + 4, /* base address */ 216154abd99SDavid du Colombier PciBAR1 = Addrpcibase + 8, 217154abd99SDavid du Colombier 218154abd99SDavid du Colombier PciCP = Addrpci + 0x64, /* capabilities pointer */ 219154abd99SDavid du Colombier 220154abd99SDavid du Colombier PciINTL = Addrpci + 0x3c, /* interrupt line */ 221154abd99SDavid du Colombier PciINTP = PciINTL + 1, /* interrupt pin */ 222154abd99SDavid du Colombier }; 223154abd99SDavid du Colombier 224154abd99SDavid du Colombier /* 225154abd99SDavid du Colombier * interrupt stuff 226154abd99SDavid du Colombier */ 227154abd99SDavid du Colombier 228154abd99SDavid du Colombier enum { 229154abd99SDavid du Colombier Irqlo, Irqhi, Irqbridge, 230154abd99SDavid du Colombier }; 231154abd99SDavid du Colombier 232154abd99SDavid du Colombier enum { 233154abd99SDavid du Colombier /* main interrupt cause low register bit #s (LE) */ 234154abd99SDavid du Colombier IRQ0hisum, /* summary of main intr high cause reg */ 235154abd99SDavid du Colombier IRQ0bridge, 236154abd99SDavid du Colombier IRQ0h2cdoorbell, 237154abd99SDavid du Colombier IRQ0c2hdoorbell, 238154abd99SDavid du Colombier _IRQ0reserved0, 239154abd99SDavid du Colombier IRQ0xor0chan0, 240154abd99SDavid du Colombier IRQ0xor0chan1, 241154abd99SDavid du Colombier IRQ0xor1chan0, 242154abd99SDavid du Colombier IRQ0xor1chan1, 243154abd99SDavid du Colombier IRQ0pex0int, /* pex = pci-express */ 244154abd99SDavid du Colombier _IRQ0reserved1, 245154abd99SDavid du Colombier IRQ0gbe0sum, 246154abd99SDavid du Colombier IRQ0gbe0rx, 247154abd99SDavid du Colombier IRQ0gbe0tx, 248154abd99SDavid du Colombier IRQ0gbe0misc, 249154abd99SDavid du Colombier IRQ0gbe1sum, 250154abd99SDavid du Colombier IRQ0gbe1rx, 251154abd99SDavid du Colombier IRQ0gbe1tx, 252154abd99SDavid du Colombier IRQ0gbe1misc, 253154abd99SDavid du Colombier IRQ0usb0, 254154abd99SDavid du Colombier _IRQ0reserved2, 255154abd99SDavid du Colombier IRQ0sata, 256154abd99SDavid du Colombier IRQ0crypto, 257154abd99SDavid du Colombier IRQ0spi, 258154abd99SDavid du Colombier IRQ0audio, 259154abd99SDavid du Colombier _IRQ0reserved3, 260154abd99SDavid du Colombier IRQ0ts0, 261154abd99SDavid du Colombier _IRQ0reserved4, 262154abd99SDavid du Colombier IRQ0sdio, 263154abd99SDavid du Colombier IRQ0twsi, 264154abd99SDavid du Colombier IRQ0avb, 265154abd99SDavid du Colombier IRQ0tdm, 266154abd99SDavid du Colombier 267154abd99SDavid du Colombier /* main interrupt cause high register bit #s (LE) */ 268154abd99SDavid du Colombier _IRQ1reserved0 = 0, 269154abd99SDavid du Colombier IRQ1uart0, 270154abd99SDavid du Colombier IRQ1uart1, 271154abd99SDavid du Colombier IRQ1gpiolo0, 272154abd99SDavid du Colombier IRQ1gpiolo1, 273154abd99SDavid du Colombier IRQ1gpiolo2, 274154abd99SDavid du Colombier IRQ1gpiolo3, 275154abd99SDavid du Colombier IRQ1gpiohi0, 276154abd99SDavid du Colombier IRQ1gpiohi1, 277154abd99SDavid du Colombier IRQ1gpiohi2, 278154abd99SDavid du Colombier IRQ1gpiohi3, 279154abd99SDavid du Colombier IRQ1xor0err, 280154abd99SDavid du Colombier IRQ1xor1err, 281154abd99SDavid du Colombier IRQ1pex0err, 282154abd99SDavid du Colombier _IRQ1reserved1, 283154abd99SDavid du Colombier IRQ1gbe0err, 284154abd99SDavid du Colombier IRQ1gbe1err, 285154abd99SDavid du Colombier IRQ1usberr, 286154abd99SDavid du Colombier IRQ1cryptoerr, 287154abd99SDavid du Colombier IRQ1audioerr, 288154abd99SDavid du Colombier _IRQ1reserved2, 289154abd99SDavid du Colombier _IRQ1reserved3, 290154abd99SDavid du Colombier IRQ1rtc, 291154abd99SDavid du Colombier 292154abd99SDavid du Colombier /* bridged-interrupt causes */ 293154abd99SDavid du Colombier IRQcpuself = 0, 294154abd99SDavid du Colombier IRQcputimer0, 295154abd99SDavid du Colombier IRQcputimer1, 296154abd99SDavid du Colombier IRQcputimerwd, 297304cb050SDavid du Colombier IRQaccesserr, 298154abd99SDavid du Colombier }; 299154abd99SDavid du Colombier 300154abd99SDavid du Colombier /* 301154abd99SDavid du Colombier * interrupt controller 302154abd99SDavid du Colombier */ 303154abd99SDavid du Colombier typedef struct IntrReg IntrReg; 304154abd99SDavid du Colombier struct IntrReg 305154abd99SDavid du Colombier { 306154abd99SDavid du Colombier struct { 307154abd99SDavid du Colombier ulong irq; /* main intr cause reg (ro) */ 308154abd99SDavid du Colombier ulong irqmask; 309154abd99SDavid du Colombier ulong fiqmask; 310154abd99SDavid du Colombier ulong epmask; 311154abd99SDavid du Colombier } lo, hi; 312154abd99SDavid du Colombier }; 313154abd99SDavid du Colombier 314154abd99SDavid du Colombier /* 3155e27dea9SDavid du Colombier * CPU control & status (archkw.c and trap.c) 316154abd99SDavid du Colombier */ 317154abd99SDavid du Colombier typedef struct CpucsReg CpucsReg; 318154abd99SDavid du Colombier struct CpucsReg 319154abd99SDavid du Colombier { 320154abd99SDavid du Colombier ulong cpucfg; 321154abd99SDavid du Colombier ulong cpucsr; 322154abd99SDavid du Colombier ulong rstout; 323154abd99SDavid du Colombier ulong softreset; 3245e27dea9SDavid du Colombier ulong irq; /* mbus(-l) bridge interrupt cause */ 3255e27dea9SDavid du Colombier ulong irqmask; /* ⋯ mask */ 3265e27dea9SDavid du Colombier ulong mempm; /* memory power mgmt. control */ 3275e27dea9SDavid du Colombier ulong clockgate; /* clock enable bits */ 328154abd99SDavid du Colombier ulong biu; 329154abd99SDavid du Colombier ulong pad0; 330154abd99SDavid du Colombier ulong l2cfg; /* turn l2 cache on or off, set coherency */ 331154abd99SDavid du Colombier ulong pad1[2]; 332154abd99SDavid du Colombier ulong l2tm0; 333154abd99SDavid du Colombier ulong l2tm1; 334154abd99SDavid du Colombier ulong pad2[2]; 335154abd99SDavid du Colombier ulong l2pm; 336154abd99SDavid du Colombier ulong ram0; 337154abd99SDavid du Colombier ulong ram1; 338154abd99SDavid du Colombier ulong ram2; 339154abd99SDavid du Colombier ulong ram3; 340154abd99SDavid du Colombier }; 341154abd99SDavid du Colombier 342154abd99SDavid du Colombier enum { 343154abd99SDavid du Colombier /* cpucfg bits */ 344154abd99SDavid du Colombier Cfgvecinithi = 1<<1, /* boot at 0xffff0000, not 0; default 1 */ 345154abd99SDavid du Colombier Cfgbigendreset = 3<<1, /* init. as big-endian at reset; default 0 */ 34656713243SDavid du Colombier Cfgiprefetch = 1<<16, /* instruction prefetch enable */ 34756713243SDavid du Colombier Cfgdprefetch = 1<<17, /* data prefetch enable */ 348154abd99SDavid du Colombier 3495e27dea9SDavid du Colombier /* cpucsr bits */ 350ac10c8dbSDavid du Colombier Reset = 1<<1, /* reset cpu core */ 3515e27dea9SDavid du Colombier 3525e27dea9SDavid du Colombier /* rstout bits */ 353ac10c8dbSDavid du Colombier RstoutPex = 1<<0, /* assert RSTOUTn at pci-e reset */ 354ac10c8dbSDavid du Colombier RstoutWatchdog = 1<<1, /* assert RSTOUTn at watchdog timeout */ 355ac10c8dbSDavid du Colombier RstoutSoft = 1<<2, /* assert RSTOUTn at sw reset */ 3565e27dea9SDavid du Colombier 3575e27dea9SDavid du Colombier /* softreset bits */ 358ac10c8dbSDavid du Colombier ResetSystem = 1<<0, /* assert RSTOUTn pin on SoftRstOutEn */ 3595e27dea9SDavid du Colombier 360154abd99SDavid du Colombier /* l2cfg bits */ 361154abd99SDavid du Colombier L2ecc = 1<<2, 362ffc08dc1SDavid du Colombier L2exists = 1<<3, /* l2 cache doesn't ignore cpu */ 363003c0964SDavid du Colombier L2writethru = 1<<4, /* always WT, else see PTE C & B */ 364154abd99SDavid du Colombier }; 365ec4ca6beSDavid du Colombier 366ec4ca6beSDavid du Colombier enum { 367ec4ca6beSDavid du Colombier /* from 88f6281 func'l specs (MV-S104860-00), tables 2 & 3, chapter 2 */ 368ec4ca6beSDavid du Colombier Targdram = 0, /* ddr sdram */ 369ec4ca6beSDavid du Colombier Targflash = 1, 3707bc319fbSDavid du Colombier Targcesasram = 3, /* security accelerator sram */ 371ec4ca6beSDavid du Colombier 372ec4ca6beSDavid du Colombier /* attributes */ 373ec4ca6beSDavid du Colombier Attrcs0 = 0xe, /* chip select 0 (low dram) */ 374ec4ca6beSDavid du Colombier Attrcs1 = 0xd, /* chip select 1 (high dram) */ 375ec4ca6beSDavid du Colombier Attrbootrom = 0x1d, 376ec4ca6beSDavid du Colombier Attrspi = 0x1e, 377ec4ca6beSDavid du Colombier Attrnand = 0x2f, 37806f6463aSDavid du Colombier 37906f6463aSDavid du Colombier Winenable = 1<<0, 380ec4ca6beSDavid du Colombier }; 381ec4ca6beSDavid du Colombier 382ec4ca6beSDavid du Colombier typedef struct Pciex Pciex; 383ec4ca6beSDavid du Colombier struct Pciex { 384ec4ca6beSDavid du Colombier ushort venid; /* 0x11ab means Marvell */ 385ec4ca6beSDavid du Colombier ushort devid; /* 0x6281 means 6281 */ 386ec4ca6beSDavid du Colombier ulong csr; 387ec4ca6beSDavid du Colombier ulong revid; 388ec4ca6beSDavid du Colombier ulong bistcache; /* bist hdr type & cache-line size */ 389ec4ca6beSDavid du Colombier ulong bar0; 390ec4ca6beSDavid du Colombier ulong bar0hi; 391ec4ca6beSDavid du Colombier ulong bar1; 392ec4ca6beSDavid du Colombier ulong bar1hi; 393ec4ca6beSDavid du Colombier ulong bar2; 394ec4ca6beSDavid du Colombier ulong bar2hi; 395ec4ca6beSDavid du Colombier ulong _pad0; 396ec4ca6beSDavid du Colombier ushort ssvenid; /* 0x11ab means Marvell */ 397ec4ca6beSDavid du Colombier ushort ssdevid; /* 0x11ab means Marvell */ 398ec4ca6beSDavid du Colombier ulong rombar; 399ec4ca6beSDavid du Colombier ulong caplist; 400ec4ca6beSDavid du Colombier ulong _pad1; 401ec4ca6beSDavid du Colombier ulong intrpinline; /* interrupt pin & line */ 402ec4ca6beSDavid du Colombier ulong pmcap; /* power mgmt. capability header */ 403ec4ca6beSDavid du Colombier ulong pmcsr; /* power mgmt. control & status */ 404ec4ca6beSDavid du Colombier ulong _pad2[2]; 405ec4ca6beSDavid du Colombier ulong msictl; /* msi message control */ 406ec4ca6beSDavid du Colombier ulong msiaddr; 407ec4ca6beSDavid du Colombier ulong msiaddrhi; 408ec4ca6beSDavid du Colombier ulong msidata; 409ec4ca6beSDavid du Colombier ulong cap; 410ec4ca6beSDavid du Colombier ulong devcap; 411ec4ca6beSDavid du Colombier ulong devcsr; 412ec4ca6beSDavid du Colombier ulong linkcap; 413ec4ca6beSDavid du Colombier ulong linkcsr; 414ec4ca6beSDavid du Colombier 415ec4ca6beSDavid du Colombier uchar _pad[0x40100-0x40074]; 416ec4ca6beSDavid du Colombier ulong errrep; /* advanced error report header */ 417ec4ca6beSDavid du Colombier ulong uncorrerr; /* uncorrectable error status */ 418ec4ca6beSDavid du Colombier ulong uncorrerrmask; /* uncorrectable error mask */ 419ec4ca6beSDavid du Colombier ulong uncorrerrsev; /* uncorrectable error severity */ 420ec4ca6beSDavid du Colombier ulong correrr; /* correctable error status */ 421ec4ca6beSDavid du Colombier ulong correrrmask; /* correctable error mask */ 422ec4ca6beSDavid du Colombier ulong errcap; /* advanced error capability & ctl. */ 423ec4ca6beSDavid du Colombier ulong hdrlog[4]; /* header log */ 424ec4ca6beSDavid du Colombier /* continues with more rubbish at 0x41a00. some day... */ 425ec4ca6beSDavid du Colombier }; 426