функция обратного вызова EVT_SERCX2_SYSTEM_DMA_TRANSMIT_PURGE_FIFO (sercx.h)
Функция обратного вызова событий EvtSerCx2SystemDmaTransmitPurgeFifo вызывается версией 2 расширения последовательной платформы (SerCx2), чтобы отменить все байты неотступных данных, которые остаются в передаче FIFO в оборудовании последовательного контроллера.
Синтаксис
EVT_SERCX2_SYSTEM_DMA_TRANSMIT_PURGE_FIFO EvtSercx2SystemDmaTransmitPurgeFifo;
void EvtSercx2SystemDmaTransmitPurgeFifo(
[in] SERCX2SYSTEMDMATRANSMIT SystemDmaTransmit,
[in] ULONG BytesAlreadyTransmittedToHardware
)
{...}
Параметры
[in] SystemDmaTransmit
Дескриптор SERCX2SYSTEMDMATRANSMIT объекту передачи system-DMA. Драйвер последовательного контроллера ранее вызвал метод SerCx2SystemDmaTransmitCreate для создания этого объекта.
[in] BytesAlreadyTransmittedToHardware
Количество байтов, которые уже были загружены в передачу FIFO во время текущей транзакции передачи данных системы-DMA.
Возвращаемое значение
Никакой
Замечания
Драйвер последовательного контроллера может реализовать эту функцию в качестве параметра. При реализации драйвер регистрирует функцию в вызове serCx2SystemDmaTransmitCreate , который создает объект передачи system-DMA.
Драйвер должен реализовать функцию EvtSerCx2SystemDmaTransmitPurgeFifo, если последовательный контроллер имеет аппаратный механизм FIFO (или аналогичный механизм буферизации) для хранения передаваемых данных. Если драйвер реализует эту функцию, он также должен реализовать функции обратного вызова событий EvtSerCx2SystemDmaTransmitDrainFifo и EvtSerCx2SystemDmaTransmitCanmitCancelDrainFifo.
Если ожидающая запись (IRP_MJ_WRITE) время ожидания или отмена запроса, SerCx2 может потребоваться завершить текущую транзакцию DMA системы, прежде чем она завершится. После завершения транзакции SerCx2 вызывает функцию EvtSerCx2SystemDmaTransmitPurgeFifo, если она реализована.
Функция EvtSerCx2SystemDmaTransmitPurgeFifo останавливает передачу данных из буфера записи на передачу FIFO и удаляет все ранее переданные данные, оставшиеся в FIFO. После завершения транзакции передачи драйвер должен вызвать метод SerCx2SystemDmaTransmitPurgeFifoComplete, чтобы уведомить SerCx2 о том, что FIFO был удален, и SerCx2 затем завершает запрос на запись.
Дополнительные сведения см. в разделе SerCx2 System-DMA-Transmit Transactions.
Примеры
Чтобы определить функцию обратного вызова EvtSerCx2SystemDmaTransmitPurgeFifo, необходимо сначала указать объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить функцию обратного вызова EvtSerCx2SystemDmaTransmitPurgeFifo, которая называется MySystemDmaTransmitPurgeFifo
, используйте тип функции EVT_SERCX2_SYSTEM_DMA_TRANSMIT_PURGE_FIFO, как показано в этом примере кода:
EVT_SERCX2_SYSTEM_DMA_TRANSMIT_PURGE_FIFO MySystemDmaTransmitPurgeFifo;
Затем реализуйте функцию обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MySystemDmaTransmitPurgeFifo(
SERCX2SYSTEMDMATRANSMIT SystemDmaTransmit,
ULONG BytesAlreadyTransmittedToHardware
)
{...}
Тип функции EVT_SERCX2_SYSTEM_DMA_TRANSMIT_PURGE_FIFO определен в файле заголовка Sercx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции заметку Use_decl_annotations. Заметка Use_decl_annotations гарантирует, что используются заметки, применяемые к типу функции EVT_SERCX2_SYSTEM_DMA_TRANSMIT_PURGE_FIFO в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 8.1. |
целевая платформа | Настольный |
заголовка | sercx.h |
IRQL | Вызывается в IRQL <= DISPATCH_LEVEL. |
См. также
EvtSerCx2SystemDmaTransmitCancelDrainFifo