static int __init xxxfb_map_video_memory(struct xxxfb_info *fbi)
{
fbi->map_size = PAGE_ALIGN(fbi->fb->fix.smem_len + PAGE_SIZE); // 计算fb的大小, 并使其页对齐
fbi->map_cpu = dma_alloc_writecombine( fbi->dev,
fbi->map_size,
&fbi->map_dma,
GFP_KERNEL); /* 分配内存 */
fbi->map_size = fbi->fb->fix.smem_len; /* 显示缓冲区大小 */
if (fbi->map_cpu) {
memset(fbi->map_cpu, 0xf0, fbi->map_size);
fbi->screen_dma = fbi->map_dma;
fbi->fb->screen_base = fbi->map_cpu;
fbi->fb->fix.smem_start = fbi->screen_dma;
}
return fbi->map_cpu ? 0 : - ENOMEM;
}
static inline void xxxfb_unmap_video_memory(struct s3c2410fb_info *fbi)
{
/* 释放显示缓冲区 */
dma_free_writecombine(fbi->dev,fbi->map_size,fbi->map_cpu, fbi->map_dma);
}
帧缓冲设备显示缓冲区的分配与释放
最新推荐文章于 2024-04-24 12:12:07 发布