libdrm全解析十二 —— 源码全解析(9)

news/2024/11/30 10:30:48/

接前一篇文章:libdrm全解析十一 —— 源码全解析(8)

本文参考以下博文:

DRM 驱动程序开发(VKMS)

特此致谢!

本文继续对include/drm/drm.h中实际功能宏定义进行讲解。

13. DRM_IOCTL_GET_CAP

第13个宏是DRM_IOCTL_GET_CAP,相应代码如下:

#define DRM_IOCTL_GET_CAP		DRM_IOWR(0x0c, struct drm_get_cap)

结合之前文章中的_IOWR(type,nr,size)的最终定义,得到如下代码:

#define DRM_IOCTL_GET_CAP		( ((3)  << 30) | (('d') << 8) | ((0x0c)   << 0) | ((sizeof(struct drm_get_cap)) << 16) )

struct drm_get_cap在同文件(include/drm/drm.h)中定义,代码如下:

/* DRM_IOCTL_GET_CAP ioctl argument type */
struct drm_get_cap {__u64 capability;__u64 value;
};

DRM_IOCTL_GET_CAP对应的Userspace API为:drmGetCap()。该函数也是在xf86drm.c中,代码如下:

drm_public int drmGetCap(int fd, uint64_t capability, uint64_t *value)
{struct drm_get_cap cap;int ret;memclear(cap);cap.capability = capability;ret = drmIoctl(fd, DRM_IOCTL_GET_CAP, &cap);if (ret)return ret;*value = cap.value;return 0;
}

函数的作用是获取当前DRM设备所支持的能力。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。

14. DRM_IOCTL_SET_CLIENT_CAP

第14个宏是DRM_IOCTL_SET_CLIENT_CAP,相应代码如下:

#define DRM_IOCTL_SET_CLIENT_CAP	DRM_IOW( 0x0d, struct drm_set_client_cap)

结合之前文章中的_IOW(type,nr,size)的最终定义,得到如下代码:

#define DRM_IOCTL_SET_CLIENT_CAP		( ((1)  << 30) | (('d') << 8) | ((0x0d)   << 0) | ((sizeof(struct drm_set_client_cap)) << 16) )

struct drm_client在同文件(include/drm/drm.h)中定义,代码如下:

/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
struct drm_set_client_cap {__u64 capability;__u64 value;
};

DRM_IOCTL_SET_CLIENT_CAP对应的Userspace API为:drmSetClientCap()。该函数也是在xf86drm.c中,代码如下:

drm_public int drmSetClientCap(int fd, uint64_t capability, uint64_t value)
{struct drm_set_client_cap cap;memclear(cap);cap.capability = capability;cap.value = value;return drmIoctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);
}

函数的作用是告诉DRM驱动当前用户进程所支持的能力。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。

其余宏定义将在后续文章中继续解析。


http://www.ppmy.cn/news/1057213.html

相关文章

java mysql传入string数组返回string数组的简单写法

一、前言 最近有个需求&#xff0c;需要一个传入string数组返回string数组的sql逻辑。 懒得封装成javabean了&#xff0c;于是就写了一个简单的样例&#xff0c;总结下。 二、代码 1.mapper.java&#xff0c;可以这样写&#xff1a; public interface MyMapper {String[] …

git代码上传仓库,过滤依赖包上传

问题&#xff1a; 解决方法&#xff1a; 根目录找到名为&#xff1a;.gitignore文件 加上代码&#xff1a;node_modules/ 就可以解决

陕西省高工职称评审要求

一.评审范围 全省范围具有合法生产&#xff0c;经营手续的中小企业局和非公有制经济从事工程师工作专业技术人员和高技能人员&#xff0c;均可申报 当年达到法定退休或已办退休…

c++ java rgb与nv21互转

目录 jni函数 c++ rgb转nv21,可以转,不报错,但是转完只有黑白图 java yuv420保存图片,先转nv21,再保存ok: c++ yuv420月bgr互转,测试ok jni函数 JNIEXPORT void JNICALL Java_com_tencent_blazefacencnn_BlazeFaceNcnn_encode(JNIEnv *env,jobject thiz, jobject in…

实时同步ES技术选型:Mysql+Canal+Adapter+ES+Kibana

基于之前的文章&#xff0c;精简操作而来 让ELK在同一个docker网络下通过名字直接访问Ubuntu服务器ELK部署与实践使用 Docker 部署 canal 服务实现MySQL和ES实时同步Docker部署ES服务&#xff0c;canal全量同步的时候内存爆炸&#xff0c;ES/Canal Adapter自动关闭&#xff0c…

DataFrame.plot函数详解(三)

DataFrame.plot函数详解&#xff08;三&#xff09; 1. bar speed [0.1, 17.5, 40, 48, 52, 69, 88] lifespan [2, 8, 70, 1.5, 25, 12, 28] index [snail, pig, elephant,rabbit, giraffe, coyote, horse] df pd.DataFrame({speed: speed,lifespan: lifespan}, indexind…

前端实习day33

今天又是改bug的一天&#xff0c;把无限滚动的功能实现了&#xff0c;弄得比较熟悉了&#xff0c;但是还是有一点bug&#xff0c;明天继续改改&#xff0c;今天最大的收获是按照原型进行开发&#xff0c;不要按照自己的想法去开发&#xff0c;费力还不讨好&#xff01;&#xf…

mybatis升级到mybatis-plus

升级plus mybatis升级到mybatis-plus&#xff0c;两个共存 之前依赖只有mybatis,没有plus 做法&#xff1a; 排除mybatis部门依赖&#xff0c;添加新的plus 修改之后的依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-b…