摘要
从用户空间进行安全监控调用 (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)。它支持 ARM SMC 调用
使用 zx_smc_parameters_t
输入参数和 zx_smc_result_t
输出参数的约定。
输入 handle 必须是具有足够权限的资源对象才能执行。
从 zx_smc_call()
的角度来看,大多数参数是不透明的,因为它们是
取决于 func_id。func_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
handle 不是有效的句柄。
ZX_ERR_WRONG_TYPE
handle 不是资源句柄。
ZX_ERR_ACCESS_DENIED
handle 没有足够的权限。
此系统不支持 ZX_ERR_NOT_SUPPORTED
smc_call。
ZX_ERR_INVALID_ARGS
parameters 或 out_smc_result 为 null 指针