#define CF_FLAG_PHYSICALLY_CONTIGUOUS 0x00000002
#define CF_FLAG_DMAPOLLING 0x00000004
-
enum xlnk_dma_direction {
XLNK_DMA_BI = 0,
XLNK_DMA_TO_DEVICE = 1,
};
union xlnk_args {
- struct {
- unsigned int len;
- int id;
- unsigned int phyaddr;
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int len;
+ __aligned(4) int id;
+ __aligned(4) unsigned int phyaddr;
unsigned char cacheable;
} allocbuf;
- struct {
- unsigned int id;
- void *buf;
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int id;
+ __aligned(4) void *buf;
} freebuf;
- struct {
- int dmabuf_fd;
- void *user_addr;
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) int dmabuf_fd;
+ __aligned(4) void *user_addr;
} dmabuf;
- struct {
+ struct __attribute__ ((__packed__)) {
char name[64]; /* max length of 64 */
- u32 dmachan; /* return value */
- unsigned int bd_space_phys_addr;/*for bd chain used by dmachan*/
- unsigned int bd_space_size; /* bd chain size in bytes */
+ /* return value */
+ __aligned(4) unsigned int dmachan;
+ /*for bd chain used by dmachan*/
+ __aligned(4) unsigned int bd_space_phys_addr;
+ /* bd chain size in bytes */
+ __aligned(4) unsigned int bd_space_size;
} dmarequest;
#define XLNK_MAX_APPWORDS 5
- struct {
- u32 dmachan;
- void *buf; /* buffer base address */
- void *buf2; /* used to point src_buf in cdma case */
- unsigned int buf_offset; /* used on kernel allocated buffers */
- unsigned int len;
- unsigned int bufflag; /* zero all the time so far */
- u32 sglist; /* ignored */
- unsigned int sgcnt; /* ignored */
- enum xlnk_dma_direction dmadir;
- unsigned int nappwords_i; /* n appwords passed to BD */
- unsigned int appwords_i[XLNK_MAX_APPWORDS];
- unsigned int nappwords_o; /* n appwords passed from BD */
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int dmachan;
+ /* buffer base address */
+ __aligned(4) void *buf;
+ /* used to point src_buf in cdma case */
+ __aligned(4) void *buf2;
+ /* used on kernel allocated buffers */
+ __aligned(4) unsigned int buf_offset;
+ __aligned(4) unsigned int len;
+ /* zero all the time so far */
+ __aligned(4) unsigned int bufflag;
+ __aligned(4) unsigned int sglist; /* ignored */
+ __aligned(4) unsigned int sgcnt; /* ignored */
+ __aligned(4) int dmadir;
+ __aligned(4) unsigned int nappwords_i;
+ __aligned(4) unsigned int appwords_i[XLNK_MAX_APPWORDS];
+ __aligned(4) unsigned int nappwords_o;
/* appwords array we only accept 5 max */
- unsigned int flag;
- u32 dmahandle; /* return value */
- unsigned int last_bd_index; /*index of last bd used by request*/
+ __aligned(4) unsigned int flag;
+ /* return value */
+ __aligned(4) unsigned int dmahandle;
+ /*index of last bd used by request*/
+ __aligned(4) unsigned int last_bd_index;
} dmasubmit;
- struct {
- u32 dmahandle;
- unsigned int nappwords; /* n appwords read from BD */
- unsigned int appwords[XLNK_MAX_APPWORDS];
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int dmahandle;
+ __aligned(4) unsigned int nappwords;
+ __aligned(4) unsigned int appwords[XLNK_MAX_APPWORDS];
/* appwords array we only accept 5 max */
} dmawait;
- struct {
- u32 dmachan;
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int dmachan;
} dmarelease;
- struct {
- unsigned int base;
- unsigned int size;
- unsigned int irqs[8];
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int base;
+ __aligned(4) unsigned int size;
+ __aligned(4) unsigned int irqs[8];
char name[32];
- unsigned int id;
+ __aligned(4) unsigned int id;
} devregister;
- struct {
- unsigned int base;
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) unsigned int base;
} devunregister;
- struct {
+ struct __attribute__ ((__packed__)) {
char name[32];
- unsigned int id;
- unsigned int base;
- unsigned int size;
- unsigned int chan_num;
- unsigned int chan0_dir;
- unsigned int chan0_irq;
- unsigned int chan0_poll_mode;
- unsigned int chan0_include_dre;
- unsigned int chan0_data_width;
- unsigned int chan1_dir;
- unsigned int chan1_irq;
- unsigned int chan1_poll_mode;
- unsigned int chan1_include_dre;
- unsigned int chan1_data_width;
+ __aligned(4) unsigned int id;
+ __aligned(4) unsigned int base;
+ __aligned(4) unsigned int size;
+ __aligned(4) unsigned int chan_num;
+ __aligned(4) unsigned int chan0_dir;
+ __aligned(4) unsigned int chan0_irq;
+ __aligned(4) unsigned int chan0_poll_mode;
+ __aligned(4) unsigned int chan0_include_dre;
+ __aligned(4) unsigned int chan0_data_width;
+ __aligned(4) unsigned int chan1_dir;
+ __aligned(4) unsigned int chan1_irq;
+ __aligned(4) unsigned int chan1_poll_mode;
+ __aligned(4) unsigned int chan1_include_dre;
+ __aligned(4) unsigned int chan1_data_width;
} dmaregister;
- struct {
+ struct __attribute__ ((__packed__)) {
char name[32];
- unsigned int id;
- unsigned int base;
- unsigned int size;
- unsigned int mm2s_chan_num;
- unsigned int mm2s_chan_irq;
- unsigned int s2mm_chan_num;
- unsigned int s2mm_chan_irq;
+ __aligned(4) unsigned int id;
+ __aligned(4) unsigned int base;
+ __aligned(4) unsigned int size;
+ __aligned(4) unsigned int mm2s_chan_num;
+ __aligned(4) unsigned int mm2s_chan_irq;
+ __aligned(4) unsigned int s2mm_chan_num;
+ __aligned(4) unsigned int s2mm_chan_irq;
} mcdmaregister;
- struct {
- void *phys_addr;
- int size;
- int action;
+ struct __attribute__ ((__packed__)) {
+ __aligned(4) void *phys_addr;
+ __aligned(4) int size;
+ __aligned(4) int action;
} cachecontrol;
};