/***************************************************************************** 函 数 名 : power_off_timeout_isr 功能描述 : 开机定时器处理,检测C核状态 输入参数 : 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : *****************************************************************************/ static int power_on_timeout_isr( void ) { c_power_st_e status = POWER_OS_OK; DRV_RUN_MODE run_mode = get_run_mode(); pr_dbg("power_on_timeout_isr, system had been powered one minute ago\n "); #if (MBB_CHARGE == FEATURE_ON) if(chg_is_powdown_charging()) { pr_dbg("CHG:no need to check c core status!\n "); return 0; } #endif /*MBB_CHG_PLATFORM_V7R2*/ if(RUN_MODE_NORMAL == run_mode) { /* 读取C核启动状态 */ status = power_on_c_status_get(); #if defined(DRV_BUILD_SEPARATE) /* C核异常,设置normal模式启动失败 */ if(status < POWER_BSP_OK) #else if(status < POWER_MSP_OK) #endif { pr_dbg("c core power on fail!\n "); /* 进入recovery模式 */ bsp_drv_power_reboot(); /* coverity[no_escape] */ for(;;) ; } } else if(RUN_MODE_RECOVERY == run_mode){ /* for test */ #if 0 bsp_drv_power_reboot(); /* 等待系统重启 */ while(1); #endif } pr_dbg("system power on ok!\n "); /* clear warm boot cnt */ power_on_wdt_cnt_set(); (void)bsp_softtimer_free(&power_item_info.on_timer); return 0; }
/****************************************************************************** * Function: bsp_drv_power_reboot_direct * Description: * Input: * None * Output: * None * Return: * None * Note : 直接重启 ********************************************************************************/ void bsp_drv_power_reboot_direct( void ) { #ifndef HI_ONOFF_PHONE power_off_reboot_operation(); #else bsp_drv_power_reboot(); #endif }
/***************************************************************************** 函 数 名 : bsp_power_ctrl_read_cb 功能描述 : C核核间回调函数 输入参数 : 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : *****************************************************************************/ static s32 bsp_power_ctrl_read_cb( void ) { int rt = 0; int read_len = 0; stCtrlMsg msg; u32 channel_id = ICC_CHN_IFC << 16 | IFC_RECV_FUNC_ONOFF; read_len = bsp_icc_read(channel_id, (u8*)&msg, sizeof(stCtrlMsg)); if(read_len != (int)sizeof(stCtrlMsg)) { pr_dbg("read len(%x) != expected len(%x)\n", read_len, sizeof(stCtrlMsg)); return -1; } pr_dbg("bsp_power_ctrl_read_cb 0x%x\n", msg.pwr_type); switch(msg.pwr_type) { case E_POWER_ON_MODE_GET: bsp_power_icc_send_state(); break; case E_POWER_SHUT_DOWN: drv_shut_down(msg.reason); break; case E_POWER_POWER_OFF: bsp_drv_power_off(); break; case E_POWER_POWER_REBOOT: bsp_drv_power_reboot(); break; default: pr_dbg("invalid ctrl by ccore\n"); break; } return rt; }
/*lint -save -e958 */ void balong_power_restart(char mode, const char *cmd) { bsp_drv_power_reboot(); }
/*lint -save -e958 */ void balong_power_restart(char mode, const char *cmd) { bsp_om_save_reboot_log(__FUNCTION__, __builtin_return_address(0)); bsp_drv_power_reboot(); }
void mdrv_sysboot_restart(void) { bsp_om_save_reboot_log(__FUNCTION__, __builtin_return_address(0)); bsp_drv_power_reboot(); }