BSP_VOID SyncSpinUnlock(spinlock_t *lock, unsigned long flag) { BSP_IPC_SpinUnLock(IPC_SEM_SYNC); spin_unlock_irqrestore(lock, flag); return; }
s32_t pwrctrl_deep_sleep( void_t ) { u32_t key = 0; /*SOC下电区IP寄存器保存地址*/ u32_t * pulSocRegBakAddr = (u32_t *)g_aAcpuStoreReg; if (RET_OK != pwrctrl_is_func_on(PWC_SWITCH_ASLEEP)) { return RET_ERR; } BSP_IPC_SpinLock(IPC_SEM_SMP_CPU0); g_stAcpuPwcExcLog->core0.SlpCnt ++; g_stAcpuPwcExcLog->core0.SlpMgrSTm = pwrctrl_get_slice_time(); local_irq_save(key); /*读中断pending寄存器,有中断就退出睡眠*/ if (PWRCTRL_TRUE == pwrctrl_check_irq_pending_status()) { pwrctrl_l2c_disable(); #ifdef CHIP_BB_HI6210 #else __cpuc_flush_kern_all(); #endif /*__cpuc_flush_user_all();*/ /*__cpuc_flush_icache_all();*/ pwrctrl_store_ip_reg(pulSocRegBakAddr); /*PD ENTRY*/ pwrctrl_asm_deep_sleep_entry(); pwrctrl_restore_ip_reg(pulSocRegBakAddr); pulSocRegBakAddr = NULL; pwrctrl_l2c_enable(); } else { /*just for pclint*/ } /* unlock s32_terrupt */ local_irq_restore(key); g_stAcpuPwcExcLog->core0.WkCnt ++; g_stAcpuPwcExcLog->core0.WkMgrSTm = pwrctrl_get_slice_time(); BSP_IPC_SpinUnLock(IPC_SEM_SMP_CPU0); return RET_OK; }
/***************************************************************************** * 函 数 名 : DRV_SPIN_UNLOCK * * 功能描述 : 释放信号量 * * 输入参数 : 无 * 输出参数 : 无 * * 返 回 值 : 无 * * 修改记录 : 2011年4月11日 wangjing creat *****************************************************************************/ BSP_VOID DRV_SPIN_UNLOCK(BSP_U32 u32SignalNum) { BSP_IPC_SpinUnLock(u32SignalNum); }