/*
 * 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)
