X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/81148fa15713ee68be49610206526d0725a5868f..c07c6eba644d5b947f38a6fb79489ff3584196cf:/include/pci.h?ds=sidebyside diff --git a/include/pci.h b/include/pci.h index 60b665f..9f7e6b9 100644 --- a/include/pci.h +++ b/include/pci.h @@ -16,4 +16,45 @@ uint32_t pci_read32(int bus, int slot, int fn, int addr); uint16_t pci_read16(int bus, int slot, int fn, int addr); uint8_t pci_read8(int bus, int slot, int fn, int addr); +/* Hardware-agnostic functions implemented by pci.c */ +typedef enum { + PCI_BAR_NONE = 0, + PCI_BAR_MEMORY32, + PCI_BAR_MEMORY64, + PCI_BAR_IO +} pci_bar_type_t; + +typedef struct pci_bar { + pci_bar_type_t type; + unsigned char prefetchable; + unsigned long addr; +} pci_bar_t; + +typedef struct pci_dev { + unsigned short vid, did; + int bus, dev, fn; + pci_bar_t bars[6]; +} pci_dev_t; + +typedef int (*pci_probe_fn_t)(pci_dev_t *, void *data); + +void pci_bus_enum(); +int pci_probe(pci_probe_fn_t probe, void *data); + +typedef struct pci_id { + unsigned short vid, did; + const char *name, *friendlyname; +} pci_id_t; + +#define PCI_ROM(a,b,c,d) {(a),(b),(c),(d)} + +typedef struct pci_driver { + const char *name; + pci_probe_fn_t probe; + pci_id_t *ids; + int id_count; +} pci_driver_t; + +int pci_probe_driver(pci_driver_t driver); + #endif