从今天开始又开始写博客了
int disp_mem_request(int sel,__u32 size)
{
#ifndef FB_RESERVED_MEM
unsigned map_size = 0;
struct page *page;
if(g_disp_mm[sel].info_base != 0)
return -EINVAL;
g_disp_mm[sel].mem_len = size;
map_size = PAGE_ALIGN(g_disp_mm[sel].mem_len);
page = alloc_pages(GFP_KERNEL,get_order(map_size));
if(page != NULL)
{
g_disp_mm[sel].info_base = page_address(page);
if(g_disp_mm[sel].info_base == 0)
{
free_pages((unsigned long)(page),get_order(map_size));
__wrn("page_address fail!\n");
return -ENOMEM;
}
g_disp_mm[sel].mem_start = virt_to_phys(g_disp_mm[sel].info_base);
memset(g_disp_mm[sel].info_base,0,size);
__inf("pa=0x%08lx va=0x%p size:0x%x\n",g_disp_mm[sel].mem_start, g_disp_mm[sel].info_base, size);
return 0;
}
else
{
__wrn("alloc_pages fail!\n");
return -ENOMEM;
}
#else
__u32 ret = 0;
ret = (__u32)disp_malloc(size);
if(ret != 0)
{
g_disp_mm[sel].info_base = (void*)ret;
g_disp_mm[sel].mem_start = virt_to_phys(g_disp_mm[sel].info_base);
memset(g_disp_mm[sel].info_base,0,size);
__inf("pa=0x%08lx va=0x%p size:0x%x\n",g_disp_mm[sel].mem_start, g_disp_mm[sel].info_base, size);
return 0;
}
else
{
__wrn("disp_malloc fail!\n");
return -ENOMEM;
}
#endif
}