libdrm全解析十六 —— 源码全解析(13)

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

本文参考以下博文:

DRM 驱动程序开发(VKMS)

特此致谢!

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

21. DRM_IOCTL_ADD_BUFS

第21个宏是DRM_IOCTL_ADD_BUFS,相应代码如下:

#define DRM_IOCTL_ADD_BUFS		DRM_IOWR(0x16, struct drm_buf_desc)

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

#define DRM_IOCTL_ADD_BUFS		( ((3)  << 30) | (('d') << 8) | ((0x16)   << 0) | ((sizeof(struct drm_buf_desc)) << 16) )

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

/** DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.** \sa drmAddBufs().*/
struct drm_buf_desc {int count;		 /**< Number of buffers of this size */int size;		 /**< Size in bytes */int low_mark;		 /**< Low water mark */int high_mark;		 /**< High water mark */enum {_DRM_PAGE_ALIGN = 0x01,	/**< Align on page boundaries for DMA */_DRM_AGP_BUFFER = 0x02,	/**< Buffer is in AGP space */_DRM_SG_BUFFER = 0x04,	/**< Scatter/gather memory buffer */_DRM_FB_BUFFER = 0x08,	/**< Buffer is in frame buffer */_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */} flags;unsigned long agp_start; /**<* Start address of where the AGP buffers are* in the AGP aperture*/
};

drm_buf_desc结构中各成员的意义代码注释描述得很清楚了,在此无需赘述。

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

/*** Make buffers available for DMA transfers.** \param fd file descriptor.* \param count number of buffers.* \param size size of each buffer.* \param flags buffer allocation flags.* \param agp_offset offset in the AGP aperture** \return number of buffers allocated, negative on error.** \internal* This function is a wrapper around DRM_IOCTL_ADD_BUFS ioctl.** \sa drm_buf_desc.*/
drm_public int drmAddBufs(int fd, int count, int size, drmBufDescFlags flags,int agp_offset)
{drm_buf_desc_t request;memclear(request);request.count     = count;request.size      = size;request.flags     = (int)flags;request.agp_start = agp_offset;if (drmIoctl(fd, DRM_IOCTL_ADD_BUFS, &request))return -errno;return request.count;
}

函数的作用是使缓冲(buffers)适合DMA传输。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。

22. DRM_IOCTL_MARK_BUFS

第22个宏是DRM_IOCTL_MARK_BUFS,相应代码如下:

#define DRM_IOCTL_MARK_BUFS		DRM_IOW( 0x17, struct drm_buf_desc)

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

#define DRM_IOCTL_MAKE_BUFS		( ((1)  << 30) | (('d') << 8) | ((0x17)   << 0) | ((sizeof(struct drm_buf_desc)) << 16) )

struct drm_buf_desc上边已经列出了,在此不重复。

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

drm_public int drmMarkBufs(int fd, double low, double high)
{drm_buf_info_t info;int            i;memclear(info);if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info))return -EINVAL;if (!info.count)return -EINVAL;if (!(info.list = drmMalloc(info.count * sizeof(*info.list))))return -ENOMEM;if (drmIoctl(fd, DRM_IOCTL_INFO_BUFS, &info)) {int retval = -errno;drmFree(info.list);return retval;}for (i = 0; i < info.count; i++) {info.list[i].low_mark  = low  * info.list[i].count;info.list[i].high_mark = high * info.list[i].count;if (drmIoctl(fd, DRM_IOCTL_MARK_BUFS, &info.list[i])) {int retval = -errno;drmFree(info.list);return retval;}}drmFree(info.list);return 0;
}

该函数与上边DRM_IOCTL_ADD_BUFS对应的drmAddBufs函数联系较为紧密。此函数在后文具体讲解函数的时候进行详细解析。在此先认识一下、有个印象就好。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/50847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolo笔记

目录 输入端Mosaic数据增强数据增强Copy-paste数据增强- MixUp数据增强- Albumentations数据增强- Augment HSV (Hue, Saturation, Value)色度、饱和度、浓度数据增强- Random horizontal flip自适应锚框计算自适应图片缩放 BackboneFocus结构CSP结构CSP结构Neck 损失函数IOU_L…

GitHub的PUSH显示网络超时,小乌龟网络代理办法

前言 &#xff08;1&#xff09;我能够正常访问GitHub&#xff0c;但是每次将代码提交到GitHub常常显示网络超时。这是因为提交是走的国内的网络&#xff0c;对GitHub访问会被进行限速。 &#xff08;2&#xff09;为了让小乌龟也拥有魔法&#xff0c;我们可以使用代理工具。注…

[golang gin框架] 46.Gin商城项目-微服务实战之后台Rbac客户端调用微服务权限验证以及Rbac微服务数据库抽离

