root / dma.h @ f8d3d128
History | View | Annotate | Download (2 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 | fead0c24 | Paolo Bonzini | struct QEMUSGList {
|
21 | fead0c24 | Paolo Bonzini | ScatterGatherEntry *sg; |
22 | fead0c24 | Paolo Bonzini | int nsg;
|
23 | fead0c24 | Paolo Bonzini | int nalloc;
|
24 | fead0c24 | Paolo Bonzini | size_t size; |
25 | fead0c24 | Paolo Bonzini | }; |
26 | fead0c24 | Paolo Bonzini | |
27 | 10dc8aef | Paolo Bonzini | #if defined(TARGET_PHYS_ADDR_BITS)
|
28 | d9d1055e | David Gibson | typedef target_phys_addr_t dma_addr_t;
|
29 | d9d1055e | David Gibson | |
30 | d9d1055e | David Gibson | #define DMA_ADDR_FMT TARGET_FMT_plx
|
31 | d9d1055e | David Gibson | |
32 | d9d1055e | David Gibson | typedef enum { |
33 | d9d1055e | David Gibson | DMA_DIRECTION_TO_DEVICE = 0,
|
34 | d9d1055e | David Gibson | DMA_DIRECTION_FROM_DEVICE = 1,
|
35 | d9d1055e | David Gibson | } DMADirection; |
36 | d9d1055e | David Gibson | |
37 | 10dc8aef | Paolo Bonzini | struct ScatterGatherEntry {
|
38 | d3231181 | David Gibson | dma_addr_t base; |
39 | d3231181 | David Gibson | dma_addr_t len; |
40 | 10dc8aef | Paolo Bonzini | }; |
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 | 8171ee35 | Paolo Bonzini | uint64_t dma_buf_read(uint8_t *ptr, int32_t len, QEMUSGList *sg); |
62 | 8171ee35 | Paolo Bonzini | uint64_t dma_buf_write(uint8_t *ptr, int32_t len, QEMUSGList *sg); |
63 | 8171ee35 | Paolo Bonzini | |
64 | 84a69356 | Paolo Bonzini | void dma_acct_start(BlockDriverState *bs, BlockAcctCookie *cookie,
|
65 | 84a69356 | Paolo Bonzini | QEMUSGList *sg, enum BlockAcctType type);
|
66 | 84a69356 | Paolo Bonzini | |
67 | 244ab90e | aliguori | #endif |