幀緩衝設備顯示緩衝區的分配與釋放

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);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章