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 状态。

在调用此系统调用之前,应执行以下步骤: 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

重启系统,但加载恢复操作系统而不是主操作系统。

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)