]> 4ch.mooo.com Git - 16.git/blob - src/lib/doslib/hw/pci/pci.h
added a bunch of things~ and midi stuff~
[16.git] / src / lib / doslib / hw / pci / pci.h
1
2 #include <hw/cpu/cpu.h>
3 #include <stdint.h>
4
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...) */
7 enum {
8         PCI_CFG_NONE=0,
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) */
13         PCI_CFG_MAX
14 };
15
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)
19
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)
23
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;
31
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);
45
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);
48
49