/** * Copyright(c) 2011 Trusted Logic. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name Trusted Logic nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * This header file corresponds to V1.0 of the GlobalPlatform * TEE Client API Specification */ #ifndef __TEE_CLIENT_API_H__ #define __TEE_CLIENT_API_H__ #include "s_type.h" #include "s_error.h" #ifndef TEEC_EXPORT #define TEEC_EXPORT #endif /* The header tee_client_api_imp.h must define implementation-dependent types, constants and macros. The implementation-dependent types are: - TEEC_Context_IMP - TEEC_Session_IMP - TEEC_SharedMemory_IMP - TEEC_Operation_IMP The implementation-dependent constants are: - TEEC_CONFIG_SHAREDMEM_MAX_SIZE The implementation-dependent macros are: - TEEC_PARAM_TYPES */ #include "tee_client_api_imp.h" /* Type definitions */ typedef struct TEEC_Context { TEEC_Context_IMP imp; } TEEC_Context; typedef struct TEEC_Session { TEEC_Session_IMP imp; } TEEC_Session; typedef struct TEEC_SharedMemory { void* buffer; size_t size; uint32_t flags; TEEC_SharedMemory_IMP imp; } TEEC_SharedMemory; typedef struct { void* buffer; size_t size; } TEEC_TempMemoryReference; typedef struct { TEEC_SharedMemory * parent; size_t size; size_t offset; } TEEC_RegisteredMemoryReference; typedef struct { uint32_t a; uint32_t b; } TEEC_Value; typedef union { TEEC_TempMemoryReference tmpref; TEEC_RegisteredMemoryReference memref; TEEC_Value value; } TEEC_Parameter; typedef struct TEEC_Operation { volatile uint32_t started; uint32_t paramTypes; TEEC_Parameter params[4]; TEEC_Operation_IMP imp; } TEEC_Operation; #define TEEC_ORIGIN_API 0x00000001 #define TEEC_ORIGIN_COMMS 0x00000002 #define TEEC_ORIGIN_TEE 0x00000003 #define TEEC_ORIGIN_TRUSTED_APP 0x00000004 #define TEEC_MEM_INPUT 0x00000001 #define TEEC_MEM_OUTPUT 0x00000002 #define TEEC_NONE 0x0 #define TEEC_VALUE_INPUT 0x1 #define TEEC_VALUE_OUTPUT 0x2 #define TEEC_VALUE_INOUT 0x3 #define TEEC_MEMREF_TEMP_INPUT 0x5 #define TEEC_MEMREF_TEMP_OUTPUT 0x6 #define TEEC_MEMREF_TEMP_INOUT 0x7 #define TEEC_MEMREF_WHOLE 0xC #define TEEC_MEMREF_PARTIAL_INPUT 0xD #define TEEC_MEMREF_PARTIAL_OUTPUT 0xE #define TEEC_MEMREF_PARTIAL_INOUT 0xF #define TEEC_LOGIN_PUBLIC 0x00000000 #define TEEC_LOGIN_USER 0x00000001 #define TEEC_LOGIN_GROUP 0x00000002 #define TEEC_LOGIN_APPLICATION 0x00000004 #define TEEC_LOGIN_USER_APPLICATION 0x00000005 #define TEEC_LOGIN_GROUP_APPLICATION 0x00000006 TEEC_Result TEEC_EXPORT TEEC_InitializeContext( const char* name, TEEC_Context* context); void TEEC_EXPORT TEEC_FinalizeContext( TEEC_Context* context); TEEC_Result TEEC_EXPORT TEEC_RegisterSharedMemory( TEEC_Context* context, TEEC_SharedMemory* sharedMem); TEEC_Result TEEC_EXPORT TEEC_AllocateSharedMemory( TEEC_Context* context, TEEC_SharedMemory* sharedMem); void TEEC_EXPORT TEEC_ReleaseSharedMemory ( TEEC_SharedMemory* sharedMem); TEEC_Result TEEC_EXPORT TEEC_OpenSession ( TEEC_Context* context, TEEC_Session* session, const TEEC_UUID* destination, uint32_t connectionMethod, void* connectionData, TEEC_Operation* operation, uint32_t* errorOrigin); void TEEC_EXPORT TEEC_CloseSession ( TEEC_Session* session); TEEC_Result TEEC_EXPORT TEEC_InvokeCommand( TEEC_Session* session, uint32_t commandID, TEEC_Operation* operation, uint32_t* errorOrigin); void TEEC_EXPORT TEEC_RequestCancellation( TEEC_Operation* operation); #include "tee_client_api_ex.h" #endif /* __TEE_CLIENT_API_H__ */