zx_smc_call

摘要

在用户空间进行安全监视器调用 (SMC)。

声明

#include <zircon/syscalls.h>
#include <zircon/syscalls/smc.h>

zx_status_t zx_smc_call(zx_handle_t handle,
                        const zx_smc_parameters_t* parameters,
                        zx_smc_result_t* out_smc_result);

说明

zx_smc_call() 会从用户空间发出安全监视器调用 (SMC)。它支持使用 zx_smc_parameters_t 输入参数和 zx_smc_result_t 输出参数的 ARM SMC 调用规范。输入 handle 必须是具有足够权限的资源对象才能被执行。

zx_smc_call() 的角度来看,大多数参数是不透明的,因为它们依赖于 func_idfunc_id 会通知安全监控器要调用服务和函数。client_id 是一个可选字段,专供安全软件跟踪调用客户端操作系统并将其编入索引。secure_os_id 是一个可选字段,适用于 S-EL1 中有多个安全操作系统时使用,以便调用方可以指定预期的安全操作系统。

有关详情,请参阅 ARM SMC 通话惯例文档

权限

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

返回值

如果 handle 具有足够的特权,则 zx_smc_call() 会返回 ZX_OK。如果成功,系统将通过 out_smc_result 返回 smc 调用的返回值。如果失败,则返回负错误值。

错误

ZX_ERR_BAD_HANDLE 句柄不是有效句柄。

ZX_ERR_WRONG_TYPE handle 不是资源句柄。

ZX_ERR_ACCESS_DENIED标识名没有足够的权限。

此系统不支持 ZX_ERR_NOT_SUPPORTED smc_call。

ZX_ERR_INVALID_ARGS parametersout_smc_result 是 null 指针