xiuos/Ubiquitous/XiZi_AIoT/services/drivers/imx6q-sabrelite/enet/enet_private.h

246 lines
6.7 KiB
C
Executable File

/*
* 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
////////////////////////////////////////////////////////////////////////////////