Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Standaard splitst WDF soms één DMA-transactie in meerdere DMA-overdrachten. Sommige apparaten kunnen echter geen gefragmenteerde transactie verwerken en moeten in plaats daarvan alle gegevens in één DMA-bewerking ontvangen. Voor sommige PCI-netwerkcontrollers is bijvoorbeeld één netwerkpakket tegelijk vereist, omdat ze niet over de hardware beschikken om gedeeltelijke gegevens in de cache op te cachen en opnieuw op te halen.
Vanaf KMDF versie 1.19 kan een KMDF-stuurprogramma met behulp van DMA v3 opgeven dat voor één overdracht DMA-transacties vereist is. Het stuurprogramma kan slechts één overdracht opgeven voor één DMA-transactie of kan één overdracht opgeven voor alle DMA-transacties die zijn gemaakt met behulp van een opgegeven DMA-enabler.
Eén overdracht instellen voor een specifieke DMA-transactie
Als u één overdracht voor één transactie wilt instellen, gebruikt u de volgende reeks:
- Roep het WdfDmaTransactionCreate of het WdfDmaTransactionReleaseaan.
- Roep WdfDmaTransactionSetSingleTransferRequirementaan.
- Roep WdfDmaTransactionInitializeaan.
Als initialisatie mislukt vanwege transactiefragmentatie, kan een stuurprogramma de I/O-aanvraag mislukken of de geheugenbuffers van de transactie opnieuw rangschikken en de transactie opnieuw initialiseren. - Roep WdfDmaTransactionExecute-aan.
Wanneer u fouten in uw stuurprogramma opspoort, kunt u de extensie !wdfkd.wdfdmatransaction gebruiken om te bepalen of één overdracht is ingesteld voor een bepaald transactieobject.
De vereiste voor één overdracht instellen voor alle DMA-transacties die zijn gemaakt met een bepaalde DMA-enabler
Als u één overdracht wilt instellen voor alle transacties die zijn gemaakt met een bepaalde enabler, geeft u de vlag WDF_DMA_ENABLER_CONFIG_REQUIRE_SINGLE_TRANSFER op in WDF_DMA_ENABLER_CONFIG_FLAGS bij het aanroepen van WdfDmaEnablerCreate.
Een stuurprogramma dat deze vlag gebruikt, hoeft geen WdfDmaTransactionSetSingleTransferRequirement aan te roepen telkens wanneer het een transactieobject maakt of opnieuw gebruikt.
Deze instelling blijft ook behouden als het stuurprogramma het transactieobject opnieuw gebruikt.
Gebruik bij foutopsporing de !wdfkd.wdfdmaenabler extensie om te bepalen of één overdracht is ingesteld voor een bepaald DMA-enabler-object.
Voor informatie over de volgorde waarin WDF de DMA-evenement-callbackfuncties van uw stuurprogramma aanroept, zie I/O-aanvragen verwerken in een KMDF-stuurprogramma voor een Bus-Master DMA-apparaat.