⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ixatmutilsatm.c

📁 intel IXP400系列cpu(2.3版)的库文件
💻 C
📖 第 1 页 / 共 2 页
字号:
    rxChannelInfo[rxChannelIdx].port = port;    retval = ixAtmdAccRxVcFreeEntriesQuery(*rxConnId,                                           &rxFreeQueueSize);    if (retval != IX_SUCCESS)    {	ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Fail, get the no. entries in rx free queue\n",0,0,0,0,0,0);	return retval;    }     /* Replenish Rx buffers if callback is not NULL*/    if (rxFreeLowCallback != NULL)    {	rxFreeLowCallback(userId);		retval = ixAtmdAccRxVcFreeLowCallbackRegister (*rxConnId,						       rxFreeQueueSize / 4,						       rxFreeLowCallback);    }	    if (retval != IX_SUCCESS)    {	ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to register RxFreeLowCalback \n", 0, 0, 0, 0, 0, 0);	return retval;    }    /* Register replish more callback */    retval = ixAtmdAccRxVcEnable (*rxConnId);    if (retval != IX_SUCCESS)    {	ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to enable Rx VC \n", 0, 0, 0, 0, 0, 0);	return retval;    }    return IX_SUCCESS;}/* --------------------------------------------------- */PRIVATE IX_STATUSrxVcDisconnect(IxAtmConnId rxConnId){    IX_STATUS retval;    UINT32 retryCount;    retval =  ixAtmdAccRxVcDisable(rxConnId);    if (retval != IX_SUCCESS)    {	ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "rx disable failed (%d)\n", retval, 0, 0, 0, 0, 0);	return retval;    }    retryCount = 0;    do    {	retval = ixAtmdAccRxVcTryDisconnect(rxConnId);	if (retval == IX_ATMDACC_RESOURCES_STILL_ALLOCATED)	{	    ixOsalSleep(DISCONNECT_RETRY_DELAY);	}    }    while ((retryCount++ < DISCONNECT_RETRY_COUNT)	   && (retval == IX_ATMDACC_RESOURCES_STILL_ALLOCATED));    if (retval != IX_SUCCESS)    {	ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "rx disconnect failed (%d)\n",		    retval, 0, 0, 0, 0, 0);	return retval;    }    return IX_SUCCESS;}/* --------------------------------------------------- */PRIVATE IX_STATUStxVcDisconnect(IxAtmConnId txConnId){    IX_STATUS retval;    UINT32 retryCount;    retryCount = 0;    do    {	retval = ixAtmdAccTxVcTryDisconnect(txConnId);	if (retval == IX_ATMDACC_RESOURCES_STILL_ALLOCATED)	{	    ixOsalSleep(DISCONNECT_RETRY_DELAY);	}    }    while ((retryCount++ < DISCONNECT_RETRY_COUNT)	   && (retval == IX_ATMDACC_RESOURCES_STILL_ALLOCATED));    if (retval != IX_SUCCESS)    {	ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "tx disconnect failed (%d)\n",		    retval, 0, 0, 0, 0, 0);	return retval;    }    return IX_SUCCESS;}/* --------------------------------------------------- */PUBLIC IX_STATUSixAtmUtilsAtmVcUnregisterDisconnect (IxAtmConnId rxConnId, IxAtmConnId txConnId){    IX_STATUS retval = IX_SUCCESS;    UINT32 rxChannelIdx;    UINT32 txChannelIdx;    if (rxChannelFind(rxConnId, &rxChannelIdx) == IX_SUCCESS)    {        retval = rxVcDisconnect(rxConnId);        if (retval != IX_SUCCESS)        {            ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to disconnect an rx channel\n",			0, 0, 0, 0, 0, 0);            return IX_FAIL;        }        retval = ixAtmmVcDeregister(rxPort[rxChannelIdx], rxVcId[rxChannelIdx]);        if (retval != IX_SUCCESS)        {            ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to unregister an rx channel\n",			0, 0, 0, 0, 0, 0);            return IX_FAIL;        }        rxChannelInfo[rxChannelIdx].inUse = FALSE;    }    if (txChannelFind(txConnId, &txChannelIdx) == IX_SUCCESS)    {        retval = txVcDisconnect(txConnId);        if (retval != IX_SUCCESS)        {            ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to disconnect a tx channel\n",			0, 0, 0, 0, 0, 0);            return IX_FAIL;        }        retval = ixAtmmVcDeregister(txPort[txChannelIdx], txVcId[txChannelIdx]);        if (retval != IX_SUCCESS)        {            ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to unregister a tx channel\n",			0, 0, 0, 0, 0, 0);            return IX_FAIL;        }        txChannelInfo[txChannelIdx].inUse = FALSE;    }    return IX_SUCCESS;}/* --------------------------------------------------- */PUBLIC IX_STATUSixAtmUtilsAtmAllVcsDisconnect (void){    IX_STATUS retval;    int channelIdx;    for (channelIdx=0; channelIdx<IX_ATM_MAX_NUM_VC; channelIdx++)    {        retval = ixAtmUtilsAtmVcUnregisterDisconnect (rxChannelInfo[channelIdx].connId, 						       txChannelInfo[channelIdx].connId);        if (retval != IX_SUCCESS)        {	    ixOsalLog(IX_OSAL_LOG_LVL_ERROR,IX_OSAL_LOG_DEV_STDERR, "Failed to unregister a channel\n",			0, 0, 0, 0, 0, 0);	    return IX_FAIL;        }    }    return IX_SUCCESS;}/* --------------------------------------------------- */PUBLIC IX_STATUSixAtmUtilsAtmImageDownload (unsigned numPorts, 			     IxAtmmPhyMode *phyMode){    IX_STATUS retval = IX_SUCCESS;    retval = ixNpeDlNpeInitAndStart (IX_ATM_CODELET_NPEA_IMAGE_ID);    if (retval != IX_SUCCESS)    {	printf ("Failed to download NPEA image\n");    }    if (retval == IX_SUCCESS)    {	*phyMode = IX_ATM_CODELET_PHY_MODE;    }    else    {	printf("NPEA download failed \n");    }    return retval;}PRIVATE IX_STATUSrxFreeChannelGet (UINT32 *channelId){    int i;    for (i = 0; i < IX_ATM_MAX_NUM_VC; i ++)    {	if (!rxChannelInfo[i].inUse)	{	    	    *channelId = i;	    rxChannelInfo[i].inUse = TRUE;	    return IX_SUCCESS;	}    }    return IX_FAIL;}PRIVATE IX_STATUStxFreeChannelGet (UINT32 *channelId){    int i;    for (i = 0; i < IX_ATM_MAX_NUM_VC; i ++)    {	if (!txChannelInfo[i].inUse)	{	    	    *channelId = i;	    txChannelInfo[i].inUse = TRUE;	    return IX_SUCCESS;	}    }    return IX_FAIL;}PRIVATE IX_STATUSrxChannelFind (IxAtmConnId connId, UINT32 *channelId){    int i;    for (i = 0; i < IX_ATM_MAX_NUM_VC; i ++)    {	if ((rxChannelInfo[i].inUse) && (rxChannelInfo[i].connId == connId))	{	    	    *channelId = i;	    return IX_SUCCESS;	}    }    return IX_FAIL;}PRIVATE IX_STATUStxChannelFind (IxAtmConnId connId, UINT32 *channelId){    int i;    for (i = 0; i < IX_ATM_MAX_NUM_VC; i ++)    {	if ((txChannelInfo[i].inUse) && (txChannelInfo[i].connId == connId))	{	    	    *channelId = i;	    return IX_SUCCESS;	}    }    return IX_FAIL;}         /* This function setup the ATM codelet to use 8VBR, 8CBR, and 16UBR VCs */PUBLIC voidixAtmUtilsAtmRtVcsSet(void){    ixAtmCodelet8Vbr8Cbr16Ubr = TRUE;}/* This function is responsible to return the TRUE or FALSE status. * It is to indicate whether the ATM codelet should setup real-time VCS * If TRUE, real-time VCs will be setup. If FALSE, real-time VCS will *  not be setup. */PUBLIC BOOLixAtmUtilsAtmRtVcsGet(void){    return ixAtmCodelet8Vbr8Cbr16Ubr;}/* This function is responsible to unset the global variable to FALSE * so that the ATM codelet will not setup real-time VCs */PUBLIC voidixAtmUtilsAtmRtVcsUnset(void){    ixAtmCodelet8Vbr8Cbr16Ubr = FALSE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -