Index: qemu/vl.h =================================================================== --- qemu.orig/vl.h 2007-08-14 19:25:52.000000000 +0000 +++ qemu/vl.h 2007-08-14 19:26:34.000000000 +0000 @@ -734,6 +734,50 @@ #include "hw/irq.h" +/* Generic DMA API */ +typedef void (*qemu_dma_handler)(void *opaque, target_phys_addr_t addr, + uint8_t *buf, int len, int is_write); + +typedef struct QEMUDMAState { + qemu_dma_handler handler; + void *opaque; +} qemu_dma; + +static inline void dma_memory_read(qemu_dma *dma_opaque, + target_phys_addr_t addr, + uint8_t *buf, int len) +{ + if (dma_opaque) + dma_opaque->handler(dma_opaque->opaque, addr, buf, len, 0); +} + +static inline void dma_memory_write(qemu_dma *dma_opaque, + target_phys_addr_t addr, + uint8_t *buf, int len) +{ + if (dma_opaque) + dma_opaque->handler(dma_opaque->opaque, addr, buf, len, 1); +} + +static inline void dma_memory_rw(qemu_dma *dma_opaque, + target_phys_addr_t addr, + uint8_t *buf, int len, int is_write) +{ + if (dma_opaque) + dma_opaque->handler(dma_opaque->opaque, addr, buf, len, is_write); +} + +static inline qemu_dma *qemu_init_dma(qemu_dma_handler handler, void *opaque) +{ + qemu_dma *s; + + s = (qemu_dma *)qemu_mallocz(sizeof(qemu_dma)); + s->handler = handler; + s->opaque = opaque; + + return s; +} + /* ISA bus */ extern target_phys_addr_t isa_mem_base;