Ejemplo n.º 1
0
VOS_VOID CDS_ShowDlIpfProcStats(VOS_VOID)
{
    vos_printf("下行IPF处理统计\n\n");

    vos_printf("下行配置IPF没有BD次数                       %d\n",g_stCdsStats.ulDLIpfCfgHaveNoBD);
    vos_printf("下行配置IPF没有CD次数                       %d\n",g_stCdsStats.ulDLIpfCfgHaveNoCD);
    vos_printf("下行配置IPF CD不够次数                      %d\n",g_stCdsStats.ulDLIpfCfgCDNotEnough);
    vos_printf("下行配置BD成功个数                          %d\n",g_stCdsStats.ulDLIpfCfgBDSucc);
    vos_printf("下行配置BD失败个数                          %d\n",g_stCdsStats.ulDLIpfCfgBDFail);
    vos_printf("\r\n");

    vos_printf("下行桥接模式保存源内存成功个数              %d\n",g_stCdsStats.ulDLIpfSaveSrcMemSucc);
    vos_printf("下行桥接模式保存源内存失败个数              %d\n",g_stCdsStats.ulDLIpfSaveSrcMemFail);
    vos_printf("下行桥接模式源内存释放队列当前个数          %d\n",LUP_QueCnt(CDS_IPF_DL_SRCMEM_FREE_QUE()));
    vos_printf("下行桥接模式释放源内存成功个数              %d\n",g_stCdsStats.ulDLIpfFreeSrcMemNum);
    vos_printf("下行桥接模式释放源内存失败个数              %d\n",g_stCdsStats.ulDLIpfFreeSrcMemErr);
    vos_printf("\r\n");

    vos_printf("下行非桥接模式IPF分配内存失败次数           %d\n",g_stCdsStats.ulDLIpfCfgBDAllocMemFail);
    vos_printf("下行非桥接模式SDU长度错误个数               %d\n",g_stCdsStats.ulDLIpfCfgBDSduLenErr);
    vos_printf("下行非桥接模式IPF调用内存释放函数回调次数   %d\n",g_stCdsStats.ulIpfDlCallMemFreeNum);
    vos_printf("下行非桥接模式释放内存个数                  %d\n",g_stCdsStats.ulIpfDlFreeMemNum);

    vos_printf("\r\n");

    return;
}
Ejemplo n.º 2
0
VOS_VOID CDS_SaveIpfDlSrcMem(const IPF_CONFIG_DLPARAM_S *pstIpfDlBdBuff, VOS_UINT32 ulSaveNum)
{
    LUP_QUEUE_STRU                   *pstDlFreeQue;
    VOS_UINT32                        ulCnt;
    TTF_MEM_ST                       *pstSrcMem;

    CDS_ASSERT(VOS_NULL_PTR != pstIpfDlBdBuff);

    if (ulSaveNum > IPF_DLBD_DESC_SIZE)
    {
        CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_SaveIpfDlMemInfo:Input Bd Num Error.",ulSaveNum);
        return ;
    }

    pstDlFreeQue = CDS_IPF_DL_SRCMEM_FREE_QUE();
    CDS_ASSERT(VOS_NULL_PTR != pstDlFreeQue);

    for (ulCnt = 0; ulCnt < ulSaveNum; ulCnt ++)
    {
        pstSrcMem = (TTF_MEM_ST*)pstIpfDlBdBuff[ulCnt].u32Data;
        if (PS_SUCC != LUP_EnQue(pstDlFreeQue,pstSrcMem))
        {
            CDS_ERROR_LOG2(UEPS_PID_CDS,"CDS_SaveIpfDlMemInfo: Src Mem Leak.",ulCnt,ulSaveNum);
            vos_printf("CDS_SaveIpfDlMemInfo: Buffer Full!! cnt=%d,ulSaveNum=%d\n",ulCnt,ulSaveNum);
            TTF_MemFree(UEPS_PID_CDS,pstSrcMem);
            CDS_DBG_DL_IPF_SAVE_SRCMEM_FAIL_NUM(1);
            continue;
        }

        CDS_DBG_DL_IPF_SAVE_SRCMEM_SUCC_NUM(1);
    }

    return ;
}
Ejemplo n.º 3
0
VOS_VOID CDS_FreeIpfDlSrcMem(VOS_VOID)
{
    LUP_QUEUE_STRU                   *pstDlFreeQue ;
    BSP_U32                           ulIdleCD;
    VOS_UINT32                        ulIdleBD;
    VOS_UINT32                        ulBusyBD;
    VOS_UINT32                        ulCanFree;
    VOS_UINT32                        ulQueCnt;
    VOS_UINT32                        ulCnt;
    TTF_MEM_ST                       *pstSrcTtf;

    pstDlFreeQue = CDS_IPF_DL_SRCMEM_FREE_QUE();
    CDS_ASSERT(VOS_NULL_PTR != pstDlFreeQue);

    ulQueCnt = LUP_QueCnt(pstDlFreeQue);
    if (0 == ulQueCnt)
    {
        return;
    }

    /*get busy bd num*/
    ulIdleBD = BSP_IPF_GetDlBDNum(&ulIdleCD);
    ulBusyBD = IPF_DLBD_DESC_SIZE - ulIdleBD;
    if (ulQueCnt >= ulBusyBD)
    {
        ulCanFree = ulQueCnt - ulBusyBD;
    }
    else
    {
        CDS_ERROR_LOG3(UEPS_PID_CDS, "CDS_FreeIpfDlSrcMem:Buff Num Less IPF Busy BD Num.quecnt,busybd,idlebd",ulQueCnt,ulBusyBD,ulIdleBD);
        vos_printf("CDS_FreeIpfDlSrcMem : src free que less than busy bd. quecnt=%d,busybd=%d,idlebd=%d.\n",ulQueCnt,ulBusyBD,ulIdleBD);
        CDS_DBG_DL_IPF_FREE_SRCMEM_ERROR(1);
        return;
    }

    /*free src mem*/
    for (ulCnt = 0; ulCnt < ulCanFree; ulCnt ++)
    {
        if (PS_SUCC != LUP_DeQue(pstDlFreeQue,&pstSrcTtf))
        {
            return;
        }

        TTF_MemFree(UEPS_PID_CDS,pstSrcTtf);
        CDS_DBG_DL_IPF_FREE_SRCMEM_NUM(1);
    }

    return;
}
Ejemplo n.º 4
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;
}
Ejemplo n.º 5
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;
}