xref: /qemu/include/hw/cris/etraxfs_dma.h (revision 64552b6b)
10d09e41aSPaolo Bonzini #ifndef HW_ETRAXFS_DMA_H
2175de524SMarkus Armbruster #define HW_ETRAXFS_DMA_H
30d09e41aSPaolo Bonzini 
4*ec150c7eSMarkus Armbruster #include "exec/hwaddr.h"
5*ec150c7eSMarkus Armbruster 
60d09e41aSPaolo Bonzini struct dma_context_metadata {
70d09e41aSPaolo Bonzini 	/* data descriptor md */
80d09e41aSPaolo Bonzini 	uint16_t metadata;
90d09e41aSPaolo Bonzini };
100d09e41aSPaolo Bonzini 
110d09e41aSPaolo Bonzini struct etraxfs_dma_client
120d09e41aSPaolo Bonzini {
130d09e41aSPaolo Bonzini 	/* DMA controller. */
140d09e41aSPaolo Bonzini 	int channel;
150d09e41aSPaolo Bonzini 	void *ctrl;
160d09e41aSPaolo Bonzini 
170d09e41aSPaolo Bonzini 	/* client.  */
180d09e41aSPaolo Bonzini 	struct {
190d09e41aSPaolo Bonzini 		int (*push)(void *opaque, unsigned char *buf,
200d09e41aSPaolo Bonzini 		            int len, bool eop);
210d09e41aSPaolo Bonzini 		void (*pull)(void *opaque);
220d09e41aSPaolo Bonzini 		void (*metadata_push)(void *opaque,
230d09e41aSPaolo Bonzini 		                      const struct dma_context_metadata *md);
240d09e41aSPaolo Bonzini 		void *opaque;
250d09e41aSPaolo Bonzini 	} client;
260d09e41aSPaolo Bonzini };
270d09e41aSPaolo Bonzini 
280d09e41aSPaolo Bonzini void *etraxfs_dmac_init(hwaddr base, int nr_channels);
290d09e41aSPaolo Bonzini void etraxfs_dmac_connect(void *opaque, int channel, qemu_irq *line,
300d09e41aSPaolo Bonzini 			  int input);
310d09e41aSPaolo Bonzini void etraxfs_dmac_connect_client(void *opaque, int c,
320d09e41aSPaolo Bonzini 				 struct etraxfs_dma_client *cl);
330d09e41aSPaolo Bonzini int etraxfs_dmac_input(struct etraxfs_dma_client *client,
340d09e41aSPaolo Bonzini 		       void *buf, int len, int eop);
350d09e41aSPaolo Bonzini 
360d09e41aSPaolo Bonzini #endif
37