1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* $Date: 2005/03/07 23:59:05 $ $RCSfile: mv88e1xxx.h,v $ $Revision: 1.13 $ */ 3*4882a593Smuzhiyun #ifndef CHELSIO_MV8E1XXX_H 4*4882a593Smuzhiyun #define CHELSIO_MV8E1XXX_H 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef BMCR_SPEED1000 7*4882a593Smuzhiyun # define BMCR_SPEED1000 0x40 8*4882a593Smuzhiyun #endif 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef ADVERTISE_PAUSE 11*4882a593Smuzhiyun # define ADVERTISE_PAUSE 0x400 12*4882a593Smuzhiyun #endif 13*4882a593Smuzhiyun #ifndef ADVERTISE_PAUSE_ASYM 14*4882a593Smuzhiyun # define ADVERTISE_PAUSE_ASYM 0x800 15*4882a593Smuzhiyun #endif 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* Gigabit MII registers */ 18*4882a593Smuzhiyun #define MII_GBCR 9 /* 1000Base-T control register */ 19*4882a593Smuzhiyun #define MII_GBSR 10 /* 1000Base-T status register */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* 1000Base-T control register fields */ 22*4882a593Smuzhiyun #define GBCR_ADV_1000HALF 0x100 23*4882a593Smuzhiyun #define GBCR_ADV_1000FULL 0x200 24*4882a593Smuzhiyun #define GBCR_PREFER_MASTER 0x400 25*4882a593Smuzhiyun #define GBCR_MANUAL_AS_MASTER 0x800 26*4882a593Smuzhiyun #define GBCR_MANUAL_CONFIG_ENABLE 0x1000 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* 1000Base-T status register fields */ 29*4882a593Smuzhiyun #define GBSR_LP_1000HALF 0x400 30*4882a593Smuzhiyun #define GBSR_LP_1000FULL 0x800 31*4882a593Smuzhiyun #define GBSR_REMOTE_OK 0x1000 32*4882a593Smuzhiyun #define GBSR_LOCAL_OK 0x2000 33*4882a593Smuzhiyun #define GBSR_LOCAL_MASTER 0x4000 34*4882a593Smuzhiyun #define GBSR_MASTER_FAULT 0x8000 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* Marvell PHY interrupt status bits. */ 37*4882a593Smuzhiyun #define MV88E1XXX_INTR_JABBER 0x0001 38*4882a593Smuzhiyun #define MV88E1XXX_INTR_POLARITY_CHNG 0x0002 39*4882a593Smuzhiyun #define MV88E1XXX_INTR_ENG_DETECT_CHNG 0x0010 40*4882a593Smuzhiyun #define MV88E1XXX_INTR_DOWNSHIFT 0x0020 41*4882a593Smuzhiyun #define MV88E1XXX_INTR_MDI_XOVER_CHNG 0x0040 42*4882a593Smuzhiyun #define MV88E1XXX_INTR_FIFO_OVER_UNDER 0x0080 43*4882a593Smuzhiyun #define MV88E1XXX_INTR_FALSE_CARRIER 0x0100 44*4882a593Smuzhiyun #define MV88E1XXX_INTR_SYMBOL_ERROR 0x0200 45*4882a593Smuzhiyun #define MV88E1XXX_INTR_LINK_CHNG 0x0400 46*4882a593Smuzhiyun #define MV88E1XXX_INTR_AUTONEG_DONE 0x0800 47*4882a593Smuzhiyun #define MV88E1XXX_INTR_PAGE_RECV 0x1000 48*4882a593Smuzhiyun #define MV88E1XXX_INTR_DUPLEX_CHNG 0x2000 49*4882a593Smuzhiyun #define MV88E1XXX_INTR_SPEED_CHNG 0x4000 50*4882a593Smuzhiyun #define MV88E1XXX_INTR_AUTONEG_ERR 0x8000 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* Marvell PHY specific registers. */ 53*4882a593Smuzhiyun #define MV88E1XXX_SPECIFIC_CNTRL_REGISTER 16 54*4882a593Smuzhiyun #define MV88E1XXX_SPECIFIC_STATUS_REGISTER 17 55*4882a593Smuzhiyun #define MV88E1XXX_INTERRUPT_ENABLE_REGISTER 18 56*4882a593Smuzhiyun #define MV88E1XXX_INTERRUPT_STATUS_REGISTER 19 57*4882a593Smuzhiyun #define MV88E1XXX_EXT_PHY_SPECIFIC_CNTRL_REGISTER 20 58*4882a593Smuzhiyun #define MV88E1XXX_RECV_ERR_CNTR_REGISTER 21 59*4882a593Smuzhiyun #define MV88E1XXX_RES_REGISTER 22 60*4882a593Smuzhiyun #define MV88E1XXX_GLOBAL_STATUS_REGISTER 23 61*4882a593Smuzhiyun #define MV88E1XXX_LED_CONTROL_REGISTER 24 62*4882a593Smuzhiyun #define MV88E1XXX_MANUAL_LED_OVERRIDE_REGISTER 25 63*4882a593Smuzhiyun #define MV88E1XXX_EXT_PHY_SPECIFIC_CNTRL_2_REGISTER 26 64*4882a593Smuzhiyun #define MV88E1XXX_EXT_PHY_SPECIFIC_STATUS_REGISTER 27 65*4882a593Smuzhiyun #define MV88E1XXX_VIRTUAL_CABLE_TESTER_REGISTER 28 66*4882a593Smuzhiyun #define MV88E1XXX_EXTENDED_ADDR_REGISTER 29 67*4882a593Smuzhiyun #define MV88E1XXX_EXTENDED_REGISTER 30 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* PHY specific control register fields */ 70*4882a593Smuzhiyun #define S_PSCR_MDI_XOVER_MODE 5 71*4882a593Smuzhiyun #define M_PSCR_MDI_XOVER_MODE 0x3 72*4882a593Smuzhiyun #define V_PSCR_MDI_XOVER_MODE(x) ((x) << S_PSCR_MDI_XOVER_MODE) 73*4882a593Smuzhiyun #define G_PSCR_MDI_XOVER_MODE(x) (((x) >> S_PSCR_MDI_XOVER_MODE) & M_PSCR_MDI_XOVER_MODE) 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /* Extended PHY specific control register fields */ 76*4882a593Smuzhiyun #define S_DOWNSHIFT_ENABLE 8 77*4882a593Smuzhiyun #define V_DOWNSHIFT_ENABLE (1 << S_DOWNSHIFT_ENABLE) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define S_DOWNSHIFT_CNT 9 80*4882a593Smuzhiyun #define M_DOWNSHIFT_CNT 0x7 81*4882a593Smuzhiyun #define V_DOWNSHIFT_CNT(x) ((x) << S_DOWNSHIFT_CNT) 82*4882a593Smuzhiyun #define G_DOWNSHIFT_CNT(x) (((x) >> S_DOWNSHIFT_CNT) & M_DOWNSHIFT_CNT) 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* PHY specific status register fields */ 85*4882a593Smuzhiyun #define S_PSSR_JABBER 0 86*4882a593Smuzhiyun #define V_PSSR_JABBER (1 << S_PSSR_JABBER) 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun #define S_PSSR_POLARITY 1 89*4882a593Smuzhiyun #define V_PSSR_POLARITY (1 << S_PSSR_POLARITY) 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #define S_PSSR_RX_PAUSE 2 92*4882a593Smuzhiyun #define V_PSSR_RX_PAUSE (1 << S_PSSR_RX_PAUSE) 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #define S_PSSR_TX_PAUSE 3 95*4882a593Smuzhiyun #define V_PSSR_TX_PAUSE (1 << S_PSSR_TX_PAUSE) 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #define S_PSSR_ENERGY_DETECT 4 98*4882a593Smuzhiyun #define V_PSSR_ENERGY_DETECT (1 << S_PSSR_ENERGY_DETECT) 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun #define S_PSSR_DOWNSHIFT_STATUS 5 101*4882a593Smuzhiyun #define V_PSSR_DOWNSHIFT_STATUS (1 << S_PSSR_DOWNSHIFT_STATUS) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #define S_PSSR_MDI 6 104*4882a593Smuzhiyun #define V_PSSR_MDI (1 << S_PSSR_MDI) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #define S_PSSR_CABLE_LEN 7 107*4882a593Smuzhiyun #define M_PSSR_CABLE_LEN 0x7 108*4882a593Smuzhiyun #define V_PSSR_CABLE_LEN(x) ((x) << S_PSSR_CABLE_LEN) 109*4882a593Smuzhiyun #define G_PSSR_CABLE_LEN(x) (((x) >> S_PSSR_CABLE_LEN) & M_PSSR_CABLE_LEN) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define S_PSSR_LINK 10 112*4882a593Smuzhiyun #define V_PSSR_LINK (1 << S_PSSR_LINK) 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun #define S_PSSR_STATUS_RESOLVED 11 115*4882a593Smuzhiyun #define V_PSSR_STATUS_RESOLVED (1 << S_PSSR_STATUS_RESOLVED) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #define S_PSSR_PAGE_RECEIVED 12 118*4882a593Smuzhiyun #define V_PSSR_PAGE_RECEIVED (1 << S_PSSR_PAGE_RECEIVED) 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #define S_PSSR_DUPLEX 13 121*4882a593Smuzhiyun #define V_PSSR_DUPLEX (1 << S_PSSR_DUPLEX) 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #define S_PSSR_SPEED 14 124*4882a593Smuzhiyun #define M_PSSR_SPEED 0x3 125*4882a593Smuzhiyun #define V_PSSR_SPEED(x) ((x) << S_PSSR_SPEED) 126*4882a593Smuzhiyun #define G_PSSR_SPEED(x) (((x) >> S_PSSR_SPEED) & M_PSSR_SPEED) 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun #endif 129