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

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

?? ixethaccmac.c

?? 友善mini2440嵌入式
?? C
?? 第 1 頁 / 共 5 頁
字號:
		 * buffer, without payload and the destination port is		 * unknown.		 */		ixEthAccPortDisableFn[portId](		      ixEthAccPortDisableCbTag[portId],		      mBufPtr,		      IX_ETH_DB_UNKNOWN_PORT /* port not found */);	    }        }        mBufPtr = mNextPtr;    }}PRIVATE IxEthAccStatusixEthAccPortDisableTryReplenish(UINT32 portId){    int key;    IxEthAccStatus status = IX_ETH_ACC_SUCCESS;    volatile IxEthAccPortDisableState *rxState = &ixEthAccMacState[portId].rxState;    /* replenish with the special buffer again if it is received     * and update the rxState     * This section is protected because the portDisable context     * run an identical code, so the system keeps replenishing at the     * maximum rate.     */    key = ixOsalIrqLock();    if (*rxState == RECEIVE)    {	IX_OSAL_MBUF *mbufRxPtr = ixEthAccMacState[portId].portDisableRxMbufPtr;	*rxState = REPLENISH;	IX_OSAL_MBUF_MLEN(mbufRxPtr) = IX_ETHACC_RX_MBUF_MIN_SIZE;	status = ixEthAccPortRxFreeReplenish(portId, mbufRxPtr);    }    ixOsalIrqUnlock(key);    return status;}PRIVATE voidixEthAccPortDisableRxAndReplenish (IxEthAccPortId portId,				   IX_OSAL_MBUF * mBufPtr,				   BOOL useMultiBufferCallback){    /* call the callback which forwards the traffic to the client */    ixEthAccPortDisableRx(portId, mBufPtr, useMultiBufferCallback);    /* try to replenish with the buffer used in portDisable     * if seen in Rx     */    ixEthAccPortDisableTryReplenish(portId);}PRIVATE voidixEthAccPortDisableRxCallback (UINT32 cbTag,			       IX_OSAL_MBUF * mBufPtr,			       UINT32 learnedPortId){    IxEthAccPortId portId = (IxEthAccPortId)cbTag;    /* call the portDisable receive callback */   (ixEthAccPortDisableRxTable[portId])(portId, mBufPtr, FALSE);}PRIVATE voidixEthAccPortDisableMultiBufferRxCallback (UINT32 cbTag,					  IX_OSAL_MBUF **mBufPtr){    IxEthAccPortId portId = (IxEthAccPortId)cbTag;    while (*mBufPtr)    {	/* call the portDisable receive callback with one buffer at a time */	(ixEthAccPortDisableRxTable[portId])(portId, *mBufPtr++, TRUE);    }}IxEthAccStatusixEthAccPortDisablePriv(IxEthAccPortId portId){    IxEthAccStatus status = IX_ETH_ACC_SUCCESS;    int key;    int retry, retryTimeout;    volatile IxEthAccPortDisableState *state = &ixEthAccMacState[portId].portDisableState;    volatile IxEthAccPortDisableState *rxState = &ixEthAccMacState[portId].rxState;    volatile IxEthAccPortDisableState *txState = &ixEthAccMacState[portId].txState;    IX_ETH_ACC_VALIDATE_PORT_ID(portId);    if (IX_ETH_ACC_SUCCESS != ixEthAccSingleEthNpeCheck(portId))    {        IX_ETH_ACC_WARNING_LOG("EthAcc: Unavailable Eth %d: Cannot disable port.\n",(INT32)portId,0,0,0,0,0);        return IX_ETH_ACC_SUCCESS ;    }    if (!IX_ETH_IS_PORT_INITIALIZED(portId))    {	return (IX_ETH_ACC_PORT_UNINITIALIZED);    }    /* if the state is being set to what it is already at, do nothing */    if (!ixEthAccMacState[portId].enabled)    {        return IX_ETH_ACC_SUCCESS;    }    *state = DISABLED;    /* disable MAC receive first */    ixEthAccPortRxDisablePriv(portId);#ifdef CONFIG_IXP425_COMPONENT_ETHDB    /* disable ethernet database for this port - It is done now to avoid     * issuing ELT maintenance after requesting 'port disable' in an NPE     */    if (ixEthDBPortDisable(portId) != IX_ETH_DB_SUCCESS)    {	status = IX_ETH_ACC_FAIL;        IX_ETH_ACC_FATAL_LOG("ixEthAccPortDisable: failed to disable EthDB for this port\n", 0, 0, 0, 0, 0, 0);    }#endif    /* enter the critical section */    key = ixOsalIrqLock();    /* swap the Rx and TxDone callbacks */    ixEthAccPortDisableFn[portId]            = ixEthAccPortData[portId].ixEthAccRxData.rxCallbackFn;    ixEthAccPortDisableMultiBufferFn[portId] = ixEthAccPortData[portId].ixEthAccRxData.rxMultiBufferCallbackFn;    ixEthAccPortDisableCbTag[portId]         = ixEthAccPortData[portId].ixEthAccRxData.rxCallbackTag;    ixEthAccPortDisableMultiBufferCbTag[portId] = ixEthAccPortData[portId].ixEthAccRxData.rxMultiBufferCallbackTag;    ixEthAccPortDisableTxDoneFn[portId]      = ixEthAccPortData[portId].ixEthAccTxData.txBufferDoneCallbackFn;    ixEthAccPortDisableTxDoneCbTag[portId]   = ixEthAccPortData[portId].ixEthAccTxData.txCallbackTag;    ixEthAccPortDisableRxTable[portId]       =  ixEthAccPortDisableRx;    /* register temporary callbacks */    ixEthAccPortData[portId].ixEthAccRxData.rxCallbackFn            = ixEthAccPortDisableRxCallback;    ixEthAccPortData[portId].ixEthAccRxData.rxCallbackTag           = portId;    ixEthAccPortData[portId].ixEthAccRxData.rxMultiBufferCallbackFn = ixEthAccPortDisableMultiBufferRxCallback;    ixEthAccPortData[portId].ixEthAccRxData.rxMultiBufferCallbackTag = portId;    ixEthAccPortData[portId].ixEthAccTxData.txBufferDoneCallbackFn  = ixEthAccPortDisableTxDone;    ixEthAccPortData[portId].ixEthAccTxData.txCallbackTag           = portId;    /* initialise the Rx state and Tx states */    *txState = TRANSMIT_DONE;    *rxState = RECEIVE;    /* exit the critical section */    ixOsalIrqUnlock(key);    /* enable a NPE loopback */    if (ixEthAccNpeLoopbackEnablePriv(portId) != IX_ETH_ACC_SUCCESS)    {	status = IX_ETH_ACC_FAIL;    }    if (status == IX_ETH_ACC_SUCCESS)    {	retry = 0;	/* Step 1 : Drain Tx traffic and TxDone queues :	 *	 * Transmit and replenish at least once with the	 * special buffers until both of them are seen	 * in the callback hook	 *	 * (the receive callback keeps replenishing, so once we see	 * the special Tx buffer, we can be sure that Tx drain is complete)	 */	ixEthAccPortDisableRxTable[portId]	    =  ixEthAccPortDisableRxAndReplenish;	ixEthAccPortData[portId].ixEthAccTxData.txBufferDoneCallbackFn	    = ixEthAccPortDisableTxDone;	do	{	    /* keep replenishing */	    status = ixEthAccPortDisableTryReplenish(portId);	    if (status == IX_ETH_ACC_SUCCESS)	    {		/* keep transmitting */		status = ixEthAccPortDisableTryTransmit(portId);	    }	    if (status == IX_ETH_ACC_SUCCESS)	    {		/* wait for some traffic being processed */		ixOsalSleep(IX_ETH_ACC_PORT_DISABLE_DELAY_MSECS);	    }	}	while ((status == IX_ETH_ACC_SUCCESS)	       && (retry++ < IX_ETH_ACC_MAX_RETRY)	       && (*txState == TRANSMIT));	/* Step 2 : Drain Rx traffic, RxFree and Rx queues :	 *	 * Transmit and replenish at least once with the	 * special buffers until both of them are seen	 * in the callback hook	 * (the transmit callback keeps transmitting, and when we see	 * the special Rx buffer, we can be sure that rxFree drain	 * is complete)	 *	 * The nested loop helps to retry if the user was keeping	 * replenishing or transmitting during portDisable.	 *	 * The 2 nested loops ensure more retries if user traffic is	 * seen during portDisable : the user should not replenish	 * or transmit while portDisable is running. However, because of	 * the queueing possibilities in ethAcc dataplane, it is possible	 * that a lot of traffic is left in the queues (e.g. when	 * transmitting over a low speed link) and therefore, more	 * retries are allowed to help flushing the buffers out.	 */	ixEthAccPortDisableRxTable[portId]	    =  ixEthAccPortDisableRx;	ixEthAccPortData[portId].ixEthAccTxData.txBufferDoneCallbackFn	    = ixEthAccPortDisableTxDoneAndSubmit;	do	{	    do	    {		ixEthAccPortDisableUserBufferCount[portId] = 0;		/* keep replenishing */		status = ixEthAccPortDisableTryReplenish(portId);		if (status == IX_ETH_ACC_SUCCESS)		{		    /* keep transmitting */		    status = ixEthAccPortDisableTryTransmit(portId);		}		if (status == IX_ETH_ACC_SUCCESS)		{		    /* wait for some traffic being processed */		    ixOsalSleep(IX_ETH_ACC_PORT_DISABLE_DELAY_MSECS);		}	    }	    while ((status == IX_ETH_ACC_SUCCESS)		   && (retry++ < IX_ETH_ACC_MAX_RETRY)		   && ((ixEthAccPortDisableUserBufferCount[portId] != 0)		       || (*rxState == REPLENISH)));	    /* After the first iteration, change the receive callbacks,	     * to process only 1 buffer at a time	     */	    ixEthAccPortDisableRxTable[portId]		= ixEthAccPortDisableRx;	    ixEthAccPortData[portId].ixEthAccTxData.txBufferDoneCallbackFn		= ixEthAccPortDisableTxDone;	    /* repeat the whole process while user traffic is seen in TxDone	     *	     * The conditions to stop the loop are	     * - Xscale has both Rx and Tx special buffers	     *   (txState = transmit, rxState = receive)	     * - any error in txSubmit or rxReplenish	     * - no user traffic seen	     * - an excessive amount of retries	     */	}	while ((status == IX_ETH_ACC_SUCCESS)	       && (retry < IX_ETH_ACC_MAX_RETRY)	       && (*txState == TRANSMIT));	/* check the loop exit conditions. The NPE should not hold	 * the special buffers.	 */	if ((*rxState == REPLENISH) || (*txState == TRANSMIT))	{	    status = IX_ETH_ACC_FAIL;	}	if (status == IX_ETH_ACC_SUCCESS)	{	    /* Step 3 : Replenish without transmitting until a timeout	     * occurs, in order to drain the internal NPE fifos	     *	     * we can expect a few frames srill held	     * in the NPE.	     *	     * The 2 nested loops take care about the NPE dropping traffic	     * (including loopback traffic) when the Rx queue is full.	     *	     * The timeout value is very conservative	     * since the loopback used keeps replenishhing.	     *	     */	    do	    {		ixEthAccPortDisableRxTable[portId] = ixEthAccPortDisableRxAndReplenish;		ixEthAccPortDisableUserBufferCount[portId] = 0;		retryTimeout = 0;		do		{		    /* keep replenishing */		    status = ixEthAccPortDisableTryReplenish(portId);		    if (status == IX_ETH_ACC_SUCCESS)		    {			/* wait for some traffic being processed */			ixOsalSleep(IX_ETH_ACC_PORT_DISABLE_DELAY_MSECS);		    }		}		while ((status == IX_ETH_ACC_SUCCESS)		       && (retryTimeout++ < IX_ETH_ACC_MAX_RETRY_TIMEOUT));		/* Step 4 : Transmit once. Stop replenish		 *		 * After the Rx timeout, we are sure that the NPE does not		 * hold any frame in its internal NPE fifos.		 *		 * At this point, the NPE still holds the last rxFree buffer.		 * By transmitting a single frame, this should unblock the		 * last rxFree buffer. This code just transmit once and		 * wait for both frames seen in TxDone and in rxFree.		 *		 */		ixEthAccPortDisableRxTable[portId] =  ixEthAccPortDisableRx;		status = ixEthAccPortDisableTryTransmit(portId);		/* the NPE should immediatelyt release		 * the last Rx buffer and the last transmitted buffer		 * unless the last Tx frame was dropped (rx queue full)		 */		if (status == IX_ETH_ACC_SUCCESS)		{		    retryTimeout = 0;		    do		    {			ixOsalSleep(IX_ETH_ACC_PORT_DISABLE_DELAY_MSECS);		    }		    while ((*rxState == REPLENISH)			   && (retryTimeout++ < IX_ETH_ACC_MAX_RETRY_TIMEOUT));		}		/* the NPE may have dropped the traffic because of Rx		 * queue being full. This code ensures that the last		 * Tx and Rx frames are both received.		 */	    }	    while ((status == IX_ETH_ACC_SUCCESS)		   && (retry++ < IX_ETH_ACC_MAX_RETRY)		   && ((*txState == TRANSMIT)		       || (*rxState == REPLENISH)		       || (ixEthAccPortDisableUserBufferCount[portId] != 0)));	    /* Step 5 : check the final states : the NPE has	     * no buffer left, nor in Tx , nor in Rx directions.	     */	    if ((*rxState == REPLENISH) || (*txState == TRANSMIT))	    {		status = IX_ETH_ACC_FAIL;	    }	}        /* now all the buffers are drained, disable NPE loopback	 * This is done regardless of the logic to drain the queues and	 * the internal buffers held by the NPE.	 */	if (ixEthAccNpeLoopbackDisablePriv(portId) != IX_ETH_ACC_SUCCESS)	{	    status = IX_ETH_ACC_FAIL;	}    }    /* disable MAC Tx and Rx services */    ixEthAccMacState[portId].enabled = FALSE;    ixEthAccMacStateUpdate(portId);    /* restore the Rx and TxDone callbacks (within a critical section) */    key = ixOsalIrqLock();    ixEthAccPortData[portId].ixEthAccRxData.rxCallbackFn            = ixEthAccPortDisableFn[portId];    ixEthAccPortData[portId].ixEthAccRxData.rxCallbackTag           = ixEthAccPortDisableCbTag[portId];    ixEthAccPortData[portId].ixEthAccRxData.rxMultiBufferCallbackFn = ixEthAccPortDisableMultiBufferFn[portId];    ixEthAccPortData[portId].ixEthAccRxData.rxMultiBufferCallbackTag = ixEthAccPortDisableMultiBufferCbTag[portId];    ixEthAccPortData[portId].ixEthAccTxData.txBufferDoneCallbackFn  = ixEthAccPortDisableTxDoneFn[portId];    ixEthAccPortData[portId].ixEthAccTxData.txCallbackTag           = ixEthAccPortDisableTxDoneCbTag[portId];    ixOsalIrqUnlock(key);    /* the MAC core rx/tx disable may left the MAC hardware in an     * unpredictable state. A hw reset is executed before resetting     * all the MAC parameters to a known value.     */    REG_WRITE(ixEthAccMacBase[portId],	      IX_ETH_ACC_MAC_CORE_CNTRL,	      IX_ETH_ACC_CORE_RESET);    ixOsalSleep(IX_ETH_ACC_MAC_RESET_DELAY);    /* rewrite all parameters to their current value */    ixEthAccMacStateUpdate(portId);    REG_WRITE(ixEthAccMacBase[portId],	      IX_ETH_ACC_MAC_INT_CLK_THRESH,	      IX_ETH_ACC_MAC_INT_CLK_THRESH_DEFAULT);    REG_WRITE(ixEthAccMacBase[portId],	      IX_ETH_ACC_MAC_CORE_CNTRL,	      IX_ETH_ACC_CORE_MDC_EN);    return status;}IxEthAccStatusixEthAccPortEnabledQueryPriv(IxEthAccPortId portId, BOOL *enabled){    IX_ETH_ACC_VALIDATE_PORT_ID(portId);    if (IX_ETH_ACC_SUCCESS != ixEthAccSingleEthNpeCheck(portId))    {        IX_ETH_ACC_WARNING_LOG("EthAcc: Unavailable Eth %d: Cannot enable port.\n",(INT32)portId,0,0,0,0,0);        /* Since Eth NPE is not available, port must be disabled */        *enabled = FALSE ;        return IX_ETH_ACC_SUCCESS ;    }    if (!IX_ETH_IS_PORT_INITIALIZED(portId))    {        /* Since Eth NPE is not available, port must be disabled */        *enabled = FALSE ;	return (IX_ETH_ACC_PORT_UNINITIALIZED);    }    *enabled = ixEthAccMacState[portId].enabled;    return IX_ETH_ACC_SUCCESS;}IxEthAccStatusixEthAccPortMacResetPriv(IxEthAccPortId portId){    IX_ETH_ACC_VALIDATE_PORT_ID(portId);    if (IX_ETH_ACC_SUCCESS != ixEthAccSingleEthNpeCheck(portId))    {        IX_ETH_ACC_WARNING_LOG("EthAcc: Eth %d: Cannot reset Ethernet coprocessor.\n",(INT32)portId,0,0,0,0,0);        return IX_ETH_ACC_SUCCESS ;    }    if (!IX_ETH_IS_PORT_INITIALIZED(portId))    {	return (IX_ETH_ACC_PORT_UNINITIALIZED);    }    REG_WRITE(ixEthAccMacBase[portId],	      IX_ETH_ACC_MAC_CORE_CNTRL,	      IX_ETH_ACC_CORE_RESET);    ixOsalSleep(IX_ETH_ACC_MAC_RESET_DELAY);    /* rewrite all parameters to their current value */    ixEthAccMacStateUpdate(portId);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区不卡视频| 日韩女优毛片在线| 免费在线观看日韩欧美| 日本一区二区综合亚洲| 欧美男生操女生| 成人福利视频在线看| 日韩和欧美的一区| 中文字幕一区二区三区在线观看| 欧美日韩一二三| 成人午夜又粗又硬又大| 日韩国产在线一| 亚洲精品中文在线影院| 久久蜜桃一区二区| 91精品国产美女浴室洗澡无遮挡| 99久久国产综合精品女不卡| 九九**精品视频免费播放| 一区二区三区日韩| 中文字幕一区二区三中文字幕| 精品成人一区二区| 91精品一区二区三区在线观看| 波多野结衣中文字幕一区二区三区| 免费观看成人av| 天堂va蜜桃一区二区三区漫画版 | 色综合天天视频在线观看| 国内一区二区视频| 六月婷婷色综合| 奇米四色…亚洲| 午夜精品一区二区三区免费视频| 中文字幕制服丝袜成人av| 久久久久高清精品| 精品福利一二区| 日韩三级视频中文字幕| 欧美一卡2卡3卡4卡| 欧美日韩三级视频| 欧美巨大另类极品videosbest | 国产一区二区三区免费看| 免费美女久久99| 日本美女一区二区三区视频| 一个色综合网站| 亚洲精品中文在线| 悠悠色在线精品| 一区二区日韩电影| 亚洲一区二区三区四区在线免费观看 | 丰满少妇久久久久久久| 韩国欧美国产一区| 久久不见久久见免费视频7 | 色嗨嗨av一区二区三区| 91看片淫黄大片一级| 91免费观看视频| 色视频一区二区| 欧美日韩一区二区三区高清| 在线免费亚洲电影| 欧美久久久久久蜜桃| 91麻豆精品国产综合久久久久久| 日韩一区二区三区观看| 精品久久一二三区| 国产精品色呦呦| 一区二区三区精品久久久| 亚洲综合视频网| 奇米影视一区二区三区| 精品一区二区三区av| 国产成人8x视频一区二区| 成人av午夜影院| 欧美性大战xxxxx久久久| 67194成人在线观看| 精品国产伦一区二区三区观看方式 | 天堂在线亚洲视频| 精品一区二区在线播放| 国产成人啪午夜精品网站男同| 成人短视频下载| 欧美亚洲综合色| 日韩三级电影网址| 中文一区二区在线观看| 亚洲韩国精品一区| 国产麻豆欧美日韩一区| 91亚洲国产成人精品一区二区三 | 国产精品萝li| 亚洲超丰满肉感bbw| 国产一区二区三区在线看麻豆| 成人高清视频在线观看| 欧美老女人第四色| 国产日韩欧美一区二区三区综合 | 日本不卡123| 高潮精品一区videoshd| 欧美性xxxxxxxx| 久久先锋资源网| 亚洲va在线va天堂| 国产a区久久久| 欧美高清精品3d| 国产精品免费aⅴ片在线观看| 亚洲国产视频a| 国产精品一区二区在线观看网站| 色婷婷综合久色| 久久精品视频一区| 亚洲bt欧美bt精品| 成人app在线观看| 精品久久久久久综合日本欧美| 日韩理论片在线| 国产精品一区一区三区| 欧美性欧美巨大黑白大战| 欧美国产乱子伦| 久久精品国产亚洲一区二区三区| 91丝袜国产在线播放| 久久色在线观看| 日韩精品免费视频人成| 97久久精品人人澡人人爽| 欧美xxxxx裸体时装秀| 亚洲黄色片在线观看| 国产成人在线视频免费播放| 欧美一级一区二区| 亚洲午夜精品网| 色综合色狠狠天天综合色| 国产女同互慰高潮91漫画| 日本va欧美va瓶| 欧美久久久久久久久中文字幕| 成人免费一区二区三区视频| 理论片日本一区| 91精品国产欧美一区二区| 亚洲一区二区三区视频在线播放| 成人av在线资源| 日本一区免费视频| 国产91精品露脸国语对白| 精品国产一区二区精华| 日本麻豆一区二区三区视频| 欧美日韩专区在线| 亚洲一区av在线| 欧美影院精品一区| 樱花影视一区二区| 91在线观看高清| 综合电影一区二区三区| 成人国产一区二区三区精品| 国产视频一区在线观看| 国产精品资源在线观看| 久久久久国产免费免费| 国产精品99久久久久| 国产三区在线成人av| 国产白丝网站精品污在线入口| 精品国产99国产精品| 国产综合久久久久久久久久久久| 日韩三级视频中文字幕| 久久精品国产在热久久| 欧美精品一区男女天堂| 国产在线播放一区二区三区| 久久亚洲综合av| 成人黄色在线看| 亚洲三级在线播放| 在线视频国内自拍亚洲视频| 亚洲国产cao| 欧美精品aⅴ在线视频| 美腿丝袜亚洲一区| 久久精品这里都是精品| 成人美女视频在线看| 日韩毛片视频在线看| 在线观看91视频| 免费观看一级特黄欧美大片| 亚洲精品一区二区在线观看| 国产毛片精品一区| 日韩理论片一区二区| 欧美日韩午夜精品| 精品无人码麻豆乱码1区2区 | 777久久久精品| 裸体歌舞表演一区二区| 国产偷国产偷亚洲高清人白洁| 成人av电影观看| 亚洲成人资源在线| 久久影院电视剧免费观看| 成人动漫在线一区| 亚洲一区二区综合| 日韩欧美亚洲国产另类| 大白屁股一区二区视频| 一区二区三区中文在线观看| 91精品国产一区二区| 国产成人午夜精品5599 | 精品一区二区久久久| 国产婷婷色一区二区三区四区| 91丝袜美女网| 麻豆91精品视频| 国产精品麻豆网站| 欧美放荡的少妇| 成人亚洲一区二区一| 婷婷开心久久网| 国产精品美女久久久久aⅴ | 国产精品无圣光一区二区| 91精品福利在线| 国产一区二区不卡老阿姨| 亚洲美女淫视频| 久久婷婷国产综合国色天香| 91免费观看国产| 激情综合色综合久久综合| 有坂深雪av一区二区精品| 久久综合狠狠综合久久激情| 色婷婷国产精品久久包臀| 国产麻豆精品视频| 偷拍一区二区三区四区| 国产精品三级av| 精品国产3级a| 欧美日韩精品一区二区三区蜜桃| 国产精品中文字幕欧美| 日韩中文字幕麻豆| 亚洲激情在线激情|