/* Copyright (c) 2008-2012 Freescale Semiconductor, Inc1* All rights reserved.2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions are met:5* * Redistributions of source code must retain the above copyright6* notice, this list of conditions and the following disclaimer.7* * Redistributions in binary form must reproduce the above copyright8* notice, this list of conditions and the following disclaimer in the9* documentation and/or other materials provided with the distribution.10* * Neither the name of Freescale Semiconductor nor the11* names of its contributors may be used to endorse or promote products12* derived from this software without specific prior written permission.13*14*15* ALTERNATIVELY, this software may be distributed under the terms of the16* GNU General Public License ("GPL") as published by the Free Software17* Foundation, either version 2 of that License or (at your option) any18* later version.19*20* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY21* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED22* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE23* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY24* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES25* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;26* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND27* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT28* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/313233/**************************************************************************//**34@File enet_ext.h3536@Description Ethernet generic definitions and enums.37*//***************************************************************************/3839#ifndef __ENET_EXT_H40#define __ENET_EXT_H4142#include "fsl_enet.h"4344#define ENET_NUM_OCTETS_PER_ADDRESS 6 /**< Number of octets (8-bit bytes) in an ethernet address */45#define ENET_GROUP_ADDR 0x01 /**< Group address mask for ethernet addresses */464748/**************************************************************************//**49@Description Ethernet Address50*//***************************************************************************/51typedef uint8_t t_EnetAddr[ENET_NUM_OCTETS_PER_ADDRESS];5253/**************************************************************************//**54@Description Ethernet Address Type.55*//***************************************************************************/56typedef enum e_EnetAddrType57{58e_ENET_ADDR_TYPE_INDIVIDUAL, /**< Individual (unicast) address */59e_ENET_ADDR_TYPE_GROUP, /**< Group (multicast) address */60e_ENET_ADDR_TYPE_BROADCAST /**< Broadcast address */61} e_EnetAddrType;6263/**************************************************************************//**64@Description Ethernet MAC-PHY Interface65*//***************************************************************************/66typedef enum e_EnetInterface67{68e_ENET_IF_MII = E_ENET_IF_MII, /**< MII interface */69e_ENET_IF_RMII = E_ENET_IF_RMII, /**< RMII interface */70e_ENET_IF_SMII = E_ENET_IF_SMII, /**< SMII interface */71e_ENET_IF_GMII = E_ENET_IF_GMII, /**< GMII interface */72e_ENET_IF_RGMII = E_ENET_IF_RGMII, /**< RGMII interface */73e_ENET_IF_TBI = E_ENET_IF_TBI, /**< TBI interface */74e_ENET_IF_RTBI = E_ENET_IF_RTBI, /**< RTBI interface */75e_ENET_IF_SGMII = E_ENET_IF_SGMII, /**< SGMII interface */76e_ENET_IF_XGMII = E_ENET_IF_XGMII, /**< XGMII interface */77e_ENET_IF_QSGMII= E_ENET_IF_QSGMII, /**< QSGMII interface */78e_ENET_IF_XFI = E_ENET_IF_XFI /**< XFI interface */79} e_EnetInterface;8081#define ENET_IF_SGMII_BASEX 0x80000000 /**< SGMII/QSGII interface with 1000BaseX82auto-negotiation between MAC and phy83or backplane;84Note: 1000BaseX auto-negotiation relates85only to interface between MAC and phy/backplane,86SGMII phy can still synchronize with far-end phy87at 10Mbps, 100Mbps or 1000Mbps */8889/**************************************************************************//**90@Description Ethernet Duplex Mode91*//***************************************************************************/92typedef enum e_EnetDuplexMode93{94e_ENET_HALF_DUPLEX, /**< Half-Duplex mode */95e_ENET_FULL_DUPLEX /**< Full-Duplex mode */96} e_EnetDuplexMode;9798/**************************************************************************//**99@Description Ethernet Speed (nominal data rate)100*//***************************************************************************/101typedef enum e_EnetSpeed102{103e_ENET_SPEED_10 = E_ENET_SPEED_10, /**< 10 Mbps */104e_ENET_SPEED_100 = E_ENET_SPEED_100, /**< 100 Mbps */105e_ENET_SPEED_1000 = E_ENET_SPEED_1000, /**< 1000 Mbps = 1 Gbps */106e_ENET_SPEED_2500 = E_ENET_SPEED_2500, /**< 2500 Mbps = 2.5 Gbps */107e_ENET_SPEED_10000 = E_ENET_SPEED_10000 /**< 10000 Mbps = 10 Gbps */108} e_EnetSpeed;109110/**************************************************************************//**111@Description Ethernet mode (combination of MAC-PHY interface and speed)112*//***************************************************************************/113typedef enum e_EnetMode114{115e_ENET_MODE_INVALID = 0, /**< Invalid Ethernet mode */116e_ENET_MODE_MII_10 = (e_ENET_IF_MII | e_ENET_SPEED_10), /**< 10 Mbps MII */117e_ENET_MODE_MII_100 = (e_ENET_IF_MII | e_ENET_SPEED_100), /**< 100 Mbps MII */118e_ENET_MODE_RMII_10 = (e_ENET_IF_RMII | e_ENET_SPEED_10), /**< 10 Mbps RMII */119e_ENET_MODE_RMII_100 = (e_ENET_IF_RMII | e_ENET_SPEED_100), /**< 100 Mbps RMII */120e_ENET_MODE_SMII_10 = (e_ENET_IF_SMII | e_ENET_SPEED_10), /**< 10 Mbps SMII */121e_ENET_MODE_SMII_100 = (e_ENET_IF_SMII | e_ENET_SPEED_100), /**< 100 Mbps SMII */122e_ENET_MODE_GMII_1000 = (e_ENET_IF_GMII | e_ENET_SPEED_1000), /**< 1000 Mbps GMII */123e_ENET_MODE_RGMII_10 = (e_ENET_IF_RGMII | e_ENET_SPEED_10), /**< 10 Mbps RGMII */124e_ENET_MODE_RGMII_100 = (e_ENET_IF_RGMII | e_ENET_SPEED_100), /**< 100 Mbps RGMII */125e_ENET_MODE_RGMII_1000 = (e_ENET_IF_RGMII | e_ENET_SPEED_1000), /**< 1000 Mbps RGMII */126e_ENET_MODE_TBI_1000 = (e_ENET_IF_TBI | e_ENET_SPEED_1000), /**< 1000 Mbps TBI */127e_ENET_MODE_RTBI_1000 = (e_ENET_IF_RTBI | e_ENET_SPEED_1000), /**< 1000 Mbps RTBI */128e_ENET_MODE_SGMII_10 = (e_ENET_IF_SGMII | e_ENET_SPEED_10),129/**< 10 Mbps SGMII with auto-negotiation between MAC and130SGMII phy according to Cisco SGMII specification */131e_ENET_MODE_SGMII_100 = (e_ENET_IF_SGMII | e_ENET_SPEED_100),132/**< 100 Mbps SGMII with auto-negotiation between MAC and133SGMII phy according to Cisco SGMII specification */134e_ENET_MODE_SGMII_1000 = (e_ENET_IF_SGMII | e_ENET_SPEED_1000),135/**< 1000 Mbps SGMII with auto-negotiation between MAC and136SGMII phy according to Cisco SGMII specification */137e_ENET_MODE_SGMII_2500 = (e_ENET_IF_SGMII | e_ENET_SPEED_2500),138e_ENET_MODE_SGMII_BASEX_10 = (ENET_IF_SGMII_BASEX | e_ENET_IF_SGMII | e_ENET_SPEED_10),139/**< 10 Mbps SGMII with 1000BaseX auto-negotiation between140MAC and SGMII phy or backplane */141e_ENET_MODE_SGMII_BASEX_100 = (ENET_IF_SGMII_BASEX | e_ENET_IF_SGMII | e_ENET_SPEED_100),142/**< 100 Mbps SGMII with 1000BaseX auto-negotiation between143MAC and SGMII phy or backplane */144e_ENET_MODE_SGMII_BASEX_1000 = (ENET_IF_SGMII_BASEX | e_ENET_IF_SGMII | e_ENET_SPEED_1000),145/**< 1000 Mbps SGMII with 1000BaseX auto-negotiation between146MAC and SGMII phy or backplane */147e_ENET_MODE_QSGMII_1000 = (e_ENET_IF_QSGMII| e_ENET_SPEED_1000),148/**< 1000 Mbps QSGMII with auto-negotiation between MAC and149QSGMII phy according to Cisco QSGMII specification */150e_ENET_MODE_QSGMII_BASEX_1000 = (ENET_IF_SGMII_BASEX | e_ENET_IF_QSGMII| e_ENET_SPEED_1000),151/**< 1000 Mbps QSGMII with 1000BaseX auto-negotiation between152MAC and QSGMII phy or backplane */153e_ENET_MODE_XGMII_10000 = (e_ENET_IF_XGMII | e_ENET_SPEED_10000), /**< 10000 Mbps XGMII */154e_ENET_MODE_XFI_10000 = (e_ENET_IF_XFI | e_ENET_SPEED_10000) /**< 10000 Mbps XFI */155} e_EnetMode;156157158#define IS_ENET_MODE_VALID(mode) \159(((mode) == e_ENET_MODE_MII_10 ) || \160((mode) == e_ENET_MODE_MII_100 ) || \161((mode) == e_ENET_MODE_RMII_10 ) || \162((mode) == e_ENET_MODE_RMII_100 ) || \163((mode) == e_ENET_MODE_SMII_10 ) || \164((mode) == e_ENET_MODE_SMII_100 ) || \165((mode) == e_ENET_MODE_GMII_1000 ) || \166((mode) == e_ENET_MODE_RGMII_10 ) || \167((mode) == e_ENET_MODE_RGMII_100 ) || \168((mode) == e_ENET_MODE_RGMII_1000 ) || \169((mode) == e_ENET_MODE_TBI_1000 ) || \170((mode) == e_ENET_MODE_RTBI_1000 ) || \171((mode) == e_ENET_MODE_SGMII_10 ) || \172((mode) == e_ENET_MODE_SGMII_100 ) || \173((mode) == e_ENET_MODE_SGMII_1000 ) || \174((mode) == e_ENET_MODE_SGMII_BASEX_10 ) || \175((mode) == e_ENET_MODE_SGMII_BASEX_100 ) || \176((mode) == e_ENET_MODE_SGMII_BASEX_1000 ) || \177((mode) == e_ENET_MODE_XGMII_10000) || \178((mode) == e_ENET_MODE_QSGMII_1000) || \179((mode) == e_ENET_MODE_QSGMII_BASEX_1000) || \180((mode) == e_ENET_MODE_XFI_10000))181182183#define MAKE_ENET_MODE(_interface, _speed) (e_EnetMode)((_interface) | (_speed))184185#define ENET_INTERFACE_FROM_MODE(mode) (e_EnetInterface)((mode) & 0x0FFF0000)186#define ENET_SPEED_FROM_MODE(mode) (e_EnetSpeed)((mode) & 0x0000FFFF)187188#define ENET_ADDR_TO_UINT64(_enetAddr) \189(uint64_t)(((uint64_t)(_enetAddr)[0] << 40) | \190((uint64_t)(_enetAddr)[1] << 32) | \191((uint64_t)(_enetAddr)[2] << 24) | \192((uint64_t)(_enetAddr)[3] << 16) | \193((uint64_t)(_enetAddr)[4] << 8) | \194((uint64_t)(_enetAddr)[5]))195196#define MAKE_ENET_ADDR_FROM_UINT64(_addr64, _enetAddr) \197do { \198int i; \199for (i=0; i < ENET_NUM_OCTETS_PER_ADDRESS; i++) \200(_enetAddr)[i] = (uint8_t)((_addr64) >> ((5-i)*8)); \201} while (0)202203204#endif /* __ENET_EXT_H */205206207