xref: /plan9/sys/src/cmd/aux/vga/pci.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier enum {
27dd7cddfSDavid du Colombier 	BusCBUS		= 0,		/* Corollary CBUS */
37dd7cddfSDavid du Colombier 	BusCBUSII,			/* Corollary CBUS II */
47dd7cddfSDavid du Colombier 	BusEISA,			/* Extended ISA */
57dd7cddfSDavid du Colombier 	BusFUTURE,			/* IEEE Futurebus */
67dd7cddfSDavid du Colombier 	BusINTERN,			/* Internal bus */
77dd7cddfSDavid du Colombier 	BusISA,				/* Industry Standard Architecture */
87dd7cddfSDavid du Colombier 	BusMBI,				/* Multibus I */
97dd7cddfSDavid du Colombier 	BusMBII,			/* Multibus II */
107dd7cddfSDavid du Colombier 	BusMCA,				/* Micro Channel Architecture */
117dd7cddfSDavid du Colombier 	BusMPI,				/* MPI */
127dd7cddfSDavid du Colombier 	BusMPSA,			/* MPSA */
137dd7cddfSDavid du Colombier 	BusNUBUS,			/* Apple Macintosh NuBus */
147dd7cddfSDavid du Colombier 	BusPCI,				/* Peripheral Component Interconnect */
157dd7cddfSDavid du Colombier 	BusPCMCIA,			/* PC Memory Card International Association */
167dd7cddfSDavid du Colombier 	BusTC,				/* DEC TurboChannel */
177dd7cddfSDavid du Colombier 	BusVL,				/* VESA Local bus */
187dd7cddfSDavid du Colombier 	BusVME,				/* VMEbus */
197dd7cddfSDavid du Colombier 	BusXPRESS,			/* Express System Bus */
207dd7cddfSDavid du Colombier };
217dd7cddfSDavid du Colombier 
227dd7cddfSDavid du Colombier #define MKBUS(t,b,d,f)	(((t)<<24)|(((b)&0xFF)<<16)|(((d)&0x1F)<<11)|(((f)&0x07)<<8))
237dd7cddfSDavid du Colombier #define BUSFNO(tbdf)	(((tbdf)>>8)&0x07)
247dd7cddfSDavid du Colombier #define BUSDNO(tbdf)	(((tbdf)>>11)&0x1F)
257dd7cddfSDavid du Colombier #define BUSBNO(tbdf)	(((tbdf)>>16)&0xFF)
267dd7cddfSDavid du Colombier #define BUSTYPE(tbdf)	((tbdf)>>24)
277dd7cddfSDavid du Colombier #define BUSBDF(tbdf)	((tbdf)&0x00FFFF00)
287dd7cddfSDavid du Colombier #define BUSUNKNOWN	(-1)
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier /*
317dd7cddfSDavid du Colombier  * PCI support code.
327dd7cddfSDavid du Colombier  */
337dd7cddfSDavid du Colombier enum {					/* type 0 and type 1 pre-defined header */
347dd7cddfSDavid du Colombier 	PciVID		= 0x00,		/* vendor ID */
357dd7cddfSDavid du Colombier 	PciDID		= 0x02,		/* device ID */
367dd7cddfSDavid du Colombier 	PciPCR		= 0x04,		/* command */
377dd7cddfSDavid du Colombier 	PciPSR		= 0x06,		/* status */
387dd7cddfSDavid du Colombier 	PciRID		= 0x08,		/* revision ID */
397dd7cddfSDavid du Colombier 	PciCCRp		= 0x09,		/* programming interface class code */
407dd7cddfSDavid du Colombier 	PciCCRu		= 0x0A,		/* sub-class code */
417dd7cddfSDavid du Colombier 	PciCCRb		= 0x0B,		/* base class code */
427dd7cddfSDavid du Colombier 	PciCLS		= 0x0C,		/* cache line size */
437dd7cddfSDavid du Colombier 	PciLTR		= 0x0D,		/* latency timer */
447dd7cddfSDavid du Colombier 	PciHDT		= 0x0E,		/* header type */
457dd7cddfSDavid du Colombier 	PciBST		= 0x0F,		/* BIST */
467dd7cddfSDavid du Colombier 
477dd7cddfSDavid du Colombier 	PciBAR0		= 0x10,		/* base address */
487dd7cddfSDavid du Colombier 	PciBAR1		= 0x14,
497dd7cddfSDavid du Colombier 
507dd7cddfSDavid du Colombier 	PciINTL		= 0x3C,		/* interrupt line */
517dd7cddfSDavid du Colombier 	PciINTP		= 0x3D,		/* interrupt pin */
527dd7cddfSDavid du Colombier };
537dd7cddfSDavid du Colombier 
547dd7cddfSDavid du Colombier enum {					/* type 0 pre-defined header */
557dd7cddfSDavid du Colombier 	PciBAR2		= 0x18,
567dd7cddfSDavid du Colombier 	PciBAR3		= 0x1C,
577dd7cddfSDavid du Colombier 	PciBAR4		= 0x20,
587dd7cddfSDavid du Colombier 	PciBAR5		= 0x24,
597dd7cddfSDavid du Colombier 	PciCIS		= 0x28,		/* cardbus CIS pointer */
607dd7cddfSDavid du Colombier 	PciSVID		= 0x2C,		/* subsystem vendor ID */
617dd7cddfSDavid du Colombier 	PciSID		= 0x2E,		/* cardbus CIS pointer */
627dd7cddfSDavid du Colombier 	PciEBAR0	= 0x30,		/* expansion ROM base address */
637dd7cddfSDavid du Colombier 	PciMGNT		= 0x3E,		/* burst period length */
647dd7cddfSDavid du Colombier 	PciMLT		= 0x3F,		/* maximum latency between bursts */
657dd7cddfSDavid du Colombier };
667dd7cddfSDavid du Colombier 
677dd7cddfSDavid du Colombier enum {					/* type 1 pre-defined header */
687dd7cddfSDavid du Colombier 	PciPBN		= 0x18,		/* primary bus number */
697dd7cddfSDavid du Colombier 	PciSBN		= 0x19,		/* secondary bus number */
707dd7cddfSDavid du Colombier 	PciUBN		= 0x1A,		/* subordinate bus number */
717dd7cddfSDavid du Colombier 	PciSLTR		= 0x1B,		/* secondary latency timer */
727dd7cddfSDavid du Colombier 	PciIBR		= 0x1C,		/* I/O base */
737dd7cddfSDavid du Colombier 	PciILR		= 0x1D,		/* I/O limit */
747dd7cddfSDavid du Colombier 	PciSPSR		= 0x1E,		/* secondary status */
757dd7cddfSDavid du Colombier 	PciMBR		= 0x20,		/* memory base */
767dd7cddfSDavid du Colombier 	PciMLR		= 0x22,		/* memory limit */
777dd7cddfSDavid du Colombier 	PciPMBR		= 0x24,		/* prefetchable memory base */
787dd7cddfSDavid du Colombier 	PciPMLR		= 0x26,		/* prefetchable memory limit */
797dd7cddfSDavid du Colombier 	PciPUBR		= 0x28,		/* prefetchable base upper 32 bits */
807dd7cddfSDavid du Colombier 	PciPULR		= 0x2C,		/* prefetchable limit upper 32 bits */
817dd7cddfSDavid du Colombier 	PciIUBR		= 0x30,		/* I/O base upper 16 bits */
827dd7cddfSDavid du Colombier 	PciIULR		= 0x32,		/* I/O limit upper 16 bits */
837dd7cddfSDavid du Colombier 	PciEBAR1	= 0x28,		/* expansion ROM base address */
847dd7cddfSDavid du Colombier 	PciBCR		= 0x3E,		/* bridge control register */
857dd7cddfSDavid du Colombier };
867dd7cddfSDavid du Colombier 
877dd7cddfSDavid du Colombier typedef struct Pcidev Pcidev;
887dd7cddfSDavid du Colombier typedef struct Pcidev {
897dd7cddfSDavid du Colombier 	int	tbdf;			/* type+bus+device+function */
907dd7cddfSDavid du Colombier 	ushort	vid;			/* vendor ID */
917dd7cddfSDavid du Colombier 	ushort	did;			/* device ID */
92*9a747e4fSDavid du Colombier 	uchar	rid;			/* revision ID */
937dd7cddfSDavid du Colombier 
947dd7cddfSDavid du Colombier 	struct {
957dd7cddfSDavid du Colombier 		ulong	bar;		/* base address */
967dd7cddfSDavid du Colombier 		int	size;
977dd7cddfSDavid du Colombier 	} mem[6];
987dd7cddfSDavid du Colombier 
997dd7cddfSDavid du Colombier 	uchar	intl;			/* interrupt line */
1007dd7cddfSDavid du Colombier 	ushort	ccru;
1017dd7cddfSDavid du Colombier 
1027dd7cddfSDavid du Colombier 
1037dd7cddfSDavid du Colombier 	Pcidev*	list;
1047dd7cddfSDavid du Colombier 	Pcidev*	bridge;			/* down a bus */
1057dd7cddfSDavid du Colombier 	Pcidev*	link;			/* next device on this bno */
1067dd7cddfSDavid du Colombier };
107