70 uint64_t pci_actual_io_offset;
71 uint64_t pci_actual_mem_offset;
73 uint64_t pci_portbase;
76 uint64_t isa_portbase;
80 uint64_t cur_pci_portbase;
81 uint64_t cur_pci_membase;
84 int cur_bus, cur_device, cur_func, cur_reg;
85 int last_was_write_ffffffff;
87 struct pci_device *first_device;
90 #define PCI_CFG_MEM_SIZE 0x100
94 struct pci_device *next;
97 struct pci_data *pcibus;
101 int bus, device,
function;
104 unsigned char cfg_mem[PCI_CFG_MEM_SIZE];
105 unsigned char cfg_mem_size[PCI_CFG_MEM_SIZE];
108 int cur_mapreg_offset;
111 int (*cfg_reg_write)(
struct pci_device *pd,
112 int reg, uint32_t value);
116 #define PCIINIT(name) void pciinit_ ## name(struct machine *machine, \
117 struct memory *mem, struct pci_device *pd)
123 #define PCI_SET_DATA(ofs,value) { \
124 pd->cfg_mem[(ofs)] = (value) & 255; \
125 pd->cfg_mem[(ofs) + 1] = ((value) >> 8) & 255; \
126 pd->cfg_mem[(ofs) + 2] = ((value) >> 16) & 255; \
127 pd->cfg_mem[(ofs) + 3] = ((value) >> 24) & 255; \
129 #define PCI_SET_DATA_SIZE(ofs,value) { \
130 pd->cfg_mem_size[(ofs)] = (value) & 255; \
131 pd->cfg_mem_size[(ofs) + 1] = ((value) >> 8) & 255; \
132 pd->cfg_mem_size[(ofs) + 2] = ((value) >> 16) & 255; \
133 pd->cfg_mem_size[(ofs) + 3] = ((value) >> 24) & 255; \
138 #define BUS_PCI_ADDR 0xcf8
139 #define BUS_PCI_DATA 0xcfc
149 int bus,
int device,
int function,
int reg);
151 uint64_t *
data,
int len,
int writeflag);
155 uint64_t pci_actual_io_offset, uint64_t pci_actual_mem_offset,
156 uint64_t pci_portbase, uint64_t pci_membase,
const char *pci_irqbase,
157 uint64_t isa_portbase, uint64_t isa_membase,
const char *isa_irqbase);
161 struct memory *mem,
int bus,
int device,
int function,