xref: /inferno-os/os/boot/pc/io.h (revision 8a8c2d742b51525f66c2210e3c8a251de10022ff)
174a4d8c2SCharles.Forsyth /*
274a4d8c2SCharles.Forsyth  *  programmable interrupt vectors (for the 8259's)
374a4d8c2SCharles.Forsyth  */
474a4d8c2SCharles.Forsyth enum
574a4d8c2SCharles.Forsyth {
674a4d8c2SCharles.Forsyth 	Bptvec=		3,		/* breakpoints */
774a4d8c2SCharles.Forsyth 	Mathemuvec=	7,		/* math coprocessor emulation interrupt */
874a4d8c2SCharles.Forsyth 	Mathovervec=	9,		/* math coprocessor overrun interrupt */
974a4d8c2SCharles.Forsyth 	Matherr1vec=	16,		/* math coprocessor error interrupt */
1074a4d8c2SCharles.Forsyth 	Faultvec=	14,		/* page fault */
1174a4d8c2SCharles.Forsyth 
1274a4d8c2SCharles.Forsyth 	Syscallvec=	64,
1374a4d8c2SCharles.Forsyth 
1474a4d8c2SCharles.Forsyth 	VectorPIC	= 24,		/* external [A]PIC interrupts */
1574a4d8c2SCharles.Forsyth 	VectorCLOCK	= VectorPIC+0,
1674a4d8c2SCharles.Forsyth 	VectorKBD	= VectorPIC+1,
1774a4d8c2SCharles.Forsyth 	VectorUART1	= VectorPIC+3,
1874a4d8c2SCharles.Forsyth 	VectorUART0	= VectorPIC+4,
1974a4d8c2SCharles.Forsyth 	VectorPCMCIA	= VectorPIC+5,
2074a4d8c2SCharles.Forsyth 	VectorFLOPPY	= VectorPIC+6,
2174a4d8c2SCharles.Forsyth 	VectorLPT	= VectorPIC+7,
2274a4d8c2SCharles.Forsyth 	VectorIRQ7	= VectorPIC+7,
2374a4d8c2SCharles.Forsyth 	VectorAUX	= VectorPIC+12,	/* PS/2 port */
2474a4d8c2SCharles.Forsyth 	VectorIRQ13	= VectorPIC+13,	/* coprocessor on x386 */
2574a4d8c2SCharles.Forsyth 	VectorATA0	= VectorPIC+14,
2674a4d8c2SCharles.Forsyth 	VectorATA1	= VectorPIC+15,
2774a4d8c2SCharles.Forsyth 	MaxVectorPIC	= VectorPIC+15,
2874a4d8c2SCharles.Forsyth };
2974a4d8c2SCharles.Forsyth 
3074a4d8c2SCharles.Forsyth enum {
3174a4d8c2SCharles.Forsyth 	BusCBUS		= 0,		/* Corollary CBUS */
3274a4d8c2SCharles.Forsyth 	BusCBUSII,			/* Corollary CBUS II */
3374a4d8c2SCharles.Forsyth 	BusEISA,			/* Extended ISA */
3474a4d8c2SCharles.Forsyth 	BusFUTURE,			/* IEEE Futurebus */
3574a4d8c2SCharles.Forsyth 	BusINTERN,			/* Internal bus */
3674a4d8c2SCharles.Forsyth 	BusISA,				/* Industry Standard Architecture */
3774a4d8c2SCharles.Forsyth 	BusMBI,				/* Multibus I */
3874a4d8c2SCharles.Forsyth 	BusMBII,			/* Multibus II */
3974a4d8c2SCharles.Forsyth 	BusMCA,				/* Micro Channel Architecture */
4074a4d8c2SCharles.Forsyth 	BusMPI,				/* MPI */
4174a4d8c2SCharles.Forsyth 	BusMPSA,			/* MPSA */
4274a4d8c2SCharles.Forsyth 	BusNUBUS,			/* Apple Macintosh NuBus */
4374a4d8c2SCharles.Forsyth 	BusPCI,				/* Peripheral Component Interconnect */
4474a4d8c2SCharles.Forsyth 	BusPCMCIA,			/* PC Memory Card International Association */
4574a4d8c2SCharles.Forsyth 	BusTC,				/* DEC TurboChannel */
4674a4d8c2SCharles.Forsyth 	BusVL,				/* VESA Local bus */
4774a4d8c2SCharles.Forsyth 	BusVME,				/* VMEbus */
4874a4d8c2SCharles.Forsyth 	BusXPRESS,			/* Express System Bus */
4974a4d8c2SCharles.Forsyth };
5074a4d8c2SCharles.Forsyth 
5174a4d8c2SCharles.Forsyth #define MKBUS(t,b,d,f)	(((t)<<24)|(((b)&0xFF)<<16)|(((d)&0x1F)<<11)|(((f)&0x07)<<8))
5274a4d8c2SCharles.Forsyth #define BUSFNO(tbdf)	(((tbdf)>>8)&0x07)
5374a4d8c2SCharles.Forsyth #define BUSDNO(tbdf)	(((tbdf)>>11)&0x1F)
5474a4d8c2SCharles.Forsyth #define BUSBNO(tbdf)	(((tbdf)>>16)&0xFF)
5574a4d8c2SCharles.Forsyth #define BUSTYPE(tbdf)	((tbdf)>>24)
5674a4d8c2SCharles.Forsyth #define BUSBDF(tbdf)	((tbdf)&0x00FFFF00)
5774a4d8c2SCharles.Forsyth #define BUSUNKNOWN	(-1)
5874a4d8c2SCharles.Forsyth 
5974a4d8c2SCharles.Forsyth enum {
6074a4d8c2SCharles.Forsyth 	MaxEISA		= 16,
6174a4d8c2SCharles.Forsyth 	CfgEISA		= 0xC80,
6274a4d8c2SCharles.Forsyth };
6374a4d8c2SCharles.Forsyth 
6474a4d8c2SCharles.Forsyth /*
6574a4d8c2SCharles.Forsyth  * PCI support code.
6674a4d8c2SCharles.Forsyth  */
6774a4d8c2SCharles.Forsyth enum {					/* type 0 and type 1 pre-defined header */
6874a4d8c2SCharles.Forsyth 	PciVID		= 0x00,		/* vendor ID */
6974a4d8c2SCharles.Forsyth 	PciDID		= 0x02,		/* device ID */
7074a4d8c2SCharles.Forsyth 	PciPCR		= 0x04,		/* command */
7174a4d8c2SCharles.Forsyth 	PciPSR		= 0x06,		/* status */
7274a4d8c2SCharles.Forsyth 	PciRID		= 0x08,		/* revision ID */
7374a4d8c2SCharles.Forsyth 	PciCCRp		= 0x09,		/* programming interface class code */
7474a4d8c2SCharles.Forsyth 	PciCCRu		= 0x0A,		/* sub-class code */
7574a4d8c2SCharles.Forsyth 	PciCCRb		= 0x0B,		/* base class code */
7674a4d8c2SCharles.Forsyth 	PciCLS		= 0x0C,		/* cache line size */
7774a4d8c2SCharles.Forsyth 	PciLTR		= 0x0D,		/* latency timer */
7874a4d8c2SCharles.Forsyth 	PciHDT		= 0x0E,		/* header type */
7974a4d8c2SCharles.Forsyth 	PciBST		= 0x0F,		/* BIST */
8074a4d8c2SCharles.Forsyth 
8174a4d8c2SCharles.Forsyth 	PciBAR0		= 0x10,		/* base address */
8274a4d8c2SCharles.Forsyth 	PciBAR1		= 0x14,
8374a4d8c2SCharles.Forsyth 
8474a4d8c2SCharles.Forsyth 	PciINTL		= 0x3C,		/* interrupt line */
8574a4d8c2SCharles.Forsyth 	PciINTP		= 0x3D,		/* interrupt pin */
8674a4d8c2SCharles.Forsyth };
8774a4d8c2SCharles.Forsyth 
88*8a8c2d74SCharles.Forsyth /* ccrb (base class code) values; controller types */
89*8a8c2d74SCharles.Forsyth enum {
90*8a8c2d74SCharles.Forsyth 	Pcibcpci1	= 0,		/* pci 1.0; no class codes defined */
91*8a8c2d74SCharles.Forsyth 	Pcibcstore	= 1,		/* mass storage */
92*8a8c2d74SCharles.Forsyth 	Pcibcnet	= 2,		/* network */
93*8a8c2d74SCharles.Forsyth 	Pcibcdisp	= 3,		/* display */
94*8a8c2d74SCharles.Forsyth 	Pcibcmmedia	= 4,		/* multimedia */
95*8a8c2d74SCharles.Forsyth 	Pcibcmem	= 5,		/* memory */
96*8a8c2d74SCharles.Forsyth 	Pcibcbridge	= 6,		/* bridge */
97*8a8c2d74SCharles.Forsyth 	Pcibccomm	= 7,		/* simple comms (e.g., serial) */
98*8a8c2d74SCharles.Forsyth 	Pcibcbasesys	= 8,		/* base system */
99*8a8c2d74SCharles.Forsyth 	Pcibcinput	= 9,		/* input */
100*8a8c2d74SCharles.Forsyth 	Pcibcdock	= 0xa,		/* docking stations */
101*8a8c2d74SCharles.Forsyth 	Pcibcproc	= 0xb,		/* processors */
102*8a8c2d74SCharles.Forsyth 	Pcibcserial	= 0xc,		/* serial bus (e.g., USB) */
103*8a8c2d74SCharles.Forsyth 	Pcibcwireless	= 0xd,		/* wireless */
104*8a8c2d74SCharles.Forsyth 	Pcibcintell	= 0xe,		/* intelligent i/o */
105*8a8c2d74SCharles.Forsyth 	Pcibcsatcom	= 0xf,		/* satellite comms */
106*8a8c2d74SCharles.Forsyth 	Pcibccrypto	= 0x10,		/* encryption/decryption */
107*8a8c2d74SCharles.Forsyth 	Pcibcdacq	= 0x11,		/* data acquisition & signal proc. */
108*8a8c2d74SCharles.Forsyth };
109*8a8c2d74SCharles.Forsyth 
110*8a8c2d74SCharles.Forsyth /* ccru (sub-class code) values; common cases only */
111*8a8c2d74SCharles.Forsyth enum {
112*8a8c2d74SCharles.Forsyth 	/* mass storage */
113*8a8c2d74SCharles.Forsyth 	Pciscscsi	= 0,		/* SCSI */
114*8a8c2d74SCharles.Forsyth 	Pciscide	= 1,		/* IDE (ATA) */
115*8a8c2d74SCharles.Forsyth 
116*8a8c2d74SCharles.Forsyth 	/* network */
117*8a8c2d74SCharles.Forsyth 	Pciscether	= 0,		/* Ethernet */
118*8a8c2d74SCharles.Forsyth 
119*8a8c2d74SCharles.Forsyth 	/* display */
120*8a8c2d74SCharles.Forsyth 	Pciscvga	= 0,		/* VGA */
121*8a8c2d74SCharles.Forsyth 	Pciscxga	= 1,		/* XGA */
122*8a8c2d74SCharles.Forsyth 	Pcisc3d		= 2,		/* 3D */
123*8a8c2d74SCharles.Forsyth 
124*8a8c2d74SCharles.Forsyth 	/* bridges */
125*8a8c2d74SCharles.Forsyth 	Pcischostpci	= 0,		/* host/pci */
126*8a8c2d74SCharles.Forsyth 	Pciscpcicpci	= 1,		/* pci/pci */
127*8a8c2d74SCharles.Forsyth 
128*8a8c2d74SCharles.Forsyth 	/* simple comms */
129*8a8c2d74SCharles.Forsyth 	Pciscserial	= 0,		/* 16450, etc. */
130*8a8c2d74SCharles.Forsyth 	Pciscmultiser	= 1,		/* multiport serial */
131*8a8c2d74SCharles.Forsyth 
132*8a8c2d74SCharles.Forsyth 	/* serial bus */
133*8a8c2d74SCharles.Forsyth 	Pciscusb	= 3,		/* USB */
134*8a8c2d74SCharles.Forsyth };
135*8a8c2d74SCharles.Forsyth 
13674a4d8c2SCharles.Forsyth enum {					/* type 0 pre-defined header */
13774a4d8c2SCharles.Forsyth 	PciBAR2		= 0x18,
13874a4d8c2SCharles.Forsyth 	PciBAR3		= 0x1C,
13974a4d8c2SCharles.Forsyth 	PciBAR4		= 0x20,
14074a4d8c2SCharles.Forsyth 	PciBAR5		= 0x24,
14174a4d8c2SCharles.Forsyth 	PciCIS		= 0x28,		/* cardbus CIS pointer */
14274a4d8c2SCharles.Forsyth 	PciSVID		= 0x2C,		/* subsystem vendor ID */
14374a4d8c2SCharles.Forsyth 	PciSID		= 0x2E,		/* cardbus CIS pointer */
14474a4d8c2SCharles.Forsyth 	PciEBAR0	= 0x30,		/* expansion ROM base address */
14574a4d8c2SCharles.Forsyth 	PciMGNT		= 0x3E,		/* burst period length */
14674a4d8c2SCharles.Forsyth 	PciMLT		= 0x3F,		/* maximum latency between bursts */
14774a4d8c2SCharles.Forsyth };
14874a4d8c2SCharles.Forsyth 
14974a4d8c2SCharles.Forsyth enum {					/* type 1 pre-defined header */
15074a4d8c2SCharles.Forsyth 	PciPBN		= 0x18,		/* primary bus number */
15174a4d8c2SCharles.Forsyth 	PciSBN		= 0x19,		/* secondary bus number */
15274a4d8c2SCharles.Forsyth 	PciUBN		= 0x1A,		/* subordinate bus number */
15374a4d8c2SCharles.Forsyth 	PciSLTR		= 0x1B,		/* secondary latency timer */
15474a4d8c2SCharles.Forsyth 	PciIBR		= 0x1C,		/* I/O base */
15574a4d8c2SCharles.Forsyth 	PciILR		= 0x1D,		/* I/O limit */
15674a4d8c2SCharles.Forsyth 	PciSPSR		= 0x1E,		/* secondary status */
15774a4d8c2SCharles.Forsyth 	PciMBR		= 0x20,		/* memory base */
15874a4d8c2SCharles.Forsyth 	PciMLR		= 0x22,		/* memory limit */
15974a4d8c2SCharles.Forsyth 	PciPMBR		= 0x24,		/* prefetchable memory base */
16074a4d8c2SCharles.Forsyth 	PciPMLR		= 0x26,		/* prefetchable memory limit */
16174a4d8c2SCharles.Forsyth 	PciPUBR		= 0x28,		/* prefetchable base upper 32 bits */
16274a4d8c2SCharles.Forsyth 	PciPULR		= 0x2C,		/* prefetchable limit upper 32 bits */
16374a4d8c2SCharles.Forsyth 	PciIUBR		= 0x30,		/* I/O base upper 16 bits */
16474a4d8c2SCharles.Forsyth 	PciIULR		= 0x32,		/* I/O limit upper 16 bits */
16574a4d8c2SCharles.Forsyth 	PciEBAR1	= 0x28,		/* expansion ROM base address */
16674a4d8c2SCharles.Forsyth 	PciBCR		= 0x3E,		/* bridge control register */
16774a4d8c2SCharles.Forsyth };
16874a4d8c2SCharles.Forsyth 
16974a4d8c2SCharles.Forsyth enum {					/* type 2 pre-defined header */
17074a4d8c2SCharles.Forsyth 	PciCBExCA	= 0x10,
17174a4d8c2SCharles.Forsyth 	PciCBSPSR	= 0x16,
17274a4d8c2SCharles.Forsyth 	PciCBPBN	= 0x18,		/* primary bus number */
17374a4d8c2SCharles.Forsyth 	PciCBSBN	= 0x19,		/* secondary bus number */
17474a4d8c2SCharles.Forsyth 	PciCBUBN	= 0x1A,		/* subordinate bus number */
17574a4d8c2SCharles.Forsyth 	PciCBSLTR	= 0x1B,		/* secondary latency timer */
17674a4d8c2SCharles.Forsyth 	PciCBMBR0	= 0x1C,
17774a4d8c2SCharles.Forsyth 	PciCBMLR0	= 0x20,
17874a4d8c2SCharles.Forsyth 	PciCBMBR1	= 0x24,
17974a4d8c2SCharles.Forsyth 	PciCBMLR1	= 0x28,
18074a4d8c2SCharles.Forsyth 	PciCBIBR0	= 0x2C,		/* I/O base */
18174a4d8c2SCharles.Forsyth 	PciCBILR0	= 0x30,		/* I/O limit */
18274a4d8c2SCharles.Forsyth 	PciCBIBR1	= 0x34,		/* I/O base */
18374a4d8c2SCharles.Forsyth 	PciCBILR1	= 0x38,		/* I/O limit */
184*8a8c2d74SCharles.Forsyth 	PciCBBCTL	= 0x3E,		/* Bridge control */
18574a4d8c2SCharles.Forsyth 	PciCBSVID	= 0x40,		/* subsystem vendor ID */
18674a4d8c2SCharles.Forsyth 	PciCBSID	= 0x42,		/* subsystem ID */
18774a4d8c2SCharles.Forsyth 	PciCBLMBAR	= 0x44,		/* legacy mode base address */
18874a4d8c2SCharles.Forsyth };
18974a4d8c2SCharles.Forsyth 
19074a4d8c2SCharles.Forsyth typedef struct Pcisiz Pcisiz;
19174a4d8c2SCharles.Forsyth struct Pcisiz
19274a4d8c2SCharles.Forsyth {
19374a4d8c2SCharles.Forsyth 	Pcidev*	dev;
19474a4d8c2SCharles.Forsyth 	int	siz;
19574a4d8c2SCharles.Forsyth 	int	bar;
19674a4d8c2SCharles.Forsyth };
19774a4d8c2SCharles.Forsyth 
19874a4d8c2SCharles.Forsyth typedef struct Pcidev Pcidev;
19974a4d8c2SCharles.Forsyth typedef struct Pcidev {
20074a4d8c2SCharles.Forsyth 	int	tbdf;			/* type+bus+device+function */
20174a4d8c2SCharles.Forsyth 	ushort	vid;			/* vendor ID */
20274a4d8c2SCharles.Forsyth 	ushort	did;			/* device ID */
20374a4d8c2SCharles.Forsyth 
204*8a8c2d74SCharles.Forsyth 	ushort	pcr;
205*8a8c2d74SCharles.Forsyth 
20674a4d8c2SCharles.Forsyth 	uchar	rid;
20774a4d8c2SCharles.Forsyth 	uchar	ccrp;
20874a4d8c2SCharles.Forsyth 	uchar	ccru;
20974a4d8c2SCharles.Forsyth 	uchar	ccrb;
210*8a8c2d74SCharles.Forsyth 	uchar	cls;
211*8a8c2d74SCharles.Forsyth 	uchar	ltr;
21274a4d8c2SCharles.Forsyth 
21374a4d8c2SCharles.Forsyth 	struct {
21474a4d8c2SCharles.Forsyth 		ulong	bar;		/* base address */
21574a4d8c2SCharles.Forsyth 		int	size;
21674a4d8c2SCharles.Forsyth 	} mem[6];
21774a4d8c2SCharles.Forsyth 
21874a4d8c2SCharles.Forsyth 	struct {
21974a4d8c2SCharles.Forsyth 		ulong	bar;
22074a4d8c2SCharles.Forsyth 		int	size;
22174a4d8c2SCharles.Forsyth 	} rom;
22274a4d8c2SCharles.Forsyth 	uchar	intl;			/* interrupt line */
22374a4d8c2SCharles.Forsyth 
22474a4d8c2SCharles.Forsyth 	Pcidev*	list;
22574a4d8c2SCharles.Forsyth 	Pcidev*	link;			/* next device on this bno */
226*8a8c2d74SCharles.Forsyth 
227*8a8c2d74SCharles.Forsyth 	Pcidev*	bridge;			/* down a bus */
22874a4d8c2SCharles.Forsyth 	struct {
22974a4d8c2SCharles.Forsyth 		ulong	bar;
23074a4d8c2SCharles.Forsyth 		int	size;
23174a4d8c2SCharles.Forsyth 	} ioa, mema;
23274a4d8c2SCharles.Forsyth 
233*8a8c2d74SCharles.Forsyth 	int	pmrb;			/* power management register block */
23474a4d8c2SCharles.Forsyth };
23574a4d8c2SCharles.Forsyth 
23674a4d8c2SCharles.Forsyth #define PCIWINDOW	0
23774a4d8c2SCharles.Forsyth #define PCIWADDR(va)	(PADDR(va)+PCIWINDOW)
23874a4d8c2SCharles.Forsyth #define ISAWINDOW	0
23974a4d8c2SCharles.Forsyth #define ISAWADDR(va)	(PADDR(va)+ISAWINDOW)
24074a4d8c2SCharles.Forsyth 
24174a4d8c2SCharles.Forsyth /*
24274a4d8c2SCharles.Forsyth  * PCMCIA support code.
24374a4d8c2SCharles.Forsyth  */
244*8a8c2d74SCharles.Forsyth typedef struct PCMslot		PCMslot;
245*8a8c2d74SCharles.Forsyth typedef struct PCMconftab	PCMconftab;
246*8a8c2d74SCharles.Forsyth 
24774a4d8c2SCharles.Forsyth /*
24874a4d8c2SCharles.Forsyth  * Map between ISA memory space and PCMCIA card memory space.
24974a4d8c2SCharles.Forsyth  */
25074a4d8c2SCharles.Forsyth struct PCMmap {
25174a4d8c2SCharles.Forsyth 	ulong	ca;			/* card address */
25274a4d8c2SCharles.Forsyth 	ulong	cea;			/* card end address */
25374a4d8c2SCharles.Forsyth 	ulong	isa;			/* ISA address */
25474a4d8c2SCharles.Forsyth 	int	len;			/* length of the ISA area */
25574a4d8c2SCharles.Forsyth 	int	attr;			/* attribute memory */
25674a4d8c2SCharles.Forsyth 	int	ref;
25774a4d8c2SCharles.Forsyth };
258*8a8c2d74SCharles.Forsyth 
259*8a8c2d74SCharles.Forsyth /* configuration table entry */
260*8a8c2d74SCharles.Forsyth struct PCMconftab
261*8a8c2d74SCharles.Forsyth {
262*8a8c2d74SCharles.Forsyth 	int	index;
263*8a8c2d74SCharles.Forsyth 	ushort	irqs;		/* legal irqs */
264*8a8c2d74SCharles.Forsyth 	uchar	irqtype;
265*8a8c2d74SCharles.Forsyth 	uchar	bit16;		/* true for 16 bit access */
266*8a8c2d74SCharles.Forsyth 	struct {
267*8a8c2d74SCharles.Forsyth 		ulong	start;
268*8a8c2d74SCharles.Forsyth 		ulong	len;
269*8a8c2d74SCharles.Forsyth 	} io[16];
270*8a8c2d74SCharles.Forsyth 	int	nio;
271*8a8c2d74SCharles.Forsyth 	uchar	vpp1;
272*8a8c2d74SCharles.Forsyth 	uchar	vpp2;
273*8a8c2d74SCharles.Forsyth 	uchar	memwait;
274*8a8c2d74SCharles.Forsyth 	ulong	maxwait;
275*8a8c2d74SCharles.Forsyth 	ulong	readywait;
276*8a8c2d74SCharles.Forsyth 	ulong	otherwait;
277*8a8c2d74SCharles.Forsyth };
278*8a8c2d74SCharles.Forsyth 
279*8a8c2d74SCharles.Forsyth /* a card slot */
280*8a8c2d74SCharles.Forsyth struct PCMslot
281*8a8c2d74SCharles.Forsyth {
282*8a8c2d74SCharles.Forsyth 	Lock;
283*8a8c2d74SCharles.Forsyth 	int	ref;
284*8a8c2d74SCharles.Forsyth 
285*8a8c2d74SCharles.Forsyth 	void	*cp;		/* controller for this slot */
286*8a8c2d74SCharles.Forsyth 	long	memlen;		/* memory length */
287*8a8c2d74SCharles.Forsyth 	uchar	base;		/* index register base */
288*8a8c2d74SCharles.Forsyth 	uchar	slotno;		/* slot number */
289*8a8c2d74SCharles.Forsyth 
290*8a8c2d74SCharles.Forsyth 	/* status */
291*8a8c2d74SCharles.Forsyth 	uchar	special;	/* in use for a special device */
292*8a8c2d74SCharles.Forsyth 	uchar	already;	/* already inited */
293*8a8c2d74SCharles.Forsyth 	uchar	occupied;
294*8a8c2d74SCharles.Forsyth 	uchar	battery;
295*8a8c2d74SCharles.Forsyth 	uchar	wrprot;
296*8a8c2d74SCharles.Forsyth 	uchar	powered;
297*8a8c2d74SCharles.Forsyth 	uchar	configed;
298*8a8c2d74SCharles.Forsyth 	uchar	enabled;
299*8a8c2d74SCharles.Forsyth 	uchar	busy;
300*8a8c2d74SCharles.Forsyth 
301*8a8c2d74SCharles.Forsyth 	/* cis info */
302*8a8c2d74SCharles.Forsyth 	ulong	msec;		/* time of last slotinfo call */
303*8a8c2d74SCharles.Forsyth 	char	verstr[512];	/* version string */
304*8a8c2d74SCharles.Forsyth 	int	ncfg;		/* number of configurations */
305*8a8c2d74SCharles.Forsyth 	struct {
306*8a8c2d74SCharles.Forsyth 		ushort	cpresent;	/* config registers present */
307*8a8c2d74SCharles.Forsyth 		ulong	caddr;		/* relative address of config registers */
308*8a8c2d74SCharles.Forsyth 	} cfg[8];
309*8a8c2d74SCharles.Forsyth 	int	nctab;		/* number of config table entries */
310*8a8c2d74SCharles.Forsyth 	PCMconftab	ctab[8];
311*8a8c2d74SCharles.Forsyth 	PCMconftab	*def;	/* default conftab */
312*8a8c2d74SCharles.Forsyth 
313*8a8c2d74SCharles.Forsyth 	/* memory maps */
314*8a8c2d74SCharles.Forsyth 	Lock	mlock;		/* lock down the maps */
315*8a8c2d74SCharles.Forsyth 	int	time;
316*8a8c2d74SCharles.Forsyth 	PCMmap	mmap[4];	/* maps, last is always for the kernel */
317*8a8c2d74SCharles.Forsyth };
318