mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 07:31:15 +00:00
61e129885a
Signed-off-by: Marek Vasut <marex@denx.de> Cc: Bryan Hundven <bryanhundven@gmail.com> Cc: Michael Schwingen <rincewind@discworld.dascon.de> Cc: Wolfgang Denk <wd@denx.de> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: U-Boot DM <u-boot-dm@lists.denx.de> Cc: Joe Hershberger <joe.hershberger@ni.com>
2512 lines
79 KiB
C
2512 lines
79 KiB
C
/** @file IxEthAcc.h
|
|
*
|
|
* @brief this file contains the public API of @ref IxEthAcc component
|
|
*
|
|
* Design notes:
|
|
* The IX_OSAL_MBUF address is to be specified on bits [31-5] and must
|
|
* be cache aligned (bits[4-0] cleared)
|
|
*
|
|
*
|
|
* @par
|
|
* IXP400 SW Release version 2.0
|
|
*
|
|
* -- Copyright Notice --
|
|
*
|
|
* @par
|
|
* Copyright 2001-2005, Intel Corporation.
|
|
* All rights reserved.
|
|
*
|
|
* @par
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of the Intel Corporation nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* @par
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* @par
|
|
* -- End of Copyright Notice --
|
|
*
|
|
*/
|
|
|
|
#ifndef IxEthAcc_H
|
|
#define IxEthAcc_H
|
|
|
|
#include <IxOsBuffMgt.h>
|
|
#include <IxTypes.h>
|
|
|
|
/**
|
|
* @defgroup IxEthAcc IXP400 Ethernet Access (IxEthAcc) API
|
|
*
|
|
* @brief ethAcc is a library that does provides access to the internal IXP400 10/100Bt Ethernet MACs.
|
|
*
|
|
*@{
|
|
*/
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @brief Definition of the Ethernet Access status
|
|
*/
|
|
typedef enum /* IxEthAccStatus */
|
|
{
|
|
IX_ETH_ACC_SUCCESS = IX_SUCCESS, /**< return success*/
|
|
IX_ETH_ACC_FAIL = IX_FAIL, /**< return fail*/
|
|
IX_ETH_ACC_INVALID_PORT, /**< return invalid port*/
|
|
IX_ETH_ACC_PORT_UNINITIALIZED, /**< return uninitialized*/
|
|
IX_ETH_ACC_MAC_UNINITIALIZED, /**< return MAC uninitialized*/
|
|
IX_ETH_ACC_INVALID_ARG, /**< return invalid arg*/
|
|
IX_ETH_TX_Q_FULL, /**< return tx queue is full*/
|
|
IX_ETH_ACC_NO_SUCH_ADDR /**< return no such address*/
|
|
} IxEthAccStatus;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @enum IxEthAccPortId
|
|
* @brief Definition of the IXP400 Mac Ethernet device.
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_ETH_PORT_1 = 0, /**< Ethernet Port 1 */
|
|
IX_ETH_PORT_2 = 1 /**< Ethernet port 2 */
|
|
,IX_ETH_PORT_3 = 2 /**< Ethernet port 3 */
|
|
} IxEthAccPortId;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETH_ACC_NUMBER_OF_PORTS
|
|
*
|
|
* @brief Definition of the number of ports
|
|
*
|
|
*/
|
|
#ifdef __ixp46X
|
|
#define IX_ETH_ACC_NUMBER_OF_PORTS (3)
|
|
#else
|
|
#define IX_ETH_ACC_NUMBER_OF_PORTS (2)
|
|
#endif
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_IEEE803_MAC_ADDRESS_SIZE
|
|
*
|
|
* @brief Definition of the size of the MAC address
|
|
*
|
|
*/
|
|
#define IX_IEEE803_MAC_ADDRESS_SIZE (6)
|
|
|
|
|
|
/**
|
|
*
|
|
* @brief Definition of the IEEE 802.3 Ethernet MAC address structure.
|
|
*
|
|
* The data should be packed with bytes xx:xx:xx:xx:xx:xx
|
|
* @note
|
|
* The data must be packed in network byte order.
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT8 macAddress[IX_IEEE803_MAC_ADDRESS_SIZE]; /**< MAC address */
|
|
} IxEthAccMacAddr;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @def IX_ETH_ACC_NUM_TX_PRIORITIES
|
|
* @brief Definition of the number of transmit priorities
|
|
*
|
|
*/
|
|
#define IX_ETH_ACC_NUM_TX_PRIORITIES (8)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @enum IxEthAccTxPriority
|
|
* @brief Definition of the relative priority used to transmit a frame
|
|
*
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_ETH_ACC_TX_PRIORITY_0 = 0, /**<Lowest Priority submission */
|
|
IX_ETH_ACC_TX_PRIORITY_1 = 1, /**<submission prority of 1 (0 is lowest)*/
|
|
IX_ETH_ACC_TX_PRIORITY_2 = 2, /**<submission prority of 2 (0 is lowest)*/
|
|
IX_ETH_ACC_TX_PRIORITY_3 = 3, /**<submission prority of 3 (0 is lowest)*/
|
|
IX_ETH_ACC_TX_PRIORITY_4 = 4, /**<submission prority of 4 (0 is lowest)*/
|
|
IX_ETH_ACC_TX_PRIORITY_5 = 5, /**<submission prority of 5 (0 is lowest)*/
|
|
IX_ETH_ACC_TX_PRIORITY_6 = 6, /**<submission prority of 6 (0 is lowest)*/
|
|
IX_ETH_ACC_TX_PRIORITY_7 = 7, /**<Highest priority submission */
|
|
|
|
IX_ETH_ACC_TX_DEFAULT_PRIORITY = IX_ETH_ACC_TX_PRIORITY_0 /**< By default send all
|
|
packets with lowest priority */
|
|
} IxEthAccTxPriority;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @enum IxEthAccRxFrameType
|
|
* @brief Identify the type of a frame.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
* @sa IX_ETHACC_NE_LINKMASK
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_ETHACC_RX_LLCTYPE = 0x00, /**< 802.3 - 8802, with LLC/SNAP */
|
|
IX_ETHACC_RX_ETHTYPE = 0x10, /**< 802.3 (Ethernet) without LLC/SNAP */
|
|
IX_ETHACC_RX_STATYPE = 0x20, /**< 802.11, AP <=> STA */
|
|
IX_ETHACC_RX_APTYPE = 0x30 /**< 802.11, AP <=> AP */
|
|
} IxEthAccRxFrameType;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @enum IxEthAccDuplexMode
|
|
* @brief Definition to provision the duplex mode of the MAC.
|
|
*
|
|
*/
|
|
typedef enum
|
|
{
|
|
IX_ETH_ACC_FULL_DUPLEX, /**< Full duplex operation of the MAC */
|
|
IX_ETH_ACC_HALF_DUPLEX /**< Half duplex operation of the MAC */
|
|
} IxEthAccDuplexMode;
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
* @struct IxEthAccNe
|
|
* @brief Definition of service-specific informations.
|
|
*
|
|
* This structure defines the Ethernet service-specific informations
|
|
* and enable QoS and VLAN features.
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT32 ixReserved_next; /**< reserved for chaining */
|
|
UINT32 ixReserved_lengths; /**< reserved for buffer lengths */
|
|
UINT32 ixReserved_data; /**< reserved for buffer pointer */
|
|
UINT8 ixDestinationPortId; /**< Destination portId for this packet, if known by NPE */
|
|
UINT8 ixSourcePortId; /**< Source portId for this packet */
|
|
UINT16 ixFlags; /**< BitField of option for this frame */
|
|
UINT8 ixQoS; /**< QoS class of the frame */
|
|
UINT8 ixReserved; /**< reserved */
|
|
UINT16 ixVlanTCI; /**< Vlan TCI */
|
|
UINT8 ixDestMac[IX_IEEE803_MAC_ADDRESS_SIZE]; /**< Destination MAC address */
|
|
UINT8 ixSourceMac[IX_IEEE803_MAC_ADDRESS_SIZE]; /**< Source MAC address */
|
|
} IxEthAccNe;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_PORT_UNKNOWN
|
|
*
|
|
* @brief Contents of the field @a IX_ETHACC_NE_DESTPORTID when no
|
|
* destination port can be found by the NPE for this frame.
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_PORT_UNKNOWN (0xff)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_DESTMAC
|
|
*
|
|
* @brief The location of the destination MAC address in the Mbuf header.
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_DESTMAC(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixDestMac
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_SOURCEMAC
|
|
*
|
|
* @brief The location of the source MAC address in the Mbuf header.
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_SOURCEMAC(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixSourceMac
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_VLANTCI
|
|
*
|
|
* @brief The VLAN Tag Control Information associated with this frame
|
|
*
|
|
* The VLAN Tag Control Information associated with this frame. On Rx
|
|
* path, this field is extracted from the packet header.
|
|
* On Tx path, the value of this field is inserted in the frame when
|
|
* the port is configured to insert or replace vlan tags in the
|
|
* egress frames.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*/
|
|
#define IX_ETHACC_NE_VLANTCI(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixVlanTCI
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_SOURCEPORTID
|
|
*
|
|
* @brief The port where this frame came from.
|
|
*
|
|
* The port where this frame came from. This field is set on receive
|
|
* with the port information. This field is ignored on Transmit path.
|
|
*/
|
|
#define IX_ETHACC_NE_SOURCEPORTID(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixSourcePortId
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_DESTPORTID
|
|
*
|
|
* @brief The destination port where this frame should be sent.
|
|
*
|
|
* The destination port where this frame should be sent.
|
|
*
|
|
* @li In the transmit direction, this field contains the destination port
|
|
* and is ignored unless @a IX_ETHACC_NE_FLAG_DST is set.
|
|
*
|
|
* @li In the receive direction, this field contains the port where the
|
|
* destination MAC addresses has been learned. If the destination
|
|
* MAC address is unknown, then this value is set to the reserved value
|
|
* @a IX_ETHACC_NE_PORT_UNKNOWN
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_DESTPORTID(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixDestinationPortId
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_QOS
|
|
*
|
|
* @brief QualityOfService class (QoS) for this received frame.
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_QOS(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixQoS
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_FLAGS
|
|
*
|
|
* @brief Bit Mask of the different flags associated with a frame
|
|
*
|
|
* The flags are the bit-oring combination
|
|
* of the following different fields :
|
|
*
|
|
* @li IP flag (Rx @a IX_ETHACC_NE_IPMASK)
|
|
* @li Spanning Tree flag (Rx @a IX_ETHACC_NE_STMASK)
|
|
* @li Link layer type (Rx and Tx @a IX_ETHACC_NE_LINKMASK)
|
|
* @li VLAN Tagged Frame (Rx @a IX_ETHACC_NE_VLANMASK)
|
|
* @li New source MAC address (Rx @a IX_ETHACC_NE_NEWSRCMASK)
|
|
* @li Multicast flag (Rx @a IX_ETHACC_NE_MCASTMASK)
|
|
* @li Broadcast flag (Rx @a IX_ETHACC_NE_BCASTMASK)
|
|
* @li Destination port flag (Tx @a IX_ETHACC_NE_PORTMASK)
|
|
* @li Tag/Untag Tx frame (Tx @a IX_ETHACC_NE_TAGMODEMASK)
|
|
* @li Overwrite destination port (Tx @a IX_ETHACC_NE_PORTOVERMASK)
|
|
* @li Filtered frame (Rx @a IX_ETHACC_NE_STMASK)
|
|
* @li VLAN Enabled (Rx and Tx @a IX_ETHACC_NE_VLANENABLEMASK)
|
|
*/
|
|
#define IX_ETHACC_NE_FLAGS(mBufPtr) ((IxEthAccNe *)&((mBufPtr)->ix_ne))->ixFlags
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_BCASTMASK
|
|
*
|
|
* @brief This mask defines if a received frame is a broadcast frame.
|
|
*
|
|
* This mask defines if a received frame is a broadcast frame.
|
|
* The BCAST flag is set when the destination MAC address of
|
|
* a frame is broadcast.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_BCASTMASK (0x1)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_MCASTMASK
|
|
*
|
|
* @brief This mask defines if a received frame is a multicast frame.
|
|
*
|
|
* This mask defines if a received frame is a multicast frame.
|
|
* The MCAST flag is set when the destination MAC address of
|
|
* a frame is multicast.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_MCASTMASK (0x1 << 1)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_IPMASK
|
|
*
|
|
* @brief This mask defines if a received frame is a IP frame.
|
|
*
|
|
* This mask applies to @a IX_ETHACC_NE_FLAGS and defines if a received
|
|
* frame is a IP frame. The IP flag is set on Rx direction, depending on
|
|
* the frame contents. The flag is set when the length/type field of a
|
|
* received frame is 0x8000.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_IPMASK (0x1 << 2)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_VLANMASK
|
|
*
|
|
* @brief This mask defines if a received frame is VLAN tagged.
|
|
*
|
|
* This mask defines if a received frame is VLAN tagged.
|
|
* When set, the Rx frame is VLAN-tagged and the tag value
|
|
* is available thru @a IX_ETHACC_NE_VLANID.
|
|
* Note that when sending frames which are already tagged
|
|
* this flag should be set, to avoid inserting another VLAN tag.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
* @sa IX_ETHACC_NE_VLANID
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_VLANMASK (0x1 << 3)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_LINKMASK
|
|
*
|
|
* @brief This mask is the link layer protocol indicator
|
|
*
|
|
* This mask applies to @a IX_ETHACC_NE_FLAGS.
|
|
* It reflects the state of a frame as it exits an NPE on the Rx path
|
|
* or enters an NPE on the Tx path. Its values are as follows:
|
|
* @li 0x00 - IEEE802.3 - 8802 (Rx) / IEEE802.3 - 8802 (Tx)
|
|
* @li 0x01 - IEEE802.3 - Ethernet (Rx) / IEEE802.3 - Ethernet (Tx)
|
|
* @li 0x02 - IEEE802.11 AP -> STA (Rx) / IEEE802.11 STA -> AP (Tx)
|
|
* @li 0x03 - IEEE802.11 AP -> AP (Rx) / IEEE802.11 AP->AP (Tx)
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_LINKMASK (0x3 << 4)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_STMASK
|
|
*
|
|
* @brief This mask defines if a received frame is a Spanning Tree frame.
|
|
*
|
|
* This mask applies to @a IX_ETHACC_NE_FLAGS.
|
|
* On rx direction, it defines if a received if frame is a Spanning Tree frame.
|
|
* Setting this fkag on transmit direction overrides the port settings
|
|
* regarding the VLAN options and
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_STMASK (0x1 << 6)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_FILTERMASK
|
|
*
|
|
* @brief This bit indicates whether a frame has been filtered by the Rx service.
|
|
*
|
|
* This mask applies to @a IX_ETHACC_NE_FLAGS.
|
|
* Certain frames, which should normally be fully filtered by the NPE to due
|
|
* the destination MAC address being on the same segment as the Rx port are
|
|
* still forwarded to the XScale (although the payload is invalid) in order
|
|
* to learn the MAC address of the transmitting station, if this is unknown.
|
|
* Normally EthAcc will filter and recycle these framess internally and no
|
|
* frames with the FILTER bit set will be received by the client.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_FILTERMASK (0x1 << 7)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_PORTMASK
|
|
*
|
|
* @brief This mask defines the rule to transmit a frame
|
|
*
|
|
* This mask defines the rule to transmit a frame. When set, a frame
|
|
* is transmitted to the destination port as set by the macro
|
|
* @a IX_ETHACC_NE_DESTPORTID. If not set, the destination port
|
|
* is searched using the destination MAC address.
|
|
*
|
|
* @note This flag is meaningful only for multiport Network Engines.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
* @sa IX_ETHACC_NE_DESTPORTID
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_PORTOVERMASK (0x1 << 8)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_TAGMODEMASK
|
|
*
|
|
* @brief This mask defines the tagging rules to apply to a transmit frame.
|
|
*
|
|
* This mask defines the tagging rules to apply to a transmit frame
|
|
* regardless of the default setting for a port. When used together
|
|
* with @a IX_ETHACC_NE_TAGOVERMASK and when set, the
|
|
* frame will be tagged prior to transmission. When not set,
|
|
* the frame will be untagged prior to transmission. This is accomplished
|
|
* irrespective of the Egress tagging rules, constituting a per-frame override.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
* @sa IX_ETHACC_NE_TAGOVERMASK
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_TAGMODEMASK (0x1 << 9)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_TAGOVERMASK
|
|
*
|
|
* @brief This mask defines the rule to transmit a frame
|
|
*
|
|
* This mask defines the rule to transmit a frame. When set, the
|
|
* default transmit rules of a port are overriden.
|
|
* When not set, the default rules as set by @ref IxEthDB should apply.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
* @sa IX_ETHACC_NE_TAGMODEMASK
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_TAGOVERMASK (0x1 << 10)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_VLANENABLEMASK
|
|
*
|
|
* @brief This mask defines if a frame is a VLAN frame or not
|
|
*
|
|
* When set, frames undergo normal VLAN processing on the Tx path
|
|
* (membership filtering, tagging, tag removal etc). If this flag is
|
|
* not set, the frame is considered to be a regular non-VLAN frame
|
|
* and no VLAN processing will be performed.
|
|
*
|
|
* Note that VLAN-enabled NPE images will always set this flag in all
|
|
* Rx frames, and images which are not VLAN enabled will clear this
|
|
* flag for all received frames.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_VLANENABLEMASK (0x1 << 14)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IX_ETHACC_NE_NEWSRCMASK
|
|
*
|
|
* @brief This mask defines if a received frame has been learned.
|
|
*
|
|
* This mask defines if the source MAC address of a frame is
|
|
* already known. If the bit is set, the source MAC address was
|
|
* unknown to the NPE at the time the frame was received.
|
|
*
|
|
* @sa IX_ETHACC_NE_FLAGS
|
|
*
|
|
*/
|
|
#define IX_ETHACC_NE_NEWSRCMASK (0x1 << 15)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @brief This defines the recommanded minimum size of MBUF's submitted
|
|
* to the frame receive service.
|
|
*
|
|
*/
|
|
#define IX_ETHACC_RX_MBUF_MIN_SIZE (2048)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @brief This defines the highest MII address of any attached PHYs
|
|
*
|
|
* The maximum number for PHY address is 31, add on for range checking.
|
|
*
|
|
*/
|
|
#define IXP425_ETH_ACC_MII_MAX_ADDR 32
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccInit(void)
|
|
*
|
|
* @brief Initializes the IXP400 Ethernet Access Service.
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* This should be called once per module initialization.
|
|
* @pre
|
|
* The NPE must first be downloaded with the required microcode which supports all
|
|
* required features.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : Service has failed to initialize.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccInit(void);
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccUnload(void)
|
|
*
|
|
* @brief Unload the Ethernet Access Service.
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @return void
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC void ixEthAccUnload(void);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortInit( IxEthAccPortId portId)
|
|
*
|
|
* @brief Initializes an NPE/Ethernet MAC Port.
|
|
*
|
|
* The NPE/Ethernet port initialisation includes the following steps
|
|
* @li Initialize the NPE/Ethernet MAC hardware.
|
|
* @li Verify NPE downloaded and operational.
|
|
* @li The NPE shall be available for usage once this API returns.
|
|
* @li Verify that the Ethernet port is present before initializing
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* This should be called once per mac device.
|
|
* The NPE/MAC shall be in disabled state after init.
|
|
*
|
|
* @pre
|
|
* The component must be initialized via @a ixEthAccInit
|
|
* The NPE must first be downloaded with the required microcode which supports all
|
|
* required features.
|
|
*
|
|
* Dependant on Services: (Must be initialized before using this service may be initialized)
|
|
* ixNPEmh - NPE Message handling service.
|
|
* ixQmgr - Queue Manager component.
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS: if the ethernet port is not present, a warning is issued.
|
|
* @li @a IX_ETH_ACC_FAIL : The NPE processor has failed to initialize.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortInit(IxEthAccPortId portId);
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
##### ## ##### ## ##### ## ##### # #
|
|
# # # # # # # # # # # # # #
|
|
# # # # # # # # # # # # ######
|
|
# # ###### # ###### ##### ###### # # #
|
|
# # # # # # # # # # # # #
|
|
##### # # # # # # # # # # #
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortTxFrameSubmit(
|
|
IxEthAccPortId portId,
|
|
IX_OSAL_MBUF *buffer,
|
|
IxEthAccTxPriority priority)
|
|
*
|
|
* @brief This function shall be used to submit MBUFs buffers for transmission on a particular MAC device.
|
|
*
|
|
* When the frame is transmitted, the buffer shall be returned thru the
|
|
* callback @a IxEthAccPortTxDoneCallback.
|
|
*
|
|
* In case of over-submitting, the order of the frames on the
|
|
* network may be modified.
|
|
*
|
|
* Buffers shall be not queued for transmission if the port is disabled.
|
|
* The port can be enabled using @a ixEthAccPortEnable
|
|
*
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
*
|
|
* @pre
|
|
* @a ixEthAccPortTxDoneCallbackRegister must be called to register a function to allow this service to
|
|
* return the buffer to the calling service.
|
|
*
|
|
* @note
|
|
* If the buffer submit fails for any reason the user has retained ownership of the buffer.
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - MAC port ID to transmit Ethernet frame on.
|
|
* @param buffer @ref IX_OSAL_MBUF [in] - pointer to an MBUF formatted buffer. Chained buffers are supported for transmission.
|
|
* Chained packets are not supported and the field IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR is ignored.
|
|
* @param priority @ref IxEthAccTxPriority [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : Failed to queue frame for transmission.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
|
|
PUBLIC IxEthAccStatus ixEthAccPortTxFrameSubmit(
|
|
IxEthAccPortId portId,
|
|
IX_OSAL_MBUF *buffer,
|
|
IxEthAccTxPriority priority);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @brief Function prototype for Ethernet Tx Buffer Done callback. Registered
|
|
* via @a ixEthAccTxBufferDoneCallbackRegister
|
|
*
|
|
* This function is called once the previously submitted buffer is no longer required by this service.
|
|
* It may be returned upon successful transmission of the frame or during the shutdown of
|
|
* the port prior to the transmission of a queued frame.
|
|
* The calling of this registered function is not a guarantee of successful transmission of the buffer.
|
|
*
|
|
*
|
|
* @li Reentrant - yes , The user provided function should be reentrant.
|
|
* @li ISR Callable - yes , The user provided function must be callable from an ISR.
|
|
*
|
|
*
|
|
* <b>Calling Context </b>:
|
|
* @par
|
|
* This callback is called in the context of the queue manager dispatch loop @a ixQmgrgrDispatcherLoopRun
|
|
* within the @ref IxQMgrAPI component. The calling context may be from interrupt or high priority thread.
|
|
* The decision is system specific.
|
|
*
|
|
* @param callbackTag UINT32 [in] - This tag is that provided when the callback was registered for a particular MAC
|
|
* via @a ixEthAccPortTxDoneCallbackRegister. It allows the same callback to be used for multiple MACs.
|
|
* @param mbuf @ref IX_OSAL_MBUF [in] - Pointer to the Tx mbuf descriptor.
|
|
*
|
|
* @return void
|
|
*
|
|
* @note
|
|
* The field IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR is modified by the access layer and reset to NULL.
|
|
*
|
|
* <hr>
|
|
*/
|
|
typedef void (*IxEthAccPortTxDoneCallback) ( UINT32 callbackTag, IX_OSAL_MBUF *buffer );
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortTxDoneCallbackRegister( IxEthAccPortId portId,
|
|
IxEthAccPortTxDoneCallback txCallbackFn,
|
|
UINT32 callbackTag)
|
|
*
|
|
* @brief Register a callback function to allow
|
|
* the transmitted buffers to return to the user.
|
|
*
|
|
* This function registers the transmit buffer done function callback for a particular port.
|
|
*
|
|
* The registered callback function is called once the previously submitted buffer is no longer required by this service.
|
|
* It may be returned upon successful transmission of the frame or shutdown of port prior to submission.
|
|
* The calling of this registered function is not a guarantee of successful transmission of the buffer.
|
|
*
|
|
* If called several times the latest callback shall be registered for a particular port.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
* @pre
|
|
* The port must be initialized via @a ixEthAccPortInit
|
|
*
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Register callback for a particular MAC device.
|
|
* @param txCallbackFn @ref IxEthAccPortTxDoneCallback [in] - Function to be called to return transmit buffers to the user.
|
|
* @param callbackTag UINT32 [in] - This tag shall be provided to the callback function.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
* @li @a IX_ETH_ACC_INVALID_ARG : An argument other than portId is invalid.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxDoneCallbackRegister(IxEthAccPortId portId,
|
|
IxEthAccPortTxDoneCallback txCallbackFn,
|
|
UINT32 callbackTag);
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @brief Function prototype for Ethernet Frame Rx callback. Registered via @a ixEthAccPortRxCallbackRegister
|
|
*
|
|
* It is the responsibility of the user function to free any MBUF's which it receives.
|
|
*
|
|
* @li Reentrant - yes , The user provided function should be reentrant.
|
|
* @li ISR Callable - yes , The user provided function must be callable from an ISR.
|
|
* @par
|
|
*
|
|
* This function dispatches frames to the user level
|
|
* via the provided function. The invocation shall be made for each
|
|
* frame dequeued from the Ethernet QM queue. The user is required to free any MBUF's
|
|
* supplied via this callback. In addition the registered callback must free up MBUF's
|
|
* from the receive free queue when the port is disabled
|
|
*
|
|
* If called several times the latest callback shall be registered for a particular port.
|
|
*
|
|
* <b>Calling Context </b>:
|
|
* @par
|
|
* This callback is called in the context of the queue manager dispatch loop @a ixQmgrgrDispatcherLoopRun
|
|
* within the @ref IxQMgrAPI component. The calling context may be from interrupt or high priority thread.
|
|
* The decision is system specific.
|
|
*
|
|
*
|
|
* @param callbackTag UINT32 [in] - This tag is that provided when the callback was registered for a particular MAC
|
|
* via @a ixEthAccPortRxCallbackRegister. It allows the same callback to be used for multiple MACs.
|
|
* @param mbuf @ref IX_OSAL_MBUF [in] - Pointer to the Rx mbuf header. Mbufs may be chained if
|
|
* the frame length is greater than the supplied mbuf length.
|
|
* @param reserved [in] - deprecated parameter The information is passed
|
|
* thru the IxEthAccNe header destination port ID field
|
|
* (@sa IX_ETHACC_NE_DESTPORTID). For backward
|
|
* compatibility,the value is equal to IX_ETH_DB_UNKNOWN_PORT (0xff).
|
|
*
|
|
* @return void
|
|
*
|
|
* @note
|
|
* Buffers may not be filled up to the length supplied in
|
|
* @a ixEthAccPortRxFreeReplenish(). The firmware fills
|
|
* them to the previous 64 bytes boundary. The user has to be aware
|
|
* that the length of the received mbufs may be smaller than the length
|
|
* of the supplied mbufs.
|
|
* The mbuf header contains the following modified field
|
|
* @li @a IX_OSAL_MBUF_PKT_LEN is set in the header of the first mbuf and indicates
|
|
* the total frame size
|
|
* @li @a IX_OSAL_MBUF_MLEN is set each mbuf header and indicates the payload length
|
|
* @li @a IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR contains a pointer to the next
|
|
* mbuf, or NULL at the end of a chain.
|
|
* @li @a IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR is modified. Its value is reset to NULL
|
|
* @li @a IX_OSAL_MBUF_FLAGS contains the bit 4 set for a broadcast packet and the bit 5
|
|
* set for a multicast packet. Other bits are unmodified.
|
|
*
|
|
* <hr>
|
|
*/
|
|
typedef void (*IxEthAccPortRxCallback) (UINT32 callbackTag, IX_OSAL_MBUF *buffer, UINT32 reserved);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @brief Function prototype for Ethernet Frame Rx callback. Registered via @a ixEthAccPortMultiBufferRxCallbackRegister
|
|
*
|
|
* It is the responsibility of the user function to free any MBUF's which it receives.
|
|
*
|
|
* @li Reentrant - yes , The user provided function should be reentrant.
|
|
* @li ISR Callable - yes , The user provided function must be callable from an ISR.
|
|
* @par
|
|
*
|
|
* This function dispatches many frames to the user level
|
|
* via the provided function. The invocation shall be made for multiple frames
|
|
* dequeued from the Ethernet QM queue. The user is required to free any MBUF's
|
|
* supplied via this callback. In addition the registered callback must free up MBUF's
|
|
* from the receive free queue when the port is disabled
|
|
*
|
|
* If called several times the latest callback shall be registered for a particular port.
|
|
*
|
|
* <b>Calling Context </b>:
|
|
* @par
|
|
* This callback is called in the context of the queue manager dispatch loop @a ixQmgrDispatcherLoopRun
|
|
* within the @ref IxQMgrAPI component. The calling context may be from interrupt or high priority thread.
|
|
* The decision is system specific.
|
|
*
|
|
*
|
|
* @param callbackTag - This tag is that provided when the callback was registered for a particular MAC
|
|
* via @a ixEthAccPortMultiBufferRxCallbackRegister. It allows the same callback to be used for multiple MACs.
|
|
* @param mbuf - Pointer to an array of Rx mbuf headers. Mbufs
|
|
* may be chained if
|
|
* the frame length is greater than the supplied mbuf length.
|
|
* The end of the array contains a zeroed entry (NULL pointer).
|
|
*
|
|
* @return void
|
|
*
|
|
* @note The mbufs passed to this callback have the same structure than the
|
|
* buffers passed to @a IxEthAccPortRxCallback interfac.
|
|
*
|
|
* @note The usage of this callback is exclusive with the usage of
|
|
* @a ixEthAccPortRxCallbackRegister and @a IxEthAccPortRxCallback
|
|
*
|
|
* @sa ixEthAccPortMultiBufferRxCallbackRegister
|
|
* @sa IxEthAccPortMultiBufferRxCallback
|
|
* @sa ixEthAccPortRxCallbackRegister
|
|
* @sa IxEthAccPortRxCallback
|
|
* <hr>
|
|
*/
|
|
|
|
typedef void (*IxEthAccPortMultiBufferRxCallback) (UINT32 callbackTag, IX_OSAL_MBUF **buffer);
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortRxCallbackRegister( IxEthAccPortId portId, IxEthAccPortRxCallback rxCallbackFn, UINT32 callbackTag)
|
|
*
|
|
* @brief Register a callback function to allow
|
|
* the reception of frames.
|
|
*
|
|
* The registered callback function is called once a frame is received by this service.
|
|
*
|
|
* If called several times the latest callback shall be registered for a particular port.
|
|
*
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Register callback for a particular MAC device.
|
|
* @param rxCallbackFn @ref IxEthAccPortRxCallback [in] - Function to be called when Ethernet frames are availble.
|
|
* @param callbackTag UINT32 [in] - This tag shall be provided to the callback function.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
* @li @a IX_ETH_ACC_INVALID_ARG : An argument other than portId is invalid.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortRxCallbackRegister(IxEthAccPortId portId,
|
|
IxEthAccPortRxCallback rxCallbackFn,
|
|
UINT32 callbackTag);
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortMultiBufferRxCallbackRegister( IxEthAccPortId portId, IxEthAccPortMultiBufferRxCallback rxCallbackFn, UINT32 callbackTag)
|
|
*
|
|
* @brief Register a callback function to allow
|
|
* the reception of frames.
|
|
*
|
|
* The registered callback function is called once a frame is
|
|
* received by this service. If many frames are already received,
|
|
* the function is called once.
|
|
*
|
|
* If called several times the latest callback shall be registered for a particular port.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
*
|
|
* @param portId - Register callback for a particular MAC device.
|
|
* @param rxCallbackFn - @a IxEthAccMultiBufferRxCallbackFn - Function to be called when Ethernet frames are availble.
|
|
* @param callbackTag - This tag shall be provided to the callback function.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
* @li @a IX_ETH_ACC_INVALID_ARG : An argument other than portId is invalid.
|
|
*
|
|
* @sa ixEthAccPortMultiBufferRxCallbackRegister
|
|
* @sa IxEthAccPortMultiBufferRxCallback
|
|
* @sa ixEthAccPortRxCallbackRegister
|
|
* @sa IxEthAccPortRxCallback
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortMultiBufferRxCallbackRegister(IxEthAccPortId portId,
|
|
IxEthAccPortMultiBufferRxCallback rxCallbackFn,
|
|
UINT32 callbackTag);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortRxFreeReplenish( IxEthAccPortId portId, IX_OSAL_MBUF *buffer)
|
|
*
|
|
* @brief This function provides buffers for the Ethernet receive path.
|
|
*
|
|
* This component does not have a buffer management mechanisms built in. All Rx buffers must be supplied to it
|
|
* via this interface.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Provide buffers only to specific Rx MAC.
|
|
* @param buffer @ref IX_OSAL_MBUF [in] - Provide an MBUF to the Ethernet receive mechanism.
|
|
* Buffers size smaller than IX_ETHACC_RX_MBUF_MIN_SIZE may result in poor
|
|
* performances and excessive buffer chaining. Buffers
|
|
* larger than this size may be suitable for jumbo frames.
|
|
* Chained packets are not supported and the field IX_OSAL_MBUF_NEXT_PKT_IN_CHAIN_PTR must be NULL.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : Buffer has was not able to queue the
|
|
* buffer in the receive service.
|
|
* @li @a IX_ETH_ACC_FAIL : Buffer size is less than IX_ETHACC_RX_MBUF_MIN_SIZE
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* @note
|
|
* If the buffer replenish operation fails it is the responsibility
|
|
* of the user to free the buffer.
|
|
*
|
|
* @note
|
|
* Sufficient buffers must be supplied to the component to maintain
|
|
* receive throughput and avoid rx buffer underflow conditions.
|
|
* To meet this goal, It is expected that the user preload the
|
|
* component with a sufficent number of buffers prior to enabling the
|
|
* NPE Ethernet receive path. The recommended minimum number of
|
|
* buffers is 8.
|
|
*
|
|
* @note
|
|
* For maximum performances, the mbuf size should be greater
|
|
* than the maximum frame size (Ethernet header, payload and FCS) + 64.
|
|
* Supplying smaller mbufs to the service results in mbuf
|
|
* chaining and degraded performances. The recommended size
|
|
* is @a IX_ETHACC_RX_MBUF_MIN_SIZE, which is
|
|
* enough to take care of 802.3 frames and "baby jumbo" frames without
|
|
* chaining, and "jumbo" frame within chaining.
|
|
*
|
|
* @note
|
|
* Buffers may not be filled up to their length. The firware fills
|
|
* them up to the previous 64 bytes boundary. The user has to be aware
|
|
* that the length of the received mbufs may be smaller than the length
|
|
* of the supplied mbufs.
|
|
*
|
|
* @warning This function checks the parameters if the NDEBUG
|
|
* flag is not defined. Turning on the argument checking (disabled by
|
|
* default) results in a lower EthAcc performance as this function
|
|
* is part of the data path.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortRxFreeReplenish( IxEthAccPortId portId, IX_OSAL_MBUF *buffer);
|
|
|
|
|
|
|
|
/***************************************************************
|
|
|
|
#### #### # # ##### ##### #### #
|
|
# # # # ## # # # # # # #
|
|
# # # # # # # # # # # #
|
|
# # # # # # # ##### # # #
|
|
# # # # # ## # # # # # #
|
|
#### #### # # # # # #### ######
|
|
|
|
|
|
##### # ## # # ######
|
|
# # # # # ## # #
|
|
# # # # # # # # #####
|
|
##### # ###### # # # #
|
|
# # # # # ## #
|
|
# ###### # # # # ######
|
|
|
|
***************************************************************/
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortEnable(IxEthAccPortId portId)
|
|
*
|
|
* @brief This enables an Ethernet port for both Tx and Rx.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre The port must first be initialized via @a ixEthAccPortInit and the MAC address
|
|
* must be set using @a ixEthAccUnicastMacAddressSet before enabling it
|
|
* The rx and Tx Done callbacks registration via @a
|
|
* ixEthAccPortTxDoneCallbackRegister amd @a ixEthAccPortRxCallbackRegister
|
|
* has to be done before enabling the traffic.
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Port id to act upon.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is not initialized
|
|
* @li @a IX_ETH_ACC_MAC_UNINITIALIZED : port MAC address is not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortDisable(IxEthAccPortId portId)
|
|
*
|
|
* @brief This disables an Ethernet port for both Tx and Rx.
|
|
*
|
|
* Free MBufs are returned to the user via the registered callback when the port is disabled
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre The port must be enabled with @a ixEthAccPortEnable, otherwise this
|
|
* function has no effect
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Port id to act upon.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is not initialized
|
|
* @li @a IX_ETH_ACC_MAC_UNINITIALIZED : port MAC address is not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortDisable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortEnabledQuery(IxEthAccPortId portId, BOOL *enabled)
|
|
*
|
|
* @brief Get the enabled state of a port.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
* @pre The port must first be initialized via @a ixEthAccPortInit
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Port id to act upon.
|
|
* @param enabled BOOL [out] - location to store the state of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortEnabledQuery(IxEthAccPortId portId, BOOL *enabled);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortPromiscuousModeClear(IxEthAccPortId portId)
|
|
*
|
|
* @brief Put the Ethernet MAC device in non-promiscuous mode.
|
|
*
|
|
* In non-promiscuous mode the MAC filters all frames other than
|
|
* destination MAC address which matches the following criteria:
|
|
* @li Unicast address provisioned via @a ixEthAccUnicastMacAddressSet
|
|
* @li All broadcast frames.
|
|
* @li Multicast addresses provisioned via @a ixEthAccMulticastAddressJoin
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @sa ixEthAccPortPromiscuousModeSet
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortPromiscuousModeClear(IxEthAccPortId portId);
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortPromiscuousModeSet(IxEthAccPortId portId)
|
|
*
|
|
* @brief Put the MAC device in promiscuous mode.
|
|
*
|
|
* If the device is in promiscuous mode then all all received frames shall be forwared
|
|
* to the NPE for processing.
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @sa ixEthAccPortPromiscuousModeClear
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortPromiscuousModeSet(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortUnicastMacAddressSet( IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr)
|
|
*
|
|
* @brief Configure unicast MAC address for a particular port
|
|
*
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
* @param *macAddr @ref IxEthAccMacAddr [in] - Ethernet Mac address.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortUnicastMacAddressSet(IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortUnicastMacAddressGet( IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr)
|
|
*
|
|
* @brief Get unicast MAC address for a particular MAC port
|
|
*
|
|
* @pre
|
|
* The MAC address must first be set via @a ixEthAccMacPromiscuousModeSet
|
|
* If the MAC address has not been set, the function returns a
|
|
* IX_ETH_ACC_MAC_UNINITIALIZED status
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
* @param *macAddr @ref IxEthAccMacAddr [out] - Ethernet MAC address.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_MAC_UNINITIALIZED : port MAC address is not initialized.
|
|
* @li @a IX_ETH_ACC_FAIL : macAddr is invalid.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortUnicastMacAddressGet(IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr);
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortMulticastAddressJoin( IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr)
|
|
*
|
|
* @brief Add a multicast address to the MAC address table.
|
|
*
|
|
* @note
|
|
* Due to the operation of the Ethernet MAC multicast filtering mechanism, frames which do not
|
|
* have a multicast destination address which were provisioned via this API may be forwarded
|
|
* to the NPE's. This is a result of the hardware comparison algorithm used in the destination mac address logic
|
|
* within the Ethernet MAC.
|
|
*
|
|
* See Also: IXP425 hardware development manual.
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
* @param *macAddr @ref IxEthAccMacAddr [in] - Ethernet Mac address.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : Error writing to the MAC registers
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortMulticastAddressJoin(IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortMulticastAddressJoinAll( IxEthAccPortId portId)
|
|
*
|
|
* @brief Filter all frames with multicast dest.
|
|
*
|
|
* This function clears the MAC address table, and then sets
|
|
* the MAC to forward ALL multicast frames to the NPE.
|
|
* Specifically, it forwards all frames whose destination address
|
|
* has the LSB of the highest byte set (01:00:00:00:00:00). This
|
|
* bit is commonly referred to as the "multicast bit".
|
|
* Broadcast frames will still be forwarded.
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortMulticastAddressJoinAll(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortMulticastAddressLeave( IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr)
|
|
*
|
|
* @brief Remove a multicast address from the MAC address table.
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
* @param *macAddr @ref IxEthAccMacAddr [in] - Ethernet Mac address.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_NO_SUCH_ADDR : Failed if MAC address was not in the table.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortMulticastAddressLeave(IxEthAccPortId portId,
|
|
IxEthAccMacAddr *macAddr);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortMulticastAddressLeaveAll( IxEthAccPortId portId)
|
|
*
|
|
* @brief This function unconfigures the multicast filtering settings
|
|
*
|
|
* This function first clears the MAC address table, and then sets
|
|
* the MAC as configured by the promiscuous mode current settings.
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortMulticastAddressLeaveAll(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortUnicastAddressShow(IxEthAccPortId portId)
|
|
*
|
|
* @brief Displays unicast MAC address
|
|
*
|
|
* Displays unicast address which is configured using
|
|
* @a ixEthAccUnicastMacAddressSet. This function also displays the MAC filter used
|
|
* to filter multicast frames.
|
|
*
|
|
* Other functions modify the MAC filtering
|
|
*
|
|
* @li @a ixEthAccPortMulticastAddressJoinAll() - all multicast
|
|
* frames are forwarded to the application
|
|
* @li @a ixEthAccPortMulticastAddressLeaveAll() - rollback the
|
|
* effects of @a ixEthAccPortMulticastAddressJoinAll()
|
|
* @li @a ixEthAccPortMulticastAddressLeave() - unprovision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortMulticastAddressJoin() - provision a new
|
|
* filtering address
|
|
* @li @a ixEthAccPortPromiscuousModeSet() - all frames are
|
|
* forwarded to the application regardless of the multicast
|
|
* address provisioned
|
|
* @li @a ixEthAccPortPromiscuousModeClear() - frames are forwarded
|
|
* to the application following the multicast address provisioned
|
|
*
|
|
* In all cases, unicast and broadcast addresses are forwarded to
|
|
* the application.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
*
|
|
* @return void
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccPortUnicastAddressShow(IxEthAccPortId portId);
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortMulticastAddressShow( IxEthAccPortId portId)
|
|
*
|
|
* @brief Displays multicast MAC address
|
|
*
|
|
* Displays multicast address which have been configured using @a ixEthAccMulticastAddressJoin
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in] - Ethernet port id.
|
|
*
|
|
* @return void
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC void ixEthAccPortMulticastAddressShow( IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortDuplexModeSet( IxEthAccPortId portId, IxEthAccDuplexMode mode )
|
|
*
|
|
* @brief Set the duplex mode for the MAC.
|
|
*
|
|
* Configure the IXP400 MAC to either full or half duplex.
|
|
*
|
|
* @note
|
|
* The configuration should match that provisioned on the PHY.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
* @param mode @ref IxEthAccDuplexMode [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortDuplexModeSet(IxEthAccPortId portId,IxEthAccDuplexMode mode);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortDuplexModeGet( IxEthAccPortId portId, IxEthAccDuplexMode *mode )
|
|
*
|
|
* @brief Get the duplex mode for the MAC.
|
|
*
|
|
* return the duplex configuration of the IXP400 MAC.
|
|
*
|
|
* @note
|
|
* The configuration should match that provisioned on the PHY.
|
|
* See @a ixEthAccDuplexModeSet
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
* @param *mode @ref IxEthAccDuplexMode [out]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortDuplexModeGet(IxEthAccPortId portId,IxEthAccDuplexMode *mode );
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortTxFrameAppendPaddingEnable( IxEthAccPortId portId)
|
|
*
|
|
* @brief Enable padding bytes to be appended to runt frames submitted to
|
|
* this port
|
|
*
|
|
* Enable up to 60 null-bytes padding bytes to be appended to runt frames
|
|
* submitted to this port. This is the default behavior of the access
|
|
* component.
|
|
*
|
|
* @warning Do not change this behaviour while the port is enabled.
|
|
*
|
|
* @note When Tx padding is enabled, Tx FCS generation is turned on
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @sa ixEthAccPortTxFrameAppendFCSDusable
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxFrameAppendPaddingEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortTxFrameAppendPaddingDisable( IxEthAccPortId portId)
|
|
*
|
|
* @brief Disable padding bytes to be appended to runt frames submitted to
|
|
* this port
|
|
*
|
|
* Disable padding bytes to be appended to runt frames
|
|
* submitted to this port. This is not the default behavior of the access
|
|
* component.
|
|
*
|
|
* @warning Do not change this behaviour while the port is enabled.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxFrameAppendPaddingDisable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortTxFrameAppendFCSEnable( IxEthAccPortId portId)
|
|
*
|
|
* @brief Enable the appending of Ethernet FCS to all frames submitted to this port
|
|
*
|
|
* When enabled, the FCS is added to the submitted frames. This is the default
|
|
* behavior of the access component.
|
|
* Do not change this behaviour while the port is enabled.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxFrameAppendFCSEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortTxFrameAppendFCSDisable( IxEthAccPortId portId)
|
|
*
|
|
* @brief Disable the appending of Ethernet FCS to all frames submitted to this port.
|
|
*
|
|
* When disabled, the Ethernet FCS is not added to the submitted frames.
|
|
* This is not the default
|
|
* behavior of the access component.
|
|
*
|
|
* @note Since the FCS is not appended to the frame it is expected that the frame submitted to the
|
|
* component includes a valid FCS at the end of the data, although this will not be validated.
|
|
*
|
|
* The component shall forward the frame to the Ethernet MAC WITHOUT modification.
|
|
*
|
|
* Do not change this behaviour while the port is enabled.
|
|
*
|
|
* @note Tx FCS append is not disabled while Tx padding is enabled.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @sa ixEthAccPortTxFrameAppendPaddingEnable
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxFrameAppendFCSDisable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortRxFrameAppendFCSEnable( IxEthAccPortId portId)
|
|
*
|
|
* @brief Forward frames with FCS included in the receive buffer.
|
|
*
|
|
* The FCS is not striped from the receive buffer.
|
|
* The received frame length includes the FCS size (4 bytes). ie.
|
|
* A minimum sized ethernet frame shall have a length of 64bytes.
|
|
*
|
|
* Frame FCS validity checks are still carried out on all received frames.
|
|
*
|
|
* This is not the default
|
|
* behavior of the access component.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortRxFrameAppendFCSEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccPortRxFrameAppendFCSDisable( IxEthAccPortId portId)
|
|
*
|
|
* @brief Do not forward the FCS portion of the received Ethernet frame to the user.
|
|
* The FCS is striped from the receive buffer.
|
|
* The received frame length does not include the FCS size (4 bytes).
|
|
* Frame FCS validity checks are still carried out on all received frames.
|
|
*
|
|
* This is the default behavior of the component.
|
|
* Do not change this behaviour while the port is enabled.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortRxFrameAppendFCSDisable(IxEthAccPortId portId);
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @enum IxEthAccSchedulerDiscipline
|
|
*
|
|
* @brief Definition for the port scheduling discipline
|
|
*
|
|
* Select the port scheduling discipline on receive and transmit path
|
|
* @li FIFO : No Priority : In this configuration all frames are processed
|
|
* in the access component in the strict order in which
|
|
* the component received them.
|
|
* @li FIFO : Priority : This shall be a very simple priority mechanism.
|
|
* Higher prior-ity frames shall be forwarded
|
|
* before lower priority frames. There shall be no
|
|
* fairness mechanisms applied across different
|
|
* priorities. Higher priority frames could starve
|
|
* lower priority frames indefinitely.
|
|
*/
|
|
typedef enum
|
|
{
|
|
FIFO_NO_PRIORITY, /**<frames submitted with no priority*/
|
|
FIFO_PRIORITY /**<higher prority frames submitted before lower priority*/
|
|
}IxEthAccSchedulerDiscipline;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def IxEthAccTxSchedulerDiscipline
|
|
*
|
|
* @brief Deprecated definition for the port transmit scheduling discipline
|
|
*/
|
|
#define IxEthAccTxSchedulerDiscipline IxEthAccSchedulerDiscipline
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccTxSchedulingDisciplineSet( IxEthAccPortId portId, IxEthAccSchedulerDiscipline sched)
|
|
*
|
|
* @brief Set the port scheduling to one of @a IxEthAccSchedulerDiscipline
|
|
*
|
|
* The default behavior of the component is @a FIFO_NO_PRIORITY.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
* @param sched @ref IxEthAccSchedulerDiscipline [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : Set appropriate discipline.
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid/unsupported discipline.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccTxSchedulingDisciplineSet(IxEthAccPortId portId,
|
|
IxEthAccSchedulerDiscipline sched);
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccRxSchedulingDisciplineSet(IxEthAccSchedulerDiscipline sched)
|
|
*
|
|
* @brief Set the Rx scheduling to one of @a IxEthAccSchedulerDiscipline
|
|
*
|
|
* The default behavior of the component is @a FIFO_NO_PRIORITY.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @param sched : @a IxEthAccSchedulerDiscipline
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : Set appropriate discipline.
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid/unsupported discipline.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccRxSchedulingDisciplineSet(IxEthAccSchedulerDiscipline sched);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccNpeLoopbackEnable(IxEthAccPortId portId)
|
|
*
|
|
* @brief Enable NPE loopback
|
|
*
|
|
* When this loopback mode is enabled all the transmitted frames are
|
|
* received on the same port, without payload.
|
|
*
|
|
* This function is recommended for power-up diagnostic checks and
|
|
* should never be used under normal Ethernet traffic operations.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : NPE loopback mode enabled
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortNpeLoopbackEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccPortNpeLoopbackDisable(IxEthAccPortId portId)
|
|
*
|
|
* @brief Disable NPE loopback
|
|
*
|
|
* This function is used to disable the NPE loopback if previously
|
|
* enabled using ixEthAccNpeLoopbackEnable.
|
|
*
|
|
* This function is recommended for power-up diagnostic checks and
|
|
* should never be used under normal Ethernet traffic operations.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : NPE loopback successfully disabled
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortNpeLoopbackDisable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccPortTxEnable(IxEthAccPortId portId)
|
|
*
|
|
* @brief Enable Tx on the port
|
|
*
|
|
* This function is the complement of ixEthAccPortTxDisable and should
|
|
* be used only after Tx was disabled. A MAC core reset is required before
|
|
* this function is called (see @a ixEthAccPortMacReset).
|
|
*
|
|
* This function is the recommended usage scenario for emergency security
|
|
* shutdown and hardware failure recovery and should never be used for throttling
|
|
* traffic.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : Tx successfully enabled
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccPortTxDisable(IxEthAccPortId portId)
|
|
*
|
|
* @brief Disable Tx on the port
|
|
*
|
|
* This function can be used to disable Tx in the MAC core.
|
|
* Tx can be re-enabled, although this is not guaranteed, by performing
|
|
* a MAC core reset (@a ixEthAccPortMacReset) and calling ixEthAccPortTxEnable.
|
|
* Note that using this function is not recommended, except for shutting
|
|
* down Tx for emergency reasons. For proper port shutdown and re-enabling
|
|
* see ixEthAccPortEnable and ixEthAccPortDisable.
|
|
*
|
|
* This function is the recommended usage scenario for emergency security
|
|
* shutdown and hardware failure recovery and should never be used for throttling
|
|
* traffic.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @pre
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : Tx successfully disabled
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortTxDisable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccPortRxEnable(IxEthAccPortId portId)
|
|
*
|
|
* @brief Enable Rx on the port
|
|
*
|
|
* This function is the complement of ixEthAccPortRxDisable and should
|
|
* be used only after Rx was disabled.
|
|
*
|
|
* This function is the recommended usage scenario for emergency security
|
|
* shutdown and hardware failure recovery and should never be used for throttling
|
|
* traffic.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @pre
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : Rx successfully enabled
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortRxEnable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccPortRxDisable(IxEthAccPortId portId)
|
|
*
|
|
* @brief Disable Rx on the port
|
|
*
|
|
* This function can be used to disable Rx in the MAC core.
|
|
* Rx can be re-enabled, although this is not guaranteed, by performing
|
|
* a MAC core reset (@a ixEthAccPortMacReset) and calling ixEthAccPortRxEnable.
|
|
* Note that using this function is not recommended, except for shutting
|
|
* down Rx for emergency reasons. For proper port shutdown and re-enabling
|
|
* see ixEthAccPortEnable and ixEthAccPortDisable.
|
|
*
|
|
* This function is the recommended usage scenario for emergency security
|
|
* shutdown and hardware failure recovery and should never be used for throttling
|
|
* traffic.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : Rx successfully disabled
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortRxDisable(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn IxEthAccStatus ixEthAccPortMacReset(IxEthAccPortId portId)
|
|
*
|
|
* @brief Reset MAC core on the port
|
|
*
|
|
* This function will perform a MAC core reset (NPE Ethernet coprocessor).
|
|
* This function is inherently unsafe and the NPE recovery is not guaranteed
|
|
* after this function is called. The proper manner of performing port disable
|
|
* and enable (which will reset the MAC as well) is ixEthAccPortEnable/ixEthAccPortDisable.
|
|
*
|
|
* This function is the recommended usage scenario for hardware failure recovery
|
|
* and should never be used for throttling traffic.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @note Calling ixEthAccPortDisable followed by ixEthAccPortEnable is
|
|
* guaranteed to restore correct Ethernet Tx/Rx operation.
|
|
*
|
|
* @param portId : ID of the port
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS : MAC core reset
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid port or Ethernet service not initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccPortMacReset(IxEthAccPortId portId);
|
|
|
|
/*********************************************************************************
|
|
#### ##### ## ##### # #### ##### # #### ####
|
|
# # # # # # # # # # # #
|
|
#### # # # # # #### # # # ####
|
|
# # ###### # # # # # # #
|
|
# # # # # # # # # # # # # # #
|
|
#### # # # # # #### # # #### ####
|
|
**********************************************************************************/
|
|
|
|
|
|
/**
|
|
*
|
|
* @brief This struct defines the statistics returned by this component.
|
|
*
|
|
* The component returns MIB2 EthObj variables which are obtained from the
|
|
* hardware or maintained by this component.
|
|
*
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
UINT32 dot3StatsAlignmentErrors; /**< link error count (rx) */
|
|
UINT32 dot3StatsFCSErrors; /**< link error count (rx) */
|
|
UINT32 dot3StatsInternalMacReceiveErrors; /**< link error count (rx) */
|
|
UINT32 RxOverrunDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 RxLearnedEntryDiscards; /**< NPE: discarded frames count(rx) */
|
|
UINT32 RxLargeFramesDiscards; /**< NPE: discarded frames count(rx) */
|
|
UINT32 RxSTPBlockedDiscards; /**< NPE: discarded frames count(rx) */
|
|
UINT32 RxVLANTypeFilterDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 RxVLANIdFilterDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 RxInvalidSourceDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 RxBlackListDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 RxWhiteListDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 RxUnderflowEntryDiscards; /**< NPE: discarded frames count (rx) */
|
|
UINT32 dot3StatsSingleCollisionFrames; /**< link error count (tx) */
|
|
UINT32 dot3StatsMultipleCollisionFrames; /**< link error count (tx) */
|
|
UINT32 dot3StatsDeferredTransmissions; /**< link error count (tx) */
|
|
UINT32 dot3StatsLateCollisions; /**< link error count (tx) */
|
|
UINT32 dot3StatsExcessiveCollsions; /**< link error count (tx) */
|
|
UINT32 dot3StatsInternalMacTransmitErrors; /**< link error count (tx) */
|
|
UINT32 dot3StatsCarrierSenseErrors; /**< link error count (tx) */
|
|
UINT32 TxLargeFrameDiscards; /**< NPE: discarded frames count (tx) */
|
|
UINT32 TxVLANIdFilterDiscards; /**< NPE: discarded frames count (tx) */
|
|
|
|
}IxEthEthObjStats;
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMibIIStatsGet(IxEthAccPortId portId ,IxEthEthObjStats *retStats )
|
|
*
|
|
* @brief Returns the statistics maintained for a port.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
* @param retStats @ref IxEthEthObjStats [out]
|
|
* @note Please note the user is responsible for cache coheriency of the retStat
|
|
* buffer. The data is actually populated via the NPE's. As such cache safe
|
|
* memory should be used in the retStats argument.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid arguments.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccMibIIStatsGet(IxEthAccPortId portId, IxEthEthObjStats *retStats );
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMibIIStatsGetClear(IxEthAccPortId portId, IxEthEthObjStats *retStats)
|
|
*
|
|
* @brief Returns and clears the statistics maintained for a port.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - yes
|
|
*
|
|
* @pre
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
* @param retStats @ref IxEthEthObjStats [out]
|
|
* @note Please note the user is responsible for cache coheriency of the retStats
|
|
* buffer. The data is actually populated via the NPE's. As such cache safe
|
|
* memory should be used in the retStats argument.
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : invalid arguments.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccMibIIStatsGetClear(IxEthAccPortId portId, IxEthEthObjStats *retStats);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMibIIStatsClear(IxEthAccPortId portId)
|
|
*
|
|
* @brief Clears the statistics maintained for a port.
|
|
*
|
|
* @li Reentrant - yes
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : Invalid arguments.
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
* @li @a IX_ETH_ACC_PORT_UNINITIALIZED : portId is un-initialized
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccMibIIStatsClear(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMacInit(IxEthAccPortId portId)
|
|
*
|
|
* @brief Initializes the ethernet MAC settings
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_INVALID_PORT : portId is invalid.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccMacInit(IxEthAccPortId portId);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccStatsShow(IxEthAccPortId portId)
|
|
*
|
|
*
|
|
* @brief Displays a ports statistics on the standard io console using printf.
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @param portId @ref IxEthAccPortId [in]
|
|
*
|
|
* @return void
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC void ixEthAccStatsShow(IxEthAccPortId portId);
|
|
|
|
/*************************************************************************
|
|
|
|
# # # # # # ##### # ####
|
|
## ## # # ## ## # # # # #
|
|
# ## # # # # ## # # # # # #
|
|
# # # # # # # # # # #
|
|
# # # # # # # # # # #
|
|
# # # # # # ##### # ####
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMiiReadRtn (UINT8 phyAddr,
|
|
UINT8 phyReg,
|
|
UINT16 *value)
|
|
*
|
|
*
|
|
* @brief Reads a 16 bit value from a PHY
|
|
*
|
|
* Reads a 16-bit word from a register of a MII-compliant PHY. Reading
|
|
* is performed through the MII management interface. This function returns
|
|
* when the read operation has successfully completed, or when a timeout has elapsed.
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre The MAC on Ethernet Port 2 (NPE C) must be initialised, and generating the MDIO clock.
|
|
*
|
|
* @param phyAddr UINT8 [in] - the address of the Ethernet PHY (0-31)
|
|
* @param phyReg UINT8 [in] - the number of the MII register to read (0-31)
|
|
* @param value UINT16 [in] - the value read from the register
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : failed to read the register.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccMiiReadRtn (UINT8 phyAddr, UINT8 phyReg, UINT16 *value);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMiiWriteRtn (UINT8 phyAddr,
|
|
UINT8 phyReg,
|
|
UINT16 value)
|
|
*
|
|
*
|
|
* @brief Writes a 16 bit value to a PHY
|
|
*
|
|
* Writes a 16-bit word from a register of a MII-compliant PHY. Writing
|
|
* is performed through the MII management interface. This function returns
|
|
* when the write operation has successfully completed, or when a timeout has elapsed.
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre The MAC on Ethernet Port 2 (NPE C) must be initialised, and generating the MDIO clock.
|
|
*
|
|
* @param phyAddr UINT8 [in] - the address of the Ethernet PHY (0-31)
|
|
* @param phyReg UINT8 [in] - the number of the MII register to write (0-31)
|
|
* @param value UINT16 [out] - the value to write to the register
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : failed to write register.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccMiiWriteRtn (UINT8 phyAddr, UINT8 phyReg, UINT16 value);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMiiAccessTimeoutSet(UINT32 timeout)
|
|
*
|
|
* @brief Overrides the default timeout value and retry count when reading or
|
|
* writing MII registers using ixEthAccMiiWriteRtn or ixEthAccMiiReadRtn
|
|
*
|
|
* The default behavior of the component is to use a IX_ETH_ACC_MII_10TH_SEC_IN_MILLIS ms
|
|
* timeout (declared as 100 in IxEthAccMii_p.h) and a retry count of IX_ETH_ACC_MII_TIMEOUT_10TH_SECS
|
|
* (declared as 5 in IxEthAccMii_p.h).
|
|
*
|
|
* The MII read and write functions will attempt to read the status of the register up
|
|
* to the retry count times, delaying between each attempt with the timeout value.
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre
|
|
*
|
|
* @param timeout UINT32 [in] - new timeout value, in milliseconds
|
|
* @param timeout UINT32 [in] - new retry count (a minimum value of 1 must be used)
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : invalid parameter(s)
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus
|
|
ixEthAccMiiAccessTimeoutSet(UINT32 timeout, UINT32 retryCount);
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @fn ixEthAccMiiStatsShow (UINT32 phyAddr)
|
|
*
|
|
*
|
|
* @brief Displays detailed information on a specified PHY
|
|
*
|
|
* Displays the current values of the first eigth MII registers for a PHY,
|
|
*
|
|
* @li Reentrant - no
|
|
* @li ISR Callable - no
|
|
*
|
|
* @pre The MAC on Ethernet Port 2 (NPE C) must be initialised, and
|
|
* generating the MDIO clock.
|
|
*
|
|
* @param phyAddr UINT32 [in] - the address of the Ethernet PHY (0-31)
|
|
*
|
|
* @return IxEthAccStatus
|
|
* @li @a IX_ETH_ACC_SUCCESS
|
|
* @li @a IX_ETH_ACC_FAIL : invalid arguments.
|
|
*
|
|
* <hr>
|
|
*/
|
|
PUBLIC IxEthAccStatus ixEthAccMiiStatsShow (UINT32 phyAddr);
|
|
|
|
|
|
|
|
/******* BOARD SPECIFIC DEPRECATED API *********/
|
|
|
|
/* The following functions are high level functions which rely
|
|
* on the properties and interface of some Ethernet PHYs. The
|
|
* implementation is hardware specific and has been moved to
|
|
* the hardware-specific component IxEthMii.
|
|
*/
|
|
|
|
#include "IxEthMii.h"
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def ixEthAccMiiPhyScan
|
|
*
|
|
* @brief : deprecated API entry point. This definition
|
|
* ensures backward compatibility
|
|
*
|
|
* See @ref ixEthMiiPhyScan
|
|
*
|
|
* @note this feature is board specific
|
|
*
|
|
*/
|
|
#define ixEthAccMiiPhyScan(phyPresent) ixEthMiiPhyScan(phyPresent,IXP425_ETH_ACC_MII_MAX_ADDR)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def ixEthAccMiiPhyConfig
|
|
*
|
|
* @brief : deprecated API entry point. This definition
|
|
* ensures backward compatibility
|
|
*
|
|
* See @ref ixEthMiiPhyConfig
|
|
*
|
|
* @note this feature is board specific
|
|
*/
|
|
#define ixEthAccMiiPhyConfig(phyAddr,speed100,fullDuplex,autonegotiate) \
|
|
ixEthMiiPhyConfig(phyAddr,speed100,fullDuplex,autonegotiate)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def ixEthAccMiiPhyReset
|
|
*
|
|
* @brief : deprecated API entry point. This definition
|
|
* ensures backward compatibility
|
|
*
|
|
* See @ref ixEthMiiPhyReset
|
|
*
|
|
* @note this feature is board specific
|
|
*/
|
|
#define ixEthAccMiiPhyReset(phyAddr) \
|
|
ixEthMiiPhyReset(phyAddr)
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def ixEthAccMiiLinkStatus
|
|
*
|
|
* @brief : deprecated API entry point. This definition
|
|
* ensures backward compatibility
|
|
*
|
|
* See @ref ixEthMiiLinkStatus
|
|
*
|
|
* @note this feature is board specific
|
|
*/
|
|
#define ixEthAccMiiLinkStatus(phyAddr,linkUp,speed100,fullDuplex,autoneg) \
|
|
ixEthMiiLinkStatus(phyAddr,linkUp,speed100,fullDuplex,autoneg)
|
|
|
|
|
|
|
|
/**
|
|
* @ingroup IxEthAcc
|
|
*
|
|
* @def ixEthAccMiiShow
|
|
*
|
|
* @brief : deprecated API entry point. This definition
|
|
* ensures backward compatibility
|
|
*
|
|
* See @ref ixEthMiiPhyShow
|
|
*
|
|
* @note this feature is board specific
|
|
*/
|
|
#define ixEthAccMiiShow(phyAddr) \
|
|
ixEthMiiPhyShow(phyAddr)
|
|
|
|
#endif /* ndef IxEthAcc_H */
|
|
/**
|
|
*@}
|
|
*/
|