📄 ixatmutilsatm.c
字号:
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 + -