From e63204853e71ffe4493f55ee82db8122f9b44ed1 Mon Sep 17 00:00:00 2001 From: edgar_igl Date: Sun, 7 Dec 2008 00:14:21 +0000 Subject: [PATCH] ETRAX-FS: Simplify the DMA blocks address registration and decoding. Signed-off-by: Edgar E. Iglesias git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5898 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/etraxfs_dma.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/hw/etraxfs_dma.c b/hw/etraxfs_dma.c index 54e55d1288..1bc5f4170e 100644 --- a/hw/etraxfs_dma.c +++ b/hw/etraxfs_dma.c @@ -165,11 +165,9 @@ enum dma_ch_state struct fs_dma_channel { - int regmap; qemu_irq *irq; struct etraxfs_dma_client *client; - /* Internal status. */ int stream_cmd_src; enum dma_ch_state state; @@ -187,6 +185,7 @@ struct fs_dma_channel struct fs_dma_ctrl { + int map; CPUState *env; int nr_channels; @@ -570,9 +569,9 @@ dma_readl (void *opaque, target_phys_addr_t addr) int c; uint32_t r = 0; - /* Make addr relative to this instances base. */ + /* Make addr relative to this channel and bounded to nr regs. */ c = fs_channel(addr); - addr &= 0x1fff; + addr &= 0xff; switch (addr) { case RW_STAT: @@ -616,9 +615,9 @@ dma_writel (void *opaque, target_phys_addr_t addr, uint32_t value) struct fs_dma_ctrl *ctrl = opaque; int c; - /* Make addr relative to this instances base. */ + /* Make addr relative to this channel and bounded to nr regs. */ c = fs_channel(addr); - addr &= 0x1fff; + addr &= 0xff; switch (addr) { case RW_DATA: @@ -744,7 +743,6 @@ void *etraxfs_dmac_init(CPUState *env, target_phys_addr_t base, int nr_channels) { struct fs_dma_ctrl *ctrl = NULL; - int i; ctrl = qemu_mallocz(sizeof *ctrl); if (!ctrl) @@ -758,17 +756,8 @@ void *etraxfs_dmac_init(CPUState *env, if (!ctrl->channels) goto err; - for (i = 0; i < nr_channels; i++) - { - ctrl->channels[i].regmap = cpu_register_io_memory(0, - dma_read, - dma_write, - ctrl); - cpu_register_physical_memory_offset (base + i * 0x2000, - sizeof ctrl->channels[i].regs, ctrl->channels[i].regmap, - i * 0x2000); - } - + ctrl->map = cpu_register_io_memory(0, dma_read, dma_write, ctrl); + cpu_register_physical_memory(base, nr_channels * 0x2000, ctrl->map); return ctrl; err: qemu_free(ctrl->channels); -- 2.11.0