2 #include <hw/cpu/cpu.h>
5 /* there are 3 methods supported by this library
6 * (FIXME: Well, I don't have code to support Configuration Type 2 because I don't have hardware that speaks that...) */
9 PCI_CFG_TYPE1, /* Configuration Type 1 (most common) */
10 PCI_CFG_BIOS, /* Use the BIOS (PCI 2.0c interface) */
11 PCI_CFG_BIOS1, /* Use the BIOS (PCI 1.x interface) (FIXME: I don't have any hardware who's BIOS implements this) */
12 PCI_CFG_TYPE2, /* Configuration Type 2 (FIXME: I don't have any hardware that emulates or supports this method) */
16 #define pci_read_cfgl(b,c,f,r) pci_read_cfg_array[pci_cfg](b,c,f,r,2)
17 #define pci_read_cfgw(b,c,f,r) pci_read_cfg_array[pci_cfg](b,c,f,r,1)
18 #define pci_read_cfgb(b,c,f,r) pci_read_cfg_array[pci_cfg](b,c,f,r,0)
20 #define pci_write_cfgl(b,c,f,r,d) pci_write_cfg_array[pci_cfg](b,c,f,r,d,2)
21 #define pci_write_cfgw(b,c,f,r,d) pci_write_cfg_array[pci_cfg](b,c,f,r,d,1)
22 #define pci_write_cfgb(b,c,f,r,d) pci_write_cfg_array[pci_cfg](b,c,f,r,d,0)
24 extern unsigned char pci_cfg;
25 extern unsigned char pci_cfg_probed;
26 extern uint32_t pci_bios_protmode_entry_point;
27 extern uint8_t pci_bios_hw_characteristics;
28 extern uint16_t pci_bios_interface_level;
29 extern uint8_t pci_bus_decode_bits;
30 extern int16_t pci_bios_last_bus;
32 void pci_type1_select(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg);
33 void pci_type2_select(uint8_t bus,uint8_t func);
34 uint32_t pci_read_cfg_TYPE1(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint8_t size);
35 uint32_t pci_read_cfg_TYPE2(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint8_t size);
36 uint32_t pci_read_cfg_BIOS(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint8_t size);
37 uint32_t pci_read_cfg_NOTIMPL(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint8_t size);
38 void pci_write_cfg_TYPE1(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint32_t data,uint8_t size);
39 void pci_write_cfg_TYPE2(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint32_t data,uint8_t size);
40 void pci_write_cfg_BIOS(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint32_t data,uint8_t size);
41 void pci_write_cfg_NOTIMPL(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint32_t data,uint8_t size);
42 uint8_t pci_probe_device_functions(uint8_t bus,uint8_t dev);
43 void pci_probe_for_last_bus();
44 int pci_probe(int preference);
46 extern uint32_t (*pci_read_cfg_array[PCI_CFG_MAX])(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint8_t size);
47 extern void (*pci_write_cfg_array[PCI_CFG_MAX])(uint8_t bus,uint8_t card,uint8_t func,uint8_t reg,uint32_t data,uint8_t size);