Udostępnij za pośrednictwem


Kody sterowania zasilaniem PPM

Kody sterowania zasilaniem opisane w tym temacie są używane przez wtyczki rozszerzeń platformy (PEPs). Żądanie kontroli zasilania jest podobne do żądania kontroli I/O (IOCTL). W przeciwieństwie do IOCTL, żądanie sterowania zasilaniem jest jednak wysyłane bezpośrednio do systemu zarządzania energią Windows (PoFx) i nie jest widoczne dla innych sterowników urządzeń w stosie urządzeń.

Poniżej przedstawiono kody sterowania zasilaniem PPM:

Code Składnia Opis
Kontrola_zasilania_PEP_PPM_Zapytanie_parkingowej_strony

{38BD8901-AB20-4908-ABAA-AC34674BDFF3}

DEFINE_GUID(PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE,

0x38bd8901, 0xab20, 0x4908, 0xab, 0xaa, 0xac, 0x34, 0x67, 0x4b, 0xdf, 0xf3);

Kod jest używany przez PEP do wykonywania zapytań dotyczących struktury zarządzania energią systemu Windows (PoFx) w celu uzyskania informacji na temat strony parkingowej przypisanej do procesora.

Aby określić stronę parkingową procesora, wtyczka rozszerzenia platformy (PEP) dla tego procesora przesyła PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE żądanie sterowania zasilaniem do PoFx.

Aby zainicjować to żądanie sterowania energią, PEP najpierw wywołuje procedurę RequestWorker, aby poinformować PoFx, że PEP ma zadanie do wykonania. PoFx odpowiada na to wywołanie, wysyłając powiadomienie PEP_DPM_WORK do PEP. PEP odpowiada, przesyłając żądanie operacji kontroli mocy dla informacji strony parkingowej. To żądanie obejmuje przydzieloną przez PEP strukturę PEP_WORK_INFORMATION, w której element członkowski WorkType jest ustawiony na PepWorkRequestPowerControl, a element członkowski PowerControl wskazuje strukturę PEP_WORK_POWER_CONTROL przydzieloną przez PEP. Element członkowski "PowerControlCode" struktury PEP_WORK_POWER_CONTROL jest ustawiony na PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE. Element członkowski InBuffer tej struktury musi mieć wartość NULL, a element członkowski OutBuffer musi wskazywać strukturę PEP_PPM_CONTEXT_QUERY_PARKING_PAGE przydzieloną przez PEP. W odpowiedzi na to żądanie sterowania zasilaniem, PoFx zapisuje wirtualne i fizyczne adresy strony parkingowej w strukturze PEP_PPM_CONTEXT_QUERY_PARKING_PAGE.

Żądanie sterowania zasilaniem PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE jest specyficzne dla architektury Arm i nie jest obsługiwane w przypadku procesorów x86 i x64. W systemie wieloprocesorowym ARM strona parkowania to 4-kilobajtowy blok pamięci używany przez system operacyjny jako skrzynka pocztowa do sterowania procesorem, który wychodzi ze stanu bezczynności. Pep może używać części skrzynki pocztowej do przechowywania danych kontekstowych specyficznych dla procesora. Aby uzyskać więcej informacji, zobacz dokument zatytułowany „Uruchamianie wieloprocesorowe dla platform Arm” pod adresem https://www.acpica.org/related-documents.

GUID_PPM_PERF_CONSTRAINT_CHANGE

{29181FA1-4BF3-4c2e-B314-A6D226322B00}

DEFINE_GUID(GUID_PPM_PERF_CONSTRAINT_CHANGE,

0x29181fa1, 0x4bf3, 0x4c2e, 0xb3, 0x14, 0xa6, 0xd2, 0x26, 0x32, 0x2b, 0x0);

Kod jest używany przez PEP do powiadamiania platformy zarządzania energią systemu Windows (PoFx), że limity wydajności procesora muszą ulec zmianie w celu dostosowania się do ograniczeń zewnętrznych (budżetowanie zasilania, ograniczenia cieplne, źródło zasilania itd.).

W tym kodzie sterującym nie jest używany żaden bufor wejściowy lub wyjściowy.

Aby zainicjować to żądanie sterowania energią, PEP najpierw wywołuje procedurę RequestWorker, aby poinformować PoFx, że PEP ma zadanie do przesłania. PoFx odpowiada na to wywołanie, wysyłając powiadomienie PEP_DPM_WORK do PEP. PEP odpowiada, przesyłając wniosek o kontrolę mocy o zmianę ograniczenia wydajności. To żądanie obejmuje przydzieloną przez PEP strukturę PEP_WORK_INFORMATION, gdzie członek WorkType jest ustawiony na PepWorkRequestPowerControl, a członek PowerControl wskazuje na strukturę PEP_WORK_POWER_CONTROL przydzieloną przez PEP. Element członkowski PowerControlCode struktury PEP_WORK_POWER_CONTROL jest ustawiony na GUID_PPM_PERF_CONSTRAINT_CHANGE. Zarówno elementy członkowskie InBuffer, jak i OutBuffer tej struktury muszą mieć wartość NULL. W odpowiedzi na to żądanie sterowania zasilaniem PoFx wyśle PEP_NOTIFY_PPM_PERF_CONSTRAINTS powiadomienie do PEP, aby uzyskać nowe limity wydajności procesora.