處理 Bus-Master DMA 裝置之 KMDF 驅動程式中的 I/O 要求
[僅適用于 KMDF]
本節中的本主題描述匯流排主機 DMA 裝置的 KMDF 驅動程式如何處理 I/O 要求。 如果您要撰寫實作系統模式 DMA 的 KMDF 驅動程式,請參閱 支援 System-Mode DMA。
處理匯流排主機 DMA 裝置之 KMDF 驅動程式中的 I/O 要求需要數個驅動程式事件回呼函式中的程式碼,如下圖所示:
如上所示,DMA 相關處理會以四個階段進行:
驅動程式的 EvtDriverDeviceAdd 或 EvtDevicePrepareHardware 回呼函式必須啟用裝置的 DMA 交易 ,讓驅動程式可以使用架構的 DMA 功能。 如果您的裝置和驅動程式需要存取共用記憶體緩衝區,相同的回呼函式也必須 建立一般 緩衝區。
當驅動程式收到需要裝置執行 DMA 作業的 I/O 要求時,驅動程式 的要求處理常式 必須 建立並初始化新的 DMA 交易。 (請注意,如果您的驅動程式 重複使用 DMA 交易對象,驅動程式的 EvtDriverDeviceAdd 回呼函式可以建立交易對象。) 然後,要求處理常式必須 起始 DMA 交易 ,讓架構可以視需要開始將交易分成較小的 DMA 傳輸,並呼叫驅動程式的 EvtProgramDma 回呼函式。
驅動程式的 EvtProgramDma 回 呼函式會針對單一 DMA 傳輸來設計 DMA 硬體 ,並啟用裝置中斷。
當裝置中斷時,架構會呼叫驅動程式的 EvtInterruptIsr 回呼函式,以儲存動態裝置資訊,並排程驅動程式 EvtInterruptDpc 回呼函式的執行。
驅動程式的 EvtInterruptDpc 回呼函式會在硬體完成處理之後 完成每個 DMA 傳輸 。 完成 DMA 交易的最終傳輸之後, EvtInterruptDpc 回呼函式 會完成 DMA 交易。
您的驅動程式可能會 重複使用其 DMA 交易對象 ,以確保它們可在記憶體資源不足時運作。
您的驅動程式可以提供一組回呼函式來處理 DMA 特定的電源管理作業。
有些驅動程式 會使用 裝置和驅動程式可以存取的常見緩衝區。