[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 17/17] [RFC] dma/rc4030: do multiple calls to add
From: |
Hervé Poussineau |
Subject: |
[Qemu-devel] [PATCH v2 17/17] [RFC] dma/rc4030: do multiple calls to address_space_rw when doing DMA transfers |
Date: |
Wed, 27 May 2015 14:20:00 +0200 |
This fixes Windows NT 4.0/MIPS, which was always bugchecking with
IRQL_NOT_LESS_OR_EQUAL.
Cc: Paolo Bonzini <address@hidden>
---
hw/dma/rc4030.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c
index 3efa6de..deac0a8 100644
--- a/hw/dma/rc4030.c
+++ b/hw/dma/rc4030.c
@@ -681,6 +681,7 @@ static void rc4030_do_dma(void *opaque, int n, uint8_t
*buf, int len, int is_wri
rc4030State *s = opaque;
hwaddr dma_addr;
int dev_to_mem;
+ int i;
s->dma_regs[n][DMA_REG_ENABLE] &= ~(DMA_FLAG_TC_INTR | DMA_FLAG_MEM_INTR |
DMA_FLAG_ADDR_INTR);
@@ -699,8 +700,17 @@ static void rc4030_do_dma(void *opaque, int n, uint8_t
*buf, int len, int is_wri
dma_addr = s->dma_regs[n][DMA_REG_ADDRESS];
/* Read/write data at right place */
- address_space_rw(&s->dma_as, dma_addr, MEMTXATTRS_UNSPECIFIED,
- buf, len, is_write);
+ for (i = 0; i < len; ) {
+ int ncpy = DMA_PAGESIZE - (dma_addr & (DMA_PAGESIZE - 1));
+ if (ncpy > len - i) {
+ ncpy = len - i;
+ }
+ address_space_rw(&s->dma_as, dma_addr, MEMTXATTRS_UNSPECIFIED,
+ buf + i, ncpy, is_write);
+
+ dma_addr += ncpy;
+ i += ncpy;
+ }
s->dma_regs[n][DMA_REG_ENABLE] |= DMA_FLAG_TC_INTR;
s->dma_regs[n][DMA_REG_COUNT] -= len;
--
2.1.4
- [Qemu-devel] [PATCH v2 00/17] net/dp8393x and dma/rc4030 improvements, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 01/17] mips jazz: compile only in 64 bit little endian, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 13/17] net/dp8393x: add load/save support, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 14/17] net/dp8393x: correctly reset in_use field, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 09/17] net/dp8393x: do not use old_mmio accesses, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 12/17] net/dp8393x: add PROM to store MAC address, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 02/17] dma/rc4030: create custom DMA address space, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 10/17] net/dp8393x: use dp8393x_ prefix for all functions, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 11/17] net/dp8393x: QOM'ify, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 17/17] [RFC] dma/rc4030: do multiple calls to address_space_rw when doing DMA transfers,
Hervé Poussineau <=
- [Qemu-devel] [PATCH v2 07/17] dma/rc4030: convert to QOM, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 06/17] dma/rc4030: use trace events instead of custom logging, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 08/17] net/dp8393x: always calculate proper checksums, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 04/17] dma/rc4030: do not use old_mmio accesses, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 15/17] net/dp8393x: fix hardware reset, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 05/17] dma/rc4030: document register at offset 0x210, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 16/17] net/dp8393x: repair can_receive() method, Hervé Poussineau, 2015/05/27
- [Qemu-devel] [PATCH v2 03/17] dma/rc4030: use AddressSpace and address_space_rw in users, Hervé Poussineau, 2015/05/27