Commit 95d65800 authored by Jan Kiszka's avatar Jan Kiszka Committed by Michael S. Tsirkin
Browse files

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: default avatarJan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 7c9958b0
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -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;
+0 −12
Original line number Diff line number Diff line
@@ -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;
+0 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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);
}

/***********************************************************/
Loading