mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-28 04:48:52 +09:00
![Marek Vasut](/assets/img/avatar_default.png)
Signed-off-by: Marek Vasut <marex@denx.de> Cc: Bryan Hundven <bryanhundven@gmail.com> Cc: Michael Schwingen <rincewind@discworld.dascon.de> Cc: Wolfgang Denk <wd@denx.de> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: U-Boot DM <u-boot-dm@lists.denx.de> Cc: Joe Hershberger <joe.hershberger@ni.com>
505 lines
19 KiB
C
505 lines
19 KiB
C
/**
|
|
* @file IxAtmSch.h
|
|
*
|
|
* @date 23-NOV-2001
|
|
*
|
|
* @brief Header file for the IXP400 ATM Traffic Shaper
|
|
*
|
|
* This component demonstrates an ATM Traffic Shaper implementation. It
|
|
* will perform shaping on upto 12 ports and total of 44 VCs accross all ports,
|
|
* 32 are intended for AAL0/5 and 12 for OAM (1 per port).
|
|
* The supported traffic types are;1 rt-VBR VC where PCR = SCR.
|
|
* (Effectively CBR) and Up-to 44 VBR VCs.
|
|
*
|
|
* This component models the ATM ports and VCs and is capable of producing
|
|
* a schedule of ATM cells per port which can be supplied to IxAtmdAcc
|
|
* for execution on the data path.
|
|
*
|
|
* @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 --
|
|
*
|
|
* @sa IxAtmm.h
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @defgroup IxAtmSch IXP400 ATM Transmit Scheduler (IxAtmSch) API
|
|
*
|
|
* @brief IXP400 ATM scheduler component Public API
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
#ifndef IXATMSCH_H
|
|
#define IXATMSCH_H
|
|
|
|
#include "IxOsalTypes.h"
|
|
#include "IxAtmTypes.h"
|
|
|
|
/*
|
|
* #defines and macros used in this file.
|
|
*/
|
|
|
|
/* Return codes */
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @def IX_ATMSCH_RET_NOT_ADMITTED
|
|
* @brief Indicates that CAC function has rejected VC registration due
|
|
* to insufficient line capacity.
|
|
*/
|
|
#define IX_ATMSCH_RET_NOT_ADMITTED 2
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @def IX_ATMSCH_RET_QUEUE_FULL
|
|
* @brief Indicates that the VC queue is full, no more demand can be
|
|
* queued at this time.
|
|
*/
|
|
#define IX_ATMSCH_RET_QUEUE_FULL 3
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @def IX_ATMSCH_RET_QUEUE_EMPTY
|
|
* @brief Indicates that all VC queues on this port are empty and
|
|
* therefore there are no cells to be scheduled at this time.
|
|
*/
|
|
#define IX_ATMSCH_RET_QUEUE_EMPTY 4
|
|
|
|
/*
|
|
* Function declarations
|
|
*/
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchInit(void)
|
|
*
|
|
* @brief This function is used to initialize the ixAtmSch component. It
|
|
* should be called before any other IxAtmSch API function.
|
|
*
|
|
* @param None
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> indicates that
|
|
* -# The ATM scheduler component has been successfully initialized.
|
|
* -# The scheduler is ready to accept Port modelling requests.
|
|
* - <b>IX_FAIL :</b> Some internal error has prevented the scheduler component
|
|
* from initialising.
|
|
*/
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchInit(void);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchPortModelInitialize( IxAtmLogicalPort port,
|
|
unsigned int portRate,
|
|
unsigned int minCellsToSchedule)
|
|
*
|
|
* @brief This function shall be called first to initialize an ATM port before
|
|
* any other ixAtmSch API calls may be made for that port.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - The specific port to initialize. Valid
|
|
* values range from 0 to IX_UTOPIA_MAX_PORTS - 1, representing a
|
|
* maximum of IX_UTOPIA_MAX_PORTS possible ports.
|
|
*
|
|
* @param portRate unsigned int [in] - Value indicating the upstream capacity
|
|
* of the indicated port. The value should be supplied in
|
|
* units of ATM (53 bytes) cells per second.
|
|
* A port rate of 800Kbits/s is the equivalent
|
|
* of 1886 cells per second
|
|
*
|
|
* @param minCellsToSchedule unsigned int [in] - This parameter specifies the minimum
|
|
* number of cells which the scheduler will put in a schedule
|
|
* table for this port. This value sets the worst case CDVT for VCs
|
|
* on this port i.e. CDVT = 1*minCellsToSchedule/portRate.
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> indicates that
|
|
* -# The ATM scheduler has been successfully initialized.
|
|
* -# The requested port model has been established.
|
|
* -# The scheduler is ready to accept VC modelling requests
|
|
* on the ATM port.
|
|
* - <b>IX_FAIL :</b> indicates the requested port could not be
|
|
* initialized. */
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchPortModelInitialize( IxAtmLogicalPort port,
|
|
unsigned int portRate,
|
|
unsigned int minCellsToSchedule);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchPortRateModify( IxAtmLogicalPort port,
|
|
unsigned int portRate)
|
|
*
|
|
* @brief This function is called to modify the portRate on a
|
|
* previously initialized port, typically in the event that
|
|
* the line condition of the port changes.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port which is to be
|
|
* modified.
|
|
*
|
|
* @param portRate unsigned int [in] - Value indicating the new upstream
|
|
* capacity for this port in cells/second.
|
|
* A port rate of 800Kbits/s is the equivalent
|
|
* of 1886 cells per second
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The port rate has been successfully modified.<br>
|
|
* - <b>IX_FAIL :</b> The port rate could not be modified, either
|
|
* because the input data was invalid, or the new port rate is
|
|
* insufficient to support established ATM VC contracts on this
|
|
* port.
|
|
*
|
|
* @warning The IxAtmSch component will validate the supplied port
|
|
* rate is sufficient to support all established VC
|
|
* contracts on the port. If the new port rate is
|
|
* insufficient to support all established contracts then
|
|
* the request to modify the port rate will be rejected.
|
|
* In this event, the user is expected to remove
|
|
* established contracts using the ixAtmSchVcModelRemove
|
|
* interface and then retry this interface.
|
|
*
|
|
* @sa ixAtmSchVcModelRemove() */
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchPortRateModify( IxAtmLogicalPort port,
|
|
unsigned int portRate);
|
|
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchVcModelSetup( IxAtmLogicalPort port,
|
|
IxAtmTrafficDescriptor *trafficDesc,
|
|
IxAtmSchedulerVcId *vcId)
|
|
*
|
|
* @brief A client calls this interface to set up an upstream
|
|
* (transmitting) virtual connection model (VC) on the
|
|
* specified ATM port. This function also provides the
|
|
* virtual * connection admission control (CAC) service to the
|
|
* client.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the upstream
|
|
* VC is to be established.
|
|
*
|
|
* @param *trafficDesc @ref IxAtmTrafficDescriptor [in] - Pointer to a structure
|
|
* describing the requested traffic contract of the VC to be
|
|
* established. This structure contains the typical ATM
|
|
* traffic descriptor values (e.g. PCR, SCR, MBS, CDVT, etc.)
|
|
* defined by the ATM standard.
|
|
*
|
|
* @param *vcId @ref IxAtmSchedulerVcId [out] - This value will be filled with the
|
|
* port-unique identifier for this virtual connection. A
|
|
* valid identification is a non-negative number.
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The VC has been successfully established on
|
|
* this port. The client may begin to submit demand on this VC.
|
|
* - <b>IX_ATMSCH_RET_NOT_ADMITTED :</b> The VC cannot be established
|
|
* on this port because there is insufficient upstream capacity
|
|
* available to support the requested traffic contract descriptor
|
|
* - <b>IX_FAIL :</b>Input data are invalid. VC has not been
|
|
* established.
|
|
*/
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchVcModelSetup( IxAtmLogicalPort port,
|
|
IxAtmTrafficDescriptor *trafficDesc,
|
|
IxAtmSchedulerVcId *vcId);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchVcConnIdSet( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId,
|
|
IxAtmConnId vcUserConnId)
|
|
*
|
|
* @brief A client calls this interface to set the vcUserConnId for a VC on
|
|
* the specified ATM port. This vcUserConnId will default to
|
|
* IX_ATM_IDLE_CELLS_CONNID if this function is not called for a VC.
|
|
* Hence if the client does not call this function for a VC then only idle
|
|
* cells will be scheduled for this VC.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the upstream
|
|
* VC is has been established.
|
|
*
|
|
* @param vcId @ref IxAtmSchedulerVcId [in] - This is the unique identifier for this virtual
|
|
* connection. A valid identification is a non-negative number and is
|
|
* all ports.
|
|
*
|
|
* @param vcUserConnId @ref IxAtmConnId [in] - The connId is used to refer to a VC in schedule
|
|
* table entries. It is treated as the Id by which the scheduler client
|
|
* knows the VC. It is used in any communicatations from the Scheduler
|
|
* to the scheduler user e.g. schedule table entries.
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The id has successfully been set.
|
|
* - <b>IX_FAIL :</b>Input data are invalid. connId id is not established.
|
|
*/
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchVcConnIdSet( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId,
|
|
IxAtmConnId vcUserConnId);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchVcModelRemove( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId)
|
|
*
|
|
* @brief Interface called by the client to remove a previously
|
|
* established VC on a particular port.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the VC to be
|
|
* removed is established.
|
|
*
|
|
* @param vcId @ref IxAtmSchedulerVcId [in] - Identifies the VC to be removed. This is the
|
|
* value returned by the @ref ixAtmSchVcModelSetup call which
|
|
* established the relevant VC.
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The VC has been successfully removed from
|
|
* this port. It is no longer modelled on this port.
|
|
* - <b>IX_FAIL :</b>Input data are invalid. The VC is still being modeled
|
|
* by the traffic shaper.
|
|
*
|
|
* @sa ixAtmSchVcModelSetup()
|
|
*/
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchVcModelRemove( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchVcQueueUpdate( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId,
|
|
unsigned int numberOfCells)
|
|
*
|
|
* @brief The client calls this function to notify IxAtmSch that the
|
|
* user of a VC has submitted cells for transmission.
|
|
*
|
|
* This information is stored, aggregated from a number of calls to
|
|
* ixAtmSchVcQueueUpdate and eventually used in the call to
|
|
* ixAtmSchTableUpdate.
|
|
*
|
|
* Normally IxAtmSch will update the VC queue by adding the number of
|
|
* cells to the current queue length. However, if IxAtmSch
|
|
* determines that the user has over-submitted for the VC and
|
|
* exceeded its transmission quota the queue request can be rejected.
|
|
* The user should resubmit the request later when the queue has been
|
|
* depleted.
|
|
*
|
|
* This implementation of ixAtmSchVcQueueUpdate uses no operating
|
|
* system or external facilities, either directly or indirectly.
|
|
* This allows clients to call this function form within an interrupt handler.
|
|
*
|
|
* This interface is structurally compatible with the
|
|
* IxAtmdAccSchQueueUpdate callback type definition required for
|
|
* IXP400 ATM scheduler interoperability.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the VC to be
|
|
* updated is established.
|
|
*
|
|
* @param vcId @ref IxAtmSchedulerVcId [in] - Identifies the VC to be updated. This is the
|
|
* value returned by the @ref ixAtmSchVcModelSetup call which
|
|
* established the relevant VC.
|
|
*
|
|
* @param numberOfCells unsigned int [in] - Indicates how many ATM cells should
|
|
* be added to the queue for this VC.
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The VC queue has been successfully updated.
|
|
* - <b>IX_ATMSCH_RET_QUEUE_FULL :</b> The VC queue has reached a
|
|
* preset limit. This indicates the client has over-submitted
|
|
* and exceeded its transmission quota. The request is
|
|
* rejected. The VC queue is not updated. The VC user is
|
|
* advised to resubmit the request later.
|
|
* - <b>IX_FAIL :</b> The input are invalid. No VC queue is updated.
|
|
*
|
|
* @warning IxAtmSch assumes that the calling software ensures that
|
|
* calls to ixAtmSchVcQueueUpdate, ixAtmSchVcQueueClear and
|
|
* ixAtmSchTableUpdate are both self and mutually exclusive
|
|
* for the same port.
|
|
*
|
|
* @sa ixAtmSchVcQueueUpdate(), ixAtmSchVcQueueClear(), ixAtmSchTableUpdate(). */
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchVcQueueUpdate( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId,
|
|
unsigned int numberOfCells);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchVcQueueClear( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId)
|
|
*
|
|
* @brief The client calls this function to remove all currently
|
|
* queued cells from a registered VC. The pending cell count
|
|
* for the specified VC is reset to zero.
|
|
*
|
|
* This interface is structurally compatible with the
|
|
* IxAtmdAccSchQueueClear callback type definition required for
|
|
* IXP400 ATM scheduler interoperability.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port on which the VC to be
|
|
* cleared is established.
|
|
*
|
|
* @param vcId @ref IxAtmSchedulerVcId [in] - Identifies the VC to be cleared. This is the
|
|
* value returned by the @ref ixAtmSchVcModelSetup call which
|
|
* established the relevant VC.
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The VC queue has been successfully cleared.
|
|
* - <b>IX_FAIL :</b> The input are invalid. No VC queue is modified.
|
|
*
|
|
* @warning IxAtmSch assumes that the calling software ensures that
|
|
* calls to ixAtmSchVcQueueUpdate, ixAtmSchVcQueueClear and
|
|
* ixAtmSchTableUpdate are both self and mutually exclusive
|
|
* for the same port.
|
|
*
|
|
* @sa ixAtmSchVcQueueUpdate(), ixAtmSchVcQueueClear(), ixAtmSchTableUpdate(). */
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchVcQueueClear( IxAtmLogicalPort port,
|
|
IxAtmSchedulerVcId vcId);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchTableUpdate( IxAtmLogicalPort port,
|
|
unsigned int maxCells,
|
|
IxAtmScheduleTable **rettable)
|
|
*
|
|
* @brief The client calls this function to request an update of the
|
|
* schedule table for a particular ATM port.
|
|
*
|
|
* This is called when the client decides it needs a new sequence of
|
|
* cells to send (probably because the transmit queue is near to
|
|
* empty for this ATM port). The scheduler will use its stored
|
|
* information on the cells submitted for transmit (i.e. data
|
|
* supplied via @ref ixAtmSchVcQueueUpdate function) with the traffic
|
|
* descriptor information of all established VCs on the ATM port to
|
|
* decide the sequence of cells to be sent and fill the schedule
|
|
* table for a period of time into the future.
|
|
*
|
|
* IxAtmSch will guarantee a minimum of minCellsToSchedule if there
|
|
* is at least one cell ready to send. If there are no cells then
|
|
* IX_ATMSCH_RET_QUEUE_EMPTY is returned.
|
|
*
|
|
* This implementation of ixAtmSchTableUpdate uses no operating
|
|
* system or external facilities, either directly or indirectly.
|
|
* This allows clients to call this function form within an FIQ
|
|
* interrupt handler.
|
|
*
|
|
* @param port @ref IxAtmLogicalPort [in] - Specifies the ATM port for which requested
|
|
* schedule table is to be generated.
|
|
*
|
|
* @param maxCells unsigned [in] - Specifies the maximum number of cells
|
|
* that must be scheduled in the supplied table during any
|
|
* call to the interface.
|
|
*
|
|
* @param **table @ref IxAtmScheduleTable [out] - A pointer to an area of
|
|
* storage is returned which contains the generated
|
|
* schedule table. The client should not modify the
|
|
* contents of this table.
|
|
*
|
|
* @return
|
|
* - <b>IX_SUCCESS :</b> The schedule table has been published.
|
|
* Currently there is at least one VC queue that is nonempty.
|
|
* - <b>IX_ATMSCH_RET_QUEUE_EMPTY :</b> Currently all VC queues on
|
|
* this port are empty. The schedule table returned is set to
|
|
* NULL. The client is not expected to invoke this function
|
|
* again until more cells have been submitted on this port
|
|
* through the @ref ixAtmSchVcQueueUpdate function.
|
|
* - <b>IX_FAIL :</b> The input are invalid. No action is taken.
|
|
*
|
|
* @warning IxAtmSch assumes that the calling software ensures that
|
|
* calls to ixAtmSchVcQueueUpdate, ixAtmSchVcQueueClear and
|
|
* ixAtmSchTableUpdate are both self and mutually exclusive
|
|
* for the same port.
|
|
*
|
|
* @warning Subsequent calls to this function for the same port will
|
|
* overwrite the contents of previously supplied schedule
|
|
* tables. The client must be completely finished with the
|
|
* previously supplied schedule table before calling this
|
|
* function again for the same port.
|
|
*
|
|
* @sa ixAtmSchVcQueueUpdate(), ixAtmSchVcQueueClear(), ixAtmSchTableUpdate(). */
|
|
PUBLIC IX_STATUS
|
|
ixAtmSchTableUpdate( IxAtmLogicalPort port,
|
|
unsigned int maxCells,
|
|
IxAtmScheduleTable **rettable);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchShow(void)
|
|
*
|
|
* @brief Utility function which will print statistics on the current
|
|
* and accumulated state of VCs and traffic in the ATM
|
|
* scheduler component. Output is sent to the default output
|
|
* device.
|
|
*
|
|
* @param none
|
|
* @return none
|
|
*/
|
|
PUBLIC void
|
|
ixAtmSchShow(void);
|
|
|
|
/**
|
|
* @ingroup IxAtmSch
|
|
*
|
|
* @fn ixAtmSchStatsClear(void)
|
|
*
|
|
* @brief Utility function which will reset all counter statistics in
|
|
* the ATM scheduler to zero.
|
|
*
|
|
* @param none
|
|
* @return none
|
|
*/
|
|
PUBLIC void
|
|
ixAtmSchStatsClear(void);
|
|
|
|
#endif
|
|
/* IXATMSCH_H */
|
|
|
|
/** @} */
|