#include "pci.h" typedef unsigned long pciaddr_t; typedef u8 byte; typedef u16 word; struct pci_dev { struct pci_dev *next; /* Next device in the chain */ word bus; /* Higher byte can select host bridges */ byte dev, func; /* Device and function */ /* These fields are set by pci_fill_info() */ int known_fields; /* Set of info fields already known */ word vendor_id, device_id; /* Identity of the device */ int irq; /* IRQ number */ pciaddr_t base_addr[6]; /* Base addresses */ pciaddr_t size[6]; /* Region sizes */ pciaddr_t rom_base_addr; /* Expansion ROM base address */ pciaddr_t rom_size; /* Expansion ROM size */ /* Fields used internally: */ void *access; void *methods; byte *cache; /* Cached information */ int cache_len; int hdrtype; /* Direct methods: header type */ void *aux; /* Auxillary data */ }; struct pci_filter { int bus, slot, func; /* -1 = ANY */ int vendor, device; }; #define PCITAG struct pci_filter * #define pciVideoPtr struct pci_dev * extern int pciNumBuses; int pciInit(void); int pciExit(void); PCITAG findPci(unsigned short bx); u32 pciSlotBX(pciVideoPtr pvp); void pciWriteLong(PCITAG tag, u32 idx, u32 data); void pciWriteWord(PCITAG tag, u32 idx, u16 data); void pciWriteByte(PCITAG tag, u32 idx, u8 data); u32 pciReadLong(PCITAG tag, u32 idx); u16 pciReadWord(PCITAG tag, u32 idx); u8 pciReadByte(PCITAG tag, u32 idx);