mirror of https://github.com/xemu-project/xemu.git
msi: Invoke msi/msix_write_config from PCI core
Also this functions is better invoked by the core than by each and every device. This allows to drop the config_write callbacks from ich and intel-hda. CC: Alexander Graf <agraf@suse.de> CC: Gerd Hoffmann <kraxel@redhat.com> CC: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
7c9958b043
commit
95d6580024
|
@ -143,13 +143,6 @@ static int pci_ich9_uninit(PCIDevice *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void pci_ich9_write_config(PCIDevice *pci, uint32_t addr,
|
||||
uint32_t val, int len)
|
||||
{
|
||||
pci_default_write_config(pci, addr, val, len);
|
||||
msi_write_config(pci, addr, val, len);
|
||||
}
|
||||
|
||||
static void ich_ahci_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
@ -157,7 +150,6 @@ static void ich_ahci_class_init(ObjectClass *klass, void *data)
|
|||
|
||||
k->init = pci_ich9_ahci_init;
|
||||
k->exit = pci_ich9_uninit;
|
||||
k->config_write = pci_ich9_write_config;
|
||||
k->vendor_id = PCI_VENDOR_ID_INTEL;
|
||||
k->device_id = PCI_DEVICE_ID_INTEL_82801IR;
|
||||
k->revision = 0x02;
|
||||
|
|
|
@ -1153,17 +1153,6 @@ static int intel_hda_exit(PCIDevice *pci)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void intel_hda_write_config(PCIDevice *pci, uint32_t addr,
|
||||
uint32_t val, int len)
|
||||
{
|
||||
IntelHDAState *d = DO_UPCAST(IntelHDAState, pci, pci);
|
||||
|
||||
pci_default_write_config(pci, addr, val, len);
|
||||
if (d->msi) {
|
||||
msi_write_config(pci, addr, val, len);
|
||||
}
|
||||
}
|
||||
|
||||
static int intel_hda_post_load(void *opaque, int version)
|
||||
{
|
||||
IntelHDAState* d = opaque;
|
||||
|
@ -1252,7 +1241,6 @@ static void intel_hda_class_init(ObjectClass *klass, void *data)
|
|||
|
||||
k->init = intel_hda_init;
|
||||
k->exit = intel_hda_exit;
|
||||
k->config_write = intel_hda_write_config;
|
||||
k->vendor_id = PCI_VENDOR_ID_INTEL;
|
||||
k->device_id = 0x2668;
|
||||
k->revision = 1;
|
||||
|
|
|
@ -71,7 +71,6 @@ static void ioh3420_write_config(PCIDevice *d,
|
|||
pci_get_long(d->config + d->exp.aer_cap + PCI_ERR_ROOT_COMMAND);
|
||||
|
||||
pci_bridge_write_config(d, address, val, len);
|
||||
msi_write_config(d, address, val, len);
|
||||
ioh3420_aer_vector_update(d);
|
||||
pcie_cap_slot_write_config(d, address, val, len);
|
||||
pcie_aer_write_config(d, address, val, len);
|
||||
|
|
2
hw/msi.c
2
hw/msi.c
|
@ -264,7 +264,7 @@ void msi_notify(PCIDevice *dev, unsigned int vector)
|
|||
stl_le_phys(address, data);
|
||||
}
|
||||
|
||||
/* call this function after updating configs by pci_default_write_config(). */
|
||||
/* Normally called by pci_default_write_config(). */
|
||||
void msi_write_config(PCIDevice *dev, uint32_t addr, uint32_t val, int len)
|
||||
{
|
||||
uint16_t flags = pci_get_word(dev->config + msi_flags_off(dev));
|
||||
|
|
3
hw/pci.c
3
hw/pci.c
|
@ -1042,6 +1042,9 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)
|
|||
|
||||
if (range_covers_byte(addr, l, PCI_COMMAND))
|
||||
pci_update_irq_disabled(d, was_irq_disabled);
|
||||
|
||||
msi_write_config(d, addr, val, l);
|
||||
msix_write_config(d, addr, val, l);
|
||||
}
|
||||
|
||||
/***********************************************************/
|
||||
|
|
|
@ -520,8 +520,6 @@ static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,
|
|||
virtio_set_status(proxy->vdev,
|
||||
proxy->vdev->status & ~VIRTIO_CONFIG_S_DRIVER_OK);
|
||||
}
|
||||
|
||||
msix_write_config(pci_dev, address, val, len);
|
||||
}
|
||||
|
||||
static unsigned virtio_pci_get_features(void *opaque)
|
||||
|
|
|
@ -41,7 +41,6 @@ static void xio3130_downstream_write_config(PCIDevice *d, uint32_t address,
|
|||
pci_bridge_write_config(d, address, val, len);
|
||||
pcie_cap_flr_write_config(d, address, val, len);
|
||||
pcie_cap_slot_write_config(d, address, val, len);
|
||||
msi_write_config(d, address, val, len);
|
||||
pcie_aer_write_config(d, address, val, len);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,6 @@ static void xio3130_upstream_write_config(PCIDevice *d, uint32_t address,
|
|||
{
|
||||
pci_bridge_write_config(d, address, val, len);
|
||||
pcie_cap_flr_write_config(d, address, val, len);
|
||||
msi_write_config(d, address, val, len);
|
||||
pcie_aer_write_config(d, address, val, len);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue