2 #include <trustzone/kree/mem.h>
3 #include <trustzone/kree/system.h>
4 #include <trustzone/tz_cross/ta_mem.h>
10 // notiec: handle type is the same
11 static inline TZ_RESULT
_allocFunc (uint32_t cmd
, KREE_SESSION_HANDLE session
,
12 uint32_t *mem_handle
, uint32_t alignment
, uint32_t size
, char *dbg
)
17 if ((session
== 0) || (mem_handle
== NULL
) || (size
== 0))
19 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
22 p
[0].value
.a
= alignment
;
24 ret
= KREE_TeeServiceCall(session
, cmd
,
25 TZ_ParamTypes3( TZPT_VALUE_INPUT
, TZPT_VALUE_INPUT
, TZPT_VALUE_OUTPUT
), p
);
26 if (ret
!= TZ_RESULT_SUCCESS
)
29 printk("[kree] %s Error: %d\n", dbg
, ret
);
34 *mem_handle
= (KREE_SECUREMEM_HANDLE
) p
[2].value
.a
;
36 return TZ_RESULT_SUCCESS
;
39 static inline TZ_RESULT
_handleOpFunc (uint32_t cmd
, KREE_SESSION_HANDLE session
, uint32_t mem_handle
, char *dbg
)
44 if ((session
== 0) || (mem_handle
== 0))
46 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
49 p
[0].value
.a
= (uint32_t) mem_handle
;
50 ret
= KREE_TeeServiceCall(session
, cmd
,
51 TZ_ParamTypes1( TZPT_VALUE_INPUT
), p
);
55 printk("[kree] %s Error: %d\n", dbg
, ret
);
60 return TZ_RESULT_SUCCESS
;
63 static inline TZ_RESULT
_handleOpFunc_1 (uint32_t cmd
, KREE_SESSION_HANDLE session
, uint32_t mem_handle
, uint32_t *count
, char *dbg
)
68 if ((session
== 0) || (mem_handle
== 0) || (count
== NULL
))
70 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
73 p
[0].value
.a
= (uint32_t) mem_handle
;
74 ret
= KREE_TeeServiceCall(session
, cmd
,
75 TZ_ParamTypes2( TZPT_VALUE_INPUT
, TZPT_VALUE_OUTPUT
), p
);
79 printk("[kree] %s Error: %d\n", dbg
, ret
);
85 *count
= p
[1].value
.a
;
87 return TZ_RESULT_SUCCESS
;
91 TZ_RESULT
kree_register_sharedmem (KREE_SESSION_HANDLE session
, KREE_SHAREDMEM_HANDLE
*mem_handle
,
92 uint32_t start
, uint32_t size
, uint32_t map_p
)
100 ret
= KREE_TeeServiceCall(session
, TZCMD_MEM_SHAREDMEM_REG
,
101 TZ_ParamTypes4(TZPT_VALUE_INPUT
, TZPT_VALUE_INPUT
, TZPT_VALUE_INPUT
, TZPT_VALUE_OUTPUT
), p
);
102 if (ret
!= TZ_RESULT_SUCCESS
)
108 *mem_handle
= p
[3].value
.a
;
110 return TZ_RESULT_SUCCESS
;
113 TZ_RESULT
kree_unregister_sharedmem (KREE_SESSION_HANDLE session
, KREE_SHAREDMEM_HANDLE mem_handle
)
118 p
[0].value
.a
= (uint32_t) mem_handle
;
119 ret
= KREE_TeeServiceCall(session
, TZCMD_MEM_SHAREDMEM_UNREG
,
120 TZ_ParamTypes1(TZPT_VALUE_INPUT
), p
);
121 if (ret
!= TZ_RESULT_SUCCESS
)
126 return TZ_RESULT_SUCCESS
;
131 TZ_RESULT
KREE_RegisterSharedmem (KREE_SESSION_HANDLE session
,
132 KREE_SHAREDMEM_HANDLE
*shm_handle
, KREE_SHAREDMEM_PARAM
*param
)
136 if ((session
== 0) || (shm_handle
== NULL
) || (param
->buffer
== NULL
) || (param
->size
== 0))
138 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
142 if (((uint32_t) param
->buffer
>= PAGE_OFFSET
) &&
143 ((uint32_t) param
->buffer
< (uint32_t) high_memory
))
145 ret
= kree_register_sharedmem (session
, shm_handle
, (uint32_t) param
->buffer
, (uint32_t) param
->size
, 0); // set 0 for no remap...
146 if (ret
!= TZ_RESULT_SUCCESS
)
149 printk("[kree] KREE_RegisterSharedmem Error: %d\n", ret
);
156 printk("[kree] KREE_RegisterSharedmem Error: support kmalloc only!!!\n");
157 return TZ_RESULT_ERROR_NOT_IMPLEMENTED
;
160 return TZ_RESULT_SUCCESS
;
163 TZ_RESULT
KREE_UnregisterSharedmem (KREE_SESSION_HANDLE session
, KREE_SHAREDMEM_HANDLE shm_handle
)
167 if ((session
== 0) || (shm_handle
== 0))
169 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
172 ret
= kree_unregister_sharedmem (session
, shm_handle
);
176 printk("[kree] KREE_UnregisterSharedmem Error: %d\n", ret
);
181 return TZ_RESULT_SUCCESS
;
184 TZ_RESULT
KREE_AllocSecuremem (KREE_SESSION_HANDLE session
,
185 KREE_SECUREMEM_HANDLE
*mem_handle
, uint32_t alignment
, uint32_t size
)
189 ret
= _allocFunc (TZCMD_MEM_SECUREMEM_ALLOC
, session
, mem_handle
, alignment
, size
, "KREE_AllocSecuremem");
194 TZ_RESULT
KREE_ReferenceSecuremem (KREE_SESSION_HANDLE session
, KREE_SECUREMEM_HANDLE mem_handle
)
198 ret
= _handleOpFunc (TZCMD_MEM_SECUREMEM_REF
, session
, mem_handle
, "KREE_ReferenceSecuremem");
203 TZ_RESULT
KREE_UnreferenceSecuremem (KREE_SESSION_HANDLE session
, KREE_SECUREMEM_HANDLE mem_handle
)
208 ret
= _handleOpFunc_1 (TZCMD_MEM_SECUREMEM_UNREF
, session
, mem_handle
, &count
, "KREE_UnreferenceSecuremem");
210 printk ("KREE_UnreferenceSecuremem: count = 0x%x\n", count
);
216 TZ_RESULT
KREE_AllocSecurechunkmem (KREE_SESSION_HANDLE session
,
217 KREE_SECUREMEM_HANDLE
*cm_handle
, uint32_t alignment
, uint32_t size
)
221 ret
= _allocFunc (TZCMD_MEM_SECURECM_ALLOC
, session
, cm_handle
, alignment
, size
, "KREE_AllocSecurechunkmem");
226 TZ_RESULT
KREE_ReferenceSecurechunkmem (KREE_SESSION_HANDLE session
, KREE_SECURECM_HANDLE cm_handle
)
230 ret
= _handleOpFunc (TZCMD_MEM_SECURECM_REF
, session
, cm_handle
, "KREE_ReferenceSecurechunkmem");
235 TZ_RESULT
KREE_UnreferenceSecurechunkmem (KREE_SESSION_HANDLE session
, KREE_SECURECM_HANDLE cm_handle
)
240 ret
= _handleOpFunc_1 (TZCMD_MEM_SECURECM_UNREF
, session
, cm_handle
, &count
, "KREE_UnreferenceSecurechunkmem");
242 printk ("KREE_UnreferenceSecurechunkmem: count = 0x%x\n", count
);
248 TZ_RESULT
KREE_ReadSecurechunkmem (KREE_SESSION_HANDLE session
, uint32_t offset
, uint32_t size
, void *buffer
)
253 if ((session
== 0) || (size
== 0))
255 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
258 p
[0].value
.a
= offset
;
260 p
[2].mem
.buffer
= buffer
;
261 p
[2].mem
.size
= size
; // fix me!!!!
262 ret
= KREE_TeeServiceCall(session
, TZCMD_MEM_SECURECM_READ
,
263 TZ_ParamTypes3(TZPT_VALUE_INPUT
, TZPT_VALUE_INPUT
, TZPT_MEM_OUTPUT
), p
);
264 if (ret
!= TZ_RESULT_SUCCESS
)
267 printk("[kree] KREE_ReadSecurechunkmem Error: %d\n", ret
);
272 return TZ_RESULT_SUCCESS
;
275 TZ_RESULT
KREE_WriteSecurechunkmem (KREE_SESSION_HANDLE session
, uint32_t offset
, uint32_t size
, void *buffer
)
280 if ((session
== 0) || (size
== 0))
282 return TZ_RESULT_ERROR_BAD_PARAMETERS
;
285 p
[0].value
.a
= offset
;
287 p
[2].mem
.buffer
= buffer
;
288 p
[2].mem
.size
= size
; // fix me!!!!
289 ret
= KREE_TeeServiceCall(session
, TZCMD_MEM_SECURECM_WRITE
,
290 TZ_ParamTypes3(TZPT_VALUE_INPUT
, TZPT_VALUE_INPUT
, TZPT_MEM_INPUT
), p
);
291 if (ret
!= TZ_RESULT_SUCCESS
)
294 printk("[kree] KREE_WriteSecurechunkmem Error: %d\n", ret
);
299 return TZ_RESULT_SUCCESS
;
303 TZ_RESULT
KREE_GetSecurechunkReleaseSize (KREE_SESSION_HANDLE session
, uint32_t *size
)
308 ret
= KREE_TeeServiceCall(session
, TZCMD_MEM_SECURECM_RSIZE
, TZ_ParamTypes1(TZPT_VALUE_OUTPUT
), p
);
309 if (ret
!= TZ_RESULT_SUCCESS
)
312 printk("[kree] KREE_GetSecurechunkReleaseSize Error: %d\n", ret
);
317 *size
= p
[0].value
.a
;
319 return TZ_RESULT_SUCCESS
;
322 TZ_RESULT
KREE_GetTEETotalSize (KREE_SESSION_HANDLE session
, uint32_t *size
)
327 ret
= KREE_TeeServiceCall(session
, TZCMD_MEM_TOTAL_SIZE
, TZ_ParamTypes1(TZPT_VALUE_OUTPUT
), p
);
328 if (ret
!= TZ_RESULT_SUCCESS
)
331 printk("[kree] KREE_GetTEETotalSize Error: %d\n", ret
);
336 *size
= p
[0].value
.a
;
338 return TZ_RESULT_SUCCESS
;