|  | /* | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | #ifndef ROS_KERN_ARCH_IO_H | 
|  | #define ROS_KERN_ARCH_IO_H | 
|  |  | 
|  | 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, | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * 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) | 
|  |  | 
|  | #endif /* ROS_KERN_ARCH_IO_H */ |