mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 15:37:23 +00:00
796 lines
28 KiB
C
796 lines
28 KiB
C
|
/**
|
||
|
* @file IxAtmm.h
|
||
|
*
|
||
|
* @date 3-DEC-2001
|
||
|
*
|
||
|
* @brief Header file for the IXP400 ATM Manager component (IxAtmm)
|
||
|
*
|
||
|
*
|
||
|
* @par
|
||
|
* IXP400 SW Release version 2.0
|
||
|
*
|
||
|
* -- Copyright Notice --
|
||
|
*
|
||
|
* @par
|
||
|
* Copyright 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 --
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @defgroup IxAtmm IXP400 ATM Manager (IxAtmm) API
|
||
|
*
|
||
|
* @brief IXP400 ATM Manager component Public API
|
||
|
*
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
#ifndef IXATMM_H
|
||
|
#define IXATMM_H
|
||
|
|
||
|
/*
|
||
|
* Put the user defined include files required
|
||
|
*/
|
||
|
#include "IxAtmSch.h"
|
||
|
#include "IxOsalTypes.h"
|
||
|
|
||
|
/*
|
||
|
* #defines and macros used in this file.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_ALREADY_INITIALIZED
|
||
|
*
|
||
|
* @brief Component has already been initialized
|
||
|
*/
|
||
|
#define IX_ATMM_RET_ALREADY_INITIALIZED 2
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_INVALID_PORT
|
||
|
*
|
||
|
* @brief Specified port does not exist or is out of range */
|
||
|
#define IX_ATMM_RET_INVALID_PORT 3
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_INVALID_VC_DESCRIPTOR
|
||
|
*
|
||
|
* @brief The VC description does not adhere to ATM standards */
|
||
|
#define IX_ATMM_RET_INVALID_VC_DESCRIPTOR 4
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_VC_CONFLICT
|
||
|
*
|
||
|
* @brief The VPI/VCI values supplied are either reserved, or they
|
||
|
* conflict with a previously registered VC on this port */
|
||
|
#define IX_ATMM_RET_VC_CONFLICT 5
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_PORT_CAPACITY_IS_FULL
|
||
|
*
|
||
|
* @brief The virtual connection cannot be established on the port
|
||
|
* because the remaining port capacity is not sufficient to
|
||
|
* support it */
|
||
|
#define IX_ATMM_RET_PORT_CAPACITY_IS_FULL 6
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_NO_SUCH_VC
|
||
|
*
|
||
|
* @brief No registered VC, as described by the supplied VCI/VPI or
|
||
|
* VC identifier values, exists on this port */
|
||
|
#define IX_ATMM_RET_NO_SUCH_VC 7
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_INVALID_VC_ID
|
||
|
*
|
||
|
* @brief The specified VC identifier is out of range. */
|
||
|
#define IX_ATMM_RET_INVALID_VC_ID 8
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_RET_INVALID_PARAM_PTR
|
||
|
*
|
||
|
* @brief A pointer parameter was NULL. */
|
||
|
#define IX_ATMM_RET_INVALID_PARAM_PTR 9
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_UTOPIA_SPHY_ADDR
|
||
|
*
|
||
|
* @brief The phy address when in SPHY mode */
|
||
|
#define IX_ATMM_UTOPIA_SPHY_ADDR 31
|
||
|
|
||
|
/**
|
||
|
* @def IX_ATMM_THREAD_PRI_HIGH
|
||
|
*
|
||
|
* @brief The value of high priority thread */
|
||
|
#define IX_ATMM_THREAD_PRI_HIGH 90
|
||
|
|
||
|
/*
|
||
|
* Typedefs whose scope is limited to this file.
|
||
|
*/
|
||
|
|
||
|
/** @brief Definition for use in the @ref IxAtmmVc structure.
|
||
|
* Indicates the direction of a VC */
|
||
|
typedef enum
|
||
|
{
|
||
|
IX_ATMM_VC_DIRECTION_TX=0, /**< Atmm Vc direction transmit*/
|
||
|
IX_ATMM_VC_DIRECTION_RX, /**< Atmm Vc direction receive*/
|
||
|
IX_ATMM_VC_DIRECTION_INVALID /**< Atmm Vc direction invalid*/
|
||
|
} IxAtmmVcDirection;
|
||
|
|
||
|
/** @brief Definition for use with @ref IxAtmmVcChangeCallback
|
||
|
* callback. Indicates that the event type represented by the
|
||
|
* callback for this VC. */
|
||
|
typedef enum
|
||
|
{
|
||
|
IX_ATMM_VC_CHANGE_EVENT_REGISTER=0, /**< Atmm Vc event register*/
|
||
|
IX_ATMM_VC_CHANGE_EVENT_DEREGISTER, /**< Atmm Vc event de-register*/
|
||
|
IX_ATMM_VC_CHANGE_EVENT_INVALID /**< Atmm Vc event invalid*/
|
||
|
} IxAtmmVcChangeEvent;
|
||
|
|
||
|
/** @brief Definitions for use with @ref ixAtmmUTOPIAInit interface to
|
||
|
* indicate that UTOPIA loopback should be enabled or disabled
|
||
|
* on initialisation. */
|
||
|
typedef enum
|
||
|
{
|
||
|
IX_ATMM_UTOPIA_LOOPBACK_DISABLED=0, /**< Atmm Utopia loopback mode disabled*/
|
||
|
IX_ATMM_UTOPIA_LOOPBACK_ENABLED, /**< Atmm Utopia loopback mode enabled*/
|
||
|
IX_ATMM_UTOPIA_LOOPBACK_INVALID /**< Atmm Utopia loopback mode invalid*/
|
||
|
} IxAtmmUtopiaLoopbackMode;
|
||
|
|
||
|
/** @brief This structure describes the required attributes of a
|
||
|
* virtual connection.
|
||
|
*/
|
||
|
typedef struct {
|
||
|
unsigned vpi; /**< VPI value of this virtual connection */
|
||
|
unsigned vci; /**< VCI value of this virtual connection. */
|
||
|
IxAtmmVcDirection direction; /**< VC direction */
|
||
|
|
||
|
/** Traffic descriptor of this virtual connection. This structure
|
||
|
* is defined by the @ref IxAtmSch component. */
|
||
|
IxAtmTrafficDescriptor trafficDesc;
|
||
|
} IxAtmmVc;
|
||
|
|
||
|
|
||
|
/** @brief Definitions for use with @ref ixAtmmUtopiaInit interface to
|
||
|
* indicate that UTOPIA multi-phy/single-phy mode is used.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
IX_ATMM_MPHY_MODE = 0, /**< Atmm phy mode mphy*/
|
||
|
IX_ATMM_SPHY_MODE, /**< Atmm phy mode sphy*/
|
||
|
IX_ATMM_PHY_MODE_INVALID /**< Atmm phy mode invalid*/
|
||
|
} IxAtmmPhyMode;
|
||
|
|
||
|
|
||
|
/** @brief Structure contains port-specific information required to
|
||
|
* initialize IxAtmm, and specifically, the IXP400 UTOPIA
|
||
|
* Level-2 device. */
|
||
|
typedef struct {
|
||
|
unsigned reserved_1:11; /**< [31:21] Should be zero */
|
||
|
unsigned UtopiaTxPhyAddr:5; /**< [20:16] Address of the
|
||
|
* transmit (Tx) PHY for this
|
||
|
* port on the 5-bit UTOPIA
|
||
|
* Level-2 address bus */
|
||
|
unsigned reserved_2:11; /**< [15:5] Should be zero */
|
||
|
unsigned UtopiaRxPhyAddr:5; /**< [4:0] Address of the receive
|
||
|
* (Rx) PHY for this port on the
|
||
|
* 5-bit UTOPIA Level-2
|
||
|
* address bus */
|
||
|
} IxAtmmPortCfg;
|
||
|
|
||
|
/** @brief Callback type used with @ref ixAtmmVcChangeCallbackRegister interface
|
||
|
* Defines a callback type which will be used to notify registered
|
||
|
* users of registration/deregistration events on a particular port
|
||
|
*
|
||
|
* @param eventType @ref IxAtmmVcChangeEvent [in] - Event indicating
|
||
|
* whether the VC supplied has been added or
|
||
|
* removed
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the port on which the event has
|
||
|
* occurred
|
||
|
*
|
||
|
* @param vcChanged @ref IxAtmmVc* [in] - Pointer to a structure which gives
|
||
|
* details of the VC which has been added
|
||
|
* or removed on the port
|
||
|
*/
|
||
|
typedef void (*IxAtmmVcChangeCallback) (IxAtmmVcChangeEvent eventType,
|
||
|
IxAtmLogicalPort port,
|
||
|
const IxAtmmVc* vcChanged);
|
||
|
|
||
|
/*
|
||
|
* Variable declarations global to this file only. Externs are followed by
|
||
|
* static variables.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Extern function prototypes
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Function declarations
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmInit (void)
|
||
|
*
|
||
|
* @brief Interface to initialize the IxAtmm software component. Can
|
||
|
* be called once only.
|
||
|
*
|
||
|
* Must be called before any other IxAtmm API is called.
|
||
|
*
|
||
|
* @param "none"
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : IxAtmm has been successfully initialized.
|
||
|
* Calls to other IxAtmm interfaces may now be performed.
|
||
|
* @return @li IX_FAIL : IxAtmm has already been initialized.
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmInit (void);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmUtopiaInit (unsigned numPorts,
|
||
|
IxAtmmPhyMode phyMode,
|
||
|
IxAtmmPortCfg portCfgs[],
|
||
|
IxAtmmUtopiaLoopbackMode loopbackMode)
|
||
|
*
|
||
|
* @brief Interface to initialize the UTOPIA Level-2 ATM coprocessor
|
||
|
* for the specified number of physical ports. The function
|
||
|
* must be called before the ixAtmmPortInitialize interface
|
||
|
* can operate successfully.
|
||
|
*
|
||
|
* @param numPorts unsigned [in] - Indicates the total number of logical
|
||
|
* ports that are active on the device. Up to 12 ports are
|
||
|
* supported.
|
||
|
*
|
||
|
* @param phyMode @ref IxAtmmPhyMode [in] - Put the Utopia coprocessor in SPHY
|
||
|
* or MPHY mode.
|
||
|
*
|
||
|
* @param portCfgs[] @ref IxAtmmPortCfg [in] - Pointer to an array of elements
|
||
|
* detailing the UTOPIA specific port characteristics. The
|
||
|
* length of the array must be equal to the number of ports
|
||
|
* activated. ATM ports are referred to by the relevant
|
||
|
* offset in this array in all subsequent IxAtmm interface
|
||
|
* calls.
|
||
|
*
|
||
|
* @param loopbackMode @ref IxAtmmUtopiaLoopbackMode [in] - Value must be one of
|
||
|
* @ref IX_ATMM_UTOPIA_LOOPBACK_ENABLED or @ref
|
||
|
* IX_ATMM_UTOPIA_LOOPBACK_DISABLED indicating whether
|
||
|
* loopback should be enabled on the device. Loopback can
|
||
|
* only be supported on a single PHY, therefore the numPorts
|
||
|
* parameter must be 1 if loopback is enabled.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : Indicates that the UTOPIA device has been
|
||
|
* successfully initialized for the supplied ports.
|
||
|
* @return @li IX_ATMM_RET_ALREADY_INITIALIZED : The UTOPIA device has
|
||
|
* already been initialized.
|
||
|
* @return @li IX_FAIL : The supplied parameters are invalid or have been
|
||
|
* rejected by the UTOPIA-NPE device.
|
||
|
*
|
||
|
* @warning
|
||
|
* This interface may only be called once.
|
||
|
* Port identifiers are assumed to range from 0 to (numPorts - 1) in all
|
||
|
* instances.
|
||
|
* In all subsequent calls to interfaces supplied by IxAtmm, the specified
|
||
|
* port value is expected to represent the offset in the portCfgs array
|
||
|
* specified in this interface. i.e. The first port in this array will
|
||
|
* subsequently be represented as port 0, the second port as port 1,
|
||
|
* and so on.*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmUtopiaInit (unsigned numPorts,
|
||
|
IxAtmmPhyMode phyMode,
|
||
|
IxAtmmPortCfg portCfgs[],
|
||
|
IxAtmmUtopiaLoopbackMode loopbackMode);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmPortInitialize (IxAtmLogicalPort port,
|
||
|
unsigned txPortRate,
|
||
|
unsigned rxPortRate)
|
||
|
*
|
||
|
* @brief The interface is called following @ref ixAtmmUtopiaInit ()
|
||
|
* and before calls to any other IxAtmm interface. It serves
|
||
|
* to activate the registered ATM port with IxAtmm.
|
||
|
*
|
||
|
* The transmit and receive port rates are specified in bits per
|
||
|
* second. This translates to ATM cells per second according to the
|
||
|
* following formula: CellsPerSecond = portRate / (53*8) The
|
||
|
* IXP400 device supports only 53 byte cells. The client shall make
|
||
|
* sure that the off-chip physical layer device has already been
|
||
|
* initialized.
|
||
|
*
|
||
|
* IxAtmm will configure IxAtmdAcc and IxAtmSch to enable scheduling
|
||
|
* on the port.
|
||
|
*
|
||
|
* This interface must be called once for each active port in the
|
||
|
* system. The first time the interface is invoked, it will configure
|
||
|
* the mechanism by which the handling of transmit, transmit-done and
|
||
|
* receive are driven with the IxAtmdAcc component.
|
||
|
*
|
||
|
* This function is reentrant.
|
||
|
*
|
||
|
* @note The minimum tx rate that will be accepted is 424 bit/s which equates
|
||
|
* to 1 cell (53 bytes) per second.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Identifies the port which is to be
|
||
|
* initialized.
|
||
|
*
|
||
|
* @param txPortRate unsigned [in] - Value specifies the
|
||
|
* transmit port rate for this port in
|
||
|
* bits/second. This value is used by the ATM Scheduler
|
||
|
* component is evaluating VC access requests for the port.
|
||
|
*
|
||
|
* @param rxPortRate unsigned [in] - Value specifies the
|
||
|
* receive port rate for this port in bits/second.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The specificed ATM port has been successfully
|
||
|
* initialized. IxAtmm is ready to accept VC registrations on
|
||
|
* this port.
|
||
|
*
|
||
|
* @return @li IX_ATMM_RET_ALREADY_INITIALIZED : ixAtmmPortInitialize has
|
||
|
* already been called successfully on this port. The current
|
||
|
* call is rejected.
|
||
|
*
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid. The request is rejected.
|
||
|
*
|
||
|
* @return @li IX_FAIL : IxAtmm could not initialize the port because the
|
||
|
* inputs are not understood.
|
||
|
*
|
||
|
* @sa ixAtmmPortEnable, ixAtmmPortDisable
|
||
|
*
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmPortInitialize (IxAtmLogicalPort port,
|
||
|
unsigned txPortRate,
|
||
|
unsigned rxPortRate);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmPortModify (IxAtmLogicalPort port,
|
||
|
unsigned txPortRate,
|
||
|
unsigned rxPortRate)
|
||
|
*
|
||
|
* @brief A client may call this interface to change the existing
|
||
|
* port rate (expressed in bits/second) on an established ATM
|
||
|
* port.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Identifies the port which is to be
|
||
|
* initialized.
|
||
|
*
|
||
|
* @param txPortRate unsigned [in] - Value specifies the``
|
||
|
* transmit port rate for this port in
|
||
|
* bits/second. This value is used by the ATM Scheduler
|
||
|
* component is evaluating VC access requests for the port.
|
||
|
*
|
||
|
* @param rxPortRate unsigned [in] - Value specifies the
|
||
|
* receive port rate for this port in
|
||
|
* bits/second.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The indicated ATM port rates have been
|
||
|
* successfully modified.
|
||
|
*
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid. The request is rejected.
|
||
|
*
|
||
|
* @return @li IX_FAIL : IxAtmm could not update the port because the
|
||
|
* inputs are not understood, or the interface was called before
|
||
|
* the port was initialized. */
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmPortModify (IxAtmLogicalPort port,
|
||
|
unsigned txPortRate,
|
||
|
unsigned rxPortRate);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmPortQuery (IxAtmLogicalPort port,
|
||
|
unsigned *txPortRate,
|
||
|
unsigned *rxPortRate);
|
||
|
|
||
|
*
|
||
|
* @brief The client may call this interface to request details on
|
||
|
* currently registered transmit and receive rates for an ATM
|
||
|
* port.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Value identifies the port from which the
|
||
|
* rate details are requested.
|
||
|
*
|
||
|
* @param *txPortRate unsigned [out] - Pointer to a value
|
||
|
* which will be filled with the value of the transmit port
|
||
|
* rate specified in bits/second.
|
||
|
*
|
||
|
* @param *rxPortRate unsigned [out] - Pointer to a value
|
||
|
* which will be filled with the value of the receive port
|
||
|
* rate specified in bits/second.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The information requested on the specified
|
||
|
* port has been successfully supplied in the output.
|
||
|
*
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid. The request is rejected.
|
||
|
*
|
||
|
* @return @li IX_ATMM_RET_INVALID_PARAM_PTR : A pointer parameter was
|
||
|
* NULL.
|
||
|
*
|
||
|
* @return @li IX_FAIL : IxAtmm could not update the port because the
|
||
|
* inputs are not understood, or the interface was called before
|
||
|
* the port was initialized. */
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmPortQuery (IxAtmLogicalPort port,
|
||
|
unsigned *txPortRate,
|
||
|
unsigned *rxPortRate);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmPortEnable(IxAtmLogicalPort port)
|
||
|
*
|
||
|
* @brief The client call this interface to enable transmit for an ATM
|
||
|
* port. At initialisation, all the ports are disabled.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Value identifies the port
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : Transmission over this port is started.
|
||
|
*
|
||
|
* @return @li IX_FAIL : The port parameter is not valid, or the
|
||
|
* port is already enabled
|
||
|
*
|
||
|
* @note - When a port is disabled, Rx and Tx VC Connect requests will fail
|
||
|
*
|
||
|
* @note - This function uses system resources and should not be used
|
||
|
* inside an interrupt context.
|
||
|
*
|
||
|
* @sa ixAtmmPortDisable */
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmPortEnable(IxAtmLogicalPort port);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmPortDisable(IxAtmLogicalPort port)
|
||
|
*
|
||
|
* @brief The client call this interface to disable transmit for an ATM
|
||
|
* port. At initialisation, all the ports are disabled.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Value identifies the port
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : Transmission over this port is stopped.
|
||
|
*
|
||
|
* @return @li IX_FAIL : The port parameter is not valid, or the
|
||
|
* port is already disabled
|
||
|
*
|
||
|
* @note - When a port is disabled, Rx and Tx VC Connect requests will fail
|
||
|
*
|
||
|
* @note - This function call does not stop RX traffic. It is supposed
|
||
|
* that this function is invoked when a serious problem
|
||
|
* is detected (e.g. physical layer broken). Then, the RX traffic
|
||
|
* is not passing.
|
||
|
*
|
||
|
* @note - This function is blocking until the hw acknowledge that the
|
||
|
* transmission is stopped.
|
||
|
*
|
||
|
* @note - This function uses system resources and should not be used
|
||
|
* inside an interrupt context.
|
||
|
*
|
||
|
* @sa ixAtmmPortEnable */
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmPortDisable(IxAtmLogicalPort port);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmVcRegister (IxAtmLogicalPort port,
|
||
|
IxAtmmVc *vcToAdd,
|
||
|
IxAtmSchedulerVcId *vcId)
|
||
|
*
|
||
|
* @brief This interface is used to register an ATM Virtual
|
||
|
* Connection on the specified ATM port.
|
||
|
*
|
||
|
* Each call to this interface registers a unidirectional virtual
|
||
|
* connection with the parameters specified. If a bi-directional VC
|
||
|
* is needed, the function should be called twice (once for each
|
||
|
* direction, Tx & Rx) where the VPI and VCI and port parameters in
|
||
|
* each call are identical.
|
||
|
*
|
||
|
* With the addition of each new VC to a port, a series of
|
||
|
* callback functions are invoked by the IxAtmm component to notify
|
||
|
* possible external components of the change. The callback functions
|
||
|
* are registered using the @ref ixAtmmVcChangeCallbackRegister interface.
|
||
|
*
|
||
|
* The IxAtmSch component is notified of the registration of transmit
|
||
|
* VCs.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Identifies port on which the specified VC is
|
||
|
* to be registered.
|
||
|
*
|
||
|
* @param *vcToAdd @ref IxAtmmVc [in] - Pointer to an @ref IxAtmmVc structure
|
||
|
* containing a description of the VC to be registered. The
|
||
|
* client shall fill the vpi, vci and direction and relevant
|
||
|
* trafficDesc members of this structure before calling this
|
||
|
* function.
|
||
|
*
|
||
|
* @param *vcId @ref IxAtmSchedulerVcId [out] - Pointer to an integer value which is filled
|
||
|
* with the per-port unique identifier value for this VC.
|
||
|
* This identifier will be required when a request is
|
||
|
* made to deregister or change this VC. VC identifiers
|
||
|
* for transmit VCs will have a value between 0-43,
|
||
|
* i.e. 32 data Tx VCs + 12 OAM Tx Port VCs.
|
||
|
* Receive VCs will have a value between 44-66,
|
||
|
* i.e. 32 data Rx VCs + 1 OAM Rx VC.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The VC has been successfully registered on
|
||
|
* this port. The VC is ready for a client to configure IxAtmdAcc
|
||
|
* for receive and transmit operations on the VC.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid or has not been initialized. The request
|
||
|
* is rejected.
|
||
|
* @return @li IX_ATMM_RET_INVALID_VC_DESCRIPTOR : The descriptor
|
||
|
* pointed to by vcToAdd is invalid. The registration request
|
||
|
* is rejected.
|
||
|
* @return @li IX_ATMM_RET_VC_CONFLICT : The VC requested conflicts with
|
||
|
* reserved VPI and/or VCI values or with another VC already activated
|
||
|
* on this port.
|
||
|
* @return @li IX_ATMM_RET_PORT_CAPACITY_IS_FULL : The VC cannot be
|
||
|
* registered in the port becuase the port capacity is
|
||
|
* insufficient to support the requested ATM traffic contract.
|
||
|
* The registration request is rejected.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PARAM_PTR : A pointer parameter was
|
||
|
* NULL.
|
||
|
*
|
||
|
* @warning IxAtmm has no capability of signaling or negotiating a virtual
|
||
|
* connection. Negotiation of the admission of the VC to the network
|
||
|
* is beyond the scope of this function. This is assumed to be
|
||
|
* performed by the calling client, if appropriate,
|
||
|
* before or after this function is called.
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmVcRegister (IxAtmLogicalPort port,
|
||
|
IxAtmmVc *vcToAdd,
|
||
|
IxAtmSchedulerVcId *vcId);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmVcDeregister (IxAtmLogicalPort port, IxAtmSchedulerVcId vcId)
|
||
|
*
|
||
|
* @brief Function called by a client to deregister a VC from the
|
||
|
* system.
|
||
|
*
|
||
|
* With the removal of each new VC from a port, a series of
|
||
|
* registered callback functions are invoked by the IxAtmm component
|
||
|
* to notify possible external components of the change. The callback
|
||
|
* functions are registered using the @ref ixAtmmVcChangeCallbackRegister.
|
||
|
*
|
||
|
* The IxAtmSch component is notified of the removal of transmit VCs.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Identifies port on which the VC to be
|
||
|
* removed is currently registered.
|
||
|
*
|
||
|
* @param vcId @ref IxAtmSchedulerVcId [in] - VC identifier value of the VC to
|
||
|
* be deregistered. This value was supplied to the client when
|
||
|
the VC was originally registered. This value can also be
|
||
|
queried from the IxAtmm component through the @ref ixAtmmVcQuery
|
||
|
* interface.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The specified VC has been successfully
|
||
|
* removed from this port.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid or has not been initialized. The request
|
||
|
* is rejected.
|
||
|
* @return @li IX_FAIL : There is no registered VC associated with the
|
||
|
* supplied identifier registered on this port. */
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmVcDeregister (IxAtmLogicalPort port, IxAtmSchedulerVcId vcId);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmVcQuery (IxAtmLogicalPort port,
|
||
|
unsigned vpi,
|
||
|
unsigned vci,
|
||
|
IxAtmmVcDirection direction,
|
||
|
IxAtmSchedulerVcId *vcId,
|
||
|
IxAtmmVc *vcDesc)
|
||
|
*
|
||
|
* @brief This interface supplies information about an active VC on a
|
||
|
* particular port when supplied with the VPI, VCI and
|
||
|
* direction of that VC.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Identifies port on which the VC to be
|
||
|
* queried is currently registered.
|
||
|
*
|
||
|
* @param vpi unsigned [in] - ATM VPI value of the requested VC.
|
||
|
*
|
||
|
* @param vci unsigned [in] - ATM VCI value of the requested VC.
|
||
|
*
|
||
|
* @param direction @ref IxAtmmVcDirection [in] - One of @ref
|
||
|
* IX_ATMM_VC_DIRECTION_TX or @ref IX_ATMM_VC_DIRECTION_RX
|
||
|
* indicating the direction (Tx or Rx) of the requested VC.
|
||
|
*
|
||
|
* @param *vcId @ref IxAtmSchedulerVcId [out] - Pointer to an integer value which will be
|
||
|
* filled with the VC identifier value for the requested
|
||
|
* VC (as returned by @ref ixAtmmVcRegister), if it
|
||
|
* exists on this port.
|
||
|
*
|
||
|
* @param *vcDesc @ref IxAtmmVc [out] - Pointer to an @ref IxAtmmVc structure
|
||
|
* which will be filled with the specific details of the
|
||
|
* requested VC, if it exists on this port.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The specified VC has been found on this port
|
||
|
* and the requested details have been returned.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid or has not been initialized. The request
|
||
|
* is rejected.
|
||
|
* @return @li IX_ATMM_RET_NO_SUCH_VC : No VC exists on the specified
|
||
|
* port which matches the search criteria (VPI, VCI, direction)
|
||
|
* given. No data is returned.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PARAM_PTR : A pointer parameter was
|
||
|
* NULL.
|
||
|
*
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmVcQuery (IxAtmLogicalPort port,
|
||
|
unsigned vpi,
|
||
|
unsigned vci,
|
||
|
IxAtmmVcDirection direction,
|
||
|
IxAtmSchedulerVcId *vcId,
|
||
|
IxAtmmVc *vcDesc);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmVcIdQuery (IxAtmLogicalPort port, IxAtmSchedulerVcId vcId, IxAtmmVc *vcDesc)
|
||
|
*
|
||
|
* @brief This interface supplies information about an active VC on a
|
||
|
* particular port when supplied with a vcId for that VC.
|
||
|
*
|
||
|
* @param port @ref IxAtmLogicalPort [in] - Identifies port on which the VC to be
|
||
|
* queried is currently registered.
|
||
|
*
|
||
|
* @param vcId @ref IxAtmSchedulerVcId [in] - Value returned by @ref ixAtmmVcRegister which
|
||
|
* uniquely identifies the requested VC on this port.
|
||
|
*
|
||
|
* @param *vcDesc @ref IxAtmmVc [out] - Pointer to an @ref IxAtmmVc structure
|
||
|
* which will be filled with the specific details of the
|
||
|
* requested VC, if it exists on this port.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The specified VC has been found on this port
|
||
|
* and the requested details have been returned.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PORT : The port value indicated in the
|
||
|
* input is not valid or has not been initialized. The request
|
||
|
* is rejected.
|
||
|
* @return @li IX_ATMM_RET_NO_SUCH_VC : No VC exists on the specified
|
||
|
* port which matches the supplied identifier. No data is
|
||
|
* returned.
|
||
|
* @return @li IX_ATMM_RET_INVALID_PARAM_PTR : A pointer parameter was
|
||
|
* NULL.
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmVcIdQuery (IxAtmLogicalPort port, IxAtmSchedulerVcId vcId, IxAtmmVc *vcDesc);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmVcChangeCallbackRegister (IxAtmmVcChangeCallback callback)
|
||
|
*
|
||
|
* @brief This interface is invoked to supply a function to IxAtmm
|
||
|
* which will be called to notify the client if a new VC is
|
||
|
* registered with IxAtmm or an existing VC is removed.
|
||
|
*
|
||
|
* The callback, when invoked, will run within the context of the call
|
||
|
* to @ref ixAtmmVcRegister or @ref ixAtmmVcDeregister which caused
|
||
|
* the change of state.
|
||
|
*
|
||
|
* A maximum of 32 calbacks may be registered in with IxAtmm.
|
||
|
*
|
||
|
* @param callback @ref IxAtmmVcChangeCallback [in] - Callback which complies
|
||
|
* with the @ref IxAtmmVcChangeCallback definition. This
|
||
|
* function will be invoked by IxAtmm with the appropiate
|
||
|
* parameters for the relevant VC when any VC has been
|
||
|
* registered or deregistered with IxAtmm.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The specified callback has been registered
|
||
|
* successfully with IxAtmm and will be invoked when appropriate.
|
||
|
* @return @li IX_FAIL : Either the supplied callback is invalid, or
|
||
|
* IxAtmm has already registered 32 and connot accommodate
|
||
|
* any further registrations of this type. The request is
|
||
|
* rejected.
|
||
|
*
|
||
|
* @warning The client must not call either the @ref
|
||
|
* ixAtmmVcRegister or @ref ixAtmmVcDeregister interfaces
|
||
|
* from within the supplied callback function. */
|
||
|
PUBLIC IX_STATUS ixAtmmVcChangeCallbackRegister (IxAtmmVcChangeCallback callback);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmVcChangeCallbackDeregister (IxAtmmVcChangeCallback callback)
|
||
|
*
|
||
|
* @brief This interface is invoked to deregister a previously supplied
|
||
|
* callback function.
|
||
|
*
|
||
|
* @param callback @ref IxAtmmVcChangeCallback [in] - Callback which complies
|
||
|
* with the @ref IxAtmmVcChangeCallback definition. This
|
||
|
* function will removed from the table of callbacks.
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : The specified callback has been deregistered
|
||
|
* successfully from IxAtmm.
|
||
|
* @return @li IX_FAIL : Either the supplied callback is invalid, or
|
||
|
* is not currently registered with IxAtmm.
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmVcChangeCallbackDeregister (IxAtmmVcChangeCallback callback);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmUtopiaStatusShow (void)
|
||
|
*
|
||
|
* @brief Display utopia status counters
|
||
|
*
|
||
|
* @param "none"
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : Show function was successful
|
||
|
* @return @li IX_FAIL : Internal failure
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmUtopiaStatusShow (void);
|
||
|
|
||
|
/**
|
||
|
* @ingroup IxAtmm
|
||
|
*
|
||
|
* @fn ixAtmmUtopiaCfgShow (void)
|
||
|
*
|
||
|
* @brief Display utopia information(config registers and status registers)
|
||
|
*
|
||
|
* @param "none"
|
||
|
*
|
||
|
* @return @li IX_SUCCESS : Show function was successful
|
||
|
* @return @li IX_FAIL : Internal failure
|
||
|
*/
|
||
|
PUBLIC IX_STATUS
|
||
|
ixAtmmUtopiaCfgShow (void);
|
||
|
|
||
|
#endif
|
||
|
/* IXATMM_H */
|
||
|
|
||
|
/** @} */
|