]> Joshua Wise's Git repositories - netwatch.git/blob - include/pci.h
313b3e0d0570f39a5f8cb4ea6d8a9f01065e275e
[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 *);
40
41 void pci_bus_enum();
42 int pci_probe(pci_probe_fn_t probe);
43
44 #endif
This page took 0.022091 seconds and 2 git commands to generate.