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