xref: /qemu/include/hw/cris/etraxfs_dma.h (revision ec150c7e)
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 #include "hw/irq.h"
6*ec150c7eSMarkus Armbruster 
70d09e41aSPaolo Bonzini struct dma_context_metadata {
80d09e41aSPaolo Bonzini 	/* data descriptor md */
90d09e41aSPaolo Bonzini 	uint16_t metadata;
100d09e41aSPaolo Bonzini };
110d09e41aSPaolo Bonzini 
120d09e41aSPaolo Bonzini struct etraxfs_dma_client
130d09e41aSPaolo Bonzini {
140d09e41aSPaolo Bonzini 	/* DMA controller. */
150d09e41aSPaolo Bonzini 	int channel;
160d09e41aSPaolo Bonzini 	void *ctrl;
170d09e41aSPaolo Bonzini 
180d09e41aSPaolo Bonzini 	/* client.  */
190d09e41aSPaolo Bonzini 	struct {
200d09e41aSPaolo Bonzini 		int (*push)(void *opaque, unsigned char *buf,
210d09e41aSPaolo Bonzini 		            int len, bool eop);
220d09e41aSPaolo Bonzini 		void (*pull)(void *opaque);
230d09e41aSPaolo Bonzini 		void (*metadata_push)(void *opaque,
240d09e41aSPaolo Bonzini 		                      const struct dma_context_metadata *md);
250d09e41aSPaolo Bonzini 		void *opaque;
260d09e41aSPaolo Bonzini 	} client;
270d09e41aSPaolo Bonzini };
280d09e41aSPaolo Bonzini 
290d09e41aSPaolo Bonzini void *etraxfs_dmac_init(hwaddr base, int nr_channels);
300d09e41aSPaolo Bonzini void etraxfs_dmac_connect(void *opaque, int channel, qemu_irq *line,
310d09e41aSPaolo Bonzini 			  int input);
320d09e41aSPaolo Bonzini void etraxfs_dmac_connect_client(void *opaque, int c,
330d09e41aSPaolo Bonzini 				 struct etraxfs_dma_client *cl);
340d09e41aSPaolo Bonzini int etraxfs_dmac_input(struct etraxfs_dma_client *client,
350d09e41aSPaolo Bonzini 		       void *buf, int len, int eop);
360d09e41aSPaolo Bonzini 
370d09e41aSPaolo Bonzini #endif
38