]> Joshua Wise's Git repositories - netwatch.git/blob - include/pci.h
9e964ca91d2adb89348dc2cba0024fbb24ebad56
[netwatch.git] / include / pci.h
1 #ifndef PCI_H
2 #define PCI_H
3
4 #include <stdint.h>
5
6 /* General PCI functions. This is implemented by pci-linux.c and pci-raw.c; the
7  * former uses Linux's /proc/bus/pci interface for access from userspace, while
8  * the latter accesses the PCI hardware directly.
9  */
10
11 void pci_write32(int bus, int slot, int fn, int addr, uint32_t data);
12 void pci_write16(int bus, int slot, int fn, int addr, uint16_t data);
13 void pci_write8(int bus, int slot, int fn, int addr, uint8_t data);
14
15 uint32_t pci_read32(int bus, int slot, int fn, int addr);
16 uint16_t pci_read16(int bus, int slot, int fn, int addr);
17 uint8_t pci_read8(int bus, int slot, int fn, int addr);
18
19 /* Hardware-agnostic functions implemented by pci.c */
20 typedef enum {
21         PCI_BAR_NONE = 0,
22         PCI_BAR_MEMORY32,
23         PCI_BAR_MEMORY64,
24         PCI_BAR_IO
25 } pci_bar_type_t;
26
27 typedef struct pci_bar {
28         pci_bar_type_t type;
29         unsigned char prefetchable;
30         unsigned long addr;
31 } pci_bar_t;
32
33 typedef struct pci_dev {
34         unsigned short vid, did;
35         int bus, dev, fn;
36         pci_bar_t bars[6];
37 } pci_dev_t;
38
39 typedef int (*pci_probe_fn_t)(pci_dev_t *, void *data);
40
41 void pci_bus_enum();
42 int pci_probe(pci_probe_fn_t probe, void *data);
43
44 typedef struct pci_id {
45         unsigned short vid, did;
46         const char *name, *friendlyname;
47 } pci_id_t;
48
49 #define PCI_ROM(a,b,c,d) {(a),(b),(c),(d)}
50
51 typedef struct pci_driver {
52         const char *name;
53         pci_probe_fn_t probe;
54         pci_id_t *ids;
55         int id_count;
56 } pci_driver_t;
57
58 int pci_probe_driver(pci_driver_t *driver);
59
60 #endif
This page took 0.017946 seconds and 2 git commands to generate.