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

指向 struct dmx_requestbuffers 的指针。

3.2.16.4. 描述

此 ioctl 用于启动基于内存映射或 DMABUF 的解复用 I/O。

内存映射缓冲区位于设备内存中,必须在使用此 ioctl 分配后才能映射到应用程序的地址空间中。 用户缓冲区由应用程序自行分配,而此 ioctl 仅用于将驱动程序切换到用户指针 I/O 模式并设置一些内部结构。 同样,DMABUF 缓冲区由应用程序通过设备驱动程序分配,此 ioctl 仅将驱动程序配置为 DMABUF I/O 模式,而不执行任何直接分配。

要分配设备缓冲区,应用程序需要初始化 struct 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 方法。