mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 04:13:39 +08:00
pci: move pci host stuff from pci.c to pci_host.c
Move pci host stuff from pci.c to pci_host.c. And add some comments. Later pcie host bridge functions will be defined in pcie_host.c not to bloat pci.c. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
74e32ac1d1
commit
766347cc8c
67
hw/pci.c
67
hw/pci.c
@ -663,73 +663,6 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)
|
||||
pci_update_mappings(d);
|
||||
}
|
||||
|
||||
static inline PCIDevice *pci_addr_to_dev(PCIBus *bus, uint32_t addr)
|
||||
{
|
||||
uint8_t bus_num = (addr >> 16) & 0xff;
|
||||
uint8_t devfn = (addr >> 8) & 0xff;
|
||||
return pci_find_device(bus, bus_num, PCI_SLOT(devfn), PCI_FUNC(devfn));
|
||||
}
|
||||
|
||||
static inline int pci_addr_to_config(uint32_t addr)
|
||||
{
|
||||
return addr & (PCI_CONFIG_SPACE_SIZE - 1);
|
||||
}
|
||||
|
||||
void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len)
|
||||
{
|
||||
PCIBus *s = opaque;
|
||||
PCIDevice *pci_dev;
|
||||
int config_addr;
|
||||
|
||||
#if 0
|
||||
PCI_DPRINTF("pci_data_write: addr=%08x val=%08x len=%d\n",
|
||||
addr, val, len);
|
||||
#endif
|
||||
pci_dev = pci_addr_to_dev(s, addr);
|
||||
if (!pci_dev)
|
||||
return;
|
||||
config_addr = addr & 0xff;
|
||||
config_addr = pci_addr_to_config(addr);
|
||||
PCI_DPRINTF("pci_config_write: %s: addr=%02x val=%08x len=%d\n",
|
||||
pci_dev->name, config_addr, val, len);
|
||||
pci_dev->config_write(pci_dev, config_addr, val, len);
|
||||
}
|
||||
|
||||
uint32_t pci_data_read(void *opaque, uint32_t addr, int len)
|
||||
{
|
||||
PCIBus *s = opaque;
|
||||
PCIDevice *pci_dev;
|
||||
int config_addr;
|
||||
uint32_t val;
|
||||
|
||||
pci_dev = pci_addr_to_dev(s, addr);
|
||||
if (!pci_dev) {
|
||||
switch(len) {
|
||||
case 1:
|
||||
val = 0xff;
|
||||
break;
|
||||
case 2:
|
||||
val = 0xffff;
|
||||
break;
|
||||
default:
|
||||
case 4:
|
||||
val = 0xffffffff;
|
||||
break;
|
||||
}
|
||||
goto the_end;
|
||||
}
|
||||
config_addr = pci_addr_to_config(addr);
|
||||
val = pci_dev->config_read(pci_dev, config_addr, len);
|
||||
PCI_DPRINTF("pci_config_read: %s: addr=%02x val=%08x len=%d\n",
|
||||
pci_dev->name, config_addr, val, len);
|
||||
the_end:
|
||||
#if 0
|
||||
PCI_DPRINTF("pci_data_read: addr=%08x val=%08x len=%d\n",
|
||||
addr, val, len);
|
||||
#endif
|
||||
return val;
|
||||
}
|
||||
|
||||
/***********************************************************/
|
||||
/* generic PCI irq support */
|
||||
|
||||
|
@ -32,6 +32,69 @@ do { printf("pci_host_data: " fmt , ## __VA_ARGS__); } while (0)
|
||||
#define PCI_DPRINTF(fmt, ...)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PCI address
|
||||
* bit 16 - 24: bus number
|
||||
* bit 8 - 15: devfun number
|
||||
* bit 0 - 7: offset in configuration space of a given pci device
|
||||
*/
|
||||
|
||||
/* the helper functio to get a PCIDeice* for a given pci address */
|
||||
static inline PCIDevice *pci_addr_to_dev(PCIBus *bus, uint32_t addr)
|
||||
{
|
||||
uint8_t bus_num = (addr >> 16) & 0xff;
|
||||
uint8_t devfn = (addr >> 8) & 0xff;
|
||||
return pci_find_device(bus, bus_num, PCI_SLOT(devfn), PCI_FUNC(devfn));
|
||||
}
|
||||
|
||||
static inline uint32_t pci_addr_to_config(uint32_t addr)
|
||||
{
|
||||
return addr & (PCI_CONFIG_SPACE_SIZE - 1);
|
||||
}
|
||||
|
||||
void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len)
|
||||
{
|
||||
PCIBus *s = opaque;
|
||||
PCIDevice *pci_dev = pci_addr_to_dev(s, addr);
|
||||
uint32_t config_addr = pci_addr_to_config(addr);
|
||||
|
||||
if (!pci_dev)
|
||||
return;
|
||||
|
||||
PCI_DPRINTF("%s: %s: addr=%02"PRIx32" val=%08"PRI32x" len=%d\n",
|
||||
__func__, pci_dev->name, config_addr, val, len);
|
||||
pci_dev->config_write(pci_dev, config_addr, val, len);
|
||||
}
|
||||
|
||||
uint32_t pci_data_read(void *opaque, uint32_t addr, int len)
|
||||
{
|
||||
PCIBus *s = opaque;
|
||||
PCIDevice *pci_dev = pci_addr_to_dev(s, addr);
|
||||
uint32_t config_addr = pci_addr_to_config(addr);
|
||||
uint32_t val;
|
||||
|
||||
if (!pci_dev) {
|
||||
switch(len) {
|
||||
case 1:
|
||||
val = 0xff;
|
||||
break;
|
||||
case 2:
|
||||
val = 0xffff;
|
||||
break;
|
||||
default:
|
||||
case 4:
|
||||
val = 0xffffffff;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
val = pci_dev->config_read(pci_dev, config_addr, len);
|
||||
PCI_DPRINTF("%s: %s: addr=%02"PRIx32" val=%08"PRIx32" len=%d\n",
|
||||
__func__, pci_dev->name, config_addr, val, len);
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static void pci_host_config_writel(void *opaque, target_phys_addr_t addr,
|
||||
uint32_t val)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user