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


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

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

Синтаксис

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

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

Параметры

[in] Flags

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

Имя флага Ценность Описание
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
Параметр "Остановить" имеет значение NULL; или недопустимое значение флага было указано в Флаги; или Флаги содержат незаконное сочетание битов флагов. Дополнительные сведения см. в разделе "Примечания".
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

    Флаг переопределения кэша должен быть установлен только при вводе состояния простоя, которое не является последовательным.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 и PROCESSOR_HALT_CACHE_COHERENT = 0

    Флаг переопределения кэша должен быть установлен для любой последовательной остановки, отличной от кэша.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 и PROCESSOR_HALT_CACHE_COHERENT = 1

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается начиная с Windows 10.
целевая платформа Виндоус
заголовка pepfx.h (include Pep_x.h)
IRQL <= HIGH_LEVEL

См. также

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE