[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 02/18] dma-helpers: add dma_buf_read and dma_buf_
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v4 02/18] dma-helpers: add dma_buf_read and dma_buf_write |
Date: |
Wed, 22 Feb 2012 15:33:40 +0100 |
These helpers do a full transfer from an in-memory buffer to target
memory, with support for scatter/gather lists. It will be used to
store the reply of an emulated command into a QEMUSGList provided by
the adapter.
Signed-off-by: Paolo Bonzini <address@hidden>
---
dma-helpers.c | 31 +++++++++++++++++++++++++++++++
dma.h | 3 +++
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/dma-helpers.c b/dma-helpers.c
index f08cdb5..df0a421 100644
--- a/dma-helpers.c
+++ b/dma-helpers.c
@@ -204,3 +204,34 @@ BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs,
{
return dma_bdrv_io(bs, sg, sector, bdrv_aio_writev, cb, opaque, true);
}
+
+
+static uint64_t dma_buf_rw(uint8_t *ptr, int32_t len, QEMUSGList *sg, bool
to_dev)
+{
+ uint64_t resid;
+ int sg_cur_index;
+
+ resid = sg->size;
+ sg_cur_index = 0;
+ len = MIN(len, resid);
+ while (len > 0) {
+ ScatterGatherEntry entry = sg->sg[sg_cur_index++];
+ int32_t xfer = MIN(len, entry.len);
+ cpu_physical_memory_rw(entry.base, ptr, xfer, !to_dev);
+ ptr += xfer;
+ len -= xfer;
+ resid -= xfer;
+ }
+
+ return resid;
+}
+
+uint64_t dma_buf_read(uint8_t *ptr, int32_t len, QEMUSGList *sg)
+{
+ return dma_buf_rw(ptr, len, sg, 0);
+}
+
+uint64_t dma_buf_write(uint8_t *ptr, int32_t len, QEMUSGList *sg)
+{
+ return dma_buf_rw(ptr, len, sg, 1);
+}
diff --git a/dma.h b/dma.h
index d50019b..346ac4f 100644
--- a/dma.h
+++ b/dma.h
@@ -58,4 +58,7 @@ BlockDriverAIOCB *dma_bdrv_read(BlockDriverState *bs,
BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs,
QEMUSGList *sg, uint64_t sector,
BlockDriverCompletionFunc *cb, void *opaque);
+uint64_t dma_buf_read(uint8_t *ptr, int32_t len, QEMUSGList *sg);
+uint64_t dma_buf_write(uint8_t *ptr, int32_t len, QEMUSGList *sg);
+
#endif
--
1.7.7.6
- [Qemu-devel] [PULL v4 00/18] virtio-scsi driver, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 02/18] dma-helpers: add dma_buf_read and dma_buf_write,
Paolo Bonzini <=
- [Qemu-devel] [PATCH v4 03/18] dma-helpers: add accounting wrappers, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 04/18] ahci: use new DMA helpers, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 01/18] dma-helpers: make QEMUSGList target independent, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 05/18] scsi: pass residual amount to command_complete, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 07/18] scsi-disk: enable scatter/gather functionality, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 06/18] scsi: add scatter/gather functionality, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 08/18] scsi: add SCSIDevice vmstate definitions, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 09/18] scsi-generic: add migration support, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 12/18] virtio-scsi: Add basic request processing infrastructure, Paolo Bonzini, 2012/02/22
- [Qemu-devel] [PATCH v4 10/18] scsi-disk: add migration support, Paolo Bonzini, 2012/02/22