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;
}
Example #2
0
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;
}