3.2.16. ioctl DMX_REQBUFS¶
3.2.16.1. 名称¶
DMX_REQBUFS - 初始化内存映射和/或 DMA 缓冲区 I/O
警告
此 API 仍处于实验阶段
3.2.16.2. 概要¶
-
DMX_REQBUFS¶
int ioctl(int fd, DMX_REQBUFS, struct dmx_requestbuffers *argp)
3.2.16.3. 参数¶
fd
由
open()
返回的文件描述符。argp
指向结构体
dmx_requestbuffers
的指针。
3.2.16.4. 描述¶
此 ioctl 用于初始化基于内存映射或 DMABUF 的解复用器 I/O。
内存映射缓冲区位于设备内存中,必须在使用此 ioctl 将它们映射到应用程序的地址空间之前分配。用户缓冲区由应用程序本身分配,此 ioctl 仅用于将驱动程序切换到用户指针 I/O 模式并设置一些内部结构。类似地,DMABUF 缓冲区由应用程序通过设备驱动程序分配,此 ioctl 仅将驱动程序配置为 DMABUF I/O 模式,而不执行任何直接分配。
要分配设备缓冲区,应用程序需要初始化结构体 dmx_requestbuffers
结构的所有字段。它们将 count
字段设置为所需的缓冲区数量,并将 size
设置为每个缓冲区的大小。
当使用指向此结构的指针调用 ioctl 时,驱动程序将尝试分配请求数量的缓冲区,并将实际分配的数量存储在 count
字段中。count
可以小于请求的数量,甚至为零,当驱动程序耗尽空闲内存时。当驱动程序需要更多缓冲区才能正常运行时,也可能出现更大的数字。实际分配的缓冲区大小在 size
处返回,并且可以小于请求的大小。
当不支持此 I/O 方法时,ioctl 返回 EOPNOTSUPP
错误代码。
应用程序可以再次调用 ioctl DMX_REQBUFS 来更改缓冲区数量,但是当任何缓冲区仍被映射时,此操作无法成功。值为零的 count
会释放所有缓冲区,并在中止或完成任何正在进行的 DMA 后执行。
3.2.16.5. 返回值¶
成功时返回 0,发生错误时返回 -1,并且 errno
变量会设置为适当的值。通用错误代码在 通用错误代码 章节中描述。
- EOPNOTSUPP
不支持请求的 I/O 方法。