Возможности, предоставляемые Storport
Драйвер Storport предоставляет следующие возможности:
Адресация
Microsoft Windows поддерживает системы, содержащие различные типы шин ввода-вывода и(или) несколько шин ввода-вывода одного типа. Для обработки этого разнообразия требуется общая схема адресации.
Устройства PCI могут иметь как порт ввода-вывода, так и ресурсы регистра памяти. Логические адреса помогают сделать это различие прозрачным для драйвера портов.
Некоторые системы содержат адаптеры безопасности, подключенные к нескольким шинам; для такого адаптера шины может потребоваться несколько наборов преобразований адресов.
Логические адреса необходимы для переноса на компьютерах на основе CISC и RISC.
Повторы и обработка ошибок
Драйверам класса хранилища не нужно реализовывать алгоритмы для повторных попыток irp, когда устройства слишком заняты для их обработки. Драйвер Storport реализует эту функцию.
Драйвер класса устанавливает значение времени ожидания для запросов, и Storport отвечает за его применение. Однако драйвер Storport может гибко применять значения времени ожидания водителя класса, принимая во внимание состояние шины. Например, если канал fibre channel, управляемый Storport, падает на 20 секунд, Storport может приостановить счетчик времени ожидания во время простоя, чтобы, например, запросы с временем из 10 секунд не завершались сбоем до 10 секунд после того, как ссылка будет создана. Storport увеличивает значения времени ожидания, назначенные запросам в ответ на увеличение трафика ввода-вывода, так как при увеличении трафика ввода-вывода устройствам потребуется больше времени для выполнения запросов.
Storport обрабатывает ошибки целевого объекта и контроллера, а также условия ошибок транспорта (другими словами, ошибки, связанные с фактической передачей данных в шине). Пример:
- Ошибки четности шины
- время ожидания выбора
Управление конфигурацией, очередями и состоянием питания
Предоставление драйверам класса сведений об ограничениях адаптера узла. Драйвер класса отвечает за регулирование размера передачи данных в соответствии с ограничениями адаптеров шины узла (HBA). Однако Storport предоставляет драйверу класса сведения, необходимые для выполнения этой задачи. Storport предоставляет эти сведения в дескрипторе адаптера (STORAGE_ADAPTER_DESCRIPTOR) в ответ на запрос IOCTL (IOCTL_STORAGE_QUERY_PROPERTY). Драйвер класса отвечает за разбиение запросов на блоки соответствующего размера на основе сведений, представленных в этом дескрипторове.
Преобразование относительных адресов шины в логические адреса. При запросе адаптеры предоставляют относительные адреса шины для портов ввода-вывода, регистров команд и регистров состояния управления. Однако водитель мини-порта не может использовать адреса, относящиеся к шине, для связи с адаптером шины узла (HBA). Storport преобразует относительные адреса шины в логические, чтобы водители минипорта могли получать доступ к адресам автобуса прозрачным образом. Для этого существует несколько причин.
Обеспечение питания устройства и всех его базовых устройств (в состоянии питания устройства D0) перед запуском устройства. Когда устройство не готово к включению питания, Storport помещает в очередь запрос D0 для этого устройства до тех пор, пока устройство не будет готово.
Постановка в очередь асинхронных запросов от драйверов класса и их асинхронная пересылка на целевое устройство. Драйверам класса не нужно ждать завершения запроса перед отправкой следующего запроса. Storport берет на себя ответственность за постановку этих запросов в очередь, чтобы избежать перегрузки вычислительной мощности базового оборудования.
Поддержка внутреннего и внешнего управления внутренними очередями запросов ввода-вывода. Большинство операций управления очередями инициируется самим Storport. Например, Storport замораживает очередь при возникновении ошибки и сообщает об ошибке драйверу класса, чтобы драйвер класса смог ответить перед обработкой дальнейших запросов. Однако Storport также отвечает на запросы от драйвера класса или других драйверов более высокого уровня, чтобы заблокировать, разблокировать, заморозить или разморозить свою внутреннюю очередь запросов. Драйверы более высокого уровня могут заставить Storport разморозить внутреннюю очередь с помощью запроса SRB_FUNCTION_RELEASE_QUEUE. Объяснение того, что означает "замораживание", "блокировка" или "разблокировка" очереди, см. в статье Storport Queue Management.
Преобразование ошибок, о которых сообщает устройство, в формат данных SCSI-3 для обработки драйвером класса.
Storport предоставляет услуги драйверу мини-порта с помощью процедур библиотеки Storport. Средства записи драйверов минипорта могут вызывать эти подпрограммы, а не кодировать функции, предоставляемые ими, в единый монолитный драйвер порта. Ниже перечислены некоторые из наиболее важных служб, предоставляемых с помощью этих процедур.
Драйвер для мини-порта Storport может делегировать множество операций инициализации, зависящих от ОС, подпрограмме библиотеки StorportInitialize . Например, драйвер Storport обрабатывает сведения, связанные с сопоставлением PnP и DMA. Это сокращает объем работы, которую необходимо выполнить драйверу мини-порта Storport. Описание обязанностей инициализации драйвера мини-порта Storport см. в разделе Аппаратная инициализация с помощью Storport.
Драйверы порта Storport для устройств без PnP избавлены от задачи поиска адаптеров и передачи их ресурсов диспетчеру PnP. Это делается в StorPortInitialize.
Драйверы miniport Storport не инициализируют точки входа диспетчеризации в объекте драйвера. Драйвер Storport делает это от имени драйвера минипорта, когда драйвер минипорта вызывает StorPortInitialize.
Драйверы минипорта Storport не преобразуют относительные адреса шины в логические адреса с помощью HalTranslateBusAddress. Драйверы для мини-портов Storport делают это путем вызова StorPortGetDeviceBase.
Полный список процедур библиотеки, которые Storport делает доступными для драйверов для мини-портов Storport, см. в статье Процедуры поддержки драйверов Storport.