Функция обратного вызова POFXCALLBACKPROCESSORHALT (pep_x.h)

Подпрограмма ProcessorHalt подготавливает процессор к остановке.

Синтаксис

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

NTSTATUS Pofxcallbackprocessorhalt(
  [in]                ULONG Flags,
  [in, out, optional] PVOID Context,
  [in]                PPROCESSOR_HALT_ROUTINE Halt
)
{...}

Параметры

[in] Flags

Флаги, указывающие свойства состояния простоя, в которое будет входить процессор. Параметру Flags присваивается значение ноль или побитовое значение ИЛИ одного или нескольких из следующих битов флага.

Имя флага Значение Описание
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 Подпрограмма обратного вызова остановки PEP отвечает за очистку кэшей процессора. Если этот флаг не установлен, ProcessorHalt очищает кэши при входе в состояние простоя процессора и сделает кэши недействительными при выходе из этого состояния.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Подготовьте процессор к переходу в состояние простоя, в котором кэши процессора будут оставаться согласованными.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Подготовьте процессор к переходу в состояние простоя, в котором будет сохранен контекст потока процессора.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 Подпрограмма обратного вызова остановки PEP гарантированно не возвращается. Установите этот флаг, если обратный вызов "Остановить " переводит процессор в состояние потери контекста и выключения питания, которое не может быть отменено оборудованием. Если этот флаг установлен, операционная система будет рассматривать возврат обратного вызова "Остановить " как неустранимая ошибка.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Указатель на контекст остановки процессора, определяемый PEP. Этот указатель передается в качестве параметра в подпрограмму остановки обратного вызова. Этот контекст непрозрачн для платформы управления питанием Windows (PoFx).

[in] Halt

Указатель на процедуру обратного вызова остановки , реализованную в PEP. PoFx вызывает эту процедуру после завершения подготовки к остановке процессора. Во время этого обратного вызова pep должен перевести процессор в остановленное состояние.

Возвращаемое значение

ProcessorHalt возвращает STATUS_SUCCESS, если процессор успешно подготовлен к остановке. Возможные возвращаемые значения ошибки включают следующий код состояния.

Возвращаемое значение Описание
STATUS_INVALID_PARAMETER
Параметр Halt имеет значение NULL; или в разделе Флаги указано недопустимое значение флага; Или Flags содержит недопустимое сочетание битов флага. Дополнительные сведения см. в подразделе "Примечания".
STATUS_UNSUCCESSFUL
Подпрограмма обратного вызова остановки PEP неожиданно возвращается из состояния простоя, в котором не был сохранен аппаратный контекст процессора.

Комментарии

Эта подпрограмма реализуется платформой управления питанием (PoFx) и вызывается подключаемым модулем расширения платформы (PEP). Элемент ProcessorHalt структуры PEP_KERNEL_INFORMATION_STRUCT_V3 является указателем на подпрограмму ProcessorHalt .

Перед остановкой процессора PEP вызывает подпрограмму ProcessorHalt , чтобы предоставить PoFx возможность сохранить аппаратный контекст процессора. При необходимости ProcessorHalt сохраняет это состояние внутри poFx, чтобы впоследствии можно было восстановить состояние после выхода процессора из состояния простоя. После подготовки процессора к переходу в состояние простоя ProcessorHalt вызывает процедуру обратного вызова PEP Для остановки процессора.

В рамках обработки PEP уведомления PEP_NOTIFY_PPM_IDLE_EXECUTE PEP должен перевести процессор в состояние простоя, выбранное PEP. Ниже приведены два способа входа в состояние простоя процессора.

  • Для состояния простоя процессора, в котором кэши процессора остаются согласованными, чтобы поддерживать все состояние системы и процессора, PEP может перейти в состояние простоя напрямую без предварительного вызова ProcessorHalt.
  • Для состояния простоя процессора, в котором кэши процессора могут оставаться не согласованными, или состояния простоя, в котором контекст оборудования процессора не сохраняется, PEP должен вызвать ProcessorHalt перед переходом процессора в состояние простоя.
Следующие сочетания битов флагов являются недопустимыми:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 и PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    Подпрограмма обратного вызова ОСТАНОВКИ PEP должна возвращаться из любого состояния, в котором сохраняется контекст.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 и PROCESSOR_HALT_CACHE_COHERENT = 1

    Флаг cache-flush-override следует устанавливать только при входе в состояние простоя, которое не является согласованным в кэше.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 и PROCESSOR_HALT_CACHE_COHERENT = 0

    Флаг cache-flush-override должен быть установлен для любой согласованной остановки, не относяющейся к кэшу.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 и PROCESSOR_HALT_CACHE_COHERENT = 1

    Все состояния простоя, которые теряют контекст оборудования процессора (и, следовательно, используют протокол многопроцессорной парковки для выхода из состояния простоя и возврата управления операционной системе), не являются состояниями, согласованными в кэше.

Если параметр Flags содержит недопустимое сочетание битов флага, ProcessorHalt завершается ошибкой и возвращает STATUS_INVALID_PARAMETER.

PEP может вызывать эту подпрограмму в IRQL <= HIGH_LEVEL.

Требования

Требование Значение
Минимальная версия клиента Поддерживается начиная с Windows 10.
Целевая платформа Windows
Header pep_x.h (включая Pep_x.h)
IRQL <= HIGH_LEVEL

См. также раздел

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE