FDCtrlSysBus's FDCtrl state is a private field. However it is accessed by the public fdctrl_init_sysbus() and sun4m_fdctrl_init() methods. To be able to move them out of fdc-sysbus.c, first add the sysbus_fdc_init_drives() method and use it in these 2 functions.
Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- include/hw/block/fdc.h | 2 ++ hw/block/fdc-sysbus.c | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h index 1ecca7cac7f..52e45c53078 100644 --- a/include/hw/block/fdc.h +++ b/include/hw/block/fdc.h @@ -3,6 +3,7 @@ #include "exec/hwaddr.h" #include "qapi/qapi-types-block.h" +#include "hw/sysbus.h" /* fdc.c */ #define MAX_FD 2 @@ -10,6 +11,7 @@ #define TYPE_ISA_FDC "isa-fdc" void isa_fdc_init_drives(ISADevice *fdc, DriveInfo **fds); +void sysbus_fdc_init_drives(SysBusDevice *dev, DriveInfo **fds); void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, hwaddr mmio_base, DriveInfo **fds); void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, diff --git a/hw/block/fdc-sysbus.c b/hw/block/fdc-sysbus.c index 71755fd6ae4..1163e53165d 100644 --- a/hw/block/fdc-sysbus.c +++ b/hw/block/fdc-sysbus.c @@ -94,6 +94,15 @@ static void fdctrl_handle_tc(void *opaque, int irq, int level) trace_fdctrl_tc_pulse(level); } +void sysbus_fdc_init_drives(SysBusDevice *dev, DriveInfo **fds) +{ + FDCtrlSysBus *fdc; + + fdc = SYSBUS_FDC(dev); + + fdctrl_init_drives(&fdc->state.bus, fds); +} + void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, hwaddr mmio_base, DriveInfo **fds) { @@ -111,23 +120,23 @@ void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, sysbus_connect_irq(sbd, 0, irq); sysbus_mmio_map(sbd, 0, mmio_base); - fdctrl_init_drives(&sys->state.bus, fds); + sysbus_fdc_init_drives(sbd, fds); } void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, DriveInfo **fds, qemu_irq *fdc_tc) { DeviceState *dev; - FDCtrlSysBus *sys; + SysBusDevice *sbd; dev = qdev_new("sun-fdtwo"); - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - sys = SYSBUS_FDC(dev); - sysbus_connect_irq(SYS_BUS_DEVICE(sys), 0, irq); - sysbus_mmio_map(SYS_BUS_DEVICE(sys), 0, io_base); + sbd = SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(sbd, &error_fatal); + sysbus_connect_irq(sbd, 0, irq); + sysbus_mmio_map(sbd, 0, io_base); *fdc_tc = qdev_get_gpio_in(dev, 0); - fdctrl_init_drives(&sys->state.bus, fds); + sysbus_fdc_init_drives(sbd, fds); } static void sysbus_fdc_common_initfn(Object *obj) -- 2.26.3