/***************************************************************************** 函 数 名 : FC_ACORE_CResetCallback 功能描述 : FcACore需要注册到底软C核复位接口中的回调函数 输入参数 : DRV_RESET_CALLCBFUN_MOMENT enParam 指示时复位处理前还是复位成功后 int userdata 用户自定义数据 输出参数 : 无 返 回 值 : VOS_OK/VOS_ERR 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年4月22日 作 者 : caikai 修改内容 : 新生成函数 *****************************************************************************/ VOS_INT FC_ACORE_CResetCallback(DRV_RESET_CALLCBFUN_MOMENT enParam, VOS_INT userdata) { VOS_UINT32 ulResult; if ( DRV_RESET_CALLCBFUN_RESET_BEFORE == enParam ) /* 复位处理时调用 */ { FC_ACORE_CResetSendNotify(ID_FC_ACORE_CRESET_START_IND); ulResult = VOS_SmP(g_ulFcACoreCResetDoneSem, FC_ACORE_CRESET_TIMEOUT_LEN); if (VOS_OK != ulResult) { FC_LOG1(PS_PRINT_ERROR, "FC_ACORE_CRESET_Callback, wait g_ulFcACoreResetDoneSem timeout! ulResult = %d\r\n", (VOS_INT32)ulResult); return VOS_ERR; } } else if ( DRV_RESET_CALLCBFUN_RESET_AFTER == enParam ) /* 复位成功后调用 */ { FC_ACORE_CResetSendNotify(ID_FC_ACORE_CRESET_END_IND); } else { FC_LOG(PS_PRINT_ERROR,"FC_ACORE_CResetCallback, enParam invalid !\n"); return VOS_ERR; } return VOS_OK; }
/***************************************************************************** 函 数 名 : FC_UL_UpRateLimit 功能描述 : 加强HSUPA上行发送速率限制,降低发送速率 输入参数 : ulSndRate -- 发送速率百分比 ulPolicyMask -- 流控策略掩码 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2011年12月5日 作 者 : 修改内容 : 新生成函数 *****************************************************************************/ VOS_UINT32 FC_UL_UpRateLimit( VOS_UINT32 ulUlRate, VOS_UINT32 ulPolicyId ) { VOS_UINT32 ulRateLimit; /* 前16位记录当前档位的流控百分比,用于启流控 */ ulRateLimit = ulUlRate >> 16; if ( FC_POLICY_MASK_CPU_C == FC_POLICY_MASK(ulPolicyId)) { g_ulFcUlRateCpu = ulRateLimit; } else if ( FC_POLICY_MASK_TMP == FC_POLICY_MASK(ulPolicyId)) { g_ulFcUlRateTmp = ulRateLimit; } else { FC_LOG1(PS_PRINT_WARNING, "FC_UL_UpRateLimit, ERROR, Invalid ulPolicyId %d\n", (VOS_INT32)ulPolicyId); return VOS_ERR; } return VOS_OK; }
/***************************************************************************** 函 数 名 : FC_RecoverUlGradeProcess 功能描述 : 恢复上行速率,不做限制 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年1月18日 作 者 : FC_RecoverUlGradeProcess 修改内容 : 新生成函数 *****************************************************************************/ VOS_VOID FC_RecoverUlGradeProcess( VOS_VOID ) { FC_POLICY_STRU *pstFcPolicy; if ( FC_POLICY_MASK_TMP != (FC_POLICY_MASK_TMP & g_stFcCfg.ulFcEnbaleMask) ) { /* 温控未使能 */ FC_LOG1(PS_PRINT_INFO, "FC_RecoverUlGradeProcess, INFO, TMP FlowCtrl is disabled %d\n", (VOS_INT32)g_stFcCfg.ulFcEnbaleMask); return; } pstFcPolicy = FC_POLICY_Get(FC_PRIVATE_POLICY_ID_TMP_MODEM_0); if ( FC_PRI_NULL == pstFcPolicy->enDonePri ) { /* 已经恢复,无须再处理 */ return; } FC_TEMPERATURE_SndCtrlMsg(ID_FC_TEMPERATURE_RECOVER_IND); return; }
/***************************************************************************** 函 数 名 : FC_UL_DownRateLimit 功能描述 : 减弱HSUPA上行发送速率限制,提高发送速率 输入参数 : ulSndRate -- 发送速率百分比 ulPolicyMask -- 流控策略掩码 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2011年12月5日 作 者 : 修改内容 : 新生成函数 *****************************************************************************/ VOS_UINT32 FC_UL_DownRateLimit( VOS_UINT32 ulUlRate, VOS_UINT32 ulPolicyId ) { VOS_UINT32 ulRateLimit; /* 后16位记录下一个更低先级档位的流控百分比,用于解流控 */ ulRateLimit = ulUlRate & FC_DOWN_RATE_LIMIT_MASK; if ( FC_POLICY_MASK_CPU_C == FC_POLICY_MASK(ulPolicyId)) { g_ulFcUlRateCpu = ulRateLimit; } else if ( FC_POLICY_MASK_TMP == FC_POLICY_MASK(ulPolicyId)) { g_ulFcUlRateTmp = ulRateLimit; } else { FC_LOG1(PS_PRINT_WARNING, "FC_UL_DownRateLimit, ERROR, Invalid ulPolicyId %d\n", (VOS_INT32)ulPolicyId); return VOS_ERR; } return VOS_OK; }
/***************************************************************************** 函 数 名 : FC_UpUlGradeProcess 功能描述 : OM温控模块检测到温度恢复可以升速时,调用注册的升速处理API 输入参数 : 无 输出参数 : 无 返 回 值 : OM_DATA_DOWMGRADE_CONTINUE -- 可以继续控 OM_DATA_DOWNGRADE_FINISH -- 不能继续控 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2011年12月5日 作 者 : 修改内容 : 新生成函数 *****************************************************************************/ SPY_DATA_UPGRADE_RESULT_ENUM_UINT32 FC_UpUlGradeProcess(VOS_VOID) { FC_POLICY_STRU *pstFcPolicy; if ( FC_POLICY_MASK_TMP != (FC_POLICY_MASK_TMP & g_stFcCfg.ulFcEnbaleMask) ) { /* 温控未使能 */ FC_LOG1(PS_PRINT_INFO, "FC_UpUlGradeProcess, INFO, TMP FlowCtrl is disabled %d\n", (VOS_INT32)g_stFcCfg.ulFcEnbaleMask); return SPY_DATA_UPGRADE_FINISH; } pstFcPolicy = FC_POLICY_Get(FC_PRIVATE_POLICY_ID_TMP_MODEM_0); if ( FC_PRI_NULL == pstFcPolicy->enDonePri ) { /* 已经达到流控最低级别,无法继续解流控 */ return SPY_DATA_UPGRADE_FINISH; } FC_TEMPERATURE_SndCtrlMsg(ID_FC_TEMPERATURE_UNDERLOAD_IND); return SPY_DATA_UPGRADE_CONTINUE; }
/***************************************************************************** 函 数 名 : FC_UL_InitFcPoints 功能描述 : 控制HSUPA上行发送速率 输入参数 : ucPolicyId -- 策略ID pstUlFcCfg -- 策略流控配置 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2011年12月5日 作 者 : 修改内容 : 新生成函数 *****************************************************************************/ VOS_UINT32 FC_UL_InitFcPoints ( FC_POLICY_ID_ENUM_UINT8 enPolicyId, FC_CFG_UM_UL_RATE_STRU *pstUlFcCfg ) { FC_REG_POINT_STRU stFcRegPoint; VOS_UINT32 ulRateLoop; VOS_UINT16 usCurrRate; VOS_UINT16 usPrevRate = FC_HSUPA_RATE_MAX_KBPS; FC_ID_ENUM_UINT8 enFcId; FC_PRI_ENUM_UINT8 enPri = FC_PRI_LOWEST; if (FC_POLICY_ID_CPU_C == enPolicyId) { enFcId = FC_ID_UL_RATE_1_FOR_CPU; } else if (FC_POLICY_ID_TMP == enPolicyId) { enFcId = FC_ID_UL_RATE_1_FOR_TMP; } /* 目前,只针对CCPU和TMP提供了按档位控速率功能,其他函数不能使用 */ else { FC_LOG1(PS_PRINT_WARNING, "FC_UL_InitFcPoints, ERROR, wrong ulPolicyId %d\n", (VOS_INT32)enPolicyId); return VOS_ERR; } /* NV项中CCPU和TMP的档位预留了最大11档,但是优先级最高为FC_PRI_9,所以使用档位时只有前9档生效 */ for ( ulRateLoop = 0 ; ulRateLoop < pstUlFcCfg->ucRateCnt ; ulRateLoop++ ) { usCurrRate = pstUlFcCfg->ausRate[ulRateLoop]; stFcRegPoint.enPolicyId = enPolicyId; stFcRegPoint.enFcPri = enPri; stFcRegPoint.enFcId = enFcId; stFcRegPoint.enModemId = MODEM_ID_0; /* 解流控时将数率限制设为上一档 */ stFcRegPoint.ulParam1 = (((VOS_UINT32)usCurrRate) << 16) | (((VOS_UINT32)usPrevRate) & FC_DOWN_RATE_LIMIT_MASK); stFcRegPoint.ulParam2 = enPolicyId; stFcRegPoint.pSetFunc = (FC_SET_FUNC)FC_UL_UpRateLimit; stFcRegPoint.pClrFunc = (FC_CLR_FUNC)FC_UL_DownRateLimit; stFcRegPoint.pRstFunc = VOS_NULL_PTR; FC_POINT_Reg(&stFcRegPoint); enFcId++; if ( FC_PRI_HIGHEST == enPri ) { break; } enPri++; usPrevRate = usCurrRate; } return VOS_OK; }