mirror of https://gitee.com/openkylin/qemu.git
Add a scatter-gather list type and accessors (Avi Kivity)
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 <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6522 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
f39023833e
commit
244ab90e17
|
@ -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
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* DMA helper functions
|
||||
*
|
||||
* Copyright (c) 2009 Red Hat
|
||||
*
|
||||
* This work is licensed under the terms of the GNU General Public License
|
||||
* (GNU GPL), version 2 or later.
|
||||
*/
|
||||
|
||||
#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);
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* DMA helper functions
|
||||
*
|
||||
* Copyright (c) 2009 Red Hat
|
||||
*
|
||||
* This work is licensed under the terms of the GNU General Public License
|
||||
* (GNU GPL), version 2 or later.
|
||||
*/
|
||||
|
||||
#ifndef DMA_H
|
||||
#define DMA_H
|
||||
|
||||
#include <stdio.h>
|
||||
#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
|
Loading…
Reference in New Issue