37#define MV_INTR_JABBER 0x0001
38#define MV_INTR_POLARITY_CHNG 0x0002
39#define MV_INTR_ENG_DETECT_CHNG 0x0010
40#define MV_INTR_DOWNSHIFT 0x0020
41#define MV_INTR_MDI_XOVER_CHNG 0x0040
42#define MV_INTR_FIFO_OVER_UNDER 0x0080
43#define MV_INTR_FALSE_CARRIER 0x0100
44#define MV_INTR_SYMBOL_ERROR 0x0200
45#define MV_INTR_LINK_CHNG 0x0400
46#define MV_INTR_AUTONEG_DONE 0x0800
47#define MV_INTR_PAGE_RECV 0x1000
48#define MV_INTR_DUPLEX_CHNG 0x2000
49#define MV_INTR_SPEED_CHNG 0x4000
50#define MV_INTR_AUTONEG_ERR 0x8000
53#define MV88E1XXX_SPECIFIC_CNTRL 16
54#define MV88E1XXX_SPECIFIC_STATUS 17
55#define MV88E1XXX_INTR_ENABLE 18
56#define MV88E1XXX_INTR_STATUS 19
57#define MV88E1XXX_EXT_SPECIFIC_CNTRL 20
58#define MV88E1XXX_RECV_ERR 21
59#define MV88E1XXX_EXT_ADDR 22
60#define MV88E1XXX_GLOBAL_STATUS 23
61#define MV88E1XXX_LED_CNTRL 24
62#define MV88E1XXX_LED_OVERRIDE 25
63#define MV88E1XXX_EXT_SPECIFIC_CNTRL2 26
64#define MV88E1XXX_EXT_SPECIFIC_STATUS 27
65#define MV88E1XXX_VIRTUAL_CABLE_TESTER 28
66#define MV88E1XXX_EXTENDED_ADDR 29
67#define MV88E1XXX_EXTENDED_DATA 30
70#define S_PSCR_MDI_XOVER_MODE 5
71#define M_PSCR_MDI_XOVER_MODE 0x3
72#define V_PSCR_MDI_XOVER_MODE(x) ((x) << S_PSCR_MDI_XOVER_MODE)
75#define S_DOWNSHIFT_ENABLE 8
76#define V_DOWNSHIFT_ENABLE (1 << S_DOWNSHIFT_ENABLE)
78#define S_DOWNSHIFT_CNT 9
79#define M_DOWNSHIFT_CNT 0x7
80#define V_DOWNSHIFT_CNT(x) ((x) << S_DOWNSHIFT_CNT)
83#define S_PSSR_JABBER 0
84#define V_PSSR_JABBER (1 << S_PSSR_JABBER)
86#define S_PSSR_POLARITY 1
87#define V_PSSR_POLARITY (1 << S_PSSR_POLARITY)
89#define S_PSSR_RX_PAUSE 2
90#define V_PSSR_RX_PAUSE (1 << S_PSSR_RX_PAUSE)
92#define S_PSSR_TX_PAUSE 3
93#define V_PSSR_TX_PAUSE (1 << S_PSSR_TX_PAUSE)
95#define S_PSSR_ENERGY_DETECT 4
96#define V_PSSR_ENERGY_DETECT (1 << S_PSSR_ENERGY_DETECT)
98#define S_PSSR_DOWNSHIFT_STATUS 5
99#define V_PSSR_DOWNSHIFT_STATUS (1 << S_PSSR_DOWNSHIFT_STATUS)
102#define V_PSSR_MDI (1 << S_PSSR_MDI)
104#define S_PSSR_CABLE_LEN 7
105#define M_PSSR_CABLE_LEN 0x7
106#define V_PSSR_CABLE_LEN(x) ((x) << S_PSSR_CABLE_LEN)
107#define G_PSSR_CABLE_LEN(x) (((x) >> S_PSSR_CABLE_LEN) & M_PSSR_CABLE_LEN)
109#define S_PSSR_LINK 10
110#define V_PSSR_LINK (1 << S_PSSR_LINK)
112#define S_PSSR_STATUS_RESOLVED 11
113#define V_PSSR_STATUS_RESOLVED (1 << S_PSSR_STATUS_RESOLVED)
115#define S_PSSR_PAGE_RECEIVED 12
116#define V_PSSR_PAGE_RECEIVED (1 << S_PSSR_PAGE_RECEIVED)
118#define S_PSSR_DUPLEX 13
119#define V_PSSR_DUPLEX (1 << S_PSSR_DUPLEX)
121#define S_PSSR_SPEED 14
122#define M_PSSR_SPEED 0x3
123#define V_PSSR_SPEED(x) ((x) << S_PSSR_SPEED)
124#define G_PSSR_SPEED(x) (((x) >> S_PSSR_SPEED) & M_PSSR_SPEED)
127#define CROSSOVER_MDI 0
128#define CROSSOVER_MDIX 1
129#define CROSSOVER_AUTO 3
131#define INTR_ENABLE_MASK (MV_INTR_SPEED_CHNG | MV_INTR_DUPLEX_CHNG | \
132 MV_INTR_AUTONEG_DONE | MV_INTR_LINK_CHNG | MV_INTR_FIFO_OVER_UNDER | \
133 MV_INTR_ENG_DETECT_CHNG)
190 int *speed,
int *duplex,
int *fc)
193 int sp = -1, dplx = -1, pause = 0;
246 enable ? BMCR_PDOWN : 0);
260 if (cause & link_change_intrs)
267#ifdef C99_NOT_SUPPORTED
static int mdio_read(struct cphy *phy, int mmd, int reg, unsigned int *valp)
int t3_mdio_change_bits(struct cphy *phy, int mmd, int reg, unsigned int clear, unsigned int set)
int t3_phy_reset(struct cphy *phy, int mmd, int wait)
int t3_phy_advertise(struct cphy *phy, unsigned int advert)
static int mdio_write(struct cphy *phy, int mmd, int reg, unsigned int val)
int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex)
static void cphy_init(struct cphy *phy, adapter_t *adapter, pinfo_t *pinfo, int phy_addr, struct cphy_ops *phy_ops, const struct mdio_ops *mdio_ops, unsigned int caps, const char *desc)
#define M_PSCR_MDI_XOVER_MODE
static struct cphy_ops mv88e1xxx_ops
static int mv88e1xxx_intr_clear(struct cphy *cphy)
#define V_PSCR_MDI_XOVER_MODE(x)
static int mv88e1xxx_reset(struct cphy *cphy, int wait)
#define MV88E1XXX_EXTENDED_DATA
#define MV_INTR_LINK_CHNG
static int mv88e1xxx_downshift_set(struct cphy *cphy, int downshift_enable)
#define MV_INTR_SPEED_CHNG
#define V_DOWNSHIFT_CNT(x)
#define MV_INTR_AUTONEG_DONE
static int mv88e1xxx_intr_handler(struct cphy *cphy)
#define MV88E1XXX_INTR_ENABLE
#define V_DOWNSHIFT_ENABLE
#define V_PSSR_STATUS_RESOLVED
#define MV_INTR_DOWNSHIFT
#define MV88E1XXX_EXT_SPECIFIC_CNTRL
static int mv88e1xxx_intr_enable(struct cphy *cphy)
static int mv88e1xxx_autoneg_restart(struct cphy *cphy)
#define MV88E1XXX_INTR_STATUS
static int mv88e1xxx_set_loopback(struct cphy *cphy, int mmd, int dir, int on)
static int mv88e1xxx_set_speed_duplex(struct cphy *phy, int speed, int duplex)
#define MV_INTR_DUPLEX_CHNG
#define MV88E1XXX_EXTENDED_ADDR
static int mv88e1xxx_power_down(struct cphy *cphy, int enable)
#define MV88E1XXX_SPECIFIC_CNTRL
#define MV88E1XXX_SPECIFIC_STATUS
static int mv88e1xxx_autoneg_enable(struct cphy *cphy)
static int mv88e1xxx_intr_disable(struct cphy *cphy)
static int mv88e1xxx_crossover_set(struct cphy *cphy, int crossover)
int t3_mv88e1xxx_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
static int mv88e1xxx_get_link_status(struct cphy *cphy, int *link_state, int *speed, int *duplex, int *fc)
#define MV_INTR_FIFO_OVER_UNDER
#define SUPPORTED_Autoneg
#define SUPPORTED_1000baseT_Full
#define SUPPORTED_10baseT_Full
#define SUPPORTED_100baseT_Full
int(* reset)(struct cphy *phy, int wait)