@@ -622,26 +622,44 @@ static void i8257_register_types(void)
type_init(i8257_register_types)
-void i8257_dma_init(ISABus *bus, bool high_page_enable)
+static ISADevice *i8257_dma_init_master(ISABus *bus, bool high_page_enable)
{
- ISADevice *isa1, *isa2;
+ ISADevice *isa;
DeviceState *d;
- isa1 = isa_create(bus, TYPE_I8257);
- d = DEVICE(isa1);
+ isa = isa_create(bus, TYPE_I8257);
+ d = DEVICE(isa);
qdev_prop_set_int32(d, "base", 0x00);
qdev_prop_set_int32(d, "page-base", 0x80);
qdev_prop_set_int32(d, "pageh-base", high_page_enable ? 0x480 : -1);
qdev_prop_set_int32(d, "dshift", 0);
qdev_init_nofail(d);
- isa2 = isa_create(bus, TYPE_I8257);
- d = DEVICE(isa2);
+ return isa;
+}
+
+static ISADevice *i8257_dma_init_slave(ISABus *bus, bool high_page_enable)
+{
+ ISADevice *isa;
+ DeviceState *d;
+
+ isa = isa_create(bus, TYPE_I8257);
+ d = DEVICE(isa);
qdev_prop_set_int32(d, "base", 0xc0);
qdev_prop_set_int32(d, "page-base", 0x88);
qdev_prop_set_int32(d, "pageh-base", high_page_enable ? 0x488 : -1);
qdev_prop_set_int32(d, "dshift", 1);
qdev_init_nofail(d);
- isa_bus_dma(bus, ISADMA(isa1), ISADMA(isa2));
+ return isa;
+}
+
+void i8257_dma_init(ISABus *bus, bool high_page_enable)
+{
+ ISADevice *master, *slave;
+
+ master = i8257_dma_init_master(bus, high_page_enable);
+ slave = i8257_dma_init_slave(bus, high_page_enable);
+
+ isa_bus_dma(bus, ISADMA(master), ISADMA(slave));
}
This emphasises than two controller are created (in master/slave configuration). Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/dma/i8257.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-)