/*****************************************************************************
 函 数 名  :  hifireset _runcbfun
 功能描述  : HIFI复位前后调用回调函数的函数。
 输入参数  : DRV_RESET_CALLCBFUN_MOMENT eparam, 0 表示HIFI复位前;非零表示复位后。

 输出参数  : 无
 返 回 值  : int
        0, 成功,非0,失败
*****************************************************************************/
int hifireset_runcbfun (DRV_RESET_CALLCBFUN_MOMENT eparam)
{
	int  iresult = 0;

	if (DRV_RESET_CALLCBFUN_RESET_BEFORE == eparam)
	{
		/*遍历回调函数链表,调用NAS的回调*/
		iresult = hifireset_doruncbfun("NAS_AT", eparam);
		if (BSP_RESET_OK != iresult)
		{
			/*如果返回失败,记录下组建name, 返回值,保存到文件*/
			goto return_error;
		}
	}
	else
	{
		/*遍历回调函数链表,调用回调函数*/
		iresult = hifireset_doruncbfun(RESET_CBFUN_IGNORE_NAME, eparam);
		if (BSP_RESET_OK != iresult)
		{
			goto return_error;
		}
	}
	printk(KERN_INFO "%s: end of run cb functions for hifi reset at %d, %d\n", __FUNCTION__, eparam, iresult);
	return BSP_RESET_OK;
return_error:
	return BSP_RESET_ERROR;
}
/*****************************************************************************
 函 数 名  :  hifireset _runcbfun
 功能描述  : HIFI复位前后调用回调函数的函数。
 输入参数  : DRV_RESET_CB_MOMENT_E eparam, 0 表示HIFI复位前;非零表示复位后。

 输出参数  : 无
 返 回 值  : int
        0, 成功,非0,失败
*****************************************************************************/
int hifireset_runcbfun (DRV_RESET_CB_MOMENT_E eparam)
{
    int  iresult = 0;

    if (MDRV_RESET_CB_BEFORE == eparam)
    {
        /*Mailbox 处理*/
        reset_set_cpu_status(1, RESET_CPU_HIFI_STATUS_OFF);
        /*遍历回调函数链表,调用NAS的回调*/
        iresult = hifireset_doruncbfun("NAS_AT", eparam);
        if (BSP_RESET_OK != iresult)
        {
        /*如果返回失败,记录下组建name, 返回值,保存到文件*/
            goto return_error;
        }

        /*遍历回调函数链表,调用音频的回调*/
        iresult = hifireset_doruncbfun("CODEC", eparam);
        if (BSP_RESET_OK != iresult)
        {
        /*如果返回失败,记录下组建name, 返回值,保存到文件*/
            goto return_error;
        }

        /*通知MCU*/
        g_reset_assistant_hifi.smailboxmsg_mcu.iproctec = BSP_RESET_MAILBOX_MSG_PROTECT;
        g_reset_assistant_hifi.smailboxmsg_mcu.idata = BSP_RESET_MCU_MSG_HIFI_RESET_BEFORE;
        hifireset_tonotify(eparam, BSP_RESET_MODULE_MCU);
        /*遍历回调函数链表,调用OM的回调*/
        iresult = hifireset_doruncbfun("OAM", eparam);
        if (BSP_RESET_OK != iresult)
        {
        /*如果返回失败,记录下组建name, 返回值,保存到文件*/
            goto return_error;
        }
    }
    else
    {
        /*通知MCU*/
        g_reset_assistant_hifi.smailboxmsg_mcu.idata = BSP_RESET_MCU_MSG_HIFI_RESET_AFTER;
        hifireset_tonotify(eparam, BSP_RESET_MODULE_MCU);

        /*MAILBOX处理*/
        reset_set_cpu_status(0, RESET_CPU_HIFI_STATUS_OFF);

        /*遍历回调函数链表,调用回调函数*/
        iresult = hifireset_doruncbfun(RESET_CBFUN_IGNORE_NAME, eparam);
        if (BSP_RESET_OK != iresult)
        {
            goto return_error;
        }
    }
    printk(KERN_INFO "%s: end of run cb functions for hifi reset at %d, %d\n", __FUNCTION__, eparam, iresult);
    return BSP_RESET_OK;
return_error:
    return BSP_RESET_ERROR;
}