QDev properties to be set before the device is realized should be exposed as a Property with a DEFINE_PROP_XXX() macro, then accessed with the equivalent qdev_prop_set_xxx() API.
Do this with the FDCtrlSysBus 'dma-channel' property: convert it to int32_t, default-initialize with DEFINE_PROP_INT32() and use qdev_prop_set_int32() to set its value in fdctrl_init_sysbus(). Reviewed-by: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- hw/block/fdc-internal.h | 2 +- hw/block/fdc-sysbus.c | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/hw/block/fdc-internal.h b/hw/block/fdc-internal.h index 278de725e69..29b318f7525 100644 --- a/hw/block/fdc-internal.h +++ b/hw/block/fdc-internal.h @@ -96,7 +96,7 @@ struct FDCtrl { qemu_irq irq; /* Controller state */ QEMUTimer *result_timer; - int dma_chann; + int32_t dma_chann; uint8_t phase; IsaDma *dma; /* Controller's identification */ diff --git a/hw/block/fdc-sysbus.c b/hw/block/fdc-sysbus.c index 8f94c2efb63..74c7c8f2e01 100644 --- a/hw/block/fdc-sysbus.c +++ b/hw/block/fdc-sysbus.c @@ -106,15 +106,11 @@ void sysbus_fdc_init_drives(SysBusDevice *dev, DriveInfo **fds) void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, hwaddr mmio_base, DriveInfo **fds) { - FDCtrl *fdctrl; DeviceState *dev; SysBusDevice *sbd; - FDCtrlSysBus *sys; dev = qdev_new("sysbus-fdc"); - sys = SYSBUS_FDC(dev); - fdctrl = &sys->state; - fdctrl->dma_chann = dma_chann; /* FIXME */ + qdev_prop_set_int32(dev, "dma-channel", dma_chann); sbd = SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(sbd, &error_fatal); sysbus_connect_irq(sbd, 0, irq); @@ -131,8 +127,6 @@ static void sysbus_fdc_common_initfn(Object *obj) FDCtrlSysBus *sys = SYSBUS_FDC(obj); FDCtrl *fdctrl = &sys->state; - fdctrl->dma_chann = -1; - qdev_set_legacy_instance_id(dev, 0 /* io */, 2); /* FIXME */ memory_region_init_io(&fdctrl->iomem, obj, @@ -173,6 +167,7 @@ static Property sysbus_fdc_properties[] = { DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback, FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, FloppyDriveType), + DEFINE_PROP_INT32("dma-channel", FDCtrlSysBus, state.dma_chann, -1), DEFINE_PROP_END_OF_LIST(), }; -- 2.26.3