From: Rob Herring <rob.herr...@calxeda.com> Add support for ahci on sysbus.
Signed-off-by: Rob Herring <rob.herr...@calxeda.com> Signed-off-by: Mark Langsdorf <mark.langsd...@calxeda.com> Reviewed-by: Andreas Färber <afaer...@suse.de> --- Changes from v10 None Changes from v9 Changed typedef struct names to CamelCase Changes from v7, v8 None Changes from v5, v6 Skipped Changes from v4 replaced all references to Plat|plat_ with sysbus_ made the number of ports into a qdev property added dummy migration support Changes from v3 Renamed plat-ahci to sysbus-ahci Changes from v1, v2 Corrected indentation of PlatAHCIState members Made plat_ahci_info into a single structure, not a list hw/ide/ahci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 44 insertions(+), 0 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 0af201d..0309dd6 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -25,6 +25,7 @@ #include <hw/msi.h> #include <hw/pc.h> #include <hw/pci.h> +#include <hw/sysbus.h> #include "monitor.h" #include "dma.h" @@ -1214,3 +1215,46 @@ void ahci_reset(void *opaque) ahci_reset_port(&d->ahci, i); } } + +typedef struct SysbusAHCIState { + SysBusDevice busdev; + AHCIState ahci; + uint32_t num_ports; +} SysbusAHCIState; + +static const VMStateDescription vmstate_sysbus_ahci = { + .name = "sysbus-ahci", + .unmigratable = 1, +}; + +static int sysbus_ahci_init(SysBusDevice *dev) +{ + SysbusAHCIState *s = FROM_SYSBUS(SysbusAHCIState, dev); + ahci_init(&s->ahci, &dev->qdev, s->num_ports); + + sysbus_init_mmio(dev, &s->ahci.mem); + sysbus_init_irq(dev, &s->ahci.irq); + + qemu_register_reset(ahci_reset, &s->ahci); + return 0; +} + +static SysBusDeviceInfo sysbus_ahci_info = { + .qdev.name = "sysbus-ahci", + .qdev.size = sizeof(SysbusAHCIState), + .qdev.vmsd = &vmstate_sysbus_ahci, + .qdev.props = (Property[]) { + DEFINE_PROP_UINT32("num-ports", SysbusAHCIState, num_ports, 1), + DEFINE_PROP_END_OF_LIST(), + }, + .init = sysbus_ahci_init, + + +}; + +static void sysbus_ahci_register(void) +{ + sysbus_register_withprop(&sysbus_ahci_info); +} + +device_init(sysbus_ahci_register); -- 1.7.5.4