Drivers

DMA 中的“環繞”是什麼意思?

  • October 13, 2016

最近從事 PCI 驅動程序項目並試圖了解 Scatter Gather DMA。

在我的項目中,PCI 設備(在 PC 的 PCI 插槽中)是 DMA 主機,我想對 PC 的記憶體進行 DMA 寫入。對於 scatter/gather dma,因此 PC 驅動程序應該為那些“非連續”或也稱為“分段”物理記憶體創建一個鍊錶,並將鍊錶的第一個地址寫入設備。因此設備的 dma 控制器可以通過鍊錶進行寫操作,而無需向 PC 詢問下一個空閒記憶體塊。我在寫嗎?

在上面的 senario 中,包含了一個“wrap around”的表達,我不確定它是什麼意思。

這是否意味著:寫指針到達了記憶體塊的末尾?

或者

目前要發送的數據包已經發送完畢,應該開始下一個?

或者

別的什麼?

根據您正在閱讀的文件,這可能意味著這些中的任何一個都可以替代scatter-gather DMA:

記憶體中數據的物理表示取決於硬體協處理器。它可以從記憶體中的一個固定位置、記憶體中具有開始/結束地址和迴繞的 fifo到允許數據分散在物理記憶體中的分散-聚集 DMS。

對於非分散/收集流,傳入/傳出主機系統記憶體的數據儲存在主機記憶體中的循環緩衝區中,該緩衝區不斷填充和耗盡。因此,在這種情況下,PCI事務是突發傳輸,其範圍在一組連續的雙字儲存器地址上,每當循環緩衝器中的位置環繞到起始地址時,DMA控制器208請求新的PCI事務。這些循環緩衝區的最大大小設置為 2014 個雙字或一個主機頁面。

如果環形緩衝區處於自由執行模式並且應用程序無法像獲取數據一樣快地處理數據,則 DMA 將迴繞並覆蓋引用的緩衝區。應用程序必須確保緩衝區中的數據被及時處理或複制出來,以防止溢出。

引用自:https://unix.stackexchange.com/questions/244609