|
@@ -1434,24 +1434,26 @@ static const IDEDMAOps ahci_dma_ops = {
|
|
.cmd_done = ahci_cmd_done,
|
|
.cmd_done = ahci_cmd_done,
|
|
};
|
|
};
|
|
|
|
|
|
-void ahci_init(AHCIState *s, DeviceState *qdev, AddressSpace *as, int ports)
|
|
|
|
|
|
+void ahci_init(AHCIState *s, DeviceState *qdev)
|
|
{
|
|
{
|
|
- qemu_irq *irqs;
|
|
|
|
- int i;
|
|
|
|
-
|
|
|
|
- s->as = as;
|
|
|
|
- s->ports = ports;
|
|
|
|
- s->dev = g_new0(AHCIDevice, ports);
|
|
|
|
s->container = qdev;
|
|
s->container = qdev;
|
|
- ahci_reg_init(s);
|
|
|
|
/* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */
|
|
/* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */
|
|
memory_region_init_io(&s->mem, OBJECT(qdev), &ahci_mem_ops, s,
|
|
memory_region_init_io(&s->mem, OBJECT(qdev), &ahci_mem_ops, s,
|
|
"ahci", AHCI_MEM_BAR_SIZE);
|
|
"ahci", AHCI_MEM_BAR_SIZE);
|
|
memory_region_init_io(&s->idp, OBJECT(qdev), &ahci_idp_ops, s,
|
|
memory_region_init_io(&s->idp, OBJECT(qdev), &ahci_idp_ops, s,
|
|
"ahci-idp", 32);
|
|
"ahci-idp", 32);
|
|
|
|
+}
|
|
|
|
|
|
- irqs = qemu_allocate_irqs(ahci_irq_set, s, s->ports);
|
|
|
|
|
|
+void ahci_realize(AHCIState *s, DeviceState *qdev, AddressSpace *as, int ports)
|
|
|
|
+{
|
|
|
|
+ qemu_irq *irqs;
|
|
|
|
+ int i;
|
|
|
|
|
|
|
|
+ s->as = as;
|
|
|
|
+ s->ports = ports;
|
|
|
|
+ s->dev = g_new0(AHCIDevice, ports);
|
|
|
|
+ ahci_reg_init(s);
|
|
|
|
+ irqs = qemu_allocate_irqs(ahci_irq_set, s, s->ports);
|
|
for (i = 0; i < s->ports; i++) {
|
|
for (i = 0; i < s->ports; i++) {
|
|
AHCIDevice *ad = &s->dev[i];
|
|
AHCIDevice *ad = &s->dev[i];
|
|
|
|
|
|
@@ -1646,17 +1648,24 @@ static void sysbus_ahci_reset(DeviceState *dev)
|
|
ahci_reset(&s->ahci);
|
|
ahci_reset(&s->ahci);
|
|
}
|
|
}
|
|
|
|
|
|
-static void sysbus_ahci_realize(DeviceState *dev, Error **errp)
|
|
|
|
|
|
+static void sysbus_ahci_init(Object *obj)
|
|
{
|
|
{
|
|
- SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
|
|
|
- SysbusAHCIState *s = SYSBUS_AHCI(dev);
|
|
|
|
|
|
+ SysbusAHCIState *s = SYSBUS_AHCI(obj);
|
|
|
|
+ SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
|
|
|
|
|
- ahci_init(&s->ahci, dev, &address_space_memory, s->num_ports);
|
|
|
|
|
|
+ ahci_init(&s->ahci, DEVICE(obj));
|
|
|
|
|
|
sysbus_init_mmio(sbd, &s->ahci.mem);
|
|
sysbus_init_mmio(sbd, &s->ahci.mem);
|
|
sysbus_init_irq(sbd, &s->ahci.irq);
|
|
sysbus_init_irq(sbd, &s->ahci.irq);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void sysbus_ahci_realize(DeviceState *dev, Error **errp)
|
|
|
|
+{
|
|
|
|
+ SysbusAHCIState *s = SYSBUS_AHCI(dev);
|
|
|
|
+
|
|
|
|
+ ahci_realize(&s->ahci, dev, &address_space_memory, s->num_ports);
|
|
|
|
+}
|
|
|
|
+
|
|
static Property sysbus_ahci_properties[] = {
|
|
static Property sysbus_ahci_properties[] = {
|
|
DEFINE_PROP_UINT32("num-ports", SysbusAHCIState, num_ports, 1),
|
|
DEFINE_PROP_UINT32("num-ports", SysbusAHCIState, num_ports, 1),
|
|
DEFINE_PROP_END_OF_LIST(),
|
|
DEFINE_PROP_END_OF_LIST(),
|
|
@@ -1677,6 +1686,7 @@ static const TypeInfo sysbus_ahci_info = {
|
|
.name = TYPE_SYSBUS_AHCI,
|
|
.name = TYPE_SYSBUS_AHCI,
|
|
.parent = TYPE_SYS_BUS_DEVICE,
|
|
.parent = TYPE_SYS_BUS_DEVICE,
|
|
.instance_size = sizeof(SysbusAHCIState),
|
|
.instance_size = sizeof(SysbusAHCIState),
|
|
|
|
+ .instance_init = sysbus_ahci_init,
|
|
.class_init = sysbus_ahci_class_init,
|
|
.class_init = sysbus_ahci_class_init,
|
|
};
|
|
};
|
|
|
|
|