MTK Linux DRM分析(十六)- MTK KMS实现mtk_drm_gem.c

一、mtk_drm_gem代码分析

mtk_drm_gem.c 和 mtk_drm_gem.h 代码分析

这个代码模块是 MediaTek DRM (Direct Rendering Manager) 驱动程序的 GEM (Graphics Execution Manager) 部分,主要负责管理图形缓冲区对象(GEM 对象)。GEM 是 DRM 框架用于处理用户空间缓冲区分配、映射和共享的核心机制,支持 DMA 缓冲区、IOMMU(通过 M4U)、secure buffer(用于内容保护)、PRIME(DMA-BUF 共享)和 MML(Multi-Media Layer,多媒体层处理)。该模块扩展了 DRM 的 GEM 功能,针对 MediaTek SoC(如 MT6885)优化,支持从 DMA heap 分配缓冲区、ION(Ion Memory Allocator)导入、fence 同步和 MML 提交。代码依赖 DRM 核心(如 drm_gem.h、drm_prime.h)和 MediaTek 特定模块(如 mtk_drm_drv.h、mtk_fence.h、mml/mtk-mml.h)。

下面我将代码分为几个主要部分,分析其实现内容和作用。分析基于提供的 mtk_drm_gem.h 和 mtk_drm_gem.c 文件。

1. 头文件定义和结构(mtk_drm_gem.h 中的主要部分)
  • 实现
    • 定义 mtk_drm_gem_obj 结构:扩展 drm_gem_object,包含 cookie(DMA 分配的指针)、kvaddr(内核虚拟地址)、dma_addr(DMA 地址)、size(大小)、dma_attrs(DMA 属性,如 WRITE_COMBINE)、sg(scatter-gather 表)、sec(是否 secure)、is_dumb(是否 dumb buffer)。
    • 宏定义:to_mtk_gem_obj(容器转换)。
    • 函数声明:
      • 创建/释放:mtk_drm_gem_create、mtk_drm_gem_create_from_heap、mtk_drm_gem_free_object。
      • Dumb 操作:mtk_drm_gem_dumb_create、mtk_drm_gem_dumb_map_offset。
      • mmap:mtk_drm_gem_mmap、mtk_drm_gem_mmap_buf。
      • ION 操作:mtk_drm_gem_ion_free_handle、mtk_drm_gem_ion_import_handle。
      • PRIME 操作:mtk_gem_prime_get_sg_table、mtk_gem_prime_import_sg_table。
      • ioctl:mtk_gem_create_ioctl、mtk_gem_map_offset_ioctl、mtk_gem_submit_ioctl、mtk_drm_ioctl_mml_gem_submit。
      • FB 操作:mtk_drm_fb_gem_insert、mtk_drm_fb_gem_release。
      • 调试打印:print_mml_frame_buffer、print_mml_frame_info、print_mml_submit。
    • 条件编译:IF_ZERO 下包含 IOMMU 和 pseudo_m4u(可能为测试或旧版本)。
  • 作用
    • 提供 MediaTek GEM 对象的定义和接口声明,支持 DMA/ION 缓冲区管理。
    • 确保与 DRM 核心兼容,同时扩展 secure、MML 和 heap 分配功能。
    • 用于用户空间 ioctl(如创建/映射缓冲区)和内核内部缓冲区操作(如 FB 插入)。
2. GEM 对象初始化和分配辅助函数(mtk_drm_gem_init、mtk_gem_dma_alloc/free)
  • 实现
    • mtk_drm_gem_init:分配 mtk_drm_gem_obj,调用 drm_gem_object_init 初始化基类。
    • mtk_gem_dma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值