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; }
int mem_map_ext_wrapper(struct mali_session_data *session_data, _mali_uk_map_external_mem_s __user * argument) { _mali_uk_map_external_mem_s uk_args; _mali_osk_errcode_t err_code; /* validate input */ /* the session_data pointer was validated by caller */ MALI_CHECK_NON_NULL( argument, -EINVAL); /* get call arguments from user space. copy_from_user returns how many bytes which where NOT copied */ if ( 0 != copy_from_user(&uk_args, (void __user *)argument, sizeof(_mali_uk_map_external_mem_s)) ) { return -EFAULT; } uk_args.ctx = session_data; uk_args.phys_addr = __phys_to_bus(uk_args.phys_addr); err_code = _mali_ukk_map_external_mem( &uk_args ); if (0 != put_user(uk_args.cookie, &argument->cookie)) { if (_MALI_OSK_ERR_OK == err_code) { /* Rollback */ _mali_uk_unmap_external_mem_s uk_args_unmap; uk_args_unmap.ctx = session_data; uk_args_unmap.cookie = uk_args.cookie; err_code = _mali_ukk_unmap_external_mem( &uk_args_unmap ); if (_MALI_OSK_ERR_OK != err_code) { MALI_DEBUG_PRINT(4, ("reverting _mali_ukk_unmap_external_mem, as a result of failing put_user(), failed\n")); } } return -EFAULT; } /* Return the error that _mali_ukk_free_big_block produced */ return map_errcode(err_code); }
/* * setting source x/y offset */ __s32 BSP_disp_sprite_block_set_src_win(__u32 sel, __s32 hid, __disp_rect_t *src_win) { __s32 id = 0; list_head_t *node = NULL; __u32 bpp, addr; id = Sprite_Hid_To_Id(sel, hid); if (gsprite[sel].block_status[id] & SPRITE_BLOCK_USED) { node = List_Find_Sprite_Block(sel, id); bpp = DE_BE_Format_To_Bpp(gsprite[sel].format); addr = DE_BE_Offset_To_Addr(node->data->address, node->data->size.width, src_win->x, src_win->y, bpp); DE_BE_Sprite_Block_Set_fb(sel, id, __phys_to_bus(addr), node->data->size.width * (bpp >> 3)); node->data->src_win.x = src_win->x; node->data->src_win.y = src_win->y; return DIS_SUCCESS; } else {