1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /*************************************************************************** 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2004-2008 SMSC 5*4882a593Smuzhiyun * Copyright (C) 2005-2008 ARM 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun ***************************************************************************/ 8*4882a593Smuzhiyun #ifndef __SMSC911X_H__ 9*4882a593Smuzhiyun #define __SMSC911X_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /*Chip ID*/ 12*4882a593Smuzhiyun #define LAN9115 0x01150000 13*4882a593Smuzhiyun #define LAN9116 0x01160000 14*4882a593Smuzhiyun #define LAN9117 0x01170000 15*4882a593Smuzhiyun #define LAN9118 0x01180000 16*4882a593Smuzhiyun #define LAN9215 0x115A0000 17*4882a593Smuzhiyun #define LAN9216 0x116A0000 18*4882a593Smuzhiyun #define LAN9217 0x117A0000 19*4882a593Smuzhiyun #define LAN9218 0x118A0000 20*4882a593Smuzhiyun #define LAN9210 0x92100000 21*4882a593Smuzhiyun #define LAN9211 0x92110000 22*4882a593Smuzhiyun #define LAN9220 0x92200000 23*4882a593Smuzhiyun #define LAN9221 0x92210000 24*4882a593Smuzhiyun #define LAN9250 0x92500000 25*4882a593Smuzhiyun #define LAN89218 0x218A0000 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define TX_FIFO_LOW_THRESHOLD ((u32)1600) 28*4882a593Smuzhiyun #define SMSC911X_EEPROM_SIZE ((u32)128) 29*4882a593Smuzhiyun #define USE_DEBUG 0 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* This is the maximum number of packets to be received every 32*4882a593Smuzhiyun * NAPI poll */ 33*4882a593Smuzhiyun #define SMSC_NAPI_WEIGHT 16 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* implements a PHY loopback test at initialisation time, to ensure a packet 36*4882a593Smuzhiyun * can be successfully looped back */ 37*4882a593Smuzhiyun #define USE_PHY_WORK_AROUND 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #if USE_DEBUG >= 1 40*4882a593Smuzhiyun #define SMSC_WARN(pdata, nlevel, fmt, args...) \ 41*4882a593Smuzhiyun netif_warn(pdata, nlevel, (pdata)->dev, \ 42*4882a593Smuzhiyun "%s: " fmt "\n", __func__, ##args) 43*4882a593Smuzhiyun #else 44*4882a593Smuzhiyun #define SMSC_WARN(pdata, nlevel, fmt, args...) \ 45*4882a593Smuzhiyun no_printk(fmt "\n", ##args) 46*4882a593Smuzhiyun #endif 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #if USE_DEBUG >= 2 49*4882a593Smuzhiyun #define SMSC_TRACE(pdata, nlevel, fmt, args...) \ 50*4882a593Smuzhiyun netif_info(pdata, nlevel, pdata->dev, fmt "\n", ##args) 51*4882a593Smuzhiyun #else 52*4882a593Smuzhiyun #define SMSC_TRACE(pdata, nlevel, fmt, args...) \ 53*4882a593Smuzhiyun no_printk(fmt "\n", ##args) 54*4882a593Smuzhiyun #endif 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #ifdef CONFIG_DEBUG_SPINLOCK 57*4882a593Smuzhiyun #define SMSC_ASSERT_MAC_LOCK(pdata) \ 58*4882a593Smuzhiyun lockdep_assert_held(&pdata->mac_lock) 59*4882a593Smuzhiyun #else 60*4882a593Smuzhiyun #define SMSC_ASSERT_MAC_LOCK(pdata) do {} while (0) 61*4882a593Smuzhiyun #endif /* CONFIG_DEBUG_SPINLOCK */ 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun /* SMSC911x registers and bitfields */ 64*4882a593Smuzhiyun #define RX_DATA_FIFO 0x00 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define TX_DATA_FIFO 0x20 67*4882a593Smuzhiyun #define TX_CMD_A_ON_COMP_ 0x80000000 68*4882a593Smuzhiyun #define TX_CMD_A_BUF_END_ALGN_ 0x03000000 69*4882a593Smuzhiyun #define TX_CMD_A_4_BYTE_ALGN_ 0x00000000 70*4882a593Smuzhiyun #define TX_CMD_A_16_BYTE_ALGN_ 0x01000000 71*4882a593Smuzhiyun #define TX_CMD_A_32_BYTE_ALGN_ 0x02000000 72*4882a593Smuzhiyun #define TX_CMD_A_DATA_OFFSET_ 0x001F0000 73*4882a593Smuzhiyun #define TX_CMD_A_FIRST_SEG_ 0x00002000 74*4882a593Smuzhiyun #define TX_CMD_A_LAST_SEG_ 0x00001000 75*4882a593Smuzhiyun #define TX_CMD_A_BUF_SIZE_ 0x000007FF 76*4882a593Smuzhiyun #define TX_CMD_B_PKT_TAG_ 0xFFFF0000 77*4882a593Smuzhiyun #define TX_CMD_B_ADD_CRC_DISABLE_ 0x00002000 78*4882a593Smuzhiyun #define TX_CMD_B_DISABLE_PADDING_ 0x00001000 79*4882a593Smuzhiyun #define TX_CMD_B_PKT_BYTE_LENGTH_ 0x000007FF 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #define RX_STATUS_FIFO 0x40 82*4882a593Smuzhiyun #define RX_STS_ES_ 0x00008000 83*4882a593Smuzhiyun #define RX_STS_LENGTH_ERR_ 0x00001000 84*4882a593Smuzhiyun #define RX_STS_MCAST_ 0x00000400 85*4882a593Smuzhiyun #define RX_STS_FRAME_TYPE_ 0x00000020 86*4882a593Smuzhiyun #define RX_STS_CRC_ERR_ 0x00000002 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun #define RX_STATUS_FIFO_PEEK 0x44 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define TX_STATUS_FIFO 0x48 91*4882a593Smuzhiyun #define TX_STS_ES_ 0x00008000 92*4882a593Smuzhiyun #define TX_STS_LOST_CARRIER_ 0x00000800 93*4882a593Smuzhiyun #define TX_STS_NO_CARRIER_ 0x00000400 94*4882a593Smuzhiyun #define TX_STS_LATE_COL_ 0x00000200 95*4882a593Smuzhiyun #define TX_STS_EXCESS_COL_ 0x00000100 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #define TX_STATUS_FIFO_PEEK 0x4C 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #define ID_REV 0x50 100*4882a593Smuzhiyun #define ID_REV_CHIP_ID_ 0xFFFF0000 101*4882a593Smuzhiyun #define ID_REV_REV_ID_ 0x0000FFFF 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #define INT_CFG 0x54 104*4882a593Smuzhiyun #define INT_CFG_INT_DEAS_ 0xFF000000 105*4882a593Smuzhiyun #define INT_CFG_INT_DEAS_CLR_ 0x00004000 106*4882a593Smuzhiyun #define INT_CFG_INT_DEAS_STS_ 0x00002000 107*4882a593Smuzhiyun #define INT_CFG_IRQ_INT_ 0x00001000 108*4882a593Smuzhiyun #define INT_CFG_IRQ_EN_ 0x00000100 109*4882a593Smuzhiyun #define INT_CFG_IRQ_POL_ 0x00000010 110*4882a593Smuzhiyun #define INT_CFG_IRQ_TYPE_ 0x00000001 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define INT_STS 0x58 113*4882a593Smuzhiyun #define INT_STS_SW_INT_ 0x80000000 114*4882a593Smuzhiyun #define INT_STS_TXSTOP_INT_ 0x02000000 115*4882a593Smuzhiyun #define INT_STS_RXSTOP_INT_ 0x01000000 116*4882a593Smuzhiyun #define INT_STS_RXDFH_INT_ 0x00800000 117*4882a593Smuzhiyun #define INT_STS_RXDF_INT_ 0x00400000 118*4882a593Smuzhiyun #define INT_STS_TX_IOC_ 0x00200000 119*4882a593Smuzhiyun #define INT_STS_RXD_INT_ 0x00100000 120*4882a593Smuzhiyun #define INT_STS_GPT_INT_ 0x00080000 121*4882a593Smuzhiyun #define INT_STS_PHY_INT_ 0x00040000 122*4882a593Smuzhiyun #define INT_STS_PME_INT_ 0x00020000 123*4882a593Smuzhiyun #define INT_STS_TXSO_ 0x00010000 124*4882a593Smuzhiyun #define INT_STS_RWT_ 0x00008000 125*4882a593Smuzhiyun #define INT_STS_RXE_ 0x00004000 126*4882a593Smuzhiyun #define INT_STS_TXE_ 0x00002000 127*4882a593Smuzhiyun #define INT_STS_TDFU_ 0x00000800 128*4882a593Smuzhiyun #define INT_STS_TDFO_ 0x00000400 129*4882a593Smuzhiyun #define INT_STS_TDFA_ 0x00000200 130*4882a593Smuzhiyun #define INT_STS_TSFF_ 0x00000100 131*4882a593Smuzhiyun #define INT_STS_TSFL_ 0x00000080 132*4882a593Smuzhiyun #define INT_STS_RXDF_ 0x00000040 133*4882a593Smuzhiyun #define INT_STS_RDFL_ 0x00000020 134*4882a593Smuzhiyun #define INT_STS_RSFF_ 0x00000010 135*4882a593Smuzhiyun #define INT_STS_RSFL_ 0x00000008 136*4882a593Smuzhiyun #define INT_STS_GPIO2_INT_ 0x00000004 137*4882a593Smuzhiyun #define INT_STS_GPIO1_INT_ 0x00000002 138*4882a593Smuzhiyun #define INT_STS_GPIO0_INT_ 0x00000001 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun #define INT_EN 0x5C 141*4882a593Smuzhiyun #define INT_EN_SW_INT_EN_ 0x80000000 142*4882a593Smuzhiyun #define INT_EN_TXSTOP_INT_EN_ 0x02000000 143*4882a593Smuzhiyun #define INT_EN_RXSTOP_INT_EN_ 0x01000000 144*4882a593Smuzhiyun #define INT_EN_RXDFH_INT_EN_ 0x00800000 145*4882a593Smuzhiyun #define INT_EN_TIOC_INT_EN_ 0x00200000 146*4882a593Smuzhiyun #define INT_EN_RXD_INT_EN_ 0x00100000 147*4882a593Smuzhiyun #define INT_EN_GPT_INT_EN_ 0x00080000 148*4882a593Smuzhiyun #define INT_EN_PHY_INT_EN_ 0x00040000 149*4882a593Smuzhiyun #define INT_EN_PME_INT_EN_ 0x00020000 150*4882a593Smuzhiyun #define INT_EN_TXSO_EN_ 0x00010000 151*4882a593Smuzhiyun #define INT_EN_RWT_EN_ 0x00008000 152*4882a593Smuzhiyun #define INT_EN_RXE_EN_ 0x00004000 153*4882a593Smuzhiyun #define INT_EN_TXE_EN_ 0x00002000 154*4882a593Smuzhiyun #define INT_EN_TDFU_EN_ 0x00000800 155*4882a593Smuzhiyun #define INT_EN_TDFO_EN_ 0x00000400 156*4882a593Smuzhiyun #define INT_EN_TDFA_EN_ 0x00000200 157*4882a593Smuzhiyun #define INT_EN_TSFF_EN_ 0x00000100 158*4882a593Smuzhiyun #define INT_EN_TSFL_EN_ 0x00000080 159*4882a593Smuzhiyun #define INT_EN_RXDF_EN_ 0x00000040 160*4882a593Smuzhiyun #define INT_EN_RDFL_EN_ 0x00000020 161*4882a593Smuzhiyun #define INT_EN_RSFF_EN_ 0x00000010 162*4882a593Smuzhiyun #define INT_EN_RSFL_EN_ 0x00000008 163*4882a593Smuzhiyun #define INT_EN_GPIO2_INT_ 0x00000004 164*4882a593Smuzhiyun #define INT_EN_GPIO1_INT_ 0x00000002 165*4882a593Smuzhiyun #define INT_EN_GPIO0_INT_ 0x00000001 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun #define BYTE_TEST 0x64 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun #define FIFO_INT 0x68 170*4882a593Smuzhiyun #define FIFO_INT_TX_AVAIL_LEVEL_ 0xFF000000 171*4882a593Smuzhiyun #define FIFO_INT_TX_STS_LEVEL_ 0x00FF0000 172*4882a593Smuzhiyun #define FIFO_INT_RX_AVAIL_LEVEL_ 0x0000FF00 173*4882a593Smuzhiyun #define FIFO_INT_RX_STS_LEVEL_ 0x000000FF 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun #define RX_CFG 0x6C 176*4882a593Smuzhiyun #define RX_CFG_RX_END_ALGN_ 0xC0000000 177*4882a593Smuzhiyun #define RX_CFG_RX_END_ALGN4_ 0x00000000 178*4882a593Smuzhiyun #define RX_CFG_RX_END_ALGN16_ 0x40000000 179*4882a593Smuzhiyun #define RX_CFG_RX_END_ALGN32_ 0x80000000 180*4882a593Smuzhiyun #define RX_CFG_RX_DMA_CNT_ 0x0FFF0000 181*4882a593Smuzhiyun #define RX_CFG_RX_DUMP_ 0x00008000 182*4882a593Smuzhiyun #define RX_CFG_RXDOFF_ 0x00001F00 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun #define TX_CFG 0x70 185*4882a593Smuzhiyun #define TX_CFG_TXS_DUMP_ 0x00008000 186*4882a593Smuzhiyun #define TX_CFG_TXD_DUMP_ 0x00004000 187*4882a593Smuzhiyun #define TX_CFG_TXSAO_ 0x00000004 188*4882a593Smuzhiyun #define TX_CFG_TX_ON_ 0x00000002 189*4882a593Smuzhiyun #define TX_CFG_STOP_TX_ 0x00000001 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun #define HW_CFG 0x74 192*4882a593Smuzhiyun #define HW_CFG_TTM_ 0x00200000 193*4882a593Smuzhiyun #define HW_CFG_SF_ 0x00100000 194*4882a593Smuzhiyun #define HW_CFG_TX_FIF_SZ_ 0x000F0000 195*4882a593Smuzhiyun #define HW_CFG_TR_ 0x00003000 196*4882a593Smuzhiyun #define HW_CFG_SRST_ 0x00000001 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /* only available on 115/117 */ 199*4882a593Smuzhiyun #define HW_CFG_PHY_CLK_SEL_ 0x00000060 200*4882a593Smuzhiyun #define HW_CFG_PHY_CLK_SEL_INT_PHY_ 0x00000000 201*4882a593Smuzhiyun #define HW_CFG_PHY_CLK_SEL_EXT_PHY_ 0x00000020 202*4882a593Smuzhiyun #define HW_CFG_PHY_CLK_SEL_CLK_DIS_ 0x00000040 203*4882a593Smuzhiyun #define HW_CFG_SMI_SEL_ 0x00000010 204*4882a593Smuzhiyun #define HW_CFG_EXT_PHY_DET_ 0x00000008 205*4882a593Smuzhiyun #define HW_CFG_EXT_PHY_EN_ 0x00000004 206*4882a593Smuzhiyun #define HW_CFG_SRST_TO_ 0x00000002 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* only available on 116/118 */ 209*4882a593Smuzhiyun #define HW_CFG_32_16_BIT_MODE_ 0x00000004 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun #define RX_DP_CTRL 0x78 212*4882a593Smuzhiyun #define RX_DP_CTRL_RX_FFWD_ 0x80000000 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun #define RX_FIFO_INF 0x7C 215*4882a593Smuzhiyun #define RX_FIFO_INF_RXSUSED_ 0x00FF0000 216*4882a593Smuzhiyun #define RX_FIFO_INF_RXDUSED_ 0x0000FFFF 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun #define TX_FIFO_INF 0x80 219*4882a593Smuzhiyun #define TX_FIFO_INF_TSUSED_ 0x00FF0000 220*4882a593Smuzhiyun #define TX_FIFO_INF_TDFREE_ 0x0000FFFF 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun #define PMT_CTRL 0x84 223*4882a593Smuzhiyun #define PMT_CTRL_PM_MODE_ 0x00003000 224*4882a593Smuzhiyun #define PMT_CTRL_PM_MODE_D0_ 0x00000000 225*4882a593Smuzhiyun #define PMT_CTRL_PM_MODE_D1_ 0x00001000 226*4882a593Smuzhiyun #define PMT_CTRL_PM_MODE_D2_ 0x00002000 227*4882a593Smuzhiyun #define PMT_CTRL_PM_MODE_D3_ 0x00003000 228*4882a593Smuzhiyun #define PMT_CTRL_PHY_RST_ 0x00000400 229*4882a593Smuzhiyun #define PMT_CTRL_WOL_EN_ 0x00000200 230*4882a593Smuzhiyun #define PMT_CTRL_ED_EN_ 0x00000100 231*4882a593Smuzhiyun #define PMT_CTRL_PME_TYPE_ 0x00000040 232*4882a593Smuzhiyun #define PMT_CTRL_WUPS_ 0x00000030 233*4882a593Smuzhiyun #define PMT_CTRL_WUPS_NOWAKE_ 0x00000000 234*4882a593Smuzhiyun #define PMT_CTRL_WUPS_ED_ 0x00000010 235*4882a593Smuzhiyun #define PMT_CTRL_WUPS_WOL_ 0x00000020 236*4882a593Smuzhiyun #define PMT_CTRL_WUPS_MULTI_ 0x00000030 237*4882a593Smuzhiyun #define PMT_CTRL_PME_IND_ 0x00000008 238*4882a593Smuzhiyun #define PMT_CTRL_PME_POL_ 0x00000004 239*4882a593Smuzhiyun #define PMT_CTRL_PME_EN_ 0x00000002 240*4882a593Smuzhiyun #define PMT_CTRL_READY_ 0x00000001 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun #define GPIO_CFG 0x88 243*4882a593Smuzhiyun #define GPIO_CFG_LED3_EN_ 0x40000000 244*4882a593Smuzhiyun #define GPIO_CFG_LED2_EN_ 0x20000000 245*4882a593Smuzhiyun #define GPIO_CFG_LED1_EN_ 0x10000000 246*4882a593Smuzhiyun #define GPIO_CFG_GPIO2_INT_POL_ 0x04000000 247*4882a593Smuzhiyun #define GPIO_CFG_GPIO1_INT_POL_ 0x02000000 248*4882a593Smuzhiyun #define GPIO_CFG_GPIO0_INT_POL_ 0x01000000 249*4882a593Smuzhiyun #define GPIO_CFG_EEPR_EN_ 0x00700000 250*4882a593Smuzhiyun #define GPIO_CFG_GPIOBUF2_ 0x00040000 251*4882a593Smuzhiyun #define GPIO_CFG_GPIOBUF1_ 0x00020000 252*4882a593Smuzhiyun #define GPIO_CFG_GPIOBUF0_ 0x00010000 253*4882a593Smuzhiyun #define GPIO_CFG_GPIODIR2_ 0x00000400 254*4882a593Smuzhiyun #define GPIO_CFG_GPIODIR1_ 0x00000200 255*4882a593Smuzhiyun #define GPIO_CFG_GPIODIR0_ 0x00000100 256*4882a593Smuzhiyun #define GPIO_CFG_GPIOD4_ 0x00000020 257*4882a593Smuzhiyun #define GPIO_CFG_GPIOD3_ 0x00000010 258*4882a593Smuzhiyun #define GPIO_CFG_GPIOD2_ 0x00000004 259*4882a593Smuzhiyun #define GPIO_CFG_GPIOD1_ 0x00000002 260*4882a593Smuzhiyun #define GPIO_CFG_GPIOD0_ 0x00000001 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun #define GPT_CFG 0x8C 263*4882a593Smuzhiyun #define GPT_CFG_TIMER_EN_ 0x20000000 264*4882a593Smuzhiyun #define GPT_CFG_GPT_LOAD_ 0x0000FFFF 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun #define GPT_CNT 0x90 267*4882a593Smuzhiyun #define GPT_CNT_GPT_CNT_ 0x0000FFFF 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun #define WORD_SWAP 0x98 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun #define FREE_RUN 0x9C 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun #define RX_DROP 0xA0 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun #define MAC_CSR_CMD 0xA4 276*4882a593Smuzhiyun #define MAC_CSR_CMD_CSR_BUSY_ 0x80000000 277*4882a593Smuzhiyun #define MAC_CSR_CMD_R_NOT_W_ 0x40000000 278*4882a593Smuzhiyun #define MAC_CSR_CMD_CSR_ADDR_ 0x000000FF 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun #define MAC_CSR_DATA 0xA8 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun #define AFC_CFG 0xAC 283*4882a593Smuzhiyun #define AFC_CFG_AFC_HI_ 0x00FF0000 284*4882a593Smuzhiyun #define AFC_CFG_AFC_LO_ 0x0000FF00 285*4882a593Smuzhiyun #define AFC_CFG_BACK_DUR_ 0x000000F0 286*4882a593Smuzhiyun #define AFC_CFG_FCMULT_ 0x00000008 287*4882a593Smuzhiyun #define AFC_CFG_FCBRD_ 0x00000004 288*4882a593Smuzhiyun #define AFC_CFG_FCADD_ 0x00000002 289*4882a593Smuzhiyun #define AFC_CFG_FCANY_ 0x00000001 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun #define E2P_CMD 0xB0 292*4882a593Smuzhiyun #define E2P_CMD_EPC_BUSY_ 0x80000000 293*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_ 0x70000000 294*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_READ_ 0x00000000 295*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_EWDS_ 0x10000000 296*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_EWEN_ 0x20000000 297*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_WRITE_ 0x30000000 298*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_WRAL_ 0x40000000 299*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_ERASE_ 0x50000000 300*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_ERAL_ 0x60000000 301*4882a593Smuzhiyun #define E2P_CMD_EPC_CMD_RELOAD_ 0x70000000 302*4882a593Smuzhiyun #define E2P_CMD_EPC_TIMEOUT_ 0x00000200 303*4882a593Smuzhiyun #define E2P_CMD_MAC_ADDR_LOADED_ 0x00000100 304*4882a593Smuzhiyun #define E2P_CMD_EPC_ADDR_ 0x000000FF 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun #define E2P_DATA 0xB4 307*4882a593Smuzhiyun #define E2P_DATA_EEPROM_DATA_ 0x000000FF 308*4882a593Smuzhiyun #define LAN_REGISTER_EXTENT 0x00000100 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun #define RESET_CTL 0x1F8 311*4882a593Smuzhiyun #define RESET_CTL_DIGITAL_RST_ 0x00000001 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* 314*4882a593Smuzhiyun * MAC Control and Status Register (Indirect Address) 315*4882a593Smuzhiyun * Offset (through the MAC_CSR CMD and DATA port) 316*4882a593Smuzhiyun */ 317*4882a593Smuzhiyun #define MAC_CR 0x01 318*4882a593Smuzhiyun #define MAC_CR_RXALL_ 0x80000000 319*4882a593Smuzhiyun #define MAC_CR_HBDIS_ 0x10000000 320*4882a593Smuzhiyun #define MAC_CR_RCVOWN_ 0x00800000 321*4882a593Smuzhiyun #define MAC_CR_LOOPBK_ 0x00200000 322*4882a593Smuzhiyun #define MAC_CR_FDPX_ 0x00100000 323*4882a593Smuzhiyun #define MAC_CR_MCPAS_ 0x00080000 324*4882a593Smuzhiyun #define MAC_CR_PRMS_ 0x00040000 325*4882a593Smuzhiyun #define MAC_CR_INVFILT_ 0x00020000 326*4882a593Smuzhiyun #define MAC_CR_PASSBAD_ 0x00010000 327*4882a593Smuzhiyun #define MAC_CR_HFILT_ 0x00008000 328*4882a593Smuzhiyun #define MAC_CR_HPFILT_ 0x00002000 329*4882a593Smuzhiyun #define MAC_CR_LCOLL_ 0x00001000 330*4882a593Smuzhiyun #define MAC_CR_BCAST_ 0x00000800 331*4882a593Smuzhiyun #define MAC_CR_DISRTY_ 0x00000400 332*4882a593Smuzhiyun #define MAC_CR_PADSTR_ 0x00000100 333*4882a593Smuzhiyun #define MAC_CR_BOLMT_MASK_ 0x000000C0 334*4882a593Smuzhiyun #define MAC_CR_DFCHK_ 0x00000020 335*4882a593Smuzhiyun #define MAC_CR_TXEN_ 0x00000008 336*4882a593Smuzhiyun #define MAC_CR_RXEN_ 0x00000004 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun #define ADDRH 0x02 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun #define ADDRL 0x03 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun #define HASHH 0x04 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun #define HASHL 0x05 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun #define MII_ACC 0x06 347*4882a593Smuzhiyun #define MII_ACC_PHY_ADDR_ 0x0000F800 348*4882a593Smuzhiyun #define MII_ACC_MIIRINDA_ 0x000007C0 349*4882a593Smuzhiyun #define MII_ACC_MII_WRITE_ 0x00000002 350*4882a593Smuzhiyun #define MII_ACC_MII_BUSY_ 0x00000001 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun #define MII_DATA 0x07 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun #define FLOW 0x08 355*4882a593Smuzhiyun #define FLOW_FCPT_ 0xFFFF0000 356*4882a593Smuzhiyun #define FLOW_FCPASS_ 0x00000004 357*4882a593Smuzhiyun #define FLOW_FCEN_ 0x00000002 358*4882a593Smuzhiyun #define FLOW_FCBSY_ 0x00000001 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun #define VLAN1 0x09 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun #define VLAN2 0x0A 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun #define WUFF 0x0B 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun #define WUCSR 0x0C 367*4882a593Smuzhiyun #define WUCSR_GUE_ 0x00000200 368*4882a593Smuzhiyun #define WUCSR_WUFR_ 0x00000040 369*4882a593Smuzhiyun #define WUCSR_MPR_ 0x00000020 370*4882a593Smuzhiyun #define WUCSR_WAKE_EN_ 0x00000004 371*4882a593Smuzhiyun #define WUCSR_MPEN_ 0x00000002 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /* 374*4882a593Smuzhiyun * Phy definitions (vendor-specific) 375*4882a593Smuzhiyun */ 376*4882a593Smuzhiyun #define LAN9118_PHY_ID 0x00C0001C 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun #define MII_INTSTS 0x1D 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun #define MII_INTMSK 0x1E 381*4882a593Smuzhiyun #define PHY_INTMSK_AN_RCV_ (1 << 1) 382*4882a593Smuzhiyun #define PHY_INTMSK_PDFAULT_ (1 << 2) 383*4882a593Smuzhiyun #define PHY_INTMSK_AN_ACK_ (1 << 3) 384*4882a593Smuzhiyun #define PHY_INTMSK_LNKDOWN_ (1 << 4) 385*4882a593Smuzhiyun #define PHY_INTMSK_RFAULT_ (1 << 5) 386*4882a593Smuzhiyun #define PHY_INTMSK_AN_COMP_ (1 << 6) 387*4882a593Smuzhiyun #define PHY_INTMSK_ENERGYON_ (1 << 7) 388*4882a593Smuzhiyun #define PHY_INTMSK_DEFAULT_ (PHY_INTMSK_ENERGYON_ | \ 389*4882a593Smuzhiyun PHY_INTMSK_AN_COMP_ | \ 390*4882a593Smuzhiyun PHY_INTMSK_RFAULT_ | \ 391*4882a593Smuzhiyun PHY_INTMSK_LNKDOWN_) 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun #define ADVERTISE_PAUSE_ALL (ADVERTISE_PAUSE_CAP | \ 394*4882a593Smuzhiyun ADVERTISE_PAUSE_ASYM) 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun #define LPA_PAUSE_ALL (LPA_PAUSE_CAP | \ 397*4882a593Smuzhiyun LPA_PAUSE_ASYM) 398*4882a593Smuzhiyun 399*4882a593Smuzhiyun /* 400*4882a593Smuzhiyun * Provide hooks to let the arch add to the initialisation procedure 401*4882a593Smuzhiyun * and to override the source of the MAC address. 402*4882a593Smuzhiyun */ 403*4882a593Smuzhiyun #define SMSC_INITIALIZE() do {} while (0) 404*4882a593Smuzhiyun #define smsc_get_mac(dev) smsc911x_read_mac_address((dev)) 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun #ifdef CONFIG_SMSC911X_ARCH_HOOKS 407*4882a593Smuzhiyun #include <asm/smsc911x.h> 408*4882a593Smuzhiyun #endif 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun #include <linux/smscphy.h> 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun #endif /* __SMSC911X_H__ */ 413