1*ae8ec5e1SHisping Lin /* 2*ae8ec5e1SHisping Lin * Copyright 2017, Rockchip Electronics Co., Ltd 3*ae8ec5e1SHisping Lin * hisping lin, <hisping.lin@rock-chips.com> 4*ae8ec5e1SHisping Lin * 5*ae8ec5e1SHisping Lin * SPDX-License-Identifier: GPL-2.0+ 6*ae8ec5e1SHisping Lin */ 7*ae8ec5e1SHisping Lin 8*ae8ec5e1SHisping Lin #include <common.h> 9*ae8ec5e1SHisping Lin #include <optee_include/OpteeClientApiLib.h> 10*ae8ec5e1SHisping Lin #include <optee_include/tee_client_api.h> 11*ae8ec5e1SHisping Lin 12*ae8ec5e1SHisping Lin void test_optee(void) 13*ae8ec5e1SHisping Lin { 14*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 15*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 16*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 17*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 18*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 19*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 20*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 21*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 22*ae8ec5e1SHisping Lin 23*ae8ec5e1SHisping Lin debug("testmm start\n"); 24*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 25*ae8ec5e1SHisping Lin 26*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 27*ae8ec5e1SHisping Lin 28*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 29*ae8ec5e1SHisping Lin &TeecSession, 30*ae8ec5e1SHisping Lin TeecUuid, 31*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 32*ae8ec5e1SHisping Lin NULL, 33*ae8ec5e1SHisping Lin NULL, 34*ae8ec5e1SHisping Lin &ErrorOrigin); 35*ae8ec5e1SHisping Lin 36*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 37*ae8ec5e1SHisping Lin 38*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("filename_test"); 39*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 40*ae8ec5e1SHisping Lin 41*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 42*ae8ec5e1SHisping Lin 43*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); 44*ae8ec5e1SHisping Lin 45*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 46*ae8ec5e1SHisping Lin 47*ae8ec5e1SHisping Lin SharedMem1.size = 32; 48*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 49*ae8ec5e1SHisping Lin 50*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 51*ae8ec5e1SHisping Lin 52*ae8ec5e1SHisping Lin memset(SharedMem1.buffer, 'a', SharedMem1.size); 53*ae8ec5e1SHisping Lin 54*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 55*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 56*ae8ec5e1SHisping Lin 57*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 58*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 59*ae8ec5e1SHisping Lin 60*ae8ec5e1SHisping Lin 61*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 62*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 63*ae8ec5e1SHisping Lin TEEC_NONE, 64*ae8ec5e1SHisping Lin TEEC_NONE); 65*ae8ec5e1SHisping Lin 66*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 67*ae8ec5e1SHisping Lin 1, 68*ae8ec5e1SHisping Lin &TeecOperation, 69*ae8ec5e1SHisping Lin &ErrorOrigin); 70*ae8ec5e1SHisping Lin 71*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 72*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 73*ae8ec5e1SHisping Lin 74*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 75*ae8ec5e1SHisping Lin 76*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 77*ae8ec5e1SHisping Lin 78*ae8ec5e1SHisping Lin debug("testmm end\n"); 79*ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 80*ae8ec5e1SHisping Lin } 81*ae8ec5e1SHisping Lin 82*ae8ec5e1SHisping Lin 83*ae8ec5e1SHisping Lin static uint8_t b2hs_add_base(uint8_t in) 84*ae8ec5e1SHisping Lin { 85*ae8ec5e1SHisping Lin if (in > 9) 86*ae8ec5e1SHisping Lin return in + 55; 87*ae8ec5e1SHisping Lin else 88*ae8ec5e1SHisping Lin return in + 48; 89*ae8ec5e1SHisping Lin } 90*ae8ec5e1SHisping Lin 91*ae8ec5e1SHisping Lin uint32_t b2hs(uint8_t *b, uint8_t *hs, uint32_t blen, uint32_t hslen) 92*ae8ec5e1SHisping Lin { 93*ae8ec5e1SHisping Lin uint32_t i = 0; 94*ae8ec5e1SHisping Lin 95*ae8ec5e1SHisping Lin if (blen * 2 + 1 > hslen) 96*ae8ec5e1SHisping Lin return 0; 97*ae8ec5e1SHisping Lin 98*ae8ec5e1SHisping Lin for (; i < blen; i++) { 99*ae8ec5e1SHisping Lin hs[i * 2 + 1] = b2hs_add_base(b[i] & 0xf); 100*ae8ec5e1SHisping Lin hs[i * 2] = b2hs_add_base(b[i] >> 4); 101*ae8ec5e1SHisping Lin } 102*ae8ec5e1SHisping Lin hs[blen * 2] = 0; 103*ae8ec5e1SHisping Lin 104*ae8ec5e1SHisping Lin return blen * 2; 105*ae8ec5e1SHisping Lin } 106*ae8ec5e1SHisping Lin 107*ae8ec5e1SHisping Lin 108*ae8ec5e1SHisping Lin uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) 109*ae8ec5e1SHisping Lin { 110*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 111*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 112*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 113*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 114*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 115*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 116*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 117*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 118*ae8ec5e1SHisping Lin uint8_t hs[9]; 119*ae8ec5e1SHisping Lin 120*ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 121*ae8ec5e1SHisping Lin debug("testmm start\n"); 122*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 123*ae8ec5e1SHisping Lin 124*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 125*ae8ec5e1SHisping Lin 126*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 127*ae8ec5e1SHisping Lin &TeecSession, 128*ae8ec5e1SHisping Lin TeecUuid, 129*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 130*ae8ec5e1SHisping Lin NULL, 131*ae8ec5e1SHisping Lin NULL, 132*ae8ec5e1SHisping Lin &ErrorOrigin); 133*ae8ec5e1SHisping Lin 134*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 135*ae8ec5e1SHisping Lin 136*ae8ec5e1SHisping Lin SharedMem0.size = 8; 137*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 138*ae8ec5e1SHisping Lin 139*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 140*ae8ec5e1SHisping Lin 141*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 142*ae8ec5e1SHisping Lin 143*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 144*ae8ec5e1SHisping Lin 145*ae8ec5e1SHisping Lin SharedMem1.size = 8; 146*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 147*ae8ec5e1SHisping Lin 148*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 149*ae8ec5e1SHisping Lin 150*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 151*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 152*ae8ec5e1SHisping Lin 153*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 154*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 155*ae8ec5e1SHisping Lin 156*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 157*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 158*ae8ec5e1SHisping Lin TEEC_NONE, 159*ae8ec5e1SHisping Lin TEEC_NONE); 160*ae8ec5e1SHisping Lin 161*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 162*ae8ec5e1SHisping Lin 0, 163*ae8ec5e1SHisping Lin &TeecOperation, 164*ae8ec5e1SHisping Lin &ErrorOrigin); 165*ae8ec5e1SHisping Lin 166*ae8ec5e1SHisping Lin memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); 167*ae8ec5e1SHisping Lin 168*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 169*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 170*ae8ec5e1SHisping Lin 171*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 172*ae8ec5e1SHisping Lin 173*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 174*ae8ec5e1SHisping Lin 175*ae8ec5e1SHisping Lin debug("testmm end\n"); 176*ae8ec5e1SHisping Lin return TeecResult; 177*ae8ec5e1SHisping Lin } 178*ae8ec5e1SHisping Lin 179*ae8ec5e1SHisping Lin uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 180*ae8ec5e1SHisping Lin { 181*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 182*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 183*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 184*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 185*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 186*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 187*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 188*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 189*ae8ec5e1SHisping Lin uint8_t hs[9]; 190*ae8ec5e1SHisping Lin b2hs((uint8_t *)&slot, hs, 4, 9); 191*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 192*ae8ec5e1SHisping Lin 193*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 194*ae8ec5e1SHisping Lin 195*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 196*ae8ec5e1SHisping Lin &TeecSession, 197*ae8ec5e1SHisping Lin TeecUuid, 198*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 199*ae8ec5e1SHisping Lin NULL, 200*ae8ec5e1SHisping Lin NULL, 201*ae8ec5e1SHisping Lin &ErrorOrigin); 202*ae8ec5e1SHisping Lin 203*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 204*ae8ec5e1SHisping Lin 205*ae8ec5e1SHisping Lin SharedMem0.size = 8; 206*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 207*ae8ec5e1SHisping Lin 208*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 209*ae8ec5e1SHisping Lin 210*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, hs, SharedMem0.size); 211*ae8ec5e1SHisping Lin 212*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 213*ae8ec5e1SHisping Lin 214*ae8ec5e1SHisping Lin SharedMem1.size = 8; 215*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 216*ae8ec5e1SHisping Lin 217*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 218*ae8ec5e1SHisping Lin 219*ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); 220*ae8ec5e1SHisping Lin 221*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 222*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 223*ae8ec5e1SHisping Lin 224*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 225*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 226*ae8ec5e1SHisping Lin 227*ae8ec5e1SHisping Lin 228*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 229*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 230*ae8ec5e1SHisping Lin TEEC_NONE, 231*ae8ec5e1SHisping Lin TEEC_NONE); 232*ae8ec5e1SHisping Lin 233*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 234*ae8ec5e1SHisping Lin 1, 235*ae8ec5e1SHisping Lin &TeecOperation, 236*ae8ec5e1SHisping Lin &ErrorOrigin); 237*ae8ec5e1SHisping Lin 238*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 239*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 240*ae8ec5e1SHisping Lin 241*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 242*ae8ec5e1SHisping Lin 243*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 244*ae8ec5e1SHisping Lin 245*ae8ec5e1SHisping Lin debug("testmm end\n"); 246*ae8ec5e1SHisping Lin 247*ae8ec5e1SHisping Lin return TeecResult; 248*ae8ec5e1SHisping Lin } 249*ae8ec5e1SHisping Lin 250*ae8ec5e1SHisping Lin uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) 251*ae8ec5e1SHisping Lin { 252*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 253*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 254*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 255*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 256*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 257*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 258*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 259*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 260*ae8ec5e1SHisping Lin 261*ae8ec5e1SHisping Lin debug("testmm start\n"); 262*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 263*ae8ec5e1SHisping Lin 264*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 265*ae8ec5e1SHisping Lin 266*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 267*ae8ec5e1SHisping Lin &TeecSession, 268*ae8ec5e1SHisping Lin TeecUuid, 269*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 270*ae8ec5e1SHisping Lin NULL, 271*ae8ec5e1SHisping Lin NULL, 272*ae8ec5e1SHisping Lin &ErrorOrigin); 273*ae8ec5e1SHisping Lin 274*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 275*ae8ec5e1SHisping Lin 276*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 277*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 278*ae8ec5e1SHisping Lin 279*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 280*ae8ec5e1SHisping Lin 281*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 282*ae8ec5e1SHisping Lin 283*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 284*ae8ec5e1SHisping Lin 285*ae8ec5e1SHisping Lin SharedMem1.size = size; 286*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 287*ae8ec5e1SHisping Lin 288*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 289*ae8ec5e1SHisping Lin 290*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 291*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 292*ae8ec5e1SHisping Lin 293*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 294*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 295*ae8ec5e1SHisping Lin 296*ae8ec5e1SHisping Lin 297*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 298*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 299*ae8ec5e1SHisping Lin TEEC_NONE, 300*ae8ec5e1SHisping Lin TEEC_NONE); 301*ae8ec5e1SHisping Lin 302*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 303*ae8ec5e1SHisping Lin 0, 304*ae8ec5e1SHisping Lin &TeecOperation, 305*ae8ec5e1SHisping Lin &ErrorOrigin); 306*ae8ec5e1SHisping Lin 307*ae8ec5e1SHisping Lin memcpy(attributes, SharedMem1.buffer, SharedMem1.size); 308*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 309*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 310*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 311*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 312*ae8ec5e1SHisping Lin debug("testmm end\n"); 313*ae8ec5e1SHisping Lin 314*ae8ec5e1SHisping Lin return TeecResult; 315*ae8ec5e1SHisping Lin } 316*ae8ec5e1SHisping Lin 317*ae8ec5e1SHisping Lin uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 318*ae8ec5e1SHisping Lin { 319*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 320*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 321*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 322*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 323*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 324*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 325*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 326*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 327*ae8ec5e1SHisping Lin 328*ae8ec5e1SHisping Lin debug("testmm start\n"); 329*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 330*ae8ec5e1SHisping Lin 331*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 332*ae8ec5e1SHisping Lin 333*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 334*ae8ec5e1SHisping Lin &TeecSession, 335*ae8ec5e1SHisping Lin TeecUuid, 336*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 337*ae8ec5e1SHisping Lin NULL, 338*ae8ec5e1SHisping Lin NULL, 339*ae8ec5e1SHisping Lin &ErrorOrigin); 340*ae8ec5e1SHisping Lin 341*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 342*ae8ec5e1SHisping Lin 343*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("attributes"); 344*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 345*ae8ec5e1SHisping Lin 346*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 347*ae8ec5e1SHisping Lin 348*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); 349*ae8ec5e1SHisping Lin 350*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 351*ae8ec5e1SHisping Lin 352*ae8ec5e1SHisping Lin SharedMem1.size = size; 353*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 354*ae8ec5e1SHisping Lin 355*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 356*ae8ec5e1SHisping Lin 357*ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, attributes, SharedMem1.size); 358*ae8ec5e1SHisping Lin 359*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 360*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 361*ae8ec5e1SHisping Lin 362*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 363*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 364*ae8ec5e1SHisping Lin 365*ae8ec5e1SHisping Lin 366*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 367*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 368*ae8ec5e1SHisping Lin TEEC_NONE, 369*ae8ec5e1SHisping Lin TEEC_NONE); 370*ae8ec5e1SHisping Lin 371*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 372*ae8ec5e1SHisping Lin 1, 373*ae8ec5e1SHisping Lin &TeecOperation, 374*ae8ec5e1SHisping Lin &ErrorOrigin); 375*ae8ec5e1SHisping Lin 376*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 377*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 378*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 379*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 380*ae8ec5e1SHisping Lin debug("testmm end\n"); 381*ae8ec5e1SHisping Lin 382*ae8ec5e1SHisping Lin return TeecResult; 383*ae8ec5e1SHisping Lin } 384*ae8ec5e1SHisping Lin 385*ae8ec5e1SHisping Lin uint32_t trusty_read_lock_state(uint8_t *lock_state) 386*ae8ec5e1SHisping Lin { 387*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 388*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 389*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 390*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 391*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 392*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 393*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 394*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 395*ae8ec5e1SHisping Lin 396*ae8ec5e1SHisping Lin debug("testmm start\n"); 397*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 398*ae8ec5e1SHisping Lin 399*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 400*ae8ec5e1SHisping Lin 401*ae8ec5e1SHisping Lin 402*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 403*ae8ec5e1SHisping Lin &TeecSession, 404*ae8ec5e1SHisping Lin TeecUuid, 405*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 406*ae8ec5e1SHisping Lin NULL, 407*ae8ec5e1SHisping Lin NULL, 408*ae8ec5e1SHisping Lin &ErrorOrigin); 409*ae8ec5e1SHisping Lin 410*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 411*ae8ec5e1SHisping Lin 412*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 413*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 414*ae8ec5e1SHisping Lin 415*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 416*ae8ec5e1SHisping Lin 417*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 418*ae8ec5e1SHisping Lin 419*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 420*ae8ec5e1SHisping Lin 421*ae8ec5e1SHisping Lin SharedMem1.size = 1; 422*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 423*ae8ec5e1SHisping Lin 424*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 425*ae8ec5e1SHisping Lin 426*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 427*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 428*ae8ec5e1SHisping Lin 429*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 430*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 431*ae8ec5e1SHisping Lin 432*ae8ec5e1SHisping Lin 433*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 434*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 435*ae8ec5e1SHisping Lin TEEC_NONE, 436*ae8ec5e1SHisping Lin TEEC_NONE); 437*ae8ec5e1SHisping Lin 438*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 439*ae8ec5e1SHisping Lin 0, 440*ae8ec5e1SHisping Lin &TeecOperation, 441*ae8ec5e1SHisping Lin &ErrorOrigin); 442*ae8ec5e1SHisping Lin 443*ae8ec5e1SHisping Lin memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); 444*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 445*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 446*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 447*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 448*ae8ec5e1SHisping Lin debug("testmm end\n"); 449*ae8ec5e1SHisping Lin 450*ae8ec5e1SHisping Lin return TeecResult; 451*ae8ec5e1SHisping Lin } 452*ae8ec5e1SHisping Lin 453*ae8ec5e1SHisping Lin uint32_t trusty_write_lock_state(uint8_t lock_state) 454*ae8ec5e1SHisping Lin { 455*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 456*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 457*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 458*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 459*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 460*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 461*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 462*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 463*ae8ec5e1SHisping Lin 464*ae8ec5e1SHisping Lin debug("testmm start\n"); 465*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 466*ae8ec5e1SHisping Lin 467*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 468*ae8ec5e1SHisping Lin 469*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 470*ae8ec5e1SHisping Lin &TeecSession, 471*ae8ec5e1SHisping Lin TeecUuid, 472*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 473*ae8ec5e1SHisping Lin NULL, 474*ae8ec5e1SHisping Lin NULL, 475*ae8ec5e1SHisping Lin &ErrorOrigin); 476*ae8ec5e1SHisping Lin 477*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 478*ae8ec5e1SHisping Lin 479*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("lock_state"); 480*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 481*ae8ec5e1SHisping Lin 482*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 483*ae8ec5e1SHisping Lin 484*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); 485*ae8ec5e1SHisping Lin 486*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 487*ae8ec5e1SHisping Lin 488*ae8ec5e1SHisping Lin SharedMem1.size = 1; 489*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 490*ae8ec5e1SHisping Lin 491*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 492*ae8ec5e1SHisping Lin 493*ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); 494*ae8ec5e1SHisping Lin 495*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 496*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 497*ae8ec5e1SHisping Lin 498*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 499*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 500*ae8ec5e1SHisping Lin 501*ae8ec5e1SHisping Lin 502*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 503*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 504*ae8ec5e1SHisping Lin TEEC_NONE, 505*ae8ec5e1SHisping Lin TEEC_NONE); 506*ae8ec5e1SHisping Lin 507*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 508*ae8ec5e1SHisping Lin 1, 509*ae8ec5e1SHisping Lin &TeecOperation, 510*ae8ec5e1SHisping Lin &ErrorOrigin); 511*ae8ec5e1SHisping Lin 512*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 513*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 514*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 515*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 516*ae8ec5e1SHisping Lin debug("testmm end\n"); 517*ae8ec5e1SHisping Lin 518*ae8ec5e1SHisping Lin return TeecResult; 519*ae8ec5e1SHisping Lin } 520*ae8ec5e1SHisping Lin 521*ae8ec5e1SHisping Lin uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) 522*ae8ec5e1SHisping Lin { 523*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 524*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 525*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 526*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 527*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 528*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 529*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 530*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 531*ae8ec5e1SHisping Lin 532*ae8ec5e1SHisping Lin debug("testmm start\n"); 533*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 534*ae8ec5e1SHisping Lin 535*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 536*ae8ec5e1SHisping Lin 537*ae8ec5e1SHisping Lin 538*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 539*ae8ec5e1SHisping Lin &TeecSession, 540*ae8ec5e1SHisping Lin TeecUuid, 541*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 542*ae8ec5e1SHisping Lin NULL, 543*ae8ec5e1SHisping Lin NULL, 544*ae8ec5e1SHisping Lin &ErrorOrigin); 545*ae8ec5e1SHisping Lin 546*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 547*ae8ec5e1SHisping Lin 548*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 549*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 550*ae8ec5e1SHisping Lin 551*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 552*ae8ec5e1SHisping Lin 553*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 554*ae8ec5e1SHisping Lin 555*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 556*ae8ec5e1SHisping Lin 557*ae8ec5e1SHisping Lin SharedMem1.size = 1; 558*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 559*ae8ec5e1SHisping Lin 560*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 561*ae8ec5e1SHisping Lin 562*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 563*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 564*ae8ec5e1SHisping Lin 565*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 566*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 567*ae8ec5e1SHisping Lin 568*ae8ec5e1SHisping Lin 569*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 570*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 571*ae8ec5e1SHisping Lin TEEC_NONE, 572*ae8ec5e1SHisping Lin TEEC_NONE); 573*ae8ec5e1SHisping Lin 574*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 575*ae8ec5e1SHisping Lin 0, 576*ae8ec5e1SHisping Lin &TeecOperation, 577*ae8ec5e1SHisping Lin &ErrorOrigin); 578*ae8ec5e1SHisping Lin 579*ae8ec5e1SHisping Lin memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); 580*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 581*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 582*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 583*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 584*ae8ec5e1SHisping Lin debug("testmm end\n"); 585*ae8ec5e1SHisping Lin 586*ae8ec5e1SHisping Lin return TeecResult; 587*ae8ec5e1SHisping Lin } 588*ae8ec5e1SHisping Lin 589*ae8ec5e1SHisping Lin 590*ae8ec5e1SHisping Lin uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 591*ae8ec5e1SHisping Lin { 592*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 593*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 594*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 595*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 596*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x1b484ea5, 0x698b, 0x4142, 597*ae8ec5e1SHisping Lin { 0x82, 0xb8, 0x3a, 0xcf, 0x16, 0xe9, 0x9e, 0x2a } }; 598*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 599*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 600*ae8ec5e1SHisping Lin 601*ae8ec5e1SHisping Lin debug("testmm start\n"); 602*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 603*ae8ec5e1SHisping Lin 604*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 605*ae8ec5e1SHisping Lin 606*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 607*ae8ec5e1SHisping Lin &TeecSession, 608*ae8ec5e1SHisping Lin TeecUuid, 609*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 610*ae8ec5e1SHisping Lin NULL, 611*ae8ec5e1SHisping Lin NULL, 612*ae8ec5e1SHisping Lin &ErrorOrigin); 613*ae8ec5e1SHisping Lin 614*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 615*ae8ec5e1SHisping Lin 616*ae8ec5e1SHisping Lin SharedMem0.size = sizeof("flash_lock_state"); 617*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 618*ae8ec5e1SHisping Lin 619*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 620*ae8ec5e1SHisping Lin 621*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); 622*ae8ec5e1SHisping Lin 623*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 624*ae8ec5e1SHisping Lin 625*ae8ec5e1SHisping Lin SharedMem1.size = 1; 626*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 627*ae8ec5e1SHisping Lin 628*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 629*ae8ec5e1SHisping Lin 630*ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); 631*ae8ec5e1SHisping Lin 632*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 633*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 634*ae8ec5e1SHisping Lin 635*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 636*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 637*ae8ec5e1SHisping Lin 638*ae8ec5e1SHisping Lin 639*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 640*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 641*ae8ec5e1SHisping Lin TEEC_NONE, 642*ae8ec5e1SHisping Lin TEEC_NONE); 643*ae8ec5e1SHisping Lin 644*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 645*ae8ec5e1SHisping Lin 1, 646*ae8ec5e1SHisping Lin &TeecOperation, 647*ae8ec5e1SHisping Lin &ErrorOrigin); 648*ae8ec5e1SHisping Lin 649*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 650*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 651*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 652*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 653*ae8ec5e1SHisping Lin debug("testmm end\n"); 654*ae8ec5e1SHisping Lin 655*ae8ec5e1SHisping Lin return TeecResult; 656*ae8ec5e1SHisping Lin } 657*ae8ec5e1SHisping Lin 658*ae8ec5e1SHisping Lin uint32_t write_to_keymaster(uint8_t *filename, 659*ae8ec5e1SHisping Lin uint32_t filename_size, 660*ae8ec5e1SHisping Lin uint8_t *data, 661*ae8ec5e1SHisping Lin uint32_t data_size) 662*ae8ec5e1SHisping Lin { 663*ae8ec5e1SHisping Lin TEEC_Result TeecResult; 664*ae8ec5e1SHisping Lin TEEC_Context TeecContext; 665*ae8ec5e1SHisping Lin TEEC_Session TeecSession; 666*ae8ec5e1SHisping Lin uint32_t ErrorOrigin; 667*ae8ec5e1SHisping Lin 668*ae8ec5e1SHisping Lin TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, 669*ae8ec5e1SHisping Lin { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d } }; 670*ae8ec5e1SHisping Lin TEEC_UUID *TeecUuid = &tempuuid; 671*ae8ec5e1SHisping Lin TEEC_Operation TeecOperation = {0}; 672*ae8ec5e1SHisping Lin 673*ae8ec5e1SHisping Lin debug("write_to_keymaster\n"); 674*ae8ec5e1SHisping Lin OpteeClientApiLibInitialize(); 675*ae8ec5e1SHisping Lin 676*ae8ec5e1SHisping Lin TeecResult = TEEC_InitializeContext(NULL, &TeecContext); 677*ae8ec5e1SHisping Lin 678*ae8ec5e1SHisping Lin TeecResult = TEEC_OpenSession(&TeecContext, 679*ae8ec5e1SHisping Lin &TeecSession, 680*ae8ec5e1SHisping Lin TeecUuid, 681*ae8ec5e1SHisping Lin TEEC_LOGIN_PUBLIC, 682*ae8ec5e1SHisping Lin NULL, 683*ae8ec5e1SHisping Lin NULL, 684*ae8ec5e1SHisping Lin &ErrorOrigin); 685*ae8ec5e1SHisping Lin 686*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem0 = {0}; 687*ae8ec5e1SHisping Lin 688*ae8ec5e1SHisping Lin SharedMem0.size = filename_size; 689*ae8ec5e1SHisping Lin SharedMem0.flags = 0; 690*ae8ec5e1SHisping Lin 691*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); 692*ae8ec5e1SHisping Lin 693*ae8ec5e1SHisping Lin memcpy(SharedMem0.buffer, filename, SharedMem0.size); 694*ae8ec5e1SHisping Lin 695*ae8ec5e1SHisping Lin TEEC_SharedMemory SharedMem1 = {0}; 696*ae8ec5e1SHisping Lin 697*ae8ec5e1SHisping Lin SharedMem1.size = data_size; 698*ae8ec5e1SHisping Lin SharedMem1.flags = 0; 699*ae8ec5e1SHisping Lin 700*ae8ec5e1SHisping Lin TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); 701*ae8ec5e1SHisping Lin 702*ae8ec5e1SHisping Lin memcpy(SharedMem1.buffer, data, SharedMem1.size); 703*ae8ec5e1SHisping Lin 704*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; 705*ae8ec5e1SHisping Lin TeecOperation.params[0].tmpref.size = SharedMem0.size; 706*ae8ec5e1SHisping Lin 707*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; 708*ae8ec5e1SHisping Lin TeecOperation.params[1].tmpref.size = SharedMem1.size; 709*ae8ec5e1SHisping Lin 710*ae8ec5e1SHisping Lin 711*ae8ec5e1SHisping Lin TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, 712*ae8ec5e1SHisping Lin TEEC_MEMREF_TEMP_INOUT, 713*ae8ec5e1SHisping Lin TEEC_NONE, 714*ae8ec5e1SHisping Lin TEEC_NONE); 715*ae8ec5e1SHisping Lin 716*ae8ec5e1SHisping Lin TeecResult = TEEC_InvokeCommand(&TeecSession, 717*ae8ec5e1SHisping Lin 139, 718*ae8ec5e1SHisping Lin &TeecOperation, 719*ae8ec5e1SHisping Lin &ErrorOrigin); 720*ae8ec5e1SHisping Lin 721*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem0); 722*ae8ec5e1SHisping Lin TEEC_ReleaseSharedMemory(&SharedMem1); 723*ae8ec5e1SHisping Lin TEEC_CloseSession(&TeecSession); 724*ae8ec5e1SHisping Lin TeecResult = TEEC_FinalizeContext(&TeecContext); 725*ae8ec5e1SHisping Lin debug("testmm end\n"); 726*ae8ec5e1SHisping Lin debug("TeecResult %x\n", TeecResult); 727*ae8ec5e1SHisping Lin 728*ae8ec5e1SHisping Lin return TeecResult; 729*ae8ec5e1SHisping Lin } 730