293 lines
8.6 KiB
C
293 lines
8.6 KiB
C
/**
|
||
* @file tee_client_api.h
|
||
*
|
||
* Copyright(C), 2008-2013, Huawei Tech. Co., Ltd. ALL RIGHTS RESERVED. \n
|
||
*
|
||
* 描述:定义非安全客户端接口\n
|
||
*/
|
||
|
||
/** @defgroup TEEC_API 客户端(非安全侧)接口
|
||
*/
|
||
/**@defgroup TEEC_BASIC_FUNC 通用接口
|
||
*@ingroup TEEC_API
|
||
*/
|
||
|
||
#ifndef _TEEK_CLIENT_API_H_
|
||
#define _TEEK_CLIENT_API_H_
|
||
|
||
#include "teek_client_type.h"
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* 用于计算非安全世界与安全世界传递参数的数值
|
||
*/
|
||
#define TEEC_PARAM_TYPES(param0Type, param1Type, param2Type, param3Type) \
|
||
((param3Type) << 12 | (param2Type) << 8 | \
|
||
(param1Type) << 4 | (param0Type))
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* 用于计算paramTypes中字段index的数值
|
||
*/
|
||
#define TEEC_PARAM_TYPE_GET(paramTypes, index) \
|
||
(((paramTypes) >> (4*(index))) & 0x0F)
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* 当参数类型为#TEEC_Value时,如果成员变量a或b没有给定值,需赋予此值,
|
||
* 表示没有用到此成员变量
|
||
*/
|
||
#define TEEC_VALUE_UNDEF 0xFFFFFFFF
|
||
|
||
/*
|
||
* Function: TEEK_IsAgentAlive
|
||
* Description: This function check if the special agent is launched.
|
||
* Used For HDCP key.
|
||
* e.g. If sfs agent is not alive,
|
||
* you can not do HDCP key write to SRAM.
|
||
* Parameters: agent_id.
|
||
* Return: 1:agent is alive
|
||
* 0:agent not exsit.
|
||
*/
|
||
int TEEK_IsAgentAlive(unsigned int agent_id);
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 初始化TEE环境
|
||
*
|
||
* @par 描述:
|
||
* 初始化路径为name的TEE环境,参数name可以为空,
|
||
* 初始化TEE环境是打开会话、发送命令的基础,
|
||
* 初始化成功后,客户端应用与TEE建立一条链接。
|
||
*
|
||
* @attention 无
|
||
* @param name [IN] TEE环境路径
|
||
* @param context [IN/OUT] context指针,安全世界环境句柄
|
||
*
|
||
* @retval #TEEC_SUCCESS 初始化TEE环境成功
|
||
* @retval #TEEC_ERROR_BAD_PARAMETERS 参数不正确,name不正确或context为空
|
||
* @retval #TEEC_ERROR_GENERIC 系统可用资源不足等原因
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_FinalizeContext
|
||
* @since V100R002C00B301
|
||
*/
|
||
TEEC_Result TEEK_InitializeContext(const char *name, TEEC_Context *context);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 关闭TEE环境
|
||
*
|
||
* @par 描述:
|
||
* 关闭context指向的TEE环境,断开客户端应用与TEE环境的链接
|
||
*
|
||
* @attention 无
|
||
* @param context [IN/OUT] 指向已初始化成功的TEE环境
|
||
*
|
||
* @retval 无
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_InitializeContext
|
||
* @since V100R002C00B301
|
||
*/
|
||
void TEEK_FinalizeContext(TEEC_Context *context);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 打开会话
|
||
*
|
||
* @par 描述:
|
||
* 在指定的TEE环境context下,为客户端应用与UUID
|
||
* 为destination的安全服务建立一条链接,
|
||
* 链接方式是connectionMethod,链接数据是connectionData,
|
||
* 传递的数据包含在opetation里。
|
||
* 打开会话成功后,输出参数session是对该链接的一个描述;
|
||
* 如果打开会话失败,输出参数returnOrigin为错误来源。
|
||
*
|
||
* @attention 无
|
||
* @param context [IN/OUT] 指向已初始化成功的TEE环境
|
||
* @param session [OUT] 指向会话,取值不能为空
|
||
* @param destination [IN] 安全服务的UUID,一个安全服务拥有唯一的UUID
|
||
* @param connectionMethod [IN] 链接方式,取值范围为#TEEC_LoginMethod
|
||
* @param connectionData [IN] 与链接方式相对应的链接数据,
|
||
* 如果链接方式为#TEEC_LOGIN_PUBLIC, #TEEC_LOGIN_USE,
|
||
* #TEEC_LOGIN_USER_APPLICATION,
|
||
* #TEEC_LOGIN_GROUP_APPLICATION, 链接数据取值必须为空,
|
||
* 如果链接方式为#TEEC_LOGIN_GROUP、#TEEC_LOGIN_GROUP_APPLICATION,
|
||
* 链接数据必须指向类型为uint32_t的数据,此数据表示客户端应用期望链接的组用户
|
||
* @param operation [IN/OUT] 客户端应用与安全服务传递的数据
|
||
* @param returnOrigin [IN/OUT] 错误来源,取值范围为#TEEC_ReturnCodeOrigin
|
||
*
|
||
* @retval #TEEC_SUCCESS 打开会话成功
|
||
* @retval #TEEC_ERROR_BAD_PARAMETERS 参数不正确,参数context为空或session为空或destination为空
|
||
* @retval #TEEC_ERROR_ACCESS_DENIED 系统调用权限访问失败
|
||
* @retval #TEEC_ERROR_OUT_OF_MEMORY 系统可用资源不足
|
||
* @retval #TEEC_ERROR_TRUSTED_APP_LOAD_ERROR 加载安全服务失败
|
||
* @retval 其它返回值参考 #TEEC_ReturnCode
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_CloseSession
|
||
* @since V100R002C00B301
|
||
*/
|
||
TEEC_Result TEEK_OpenSession(TEEC_Context *context,
|
||
TEEC_Session *session,
|
||
const TEEC_UUID *destination,
|
||
uint32_t connectionMethod,
|
||
const void *connectionData,
|
||
TEEC_Operation *operation,
|
||
uint32_t *returnOrigin);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 关闭会话
|
||
*
|
||
* @par 描述:
|
||
* 关闭session指向的会话,断开客户端应用与安全服务的链接
|
||
*
|
||
* @attention 无
|
||
* @param session [IN/OUT] 指向已成功打开的会话
|
||
*
|
||
* @retval 无
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_OpenSession
|
||
* @since V100R002C00B301
|
||
*/
|
||
void TEEK_CloseSession(TEEC_Session *session);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 发送命令
|
||
*
|
||
* @par 描述:
|
||
* 在指定的会话session里,由客户端应用向安全服务发送命令commandID,
|
||
* 发送的数据为operation,如果发送命令失败,输出参数returnOrigin为错误来源
|
||
*
|
||
* @attention 无
|
||
* @param session [IN/OUT] 指向已打开成功的会话
|
||
* @param commandID [IN] 安全服务支持的命令ID,由安全服务定义
|
||
* @param operation [IN/OUT] 包含了客户端应用向安全服务发送的数据内容
|
||
* @param returnOrigin [IN/OUT] 错误来源,取值范围为#TEEC_ReturnCodeOrigin
|
||
*
|
||
* @retval #TEEC_SUCCESS 发送命令成功
|
||
* @retval #TEEC_ERROR_BAD_PARAMETERS 参数不正确,参数session为空或参数operation格式不正确
|
||
* @retval #TEEC_ERROR_ACCESS_DENIED 系统调用权限访问失败
|
||
* @retval #TEEC_ERROR_OUT_OF_MEMORY 系统可用资源不足
|
||
* @retval 其它返回值参考 #TEEC_ReturnCode
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see 无
|
||
* @since V100R002C00B301
|
||
*/
|
||
TEEC_Result TEEK_InvokeCommand(TEEC_Session *session,
|
||
uint32_t commandID,
|
||
TEEC_Operation *operation,
|
||
uint32_t *returnOrigin);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 注册共享内存
|
||
*
|
||
* @par 描述:
|
||
* 在指定的TEE环境context内注册共享内存sharedMem,
|
||
* 通过注册的方式获取共享内存来实现零拷贝需要操作系统的支持,
|
||
* 目前的实现中,该方式不能实现零拷贝
|
||
*
|
||
* @attention 如果入参sharedMem的size域设置为0,函数会返回成功,但无法使用这块
|
||
* 共享内存,因为这块内存没有大小
|
||
* @param context [IN/OUT] 已初始化成功的TEE环境
|
||
* @param sharedMem [IN/OUT] 共享内存指针,共享内存所指向的内存不能为空、大小不能为零
|
||
*
|
||
* @retval #TEEC_SUCCESS 发送命令成功
|
||
* @retval #TEEC_ERROR_BAD_PARAMETERS 参数不正确,参数context为空或sharedMem为空,
|
||
* 或共享内存所指向的内存为空
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_AllocateSharedMemory
|
||
* @since V100R002C00B301
|
||
*/
|
||
TEEC_Result TEEK_RegisterSharedMemory(TEEC_Context *context,
|
||
TEEC_SharedMemory *sharedMem);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 申请共享内存
|
||
*
|
||
* @par 描述:
|
||
* 在指定的TEE环境context内申请共享内存sharedMem,
|
||
* 通过共享内存可以实现非安全世界与安全世界传递数据时的零拷贝
|
||
*
|
||
* @attention 如果入参sharedMem的size域设置为0,函数会返回成功,但无法使用这块
|
||
* 共享内存,因为这块内存既没有地址也没有大小
|
||
* @param context [IN/OUT] 已初始化成功的TEE环境
|
||
* @param sharedMem [IN/OUT] 共享内存指针,共享内存的大小不能为零
|
||
*
|
||
* @retval #TEEC_SUCCESS 发送命令成功
|
||
* @retval #TEEC_ERROR_BAD_PARAMETERS 参数不正确,参数context为空或sharedMem为空
|
||
* @retval #TEEC_ERROR_OUT_OF_MEMORY 系统可用资源不足,分配失败
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_RegisterSharedMemory
|
||
* @since V100R002C00B301
|
||
*/
|
||
TEEC_Result TEEK_AllocateSharedMemory(TEEC_Context *context,
|
||
TEEC_SharedMemory *sharedMem);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief 释放共享内存
|
||
*
|
||
* @par 描述:
|
||
* 释放已注册成功的的或已申请成功的共享内存sharedMem
|
||
*
|
||
* @attention 如果是通过#TEEC_AllocateSharedMemory方式获取的共享内存,
|
||
* 释放时会回收这块内存;如果是通过#TEEC_RegisterSharedMemory方式
|
||
* 获取的共享内存,释放时不会回收共享内存所指向的本地内存
|
||
* @param sharedMem [IN/OUT] 指向已注册成功或申请成功的共享内存
|
||
*
|
||
* @retval 无
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see TEEC_RegisterSharedMemory | TEEC_AllocateSharedMemory
|
||
* @since V100R002C00B301
|
||
*/
|
||
void TEEK_ReleaseSharedMemory(TEEC_SharedMemory *sharedMem);
|
||
|
||
/**
|
||
* @ingroup TEEC_BASIC_FUNC
|
||
* @brief cancel API
|
||
*
|
||
* @par 描述:
|
||
* 取消掉一个正在运行的open Session或者是一个invoke command
|
||
* 发送一个cancel的signal后立即返回
|
||
*
|
||
* @attention 此操作仅仅是发送一个cancel的消息,是否进行cancel操作由前面的TEE 或 TA决定
|
||
* @param operation [IN/OUT] 包含了客户端应用向安全服务发送的数据内容
|
||
*
|
||
* @retval 无
|
||
*
|
||
* @par 依赖:
|
||
* @li libteec:该接口所属的共享库
|
||
* @li tee_client_api.h:该接口声明所在头文件
|
||
* @see 无
|
||
* @since V100R002C00B309
|
||
*/
|
||
void TEEK_RequestCancellation(TEEC_Operation *operation);
|
||
|
||
#endif
|
||
|