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

📄 ixatmdrxcfginfo.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 4 页
字号:
                /* release the NPE descriptor */                ixAtmdAccDescNpeDescriptorRelease (npeDescriptor);            }        } /* end of for(descCount) */        /* release the array of pointers */        IX_ATMDACC_RXQ_RELEASE_RESOURCES(rxSwQueue);    } /* end of if(IX_ATMDACC_RXQ_INITIALISED) */    /* map the error status */    if (returnStatus != IX_SUCCESS)    {        returnStatus = IX_FAIL;    }    return returnStatus;}/* ---------------------------------------------------------* get the NpeVcId for this channel*/IX_STATUSixAtmdAccRxCfgNpeVcIdGet (IxAtmConnId connId,                          unsigned int* npeVcIdPtr){    IxAtmdAccRxVcDescriptor *vcDescriptor;    IX_STATUS returnStatus = IX_SUCCESS;    unsigned int npeVcId;    npeVcId = IX_ATMDACC_RX_VC_INDEX_GET (connId);    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    *npeVcIdPtr = npeVcId;    /* check if the connection ID is valid */    if (vcDescriptor->connId != connId)    {        /* check if the connection ID has been invalidated */        if (vcDescriptor->connId != IX_ATMDACC_RX_DISCONNECTING (connId))        {            /* the connection ID does not correspond with the expected one */            returnStatus = IX_FAIL;        }    } /* end of if(vcDescriptor) */    return returnStatus;}/* ---------------------------------------------------------*    invalidate the connection Id*/IX_STATUSixAtmdAccRxCfgConnIdInvalidate (unsigned int rxId){    IX_STATUS returnStatus = IX_SUCCESS;    IxAtmdAccRxVcDescriptor *vcDescriptor = &ixAtmdAccRxVcDescriptor[rxId];    /* check if the connId is already invalidated */    if (!IX_ATMDACC_RX_DISCONNECTED (vcDescriptor->connId))    {        vcDescriptor->connId = IX_ATMDACC_RX_DISCONNECTING (vcDescriptor->connId);        /* connId is now invalidated : a direct comparison of the connId        *   passed as a parameter and the connId stored in the structure        *   will fail.        */    } /* end of if(IX_ATMDACC_RX_DISCONNECTED) */    return returnStatus;}/* ---------------------------------------------------------* check if all descriptors are recycled*/IX_STATUSixAtmdAccRxCfgFreeResourcesCheck (unsigned int npeVcId){    IX_STATUS returnStatus = IX_SUCCESS;    IxAtmdAccRxVcDescriptor *vcDescriptor;    IX_ATMDACC_RX_QUEUE *rxSwQueue;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    rxSwQueue = &vcDescriptor->queue;    /* check if resources are all free : this is done    * by checking that the sw queue is in the initial    * state (the queue is full). When the queue is full,    * all resources are back and this mean that the    * channel disconnect is now complete    */    if (!IX_ATMDACC_RXQ_ALL_RECYCLED(rxSwQueue))    {        returnStatus = IX_ATMDACC_RESOURCES_STILL_ALLOCATED;    }    return returnStatus;}/* ---------------------------------------------------------* tell the NPE to start receive on this channel and* update the lookup table*/IX_STATUSixAtmdAccRxCfgNpeVcLookupTableUpdate(unsigned int npeVcId){    unsigned int npeParam0;    unsigned int npeParam1;    IxAtmdAccRxVcDescriptor* vcDescriptor;    IX_STATUS returnStatus;    IxAtmRxQueueId atmdStreamId;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    ixAtmdAccUtilAtmdQIdGet(vcDescriptor->rxQueueId, &atmdStreamId);        npeParam0 =        (vcDescriptor->npeAalType << NPE_MSG_RX_ENABLE_TYPE_SHIFT) |        ((1 - atmdStreamId) << NPE_MSG_RX_ENABLE_RXQ_SHIFT) |        (vcDescriptor->rxFreeQueueId << NPE_MSG_RX_ENABLE_RXFREEQ_SHIFT) |        ((npeVcId) << NPE_MSG_RX_ENABLE_VCID_SHIFT);    npeParam1 =        (vcDescriptor->port << NPE_MSG_RX_ENABLE_PORT_SHIFT) |        (vcDescriptor->vpi << NPE_MSG_RX_ENABLE_VPI_SHIFT) |        (vcDescriptor->vci << NPE_MSG_RX_ENABLE_VCI_SHIFT);    returnStatus = ixAtmdAccUtilNpeMsgSend(IX_NPE_A_MSSG_ATM_RX_ENABLE,        npeParam0,        npeParam1);    return returnStatus;}/* ---------------------------------------------------------* check if Rx disconnect is in progress*/BOOLixAtmdAccRxCfgVcIsDisconnecting(unsigned int npeVcId){    IxAtmdAccRxVcDescriptor *vcDescriptor;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    return IX_ATMDACC_RX_DISCONNECTED (vcDescriptor->connId);}/* ---------------------------------------------------------* check if Rx Traffic is enabled*/BOOLixAtmdAccRxCfgVcIsEnabled(unsigned int npeVcId){    IxAtmdAccRxVcDescriptor *vcDescriptor;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    return vcDescriptor->status == IX_ATMDACC_RX_CHANNEL_UP;}/* ---------------------------------------------------------* Enable Rx Traffic*/voidixAtmdAccRxCfgVcEnable (unsigned int npeVcId){    IxAtmdAccRxVcDescriptor *vcDescriptor;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    vcDescriptor->status = IX_ATMDACC_RX_CHANNEL_UP;    /* update stats */    IX_ATMDACC_FULL_STATS( ixAtmdAccRxEnableCount++; );        return;}/* ---------------------------------------------------------* Enable Rx Traffic*/voidixAtmdAccRxCfgVcEnableRollback (unsigned int npeVcId){    IxAtmdAccRxVcDescriptor *vcDescriptor;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    vcDescriptor->status = IX_ATMDACC_RX_CHANNEL_DOWN;        return;}/* ---------------------------------------------------------* check if Rx Traffic is stopped*/BOOLixAtmdAccRxCfgVcIsDisabled(unsigned int npeVcId){    IxAtmdAccRxVcDescriptor *vcDescriptor;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    return vcDescriptor->status == IX_ATMDACC_RX_CHANNEL_DOWN;}/* ---------------------------------------------------------* disable Rx Traffic*/voidixAtmdAccRxCfgVcDisable(unsigned int npeVcId){    IxAtmdAccRxVcDescriptor *vcDescriptor;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    vcDescriptor->status = IX_ATMDACC_RX_CHANNEL_DOWN_PENDING;    /* update stats */    IX_ATMDACC_FULL_STATS( ixAtmdAccRxDisableCount++; );    return;}/* ---------------------------------------------------------* set a callback for rxfree events*/IX_STATUSixAtmdAccRxCfgRxFreeCallbackSet (unsigned int npeVcId,                                 unsigned int thresholdLevel,                                 IxAtmdAccRxVcFreeLowCallback callback){    IxAtmdAccRxVcDescriptor *vcDescriptor;    IxQMgrQId rxFreeQueueId;    IX_STATUS returnStatus = IX_SUCCESS;    unsigned int numberOfEntries;    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    rxFreeQueueId = vcDescriptor->rxFreeQueueId;    /* check the threshold level is above the current queue level */    if (thresholdLevel > (vcDescriptor->rxFreeQueueSize / 2))    {        returnStatus = IX_FAIL;    }    else    {        /* read the number from the queue manager */        returnStatus = ixQMgrQNumEntriesGet (rxFreeQueueId, &numberOfEntries);                /* read again the number of entries  */        if (returnStatus == IX_QMGR_WARNING)        {            returnStatus = ixQMgrQNumEntriesGet (rxFreeQueueId, &numberOfEntries);                        if (returnStatus == IX_QMGR_WARNING)            {                /* the queue is empty */                numberOfEntries = 0;                 returnStatus = IX_SUCCESS;            }        } /* end of if(returnStatus) */                if ((returnStatus != IX_SUCCESS) || (numberOfEntries <= thresholdLevel))        {        /* It will fail if the threshold level is above the current queue level         * because notifications will not trigger  when the first        * traffic will be received            */            returnStatus = IX_FAIL;        }        else        {            /* register the user callback */            vcDescriptor->rxFreeNotification = callback;                        if(ixAtmdAccUtilQmgrCallbackSet (rxFreeQueueId,                thresholdLevel,                thresholdLevel,                IX_QMGR_Q_SOURCE_ID_NE,                ixAtmdAccRxFreeCallback,                (IxQMgrCallbackId) npeVcId,                IX_QMGR_Q_PRIORITY_1) != IX_SUCCESS)            {                returnStatus = IX_FAIL;            }        }    }    return returnStatus;}/* ---------------------------------------------------------* set a callback for rx events*/IX_STATUSixAtmdAccRxCfgRxCallbackSet (IxAtmRxQueueId atmRxQueueId,                             IxQMgrQId qMgrQId,                             IxAtmdAccRxDispatcher callback){    IX_STATUS returnStatus = IX_SUCCESS;    /* register the new user callback */    ixAtmdAccRxUserCallback[atmRxQueueId] = callback;    if(ixAtmdAccUtilQmgrCallbackSet (qMgrQId,        0,        0,        IX_QMGR_Q_SOURCE_ID_NOT_E,        ixAtmdAccRxCallback,        (IxQMgrCallbackId) atmRxQueueId,        IX_QMGR_Q_PRIORITY_0) != IX_SUCCESS)    {        returnStatus = IX_FAIL;    }    return returnStatus;}/* ---------------------------------------------------------* Reset the callback for rx events*/IX_STATUSixAtmdAccRxCfgRxCallbackReset (IxAtmRxQueueId atmRxQueueId,                             IxQMgrQId qMgrQId){    /* register the new user callback */    ixAtmdAccRxUserCallback[atmRxQueueId] = ixAtmdAccRxDummyProcessPerform;    if (IX_SUCCESS != ixQMgrNotificationDisable (qMgrQId) )    {        return IX_FAIL;    }    return IX_SUCCESS;}/* ---------------------------------------------------------* Check if any Vcs exist*/BOOLixAtmdAccRxCfgRxVcsExist (void){    int vc;    BOOL returnValue = FALSE;    /* iterate through VC until found */    for (vc = 0; returnValue == FALSE && vc < IX_ATM_MAX_NUM_AAL_OAM_RX_VCS; vc++)    {        if (IX_ATMDACC_RX_VC_INUSE (ixAtmdAccRxVcDescriptor[vc].connId))        {            returnValue = TRUE;        }    }    return returnValue;}/* ---------------------------------------------------------* release all resources in the RxFree queue for this channel*/IX_STATUSixAtmdAccRxCfgResourcesRelease (unsigned int npeVcId){    IxAtmdAccNpeDescriptor *npeDescriptor;    UINT32 rxBitField;    IX_OSAL_MBUF *mbufPtr;    IX_OSAL_MBUF *mbufPtrTmp;    IX_STATUS returnStatus = IX_SUCCESS;    unsigned int qEntry;    IxAtmdAccRxVcDescriptor *vcDescriptor;    IX_ATMDACC_RX_QUEUE *rxSwQueue;       /* get the VC descriptor */    vcDescriptor = &ixAtmdAccRxVcDescriptor[npeVcId];    rxSwQueue = &vcDescriptor->queue;    /* test unreachable conditions */    IX_ATMDACC_ENSURE (npeVcId < IX_ATM_MAX_NUM_AAL_OAM_RX_VCS, "Invalid NpeVcId");    IX_ATMDACC_ENSURE (IX_ATMDACC_RX_VC_INUSE (vcDescriptor->connId), "Invalid ConnId");

⌨️ 快捷键说明

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