| /* |
| * This file is part of the UCB release of Plan 9. It is subject to the license |
| * terms in the LICENSE file found in the top-level directory of this |
| * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No |
| * part of the UCB release of Plan 9, including this file, may be copied, |
| * modified, propagated, or distributed except according to the terms contained |
| * in the LICENSE file. |
| */ |
| |
| #pragma once |
| |
| enum { |
| BusCBUS = 0, /* Corollary CBUS */ |
| BusCBUSII, /* Corollary CBUS II */ |
| BusEISA, /* Extended ISA */ |
| BusFUTURE, /* IEEE Futurebus */ |
| BusINTERN, /* Internal bus */ |
| BusISA, /* Industry Standard Architecture */ |
| BusMBI, /* Multibus I */ |
| BusMBII, /* Multibus II */ |
| BusMCA, /* Micro Channel Architecture */ |
| BusMPI, /* MPI */ |
| BusMPSA, /* MPSA */ |
| BusNUBUS, /* Apple Macintosh NuBus */ |
| BusPCI, /* Peripheral Component Interconnect */ |
| BusPCMCIA, /* PC Memory Card International Association */ |
| BusTC, /* DEC TurboChannel */ |
| BusVL, /* VESA Local bus */ |
| BusVME, /* VMEbus */ |
| BusXPRESS, /* Express System Bus */ |
| BusLAPIC, /* Local APIC, fake type */ |
| BusIPI, /* IPIs, fake type like the LAPIC */ |
| }; |
| |
| #define MKBUS(t,b,d,f) (((t)<<24)|(((b)&0xFF)<<16)|(((d)&0x1F)<<11)|(((f)&0x07)<<8)) |
| #define BUSFNO(tbdf) (((tbdf)>>8)&0x07) |
| #define BUSDNO(tbdf) (((tbdf)>>11)&0x1F) |
| #define BUSBNO(tbdf) (((tbdf)>>16)&0xFF) |
| #define BUSTYPE(tbdf) ((tbdf)>>24) |
| #define BUSBDF(tbdf) ((tbdf)&0x00FFFF00) |
| #define BUSUNKNOWN (-1) |
| |
| enum { |
| MaxEISA = 16, |
| CfgEISA = 0xC80, |
| }; |
| |
| /* IO Ports */ |
| |
| #define CMOS_RAM_IDX 0x70 |
| #define CMOS_RAM_DATA 0x71 |
| |
| /* |
| * PCI support code. |
| */ |
| enum { /* type 0 and type 1 pre-defined header */ |
| PciVID = 0x00, /* vendor ID */ |
| PciDID = 0x02, /* device ID */ |
| PciPCR = 0x04, /* command */ |
| PciPSR = 0x06, /* status */ |
| PciRID = 0x08, /* revision ID */ |
| PciCCRp = 0x09, /* programming interface class code */ |
| PciCCRu = 0x0A, /* sub-class code */ |
| PciCCRb = 0x0B, /* base class code */ |
| PciCLS = 0x0C, /* cache line size */ |
| PciLTR = 0x0D, /* latency timer */ |
| PciHDT = 0x0E, /* header type */ |
| PciBST = 0x0F, /* BIST */ |
| |
| PciBAR0 = 0x10, /* base address */ |
| PciBAR1 = 0x14, |
| |
| PciCP = 0x34, /* capabilities pointer */ |
| |
| PciINTL = 0x3C, /* interrupt line */ |
| PciINTP = 0x3D, /* interrupt pin */ |
| }; |
| |
| /* ccrb (base class code) values; controller types */ |
| enum { |
| Pcibcpci1 = 0, /* pci 1.0; no class codes defined */ |
| Pcibcstore = 1, /* mass storage */ |
| Pcibcnet = 2, /* network */ |
| Pcibcdisp = 3, /* display */ |
| Pcibcmmedia = 4, /* multimedia */ |
| Pcibcmem = 5, /* memory */ |
| Pcibcbridge = 6, /* bridge */ |
| Pcibccomm = 7, /* simple comms (e.g., serial) */ |
| Pcibcbasesys = 8, /* base system */ |
| Pcibcinput = 9, /* input */ |
| Pcibcdock = 0xa, /* docking stations */ |
| Pcibcproc = 0xb, /* processors */ |
| Pcibcserial = 0xc, /* serial bus (e.g., USB) */ |
| Pcibcwireless = 0xd, /* wireless */ |
| Pcibcintell = 0xe, /* intelligent i/o */ |
| Pcibcsatcom = 0xf, /* satellite comms */ |
| Pcibccrypto = 0x10, /* encryption/decryption */ |
| Pcibcdacq = 0x11, /* data acquisition & signal proc. */ |
| }; |
| |
| /* ccru (sub-class code) values; common cases only */ |
| enum { |
| /* mass storage */ |
| Pciscscsi = 0, /* SCSI */ |
| Pciscide = 1, /* IDE (ATA) */ |
| Pciscsata = 6, /* SATA */ |
| |
| /* network */ |
| Pciscether = 0, /* Ethernet */ |
| |
| /* display */ |
| Pciscvga = 0, /* VGA */ |
| Pciscxga = 1, /* XGA */ |
| Pcisc3d = 2, /* 3D */ |
| |
| /* bridges */ |
| Pcischostpci = 0, /* host/pci */ |
| Pciscpcicpci = 1, /* pci/pci */ |
| |
| /* simple comms */ |
| Pciscserial = 0, /* 16450, etc. */ |
| Pciscmultiser = 1, /* multiport serial */ |
| |
| /* serial bus */ |
| Pciscusb = 3, /* USB */ |
| }; |
| |
| enum { /* type 0 pre-defined header */ |
| PciCIS = 0x28, /* cardbus CIS pointer */ |
| PciSVID = 0x2C, /* subsystem vendor ID */ |
| PciSID = 0x2E, /* cardbus CIS pointer */ |
| PciEBAR0 = 0x30,/* expansion ROM base address */ |
| PciMGNT = 0x3E, /* burst period length */ |
| PciMLT = 0x3F, /* maximum latency between bursts */ |
| }; |
| |
| enum { /* type 1 pre-defined header */ |
| PciPBN = 0x18, /* primary bus number */ |
| PciSBN = 0x19, /* secondary bus number */ |
| PciUBN = 0x1A, /* subordinate bus number */ |
| PciSLTR = 0x1B, /* secondary latency timer */ |
| PciIBR = 0x1C, /* I/O base */ |
| PciILR = 0x1D, /* I/O limit */ |
| PciSPSR = 0x1E, /* secondary status */ |
| PciMBR = 0x20, /* memory base */ |
| PciMLR = 0x22, /* memory limit */ |
| PciPMBR = 0x24, /* prefetchable memory base */ |
| PciPMLR = 0x26, /* prefetchable memory limit */ |
| PciPUBR = 0x28, /* prefetchable base upper 32 bits */ |
| PciPULR = 0x2C, /* prefetchable limit upper 32 bits */ |
| PciIUBR = 0x30, /* I/O base upper 16 bits */ |
| PciIULR = 0x32, /* I/O limit upper 16 bits */ |
| PciEBAR1 = 0x28,/* expansion ROM base address */ |
| PciBCR = 0x3E, /* bridge control register */ |
| }; |
| |
| enum { /* type 2 pre-defined header */ |
| PciCBExCA = 0x10, |
| PciCBSPSR = 0x16, |
| PciCBPBN = 0x18, /* primary bus number */ |
| PciCBSBN = 0x19, /* secondary bus number */ |
| PciCBUBN = 0x1A, /* subordinate bus number */ |
| PciCBSLTR = 0x1B, /* secondary latency timer */ |
| PciCBMBR0 = 0x1C, |
| PciCBMLR0 = 0x20, |
| PciCBMBR1 = 0x24, |
| PciCBMLR1 = 0x28, |
| PciCBIBR0 = 0x2C, /* I/O base */ |
| PciCBILR0 = 0x30, /* I/O limit */ |
| PciCBIBR1 = 0x34, /* I/O base */ |
| PciCBILR1 = 0x38, /* I/O limit */ |
| PciCBSVID = 0x40, /* subsystem vendor ID */ |
| PciCBSID = 0x42, /* subsystem ID */ |
| PciCBLMBAR = 0x44, /* legacy mode base address */ |
| }; |
| |
| /* capabilities */ |
| enum { |
| PciCapPMG = 0x01, /* power management */ |
| PciCapAGP = 0x02, |
| PciCapVPD = 0x03, /* vital product data */ |
| PciCapSID = 0x04, /* slot id */ |
| PciCapMSI = 0x05, |
| PciCapCHS = 0x06, /* compact pci hot swap */ |
| PciCapPCIX = 0x07, |
| PciCapHTC = 0x08, /* hypertransport irq conf */ |
| PciCapVND = 0x09, /* vendor specific information */ |
| PciCapPCIe = 0x10, |
| PciCapMSIX = 0x11, |
| PciCapSATA = 0x12, |
| PciCapHSW = 0x0c, /* hot swap */ |
| }; |
| #if 0 |
| struct Pcisiz { |
| // Pcidev* dev; |
| int siz; |
| int bar; |
| }; |
| |
| struct Pcidev { |
| int tbdf; /* type+bus+device+function */ |
| ushort vid; /* vendor ID */ |
| ushort did; /* device ID */ |
| |
| ushort pcr; |
| |
| uchar rid; |
| uchar ccrp; |
| uchar ccru; |
| uchar ccrb; |
| uchar cls; |
| uchar ltr; |
| |
| struct { |
| ulong bar; /* base address */ |
| int size; |
| } mem[6]; |
| |
| struct { |
| ulong bar; |
| int size; |
| } rom; |
| uchar intl; /* interrupt line */ |
| |
| Pcidev *list; |
| Pcidev *link; /* next device on this bno */ |
| |
| Pcidev *bridge; /* down a bus */ |
| struct { |
| ulong bar; |
| int size; |
| } ioa, mema; |
| }; |
| #endif |
| #define PCIWINDOW 0 |
| #define PCIWADDR(va) (PADDR(va)+PCIWINDOW) |
| #define ISAWINDOW 0 |
| #define ISAWADDR(va) (PADDR(va)+ISAWINDOW) |