Freigeben über


EVT_SERCX2_SYSTEM_DMA_TRANSMIT_DRAIN_FIFO Rückruffunktion (sercx.h)

Die EvtSerCx2SystemDmaTransmitDrainFifo Ereignisrückruffunktion wird von Version 2 der seriellen Framework-Erweiterung (SerCx2) aufgerufen, um das Übertragungs-FIFO in der seriellen Controllerhardware zu entladen.

Syntax

EVT_SERCX2_SYSTEM_DMA_TRANSMIT_DRAIN_FIFO EvtSercx2SystemDmaTransmitDrainFifo;

void EvtSercx2SystemDmaTransmitDrainFifo(
  [in] SERCX2SYSTEMDMATRANSMIT SystemDmaTransmit
)
{...}

Parameter

[in] SystemDmaTransmit

Ein SERCX2SYSTEMDMATRANSMIT Handle zu einem System-DMA-Transmissionsobjekt. Der serielle Controllertreiber hat zuvor den SerCx2SystemDmaTransmitCreate Methode aufgerufen, um dieses Objekt zu erstellen.

Rückgabewert

Nichts

Bemerkungen

Ihr serieller Controllertreiber kann diese Funktion als Option implementieren. Wenn Ihr Treiber diese Funktion implementiert, muss er auch die EvtSerCx2SystemDmaTransmitCancelDrainFifo und EvtSerCx2SystemDmaTransmitPurgeFifo Ereignisrückruffunktionen implementieren. Ein Treiber, der diese Funktionen implementiert, registriert sie im SerCx2SystemDmaTransmitCreate Aufruf, der das System-DMA-übertragungsobjekt erstellt.

SerCx2 ruft die EvtSerCx2SystemDmaTransmitDrainFifo Funktion auf, wenn sie implementiert wird, um die Übertragung FIFO in der seriellen Controllerhardware am Ende einer System-DMA-Übertragungstransaktion zu entwässern. Diese Funktion stellt sicher, dass alle Datenbytes, die im FIFO verbleiben, an das serial angeschlossene Peripheriegerät übertragen werden. Nachdem das letzte Byte vom FIFO übertragen wurde, ruft die EvtSerCx2SystemDmaTransmitDrainFifo-Funktion die SerCx2SystemDmaTransmitDrainFifoComplete Methode auf, um SerCx2 zu benachrichtigen.

Wenn der serielle Controllertreiber eine EvtSerCx2SystemDmaTransmitDrainFifo-Funktion implementiert, führt SerCx2 keine ausstehende Schreib- (IRP_MJ_WRITE) Anforderung aus, bis der Treiber SerCx2SystemDmaTransmitDrainFifoCompleteaufruft.

Wenn ihr serieller Controller über einen Hardware-FIFO (oder einen ähnlichen Puffermechanismus) zum Speichern von Übertragungsdaten verfügt, sollte Ihr Treiber ein EvtSerCx2SystemDmaTransmitDrainFifo-Funktion implementieren. Andernfalls kann SerCx2 nicht bestätigen, dass das Übertragungs-FIFO abgelaufen ist, bevor die ausstehende Schreibanforderung abgeschlossen ist. Stattdessen schließt SerCx2 diese Anforderung ab, nachdem das letzte Byte im Schreibpuffer in den FiFO-Sendevorgang geschrieben wurde. Es kann keine Garantie geben, dass daten, die in das Übermittlungs-FIFO geschrieben wurden, ohne erhebliche Verzögerung übermittelt werden. Alle Daten, die nach Abschluss der Schreibanforderung im FIFO verbleiben, gehen möglicherweise verloren, bevor sie an das serial angeschlossene Peripheriegerät übertragen werden können. Dieser unerwartete Datenverlust in einer erfolgreich abgeschlossenen Schreibanforderung kann Zuverlässigkeitsprobleme für den Peripherietreiber verursachen.

Weitere Informationen finden Sie unter SerCx2 System-DMA-Transmit Transactions.

Beispiele

Um eine EvtSerCx2SystemDmaTransmitDrainFifo Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückruffunktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um z. B. eine EvtSerCx2SystemDmaTransmitDrainFifo Rückruffunktion zu definieren, die MySystemDmaTransmitDrainFifoheißt, verwenden Sie den EVT_SERCX2_SYSTEM_DMA_TRANSMIT_DRAIN_FIFO Funktionstyp, wie in diesem Codebeispiel gezeigt:

EVT_SERCX2_SYSTEM_DMA_TRANSMIT_DRAIN_FIFO  MySystemDmaTransmitDrainFifo;

Implementieren Sie dann die Rückruffunktion wie folgt:

_Use_decl_annotations_
VOID
  MySystemDmaTransmitDrainFifo(
    SERCX2SYSTEMDMATRANSMIT  SystemDmaTransmit
    )
  {...}

Der EVT_SERCX2_SYSTEM_DMA_TRANSMIT_DRAIN_FIFO Funktionstyp wird in der Headerdatei Sercx.h definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp EVT_SERCX2_SYSTEM_DMA_TRANSMIT_DRAIN_FIFO in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber. Weitere Informationen zu Use_decl_annotationsfinden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows 8.1.
Zielplattform- Desktop
Header- sercx.h
IRQL- Wird bei IRQL <= DISPATCH_LEVEL aufgerufen.

Siehe auch

EvtSerCx2SystemDmaTransmitCancelDrainFifo

EvtSerCx2SystemDmaTransmitPurgeFifo

IRP_MJ_WRITE

SERCX2SYSTEMDMATRANSMIT

SerCx2SystemDmaTransmitCreate

SerCx2SystemDmaTransmitDrainFifoComplete