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;
}
Ejemplo n.º 2
0
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;
}