zx_system_powerctl

摘要

TODO(https://fxbug.dev/42108078)

宣告

#include <zircon/syscalls.h>

zx_status_t zx_system_powerctl(zx_handle_t resource,
                               uint32_t cmd,
                               const zx_system_powerctl_arg_t* arg);

說明

zx_system_powerctl 會根據 cmd 的值變更系統的電源狀態。視系統對於所用架構的支援等級而定,Zircon 可能無法將系統進入指定電源狀態。

「arg」是結構的選用指標,用於提供要執行指令的進一步資訊。

指令

ZX_SYSTEM_POWERCTL_ENABLE_ALL_CPUS

將所有處理器核心設為使用中。

arg 類型:n/a

ZX_SYSTEM_POWERCTL_DISABLE_ALL_CPUS_BUT_PRIMARY

僅將主要 CPU 設為使用中。

arg 類型:n/a

ZX_SYSTEM_POWERCTL_ACPI_TRANSITION_S_STATE

僅適用於 x86-64。

目前僅支援轉換至 S3 狀態。

呼叫這個 Syscall 之前,應先採取下列步驟: 1. 輸入 ACPICA 非競賽模式 2. 關閉次要 CPU 3. 執行 _PTS 控制方法 4. (選用) 執行 _SST 控制項方法。5. 清除 ACPI 喚醒狀態位元註冊 6. 停用所有 ACPI GPE 7. 已啟用所有 ACPI 喚醒 GPE

arg 類型:zx_system_powerctl_arg_t,只有 acpi_transition_s_state 聯集元素視為有效的。

struct {
    uint8_t target_s_state;  // Value between 1 and 5 indicating which S-state
    uint8_t sleep_type_a;    // Value from ACPI VM (SLP_TYPa)
    uint8_t sleep_type_b;    // Value from ACPI VM (SLP_TYPb)
} acpi_transition_s_state;

如果目標 S 狀態不在 1 到 5 的範圍內,則傳回 ZX_ERR_INVALID_ARGS

如果不支援轉換至目標 S 狀態,則傳回 ZX_ERR_NOT_SUPPORTED

如果目標 S 狀態不是 5,且次要 CPU 未關閉,則傳回 ZX_ERR_BAD_STATE

如果資源不足以執行執行緒,則會傳回 ZX_ERR_NO_MEMORY

如果 S 狀態轉換失敗,則傳回 ZX_ERR_INTERNAL

ZX_SYSTEM_POWERCTL_X86_SET_PKG_PL1

僅適用於 x86-64。

將 CPU 設為電源等級 1。

arg 類型:zx_system_powerctl_arg_t,只有 x86_power_limit 聯集元素視為有效。

struct {
    uint32_t power_limit;  // PL1 value in milliwatts
    uint32_t time_window;  // PL1 time window in microseconds
    uint8_t clamp;         // PL1 clamping enable
    uint8_t enable;        // PL1 enable
    uint8_t padding2[2];
} x86_power_limit;

ZX_SYSTEM_POWERCTL_REBOOT

重新啟動系統,控制應執行任何相關的韌體和系統啟動載入程式。

arg 類型:n/a

ZX_SYSTEM_POWERCTL_REBOOT_BOOTLOADER

重新啟動系統,但停止在系統啟動載入程式中停止,而不是載入作業系統。

arg 類型:n/a

ZX_SYSTEM_POWERCTL_REBOOT_RECOVERY

重新啟動系統,但載入復原作業系統,而非主要 OS。

arg 類型:n/a

ZX_SYSTEM_POWERCTL_SHUTDOWN

關閉系統。

arg 類型:n/a

ZX_SYSTEM_POWERCTL_ACK_KERNEL_INITIATED_REBOOT

如果核心希望重新啟動系統,使用者空間在可供重新啟動時會使用。

arg 類型:n/a

如果核心先前未發出要重新啟動的信號,則傳回 ZX_ERR_BAD_STATE

權限

resource 必須具有基礎 ZX_RSRC_SYSTEM_POWER_BASE 的資源類型 ZX_RSRC_KIND_SYSTEM

傳回值

ZX_OK

錯誤

提供無法辨識的 cmd 值時,傳回 ZX_ERR_INVALID_ARGS

另請參閱

TODO(https://fxbug.dev/42108078)