[pci] Formalise the PCI I/O API
[people/asdlkf/gpxe.git] / src / include / gpxe / pci_io.h
1 #ifndef _GPXE_PCI_IO_H
2 #define _GPXE_PCI_IO_H
3
4 /** @file
5  *
6  * PCI I/O API
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/api.h>
12 #include <config/ioapi.h>
13
14 /**
15  * Calculate static inline PCI I/O API function name
16  *
17  * @v _prefix           Subsystem prefix
18  * @v _api_func         API function
19  * @ret _subsys_func    Subsystem API function
20  */
21 #define PCIAPI_INLINE( _subsys, _api_func ) \
22         SINGLE_API_INLINE ( PCIAPI_PREFIX_ ## _subsys, _api_func )
23
24 /**
25  * Provide a PCI I/O API implementation
26  *
27  * @v _prefix           Subsystem prefix
28  * @v _api_func         API function
29  * @v _func             Implementing function
30  */
31 #define PROVIDE_PCIAPI( _subsys, _api_func, _func ) \
32         PROVIDE_SINGLE_API ( PCIAPI_PREFIX_ ## _subsys, _api_func, _func )
33
34 /**
35  * Provide a static inline PCI I/O API implementation
36  *
37  * @v _prefix           Subsystem prefix
38  * @v _api_func         API function
39  */
40 #define PROVIDE_PCIAPI_INLINE( _subsys, _api_func ) \
41         PROVIDE_SINGLE_API_INLINE ( PCIAPI_PREFIX_ ## _subsys, _api_func )
42
43 /* Include all architecture-independent I/O API headers */
44
45 /* Include all architecture-dependent I/O API headers */
46 #include <bits/pci_io.h>
47
48 /**
49  * Determine maximum PCI bus number within system
50  *
51  * @ret max_bus         Maximum bus number
52  */
53 int pci_max_bus ( void );
54
55 /**
56  * Read byte from PCI configuration space
57  *
58  * @v pci       PCI device
59  * @v where     Location within PCI configuration space
60  * @v value     Value read
61  * @ret rc      Return status code
62  */
63 int pci_read_config_byte ( struct pci_device *pci, unsigned int where,
64                            uint8_t *value );
65
66 /**
67  * Read 16-bit word from PCI configuration space
68  *
69  * @v pci       PCI device
70  * @v where     Location within PCI configuration space
71  * @v value     Value read
72  * @ret rc      Return status code
73  */
74 int pci_read_config_word ( struct pci_device *pci, unsigned int where,
75                            uint16_t *value );
76
77 /**
78  * Read 32-bit dword from PCI configuration space
79  *
80  * @v pci       PCI device
81  * @v where     Location within PCI configuration space
82  * @v value     Value read
83  * @ret rc      Return status code
84  */
85 int pci_read_config_dword ( struct pci_device *pci, unsigned int where,
86                             uint32_t *value );
87
88 /**
89  * Write byte to PCI configuration space
90  *
91  * @v pci       PCI device
92  * @v where     Location within PCI configuration space
93  * @v value     Value to be written
94  * @ret rc      Return status code
95  */
96 int pci_write_config_byte ( struct pci_device *pci, unsigned int where,
97                             uint8_t value );
98
99 /**
100  * Write 16-bit word to PCI configuration space
101  *
102  * @v pci       PCI device
103  * @v where     Location within PCI configuration space
104  * @v value     Value to be written
105  * @ret rc      Return status code
106  */
107 int pci_write_config_word ( struct pci_device *pci, unsigned int where,
108                             uint16_t value );
109
110 /**
111  * Write 32-bit dword to PCI configuration space
112  *
113  * @v pci       PCI device
114  * @v where     Location within PCI configuration space
115  * @v value     Value to be written
116  * @ret rc      Return status code
117  */
118 int pci_write_config_dword ( struct pci_device *pci, unsigned int where,
119                              uint32_t value );
120
121 #endif /* _GPXE_PCI_IO_H */