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

📄 ixatmdtxcfginfo.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 3 页
字号:
        }        break;    case IX_ATMDACC_PORT_DOWN_PENDING:        if (requestedState == IX_ATMD_PORT_ENABLED)        {            returnStatus = IX_FAIL;        }        else if (requestedState == IX_ATMD_PORT_DISABLED)        {            returnStatus = IX_ATMDACC_WARNING;        }        break;    case IX_ATMDACC_PORT_DOWN:        if (requestedState == IX_ATMD_PORT_ENABLED)        {            ixAtmdAccPortDescriptor[port].status = IX_ATMDACC_PORT_UP;            /* Are we guaranteed this will succeed */            if (ixAtmdAccUtilNpeMsgSend(IX_NPE_A_MSSG_ATM_TX_ENABLE,                port,                NPE_IGNORE) != IX_SUCCESS)            {                /* rollback the state change */                ixAtmdAccPortDescriptor[port].status = IX_ATMDACC_PORT_DOWN;                returnStatus = IX_FAIL;            } /* end of if(ixAtmdAccUtilNpeMsgSend) */        } /* end of if(requestedState) */        else if (requestedState == IX_ATMD_PORT_DISABLED)        {            returnStatus = IX_ATMDACC_WARNING;        }        break;    default:        IX_ATMDACC_ENSURE(0,"\nInvalid port state");        returnStatus = IX_FAIL;        break;    } /* end of switch(ixAtmdAccPortDescriptor) */    return returnStatus;}/* ----------------------------------------------------------* Handle port setup initiated by PortMgmt*/voidixAtmdAccTxPortSetupNotifyHandler(unsigned int numPort){    ixAtmdAccTxNumPortConfigured = numPort;}/* -------------------------------------------------* Check that the port is enabled*/BOOLixAtmdAccTxPortEnabledQuery(IxAtmLogicalPort port){    if (ixAtmdAccPortDescriptor[port].status == IX_ATMDACC_PORT_UP)    {        return TRUE;    }    return FALSE;}/* -------------------------------------------------* Check that the port is disabled*/BOOLixAtmdAccTxPortDisabledQuery(IxAtmLogicalPort port){    if (ixAtmdAccPortDescriptor[port].status == IX_ATMDACC_PORT_DOWN)    {        return TRUE;    }    return FALSE;}/* -------------------------------------------------* regsiter with the scheduler and obtain* a scheduler Id*/IX_STATUSixAtmdAccTxCfgSchVcIdGet (IxAtmLogicalPort port,                          unsigned int vpi,                          unsigned int vci,                          IxAtmConnId connId,                          IxAtmSchedulerVcId *schedulerVcIdPtr){    return (*ixAtmdAccPortDescriptor[port].schVcIdGet) (port,        vpi,        vci,        connId,        schedulerVcIdPtr);}/* --------------------------------------------------* Clear scheduler demand for this connection*/voidixAtmdAccTxCfgVcDemandCancel (IxAtmConnId connId,                              IxAtmLogicalPort port,                              IxAtmSchedulerVcId schedulerVcId){    unsigned int txId;    IxAtmdAccTxVcDescriptor *vcDescriptor;    txId = IX_ATMDACC_TX_VC_INDEX_GET (connId);    vcDescriptor = &ixAtmdAccTxVcDescriptor[txId];    /* check if the connId has been invalidated    * in this case demand will already have been cleared    * so we do nothing    */    if(connId == vcDescriptor->connId)    {        /* invoke the scheduler demand clear callback */        (*ixAtmdAccPortDescriptor[port].schDemandClear) (port,            schedulerVcId);    }    return;}/* --------------------------------------------------* Clear scheduler demand for this connection*/voidixAtmdAccTxCfgVcDemandClear (IxAtmConnId connId){    unsigned int txId;    IxAtmdAccTxVcDescriptor *vcDescriptor;    txId = IX_ATMDACC_TX_VC_INDEX_GET (connId);    vcDescriptor = &ixAtmdAccTxVcDescriptor[txId];    /* check if the connId has been invalidated    * in this case demand will already have been cleared    * so we do nothing    */    if(connId != vcDescriptor->connId)    {        /* invoke the scheduler demand clear callback */        (*ixAtmdAccPortDescriptor[vcDescriptor->port].schDemandClear) (vcDescriptor->port,            vcDescriptor->schedulerVcId);    }    return;}/* ---------------------------------------------------------* display the tx configuration*/voidixAtmdAccTxCfgInfoStatsShow (void){    int port;    unsigned int vc;    IX_STATUS returnStatus;    unsigned int numEntries;    printf("\n");    IX_ATMDACC_FULL_STATS(    printf ("Tx Low Default callback count .. : %10u (should be 0)\n",        ixAtmdAccTxLowDefaultCallbackCount);    printf("\n");    );    /* iterate through the VCs displaying interesting things */    for (vc = 0; vc < IX_ATM_MAX_NUM_AAL_OAM_TX_VCS; vc++)    {        if (IX_ATMDACC_TX_VC_INUSE (ixAtmdAccTxVcDescriptor[vc].connId))        {            IX_ATMDACC_TX_QUEUE *txSwQueue = &ixAtmdAccTxVcDescriptor[vc].queue;            char *stringAalType = "???????";            switch(ixAtmdAccTxVcDescriptor[vc].npeAalType)            {            case IX_NPE_A_AAL_TYPE_5:                stringAalType = "AAL5   ";                break;            case IX_NPE_A_AAL_TYPE_0_48:                stringAalType = "AAL0_48";                break;            case IX_NPE_A_AAL_TYPE_0_52:                stringAalType = "AAL0_52";                break;            case IX_NPE_A_AAL_TYPE_OAM:                stringAalType = "OAM    ";                break;            case IX_NPE_A_AAL_TYPE_INVALID:            default:                break;            }            /* display data about VC */            printf ("Tx Channel %u %s connId %8.8x schedulerId %d\n",                 vc,                stringAalType,                ixAtmdAccTxVcDescriptor[vc].connId,                ixAtmdAccTxVcDescriptor[vc].schedulerVcId);            printf ("   TxId %2u Port %2u Vpi %3u Vci %5u userId %8.8x\n",                vc,                ixAtmdAccTxVcDescriptor[vc].port,                ixAtmdAccTxVcDescriptor[vc].vpi,                ixAtmdAccTxVcDescriptor[vc].vci,                ixAtmdAccTxVcDescriptor[vc].callbackId);            printf ("   Descriptor head %10u >= mid %10u >= tail %10u\n",                txSwQueue->head,                txSwQueue->mid,                txSwQueue->tail);            IX_ATMDACC_FULL_STATS(            printf ("   Tx Submit Overflow %10u (should be 0)\n",                ixAtmdAccTxVcDescriptor[vc].txSubmitOverloadedCount);            printf ("   Tx Submit rejected %10u (should be 0)\n",                ixAtmdAccTxVcDescriptor[vc].txVcPduSubmitFailureCount);            );                    if (IX_ATMDACC_TXQ_OVERLOADED(txSwQueue))            {                printf("     Sw queue is full\n");            }            if (IX_ATMDACC_TXQ_SCHEDULE_PENDING(txSwQueue))            {                printf("     %u pdus need more scheduling\n",                     txSwQueue->mid - txSwQueue->tail);            }            if (IX_ATMDACC_TXQ_RECYCLE_PENDING(txSwQueue))            {                printf("     %u Pdus still in use in the NPE or txDone queue\n",                    txSwQueue->size - (txSwQueue->head - txSwQueue->tail));            }        } /* end of if(IX_ATMDACC_TX_VC_INUSE) */    } /* end of for(vc) */    printf("\n");    for (port = 0; port < IX_UTOPIA_MAX_PORTS; port++)    {        char *statusString = "?";        switch (ixAtmdAccPortDescriptor[port].status)        {        case IX_ATMDACC_PORT_DOWN:            statusString = "Down";            break;        case IX_ATMDACC_PORT_UP:            statusString = "Up";            break;        case IX_ATMDACC_PORT_DOWN_PENDING:            statusString = "Down pending";            break;        } /* end of switch(ixAtmdAccPortDescriptor) */        printf ("Port %2u status %s TxQueue %2u TxThreshold %2u\n",            port,            statusString,            ixAtmdAccPortDescriptor[port].txQueueId,            ixAtmdAccPortDescriptor[port].txQueueThreshold);        IX_ATMDACC_FULL_STATS(        /* display port stats */        if ((ixAtmdAccTxTransportStats[port].dataCellScheduledCount == 0) &&            (ixAtmdAccTxTransportStats[port].idleCellScheduledCount == 0))        {            printf("   No Tx traffic\n");        }        else        {            printf ("   Tx Process invoke .............. : %10u\n",                ixAtmdAccTxTransportStats[port].txProcessInvokeCount);            printf ("   Tx Process failed .............. : %10u (should be 0)\n",                ixAtmdAccTxTransportStats[port].txProcessFailedCount);            printf ("   Tx Pdu scheduled ............... : %10u\n",                ixAtmdAccTxTransportStats[port].pduScheduledCount);            printf ("   Tx Data Cell Scheduled ......... : %10u\n",                ixAtmdAccTxTransportStats[port].dataCellScheduledCount);            printf ("   Tx Idle cell Scheduled.......... : %10u\n",                ixAtmdAccTxTransportStats[port].idleCellScheduledCount);            printf ("   Tx Scheduled during disconnect . : %10u\n",                ixAtmdAccTxTransportStats[port].disconnectScheduledCount);            printf ("   Tx Over Scheduled .............. : %10u (should be 0)\n",                ixAtmdAccTxTransportStats[port].overScheduledCellCount);            printf ("   Tx Zero cell Scheduled.......... : %10u (should be 0)\n",                ixAtmdAccTxTransportStats[port].zeroCellCount);            printf ("   Tx UnderScheduled............... : %10u (should be 0)\n",                ixAtmdAccTxTransportStats[port].txProcessUnderscheduledCount);            printf ("   Tx Wrong connId Scheduled....... : %10u (should be 0)\n",                ixAtmdAccTxTransportStats[port].wrongConnIdScheduledCount);        });        /* get the current number of entries */        returnStatus = ixQMgrQNumEntriesGet (ixAtmdAccPortDescriptor[port].txQueueId, &numEntries);                /* read again the number of entries  */        if (returnStatus == IX_QMGR_WARNING)        {            returnStatus = ixQMgrQNumEntriesGet (ixAtmdAccPortDescriptor[port].txQueueId, &numEntries);                    } /* end of if(returnStatus) */        if (returnStatus != IX_SUCCESS)        {            printf ("   Tx Queue level ................. : N/A\n");        }        else        {            printf ("   Tx Queue level ................. : %10u\n", numEntries);        } /* end of if-else(returnStatus) */    } /* end of for(port) */    IX_ATMDACC_FULL_STATS(    printf ("Tx Done queue ............................. : %10u\n",        IX_NPE_A_QMQ_ATM_TX_DONE);    printf ("Tx Done Dispatch invoke ................... : %10u\n",        ixAtmdAccTxDoneDispatchStats.invokeCount);    printf ("Tx Done Dispatch failed ................... : %10u (should be 0)\n",        ixAtmdAccTxDoneDispatchStats.failedCount);    printf ("Tx Done descriptors missing ............... : %10u (should be 0)\n",        ixAtmdAccTxDoneDispatchStats.descriptorOrderErrorCount);    printf ("Tx Done Pdu received    ................... : %10u\n",        ixAtmdAccTxDoneDispatchStats.pduCount);    printf ("Tx Done TxDisableAck received ............. : %10u\n",        ixAtmdAccTxDoneDispatchStats.ackCount);    printf ("Tx Done Max pdu per dispatch .............. : %10u\n",        ixAtmdAccTxDoneDispatchStats.maxPduPerDispatch);    printf ("Tx Done Default callback count ............ : %10u (should be 0)\n",        ixAtmdAccTxDoneDefaultCallbackCount);    );    returnStatus = ixQMgrQNumEntriesGet (IX_NPE_A_QMQ_ATM_TX_DONE, &numEntries);        /* read again the number of entries, if needed */    if (returnStatus == IX_QMGR_WARNING)    {        returnStatus = ixQMgrQNumEntriesGet (IX_NPE_A_QMQ_ATM_TX_DONE, &numEntries);    }        if (returnStatus == IX_QMGR_WARNING)    {        printf ("Tx Done Queue level ........................  N/A\n");    }    else    {        printf ("Tx Done Queue level ....................... : %10u\n", numEntries);    }    printf("\n");}/* ---------------------------------------------------------* display the tx configuration*/voidixAtmdAccTxCfgInfoPortShow (IxAtmLogicalPort port){    char *statusString = "?";        switch (ixAtmdAccPortDescriptor[port].status)    {    case IX_ATMDACC_PORT_DOWN:        statusString = "DOWN";        break;    case IX_ATMDACC_PORT_UP:        statusString = "Up";        break;    case IX_ATMDACC_PORT_DOWN_PENDING:        statusString = "DOWN PENDING";        break;    } /* end of switch(ixAtmdAccPortDescriptor) */        printf ("Port %2u status %s\n",        port,        statusString);}/* ---------------------------------------------------------* display the tx configuration*/voidixAtmdAccTxCfgInfoChannelShow (IxAtmLogicalPort port){    unsigned int vc;    /* iterate through the VCs for this port */    for (vc = 0; vc < IX_ATM_MAX_NUM_AAL_OAM_TX_VCS; vc++)    {        if (IX_ATMDACC_TX_VC_INUSE (ixAtmdAccTxVcDescriptor[vc].connId))        {            if (ixAtmdAccTxVcDescriptor[vc].port == port)            {                IX_ATMDACC_TX_QUEUE *txSwQueue = &ixAtmdAccTxVcDescriptor[vc].queue;                char *stringAalType = "???????";                switch(ixAtmdAccTxVcDescriptor[vc].npeAalType)                {                case IX_NPE_A_AAL_TYPE_5:                    stringAalType = "AAL5   ";                    break;                case IX_NPE_A_AAL_TYPE_0_48:                    stringAalType = "AAL0_48";                    break;                case IX_NPE_A_AAL_TYPE_0_52:                    stringAalType = "AAL0_52";                    break;                case IX_NPE_A_AAL_TYPE_OAM:                    stringAalType = "OAM    ";                    break;                case IX_NPE_A_AAL_TYPE_INVALID:                default:                    break;                }                                /* display data about VC */                printf ("   Tx Channel %2u %s ConnId 0x%8.8x UserId 0x%8.8x\n",                    vc,                    stringAalType,                    ixAtmdAccTxVcDescriptor[vc].connId,                    ixAtmdAccTxVcDescriptor[vc].callbackId);                /* display data about VC */                printf ("      Vpi %3u Vci %5u PDUsTx %10u PDUsTxd %10u\n",                    ixAtmdAccTxVcDescriptor[vc].vpi,                    ixAtmdAccTxVcDescriptor[vc].vci,                    txSwQueue->mid,                    txSwQueue->tail);            }        }    }}

⌨️ 快捷键说明

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