/**
* 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__ */