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