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 */ 62 typedef struct TEEC_Context 63 { 64 TEEC_Context_IMP imp; 65 } TEEC_Context; 66 67 typedef struct TEEC_Session 68 { 69 TEEC_Session_IMP imp; 70 } TEEC_Session; 71 72 typedef struct TEEC_SharedMemory 73 { 74 void* buffer; 75 size_t size; 76 uint32_t flags; 77 TEEC_SharedMemory_IMP imp; 78 } TEEC_SharedMemory; 79 80 typedef struct 81 { 82 void* buffer; 83 size_t size; 84 } TEEC_TempMemoryReference; 85 86 typedef struct 87 { 88 TEEC_SharedMemory * parent; 89 size_t size; 90 size_t offset; 91 } TEEC_RegisteredMemoryReference; 92 93 typedef struct 94 { 95 uint32_t a; 96 uint32_t b; 97 } TEEC_Value; 98 99 typedef union 100 { 101 TEEC_TempMemoryReference tmpref; 102 TEEC_RegisteredMemoryReference memref; 103 TEEC_Value value; 104 } TEEC_Parameter; 105 106 typedef 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 143 TEEC_Result TEEC_EXPORT TEEC_InitializeContext( 144 const char* name, 145 TEEC_Context* context); 146 147 void TEEC_EXPORT TEEC_FinalizeContext( 148 TEEC_Context* context); 149 150 TEEC_Result TEEC_EXPORT TEEC_RegisterSharedMemory( 151 TEEC_Context* context, 152 TEEC_SharedMemory* sharedMem); 153 154 TEEC_Result TEEC_EXPORT TEEC_AllocateSharedMemory( 155 TEEC_Context* context, 156 TEEC_SharedMemory* sharedMem); 157 158 void TEEC_EXPORT TEEC_ReleaseSharedMemory ( 159 TEEC_SharedMemory* sharedMem); 160 161 TEEC_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 170 void TEEC_EXPORT TEEC_CloseSession ( 171 TEEC_Session* session); 172 173 TEEC_Result TEEC_EXPORT TEEC_InvokeCommand( 174 TEEC_Session* session, 175 uint32_t commandID, 176 TEEC_Operation* operation, 177 uint32_t* errorOrigin); 178 179 void TEEC_EXPORT TEEC_RequestCancellation( 180 TEEC_Operation* operation); 181 182 #include "tee_client_api_ex.h" 183 184 #endif /* __TEE_CLIENT_API_H__ */ 185