xref: /titanic_51/usr/src/uts/common/io/chxge/com/mv88e1xxx.h (revision d39a76e7b087a3d0927cbe6898dc0a6770fa6c68)
1*d39a76e7Sxw161283 /*
2*d39a76e7Sxw161283  * CDDL HEADER START
3*d39a76e7Sxw161283  *
4*d39a76e7Sxw161283  * The contents of this file are subject to the terms of the
5*d39a76e7Sxw161283  * Common Development and Distribution License (the "License").
6*d39a76e7Sxw161283  * You may not use this file except in compliance with the License.
7*d39a76e7Sxw161283  *
8*d39a76e7Sxw161283  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*d39a76e7Sxw161283  * or http://www.opensolaris.org/os/licensing.
10*d39a76e7Sxw161283  * See the License for the specific language governing permissions
11*d39a76e7Sxw161283  * and limitations under the License.
12*d39a76e7Sxw161283  *
13*d39a76e7Sxw161283  * When distributing Covered Code, include this CDDL HEADER in each
14*d39a76e7Sxw161283  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*d39a76e7Sxw161283  * If applicable, add the following below this CDDL HEADER, with the
16*d39a76e7Sxw161283  * fields enclosed by brackets "[]" replaced with your own identifying
17*d39a76e7Sxw161283  * information: Portions Copyright [yyyy] [name of copyright owner]
18*d39a76e7Sxw161283  *
19*d39a76e7Sxw161283  * CDDL HEADER END
20*d39a76e7Sxw161283  */
21*d39a76e7Sxw161283 
22*d39a76e7Sxw161283 /*
23*d39a76e7Sxw161283  * Copyright (C) 2003-2005 Chelsio Communications.  All rights reserved.
24*d39a76e7Sxw161283  */
25*d39a76e7Sxw161283 
26*d39a76e7Sxw161283 #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* mv88e1xxx.h */
27*d39a76e7Sxw161283 
28*d39a76e7Sxw161283 #ifndef CHELSIO_MV8E1XXX_H
29*d39a76e7Sxw161283 #define CHELSIO_MV8E1XXX_H
30*d39a76e7Sxw161283 
31*d39a76e7Sxw161283 #ifndef BMCR_SPEED1000
32*d39a76e7Sxw161283 # define BMCR_SPEED1000 0x40
33*d39a76e7Sxw161283 #endif
34*d39a76e7Sxw161283 
35*d39a76e7Sxw161283 #ifndef ADVERTISE_PAUSE
36*d39a76e7Sxw161283 # define ADVERTISE_PAUSE 0x400
37*d39a76e7Sxw161283 #endif
38*d39a76e7Sxw161283 #ifndef ADVERTISE_PAUSE_ASYM
39*d39a76e7Sxw161283 # define ADVERTISE_PAUSE_ASYM 0x800
40*d39a76e7Sxw161283 #endif
41*d39a76e7Sxw161283 
42*d39a76e7Sxw161283 /* Gigabit MII registers */
43*d39a76e7Sxw161283 #define MII_GBCR 9       /* 1000Base-T control register */
44*d39a76e7Sxw161283 #define MII_GBSR 10      /* 1000Base-T status register */
45*d39a76e7Sxw161283 
46*d39a76e7Sxw161283 /* 1000Base-T control register fields */
47*d39a76e7Sxw161283 #define GBCR_ADV_1000HALF         0x100
48*d39a76e7Sxw161283 #define GBCR_ADV_1000FULL         0x200
49*d39a76e7Sxw161283 #define GBCR_PREFER_MASTER        0x400
50*d39a76e7Sxw161283 #define GBCR_MANUAL_AS_MASTER     0x800
51*d39a76e7Sxw161283 #define GBCR_MANUAL_CONFIG_ENABLE 0x1000
52*d39a76e7Sxw161283 
53*d39a76e7Sxw161283 /* 1000Base-T status register fields */
54*d39a76e7Sxw161283 #define GBSR_LP_1000HALF  0x400
55*d39a76e7Sxw161283 #define GBSR_LP_1000FULL  0x800
56*d39a76e7Sxw161283 #define GBSR_REMOTE_OK    0x1000
57*d39a76e7Sxw161283 #define GBSR_LOCAL_OK     0x2000
58*d39a76e7Sxw161283 #define GBSR_LOCAL_MASTER 0x4000
59*d39a76e7Sxw161283 #define GBSR_MASTER_FAULT 0x8000
60*d39a76e7Sxw161283 
61*d39a76e7Sxw161283 /* Marvell PHY interrupt status bits. */
62*d39a76e7Sxw161283 #define MV88E1XXX_INTR_JABBER          0x0001
63*d39a76e7Sxw161283 #define MV88E1XXX_INTR_POLARITY_CHNG   0x0002
64*d39a76e7Sxw161283 #define MV88E1XXX_INTR_ENG_DETECT_CHNG 0x0010
65*d39a76e7Sxw161283 #define MV88E1XXX_INTR_DOWNSHIFT       0x0020
66*d39a76e7Sxw161283 #define MV88E1XXX_INTR_MDI_XOVER_CHNG  0x0040
67*d39a76e7Sxw161283 #define MV88E1XXX_INTR_FIFO_OVER_UNDER 0x0080
68*d39a76e7Sxw161283 #define MV88E1XXX_INTR_FALSE_CARRIER   0x0100
69*d39a76e7Sxw161283 #define MV88E1XXX_INTR_SYMBOL_ERROR    0x0200
70*d39a76e7Sxw161283 #define MV88E1XXX_INTR_LINK_CHNG       0x0400
71*d39a76e7Sxw161283 #define MV88E1XXX_INTR_AUTONEG_DONE    0x0800
72*d39a76e7Sxw161283 #define MV88E1XXX_INTR_PAGE_RECV       0x1000
73*d39a76e7Sxw161283 #define MV88E1XXX_INTR_DUPLEX_CHNG     0x2000
74*d39a76e7Sxw161283 #define MV88E1XXX_INTR_SPEED_CHNG      0x4000
75*d39a76e7Sxw161283 #define MV88E1XXX_INTR_AUTONEG_ERR     0x8000
76*d39a76e7Sxw161283 
77*d39a76e7Sxw161283 /* Marvell PHY specific registers. */
78*d39a76e7Sxw161283 #define MV88E1XXX_SPECIFIC_CNTRL_REGISTER               16
79*d39a76e7Sxw161283 #define MV88E1XXX_SPECIFIC_STATUS_REGISTER              17
80*d39a76e7Sxw161283 #define MV88E1XXX_INTERRUPT_ENABLE_REGISTER             18
81*d39a76e7Sxw161283 #define MV88E1XXX_INTERRUPT_STATUS_REGISTER             19
82*d39a76e7Sxw161283 #define MV88E1XXX_EXT_PHY_SPECIFIC_CNTRL_REGISTER       20
83*d39a76e7Sxw161283 #define MV88E1XXX_RECV_ERR_CNTR_REGISTER                21
84*d39a76e7Sxw161283 #define MV88E1XXX_RES_REGISTER                          22
85*d39a76e7Sxw161283 #define MV88E1XXX_GLOBAL_STATUS_REGISTER                23
86*d39a76e7Sxw161283 #define MV88E1XXX_LED_CONTROL_REGISTER                  24
87*d39a76e7Sxw161283 #define MV88E1XXX_MANUAL_LED_OVERRIDE_REGISTER          25
88*d39a76e7Sxw161283 #define MV88E1XXX_EXT_PHY_SPECIFIC_CNTRL_2_REGISTER     26
89*d39a76e7Sxw161283 #define MV88E1XXX_EXT_PHY_SPECIFIC_STATUS_REGISTER      27
90*d39a76e7Sxw161283 #define MV88E1XXX_VIRTUAL_CABLE_TESTER_REGISTER         28
91*d39a76e7Sxw161283 #define MV88E1XXX_EXTENDED_ADDR_REGISTER                29
92*d39a76e7Sxw161283 #define MV88E1XXX_EXTENDED_REGISTER                     30
93*d39a76e7Sxw161283 
94*d39a76e7Sxw161283 /* PHY specific control register fields */
95*d39a76e7Sxw161283 #define S_PSCR_MDI_XOVER_MODE    5
96*d39a76e7Sxw161283 #define M_PSCR_MDI_XOVER_MODE    0x3
97*d39a76e7Sxw161283 #define V_PSCR_MDI_XOVER_MODE(x) ((x) << S_PSCR_MDI_XOVER_MODE)
98*d39a76e7Sxw161283 #define G_PSCR_MDI_XOVER_MODE(x) (((x) >> S_PSCR_MDI_XOVER_MODE) & M_PSCR_MDI_XOVER_MODE)
99*d39a76e7Sxw161283 
100*d39a76e7Sxw161283 /* Extended PHY specific control register fields */
101*d39a76e7Sxw161283 #define S_DOWNSHIFT_ENABLE 8
102*d39a76e7Sxw161283 #define V_DOWNSHIFT_ENABLE (1 << S_DOWNSHIFT_ENABLE)
103*d39a76e7Sxw161283 
104*d39a76e7Sxw161283 #define S_DOWNSHIFT_CNT    9
105*d39a76e7Sxw161283 #define M_DOWNSHIFT_CNT    0x7
106*d39a76e7Sxw161283 #define V_DOWNSHIFT_CNT(x) ((x) << S_DOWNSHIFT_CNT)
107*d39a76e7Sxw161283 #define G_DOWNSHIFT_CNT(x) (((x) >> S_DOWNSHIFT_CNT) & M_DOWNSHIFT_CNT)
108*d39a76e7Sxw161283 
109*d39a76e7Sxw161283 /* PHY specific status register fields */
110*d39a76e7Sxw161283 #define S_PSSR_JABBER 0
111*d39a76e7Sxw161283 #define V_PSSR_JABBER (1 << S_PSSR_JABBER)
112*d39a76e7Sxw161283 
113*d39a76e7Sxw161283 #define S_PSSR_POLARITY 1
114*d39a76e7Sxw161283 #define V_PSSR_POLARITY (1 << S_PSSR_POLARITY)
115*d39a76e7Sxw161283 
116*d39a76e7Sxw161283 #define S_PSSR_RX_PAUSE 2
117*d39a76e7Sxw161283 #define V_PSSR_RX_PAUSE (1 << S_PSSR_RX_PAUSE)
118*d39a76e7Sxw161283 
119*d39a76e7Sxw161283 #define S_PSSR_TX_PAUSE 3
120*d39a76e7Sxw161283 #define V_PSSR_TX_PAUSE (1 << S_PSSR_TX_PAUSE)
121*d39a76e7Sxw161283 
122*d39a76e7Sxw161283 #define S_PSSR_ENERGY_DETECT 4
123*d39a76e7Sxw161283 #define V_PSSR_ENERGY_DETECT (1 << S_PSSR_ENERGY_DETECT)
124*d39a76e7Sxw161283 
125*d39a76e7Sxw161283 #define S_PSSR_DOWNSHIFT_STATUS 5
126*d39a76e7Sxw161283 #define V_PSSR_DOWNSHIFT_STATUS (1 << S_PSSR_DOWNSHIFT_STATUS)
127*d39a76e7Sxw161283 
128*d39a76e7Sxw161283 #define S_PSSR_MDI 6
129*d39a76e7Sxw161283 #define V_PSSR_MDI (1 << S_PSSR_MDI)
130*d39a76e7Sxw161283 
131*d39a76e7Sxw161283 #define S_PSSR_CABLE_LEN    7
132*d39a76e7Sxw161283 #define M_PSSR_CABLE_LEN    0x7
133*d39a76e7Sxw161283 #define V_PSSR_CABLE_LEN(x) ((x) << S_PSSR_CABLE_LEN)
134*d39a76e7Sxw161283 #define G_PSSR_CABLE_LEN(x) (((x) >> S_PSSR_CABLE_LEN) & M_PSSR_CABLE_LEN)
135*d39a76e7Sxw161283 
136*d39a76e7Sxw161283 #define S_PSSR_LINK 10
137*d39a76e7Sxw161283 #define V_PSSR_LINK (1 << S_PSSR_LINK)
138*d39a76e7Sxw161283 
139*d39a76e7Sxw161283 #define S_PSSR_STATUS_RESOLVED 11
140*d39a76e7Sxw161283 #define V_PSSR_STATUS_RESOLVED (1 << S_PSSR_STATUS_RESOLVED)
141*d39a76e7Sxw161283 
142*d39a76e7Sxw161283 #define S_PSSR_PAGE_RECEIVED 12
143*d39a76e7Sxw161283 #define V_PSSR_PAGE_RECEIVED (1 << S_PSSR_PAGE_RECEIVED)
144*d39a76e7Sxw161283 
145*d39a76e7Sxw161283 #define S_PSSR_DUPLEX 13
146*d39a76e7Sxw161283 #define V_PSSR_DUPLEX (1 << S_PSSR_DUPLEX)
147*d39a76e7Sxw161283 
148*d39a76e7Sxw161283 #define S_PSSR_SPEED    14
149*d39a76e7Sxw161283 #define M_PSSR_SPEED    0x3
150*d39a76e7Sxw161283 #define V_PSSR_SPEED(x) ((x) << S_PSSR_SPEED)
151*d39a76e7Sxw161283 #define G_PSSR_SPEED(x) (((x) >> S_PSSR_SPEED) & M_PSSR_SPEED)
152*d39a76e7Sxw161283 
153*d39a76e7Sxw161283 #endif
154