コード例 #1
0
ファイル: disp_sprite.c プロジェクト: godark/A10-Linux-2.6.36
//the para including fb address,fb width,fb height,source x/y offset,screen window
__s32 BSP_disp_sprite_block_request(__u32 sel, __disp_sprite_block_para_t *para)
{
	__s32 id = 0;
	__disp_sprite_block_para_t cur_para;
	list_head_t * node = NULL;
	__u32 cpu_sr;
	
	if((para->scn_win.width != 8) && (para->scn_win.width != 16) && (para->scn_win.width != 32)
		&& (para->scn_win.width != 64) && (para->scn_win.width != 128) && (para->scn_win.width != 256)
		&& (para->scn_win.width != 512))
	{
		DE_WRN("BSP_disp_sprite_block_request,scn_win width invalid:%d\n",para->scn_win.width);
		return DIS_NULL;
	}
	if((para->scn_win.height != 8) && (para->scn_win.height != 16) && (para->scn_win.height != 32)
		&& (para->scn_win.height != 64) && (para->scn_win.height != 128) && (para->scn_win.height != 256)
		&& (para->scn_win.height != 512) && (para->scn_win.height != 1024))
	{
		DE_WRN("BSP_disp_sprite_block_request,scn_win height invalid:%d\n",para->scn_win.height);
		return DIS_NULL;
	}
	
    node = List_Add_Sprite_Block(sel, para);
    if(node == NULL)
    {
        return (__s32)NULL;
    }
    
    id = node->data->id;
	node->data->address = (__u32)para->fb.addr[0];
	node->data->size.width = para->fb.size.width;
	node->data->src_win.x = para->src_win.x;
	node->data->src_win.y = para->src_win.y;
	node->data->scn_win.x = para->scn_win.x;
	node->data->scn_win.y = para->scn_win.y;
	node->data->scn_win.width = para->scn_win.width;
	node->data->scn_win.height = para->scn_win.height;
	
    memcpy(&cur_para,para,sizeof(__disp_sprite_block_para_t));
    cur_para.scn_win.y = -2000;
    
	DE_BE_Sprite_Block_Set_Next_Id(sel, node->prev->data->id, id);
	sprite_set_sprite_block_para(sel, id, 0, para);

    OSAL_IrqLock(&cpu_sr);
	gsprite[sel].block_status[id] |= SPRITE_BLOCK_USED;
	gsprite[sel].block_num ++;
    OSAL_IrqUnLock(cpu_sr);

    return Sprite_Id_To_Hid(sel, id);
	
}
コード例 #2
0
ファイル: disp_sprite.c プロジェクト: godark/A10-Linux-2.6.36
static __s32 sprite_set_sprite_block_para(__u32 sel, __u32 id, __u32 next_id, __disp_sprite_block_para_t * para)
{
    __u32 bpp, addr;
    
    bpp = de_format_to_bpp(gsprite[sel].format);

	addr = DE_BE_Offset_To_Addr((__u32)para->fb.addr[0] ,para->fb.size.width, para->src_win.x, para->src_win.y, bpp);
	DE_BE_Sprite_Block_Set_fb(sel, id, (__u32)OSAL_VAtoPA((void*)addr), para->fb.size.width*(bpp>>3));
	DE_BE_Sprite_Block_Set_Pos(sel, id, para->scn_win.x, para->scn_win.y);
	DE_BE_Sprite_Block_Set_Size(sel, id, para->scn_win.width, para->scn_win.height);
	DE_BE_Sprite_Block_Set_Next_Id(sel, id, next_id);

    OSAL_CacheRangeFlush((void*)para->fb.addr[0], (para->fb.size.width * para->scn_win.height * bpp + 7)/8,CACHE_CLEAN_FLUSH_D_CACHE_REGION);

    return 0;
}
コード例 #3
0
static __s32 sprite_set_sprite_block_para(__u32 sel, __u32 id, __u32 next_id,
					  __disp_sprite_block_para_t *para)
{
	__u32 bpp, addr;

	bpp = DE_BE_Format_To_Bpp(gsprite[sel].format);

	addr = DE_BE_Offset_To_Addr((__u32) para->fb.addr[0],
				    para->fb.size.width,
				    para->src_win.x, para->src_win.y, bpp);
	DE_BE_Sprite_Block_Set_fb(sel, id, __phys_to_bus(addr),
				  para->fb.size.width * (bpp >> 3));
	DE_BE_Sprite_Block_Set_Pos(sel, id, para->scn_win.x, para->scn_win.y);
	DE_BE_Sprite_Block_Set_Size(sel, id, para->scn_win.width,
				    para->scn_win.height);
	DE_BE_Sprite_Block_Set_Next_Id(sel, id, next_id);

	return 0;
}