uboot/drivers/net/npe/include/IxEthAcc.h
<<
>>
Prefs
   1/** @file    IxEthAcc.h
   2 *
   3 * @brief this file contains the public API of @ref IxEthAcc component
   4 *
   5 * Design notes:
   6 * The IX_OSAL_MBUF address is to be specified on bits [31-5] and must 
   7 * be cache aligned (bits[4-0] cleared)
   8 *
   9 * 
  10 * @par
  11 * IXP400 SW Release version 2.0
  12 * 
  13 * -- Copyright Notice --
  14 * 
  15 * @par
  16 * Copyright 2001-2005, Intel Corporation.
  17 * All rights reserved.
  18 * 
  19 * @par
  20 * Redistribution and use in source and binary forms, with or without
  21 * modification, are permitted provided that the following conditions
  22 * are met:
  23 * 1. Redistributions of source code must retain the above copyright
  24 *    notice, this list of conditions and the following disclaimer.
  25 * 2. Redistributions in binary form must reproduce the above copyright
  26 *    notice, this list of conditions and the following disclaimer in the
  27 *    documentation and/or other materials provided with the distribution.
  28 * 3. Neither the name of the Intel Corporation nor the names of its contributors
  29 *    may be used to endorse or promote products derived from this software
  30 *    without specific prior written permission.
  31 * 
  32 * @par
  33 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
  34 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  35 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  36 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  37 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  38 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  39 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  41 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  42 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  43 * SUCH DAMAGE.
  44 * 
  45 * @par
  46 * -- End of Copyright Notice --
  47 *
  48 */
  49
  50#ifndef IxEthAcc_H
  51#define IxEthAcc_H
  52
  53#include <IxOsBuffMgt.h>
  54#include <IxTypes.h>
  55
  56/**
  57 * @defgroup IxEthAcc IXP400 Ethernet Access (IxEthAcc) API
  58 *
  59 * @brief ethAcc is a library that does provides access to the internal IXP400 10/100Bt Ethernet MACs.
  60 *
  61 *@{
  62 */
  63
  64/**
  65 * @ingroup IxEthAcc
  66 * @brief Definition of the Ethernet Access status
  67 */
  68typedef enum /* IxEthAccStatus */
  69{
  70    IX_ETH_ACC_SUCCESS = IX_SUCCESS, /**< return success*/
  71    IX_ETH_ACC_FAIL = IX_FAIL, /**< return fail*/
  72    IX_ETH_ACC_INVALID_PORT, /**< return invalid port*/
  73    IX_ETH_ACC_PORT_UNINITIALIZED, /**< return uninitialized*/
  74    IX_ETH_ACC_MAC_UNINITIALIZED, /**< return MAC uninitialized*/
  75    IX_ETH_ACC_INVALID_ARG, /**< return invalid arg*/
  76    IX_ETH_TX_Q_FULL, /**< return tx queue is full*/
  77    IX_ETH_ACC_NO_SUCH_ADDR /**< return no such address*/
  78} IxEthAccStatus;
  79
  80/**
  81 * @ingroup IxEthAcc
  82 * @enum IxEthAccPortId
  83 * @brief Definition of the IXP400 Mac Ethernet device.
  84 */
  85typedef enum  
  86{
  87        IX_ETH_PORT_1 = 0, /**< Ethernet Port 1 */
  88        IX_ETH_PORT_2 = 1  /**< Ethernet port 2 */
  89        ,IX_ETH_PORT_3 = 2 /**< Ethernet port 3 */
  90} IxEthAccPortId;
  91
  92/**
  93 * @ingroup IxEthAcc
  94 *
  95 * @def IX_ETH_ACC_NUMBER_OF_PORTS
  96 *
  97 * @brief  Definition of the number of ports
  98 *
  99 */
 100#ifdef __ixp46X
 101#define IX_ETH_ACC_NUMBER_OF_PORTS (3)
 102#else
 103#define IX_ETH_ACC_NUMBER_OF_PORTS (2)
 104#endif
 105
 106/**
 107 * @ingroup IxEthAcc
 108 *
 109 * @def IX_IEEE803_MAC_ADDRESS_SIZE
 110 *
 111 * @brief  Definition of the size of the MAC address
 112 *
 113 */
 114#define IX_IEEE803_MAC_ADDRESS_SIZE (6)
 115
 116
 117/**
 118 *
 119 * @brief Definition of the IEEE 802.3 Ethernet MAC address structure.
 120 *
 121 * The data should be packed with bytes xx:xx:xx:xx:xx:xx 
 122 * @note
 123 * The data must be packed in network byte order.
 124 */
 125typedef struct  
 126{
 127    UINT8 macAddress[IX_IEEE803_MAC_ADDRESS_SIZE]; /**< MAC address */
 128} IxEthAccMacAddr;
 129
 130/**
 131 * @ingroup IxEthAcc
 132 * @def IX_ETH_ACC_NUM_TX_PRIORITIES
 133 * @brief Definition of the number of transmit priorities
 134 * 
 135 */
 136#define IX_ETH_ACC_NUM_TX_PRIORITIES (8)
 137
 138/**
 139 * @ingroup IxEthAcc
 140 * @enum IxEthAccTxPriority
 141 * @brief Definition of the relative priority used to transmit a frame
 142 * 
 143 */
 144typedef enum  
 145{
 146        IX_ETH_ACC_TX_PRIORITY_0 = 0, /**<Lowest Priority submission */
 147        IX_ETH_ACC_TX_PRIORITY_1 = 1, /**<submission prority of 1 (0 is lowest)*/
 148        IX_ETH_ACC_TX_PRIORITY_2 = 2, /**<submission prority of 2 (0 is lowest)*/
 149        IX_ETH_ACC_TX_PRIORITY_3 = 3, /**<submission prority of 3 (0 is lowest)*/
 150        IX_ETH_ACC_TX_PRIORITY_4 = 4, /**<submission prority of 4 (0 is lowest)*/
 151        IX_ETH_ACC_TX_PRIORITY_5 = 5, /**<submission prority of 5 (0 is lowest)*/
 152        IX_ETH_ACC_TX_PRIORITY_6 = 6, /**<submission prority of 6 (0 is lowest)*/
 153        IX_ETH_ACC_TX_PRIORITY_7 = 7, /**<Highest priority submission */
 154
 155        IX_ETH_ACC_TX_DEFAULT_PRIORITY = IX_ETH_ACC_TX_PRIORITY_0 /**< By default send all 
 156                                                                 packets with lowest priority */
 157} IxEthAccTxPriority;
 158
 159/**
 160 * @ingroup IxEthAcc
 161 * @enum IxEthAccRxFrameType
 162 * @brief Identify the type of a frame.
 163 * 
 164 * @sa IX_ETHACC_NE_FLAGS
 165 * @sa IX_ETHACC_NE_LINKMASK
 166 */
 167typedef enum  
 168{
 169        IX_ETHACC_RX_LLCTYPE = 0x00, /**< 802.3 - 8802, with LLC/SNAP */
 170        IX_ETHACC_RX_ETHTYPE = 0x10, /**< 802.3 (Ethernet) without LLC/SNAP */
 171        IX_ETHACC_RX_STATYPE = 0x20, /**< 802.11, AP <=> STA */
 172        IX_ETHACC_RX_APTYPE  = 0x30  /**< 802.11, AP <=> AP */
 173} IxEthAccRxFrameType;
 174
 175/**
 176 * @ingroup IxEthAcc
 177 * @enum IxEthAccDuplexMode
 178 * @brief Definition to provision the duplex mode of the MAC. 
 179 * 
 180 */
 181typedef enum
 182{
 183    IX_ETH_ACC_FULL_DUPLEX, /**< Full duplex operation of the MAC */
 184    IX_ETH_ACC_HALF_DUPLEX  /**< Half duplex operation of the MAC */
 185} IxEthAccDuplexMode;
 186
 187
 188/**
 189 * @ingroup IxEthAcc
 190 * @struct IxEthAccNe
 191 * @brief Definition of service-specific informations.
 192 * 
 193 * This structure defines the Ethernet service-specific informations
 194 * and enable QoS and VLAN features.
 195 */
 196typedef struct
 197{
 198    UINT32 ixReserved_next;    /**< reserved for chaining */
 199    UINT32 ixReserved_lengths; /**< reserved for buffer lengths */
 200    UINT32 ixReserved_data;    /**< reserved for buffer pointer */
 201    UINT8  ixDestinationPortId; /**< Destination portId for this packet, if known by NPE */
 202    UINT8  ixSourcePortId; /**< Source portId for this packet */
 203    UINT16 ixFlags;        /**< BitField of option for this frame */
 204    UINT8  ixQoS;          /**< QoS class of the frame */
 205    UINT8  ixReserved;     /**< reserved */
 206    UINT16 ixVlanTCI;      /**< Vlan TCI */
 207    UINT8  ixDestMac[IX_IEEE803_MAC_ADDRESS_SIZE]; /**< Destination MAC address */
 208    UINT8  ixSourceMac[IX_IEEE803_MAC_ADDRESS_SIZE]; /**< Source MAC address */
 209} IxEthAccNe;
 210
 211/**
 212 * @ingroup IxEthAcc
 213 *
 214 * @def IX_ETHACC_NE_PORT_UNKNOWN
 215 *
 216 * @brief  Contents of the field @a IX_ETHACC_NE_DESTPORTID when no
 217 * destination port can be found by the NPE for this frame.
 218 *
 219 */
 220#define IX_ETHACC_NE_PORT_UNKNOWN   (0xff)
 221
 222/**
 223 * @ingroup IxEthAcc
 224 *
 225 * @def IX_ETHACC_NE_DESTMAC
 226 *
 227 * @brief The location of the destination MAC address in the Mbuf header.
 228 *
 229 */
 230#define IX_ETHACC_NE_DESTMAC(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixDestMac
 231
 232/**
 233 * @ingroup IxEthAcc
 234 *
 235 * @def IX_ETHACC_NE_SOURCEMAC
 236 *
 237 * @brief The location of the source MAC address in the Mbuf header.
 238 *
 239 */
 240#define IX_ETHACC_NE_SOURCEMAC(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixSourceMac
 241
 242/**
 243 * @ingroup IxEthAcc
 244 *
 245 * @def IX_ETHACC_NE_VLANTCI
 246 *
 247 * @brief The VLAN Tag Control Information associated with this frame
 248 * 
 249 * The VLAN Tag Control Information associated with this frame. On Rx
 250 * path, this field is extracted from the packet header.
 251 * On Tx path, the value of this field is inserted in the frame when
 252 * the port is configured to insert or replace vlan tags in the 
 253 * egress frames.
 254 *
 255 * @sa IX_ETHACC_NE_FLAGS
 256 */
 257#define IX_ETHACC_NE_VLANTCI(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixVlanTCI
 258
 259/**
 260 * @ingroup IxEthAcc
 261 *
 262 * @def IX_ETHACC_NE_SOURCEPORTID
 263 *
 264 * @brief The port where this frame came from.
 265 *
 266 * The port where this frame came from. This field is set on receive
 267 * with the port information. This field is ignored on Transmit path.
 268 */
 269#define IX_ETHACC_NE_SOURCEPORTID(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixSourcePortId
 270
 271/**
 272 * @ingroup IxEthAcc
 273 *
 274 * @def IX_ETHACC_NE_DESTPORTID
 275 *
 276 * @brief The destination port where this frame should be sent.
 277 *
 278 * The destination port where this frame should be sent.
 279 *
 280 * @li In the transmit direction, this field contains the destination port
 281 * and is ignored unless @a IX_ETHACC_NE_FLAG_DST is set.
 282 * 
 283 * @li In the receive direction, this field contains the port where the
 284 * destination MAC addresses has been learned. If the destination
 285 * MAC address is unknown, then this value is set to the reserved value
 286 * @a IX_ETHACC_NE_PORT_UNKNOWN
 287 *
 288 */
 289#define IX_ETHACC_NE_DESTPORTID(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixDestinationPortId
 290
 291/**
 292 * @ingroup IxEthAcc
 293 *
 294 * @def IX_ETHACC_NE_QOS
 295 *
 296 * @brief QualityOfService class (QoS) for this received frame.
 297 *
 298 */
 299#define IX_ETHACC_NE_QOS(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixQoS
 300
 301/**
 302 * @ingroup IxEthAcc
 303 *
 304 * @def IX_ETHACC_NE_FLAGS
 305 *
 306 * @brief Bit Mask of the different flags associated with a frame
 307 * 
 308 * The flags are the bit-oring combination 
 309 * of the following different fields :
 310 *
 311 *      @li IP flag (Rx @a IX_ETHACC_NE_IPMASK)
 312 *      @li Spanning Tree flag (Rx @a IX_ETHACC_NE_STMASK)
 313 *      @li Link layer type (Rx and Tx @a IX_ETHACC_NE_LINKMASK)
 314 *      @li VLAN Tagged Frame (Rx @a IX_ETHACC_NE_VLANMASK)
 315 *      @li New source MAC address (Rx @a IX_ETHACC_NE_NEWSRCMASK)
 316 *      @li Multicast flag (Rx @a IX_ETHACC_NE_MCASTMASK)
 317 *      @li Broadcast flag (Rx @a IX_ETHACC_NE_BCASTMASK)
 318 *      @li Destination port flag (Tx @a IX_ETHACC_NE_PORTMASK)
 319 *      @li Tag/Untag Tx frame (Tx @a IX_ETHACC_NE_TAGMODEMASK)
 320 *      @li Overwrite destination port (Tx @a IX_ETHACC_NE_PORTOVERMASK)
 321 *      @li Filtered frame (Rx @a IX_ETHACC_NE_STMASK)
 322 *      @li VLAN Enabled (Rx and Tx @a IX_ETHACC_NE_VLANENABLEMASK)
 323 */
 324#define IX_ETHACC_NE_FLAGS(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixFlags
 325
 326/**
 327 * @ingroup IxEthAcc
 328 *
 329 * @def IX_ETHACC_NE_BCASTMASK
 330 *
 331 * @brief This mask defines if a received frame is a broadcast frame.
 332 *
 333 * This mask defines if a received frame is a broadcast frame.
 334 * The BCAST flag is set when the destination MAC address of 
 335 * a frame is broadcast.
 336 *
 337 * @sa IX_ETHACC_NE_FLAGS 
 338 *
 339 */
 340#define IX_ETHACC_NE_BCASTMASK      (0x1)
 341
 342/**
 343 * @ingroup IxEthAcc
 344 *
 345 * @def IX_ETHACC_NE_MCASTMASK
 346 *
 347 * @brief This mask defines if a received frame is a multicast frame.
 348 *
 349 * This mask defines if a received frame is a multicast frame.
 350 * The MCAST flag is set when the destination MAC address of 
 351 * a frame is multicast.
 352 *
 353 * @sa IX_ETHACC_NE_FLAGS 
 354 *
 355 */
 356#define IX_ETHACC_NE_MCASTMASK      (0x1 << 1)
 357
 358/**
 359 * @ingroup IxEthAcc
 360 *
 361 * @def IX_ETHACC_NE_IPMASK
 362 *
 363 * @brief This mask defines if a received frame is a IP frame.
 364 *
 365 * This mask applies to @a IX_ETHACC_NE_FLAGS and defines if a received 
 366 * frame is a IP frame. The IP flag is set on Rx direction, depending on 
 367 * the frame contents. The flag is set when the length/type field of a 
 368 * received frame is 0x8000.
 369 *
 370 * @sa IX_ETHACC_NE_FLAGS
 371 *
 372 */
 373#define IX_ETHACC_NE_IPMASK         (0x1 << 2)
 374
 375/**
 376 * @ingroup IxEthAcc
 377 *
 378 * @def IX_ETHACC_NE_VLANMASK
 379 *
 380 * @brief This mask defines if a received frame is VLAN tagged.
 381 *
 382 * This mask defines if a received frame is VLAN tagged.
 383 * When set, the Rx frame is VLAN-tagged and the tag value 
 384 * is available thru @a IX_ETHACC_NE_VLANID.
 385 * Note that when sending frames which are already tagged
 386 * this flag should be set, to avoid inserting another VLAN tag.
 387 *
 388 * @sa IX_ETHACC_NE_FLAGS 
 389 * @sa IX_ETHACC_NE_VLANID
 390 *
 391 */
 392#define IX_ETHACC_NE_VLANMASK       (0x1 << 3)
 393
 394/**
 395 * @ingroup IxEthAcc
 396 *
 397 * @def IX_ETHACC_NE_LINKMASK
 398 *
 399 * @brief This mask is the link layer protocol indicator
 400 *
 401 * This mask applies to @a IX_ETHACC_NE_FLAGS.
 402 * It reflects the state of a frame as it exits an NPE on the Rx path
 403 * or enters an NPE on the Tx path. Its values are as follows:
 404 *      @li 0x00 - IEEE802.3 - 8802 (Rx) / IEEE802.3 - 8802 (Tx)
 405 *      @li 0x01 - IEEE802.3 - Ethernet (Rx) / IEEE802.3 - Ethernet (Tx)
 406 *      @li 0x02 - IEEE802.11 AP -> STA (Rx) / IEEE802.11 STA -> AP (Tx)
 407 *      @li 0x03 - IEEE802.11 AP -> AP (Rx) / IEEE802.11 AP->AP (Tx)
 408 *
 409 * @sa IX_ETHACC_NE_FLAGS
 410 *
 411 */
 412#define IX_ETHACC_NE_LINKMASK       (0x3 << 4)
 413
 414/**
 415 * @ingroup IxEthAcc
 416 *
 417 * @def IX_ETHACC_NE_STMASK
 418 *
 419 * @brief This mask defines if a received frame is a Spanning Tree frame.
 420 *
 421 * This mask applies to @a IX_ETHACC_NE_FLAGS.
 422 * On rx direction, it defines if a received if frame is a Spanning Tree frame.
 423 * Setting this fkag on transmit direction overrides the port settings 
 424 * regarding the VLAN options and 
 425 *
 426 * @sa IX_ETHACC_NE_FLAGS
 427 *
 428 */
 429#define IX_ETHACC_NE_STMASK         (0x1 << 6)
 430
 431/**
 432 * @ingroup IxEthAcc
 433 *
 434 * @def IX_ETHACC_NE_FILTERMASK
 435 *
 436 * @brief This bit indicates whether a frame has been filtered by the Rx service.
 437 *
 438 * This mask applies to @a IX_ETHACC_NE_FLAGS.
 439 * Certain frames, which should normally be fully filtered by the NPE to due
 440 * the destination MAC address being on the same segment as the Rx port are
 441 * still forwarded to the XScale (although the payload is invalid) in order
 442 * to learn the MAC address of the transmitting station, if this is unknown.
 443 * Normally EthAcc will filter and recycle these framess internally and no
 444 * frames with the FILTER bit set will be received by the client.
 445 *
 446 * @sa IX_ETHACC_NE_FLAGS
 447 *
 448 */
 449#define IX_ETHACC_NE_FILTERMASK     (0x1 << 7)
 450
 451/**
 452 * @ingroup IxEthAcc
 453 *
 454 * @def IX_ETHACC_NE_PORTMASK
 455 *
 456 * @brief This mask defines the rule to transmit a frame
 457 *
 458 * This mask defines the rule to transmit a frame. When set, a frame
 459 * is transmitted to the destination port as set by the macro
 460 * @a IX_ETHACC_NE_DESTPORTID. If not set, the destination port 
 461 * is searched using the destination MAC address.
 462 *
 463 * @note This flag is meaningful only for multiport Network Engines.
 464 * 
 465 * @sa IX_ETHACC_NE_FLAGS 
 466 * @sa IX_ETHACC_NE_DESTPORTID
 467 *
 468 */
 469#define IX_ETHACC_NE_PORTOVERMASK   (0x1 << 8)
 470
 471/**
 472 * @ingroup IxEthAcc
 473 *
 474 * @def IX_ETHACC_NE_TAGMODEMASK
 475 *
 476 * @brief This mask defines the tagging rules to apply to a transmit frame.
 477 *
 478 * This mask defines the tagging rules to apply to a transmit frame
 479 * regardless of the default setting for a port. When used together 
 480 * with @a IX_ETHACC_NE_TAGOVERMASK and when set, the 
 481 * frame will be tagged prior to transmission. When not set,
 482 * the frame will be untagged prior to transmission. This is accomplished
 483 * irrespective of the Egress tagging rules, constituting a per-frame override.
 484 *
 485 * @sa IX_ETHACC_NE_FLAGS
 486 * @sa IX_ETHACC_NE_TAGOVERMASK 
 487 *
 488 */
 489#define IX_ETHACC_NE_TAGMODEMASK    (0x1 << 9)
 490
 491/**
 492 * @ingroup IxEthAcc
 493 *
 494 * @def IX_ETHACC_NE_TAGOVERMASK
 495 *
 496 * @brief This mask defines the rule to transmit a frame
 497 *
 498 * This mask defines the rule to transmit a frame. When set, the
 499 * default transmit rules of a port are overriden.
 500 * When not set, the default rules as set by @ref IxEthDB should apply.
 501 *
 502 * @sa IX_ETHACC_NE_FLAGS
 503 * @sa IX_ETHACC_NE_TAGMODEMASK
 504 *
 505 */
 506#define IX_ETHACC_NE_TAGOVERMASK    (0x1 << 10)
 507
 508/**
 509 * @ingroup IxEthAcc
 510 *
 511 * @def IX_ETHACC_NE_VLANENABLEMASK
 512 *
 513 * @brief This mask defines if a frame is a VLAN frame or not
 514 *
 515 * When set, frames undergo normal VLAN processing on the Tx path
 516 * (membership filtering, tagging, tag removal etc). If this flag is
 517 * not set, the frame is considered to be a regular non-VLAN frame
 518 * and no VLAN processing will be performed.
 519 *
 520 * Note that VLAN-enabled NPE images will always set this flag in all
 521 * Rx frames, and images which are not VLAN enabled will clear this
 522 * flag for all received frames.
 523 *
 524 * @sa IX_ETHACC_NE_FLAGS
 525 *
 526 */
 527#define IX_ETHACC_NE_VLANENABLEMASK (0x1 << 14)
 528
 529/**
 530 * @ingroup IxEthAcc
 531 *
 532 * @def IX_ETHACC_NE_NEWSRCMASK
 533 *
 534 * @brief This mask defines if a received frame has been learned.
 535 *
 536 * This mask defines if the source MAC address of a frame is 
 537 * already known. If the bit is set, the source MAC address was
 538 * unknown to the NPE at the time the frame was received.
 539 *
 540 * @sa IX_ETHACC_NE_FLAGS 
 541 *
 542 */
 543#define IX_ETHACC_NE_NEWSRCMASK     (0x1 << 15)
 544
 545/**
 546 * @ingroup IxEthAcc
 547 *
 548 * @brief This defines the recommanded minimum size of MBUF's submitted
 549 * to the frame receive service.
 550 *
 551 */
 552#define IX_ETHACC_RX_MBUF_MIN_SIZE (2048)
 553
 554/**
 555 * @ingroup IxEthAcc
 556 *
 557 * @brief This defines the highest MII address of any attached PHYs 
 558 * 
 559 * The maximum number for PHY address is 31, add on for range checking.
 560 *
 561 */
 562#define IXP425_ETH_ACC_MII_MAX_ADDR   32
 563
 564/**
 565 * @ingroup IxEthAcc
 566 *
 567 * @fn ixEthAccInit(void)
 568 * 
 569 * @brief Initializes the IXP400 Ethernet Access Service.
 570 * 
 571 * @li Reentrant    - no
 572 * @li ISR Callable - no
 573 * 
 574 * This should be called once per module initialization.
 575 * @pre
 576 *   The NPE must first be downloaded with the required microcode which supports all
 577 *   required features.
 578 *
 579 * @return IxEthAccStatus
 580 * @li @a IX_ETH_ACC_SUCCESS
 581 * @li @a IX_ETH_ACC_FAIL       :  Service has failed to initialize.
 582 *
 583 * <hr>
 584 */
 585PUBLIC IxEthAccStatus ixEthAccInit(void);
 586
 587
 588/**
 589 * @ingroup IxEthAcc
 590 *
 591 * @fn ixEthAccUnload(void)
 592 * 
 593 * @brief Unload the Ethernet Access Service.
 594 * 
 595 * @li Reentrant    - no
 596 * @li ISR Callable - no
 597 *
 598 * @return void 
 599 *
 600 * <hr>
 601 */
 602PUBLIC void ixEthAccUnload(void);
 603
 604/**
 605 * @ingroup IxEthAcc
 606 *
 607 * @fn ixEthAccPortInit( IxEthAccPortId portId)
 608 *
 609 * @brief Initializes an NPE/Ethernet MAC Port.
 610 *
 611 * The NPE/Ethernet port initialisation includes the following steps
 612 * @li Initialize the NPE/Ethernet MAC hardware.
 613 * @li Verify NPE downloaded and operational.
 614 * @li The NPE shall be available for usage once this API returns.
 615 * @li Verify that the Ethernet port is present before initializing
 616 *
 617 * @li Reentrant    - no
 618 * @li ISR Callable - no
 619 *
 620 * This should be called once per mac device.
 621 * The NPE/MAC shall be in disabled state after init.
 622 *
 623 * @pre
 624 *   The component must be initialized via @a ixEthAccInit
 625 *   The NPE must first be downloaded with the required microcode which supports all
 626 *   required features.
 627 *
 628 * Dependant on Services: (Must be initialized before using this service may be initialized)
 629 *      ixNPEmh - NPE Message handling service.
 630 *      ixQmgr  - Queue Manager component.
 631 *
 632 * @param portId  @ref IxEthAccPortId [in]
 633 *
 634 * @return IxEthAccStatus
 635 * @li @a IX_ETH_ACC_SUCCESS: if the ethernet port is not present, a warning is issued.
 636 * @li @a IX_ETH_ACC_FAIL : The NPE processor has failed to initialize.
 637 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
 638 *
 639 * <hr>
 640 */
 641PUBLIC IxEthAccStatus ixEthAccPortInit(IxEthAccPortId portId);
 642
 643
 644/*************************************************************************
 645
 646 #####     ##     #####    ##            #####     ##     #####  #    #
 647 #    #   #  #      #     #  #           #    #   #  #      #    #    #
 648 #    #  #    #     #    #    #          #    #  #    #     #    ######
 649 #    #  ######     #    ######          #####   ######     #    #    #
 650 #    #  #    #     #    #    #          #       #    #     #    #    #
 651 #####   #    #     #    #    #          #       #    #     #    #    #
 652
 653*************************************************************************/
 654
 655
 656/**
 657 * @ingroup IxEthAcc
 658 *
 659 * @fn ixEthAccPortTxFrameSubmit( 
 660    IxEthAccPortId portId,
 661    IX_OSAL_MBUF *buffer, 
 662    IxEthAccTxPriority priority)
 663 * 
 664 * @brief This function shall be used to submit MBUFs buffers for transmission on a particular MAC device. 
 665 *
 666 * When the frame is transmitted, the buffer shall be returned thru the 
 667 * callback @a IxEthAccPortTxDoneCallback.
 668 *
 669 * In case of over-submitting, the order of the frames on the 
 670 * network may be modified.
 671 *
 672 * Buffers shall be not queued for transmission if the port is disabled.
 673 * The port can be enabled using @a ixEthAccPortEnable
 674 *
 675 * 
 676 * @li Reentrant    - yes
 677 * @li ISR Callable - yes
 678 *
 679 *
 680 * @pre 
 681 *  @a ixEthAccPortTxDoneCallbackRegister must be called to register a function to allow this service to
 682 *   return the buffer to the calling service. 
 683 * 
 684 * @note 
 685 *  If the buffer submit fails for any reason the user has retained ownership of the buffer.
 686 *
 687 * @param portId @ref IxEthAccPortId [in] - MAC port ID to transmit Ethernet frame on.
 688 * @param buffer @ref IX_OSAL_MBUF [in] - pointer to an MBUF formatted buffer. Chained buffers are supported for transmission.
 689 *             Chained packets are not supported and the field IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR is ignored. 
 690 * @param priority @ref IxEthAccTxPriority [in]
 691 *
 692 * @return IxEthAccStatus
 693 * @li @a IX_ETH_ACC_SUCCESS
 694 * @li @a IX_ETH_ACC_FAIL  : Failed to queue frame for transmission. 
 695 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
 696 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
 697 *
 698 * <hr>
 699 */
 700
 701PUBLIC IxEthAccStatus ixEthAccPortTxFrameSubmit( 
 702    IxEthAccPortId portId,
 703    IX_OSAL_MBUF *buffer, 
 704    IxEthAccTxPriority priority);
 705
 706/**
 707 * @ingroup IxEthAcc
 708 *
 709 * @brief Function prototype for Ethernet Tx Buffer Done callback. Registered 
 710 *  via @a ixEthAccTxBufferDoneCallbackRegister 
 711 * 
 712 * This function is called once the previously submitted buffer is no longer required by this service.
 713 * It may be returned upon successful transmission of the frame or during the shutdown of 
 714 * the port prior to the transmission of a queued frame.
 715 * The calling of this registered function is not a guarantee of successful transmission of the buffer.
 716 *
 717 *  
 718 * @li Reentrant    - yes , The user provided function should be reentrant.
 719 * @li ISR Callable - yes , The user provided function must be callable from an ISR.
 720 *
 721 *
 722 * <b>Calling Context </b>: 
 723 * @par
 724 *   This callback is called in the context of the queue manager dispatch loop @a ixQmgrgrDispatcherLoopRun
 725 *   within the @ref IxQMgrAPI component. The calling context may be from interrupt or high priority thread. 
 726 *   The decision is system specific.
 727 *
 728 * @param callbackTag UINT32 [in] - This tag is that provided when the callback was registered for a particular MAC 
 729 * via @a ixEthAccPortTxDoneCallbackRegister. It allows the same callback to be used for multiple MACs.
 730 * @param mbuf @ref IX_OSAL_MBUF [in] - Pointer to the Tx mbuf descriptor. 
 731 * 
 732 * @return void
 733 *
 734 * @note
 735 * The field IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR is modified by the access layer and reset to NULL.
 736 *
 737 * <hr>
 738 */
 739typedef void (*IxEthAccPortTxDoneCallback) ( UINT32 callbackTag, IX_OSAL_MBUF *buffer );
 740
 741
 742
 743/**
 744 * @ingroup IxEthAcc
 745 *
 746 * @fn ixEthAccPortTxDoneCallbackRegister( IxEthAccPortId portId, 
 747                                           IxEthAccPortTxDoneCallback txCallbackFn, 
 748                                           UINT32 callbackTag)
 749 *
 750 * @brief Register a callback function to allow 
 751 * the transmitted buffers to return to the user.
 752 * 
 753 * This function registers the transmit buffer done function callback for a particular port.
 754 *
 755 * The registered callback function is called once the previously submitted buffer is no longer required by this service.
 756 * It may be returned upon successful transmission of the frame or  shutdown of port prior to submission.
 757 * The calling of this registered function is not a guarantee of successful transmission of the buffer.
 758 *
 759 * If called several times the latest callback shall be registered for a particular port.
 760 *
 761 * @li Reentrant    - yes
 762 * @li ISR Callable - yes
 763 *
 764 * @pre
 765 *      The port must be initialized via @a ixEthAccPortInit
 766 *
 767 *
 768 * @param portId @ref IxEthAccPortId [in] - Register callback for a particular MAC device.
 769 * @param txCallbackFn @ref IxEthAccPortTxDoneCallback [in] - Function to be called to return transmit buffers to the user.
 770 * @param callbackTag UINT32 [in] -  This tag shall be provided to the callback function.
 771 *
 772 * @return IxEthAccStatus
 773 * @li @a IX_ETH_ACC_SUCCESS 
 774 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
 775 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
 776 * @li @a IX_ETH_ACC_INVALID_ARG : An argument other than portId is invalid.
 777 *
 778 * <hr>
 779 */
 780PUBLIC IxEthAccStatus
 781ixEthAccPortTxDoneCallbackRegister(IxEthAccPortId portId,
 782                                                                   IxEthAccPortTxDoneCallback txCallbackFn,
 783                                                                   UINT32 callbackTag);
 784
 785
 786
 787/**
 788 * @ingroup IxEthAcc
 789 *
 790 * @brief Function prototype for Ethernet Frame Rx callback. Registered via @a ixEthAccPortRxCallbackRegister 
 791 * 
 792 * It is the responsibility of the user function to free any MBUF's which it receives.
 793 *  
 794 * @li Reentrant    - yes , The user provided function should be reentrant.
 795 * @li ISR Callable - yes , The user provided function must be callable from an ISR.
 796 * @par
 797 *
 798 * This function dispatches frames to the user level
 799 * via the provided function. The invocation shall be made for each
 800 * frame dequeued from the Ethernet QM queue. The user is required to free any MBUF's 
 801 * supplied via this callback. In addition the registered callback must free up MBUF's
 802 * from the receive free queue when the port is disabled 
 803 * 
 804 * If called several times the latest callback shall be registered for a particular port.
 805 *
 806 * <b>Calling Context </b>: 
 807 * @par
 808 *   This callback is called in the context of the queue manager dispatch loop @a ixQmgrgrDispatcherLoopRun
 809 *   within the @ref IxQMgrAPI component. The calling context may be from interrupt or high priority thread. 
 810 *   The decision is system specific.
 811 *
 812 *
 813 * @param callbackTag UINT32 [in] - This tag is that provided when the callback was registered for a particular MAC 
 814 * via @a ixEthAccPortRxCallbackRegister. It allows the same callback to be used for multiple MACs.
 815 * @param mbuf @ref IX_OSAL_MBUF [in] - Pointer to the Rx mbuf header. Mbufs may be chained if 
 816 *               the frame length is greater than the supplied mbuf length.
 817 * @param reserved [in] - deprecated parameter The information is passed 
 818 *      thru the IxEthAccNe header destination port ID field 
 819 *      (@sa IX_ETHACC_NE_DESTPORTID). For backward 
 820 *      compatibility,the value is equal to IX_ETH_DB_UNKNOWN_PORT (0xff). 
 821 * 
 822 * @return void
 823 *
 824 * @note
 825 * Buffers may not be filled up to the length supplied in 
 826 * @a ixEthAccPortRxFreeReplenish(). The firmware fills
 827 * them to the previous 64 bytes boundary. The user has to be aware 
 828 * that the length of the received mbufs may be smaller than the length
 829 * of the supplied mbufs. 
 830 * The mbuf header contains the following modified field
 831 * @li @a IX_OSAL_MBUF_PKT_LEN is set in the header of the first mbuf and indicates
 832 *  the total frame size
 833 * @li @a IX_OSAL_MBUF_MLEN is set each mbuf header and indicates the payload length
 834 * @li @a IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR contains a pointer to the next 
 835 *     mbuf, or NULL at the end of a chain.
 836 * @li @a IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR is modified. Its value is reset to NULL
 837 * @li @a IX_OSAL_MBUF_FLAGS contains the bit 4 set for a broadcast packet and the bit 5
 838 *     set for a multicast packet. Other bits are unmodified.
 839 *
 840 * <hr>
 841 */
 842typedef void (*IxEthAccPortRxCallback) (UINT32 callbackTag, IX_OSAL_MBUF *buffer, UINT32 reserved);
 843
 844/**
 845 * @ingroup IxEthAcc
 846 *
 847 * @brief Function prototype for Ethernet Frame Rx callback. Registered via @a ixEthAccPortMultiBufferRxCallbackRegister 
 848 * 
 849 * It is the responsibility of the user function to free any MBUF's which it receives.
 850 *  
 851 * @li Reentrant    - yes , The user provided function should be reentrant.
 852 * @li ISR Callable - yes , The user provided function must be callable from an ISR.
 853 * @par
 854 *
 855 * This function dispatches many frames to the user level
 856 * via the provided function. The invocation shall be made for multiple frames
 857 * dequeued from the Ethernet QM queue. The user is required to free any MBUF's 
 858 * supplied via this callback. In addition the registered callback must free up MBUF's
 859 * from the receive free queue when the port is disabled 
 860 * 
 861 * If called several times the latest callback shall be registered for a particular port.
 862 *
 863 * <b>Calling Context </b>: 
 864 * @par
 865 *   This callback is called in the context of the queue manager dispatch loop @a ixQmgrDispatcherLoopRun
 866 *   within the @ref IxQMgrAPI component. The calling context may be from interrupt or high priority thread. 
 867 *   The decision is system specific.
 868 *
 869 *
 870 * @param callbackTag - This tag is that provided when the callback was registered for a particular MAC 
 871 * via @a ixEthAccPortMultiBufferRxCallbackRegister. It allows the same callback to be used for multiple MACs.
 872 * @param mbuf - Pointer to an array of Rx mbuf headers. Mbufs 
 873 *               may be chained if 
 874 *               the frame length is greater than the supplied mbuf length.
 875 *               The end of the array contains a zeroed entry (NULL pointer).
 876 *
 877 * @return void
 878 *
 879 * @note The mbufs passed to this callback have the same structure than the
 880 *  buffers passed to @a IxEthAccPortRxCallback interfac. 
 881 *
 882 * @note The usage of this callback is exclusive with the usage of
 883 *  @a ixEthAccPortRxCallbackRegister and @a IxEthAccPortRxCallback 
 884 *
 885 * @sa ixEthAccPortMultiBufferRxCallbackRegister
 886 * @sa IxEthAccPortMultiBufferRxCallback
 887 * @sa ixEthAccPortRxCallbackRegister
 888 * @sa IxEthAccPortRxCallback
 889 * <hr>
 890 */
 891
 892typedef void (*IxEthAccPortMultiBufferRxCallback) (UINT32 callbackTag, IX_OSAL_MBUF **buffer);
 893
 894
 895
 896
 897/**
 898 * @ingroup IxEthAcc
 899 *
 900 * @fn ixEthAccPortRxCallbackRegister( IxEthAccPortId portId, IxEthAccPortRxCallback rxCallbackFn, UINT32 callbackTag)
 901 *
 902 * @brief Register a callback function to allow 
 903 * the reception of frames.
 904 *
 905 * The registered callback function is called once a frame is received  by this service.
 906 *
 907 * If called several times the latest callback shall be registered for a particular port.
 908 *
 909 *
 910 * @li Reentrant    - yes
 911 * @li ISR Callable - yes
 912 *
 913 *
 914 * @param portId @ref IxEthAccPortId [in] - Register callback for a particular MAC device.
 915 * @param rxCallbackFn @ref IxEthAccPortRxCallback [in] - Function to be called when Ethernet frames are availble.
 916 * @param callbackTag UINT32 [in] -  This tag shall be provided to the callback function.
 917 *
 918 * @return IxEthAccStatus
 919 * @li @a IX_ETH_ACC_SUCCESS 
 920 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
 921 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
 922 * @li @a IX_ETH_ACC_INVALID_ARG : An argument other than portId is invalid.
 923 *
 924 * <hr>
 925 */
 926PUBLIC IxEthAccStatus
 927ixEthAccPortRxCallbackRegister(IxEthAccPortId portId,
 928                                                           IxEthAccPortRxCallback rxCallbackFn,
 929                                                           UINT32 callbackTag);
 930
 931
 932/**
 933 * @ingroup IxEthAcc
 934 *
 935 * @fn ixEthAccPortMultiBufferRxCallbackRegister( IxEthAccPortId portId, IxEthAccPortMultiBufferRxCallback rxCallbackFn, UINT32 callbackTag)
 936 *
 937 * @brief Register a callback function to allow 
 938 * the reception of frames.
 939 * 
 940 * The registered callback function is called once a frame is 
 941 * received  by this service. If many frames are already received, 
 942 * the function is called once.
 943 *
 944 * If called several times the latest callback shall be registered for a particular port.
 945 *
 946 * @li Reentrant    - yes
 947 * @li ISR Callable - yes
 948 *
 949 *
 950 * @param portId - Register callback for a particular MAC device.
 951 * @param rxCallbackFn - @a IxEthAccMultiBufferRxCallbackFn - Function to be called when Ethernet frames are availble.
 952 * @param callbackTag -  This tag shall be provided to the callback function.
 953 *
 954 * @return IxEthAccStatus
 955 * @li @a IX_ETH_ACC_SUCCESS 
 956 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
 957 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
 958 * @li @a IX_ETH_ACC_INVALID_ARG : An argument other than portId is invalid.
 959 *
 960 * @sa ixEthAccPortMultiBufferRxCallbackRegister
 961 * @sa IxEthAccPortMultiBufferRxCallback
 962 * @sa ixEthAccPortRxCallbackRegister
 963 * @sa IxEthAccPortRxCallback
 964 * <hr>
 965 */
 966PUBLIC IxEthAccStatus
 967ixEthAccPortMultiBufferRxCallbackRegister(IxEthAccPortId portId,
 968                                                                                  IxEthAccPortMultiBufferRxCallback rxCallbackFn,
 969                                                                                  UINT32 callbackTag);
 970
 971/**
 972 * @ingroup IxEthAcc
 973 *
 974 * @fn ixEthAccPortRxFreeReplenish( IxEthAccPortId portId, IX_OSAL_MBUF *buffer)
 975 *
 976 * @brief This function provides buffers for the Ethernet receive path. 
 977 *
 978 * This component does not have a buffer management mechanisms built in. All Rx buffers must be supplied to it
 979 * via this interface. 
 980 *
 981 * @li Reentrant    - yes
 982 * @li ISR Callable - yes
 983 *
 984 * @param portId @ref IxEthAccPortId [in] - Provide buffers only to specific Rx MAC. 
 985 * @param buffer @ref IX_OSAL_MBUF [in] - Provide an MBUF to the Ethernet receive mechanism. 
 986 *                 Buffers size smaller than IX_ETHACC_RX_MBUF_MIN_SIZE may result in poor
 987 *                 performances and excessive buffer chaining. Buffers
 988 *                 larger than this size may be suitable for jumbo frames.
 989 *                 Chained packets are not supported and the field IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR must be NULL. 
 990 *
 991 * @return IxEthAccStatus
 992 * @li @a IX_ETH_ACC_SUCCESS
 993 * @li @a IX_ETH_ACC_FAIL : Buffer has was not able to queue the 
 994 *                     buffer in the receive service.
 995 * @li @a IX_ETH_ACC_FAIL : Buffer size is less than IX_ETHACC_RX_MBUF_MIN_SIZE
 996 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
 997 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
 998 *
 999 * @note
1000 * If the buffer replenish operation fails it is the responsibility 
1001 * of the user to free the buffer.
1002 *
1003 * @note
1004 * Sufficient buffers must be supplied to the component to maintain
1005 * receive throughput and avoid rx buffer underflow conditions.
1006 * To meet this goal, It is expected that the user preload the 
1007 * component with a sufficent number of buffers prior to enabling the
1008 * NPE Ethernet receive path. The recommended minimum number of 
1009 * buffers is 8.
1010 *
1011 * @note
1012 * For maximum performances, the mbuf size should be greater 
1013 * than the maximum frame size (Ethernet header, payload and FCS) + 64. 
1014 * Supplying smaller mbufs to the service results in mbuf
1015 * chaining and degraded performances. The recommended size
1016 * is @a IX_ETHACC_RX_MBUF_MIN_SIZE, which is
1017 * enough to take care of 802.3 frames and "baby jumbo" frames without
1018 * chaining, and "jumbo" frame within chaining.
1019 *
1020 * @note
1021 * Buffers may not be filled up to their length. The firware fills
1022 * them up to the previous 64 bytes boundary. The user has to be aware 
1023 * that the length of the received mbufs may be smaller than the length
1024 * of the supplied mbufs.
1025 *
1026 * @warning This function checks the parameters if the NDEBUG 
1027 * flag is not defined. Turning on the argument checking (disabled by 
1028 * default) results in a lower EthAcc performance as this function
1029 * is part of the data path.
1030 *
1031 * <hr>
1032 */
1033PUBLIC IxEthAccStatus
1034ixEthAccPortRxFreeReplenish( IxEthAccPortId portId, IX_OSAL_MBUF *buffer);
1035
1036
1037
1038/***************************************************************
1039
1040  ####    ####   #    #   #####  #####    ####   #
1041 #    #  #    #  ##   #     #    #    #  #    #  #
1042 #       #    #  # #  #     #    #    #  #    #  #
1043 #       #    #  #  # #     #    #####   #    #  #
1044 #    #  #    #  #   ##     #    #   #   #    #  #
1045  ####    ####   #    #     #    #    #   ####   ######
1046
1047
1048         #####   #         ##    #    #  ######
1049         #    #  #        #  #   ##   #  #
1050         #    #  #       #    #  # #  #  #####
1051         #####   #       ######  #  # #  #
1052         #       #       #    #  #   ##  #
1053         #       ######  #    #  #    #  ######
1054
1055***************************************************************/
1056
1057/**
1058 * @ingroup IxEthAcc
1059 *
1060 * @fn ixEthAccPortEnable(IxEthAccPortId portId)
1061 *
1062 * @brief This enables an Ethernet port for both Tx and Rx. 
1063 *
1064 * @li Reentrant    - yes
1065 * @li ISR Callable - no
1066 *
1067 * @pre The port must first be initialized via @a ixEthAccPortInit and the MAC address 
1068 * must be set using @a ixEthAccUnicastMacAddressSet before enabling it
1069 * The rx and Tx Done callbacks registration via @a
1070 * ixEthAccPortTxDoneCallbackRegister amd @a  ixEthAccPortRxCallbackRegister
1071 * has to be done before enabling the traffic.
1072 * 
1073 * @param  portId @ref IxEthAccPortId [in] - Port id to act upon.
1074 * 
1075 * @return IxEthAccStatus
1076 * @li @a IX_ETH_ACC_SUCCESS 
1077 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1078 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is not initialized
1079 * @li @a IX_ETH_ACC_MAC_UNINITIALIZED : port MAC address is not initialized
1080 *
1081 * <hr>
1082 */
1083PUBLIC IxEthAccStatus ixEthAccPortEnable(IxEthAccPortId portId);
1084
1085/**
1086 * @ingroup IxEthAcc
1087 *
1088 * @fn ixEthAccPortDisable(IxEthAccPortId portId)
1089 *
1090 * @brief This disables an Ethernet port for both Tx and Rx. 
1091 *
1092 * Free MBufs are returned to the user via the registered callback when the port is disabled 
1093 *
1094 * @li Reentrant    - yes
1095 * @li ISR Callable - no
1096 *
1097 * @pre The port must be enabled with @a ixEthAccPortEnable, otherwise this
1098 * function has no effect
1099 *
1100 * @param  portId @ref IxEthAccPortId [in] - Port id to act upon.
1101 * 
1102 * @return IxEthAccStatus
1103 * @li @a IX_ETH_ACC_SUCCESS 
1104 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1105 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is not initialized
1106 * @li @a IX_ETH_ACC_MAC_UNINITIALIZED : port MAC address is not initialized
1107 *
1108 * <hr>
1109 */
1110PUBLIC IxEthAccStatus ixEthAccPortDisable(IxEthAccPortId portId);
1111
1112/**
1113 * @ingroup IxEthAcc
1114 *
1115 * @fn ixEthAccPortEnabledQuery(IxEthAccPortId portId, BOOL *enabled)
1116 *
1117 * @brief Get the enabled state of a port.
1118 *
1119 * @li Reentrant    - yes
1120 * @li ISR Callable - yes
1121 *
1122 * @pre The port must first be initialized via @a ixEthAccPortInit
1123 *
1124 * @param  portId @ref IxEthAccPortId [in] - Port id to act upon.
1125 * @param  enabled BOOL [out] - location to store the state of the port
1126 *
1127 * @return IxEthAccStatus
1128 * @li @a IX_ETH_ACC_SUCCESS
1129 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid
1130 *
1131 * <hr>
1132 */
1133PUBLIC IxEthAccStatus
1134ixEthAccPortEnabledQuery(IxEthAccPortId portId, BOOL *enabled);
1135
1136/**
1137 * @ingroup IxEthAcc
1138 *
1139 * @fn ixEthAccPortPromiscuousModeClear(IxEthAccPortId portId)
1140 *
1141 * @brief Put the Ethernet MAC device in non-promiscuous mode.
1142 * 
1143 * In non-promiscuous mode the MAC filters all frames other than 
1144 * destination MAC address which matches the following criteria:
1145 * @li Unicast address provisioned via @a ixEthAccUnicastMacAddressSet
1146 * @li All broadcast frames.
1147 * @li Multicast addresses provisioned via @a ixEthAccMulticastAddressJoin
1148 *
1149 * Other functions modify the MAC filtering
1150 *
1151 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1152 *     frames are forwarded to the application
1153 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1154 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1155 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1156 *     filtering address
1157 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1158 *     filtering address
1159 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1160 *     forwarded to the application regardless of the multicast 
1161 *     address provisioned
1162 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1163 *     to the application following the multicast address provisioned
1164 *
1165 * In all cases, unicast and broadcast addresses are forwarded to 
1166 * the application.
1167 *
1168 * @li Reentrant    - yes
1169 * @li ISR Callable - no
1170 * 
1171 * @sa ixEthAccPortPromiscuousModeSet
1172 * 
1173 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1174 * 
1175 * @return IxEthAccStatus 
1176 * @li @a IX_ETH_ACC_SUCCESS
1177 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1178 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1179 *
1180 * <hr>
1181 */
1182PUBLIC IxEthAccStatus ixEthAccPortPromiscuousModeClear(IxEthAccPortId portId);
1183
1184
1185/**
1186 * @ingroup IxEthAcc
1187 *
1188 * @fn  ixEthAccPortPromiscuousModeSet(IxEthAccPortId portId)
1189 *
1190 * @brief Put the MAC device in promiscuous mode.
1191 * 
1192 * If the device is in promiscuous mode then all all received frames shall be forwared
1193 * to the NPE for processing.
1194 *
1195 * Other functions modify the MAC filtering
1196 *
1197 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1198 *     frames are forwarded to the application
1199 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1200 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1201 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1202 *     filtering address
1203 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1204 *     filtering address
1205 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1206 *     forwarded to the application regardless of the multicast 
1207 *     address provisioned
1208 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1209 *     to the application following the multicast address provisioned
1210 *
1211 * In all cases, unicast and broadcast addresses are forwarded to 
1212 * the application.
1213 *
1214 * @li Reentrant    - yes
1215 * @li ISR Callable - no
1216 * 
1217 * @sa ixEthAccPortPromiscuousModeClear
1218 *
1219 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1220 * 
1221 * @return IxEthAccStatus 
1222 * @li @a IX_ETH_ACC_SUCCESS
1223 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1224 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1225 *
1226 * <hr>
1227 */
1228PUBLIC IxEthAccStatus ixEthAccPortPromiscuousModeSet(IxEthAccPortId portId);
1229
1230/**
1231 * @ingroup IxEthAcc
1232 *
1233 * @fn ixEthAccPortUnicastMacAddressSet(      IxEthAccPortId portId,
1234                                                  IxEthAccMacAddr *macAddr)
1235 *
1236 * @brief Configure unicast MAC address for a particular port
1237 *
1238 *
1239 * @li Reentrant    - yes
1240 * @li ISR Callable - no
1241 *
1242 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1243 * @param *macAddr @ref IxEthAccMacAddr [in] - Ethernet Mac address.
1244 *
1245 * @return IxEthAccStatus 
1246 * @li @a IX_ETH_ACC_SUCCESS
1247 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1248 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1249 *
1250 * <hr>
1251 */
1252PUBLIC IxEthAccStatus ixEthAccPortUnicastMacAddressSet(IxEthAccPortId portId,
1253                                                                                                           IxEthAccMacAddr *macAddr);
1254
1255/**
1256 * @ingroup IxEthAcc
1257 *
1258 * @fn ixEthAccPortUnicastMacAddressGet(        IxEthAccPortId portId, 
1259                                        IxEthAccMacAddr *macAddr)
1260 *
1261 * @brief Get unicast MAC address for a particular MAC port 
1262 *
1263 * @pre
1264 * The MAC address must first be set via @a ixEthAccMacPromiscuousModeSet
1265 * If the MAC address has not been set, the function returns a 
1266 * IX_ETH_ACC_MAC_UNINITIALIZED status
1267 *
1268 * @li Reentrant    - yes
1269 * @li ISR Callable - no
1270 *
1271 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1272 * @param *macAddr @ref IxEthAccMacAddr [out] - Ethernet MAC address.
1273 *
1274 * @return  IxEthAccStatus
1275 * @li @a IX_ETH_ACC_SUCCESS
1276 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1277 * @li @a IX_ETH_ACC_MAC_UNINITIALIZED : port MAC address is not initialized.
1278 * @li @a IX_ETH_ACC_FAIL : macAddr is invalid.
1279 *
1280 * <hr>
1281 */
1282PUBLIC IxEthAccStatus
1283ixEthAccPortUnicastMacAddressGet(IxEthAccPortId portId,
1284                                                                 IxEthAccMacAddr *macAddr);
1285
1286
1287
1288
1289/**
1290 * @ingroup IxEthAcc
1291 *
1292 * @fn ixEthAccPortMulticastAddressJoin(      IxEthAccPortId portId,
1293                                             IxEthAccMacAddr *macAddr)
1294 *
1295 * @brief Add a multicast address to the MAC address table.
1296 *
1297 *  @note
1298 *  Due to the operation of the Ethernet MAC multicast filtering mechanism, frames which do not 
1299 *  have a multicast destination address which were provisioned via this API may be forwarded 
1300 *  to the NPE's. This is a result of the hardware comparison  algorithm used in the destination mac address logic
1301 *  within the Ethernet MAC. 
1302 *
1303 *  See Also: IXP425 hardware development manual.
1304 * 
1305 * Other functions modify the MAC filtering
1306 *
1307 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1308 *     frames are forwarded to the application
1309 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1310 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1311 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1312 *     filtering address
1313 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1314 *     filtering address
1315 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1316 *     forwarded to the application regardless of the multicast 
1317 *     address provisioned
1318 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1319 *     to the application following the multicast address provisioned
1320 *
1321 * In all cases, unicast and broadcast addresses are forwarded to 
1322 * the application.
1323 *
1324 * @li Reentrant    - yes
1325 * @li ISR Callable - no
1326 *
1327 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1328 * @param *macAddr @ref IxEthAccMacAddr [in] - Ethernet Mac address.
1329 *
1330 * @return IxEthAccStatus 
1331 * @li @a IX_ETH_ACC_SUCCESS
1332 * @li @a IX_ETH_ACC_FAIL : Error writing to the MAC registers
1333 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1334 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1335 *
1336 * <hr>
1337 */
1338PUBLIC IxEthAccStatus
1339ixEthAccPortMulticastAddressJoin(IxEthAccPortId portId,
1340                                                                 IxEthAccMacAddr *macAddr);
1341
1342/**
1343 * @ingroup IxEthAcc
1344 *
1345 * @fn ixEthAccPortMulticastAddressJoinAll(  IxEthAccPortId portId)
1346 *
1347 * @brief Filter all frames with multicast dest.
1348 *
1349 * This function clears the MAC address table, and then sets
1350 * the MAC to forward ALL multicast frames to the NPE.
1351 * Specifically, it forwards all frames whose destination address
1352 * has the LSB of the highest byte set  (01:00:00:00:00:00).  This
1353 * bit is commonly referred to as the "multicast bit".
1354 * Broadcast frames will still be forwarded. 
1355 *
1356 * Other functions modify the MAC filtering
1357 *
1358 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1359 *     frames are forwarded to the application
1360 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1361 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1362 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1363 *     filtering address
1364 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1365 *     filtering address
1366 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1367 *     forwarded to the application regardless of the multicast 
1368 *     address provisioned
1369 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1370 *     to the application following the multicast address provisioned
1371 *
1372 * In all cases, unicast and broadcast addresses are forwarded to 
1373 * the application.
1374 *
1375 * @li Reentrant    - yes
1376 * @li ISR Callable - no
1377 *
1378 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1379 *
1380 * @return IxEthAccStatus 
1381 * @li @a IX_ETH_ACC_SUCCESS
1382 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1383 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1384 *
1385 * <hr>
1386 */
1387PUBLIC IxEthAccStatus
1388ixEthAccPortMulticastAddressJoinAll(IxEthAccPortId portId);
1389
1390/**
1391 * @ingroup IxEthAcc
1392 *
1393 * @fn ixEthAccPortMulticastAddressLeave( IxEthAccPortId portId,
1394                                         IxEthAccMacAddr *macAddr)
1395 *
1396 * @brief Remove a multicast address from the MAC address table.
1397 *
1398 * Other functions modify the MAC filtering
1399 *
1400 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1401 *     frames are forwarded to the application
1402 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1403 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1404 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1405 *     filtering address
1406 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1407 *     filtering address
1408 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1409 *     forwarded to the application regardless of the multicast 
1410 *     address provisioned
1411 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1412 *     to the application following the multicast address provisioned
1413 *
1414 * In all cases, unicast and broadcast addresses are forwarded to 
1415 * the application.
1416 *
1417 * @li Reentrant    - yes
1418 * @li ISR Callable - no
1419 *
1420 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1421 * @param *macAddr @ref IxEthAccMacAddr [in] - Ethernet Mac address.
1422 *
1423 * @return IxEthAccStatus
1424 * @li @a IX_ETH_ACC_SUCCESS
1425 * @li @a IX_ETH_ACC_NO_SUCH_ADDR :  Failed if MAC address was not in the table.
1426 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1427 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1428 *
1429 * <hr>
1430 */
1431PUBLIC IxEthAccStatus
1432ixEthAccPortMulticastAddressLeave(IxEthAccPortId portId,
1433                                                                  IxEthAccMacAddr *macAddr);
1434
1435/**
1436 * @ingroup IxEthAcc
1437 *
1438 * @fn ixEthAccPortMulticastAddressLeaveAll( IxEthAccPortId portId)
1439 *
1440 * @brief This function unconfigures the multicast filtering settings
1441 *
1442 * This function first clears the MAC address table, and then sets
1443 * the MAC as configured by the promiscuous mode current settings.
1444 *
1445 * Other functions modify the MAC filtering
1446 *
1447 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1448 *     frames are forwarded to the application
1449 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1450 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1451 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1452 *     filtering address
1453 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1454 *     filtering address
1455 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1456 *     forwarded to the application regardless of the multicast 
1457 *     address provisioned
1458 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1459 *     to the application following the multicast address provisioned
1460 *
1461 * In all cases, unicast and broadcast addresses are forwarded to 
1462 * the application.
1463 *
1464 * @li Reentrant    - yes
1465 * @li ISR Callable - no
1466 *
1467 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1468 *
1469 * @return IxEthAccStatus
1470 * @li @a IX_ETH_ACC_SUCCESS
1471 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1472 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1473 *
1474 * <hr>
1475 */
1476PUBLIC IxEthAccStatus
1477ixEthAccPortMulticastAddressLeaveAll(IxEthAccPortId portId);
1478
1479/**
1480 * @ingroup IxEthAcc
1481 *
1482 * @fn ixEthAccPortUnicastAddressShow(IxEthAccPortId portId)
1483 *
1484 * @brief Displays unicast MAC address
1485 *
1486 * Displays unicast address which is configured using 
1487 * @a ixEthAccUnicastMacAddressSet. This function also displays the MAC filter used
1488 * to filter multicast frames.
1489 *
1490 * Other functions modify the MAC filtering
1491 *
1492 * @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
1493 *     frames are forwarded to the application
1494 * @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
1495 *     effects of @a ixEthAccPortMulticastAddressJoinAll()
1496 * @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new 
1497 *     filtering address
1498 * @li @a ixEthAccPortMulticastAddressJoin() - provision a new 
1499 *     filtering address
1500 * @li @a ixEthAccPortPromiscuousModeSet() - all frames are 
1501 *     forwarded to the application regardless of the multicast 
1502 *     address provisioned
1503 * @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded 
1504 *     to the application following the multicast address provisioned
1505 *
1506 * In all cases, unicast and broadcast addresses are forwarded to 
1507 * the application.
1508 *
1509 * @li Reentrant    - yes
1510 * @li ISR Callable - no
1511 *
1512 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1513 *
1514 * @return void
1515 *
1516 * <hr>
1517 */
1518PUBLIC IxEthAccStatus ixEthAccPortUnicastAddressShow(IxEthAccPortId portId);
1519
1520
1521/**
1522 * @ingroup IxEthAcc
1523 *
1524 * @fn ixEthAccPortMulticastAddressShow( IxEthAccPortId portId)
1525 *
1526 * @brief Displays multicast MAC address
1527 *
1528 * Displays multicast address which have been configured using @a ixEthAccMulticastAddressJoin
1529 * 
1530 * @li Reentrant    - yes
1531 * @li ISR Callable - no
1532 * 
1533 * @param portId @ref IxEthAccPortId [in] - Ethernet port id.
1534 *
1535 * @return void
1536 *
1537 * <hr>
1538 */
1539PUBLIC void ixEthAccPortMulticastAddressShow( IxEthAccPortId portId);
1540
1541/**
1542 * @ingroup IxEthAcc
1543 *
1544 * @fn ixEthAccPortDuplexModeSet( IxEthAccPortId portId, IxEthAccDuplexMode mode )
1545 *
1546 * @brief  Set the duplex mode for the MAC.
1547 *
1548 * Configure the IXP400 MAC to either full or half duplex. 
1549 *
1550 * @note 
1551 * The configuration should match that provisioned on the PHY.
1552 *
1553 * @li Reentrant    - yes
1554 * @li ISR Callable - no
1555 *
1556 * @param portId @ref IxEthAccPortId [in]
1557 * @param mode @ref IxEthAccDuplexMode [in]
1558 *
1559 * @return IxEthAccStatus 
1560 * @li @a IX_ETH_ACC_SUCCESS 
1561 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1562 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1563 *
1564 * <hr>
1565 */
1566PUBLIC IxEthAccStatus 
1567ixEthAccPortDuplexModeSet(IxEthAccPortId portId,IxEthAccDuplexMode mode);
1568
1569/**
1570 * @ingroup IxEthAcc
1571 *
1572 * @fn ixEthAccPortDuplexModeGet( IxEthAccPortId portId, IxEthAccDuplexMode *mode )
1573 *
1574 * @brief  Get the duplex mode for the MAC.
1575 *
1576 * return the duplex configuration of the IXP400 MAC.
1577 *
1578 * @note
1579 * The configuration should match that provisioned on the PHY.
1580 * See @a ixEthAccDuplexModeSet
1581 *
1582 * @li Reentrant    - yes
1583 * @li ISR Callable - no
1584 *
1585 * @param portId @ref IxEthAccPortId [in]
1586 * @param *mode @ref IxEthAccDuplexMode [out]
1587 *
1588 * @return IxEthAccStatus
1589 * @li @a IX_ETH_ACC_SUCCESS 
1590 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1591 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1592 *
1593 * <hr>
1594 *
1595 */
1596PUBLIC IxEthAccStatus 
1597ixEthAccPortDuplexModeGet(IxEthAccPortId portId,IxEthAccDuplexMode *mode );
1598
1599/**
1600 * @ingroup IxEthAcc
1601 *
1602 * @fn ixEthAccPortTxFrameAppendPaddingEnable( IxEthAccPortId portId)
1603 *
1604 * @brief  Enable padding bytes to be appended to runt frames submitted to
1605 * this port
1606 * 
1607 * Enable up to 60 null-bytes padding bytes to be appended to runt frames 
1608 * submitted to this port. This is the default behavior of the access 
1609 * component.
1610 *
1611 * @warning Do not change this behaviour while the port is enabled.
1612 *
1613 * @note When Tx padding is enabled, Tx FCS generation is turned on
1614 *
1615 * @li Reentrant    - yes
1616 * @li ISR Callable - no
1617 *
1618 * @sa ixEthAccPortTxFrameAppendFCSDusable
1619 *
1620 * @param portId @ref IxEthAccPortId [in]
1621 *
1622 * @return IxEthAccStatus
1623 * @li @a IX_ETH_ACC_SUCCESS 
1624 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1625 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1626 *
1627 * <hr>
1628 */
1629PUBLIC IxEthAccStatus
1630ixEthAccPortTxFrameAppendPaddingEnable(IxEthAccPortId portId);
1631
1632/**
1633 * @ingroup IxEthAcc
1634 *
1635 * @fn ixEthAccPortTxFrameAppendPaddingDisable( IxEthAccPortId portId)
1636 *
1637 * @brief  Disable padding bytes to be appended to runt frames submitted to
1638 * this port
1639 * 
1640 * Disable padding bytes to be appended to runt frames 
1641 * submitted to this port. This is not the default behavior of the access 
1642 * component.
1643 *
1644 * @warning Do not change this behaviour while the port is enabled.
1645 *
1646 * @li Reentrant    - yes
1647 * @li ISR Callable - no
1648 *
1649 * @param portId @ref IxEthAccPortId [in] 
1650 *
1651 * @return IxEthAccStatus
1652 * @li @a IX_ETH_ACC_SUCCESS 
1653 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1654 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1655 *
1656 * <hr>
1657 */
1658PUBLIC IxEthAccStatus
1659ixEthAccPortTxFrameAppendPaddingDisable(IxEthAccPortId portId);
1660
1661/**
1662 * @ingroup IxEthAcc
1663 *
1664 * @fn ixEthAccPortTxFrameAppendFCSEnable( IxEthAccPortId portId)
1665 *
1666 * @brief  Enable the appending of Ethernet FCS to all frames submitted to this port
1667 * 
1668 * When enabled, the FCS is added to the submitted frames. This is the default 
1669 * behavior of the access component.
1670 * Do not change this behaviour while the port is enabled.
1671 *
1672 * @li Reentrant    - yes
1673 * @li ISR Callable - no
1674 *
1675 * @param portId @ref IxEthAccPortId [in] 
1676 *
1677 * @return IxEthAccStatus
1678 * @li @a IX_ETH_ACC_SUCCESS 
1679 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1680 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1681 *
1682 * <hr>
1683 */
1684PUBLIC IxEthAccStatus
1685ixEthAccPortTxFrameAppendFCSEnable(IxEthAccPortId portId);
1686
1687/**
1688 * @ingroup IxEthAcc
1689 *
1690 * @fn ixEthAccPortTxFrameAppendFCSDisable( IxEthAccPortId portId)
1691 *
1692 * @brief  Disable the appending of Ethernet FCS to all frames submitted to this port.
1693 * 
1694 * When disabled, the Ethernet FCS is not added to the submitted frames. 
1695 * This is not the default
1696 * behavior of the access component.
1697 *
1698 * @note Since the FCS is not appended to the frame it is expected that the frame submitted to the 
1699 * component includes a valid FCS at the end of the data, although this will not be validated.
1700 *
1701 * The component shall forward the frame to the Ethernet MAC WITHOUT modification.
1702 *
1703 * Do not change this behaviour while the port is enabled.
1704 *
1705 * @note Tx FCS append is not disabled while Tx padding is enabled.
1706 *
1707 * @li Reentrant    - yes
1708 * @li ISR Callable - no
1709 *
1710 * @sa ixEthAccPortTxFrameAppendPaddingEnable
1711 *
1712 * @param portId @ref IxEthAccPortId [in] 
1713 *
1714 * @return IxEthAccStatus
1715 * @li @a IX_ETH_ACC_SUCCESS 
1716 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1717 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1718 *
1719 * <hr>
1720 */
1721PUBLIC IxEthAccStatus
1722ixEthAccPortTxFrameAppendFCSDisable(IxEthAccPortId portId);
1723
1724/**
1725 * @ingroup IxEthAcc
1726 *
1727 * @fn ixEthAccPortRxFrameAppendFCSEnable( IxEthAccPortId portId)
1728 *
1729 * @brief Forward frames with FCS included in the receive buffer.
1730 *
1731 * The FCS is not striped from the receive buffer. 
1732 * The received frame length includes the FCS size (4 bytes). ie. 
1733 * A minimum sized ethernet frame shall have a length of 64bytes.
1734 *
1735 * Frame FCS validity checks are still carried out on all received frames.
1736 *
1737 * This is not the default
1738 * behavior of the access component.
1739 *
1740 * @li Reentrant    - yes
1741 * @li ISR Callable - no
1742 *
1743 * @param portId @ref IxEthAccPortId [in]
1744 *
1745 * @return IxEthAccStatus
1746 * @li @a IX_ETH_ACC_SUCCESS 
1747 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1748 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1749 *
1750 * <hr>
1751 */
1752PUBLIC IxEthAccStatus
1753ixEthAccPortRxFrameAppendFCSEnable(IxEthAccPortId portId);
1754
1755/**
1756 * @ingroup IxEthAcc
1757 *
1758 * @fn ixEthAccPortRxFrameAppendFCSDisable( IxEthAccPortId portId)
1759 *
1760 * @brief  Do not forward the FCS portion of the received Ethernet frame to the user. 
1761 * The FCS is striped from the receive buffer. 
1762 * The received frame length does not include the FCS size (4 bytes).
1763 * Frame FCS validity checks are still carried out on all received frames.
1764 *
1765 * This is the default behavior of the component.
1766 * Do not change this behaviour while the port is enabled.
1767 *
1768 * @li Reentrant    - yes
1769 * @li ISR Callable - no
1770 *
1771 * @param portId @ref IxEthAccPortId [in]
1772 *
1773 * @return IxEthAccStatus
1774 * @li @a IX_ETH_ACC_SUCCESS 
1775 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1776 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1777 *
1778 * <hr>
1779 */
1780PUBLIC IxEthAccStatus
1781ixEthAccPortRxFrameAppendFCSDisable(IxEthAccPortId portId);
1782
1783
1784
1785
1786/**
1787 * @ingroup IxEthAcc
1788 *
1789 * @enum IxEthAccSchedulerDiscipline
1790 *
1791 * @brief  Definition for the port scheduling discipline
1792 *
1793 * Select the port scheduling discipline on receive and transmit path
1794 * @li FIFO : No Priority : In this configuration all frames are processed
1795 *                       in the access component in the strict order in which 
1796 *                        the component received them.
1797 * @li FIFO : Priority : This shall be a very simple priority mechanism. 
1798 *                     Higher prior-ity frames shall be forwarded 
1799 *                     before lower priority frames. There shall be no 
1800 *                     fairness mechanisms applied across different 
1801 *                     priorities. Higher priority frames could starve 
1802 *                     lower priority frames indefinitely.
1803 */
1804typedef  enum 
1805{
1806    FIFO_NO_PRIORITY, /**<frames submitted with no priority*/
1807    FIFO_PRIORITY /**<higher prority frames submitted before lower priority*/
1808}IxEthAccSchedulerDiscipline;
1809
1810/**
1811 * @ingroup IxEthAcc
1812 *
1813 * @def IxEthAccTxSchedulerDiscipline
1814 *
1815 * @brief  Deprecated definition for the port transmit scheduling discipline
1816 */ 
1817#define IxEthAccTxSchedulerDiscipline IxEthAccSchedulerDiscipline
1818
1819
1820
1821/**
1822 * @ingroup IxEthAcc
1823 *
1824 * @fn ixEthAccTxSchedulingDisciplineSet( IxEthAccPortId portId, IxEthAccSchedulerDiscipline sched)
1825 *
1826 * @brief Set the port scheduling to one of @a IxEthAccSchedulerDiscipline
1827 *
1828 * The default behavior of the component is @a FIFO_NO_PRIORITY.
1829 *
1830 * @li Reentrant    - yes
1831 * @li ISR Callable - no
1832 *
1833 * @pre
1834 *
1835 *
1836 * @param portId @ref IxEthAccPortId [in] 
1837 * @param sched @ref IxEthAccSchedulerDiscipline [in] 
1838 *
1839 * @return IxEthAccStatus
1840 * @li @a IX_ETH_ACC_SUCCESS : Set appropriate discipline.
1841 * @li @a IX_ETH_ACC_FAIL :  Invalid/unsupported discipline.
1842 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
1843 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
1844 *
1845 * <hr>
1846 */
1847PUBLIC IxEthAccStatus
1848ixEthAccTxSchedulingDisciplineSet(IxEthAccPortId portId, 
1849                                                                  IxEthAccSchedulerDiscipline sched);
1850
1851
1852/**
1853 * @ingroup IxEthAcc
1854 *
1855 * @fn ixEthAccRxSchedulingDisciplineSet(IxEthAccSchedulerDiscipline sched)
1856 *
1857 * @brief Set the Rx scheduling to one of @a IxEthAccSchedulerDiscipline
1858 *
1859 * The default behavior of the component is @a FIFO_NO_PRIORITY.
1860 *
1861 * @li Reentrant    - yes
1862 * @li ISR Callable - no
1863 *
1864 * @pre
1865 *
1866 * @param sched : @a IxEthAccSchedulerDiscipline 
1867 *
1868 * @return IxEthAccStatus
1869 * @li @a IX_ETH_ACC_SUCCESS : Set appropriate discipline.
1870 * @li @a IX_ETH_ACC_FAIL :  Invalid/unsupported discipline.
1871 *
1872 * <hr>
1873 */
1874PUBLIC IxEthAccStatus
1875ixEthAccRxSchedulingDisciplineSet(IxEthAccSchedulerDiscipline sched);
1876
1877/**
1878 * @ingroup IxEthAcc
1879 *
1880 * @fn IxEthAccStatus ixEthAccNpeLoopbackEnable(IxEthAccPortId portId)
1881 *
1882 * @brief Enable NPE loopback
1883 *
1884 * When this loopback mode is enabled all the transmitted frames are
1885 * received on the same port, without payload.
1886 *
1887 * This function is recommended for power-up diagnostic checks and
1888 * should never be used under normal Ethernet traffic operations.
1889 *
1890 * @li Reentrant    - yes
1891 * @li ISR Callable - no
1892 *
1893 * @pre
1894 *
1895 * @param portId : ID of the port 
1896 *
1897 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
1898 * guaranteed to restore correct Ethernet Tx/Rx operation.
1899 *
1900 * @return IxEthAccStatus
1901 * @li @a IX_ETH_ACC_SUCCESS : NPE loopback mode enabled
1902 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
1903 *
1904 * <hr>
1905 */
1906PUBLIC IxEthAccStatus 
1907ixEthAccPortNpeLoopbackEnable(IxEthAccPortId portId);
1908
1909/**
1910 * @ingroup IxEthAcc
1911 *
1912 * @fn IxEthAccStatus ixEthAccPortNpeLoopbackDisable(IxEthAccPortId portId)
1913 *
1914 * @brief Disable NPE loopback
1915 *
1916 * This function is used to disable the NPE loopback if previously
1917 * enabled using ixEthAccNpeLoopbackEnable.
1918 *
1919 * This function is recommended for power-up diagnostic checks and
1920 * should never be used under normal Ethernet traffic operations.
1921 *
1922 * @li Reentrant    - yes
1923 * @li ISR Callable - no
1924 *
1925 * @pre
1926 *
1927 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
1928 * guaranteed to restore correct Ethernet Tx/Rx operation.
1929 *
1930 * @param portId : ID of the port 
1931 *
1932 * @return IxEthAccStatus
1933 * @li @a IX_ETH_ACC_SUCCESS : NPE loopback successfully disabled
1934 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
1935 *
1936 * <hr>
1937 */
1938PUBLIC IxEthAccStatus 
1939ixEthAccPortNpeLoopbackDisable(IxEthAccPortId portId);
1940
1941/**
1942 * @ingroup IxEthAcc
1943 *
1944 * @fn IxEthAccStatus ixEthAccPortTxEnable(IxEthAccPortId portId)
1945 *
1946 * @brief Enable Tx on the port
1947 *
1948 * This function is the complement of ixEthAccPortTxDisable and should
1949 * be used only after Tx was disabled. A MAC core reset is required before
1950 * this function is called (see @a ixEthAccPortMacReset).
1951 *
1952 * This function is the recommended usage scenario for emergency security
1953 * shutdown and hardware failure recovery and should never be used for throttling 
1954 * traffic.
1955 *
1956 * @li Reentrant    - yes
1957 * @li ISR Callable - no
1958 *
1959 * @pre
1960 *
1961 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
1962 * guaranteed to restore correct Ethernet Tx/Rx operation.
1963 *
1964 * @param portId : ID of the port 
1965 *
1966 * @return IxEthAccStatus
1967 * @li @a IX_ETH_ACC_SUCCESS : Tx successfully enabled
1968 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
1969 *
1970 * <hr>
1971 */
1972PUBLIC IxEthAccStatus 
1973ixEthAccPortTxEnable(IxEthAccPortId portId);
1974
1975/**
1976 * @ingroup IxEthAcc
1977 *
1978 * @fn IxEthAccStatus ixEthAccPortTxDisable(IxEthAccPortId portId)
1979 *
1980 * @brief Disable Tx on the port
1981 *
1982 * This function can be used to disable Tx in the MAC core.
1983 * Tx can be re-enabled, although this is not guaranteed, by performing
1984 * a MAC core reset (@a ixEthAccPortMacReset) and calling ixEthAccPortTxEnable.
1985 * Note that using this function is not recommended, except for shutting
1986 * down Tx for emergency reasons. For proper port shutdown and re-enabling
1987 * see ixEthAccPortEnable and ixEthAccPortDisable.
1988 *
1989 * This function is the recommended usage scenario for emergency security
1990 * shutdown and hardware failure recovery and should never be used for throttling 
1991 * traffic.
1992 *
1993 * @li Reentrant    - yes
1994 * @li ISR Callable - no
1995 *
1996 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
1997 * guaranteed to restore correct Ethernet Tx/Rx operation.
1998 *
1999 * @pre
2000 *
2001 * @param portId : ID of the port 
2002 *
2003 * @return IxEthAccStatus
2004 * @li @a IX_ETH_ACC_SUCCESS : Tx successfully disabled
2005 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
2006 *
2007 * <hr>
2008 */
2009PUBLIC IxEthAccStatus 
2010ixEthAccPortTxDisable(IxEthAccPortId portId);
2011
2012/**
2013 * @ingroup IxEthAcc
2014 *
2015 * @fn IxEthAccStatus ixEthAccPortRxEnable(IxEthAccPortId portId)
2016 *
2017 * @brief Enable Rx on the port
2018 *
2019 * This function is the complement of ixEthAccPortRxDisable and should
2020 * be used only after Rx was disabled.
2021 *
2022 * This function is the recommended usage scenario for emergency security
2023 * shutdown and hardware failure recovery and should never be used for throttling 
2024 * traffic.
2025 *
2026 * @li Reentrant    - yes
2027 * @li ISR Callable - no
2028 *
2029 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
2030 * guaranteed to restore correct Ethernet Tx/Rx operation.
2031 *
2032 * @pre
2033 *
2034 * @param portId : ID of the port 
2035 *
2036 * @return IxEthAccStatus
2037 * @li @a IX_ETH_ACC_SUCCESS : Rx successfully enabled
2038 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
2039 *
2040 * <hr>
2041 */
2042PUBLIC IxEthAccStatus 
2043ixEthAccPortRxEnable(IxEthAccPortId portId);
2044
2045/**
2046 * @ingroup IxEthAcc
2047 *
2048 * @fn IxEthAccStatus ixEthAccPortRxDisable(IxEthAccPortId portId)
2049 *
2050 * @brief Disable Rx on the port
2051 *
2052 * This function can be used to disable Rx in the MAC core.
2053 * Rx can be re-enabled, although this is not guaranteed, by performing
2054 * a MAC core reset (@a ixEthAccPortMacReset) and calling ixEthAccPortRxEnable.
2055 * Note that using this function is not recommended, except for shutting
2056 * down Rx for emergency reasons. For proper port shutdown and re-enabling
2057 * see ixEthAccPortEnable and ixEthAccPortDisable.
2058 *
2059 * This function is the recommended usage scenario for emergency security
2060 * shutdown and hardware failure recovery and should never be used for throttling 
2061 * traffic.
2062 *
2063 * @li Reentrant    - yes
2064 * @li ISR Callable - no
2065 *
2066 * @pre
2067 *
2068 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
2069 * guaranteed to restore correct Ethernet Tx/Rx operation.
2070 *
2071 * @param portId : ID of the port 
2072 *
2073 * @return IxEthAccStatus
2074 * @li @a IX_ETH_ACC_SUCCESS : Rx successfully disabled
2075 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
2076 *
2077 * <hr>
2078 */
2079PUBLIC IxEthAccStatus 
2080ixEthAccPortRxDisable(IxEthAccPortId portId);
2081
2082/**
2083 * @ingroup IxEthAcc
2084 *
2085 * @fn IxEthAccStatus ixEthAccPortMacReset(IxEthAccPortId portId)
2086 *
2087 * @brief Reset MAC core on the port
2088 *
2089 * This function will perform a MAC core reset (NPE Ethernet coprocessor).
2090 * This function is inherently unsafe and the NPE recovery is not guaranteed
2091 * after this function is called. The proper manner of performing port disable
2092 * and enable (which will reset the MAC as well) is ixEthAccPortEnable/ixEthAccPortDisable.
2093 *
2094 * This function is the recommended usage scenario for hardware failure recovery
2095 * and should never be used for throttling traffic.
2096 *
2097 * @li Reentrant    - yes
2098 * @li ISR Callable - no
2099 *
2100 * @pre
2101 *
2102 * @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
2103 * guaranteed to restore correct Ethernet Tx/Rx operation.
2104 *
2105 * @param portId : ID of the port 
2106 *
2107 * @return IxEthAccStatus
2108 * @li @a IX_ETH_ACC_SUCCESS : MAC core reset
2109 * @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
2110 *
2111 * <hr>
2112 */
2113PUBLIC IxEthAccStatus 
2114ixEthAccPortMacReset(IxEthAccPortId portId);
2115
2116/*********************************************************************************
2117  ####    #####    ##     #####     #     ####    #####     #     ####    ####
2118 #          #     #  #      #       #    #          #       #    #    #  #
2119  ####      #    #    #     #       #     ####      #       #    #        ####
2120      #     #    ######     #       #         #     #       #    #            #
2121 #    #     #    #    #     #       #    #    #     #       #    #    #  #    #
2122  ####      #    #    #     #       #     ####      #       #     ####    ####
2123**********************************************************************************/
2124
2125
2126/**
2127 *
2128 * @brief This struct defines the statistics returned by this component.
2129 *
2130 * The component returns MIB2 EthObj variables which are obtained from the 
2131 * hardware or maintained by this component. 
2132 *
2133 *
2134 */
2135typedef struct   
2136{
2137    UINT32 dot3StatsAlignmentErrors;            /**< link error count (rx) */
2138    UINT32 dot3StatsFCSErrors;                  /**< link error count (rx) */
2139    UINT32 dot3StatsInternalMacReceiveErrors;   /**< link error count (rx) */
2140    UINT32 RxOverrunDiscards;                   /**< NPE: discarded frames count (rx) */
2141    UINT32 RxLearnedEntryDiscards;                /**< NPE: discarded frames count(rx)  */
2142    UINT32 RxLargeFramesDiscards;                 /**< NPE: discarded frames count(rx)  */
2143    UINT32 RxSTPBlockedDiscards;                  /**< NPE: discarded frames count(rx)  */
2144    UINT32 RxVLANTypeFilterDiscards;              /**< NPE: discarded frames count (rx) */
2145    UINT32 RxVLANIdFilterDiscards;                /**< NPE: discarded frames count (rx) */
2146    UINT32 RxInvalidSourceDiscards;               /**< NPE: discarded frames count (rx) */
2147    UINT32 RxBlackListDiscards;                   /**< NPE: discarded frames count (rx) */
2148    UINT32 RxWhiteListDiscards;                   /**< NPE: discarded frames count (rx) */
2149    UINT32 RxUnderflowEntryDiscards;              /**< NPE: discarded frames count (rx) */
2150    UINT32 dot3StatsSingleCollisionFrames;      /**< link error count (tx) */
2151    UINT32 dot3StatsMultipleCollisionFrames;    /**< link error count (tx) */
2152    UINT32 dot3StatsDeferredTransmissions;      /**< link error count (tx) */
2153    UINT32 dot3StatsLateCollisions;             /**< link error count (tx) */
2154    UINT32 dot3StatsExcessiveCollsions;         /**< link error count (tx) */
2155    UINT32 dot3StatsInternalMacTransmitErrors;  /**< link error count (tx) */
2156    UINT32 dot3StatsCarrierSenseErrors;         /**< link error count (tx) */
2157    UINT32 TxLargeFrameDiscards;                /**< NPE: discarded frames count (tx) */
2158    UINT32 TxVLANIdFilterDiscards;              /**< NPE: discarded frames count (tx) */
2159
2160}IxEthEthObjStats;
2161
2162/**
2163 * @ingroup IxEthAcc
2164 *
2165 * @fn ixEthAccMibIIStatsGet(IxEthAccPortId portId ,IxEthEthObjStats *retStats )
2166 *
2167 * @brief  Returns the statistics maintained for a port.
2168 *
2169 * @li Reentrant    - yes
2170 * @li ISR Callable - no
2171 *
2172 * @pre
2173 *
2174 *
2175 * @param portId @ref IxEthAccPortId [in] 
2176 * @param retStats @ref IxEthEthObjStats [out]
2177 * @note Please note the user is responsible for cache coheriency of the retStat
2178 * buffer. The data is actually populated via the NPE's. As such cache safe
2179 * memory should be used in the retStats argument.
2180 *
2181 * @return IxEthAccStatus
2182 * @li @a IX_ETH_ACC_SUCCESS
2183 * @li @a IX_ETH_ACC_FAIL : Invalid arguments.
2184 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
2185 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
2186 *
2187 * <hr>
2188 */
2189PUBLIC IxEthAccStatus
2190ixEthAccMibIIStatsGet(IxEthAccPortId portId, IxEthEthObjStats *retStats );
2191
2192/**
2193 * @ingroup IxEthAcc
2194 *
2195 * @fn ixEthAccMibIIStatsGetClear(IxEthAccPortId portId, IxEthEthObjStats *retStats)
2196 * 
2197 * @brief  Returns and clears the statistics maintained for a port. 
2198 *
2199 * @li Reentrant    - yes
2200 * @li ISR Callable - yes
2201 *
2202 * @pre
2203 *
2204 * @param portId @ref IxEthAccPortId [in] 
2205 * @param retStats @ref IxEthEthObjStats [out]
2206 * @note Please note the user is responsible for cache coheriency of the retStats
2207 * buffer. The data is actually populated via the NPE's. As such cache safe
2208 * memory should be used in the retStats argument.
2209 *
2210 * @return IxEthAccStatus
2211 * @li @a IX_ETH_ACC_SUCCESS
2212 * @li @a IX_ETH_ACC_FAIL : invalid arguments.
2213 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
2214 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
2215 *
2216 * <hr>
2217 */
2218PUBLIC IxEthAccStatus
2219ixEthAccMibIIStatsGetClear(IxEthAccPortId portId, IxEthEthObjStats *retStats);
2220
2221/**
2222 * @ingroup IxEthAcc
2223 *
2224 * @fn ixEthAccMibIIStatsClear(IxEthAccPortId portId)
2225 *
2226 * @brief   Clears the statistics maintained for a port.
2227 *
2228 * @li Reentrant    - yes
2229 * @li ISR Callable - no
2230 *
2231 * @pre
2232 *
2233 * @param portId @ref IxEthAccPortId [in]
2234 *
2235 * @return IxEthAccStatus
2236 * @li @a IX_ETH_ACC_SUCCESS
2237 * @li @a IX_ETH_ACC_FAIL : Invalid arguments.
2238 * @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
2239 * @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
2240 *
2241 * <hr>
2242 */
2243PUBLIC IxEthAccStatus ixEthAccMibIIStatsClear(IxEthAccPortId portId);
2244
2245/**
2246 * @ingroup IxEthAcc
2247 *
2248 * @fn ixEthAccMacInit(IxEthAccPortId portId)
2249 * 
2250 * @brief Initializes the ethernet MAC settings 
2251 * 
2252 * @li Reentrant    - no
2253 * @li ISR Callable - no
2254 *
2255 * @param portId @ref IxEthAccPortId [in]
2256 *
2257 * @return IxEthAccStatus
2258 * @li @a IX_ETH_ACC_SUCCESS
2259 * @li @a IX_ETH_ACC_INVALID_PORT       :  portId is invalid.
2260 *
2261 * <hr>
2262 */
2263PUBLIC IxEthAccStatus ixEthAccMacInit(IxEthAccPortId portId);
2264
2265/**
2266 * @ingroup IxEthAcc
2267 *
2268 * @fn ixEthAccStatsShow(IxEthAccPortId portId)
2269 *
2270 *
2271 * @brief Displays a ports statistics on the standard io console using printf.
2272 *
2273 * @li Reentrant    - no
2274 * @li ISR Callable - no
2275 *
2276 * @pre
2277 *
2278 * @param portId @ref IxEthAccPortId [in]
2279 *
2280 * @return void
2281 *
2282 * <hr>
2283 */
2284PUBLIC void ixEthAccStatsShow(IxEthAccPortId portId);
2285
2286/*************************************************************************
2287
2288 #    #     #       #            #    #  #####      #     ####
2289 ##  ##     #       #            ##  ##  #    #     #    #    #
2290 # ## #     #       #            # ## #  #    #     #    #    #
2291 #    #     #       #            #    #  #    #     #    #    #
2292 #    #     #       #            #    #  #    #     #    #    #
2293 #    #     #       #            #    #  #####      #     ####
2294
2295*************************************************************************/
2296
2297
2298/**
2299 * @ingroup IxEthAcc
2300 *
2301 * @fn ixEthAccMiiReadRtn (UINT8 phyAddr, 
2302                           UINT8 phyReg, 
2303                           UINT16 *value)
2304 *
2305 *
2306 * @brief Reads a 16 bit value from a PHY
2307 *
2308 * Reads a 16-bit word from a register of a MII-compliant PHY. Reading
2309 * is performed through the MII management interface.  This function returns
2310 * when the read operation has successfully completed, or when a timeout has elapsed.
2311 *
2312 * @li Reentrant    - no
2313 * @li ISR Callable - no
2314 *
2315 * @pre The MAC on Ethernet Port 2 (NPE C) must be initialised, and generating the MDIO clock.
2316 *   
2317 * @param phyAddr UINT8 [in] - the address of the Ethernet PHY (0-31)
2318 * @param phyReg UINT8 [in] -  the number of the MII register to read (0-31)
2319 * @param value UINT16 [in] -  the value read from the register
2320 *
2321 * @return IxEthAccStatus
2322 * @li @a IX_ETH_ACC_SUCCESS
2323 * @li @a IX_ETH_ACC_FAIL : failed to read the register.
2324 *
2325 * <hr>
2326 */
2327PUBLIC IxEthAccStatus
2328ixEthAccMiiReadRtn (UINT8 phyAddr, UINT8 phyReg, UINT16 *value);
2329
2330/**
2331 * @ingroup IxEthAcc
2332 *
2333 * @fn ixEthAccMiiWriteRtn (UINT8 phyAddr, 
2334                            UINT8 phyReg, 
2335                            UINT16 value)
2336 *
2337 *
2338 * @brief Writes a 16 bit value to a PHY
2339 *
2340 * Writes a 16-bit word from a register of a MII-compliant PHY. Writing
2341 * is performed through the MII management interface.  This function returns
2342 * when the write operation has successfully completed, or when a timeout has elapsed.
2343 *
2344 * @li Reentrant    - no
2345 * @li ISR Callable - no
2346 *
2347 * @pre The MAC on Ethernet Port 2 (NPE C) must be initialised, and generating the MDIO clock.
2348 *   
2349 * @param phyAddr UINT8 [in] - the address of the Ethernet PHY (0-31)
2350 * @param phyReg UINT8 [in] -  the number of the MII register to write (0-31)
2351 * @param value UINT16 [out] -  the value to write to the register
2352 *
2353 * @return IxEthAccStatus
2354 * @li @a IX_ETH_ACC_SUCCESS
2355 * @li @a IX_ETH_ACC_FAIL : failed to write register.
2356 *
2357 * <hr>
2358 */
2359PUBLIC IxEthAccStatus
2360ixEthAccMiiWriteRtn (UINT8 phyAddr, UINT8 phyReg, UINT16 value);
2361
2362/**
2363 * @ingroup IxEthAcc
2364 *
2365 * @fn ixEthAccMiiAccessTimeoutSet(UINT32 timeout)
2366 *
2367 * @brief Overrides the default timeout value and retry count when reading or 
2368 * writing MII registers using ixEthAccMiiWriteRtn or ixEthAccMiiReadRtn
2369 *
2370 * The default behavior of the component is to use a IX_ETH_ACC_MII_10TH_SEC_IN_MILLIS ms
2371 * timeout (declared as 100 in IxEthAccMii_p.h) and a retry count of IX_ETH_ACC_MII_TIMEOUT_10TH_SECS
2372 * (declared as 5 in IxEthAccMii_p.h).
2373 *
2374 * The MII read and write functions will attempt to read the status of the register up
2375 * to the retry count times, delaying between each attempt with the timeout value.
2376 *
2377 * @li Reentrant    - no
2378 * @li ISR Callable - no
2379 *
2380 * @pre
2381 *
2382 * @param timeout UINT32 [in] - new timeout value, in milliseconds
2383 * @param timeout UINT32 [in] - new retry count (a minimum value of 1 must be used)
2384 *
2385 * @return IxEthAccStatus
2386 * @li @a IX_ETH_ACC_SUCCESS
2387 * @li @a IX_ETH_ACC_FAIL : invalid parameter(s)
2388 *
2389 * <hr>
2390 */
2391PUBLIC IxEthAccStatus
2392ixEthAccMiiAccessTimeoutSet(UINT32 timeout, UINT32 retryCount);
2393
2394/**
2395 * @ingroup IxEthAcc
2396 *
2397 * @fn ixEthAccMiiStatsShow (UINT32 phyAddr)
2398 *
2399 *
2400 * @brief Displays detailed information on a specified PHY
2401 *
2402 * Displays the current values of the first eigth MII registers for a PHY, 
2403 *
2404 * @li Reentrant    - no
2405 * @li ISR Callable - no
2406 *
2407 * @pre The MAC on Ethernet Port 2 (NPE C) must be initialised, and 
2408 *      generating the MDIO clock.
2409 *   
2410 * @param phyAddr UINT32 [in] - the address of the Ethernet PHY (0-31)
2411 *
2412 * @return IxEthAccStatus
2413 * @li @a IX_ETH_ACC_SUCCESS
2414 * @li @a IX_ETH_ACC_FAIL : invalid arguments.
2415 *
2416 * <hr>
2417 */
2418PUBLIC IxEthAccStatus ixEthAccMiiStatsShow (UINT32 phyAddr);
2419
2420
2421
2422/******* BOARD SPECIFIC DEPRECATED API *********/
2423
2424/* The following functions are high level functions which rely
2425 * on the properties and interface of some Ethernet PHYs. The
2426 * implementation is hardware specific and has been moved to 
2427 * the hardware-specific component IxEthMii.
2428 */
2429
2430 #include "IxEthMii.h"
2431
2432/**
2433 * @ingroup IxEthAcc
2434 *
2435 * @def  ixEthAccMiiPhyScan
2436 *
2437 * @brief : deprecated API entry point. This definition 
2438 * ensures backward compatibility
2439 *
2440 * See @ref ixEthMiiPhyScan
2441 *
2442 * @note this feature is board specific
2443 *
2444 */
2445#define ixEthAccMiiPhyScan(phyPresent) ixEthMiiPhyScan(phyPresent,IXP425_ETH_ACC_MII_MAX_ADDR)
2446
2447/**
2448 * @ingroup IxEthAcc
2449 *
2450 * @def ixEthAccMiiPhyConfig
2451 *
2452 * @brief : deprecated API entry point. This definition 
2453 * ensures backward compatibility
2454 *
2455 * See @ref ixEthMiiPhyConfig
2456 *
2457 * @note this feature is board specific
2458 */
2459#define ixEthAccMiiPhyConfig(phyAddr,speed100,fullDuplex,autonegotiate) \
2460           ixEthMiiPhyConfig(phyAddr,speed100,fullDuplex,autonegotiate)
2461
2462/**
2463 * @ingroup IxEthAcc
2464 *
2465 * @def ixEthAccMiiPhyReset
2466 *
2467 * @brief : deprecated API entry point. This definition 
2468 * ensures backward compatibility
2469 *
2470 * See @ref ixEthMiiPhyReset
2471 *
2472 * @note this feature is board specific
2473 */
2474#define ixEthAccMiiPhyReset(phyAddr) \
2475           ixEthMiiPhyReset(phyAddr)
2476
2477/**
2478 * @ingroup IxEthAcc
2479 *
2480 * @def ixEthAccMiiLinkStatus
2481 *
2482 * @brief : deprecated API entry point. This definition 
2483 * ensures backward compatibility
2484 *
2485 * See @ref ixEthMiiLinkStatus
2486 *
2487 * @note this feature is board specific
2488 */
2489#define ixEthAccMiiLinkStatus(phyAddr,linkUp,speed100,fullDuplex,autoneg) \
2490           ixEthMiiLinkStatus(phyAddr,linkUp,speed100,fullDuplex,autoneg)
2491
2492
2493
2494/**
2495 * @ingroup IxEthAcc
2496 *
2497 * @def ixEthAccMiiShow  
2498 *
2499 * @brief : deprecated API entry point. This definition 
2500 * ensures backward compatibility
2501 *
2502 * See @ref ixEthMiiPhyShow
2503 *
2504 * @note this feature is board specific
2505 */
2506#define ixEthAccMiiShow(phyAddr) \
2507        ixEthMiiPhyShow(phyAddr)
2508
2509#endif /* ndef IxEthAcc_H */
2510/**
2511 *@}
2512 */
2513