当前位置:嗨网首页>书籍在线阅读

09-帧缓冲设备显示缓冲区的申请与释放

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

18.5 帧缓冲设备显示缓冲区的申请与释放

在嵌入式系统中,一种常见的方式是直接在RAM空间中分配一段显示缓冲区,典型结构如图18.4所示。

P471_50130.jpg BZ___472_141_206_218_283.png writecombining意味着“写合并”,它允许写入的数据被合并,并临时保存在写合并缓冲区(WCB)中,直到进行一次burst传输而不再需要多次single传输。通过dmaalloc writecombine()分配的显示缓冲区不会出现cache一致性问题,这一点类似于dmaalloc coherent()。

代码清单18.10 帧缓冲设备显示缓冲区的分配与释放

1 static int __init xxxfb_map_video_memory(struct xxxfb_info *fbi)

2 {

3 fbi->map_size = PAGE_ALIGN(fbi->fb->fix.smem_len + PAGE_SIZE);

4 fbi->map_cpu = dma_alloc_writecombine(fbi->dev, fbi->map_size,

5 &fbi->map_dma,GFP_KERNEL); / 分配内存 /

6

7 fbi->map_size = fbi->fb->fix.smem_len; / 显示缓冲区大小 /

8

9 if (fbi->map_cpu) {

10 memset(fbi->map_cpu, 0xf0, fbi->map_size);

11

12 fbi->screen_dma = fbi->map_dma;

13 fbi->fb->screen_base = fbi->map_cpu;

14 fbi->fb->fix.smem_start = fbi->screen_dma;

15 }

16

17 return fbi->map_cpu ? 0 : - ENOMEM;

18 }

19

20 static inline void xxxfb_unmap_video_memory(struct s3c2410fb_info *fbi)

21 {

22 / 释放显示缓冲区 /

23 dma_free_writecombine(fbi->dev,fbi->map_size,fbi->map_cpu, fbi->map_dma);

24 }