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

📄 ixatmdtxcfgif.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 2 页
字号:
/*** @file ixAtmdTxCfgIf.c* * @author Intel Corporation* @date 17 March 2002** @brief ATM TX configuration and management** Client interface for Tx configuration** Design Notes:*    All function share the same local lock* *  * @par * IXP400 SW Release version 2.1 *  * -- Copyright Notice -- *  * @par * Copyright (c) 2001-2005, Intel Corporation. * All rights reserved. *  * @par * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the Intel Corporation nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  *  * @par * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  *  * @par * -- End of Copyright Notice --*//** Sytem defined include files*//** Put the user defined include files required.*/#include "IxOsal.h"#include "IxAtmdAccCtrl.h"#include "IxAtmdAssert_p.h"#include "IxAtmdTxCfgInfo_p.h"#include "IxAtmdTxCfgIf_p.h"#include "IxAtmdPortMgmt_p.h"#include "IxAtmdUtil_p.h"#include "IxAtmdNpe_p.h"/**** @struct IxAtmdAccTxStats** @brief Tx ststs** This structure is used to collect stats informations abour tx activity**/typedef struct{    /* tx control counters */    unsigned int connectCount;    unsigned int disconnectCount;    unsigned int connectDenied;    unsigned int disconnectDenied;} IxAtmdAccTxStats;static IxAtmdAccTxStats ixAtmdAccTxStats;static BOOL ixAtmdAccTxCfgInitDone = FALSE;/* ------------------------------------------------tx lock get and release*/static IxOsalMutex txControlLock;#define IX_ATMDACC_TX_LOCK_INIT() \ixOsalMutexInit (&txControlLock)#define IX_ATMDACC_TX_LOCK_GET() \(void)ixOsalMutexLock (&txControlLock, IX_OSAL_WAIT_FOREVER)#define IX_ATMDACC_TX_LOCK_RELEASE() \(void)ixOsalMutexUnlock (&txControlLock)/* function prototype */PRIVATE BOOLixAtmdAccTxPortIsEnabledCheck(IxAtmLogicalPort port);PRIVATE BOOLixAtmdAccTxPortIsDisabledCheck(IxAtmLogicalPort port);PRIVATE IX_STATUSixAtmdAccTxPortStateChange(IxAtmLogicalPort port, IxAtmdAccPortState requestedState);PRIVATE voidixAtmdAccTxPortSetupNotify(unsigned int numPort);PRIVATE IX_STATUSixAtmdAccTxVcConnectParamsValidate (IxAtmLogicalPort port,                                    unsigned int vpi,                                    unsigned int vci,                                    IxAtmdAccAalType aalServiceType,                                    IxAtmdAccTxVcBufferReturnCallback txDoneCallback,                                    IxAtmConnId * connIdPtr);PRIVATE IX_STATUSixAtmdAccTxVcConnectPerform (IxAtmLogicalPort port,                             unsigned int vpi,                             unsigned int vci,                             IxAtmdAccAalType aalServiceType,                             IxAtmdAccUserId userId,                             IxAtmdAccTxVcBufferReturnCallback txDoneCallback,                             IxAtmConnId * connIdPtr);PUBLIC IX_STATUSixAtmdAccPortTxScheduledModeEnablePararmsValidate (IxAtmLogicalPort port,                                                   IxAtmdAccTxVcDemandUpdateCallback demandUpdate,                                                   IxAtmdAccTxVcDemandClearCallback demandClear,                                                   IxAtmdAccTxSchVcIdGetCallback vcIdGet);/* ------------------------------------------------------* definition of private functions*//* ------------------------------------------------------* Query the if the port is enabled safely with locks*/PRIVATE BOOLixAtmdAccTxPortIsEnabledCheck(IxAtmLogicalPort port){    BOOL result;    IX_ATMDACC_TX_LOCK_GET ();    result = ixAtmdAccTxPortEnabledQuery(port);    IX_ATMDACC_TX_LOCK_RELEASE ();    return result;}/* ------------------------------------------------------* Query the if the port is disabled safely with locks*/PRIVATE BOOLixAtmdAccTxPortIsDisabledCheck(IxAtmLogicalPort port){    BOOL result;    IX_ATMDACC_TX_LOCK_GET ();    result = ixAtmdAccTxPortDisabledQuery(port);    IX_ATMDACC_TX_LOCK_RELEASE ();    return result;}/* ------------------------------------------------------* Change the port state, safely within locks*/PRIVATE IX_STATUSixAtmdAccTxPortStateChange(IxAtmLogicalPort port, IxAtmdAccPortState requestedState){    IX_STATUS returnStatus;    IX_ATMDACC_TX_LOCK_GET ();    returnStatus = ixAtmdAccTxPortStateChangeHandler(port, requestedState);    IX_ATMDACC_TX_LOCK_RELEASE ();    return returnStatus;}/* ------------------------------------------------------* Set the number of ports configured in the system*/PRIVATE voidixAtmdAccTxPortSetupNotify(unsigned int numPort){    IX_ATMDACC_TX_LOCK_GET ();    ixAtmdAccTxPortSetupNotifyHandler(numPort);    IX_ATMDACC_TX_LOCK_RELEASE ();    return;}/* -------------------------------------------*   Initialise the tx subcomponent*/IX_STATUSixAtmdAccTxCfgIfInit (void){    IX_STATUS returnStatus = IX_SUCCESS;    /* reset statistics counters */    ixAtmdAccTxCfgIfStatsReset ();    /* initialise tx data structures */    if((ixAtmdAccTxCfgInitDone == FALSE)        && (ixAtmdAccTxCfgInfoInit () == IX_SUCCESS) &&        (ixOsalMutexInit (&txControlLock) == IX_SUCCESS))    {        /* register port state interface to port management */        ixAtmdAccPortStateHandlersRegister(            ixAtmdAccTxPortSetupNotify,            ixAtmdAccTxPortStateChange,            ixAtmdAccTxPortIsEnabledCheck,            ixAtmdAccTxPortIsDisabledCheck);        /* initialisae a security flag */        ixAtmdAccTxCfgInitDone = TRUE;    }    else    {        returnStatus = IX_FAIL;    } /* end of if-else(powerOf2) */    return returnStatus;}/* -------------------------------------------*   Uninitialise the tx subcomponent*/IX_STATUSixAtmdAccTxCfgIfUninit (void){    IX_STATUS returnStatus = IX_SUCCESS;      /* uninitialise tx data structures */    if ((TRUE == ixAtmdAccTxCfgInitDone))    {        /* unregister port state interface to port management */        ixAtmdAccPortStateHandlersUnregister ();        if (IX_SUCCESS == ixOsalMutexDestroy (&txControlLock))        {            /* uninitialisae the security flag */            ixAtmdAccTxCfgInitDone = FALSE;        }        else        {            returnStatus = IX_FAIL;        }    }    else    {        returnStatus = IX_FAIL;    } /* end of if-else */    return returnStatus;}/* -----------------------------------------------------*   display tx statistics*/voidixAtmdAccTxCfgIfStatsShow (void){    IxAtmdAccTxStats statsSnapshot;        if(ixAtmdAccTxCfgInitDone)    {        /* get a stats snapshot */        IX_ATMDACC_TX_LOCK_GET ();                statsSnapshot = ixAtmdAccTxStats;                IX_ATMDACC_TX_LOCK_RELEASE ();                printf ("AtmdTx\n");        printf ("Tx Connect ok ................. : %10u\n",            statsSnapshot.connectCount);        printf ("Tx Disconnect ok .............. : %10u\n",            statsSnapshot.disconnectCount);        printf ("Tx Connect denied ............. : %10u (should be 0)\n",            statsSnapshot.connectDenied);        printf ("Tx Disconnect denied .......... : %10u\n",            statsSnapshot.disconnectDenied);                ixAtmdAccTxCfgInfoStatsShow ();    }}/* -----------------------------------------------------*   display tx configuration*/voidixAtmdAccTxCfgIfPortShow (IxAtmLogicalPort port){    if(ixAtmdAccTxCfgInitDone)    {        IX_ATMDACC_TX_LOCK_GET ();                ixAtmdAccTxCfgInfoPortShow (port);                IX_ATMDACC_TX_LOCK_RELEASE ();    }}/* -----------------------------------------------------*   display tx configuration*/voidixAtmdAccTxCfgIfChannelShow (IxAtmLogicalPort port){    if(ixAtmdAccTxCfgInitDone)    {        IX_ATMDACC_TX_LOCK_GET ();                ixAtmdAccTxCfgInfoChannelShow (port);                IX_ATMDACC_TX_LOCK_RELEASE ();    }}/* -----------------------------------------------------*   reset tx statistics*/voidixAtmdAccTxCfgIfStatsReset (void){    /* initialise the error counters */    ixOsalMemSet(&ixAtmdAccTxStats, 0, sizeof(ixAtmdAccTxStats));    /* initialise the stats of the dependant component */    ixAtmdAccTxCfgInfoStatsReset();}/* -----------------------------------------------*   validate inputs for ixAtmdAccTxVcConnect*/PRIVATE IX_STATUSixAtmdAccTxVcConnectParamsValidate (IxAtmLogicalPort port,                                    unsigned int vpi,                                    unsigned int vci,                                    IxAtmdAccAalType aalServiceType,                                    IxAtmdAccTxVcBufferReturnCallback txDoneCallback,                                    IxAtmConnId * connIdPtr){    /* Sanity check input params */    if ((port >= IX_UTOPIA_MAX_PORTS)    ||        (port < IX_UTOPIA_PORT_0)        ||        (vpi > IX_ATM_MAX_VPI)           ||        (vci > IX_ATM_MAX_VCI)           ||        (txDoneCallback == NULL)         ||        (connIdPtr == NULL))    {        return IX_FAIL;    }        /* Service specific checks */    switch(aalServiceType)    {        case IX_ATMDACC_AAL5:    case IX_ATMDACC_AAL0_48:    case IX_ATMDACC_AAL0_52:        if ((vpi  == IX_ATMDACC_OAM_TX_VPI)   &&            (vci  == IX_ATMDACC_OAM_TX_VCI))        {            return IX_FAIL;        }        break;    case IX_ATMDACC_OAM:        if ((vpi  != IX_ATMDACC_OAM_TX_VPI)   ||            (vci  != IX_ATMDACC_OAM_TX_VCI))        {            return IX_FAIL;        }        break;    default:

⌨️ 快捷键说明

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