root / dma.h @ 19bf7c87
History | View | Annotate | Download (1.8 kB)
1 | 244ab90e | aliguori | /*
|
---|---|---|---|
2 | 244ab90e | aliguori | * DMA helper functions
|
3 | 244ab90e | aliguori | *
|
4 | 244ab90e | aliguori | * Copyright (c) 2009 Red Hat
|
5 | 244ab90e | aliguori | *
|
6 | 244ab90e | aliguori | * This work is licensed under the terms of the GNU General Public License
|
7 | 244ab90e | aliguori | * (GNU GPL), version 2 or later.
|
8 | 244ab90e | aliguori | */
|
9 | 244ab90e | aliguori | |
10 | 244ab90e | aliguori | #ifndef DMA_H
|
11 | 244ab90e | aliguori | #define DMA_H
|
12 | 244ab90e | aliguori | |
13 | 244ab90e | aliguori | #include <stdio.h> |
14 | 1ad2134f | Paul Brook | //#include "cpu.h"
|
15 | 1ad2134f | Paul Brook | #include "hw/hw.h" |
16 | 59a703eb | aliguori | #include "block.h" |
17 | 244ab90e | aliguori | |
18 | 10dc8aef | Paolo Bonzini | typedef struct ScatterGatherEntry ScatterGatherEntry; |
19 | 10dc8aef | Paolo Bonzini | |
20 | 10dc8aef | Paolo Bonzini | #if defined(TARGET_PHYS_ADDR_BITS)
|
21 | d9d1055e | David Gibson | typedef target_phys_addr_t dma_addr_t;
|
22 | d9d1055e | David Gibson | |
23 | d9d1055e | David Gibson | #define DMA_ADDR_FMT TARGET_FMT_plx
|
24 | d9d1055e | David Gibson | |
25 | d9d1055e | David Gibson | typedef enum { |
26 | d9d1055e | David Gibson | DMA_DIRECTION_TO_DEVICE = 0,
|
27 | d9d1055e | David Gibson | DMA_DIRECTION_FROM_DEVICE = 1,
|
28 | d9d1055e | David Gibson | } DMADirection; |
29 | d9d1055e | David Gibson | |
30 | 10dc8aef | Paolo Bonzini | struct ScatterGatherEntry {
|
31 | d3231181 | David Gibson | dma_addr_t base; |
32 | d3231181 | David Gibson | dma_addr_t len; |
33 | 10dc8aef | Paolo Bonzini | }; |
34 | 244ab90e | aliguori | |
35 | d35bf9ad | Gerd Hoffmann | struct QEMUSGList {
|
36 | 244ab90e | aliguori | ScatterGatherEntry *sg; |
37 | 244ab90e | aliguori | int nsg;
|
38 | 244ab90e | aliguori | int nalloc;
|
39 | d3231181 | David Gibson | dma_addr_t size; |
40 | d35bf9ad | Gerd Hoffmann | }; |
41 | 244ab90e | aliguori | |
42 | 244ab90e | aliguori | void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint); |
43 | d3231181 | David Gibson | void qemu_sglist_add(QEMUSGList *qsg, dma_addr_t base, dma_addr_t len);
|
44 | 244ab90e | aliguori | void qemu_sglist_destroy(QEMUSGList *qsg);
|
45 | 10dc8aef | Paolo Bonzini | #endif
|
46 | 244ab90e | aliguori | |
47 | cb144ccb | Christoph Hellwig | typedef BlockDriverAIOCB *DMAIOFunc(BlockDriverState *bs, int64_t sector_num,
|
48 | cb144ccb | Christoph Hellwig | QEMUIOVector *iov, int nb_sectors,
|
49 | cb144ccb | Christoph Hellwig | BlockDriverCompletionFunc *cb, void *opaque);
|
50 | cb144ccb | Christoph Hellwig | |
51 | cb144ccb | Christoph Hellwig | BlockDriverAIOCB *dma_bdrv_io(BlockDriverState *bs, |
52 | cb144ccb | Christoph Hellwig | QEMUSGList *sg, uint64_t sector_num, |
53 | cb144ccb | Christoph Hellwig | DMAIOFunc *io_func, BlockDriverCompletionFunc *cb, |
54 | bbca72c6 | Paolo Bonzini | void *opaque, bool to_dev); |
55 | 59a703eb | aliguori | BlockDriverAIOCB *dma_bdrv_read(BlockDriverState *bs, |
56 | 59a703eb | aliguori | QEMUSGList *sg, uint64_t sector, |
57 | 59a703eb | aliguori | BlockDriverCompletionFunc *cb, void *opaque);
|
58 | 59a703eb | aliguori | BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs, |
59 | 59a703eb | aliguori | QEMUSGList *sg, uint64_t sector, |
60 | 59a703eb | aliguori | BlockDriverCompletionFunc *cb, void *opaque);
|
61 | 244ab90e | aliguori | #endif |