[legacy] Add missing #include <gpxe/io.h>
[people/asdlkf/gpxe.git] / src / arch / i386 / include / pcibios.h
1 #ifndef _PCIBIOS_H
2 #define _PCIBIOS_H
3
4 #include <stdint.h>
5
6 /** @file
7  *
8  * PCI configuration space access via PCI BIOS
9  *
10  */
11
12 struct pci_device;
13
14 #define PCIBIOS_INSTALLATION_CHECK      0xb1010000
15 #define PCIBIOS_READ_CONFIG_BYTE        0xb1080000
16 #define PCIBIOS_READ_CONFIG_WORD        0xb1090000
17 #define PCIBIOS_READ_CONFIG_DWORD       0xb10a0000
18 #define PCIBIOS_WRITE_CONFIG_BYTE       0xb10b0000
19 #define PCIBIOS_WRITE_CONFIG_WORD       0xb10c0000
20 #define PCIBIOS_WRITE_CONFIG_DWORD      0xb10d0000
21
22 extern int pcibios_max_bus ( void );
23 extern int pcibios_read ( struct pci_device *pci, uint32_t command,
24                           uint32_t *value );
25 extern int pcibios_write ( struct pci_device *pci, uint32_t command,
26                            uint32_t value );
27
28 /**
29  * Read byte from PCI configuration space via PCI BIOS
30  *
31  * @v pci       PCI device
32  * @v where     Location within PCI configuration space
33  * @v value     Value read
34  * @ret rc      Return status code
35  */
36 static inline __attribute__ (( always_inline )) int
37 pcibios_read_config_byte ( struct pci_device *pci, unsigned int where,
38                            uint8_t *value ) {
39         uint32_t tmp;
40         int rc;
41
42         rc = pcibios_read ( pci, PCIBIOS_READ_CONFIG_BYTE | where, &tmp );
43         *value = tmp;
44         return rc;
45 }
46
47 /**
48  * Read word from PCI configuration space via PCI BIOS
49  *
50  * @v pci       PCI device
51  * @v where     Location within PCI configuration space
52  * @v value     Value read
53  * @ret rc      Return status code
54  */
55 static inline __attribute__ (( always_inline )) int
56 pcibios_read_config_word ( struct pci_device *pci, unsigned int where,
57                            uint16_t *value ) {
58         uint32_t tmp;
59         int rc;
60
61         rc = pcibios_read ( pci, PCIBIOS_READ_CONFIG_WORD | where, &tmp );
62         *value = tmp;
63         return rc;
64 }
65
66 /**
67  * Read dword from PCI configuration space via PCI BIOS
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 static inline __attribute__ (( always_inline )) int
75 pcibios_read_config_dword ( struct pci_device *pci, unsigned int where,
76                             uint32_t *value ) {
77         return pcibios_read ( pci, PCIBIOS_READ_CONFIG_DWORD | where, value );
78 }
79
80 /**
81  * Write byte to PCI configuration space via PCI BIOS
82  *
83  * @v pci       PCI device
84  * @v where     Location within PCI configuration space
85  * @v value     Value to be written
86  * @ret rc      Return status code
87  */
88 static inline __attribute__ (( always_inline )) int
89 pcibios_write_config_byte ( struct pci_device *pci, unsigned int where,
90                             uint8_t value ) {
91         return pcibios_write ( pci, PCIBIOS_WRITE_CONFIG_BYTE | where, value );
92 }
93
94 /**
95  * Write word to PCI configuration space via PCI BIOS
96  *
97  * @v pci       PCI device
98  * @v where     Location within PCI configuration space
99  * @v value     Value to be written
100  * @ret rc      Return status code
101  */
102 static inline __attribute__ (( always_inline )) int
103 pcibios_write_config_word ( struct pci_device *pci, unsigned int where,
104                             uint16_t value ) {
105         return pcibios_write ( pci, PCIBIOS_WRITE_CONFIG_WORD | where, value );
106 }
107
108 /**
109  * Write dword to PCI configuration space via PCI BIOS
110  *
111  * @v pci       PCI device
112  * @v where     Location within PCI configuration space
113  * @v value     Value to be written
114  * @ret rc      Return status code
115  */
116 static inline __attribute__ (( always_inline )) int
117 pcibios_write_config_dword ( struct pci_device *pci, unsigned int where,
118                              uint32_t value ) {
119         return pcibios_write ( pci, PCIBIOS_WRITE_CONFIG_DWORD | where, value);
120 }
121
122 #endif /* _PCIBIOS_H */