Интерфейс Storport с драйверами Storport Miniport
Обмен данными между драйвером Storport и драйверами минипорта Storport осуществляется с помощью блоков запросов SCSI (SRB) и процедур обратного вызова драйвера минипорта. Подробное описание процедур обратного вызова драйвера для минипорта Storport см. в разделе Процедуры драйвера для минипорта Storport.
Обзор и определение отдельных функций SRB, флагов SRB и значений состояния SRB см. в разделе SCSI_REQUEST_BLOCK.
Обсуждение того, как драйверы минипорта должны реагировать на каждую отдельную функцию SRB, см. в разделе HwStorStartIo.
Storport перенаправит SDB-файлы в драйверы минипорта Storport для асинхронной обработки. Как правило, драйверу мини-порта потребуется некоторое время для фактического выполнения запроса. Адаптеры шины узла (HBA), поддерживающие очередь с тегами, могут ставить запросы в очередь внутри системы и обрабатывать их в порядке, указанном тегами, которые Storport назначает каждому запросу. Структура SCSI_REQUEST_BLOCK (SRB) содержит два элемента, которые драйверы Storport и miniport используют для указания способа упорядочения SRB во внутренней очереди хост-адаптера:
QueueTag. Storport назначает значение count или "tag" члену QueuedTag каждой SRB. Этот тег указывает порядок, в котором адаптер должен обрабатывать пакеты. Значения тегов также позволяют Storport отслеживать, какие SSPB-файлы по-прежнему остаются невыполненными, какие успешно завершены, а какие истекло время ожидания.
QueueAction: указывает сообщение с тегами очереди, которое будет использоваться при установке флага SRB_FLAGS_QUEUE_ACTION_ENABLE в SRB. SrbFlags. Использование queueAction в мини-порте зависит от минипорта. Минипорты на основе SCSI могут соответствовать спецификации SCSI, если HBA поддерживает их. QueueAction может иметь одно из следующих значений:
Значение | Значение |
---|---|
SRB_SIMPLE_TAG_REQUEST | Поставить запрос в очередь и выполнить его в любом порядке после завершения всех предыдущих SRB_HEAD_OF_QUEUE_TAG_REQUEST и SRB_ORDERED_QUEUE_TAG_REQUEST запросов. |
SRB_ORDERED_QUEUE_TAG_REQUEST | Выполняйте запрос только после завершения всех старых SRB_HEAD_OF_QUEUE_TAG_REQUEST и всех старых запросов. |
SRB_HEAD_OF_QUEUE_TAG_REQUEST | Поместите запрос в начало очереди и выполните его раньше всех остальных запросов в очереди, включая все остальные запросы с тегами SRB_HEAD_OF_QUEUE_TAG_REQUEST. |
Дополнительные сведения см. в спецификации SCSI.