Example #1
0
VOS_VOID CDS_ShowDlSduProcStats(VOS_VOID)
{

    vos_printf("下行SDU数传统计\n\n");

    vos_printf("下行GSM模接收SDU个数                         %d\n",g_stCdsStats.ulDLGSMRxSduNum);
    vos_printf("下行GSM模接收IMS数据包个数                   %d\n",g_stCdsStats.ulDLGSMRxImsNum);
    vos_printf("下行GSM模流控丢弃SDU个数                     %d\n",g_stCdsStats.ulDLGSMFcFreeSduNum);
    vos_printf("下行GSM模环回模式下接收SDU个数               %d\n",g_stCdsStats.ulLBDLRxSduInGSM);
    vos_printf("下行GSM获取缺省RABID失败个数                 %d\n",g_stCdsStats.ulDLGSMGetDeftRabIdFail);
    vos_printf("下行GSM模入队成功个数                        %d\n",g_stCdsStats.ulDLGSMEnQueSucc);
    vos_printf("下行GSM模入队失败个数                        %d\n",g_stCdsStats.ulDLGSMEnQueFail);
    vos_printf("\r\n");

    vos_printf("下行UMTS模接收SDU个数                        %d\n",g_stCdsStats.ulDLUMTSRxSduNum);
    vos_printf("下行UMTS模接收IMS数据包个数                  %d\n",g_stCdsStats.ulDLUMTSRxImsNum);
    vos_printf("下行UMTS模流控丢弃SDU个数                    %d\n",g_stCdsStats.ulDLUMTSFcFreeSduNum);
    vos_printf("下行UMTS模环回模式下接收SDU个数              %d\n",g_stCdsStats.ulLBDLRxSduInUMTS);
    vos_printf("下行UMTS模打桩直接释放SDU个数                %d\n",g_stCdsStats.ulDLUMTSDirectFreeSduNum);
    vos_printf("下行UMTS获取缺省RABID失败个数                %d\n",g_stCdsStats.ulDLUMTSGetDeftRabIdFail);
    vos_printf("下行UMTS模入队成功个数                       %d\n",g_stCdsStats.ulDLUMTSEnQueSucc);
    vos_printf("下行UMTS模入队失败个数                       %d\n",g_stCdsStats.ulDLUMTSEnQueFail);
    vos_printf("\r\n");

    vos_printf("下行LTE模接收SDU个数                         %d\n",g_stCdsStats.ulDLLteRxSduNum);
    vos_printf("下行LTE模接收IMS数据包个数                   %d\n",g_stCdsStats.ulDLLteRxImsNum);
    vos_printf("下行LTE模流控丢弃SDU个数                     %d\n",g_stCdsStats.ulDLLteFcFreeSduNum);
    vos_printf("下行LTE模打桩直接释放SDU个数                 %d\n",g_stCdsStats.ulDLLteDirectFreeSduNum);
    vos_printf("下行LTE模环回模式下接收SDU个数               %d\n",g_stCdsStats.ulLBDLRxSduInLte);
    vos_printf("下行LTE获取对应EPSBID失败个数                %d\n",g_stCdsStats.ulDLLteGetEpsbIDFail);
    vos_printf("下行LTE获取缺省EPSBID失败个数                %d\n",g_stCdsStats.ulDLLteGetDeftEpsbIDFail);
    vos_printf("下行LTE接收L2 Debug数据包个数                %d\n",g_stCdsStats.ulDLLteRxDbgPkt);
    vos_printf("下行LTE接收MBMS数据包个数                    %d\n",g_stCdsStats.ulDLLteRxMbmsSdu);
    vos_printf("下行LTE模入队成功个数                        %d\n",g_stCdsStats.ulDLLteEnQueSucc);
    vos_printf("下行LTE模入队失败个数                        %d\n",g_stCdsStats.ulDLLteEnQueFail);


    vos_printf("\r\n");

    vos_printf("下行SDU队列当前缓存数据包个数               %d\n",LUP_QueCnt(CDS_GET_IPF_DL_SDU_QUE()));
    vos_printf("下行SDU入队成功总数                          %d\n",g_stCdsStats.ulDLEnSduQueSucc);
    vos_printf("下行SDU入队失败总数                          %d\n",g_stCdsStats.ulDLEnSduQueFail);
    vos_printf("\r\n");

    return;
}
Example #2
0
VOS_UINT32 CDS_IpfInit(VOS_VOID )
{
    IPF_COMMON_PARA_S stCommPara;
    IPF_CHL_CTRL_S    stChlCtrl;

    /*初始化时IP过滤的参数配置*/
    stCommPara.bEspSpiDisable   = PS_FALSE;             /* ESP SPI参与匹配控制信号 */
    stCommPara.bAhSpiDisable    = PS_FALSE;             /* AH SPI参与匹配控制信号 */
    stCommPara.bEspAhSel       = PS_TRUE;               /* 0选ESP,1选AH */
    stCommPara.bIpv6NextHdSel  = PS_TRUE;
    stCommPara.eMaxBurst       = IPF_BURST_16;          /* BURST最大长度 */
    stCommPara.bSpWrrModeSel   = PS_FALSE;
    stCommPara.bSpPriSel       = PS_FALSE;              /* SP优先级选择 */
    stCommPara.bFltAddrReverse = PS_FALSE;              /* 扩滤器中地址寄存器大小端排列顺序 0表示大端 */
    stCommPara.bFilterSeq      = PS_FALSE;              /* 过滤器配置顺序指示 */

    if (IPF_SUCCESS != BSP_IPF_Init(&stCommPara))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_Init Fail!\n");
        return PS_FAIL;
    }

    /*上行IPF配置为只过滤*/  /*通道工作模式: 只过滤,且不支持链式搬移*/
    stChlCtrl.u32WrrValue      = 16*1024;
    stChlCtrl.bDataChain       = PS_FALSE;
    stChlCtrl.bEndian          = PS_FALSE;
    stChlCtrl.eIpfMode         = IPF_MODE_FILTERONLY;

    if (IPF_SUCCESS != BSP_IPF_ConfigUlChannel(&stChlCtrl))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ConfigUlChannel Fail!\n");
        return PS_FAIL;
    }

    /*下行IPF通道工作模式: 过滤且搬移,支持链式搬移*/
    stChlCtrl.u32WrrValue      = 16*1024;
    stChlCtrl.bDataChain       = PS_TRUE;
    stChlCtrl.bEndian          = PS_FALSE;
    stChlCtrl.eIpfMode         = IPF_MODE_FILTERANDTRANS;

    /*下行IPF配置为只过滤*/
    if (IPF_SUCCESS != BSP_IPF_ConfigDlChannel(&stChlCtrl))
    {
        vos_printf("CDS_IpfInit : GU BSP_IPF_ConfigDlChannel Fail!\n");
        return PS_FAIL;
    }

    if (IPF_SUCCESS != BSP_IPF_RegisterWakeupUlCb((BSP_IPF_WakeupUlCb)CDS_UlIpfIntCB))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_RegisterWakeupUlCb Fail!\n");
        return PS_FAIL;
    }

    /*创建下行接收队列*/
    if (PS_SUCC != LUP_CreateQue(UEPS_PID_CDS, &(CDS_GET_IPF_DL_SDU_QUE()),CDS_IPF_DL_SDU_QUE_SIZE))
    {
        vos_printf("CDS_IpfInit : Create DL Sdu Que Fail");
        return PS_FAIL;
    }

    /*创建源内存释放队列*/
    if (PS_SUCC != LUP_CreateQue(UEPS_PID_CDS, &(CDS_IPF_DL_SRCMEM_FREE_QUE()),CDS_IPF_DL_SRCMEM_FREE_QUE_SIZE))
    {
        vos_printf("CDS_IpfInit : Create IPF DL Src Mem Free  Que Fail");
        return PS_FAIL;
    }

    /*使能上行IP过滤*/
    /*lint -e730 -e506 -e944*/
    if(IPF_SUCCESS != BSP_IPF_ChannelEnable(IPF_CHANNEL_UP, BSP_TRUE))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ChannelEnable UL Fail!\n");
        return PS_FAIL;
    }

    /*使能下行IP过滤*/
    if(IPF_SUCCESS != BSP_IPF_ChannelEnable(IPF_CHANNEL_DOWN, BSP_TRUE))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ChannelEnable DL Fail!\n");
        return PS_FAIL;
    }
    /*lint +e730 +e506 +e944*/

    /*初始化下行IPF过滤器*/
    CDS_InitDlIpfFilter();

    (VOS_VOID)CDS_DisableDlIPFFilter(MODEM_ID_0);
    (VOS_VOID)CDS_DisableDlIPFFilter(MODEM_ID_1);

    return PS_SUCC;
}
Example #3
0
VOS_UINT32 CDS_IpfInit(VOS_VOID )
{
    IPF_COMMON_PARA_S stCommPara;
    IPF_CHL_CTRL_S    stChlCtrl;

    /*初始化时IP过滤的参数配置*/
    stCommPara.bEspSpiDisable  = PS_FALSE;              /* ESP SPI参与匹配控制信号 */
    stCommPara.bAhSpiDisable   = PS_FALSE;              /* AH SPI参与匹配控制信号 */
    stCommPara.bEspAhSel       = PS_TRUE;               /* 0选ESP,1选AH */
    stCommPara.bIpv6NextHdSel  = PS_TRUE;
    stCommPara.eMaxBurst       = IPF_BURST_16;          /* BURST最大长度 */
    stCommPara.bSpWrrModeSel   = PS_FALSE;
    stCommPara.bSpPriSel       = PS_FALSE;              /* SP优先级选择 */
    stCommPara.bFltAddrReverse = PS_FALSE;              /* 扩滤器中地址寄存器大小端排列顺序 0表示大端 */
    stCommPara.bFilterSeq      = PS_FALSE;              /* 过滤器配置顺序指示 */

    /*新增过滤器参数配置*/
    stCommPara.bAdReport       = PS_FALSE;              /* AD上报选择,PS_FALSE:上报结构体指针, PS_TRUE:上报数据指针 */
    stCommPara.bMultiModeEn    = PS_TRUE;               /* 单通道动态模式,PS_TRUE为使能 */
    stCommPara.bMultiFilterChainEn = PS_TRUE;           /* 单通道多过滤器,PS_TRUE为使能*/

    if (IPF_SUCCESS != BSP_IPF_Init(&stCommPara))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_Init Fail!\n");
        return PS_FAIL;
    }

    /*上行通道工作模式: 过滤且搬移,支持链式搬移*/
    stChlCtrl.u32WrrValue      = 16*1024;
    stChlCtrl.bDataChain       = PS_FALSE;
    stChlCtrl.bEndian          = PS_FALSE;
    stChlCtrl.eIpfMode         = IPF_MODE_FILTERANDTRANS;
    if (IPF_SUCCESS != BSP_IPF_ConfigUlChannel(&stChlCtrl))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ConfigUlChannel Fail!\n");
        return PS_FAIL;
    }

    /*下行通道工作模式: 过滤且搬移,支持链式搬移*/
    stChlCtrl.u32WrrValue      = 16*1024;
    stChlCtrl.bDataChain       = PS_TRUE;
    stChlCtrl.bEndian          = PS_FALSE;
    stChlCtrl.eIpfMode         = IPF_MODE_FILTERANDTRANS;
    if (IPF_SUCCESS != BSP_IPF_ConfigDlChannel(&stChlCtrl))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ConfigDlChannel Fail!\n");
        return PS_FAIL;
    }

    /*注册上行RD完成中断*/
    if (IPF_SUCCESS != BSP_IPF_RegisterWakeupUlCb((BSP_IPF_WakeupUlCb)CDS_UlIpfIntCB))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_RegisterWakeupUlCb Fail!\n");
        return PS_FAIL;
    }

    /*注册ADQ空中断回调函数*/
    if (IPF_SUCCESS != BSP_IPF_RegisterAdqEmptyUlCb((BSP_IPF_AdqEmptyUlCb)CDS_UlAdqEmptyIntCB))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_RegisterAdqEmptyUlCb Fail!\n");
        return PS_FAIL;
    }

    /*设置RD完成中断超时时间*/
    if (IPF_SUCCESS != BSP_IPF_ConfigTimeout(CDS_IPF_BD_CMP_INT_TIMEOUT))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ConfigTimeout Fail!\n");
        return PS_FAIL;
    }

    /*设置AD长度阈值*/
    if (IPF_SUCCESS != BSP_IPF_ConfigADThr(CDS_IPF_AD_LEN_THRESHOLD,CDS_IPF_AD_LEN_THRESHOLD))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ConfigADThr Fail!\n");
        return PS_FAIL;
    }

    /*创建下行接收队列*/
    if (PS_SUCC != LUP_CreateQue(UEPS_PID_CDS, &(CDS_GET_IPF_DL_SDU_QUE()),CDS_IPF_DL_SDU_QUE_SIZE))
    {
        vos_printf("CDS_IpfInit : Create DL Sdu Que Fail.\n");
        return PS_FAIL;
    }

    /*创建源内存释放队列*/
    if (PS_SUCC != LUP_CreateQue(UEPS_PID_CDS, &(CDS_IPF_DL_SRCMEM_FREE_QUE()),CDS_IPF_DL_SRCMEM_FREE_QUE_SIZE))
    {
        vos_printf("CDS_IpfInit : Create IPF DL Src Mem Free  Que Fail. \n");
        return PS_FAIL;
    }

    /*使能上行IP过滤*/
    /*lint -e730 -e506 -e944*/
    if(IPF_SUCCESS != BSP_IPF_ChannelEnable(IPF_CHANNEL_UP, BSP_TRUE))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ChannelEnable UL Fail!\n");
        return PS_FAIL;
    }

    /*使能下行IP过滤*/
    if(IPF_SUCCESS != BSP_IPF_ChannelEnable(IPF_CHANNEL_DOWN, BSP_TRUE))
    {
        vos_printf("CDS_IpfInit : BSP_IPF_ChannelEnable DL Fail!\n");
        return PS_FAIL;
    }
    /*lint +e730 +e506 +e944*/

    /*初始化下行IPF过滤器*/
    CDS_InitDlIpfFilter();

    /*补充ADQ内存*/
    CDS_AllocMemForAdq();

    (VOS_VOID)CDS_DisableDlIPFFilter(MODEM_ID_0);
    (VOS_VOID)CDS_DisableDlIPFFilter(MODEM_ID_1);

    return PS_SUCC;
}
Example #4
0
VOS_VOID CDS_ConfigDlIPF(VOS_VOID)
{
    VOS_UINT32              ulIdleBD;
    BSP_U32                 ulIdleCD;
    VOS_UINT32              ulCnt;
    VOS_UINT32              ulCfgCD;
    TTF_MEM_ST             *pstSrcMem;
    IPF_CONFIG_DLPARAM_S   *pstDlCfgPara;
    int                     intLockLevel;

    /*触发下行IPF释放源内存*/
    CDS_FreeIpfDlSrcMem();

    /*获得下行空闲BD/CD个数*/
    ulIdleBD = (VOS_UINT32)BSP_IPF_GetDlBDNum(&ulIdleCD);
    if (0 == ulIdleBD)
    {
        /*没有空闲BD*/
        CDS_DBG_DL_IPF_CFG_HAVE_NO_BD(1);
        return;
    }

    if (ulIdleBD > IPF_DLBD_DESC_SIZE)
    {
        CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_GUConfigDlIPF : DL Idle BD Num Error.",ulIdleBD);
        return;
    }

    if (0 == ulIdleCD)
    {
        /*没有空闲CD*/
        CDS_DBG_DL_IPF_CFG_HAVE_NO_CD(1);
        return;
    }

    ulCfgCD = 0;
    for (ulCnt = 0; ulCnt < ulIdleBD; ulCnt ++)
    {
        /**/
        pstDlCfgPara = &(g_stCdsIpfCtrlEntity.astDlIpfCfgPara[ulCnt]);
        if (PS_SUCC != LUP_PeekQueHead(CDS_GET_IPF_DL_SDU_QUE(),&pstSrcMem))
        {
            break;
        }

        /*Get BD*/
        ulCfgCD += CDS_GetTtfMemCnt(pstSrcMem);
        if (ulCfgCD > ulIdleCD)
        {
            CDS_DBG_DL_IPF_CFG_CD_NOT_ENOUGH(1);
            break;
        }

        /*真实出队*/
        intLockLevel = VOS_SplIMP();
        if (PS_SUCC != LUP_DeQue(CDS_GET_IPF_DL_SDU_QUE(),&pstSrcMem))
        {
            /*异常保护,应该不会*/
            VOS_Splx(intLockLevel);
            break;
        }
        VOS_Splx(intLockLevel);

        pstDlCfgPara->u32Data       = (VOS_UINT32)(pstSrcMem);
        pstDlCfgPara->u16Len        = CDS_DL_GET_PKT_LEN_FROM_TTF(pstSrcMem);
        pstDlCfgPara->u16UsrField1  = CDS_DL_GET_MODEMID_RABID_FROM_TTF(pstSrcMem);

        if (MODEM_ID_0 == CDS_DL_GET_MODEMID_FROM_TTF(pstSrcMem))
        {
            CDS_DL_BD_SET_ATTR_WITH_FC_HDR(pstDlCfgPara->u16Attribute,IPF_MODEM0_DLFC);
        }
        else
        {
            CDS_DL_BD_SET_ATTR_WITH_FC_HDR(pstDlCfgPara->u16Attribute,IPF_MODEM1_DLFC);
        }

    }

    /*配置下行过滤包数为0,直接返回*/
    if (0 == ulCnt)
    {
        return;
    }

    /*最后一个BD设置中断标志*/
    pstDlCfgPara = &(g_stCdsIpfCtrlEntity.astDlIpfCfgPara[ulCnt - 1]);
    CDS_DL_BD_SET_ATTR_INT_FLG(pstDlCfgPara->u16Attribute);

    /*配置上行IPF过滤*/
    if (IPF_SUCCESS != BSP_IPF_ConfigDownFilter(ulCnt,g_stCdsIpfCtrlEntity.astDlIpfCfgPara))
    {
        /*配置失败后,源内存释放*/
        ulIdleBD = ulCnt;
        for (ulCnt = 0; ulCnt < ulIdleBD; ulCnt ++)
        {
            pstDlCfgPara = &(g_stCdsIpfCtrlEntity.astDlIpfCfgPara[ulCnt]);
            pstSrcMem = (TTF_MEM_ST*)(pstDlCfgPara->u32Data);
            TTF_MemFree(UEPS_PID_CDS,pstSrcMem);
        }

        CDS_DBG_DL_IPF_CFG_BD_FAIL_NUM(ulIdleBD);
        return;
    }

    /*缓存Src Mem*/
    CDS_SaveIpfDlSrcMem(g_stCdsIpfCtrlEntity.astDlIpfCfgPara,ulCnt);

    CDS_DBG_DL_IPF_CFG_BD_SUCC_NUM(ulCnt);

    return;
}
Example #5
0
VOS_VOID CDS_ConfigDlIPF(VOS_VOID)
{
    VOS_UINT32              ulIdleBD;
    BSP_U32                 ulIdleCD;
    VOS_UINT32              ulCnt;
    VOS_UINT32              ulCfgCD;
    TTF_MEM_ST             *pstDestMem;
    TTF_MEM_ST             *pstSrcMem;
    IPF_CONFIG_DLPARAM_S   *pstDlCfgPara;
    int                     intLockLevel;
    VOS_UINT16              usSduLen;

    /*触发下行IPF释放源内存*/
    CDS_FreeIpfDlSrcMem();

    /*获得下行空闲BD/CD个数*/
    ulIdleBD = BSP_IPF_GetDlBDNum(&ulIdleCD);
    if (0 == ulIdleBD)
    {
        /*没有空闲BD*/
        CDS_DBG_DL_IPF_CFG_HAVE_NO_BD(1);
        return;
    }

    if (ulIdleBD > IPF_DLBD_DESC_SIZE)
    {
        CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_GUConfigDlIPF : DL Idle BD Num Error.",ulIdleBD);
        return;
    }

    if (0 == ulIdleCD)
    {
        /*没有空闲CD*/
        CDS_DBG_DL_IPF_CFG_HAVE_NO_CD(1);
        return;
    }

    ulCfgCD = 0;
    for (ulCnt = 0; ulCnt < ulIdleBD; ulCnt ++)
    {
        /**/
        pstDlCfgPara = &(g_stCdsIpfCtrlEntity.astDlIpfCfgPara[ulCnt]);
        if (PS_SUCC != LUP_PeekQueHead(CDS_GET_IPF_DL_SDU_QUE(),&pstSrcMem))
        {
            break;
        }

        /*Get BD*/
        ulCfgCD += CDS_GetTtfMemCnt(pstSrcMem);
        if (ulCfgCD > ulIdleCD)
        {
            CDS_DBG_DL_IPF_CFG_CD_NOT_ENOUGH(1);
            break;
        }

        /*申请目的内存*/
        usSduLen = CDS_DL_GET_PKT_LEN_FROM_TTF(pstSrcMem);
        pstDestMem = TTF_MemBlkAlloc(UEPS_PID_CDS, TTF_MEM_POOL_ID_DL_SHARE,usSduLen);
        if (VOS_NULL_PTR == pstDestMem)
        {
            if ((0 == usSduLen) || (CDS_DL_SDU_MAX_LEN < usSduLen))
            {
                intLockLevel = VOS_SplIMP();
                (VOS_VOID)LUP_DeQue(CDS_GET_IPF_DL_SDU_QUE(),&pstSrcMem);
                VOS_Splx(intLockLevel);
                TTF_MemFree(UEPS_PID_CDS,pstSrcMem);
                CDS_DBG_DL_IPF_CFG_BD_SDU_LEN_ERROR(1);
            }
            CDS_DBG_DL_IPF_CFG_BD_ALLOC_MEM_FAIL(1);
            break;
        }

        pstDestMem->usUsed = usSduLen;

        /*真实出队*/
        intLockLevel = VOS_SplIMP();
        if (PS_SUCC != LUP_DeQue(CDS_GET_IPF_DL_SDU_QUE(),&pstSrcMem))
        {
            /*异常保护,应该不会*/
            VOS_Splx(intLockLevel);
            vos_printf("CDS_GUConfigDlIPF : Should not be here !\r\n");
            TTF_MemFree(UEPS_PID_CDS,pstDestMem);
            break;
        }
        VOS_Splx(intLockLevel);

        pstDlCfgPara->u16UsrField = CDS_DL_GET_RABID_FROM_TTF(pstSrcMem);
        pstDlCfgPara->pstDstTtf   = pstDestMem;
        pstDlCfgPara->pstSrcTtf   = pstSrcMem;

    }

    /*配置下行过滤包数为0,直接返回*/
    if (0 == ulCnt)
    {
        return;
    }

    /*配置上行IPF过滤*/
    if (IPF_SUCCESS != BSP_IPF_ConfigDownFilter(ulCnt,g_stCdsIpfCtrlEntity.astDlIpfCfgPara,PS_TRUE))
    {
        /*配置失败后,源内存释放*/
        ulIdleBD = ulCnt;
        for (ulCnt = 0; ulCnt < ulIdleBD; ulCnt ++)
        {
            pstDlCfgPara = &(g_stCdsIpfCtrlEntity.astDlIpfCfgPara[ulCnt]);
            TTF_MemFree(UEPS_PID_CDS,pstDlCfgPara->pstDstTtf);
            TTF_MemFree(UEPS_PID_CDS,pstDlCfgPara->pstSrcTtf);
        }

        CDS_DBG_DL_IPF_CFG_BD_FAIL_NUM(ulIdleBD);
        return;
    }

    CDS_SaveIpfDlSrcMem(g_stCdsIpfCtrlEntity.astDlIpfCfgPara,ulCnt);

    CDS_DBG_DL_IPF_CFG_BD_SUCC_NUM(ulCnt);

    return;

}