1*429168eaSwdenk /*********************************************************************** 2*429168eaSwdenk * 3*429168eaSwdenk * Copyright (C) 2004 by FS Forth-Systeme GmbH. 4*429168eaSwdenk * All rights reserved. 5*429168eaSwdenk * 6*429168eaSwdenk * $Id: ns9750_eth.h,v 1.2 2004/02/24 13:25:39 mpietrek Exp $ 7*429168eaSwdenk * @Author: Markus Pietrek 8*429168eaSwdenk * @References: [1] NS9750 Hardware Reference, December 2003 9*429168eaSwdenk * [2] Intel LXT971 Datasheet #249414 Rev. 02 10*429168eaSwdenk * [3] NS7520 Linux Ethernet Driver 11*429168eaSwdenk * 12*429168eaSwdenk * This program is free software; you can redistribute it and/or 13*429168eaSwdenk * modify it under the terms of the GNU General Public License as 14*429168eaSwdenk * published by the Free Software Foundation; either version 2 of 15*429168eaSwdenk * the License, or (at your option) any later version. 16*429168eaSwdenk * 17*429168eaSwdenk * This program is distributed in the hope that it will be useful, 18*429168eaSwdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 19*429168eaSwdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20*429168eaSwdenk * GNU General Public License for more details. 21*429168eaSwdenk * 22*429168eaSwdenk * You should have received a copy of the GNU General Public License 23*429168eaSwdenk * along with this program; if not, write to the Free Software 24*429168eaSwdenk * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 25*429168eaSwdenk * MA 02111-1307 USA 26*429168eaSwdenk * 27*429168eaSwdenk ***********************************************************************/ 28*429168eaSwdenk 29*429168eaSwdenk #ifndef __LXT971A_H__ 30*429168eaSwdenk #define __LXT971A_H__ 31*429168eaSwdenk 32*429168eaSwdenk /* PHY definitions (LXT971A) [2] */ 33*429168eaSwdenk #define PHY_COMMON_CTRL (0x00) 34*429168eaSwdenk #define PHY_COMMON_STAT (0x01) 35*429168eaSwdenk #define PHY_COMMON_ID1 (0x02) 36*429168eaSwdenk #define PHY_COMMON_ID2 (0x03) 37*429168eaSwdenk #define PHY_COMMON_AUTO_ADV (0x04) 38*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB (0x05) 39*429168eaSwdenk #define PHY_COMMON_AUTO_EXP (0x06) 40*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT (0x07) 41*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN (0x08) 42*429168eaSwdenk #define PHY_LXT971_PORT_CFG (0x10) 43*429168eaSwdenk #define PHY_LXT971_STAT2 (0x11) 44*429168eaSwdenk #define PHY_LXT971_INT_ENABLE (0x12) 45*429168eaSwdenk #define PHY_LXT971_INT_STATUS (0x13) 46*429168eaSwdenk #define PHY_LXT971_LED_CFG (0x14) 47*429168eaSwdenk #define PHY_LXT971_DIG_CFG (0x1A) 48*429168eaSwdenk #define PHY_LXT971_TX_CTRL (0x1E) 49*429168eaSwdenk 50*429168eaSwdenk /* CTRL PHY Control Register Bit Fields */ 51*429168eaSwdenk #define PHY_COMMON_CTRL_RESET (0x8000) 52*429168eaSwdenk #define PHY_COMMON_CTRL_LOOPBACK (0x4000) 53*429168eaSwdenk #define PHY_COMMON_CTRL_SPD_MA (0x2040) 54*429168eaSwdenk #define PHY_COMMON_CTRL_SPD_10 (0x0000) 55*429168eaSwdenk #define PHY_COMMON_CTRL_SPD_100 (0x2000) 56*429168eaSwdenk #define PHY_COMMON_CTRL_SPD_1000 (0x0040) 57*429168eaSwdenk #define PHY_COMMON_CTRL_SPD_RES (0x2040) 58*429168eaSwdenk #define PHY_COMMON_CTRL_AUTO_NEG (0x1000) 59*429168eaSwdenk #define PHY_COMMON_CTRL_POWER_DN (0x0800) 60*429168eaSwdenk #define PHY_COMMON_CTRL_ISOLATE (0x0400) 61*429168eaSwdenk #define PHY_COMMON_CTRL_RES_AUTO (0x0200) 62*429168eaSwdenk #define PHY_COMMON_CTRL_DUPLEX (0x0100) 63*429168eaSwdenk #define PHY_COMMON_CTRL_COL_TEST (0x0080) 64*429168eaSwdenk #define PHY_COMMON_CTRL_RES1 (0x003F) 65*429168eaSwdenk 66*429168eaSwdenk /* STAT Status Register Bit Fields */ 67*429168eaSwdenk #define PHY_COMMON_STAT_100BT4 (0x8000) 68*429168eaSwdenk #define PHY_COMMON_STAT_100BXFD (0x4000) 69*429168eaSwdenk #define PHY_COMMON_STAT_100BXHD (0x2000) 70*429168eaSwdenk #define PHY_COMMON_STAT_10BTFD (0x1000) 71*429168eaSwdenk #define PHY_COMMON_STAT_10BTHD (0x0800) 72*429168eaSwdenk #define PHY_COMMON_STAT_100BT2FD (0x0400) 73*429168eaSwdenk #define PHY_COMMON_STAT_100BT2HD (0x0200) 74*429168eaSwdenk #define PHY_COMMON_STAT_EXT_STAT (0x0100) 75*429168eaSwdenk #define PHY_COMMON_STAT_RES1 (0x0080) 76*429168eaSwdenk #define PHY_COMMON_STAT_MF_PSUP (0x0040) 77*429168eaSwdenk #define PHY_COMMON_STAT_AN_COMP (0x0020) 78*429168eaSwdenk #define PHY_COMMON_STAT_RMT_FLT (0x0010) 79*429168eaSwdenk #define PHY_COMMON_STAT_AN_CAP (0x0008) 80*429168eaSwdenk #define PHY_COMMON_STAT_LNK_STAT (0x0004) 81*429168eaSwdenk #define PHY_COMMON_STAT_JAB_DTCT (0x0002) 82*429168eaSwdenk #define PHY_COMMON_STAT_EXT_CAP (0x0001) 83*429168eaSwdenk 84*429168eaSwdenk /* AUTO_ADV Auto-neg Advert Register Bit Fields */ 85*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_NP (0x8000) 86*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_RES1 (0x4000) 87*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_RMT_FLT (0x2000) 88*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_RES2 (0x1000) 89*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_AS_PAUSE (0x0800) 90*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_PAUSE (0x0400) 91*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_100BT4 (0x0200) 92*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_100BTXFD (0x0100) 93*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_100BTX (0x0080) 94*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_10BTFD (0x0040) 95*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_10BT (0x0020) 96*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_SEL_FLD_MA (0x001F) 97*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_802_9 (0x0002) 98*429168eaSwdenk #define PHY_COMMON_AUTO_ADV_802_3 (0x0001) 99*429168eaSwdenk 100*429168eaSwdenk /* AUTO_LNKB Auto-neg Link Ability Register Bit Fields */ 101*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_NP (0x8000) 102*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_ACK (0x4000) 103*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_RMT_FLT (0x2000) 104*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_RES2 (0x1000) 105*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_AS_PAUSE (0x0800) 106*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_PAUSE (0x0400) 107*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_100BT4 (0x0200) 108*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_100BTXFD (0x0100) 109*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_100BTX (0x0080) 110*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_10BTFD (0x0040) 111*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_10BT (0x0020) 112*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_SEL_FLD_MA (0x001F) 113*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_802_9 (0x0002) 114*429168eaSwdenk #define PHY_COMMON_AUTO_LNKB_802_3 (0x0001) 115*429168eaSwdenk 116*429168eaSwdenk /* AUTO_EXP Auto-neg Expansion Register Bit Fields */ 117*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_RES1 (0xFFC0) 118*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_BASE_PAGE (0x0020) 119*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_PAR_DT_FLT (0x0010) 120*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_LNK_NP_CAP (0x0008) 121*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_NP_CAP (0x0004) 122*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_PAGE_REC (0x0002) 123*429168eaSwdenk #define PHY_COMMON_AUTO_EXP_LNK_AN_CAP (0x0001) 124*429168eaSwdenk 125*429168eaSwdenk /* AUTO_NEXT Aut-neg Next Page Tx Register Bit Fields */ 126*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT_NP (0x8000) 127*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT_RES1 (0x4000) 128*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT_MSG_PAGE (0x2000) 129*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT_ACK_2 (0x1000) 130*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT_TOGGLE (0x0800) 131*429168eaSwdenk #define PHY_COMMON_AUTO_NEXT_MSG (0x07FF) 132*429168eaSwdenk 133*429168eaSwdenk /* AUTO_LNKN Auto-neg Link Partner Rx Reg Bit Fields */ 134*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN_NP (0x8000) 135*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN_ACK (0x4000) 136*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN_MSG_PAGE (0x2000) 137*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN_ACK_2 (0x1000) 138*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN_TOGGLE (0x0800) 139*429168eaSwdenk #define PHY_COMMON_AUTO_LNKN_MSG (0x07FF) 140*429168eaSwdenk 141*429168eaSwdenk /* PORT_CFG Port Configuration Register Bit Fields */ 142*429168eaSwdenk #define PHY_LXT971_PORT_CFG_RES1 (0x8000) 143*429168eaSwdenk #define PHY_LXT971_PORT_CFG_FORCE_LNK (0x4000) 144*429168eaSwdenk #define PHY_LXT971_PORT_CFG_TX_DISABLE (0x2000) 145*429168eaSwdenk #define PHY_LXT971_PORT_CFG_BYPASS_SCR (0x1000) 146*429168eaSwdenk #define PHY_LXT971_PORT_CFG_RES2 (0x0800) 147*429168eaSwdenk #define PHY_LXT971_PORT_CFG_JABBER (0x0400) 148*429168eaSwdenk #define PHY_LXT971_PORT_CFG_SQE (0x0200) 149*429168eaSwdenk #define PHY_LXT971_PORT_CFG_TP_LOOPBACK (0x0100) 150*429168eaSwdenk #define PHY_LXT971_PORT_CFG_CRS_SEL (0x0080) 151*429168eaSwdenk #define PHY_LXT971_PORT_CFG_SLEEP_MODE (0x0040) 152*429168eaSwdenk #define PHY_LXT971_PORT_CFG_PRE_EN (0x0020) 153*429168eaSwdenk #define PHY_LXT971_PORT_CFG_SLEEP_T_MA (0x0018) 154*429168eaSwdenk #define PHY_LXT971_PORT_CFG_SLEEP_T_104 (0x0010) 155*429168eaSwdenk #define PHY_LXT971_PORT_CFG_SLEEP_T_200 (0x0001) 156*429168eaSwdenk #define PHY_LXT971_PORT_CFG_SLEEP_T_304 (0x0000) 157*429168eaSwdenk #define PHY_LXT971_PORT_CFG_FLT_CODE_EN (0x0004) 158*429168eaSwdenk #define PHY_LXT971_PORT_CFG_ALT_NP (0x0002) 159*429168eaSwdenk #define PHY_LXT971_PORT_CFG_FIBER_SEL (0x0001) 160*429168eaSwdenk 161*429168eaSwdenk /* STAT2 Status Register #2 Bit Fields */ 162*429168eaSwdenk #define PHY_LXT971_STAT2_RES1 (0x8000) 163*429168eaSwdenk #define PHY_LXT971_STAT2_100BTX (0x4000) 164*429168eaSwdenk #define PHY_LXT971_STAT2_TX_STATUS (0x2000) 165*429168eaSwdenk #define PHY_LXT971_STAT2_RX_STATUS (0x1000) 166*429168eaSwdenk #define PHY_LXT971_STAT2_COL_STATUS (0x0800) 167*429168eaSwdenk #define PHY_LXT971_STAT2_LINK (0x0400) 168*429168eaSwdenk #define PHY_LXT971_STAT2_DUPLEX_MODE (0x0200) 169*429168eaSwdenk #define PHY_LXT971_STAT2_AUTO_NEG (0x0100) 170*429168eaSwdenk #define PHY_LXT971_STAT2_AUTO_NEG_COMP (0x0080) 171*429168eaSwdenk #define PHY_LXT971_STAT2_RES2 (0x0040) 172*429168eaSwdenk #define PHY_LXT971_STAT2_POLARITY (0x0020) 173*429168eaSwdenk #define PHY_LXT971_STAT2_PAUSE (0x0010) 174*429168eaSwdenk #define PHY_LXT971_STAT2_ERROR (0x0008) 175*429168eaSwdenk #define PHY_LXT971_STAT2_RES3 (0x0007) 176*429168eaSwdenk 177*429168eaSwdenk /* INT_ENABLE Interrupt Enable Register Bit Fields */ 178*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_RES1 (0xFF00) 179*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_ANMSK (0x0080) 180*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_SPEEDMSK (0x0040) 181*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_DUPLEXMSK (0x0020) 182*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_LINKMSK (0x0010) 183*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_RES2 (0x000C) 184*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_INTEN (0x0002) 185*429168eaSwdenk #define PHY_LXT971_INT_ENABLE_TINT (0x0001) 186*429168eaSwdenk 187*429168eaSwdenk /* INT_STATUS Interrupt Status Register Bit Fields */ 188*429168eaSwdenk #define PHY_LXT971_INT_STATUS_RES1 (0xFF00) 189*429168eaSwdenk #define PHY_LXT971_INT_STATUS_ANDONE (0x0080) 190*429168eaSwdenk #define PHY_LXT971_INT_STATUS_SPEEDCHG (0x0040) 191*429168eaSwdenk #define PHY_LXT971_INT_STATUS_DUPLEXCHG (0x0020) 192*429168eaSwdenk #define PHY_LXT971_INT_STATUS_LINKCHG (0x0010) 193*429168eaSwdenk #define PHY_LXT971_INT_STATUS_RES2 (0x0008) 194*429168eaSwdenk #define PHY_LXT971_INT_STATUS_MDINT (0x0004) 195*429168eaSwdenk #define PHY_LXT971_INT_STATUS_RES3 (0x0003) 196*429168eaSwdenk 197*429168eaSwdenk /* LED_CFG Interrupt LED Configuration Register Bit Fields */ 198*429168eaSwdenk #define PHY_LXT971_LED_CFG_SHIFT_LED1 (0x000C) 199*429168eaSwdenk #define PHY_LXT971_LED_CFG_SHIFT_LED2 (0x0008) 200*429168eaSwdenk #define PHY_LXT971_LED_CFG_SHIFT_LED3 (0x0004) 201*429168eaSwdenk #define PHY_LXT971_LED_CFG_LEDFREQ_MA (0x000C) 202*429168eaSwdenk #define PHY_LXT971_LED_CFG_LEDFREQ_RES (0x000C) 203*429168eaSwdenk #define PHY_LXT971_LED_CFG_LEDFREQ_100 (0x0008) 204*429168eaSwdenk #define PHY_LXT971_LED_CFG_LEDFREQ_60 (0x0004) 205*429168eaSwdenk #define PHY_LXT971_LED_CFG_LEDFREQ_30 (0x0000) 206*429168eaSwdenk #define PHY_LXT971_LED_CFG_PULSE_STR (0x0002) 207*429168eaSwdenk #define PHY_LXT971_LED_CFG_RES1 (0x0001) 208*429168eaSwdenk 209*429168eaSwdenk /* only one of these values must be shifted for each SHIFT_LED? */ 210*429168eaSwdenk #define PHY_LXT971_LED_CFG_UNUSED1 (0x000F) 211*429168eaSwdenk #define PHY_LXT971_LED_CFG_DUPLEX_COL (0x000E) 212*429168eaSwdenk #define PHY_LXT971_LED_CFG_LINK_ACT (0x000D) 213*429168eaSwdenk #define PHY_LXT971_LED_CFG_LINK_RX (0x000C) 214*429168eaSwdenk #define PHY_LXT971_LED_CFG_TEST_BLK_SLW (0x000B) 215*429168eaSwdenk #define PHY_LXT971_LED_CFG_TEST_BLK_FST (0x000A) 216*429168eaSwdenk #define PHY_LXT971_LED_CFG_TEST_OFF (0x0009) 217*429168eaSwdenk #define PHY_LXT971_LED_CFG_TEST_ON (0x0008) 218*429168eaSwdenk #define PHY_LXT971_LED_CFG_RX_OR_TX (0x0007) 219*429168eaSwdenk #define PHY_LXT971_LED_CFG_UNUSED2 (0x0006) 220*429168eaSwdenk #define PHY_LXT971_LED_CFG_DUPLEX (0x0005) 221*429168eaSwdenk #define PHY_LXT971_LED_CFG_LINK (0x0004) 222*429168eaSwdenk #define PHY_LXT971_LED_CFG_COLLISION (0x0003) 223*429168eaSwdenk #define PHY_LXT971_LED_CFG_RECEIVE (0x0002) 224*429168eaSwdenk #define PHY_LXT971_LED_CFG_TRANSMIT (0x0001) 225*429168eaSwdenk #define PHY_LXT971_LED_CFG_SPEED (0x0000) 226*429168eaSwdenk 227*429168eaSwdenk /* DIG_CFG Digitial Configuration Register Bit Fields */ 228*429168eaSwdenk #define PHY_LXT971_DIG_CFG_RES1 (0xF000) 229*429168eaSwdenk #define PHY_LXT971_DIG_CFG_MII_DRIVE (0x0800) 230*429168eaSwdenk #define PHY_LXT971_DIG_CFG_RES2 (0x0400) 231*429168eaSwdenk #define PHY_LXT971_DIG_CFG_SHOW_SYMBOL (0x0200) 232*429168eaSwdenk #define PHY_LXT971_DIG_CFG_RES3 (0x01FF) 233*429168eaSwdenk 234*429168eaSwdenk #define PHY_LXT971_MDIO_MAX_CLK (8000000) 235*429168eaSwdenk #define PHY_MDIO_MAX_CLK (2500000) 236*429168eaSwdenk 237*429168eaSwdenk /* TX_CTRL Transmit Control Register Bit Fields 238*429168eaSwdenk documentation is buggy for this register, therefore setting not included */ 239*429168eaSwdenk 240*429168eaSwdenk typedef enum 241*429168eaSwdenk { 242*429168eaSwdenk PHY_NONE = 0x0000, /* no PHY detected yet */ 243*429168eaSwdenk PHY_LXT971A = 0x0013 244*429168eaSwdenk } PhyType; 245*429168eaSwdenk 246*429168eaSwdenk #endif /* __LXT971A_H__ */ 247