Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Перечисление 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 передает в функцию обратного вызова evtSpbControllerIoOther. В этом случае значение позиции для первого пользовательского запроса ввода-вывода в последовательности SpbRequestSequencePositionFirst, а остальные пользовательские запросы ввода-вывода в последовательности SpbRequestSequencePositionContinue. Последовательность заканчивается, когда клиент разблокирует контроллер. Если функция обратного вызова EvtSpbControllerIoOther получает настраиваемый запрос ввода-вывода, который не является частью последовательности, значение позиции для этого запроса spbRequestSequencePositionSingle.
Для значения позиции SpbRequestSequencePositionLast, элемент Length структуры SPB_REQUEST_PARAMETERS может быть равен 0, чтобы указать, что целевой объект должен быть просто освобожден, и что данные ввода-вывода не должны передаваться (или, соответственно, чтобы указать, что передача 0-байтов должна произойти, если контроллер не может освободить устройство без выполнения часов).
Для значений позиций SpbRequestSequencePositionContinue и SpbRequestSequencePositionLast, направление передачи, возможно, изменилось с предыдущей передачи, а драйвер контроллера SPB может указывать на это возможное изменение направления на шине (например, контроллер I2C выдает новое условие START). Дополнительные сведения о направлениях передачи см. в SPB_TRANSFER_DIRECTION.
Требования
| Требование | Ценность |
|---|---|
| минимальные поддерживаемые клиентские | Поддерживается начиная с Windows 8. |
| заголовка | spbcx.h (include Spb.h) |