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 方法。