1ae8ec5e1SHisping Lin /* 2ae8ec5e1SHisping Lin * Copyright 2017, Rockchip Electronics Co., Ltd 3ae8ec5e1SHisping Lin * hisping lin, <hisping.lin@rock-chips.com> 4ae8ec5e1SHisping Lin * 5ae8ec5e1SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 6ae8ec5e1SHisping Lin */ 7ae8ec5e1SHisping Lin 8ae8ec5e1SHisping Lin #include <common.h> 9ae8ec5e1SHisping Lin #include <optee_include/OpteeClientApiLib.h> 10ae8ec5e1SHisping Lin #include <optee_include/tee_client_api.h> 11ae8ec5e1SHisping Lin 12ae8ec5e1SHisping Lin void test_optee(void) 13ae8ec5e1SHisping Lin { 14ae8ec5e1SHisping Lin TEEC_Result TeecResult; 15ae8ec5e1SHisping Lin TEEC_Context TeecContext; 16ae8ec5e1SHisping Lin TEEC_Session TeecSession; 17ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 18ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 19ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 20ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 21ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 22ae8ec5e1SHisping Lin 23ae8ec5e1SHisping Lin debug("testmm start\n"); 24ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 25ae8ec5e1SHisping Lin 26ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 27ae8ec5e1SHisping Lin 28ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 29ae8ec5e1SHisping Lin &TeecSession, 30ae8ec5e1SHisping Lin TeecUuid, 31ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 32ae8ec5e1SHisping Lin NULL, 33ae8ec5e1SHisping Lin NULL, 34ae8ec5e1SHisping Lin &ErrorOrigin); 35ae8ec5e1SHisping Lin 36ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 37ae8ec5e1SHisping Lin 38ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 39ae8ec5e1SHisping Lin SharedMem0.flags = 0; 40ae8ec5e1SHisping Lin 41ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 42ae8ec5e1SHisping Lin 43ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 44ae8ec5e1SHisping Lin 45ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 46ae8ec5e1SHisping Lin 47ae8ec5e1SHisping Lin SharedMem1.size = 32; 48ae8ec5e1SHisping Lin SharedMem1.flags = 0; 49ae8ec5e1SHisping Lin 50ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 51ae8ec5e1SHisping Lin 52ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 53ae8ec5e1SHisping Lin 54ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 55ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 56ae8ec5e1SHisping Lin 57ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 58ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 59ae8ec5e1SHisping Lin 60ae8ec5e1SHisping Lin 61ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 62ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 63ae8ec5e1SHisping Lin TEEC_NONE, 64ae8ec5e1SHisping Lin TEEC_NONE); 65ae8ec5e1SHisping Lin 66ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 67ae8ec5e1SHisping Lin 1, 68ae8ec5e1SHisping Lin &TeecOperation, 69ae8ec5e1SHisping Lin &ErrorOrigin); 70ae8ec5e1SHisping Lin 71ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 72ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 73ae8ec5e1SHisping Lin 74ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 75ae8ec5e1SHisping Lin 7646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 77ae8ec5e1SHisping Lin 78ae8ec5e1SHisping Lin debug("testmm end\n"); 79ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 80ae8ec5e1SHisping Lin } 81ae8ec5e1SHisping Lin 82ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 83ae8ec5e1SHisping Lin { 84ae8ec5e1SHisping Lin if (in > 9) 85ae8ec5e1SHisping Lin return in + 55; 86ae8ec5e1SHisping Lin else 87ae8ec5e1SHisping Lin return in + 48; 88ae8ec5e1SHisping Lin } 89ae8ec5e1SHisping Lin 90ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 91ae8ec5e1SHisping Lin { 92ae8ec5e1SHisping Lin uint32_t i = 0; 93ae8ec5e1SHisping Lin 94ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 95ae8ec5e1SHisping Lin return 0; 96ae8ec5e1SHisping Lin 97ae8ec5e1SHisping Lin for (; i < blen; i++) { 98ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 99ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 100ae8ec5e1SHisping Lin } 101ae8ec5e1SHisping Lin hs[blen * 2] = 0; 102ae8ec5e1SHisping Lin 103ae8ec5e1SHisping Lin return blen * 2; 104ae8ec5e1SHisping Lin } 105ae8ec5e1SHisping Lin 106ae8ec5e1SHisping Lin 107ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 108ae8ec5e1SHisping Lin { 109ae8ec5e1SHisping Lin TEEC_Result TeecResult; 110ae8ec5e1SHisping Lin TEEC_Context TeecContext; 111ae8ec5e1SHisping Lin TEEC_Session TeecSession; 112ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 113ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 114ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 115ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 116ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 117ae8ec5e1SHisping Lin uint8_t hs[9]; 118ae8ec5e1SHisping Lin 119ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 120ae8ec5e1SHisping Lin debug("testmm start\n"); 121ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 122ae8ec5e1SHisping Lin 123ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 124ae8ec5e1SHisping Lin 125ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 126ae8ec5e1SHisping Lin &TeecSession, 127ae8ec5e1SHisping Lin TeecUuid, 128ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 129ae8ec5e1SHisping Lin NULL, 130ae8ec5e1SHisping Lin NULL, 131ae8ec5e1SHisping Lin &ErrorOrigin); 132ae8ec5e1SHisping Lin 133ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 134ae8ec5e1SHisping Lin 135ae8ec5e1SHisping Lin SharedMem0.size = 8; 136ae8ec5e1SHisping Lin SharedMem0.flags = 0; 137ae8ec5e1SHisping Lin 138ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 139ae8ec5e1SHisping Lin 140ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 141ae8ec5e1SHisping Lin 142ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 143ae8ec5e1SHisping Lin 144ae8ec5e1SHisping Lin SharedMem1.size = 8; 145ae8ec5e1SHisping Lin SharedMem1.flags = 0; 146ae8ec5e1SHisping Lin 147ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 148ae8ec5e1SHisping Lin 149ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 150ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 151ae8ec5e1SHisping Lin 152ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 153ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 154ae8ec5e1SHisping Lin 155ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 156ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 157ae8ec5e1SHisping Lin TEEC_NONE, 158ae8ec5e1SHisping Lin TEEC_NONE); 159ae8ec5e1SHisping Lin 160ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 161ae8ec5e1SHisping Lin 0, 162ae8ec5e1SHisping Lin &TeecOperation, 163ae8ec5e1SHisping Lin &ErrorOrigin); 16446b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 165ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 166ae8ec5e1SHisping Lin 167ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 168ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 169ae8ec5e1SHisping Lin 170ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 171ae8ec5e1SHisping Lin 17246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 173ae8ec5e1SHisping Lin 174ae8ec5e1SHisping Lin debug("testmm end\n"); 175ae8ec5e1SHisping Lin return TeecResult; 176ae8ec5e1SHisping Lin } 177ae8ec5e1SHisping Lin 178ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 179ae8ec5e1SHisping Lin { 180ae8ec5e1SHisping Lin TEEC_Result TeecResult; 181ae8ec5e1SHisping Lin TEEC_Context TeecContext; 182ae8ec5e1SHisping Lin TEEC_Session TeecSession; 183ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 184ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 185ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 186ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 187ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 188ae8ec5e1SHisping Lin uint8_t hs[9]; 189ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 190ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 191ae8ec5e1SHisping Lin 192ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 193ae8ec5e1SHisping Lin 194ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 195ae8ec5e1SHisping Lin &TeecSession, 196ae8ec5e1SHisping Lin TeecUuid, 197ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 198ae8ec5e1SHisping Lin NULL, 199ae8ec5e1SHisping Lin NULL, 200ae8ec5e1SHisping Lin &ErrorOrigin); 201ae8ec5e1SHisping Lin 202ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 203ae8ec5e1SHisping Lin 204ae8ec5e1SHisping Lin SharedMem0.size = 8; 205ae8ec5e1SHisping Lin SharedMem0.flags = 0; 206ae8ec5e1SHisping Lin 207ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 208ae8ec5e1SHisping Lin 209ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 210ae8ec5e1SHisping Lin 211ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 212ae8ec5e1SHisping Lin 213ae8ec5e1SHisping Lin SharedMem1.size = 8; 214ae8ec5e1SHisping Lin SharedMem1.flags = 0; 215ae8ec5e1SHisping Lin 216ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 217ae8ec5e1SHisping Lin 218ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 219ae8ec5e1SHisping Lin 220ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 221ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 222ae8ec5e1SHisping Lin 223ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 224ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 225ae8ec5e1SHisping Lin 226ae8ec5e1SHisping Lin 227ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 228ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 229ae8ec5e1SHisping Lin TEEC_NONE, 230ae8ec5e1SHisping Lin TEEC_NONE); 231ae8ec5e1SHisping Lin 232ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 233ae8ec5e1SHisping Lin 1, 234ae8ec5e1SHisping Lin &TeecOperation, 235ae8ec5e1SHisping Lin &ErrorOrigin); 236ae8ec5e1SHisping Lin 237ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 238ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 239ae8ec5e1SHisping Lin 240ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 241ae8ec5e1SHisping Lin 24246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 243ae8ec5e1SHisping Lin 244ae8ec5e1SHisping Lin debug("testmm end\n"); 245ae8ec5e1SHisping Lin 246ae8ec5e1SHisping Lin return TeecResult; 247ae8ec5e1SHisping Lin } 248ae8ec5e1SHisping Lin 249ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 250ae8ec5e1SHisping Lin { 251ae8ec5e1SHisping Lin TEEC_Result TeecResult; 252ae8ec5e1SHisping Lin TEEC_Context TeecContext; 253ae8ec5e1SHisping Lin TEEC_Session TeecSession; 254ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 25546b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 25646b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 257ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 258ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 259ae8ec5e1SHisping Lin 260ae8ec5e1SHisping Lin debug("testmm start\n"); 261ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 262ae8ec5e1SHisping Lin 263ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 264ae8ec5e1SHisping Lin 265ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 266ae8ec5e1SHisping Lin &TeecSession, 267ae8ec5e1SHisping Lin TeecUuid, 268ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 269ae8ec5e1SHisping Lin NULL, 270ae8ec5e1SHisping Lin NULL, 271ae8ec5e1SHisping Lin &ErrorOrigin); 272ae8ec5e1SHisping Lin 273ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 274ae8ec5e1SHisping Lin 275ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 276ae8ec5e1SHisping Lin SharedMem0.flags = 0; 277ae8ec5e1SHisping Lin 278ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 279ae8ec5e1SHisping Lin 280ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 281ae8ec5e1SHisping Lin 282ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 283ae8ec5e1SHisping Lin 284ae8ec5e1SHisping Lin SharedMem1.size = size; 285ae8ec5e1SHisping Lin SharedMem1.flags = 0; 286ae8ec5e1SHisping Lin 287ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 288ae8ec5e1SHisping Lin 289ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 290ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 291ae8ec5e1SHisping Lin 292ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 293ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 294ae8ec5e1SHisping Lin 295ae8ec5e1SHisping Lin 296ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 297ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 298ae8ec5e1SHisping Lin TEEC_NONE, 299ae8ec5e1SHisping Lin TEEC_NONE); 300ae8ec5e1SHisping Lin 301ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 30246b2a054SHisping Lin 142, 303ae8ec5e1SHisping Lin &TeecOperation, 304ae8ec5e1SHisping Lin &ErrorOrigin); 30546b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 306ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 307ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 308ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 309ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 31046b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 311ae8ec5e1SHisping Lin debug("testmm end\n"); 312ae8ec5e1SHisping Lin 313ae8ec5e1SHisping Lin return TeecResult; 314ae8ec5e1SHisping Lin } 315ae8ec5e1SHisping Lin 316ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 317ae8ec5e1SHisping Lin { 318ae8ec5e1SHisping Lin TEEC_Result TeecResult; 319ae8ec5e1SHisping Lin TEEC_Context TeecContext; 320ae8ec5e1SHisping Lin TEEC_Session TeecSession; 321ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 32246b2a054SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 32346b2a054SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 324ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 325ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 326ae8ec5e1SHisping Lin 327ae8ec5e1SHisping Lin debug("testmm start\n"); 328ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 329ae8ec5e1SHisping Lin 330ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 331ae8ec5e1SHisping Lin 332ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 333ae8ec5e1SHisping Lin &TeecSession, 334ae8ec5e1SHisping Lin TeecUuid, 335ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 336ae8ec5e1SHisping Lin NULL, 337ae8ec5e1SHisping Lin NULL, 338ae8ec5e1SHisping Lin &ErrorOrigin); 339ae8ec5e1SHisping Lin 340ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 341ae8ec5e1SHisping Lin 342ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 343ae8ec5e1SHisping Lin SharedMem0.flags = 0; 344ae8ec5e1SHisping Lin 345ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 346ae8ec5e1SHisping Lin 347ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 348ae8ec5e1SHisping Lin 349ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 350ae8ec5e1SHisping Lin 351ae8ec5e1SHisping Lin SharedMem1.size = size; 352ae8ec5e1SHisping Lin SharedMem1.flags = 0; 353ae8ec5e1SHisping Lin 354ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 355ae8ec5e1SHisping Lin 356ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 357ae8ec5e1SHisping Lin 358ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 359ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 360ae8ec5e1SHisping Lin 361ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 362ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 363ae8ec5e1SHisping Lin 364ae8ec5e1SHisping Lin 365ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 366ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 367ae8ec5e1SHisping Lin TEEC_NONE, 368ae8ec5e1SHisping Lin TEEC_NONE); 369ae8ec5e1SHisping Lin 370ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 37146b2a054SHisping Lin 141, 372ae8ec5e1SHisping Lin &TeecOperation, 373ae8ec5e1SHisping Lin &ErrorOrigin); 374ae8ec5e1SHisping Lin 375ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 376ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 377ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 37846b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 379ae8ec5e1SHisping Lin debug("testmm end\n"); 380ae8ec5e1SHisping Lin 381ae8ec5e1SHisping Lin return TeecResult; 382ae8ec5e1SHisping Lin } 383ae8ec5e1SHisping Lin 384ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 385ae8ec5e1SHisping Lin { 386ae8ec5e1SHisping Lin TEEC_Result TeecResult; 387ae8ec5e1SHisping Lin TEEC_Context TeecContext; 388ae8ec5e1SHisping Lin TEEC_Session TeecSession; 389ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 390ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 391ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 392ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 393ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 394ae8ec5e1SHisping Lin 395ae8ec5e1SHisping Lin debug("testmm start\n"); 396ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 397ae8ec5e1SHisping Lin 398ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 399ae8ec5e1SHisping Lin 400ae8ec5e1SHisping Lin 401ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 402ae8ec5e1SHisping Lin &TeecSession, 403ae8ec5e1SHisping Lin TeecUuid, 404ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 405ae8ec5e1SHisping Lin NULL, 406ae8ec5e1SHisping Lin NULL, 407ae8ec5e1SHisping Lin &ErrorOrigin); 408ae8ec5e1SHisping Lin 409ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 410ae8ec5e1SHisping Lin 411ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 412ae8ec5e1SHisping Lin SharedMem0.flags = 0; 413ae8ec5e1SHisping Lin 414ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 415ae8ec5e1SHisping Lin 416ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 417ae8ec5e1SHisping Lin 418ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 419ae8ec5e1SHisping Lin 420ae8ec5e1SHisping Lin SharedMem1.size = 1; 421ae8ec5e1SHisping Lin SharedMem1.flags = 0; 422ae8ec5e1SHisping Lin 423ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 424ae8ec5e1SHisping Lin 425ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 426ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 427ae8ec5e1SHisping Lin 428ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 429ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 430ae8ec5e1SHisping Lin 431ae8ec5e1SHisping Lin 432ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 433ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 434ae8ec5e1SHisping Lin TEEC_NONE, 435ae8ec5e1SHisping Lin TEEC_NONE); 436ae8ec5e1SHisping Lin 437ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 438ae8ec5e1SHisping Lin 0, 439ae8ec5e1SHisping Lin &TeecOperation, 440ae8ec5e1SHisping Lin &ErrorOrigin); 44146b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 442ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 443ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 444ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 445ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 44646b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 447ae8ec5e1SHisping Lin debug("testmm end\n"); 448ae8ec5e1SHisping Lin 449ae8ec5e1SHisping Lin return TeecResult; 450ae8ec5e1SHisping Lin } 451ae8ec5e1SHisping Lin 452ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 453ae8ec5e1SHisping Lin { 454ae8ec5e1SHisping Lin TEEC_Result TeecResult; 455ae8ec5e1SHisping Lin TEEC_Context TeecContext; 456ae8ec5e1SHisping Lin TEEC_Session TeecSession; 457ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 458ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 459ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 460ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 461ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 462ae8ec5e1SHisping Lin 463ae8ec5e1SHisping Lin debug("testmm start\n"); 464ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 465ae8ec5e1SHisping Lin 466ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 467ae8ec5e1SHisping Lin 468ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 469ae8ec5e1SHisping Lin &TeecSession, 470ae8ec5e1SHisping Lin TeecUuid, 471ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 472ae8ec5e1SHisping Lin NULL, 473ae8ec5e1SHisping Lin NULL, 474ae8ec5e1SHisping Lin &ErrorOrigin); 475ae8ec5e1SHisping Lin 476ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 477ae8ec5e1SHisping Lin 478ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 479ae8ec5e1SHisping Lin SharedMem0.flags = 0; 480ae8ec5e1SHisping Lin 481ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 482ae8ec5e1SHisping Lin 483ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 484ae8ec5e1SHisping Lin 485ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 486ae8ec5e1SHisping Lin 487ae8ec5e1SHisping Lin SharedMem1.size = 1; 488ae8ec5e1SHisping Lin SharedMem1.flags = 0; 489ae8ec5e1SHisping Lin 490ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 491ae8ec5e1SHisping Lin 492ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 493ae8ec5e1SHisping Lin 494ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 495ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 496ae8ec5e1SHisping Lin 497ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 498ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 499ae8ec5e1SHisping Lin 500ae8ec5e1SHisping Lin 501ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 502ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 503ae8ec5e1SHisping Lin TEEC_NONE, 504ae8ec5e1SHisping Lin TEEC_NONE); 505ae8ec5e1SHisping Lin 506ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 507ae8ec5e1SHisping Lin 1, 508ae8ec5e1SHisping Lin &TeecOperation, 509ae8ec5e1SHisping Lin &ErrorOrigin); 510ae8ec5e1SHisping Lin 511ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 512ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 513ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 51446b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 515ae8ec5e1SHisping Lin debug("testmm end\n"); 516ae8ec5e1SHisping Lin 517ae8ec5e1SHisping Lin return TeecResult; 518ae8ec5e1SHisping Lin } 519ae8ec5e1SHisping Lin 520ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 521ae8ec5e1SHisping Lin { 522ae8ec5e1SHisping Lin TEEC_Result TeecResult; 523ae8ec5e1SHisping Lin TEEC_Context TeecContext; 524ae8ec5e1SHisping Lin TEEC_Session TeecSession; 525ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 526ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 527ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 528ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 529ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 530ae8ec5e1SHisping Lin 531ae8ec5e1SHisping Lin debug("testmm start\n"); 532ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 533ae8ec5e1SHisping Lin 534ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 535ae8ec5e1SHisping Lin 536ae8ec5e1SHisping Lin 537ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 538ae8ec5e1SHisping Lin &TeecSession, 539ae8ec5e1SHisping Lin TeecUuid, 540ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 541ae8ec5e1SHisping Lin NULL, 542ae8ec5e1SHisping Lin NULL, 543ae8ec5e1SHisping Lin &ErrorOrigin); 544ae8ec5e1SHisping Lin 545ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 546ae8ec5e1SHisping Lin 547ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 548ae8ec5e1SHisping Lin SharedMem0.flags = 0; 549ae8ec5e1SHisping Lin 550ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 551ae8ec5e1SHisping Lin 552ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 553ae8ec5e1SHisping Lin 554ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 555ae8ec5e1SHisping Lin 556ae8ec5e1SHisping Lin SharedMem1.size = 1; 557ae8ec5e1SHisping Lin SharedMem1.flags = 0; 558ae8ec5e1SHisping Lin 559ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 560ae8ec5e1SHisping Lin 561ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 562ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 563ae8ec5e1SHisping Lin 564ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 565ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 566ae8ec5e1SHisping Lin 567ae8ec5e1SHisping Lin 568ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 569ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 570ae8ec5e1SHisping Lin TEEC_NONE, 571ae8ec5e1SHisping Lin TEEC_NONE); 572ae8ec5e1SHisping Lin 573ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 574ae8ec5e1SHisping Lin 0, 575ae8ec5e1SHisping Lin &TeecOperation, 576ae8ec5e1SHisping Lin &ErrorOrigin); 57746b2a054SHisping Lin if (TeecResult == TEEC_SUCCESS) 578ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 579ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 580ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 581ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 58246b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 583ae8ec5e1SHisping Lin debug("testmm end\n"); 584ae8ec5e1SHisping Lin 585ae8ec5e1SHisping Lin return TeecResult; 586ae8ec5e1SHisping Lin } 587ae8ec5e1SHisping Lin 588ae8ec5e1SHisping Lin 589ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 590ae8ec5e1SHisping Lin { 591ae8ec5e1SHisping Lin TEEC_Result TeecResult; 592ae8ec5e1SHisping Lin TEEC_Context TeecContext; 593ae8ec5e1SHisping Lin TEEC_Session TeecSession; 594ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 595ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 596ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 597ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 598ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 599ae8ec5e1SHisping Lin 600ae8ec5e1SHisping Lin debug("testmm start\n"); 601ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 602ae8ec5e1SHisping Lin 603ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 604ae8ec5e1SHisping Lin 605ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 606ae8ec5e1SHisping Lin &TeecSession, 607ae8ec5e1SHisping Lin TeecUuid, 608ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 609ae8ec5e1SHisping Lin NULL, 610ae8ec5e1SHisping Lin NULL, 611ae8ec5e1SHisping Lin &ErrorOrigin); 612ae8ec5e1SHisping Lin 613ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 614ae8ec5e1SHisping Lin 615ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 616ae8ec5e1SHisping Lin SharedMem0.flags = 0; 617ae8ec5e1SHisping Lin 618ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 619ae8ec5e1SHisping Lin 620ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 621ae8ec5e1SHisping Lin 622ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 623ae8ec5e1SHisping Lin 624ae8ec5e1SHisping Lin SharedMem1.size = 1; 625ae8ec5e1SHisping Lin SharedMem1.flags = 0; 626ae8ec5e1SHisping Lin 627ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 628ae8ec5e1SHisping Lin 629ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 630ae8ec5e1SHisping Lin 631ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 632ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 633ae8ec5e1SHisping Lin 634ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 635ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 636ae8ec5e1SHisping Lin 637ae8ec5e1SHisping Lin 638ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 639ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 640ae8ec5e1SHisping Lin TEEC_NONE, 641ae8ec5e1SHisping Lin TEEC_NONE); 642ae8ec5e1SHisping Lin 643ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 644ae8ec5e1SHisping Lin 1, 645ae8ec5e1SHisping Lin &TeecOperation, 646ae8ec5e1SHisping Lin &ErrorOrigin); 647ae8ec5e1SHisping Lin 648ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 649ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 650ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 65146b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 652ae8ec5e1SHisping Lin debug("testmm end\n"); 653ae8ec5e1SHisping Lin 654ae8ec5e1SHisping Lin return TeecResult; 655ae8ec5e1SHisping Lin } 656ae8ec5e1SHisping Lin 657ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 658ae8ec5e1SHisping Lin uint32_t filename_size, 659ae8ec5e1SHisping Lin uint8_t *data, 660ae8ec5e1SHisping Lin uint32_t data_size) 661ae8ec5e1SHisping Lin { 662ae8ec5e1SHisping Lin TEEC_Result TeecResult; 663ae8ec5e1SHisping Lin TEEC_Context TeecContext; 664ae8ec5e1SHisping Lin TEEC_Session TeecSession; 665ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 666ae8ec5e1SHisping Lin 667ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 668ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 669ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 670ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 671ae8ec5e1SHisping Lin 672ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 673ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 674ae8ec5e1SHisping Lin 675ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 676ae8ec5e1SHisping Lin 677ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 678ae8ec5e1SHisping Lin &TeecSession, 679ae8ec5e1SHisping Lin TeecUuid, 680ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 681ae8ec5e1SHisping Lin NULL, 682ae8ec5e1SHisping Lin NULL, 683ae8ec5e1SHisping Lin &ErrorOrigin); 684ae8ec5e1SHisping Lin 685ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 686ae8ec5e1SHisping Lin 687ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 688ae8ec5e1SHisping Lin SharedMem0.flags = 0; 689ae8ec5e1SHisping Lin 690ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 691ae8ec5e1SHisping Lin 692ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 693ae8ec5e1SHisping Lin 694ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 695ae8ec5e1SHisping Lin 696ae8ec5e1SHisping Lin SharedMem1.size = data_size; 697ae8ec5e1SHisping Lin SharedMem1.flags = 0; 698ae8ec5e1SHisping Lin 699ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 700ae8ec5e1SHisping Lin 701ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 702ae8ec5e1SHisping Lin 703ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 704ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 705ae8ec5e1SHisping Lin 706ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 707ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 708ae8ec5e1SHisping Lin 709ae8ec5e1SHisping Lin 710ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 711ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 712ae8ec5e1SHisping Lin TEEC_NONE, 713ae8ec5e1SHisping Lin TEEC_NONE); 714ae8ec5e1SHisping Lin 715ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 716*1f25ada2SHisping Lin 141, 717ae8ec5e1SHisping Lin &TeecOperation, 718ae8ec5e1SHisping Lin &ErrorOrigin); 719ae8ec5e1SHisping Lin 720ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 721ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 722ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 72346b2a054SHisping Lin TEEC_FinalizeContext(&TeecContext); 724ae8ec5e1SHisping Lin debug("testmm end\n"); 725ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 726ae8ec5e1SHisping Lin 727ae8ec5e1SHisping Lin return TeecResult; 728ae8ec5e1SHisping Lin } 7296ef445a4SHisping Lin 7306ef445a4SHisping Lin uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) 7316ef445a4SHisping Lin { 7326ef445a4SHisping Lin TEEC_Result TeecResult; 7336ef445a4SHisping Lin TEEC_Context TeecContext; 7346ef445a4SHisping Lin TEEC_Session TeecSession; 7356ef445a4SHisping Lin uint32_t ErrorOrigin; 7366ef445a4SHisping Lin 7376ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 7386ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 7396ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 7406ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 7416ef445a4SHisping Lin 7426ef445a4SHisping Lin OpteeClientApiLibInitialize(); 7436ef445a4SHisping Lin 7446ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 7456ef445a4SHisping Lin 7466ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 7476ef445a4SHisping Lin &TeecSession, 7486ef445a4SHisping Lin TeecUuid, 7496ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 7506ef445a4SHisping Lin NULL, 7516ef445a4SHisping Lin NULL, 7526ef445a4SHisping Lin &ErrorOrigin); 7536ef445a4SHisping Lin 7546ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 7556ef445a4SHisping Lin 7566ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 7576ef445a4SHisping Lin SharedMem0.flags = 0; 7586ef445a4SHisping Lin 7596ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 7606ef445a4SHisping Lin 7616ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 7626ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 7636ef445a4SHisping Lin 7646ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 7656ef445a4SHisping Lin TEEC_NONE, 7666ef445a4SHisping Lin TEEC_NONE, 7676ef445a4SHisping Lin TEEC_NONE); 7686ef445a4SHisping Lin 7696ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 7706ef445a4SHisping Lin 0, 7716ef445a4SHisping Lin &TeecOperation, 7726ef445a4SHisping Lin &ErrorOrigin); 7736ef445a4SHisping Lin 7746ef445a4SHisping Lin if (TeecResult == TEEC_SUCCESS) 7756ef445a4SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 7766ef445a4SHisping Lin 7776ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 7786ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 7796ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 7806ef445a4SHisping Lin 7816ef445a4SHisping Lin return TeecResult; 7826ef445a4SHisping Lin } 7836ef445a4SHisping Lin 7846ef445a4SHisping Lin uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 7856ef445a4SHisping Lin { 7866ef445a4SHisping Lin TEEC_Result TeecResult; 7876ef445a4SHisping Lin TEEC_Context TeecContext; 7886ef445a4SHisping Lin TEEC_Session TeecSession; 7896ef445a4SHisping Lin uint32_t ErrorOrigin; 7906ef445a4SHisping Lin 7916ef445a4SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 7926ef445a4SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 7936ef445a4SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 7946ef445a4SHisping Lin TEEC_Operation TeecOperation = {0}; 7956ef445a4SHisping Lin 7966ef445a4SHisping Lin OpteeClientApiLibInitialize(); 7976ef445a4SHisping Lin 7986ef445a4SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 7996ef445a4SHisping Lin 8006ef445a4SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 8016ef445a4SHisping Lin &TeecSession, 8026ef445a4SHisping Lin TeecUuid, 8036ef445a4SHisping Lin TEEC_LOGIN_PUBLIC, 8046ef445a4SHisping Lin NULL, 8056ef445a4SHisping Lin NULL, 8066ef445a4SHisping Lin &ErrorOrigin); 8076ef445a4SHisping Lin 8086ef445a4SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 8096ef445a4SHisping Lin 8106ef445a4SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 8116ef445a4SHisping Lin SharedMem0.flags = 0; 8126ef445a4SHisping Lin 8136ef445a4SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 8146ef445a4SHisping Lin 8156ef445a4SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 8166ef445a4SHisping Lin 8176ef445a4SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 8186ef445a4SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 8196ef445a4SHisping Lin 8206ef445a4SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 8216ef445a4SHisping Lin TEEC_NONE, 8226ef445a4SHisping Lin TEEC_NONE, 8236ef445a4SHisping Lin TEEC_NONE); 8246ef445a4SHisping Lin 8256ef445a4SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 8266ef445a4SHisping Lin 1, 8276ef445a4SHisping Lin &TeecOperation, 8286ef445a4SHisping Lin &ErrorOrigin); 8296ef445a4SHisping Lin 8306ef445a4SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 8316ef445a4SHisping Lin TEEC_CloseSession(&TeecSession); 8326ef445a4SHisping Lin TEEC_FinalizeContext(&TeecContext); 8336ef445a4SHisping Lin 8346ef445a4SHisping Lin return TeecResult; 8356ef445a4SHisping Lin } 83616539616SHisping Lin 83716539616SHisping Lin uint32_t notify_optee_rpmb_ta(void) 83816539616SHisping Lin { 83916539616SHisping Lin TEEC_Result TeecResult; 84016539616SHisping Lin TEEC_Context TeecContext; 84116539616SHisping Lin TEEC_Session TeecSession; 84216539616SHisping Lin uint32_t ErrorOrigin; 84316539616SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 84416539616SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 84516539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 84616539616SHisping Lin TEEC_Operation TeecOperation = {0}; 84716539616SHisping Lin 84816539616SHisping Lin OpteeClientApiLibInitialize(); 84916539616SHisping Lin 85016539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 85116539616SHisping Lin 85216539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 85316539616SHisping Lin &TeecSession, 85416539616SHisping Lin TeecUuid, 85516539616SHisping Lin TEEC_LOGIN_PUBLIC, 85616539616SHisping Lin NULL, 85716539616SHisping Lin NULL, 85816539616SHisping Lin &ErrorOrigin); 85916539616SHisping Lin 86016539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 86116539616SHisping Lin TEEC_NONE, 86216539616SHisping Lin TEEC_NONE, 86316539616SHisping Lin TEEC_NONE); 86416539616SHisping Lin 86516539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 86616539616SHisping Lin 2, 86716539616SHisping Lin &TeecOperation, 86816539616SHisping Lin &ErrorOrigin); 86916539616SHisping Lin 87016539616SHisping Lin TEEC_CloseSession(&TeecSession); 87116539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 87216539616SHisping Lin 87316539616SHisping Lin return TeecResult; 87416539616SHisping Lin } 87516539616SHisping Lin 87616539616SHisping Lin uint32_t notify_optee_efuse_ta(void) 87716539616SHisping Lin { 87816539616SHisping Lin TEEC_Result TeecResult; 87916539616SHisping Lin TEEC_Context TeecContext; 88016539616SHisping Lin TEEC_Session TeecSession; 88116539616SHisping Lin uint32_t ErrorOrigin; 88216539616SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 88316539616SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 88416539616SHisping Lin 88516539616SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 88616539616SHisping Lin TEEC_Operation TeecOperation = {0}; 88716539616SHisping Lin 88816539616SHisping Lin OpteeClientApiLibInitialize(); 88916539616SHisping Lin 89016539616SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 89116539616SHisping Lin 89216539616SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 89316539616SHisping Lin &TeecSession, 89416539616SHisping Lin TeecUuid, 89516539616SHisping Lin TEEC_LOGIN_PUBLIC, 89616539616SHisping Lin NULL, 89716539616SHisping Lin NULL, 89816539616SHisping Lin &ErrorOrigin); 89916539616SHisping Lin 90016539616SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, 90116539616SHisping Lin TEEC_NONE, 90216539616SHisping Lin TEEC_NONE, 90316539616SHisping Lin TEEC_NONE); 90416539616SHisping Lin 90516539616SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 90616539616SHisping Lin 2, 90716539616SHisping Lin &TeecOperation, 90816539616SHisping Lin &ErrorOrigin); 90916539616SHisping Lin 91016539616SHisping Lin TEEC_CloseSession(&TeecSession); 91116539616SHisping Lin TEEC_FinalizeContext(&TeecContext); 91216539616SHisping Lin 91316539616SHisping Lin return TeecResult; 91416539616SHisping Lin } 91516539616SHisping Lin 91616539616SHisping Lin uint32_t trusty_notify_optee_uboot_end(void) 91716539616SHisping Lin { 91816539616SHisping Lin TEEC_Result res; 91916539616SHisping Lin res = notify_optee_rpmb_ta(); 92016539616SHisping Lin res |= notify_optee_efuse_ta(); 92116539616SHisping Lin return res; 92216539616SHisping Lin } 9232cd27853SHisping Lin 9242cd27853SHisping Lin uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) 9252cd27853SHisping Lin { 9262cd27853SHisping Lin TEEC_Result TeecResult; 9272cd27853SHisping Lin TEEC_Context TeecContext; 9282cd27853SHisping Lin TEEC_Session TeecSession; 9292cd27853SHisping Lin uint32_t ErrorOrigin; 9302cd27853SHisping Lin 9312cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9322cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9332cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9342cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 9352cd27853SHisping Lin 9362cd27853SHisping Lin OpteeClientApiLibInitialize(); 9372cd27853SHisping Lin 9382cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9392cd27853SHisping Lin 9402cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9412cd27853SHisping Lin &TeecSession, 9422cd27853SHisping Lin TeecUuid, 9432cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 9442cd27853SHisping Lin NULL, 9452cd27853SHisping Lin NULL, 9462cd27853SHisping Lin &ErrorOrigin); 9472cd27853SHisping Lin 9482cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 9492cd27853SHisping Lin 9502cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 9512cd27853SHisping Lin SharedMem0.flags = 0; 9522cd27853SHisping Lin 9532cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 9542cd27853SHisping Lin 9552cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 9562cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 9572cd27853SHisping Lin 9582cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 9592cd27853SHisping Lin TEEC_NONE, 9602cd27853SHisping Lin TEEC_NONE, 9612cd27853SHisping Lin TEEC_NONE); 9622cd27853SHisping Lin 9632cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 9642cd27853SHisping Lin 3, 9652cd27853SHisping Lin &TeecOperation, 9662cd27853SHisping Lin &ErrorOrigin); 9672cd27853SHisping Lin 9682cd27853SHisping Lin if (TeecResult == TEEC_SUCCESS) 9692cd27853SHisping Lin memcpy(buf, SharedMem0.buffer, SharedMem0.size); 9702cd27853SHisping Lin 9712cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 9722cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 9732cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 9742cd27853SHisping Lin 9752cd27853SHisping Lin return TeecResult; 9762cd27853SHisping Lin } 9772cd27853SHisping Lin uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 9782cd27853SHisping Lin { 9792cd27853SHisping Lin TEEC_Result TeecResult; 9802cd27853SHisping Lin TEEC_Context TeecContext; 9812cd27853SHisping Lin TEEC_Session TeecSession; 9822cd27853SHisping Lin uint32_t ErrorOrigin; 9832cd27853SHisping Lin 9842cd27853SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 9852cd27853SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 9862cd27853SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 9872cd27853SHisping Lin TEEC_Operation TeecOperation = {0}; 9882cd27853SHisping Lin 9892cd27853SHisping Lin OpteeClientApiLibInitialize(); 9902cd27853SHisping Lin 9912cd27853SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 9922cd27853SHisping Lin 9932cd27853SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 9942cd27853SHisping Lin &TeecSession, 9952cd27853SHisping Lin TeecUuid, 9962cd27853SHisping Lin TEEC_LOGIN_PUBLIC, 9972cd27853SHisping Lin NULL, 9982cd27853SHisping Lin NULL, 9992cd27853SHisping Lin &ErrorOrigin); 10002cd27853SHisping Lin 10012cd27853SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 10022cd27853SHisping Lin 10032cd27853SHisping Lin SharedMem0.size = length * sizeof(uint32_t); 10042cd27853SHisping Lin SharedMem0.flags = 0; 10052cd27853SHisping Lin 10062cd27853SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 10072cd27853SHisping Lin 10082cd27853SHisping Lin memcpy(SharedMem0.buffer, buf, SharedMem0.size); 10092cd27853SHisping Lin 10102cd27853SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 10112cd27853SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 10122cd27853SHisping Lin 10132cd27853SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 10142cd27853SHisping Lin TEEC_NONE, 10152cd27853SHisping Lin TEEC_NONE, 10162cd27853SHisping Lin TEEC_NONE); 10172cd27853SHisping Lin 10182cd27853SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 10192cd27853SHisping Lin 4, 10202cd27853SHisping Lin &TeecOperation, 10212cd27853SHisping Lin &ErrorOrigin); 10222cd27853SHisping Lin 10232cd27853SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 10242cd27853SHisping Lin TEEC_CloseSession(&TeecSession); 10252cd27853SHisping Lin TEEC_FinalizeContext(&TeecContext); 10262cd27853SHisping Lin 10272cd27853SHisping Lin return TeecResult; 10282cd27853SHisping Lin } 1029095e2a82SHisping Lin 1030468df3b2SHisping Lin uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) 1031468df3b2SHisping Lin { 1032468df3b2SHisping Lin TEEC_Result TeecResult; 1033468df3b2SHisping Lin TEEC_Context TeecContext; 1034468df3b2SHisping Lin TEEC_Session TeecSession; 1035468df3b2SHisping Lin uint32_t ErrorOrigin; 1036468df3b2SHisping Lin uint32_t bootflag; 1037468df3b2SHisping Lin 1038468df3b2SHisping Lin TEEC_UUID tempuuid = { 0x2d26d8a8, 0x5134, 0x4dd8, \ 1039468df3b2SHisping Lin { 0xb3, 0x2f, 0xb3, 0x4b, 0xce, 0xeb, 0xc4, 0x71 } }; 1040468df3b2SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1041468df3b2SHisping Lin TEEC_Operation TeecOperation = {0}; 1042468df3b2SHisping Lin 1043468df3b2SHisping Lin OpteeClientApiLibInitialize(); 1044468df3b2SHisping Lin 1045468df3b2SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1046468df3b2SHisping Lin 1047468df3b2SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1048468df3b2SHisping Lin &TeecSession, 1049468df3b2SHisping Lin TeecUuid, 1050468df3b2SHisping Lin TEEC_LOGIN_PUBLIC, 1051468df3b2SHisping Lin NULL, 1052468df3b2SHisping Lin NULL, 1053468df3b2SHisping Lin &ErrorOrigin); 1054468df3b2SHisping Lin 1055468df3b2SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1056468df3b2SHisping Lin 1057468df3b2SHisping Lin SharedMem0.size = 1 * sizeof(uint32_t); 1058468df3b2SHisping Lin SharedMem0.flags = 0; 1059468df3b2SHisping Lin 1060468df3b2SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1061468df3b2SHisping Lin 1062468df3b2SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1063468df3b2SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1064468df3b2SHisping Lin 1065468df3b2SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, 1066468df3b2SHisping Lin TEEC_NONE, 1067468df3b2SHisping Lin TEEC_NONE, 1068468df3b2SHisping Lin TEEC_NONE); 1069468df3b2SHisping Lin 1070468df3b2SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1071468df3b2SHisping Lin 5, 1072468df3b2SHisping Lin &TeecOperation, 1073468df3b2SHisping Lin &ErrorOrigin); 1074468df3b2SHisping Lin 1075468df3b2SHisping Lin if (TeecResult == TEEC_SUCCESS) { 1076468df3b2SHisping Lin memcpy(&bootflag, SharedMem0.buffer, SharedMem0.size); 1077468df3b2SHisping Lin if (bootflag == 0x000000FF) 1078468df3b2SHisping Lin *flag = 1; 1079468df3b2SHisping Lin } 1080468df3b2SHisping Lin 1081468df3b2SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1082468df3b2SHisping Lin TEEC_CloseSession(&TeecSession); 1083468df3b2SHisping Lin TEEC_FinalizeContext(&TeecContext); 1084468df3b2SHisping Lin 1085468df3b2SHisping Lin return TeecResult; 1086468df3b2SHisping Lin } 1087468df3b2SHisping Lin 1088095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1089095e2a82SHisping Lin { 1090095e2a82SHisping Lin TEEC_Result TeecResult; 1091095e2a82SHisping Lin TEEC_Context TeecContext; 1092095e2a82SHisping Lin TEEC_Session TeecSession; 1093095e2a82SHisping Lin uint32_t ErrorOrigin; 1094095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1095095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1096095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1097095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1098095e2a82SHisping Lin 1099095e2a82SHisping Lin debug("testmm start\n"); 1100095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1101095e2a82SHisping Lin 1102095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1103095e2a82SHisping Lin 1104095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1105095e2a82SHisping Lin &TeecSession, 1106095e2a82SHisping Lin TeecUuid, 1107095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1108095e2a82SHisping Lin NULL, 1109095e2a82SHisping Lin NULL, 1110095e2a82SHisping Lin &ErrorOrigin); 1111095e2a82SHisping Lin 1112095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1113095e2a82SHisping Lin 1114095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1115095e2a82SHisping Lin SharedMem0.flags = 0; 1116095e2a82SHisping Lin 1117095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1118095e2a82SHisping Lin 1119095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1120095e2a82SHisping Lin 1121095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1122095e2a82SHisping Lin 1123095e2a82SHisping Lin SharedMem1.size = 1; 1124095e2a82SHisping Lin SharedMem1.flags = 0; 1125095e2a82SHisping Lin 1126095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1127095e2a82SHisping Lin 1128095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1129095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1130095e2a82SHisping Lin 1131095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1132095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1133095e2a82SHisping Lin 1134095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1135095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1136095e2a82SHisping Lin TEEC_NONE, 1137095e2a82SHisping Lin TEEC_NONE); 1138095e2a82SHisping Lin 1139095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1140095e2a82SHisping Lin 142, 1141095e2a82SHisping Lin &TeecOperation, 1142095e2a82SHisping Lin &ErrorOrigin); 1143095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1144095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1145095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1146095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1147095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1148095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1149095e2a82SHisping Lin debug("testmm end\n"); 1150095e2a82SHisping Lin 1151095e2a82SHisping Lin return TeecResult; 1152095e2a82SHisping Lin } 1153095e2a82SHisping Lin 1154095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1155095e2a82SHisping Lin { 1156095e2a82SHisping Lin TEEC_Result TeecResult; 1157095e2a82SHisping Lin TEEC_Context TeecContext; 1158095e2a82SHisping Lin TEEC_Session TeecSession; 1159095e2a82SHisping Lin uint32_t ErrorOrigin; 1160095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1161095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1162095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1163095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1164095e2a82SHisping Lin 1165095e2a82SHisping Lin debug("testmm start\n"); 1166095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1167095e2a82SHisping Lin 1168095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1169095e2a82SHisping Lin 1170095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1171095e2a82SHisping Lin &TeecSession, 1172095e2a82SHisping Lin TeecUuid, 1173095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1174095e2a82SHisping Lin NULL, 1175095e2a82SHisping Lin NULL, 1176095e2a82SHisping Lin &ErrorOrigin); 1177095e2a82SHisping Lin 1178095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1179095e2a82SHisping Lin 1180095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1181095e2a82SHisping Lin SharedMem0.flags = 0; 1182095e2a82SHisping Lin 1183095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1184095e2a82SHisping Lin 1185095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1186095e2a82SHisping Lin 1187095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1188095e2a82SHisping Lin 1189095e2a82SHisping Lin SharedMem1.size = 1; 1190095e2a82SHisping Lin SharedMem1.flags = 0; 1191095e2a82SHisping Lin 1192095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1193095e2a82SHisping Lin 1194095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1195095e2a82SHisping Lin 1196095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1197095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1198095e2a82SHisping Lin 1199095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1200095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1201095e2a82SHisping Lin 1202095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1203095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1204095e2a82SHisping Lin TEEC_NONE, 1205095e2a82SHisping Lin TEEC_NONE); 1206095e2a82SHisping Lin 1207095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1208095e2a82SHisping Lin 141, 1209095e2a82SHisping Lin &TeecOperation, 1210095e2a82SHisping Lin &ErrorOrigin); 1211095e2a82SHisping Lin 1212095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1213095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1214095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1215095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1216095e2a82SHisping Lin debug("testmm end\n"); 1217095e2a82SHisping Lin 1218095e2a82SHisping Lin return TeecResult; 1219095e2a82SHisping Lin } 12204aa61755SAndy Ye 12214aa61755SAndy Ye uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 12224aa61755SAndy Ye { 12234aa61755SAndy Ye TEEC_Result TeecResult; 12244aa61755SAndy Ye TEEC_Context TeecContext; 12254aa61755SAndy Ye TEEC_Session TeecSession; 12264aa61755SAndy Ye uint32_t ErrorOrigin; 12274aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 12284aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 12294aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 12304aa61755SAndy Ye } 12314aa61755SAndy Ye }; 12324aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 12334aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 12344aa61755SAndy Ye 12354aa61755SAndy Ye OpteeClientApiLibInitialize(); 12364aa61755SAndy Ye 12374aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 12384aa61755SAndy Ye 12394aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 12404aa61755SAndy Ye &TeecSession, 12414aa61755SAndy Ye TeecUuid, 12424aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 12434aa61755SAndy Ye NULL, 12444aa61755SAndy Ye NULL, 12454aa61755SAndy Ye &ErrorOrigin); 12464aa61755SAndy Ye 12474aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 12484aa61755SAndy Ye 12494aa61755SAndy Ye SharedMem0.size = *dh_size; 12504aa61755SAndy Ye SharedMem0.flags = 0; 12514aa61755SAndy Ye 12524aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 12534aa61755SAndy Ye 12544aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 12554aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 12564aa61755SAndy Ye 12574aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 12584aa61755SAndy Ye TEEC_NONE, 12594aa61755SAndy Ye TEEC_NONE, 12604aa61755SAndy Ye TEEC_NONE); 12614aa61755SAndy Ye 12624aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 12634aa61755SAndy Ye 143, 12644aa61755SAndy Ye &TeecOperation, 12654aa61755SAndy Ye &ErrorOrigin); 12664aa61755SAndy Ye 12674aa61755SAndy Ye *dh_size = TeecOperation.params[0].tmpref.size; 12684aa61755SAndy Ye memcpy(dh, SharedMem0.buffer, SharedMem0.size); 12694aa61755SAndy Ye 12704aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 12714aa61755SAndy Ye 12724aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 12734aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 12744aa61755SAndy Ye 12754aa61755SAndy Ye return TeecResult; 12764aa61755SAndy Ye } 12774aa61755SAndy Ye 12784aa61755SAndy Ye uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 12794aa61755SAndy Ye { 12804aa61755SAndy Ye TEEC_Result TeecResult; 12814aa61755SAndy Ye TEEC_Context TeecContext; 12824aa61755SAndy Ye TEEC_Session TeecSession; 12834aa61755SAndy Ye uint32_t ErrorOrigin; 12844aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 12854aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 12864aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 12874aa61755SAndy Ye } 12884aa61755SAndy Ye }; 12894aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 12904aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 12914aa61755SAndy Ye 12924aa61755SAndy Ye OpteeClientApiLibInitialize(); 12934aa61755SAndy Ye 12944aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 12954aa61755SAndy Ye 12964aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 12974aa61755SAndy Ye &TeecSession, 12984aa61755SAndy Ye TeecUuid, 12994aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 13004aa61755SAndy Ye NULL, 13014aa61755SAndy Ye NULL, 13024aa61755SAndy Ye &ErrorOrigin); 13034aa61755SAndy Ye 13044aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 13054aa61755SAndy Ye 13064aa61755SAndy Ye SharedMem0.size = *uuid_size; 13074aa61755SAndy Ye SharedMem0.flags = 0; 13084aa61755SAndy Ye 13094aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 13104aa61755SAndy Ye 13114aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 13124aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 13134aa61755SAndy Ye 13144aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 13154aa61755SAndy Ye TEEC_NONE, 13164aa61755SAndy Ye TEEC_NONE, 13174aa61755SAndy Ye TEEC_NONE); 13184aa61755SAndy Ye 13194aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 13204aa61755SAndy Ye 144, 13214aa61755SAndy Ye &TeecOperation, 13224aa61755SAndy Ye &ErrorOrigin); 13234aa61755SAndy Ye 13244aa61755SAndy Ye *uuid_size = TeecOperation.params[0].tmpref.size; 13254aa61755SAndy Ye memcpy(uuid, SharedMem0.buffer, SharedMem0.size); 13264aa61755SAndy Ye 13274aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 13284aa61755SAndy Ye 13294aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 13304aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 13314aa61755SAndy Ye 13324aa61755SAndy Ye return TeecResult; 13334aa61755SAndy Ye } 13344aa61755SAndy Ye 13354aa61755SAndy Ye uint32_t trusty_attest_get_ca(uint8_t *operation_start, 13364aa61755SAndy Ye uint32_t *operation_size, 13374aa61755SAndy Ye uint8_t *out, 13384aa61755SAndy Ye uint32_t *out_len) 13394aa61755SAndy Ye { 13404aa61755SAndy Ye TEEC_Result TeecResult; 13414aa61755SAndy Ye TEEC_Context TeecContext; 13424aa61755SAndy Ye TEEC_Session TeecSession; 13434aa61755SAndy Ye uint32_t ErrorOrigin; 13444aa61755SAndy Ye 13454aa61755SAndy Ye OpteeClientApiLibInitialize(); 13464aa61755SAndy Ye 13474aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 13484aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 13494aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 13504aa61755SAndy Ye } 13514aa61755SAndy Ye }; 13524aa61755SAndy Ye 13534aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 13544aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 13554aa61755SAndy Ye 13564aa61755SAndy Ye OpteeClientApiLibInitialize(); 13574aa61755SAndy Ye 13584aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 13594aa61755SAndy Ye 13604aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 13614aa61755SAndy Ye &TeecSession, 13624aa61755SAndy Ye TeecUuid, 13634aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 13644aa61755SAndy Ye NULL, 13654aa61755SAndy Ye NULL, 13664aa61755SAndy Ye &ErrorOrigin); 13674aa61755SAndy Ye 13684aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 13694aa61755SAndy Ye 13704aa61755SAndy Ye SharedMem0.size = *operation_size; 13714aa61755SAndy Ye SharedMem0.flags = 0; 13724aa61755SAndy Ye 13734aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 13744aa61755SAndy Ye 13754aa61755SAndy Ye memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); 13764aa61755SAndy Ye 13774aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 13784aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 13794aa61755SAndy Ye 13804aa61755SAndy Ye TEEC_SharedMemory SharedMem1 = {0}; 13814aa61755SAndy Ye 13824aa61755SAndy Ye SharedMem1.size = *out_len; 13834aa61755SAndy Ye SharedMem1.flags = 0; 13844aa61755SAndy Ye 13854aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 13864aa61755SAndy Ye 13874aa61755SAndy Ye TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 13884aa61755SAndy Ye TeecOperation.params[1].tmpref.size = SharedMem1.size; 13894aa61755SAndy Ye 13904aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 13914aa61755SAndy Ye TEEC_MEMREF_TEMP_INOUT, 13924aa61755SAndy Ye TEEC_NONE, 13934aa61755SAndy Ye TEEC_NONE); 13944aa61755SAndy Ye 13954aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 13964aa61755SAndy Ye 145, 13974aa61755SAndy Ye &TeecOperation, 13984aa61755SAndy Ye &ErrorOrigin); 13994aa61755SAndy Ye 14004aa61755SAndy Ye *out_len = TeecOperation.params[1].tmpref.size; 14014aa61755SAndy Ye memcpy(out, SharedMem1.buffer, SharedMem1.size); 14024aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 14034aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem1); 14044aa61755SAndy Ye 14054aa61755SAndy Ye return TeecResult; 14064aa61755SAndy Ye } 14074aa61755SAndy Ye 14084aa61755SAndy Ye uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 14094aa61755SAndy Ye { 14104aa61755SAndy Ye TEEC_Result TeecResult; 14114aa61755SAndy Ye TEEC_Context TeecContext; 14124aa61755SAndy Ye TEEC_Session TeecSession; 14134aa61755SAndy Ye uint32_t ErrorOrigin; 14144aa61755SAndy Ye TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 14154aa61755SAndy Ye { 0xa8, 0x69, 0x9c, 0xe6, 14164aa61755SAndy Ye 0x88, 0x6c, 0x5d, 0x5d 14174aa61755SAndy Ye } 14184aa61755SAndy Ye }; 14194aa61755SAndy Ye TEEC_UUID *TeecUuid = &tempuuid; 14204aa61755SAndy Ye TEEC_Operation TeecOperation = {0}; 14214aa61755SAndy Ye 14224aa61755SAndy Ye TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 14234aa61755SAndy Ye 14244aa61755SAndy Ye TeecResult = TEEC_OpenSession(&TeecContext, 14254aa61755SAndy Ye &TeecSession, 14264aa61755SAndy Ye TeecUuid, 14274aa61755SAndy Ye TEEC_LOGIN_PUBLIC, 14284aa61755SAndy Ye NULL, 14294aa61755SAndy Ye NULL, 14304aa61755SAndy Ye &ErrorOrigin); 14314aa61755SAndy Ye 14324aa61755SAndy Ye TEEC_SharedMemory SharedMem0 = {0}; 14334aa61755SAndy Ye 14344aa61755SAndy Ye SharedMem0.size = *ca_response_size; 14354aa61755SAndy Ye SharedMem0.flags = 0; 14364aa61755SAndy Ye 14374aa61755SAndy Ye TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 14384aa61755SAndy Ye 14394aa61755SAndy Ye memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); 14404aa61755SAndy Ye 14414aa61755SAndy Ye TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 14424aa61755SAndy Ye TeecOperation.params[0].tmpref.size = SharedMem0.size; 14434aa61755SAndy Ye 14444aa61755SAndy Ye TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, 14454aa61755SAndy Ye TEEC_NONE, 14464aa61755SAndy Ye TEEC_NONE, 14474aa61755SAndy Ye TEEC_NONE); 14484aa61755SAndy Ye 14494aa61755SAndy Ye TeecResult = TEEC_InvokeCommand(&TeecSession, 14504aa61755SAndy Ye 146, 14514aa61755SAndy Ye &TeecOperation, 14524aa61755SAndy Ye &ErrorOrigin); 14534aa61755SAndy Ye 14544aa61755SAndy Ye TEEC_ReleaseSharedMemory(&SharedMem0); 14554aa61755SAndy Ye 14564aa61755SAndy Ye TEEC_CloseSession(&TeecSession); 14574aa61755SAndy Ye TeecResult = TEEC_FinalizeContext(&TeecContext); 14584aa61755SAndy Ye 14594aa61755SAndy Ye return TeecResult; 14604aa61755SAndy Ye } 1461