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