一. 根据用户的权限动态显示左侧菜单微服务 1.引入 后台Rbac客户端调用微服务权限验证功能主要是: 登录后显示用户名称、根据用户的权限动态显示左侧菜单,判断当前登录用户的权限 、没有权限访问则拒绝,参考[golang gin框架] 14.Gin 商城项目-RBAC管理,该微服务功能和上一节[g…

“深入探索JVM:解析Java虚拟机的工作原理与性能优化“

标题&#xff1a;深入探索JVM&#xff1a;解析Java虚拟机的工作原理与性能优化 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的工作原理和性能优化。我们将首先介绍JVM的基本组成和工作流程&#xff0c;然后重点讨论JVM内存管理、垃圾回收算法以及性…

快速指南:使用Termux SFTP通过远程进行文件传输——”cpolar内网穿透“

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

IDEA创建Spring,Maven项目没有resources文件夹

有时新建Spring或Maven项目时&#xff0c;会出现目录中main下无resources文件夹的情况&#xff0c;来一起解决一下&#xff1a; FIles|Project Structure 在Modules模块找到对应路径&#xff0c;在main下创建resources&#xff0c;右键main&#xff0c;选择新文件夹 输入文件…

【Spring】一次性打包学透 Spring | 阿Q送书第五期

文章目录 如何竭尽可能确保大家学透Spring1. 内容全面且细致2. 主题实用且本土化3. 案例系统且完善4. 知识有趣且深刻 关于作者丁雪丰业内专家推图书热卖留言提前获赠书 不知从何时开始&#xff0c;Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中&#xff0c;很…

js判断用户当前网络状态和判断网速

前端判断用户当前网络状态和判断网速 一、第一种是通过 HTML5 提供的 navigator 去检测网络(1)、原理介绍:(2)、兼容性 二、监听window.ononline和window.onoffline事件:三、通过ajax进行请求判断(兼容性好-推荐)(1)、原理介绍:(2)、注意: 四、navigator.connection方法监听网络…

使用本地电脑搭建可以远程访问的SFTP服务器

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3. 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#x…

小程序定位到 胶囊的三个点大概中间

话不多说&#xff0c;先上效果图 这个功能实现思路: 首先先拿到这一张整图(快捷&#xff0c;精确)然后获取整个导航栏高度(自定义导航栏,非自定义导航栏忽略这一步)获取三个点的做偏移量&#xff0c;把高度和偏移量给到一个定位到盒子&#xff0c;这个盒子里就放这个图片&…

【C语言】扫雷游戏(可展开)——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将运用数组来实现 扫雷游戏。 目录&#xff1a; &#x1f31f;思路框架测试游戏 &#x1f31f;测试部分函数实现&am…

【0824作业】C++ 拷贝赋值函数、匿名对象、友元、常成员函数和常对象、运算符重载

一、思维导图 二、作业&#xff1a;实现关系运算符的重载 关系运算符重载 概念&#xff1a; 种类&#xff1a;>、>、< 、< 、 、!表达式&#xff1a;L#R (L表示左操作数&#xff0c;R表示有操作数&#xff0c;#表示运算符)左操作数&#xff1a;既可以是左值也可以…

tcl学习之路(五)(Vivado时序约束)

1.主时钟约束 主时钟通常是FPGA器件外部的板机时钟或FPGA的高速收发器输出数据的同步恢复时钟信号等。下面这句语法大家一定不会陌生。该语句用于对主时钟的名称、周期、占空比以及对应物理引脚进行约束。 create_clock -name <clock_name> -periood <period> -wa…

学习JAVA打卡第三十八天

String 类的常用方法 ⑴public int length&#xff08;&#xff09; String 类中的length&#xff08;&#xff09;方法获取了一个String对象的字符序列的长度&#xff0c;例如&#xff1a; String china “1945年抗战胜利”&#xff1b; int n1,n2&#xff1b; n1china.leng…

python并发编程

一、程序提速的方法 二、python对并发编程的支持 多线程&#xff1a;threading&#xff0c;利用CPU和IO可以同时执行的原理&#xff0c;让CPU不会干巴巴等待IO完成&#xff1b;多进程&#xff1a;multiprocess&#xff0c;利用多核CPU的能力&#xff0c;真正的并行执行任务&am…

数据结构入门 — 链表详解_单链表

前言 数据结构入门 — 单链表详解* 博客主页链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 文章末尾有源码 *****感谢观看&#xff0c;希望对你有所帮助***** 系列文章 第一篇&#xff1a;数据结构入门 — 链表详解_单链表 第…

fnn手动实现和nn实现(包括3种激活函数、隐藏层)

原文网址&#xff1a;https://blog.csdn.net/m0_52910424/article/details/127819278 fnn手动实现: import time import matplotlib.pyplot as plt import numpy as np import torch import torch.nn as nn import torchvision from torch.nn.functional import cross_entrop…

pycharm远程连接docker容器

pycharm远程连接docker容器 1.根据镜像创建容器2.进入容器3.修改容器的root密码4. 容器安装openssh-server和openssh-client5.修改SSH配置文件6.重启ssh服务7. 退出测试8.配置pycharm并连接docker容器9. 选择docker环境 1.根据镜像创建容器 sudo docker run -itd --nameconn_t…

从零学算法151

151.给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导空格、尾随…

Spark Standalone环境搭建及测试

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 篇一&#xff1a;Linux系统下配置java环境 篇二&#xff1a;hadoop伪分布式搭建&#xff08;超详细&#xff09; 篇三&#xff1a;hadoop完全分布式集群搭建&#xff08;超详细&#xf…