int bsp_sec_call(FUNC_CMD_ID func_cmd, unsigned int param) { TEEC_Session session; TEEC_Context context; int ret = BSP_ERROR; mutex_lock(&trans_lock); ret = TEEK_init(&session, &context); if(BSP_ERROR == ret) { sec_print_err("TEEK_InitializeContext failed!\n"); return ret; } ret = TEEK_cmd_session(&session, SECBOOT_CMD_ID_BSP_SEC_CALL, (FUNC_CMD_ID)func_cmd, param); if(BSP_ERROR == ret) { sec_print_err("TEEK_cmd_session fail!\n"); } TEEK_CloseSession(&session); TEEK_FinalizeContext(&context); mutex_unlock(&trans_lock); return ret; }
s32 load_modem_image(void) { TEEC_Session session; TEEC_Context context; s32 ret = SEC_ERROR; mutex_init(&trans_lock); ret = TEEK_init(&session, &context); if(SEC_ERROR == ret) { sec_print_err("TEEK_InitializeContext failed!\n"); return ret; } ret = load_modem_head(); if(SEC_ERROR == ret) { sec_print_err("load_modem_head fail!\n"); return ret; } ret = load_VRL_to_secos(&session); if(SEC_ERROR == ret) { sec_print_err("load_VRL_and_check fail!\n"); return ret; } ret = load_modem_to_secos(&session); if(SEC_ERROR == ret) { sec_print_err("load_modem_to_os fail!\n"); return ret; } ret = load_modem_dsp_to_secos(&session); if(SEC_ERROR == ret) { sec_print_err("load_modem_to_os fail!\n"); return ret; } /*end of trans all data, start verify*/ ret = load_done(&session, SECBOOT_CMD_ID_VERIFY_DATA); if(SEC_ERROR == ret) { sec_print_err("load_done fail!\n"); return ret; } TEEK_CloseSession(&session); TEEK_FinalizeContext(&context); return SEC_OK; }
/*Do the SecureOs locally for modem only*/ static s32 TEEK_start_modem() { s32 ret_os = SEC_ERROR; TEEC_Session session; TEEC_Context context; u32 origin; TEEC_Operation operation; TEEC_Result result; /*TEEK_init do prepare for start SecureOs*/ ret_os = TEEK_init(&session, &context); if(SEC_ERROR == ret_os) { printk(KERN_ERR "%s:TEEK_InitializeContext failed!\n",__FUNCTION__); return ret_os; } memset(&operation, 0, sizeof(TEEC_Operation)); operation.started = 1; operation.cancel_flag = 0; /*Configure the local checking parameters*/ operation.paramTypes = TEEC_PARAM_TYPES( TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE); operation.params[0].value.a = MODEM; operation.params[1].value.a = NULL; operation.params[2].value.a = NULL; /*TEEK_InvokeCommand do the local checking for modem*/ result = TEEK_InvokeCommand( &session, SECBOOT_CMD_ID_VERIFY_DATA_TYPE_LOCAL, &operation, &origin); /*When finish TEEK_CloseSession try to close the tee session*/ TEEK_CloseSession(&session); /*When finish TEEK_FinalizeContext try to close the tee context*/ TEEK_FinalizeContext(&context); return result; }