xref: /qemu/include/hw/cris/etraxfs_dma.h (revision 0d09e41a)
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