Поделиться через


OID_WDI_SET_POWER_STATE

OID_WDI_SET_POWER_STATE задает состояние питания устройства.

Размах Установка сериализованного с помощью задачи Обычное время выполнения (секунды)
Адаптер Да 10

Сетевой адаптер поставляется в D0 (полностью питание устройства) при загрузке системы или при подключении сетевого адаптера к системе. Если условие правильно (на платформах AOAC, это когда активная ссылка на сетевой адаптер составляет 0 в сетевом адаптере), операционная система подготавливает и помещает сетевой адаптер в D0. Если пользователи не присутствуют, узел переходит в состояние низкой мощности для экономии энергии. Узел может задать сетевой адаптер в более низком состоянии питания, где сетевой адаптер может автономно поддерживать подключения для узла. Сетевой адаптер просыпает узел для внешних событий, к которым узел выражает интерес.

OID_WDI_SET_POWER_STATE задает устройство в D0, D1, D2 и D3. Состояния D — это класс устройства и платформа, характерные для конкретной платформы. Сетевой адаптер Wi-Fi обычно поддерживает только подмножество состояний. Например, для Wi-Fi устройств на шине SD поддерживаемый набор состоит из D0, D2 и D3. Значение D2 и D3 также зависит от устройства. Для сетевого адаптера Wi-Fi на шине SDIO он определяется, чтобы проснуться от D2, но в D3 сетевой адаптер останавливается.

Сетевой адаптер шины PCIe поддерживает D0 и D3, где D3 может быть D3Hot или D3Cold. В стеке программного обеспечения узла существует только D3. D3hot или D3Cold зависит от сценариев узла и поддержки базовой платформы. Например, в подключенных резервных сценариях узел выгружает события пробуждения в сетевой адаптер и задает сетевой адаптер в D3, который является D3hot с поддержкой платформы, чтобы обеспечить питание сетевого адаптера, чтобы сетевой адаптер может отслеживать внешние события для узла. В сценарии гибернации узел задает сетевой адаптер в D3, а платформа отключает питание сетевой карты, чтобы сетевой адаптер не использовал никакой мощности.

Для системы AOAC, поддерживающей гибернацию, ниже приведена сводка важных системных состояний питания. В системе AOAC состояние сна системы — это подключенное резервное состояние. Это состояние, в котором сетевые адаптеры имеют низкую мощность (D2 для сетевых карт SDBus, D3 для сетевых карт PCIe) и вооружены для пробуждения. Если драйвер приостанавливается на жестком диске, это ответственность драйвера возобновить состояния встроенного ПО, так как драйвер не проходит повторной инициализации (например, DriverEntry не вызывается).

Спать Зимняя спячка Гибридное завершение работы Полное завершение работы
Запрос по

Кнопка питания (по умолчанию)

завершение работы /h

завершение работы /s /гибридное

завершение работы /s

Пользовательского интерфейса

Запуск>Питания>спящего

--

запустить>power>Завершение работы

--

Состояние системы

Подключенный резервный режим

Зимняя спячка

Гибридное завершение работы

Выключение питания

Состояние драйвера

Жив - вооружен, чтобы проснуться

Приостановка на жесткий диск

Приостановка на жесткий диск

Выключение питания

Для системы AOAC, в которой не требуется и не поддерживается гибернация, ниже приведена сводка состояний питания драйвера.

Спать Полное завершение работы
Запрос по

Кнопка питания (по умолчанию)

завершение работы /s

Пользовательского интерфейса

Запуск>Питания>спящего

запустить>power>Завершение работы

Состояние системы

Подключенный резервный режим

Выключение питания

Состояние драйвера

Жив - вооружен, чтобы проснуться

Выключение питания

Установка команд питания не может завершиться ошибкой. Встроенное ПО никогда не должно завершать такие команды. Компонент Майкрософт гарантирует отсутствие невыполненных задач или команд при отправке любой команды питания набора. Хотя команда питания набора не выполняется, компонент Майкрософт также гарантирует, что другие команды или задачи не отправляются в компонент IHV.

Состояние питания Описание
D0 (полностью с питанием) Сетевой адаптер полностью работает и готов к получению команд. Узел никогда не запрашивает изменения между состояниями низкой мощности. Например, если узел хочет задать состояние питания сетевого адаптера от D2 до D3, сначала задает состояние питания D0, а затем — D3.
D2 и вооруженные для пробуждения (сетевые адаптеры SDBus) В D2 узел никогда не отправляет запросы встроенному ПО, кроме команды Set D0. Дополнительные разделы этой статьи см. в следующих разделах для соответствующих блок-диаграмм.
D3: выключение (сетевые адаптеры SDBus), вооруженное для пробуждения (сетевые адаптеры PCIe) Для сетевых адаптеров SDBus это состояние отключено. Для сетевых адаптеров шины PCIe операционная система может вооружить сетевые адаптеры для пробуждений (D3Hot) или отключить питание (D3Cold). Обратите внимание, что с точки зрения стека драйверов существует только состояние D3. Для включения состояния D3Hot используются несколько компонентов, включая таблицу ACPI и обработку системных irps системы NDIS, поступающих из операционной системы в зависимости от действий конечных пользователей или бездействия, таких как гибернация, резервное подключение и гибридное завершение работы.
Dx для портов, отличных от по умолчанию Dx — D2 или D3. Если сетевой адаптер помещается в Dx, все порты, отличные от по умолчанию, сбрасываются, что означает, что все порты, отличные от по умолчанию, отключены в Dx.

Установка параметров свойства

TLV Разрешено несколько экземпляров TLV Необязательный Описание

WDI_TLV_POWER_STATE

Состояние питания. Это относится к основному порту.

WDI_TLV_ENABLE_WAKE_EVENTS

X

