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