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