从今天开始又开始写博客了
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
}
本文详细介绍了在特定的内核环境下如何使用不同的方法为显示设备分配内存,包括通过alloc_pages和disp_malloc函数实现内存的申请、映射及初始化的过程。
499

被折叠的 条评论
为什么被折叠?



