VOS_VOID RNIC_StopAllTimer( VOS_VOID ) { RNIC_TIMER_CTX_STRU *pstRnicTimerCtx; VOS_UINT32 i; pstRnicTimerCtx = RNIC_GetTimerAddr(); for (i = 0 ; i < RNIC_MAX_TIMER_NUM ; i++) { if (RNIC_TIMER_STATUS_RUNING == pstRnicTimerCtx[i].enTimerStatus) { /* 停止VOS定时器 */ VOS_StopRelTimer(&(pstRnicTimerCtx[i].hTimer)); pstRnicTimerCtx[i].hTimer = VOS_NULL_PTR; pstRnicTimerCtx[i].enTimerStatus = RNIC_TIMER_STATUS_STOP; } } #if (FEATURE_ON == FEATURE_LTE) /* 如果已经设置了唤醒源标志,则清除该标志,并且设置32K时钟为非唤醒源 */ if (VOS_TRUE == RNIC_GetTimer4WakeFlg()) { BSP_PWC_DelTimer4WakeSrc(); RNIC_SetTimer4WakeFlg(VOS_FALSE); } #endif }
VOS_VOID RNIC_StopTimer( RNIC_TIMER_ID_ENUM_UINT16 enTimerId ) { RNIC_TIMER_CTX_STRU *pstRnicTimerCtx; VOS_UINT32 i; pstRnicTimerCtx = RNIC_GetTimerAddr(); for ( i = 0 ; i < RNIC_MAX_TIMER_NUM ; i++ ) { if ( ( RNIC_TIMER_STATUS_RUNING == pstRnicTimerCtx[i].enTimerStatus ) && ( enTimerId == pstRnicTimerCtx[i].enTimerId)) { break; } } if ( i >= RNIC_MAX_TIMER_NUM) { RNIC_WARNING_LOG1(ACPU_PID_RNIC, "RNIC_StopTimer:too many timer", enTimerId); return; } /* 停止VOS定时器: 当定时器的指针已经为空的时候, 说明其已经停止或者超时 */ if (VOS_NULL_PTR != pstRnicTimerCtx[i].hTimer) { VOS_StopRelTimer(&(pstRnicTimerCtx[i].hTimer)); } pstRnicTimerCtx[i].hTimer = VOS_NULL_PTR; pstRnicTimerCtx[i].enTimerId = TI_RNIC_TIMER_BUTT; pstRnicTimerCtx[i].enTimerStatus = RNIC_TIMER_STATUS_STOP; /* 定时器状态勾包出来 */ #if (FEATURE_ON == FEATURE_LTE) /* 如果已经设置了唤醒源标志,并且是按需断开定时器,则清除该标志,并且设置32K时钟为非唤醒源 */ if ((VOS_TRUE == RNIC_GetTimer4WakeFlg()) && (TI_RNIC_DEMAND_DIAL_DISCONNECT == enTimerId)) { BSP_PWC_DelTimer4WakeSrc(); RNIC_SetTimer4WakeFlg(VOS_FALSE); } #endif }
VOS_VOID RNIC_StopTimer( RNIC_TIMER_ID_ENUM_UINT16 enTimerId ) { RNIC_TIMER_CTX_STRU *pstRnicTimerCtx; pstRnicTimerCtx = RNIC_GetTimerAddr(); /* 不在使用的定时器范围内 */ if (enTimerId >= RNIC_MAX_TIMER_NUM) { return; } /* 没有启动则不需要停止 */ if (RNIC_TIMER_STATUS_RUNING != pstRnicTimerCtx[enTimerId].enTimerStatus) { return; } /* 停止VOS定时器: 当定时器的指针已经为空的时候, 说明其已经停止或者超时 */ if (VOS_NULL_PTR != pstRnicTimerCtx[enTimerId].hTimer) { VOS_StopRelTimer(&(pstRnicTimerCtx[enTimerId].hTimer)); } pstRnicTimerCtx[enTimerId].hTimer = VOS_NULL_PTR; pstRnicTimerCtx[enTimerId].enTimerStatus = RNIC_TIMER_STATUS_STOP; /* 定时器状态勾包出来 */ #if (FEATURE_ON == FEATURE_LTE) /* 如果已经设置了唤醒源标志,并且是按需断开定时器,则清除该标志,并且设置32K时钟为非唤醒源 */ if ((VOS_TRUE == RNIC_GetTimer4WakeFlg()) && (TI_RNIC_DEMAND_DIAL_DISCONNECT == enTimerId)) { BSP_PWC_DelTimer4WakeSrc(); RNIC_SetTimer4WakeFlg(VOS_FALSE); } #endif }
VOS_VOID RNIC_StartTimer( RNIC_TIMER_ID_ENUM_UINT16 enTimerId, VOS_UINT32 ulLen ) { RNIC_TIMER_CTX_STRU *pstRnicTimerCtx = VOS_NULL_PTR; RNIC_SPEC_CTX_STRU *pstNetCntxt = VOS_NULL_PTR; VOS_TIMER_PRECISION_ENUM_UINT32 enTimerPrecision; VOS_UINT32 ulRet; /* 目前按需拨号的功能只在网卡0上有 */ pstNetCntxt = RNIC_GET_SPEC_NET_CTX(RNIC_RMNET_ID_0); pstRnicTimerCtx = RNIC_GetTimerAddr(); enTimerPrecision = VOS_TIMER_PRECISION_5; /* 不在使用的定时器范围内 */ if (enTimerId >= RNIC_MAX_TIMER_NUM) { return; } /* 如果缓存队列中该定时器已经启动则直接返回 */ if (RNIC_TIMER_STATUS_RUNING == pstRnicTimerCtx[enTimerId].enTimerStatus) { return; } /* 输入参数检查 */ if (0 == ulLen) { RNIC_ERROR_LOG1(ACPU_PID_ADS_UL, "ADS_StartTimer:ulLen is",ulLen); return; } if (ulLen >= VOS_TIMER_MAX_LENGTH) { ulLen = VOS_TIMER_MAX_LENGTH - 1; } #if (FEATURE_ON == FEATURE_LTE) /* 如果还未设置唤醒源标志,并且是按需断开定时器,则设置该标志,并且设置32K时钟为唤醒源 */ if ((VOS_FALSE == RNIC_GetTimer4WakeFlg()) && (TI_RNIC_DEMAND_DIAL_DISCONNECT == enTimerId)) { BSP_PWC_SetTimer4WakeSrc(); RNIC_SetTimer4WakeFlg(VOS_TRUE); } #endif /* 如果是流量上报定时器,则挂在26M时钟上,以降低功耗 */ if (RNIC_IS_DSFLOW_TIMER_ID(enTimerId)) { enTimerPrecision = VOS_TIMER_NO_PRECISION; } /* VOS_StartRelTimer 启动定时器 */ ulRet = VOS_StartRelTimer(&(pstRnicTimerCtx[enTimerId].hTimer), ACPU_PID_RNIC, ulLen, enTimerId, 0, VOS_RELTIMER_NOLOOP, enTimerPrecision); if (VOS_OK != ulRet) { RNIC_WARNING_LOG(ACPU_PID_RNIC, "NAS_MMC_StartTimer:NAS_StartRelTimer failed"); return; } if (TI_RNIC_DEMAND_DIAL_DISCONNECT == enTimerId) { /* 按需拨号统计清零 */ pstNetCntxt->stDsFlowStats.ulPeriodSendPktNum = 0; } pstRnicTimerCtx[enTimerId].enTimerStatus = RNIC_TIMER_STATUS_RUNING; /* 定时器状态勾包出来 */ }
VOS_VOID RNIC_StartTimer( RNIC_TIMER_ID_ENUM_UINT16 enTimerId, VOS_UINT32 ulLen ) { VOS_UINT32 ulRet; RNIC_TIMER_CTX_STRU *pstRnicTimerCtx; VOS_UINT32 i; RNIC_UL_CTX_STRU *pstUlCtx; VOS_TIMER_PRECISION_ENUM_UINT32 enTimerPrecision; /* 目前按需拨号的功能只在网卡0上有 */ pstUlCtx = RNIC_GetUlCtxAddr(RNIC_RM_NET_ID_0); pstRnicTimerCtx = RNIC_GetTimerAddr(); enTimerPrecision = VOS_TIMER_PRECISION_5; /* 如果缓存队列中该定时器已经启动则直接返回 */ for (i = 0 ; i < RNIC_MAX_TIMER_NUM ; i++) { if ((RNIC_TIMER_STATUS_RUNING == pstRnicTimerCtx[i].enTimerStatus) && (enTimerId == pstRnicTimerCtx[i].enTimerId)) { RNIC_INFO_LOG1(ACPU_PID_RNIC, "RNIC_StartTimer:timer is running", enTimerId); return; } } for (i = 0 ; i < RNIC_MAX_TIMER_NUM ; i++) { if ( RNIC_TIMER_STATUS_STOP == pstRnicTimerCtx[i].enTimerStatus ) { break; } } if (i >= RNIC_MAX_TIMER_NUM) { RNIC_WARNING_LOG1(ACPU_PID_RNIC, "RNIC_StartTimer:too many timer", enTimerId); return; } if (ulLen >= VOS_TIMER_MAX_LENGTH) { ulLen = VOS_TIMER_MAX_LENGTH - 1; } #if (FEATURE_ON == FEATURE_LTE) /* 如果还未设置唤醒源标志,并且是按需断开定时器,则设置该标志,并且设置32K时钟为唤醒源 */ if ((VOS_FALSE == RNIC_GetTimer4WakeFlg()) && (TI_RNIC_DEMAND_DIAL_DISCONNECT == enTimerId)) { BSP_PWC_SetTimer4WakeSrc(); RNIC_SetTimer4WakeFlg(VOS_TRUE); } #endif /* 如果是流量上报定时器,则挂在26M时钟上,以降低功耗 */ if (RNIC_IS_DSFLOW_TIMER_ID(enTimerId)) { enTimerPrecision = VOS_TIMER_NO_PRECISION; } /* VOS_StartRelTimer 启动定时器 */ ulRet = VOS_StartRelTimer(&(pstRnicTimerCtx[i].hTimer), ACPU_PID_RNIC, ulLen, enTimerId, 0, VOS_RELTIMER_NOLOOP, enTimerPrecision); if (VOS_OK != ulRet) { RNIC_WARNING_LOG(ACPU_PID_RNIC, "NAS_MMC_StartTimer:NAS_StartRelTimer failed"); return; } if (TI_RNIC_DEMAND_DIAL_DISCONNECT == enTimerId) { /* 按需拨号统计清零 */ pstUlCtx->stULDataStats.ulULPeriodSndPkts = 0; } pstRnicTimerCtx[i].enTimerId = enTimerId; pstRnicTimerCtx[i].enTimerStatus = RNIC_TIMER_STATUS_RUNING; /* 定时器状态勾包出来 */ }