]>
Commit | Line | Data |
---|---|---|
c4efe1ca AL |
1 | /* |
2 | * libqos PCI bindings | |
3 | * | |
4 | * Copyright IBM, Corp. 2012-2013 | |
5 | * | |
6 | * Authors: | |
7 | * Anthony Liguori <aliguori@us.ibm.com> | |
8 | * | |
9 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
10 | * See the COPYING file in the top-level directory. | |
11 | */ | |
12 | ||
13 | #ifndef LIBQOS_PCI_H | |
14 | #define LIBQOS_PCI_H | |
15 | ||
16 | #include <stdint.h> | |
17 | ||
18 | #define QPCI_DEVFN(dev, fn) (((dev) << 3) | (fn)) | |
19 | ||
20 | typedef struct QPCIDevice QPCIDevice; | |
21 | typedef struct QPCIBus QPCIBus; | |
22 | ||
23 | struct QPCIBus | |
24 | { | |
25 | uint8_t (*io_readb)(QPCIBus *bus, void *addr); | |
26 | uint16_t (*io_readw)(QPCIBus *bus, void *addr); | |
27 | uint32_t (*io_readl)(QPCIBus *bus, void *addr); | |
28 | ||
29 | void (*io_writeb)(QPCIBus *bus, void *addr, uint8_t value); | |
30 | void (*io_writew)(QPCIBus *bus, void *addr, uint16_t value); | |
31 | void (*io_writel)(QPCIBus *bus, void *addr, uint32_t value); | |
32 | ||
33 | uint8_t (*config_readb)(QPCIBus *bus, int devfn, uint8_t offset); | |
34 | uint16_t (*config_readw)(QPCIBus *bus, int devfn, uint8_t offset); | |
35 | uint32_t (*config_readl)(QPCIBus *bus, int devfn, uint8_t offset); | |
36 | ||
37 | void (*config_writeb)(QPCIBus *bus, int devfn, | |
38 | uint8_t offset, uint8_t value); | |
39 | void (*config_writew)(QPCIBus *bus, int devfn, | |
40 | uint8_t offset, uint16_t value); | |
41 | void (*config_writel)(QPCIBus *bus, int devfn, | |
42 | uint8_t offset, uint32_t value); | |
43 | ||
44 | void *(*iomap)(QPCIBus *bus, QPCIDevice *dev, int barno); | |
45 | void (*iounmap)(QPCIBus *bus, void *data); | |
46 | }; | |
47 | ||
48 | struct QPCIDevice | |
49 | { | |
50 | QPCIBus *bus; | |
51 | int devfn; | |
52 | }; | |
53 | ||
54 | void qpci_device_foreach(QPCIBus *bus, int vendor_id, int device_id, | |
55 | void (*func)(QPCIDevice *dev, int devfn, void *data), | |
56 | void *data); | |
57 | QPCIDevice *qpci_device_find(QPCIBus *bus, int devfn); | |
58 | ||
59 | void qpci_device_enable(QPCIDevice *dev); | |
60 | ||
61 | uint8_t qpci_config_readb(QPCIDevice *dev, uint8_t offset); | |
62 | uint16_t qpci_config_readw(QPCIDevice *dev, uint8_t offset); | |
63 | uint32_t qpci_config_readl(QPCIDevice *dev, uint8_t offset); | |
64 | ||
65 | void qpci_config_writeb(QPCIDevice *dev, uint8_t offset, uint8_t value); | |
66 | void qpci_config_writew(QPCIDevice *dev, uint8_t offset, uint16_t value); | |
67 | void qpci_config_writel(QPCIDevice *dev, uint8_t offset, uint32_t value); | |
68 | ||
69 | uint8_t qpci_io_readb(QPCIDevice *dev, void *data); | |
70 | uint16_t qpci_io_readw(QPCIDevice *dev, void *data); | |
71 | uint32_t qpci_io_readl(QPCIDevice *dev, void *data); | |
72 | ||
73 | void qpci_io_writeb(QPCIDevice *dev, void *data, uint8_t value); | |
74 | void qpci_io_writew(QPCIDevice *dev, void *data, uint16_t value); | |
75 | void qpci_io_writel(QPCIDevice *dev, void *data, uint32_t value); | |
76 | ||
77 | void *qpci_iomap(QPCIDevice *dev, int barno); | |
78 | void qpci_iounmap(QPCIDevice *dev, void *data); | |
79 | ||
80 | #endif |