00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef DMA_H
00011 #define DMA_H
00012
00013 #include <stdio.h>
00014 #include "cpu.h"
00015 #include "block.h"
00016
00017 typedef struct {
00018 target_phys_addr_t base;
00019 target_phys_addr_t len;
00020 } ScatterGatherEntry;
00021
00022 typedef struct {
00023 ScatterGatherEntry *sg;
00024 int nsg;
00025 int nalloc;
00026 target_phys_addr_t size;
00027 } QEMUSGList;
00028
00029 void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint);
00030 void qemu_sglist_add(QEMUSGList *qsg, target_phys_addr_t base,
00031 target_phys_addr_t len);
00032 void qemu_sglist_destroy(QEMUSGList *qsg);
00033
00034 BlockDriverAIOCB *dma_bdrv_read(BlockDriverState *bs,
00035 QEMUSGList *sg, uint64_t sector,
00036 BlockDriverCompletionFunc *cb, void *opaque);
00037 BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs,
00038 QEMUSGList *sg, uint64_t sector,
00039 BlockDriverCompletionFunc *cb, void *opaque);
00040 void dma_helper_init(void);
00041
00042 #endif