перечисление SPB_REQUEST_SEQUENCE_POSITION (spbcx.h)
Перечисление SPB_REQUEST_SEQUENCE_POSITION указывает положение запроса ввода-вывода в списке передач для последовательности передачи ввода-вывода.
Синтаксис
typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
SpbRequestSequencePositionInvalid,
SpbRequestSequencePositionSingle,
SpbRequestSequencePositionFirst,
SpbRequestSequencePositionContinue,
SpbRequestSequencePositionLast,
SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;
Константы
SpbRequestSequencePositionInvalid Только для внутреннего использования. |
SpbRequestSequencePositionSingle Запрос ввода-вывода с одной передачей. Этот запрос является запросом на чтение или запись (IRP_MJ_READ или IRP_MJ_WRITE), который не является частью последовательности, или запросом IOCTL_SPB_EXECUTE_SEQUENCE управления вводом-выводом для последовательности, которая состоит из одной передачи. Контроллер должен выбрать целевой объект перед выполнением передачи и освободить целевой объект после завершения передачи. |
SpbRequestSequencePositionFirst Первый запрос ввода-вывода в последовательности. Этот запрос является запросом на чтение или запись, который сразу же следует за запросом на управление вводом-выводом блокировки (IOCTL_SPB_LOCK_CONTROLLER), который сигнализирует о начале последовательности. Контроллер должен выбрать целевой объект перед выполнением этой передачи, а целевой объект должен оставаться выбранным после завершения передачи. |
SpbRequestSequencePositionContinue Запрос ввода-вывода в середине последовательности. Этот запрос является запросом на чтение или запись, который не является ни первым, ни последним переносом в последовательности. В некоторых случаях расширение платформы SPB (SpbCx) не может определить последнюю передачу и помечает последнюю передачу как SpbRequestSequencePositionContinue вместо SpbRequestSequencePositionLast. Дополнительные сведения см. в разделе "Примечания". У контроллера должен быть уже выбран целевой объект до начала передачи, а целевой объект должен оставаться выбранным после завершения передачи. |
SpbRequestSequencePositionLast Последний запрос ввода-вывода в последовательности. Этот запрос представляет собой запрос на чтение или запись, который непосредственно предшествует запросу на управление вводом-выводом разблокировки (IOCTL_SPB_UNLOCK_CONTROLLER), который сигнализирует об окончании последовательности. В некоторых случаях SpbCx не может определить последнюю передачу и помечает последнюю передачу как SpbRequestSequencePositionContinue вместо SpbRequestSequencePositionLast. Дополнительные сведения см. в разделе "Примечания". Контроллер должен уже выбрать целевой объект до начала передачи и освободить целевой объект после завершения передачи. |
SpbRequestSequencePositionMax Только для внутреннего использования. |
Комментарии
Клиент (драйвер периферийного устройства) контроллера SPB может выполнять последовательность передачи ввода-вывода, отправляя ряд запросов на чтение и запись на целевое устройство в шине. Каждый запрос на чтение или запись в ряду занимает позицию в списке передач для последовательности. Значения в перечислении SPB_REQUEST_SEQUENCE_POSITION указывают относительные позиции запросов на чтение и запись в этом списке.
Метод SpbRequestGetParameters извлекает значения параметров SPB из запроса ввода-вывода и записывает их в структуру SPB_REQUEST_PARAMETERS . В этих параметрах содержится значение перечисления SPB_REQUEST_SEQUENCE_POSITION , указывающее положение запроса ввода-вывода в последовательности передачи ввода-вывода, частью которой он является.
Если вызывается SpbRequestGetParameters для получения значения позиции запроса ввода-вывода, который не является частью последовательности, этот метод присваивает запросу соответствующее значение перечисления SPB_REQUEST_SEQUENCE_POSITION .
Для запросов на чтение и запись задано одно из следующих значений: SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinue или SpbRequestSequencePositionLast.
Если клиент отправляет простой запрос на чтение или запись (IRP_MJ_READ или IRP_MJ_WRITE), который не является частью последовательности, для значения позиции устанавливается значение SpbRequestSequencePositionSingle.
Если клиент отправляет запрос блокировки (IOCTL_SPB_LOCK_CONTROLLER), чтобы сообщить о начале последовательности, значение позиции для первой передачи (запроса на чтение или запись) в последовательности — SpbRequestSequencePositionFirst, а значение позиции для оставшихся передач в последовательности — SpbRequestSequencePositionContinue. В этом случае SpbCx не может назначить SpbRequestSequencePositionLast последней передаче, так как не знает, что клиент отправил последний запрос на чтение или запись, пока клиент не отправит запрос на разблокировку (IOCTL_SPB_UNLOCK_CONTROLLER), который завершает последовательность.
Для запросов на блокировку задано значение SpbRequestSequencePositionFirst. Для запросов на разблокировку значение позиции имеет значение SpbRequestSequencePositionLast.
Некоторые контроллеры могут поддерживать специальные операции, например полнодуплексные передачи шины, которые одновременно считывают и записывают данные на целевое устройство. Клиент может выполнять пользовательскую последовательность, блокируя контроллер и отправляя ряд пользовательских запросов ввода-вывода, которые SpbCx передает драйверу контроллера SPB функцию обратного вызова EvtSpbControllerIoOther . В этом случае значение позиции для первого пользовательского запроса ввода-вывода в последовательности — SpbRequestSequencePositionFirst, а для остальных настраиваемых запросов ввода-вывода в последовательности — SpbRequestSequencePositionContinue. Последовательность заканчивается, когда клиент разблокирует контроллер. Если функция обратного вызова EvtSpbControllerIoOther получает пользовательский запрос ввода-вывода, который не является частью последовательности, значение позиции для этого запроса — SpbRequestSequencePositionSingle.
Для значения позиции SpbRequestSequencePositionLast элемент Lengthструктуры SPB_REQUEST_PARAMETERS может иметь значение 0, чтобы указать, что целевой объект должен быть просто освобожден и что данные ввода-вывода не должны передаваться (или, эквивалентно, чтобы указать, что должна произойти 0-байтовая передача, если контроллер не может освободить устройство без запуска часов).
Для значений позиций SpbRequestSequencePositionContinue и SpbRequestSequencePositionLast направление передачи могло измениться по сравнению с предыдущей передачей, и драйверу контроллера SPB может потребоваться указать это возможное изменение направления в шине (например, контроллер I2C выдает новое условие START). Дополнительные сведения о направлениях передачи см. в разделе SPB_TRANSFER_DIRECTION.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows 8. |
Верхняя часть | spbcx.h (включая Spb.h) |