From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LUgol-0007xO-8U for qemu-devel@nongnu.org; Wed, 04 Feb 2009 07:25:23 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LUgok-0007w4-0W for qemu-devel@nongnu.org; Wed, 04 Feb 2009 07:25:22 -0500 Received: from [199.232.76.173] (port=39667 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LUgoi-0007vW-8q for qemu-devel@nongnu.org; Wed, 04 Feb 2009 07:25:20 -0500 Received: from mx2.redhat.com ([66.187.237.31]:56926) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LUgoh-0007hj-N0 for qemu-devel@nongnu.org; Wed, 04 Feb 2009 07:25:20 -0500 From: Avi Kivity Date: Wed, 4 Feb 2009 14:25:11 +0200 Message-Id: <1233750314-23301-2-git-send-email-avi@redhat.com> In-Reply-To: <1233750314-23301-1-git-send-email-avi@redhat.com> References: <1233750314-23301-1-git-send-email-avi@redhat.com> Subject: [Qemu-devel] [PATCH 1/4] Add a scatter-gather list type and accessors Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Anthony Liguori Scatter-gather lists are used extensively in dma-capable devices; a single data structure allows more code reuse later on. Signed-off-by: Avi Kivity --- Makefile.target | 2 +- dma-helpers.c | 29 +++++++++++++++++++++++++++++ dma.h | 24 ++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletions(-) create mode 100644 dma-helpers.c create mode 100644 dma.h diff --git a/Makefile.target b/Makefile.target index 372d185..28ba17f 100644 --- a/Makefile.target +++ b/Makefile.target @@ -500,7 +500,7 @@ endif #CONFIG_BSD_USER # System emulator target ifndef CONFIG_USER_ONLY -OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o +OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o dma-helpers.o # virtio has to be here due to weird dependency between PCI and virtio-net. # need to fix this properly OBJS+=virtio.o virtio-blk.o virtio-balloon.o virtio-net.o virtio-console.o diff --git a/dma-helpers.c b/dma-helpers.c new file mode 100644 index 0000000..315834e --- /dev/null +++ b/dma-helpers.c @@ -0,0 +1,29 @@ +#include "dma.h" + + +void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint) +{ + qsg->sg = qemu_malloc(alloc_hint * sizeof(ScatterGatherEntry)); + qsg->nsg = 0; + qsg->nalloc = alloc_hint; + qsg->size = 0; +} + +void qemu_sglist_add(QEMUSGList *qsg, target_phys_addr_t base, + target_phys_addr_t len) +{ + if (qsg->nsg == qsg->nalloc) { + qsg->nalloc = 2 * qsg->nalloc + 1; + qsg->sg = qemu_realloc(qsg->sg, qsg->nalloc * sizeof(ScatterGatherEntry)); + } + qsg->sg[qsg->nsg].base = base; + qsg->sg[qsg->nsg].len = len; + qsg->size += len; + ++qsg->nsg; +} + +void qemu_sglist_destroy(QEMUSGList *qsg) +{ + qemu_free(qsg->sg); +} + diff --git a/dma.h b/dma.h new file mode 100644 index 0000000..3b56fa6 --- /dev/null +++ b/dma.h @@ -0,0 +1,24 @@ +#ifndef DMA_H +#define DMA_H + +#include +#include "cpu.h" + +typedef struct { + target_phys_addr_t base; + target_phys_addr_t len; +} ScatterGatherEntry; + +typedef struct { + ScatterGatherEntry *sg; + int nsg; + int nalloc; + target_phys_addr_t size; +} QEMUSGList; + +void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint); +void qemu_sglist_add(QEMUSGList *qsg, target_phys_addr_t base, + target_phys_addr_t len); +void qemu_sglist_destroy(QEMUSGList *qsg); + +#endif -- 1.6.1.1