Это поле может отображаться только в том случае, если сетевой адаптер помещается в низкую мощность и вооружен для пробуждения на любом из указанных событий (например, D2 в SD IO).

WDI_TLV_SET_POWER_DX_REASON

X

Причина установки питания.

Установка результатов свойства

TLV Разрешено несколько экземпляров TLV Необязательный Описание
WDI_TLV_ADAPTER_RESUME_REQUIRED X Если значение равно true, оно сообщает ОС, что встроенное ПО нуждается в помощи в возобновлении его контекста. Это должно происходить только в том случае, если драйвер приостановлен в хранилище. Компонент IHV должен сбросить состояние программного обеспечения, так как операционная система выдает ряд команд Wi-Fi, чтобы обеспечить актуальность контекста встроенного ПО и контекст компонента IHV.

Включение событий пробуждения

Сетевой адаптер задает набор событий, которые он может обнаружить для пробуждения стека. Операционная система опускает подмножество или полный набор событий в сетевой адаптер с помощью команды с низкой мощностью. Некоторые параметры события пробуждения задаются гораздо раньше команды Dx. Другие задаются прямо перед командой Dx встроенного ПО. Все события становятся включены только с помощью команды Dx.

В этом интерфейсе событие, которое задано для включения, отключается в необязательном WDI_TLV_ENABLE_WAKE_EVENTS TLV в рамках команды OID_WDI_SET_POWER для состояния питания устройства Dx. TLV отсутствует, если операционная система не хочет вооружить сетевой адаптер для пробуждения.

Когда встроенное ПО получает команду Dx с WDI_TLV_ENABLE_WAKE_EVENTS, оно может обнаружить событие пробуждения до завершения команды Dx. Он должен буферивировать событие, завершить обработку команды, а затем подтвердить прерывание пробуждения.

Каждое пробуждение по Wi-Fi сетевой адаптеру должно следовать причиной пробуждения по причине того, почему сетевой адаптер проснет стек. Сетевой адаптер просыпает стек, утверждая линию прерывания пробуждения, которая обычно обслуживается методами шины или ACPI. Методы пробуждения ЦП и необходимых компонентов для обработки события пробуждения и завершения Wi-Fi пробуждения для стека. Впоследствии операционная система выдает запрос D0 драйверу и встроенному ПО. Этот запрос представляет собой power OID для драйвера, который отправляет команду D0 встроенному ПО. Встроенное ПО содержит указание причины пробуждения, пока она не получит и не завершит команду D0.

Примечание Если сетевой адаптер получает команду D0 по какой-либо другой причине (например, сетевой адаптер не проснет узел), сетевой адаптер не должен указывать причину пробуждения.

Нет включенных событий пробуждения

Если нет WDI_TLV_ENABLE_WAKE_EVENTS, операционная система не нуждается в сетевых адаптерах для работы с низкой мощностью. Сетевые адаптеры могут быть полностью отключены. При приостановке на жестком диске драйверы сетевых адаптеров, как ожидается, возобновляют контекст встроенного ПО при возобновлении.

Примеры взаимодействия с состоянием питания и перехода

На следующих схемах показаны взаимодействия и последовательности переходов между D0 и Dx (D2 или D3) для сетевого адаптера. В этом контексте miniport представляет драйвер, соответствующий узлу или WDI.

D0 to Dx (вооруженный, чтобы проснуться)

Блок-схема, показывающая переход с D0 на Dx, когда устройство вооружается для пробуждения.

  • Остановка [DnIO|UpIO]: DnIO — это сообщения (элементы управления и данные) на более низкий уровень. UpIO — это сообщения на верхний слой.

    • Отклонить новые запросы из выше уровня (сбой быстро).
    • Остановите запуск операций ввода-вывода из этого слоя (за исключением этой команды DX).
    • Разрешите нижнему уровню внедрять TX, необходимые для перехода в Dx.
    • Очистка очередей.
  • AwaitInflight: ожидание возвращаемых вызовов ввода-вывода, включая DMA. Очистка очередей.

  • Dx — это любое состояние, отличное от D0. Для SDBus Wi-Fi это D2. Для шины PCIe это D3Hot. Встроенное ПО не должно терять мощность.

Dx (вооруженный для пробуждения) на переход D0

блок-схема, иллюстрирующая переход с Dx на D0.

  • Если сетевой адаптер вооружен, он не может быть D3Cold. Встроенное ПО должно продолжать работать в Dx.

Переход D0 на D3 (не вооруженный для пробуждения)

блок-схема, изображающая переход от D0 к D3, когда устройство не вооружается для пробуждения.

  • Остановка [DnIO|UpIO]: DnIO — это сообщения (элементы управления и данные) на более низкий уровень. UpIO — это сообщения на верхний слой.

    • Отклонить новые запросы из выше уровня (сбой быстро).
    • Остановите запуск операций ввода-вывода из этого слоя (за исключением этой команды DX).
    • Разрешите нижнему уровню внедрять TX, необходимые для перехода в Dx.
    • Очистка очередей.
  • AwaitInflight: ожидание возвращаемых вызовов ввода-вывода, включая DMA. Очистка очередей.

  • D3 без PmParameters. Сетевой адаптер может (D3Cold) или не может быть отключен (например, общий железнодорожный адаптер с устройством D0).

Dx (не вооруженный для пробуждения) на переход D0

блок-схема, показывающая переход с Dx (не вооруженная для пробуждения) на D0.

  • D2 notArmToWake: сохранена мощность, не требуется повторной инициализации.
  • D3 notArmtoWake: может быть горячим или холодным. Для восстановления контекста требуется холодный.

Требования

Минимальный поддерживаемый клиент

Windows 10

Минимальный поддерживаемый сервер

Windows Server 2016

Заголовок

Dot11wdi.h