亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ixethaccdataplane.c

?? 友善mini2440嵌入式
?? C
?? 第 1 頁 / 共 5 頁
字號:
    ixEthAccPortData[portId].ixEthAccTxData.schDiscipline = sched;    return (IX_ETH_ACC_SUCCESS);}IX_ETH_ACC_PUBLICIxEthAccStatus ixEthAccRxSchedulingDisciplineSetPriv(IxEthAccSchedulerDiscipline						 sched){    if (sched != FIFO_PRIORITY && sched != FIFO_NO_PRIORITY)    {	return (IX_ETH_ACC_INVALID_ARG);    }    ixEthAccDataInfo.schDiscipline = sched;    return (IX_ETH_ACC_SUCCESS);}/** * @fn ixEthRxFrameProcess(IxEthAccPortId portId, IX_OSAL_MBUF *mbufPtr) * * @brief process incoming frame : * * @param @ref IxQMgrCallback IxQMgrMultiBufferCallback * * @return none * * @internal * */IX_ETH_ACC_PRIVATE BOOLixEthRxFrameProcess(IxEthAccPortId portId, IX_OSAL_MBUF *mbufPtr){    UINT32 flags;    IxEthDBStatus result;#ifndef NDEBUG    /* Prudent to at least check the port is within range */    if (portId >= IX_ETH_ACC_NUMBER_OF_PORTS)    {	ixEthAccDataStats.unexpectedError++;	IX_ETH_ACC_FATAL_LOG(	     "ixEthRxFrameProcess: Illegal port: %u\n",	     (UINT32)portId, 0, 0, 0, 0, 0);	return FALSE;    }#endif    /* convert fields from mbuf header */    ixEthAccMbufFromRxQ(mbufPtr);    /* check about any special processing for this frame */    flags = IX_ETHACC_NE_FLAGS(mbufPtr);    if ((flags & (IX_ETHACC_NE_FILTERMASK | IX_ETHACC_NE_NEWSRCMASK)) == 0)    {	/* "best case" scenario : nothing special to do for this frame */	return TRUE;    }#ifdef CONFIG_IXP425_COMPONENT_ETHDB    /* if a new source MAC address is detected by the NPE,     * update IxEthDB with the portId and the MAC address.     */    if ((flags & IX_ETHACC_NE_NEWSRCMASK & ixEthAccNewSrcMask) != 0)    {        result = ixEthDBFilteringDynamicEntryProvision(portId,			  (IxEthDBMacAddr *) IX_ETHACC_NE_SOURCEMAC(mbufPtr));	if (result != IX_ETH_DB_SUCCESS && result != IX_ETH_DB_FEATURE_UNAVAILABLE)	{            if ((ixEthAccMacState[portId].portDisableState == ACTIVE) && (result != IX_ETH_DB_BUSY))            {	        RX_STATS_INC(portId, rxUnexpectedError);                IX_ETH_ACC_FATAL_LOG("ixEthRxFrameProcess: Failed to add source MAC \                                    to the Learning/Filtering database\n", 0, 0, 0, 0, 0, 0);            }            else            {                /* we expect this to fail during PortDisable, as EthDB is disabled for                 * that port and will refuse to learn new addresses		 */            }	}	else	{	    RX_STATS_INC(portId, rxUnlearnedMacAddress);	}    }#endif    /* check if this frame should have been filtered     * by the NPE and take the appropriate action     */    if (((flags & IX_ETHACC_NE_FILTERMASK) != 0)        && (ixEthAccMacState[portId].portDisableState == ACTIVE))    {        /* If the mbuf was allocated with a small data size, or the current data pointer is not         * within the allocated data area, then the buffer is non-standard and has to be         * replenished with the minimum size only         */        if( (IX_OSAL_MBUF_ALLOCATED_BUFF_LEN(mbufPtr) < IX_ETHNPE_ACC_RXFREE_BUFFER_LENGTH_MIN)           || ((UINT8 *)IX_OSAL_MBUF_ALLOCATED_BUFF_DATA(mbufPtr) > IX_OSAL_MBUF_MDATA(mbufPtr))           || ((UINT8 *)(IX_OSAL_MBUF_ALLOCATED_BUFF_DATA(mbufPtr) +              IX_OSAL_MBUF_ALLOCATED_BUFF_LEN(mbufPtr))               < IX_OSAL_MBUF_MDATA(mbufPtr)) )        {            /* set to minimum length */            IX_OSAL_MBUF_MLEN(mbufPtr) = IX_OSAL_MBUF_PKT_LEN(mbufPtr) =                IX_ETHNPE_ACC_RXFREE_BUFFER_LENGTH_MIN;        }        else        {            /* restore original length */            IX_OSAL_MBUF_MLEN(mbufPtr) = IX_OSAL_MBUF_PKT_LEN(mbufPtr) =                ( IX_OSAL_MBUF_ALLOCATED_BUFF_LEN(mbufPtr) -                 (IX_OSAL_MBUF_MDATA(mbufPtr) - (UINT8 *)IX_OSAL_MBUF_ALLOCATED_BUFF_DATA(mbufPtr)) );        }        /* replenish from here */        if (ixEthAccPortRxFreeReplenish(portId, mbufPtr) != IX_ETH_ACC_SUCCESS)        {                IX_ETH_ACC_FATAL_LOG("ixEthRxFrameProcess: Failed to replenish with filtered frame\                                      on port %d\n", portId, 0, 0, 0, 0, 0);        }        RX_STATS_INC(portId, rxFiltered);        /* indicate that frame should not be subjected to further processing */        return FALSE;    }    return TRUE;}/** * @fn ixEthRxFrameQMCallback * * @brief receive callback for Frame receive Q from NPE * * Frames are passed one-at-a-time to the user * * @param @ref IxQMgrCallback * * @return none * * @internal * * Design note : while processing the entry X, entry X+1 is preloaded * into memory to reduce the number of stall cycles * */void ixEthRxFrameQMCallback(IxQMgrQId qId, IxQMgrCallbackId callbackId){    IX_OSAL_MBUF    *mbufPtr;    IX_OSAL_MBUF    *nextMbufPtr;    UINT32     qEntry;    UINT32     nextQEntry;    UINT32     *qEntryPtr;    UINT32     portId;    UINT32     destPortId;    UINT32     npeId;    UINT32     rxQReadStatus;    /*     * Design note : entries are read in a buffer, This buffer contains     * an extra zeroed entry so the loop will     * always terminate on a null entry, whatever the result of Burst read is.     */    UINT32 rxQEntry[IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK + 1];    /*     * Indication of the number of times the callback is used.     */    IX_ETH_ACC_STATS_INC(ixEthAccDataStats.rxCallbackCounter);    do    {	/*	 * Indication of the number of times the queue is drained	 */	IX_ETH_ACC_STATS_INC(ixEthAccDataStats.rxCallbackBurstRead);	/* ensure the last entry of the array contains a zeroed value */	qEntryPtr = rxQEntry;	qEntryPtr[IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK] = 0;	rxQReadStatus = ixQMgrQBurstRead(qId,		 IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK,		 qEntryPtr);#ifndef NDEBUG	if ((rxQReadStatus != IX_QMGR_Q_UNDERFLOW)	    && (rxQReadStatus != IX_SUCCESS))	{	    ixEthAccDataStats.unexpectedError++;	    /*major error*/	    IX_ETH_ACC_FATAL_LOG(		"ixEthRxFrameQMCallback:Error: %u\n",		(UINT32)rxQReadStatus, 0, 0, 0, 0, 0);	    return;	}#endif	/* convert and preload the next entry	 * (the conversion function takes care about null pointers which	 * are used to mark the end of the loop)	 */	nextQEntry = *qEntryPtr;	nextMbufPtr = ixEthAccEntryFromQConvert(nextQEntry,			  IX_ETHNPE_QM_Q_RXENET_ADDR_MASK);	while(nextQEntry != 0)	{	    /* get the next entry */	    qEntry = nextQEntry;	    mbufPtr = nextMbufPtr;#ifndef NDEBUG	    if (mbufPtr == NULL)	    {		ixEthAccDataStats.unexpectedError++;		IX_ETH_ACC_FATAL_LOG(		    "ixEthRxFrameQMCallback: Null Mbuf Ptr\n",		    0, 0, 0, 0, 0, 0);		return;	    }#endif	    /* convert the next entry	     * (the conversion function takes care about null pointers which	     * are used to mark the end of the loop)	     */	    nextQEntry = *(++qEntryPtr);	    nextMbufPtr = ixEthAccEntryFromQConvert(nextQEntry,			      IX_ETHNPE_QM_Q_RXENET_ADDR_MASK);	    /*	     * Get Port and Npe ID from message.	     */	    npeId = ((IX_ETHNPE_QM_Q_RXENET_NPEID_MASK &		      qEntry) >> IX_ETHNPE_QM_Q_FIELD_NPEID_R);	    portId = IX_ETH_ACC_NPE_TO_PORT_ID(npeId);	    /* process frame, check the return code and skip the remaining of	     * the loop if the frame is to be filtered out	     */            if (ixEthRxFrameProcess(portId, mbufPtr))            {	        /* destination portId for this packet */	        destPortId = IX_ETHACC_NE_DESTPORTID(mbufPtr);                if (destPortId != IX_ETH_DB_UNKNOWN_PORT)                {                    destPortId = IX_ETH_DB_NPE_LOGICAL_ID_TO_PORT_ID(destPortId);                }	        /* test if QoS is enabled in ethAcc	        */	        if (ixEthAccDataInfo.schDiscipline == FIFO_PRIORITY)	        {		    /* check if there is a higher priority queue		    * which may require processing and then process it.		    */		    if (ixEthAccDataInfo.higherPriorityQueue[qId] < IX_QMGR_MAX_NUM_QUEUES)		    {		        ixEthRxFrameQMCallback(ixEthAccDataInfo.higherPriorityQueue[qId],					    callbackId);		    }	        }	        /*	        * increment priority stats	        */	        RX_STATS_INC(portId,rxPriority[IX_ETHACC_NE_QOS(mbufPtr)]);	        /*	        * increment callback count stats	        */	        RX_STATS_INC(portId,rxFrameClientCallback);	        /*	        * Call user level callback.	        */	        ixEthAccPortData[portId].ixEthAccRxData.rxCallbackFn(		    ixEthAccPortData[portId].ixEthAccRxData.rxCallbackTag,		    mbufPtr,		    destPortId);            }	}    } while (rxQReadStatus == IX_SUCCESS);}/** * @fn ixEthRxMultiBufferQMCallback * * @brief receive callback for Frame receive Q from NPE * * Frames are passed as an array to the user * * @param @ref IxQMgrCallback * * @return none * * @internal * * Design note : while processing the entry X, entry X+1 is preloaded * into memory to reduce the number of stall cycles * */void ixEthRxMultiBufferQMCallback(IxQMgrQId qId, IxQMgrCallbackId callbackId){    IX_OSAL_MBUF    *mbufPtr;    IX_OSAL_MBUF    *nextMbufPtr;    UINT32     qEntry;    UINT32     nextQEntry;    UINT32     *qEntryPtr;    UINT32     portId;    UINT32     npeId;    UINT32     rxQReadStatus;    /*     * Design note : entries are read in a static buffer, This buffer contains     * an extra zeroed entry so the loop will     * always terminate on a null entry, whatever the result of Burst read is.     */    static UINT32 rxQEntry[IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK + 1];    static IX_OSAL_MBUF *rxMbufPortArray[IX_ETH_ACC_NUMBER_OF_PORTS][IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK + 1];    IX_OSAL_MBUF **rxMbufPtr[IX_ETH_ACC_NUMBER_OF_PORTS];    for (portId = 0; portId < IX_ETH_ACC_NUMBER_OF_PORTS; portId++)    {	rxMbufPtr[portId] = rxMbufPortArray[portId];    }    /*     * Indication of the number of times the callback is used.     */    IX_ETH_ACC_STATS_INC(ixEthAccDataStats.rxCallbackCounter);    do    {	/*	 * Indication of the number of times the queue is drained	 */	IX_ETH_ACC_STATS_INC(ixEthAccDataStats.rxCallbackBurstRead);	/* ensure the last entry of the array contains a zeroed value */	qEntryPtr = rxQEntry;	qEntryPtr[IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK] = 0;	rxQReadStatus = ixQMgrQBurstRead(qId,		 IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK,		 qEntryPtr);#ifndef NDEBUG	if ((rxQReadStatus != IX_QMGR_Q_UNDERFLOW)	    && (rxQReadStatus != IX_SUCCESS))	{	    ixEthAccDataStats.unexpectedError++;	    /*major error*/	    IX_ETH_ACC_FATAL_LOG(		"ixEthRxFrameMultiBufferQMCallback:Error: %u\n",		(UINT32)rxQReadStatus, 0, 0, 0, 0, 0);	    return;	}#endif	/* convert and preload the next entry	 * (the conversion function takes care about null pointers which	 * are used to mark the end of the loop)	 */	nextQEntry = *qEntryPtr;	nextMbufPtr = ixEthAccEntryFromQConvert(nextQEntry,			  IX_ETHNPE_QM_Q_RXENET_ADDR_MASK);	while(nextQEntry != 0)	{	    /* get the next entry */	    qEntry = nextQEntry;	    mbufPtr = nextMbufPtr;#ifndef NDEBUG	    if (mbufPtr == NULL)	    {		ixEthAccDataStats.unexpectedError++;		IX_ETH_ACC_FATAL_LOG(		    "ixEthRxFrameMultiBufferQMCallback:Error: Null Mbuf Ptr\n",		    0, 0, 0, 0, 0, 0);		return;	    }#endif	    /* convert the next entry	     * (the conversion function takes care about null pointers which	     * are used to mark the end of the loop)	     */	    nextQEntry = *(++qEntryPtr);	    nextMbufPtr = ixEthAccEntryFromQConvert(nextQEntry,			      IX_ETHNPE_QM_Q_RXENET_ADDR_MASK);	    /*	     * Get Port and Npe ID from message.	     */	    npeId = ((IX_ETHNPE_QM_Q_RXENET_NPEID_MASK &		      qEntry) >>		     IX_ETHNPE_QM_Q_FIELD_NPEID_R);	    portId = IX_ETH_ACC_NPE_TO_PORT_ID(npeId);	    /* skip the remaining of the loop if the frame is	     * to be filtered out	     */	    if (ixEthRxFrameProcess(portId, mbufPtr))	    {		/* store a mbuf pointer in an array */		*rxMbufPtr[portId]++ = mbufPtr;		/*		 * increment priority stats		 */		RX_STATS_INC(portId,rxPriority[IX_ETHACC_NE_QOS(mbufPtr)]);	    }	    /* test for QoS enabled in ethAcc */	    if (ixEthAccDataInfo.schDiscipline == FIFO_PRIORITY)	    {		/* check if there is a higher priority queue		 * which may require processing and then process it.		 */		if (ixEthAccDataInfo.higherPriorityQueue[qId] < IX_QMGR_MAX_NUM_QUEUES)		{		    ixEthRxMultiBufferQMCallback(ixEthAccDataInfo.higherPriorityQueue[qId],						 callbackId);		}	    }	}	/* check if any of the the arrays contains any entry */	for (portId = 0; portId < IX_ETH_ACC_NUMBER_OF_PORTS; portId++)	{	    if (rxMbufPtr[portId] != rxMbufPortArray[portId])	    {		/* add a last NULL pointer at the end of the		 * array of mbuf pointers		 */		*rxMbufPtr[portId] = NULL;		/*		 * increment callback count stats		 */		RX_STATS_INC(portId,rxFrameClientCallback);		/*		 * Call user level callback with an array of		 * buffers (NULL terminated)		 */		ixEthAccPortData[portId].ixEthAccRxData.		    rxMultiBufferCallbackFn(			    ixEthAccPortData[portId].ixEthAccRxData.			           rxMultiBufferCallbackTag,			    rxMbufPortArray[portId]);		/* reset the buffer pointer to the beginning of		 * the array		 */		rxMbufPtr[portId] = rxMbufPortArray[portId];	    }	}    } while (rxQReadStatus == IX_SUCCESS);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜亚洲天天久久| 国产精品久久久久久一区二区三区| 韩国午夜理伦三级不卡影院| 久久婷婷色综合| 欧美日韩在线不卡| 成人免费毛片嘿嘿连载视频| 视频一区二区不卡| 亚洲女人的天堂| 337p粉嫩大胆噜噜噜噜噜91av| 色婷婷国产精品久久包臀| 国内精品伊人久久久久av影院| 亚洲欧美成aⅴ人在线观看| 精品成人佐山爱一区二区| 欧美在线观看一区二区| 成人久久久精品乱码一区二区三区| 爽好多水快深点欧美视频| 亚洲色欲色欲www| 久久久www成人免费毛片麻豆| 欧美日韩在线不卡| 在线亚洲+欧美+日本专区| 成人在线综合网| 韩国一区二区在线观看| 青青草91视频| 午夜电影网亚洲视频| 亚洲精品中文在线影院| 中文字幕在线播放不卡一区| 久久婷婷久久一区二区三区| 精品国产在天天线2019| 日韩午夜av一区| 欧美日韩高清在线播放| 色综合久久天天| av成人动漫在线观看| 成人美女在线观看| 国产成人精品免费在线| 国产精品99久久久| 国产寡妇亲子伦一区二区| 精品一区二区在线免费观看| 麻豆久久久久久| 蜜桃av一区二区在线观看| 无码av免费一区二区三区试看| 亚洲一卡二卡三卡四卡无卡久久 | 久久久五月婷婷| 日韩一区二区三区免费看| 7777精品久久久大香线蕉| 欧美日韩一区二区在线观看视频| 在线观看亚洲专区| 在线观看不卡视频| 欧美日韩免费不卡视频一区二区三区| 91麻豆精东视频| 欧美亚洲综合网| 欧美精品色一区二区三区| 欧美精品在线观看播放| 91精品国产一区二区三区蜜臀| 91麻豆精品国产| 精品久久国产字幕高潮| 久久久亚洲精华液精华液精华液| 国产欧美视频一区二区三区| 国产精品免费久久久久| 亚洲视频精选在线| 亚洲制服丝袜一区| 日韩精品一区第一页| 极品美女销魂一区二区三区| 国产乱码一区二区三区| 成人av动漫在线| 在线影院国内精品| 欧美一区二区人人喊爽| 欧美mv日韩mv国产网站app| 久久久噜噜噜久噜久久综合| 国产精品高潮呻吟| 亚洲午夜在线观看视频在线| 免费欧美日韩国产三级电影| 国产精品一二三在| 色婷婷综合中文久久一本| 欧美精品一级二级三级| 久久久综合视频| 亚洲欧洲国产日本综合| 偷拍亚洲欧洲综合| 国产麻豆成人传媒免费观看| 97se亚洲国产综合自在线| 欧美精品在线观看一区二区| 久久久99免费| 一区二区三区影院| 激情综合色丁香一区二区| kk眼镜猥琐国模调教系列一区二区 | 精品久久久久av影院 | 久久精品视频免费| 一区二区成人在线| 国产一区二区在线看| av在线播放一区二区三区| 欧美福利视频导航| 国产精品看片你懂得| 天天色图综合网| 成人av影视在线观看| 91精品一区二区三区久久久久久 | 日韩视频免费观看高清完整版| 亚洲国产精品成人久久综合一区 | 亚洲欧美一区二区三区孕妇| 日本欧美肥老太交大片| 91视视频在线直接观看在线看网页在线看| 欧美日韩精品欧美日韩精品一| 国产日韩视频一区二区三区| 亚洲午夜精品一区二区三区他趣| 国产精品一二三在| 日韩午夜三级在线| 亚洲第一福利一区| 成人免费毛片app| 精品日韩99亚洲| 亚洲午夜精品久久久久久久久| 高清成人免费视频| 日韩免费高清av| 亚洲成人在线免费| 9i在线看片成人免费| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国内成+人亚洲+欧美+综合在线| 欧洲av在线精品| 中文字幕一区二区不卡| 国产一区二三区好的| 日韩女优av电影在线观看| 亚洲综合久久av| 91一区二区三区在线观看| 国产农村妇女毛片精品久久麻豆| 蜜桃传媒麻豆第一区在线观看| 欧美日韩精品久久久| 亚洲女同ⅹxx女同tv| 99re这里只有精品6| 国产精品你懂的在线欣赏| 国产麻豆视频精品| 久久嫩草精品久久久久| 免费观看在线综合| 日韩一区二区三区av| 首页国产欧美久久| 69av一区二区三区| 免费在线观看成人| 日韩一区二区三区视频| 免费久久99精品国产| 日韩欧美综合在线| 久久99九九99精品| 久久综合色一综合色88| 国产一二三精品| 国产亚洲福利社区一区| 国产精品亚洲一区二区三区在线| www国产精品av| 国产激情偷乱视频一区二区三区| 国产亚洲欧美日韩俺去了| 国产精品91一区二区| 亚洲国产精品av| 97aⅴ精品视频一二三区| 亚洲激情自拍偷拍| 欧美色爱综合网| 免费人成在线不卡| 久久中文字幕电影| 成人午夜免费视频| 亚洲免费观看视频| 欧美日韩卡一卡二| 久久99国产精品久久99| 国产欧美精品一区二区色综合| www.av精品| 亚洲无线码一区二区三区| 欧美一区二区在线不卡| 国产在线播精品第三| 国产欧美日韩一区二区三区在线观看| 成人永久免费视频| 一区二区三区精品| 91精品视频网| 国产一区二区视频在线| 国产精品人成在线观看免费| 91色九色蝌蚪| 日韩va欧美va亚洲va久久| 精品国产不卡一区二区三区| 丰满亚洲少妇av| 亚洲一区二区视频在线观看| 制服丝袜亚洲精品中文字幕| 国产在线精品免费| 亚洲精品中文在线观看| 欧美精品1区2区3区| 国产高清精品在线| 亚洲综合区在线| 精品国产乱码久久| 91视频国产资源| 久久福利资源站| 亚洲欧美另类在线| 日韩一区二区三区av| 99国产一区二区三精品乱码| 日韩激情一二三区| 中文av一区特黄| 91精品免费在线观看| 成人性视频免费网站| 首页国产欧美久久| 国产精品国产三级国产专播品爱网| 欧美日韩一区精品| av一区二区久久| 美女网站在线免费欧美精品| 最新高清无码专区| 日韩精品一区二区三区四区| 91免费版在线| 国产一区在线看| 日韩—二三区免费观看av| 亚洲欧美综合另类在线卡通| 欧美大度的电影原声| 在线观看成人小视频|