nengel@2: #ifndef H264_DMA_H nengel@2: #define H264_DMA_H nengel@2: nengel@2: #include "libavutil/mem.h" nengel@2: nengel@2: typedef struct dma_list_elem { nengel@2: union { nengel@2: unsigned int all32; nengel@2: struct { nengel@2: unsigned int stall : 1; nengel@2: unsigned int reserved : 15; nengel@2: unsigned int nbytes : 16; nengel@2: } bits; nengel@2: } size; nengel@2: uint64_t ea_low : 32; nengel@2: }dma_list_elem_t; nengel@2: nengel@2: extern DECLARE_ALIGNED_16(dma_list_elem_t, put_list_buf[2*(52+26+26)]); nengel@2: extern dma_list_elem_t* put_list; nengel@2: nengel@2: extern DECLARE_ALIGNED_16(dma_list_elem_t, get_list_buf[16*(4+5 + 2*3)]); nengel@2: extern dma_list_elem_t* get_list; nengel@2: nengel@2: enum{ nengel@2: MBD_slice=1, nengel@2: MBD_buf1, nengel@2: MBD_buf2, nengel@2: MBD_buf3, nengel@2: MBD_put, nengel@2: MBD_pic, nengel@2: MBD_mc_buf1, nengel@2: MBD_mc_buf2 nengel@2: }; nengel@2: nengel@2: enum{ nengel@2: ED_spe=1, nengel@2: ED_slice, nengel@2: ED_raw, nengel@2: ED_get, nengel@2: ED_get2, nengel@2: ED_get_mv, nengel@2: ED_put, nengel@2: ED_putmb0, nengel@2: ED_putmb1, nengel@2: }; nengel@2: nengel@2: // Functions to get/put a block from/to main memory nengel@2: void get_dma_list(void *dst, void* ea, unsigned int w, unsigned int h, unsigned int stride, unsigned int tag, int barrier); nengel@2: void put_dma_list(void *src, void* ea, unsigned int size, unsigned int h, unsigned int stride, unsigned int tag); nengel@2: nengel@2: //Functions to do a dma transfer for 32-bit nengel@2: void spu_dma_get(void *ls, unsigned ea, int size, int tag); nengel@2: void spu_dma_put(void *ls, unsigned ea, int size, int tag); nengel@2: void spu_dma_barrier_put(void *ls, unsigned ea, int size, int tag); nengel@2: nengel@2: // Function that wait to finish a DMA transfer with especific id nengel@2: void wait_dma_id(int id); nengel@2: nengel@2: #endif