Выборочная приостановка в 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-драйвер. Платформа добавляет запрос в соответствующую очередь.
Если очередь не управляется питанием, платформа представляет запрос драйверу в соответствии с типом диспетчеризации, настроенным драйвером для очереди (последовательный, параллельный или ручной). Затем драйвер обрабатывает запрос.
Если очередь управляется питанием и устройство не приостановлено, платформа представляет запрос драйверу в соответствии с настроенным типом диспетчеризации.
Однако если устройство приостановлено, действия платформы зависят от того, является ли драйвер PPO для стека устройств. Если драйвер является PPO, платформа взаимодействует с родительскими драйверами USB для включения устройства. После возобновления работы устройства платформа представляет драйверу запрос.
Если драйвер не является PPO, платформа не предпринимает дальнейших действий, так как только PPO может возобновить работу устройства. Запрос остается в очереди. Стек устройств зависает, если PPO не получает никаких запросов, которые приводят к возобновлению работы устройства.
В этом разделе
Раздел | Описание |
---|---|
Выборочная приостановка в драйверах UMDF | В этом разделе описывается, как драйверы функций UMDF поддерживают выборочную приостановку USB. |
Выборочная приостановка в драйверах функций USB KMDF | В этом разделе описывается, как драйверы функций KMDF поддерживают выборочную приостановку USB. |