uboot/arch/arm/cpu/ixp/npe/include/IxAtmdAcc.h
<<
>>
Prefs
   1
   2/**
   3 * @file    IxAtmdAcc.h
   4 *
   5 * @date    07-Nov-2001
   6 *
   7 * @brief IxAtmdAcc Public API
   8 *
   9 * This file contains the public API of IxAtmdAcc, related to the
  10 * data functions of the component
  11 *
  12 * 
  13 * @par
  14 * IXP400 SW Release version 2.0
  15 * 
  16 * -- Copyright Notice --
  17 * 
  18 * @par
  19 * Copyright 2001-2005, Intel Corporation.
  20 * All rights reserved.
  21 * 
  22 * @par
  23 * Redistribution and use in source and binary forms, with or without
  24 * modification, are permitted provided that the following conditions
  25 * are met:
  26 * 1. Redistributions of source code must retain the above copyright
  27 *    notice, this list of conditions and the following disclaimer.
  28 * 2. Redistributions in binary form must reproduce the above copyright
  29 *    notice, this list of conditions and the following disclaimer in the
  30 *    documentation and/or other materials provided with the distribution.
  31 * 3. Neither the name of the Intel Corporation nor the names of its contributors
  32 *    may be used to endorse or promote products derived from this software
  33 *    without specific prior written permission.
  34 * 
  35 * @par
  36 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
  37 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  39 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  40 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  41 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  42 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  44 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  45 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46 * SUCH DAMAGE.
  47 * 
  48 * @par
  49 * -- End of Copyright Notice --
  50 */
  51
  52/* ------------------------------------------------------
  53   Doxygen group definitions
  54   ------------------------------------------------------ */
  55
  56/**
  57 *
  58 * @defgroup IxAtmdAccAPI IXP400 ATM Driver Access (IxAtmdAcc) API
  59 *
  60 * @brief The public API for the IXP400 Atm Driver Data component
  61 *
  62 * IxAtmdAcc is the low level interface by which AAL0/AAL5 and
  63 * OAM data gets transmitted to,and received from the Utopia bus.
  64 *
  65 * For AAL0/AAL5 services transmit and receive connections may
  66 * be established independantly for unique combinations of
  67 * port,VPI,and VCI.
  68 *
  69 * Two AAL0 services supporting 48 or 52 byte cell data are provided.
  70 * Submitted AAL0 PDUs must be a multiple of the cell data size (48/52).
  71 * AAL0_52 is a raw cell service the client must format
  72 * the PDU with an ATM cell header (excluding HEC) at the start of
  73 * each cell, note that AtmdAcc does not validate the cell headers in
  74 * a submitted PDU.
  75 *
  76 * OAM cells cannot be received over the AAL0 service but instead
  77 * are received over a dedicated OAM service.
  78 *
  79 * For the OAM service an "OAM Tx channel" may be enabled for a port
  80 * by establishing a single dedicated OAM Tx connection on that port.
  81 * A single "OAM Rx channel" for all ports may be  enabled by
  82 * establishing a dedicated OAM Rx connection.
  83 *
  84 * The OAM service allows buffers containing 52 byte OAM F4/F5 cells
  85 * to be transmitted and received over the dedicated OAM channels.
  86 * HEC is appended/removed, and CRC-10 performed by the NPE. The OAM
  87 * service offered by AtmdAcc is a raw cell transport service.
  88 * It is assumed that ITU I.610 procedures that make use of this
  89 * service are implemented above AtmdAcc.
  90 *
  91 * Note that the dedicated OAM connections are established on
  92 * reserved VPI,VCI, and (in the case of Rx) port values defined below.
  93 * These values are used purely to descriminate the dedicated OAM channels
  94 * and do not identify a particular OAM F4/F5 flow. F4/F5 flows may be
  95 * realised for particluar VPI/VCIs by manipulating the VPI,VCI
  96 * fields of the ATM cell headers of cells in the buffers passed
  97 * to AtmdAcc. Note that AtmdAcc does not validate the cell headers
  98 * in a submitted OAM PDU.
  99 *
 100 *
 101 *
 102 * This part is related to the User datapath processing
 103 *
 104 * @{
 105 */
 106
 107#ifndef IXATMDACC_H
 108#define IXATMDACC_H
 109
 110#include "IxAtmTypes.h"
 111
 112/* ------------------------------------------------------
 113   AtmdAcc Data Types definition
 114   ------------------------------------------------------ */
 115
 116/**
 117 *
 118 * @ingroup IxAtmdAccAPI
 119 *
 120 * @def IX_ATMDACC_WARNING
 121 *
 122 * @brief Warning return code
 123 *
 124 * This constant is used to tell IxAtmDAcc user about a special case.
 125 *
 126 */
 127#define IX_ATMDACC_WARNING 2
 128
 129/**
 130 *
 131 * @ingroup IxAtmdAccAPI
 132 *
 133 * @def IX_ATMDACC_BUSY
 134 *
 135 * @brief Busy return code
 136 *
 137 * This constant is used to tell IxAtmDAcc user that the request
 138 * is correct, but cannot be processed because the IxAtmAcc resources
 139 * are already used. The user has to retry its request later
 140 *
 141 */
 142#define IX_ATMDACC_BUSY 3
 143
 144/**
 145 *
 146 * @ingroup IxAtmdAccAPI
 147 *
 148 * @def IX_ATMDACC_RESOURCES_STILL_ALLOCATED
 149 *
 150 * @brief Disconnect return code
 151 *
 152 * This constant is used to tell IxAtmDAcc user that the disconnect
 153 * functions are not complete because the resources used by the driver
 154 * are not yet released. The user has to retry the disconnect call
 155 * later.
 156 *
 157 */
 158#define IX_ATMDACC_RESOURCES_STILL_ALLOCATED 4
 159
 160/**
 161 *
 162 * @ingroup IxAtmdAccAPI
 163 *
 164 * @def IX_ATMDACC_DEFAULT_REPLENISH_COUNT
 165 *
 166 * @brief Default resources usage for RxVcFree replenish mechanism
 167 *
 168 * This constant is used to tell IxAtmDAcc to allocate and use
 169 * the minimum of resources for rx free replenish.
 170 *
 171 * @sa ixAtmdAccRxVcConnect
 172 */
 173#define IX_ATMDACC_DEFAULT_REPLENISH_COUNT 0
 174
 175
 176/**
 177 * @ingroup IxAtmdAccAPI
 178 *
 179 * @def IX_ATMDACC_OAM_TX_VPI
 180 *
 181 * @brief The reserved value used for the dedicated OAM
 182 * Tx connection. This "well known" value is used by atmdAcc and
 183 * its clients to dsicriminate the OAM channel, and should be chosen so
 184 * that it does not coencide with the VPI value used in an AAL0/AAL5 connection.
 185 * Any attempt to connect a service type other than OAM on this VPI will fail.
 186 *
 187 *
 188 */
 189#define IX_ATMDACC_OAM_TX_VPI 0
 190
 191/**
 192 * @ingroup IxAtmdAccAPI
 193 *
 194 * @def IX_ATMDACC_OAM_TX_VCI
 195 *
 196 * @brief The reserved value used for the dedicated OAM
 197 * Tx connection. This "well known" value is used by atmdAcc and
 198 * its clients to dsicriminate the OAM channel, and should be chosen so
 199 * that it does not coencide with the VCI value used in an AAL0/AAL5 connection.
 200 * Any attempt to connect a service type other than OAM on this VCI will fail.
 201 */
 202#define IX_ATMDACC_OAM_TX_VCI 0
 203
 204
 205 /**
 206 * @ingroup IxAtmdAccAPI
 207 *
 208 * @def IX_ATMDACC_OAM_RX_PORT
 209 *
 210 * @brief The reserved dummy PORT used for all dedicated OAM
 211 * Rx connections. Note that this is not a real port but must
 212 * have a value that lies within the valid range of port values.
 213 */
 214#define IX_ATMDACC_OAM_RX_PORT IX_UTOPIA_PORT_0
 215
 216 /**
 217 * @ingroup IxAtmdAccAPI
 218 *
 219 * @def IX_ATMDACC_OAM_RX_VPI
 220 *
 221 * @brief The reserved value value used for the dedicated OAM
 222 * Rx connection. This value should be chosen so that it does not
 223 * coencide with the VPI value used in an AAL0/AAL5 connection.
 224 * Any attempt to connect a service type other than OAM on this VPI will fail.
 225 */
 226#define IX_ATMDACC_OAM_RX_VPI 0
 227
 228/**
 229 * @ingroup IxAtmdAccAPI
 230 *
 231 * @def IX_ATMDACC_OAM_RX_VCI
 232 *
 233 * @brief The reserved value value used for the dedicated OAM
 234 * Rx connection. This value should be chosen so that it does not
 235 * coencide with the VCI value used in an AAL0/AAL5 connection.
 236 * Any attempt to connect a service type other than OAM on this VCI will fail.
 237 */
 238#define IX_ATMDACC_OAM_RX_VCI 0
 239
 240
 241/**
 242 * @enum IxAtmdAccPduStatus
 243 *
 244 * @ingroup IxAtmdAccAPI
 245 *
 246 * @brief IxAtmdAcc Pdu status :
 247 *
 248 * IxAtmdAccPduStatus is used during a RX operation to indicate
 249 * the status of the received PDU
 250 *
 251 */
 252
 253typedef enum
 254{
 255    IX_ATMDACC_AAL0_VALID = 0,    /**< aal0 pdu */
 256    IX_ATMDACC_OAM_VALID,         /**< OAM pdu */
 257    IX_ATMDACC_AAL2_VALID,        /**< aal2 pdu @b reserved for future use */
 258    IX_ATMDACC_AAL5_VALID,        /**< aal5 pdu complete and trailer is valid */
 259    IX_ATMDACC_AAL5_PARTIAL,      /**< aal5 pdu not complete, trailer is missing */
 260    IX_ATMDACC_AAL5_CRC_ERROR,    /**< aal5 pdu not complete, crc error/length error */
 261    IX_ATMDACC_MBUF_RETURN        /**< empty buffer returned to the user */
 262} IxAtmdAccPduStatus;
 263
 264
 265/**
 266 *
 267 * @enum IxAtmdAccAalType
 268 *
 269 * @ingroup IxAtmdAccAPI
 270 *
 271 * @brief IxAtmdAcc AAL Service Type :
 272 *
 273 * IxAtmdAccAalType defines the type of traffic to run on this VC
 274 *
 275 */
 276typedef enum
 277{
 278    IX_ATMDACC_AAL5,                /**< ITU-T AAL5 */
 279    IX_ATMDACC_AAL2,                /**< ITU-T AAL2 @b reserved for future use */
 280    IX_ATMDACC_AAL0_48,             /**< AAL0 48 byte payloads (cell header is added by NPE)*/
 281    IX_ATMDACC_AAL0_52,             /**< AAL0 52 byte cell data (HEC is added by NPE) */
 282    IX_ATMDACC_OAM,                 /**< OAM cell transport service (HEC is added by NPE)*/
 283    IX_ATMDACC_MAX_SERVICE_TYPE     /**< not a service, used for parameter validation */
 284} IxAtmdAccAalType;
 285
 286/**
 287 *
 288 * @enum IxAtmdAccClpStatus
 289 *
 290 * @ingroup IxAtmdAccAPI
 291 *
 292 * @brief IxAtmdAcc CLP indication
 293 *
 294 * IxAtmdAccClpStatus defines the CLP status of the current PDU
 295 *
 296 */
 297typedef enum
 298{
 299    IX_ATMDACC_CLP_NOT_SET = 0,     /**< CLP indication is not set */
 300    IX_ATMDACC_CLP_SET = 1     /**< CLP indication is set */
 301} IxAtmdAccClpStatus;
 302
 303/**
 304 * @typedef IxAtmdAccUserId
 305 *
 306 * @ingroup IxAtmdAccAPI
 307 *
 308 * @brief User-supplied Id
 309 *
 310 * IxAtmdAccUserId is passed through callbacks and allows the
 311 * IxAtmdAcc user to identify the source of a call back. The range of
 312 * this user-owned Id is [0...2^32-1)].
 313 *
 314 * The user provides this own Ids on a per-channel basis as a parameter
 315 * in a call to @a ixAtmdAccRxVcConnect() or @a ixAtmdAccRxVcConnect()
 316 *
 317 * @sa ixAtmdAccRxVcConnect
 318 * @sa ixAtmdAccTxVcConnect
 319 *
 320 */
 321typedef unsigned int IxAtmdAccUserId;
 322
 323/* ------------------------------------------------------
 324   Part of the IxAtmdAcc interface related to RX traffic
 325   ------------------------------------------------------ */
 326
 327/**
 328 *
 329 * @ingroup IxAtmdAccAPI
 330 *
 331 * @brief  Rx callback prototype
 332 *
 333 * IxAtmdAccRxVcRxCallback is the prototype of the Rx callback user
 334 * function called once per PDU to pass a receive Pdu to a user on a
 335 * partilcular connection. The callback is likely to push the mbufs
 336 * to a protocol layer, and recycle the mbufs for a further use.
 337 *
 338 * @note -This function is called ONLY in the context of
 339 *        the @a ixAtmdAccRxDispatch() function
 340 *
 341 * @sa ixAtmdAccRxDispatch
 342 * @sa ixAtmdAccRxVcConnect
 343 *
 344 * @param port @ref IxAtmLogicalPort [in] - the port on which this PDU was received
 345 *        a logical PHY port [@a IX_UTOPIA_PORT_0 .. @a IX_UTOPIA_MAX_PORTS - 1]
 346 * @param userId @ref IxAtmdAccUserId [in] - user Id provided in the call
 347 *        to @a ixAtmdAccRxVcConnect()
 348 * @param status @ref IxAtmdAccPduStatus [in] - an indication about the PDU validity.
 349 *        In the case of AAL0 the only possibile value is
 350 *        AAL0_VALID, in this case the client may optionally determine
 351 *        that an rx timeout occured by checking if the mbuf is
 352 *        compleletly or only partially filled, the later case
 353 *        indicating a timeout.
 354 *        In the case of OAM the only possible value is OAM valid.
 355 *        The status is set to @a IX_ATMDACC_MBUF_RETURN when
 356 *        the mbuf is released during a disconnect process.
 357 * @param clp @ref IxAtmdAccClpStatus [in] - clp indication for this PDU.
 358 *        For AAL5/AAL0_48 this information
 359 *        is set if the clp bit of any rx cell is set
 360 *        For AAL0-52/OAM the client may inspect the CLP in individual
 361 *        cell headers in the PDU, and this parameter is set to 0.
 362 * @param *mbufPtr @ref IX_OSAL_MBUF [in] - depending on the servive type a pointer to
 363 *        an mbuf (AAL5/AAL0/OAM) or mbuf chain (AAL5 only),
 364 *        that comprises the complete PDU data.
 365 *
 366 *        This parameter is guaranteed not to be a null pointer.
 367 *
 368 */
 369typedef void (*IxAtmdAccRxVcRxCallback) (IxAtmLogicalPort port,
 370                       IxAtmdAccUserId userId,
 371                       IxAtmdAccPduStatus status,
 372                       IxAtmdAccClpStatus clp,
 373                       IX_OSAL_MBUF * mbufPtr);
 374
 375/**
 376 *
 377 * @ingroup IxAtmdAccAPI
 378 *
 379 * @brief Callback prototype for free buffer level is low.
 380 *
 381 * IxAtmdAccRxVcFreeLowCallback is the prototype of the user function
 382 * which get called on a per-VC basis, when more  mbufs are needed to
 383 * continue the ATM data reception. This function is likely to supply
 384 * more available mbufs by one or many calls to the replenish function
 385 * @a ixAtmdAccRxVcFreeReplenish()
 386 *
 387 * This function is called when the number of available buffers for
 388 * reception is going under the threshold level as defined
 389 * in @a ixAtmdAccRxVcFreeLowCallbackRegister()
 390 *
 391 * This function is called inside an Qmgr dispatch context. No system
 392 * resource or interrupt-unsafe feature should be used inside this
 393 * callback.
 394 *
 395 * @sa ixAtmdAccRxVcFreeLowCallbackRegister
 396 * @sa IxAtmdAccRxVcFreeLowCallback
 397 * @sa ixAtmdAccRxVcFreeReplenish
 398 * @sa ixAtmdAccRxVcFreeEntriesQuery
 399 * @sa ixAtmdAccRxVcConnect
 400 *
 401 * @param userId @ref IxAtmdAccUserId [in] - user Id provided in the call
 402 * to @a ixAtmdAccRxVcConnect()
 403 *
 404 * @return None
 405 *
 406 */
 407typedef void (*IxAtmdAccRxVcFreeLowCallback) (IxAtmdAccUserId userId);
 408
 409/* ------------------------------------------------------
 410   Part of the IxAtmdAcc interface related to TX traffic
 411   ------------------------------------------------------ */
 412
 413/**
 414 *
 415 * @ingroup IxAtmdAccAPI
 416 *
 417 * @brief  Buffer callback prototype.
 418 *
 419 * This function is called to relinguish ownership of a transmitted
 420 * buffer chain to the user.
 421 *
 422 * @note -In the case of a chained mbuf the AmtdAcc component can
 423 * chain many user buffers together and pass ownership to the user in
 424 * one function call.
 425 *
 426 * @param userId @ref IxAtmdAccUserId [in] - user If provided at registration of this
 427 *        callback.
 428 * @param mbufPtr @ref IX_OSAL_MBUF [in] - a pointer to mbufs or chain of mbufs and is
 429 *        guaranteed not to be a null pointer.
 430 *
 431 */
 432typedef void (*IxAtmdAccTxVcBufferReturnCallback) (IxAtmdAccUserId userId,
 433                        IX_OSAL_MBUF * mbufPtr);
 434
 435/* ------------------------------------------------------
 436   Part of the IxAtmdAcc interface related to Initialisation
 437   ------------------------------------------------------ */
 438
 439/**
 440 *
 441 * @ingroup IxAtmdAccAPI
 442 *
 443 * @fn ixAtmdAccInit (void)
 444 *
 445 * @brief Initialise the IxAtmdAcc Component
 446 *
 447 * This function initialise the IxAtmdAcc component. This function shall
 448 * be called before any other function of the API. Its role is to
 449 * initialise all internal resources of the IxAtmdAcc component.
 450 *
 451 * The ixQmgr component needs to be initialized prior the use of
 452 * @a ixAtmdAccInit()
 453 *
 454 * @param none
 455 *
 456 * Failing to initilialize the IxAtmdAcc API before any use of it will
 457 * result in a failed status.
 458 * If the specified component is not present, a success status will still be 
 459 * returned, however, a warning indicating the NPE to download to is not
 460 * present will be issued.
 461 *
 462 * @return @li IX_SUCCESS initialisation is complete (in case of component not
 463 *             being present, a warning is clearly indicated)
 464 * @return @li IX_FAIL unable to process this request either
 465 *             because this IxAtmdAcc is already initialised
 466 *             or some unspecified error has occrred.
 467 */
 468PUBLIC IX_STATUS ixAtmdAccInit (void);
 469
 470/**
 471 *
 472 * @ingroup IxAtmdAccAPI
 473 *
 474 * @fn ixAtmdAccShow (void)
 475 *
 476 * @brief Show IxAtmdAcc configuration on a per port basis
 477 *
 478 * @param none
 479 *
 480 * @return none
 481 *
 482 * @note - Display use printf() and are redirected to stdout
 483 */
 484PUBLIC void
 485ixAtmdAccShow (void);
 486
 487/**
 488 *
 489 * @ingroup IxAtmdAccAPI
 490 * 
 491 * @fn ixAtmdAccStatsShow (void)
 492 *
 493 * @brief Show all IxAtmdAcc stats
 494 *
 495 * @param none
 496 *
 497 * @return none
 498 *
 499 * @note - Stats display use printf() and are redirected to stdout
 500 */
 501PUBLIC void
 502ixAtmdAccStatsShow (void);
 503
 504/**
 505 *
 506 * @ingroup IxAtmdAccAPI
 507 *
 508 * @fn ixAtmdAccStatsReset (void)
 509 *
 510 * @brief Reset all IxAtmdAcc stats
 511 *
 512 * @param none
 513 *
 514 * @return none
 515 *
 516 */
 517PUBLIC void
 518ixAtmdAccStatsReset (void);
 519
 520/* ------------------------------------------------------
 521   Part of the IxAtmdAcc interface related to RX traffic
 522   ------------------------------------------------------ */
 523
 524/**
 525 *
 526 * @ingroup IxAtmdAccAPI
 527 *
 528 * @fn ixAtmdAccRxVcConnect (IxAtmLogicalPort port,
 529                      unsigned int vpi,
 530                      unsigned int vci,
 531                      IxAtmdAccAalType aalServiceType,
 532                      IxAtmRxQueueId rxQueueId,
 533                      IxAtmdAccUserId userCallbackId,
 534                      IxAtmdAccRxVcRxCallback rxCallback,
 535                      unsigned int minimumReplenishCount,
 536                      IxAtmConnId * connIdPtr,
 537                      IxAtmNpeRxVcId * npeVcIdPtr )
 538 *
 539 * @brief Connect to a Aal Pdu receive service for a particular
 540 *        port/vpi/vci, and service type.
 541 *
 542 * This function allows a user to connect to an Aal5/Aal0/OAM Pdu receive service
 543 * for a particular port/vpi/vci. It registers the callback and allocates
 544 * internal resources and a Connection Id to be used in further API calls
 545 * related to this VCC.
 546 *
 547 * The function will setup VC receive service on the specified rx queue.
 548 *
 549 * This function is blocking and makes use internal locks, and hence
 550 * should not be called from an interrupt context.
 551 *
 552 * On return from @a ixAtmdAccRxVcConnect() with a failure status, the
 553 * connection Id parameter is unspecified. Its value cannot be used.
 554 * A connId is the reference by which IxAtmdAcc refers to a
 555 * connected VC. This identifier is the result of a succesful call
 556 * to a connect function. This identifier is invalid after a
 557 * sucessful call to a disconnect function.
 558 *
 559 * Calling this function for the same combination of Vpi, Vci and more
 560 * than once without calling @a ixAtmdAccRxVcTryDisconnect() will result in a
 561 * failure status.
 562 *
 563 * If this function returns success the user should supply receive
 564 * buffers by calling @a ixAtmdAccRxVcFreeReplenish() and then call
 565 * @a ixAtmdAccRxVcEnable() to begin receiving pdus.
 566 *
 567 * There is a choice of two receive Qs on which the VC pdus could be
 568 * receive. The user must associate the VC with one of these. Essentially
 569 * having two qs allows more flexible system configuration such as have
 570 * high prioriy traffic on one q (e.g. voice) and low priority traffic on
 571 * the other (e.g. data). The high priority Q could be serviced in
 572 * preference to the low priority Q. One queue may be configured to be
 573 * serviced as soon as there is traffic, the other queue may be configured
 574 * to be serviced by a polling mechanism running at idle time.
 575 *
 576 * Two AAL0 services supporting 48 or 52 byte cell data are provided.
 577 * Received AAL0 PDUs will be be a multiple of the cell data size (48/52).
 578 * AAL0_52 is a raw cell service and includes an ATM cell header
 579 * (excluding HEC) at the start of each cell.
 580 *
 581 * A single "OAM Rx channel" for all ports may be  enabled by
 582 * establishing a dedicated OAM Rx connection.
 583 *
 584 * The OAM service allows buffers containing 52 byte OAM F4/F5 cells
 585 * to be transmitted and received over the dedicated OAM channels.
 586 * HEC is appended/removed, and CRC-10 performed by the NPE. The OAM
 587 * service offered by AtmdAcc is a raw cell transport service.
 588 * It is assumed that ITU I.610 procedures that make use of this
 589 * service are implemented above AtmdAcc.
 590 *
 591 * Note that the dedicated OAM connections are established on
 592 * reserved VPI,VCI, and (in the case of Rx) port values.
 593 * These values are used purely to descriminate the dedicated OAM channels
 594 * and do not identify a particular OAM F4/F5 flow. F4/F5 flows may be
 595 * realised for particluar VPI/VCIs by manipulating the VPI,VCI
 596 * fields of the ATM cell headers of cells in the buffers passed
 597 * to AtmdAcc.
 598 *
 599 * Calling this function prior to enable the port will fail.
 600 *
 601 * @sa ixAtmdAccRxDispatch
 602 * @sa ixAtmdAccRxVcEnable
 603 * @sa ixAtmdAccRxVcDisable
 604 * @sa ixAtmdAccRxVcTryDisconnect
 605 * @sa ixAtmdAccPortEnable
 606 *
 607 * @param port @ref IxAtmLogicalPort [in] - VC identification : logical PHY port
 608 *                  [@a IX_UTOPIA_PORT_0 .. @a IX_UTOPIA_MAX_PORTS - 1]
 609 * @param vpi unsigned int [in] - VC identification : ATM Vpi [0..255] or IX_ATMDACC_OAM_VPI
 610 * @param vci unsigned int [in] - VC identification : ATM Vci [0..65535] or IX_ATMDACC_OAM_VCI
 611 * @param aalServiceType @ref IxAtmdAccAalType [in] - type of service: AAL5, AAL0_48, AAL0_52, or OAM
 612 * @param rxQueueId @ref IxAtmRxQueueId [in] - this identifieds which of two Qs the VC
 613 *     should use.when icoming traffic is processed
 614 * @param userCallbackId @ref IxAtmdAccUserId [in] - user Id used later as a parameter to
 615 *     the supplied rxCallback.
 616 * @param rxCallback [in] @ref IxAtmdAccRxVxRxCallback - function called when mbufs are received.
 617 *     This parameter cannot be a null pointer.
 618 * @param bufferFreeCallback [in] - function to be called to return
 619 *     ownership of buffers to IxAtmdAcc user.
 620 * @param minimumReplenishCount unsigned int [in] -  For AAL5/AAL0 the number of free mbufs
 621 *     to be used with this channel. Use a high number when the expected traffic
 622 *     rate on this channel is high, or when the user's mbufs are small, or when
 623 *     the RxVcFreeLow Notification has to be invoked less often. When this
 624 *     value is IX_ATMDACC_DEFAULT_REPLENISH_COUNT, the minimum of
 625 *     resources  will be used. Depending on traffic rate, pdu
 626 *     size and mbuf size, rxfree queue size, polling/interrupt rate, this value may
 627 *     require to be replaced by a different value in the range 1-128
 628 *     For OAM the rxFree queue size is fixed by atmdAcc and this parameter is ignored.
 629 * @param connIdPtr @ref IxAtmConnId [out] - pointer to a connection Id
 630 *     This parameter cannot be a null pointer.
 631 * @param npeVcIdPtr @ref IxAtmNpeRxVcId [out] - pointer to an npe Vc Id
 632 *     This parameter cannot be a null pointer.
 633 *
 634 * @return @li IX_SUCCESS successful call to IxAtmdAccRxVcConnect
 635 * @return @li IX_ATMDACC_BUSY cannot process this request :
 636 *         no VC is available
 637 * @return @li IX_FAIL
 638 *             parameter error,
 639 *             VC already in use,
 640 *             attempt to connect AAL service on reserved OAM VPI/VCI,
 641 *             attempt to connect OAM service on VPI/VCI other than the reserved OAM VPI/VCI,
 642 *             port is not initialised,
 643 *             or some other error occurs during processing.
 644 *
 645 */
 646PUBLIC IX_STATUS ixAtmdAccRxVcConnect (IxAtmLogicalPort port,
 647                      unsigned int vpi,
 648                      unsigned int vci,
 649                      IxAtmdAccAalType aalServiceType,
 650                      IxAtmRxQueueId rxQueueId,
 651                      IxAtmdAccUserId userCallbackId,
 652                      IxAtmdAccRxVcRxCallback rxCallback,
 653                      unsigned int minimumReplenishCount,
 654                      IxAtmConnId * connIdPtr,
 655                      IxAtmNpeRxVcId * npeVcIdPtr );
 656
 657/**
 658 *
 659 * @ingroup IxAtmdAccAPI
 660 * 
 661 * @fn ixAtmdAccRxVcFreeReplenish (IxAtmConnId connId,
 662                        IX_OSAL_MBUF * mbufPtr)
 663 *
 664 * @brief Provide free mbufs for data reception on a connection.
 665 *
 666 * This function provides mbufs for data reception by the hardware. This
 667 * function needs to be called by the user on a regular basis to ensure
 668 * no packet loss. Providing free buffers is a connection-based feature;
 669 * each connection can have different requirements in terms of buffer size
 670 * number of buffers, recycling rate. This function could be invoked from
 671 * within the context of a @a IxAtmdAccRxVcFreeLowCallback() callback
 672 * for a particular VC
 673 *
 674 * Mbufs provided through this function call can be chained. They will be
 675 * unchained internally. A call to this function with chained mbufs or
 676 * multiple calls with unchained mbufs are equivalent, but calls with
 677 * unchained mbufs are more efficients.
 678 *
 679 * Mbufs provided to this interface need to be able to hold at least one
 680 * full cell payload (48/52 bytes, depending on service type).
 681 * Chained buffers with a size less than the size supported by the hardware
 682 * will be returned through the rx callback provided during the connect step.
 683 *
 684 * Failing to invoke this function prior to enabling the RX traffic
 685 * can result in packet loss.
 686 *
 687 * This function is not reentrant for the same connId.
 688 *
 689 * This function does not use system resources and can be
 690 * invoked from an interrupt context.
 691 *
 692 * @note - Over replenish is detected, and extra mbufs are returned through
 693 *         the rx callback provided during the connect step.
 694 *
 695 * @note - Mbuf provided to the replenish function should have a length greater or
 696 *         equal to 48/52 bytes according to service type.
 697 *
 698 * @note - The memory cache of mMbuf payload should be invalidated prior to Mbuf
 699 *         submission. Flushing the Mbuf headers is handled by IxAtmdAcc.
 700 *
 701 * @note - When a chained mbuf is provided, this function process the mbufs
 702 *         up to the hardware limit and invokes the user-supplied callback
 703 *         to release extra buffers.
 704 *
 705 * @sa ixAtmdAccRxVcFreeLowCallbackRegister
 706 * @sa IxAtmdAccRxVcFreeLowCallback
 707 * @sa ixAtmdAccRxVcConnect
 708 *
 709 * @param connId @ref IxAtmConnId [in] - connection Id as returned from a succesfull call to
 710 *        @a IxAtmdAccRxVcConnect()
 711 * @param mbufPtr @ref IX_OSAL_MBUF [in] - pointer to a mbuf structure to be used for data
 712 *        reception. The mbuf pointed to by this parameter can be chained
 713 *        to an other mbuf.
 714 *
 715 * @return @li IX_SUCCESS successful call to @a ixAtmdAccRxVcFreeReplenish()
 716 *          and the mbuf is now ready to use for incoming traffic.
 717 * @return @li IX_ATMDACC_BUSY cannot process this request because
 718 *         the max number of outstanding free buffers has been reached
 719 *         or the internal resources have exhausted for this VC.
 720 *         The user is responsible for retrying this request later.
 721 * @return @li IX_FAIL cannot process this request because of parameter
 722 *         errors or some unspecified internal error has occurred.
 723 *
 724 * @note - It is not always guaranteed the replenish step to be as fast as the
 725 *   hardware is consuming Rx Free mbufs. There is nothing in IxAtmdAcc to
 726 *   guarantee that replenish reaches the rxFree threshold level. If the
 727 *   threshold level is not reached, the next rxFree low notification for
 728 *   this channel will not be triggered.
 729 *   The preferred ways to replenish can be as follows (depending on
 730 *   applications and implementations) :
 731 *   @li Replenish in a rxFree low notification until the function
 732 *       ixAtmdAccRxVcFreeReplenish() returns IX_ATMDACC_BUSY
 733 *   @li Query the queue level using @sa ixAtmdAccRxVcFreeEntriesQuery, then
 734 *     , replenish using @a ixAtmdAccRxVcFreeReplenish(), then query the queue
 735 *       level again, and replenish if the threshold is still not reached.
 736 *   @li Trigger replenish from an other event source and use rxFree starvation
 737 *       to throttle the Rx traffic.
 738 *
 739 */
 740PUBLIC IX_STATUS ixAtmdAccRxVcFreeReplenish (IxAtmConnId connId,
 741                        IX_OSAL_MBUF * mbufPtr);
 742
 743/**
 744 *
 745 * @ingroup IxAtmdAccAPI
 746 * 
 747 * @fn ixAtmdAccRxVcFreeLowCallbackRegister (IxAtmConnId connId,
 748                                    unsigned int numberOfMbufs,
 749                                    IxAtmdAccRxVcFreeLowCallback callback)
 750 *
 751 * @brief Configure the RX Free threshold value and register a callback
 752 * to handle threshold notifications.
 753 *
 754 * The function ixAtmdAccRxVcFreeLowCallbackRegister sets the threshold value for
 755 * a particular RX VC. When the number of buffers reaches this threshold
 756 * the callback is invoked.
 757 *
 758 * This function should be called once per VC before RX traffic is
 759 * enabled.This function will fail if the curent level of the free buffers
 760 * is equal or less than the threshold value.
 761 *
 762 * @sa ixAtmdAccRxVcFreeLowCallbackRegister
 763 * @sa IxAtmdAccRxVcFreeLowCallback
 764 * @sa ixAtmdAccRxVcFreeReplenish
 765 * @sa ixAtmdAccRxVcFreeEntriesQuery
 766 * @sa ixAtmdAccRxVcConnect
 767 *
 768 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call
 769 *        to @a IxAtmdAccRxVcConnect()
 770 * @param numberOfMbufs unsigned int [in] - threshold number of buffers. This number
 771 *        has to be a power of 2, one of the values 0,1,2,4,8,16,32....
 772 *        The maximum value cannot be more than half of the rxFree queue
 773 *        size (which can be retrieved using @a ixAtmdAccRxVcFreeEntriesQuery()
 774 *        before any use of the @a ixAtmdAccRxVcFreeReplenish() function)
 775 * @param callback @ref IxAtmdAccRxVcFreeLowCallback [in] - function telling the user that the number of
 776 *        free buffers has reduced to the threshold value.
 777 *
 778 * @return @li IX_SUCCESS Threshold set successfully.
 779 * @return @li IX_FAIL parameter error or the current number of free buffers
 780 *              is less than or equal to the threshold supplied or some
 781 *              unspecified error has occrred.
 782 *
 783 * @note - the callback will be called when the threshold level will drop from
 784 *        exactly (numberOfMbufs + 1) to (numberOfMbufs).
 785 *
 786 */
 787PUBLIC IX_STATUS ixAtmdAccRxVcFreeLowCallbackRegister (IxAtmConnId connId,
 788    unsigned int numberOfMbufs,
 789    IxAtmdAccRxVcFreeLowCallback callback);
 790
 791/**
 792 *
 793 * @ingroup IxAtmdAccAPI
 794 *
 795 * @fn ixAtmdAccRxVcFreeEntriesQuery (IxAtmConnId connId,
 796                         unsigned int *numberOfMbufsPtr)
 797 *
 798 * @brief Get the number of rx mbufs the system can accept to replenish the
 799 *       the rx reception mechanism on a particular channel
 800 *
 801 * The ixAtmdAccRxVcFreeEntriesQuery function is used to retrieve the current
 802 * number of available mbuf entries for reception, on a per-VC basis. This
 803 * function can be used to know the number of mbufs which can be provided
 804 * using @a ixAtmdAccRxVcFreeReplenish().
 805 *
 806 * This function can be used from a timer context, or can be associated
 807 * with a threshold event, or can be used inside an active polling
 808 * mechanism which is under user control.
 809 *
 810 * This function is reentrant and does not use system resources and can
 811 * be invoked from an interrupt context.
 812 *
 813 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call
 814 *        to @a IxAtmdAccRxVcConnect()
 815 * @param numberOfMbufsPtr unsigned int [out] - Pointer to the number of available entries.
 816 *      . This parameter cannot be a null pointer.
 817 *
 818 * @return @li IX_SUCCESS the current number of mbufs not yet used for incoming traffic
 819 * @return @li IX_FAIL invalid parameter
 820 *
 821 * @sa ixAtmdAccRxVcFreeReplenish
 822 *
 823 */
 824PUBLIC IX_STATUS ixAtmdAccRxVcFreeEntriesQuery (IxAtmConnId connId,
 825                         unsigned int *numberOfMbufsPtr);
 826
 827/**
 828 *
 829 * @ingroup IxAtmdAccAPI
 830 *
 831 * @fn ixAtmdAccRxVcEnable (IxAtmConnId connId)
 832 *
 833 * @brief Start the RX service on a VC.
 834 *
 835 * This functions kicks-off the traffic reception for a particular VC.
 836 * Once invoked, incoming PDUs will be made available by the hardware
 837 * and are eventually directed to the @a IxAtmdAccRxVcRxCallback() callback
 838 * registered for the connection.
 839 *
 840 * If the traffic is already running, this function returns IX_SUCCESS.
 841 * This function can be invoked many times.
 842 *
 843 * IxAtmdAccRxVcFreeLowCallback event will occur only after
 844 * @a ixAtmdAccRxVcEnable() function is invoked.
 845 *
 846 * Before using this function, the @a ixAtmdAccRxVcFreeReplenish() function
 847 * has to be used to replenish the RX Free queue. If not, incoming traffic
 848 * may be discarded.and in the case of interrupt driven reception the
 849 * @a IxAtmdAccRxVcFreeLowCallback() callback may be invoked as a side effect
 850 * during a replenish action.
 851 *
 852 * This function is not reentrant and should not be used inside an
 853 * interrupt context.
 854 *
 855 * For an VC connection this function can be called after a call to
 856 * @a ixAtmdAccRxVcDisable() and should not be called after
 857 * @a ixAtmdAccRxVcTryDisconnect()
 858 *
 859 * @sa ixAtmdAccRxVcDisable
 860 * @sa ixAtmdAccRxVcConnect
 861 * @sa ixAtmdAccRxVcFreeReplenish
 862 *
 863 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call
 864 * to @a IxAtmdAccRxVcConnect()
 865 *
 866 * @return @li IX_SUCCESS successful call to ixAtmdAccRxVcEnable
 867 * @return @li IX_ATMDACC_WARNING the channel is already enabled
 868 * @return @li IX_FAIL invalid parameters or some unspecified internal
 869 *         error occured.
 870 *
 871 */
 872PUBLIC IX_STATUS ixAtmdAccRxVcEnable (IxAtmConnId connId);
 873
 874/**
 875 *
 876 * @ingroup IxAtmdAccAPI
 877 * 
 878 * @fn ixAtmdAccRxVcDisable (IxAtmConnId connId)
 879 *
 880 * @brief Stop the RX service on a VC.
 881 *
 882 * This functions stops the traffic reception for a particular VC connection.
 883 *
 884 * Once invoked, incoming Pdus are discarded by the hardware. Any Pdus
 885 * pending will be freed to the user
 886 *
 887 * Hence once this function returns no more receive callbacks will be
 888 * called for that VC. However, buffer free callbacks will be invoked
 889 * until such time as all buffers supplied by the user have been freed
 890 * back to the user
 891 *
 892 * Calling this function doe not invalidate the connId.
 893 * @a ixAtmdAccRxVcEnable() can be invoked to enable Pdu reception again.
 894 *
 895 * If the traffic is already stopped, this function returns IX_SUCCESS.
 896 *
 897 * This function is not reentrant and should not be used inside an
 898 * interrupt context.
 899 *
 900 * @sa ixAtmdAccRxVcConnect
 901 * @sa ixAtmdAccRxVcEnable
 902 * @sa ixAtmdAccRxVcDisable
 903 *
 904 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call to @a
 905 *     IxAtmdAccRxVcConnect()
 906 *
 907 * @return @li IX_SUCCESS successful call to @a ixAtmdAccRxVcDisable().
 908 * @return @li IX_ATMDACC_WARNING the channel is already disabled
 909 * @return @li IX_FAIL invalid parameters or some unspecified internal error occured
 910 *
 911 */
 912PUBLIC IX_STATUS ixAtmdAccRxVcDisable (IxAtmConnId connId);
 913
 914/**
 915 *
 916 * @ingroup IxAtmdAccAPI
 917 * 
 918 * @fn ixAtmdAccRxVcTryDisconnect (IxAtmConnId connId)
 919 *
 920 * @brief Disconnect a VC from the RX service.
 921 *
 922 * This function deregisters the VC and guarantees that all resources
 923 * associated with this VC are free. After its execution, the connection
 924 * Id is not available.
 925 *
 926 * This function will fail until such time as all resources allocated to
 927 * the VC connection have been freed. The user is responsible to delay and
 928 * call again this function many times until a success status is returned.
 929 *
 930 * This function needs internal locks and should not be called from an
 931 * interrupt context
 932 *
 933 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call to
 934 * @a IxAtmdAccRxVcConnect()
 935 *
 936 * @return @li IX_SUCCESS successful call to ixAtmdAccRxVcDisable
 937 * @return @li IX_ATMDACC_RESOURCES_STILL_ALLOCATED not all resources
 938 *         associated with the connection have been freed.
 939 * @return @li IX_FAIL cannot process this request because of a parameter
 940 *         error
 941 *
 942 */
 943PUBLIC IX_STATUS ixAtmdAccRxVcTryDisconnect (IxAtmConnId connId);
 944
 945/* ------------------------------------------------------
 946   Part of the IxAtmdAcc interface related to TX traffic
 947   ------------------------------------------------------ */
 948
 949/**
 950 *
 951 * @ingroup IxAtmdAccAPI
 952 * 
 953 * @fn ixAtmdAccTxVcConnect (IxAtmLogicalPort port,
 954                      unsigned int vpi,
 955                      unsigned int vci,
 956                      IxAtmdAccAalType aalServiceType,
 957                      IxAtmdAccUserId userId,
 958                      IxAtmdAccTxVcBufferReturnCallback bufferFreeCallback,
 959                      IxAtmConnId * connIdPtr)
 960 *
 961 * @brief Connect to a Aal Pdu transmit service for a particular
 962 *        port/vpi/vci and service type.
 963 *
 964 * This function allows a user to connect to an Aal5/Aal0/OAM Pdu transmit service
 965 * for a particular port/vpi/vci. It registers the callback and allocates
 966 * internal resources and a Connection Id to be used in further API calls
 967 * related to this VC.
 968 *
 969 * The function will setup VC transmit service on the specified on the
 970 * specified port. A connId is the reference by which IxAtmdAcc refers to a
 971 * connected VC. This identifier is the result of a succesful call
 972 * to a connect function. This identifier is invalid after a
 973 * sucessful call to a disconnect function.
 974 *
 975 * This function needs internal locks, and hence  should not be called
 976 * from an interrupt context.
 977 *
 978 * On return from @a ixAtmdAccTxVcConnect() with a failure status, the
 979 * connection Id parameter is unspecified. Its value cannot be used.
 980 *
 981 * Calling this function for the same combination of port, Vpi, Vci and
 982 * more than once without calling @a ixAtmdAccTxVcTryDisconnect() will result
 983 * in a failure status.
 984 *
 985 * Two AAL0 services supporting 48 or 52 byte cell data are provided.
 986 * Submitted AAL0 PDUs must be a multiple of the cell data size (48/52).
 987 * AAL0_52 is a raw cell service the client must format
 988 * the PDU with an ATM cell header (excluding HEC) at the start of
 989 * each cell, note that AtmdAcc does not validate the cell headers in
 990 * a submitted PDU.
 991 *
 992 * For the OAM service an "OAM Tx channel" may be enabled for a port
 993 * by establishing a single dedicated OAM Tx connection on that port.
 994 *
 995 * The OAM service allows buffers containing 52 byte OAM F4/F5 cells
 996 * to be transmitted and received over the dedicated OAM channels.
 997 * HEC is appended/removed, and CRC-10 performed by the NPE. The OAM
 998 * service offered by AtmdAcc is a raw cell transport service.
 999 * It is assumed that ITU I.610 procedures that make use of this
1000 * service are implemented above AtmdAcc.
1001 *
1002 * Note that the dedicated OAM connections are established on
1003 * reserved VPI,VCI, and (in the case of Rx) port values.
1004 * These values are used purely to descriminate the dedicated OAM channels
1005 * and do not identify a particular OAM F4/F5 flow. F4/F5 flows may be
1006 * realised for particluar VPI/VCIs by manipulating the VPI,VCI
1007 * fields of the ATM cell headers of cells in the buffers passed
1008 * to AtmdAcc.
1009 *
1010 * Calling this function before enabling the port will fail.
1011 *
1012 * @sa ixAtmdAccTxVcTryDisconnect
1013 * @sa ixAtmdAccPortTxScheduledModeEnable
1014 * @sa ixAtmdAccPortEnable
1015 *
1016 * @param port @ref IxAtmLogicalPort [in] - VC identification : logical PHY port
1017 *                  [@a IX_UTOPIA_PORT_0 .. @a IX_UTOPIA_MAX_PORTS - 1]
1018 * @param vpi unsigned int  [in] - VC identification : ATM Vpi [0..255] or IX_ATMDACC_OAM_VPI
1019 * @param vci unsigned int [in] - VC identification : ATM Vci [0..65535] or IX_ATMDACC_OAM_VCI
1020 * @param aalServiceType @ref IxAtmdAccAalType [in] - type of service AAL5, AAL0_48, AAL0_52, or OAM
1021 * @param userId @ref IxAtmdAccUserId [in] - user id to be used later during callbacks related
1022 *        to this channel
1023 * @param bufferFreeCallback @ref IxAtmdAccTxVcBufferReturnCallback [in] - function called when mbufs
1024 *        transmission is complete. This parameter cannot be a null
1025 *        pointer.
1026 * @param connIdPtr @ref IxAtmConnId [out] - Pointer to a connection Id.
1027 *        This parameter cannot be a null pointer.
1028 *
1029 * @return @li IX_SUCCESS successful call to @a IxAtmdAccRxVcConnect().
1030 * @return @li IX_ATMDACC_BUSY cannot process this request
1031 *         because no VC is available
1032 * @return @li IX_FAIL
1033 *             parameter error,
1034 *             VC already in use,
1035 *             attempt to connect AAL service on reserved OAM VPI/VCI,
1036 *             attempt to connect OAM service on VPI/VCI other than the reserved OAM VPI/VCI,
1037 *             port is not initialised,
1038 *             or some other error occurs during processing.
1039 *
1040 * @note - Unscheduled mode is not supported in ixp425 1.0. Therefore, the
1041 *       function @a ixAtmdAccPortTxScheduledModeEnable() need to be called
1042 *       for this port before any establishing a Tx Connection
1043 */
1044PUBLIC IX_STATUS ixAtmdAccTxVcConnect (IxAtmLogicalPort port,
1045                      unsigned int vpi,
1046                      unsigned int vci,
1047                      IxAtmdAccAalType aalServiceType,
1048                      IxAtmdAccUserId userId,
1049                      IxAtmdAccTxVcBufferReturnCallback bufferFreeCallback,
1050                      IxAtmConnId * connIdPtr);
1051
1052/**
1053 *
1054 * @ingroup IxAtmdAccAPI
1055 *
1056 * @fn ixAtmdAccTxVcPduSubmit (IxAtmConnId connId,
1057                    IX_OSAL_MBUF * mbufPtr,
1058                    IxAtmdAccClpStatus clp,
1059                    unsigned int numberOfCells)
1060 *
1061 * @brief Submit a Pdu for transmission on connection.
1062 *
1063 * A data user calls this function to submit an mbufs containing a Pdu
1064 * to be transmitted. The buffer supplied can be chained and the Pdu it
1065 * contains must be complete.
1066 *
1067 * The transmission behavior of this call depends on the operational mode
1068 * of the port on which the connection is made.
1069 *
1070 * In unscheduled mode the mbuf will be submitted to the hardware
1071 * immediately if sufficent resource is available. Otherwise the function
1072 * will return failure.
1073 *
1074 * In scheduled mode the buffer is queued internally in IxAtmdAcc. The cell
1075 * demand is made known to the traffic shaping entity. Cells from the
1076 * buffers are MUXed onto the port some time later as dictated by the
1077 * traffic shaping entity. The traffic shaping entity does this by sending
1078 * transmit schedules to IxAtmdAcc via @a ixAtmdAccPortTxProcess() function call.
1079 *
1080 * Note that the dedicated OAM channel is scheduled just like any
1081 * other channel. This means that any OAM traffic relating to an
1082 * active AAL0/AAL5 connection will be scheduled independantly of the
1083 * AAL0/AAL5 traffic for that connection.
1084 *
1085 * When transmission is complete, the TX Done mechanism will give the
1086 * owmnership of these buffers back to the customer. The tx done mechanism
1087 * must be in operation before transmission is attempted.
1088 *
1089 * For AAL0/OAM submitted AAL0 PDUs must be a multiple of the cell data
1090 * size (48/52). AAL0_52 and OAM are raw cell services, and the client
1091 * must format the PDU with an ATM cell header (excluding HEC) at the
1092 * start of each cell, note that AtmdAcc does not validate the cell headers in
1093 * a submitted PDU.
1094 *
1095 *
1096 * @sa IxAtmdAccTxVcBufferReturnCallback
1097 * @sa ixAtmdAccTxDoneDispatch
1098 *
1099 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call to
1100 *        @a ixAtmdAccTxVcConnect()
1101 * @param mbufPtr @ref IX_OSAL_MBUF [in] - pointer to a chained structure of mbufs to transmit.
1102 *       This parameter cannot be a null pointer.
1103 * @param clp @ref IxAtmdAccClpStatus [in] - clp indication for this PDU. All cells of this pdu
1104 *       will be sent with the clp bit set
1105 * @param numberOfCells unsigned int [in] - number of cells in the PDU.
1106 *
1107 * @return @li IX_SUCCESS successful call to @a ixAtmdAccTxVcPduSubmit()
1108 *             The pdu pointed by the mbufPtr parameter will be
1109 *             transmitted
1110 * @return @li IX_ATMDACC_BUSY unable to process this request because
1111 *             internal resources are all used. The caller is responsible
1112 *             for retrying this request later.
1113 * @return @li IX_FAIL unable to process this request because of error
1114 *             in the parameters (wrong connId supplied,
1115 *             or wrong mbuf pointer supplied), the total length of all buffers
1116 *             in the chain should be a multiple of the cell size
1117 *             ( 48/52 depending on the service type ),
1118 *             or unspecified error during processing
1119 *
1120 * @note - This function in not re-entrant for the same VC (e.g. : two
1121 *         thread cannot send PDUs for the same VC). But two threads can
1122 *         safely call this function with a different connection Id
1123 *
1124 * @note - In unscheduled mode, this function is not re-entrant on a per
1125 *         port basis. The size of pdus is limited to 8Kb.
1126 *
1127 * @note - 0-length mbufs should be removed from the chain before submission.
1128 *         The total length of the pdu (sdu + padding +trailer) has to be
1129 *         updated in the header of the first mbuf of a chain of mbufs.
1130 *
1131 * @note - Aal5 trailer information (UUI, CPI, SDU length) has to be supplied
1132 *         before submission.
1133 *
1134 * @note - The payload memory cache should be flushed, if needed, prior to
1135 *         transmission. Mbuf headers are flushed by IxAtmdAcc
1136 *
1137 * @note - This function does not use system resources and can be used
1138 *         inside an interrupt context
1139 */
1140PUBLIC IX_STATUS ixAtmdAccTxVcPduSubmit (IxAtmConnId connId,
1141                    IX_OSAL_MBUF * mbufPtr,
1142                    IxAtmdAccClpStatus clp,
1143                    unsigned int numberOfCells);
1144
1145/**
1146 *
1147 * @ingroup IxAtmdAccAPI
1148 *
1149 * @fn ixAtmdAccTxVcTryDisconnect (IxAtmConnId connId)
1150 *
1151 * @brief Disconnect from a Aal Pdu transmit service for a particular
1152 *        port/vpi/vci.
1153 *
1154 * This function deregisters the VC and guarantees that all resources
1155 * associated with this VC are free. After its execution, the connection
1156 * Id is not available.
1157 *
1158 * This function will fail until such time as all resources allocated to
1159 * the VC connection have been freed. The user is responsible to delay
1160 * and call again this function many times until a success status is
1161 * returned.
1162 *
1163 * After its execution, the connection Id is not available.
1164 *
1165 * @param connId @ref IxAtmConnId [in] - connection Id as resulted from a succesfull call to
1166 *        @a ixAtmdAccTxVcConnect()
1167 *
1168 * @return @li IX_SUCCESS successful call to @a ixAtmdAccTxVcTryDisconnect()
1169 * @return @li IX_ATMDACC_RESOURCES_STILL_ALLOCATED not all resources
1170 *     associated with the connection have been freed. This condition will
1171 *     disappear after Tx and TxDone is complete for this channel.
1172 * @return @li IX_FAIL unable to process this request because of errors
1173 *                     in the parameters (wrong connId supplied)
1174 *
1175 * @note - This function needs internal locks and should not be called
1176 *         from an interrupt context
1177 *
1178 * @note - If the @a IX_ATMDACC_RESOURCES_STILL_ALLOCATED error does not
1179 *     clear after a while, this may be linked to a previous problem
1180 *     of cell overscheduling. Diabling the port and retry a disconnect
1181 *     will free the resources associated with this channel.
1182 *
1183 * @sa ixAtmdAccPortTxProcess
1184 *
1185 */
1186PUBLIC IX_STATUS ixAtmdAccTxVcTryDisconnect (IxAtmConnId connId);
1187
1188#endif /* IXATMDACC_H */
1189
1190/**
1191 * @} defgroup IxAtmdAccAPI
1192 */
1193
1194
1195