Commit 244ab90e17e4feefbf35224d6d7bd96d394b4b26
1 parent
f3902383
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
Showing
3 changed files
with
72 additions
and
1 deletions
Makefile.target
... | ... | @@ -500,7 +500,7 @@ endif #CONFIG_BSD_USER |
500 | 500 | # System emulator target |
501 | 501 | ifndef CONFIG_USER_ONLY |
502 | 502 | |
503 | -OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o | |
503 | +OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o machine.o dma-helpers.o | |
504 | 504 | # virtio has to be here due to weird dependency between PCI and virtio-net. |
505 | 505 | # need to fix this properly |
506 | 506 | OBJS+=virtio.o virtio-blk.o virtio-balloon.o virtio-net.o virtio-console.o | ... | ... |
dma-helpers.c
0 → 100644
1 | +/* | |
2 | + * DMA helper functions | |
3 | + * | |
4 | + * Copyright (c) 2009 Red Hat | |
5 | + * | |
6 | + * This work is licensed under the terms of the GNU General Public License | |
7 | + * (GNU GPL), version 2 or later. | |
8 | + */ | |
9 | + | |
10 | +#include "dma.h" | |
11 | + | |
12 | + | |
13 | +void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint) | |
14 | +{ | |
15 | + qsg->sg = qemu_malloc(alloc_hint * sizeof(ScatterGatherEntry)); | |
16 | + qsg->nsg = 0; | |
17 | + qsg->nalloc = alloc_hint; | |
18 | + qsg->size = 0; | |
19 | +} | |
20 | + | |
21 | +void qemu_sglist_add(QEMUSGList *qsg, target_phys_addr_t base, | |
22 | + target_phys_addr_t len) | |
23 | +{ | |
24 | + if (qsg->nsg == qsg->nalloc) { | |
25 | + qsg->nalloc = 2 * qsg->nalloc + 1; | |
26 | + qsg->sg = qemu_realloc(qsg->sg, qsg->nalloc * sizeof(ScatterGatherEntry)); | |
27 | + } | |
28 | + qsg->sg[qsg->nsg].base = base; | |
29 | + qsg->sg[qsg->nsg].len = len; | |
30 | + qsg->size += len; | |
31 | + ++qsg->nsg; | |
32 | +} | |
33 | + | |
34 | +void qemu_sglist_destroy(QEMUSGList *qsg) | |
35 | +{ | |
36 | + qemu_free(qsg->sg); | |
37 | +} | |
38 | + | ... | ... |
dma.h
0 → 100644
1 | +/* | |
2 | + * DMA helper functions | |
3 | + * | |
4 | + * Copyright (c) 2009 Red Hat | |
5 | + * | |
6 | + * This work is licensed under the terms of the GNU General Public License | |
7 | + * (GNU GPL), version 2 or later. | |
8 | + */ | |
9 | + | |
10 | +#ifndef DMA_H | |
11 | +#define DMA_H | |
12 | + | |
13 | +#include <stdio.h> | |
14 | +#include "cpu.h" | |
15 | + | |
16 | +typedef struct { | |
17 | + target_phys_addr_t base; | |
18 | + target_phys_addr_t len; | |
19 | +} ScatterGatherEntry; | |
20 | + | |
21 | +typedef struct { | |
22 | + ScatterGatherEntry *sg; | |
23 | + int nsg; | |
24 | + int nalloc; | |
25 | + target_phys_addr_t size; | |
26 | +} QEMUSGList; | |
27 | + | |
28 | +void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint); | |
29 | +void qemu_sglist_add(QEMUSGList *qsg, target_phys_addr_t base, | |
30 | + target_phys_addr_t len); | |
31 | +void qemu_sglist_destroy(QEMUSGList *qsg); | |
32 | + | |
33 | +#endif | ... | ... |