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> --- 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 | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 135d0ee..982ee31 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,33 @@ void ahci_reset(void *opaque) ahci_reset_port(s, i); } } + +typedef struct PlatAHCIState { + SysBusDevice busdev; + AHCIState ahci; +} PlatAHCIState; + +static int plat_ahci_init(SysBusDevice *dev) +{ + PlatAHCIState *s = FROM_SYSBUS(PlatAHCIState, dev); + ahci_init(&s->ahci, &dev->qdev, 1); + + 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 plat_ahci_info = { + .qdev.name = "sysbus-ahci", + .qdev.size = sizeof(PlatAHCIState), + .init = plat_ahci_init, +}; + +static void plat_ahci_register(void) +{ + sysbus_register_withprop(&plat_ahci_info); +} + +device_init(plat_ahci_register); -- 1.7.5.4