Выборочная приостановка в USB-драйверах (WDF)

Функциональный драйвер USB поддерживает обнаружение простоя во время работы системы через реализацию выборочной приостановки USB. Ниже приведено содержимое для разработчиков драйверов о том, как реализовать выборочную приостановку в USB-драйверах, основанных на Windows® Driver Foundation (WDF).

О функции выборочной приостановки

Выборочная приостановка — это возможность отключения питания USB-устройства во время простоя и его последующего возобновления, пока компьютер, к которому он подключен, остается в рабочем состоянии (S0). Для эффективной работы, особенно на мобильных компьютерах, все USB-устройства и драйверы должны поддерживать выборочную приостановку. При отключении устройства, когда оно находится в режиме простоя, но система остается в состоянии S0, есть следующие значительные преимущества:

  • Выборочная приостановка экономит мощность.
  • Выборочная приостановка может помочь уменьшить экологические факторы, такие как тепловая нагрузка и шум.

Если оборудование устройства может отключиться во время простоя, драйвер должен поддерживать эту функцию. Выборочная поддержка приостановки в USB-драйвере, основанном на Windows® Driver Foundation (WDF), требует не более нескольких дополнительных обратных вызовов, кроме тех, которые требуются для базовой поддержки Plug and Play.

Каждый драйвер функции для USB-устройства должен реализовать агрессивное управление питанием, которое приостанавливает бездействующее устройство во время работы системы. В этом разделе описывается реализация выборочной приостановки в драйвере на основе WDF. Если вы не знакомы с WDF, см. комплект драйверов Windows (WDK) и разработку драйверов с помощью Windows Driver Foundation.

Устройства USB поддерживают обнаружение простоя во время выполнения через выборочную приостановку USB. Выборочная приостановка позволяет неактивное устройство помещать в приостановленное состояние, не затрагивая другие устройства, подключенные к тому же концентратору, или в случае многофункционального устройства, не затрагивая другие функции в устройстве. Когда все устройства или функции приостановлены, весь концентратор или мультифункционное устройство можно включить в режим выключения.

С аппаратной точки зрения выборочное приостановление — это физическое состояние USB-порта. Если все функции, подключенные к порту, неактивны, порт может ввести выборочную приостановку.

Чтобы соответствовать спецификации USB, все USB-устройства должны поддерживать выборочную приостановку. Если USB-шина неактивна, устройство должно иметь возможность выключения. Драйверы USB-концентратора, предоставляемые корпорацией Майкрософт, реализуют выборочное приостановление на уровне оборудования.

Драйверы функций USB должны реализовать выборочную приостановку отдельных функций устройства через WDF, которая взаимодействует с водителями шины и управляет запросами управления устройствами ввода-вывода, которые приостанавливают и возобновляют функции устройства. WDF позволяет драйверам режима ядра и пользовательского режима поддерживать выборочную приостановку.

Сведения о коде функционального драйвера для выборочного приостановления USB зависят от того, работает ли драйвер в пользовательском режиме или в режиме ядра. Рассмотрим следующие рекомендации:

  • Используйте платформу драйверов в пользовательском режиме (UMDF) для реализации USB-драйверов по возможности. Драйверы пользовательского режима менее склонны к повреждению системных данных и проще отлаживаться, чем драйверы в режиме ядра.
  • Используйте платформу драйверов в режиме ядра (KMDF), только если драйвер передает данные через изохронные конечные точки или требует других функций или ресурсов, доступных только в режиме ядра.

Владение энергетической политикой, очереди ввода-вывода и выборочная приостановка

Владелец политики питания (PPO) для стека устройств — это драйвер, определяющий состояние питания устройства в любое время. Только один драйвер в каждом стеке устройств может быть PPO. Драйвер функции обычно является PPO для своего устройства.

Если драйвер USB поддерживает выборочную приостановку и находится выше PPO в стеке устройств, он не должен использовать очереди с управлением энергопотреблением. Это верно для драйверов UMDF и KMDF. Если запросы прибывают для очередей, управляемых питанием во время приостановки устройства, весь стек устройств может застопоряться.

На рисунке 1 показан поток запросов ввода-вывода к USB-драйверу через очереди ввода-вывода.

Блок-схема запросов к USB-драйверу WDF.

На рисунке запрос поступает для USB-драйвера. Платформа добавляет запрос в соответствующую очередь.

Если очередь не управляется питанием, платформа представляет запрос драйверу в соответствии с типом отправки, настроенным драйвером для очереди (последовательно, параллельно или вручную). Затем драйвер обрабатывает запрос.

Если очередь управляется питанием и устройство не приостановлено, платформа представляет запрос драйверу в соответствии с настроенным типом отправки.

Однако если устройство приостановлено, действия фреймворка зависят от того, является ли драйвер PPO для стека устройств. Если драйвер является PPO, платформа взаимодействует с usb-родительскими драйверами для питания устройства. После возобновления работы устройства платформа представляет запрос драйверу.

Если драйвер не является PPO, платформа не принимает дальнейших действий, так как только PPO может возобновить устройство. Запрос остается в очереди. Стек устройств останавливается, если PPO не получает запросов, которые приводят к повторному запуску устройства.

В этом разделе

Тема Описание
Выборочная приостановка в драйверах UMDF В этом разделе описывается, как драйверы функций UMDF поддерживают выборочную приостановку USB.
Выборочная приостановка в драйверах функций USB KMDF В этом разделе описывается, как драйверы функций KMDF поддерживают выборочную приостановку USB.