Condividi tramite


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

[Si applica solo a KMDF]

In questa sezione viene descritto come un driver kmDF per un dispositivo DMA master del bus elabora una richiesta di I/O. Se si scrive un driver KMDF che implementa DMA in modalità sistema, vedere Supporto di System-Mode DMA.

La gestione delle richieste di I/O in un driver KMDF per un dispositivo DMA master del bus richiede il 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 alla DMA si svolge in quattro fasi:

  1. La funzione di callback del driver EvtDriverDeviceAdd o EvtDevicePrepareHardware 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 condiviso.

  2. Quando il driver riceve una richiesta di I/O che richiede al dispositivo di eseguire un'operazione DMA, uno dei gestori delle richieste del driver deve creare e inizializzare una nuova transazione DMA. Si noti che se il driver riutilizza oggetti transazioni DMA, la funzione evtDriverDevice del driverAggiungi la funzione di callback può creare gli oggetti transazioni. 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 evtProgramDma del driver.

  3. La funzione di callback EvtProgramDma del driver programma l'hardware DMA per un singolo trasferimento DMA e abilita gli interruzioni del dispositivo.

  4. Quando il dispositivo interrompe, il framework chiama la funzione di callback evtInterruptIsr del driver, che salva le informazioni sul dispositivo volatili e pianifica l'esecuzione della funzione di callback evtInterruptDpc del driver.

    La funzione di callback EvtInterruptDpc del driver completa ogni trasferimento DMA al termine dell'elaborazione dell'hardware. Dopo il completamento del trasferimento finale di una transazione DMA, la funzione di callback EvtInterruptDpccompleta la transazione DMA.

Il driver potrebbe riutilizzare gli oggetti transazioni DMA per garantire che possano funzionare quando le risorse di memoria sono basse.

Il driver può fornire un set di funzioni di callback che gestiscono operazioni di risparmio energia specifiche di DMA.

Alcuni driver usano buffer comuni a cui può accedere sia un dispositivo che il driver.