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