embeddedsw/XilinxProcessorIPLib/drivers/axiethernet/src/xaxiethernet.h
Kedareswara rao Appana e562b6a397 ethernet: Export SGMII/1000BASE-X properties to xparameters.h file
This patch adds support for exporting SGMII/1000BASE-X
properties to xparameters.h file when the pcs/pma core is present in
the h/w design.

Signed-off-by: Kedareswara rao Appana <appanad@xilinx.com>
2014-11-25 21:38:20 +05:30

1477 lines
57 KiB
C
Executable file

/******************************************************************************
*
* Copyright (C) 2010 - 2014 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/**
*
* @file xaxiethernet.h
*
* The Xilinx AXI Ethernet MAC driver component. This driver supports hard
* Ethernet core for Virtex-6(TM) devices and soft Ethernet core for
* Spartan-6(TM) and other supported devices. The supported speed can be
* 10/100/1000 Mbps and can reach upto 2000/2500 Mbps (1000Base-X versions).
*
* For a full description of AXI Ethernet features, please see the hardware
* spec.
* This driver supports the following features:
* - Memory mapped access to host interface registers
* - Virtual memory support
* - Unicast, broadcast, and multicast receive address filtering
* - Full duplex operation
* - Automatic source address insertion or overwrite (programmable)
* - Automatic PAD & FCS insertion and stripping (programmable)
* - Flow control
* - VLAN frame support
* - Pause frame support
* - Jumbo frame support
* - Partial and full checksum offload
* - Extended multicast addresses to 2**23.
* - Extended VLAN translation, tagging and stripping supports.
*
* <h2>Driver Description</h2>
*
* The device driver enables higher layer software (e.g., an application) to
* configure a Axi Ethernet device. It is intended that this driver be used in
* cooperation with another driver (FIFO or DMA) for data communication. This
* device driver can support multiple devices even when those devices have
* significantly different configurations.
*
* <h2>Initialization & Configuration</h2>
*
* The XAxiEthernet_Config structure can be used by the driver to configure
* itself. This configuration structure is typically created by the tool-chain
* based on hardware build properties, although, other methods are allowed and
* currently used in some systems.
*
* To support multiple runtime loading and initialization strategies employed
* by various operating systems, the driver instance can be initialized using
* the XAxiEthernet_CfgInitialze() routine.
*
* <h2>Interrupts and Asynchronous Callbacks</h2>
*
* The driver has no dependencies on the interrupt controller. It provides
* no interrupt handlers. The application/OS software should set up its own
* interrupt handlers if required.
*
* <h2>Device Reset</h2>
*
* When a Axi Ethernet device is connected up to a FIFO or DMA core in hardware,
* errors may be reported on one of those cores (FIFO or DMA) such that it can
* be determined that the Axi Ethernet device needs to be reset. If a reset is
* performed, the calling code should also reconfigure and reapply the proper
* settings in the Axi Ethernet device.
*
* When a Axi Ethernet device reset is required, XAxiEthernet_Reset() should
* be utilized.
*
* <h2>Virtual Memory</h2>
*
* This driver may be used in systems with virtual memory support by passing
* the appropriate value for the <i>EffectiveAddress</i> parameter to the
* XAxiEthernet_CfgInitialize() routine.
*
* <h2>Transfering Data</h2>
*
* The Axi Ethernet core by itself is not capable of transmitting or receiving
* data in any meaningful way. Instead the Axi Ethernet device need to be
* connected to a FIFO or DMA core in hardware.
*
* This Axi Ethernet driver is modeled in a similar fashion where the
* application code or O/S adapter driver needs to make use of a separate FIFO
* or DMA driver in connection with this driver to establish meaningful
* communication over Ethernet.
*
* <h2>Checksum Offloading</h2>
*
* If configured, the device can compute a 16-bit checksum from frame data. In
* most circumstances this can lead to a substantial gain in throughput.
*
* The checksum offload settings for each frame sent or received are
* transmitted through the AXI4-Stream interface in hardware. What this means
* is that the checksum offload feature is indirectly controlled in the
* Axi Ethernet device through the driver for DMA core connected
* to the Axi Ethernet device.
*
* Refer to the documentation for DMA driver used for data
* communication on how to set the values for the relevant AXI4-Stream control
* words.
*
* Since this hardware implementation is general purpose in nature system
* software must perform pre and post frame processing to obtain the desired
* results for the types of packets being transferred. Most of the time this
* will be TCP/IP traffic.
*
* TCP/IP and UDP/IP frames contain separate checksums for the IP header and
* UDP/TCP header+data.
* For partial checksum offloading (enabled while configuring the hardware),
* the IP header checksum cannot be offloaded. Many stacks that support
* offloading will compute the IP header if required and use hardware to compute
* the UDP/TCP header+data checksum. There are other complications concerning
* the IP pseudo header that must be taken into consideration. Readers should
* consult a TCP/IP design reference for more details.
*
* For full checksum offloading (enabled while configuring the hardware), the
* IPv4 checksum calculation and validation can also be offloaded at the
* harwdare. Full checksum offload is supported only under certain conditions.
* IP checksum offload will be supported on valid IP datagrams that meet the
* following conditions.
* - If present, the VLAN header is 4 bytes long
* - Encapsulation into the Ethernet frame is either Ethernet II or Ethernet
* SNAP format
* - Only IPv4 is supported. IPv6 is not supported.
* - IP header is a valid length
* TCP/UDP checksum offloading will be supported on valid TCP/UDP segments that
* meet the following conditions.
* - Encapsulated in IPv4 (IPv6 is not supported)
* - Good IP header checksum
* - No fragmentation
* - TCP or UDP segment
* When full checksum offload is enabled, the hardware does the following:
* - Calculates the IP header checksum and inserts it in the IP header.
* - Calculates the TCP/UDP Pseudo header from IP header.
* - Calculates TCP/UDP header from, TCP/UDP psedu header, TCP/UDP header
* and TCP/UDP payload.
* - On the receive path, it again calculates all the above and validates
* for IP header checksum and TCP/UDP checksum.
*
* There are certain device options that will affect the checksum calculation
* performed by hardware for Tx:
*
* - FCS insertion disabled (XAE_FCS_INSERT_OPTION): software is required to
* calculate and insert the FCS value at the end of the frame, but the
* checksum must be known ahead of time prior to calculating the FCS.
* Therefore checksum offloading cannot be used in this situation.
*
* And for Rx:
*
* - FCS/PAD stripping disabled (XAE_FCS_STRIP_OPTION): The 4 byte FCS at the
* end of frame will be included in the hardware calculated checksum.
* software must subtract out this data.
*
* - FCS/PAD stripping disabled (XAE_FCS_STRIP_OPTION): For frames smaller
* than 64 bytes, padding will be included in the hardware calculated
* checksum.
* software must subtract out this data. It may be better to allow the
* TCP/IP stack verify checksums for this type of packet.
*
* - VLAN enabled (XAE_VLAN_OPTION): The 4 extra bytes in the Ethernet header
* affect the hardware calculated checksum. software must subtract out the
* 1st two 16-bit words starting at the 15th byte.
*
* <h3>Transmit Checksum Offloading</h3>
*
* For partial checksum offloading, for the TX path, the software can specify
* where in the frame the checksum calculation is to start, where the result
* should be inserted, and a seed value. The checksum is calculated from
* the start point through the end of frame.
*
* For full checksum offloading, for the TX path, the software just need to
* enable Full Checksum offload in the appropriate AXI4-Stream Control word on
* a per packet basis.
*
* The checksum offloading settings are sent in the transmit AXI4 Stream control
* words. The relevant control word fields are described in brief below.
* Refer to the Axi Ethernet hardware specification for more details.
*
*<h4>AXI4-Stream Control Word 0:</h4>
*<pre>
* Bits 1-0 : Transmit Checksum Enable: 01 - Partial checsum offload,
* 10 - Full checksum offload
* 00 - No checksum offloading
* 11 - Not used, reserved
* Bits 27-2 : Reserved
* Bits 31-28 : Used for AXI4-Stream Control Mode flag
*</pre>
*
*<h4>AXI4-Stream Control Word 1:</h4>
*<pre>
* Bits 31-16 (MSB): Transmit Checksum Calculation Starting Point: Offset
* in the frame where checksum calculation should begin.
* Relevant only for partial checksum offloading.
* Bits 15-0 (LSB): Transmit Checksum Insertion Point: Frame offset where
* the computed checksum value is stored, which should be
* in the TCP or UDP header.
* Relevant only for partial checksum offloading.
* </pre>
*
*<h4>AXI4-Stream Control Word 2:</h4>
*<pre>
* Bits 31-16 (MSB): Reserved
* Bits 0-15 (LSB): Transmit Checksum Calculation Initial Value: Checksum
* seed value.
* Relevant only for partial checksum offloading.
*</pre>
*
* <h3>Receive Checksum Offloading</h3>
*
* For partial checksum offload on the RX path, the 15th byte to end of frame
* is check summed. This range of bytes is the entire Ethernet payload (for
* non-VLAN frames).
*
* For full checksum offload on the RX path, both the IP and TCP checksums are
* validated if the packet meets the specified conditions.
*
* The checksum offloading information is sent in the receive AXI4-Stream
* status words. There are 4 relevant status words available. However
* only the relevant status words are described in brief below.
* Refer to the Axi Ethernet hardware specification for more details.
*
*<h4>AXI4-Stream Status Word 0:</h4>
*<pre>
* Bits 31-28 (MSB): Always 0x5 to represent receive status frame
* Bits 27-16 : Undefined
* Bits 15-0 (LSB): MCAST_ADR_U. Upper 16 bits of the multicast
* destination address of the frame.
*
*<h4>AXI4-Stream Status Word 1:</h4>
*</pre>
* Bits 31-0 : MCAST_ADR_L. The lower 32 bits of the multicast
* destination address.
*
*<h4>AXI4-Stream Status Word 2:</h4>
*</pre>
* Bits 5-3 : Specifies the receive full checksum status. This
* is relevant only for full checksum offloading.
* 000 -> Neither the IP header nor the TCP/UDP
* checksums were checked.
* 001 -> The IP header checksum was checked and was
* correct. The TCP/UDP checksum was not checked.
* 010 -> Both the IP header checksum and the TCP
* checksum were checked and were correct.
* 011 -> Both the IP header checksum and the UDP
* checksum were checked and were correct.
* 100 -> Reserved.
* 101 -> The IP header checksum was checked and was
* incorrect. The TCP/UDP checksum was not
* checked.
* 110 -> The IP header checksum was checked and is
* correct but the TCP checksum was checked
* and was incorrect.
* 111 -> The IP header checksum was checked and is
* correct but the UDP checksum was checked and
* was incorrect.
*
*<h4>AXI4-Stream Status Word 3:</h4>
* Bits 31-16 : T_L_TPID. This is the value of 13th and 14th byte
* of the frame.
* Bits 15-0 : Receive Raw Checksum: Computed checksum value
*
*<h4>AXI4-Stream Status Word 3:</h4>
* Bits 31-16 : VLAN_TAG. Value of 15th and 16th byte of the
* frame.
* Bits 15-0 : RX_BYTECNT. Received frame length.
*
*
* <h2>Extended multicast</h2>
* (XAE_EXT_MULTICAST_OPTION): Allow and perform address filtering more than 4
* multicast addresses. Hardware requires to enable promiscuous mode
* (XAE_PROMISCUOUS_OPTION) and disable legacy multicast mode
* (XAE_MULTICAST_OPTION) for this feature to work.
*
* <h2>Extended VLAN</h2>
*
* <h3>TX/RX VLAN stripping</h3>
* (XAE_EXT_[T|R]XVLAN_STRP_OPTION) handles transmit/receive one VLAN tag
* stripping in Ethernet frames. To enable this option, hardware requires to
* build with this feature and enable (XAE_FCS_INSERT_OPTION),
* (XAE_FCS_STRP_OPTION) and disable (XAE_VLAN_OPTION). Supports three modes,
* -XAE_VSTRP_NONE : no stripping
* -XAE_VSTRP_ALL : strip one tag from all frames
* -XAE_VSTRP_SELECT : strip one tag from selected frames
*
* <h3>TX/RX VLAN translation</h3>
* (XATE_EXT_[T|R]XVLAN_TRAN_OPTION) handles transmit/receive one VLAN tag
* translation in Ethernet frames. To enable this option, hardware requires to
* build with this feature and enable (XATE_FCS_INSERT_OPTION),
* (XAE_FCS_STRP_OPTION), and disable (XAE_VLAN_OPTION).
*
* <h3>TX/RX VLAN tagging</h3>
* (XAE_EXT_[T|R]XVLAN_TAG_OPTION) adds transmit/receive one VLAN tag in
* Ethernet frames. To enable this option, hardware requires to build with this
* feature and enable (XAE_FCS_INSERT_OPTION), (XAE_FCS_STRP_OPTION),
* (XAE_JUMBO_OPTION) and disable (XAE_VLAN_OPTION). Support four modes,
* -XAE_VTAG_NONE : no tagging
* -XAE_VTAG_ALL : tag all frames
* -XAE_VTAG_EXISTED : tag already tagged frames
* -XAE_VTAG_SELECT : tag selected already tagged frames
*
* <h2>PHY Communication</h2>
*
* Prior to PHY access, the MDIO clock must be setup. This driver will set a
* safe default that should work with AXI4-Lite bus speeds of up to 150 MHz
* and keep the MDIO clock below 2.5 MHz. If the user wishes faster access to
* the PHY then the clock divisor can be set to a different value (see
* XAxiEthernet_PhySetMdioDivisor()).
*
* MII register access is performed through the functions XAxiEthernet_PhyRead()
* and XAxiEthernet_PhyWrite().
*
* <h2>Link Sync</h2>
*
* When the device is used in a multi speed environment, the link speed must be
* explicitly set using XAxiEthernet_SetOperatingSpeed() and must match the
* speed PHY has negotiated. If the speeds are mismatched, then the MAC will not
* pass traffic.
*
* The application/OS software may use the AutoNegotiation interrupt to be
* notified when the PHY has completed auto-negotiation.
*
* <h2>Asserts</h2>
*
* Asserts are used within all Xilinx drivers to enforce constraints on argument
* values. Asserts can be turned off on a system-wide basis by defining, at
* compile time, the NDEBUG identifier. By default, asserts are turned on and it
* is recommended that users leave asserts on during development. For deployment
* use -DNDEBUG compiler switch to remove assert code.
*
* <h2>Driver Errata</h2>
*
* - A dropped receive frame indication may be reported by the driver after
* calling XAxiEthernet_Stop() followed by XAxiEthernet_Start(). This can
* occur if a frame is arriving when stop is called.
* - On Rx with checksum offloading enabled and FCS/PAD stripping disabled,
* FCS and PAD data will be included in the checksum result.
* - On Tx with checksum offloading enabled and auto FCS insertion disabled,
* the user calculated FCS will be included in the checksum result.
*
* @note
*
* Xilinx drivers are typically composed of two components, one is the driver
* and the other is the adapter. The driver is independent of OS and processor
* and is intended to be highly portable. The adapter is OS-specific and
* facilitates communication between the driver and an OS.
* <br><br>
* This driver is intended to be RTOS and processor independent. Any needs for
* dynamic memory management, threads or thread mutual exclusion, or cache
* control must be satisfied by the layer above this driver.
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ---- -------- ---------------------------------------------------------
* 1.00a asa 6/30/10 First release based on the ll temac driver
* 1.01a asa 12/10/10 Added macros XAxiEthernet_IsRxFullCsum and
* XAxiEthernet_IsTxFullCsum for supporting full checksum
* offload. The full checksum offload is only supported in
* newer versions of the core, please refer to the core
* HW datasheet.
* 1.02a asa 2/16/11 Inserted a delay in the driver function
* XAxiEthernet_Reset in file xaxiethernet.c. This is done
* because immediately after a core reset none of the
* AxiEthernet registers are accessible for some duration.
* Changed the value of XAE_LOOPS_TO_COME_OUT_OF_RST to
* 10000 in file xaxiethernet_hw.h.
*
* 2.00a asa 8/29/11 A new major version of AxiEthernet driver is being
* released to accomodate the change in avb software. The
* AxiEthernet hardware v3_00_a has the latest avb
* hardware which needs a corresponding change in avb
* software (released in examples/avb folder). This change
* in avb software is not backwards compatible (which
* means this avb software will not work with older
* axiethernet hardware).
* Hence a new major version of axiethernet is being
* released.
* Added defines for Ability Reg, Identification Reg, Rx max
* Frame and Tx Max Frame registers.
* Changed define for TEMAC RGMII/SGMII Config (PHYC) Reg.
*
* 3.00a asa 4/10/12 A new major version of AxiEthernet is being released to
* accomodate the change in AVB example. From AxiEthernet
* core version 3.01a onwards the AVB implementation has
* changed. The AVB module is now a part of AxiEthernet IP.
* Because of this change, the AVB example works only
* when promiscuous mode is not enabled (unlike earlier
* implementation where promiscuous mode was required for
* AVB example to work). Hence the file xavb_example.c is
* changed so that the core is not put in promiscuous mode.
* Also since AVB is a part of AxiEthernet some of the
* register mappings in xavb_hw.h has changed.
* These changes are not backward compatible which means
* this changed example will not work for previous versions
* of cores.
* Hence a new major version of axiethernet is being
* released.
* 3.01a srt 02/03/13 - Added support for SGMII mode (CR 676793)
* - Added support for IPI designs (CR 698249)
* 02/14/13 - Added support for Zynq (CR 681136)
* 3.02a srt 04/13/13 - Removed Warnings (CR 704998).
* 04/24/13 - Modified parameter *_SGMII_PHYADDR to *_PHYADDR, the
* config parameter C_PHYADDR applies to SGMII/1000BaseX
* modes of operation
* 04/24/13 - Added support for 1000BaseX mode in examples (_util.c)
* (CR 704195)
* 04/24/13 - Added support for RGMII mode in examples (_util.c)
* 3.02a srt 08/06/13 - Fixed CR 727634:
* Modified FifoHandler() function logic of FIFO
* interrupt example to reflect the bit changes in
* the Interrupt Status Register as per the latest
* AXI FIFO stream IP.
* - Fixed CR 721141:
* Added support to handle multiple instances of
* AxiEthernet FIFO interface (CR 721141)
* - Fixed CR 717949:
* Configures external Marvel 88E1111 PHY based on the
* AXI Ethernet physical interface type and allows to
* operate in specific interface mode without changing
* jumpers on the Microblaze boards. This change is in
* example_util.c
* 3.02a adk 15/11/13 - Fixed CR 761035 removed dependency with fifo in MDD file
* 4.0 adk 19/12/13 - Updated as per the New Tcl API's
* asa 30/01/14 - Added defines for 1588 registers and bit masks
* Added config parameter for SGMII over LVDS
*
* 4.1 adk 21/04/14 - Fixed CR:780537 Changes are Made in the file
* axiethernet test-app tcl
* 4.2 adk 08/08/14 - Fixed CR:810643 SDK generated 'xparamters.h' erroneously
* generated with errors due to part of '#define' misplaced
* changes are made in the driver tcl file.
* 4.3 adk 29/10/14 - Added support for generating parameters for SGMII/1000BaseX
* modes When IP is configured with the PCS/PMA core.
* Changes are made in the driver tcl file (CR 828796).
* </pre>
*
******************************************************************************/
#ifndef XAXIETHERNET_H /* prevent circular inclusions */
#define XAXIETHERNET_H /* by using protection macros */
#ifdef __cplusplus
extern "C" {
#endif
/***************************** Include Files *********************************/
#include "xenv.h"
#include "xstatus.h"
#include "xil_assert.h"
#include "xaxiethernet_hw.h"
/************************** Constant Definitions *****************************/
/** @name Configuration options
*
* The following are device configuration options. See the
* <i>XAxiEthernet_SetOptions</i>, <i>XAxiEthernet_ClearOptions</i> and
* <i>XAxiEthernet_GetOptions</i> routines for information on how to use
* options.
*
* The default state of the options are also noted below.
*
* @{
*/
/**< XAE_PROMISC_OPTION specifies the Axi Ethernet device to accept all
* incoming packets.
* This driver sets this option to disabled (cleared) by default.
*/
#define XAE_PROMISC_OPTION 0x00000001
/**< XAE_JUMBO_OPTION specifies the Axi Ethernet device to accept jumbo
* frames for transmit and receive.
* This driver sets this option to disabled (cleared) by default.
*/
#define XAE_JUMBO_OPTION 0x00000002
/**< XAE_VLAN_OPTION specifies the Axi Ethernet device to enable VLAN support
* for transmit and receive.
* This driver sets this option to disabled (cleared) by default.
*/
#define XAE_VLAN_OPTION 0x00000004
/**< XAE_FLOW_CONTROL_OPTION specifies the Axi Ethernet device to recognize
* received flow control frames.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_FLOW_CONTROL_OPTION 0x00000008
/**< XAE_FCS_STRIP_OPTION specifies the Axi Ethernet device to strip FCS and
* PAD from received frames. Note that PAD from VLAN frames is not stripped.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_FCS_STRIP_OPTION 0x00000010
/**< XAE_FCS_INSERT_OPTION specifies the Axi Ethernet device to generate the
* FCS field and add PAD automatically for outgoing frames.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_FCS_INSERT_OPTION 0x00000020
/**< XAE_LENTYPE_ERR_OPTION specifies the Axi Ethernet device to enable
* Length/Type error checking (mismatched type/length field) for received
* frames.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_LENTYPE_ERR_OPTION 0x00000040
/**< XAE_TRANSMITTER_ENABLE_OPTION specifies the Axi Ethernet device
* transmitter to be enabled.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_TRANSMITTER_ENABLE_OPTION 0x00000080
/**< XAE_RECEIVER_ENABLE_OPTION specifies the Axi Ethernet device receiver to
* be enabled.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_RECEIVER_ENABLE_OPTION 0x00000100
/**< XAE_BROADCAST_OPTION specifies the Axi Ethernet device to receive frames
* sent to the broadcast Ethernet address.
* This driver sets this option to enabled (set) by default.
*/
#define XAE_BROADCAST_OPTION 0x00000200
/**< XAE_MULTICAST_OPTION specifies the Axi Ethernet device to receive frames
* sent to Ethernet addresses that are programmed into the Multicast Address
* Table (MAT).
* This driver sets this option to disabled (cleared) by default.
*/
#define XAE_MULTICAST_OPTION 0x00000400
/**< XAE_EXT_MULTICAST_OPTION specifies the Axi Ethernet device to receive
* frames sent to Ethernet addresses that are programmed into the Multicast
* Address Table.
* This driver sets this option to be dependent on HW configuration
* by default.
*/
#define XAE_EXT_MULTICAST_OPTION 0x00000800
/**< XAE_EXT_TXVLAN_TRAN_OPTION specifies the Axi Ethernet device to enable
* transmit VLAN translation.
* This driver sets this option to be dependent on HW configuration
* by default.
*/
#define XAE_EXT_TXVLAN_TRAN_OPTION 0x00001000
/**< XAE_EXT_RXVLAN_TRAN_OPTION specifies the Axi Ethernet device to enable
* receive VLAN translation.
* This driver sets this option to be dependent on HW configuration
* by default.
*/
#define XAE_EXT_RXVLAN_TRAN_OPTION 0x00002000
/**< XAE_EXT_TXVLAN_TAG_OPTION specifies the Axi Ethernet device to enable
* transmit VLAN tagging.
* This driver sets this option to be dependent during HW build time
* by default.
*/
#define XAE_EXT_TXVLAN_TAG_OPTION 0x00004000
/**< XAE_EXT_RXVLAN_TAG_OPTION specifies the Axi Ethernet device to enable
* receive VLAN tagging.
* This driver sets this option to be dependent during HW build time
* by default.
*/
#define XAE_EXT_RXVLAN_TAG_OPTION 0x00008000
/**< XAE_EXT_TXVLAN_STRP_OPTION specifies the Axi Ethernet device to enable
* transmit VLAN stripping.
* This driver sets this option to be dependent during HW build time
* by default.
*/
#define XAE_EXT_TXVLAN_STRP_OPTION 0x00010000
/**< XAE_EXT_RXVLAN_STRP_OPTION specifies the Axi Ethernet device to enable
* receive VLAN stripping.
* This driver sets this option to be dependent during HW build time
* by default.
*/
#define XAE_EXT_RXVLAN_STRP_OPTION 0x00020000
#define XAE_DEFAULT_OPTIONS \
(XAE_FLOW_CONTROL_OPTION | \
XAE_BROADCAST_OPTION | \
XAE_FCS_INSERT_OPTION | \
XAE_FCS_STRIP_OPTION | \
XAE_LENTYPE_ERR_OPTION | \
XAE_TRANSMITTER_ENABLE_OPTION | \
XAE_RECEIVER_ENABLE_OPTION)
/**< XAE_DEFAULT_OPTIONS specify the options set in XAxiEthernet_Reset() and
* XAxiEthernet_CfgInitialize()
*/
/*@}*/
#define XAE_MULTI_MAT_ENTRIES 4 /**< Number of storable addresses in
* the Multicast Address Table
*/
#define XAE_MDIO_DIV_DFT 29 /**< Default MDIO clock divisor */
/*
* The next few constants help upper layers determine the size of memory
* pools used for Ethernet buffers and descriptor lists.
*/
#define XAE_MAC_ADDR_SIZE 6 /* MAC addresses are 6 bytes */
#define XAE_MTU 1500 /* Max MTU size of an Ethernet
* frame
*/
#define XAE_JUMBO_MTU 8982 /* Max MTU size of a jumbo
* Ethernet frame
*/
#define XAE_HDR_SIZE 14 /* Size of an Ethernet header*/
#define XAE_HDR_VLAN_SIZE 18 /* Size of an Ethernet header
* with VLAN
*/
#define XAE_TRL_SIZE 4 /* Size of an Ethernet trailer
* (FCS)
*/
#define XAE_MAX_FRAME_SIZE (XAE_MTU + XAE_HDR_SIZE + XAE_TRL_SIZE)
#define XAE_MAX_VLAN_FRAME_SIZE (XAE_MTU + XAE_HDR_VLAN_SIZE + XAE_TRL_SIZE)
#define XAE_MAX_JUMBO_FRAME_SIZE (XAE_JUMBO_MTU + XAE_HDR_SIZE + XAE_TRL_SIZE)
/*
* Constant values returned by XAxiEthernet_GetPhysicalInterface(). Note that
* these values match design parameters from the Axi Ethernet spec.
*/
#define XAE_PHY_TYPE_MII 0
#define XAE_PHY_TYPE_GMII 1
#define XAE_PHY_TYPE_RGMII_1_3 2
#define XAE_PHY_TYPE_RGMII_2_0 3
#define XAE_PHY_TYPE_SGMII 4
#define XAE_PHY_TYPE_1000BASE_X 5
#define XAE_TPID_MAX_ENTRIES 4 /* Number of storable TPIDs in
* Table
*/
/*
* Constant values pass into XAxiEthernet_SetV[tag|Strp]Mode() and returned by
* XAxiEthernet_GetV[tag|Strp]Mode().
*/
#define XAE_VTAG_NONE 0 /* No tagging */
#define XAE_VTAG_ALL 1 /* Tag all frames */
#define XAE_VTAG_EXISTED 2 /* Tag already tagged frames */
#define XAE_VTAG_SELECT 3 /*
* Tag selected already tagged
* frames
*/
#define XAE_DEFAULT_TXVTAG_MODE XAE_VTAG_ALL
#define XAE_DEFAULT_RXVTAG_MODE XAE_VTAG_ALL
#define XAE_VSTRP_NONE 0 /* No stripping */
#define XAE_VSTRP_ALL 1 /* Strip one tag from all
* frames
*/
#define XAE_VSTRP_SELECT 3 /* Strip one tag from selected
* frames
*/
#define XAE_DEFAULT_TXVSTRP_MODE XAE_VSTRP_ALL
#define XAE_DEFAULT_RXVSTRP_MODE XAE_VSTRP_ALL
#define XAE_RX 1 /* Receive direction */
#define XAE_TX 2 /* Transmit direction */
#define XAE_SOFT_TEMAC_10_100_MBPS 0
#define XAE_SOFT_TEMAC_10_100_1000_MBPS 1
#define XAE_HARD_TEMC 2
/**************************** Type Definitions *******************************/
/**
* This typedef contains configuration information for a Axi Ethernet device.
*/
typedef struct XAxiEthernet_Config {
u16 DeviceId; /**< DeviceId is the unique ID of the device */
u32 BaseAddress;/**< BaseAddress is the physical base address of the
* device's registers
*/
u8 TemacType; /**< Temac Type can have 3 possible values. They are
* 0 for SoftTemac at 10/100 Mbps, 1 for SoftTemac
* at 10/100/1000 Mbps and 2 for Vitex6 Hard Temac
*/
u8 TxCsum; /**< TxCsum indicates that the device has checksum
* offload on the Tx channel or not.
*/
u8 RxCsum; /**< RxCsum indicates that the device has checksum
* offload on the Rx channel or not.
*/
u8 PhyType; /**< PhyType indicates which type of PHY interface is
* used (MII, GMII, RGMII, etc.
*/
u8 TxVlanTran; /**< TX VLAN Translation indication */
u8 RxVlanTran; /**< RX VLAN Translation indication */
u8 TxVlanTag; /**< TX VLAN tagging indication */
u8 RxVlanTag; /**< RX VLAN tagging indication */
u8 TxVlanStrp; /**< TX VLAN stripping indication */
u8 RxVlanStrp; /**< RX VLAN stripping indication */
u8 ExtMcast; /**< Extend multicast indication */
u8 Stats; /**< Statistics gathering option */
u8 Avb; /**< Avb option */
u8 EnableSgmiiOverLvds; /**< Enable LVDS option */
u8 TemacIntr; /**< Axi Ethernet interrupt ID */
int AxiDevType; /**< AxiDevType is the type of device attached to the
* Axi Ethernet's AXI4-Stream interface.
*/
u32 AxiDevBaseAddress; /**< AxiDevBaseAddress is the base address of
* the device attached to the Axi Ethernet's
* AXI4-Stream interface.
*/
u8 AxiFifoIntr; /**< AxiFifoIntr interrupt ID (unused if DMA) */
u8 AxiDmaRxIntr;/**< Axi DMA RX interrupt ID (unused if FIFO) */
u8 AxiDmaTxIntr;/**< Axi DMA TX interrupt ID (unused if FIFO) */
} XAxiEthernet_Config;
/**
* struct XAxiEthernet is the type for Axi Ethernet driver instance data.
* The calling code is required to use a unique instance of this structure
* for every Axi Ethernet device used in the system. A reference to a structure
* of this type is then passed to the driver API functions.
*/
typedef struct XAxiEthernet {
XAxiEthernet_Config Config; /**< Hardware configuration */
u32 IsStarted; /**< Device is currently started */
u32 IsReady; /**< Device is initialized and ready */
u32 Options; /**< Current options word */
u32 Flags; /**< Internal driver flags */
} XAxiEthernet;
/***************** Macros (Inline Functions) Definitions *********************/
/*****************************************************************************/
/**
*
* XAxiEthernet_IsStarted reports if the device is in the started or stopped
* state. To be in the started state, the calling code must have made a
* successful call to <i>XAxiEthernet_Start</i>. To be in the stopped state,
* <i>XAxiEthernet_Stop</i> or <i>XAxiEthernet_CfgInitialize</i> function must
* have been called.
*
* @param InstancePtr is a pointer to the of Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device has been started.
* - FALSE.if the device has not been started
*
* @note C-style signature:
* u32 XAxiEthernet_IsStarted(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsStarted(InstancePtr) \
(((InstancePtr)->IsStarted == XIL_COMPONENT_IS_STARTED) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsDma reports if the device is currently connected to DMA.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
* @return
* - TRUE if the Axi Ethernet device is connected DMA.
* - FALSE.if the Axi Ethernet device is NOT connected to DMA
*
* @note C-style signature:
* u32 XAxiEthernet_IsDma(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsDma(InstancePtr) \
(((InstancePtr)->Config.AxiDevType == XPAR_AXI_DMA) ? TRUE: FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsFifo reports if the device is currently connected to a fifo
* core.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the Axi Ethernet device is connected to a fifo
* - FALSE if the Axi Ethernet device is NOT connected to a fifo.
*
* @note C-style signature:
* u32 XAxiEthernet_IsFifo(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsFifo(InstancePtr) \
(((InstancePtr)->Config.AxiDevType == XPAR_AXI_FIFO) ? TRUE: FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_AxiDevBaseAddress reports the base address of the core connected
* to the Axi Ethernet's Axi4 Stream interface.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return The base address of the core connected to the Axi Ethernet's
* streaming interface.
*
* @note C-style signature:
* u32 XAxiEthernet_AxiDevBaseAddress(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_AxiDevBaseAddress(InstancePtr) \
((InstancePtr)->Config.AxiDevBaseAddress)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsRecvFrameDropped determines if the device thinks it has
* dropped a receive frame. The device interrupt status register is read to
* determine this.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if a frame has been dropped
* - FALSE if a frame has NOT been dropped.
*
* @note C-style signature:
* u32 XAxiEthernet_IsRecvFrameDropped(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsRecvFrameDropped(InstancePtr) \
((XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, \
XAE_IS_OFFSET) & XAE_INT_RXRJECT_MASK) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsRxPartialCsum determines if the device is configured with
* partial checksum offloading on the receive channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
* @return
* - TRUE if the device is configured with partial checksum
* offloading on the receive channel.
* - FALSE.if the device is not configured with partial checksum
* offloading on the receive side.
*
* @note C-style signature:
* u32 XAxiEthernet_IsRxPartialCsum(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsRxPartialCsum(InstancePtr) \
((((InstancePtr)->Config.RxCsum) == 0x01) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsTxPartialCsum determines if the device is configured with
* partial checksum offloading on the transmit channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with partial checksum
* offloading on the transmit side.
* - FALSE.if the device is not configured with partial checksum
* offloading on the transmit side.
*
* @note C-style signature:
* u32 XAxiEthernet_IsTxPartialCsum(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsTxPartialCsum(InstancePtr) \
((((InstancePtr)->Config.TxCsum) == 0x01) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsRxFullCsum determines if the device is configured with full
* checksum offloading on the receive channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
* @return
* - TRUE if the device is configured with full checksum
* offloading on the receive channel.
* - FALSE.if the device is not configured with full checksum
* offloading on the receive side.
*
* @note C-style signature:
* u32 XAxiEthernet_IsRxFullCsum(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsRxFullCsum(InstancePtr) \
((((InstancePtr)->Config.RxCsum) == 0x02) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsTxFullCsum determines if the device is configured with full
* checksum offloading on the transmit channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with full checksum
* offloading on the transmit side.
* - FALSE.if the device is not configured with full checksum
* offloading on the transmit side.
*
* @note C-style signature:
* u32 XAxiEthernet_IsTxFullCsum(XAxiEthernet *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_IsTxFullCsum(InstancePtr) \
((((InstancePtr)->Config.TxCsum) == 0x02) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_GetPhysicalInterface returns the type of PHY interface being
* used by the given instance, specified by <i>InstancePtr</i>.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return The Physical Interface type which is one of XAE_PHY_TYPE_x
* where x is MII, GMII, RGMII_1_3, RGMII_2_0, SGMII, or
* 1000BASE_X (defined in xaxiethernet.h).
*
* @note C-style signature:
* int XAxiEthernet_GetPhysicalInterface(XAxiEthernet
* *InstancePtr)
*
******************************************************************************/
#define XAxiEthernet_GetPhysicalInterface(InstancePtr) \
((InstancePtr)->Config.PhyType)
/****************************************************************************/
/**
*
* XAxiEthernet_GetIntStatus returns a bit mask of the interrupt status
* register (ISR). XAxiEthernet_GetIntStatus can be used to query the status
* without having to have interrupts enabled.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return Returns a bit mask of the interrupt status conditions. The
* mask will be a set of bit wise or'd values from the
* <code>XAE_INT_*_MASK</code> definitions in xaxitemac_hw.h file.
*
* @note C-style signature:
* u32 XAxiEthernet_GetIntStatus(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_GetIntStatus(InstancePtr) \
XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, XAE_IS_OFFSET)
/****************************************************************************/
/**
*
* XAxiEthernet_IntEnable enables the interrupts specified in <i>Mask</i>. The
* corresponding interrupt for each bit set to 1 in <i>Mask</i>, will be
* enabled.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @param Mask contains a bit mask of the interrupts to enable. The mask
* can be formed using a set of bit wise or'd values from the
* <code>XAE_INT_*_MASK</code> definitions in xaxitemac_hw.h file.
*
* @return None.
*
* @note C-style signature:
* void XAxiEthernet_IntEnable(XAxiEthernet *InstancePtr,
* u32 Mask)
*
*****************************************************************************/
#define XAxiEthernet_IntEnable(InstancePtr, Mask) \
XAxiEthernet_WriteReg((InstancePtr)->Config.BaseAddress, \
XAE_IE_OFFSET, \
XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, \
XAE_IE_OFFSET) | ((Mask) & XAE_INT_ALL_MASK));
/****************************************************************************/
/**
*
* XAxiEthernet_IntDisable disables the interrupts specified in <i>Mask</i>. The
* corresponding interrupt for each bit set to 1 in <i>Mask</i>, will be
* disabled. In other words, XAxiEthernet_IntDisable uses the "set a bit to
* clear it" scheme.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
* @param Mask contains a bit mask of the interrupts to disable. The mask
* can be formed using a set of bit wise or'd values from the
* <code>XAE_INT_*_MASK</code> definitions in xaxitemac_hw.h file
*
* @return None.
*
* @note C-style signature:
* void XAxiEthernet_IntDisable(XAxiEthernet *InstancePtr,
* u32 Mask)
*
*****************************************************************************/
#define XAxiEthernet_IntDisable(InstancePtr, Mask) \
XAxiEthernet_WriteReg((InstancePtr)->Config.BaseAddress, \
XAE_IE_OFFSET, \
XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, \
XAE_IE_OFFSET) & ~((Mask) & XAE_INT_ALL_MASK));
/****************************************************************************/
/**
*
* XAxiEthernet_IntPending returns a bit mask of the pending interrupts. Each
* bit set to 1 in the return value represents a pending interrupt.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return Returns a bit mask of the interrupts that are pending. The mask
* will be a set of bit wise or'd values from the
* <code>XAE_INT_*_MASK</code> definitions in xaxitemac_hw.h file.
*
* @note C-style signature:
* u32 XAxiEthernet_IntPending(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IntPending(InstancePtr) \
XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, XAE_IP_OFFSET)
/****************************************************************************/
/**
*
* XAxiEthernet_IntClear clears pending interrupts specified in <i>Mask</i>.
* The corresponding pending interrupt for each bit set to 1 in <i>Mask</i>,
* will be cleared. In other words, XAxiEthernet_IntClear uses the "set a bit to
* clear it" scheme.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
* @param Mask contains a bit mask of the pending interrupts to clear.
* The mask can be formed using a set of bit wise or'd values from
* the <code>XAE_INT_*_MASK</code> definitions in xaxitemac_hw.h
* file.
*
* @note C-style signature:
* void XAxiEthernet_IntClear(XAxiEthernet *InstancePtr,
* u32 Mask)
*
*****************************************************************************/
#define XAxiEthernet_IntClear(InstancePtr, Mask) \
XAxiEthernet_WriteReg((InstancePtr)->Config.BaseAddress, \
XAE_IS_OFFSET, ((Mask) & XAE_INT_ALL_MASK))
/*****************************************************************************/
/**
*
* XAxiEthernet_IsExtFuncCap determines if the device is capable of the
* new/extend VLAN and multicast features.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is capable and configured with extended
* Multicast and VLAN Tagging/Stripping and Translation.
* - TRUE if the device is NOT capable and NOT configured with
* extended Multicast and VLAN Tagging/Stripping and
* Translation.
*
* @note C-style signature:
* u32 XAxiEthernet_IsExtFuncCap(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsExtFuncCap(InstancePtr) \
((XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, \
XAE_RAF_OFFSET) & XAE_RAF_NEWFNCENBL_MASK) ? \
TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsExtMcastEnable determines if the extended multicast features
* is enabled.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the extended multicast features are enabled.
* - FALSE if the extended multicast features are NOT enabled
*
* @note : This function indicates when extended Multicast is enabled in
* HW, extended multicast mode in wrapper can be tested.
*
* C-style signature:
* u32 XAxiEthernet_IsExtMcastEnable(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsExtMcastEnable(InstancePtr) \
((XAxiEthernet_ReadReg((InstancePtr)->Config.BaseAddress, \
XAE_RAF_OFFSET) & XAE_RAF_EMULTIFLTRENBL_MASK) ? \
TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsExtMcast determines if the device is built with new/extended
* multicast features.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is built with extended multicast features.
* - FALSE if the device is not built with the extended multicast
* features.
*
* @note This function indicates when hardware is built with extended
* Multicast feature.
*
* C-style signature:
* u32 XAxiEthernet_IsExtMcast(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsExtMcast(InstancePtr) \
(((InstancePtr)->Config.ExtMcast) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsTxVlanStrp determines if the device is configured with transmit
* VLAN stripping on the transmit channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* VLAN stripping on the Transmit channel.
* - FALSE if the device is NOT configured with
* VLAN stripping on the Transmit channel.
*
* @note C-style signature:
* u32 XAxiEthernet_IsTxVlanStrp(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsTxVlanStrp(InstancePtr) \
(((InstancePtr)->Config.TxVlanStrp) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsRxVlanStrp determines if the device is configured with receive
* VLAN stripping on the receive channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* VLAN stripping on the Receive channel.
* - FALSE if the device is NOT configured with
* VLAN stripping on the Receive channel.
*
* @note C-style signature:
* u32 XAxiEthernet_IsRxVlanTran(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsRxVlanStrp(InstancePtr) \
(((InstancePtr)->Config.RxVlanStrp) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsTxVlanTran determines if the device is configured with
* transmit VLAN translation on the transmit channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* VLAN translation on the Transmit channel.
* - FALSE if the device is NOT configured with
* VLAN translation on the Transmit channel.
*
* @note C-style signature:
* u32 XAxiEthernet_IsTxVlanTran(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsTxVlanTran(InstancePtr) \
(((InstancePtr)->Config.TxVlanTran) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsRxVlanTran determines if the device is configured with receive
* VLAN translation on the receive channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* VLAN translation on the Receive channel.
* - FALSE if the device is NOT configured with
* VLAN translation on the Receive channel.
*
* @note C-style signature:
* u32 XAxiEthernet_IsRxVlanTran(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsRxVlanTran(InstancePtr) \
(((InstancePtr)->Config.RxVlanTran) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsTxVlanTag determines if the device is configured with transmit
* VLAN tagging on the transmit channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* VLAN tagging on the Transmit channel.
* - FALSE if the device is NOT configured with
* VLAN tagging on the Transmit channel.
*
* @note C-style signature:
* u32 XAxiEthernet_IsTxVlanTag(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsTxVlanTag(InstancePtr) \
(((InstancePtr)->Config.TxVlanTag) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsRxVlanTag determines if the device is configured with receive
* VLAN tagging on the receive channel.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* VLAN tagging on the Receive channel.
* - FALSE if the device is NOT configured with
* VLAN tagging on the Receive channel.
*
* @note C-style signature:
* u32 XAxiEthernet_IsRxVlanTag(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsRxVlanTag(InstancePtr) \
(((InstancePtr)->Config.RxVlanTag) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_GetTemacType returns the Axi Ethernet type of the core.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - Returns the values of TemacType, which can be
* XAE_SOFT_TEMAC_10_100_MBPS (0) for Soft Temac Core with
* speed 10/100 Mbps.
* XAE_SOFT_TEMAC_10_100_1000_MBPS (1) for Soft Temac core with
* speed 10/100/1000 Mbps
* XAE_HARD_TEMC (2) for Hard Temac Core for Virtex-6
*
* @note C-style signature:
* u32 XAxiEthernet_GetTemacType(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_GetTemacType(InstancePtr) \
((InstancePtr)->Config.TemacType)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsAvbConfigured returns determines if Ethernet AVB.is configured
* in the harwdare or not.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* Ethernet AVB.
* - FALSE if the device is NOT configured with
* Ethernet AVB.
*
* @note C-style signature:
* u32 XAxiEthernet_IsAvbConfigured(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsAvbConfigured(InstancePtr) \
(((InstancePtr)->Config.Avb) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsSgmiiOverLvdsEnabled determines if SGMII over LVDS is enabled
* in the harwdare or not.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* SGMII over LVDS.
* - FALSE if the device is NOT configured with
* SGMII over LVDS.
*
* @note C-style signature:
* u32 XAxiEthernet_IsSgmiiOverLvdsEnabled(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsSgmiiOverLvdsEnabled(InstancePtr) \
(((InstancePtr)->Config.EnableSgmiiOverLvds) ? TRUE : FALSE)
/*****************************************************************************/
/**
*
* XAxiEthernet_IsStatsConfigured returns determines if Statistics gathering.
* is configured in the harwdare or not.
*
* @param InstancePtr is a pointer to the Axi Ethernet instance to be
* worked on.
*
* @return
* - TRUE if the device is configured with
* statistics gathering.
* - FALSE if the device is NOT configured with
* statistics gathering.
*
* @note C-style signature:
* u32 XAxiEthernet_IsStatsConfigured(XAxiEthernet *InstancePtr)
*
*****************************************************************************/
#define XAxiEthernet_IsStatsConfigured(InstancePtr) \
(((InstancePtr)->Config.Stats) ? TRUE : FALSE)
/************************** Function Prototypes ******************************/
/*
* Initialization functions in xaxiethernet.c
*/
int XAxiEthernet_CfgInitialize(XAxiEthernet *InstancePtr,
XAxiEthernet_Config *CfgPtr,u32 VirtualAddress);
void XAxiEthernet_Start(XAxiEthernet *InstancePtr);
void XAxiEthernet_Stop(XAxiEthernet *InstancePtr);
void XAxiEthernet_Reset(XAxiEthernet *InstancePtr);
/*
* Initialization functions in xaxitemac_sinit.c
*/
XAxiEthernet_Config *XAxiEthernet_LookupConfig(u16 DeviceId);
/*
* MAC configuration/control functions in xaxitemac_control.c
*/
int XAxiEthernet_SetOptions(XAxiEthernet *InstancePtr, u32 Options);
int XAxiEthernet_ClearOptions(XAxiEthernet *InstancePtr, u32 Options);
u32 XAxiEthernet_GetOptions(XAxiEthernet *InstancePtr);
int XAxiEthernet_SetMacAddress(XAxiEthernet *InstancePtr, void *AddressPtr);
void XAxiEthernet_GetMacAddress(XAxiEthernet *InstancePtr, void *AddressPtr);
int XAxiEthernet_SetMacPauseAddress(XAxiEthernet *InstancePtr,
void *AddressPtr);
void XAxiEthernet_GetMacPauseAddress(XAxiEthernet *InstancePtr,
void *AddressPtr);
int XAxiEthernet_SendPausePacket(XAxiEthernet *InstancePtr, u16 PauseValue);
int XAxiEthernet_GetSgmiiStatus(XAxiEthernet *InstancePtr, u16 *SpeedPtr);
int XAxiEthernet_GetRgmiiStatus(XAxiEthernet *InstancePtr, u16 *SpeedPtr,
int *IsFullDuplexPtr, int *IsLinkUpPtr);
u16 XAxiEthernet_GetOperatingSpeed(XAxiEthernet *InstancePtr);
int XAxiEthernet_SetOperatingSpeed(XAxiEthernet *InstancePtr, u16 Speed);
void XAxiEthernet_SetBadFrmRcvOption(XAxiEthernet *InstancePtr);
void XAxiEthernet_ClearBadFrmRcvOption(XAxiEthernet *InstancePtr);
void XAxiEthernet_DisableControlFrameLenCheck(XAxiEthernet *InstancePtr);
void XAxiEthernet_EnableControlFrameLenCheck(XAxiEthernet *InstancePtr);
void XAxiEthernet_PhySetMdioDivisor(XAxiEthernet *InstancePtr, u8 Divisor);
void XAxiEthernet_PhyRead(XAxiEthernet *InstancePtr, u32 PhyAddress,
u32 RegisterNum, u16 *PhyDataPtr);
void XAxiEthernet_PhyWrite(XAxiEthernet *InstancePtr, u32 PhyAddress,
u32 RegisterNum, u16 PhyData);
int XAxiEthernet_MulticastAdd(XAxiEthernet *InstancePtr, void *AddressPtr,
int Entry);
void XAxiEthernet_MulticastGet(XAxiEthernet *InstancePtr, void *AddressPtr,
int Entry);
int XAxiEthernet_MulticastClear(XAxiEthernet *InstancePtr, int Entry);
int XAxiEthernet_SetTpid(XAxiEthernet *InstancePtr, u16 Tpid, u8 Entry);
int XAxiEthernet_ClearTpid(XAxiEthernet *InstancePtr, u8 Entry);
void XAxiEthernet_GetTpid(XAxiEthernet *InstancePtr, u16 *TpidPtr, u8 Entry);
int XAxiEthernet_SetVTagMode(XAxiEthernet *InstancePtr, u32 Mode, int Dir);
void XAxiEthernet_GetVTagMode(XAxiEthernet *InstancePtr, u8 *ModePtr, int Dir);
int XAxiEthernet_SetVStripMode(XAxiEthernet *InstancePtr, u32 Mode, int Dir);
void XAxiEthernet_GetVStripMode(XAxiEthernet *InstancePtr, u8 *ModePtr,
int Dir);
int XAxiEthernet_SetVTagValue(XAxiEthernet *InstancePtr, u32 VTagValue,
int Dir);
void XAxiEthernet_GetVTagValue(XAxiEthernet *InstancePtr, u32 *VTagValuePtr,
int Dir);
int XAxiEthernet_SetVidTable(XAxiEthernet *InstancePtr, u32 Entry, u32 Vid,
u8 Strip, u8 Tag, int Dir);
void XAxiEthernet_GetVidTable(XAxiEthernet *InstancePtr, u32 Entry, u32 *VidPtr,
u8 *StripPtr, u8 *TagPtr, int Dir);
int XAxiEthernet_AddExtMulticastGroup(XAxiEthernet *InstancePtr,
void *AddressPtr);
int XAxiEthernet_ClearExtMulticastGroup(XAxiEthernet *InstancePtr,
void *AddressPtr);
int XAxiEthernet_GetExtMulticastGroup(XAxiEthernet *InstancePtr,
void *AddressPtr);
void XAxiEthernet_DumpExtMulticastGroup(XAxiEthernet *InstancePtr);
#ifdef __cplusplus
}
#endif
#endif /* end of protection macro */