annotate libavcodec/cell/h264_dma.c @ 4:96e628866d41

naming some tasks to help debugging
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 19 Dec 2012 15:40:26 +0100
parents
children
rev   line source
nengel@2 1 #include <spu_mfcio.h>
nengel@2 2 #include "h264_dma.h"
nengel@2 3
nengel@2 4 DECLARE_ALIGNED_16(dma_list_elem_t, put_list_buf[2*(52+26+26)]);
nengel@2 5 dma_list_elem_t* put_list;
nengel@2 6
nengel@2 7 DECLARE_ALIGNED_16(dma_list_elem_t, get_list_buf[16*(4+5 + 2*3)]);
nengel@2 8 dma_list_elem_t* get_list;
nengel@2 9
nengel@2 10 inline void spu_dma_get(void *ls, unsigned ea, int size, int tag){
nengel@2 11 mfc_get(ls, ea, size, tag, 0, 0);
nengel@2 12 }
nengel@2 13
nengel@2 14 inline void spu_dma_put(void *ls, unsigned ea, int size, int tag){
nengel@2 15 mfc_put(ls, ea, size, tag, 0, 0);
nengel@2 16 }
nengel@2 17
nengel@2 18 inline void spu_dma_barrier_put(void *ls, unsigned ea, int size, int tag){
nengel@2 19 mfc_putb(ls, ea, size, tag, 0, 0);
nengel@2 20 }
nengel@2 21
nengel@2 22 // Function that wait to finish a DMA transfer with especific id
nengel@2 23 inline void wait_dma_id(int id){
nengel@2 24 spu_writech(MFC_WrTagMask, 1<< id);
nengel@2 25 (void)spu_mfcstat(MFC_TAG_UPDATE_ALL);
nengel@2 26 }
nengel@2 27
nengel@2 28 // Functions to get/put a block from/to main memory
nengel@2 29 void get_dma_list(void *dst, void* ea, unsigned int w, unsigned int h, unsigned int stride, unsigned int tag, int barrier)
nengel@2 30 {
nengel@2 31 unsigned int i = 0;
nengel@2 32 unsigned int listsize;
nengel@2 33 unsigned int ea_low;
nengel@2 34
nengel@2 35 dma_list_elem_t* list = get_list;
nengel@2 36 get_list+=h;
nengel@2 37
nengel@2 38 ea_low=(uint32_t) mfc_ea2l(ea);
nengel@2 39
nengel@2 40 /* Create the list, size of each list id the "width" parameter defined by the user */
nengel@2 41 for ( i=0; i<h; i++ ){
nengel@2 42 list[i].size.all32 = w;
nengel@2 43 list[i].ea_low = ea_low;
nengel@2 44 ea_low += stride;
nengel@2 45 }
nengel@2 46 /* Specify the list size and initiate the list transfer */
nengel@2 47 listsize = h*sizeof(dma_list_elem_t);
nengel@2 48 if (barrier)
nengel@2 49 mfc_getlb(dst, (unsigned)ea, list, listsize, tag, 0, 0);
nengel@2 50 else
nengel@2 51 mfc_getl(dst, (unsigned)ea, list, listsize, tag, 0, 0);
nengel@2 52 }
nengel@2 53
nengel@2 54
nengel@2 55 void put_dma_list(void *src, void* ea, unsigned int size, unsigned int h, unsigned int stride, unsigned int tag){
nengel@2 56 unsigned int i = 0;
nengel@2 57 unsigned int listsize;
nengel@2 58 unsigned int ea_low;
nengel@2 59
nengel@2 60 dma_list_elem_t* list = put_list;
nengel@2 61 put_list+=h;
nengel@2 62
nengel@2 63 ea_low=(uint32_t) mfc_ea2l(ea);
nengel@2 64
nengel@2 65 /* Create the list, size of each list id the "width" parameter defined by the user */
nengel@2 66 for ( i=0; i<h; i++ ) {
nengel@2 67 list[i].size.all32 = size;
nengel@2 68 list[i].ea_low = ea_low;
nengel@2 69 ea_low += stride;
nengel@2 70 }
nengel@2 71 /* Specify the list size and initiate the list transfer */
nengel@2 72 listsize = h*sizeof(dma_list_elem_t);
nengel@2 73 mfc_putl(src, (unsigned) ea, list, listsize, tag, 0, 0);
nengel@2 74 }