Condividi tramite


Gestione delle richieste di I/O in un driver KMDF per un dispositivo DMA Bus-Master

[Si applica solo a KMDF]

Questo argomento in questa sezione descrive come un driver KMDF per un dispositivo DMA master bus elabora una richiesta di I/O. Se stai scrivendo un driver KMDF che implementa DMA in modalità sistema, consultare Supporto System-Mode DMA.

La gestione delle richieste di I/O in un driver KMDF per un dispositivo DMA master bus richiede codice in diverse funzioni di callback degli eventi del driver, come illustrato nella figura seguente:

diagramma di flusso che illustra il processo di implementazione DMA nei driver KMDF.

Come illustrato in precedenza, l'elaborazione correlata a DMA avviene in quattro fasi:

  1. Il driver EvtDriverDeviceAdd o EvtDevicePrepareHardware funzione di callback deve abilitare le transazioni DMA per il dispositivo, in modo che il driver possa usare le funzionalità DMA del framework. La stessa funzione di callback deve anche creare un buffer comune se il dispositivo e il driver richiedono l'accesso a un buffer di memoria condivisa.

  2. Quando il driver riceve una richiesta di I/O che richiede al dispositivo di eseguire un'operazione DMA, uno dei gestori di richieste driver deve creare e inizializzare una nuova transazione DMA. Si noti che se il driver riutilizza gli oggetti di transazione DMA, la funzione di callback del driver EvtDriverDeviceAdd può creare gli oggetti di transazione. Il gestore della richiesta deve quindi avviare la transazione DMA in modo che il framework possa iniziare a suddividere la transazione in trasferimenti DMA più piccoli, se necessario, e chiamare la funzione di callback del driver EvtProgramDma.

  3. Il driver EvtProgramDma funzione di callback programmi la hardware DMA per un singolo trasferimento DMA e abilita gli interrupt del dispositivo.

  4. Quando il dispositivo viene interrotto, il framework chiama la funzione di callback EvtInterruptIsr, che salva le informazioni volatili del dispositivo e pianifica l'esecuzione della funzione di callback EvtInterruptDpc del driver.

    La funzione di callback EvtInterruptDpc del driver completa ogni trasferimento DMA una volta che l'hardware ha terminato l'elaborazione. Al termine del trasferimento finale di una transazione DMA, la funzione di callback EvtInterruptDpccompleta la transazione DMA.

Il driver potrebbe riutilizzare i relativi oggetti transazione DMA per assicurarsi che possano funzionare quando le risorse di memoria sono basse.

Il driver può fornire un set di funzioni di callback che gestiscono le operazioni di gestione dell'energia specifiche di DMA .

Alcuni driver usano buffer comuni a cui un dispositivo e il driver possono accedere.