Поделиться через


Обработка запросов на чтение и запись в SerCx2

Драйвер периферийных устройств отправляет запросы на запись (IRP_MJ_WRITE) и чтение (IRP_MJ_READ) на порт последовательного контроллера для передачи данных на периферийное устройство, подключенное к порту, и с ним. Способ, которым SerCx2 обрабатывает эти запросы, четко определен, даже если время ожидания запросов истекает или отменено.

Отмена запроса на чтение или запись

Перед выполнением запроса на чтение или запись этот запрос может быть отменен операционной системой или периферийным драйвером, отправившем запрос. Если отмена происходит до того, как SerCx2 передаст какие-либо данные для запроса, SerCx2 завершает запрос с кодом состояния STATUS_CANCELLED.

Однако если запрос на чтение или запись отменяется после передачи одного или нескольких байтов данных для запроса, но до передачи всех данных для запроса, SerCx2 завершает запрос с кодом состояния STATUS_SUCCESS. Завершенный запрос сообщает количество байтов, прочитанных или записанных SerCx2 во время обработки запроса. При необходимости драйвер периферийного устройства, отправляющий запрос, может использовать эти сведения для отправки второго запроса для завершения частично завершенной операции чтения или записи.

Запросы, которые истекли

Если запрос на чтение или запись может истекать, если обработка запроса занимает слишком много времени. Кроме того, время ожидания запроса на чтение может быть превышено, если время между двумя последовательными байтами, полученными последовательным контроллером, превышает максимально допустимое время. В любом случае при обнаружении условия времени ожидания SerCx2 немедленно завершает запрос с кодом состояния STATUS_TIMEOUT. Завершенный запрос сообщает количество байтов, прочитанных или записанных SerCx2 во время обработки запроса. При необходимости драйвер периферийного устройства, отправляющий запрос, может использовать эти сведения для отправки второго запроса для завершения частично завершенной операции чтения или записи. Дополнительные сведения о времени ожидания см. в разделе SERIAL_TIMEOUTS.

Влияние аппаратных ограничений

Как правило, SerCx2 точно сообщает количество байтов, переданных запросом на чтение или запись, которое истекает или отменено. Однако некоторое оборудование, используемое для выполнения системных транзакций DMA, может не точно подсчитать количество байтов, переданных частично завершенной транзакцией чтения или записи. Если это так, связанный запрос на чтение или запись может сообщать только приблизительное количество переданных байтов.

Запросы на передачу ноль байтов

В ответ на запрос на чтение или запись для передачи нуля байтов SerCx2 завершает запрос с STATUS_SUCCESS кодом состояния, но не выполняет никаких операций.