17165Stschatzl/* Copyright (c) 2008-2011 Freescale Semiconductor, Inc.
210453Ssjohanss * All rights reserved.
37165Stschatzl *
47165Stschatzl * Redistribution and use in source and binary forms, with or without
57165Stschatzl * modification, are permitted provided that the following conditions are met:
67165Stschatzl *     * Redistributions of source code must retain the above copyright
77165Stschatzl *       notice, this list of conditions and the following disclaimer.
87165Stschatzl *     * Redistributions in binary form must reproduce the above copyright
97165Stschatzl *       notice, this list of conditions and the following disclaimer in the
107165Stschatzl *       documentation and/or other materials provided with the distribution.
117165Stschatzl *     * Neither the name of Freescale Semiconductor nor the
127165Stschatzl *       names of its contributors may be used to endorse or promote products
137165Stschatzl *       derived from this software without specific prior written permission.
147165Stschatzl *
157165Stschatzl *
167165Stschatzl * ALTERNATIVELY, this software may be distributed under the terms of the
177165Stschatzl * GNU General Public License ("GPL") as published by the Free Software
187165Stschatzl * Foundation, either version 2 of that License or (at your option) any
197165Stschatzl * later version.
207165Stschatzl *
217165Stschatzl * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
227165Stschatzl * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
237165Stschatzl * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
247165Stschatzl * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
257165Stschatzl * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
268330Secaspole * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
277165Stschatzl * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
287165Stschatzl * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2911510Sdfazunen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3010453Ssjohanss * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3111833Sctornqvi */
3210551Schegar
338013Sykantser/**************************************************************************//**
3411833Sctornqvi @File          enet_ext.h
358020Sazakharov
368020Sazakharov @Description   Ethernet generic definitions and enums.
3711286Sdsamersoff*//***************************************************************************/
387165Stschatzl
397165Stschatzl#ifndef __ENET_EXT_H
407165Stschatzl#define __ENET_EXT_H
417165Stschatzl
427165Stschatzl
437165Stschatzl#define ENET_NUM_OCTETS_PER_ADDRESS 6     /**< Number of octets (8-bit bytes) in an ethernet address */
447165Stschatzl#define ENET_GROUP_ADDR             0x01  /**< Group address mask for ethernet addresses */
45
46
47/**************************************************************************//**
48 @Description   Ethernet Address
49*//***************************************************************************/
50typedef uint8_t t_EnetAddr[ENET_NUM_OCTETS_PER_ADDRESS];
51
52/**************************************************************************//**
53 @Description   Ethernet Address Type.
54*//***************************************************************************/
55typedef enum e_EnetAddrType
56{
57    e_ENET_ADDR_TYPE_INDIVIDUAL,    /**< Individual (unicast) address */
58    e_ENET_ADDR_TYPE_GROUP,         /**< Group (multicast) address */
59    e_ENET_ADDR_TYPE_BROADCAST      /**< Broadcast address */
60} e_EnetAddrType;
61
62
63/**************************************************************************//**
64 @Description   Ethernet MAC-PHY Interface
65*//***************************************************************************/
66typedef enum e_EnetInterface
67{
68    e_ENET_IF_MII   = 0x00010000,   /**< MII interface */
69    e_ENET_IF_RMII  = 0x00020000,   /**< RMII interface */
70    e_ENET_IF_SMII  = 0x00030000,   /**< SMII interface */
71    e_ENET_IF_GMII  = 0x00040000,   /**< GMII interface */
72    e_ENET_IF_RGMII = 0x00050000,   /**< RGMII interface */
73    e_ENET_IF_TBI   = 0x00060000,   /**< TBI interface */
74    e_ENET_IF_RTBI  = 0x00070000,   /**< RTBI interface */
75    e_ENET_IF_SGMII = 0x00080000,   /**< SGMII interface */
76    e_ENET_IF_XGMII = 0x00090000,   /**< XGMII interface */
77    e_ENET_IF_QSGMII= 0x000a0000    /**< QSGMII interface */
78} e_EnetInterface;
79
80/**************************************************************************//**
81 @Description   Ethernet Duplex Mode
82*//***************************************************************************/
83typedef enum e_EnetDuplexMode
84{
85    e_ENET_HALF_DUPLEX,             /**< Half-Duplex mode */
86    e_ENET_FULL_DUPLEX              /**< Full-Duplex mode */
87} e_EnetDuplexMode;
88
89/**************************************************************************//**
90 @Description   Ethernet Speed (nominal data rate)
91*//***************************************************************************/
92typedef enum e_EnetSpeed
93{
94    e_ENET_SPEED_10     = 10,       /**< 10 Mbps */
95    e_ENET_SPEED_100    = 100,      /**< 100 Mbps */
96    e_ENET_SPEED_1000   = 1000,     /**< 1000 Mbps = 1 Gbps */
97    e_ENET_SPEED_10000  = 10000     /**< 10000 Mbps = 10 Gbps */
98} e_EnetSpeed;
99
100/**************************************************************************//**
101 @Description   Ethernet mode (combination of MAC-PHY interface and speed)
102*//***************************************************************************/
103typedef enum e_EnetMode
104{
105    e_ENET_MODE_INVALID     = 0,                                        /**< Invalid Ethernet mode */
106    e_ENET_MODE_MII_10      = (e_ENET_IF_MII   | e_ENET_SPEED_10),      /**<    10 Mbps MII   */
107    e_ENET_MODE_MII_100     = (e_ENET_IF_MII   | e_ENET_SPEED_100),     /**<   100 Mbps MII   */
108    e_ENET_MODE_RMII_10     = (e_ENET_IF_RMII  | e_ENET_SPEED_10),      /**<    10 Mbps RMII  */
109    e_ENET_MODE_RMII_100    = (e_ENET_IF_RMII  | e_ENET_SPEED_100),     /**<   100 Mbps RMII  */
110    e_ENET_MODE_SMII_10     = (e_ENET_IF_SMII  | e_ENET_SPEED_10),      /**<    10 Mbps SMII  */
111    e_ENET_MODE_SMII_100    = (e_ENET_IF_SMII  | e_ENET_SPEED_100),     /**<   100 Mbps SMII  */
112    e_ENET_MODE_GMII_1000   = (e_ENET_IF_GMII  | e_ENET_SPEED_1000),    /**<  1000 Mbps GMII  */
113    e_ENET_MODE_RGMII_10    = (e_ENET_IF_RGMII | e_ENET_SPEED_10),      /**<    10 Mbps RGMII */
114    e_ENET_MODE_RGMII_100   = (e_ENET_IF_RGMII | e_ENET_SPEED_100),     /**<   100 Mbps RGMII */
115    e_ENET_MODE_RGMII_1000  = (e_ENET_IF_RGMII | e_ENET_SPEED_1000),    /**<  1000 Mbps RGMII */
116    e_ENET_MODE_TBI_1000    = (e_ENET_IF_TBI   | e_ENET_SPEED_1000),    /**<  1000 Mbps TBI   */
117    e_ENET_MODE_RTBI_1000   = (e_ENET_IF_RTBI  | e_ENET_SPEED_1000),    /**<  1000 Mbps RTBI  */
118    e_ENET_MODE_SGMII_10    = (e_ENET_IF_SGMII | e_ENET_SPEED_10),      /**<    10 Mbps SGMII */
119    e_ENET_MODE_SGMII_100   = (e_ENET_IF_SGMII | e_ENET_SPEED_100),     /**<   100 Mbps SGMII */
120    e_ENET_MODE_SGMII_1000  = (e_ENET_IF_SGMII | e_ENET_SPEED_1000),    /**<  1000 Mbps SGMII */
121    e_ENET_MODE_XGMII_10000 = (e_ENET_IF_XGMII | e_ENET_SPEED_10000),    /**< 10000 Mbps XGMII */
122    e_ENET_MODE_QSGMII_1000 = (e_ENET_IF_QSGMII| e_ENET_SPEED_1000)    /**<  1000 Mbps QSGMII */
123} e_EnetMode;
124
125
126#define IS_ENET_MODE_VALID(mode) \
127        (((mode) == e_ENET_MODE_MII_10     ) || \
128         ((mode) == e_ENET_MODE_MII_100    ) || \
129         ((mode) == e_ENET_MODE_RMII_10    ) || \
130         ((mode) == e_ENET_MODE_RMII_100   ) || \
131         ((mode) == e_ENET_MODE_SMII_10    ) || \
132         ((mode) == e_ENET_MODE_SMII_100   ) || \
133         ((mode) == e_ENET_MODE_GMII_1000  ) || \
134         ((mode) == e_ENET_MODE_RGMII_10   ) || \
135         ((mode) == e_ENET_MODE_RGMII_100  ) || \
136         ((mode) == e_ENET_MODE_RGMII_1000 ) || \
137         ((mode) == e_ENET_MODE_TBI_1000   ) || \
138         ((mode) == e_ENET_MODE_RTBI_1000  ) || \
139         ((mode) == e_ENET_MODE_SGMII_10   ) || \
140         ((mode) == e_ENET_MODE_SGMII_100  ) || \
141         ((mode) == e_ENET_MODE_SGMII_1000 ) || \
142         ((mode) == e_ENET_MODE_XGMII_10000) || \
143         ((mode) == e_ENET_MODE_QSGMII_1000))
144
145
146#define MAKE_ENET_MODE(_interface, _speed)     (e_EnetMode)((_interface) | (_speed))
147
148#define ENET_INTERFACE_FROM_MODE(mode)          (e_EnetInterface)((mode) & 0xFFFF0000)
149#define ENET_SPEED_FROM_MODE(mode)              (e_EnetSpeed)((mode) & 0x0000FFFF)
150
151
152
153#endif /* __ENET_EXT_H */
154
155