1/** 2 * Copyright(c) 2011 Trusted Logic. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name Trusted Logic nor the names of its 15 * contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31/* 32 * This header file corresponds to V1.0 of the GlobalPlatform 33 * TEE Client API Specification 34 */ 35#ifndef __TEE_CLIENT_API_H__ 36#define __TEE_CLIENT_API_H__ 37 38#include "s_type.h" 39#include "s_error.h" 40 41#ifndef TEEC_EXPORT 42#define TEEC_EXPORT 43#endif 44 45/* The header tee_client_api_imp.h must define implementation-dependent 46 types, constants and macros. 47 48 The implementation-dependent types are: 49 - TEEC_Context_IMP 50 - TEEC_Session_IMP 51 - TEEC_SharedMemory_IMP 52 - TEEC_Operation_IMP 53 54 The implementation-dependent constants are: 55 - TEEC_CONFIG_SHAREDMEM_MAX_SIZE 56 The implementation-dependent macros are: 57 - TEEC_PARAM_TYPES 58*/ 59#include "tee_client_api_imp.h" 60 61/* Type definitions */ 62typedef struct TEEC_Context 63{ 64 TEEC_Context_IMP imp; 65} TEEC_Context; 66 67typedef struct TEEC_Session 68{ 69 TEEC_Session_IMP imp; 70} TEEC_Session; 71 72typedef struct TEEC_SharedMemory 73{ 74 void* buffer; 75 size_t size; 76 uint32_t flags; 77 TEEC_SharedMemory_IMP imp; 78} TEEC_SharedMemory; 79 80typedef struct 81{ 82 void* buffer; 83 size_t size; 84} TEEC_TempMemoryReference; 85 86typedef struct 87{ 88 TEEC_SharedMemory * parent; 89 size_t size; 90 size_t offset; 91} TEEC_RegisteredMemoryReference; 92 93typedef struct 94{ 95 uint32_t a; 96 uint32_t b; 97} TEEC_Value; 98 99typedef union 100{ 101 TEEC_TempMemoryReference tmpref; 102 TEEC_RegisteredMemoryReference memref; 103 TEEC_Value value; 104} TEEC_Parameter; 105 106typedef struct TEEC_Operation 107{ 108 volatile uint32_t started; 109 uint32_t paramTypes; 110 TEEC_Parameter params[4]; 111 112 TEEC_Operation_IMP imp; 113} TEEC_Operation; 114 115 116#define TEEC_ORIGIN_API 0x00000001 117#define TEEC_ORIGIN_COMMS 0x00000002 118#define TEEC_ORIGIN_TEE 0x00000003 119#define TEEC_ORIGIN_TRUSTED_APP 0x00000004 120 121#define TEEC_MEM_INPUT 0x00000001 122#define TEEC_MEM_OUTPUT 0x00000002 123 124#define TEEC_NONE 0x0 125#define TEEC_VALUE_INPUT 0x1 126#define TEEC_VALUE_OUTPUT 0x2 127#define TEEC_VALUE_INOUT 0x3 128#define TEEC_MEMREF_TEMP_INPUT 0x5 129#define TEEC_MEMREF_TEMP_OUTPUT 0x6 130#define TEEC_MEMREF_TEMP_INOUT 0x7 131#define TEEC_MEMREF_WHOLE 0xC 132#define TEEC_MEMREF_PARTIAL_INPUT 0xD 133#define TEEC_MEMREF_PARTIAL_OUTPUT 0xE 134#define TEEC_MEMREF_PARTIAL_INOUT 0xF 135 136#define TEEC_LOGIN_PUBLIC 0x00000000 137#define TEEC_LOGIN_USER 0x00000001 138#define TEEC_LOGIN_GROUP 0x00000002 139#define TEEC_LOGIN_APPLICATION 0x00000004 140#define TEEC_LOGIN_USER_APPLICATION 0x00000005 141#define TEEC_LOGIN_GROUP_APPLICATION 0x00000006 142 143TEEC_Result TEEC_EXPORT TEEC_InitializeContext( 144 const char* name, 145 TEEC_Context* context); 146 147void TEEC_EXPORT TEEC_FinalizeContext( 148 TEEC_Context* context); 149 150TEEC_Result TEEC_EXPORT TEEC_RegisterSharedMemory( 151 TEEC_Context* context, 152 TEEC_SharedMemory* sharedMem); 153 154TEEC_Result TEEC_EXPORT TEEC_AllocateSharedMemory( 155 TEEC_Context* context, 156 TEEC_SharedMemory* sharedMem); 157 158void TEEC_EXPORT TEEC_ReleaseSharedMemory ( 159 TEEC_SharedMemory* sharedMem); 160 161TEEC_Result TEEC_EXPORT TEEC_OpenSession ( 162 TEEC_Context* context, 163 TEEC_Session* session, 164 const TEEC_UUID* destination, 165 uint32_t connectionMethod, 166 void* connectionData, 167 TEEC_Operation* operation, 168 uint32_t* errorOrigin); 169 170void TEEC_EXPORT TEEC_CloseSession ( 171 TEEC_Session* session); 172 173TEEC_Result TEEC_EXPORT TEEC_InvokeCommand( 174 TEEC_Session* session, 175 uint32_t commandID, 176 TEEC_Operation* operation, 177 uint32_t* errorOrigin); 178 179void TEEC_EXPORT TEEC_RequestCancellation( 180 TEEC_Operation* operation); 181 182#include "tee_client_api_ex.h" 183 184#endif /* __TEE_CLIENT_API_H__ */ 185