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