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, 716ae8ec5e1SHisping Lin 139, 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 } 1029*095e2a82SHisping Lin 1030*095e2a82SHisping Lin uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) 1031*095e2a82SHisping Lin { 1032*095e2a82SHisping Lin TEEC_Result TeecResult; 1033*095e2a82SHisping Lin TEEC_Context TeecContext; 1034*095e2a82SHisping Lin TEEC_Session TeecSession; 1035*095e2a82SHisping Lin uint32_t ErrorOrigin; 1036*095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1037*095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1038*095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1039*095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1040*095e2a82SHisping Lin 1041*095e2a82SHisping Lin debug("testmm start\n"); 1042*095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1043*095e2a82SHisping Lin 1044*095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1045*095e2a82SHisping Lin 1046*095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1047*095e2a82SHisping Lin &TeecSession, 1048*095e2a82SHisping Lin TeecUuid, 1049*095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1050*095e2a82SHisping Lin NULL, 1051*095e2a82SHisping Lin NULL, 1052*095e2a82SHisping Lin &ErrorOrigin); 1053*095e2a82SHisping Lin 1054*095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1055*095e2a82SHisping Lin 1056*095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1057*095e2a82SHisping Lin SharedMem0.flags = 0; 1058*095e2a82SHisping Lin 1059*095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1060*095e2a82SHisping Lin 1061*095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1062*095e2a82SHisping Lin 1063*095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1064*095e2a82SHisping Lin 1065*095e2a82SHisping Lin SharedMem1.size = 1; 1066*095e2a82SHisping Lin SharedMem1.flags = 0; 1067*095e2a82SHisping Lin 1068*095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1069*095e2a82SHisping Lin 1070*095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1071*095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1072*095e2a82SHisping Lin 1073*095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1074*095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1075*095e2a82SHisping Lin 1076*095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1077*095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1078*095e2a82SHisping Lin TEEC_NONE, 1079*095e2a82SHisping Lin TEEC_NONE); 1080*095e2a82SHisping Lin 1081*095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1082*095e2a82SHisping Lin 142, 1083*095e2a82SHisping Lin &TeecOperation, 1084*095e2a82SHisping Lin &ErrorOrigin); 1085*095e2a82SHisping Lin if (TeecResult == TEEC_SUCCESS) 1086*095e2a82SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 1087*095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1088*095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1089*095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1090*095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1091*095e2a82SHisping Lin debug("testmm end\n"); 1092*095e2a82SHisping Lin 1093*095e2a82SHisping Lin return TeecResult; 1094*095e2a82SHisping Lin } 1095*095e2a82SHisping Lin 1096*095e2a82SHisping Lin uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1097*095e2a82SHisping Lin { 1098*095e2a82SHisping Lin TEEC_Result TeecResult; 1099*095e2a82SHisping Lin TEEC_Context TeecContext; 1100*095e2a82SHisping Lin TEEC_Session TeecSession; 1101*095e2a82SHisping Lin uint32_t ErrorOrigin; 1102*095e2a82SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 1103*095e2a82SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 1104*095e2a82SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 1105*095e2a82SHisping Lin TEEC_Operation TeecOperation = {0}; 1106*095e2a82SHisping Lin 1107*095e2a82SHisping Lin debug("testmm start\n"); 1108*095e2a82SHisping Lin OpteeClientApiLibInitialize(); 1109*095e2a82SHisping Lin 1110*095e2a82SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 1111*095e2a82SHisping Lin 1112*095e2a82SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 1113*095e2a82SHisping Lin &TeecSession, 1114*095e2a82SHisping Lin TeecUuid, 1115*095e2a82SHisping Lin TEEC_LOGIN_PUBLIC, 1116*095e2a82SHisping Lin NULL, 1117*095e2a82SHisping Lin NULL, 1118*095e2a82SHisping Lin &ErrorOrigin); 1119*095e2a82SHisping Lin 1120*095e2a82SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 1121*095e2a82SHisping Lin 1122*095e2a82SHisping Lin SharedMem0.size = sizeof("attributes_flag"); 1123*095e2a82SHisping Lin SharedMem0.flags = 0; 1124*095e2a82SHisping Lin 1125*095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 1126*095e2a82SHisping Lin 1127*095e2a82SHisping Lin memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); 1128*095e2a82SHisping Lin 1129*095e2a82SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 1130*095e2a82SHisping Lin 1131*095e2a82SHisping Lin SharedMem1.size = 1; 1132*095e2a82SHisping Lin SharedMem1.flags = 0; 1133*095e2a82SHisping Lin 1134*095e2a82SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 1135*095e2a82SHisping Lin 1136*095e2a82SHisping Lin memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); 1137*095e2a82SHisping Lin 1138*095e2a82SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 1139*095e2a82SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 1140*095e2a82SHisping Lin 1141*095e2a82SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 1142*095e2a82SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 1143*095e2a82SHisping Lin 1144*095e2a82SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 1145*095e2a82SHisping Lin TEEC_MEMREF_TEMP_INOUT, 1146*095e2a82SHisping Lin TEEC_NONE, 1147*095e2a82SHisping Lin TEEC_NONE); 1148*095e2a82SHisping Lin 1149*095e2a82SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 1150*095e2a82SHisping Lin 141, 1151*095e2a82SHisping Lin &TeecOperation, 1152*095e2a82SHisping Lin &ErrorOrigin); 1153*095e2a82SHisping Lin 1154*095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 1155*095e2a82SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 1156*095e2a82SHisping Lin TEEC_CloseSession(&TeecSession); 1157*095e2a82SHisping Lin TEEC_FinalizeContext(&TeecContext); 1158*095e2a82SHisping Lin debug("testmm end\n"); 1159*095e2a82SHisping Lin 1160*095e2a82SHisping Lin return TeecResult; 1161*095e2a82SHisping Lin } 1162