TTF_MEM_ST* CDS_TtfMemCopyAlloc(TTF_MEM_ST *pstSrc, VOS_UINT32 ulLen) { TTF_MEM_ST *pstDest; pstDest = CDS_AllocTtfMem(ulLen); if (VOS_NULL_PTR == pstDest) { return VOS_NULL_PTR; } /*内存拷贝*/ if (PS_SUCC != TTF_MemGetHeadData(UEPS_PID_CDS, pstSrc, pstDest->pData, pstDest->usUsed)) { TTF_MemFree(UEPS_PID_CDS,pstDest); return VOS_NULL_PTR; } return pstDest; }
VOS_UINT32 CDS_ConfigUlAdq(VOS_UINT32 ulAdType, VOS_UINT32 ulCanCfgAdNum) { VOS_UINT32 ulCnt; VOS_UINT32 ulAdLen; TTF_MEM_ST *pstDstMem; IPF_AD_DESC_S *pstAdDesc; VOS_UINT32 ulTmp; /*入参判断*/ if ((0 == ulCanCfgAdNum) || (CDS_IPF_ULAD_DESC_SIZE < ulCanCfgAdNum)) { return 0; } if (ulAdType >= IPF_AD_MAX) { return 0; } /*设置申请内存长度*/ if (IPF_AD_0 == ulAdType) { ulAdLen = CDS_IPF_AD_0_PKT_LEN; } else { ulAdLen = CDS_IPF_AD_1_PKT_LEN; } /*循环申请内存,配置AD描述符*/ for (ulCnt = 0; ulCnt < ulCanCfgAdNum; ulCnt ++) { pstDstMem = CDS_AllocTtfMem(ulAdLen); if (VOS_NULL_PTR == pstDstMem) { break; } /*配置AD DESC*/ CDS_DBG_UL_ADQ_ALLOC_MEM_NUM(1); pstAdDesc = &(g_stCdsIpfCtrlEntity.astUlAdBuff[ulCnt]); pstAdDesc->u32OutPtr0 = (VOS_UINT32)(pstDstMem->pData); pstAdDesc->u32OutPtr1 = (VOS_UINT32)pstDstMem; } if (0 == ulCnt) { return 0; } /*配置AD*/ if (IPF_SUCCESS != BSP_IPF_ConfigUlAd((IPF_AD_TYPE_E)ulAdType,ulCnt,g_stCdsIpfCtrlEntity.astUlAdBuff)) { /*配置失败,释放内存*/ ulTmp = ulCnt; for (ulCnt = 0; ulCnt < ulTmp; ulCnt ++) { pstAdDesc = &(g_stCdsIpfCtrlEntity.astUlAdBuff[ulCnt]); pstDstMem = (TTF_MEM_ST*)(pstAdDesc->u32OutPtr1); TTF_MemFree(UEPS_PID_CDS,pstDstMem); CDS_DBG_UL_ADQ_FREE_MEM_NUM(1); } CDS_DBG_UL_ADQ_CFG_ADQ_FAIL_NUM(1); return 0; } CDS_DBG_UL_ADQ_CFG_AD_NUM(ulCnt); CDS_DBG_UL_ADQ_CFG_ADQ_SUCC_NUM(1); return ulCnt; }
VOS_UINT32 CDS_RxDataFromImsNIC(const VOS_UINT8 *pData, VOS_UINT16 usLen,MODEM_ID_ENUM_UINT16 enModemId) { CDS_ENTITY_STRU *pstCdsEntity; TTF_MEM_ST *pstTtfPkt; VOS_INT32 lLock; CDS_DBG_IMS_UL_RX_FUN_CALL_NUM(1); /*入参判断*/ if (VOS_NULL_PTR == pData) { CDS_ERROR_LOG(UEPS_PID_CDS, "CDS_RxPktFromImsNIC:Input Para is NULL"); CDS_DBG_IMS_UL_RX_FUN_PARA_ERR(1); return PS_FAIL; } if ((0 == usLen) || (usLen > ETH_MAX_MTU)) { CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_RxPktFromImsNIC ; Packet Length Error.",usLen); CDS_DBG_IMS_UL_RX_FUN_PARA_ERR(1); return PS_FAIL; } pstCdsEntity = CDS_GetCdsEntity(enModemId); if (VOS_NULL_PTR == pstCdsEntity) { CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_RxPktFromImsNIC ; Modem ID Error.",enModemId); CDS_DBG_IMS_UL_RX_FUN_PARA_ERR(1); return PS_FAIL; } CDS_DBG_IMS_UL_RX_NIC_PKT_NUM(1); /*申请TTF内存,并将其拷贝到TTF内存中*/ pstTtfPkt = CDS_AllocTtfMem(usLen); if (VOS_NULL_PTR == pstTtfPkt) { CDS_ERROR_LOG(UEPS_PID_CDS,"CDS_RxDataFromImsNIC: Alloc Mem Fail."); CDS_DBG_IMS_UL_ALLOC_MEM_FAIL_NUM(1); return PS_FAIL; } PS_MEM_CPY(pstTtfPkt->pData,pData,usLen); /*入队*/ lLock = VOS_SplIMP(); if (PS_SUCC != LUP_EnQue(pstCdsEntity->pstIMSDataQue,pstTtfPkt)) { VOS_Splx(lLock); CDS_DBG_IMS_UL_EN_QUE_FAIL_NUM(1); TTF_MemFree(UEPS_PID_CDS, pstTtfPkt); CDS_SendEventToCds(CDS_EVENT_UL_IMS_PROC); CDS_DBG_IMS_UL_TRIGGER_IMS_EVENT_NUM(1); return PS_FAIL; } VOS_Splx(lLock); CDS_DBG_IMS_UL_EN_QUE_SUCC_NUM(1); /*wakeup cds*/ CDS_SendEventToCds(CDS_EVENT_UL_IMS_PROC); CDS_DBG_IMS_UL_TRIGGER_IMS_EVENT_NUM(1); return PS_SUCC; }