/* * Copyright (c) 2011-2012, Freescale Semiconductor, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, this list * of conditions and the following disclaimer. * * o 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. * * o Neither the name of Freescale Semiconductor, Inc. nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * 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 HOLDER 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. */ #ifndef __ENET_PRIVATE_H__ #define __ENET_PRIVATE_H__ #include "enet.h" //////////////////////////////////////////////////////////////////////////////// // Definitions //////////////////////////////////////////////////////////////////////////////// // clang-format off #define NUM_OF_ETH_DEVS 1 #define ENET_RX_FRAMES 8 #define ENET_FRAME_LEN (1540+4) /* the defines to active transmit or receive frame */ #define ENET_RX_TX_ACTIVE BM_ENET_TDAR_TDAR //BM_ENET_RDAR_RDAR /* the defines of Ethernet Control register */ #define ENET_RESET BM_ENET_ECR_RESET #define ENET_ETHER_EN BM_ENET_ECR_ETHEREN #define ENET_ETHER_SPEED_1000M (1<<5) #define ENET_ETHER_LITTLE_ENDIAN (1<<8) /* the defins of MII operation */ #define ENET_MII_ST 0x40000000 #define ENET_MII_OP_OFF BP_ENET_MMFR_OP #define ENET_MII_OP_MASK 0x03 #define ENET_MII_OP_RD 0x02 #define ENET_MII_OP_WR 0x01 #define ENET_MII_PA_OFF BP_ENET_MMFR_PA #define ENET_MII_PA_MASK 0xFF #define ENET_MII_RA_OFF 18 #define ENET_MII_RA_MASK 0xFF #define ENET_MII_TA 0x00020000 #define ENET_MII_DATA_OFF BP_ENET_MMFR_DATA #define ENET_MII_DATA_MASK 0x0000FFFF #define ENET_MII_FRAME ( ENET_MII_ST | ENET_MII_TA ) #define ENET_MII_OP(x) ( ((x) & ENET_MII_OP_MASK) << ENET_MII_OP_OFF ) #define ENET_MII_PA(pa) (((pa)& ENET_MII_PA_MASK) << ENET_MII_PA_OFF) #define ENET_MII_RA(ra) (((ra)& ENET_MII_RA_MASK) << ENET_MII_RA_OFF) #define ENET_MII_SET_DATA(v) (((v) & ENET_MII_DATA_MASK) << ENET_MII_DATA_OFF) #define ENET_MII_GET_DATA(v) (((v) >> ENET_MII_DATA_OFF) & ENET_MII_DATA_MASK ) #define ENET_MII_READ(pa, ra) ( ( ENET_MII_FRAME | ENET_MII_OP(ENET_MII_OP_RD) )|\ ENET_MII_PA(pa) | ENET_MII_RA(ra) ) #define ENET_MII_WRITE(pa, ra, v) ( ENET_MII_FRAME | ENET_MII_OP(ENET_MII_OP_WR)|\ ENET_MII_PA(pa) | ENET_MII_RA(ra) |ENET_MII_SET_DATA(v) ) #define MII_SPEED_SHIFT 1 #define MII_SPEED_MASK 0x0000003F #define MII_SPEED(x) ( (((((x)+499999)/2500000)&(MII_SPEED_MASK))>>1)<<(MII_SPEED_SHIFT) ) /*the defines of MIB control */ #define ENET_MIB_DISABLE BM_ENET_MIBC_MIB_DIS /*the defines of Receive Control*/ #define ENET_RCR_FCE BM_ENET_RCR_FCE #define ENET_RCR_BC_REJ BM_ENET_RCR_BC_REJ #define ENET_RCR_PROM BM_ENET_RCR_PROM #define ENET_RCR_MII_MODE (BM_ENET_RCR_MII_MODE) #define ENET_RCR_RGMII_EN (1<<6) /*RGMII enable/disable */ #define ENET_RCR_RMII_MODE (BM_ENET_RCR_RMII_MODE) /*RMII mode:1->10M, 0->100M */ /*the defines of Transmit Control*/ #define ENET_TCR_RFC_PAUSE BM_ENET_TCR_RFC_PAUSE #define ENET_TCR_FDEN BM_ENET_TCR_FDEN /*the defines of buffer description*/ #define ENET_BD_RX_NUM 8 #define ENET_BD_TX_NUM 2 #define BD_RX_ST_EMPTY 0x8000 #define BD_RX_ST_WRAP 0x2000 #define BD_RX_ST_LAST 0x0800 #define BD_RX_ST_ERRS 0x0037 #define BD_TX_ST_RDY 0x8000 #define BD_TX_ST_WRAP 0x2000 #define BD_TX_ST_LAST 0x0800 #define BD_TX_ST_TC 0x0400 #define BD_TX_ST_ABC 0x0200 //! @brief Data structure for Tx/Rx buffer descriptor typedef struct imx_enet_bd { unsigned short int length; /*packet size */ unsigned short int status; /*control & statue of this buffer description */ unsigned char *data; /*frame buffer address */ } imx_enet_bd_t; #define MXC_ENET_PRIVATE(x) ((imx_enet_priv_t *)(x)->driver_private) /*The defines of the status field of imx_enet_priv_t */ #define ENET_STATUS_LINK_ON 0x80000000 #define ENET_STATUS_FULL_DPLX 0x40000000 #define ENET_STATUS_AUTO_NEG 0x20000000 #define ENET_STATUS_10M 0x8000000 #define ENET_STATUS_100M 0x10000000 #define ENET_STATUS_1000M 0x20000000 enum { PHY_LAN8700_ID = 0x0007c0c0, PHY_LAN8720_ID = 0x0007c0f0, PHY_AR8031_ID = 0x004dd070, PHY_KSZ9021RN_ID = 0x00221610 }; #define PHY_CTRL_REG 0x00 #define PHY_CTRL_RESET 0x8000 #define PHY_CTRL_AUTO_NEG 0x1000 #define PHY_CTRL_FULL_DPLX 0x0100 #define PHY_STATUS_REG 0x01 #define PHY_STATUS_LINK_ST 0x0004 #define PHY_IDENTIFY_1 0x02 #define PHY_IDENTIFY_2 0x03 #define PHY_ID1_SHIFT 16 #define PHY_ID1_MASK 0xFFFF #define PHY_ID2_SHIFT 0 #define PHY_ID2_MASK 0xFFFF #define PHY_MODE_NUM 0x03F0 #define PHY_REV_NUM 0x000F #define PHY_DIAG_REG 0x12 #define PHY_DIAG_DPLX 0x0800 #define PHY_DIAG_RATE 0x0400 #define PHY_MODE_REG 0x15 #define PHY_LED_SEL 0x200 #define PHY_AUTO_NEG_REG 0x5 #define PHY_AUTO_10BASET 0x20 #define PHY_AUTO_10BASET_DPLX 0x40 #define PHY_AUTO_100BASET 0x80 #define PHY_AUTO_100BASET_DPLX 0x100 #define PHY_AUTO_NEG_EXP_REG 0x6 #define PHY_AUTO_NEG_NEW_PAGE 0x2 #define PHY_AUTO_NEG_CAP 0x1 #define PHY_INT_SRC_REG 29 #define PHY_INT_AUTO_NEG 0x40 #define ENET_COMMON_TICK 2 #define ENET_COMMON_TIMEOUT (1000*1000) #define ENET_MII_TICK 2 #define ENET_MII_TIMEOUT (1000*1000) // clang-format on #endif //__ENET_PRIVATE_H__ //////////////////////////////////////////////////////////////////////////////// // EOF ////////////////////////////////////////////////////////////////////////////////