fdc: convert to reset + vmsd
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
63235df8a1
commit
2be3783328
37
hw/fdc.c
37
hw/fdc.c
|
@ -699,9 +699,18 @@ static const VMStateDescription vmstate_fdc = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void fdctrl_external_reset(void *opaque)
|
static void fdctrl_external_reset_sysbus(DeviceState *d)
|
||||||
{
|
{
|
||||||
fdctrl_t *s = opaque;
|
fdctrl_sysbus_t *sys = container_of(d, fdctrl_sysbus_t, busdev.qdev);
|
||||||
|
fdctrl_t *s = &sys->state;
|
||||||
|
|
||||||
|
fdctrl_reset(s, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fdctrl_external_reset_isa(DeviceState *d)
|
||||||
|
{
|
||||||
|
fdctrl_isabus_t *isa = container_of(d, fdctrl_isabus_t, busdev.qdev);
|
||||||
|
fdctrl_t *s = &isa->state;
|
||||||
|
|
||||||
fdctrl_reset(s, 0);
|
fdctrl_reset(s, 0);
|
||||||
}
|
}
|
||||||
|
@ -1923,9 +1932,6 @@ static int fdctrl_init_common(fdctrl_t *fdctrl)
|
||||||
DMA_register_channel(fdctrl->dma_chann, &fdctrl_transfer_handler, fdctrl);
|
DMA_register_channel(fdctrl->dma_chann, &fdctrl_transfer_handler, fdctrl);
|
||||||
fdctrl_connect_drives(fdctrl);
|
fdctrl_connect_drives(fdctrl);
|
||||||
|
|
||||||
fdctrl_external_reset(fdctrl);
|
|
||||||
vmstate_register(-1, &vmstate_fdc, fdctrl);
|
|
||||||
qemu_register_reset(fdctrl_external_reset, fdctrl);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1936,6 +1942,7 @@ static int isabus_fdc_init1(ISADevice *dev)
|
||||||
int iobase = 0x3f0;
|
int iobase = 0x3f0;
|
||||||
int isairq = 6;
|
int isairq = 6;
|
||||||
int dma_chann = 2;
|
int dma_chann = 2;
|
||||||
|
int ret;
|
||||||
|
|
||||||
register_ioport_read(iobase + 0x01, 5, 1,
|
register_ioport_read(iobase + 0x01, 5, 1,
|
||||||
&fdctrl_read_port, fdctrl);
|
&fdctrl_read_port, fdctrl);
|
||||||
|
@ -1948,13 +1955,18 @@ static int isabus_fdc_init1(ISADevice *dev)
|
||||||
isa_init_irq(&isa->busdev, &fdctrl->irq, isairq);
|
isa_init_irq(&isa->busdev, &fdctrl->irq, isairq);
|
||||||
fdctrl->dma_chann = dma_chann;
|
fdctrl->dma_chann = dma_chann;
|
||||||
|
|
||||||
return fdctrl_init_common(fdctrl);
|
ret = fdctrl_init_common(fdctrl);
|
||||||
|
fdctrl_external_reset_isa(&isa->busdev.qdev);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sysbus_fdc_init1(SysBusDevice *dev)
|
static int sysbus_fdc_init1(SysBusDevice *dev)
|
||||||
{
|
{
|
||||||
fdctrl_t *fdctrl = &(FROM_SYSBUS(fdctrl_sysbus_t, dev)->state);
|
fdctrl_sysbus_t *sys = DO_UPCAST(fdctrl_sysbus_t, busdev, dev);
|
||||||
|
fdctrl_t *fdctrl = &sys->state;
|
||||||
int io;
|
int io;
|
||||||
|
int ret;
|
||||||
|
|
||||||
io = cpu_register_io_memory(fdctrl_mem_read, fdctrl_mem_write, fdctrl);
|
io = cpu_register_io_memory(fdctrl_mem_read, fdctrl_mem_write, fdctrl);
|
||||||
sysbus_init_mmio(dev, 0x08, io);
|
sysbus_init_mmio(dev, 0x08, io);
|
||||||
|
@ -1962,7 +1974,10 @@ static int sysbus_fdc_init1(SysBusDevice *dev)
|
||||||
qdev_init_gpio_in(&dev->qdev, fdctrl_handle_tc, 1);
|
qdev_init_gpio_in(&dev->qdev, fdctrl_handle_tc, 1);
|
||||||
fdctrl->dma_chann = -1;
|
fdctrl->dma_chann = -1;
|
||||||
|
|
||||||
return fdctrl_init_common(fdctrl);
|
ret = fdctrl_init_common(fdctrl);
|
||||||
|
fdctrl_external_reset_sysbus(&sys->busdev.qdev);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sun4m_fdc_init1(SysBusDevice *dev)
|
static int sun4m_fdc_init1(SysBusDevice *dev)
|
||||||
|
@ -1984,6 +1999,8 @@ static ISADeviceInfo isa_fdc_info = {
|
||||||
.init = isabus_fdc_init1,
|
.init = isabus_fdc_init1,
|
||||||
.qdev.name = "isa-fdc",
|
.qdev.name = "isa-fdc",
|
||||||
.qdev.size = sizeof(fdctrl_isabus_t),
|
.qdev.size = sizeof(fdctrl_isabus_t),
|
||||||
|
.qdev.vmsd = &vmstate_fdc,
|
||||||
|
.qdev.reset = fdctrl_external_reset_isa,
|
||||||
.qdev.props = (Property[]) {
|
.qdev.props = (Property[]) {
|
||||||
DEFINE_PROP_DRIVE("driveA", fdctrl_isabus_t, state.drives[0].dinfo),
|
DEFINE_PROP_DRIVE("driveA", fdctrl_isabus_t, state.drives[0].dinfo),
|
||||||
DEFINE_PROP_DRIVE("driveB", fdctrl_isabus_t, state.drives[1].dinfo),
|
DEFINE_PROP_DRIVE("driveB", fdctrl_isabus_t, state.drives[1].dinfo),
|
||||||
|
@ -1995,6 +2012,8 @@ static SysBusDeviceInfo sysbus_fdc_info = {
|
||||||
.init = sysbus_fdc_init1,
|
.init = sysbus_fdc_init1,
|
||||||
.qdev.name = "sysbus-fdc",
|
.qdev.name = "sysbus-fdc",
|
||||||
.qdev.size = sizeof(fdctrl_sysbus_t),
|
.qdev.size = sizeof(fdctrl_sysbus_t),
|
||||||
|
.qdev.vmsd = &vmstate_fdc,
|
||||||
|
.qdev.reset = fdctrl_external_reset_sysbus,
|
||||||
.qdev.props = (Property[]) {
|
.qdev.props = (Property[]) {
|
||||||
DEFINE_PROP_DRIVE("driveA", fdctrl_sysbus_t, state.drives[0].dinfo),
|
DEFINE_PROP_DRIVE("driveA", fdctrl_sysbus_t, state.drives[0].dinfo),
|
||||||
DEFINE_PROP_DRIVE("driveB", fdctrl_sysbus_t, state.drives[1].dinfo),
|
DEFINE_PROP_DRIVE("driveB", fdctrl_sysbus_t, state.drives[1].dinfo),
|
||||||
|
@ -2006,6 +2025,8 @@ static SysBusDeviceInfo sun4m_fdc_info = {
|
||||||
.init = sun4m_fdc_init1,
|
.init = sun4m_fdc_init1,
|
||||||
.qdev.name = "SUNW,fdtwo",
|
.qdev.name = "SUNW,fdtwo",
|
||||||
.qdev.size = sizeof(fdctrl_sysbus_t),
|
.qdev.size = sizeof(fdctrl_sysbus_t),
|
||||||
|
.qdev.vmsd = &vmstate_fdc,
|
||||||
|
.qdev.reset = fdctrl_external_reset_sysbus,
|
||||||
.qdev.props = (Property[]) {
|
.qdev.props = (Property[]) {
|
||||||
DEFINE_PROP_DRIVE("drive", fdctrl_sysbus_t, state.drives[0].dinfo),
|
DEFINE_PROP_DRIVE("drive", fdctrl_sysbus_t, state.drives[0].dinfo),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
|
|
Loading…
Reference in a new issue