This emphasises than two controller are created (in master/slave configuration).
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- hw/dma/i8257.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/hw/dma/i8257.c b/hw/dma/i8257.c index df030f934c..72f8893b9e 100644 --- a/hw/dma/i8257.c +++ b/hw/dma/i8257.c @@ -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)); } -- 2.16.3
