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