X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=hw%2Fide%2Fich.c;h=459916977eed9e579b520fea92221a6fd0aab3de;hb=c9f086418a255f386e1c4d2c1418c032eb349537;hp=350c7f1c75313038382977f6ac0d0e37d4cd90fa;hpb=0915aed5842bd4dbe396b92d4f3b846ae29ad663;p=mirror_qemu.git diff --git a/hw/ide/ich.c b/hw/ide/ich.c index 350c7f1c75..459916977e 100644 --- a/hw/ide/ich.c +++ b/hw/ide/ich.c @@ -60,16 +60,16 @@ * */ -#include -#include -#include -#include -#include +#include "qemu/osdep.h" +#include "hw/hw.h" +#include "hw/pci/msi.h" +#include "hw/i386/pc.h" +#include "hw/pci/pci.h" +#include "hw/isa/isa.h" #include "sysemu/block-backend.h" #include "sysemu/dma.h" - -#include -#include +#include "hw/ide/pci.h" +#include "hw/ide/ahci.h" #define ICH9_MSI_CAP_OFFSET 0x80 #define ICH9_SATA_CAP_OFFSET 0xA8 @@ -97,14 +97,22 @@ static void pci_ich9_reset(DeviceState *dev) ahci_reset(&d->ahci); } +static void pci_ich9_ahci_init(Object *obj) +{ + struct AHCIPCIState *d = ICH_AHCI(obj); + + ahci_init(&d->ahci, DEVICE(obj)); +} + static void pci_ich9_ahci_realize(PCIDevice *dev, Error **errp) { struct AHCIPCIState *d; int sata_cap_offset; uint8_t *sata_cap; d = ICH_AHCI(dev); + int ret; - ahci_init(&d->ahci, DEVICE(dev), pci_get_address_space(dev), 6); + ahci_realize(&d->ahci, DEVICE(dev), pci_get_address_space(dev), 6); pci_config_set_prog_interface(dev->config, AHCI_PROGMODE_MAJOR_REV_1); @@ -138,7 +146,10 @@ static void pci_ich9_ahci_realize(PCIDevice *dev, Error **errp) /* Although the AHCI 1.3 specification states that the first capability * should be PMCAP, the Intel ICH9 data sheet specifies that the ICH9 * AHCI device puts the MSI capability first, pointing to 0x80. */ - msi_init(dev, ICH9_MSI_CAP_OFFSET, 1, true, false); + ret = msi_init(dev, ICH9_MSI_CAP_OFFSET, 1, true, false, NULL); + /* Any error other than -ENOTSUP(board's MSI support is broken) + * is a programming error. Fall back to INTx silently on -ENOTSUP */ + assert(!ret || ret == -ENOTSUP); } static void pci_ich9_uninit(PCIDevice *dev) @@ -171,6 +182,7 @@ static const TypeInfo ich_ahci_info = { .name = TYPE_ICH9_AHCI, .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(AHCIPCIState), + .instance_init = pci_ich9_ahci_init, .class_init = ich_ahci_class_init, };