From patchwork Thu Jan 5 20:02:39 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [3/5] ahci: add support for non-PCI based controllers From: Mark Langsdorf X-Patchwork-Id: 134542 Message-Id: <1325793761-10249-4-git-send-email-mark.langsdorf@calxeda.com> To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Rob Herring , afaerber@suse.de, Mark Langsdorf Date: Thu, 5 Jan 2012 14:02:39 -0600 From: Rob Herring Add support for ahci on sysbus. Signed-off-by: Rob Herring Signed-off-by: Mark Langsdorf --- 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 #include #include +#include #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);