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