zx_smc_call


英文原文快照


名称

smc_call —— 从用户空间进行安全监控器调用(SMC)

概要

  1. #include <zircon/syscalls.h>
  2. #include <zircon/syscalls/smc.h>
  3. typedef struct zx_smc_parameters {
  4. uint32_t func_id;
  5. uint64_t arg1;
  6. uint64_t arg2;
  7. uint64_t arg3;
  8. uint64_t arg4;
  9. uint64_t arg5;
  10. uint64_t arg6;
  11. uint16_t client_id;
  12. uint16_t secure_os_id;
  13. } zx_smc_parameters_t;
  14. typedef struct zx_smc_result {
  15. uint64_t arg0;
  16. uint64_t arg1;
  17. uint64_t arg2;
  18. uint64_t arg3;
  19. } zx_smc_result_t;
  20. zx_status_t zx_smc_call(zx_handle_t handle,
  21. const zx_smc_parameters_t* parameters,
  22. zx_smc_result_t* out_smc_result);

描述

smc_call() 的功能是从用户空间进行安全监视器调用(SMC)。 它使用zx_smc_parameters_t类型的输入参数和zx_smc_result_t类型的输出参数去支持ARM的SMC调用约定。 输入参数handle必须是具有足够权限的资源对象才能执行该调用。

smc_call的角度看,大多数参数都是不透明的(opaque),因为它们依赖于func_idfunc_id通知安全监视器要调用的服务和函数。 client_id是一个可选字段,用于安全软件跟踪和索引调用的客户OS。 secure_os_id也是可选字段,用于在S-EL1上有多个安全操作系统时使用,以便于调用者可以指定预期的安全OS。

更多信息请参见ARM的SMC调用约定文档

权限

TODO(ZX-2399)

返回值

如果handle句柄具有足够的权限,smc_call() 成功则返回ZX_OK,并通过out_smc_result返回smc调用的返回值。如果调用失败,则返回下列错误码之一。

错误码

ZX_ERR_BAD_HANDLEhandle是无效句柄。

ZX_ERR_WRONG_TYPEhandle不是资源类型句柄。

ZX_ERR_ACCESS_DENIEDhandle没有足够的权限。

ZX_ERR_NOT_SUPPORTED:此系统上不支持smc_call。

ZX_ERR_INVALID_ARGSparametersout_smc_result是空指针。