#ifndef HW_ETRAXFS_DMA_H | |
#define HW_ETRAXFS_DMA_H | |
#include "exec/hwaddr.h" | |
struct dma_context_metadata { | |
/* data descriptor md */ | |
uint16_t metadata; | |
}; | |
struct etraxfs_dma_client | |
{ | |
/* DMA controller. */ | |
int channel; | |
void *ctrl; | |
/* client. */ | |
struct { | |
int (*push)(void *opaque, unsigned char *buf, | |
int len, bool eop); | |
void (*pull)(void *opaque); | |
void (*metadata_push)(void *opaque, | |
const struct dma_context_metadata *md); | |
void *opaque; | |
} client; | |
}; | |
void *etraxfs_dmac_init(hwaddr base, int nr_channels); | |
void etraxfs_dmac_connect(void *opaque, int channel, qemu_irq *line, | |
int input); | |
void etraxfs_dmac_connect_client(void *opaque, int c, | |
struct etraxfs_dma_client *cl); | |
int etraxfs_dmac_input(struct etraxfs_dma_client *client, | |
void *buf, int len, int eop); | |
#endif |