1*0d09e41aSPaolo Bonzini #ifndef HW_ETRAXFS_DMA_H 2*0d09e41aSPaolo Bonzini #define HW_ETRAXFS_DMA_H 1 3*0d09e41aSPaolo Bonzini 4*0d09e41aSPaolo Bonzini struct dma_context_metadata { 5*0d09e41aSPaolo Bonzini /* data descriptor md */ 6*0d09e41aSPaolo Bonzini uint16_t metadata; 7*0d09e41aSPaolo Bonzini }; 8*0d09e41aSPaolo Bonzini 9*0d09e41aSPaolo Bonzini struct etraxfs_dma_client 10*0d09e41aSPaolo Bonzini { 11*0d09e41aSPaolo Bonzini /* DMA controller. */ 12*0d09e41aSPaolo Bonzini int channel; 13*0d09e41aSPaolo Bonzini void *ctrl; 14*0d09e41aSPaolo Bonzini 15*0d09e41aSPaolo Bonzini /* client. */ 16*0d09e41aSPaolo Bonzini struct { 17*0d09e41aSPaolo Bonzini int (*push)(void *opaque, unsigned char *buf, 18*0d09e41aSPaolo Bonzini int len, bool eop); 19*0d09e41aSPaolo Bonzini void (*pull)(void *opaque); 20*0d09e41aSPaolo Bonzini void (*metadata_push)(void *opaque, 21*0d09e41aSPaolo Bonzini const struct dma_context_metadata *md); 22*0d09e41aSPaolo Bonzini void *opaque; 23*0d09e41aSPaolo Bonzini } client; 24*0d09e41aSPaolo Bonzini }; 25*0d09e41aSPaolo Bonzini 26*0d09e41aSPaolo Bonzini void *etraxfs_dmac_init(hwaddr base, int nr_channels); 27*0d09e41aSPaolo Bonzini void etraxfs_dmac_connect(void *opaque, int channel, qemu_irq *line, 28*0d09e41aSPaolo Bonzini int input); 29*0d09e41aSPaolo Bonzini void etraxfs_dmac_connect_client(void *opaque, int c, 30*0d09e41aSPaolo Bonzini struct etraxfs_dma_client *cl); 31*0d09e41aSPaolo Bonzini int etraxfs_dmac_input(struct etraxfs_dma_client *client, 32*0d09e41aSPaolo Bonzini void *buf, int len, int eop); 33*0d09e41aSPaolo Bonzini 34*0d09e41aSPaolo Bonzini #endif 35