diff options
Diffstat (limited to 'hw/xilinx_axidma.h')
-rw-r--r-- | hw/xilinx_axidma.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/hw/xilinx_axidma.h b/hw/xilinx_axidma.h new file mode 100644 index 0000000..37cb6f0 --- /dev/null +++ b/hw/xilinx_axidma.h @@ -0,0 +1,39 @@ +/* AXI DMA connection. Used until qdev provides a generic way. */ +typedef void (*DMAPushFn)(void *opaque, + unsigned char *buf, size_t len, uint32_t *app); + +struct XilinxDMAConnection { + void *dma; + void *client; + + DMAPushFn to_dma; + DMAPushFn to_client; +}; + +static inline void xlx_dma_connect_client(struct XilinxDMAConnection *dmach, + void *c, DMAPushFn f) +{ + dmach->client = c; + dmach->to_client = f; +} + +static inline void xlx_dma_connect_dma(struct XilinxDMAConnection *dmach, + void *d, DMAPushFn f) +{ + dmach->dma = d; + dmach->to_dma = f; +} + +static inline +void xlx_dma_push_to_dma(struct XilinxDMAConnection *dmach, + uint8_t *buf, size_t len, uint32_t *app) +{ + dmach->to_dma(dmach->dma, buf, len, app); +} +static inline +void xlx_dma_push_to_client(struct XilinxDMAConnection *dmach, + uint8_t *buf, size_t len, uint32_t *app) +{ + dmach->to_client(dmach->client, buf, len, app); +} + |