40#define MDIO_REG_BANK_CL73_IEEEB0 0x0
41 #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL 0x0
42 #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_RESTART_AN 0x0200
43 #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN 0x1000
44 #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_MAIN_RST 0x8000
46#define MDIO_REG_BANK_CL73_IEEEB1 0x10
47 #define MDIO_CL73_IEEEB1_AN_ADV1 0x00
48 #define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE 0x0400
49 #define MDIO_CL73_IEEEB1_AN_ADV1_ASYMMETRIC 0x0800
50 #define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_BOTH 0x0C00
51 #define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK 0x0C00
52 #define MDIO_CL73_IEEEB1_AN_ADV2 0x01
53 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M 0x0000
54 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX 0x0020
55 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4 0x0040
56 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KR 0x0080
57 #define MDIO_CL73_IEEEB1_AN_LP_ADV1 0x03
58 #define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE 0x0400
59 #define MDIO_CL73_IEEEB1_AN_LP_ADV1_ASYMMETRIC 0x0800
60 #define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_BOTH 0x0C00
61 #define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_MASK 0x0C00
62 #define MDIO_CL73_IEEEB1_AN_LP_ADV2 0x04
64#define MDIO_REG_BANK_RX0 0x80b0
65 #define MDIO_RX0_RX_STATUS 0x10
66 #define MDIO_RX0_RX_STATUS_SIGDET 0x8000
67 #define MDIO_RX0_RX_STATUS_RX_SEQ_DONE 0x1000
68 #define MDIO_RX0_RX_EQ_BOOST 0x1c
69 #define MDIO_RX0_RX_EQ_BOOST_EQUALIZER_CTRL_MASK 0x7
70 #define MDIO_RX0_RX_EQ_BOOST_OFFSET_CTRL 0x10
72#define MDIO_REG_BANK_RX1 0x80c0
73 #define MDIO_RX1_RX_EQ_BOOST 0x1c
74 #define MDIO_RX1_RX_EQ_BOOST_EQUALIZER_CTRL_MASK 0x7
75 #define MDIO_RX1_RX_EQ_BOOST_OFFSET_CTRL 0x10
77#define MDIO_REG_BANK_RX2 0x80d0
78 #define MDIO_RX2_RX_EQ_BOOST 0x1c
79 #define MDIO_RX2_RX_EQ_BOOST_EQUALIZER_CTRL_MASK 0x7
80 #define MDIO_RX2_RX_EQ_BOOST_OFFSET_CTRL 0x10
82#define MDIO_REG_BANK_RX3 0x80e0
83 #define MDIO_RX3_RX_EQ_BOOST 0x1c
84 #define MDIO_RX3_RX_EQ_BOOST_EQUALIZER_CTRL_MASK 0x7
85 #define MDIO_RX3_RX_EQ_BOOST_OFFSET_CTRL 0x10
87#define MDIO_REG_BANK_RX_ALL 0x80f0
88 #define MDIO_RX_ALL_RX_EQ_BOOST 0x1c
89 #define MDIO_RX_ALL_RX_EQ_BOOST_EQUALIZER_CTRL_MASK 0x7
90 #define MDIO_RX_ALL_RX_EQ_BOOST_OFFSET_CTRL 0x10
92#define MDIO_REG_BANK_TX0 0x8060
93 #define MDIO_TX0_TX_DRIVER 0x17
94 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000
95 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12
96 #define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00
97 #define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8
98 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0
99 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4
100 #define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e
101 #define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1
102 #define MDIO_TX0_TX_DRIVER_ICBUF1T 1
104#define MDIO_REG_BANK_TX1 0x8070
105 #define MDIO_TX1_TX_DRIVER 0x17
106 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000
107 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12
108 #define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00
109 #define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8
110 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0
111 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4
112 #define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e
113 #define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1
114 #define MDIO_TX0_TX_DRIVER_ICBUF1T 1
116#define MDIO_REG_BANK_TX2 0x8080
117 #define MDIO_TX2_TX_DRIVER 0x17
118 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000
119 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12
120 #define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00
121 #define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8
122 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0
123 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4
124 #define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e
125 #define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1
126 #define MDIO_TX0_TX_DRIVER_ICBUF1T 1
128#define MDIO_REG_BANK_TX3 0x8090
129 #define MDIO_TX3_TX_DRIVER 0x17
130 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000
131 #define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12
132 #define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00
133 #define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8
134 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0
135 #define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4
136 #define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e
137 #define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1
138 #define MDIO_TX0_TX_DRIVER_ICBUF1T 1
140#define MDIO_REG_BANK_XGXS_BLOCK0 0x8000
141 #define MDIO_BLOCK0_XGXS_CONTROL 0x10
143#define MDIO_REG_BANK_XGXS_BLOCK1 0x8010
144 #define MDIO_BLOCK1_LANE_CTRL0 0x15
145 #define MDIO_BLOCK1_LANE_CTRL1 0x16
146 #define MDIO_BLOCK1_LANE_CTRL2 0x17
147 #define MDIO_BLOCK1_LANE_PRBS 0x19
149#define MDIO_REG_BANK_XGXS_BLOCK2 0x8100
150 #define MDIO_XGXS_BLOCK2_RX_LN_SWAP 0x10
151 #define MDIO_XGXS_BLOCK2_RX_LN_SWAP_ENABLE 0x8000
152 #define MDIO_XGXS_BLOCK2_RX_LN_SWAP_FORCE_ENABLE 0x4000
153 #define MDIO_XGXS_BLOCK2_TX_LN_SWAP 0x11
154 #define MDIO_XGXS_BLOCK2_TX_LN_SWAP_ENABLE 0x8000
155 #define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G 0x14
156 #define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_CX4_XGXS 0x0001
157 #define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_HIGIG_XGXS 0x0010
158 #define MDIO_XGXS_BLOCK2_TEST_MODE_LANE 0x15
160#define MDIO_REG_BANK_GP_STATUS 0x8120
161#define MDIO_GP_STATUS_TOP_AN_STATUS1 0x1B
162 #define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE 0x0001
163 #define MDIO_GP_STATUS_TOP_AN_STATUS1_CL37_AUTONEG_COMPLETE 0x0002
164 #define MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS 0x0004
165 #define MDIO_GP_STATUS_TOP_AN_STATUS1_DUPLEX_STATUS 0x0008
166 #define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_MR_LP_NP_AN_ABLE 0x0010
167 #define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_LP_NP_BAM_ABLE 0x0020
168 #define MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE 0x0040
169 #define MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_RXSIDE 0x0080
170 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_MASK 0x3f00
171 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10M 0x0000
172 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_100M 0x0100
173 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G 0x0200
174 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_2_5G 0x0300
175 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_5G 0x0400
176 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_6G 0x0500
177 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_HIG 0x0600
178 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_CX4 0x0700
179 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12G_HIG 0x0800
180 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12_5G 0x0900
181 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_13G 0x0A00
182 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_15G 0x0B00
183 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_16G 0x0C00
184 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G_KX 0x0D00
185 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KX4 0x0E00
186 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KR 0x0F00
187 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_XFI 0x1B00
188 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_20G_DXGXS 0x1E00
189 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_SFI 0x1F00
190 #define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_20G_KR2 0x3900
193#define MDIO_REG_BANK_10G_PARALLEL_DETECT 0x8130
194#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS 0x10
195#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS_PD_LINK 0x8000
196#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL 0x11
197#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN 0x1
198#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK 0x13
199#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK_CNT (0xb71<<1)
201#define MDIO_REG_BANK_SERDES_DIGITAL 0x8300
202#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1 0x10
203#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_FIBER_MODE 0x0001
204#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_TBI_IF 0x0002
205#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_SIGNAL_DETECT_EN 0x0004
206#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_INVERT_SIGNAL_DETECT 0x0008
207#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET 0x0010
208#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_MSTR_MODE 0x0020
209#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2 0x11
210#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN 0x0001
211#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_AN_FST_TMR 0x0040
212#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1 0x14
213#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SGMII 0x0001
214#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_LINK 0x0002
215#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_DUPLEX 0x0004
216#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_MASK 0x0018
217#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_SHIFT 3
218#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_2_5G 0x0018
219#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_1G 0x0010
220#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_100M 0x0008
221#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_10M 0x0000
222#define MDIO_SERDES_DIGITAL_A_1000X_STATUS2 0x15
223#define MDIO_SERDES_DIGITAL_A_1000X_STATUS2_AN_DISABLED 0x0002
224#define MDIO_SERDES_DIGITAL_MISC1 0x18
225#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_MASK 0xE000
226#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_25M 0x0000
227#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_100M 0x2000
228#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_125M 0x4000
229#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_156_25M 0x6000
230#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_187_5M 0x8000
231#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL 0x0010
232#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK 0x000f
233#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_2_5G 0x0000
234#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_5G 0x0001
235#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_6G 0x0002
236#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_HIG 0x0003
237#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_CX4 0x0004
238#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_12G 0x0005
239#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_12_5G 0x0006
240#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_13G 0x0007
241#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_15G 0x0008
242#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_16G 0x0009
244#define MDIO_REG_BANK_OVER_1G 0x8320
245#define MDIO_OVER_1G_DIGCTL_3_4 0x14
246#define MDIO_OVER_1G_DIGCTL_3_4_MP_ID_MASK 0xffe0
247#define MDIO_OVER_1G_DIGCTL_3_4_MP_ID_SHIFT 5
248#define MDIO_OVER_1G_UP1 0x19
249#define MDIO_OVER_1G_UP1_2_5G 0x0001
250#define MDIO_OVER_1G_UP1_5G 0x0002
251#define MDIO_OVER_1G_UP1_6G 0x0004
252#define MDIO_OVER_1G_UP1_10G 0x0010
253#define MDIO_OVER_1G_UP1_10GH 0x0008
254#define MDIO_OVER_1G_UP1_12G 0x0020
255#define MDIO_OVER_1G_UP1_12_5G 0x0040
256#define MDIO_OVER_1G_UP1_13G 0x0080
257#define MDIO_OVER_1G_UP1_15G 0x0100
258#define MDIO_OVER_1G_UP1_16G 0x0200
259#define MDIO_OVER_1G_UP2 0x1A
260#define MDIO_OVER_1G_UP2_IPREDRIVER_MASK 0x0007
261#define MDIO_OVER_1G_UP2_IDRIVER_MASK 0x0038
262#define MDIO_OVER_1G_UP2_PREEMPHASIS_MASK 0x03C0
263#define MDIO_OVER_1G_UP3 0x1B
264#define MDIO_OVER_1G_UP3_HIGIG2 0x0001
265#define MDIO_OVER_1G_LP_UP1 0x1C
266#define MDIO_OVER_1G_LP_UP2 0x1D
267#define MDIO_OVER_1G_LP_UP2_MR_ADV_OVER_1G_MASK 0x03ff
268#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_MASK 0x0780
269#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_SHIFT 7
270#define MDIO_OVER_1G_LP_UP3 0x1E
272#define MDIO_REG_BANK_REMOTE_PHY 0x8330
273#define MDIO_REMOTE_PHY_MISC_RX_STATUS 0x10
274#define MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_OVER1G_MSG 0x0010
275#define MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_BRCM_OUI_MSG 0x0600
277#define MDIO_REG_BANK_BAM_NEXT_PAGE 0x8350
278#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL 0x10
279#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE 0x0001
280#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN 0x0002
282#define MDIO_REG_BANK_CL73_USERB0 0x8370
283#define MDIO_CL73_USERB0_CL73_UCTRL 0x10
284#define MDIO_CL73_USERB0_CL73_UCTRL_USTAT1_MUXSEL 0x0002
285#define MDIO_CL73_USERB0_CL73_USTAT1 0x11
286#define MDIO_CL73_USERB0_CL73_USTAT1_LINK_STATUS_CHECK 0x0100
287#define MDIO_CL73_USERB0_CL73_USTAT1_AN_GOOD_CHECK_BAM37 0x0400
288#define MDIO_CL73_USERB0_CL73_BAM_CTRL1 0x12
289#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_EN 0x8000
290#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN 0x4000
291#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN 0x2000
292#define MDIO_CL73_USERB0_CL73_BAM_CTRL3 0x14
293#define MDIO_CL73_USERB0_CL73_BAM_CTRL3_USE_CL73_HCD_MR 0x0001
295#define MDIO_REG_BANK_AER_BLOCK 0xFFD0
296#define MDIO_AER_BLOCK_AER_REG 0x1E
298#define MDIO_REG_BANK_COMBO_IEEE0 0xFFE0
299#define MDIO_COMBO_IEEE0_MII_CONTROL 0x10
300#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_MASK 0x2040
301#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_10 0x0000
302#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_100 0x2000
303#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_1000 0x0040
304#define MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX 0x0100
305#define MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN 0x0200
306#define MDIO_COMBO_IEEO_MII_CONTROL_AN_EN 0x1000
307#define MDIO_COMBO_IEEO_MII_CONTROL_LOOPBACK 0x4000
308#define MDIO_COMBO_IEEO_MII_CONTROL_RESET 0x8000
309#define MDIO_COMBO_IEEE0_MII_STATUS 0x11
310#define MDIO_COMBO_IEEE0_MII_STATUS_LINK_PASS 0x0004
311#define MDIO_COMBO_IEEE0_MII_STATUS_AUTONEG_COMPLETE 0x0020
312#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV 0x14
313#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_FULL_DUPLEX 0x0020
314#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_HALF_DUPLEX 0x0040
315#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK 0x0180
316#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE 0x0000
317#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC 0x0080
318#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC 0x0100
319#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH 0x0180
320#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_NEXT_PAGE 0x8000
321#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1 0x15
322#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_NEXT_PAGE 0x8000
323#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_ACK 0x4000
324#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_MASK 0x0180
325#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_NONE 0x0000
326#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_BOTH 0x0180
327#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_HALF_DUP_CAP 0x0040
328#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_FULL_DUP_CAP 0x0020
332#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_SGMII_MODE 0x0001
335#define MDIO_PMA_DEVAD 0x1
337#define MDIO_PMA_REG_CTRL 0x0
338#define MDIO_PMA_REG_STATUS 0x1
339#define MDIO_PMA_REG_10G_CTRL2 0x7
340#define MDIO_PMA_REG_TX_DISABLE 0x0009
341#define MDIO_PMA_REG_RX_SD 0xa
343#define MDIO_PMA_REG_BCM_CTRL 0x0096
344#define MDIO_PMA_REG_FEC_CTRL 0x00ab
345#define MDIO_PMA_LASI_RXCTRL 0x9000
346#define MDIO_PMA_LASI_TXCTRL 0x9001
347#define MDIO_PMA_LASI_CTRL 0x9002
348#define MDIO_PMA_LASI_RXSTAT 0x9003
349#define MDIO_PMA_LASI_TXSTAT 0x9004
350#define MDIO_PMA_LASI_STAT 0x9005
351#define MDIO_PMA_REG_PHY_IDENTIFIER 0xc800
352#define MDIO_PMA_REG_DIGITAL_CTRL 0xc808
353#define MDIO_PMA_REG_DIGITAL_STATUS 0xc809
354#define MDIO_PMA_REG_TX_POWER_DOWN 0xca02
355#define MDIO_PMA_REG_CMU_PLL_BYPASS 0xca09
356#define MDIO_PMA_REG_MISC_CTRL 0xca0a
357#define MDIO_PMA_REG_GEN_CTRL 0xca10
358 #define MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP 0x0188
359 #define MDIO_PMA_REG_GEN_CTRL_ROM_MICRO_RESET 0x018a
360#define MDIO_PMA_REG_M8051_MSGIN_REG 0xca12
361#define MDIO_PMA_REG_M8051_MSGOUT_REG 0xca13
362#define MDIO_PMA_REG_ROM_VER1 0xca19
363#define MDIO_PMA_REG_ROM_VER2 0xca1a
364#define MDIO_PMA_REG_EDC_FFE_MAIN 0xca1b
365#define MDIO_PMA_REG_PLL_BANDWIDTH 0xca1d
366#define MDIO_PMA_REG_PLL_CTRL 0xca1e
367#define MDIO_PMA_REG_MISC_CTRL0 0xca23
368#define MDIO_PMA_REG_LRM_MODE 0xca3f
369#define MDIO_PMA_REG_CDR_BANDWIDTH 0xca46
370#define MDIO_PMA_REG_MISC_CTRL1 0xca85
372#define MDIO_PMA_REG_SFP_TWO_WIRE_CTRL 0x8000
373 #define MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK 0x000c
374 #define MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_IDLE 0x0000
375 #define MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_COMPLETE 0x0004
376 #define MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_IN_PROGRESS 0x0008
377 #define MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_FAILED 0x000c
378#define MDIO_PMA_REG_SFP_TWO_WIRE_BYTE_CNT 0x8002
379#define MDIO_PMA_REG_SFP_TWO_WIRE_MEM_ADDR 0x8003
380#define MDIO_PMA_REG_8726_TWO_WIRE_DATA_BUF 0xc820
381 #define MDIO_PMA_REG_8726_TWO_WIRE_DATA_MASK 0xff
382#define MDIO_PMA_REG_8726_TX_CTRL1 0xca01
383#define MDIO_PMA_REG_8726_TX_CTRL2 0xca05
385#define MDIO_PMA_REG_8727_TWO_WIRE_SLAVE_ADDR 0x8005
386#define MDIO_PMA_REG_8727_TWO_WIRE_DATA_BUF 0x8007
387 #define MDIO_PMA_REG_8727_TWO_WIRE_DATA_MASK 0xff
388#define MDIO_PMA_REG_8727_MISC_CTRL 0x8309
389#define MDIO_PMA_REG_8727_TX_CTRL1 0xca02
390#define MDIO_PMA_REG_8727_TX_CTRL2 0xca05
391#define MDIO_PMA_REG_8727_PCS_OPT_CTRL 0xc808
392#define MDIO_PMA_REG_8727_GPIO_CTRL 0xc80e
393#define MDIO_PMA_REG_8727_PCS_GP 0xc842
394#define MDIO_PMA_REG_8727_OPT_CFG_REG 0xc8e4
396#define MDIO_AN_REG_8727_MISC_CTRL 0x8309
397#define MDIO_PMA_REG_8073_CHIP_REV 0xc801
398#define MDIO_PMA_REG_8073_SPEED_LINK_STATUS 0xc820
399#define MDIO_PMA_REG_8073_XAUI_WA 0xc841
400#define MDIO_PMA_REG_8073_OPT_DIGITAL_CTRL 0xcd08
402#define MDIO_PMA_REG_7101_RESET 0xc000
403#define MDIO_PMA_REG_7107_LED_CNTL 0xc007
404#define MDIO_PMA_REG_7107_LINK_LED_CNTL 0xc009
405#define MDIO_PMA_REG_7101_VER1 0xc026
406#define MDIO_PMA_REG_7101_VER2 0xc027
408#define MDIO_PMA_REG_8481_PMD_SIGNAL 0xa811
409#define MDIO_PMA_REG_8481_LED1_MASK 0xa82c
410#define MDIO_PMA_REG_8481_LED2_MASK 0xa82f
411#define MDIO_PMA_REG_8481_LED3_MASK 0xa832
412#define MDIO_PMA_REG_8481_LED3_BLINK 0xa834
413#define MDIO_PMA_REG_8481_LED5_MASK 0xa838
414#define MDIO_PMA_REG_8481_SIGNAL_MASK 0xa835
415#define MDIO_PMA_REG_8481_LINK_SIGNAL 0xa83b
416#define MDIO_PMA_REG_8481_LINK_SIGNAL_LED4_ENABLE_MASK 0x800
417#define MDIO_PMA_REG_8481_LINK_SIGNAL_LED4_ENABLE_SHIFT 11
421#define MDIO_WIS_DEVAD 0x2
423#define MDIO_WIS_REG_LASI_CNTL 0x9002
424#define MDIO_WIS_REG_LASI_STATUS 0x9005
426#define MDIO_PCS_DEVAD 0x3
427#define MDIO_PCS_REG_STATUS 0x0020
428#define MDIO_PCS_REG_LASI_STATUS 0x9005
429#define MDIO_PCS_REG_7101_DSP_ACCESS 0xD000
430#define MDIO_PCS_REG_7101_SPI_MUX 0xD008
431#define MDIO_PCS_REG_7101_SPI_CTRL_ADDR 0xE12A
432 #define MDIO_PCS_REG_7101_SPI_RESET_BIT (5)
433#define MDIO_PCS_REG_7101_SPI_FIFO_ADDR 0xE02A
434 #define MDIO_PCS_REG_7101_SPI_FIFO_ADDR_WRITE_ENABLE_CMD (6)
435 #define MDIO_PCS_REG_7101_SPI_FIFO_ADDR_BULK_ERASE_CMD (0xC7)
436 #define MDIO_PCS_REG_7101_SPI_FIFO_ADDR_PAGE_PROGRAM_CMD (2)
437#define MDIO_PCS_REG_7101_SPI_BYTES_TO_TRANSFER_ADDR 0xE028
441#define MDIO_XS_DEVAD 0x4
442#define MDIO_XS_REG_STATUS 0x0001
443#define MDIO_XS_PLL_SEQUENCER 0x8000
444#define MDIO_XS_SFX7101_XGXS_TEST1 0xc00a
446#define MDIO_XS_8706_REG_BANK_RX0 0x80bc
447#define MDIO_XS_8706_REG_BANK_RX1 0x80cc
448#define MDIO_XS_8706_REG_BANK_RX2 0x80dc
449#define MDIO_XS_8706_REG_BANK_RX3 0x80ec
450#define MDIO_XS_8706_REG_BANK_RXA 0x80fc
452#define MDIO_XS_REG_8073_RX_CTRL_PCIE 0x80FA
454#define MDIO_AN_DEVAD 0x7
456#define MDIO_AN_REG_CTRL 0x0000
457#define MDIO_AN_REG_STATUS 0x0001
458 #define MDIO_AN_REG_STATUS_AN_COMPLETE 0x0020
459#define MDIO_AN_REG_ADV_PAUSE 0x0010
460 #define MDIO_AN_REG_ADV_PAUSE_PAUSE 0x0400
461 #define MDIO_AN_REG_ADV_PAUSE_ASYMMETRIC 0x0800
462 #define MDIO_AN_REG_ADV_PAUSE_BOTH 0x0C00
463 #define MDIO_AN_REG_ADV_PAUSE_MASK 0x0C00
464#define MDIO_AN_REG_ADV 0x0011
465#define MDIO_AN_REG_ADV2 0x0012
466#define MDIO_AN_REG_LP_AUTO_NEG 0x0013
467#define MDIO_AN_REG_LP_AUTO_NEG2 0x0014
468#define MDIO_AN_REG_MASTER_STATUS 0x0021
469#define MDIO_AN_REG_EEE_ADV 0x003c
470#define MDIO_AN_REG_LP_EEE_ADV 0x003d
472#define MDIO_AN_REG_LINK_STATUS 0x8304
473#define MDIO_AN_REG_CL37_CL73 0x8370
474#define MDIO_AN_REG_CL37_AN 0xffe0
475#define MDIO_AN_REG_CL37_FC_LD 0xffe4
476#define MDIO_AN_REG_CL37_FC_LP 0xffe5
477#define MDIO_AN_REG_1000T_STATUS 0xffea
479#define MDIO_AN_REG_8073_2_5G 0x8329
480#define MDIO_AN_REG_8073_BAM 0x8350
482#define MDIO_AN_REG_8481_10GBASE_T_AN_CTRL 0x0020
483#define MDIO_AN_REG_8481_LEGACY_MII_CTRL 0xffe0
484 #define MDIO_AN_REG_8481_MII_CTRL_FORCE_1G 0x40
485#define MDIO_AN_REG_8481_LEGACY_MII_STATUS 0xffe1
486#define MDIO_AN_REG_848xx_ID_MSB 0xffe2
487 #define BCM84858_PHY_ID 0x600d
488#define MDIO_AN_REG_848xx_ID_LSB 0xffe3
489#define MDIO_AN_REG_8481_LEGACY_AN_ADV 0xffe4
490#define MDIO_AN_REG_8481_LEGACY_AN_EXPANSION 0xffe6
491#define MDIO_AN_REG_8481_1000T_CTRL 0xffe9
492#define MDIO_AN_REG_8481_1G_100T_EXT_CTRL 0xfff0
493 #define MIDO_AN_REG_8481_EXT_CTRL_FORCE_LEDS_OFF 0x0008
494#define MDIO_AN_REG_8481_EXPANSION_REG_RD_RW 0xfff5
495#define MDIO_AN_REG_8481_EXPANSION_REG_ACCESS 0xfff7
496#define MDIO_AN_REG_8481_AUX_CTRL 0xfff8
497#define MDIO_AN_REG_8481_LEGACY_SHADOW 0xfffc
500#define MDIO_CTL_DEVAD 0x1e
501#define MDIO_CTL_REG_84823_MEDIA 0x401a
502 #define MDIO_CTL_REG_84823_MEDIA_MAC_MASK 0x0018
504 #define MDIO_CTL_REG_84823_CTRL_MAC_XFI 0x0008
505 #define MDIO_CTL_REG_84823_MEDIA_MAC_XAUI_M 0x0010
507 #define MDIO_CTL_REG_84823_MEDIA_LINE_MASK 0x0060
508 #define MDIO_CTL_REG_84823_MEDIA_LINE_XAUI_L 0x0020
509 #define MDIO_CTL_REG_84823_MEDIA_LINE_XFI 0x0040
513 #define MDIO_CTL_REG_84823_MEDIA_COPPER_CORE_DOWN 0x0080
514 #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_MASK 0x0100
515 #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_COPPER 0x0000
516 #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_FIBER 0x0100
517 #define MDIO_CTL_REG_84823_MEDIA_FIBER_1G 0x1000
518#define MDIO_CTL_REG_84823_USER_CTRL_REG 0x4005
519 #define MDIO_CTL_REG_84823_USER_CTRL_CMS 0x0080
520#define MDIO_PMA_REG_84823_CTL_SLOW_CLK_CNT_HIGH 0xa82b
521 #define MDIO_PMA_REG_84823_BLINK_RATE_VAL_15P9HZ 0x2f
522#define MDIO_PMA_REG_84823_CTL_LED_CTL_1 0xa8e3
523#define MDIO_PMA_REG_84833_CTL_LED_CTL_1 0xa8ec
524 #define MDIO_PMA_REG_84823_LED3_STRETCH_EN 0x0080
527#define MDIO_84833_TOP_CFG_FW_REV 0x400f
528 #define MDIO_84833_TOP_CFG_FW_EEE 0x10b1
529 #define MDIO_84833_TOP_CFG_FW_NO_EEE 0x1f81
530#define MDIO_84833_TOP_CFG_XGPHY_STRAP1 0x401a
531 #define MDIO_84833_SUPER_ISOLATE 0x8000
533#define MDIO_848xx_TOP_CFG_SCRATCH_REG0 0x4005
534#define MDIO_848xx_TOP_CFG_SCRATCH_REG1 0x4006
535#define MDIO_848xx_TOP_CFG_SCRATCH_REG2 0x4007
536#define MDIO_848xx_TOP_CFG_SCRATCH_REG3 0x4008
537#define MDIO_848xx_TOP_CFG_SCRATCH_REG4 0x4009
538#define MDIO_848xx_TOP_CFG_SCRATCH_REG26 0x4037
539#define MDIO_848xx_TOP_CFG_SCRATCH_REG27 0x4038
540#define MDIO_848xx_TOP_CFG_SCRATCH_REG28 0x4039
541#define MDIO_848xx_TOP_CFG_SCRATCH_REG29 0x403a
542#define MDIO_848xx_TOP_CFG_SCRATCH_REG30 0x403b
543#define MDIO_848xx_TOP_CFG_SCRATCH_REG31 0x403c
544#define MDIO_848xx_CMD_HDLR_COMMAND (MDIO_848xx_TOP_CFG_SCRATCH_REG0)
545#define MDIO_848xx_CMD_HDLR_STATUS (MDIO_848xx_TOP_CFG_SCRATCH_REG26)
546#define MDIO_848xx_CMD_HDLR_DATA1 (MDIO_848xx_TOP_CFG_SCRATCH_REG27)
547#define MDIO_848xx_CMD_HDLR_DATA2 (MDIO_848xx_TOP_CFG_SCRATCH_REG28)
548#define MDIO_848xx_CMD_HDLR_DATA3 (MDIO_848xx_TOP_CFG_SCRATCH_REG29)
549#define MDIO_848xx_CMD_HDLR_DATA4 (MDIO_848xx_TOP_CFG_SCRATCH_REG30)
550#define MDIO_848xx_CMD_HDLR_DATA5 (MDIO_848xx_TOP_CFG_SCRATCH_REG31)
553#define PHY848xx_CMD_SET_PAIR_SWAP 0x8001
554#define PHY848xx_CMD_GET_EEE_MODE 0x8008
555#define PHY848xx_CMD_SET_EEE_MODE 0x8009
556#define PHY848xx_CMD_GET_CURRENT_TEMP 0x8031
558#define PHY84833_STATUS_CMD_RECEIVED 0x0001
559#define PHY84833_STATUS_CMD_IN_PROGRESS 0x0002
560#define PHY84833_STATUS_CMD_COMPLETE_PASS 0x0004
561#define PHY84833_STATUS_CMD_COMPLETE_ERROR 0x0008
562#define PHY84833_STATUS_CMD_OPEN_FOR_CMDS 0x0010
563#define PHY84833_STATUS_CMD_SYSTEM_BOOT 0x0020
564#define PHY84833_STATUS_CMD_NOT_OPEN_FOR_CMDS 0x0040
565#define PHY84833_STATUS_CMD_CLEAR_COMPLETE 0x0080
566#define PHY84833_STATUS_CMD_OPEN_OVERRIDE 0xa5a5
568#define PHY84833_MB_PROCESS1 1
569#define PHY84833_MB_PROCESS2 2
570#define PHY84833_MB_PROCESS3 3
574#define PHY84858_STATUS_CMD_RECEIVED 0x0001
575#define PHY84858_STATUS_CMD_IN_PROGRESS 0x0002
576#define PHY84858_STATUS_CMD_COMPLETE_PASS 0x0004
577#define PHY84858_STATUS_CMD_COMPLETE_ERROR 0x0008
578#define PHY84858_STATUS_CMD_SYSTEM_BUSY 0xbbbb
582#define MDIO_WC_DEVAD 0x3
583#define MDIO_WC_REG_IEEE0BLK_MIICNTL 0x0
584#define MDIO_WC_REG_IEEE0BLK_AUTONEGNP 0x7
585#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT0 0x10
586#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT1 0x11
587#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT2 0x12
588 #define MDIO_WC_REG_AN_IEEE1BLK_AN_ADV2_FEC_ABILITY 0x4000
589 #define MDIO_WC_REG_AN_IEEE1BLK_AN_ADV2_FEC_REQ 0x8000
590#define MDIO_WC_REG_PCS_STATUS2 0x0021
591#define MDIO_WC_REG_PMD_KR_CONTROL 0x0096
592#define MDIO_WC_REG_XGXSBLK0_XGXSCONTROL 0x8000
593#define MDIO_WC_REG_XGXSBLK0_MISCCONTROL1 0x800e
594#define MDIO_WC_REG_XGXSBLK1_DESKEW 0x8010
595#define MDIO_WC_REG_XGXSBLK1_LANECTRL0 0x8015
596#define MDIO_WC_REG_XGXSBLK1_LANECTRL1 0x8016
597#define MDIO_WC_REG_XGXSBLK1_LANECTRL2 0x8017
598#define MDIO_WC_REG_XGXSBLK1_LANECTRL3 0x8018
599#define MDIO_WC_REG_XGXSBLK1_LANETEST0 0x801a
600#define MDIO_WC_REG_TX0_ANA_CTRL0 0x8061
601#define MDIO_WC_REG_TX1_ANA_CTRL0 0x8071
602#define MDIO_WC_REG_TX2_ANA_CTRL0 0x8081
603#define MDIO_WC_REG_TX3_ANA_CTRL0 0x8091
604#define MDIO_WC_REG_TX0_TX_DRIVER 0x8067
605#define MDIO_WC_REG_TX0_TX_DRIVER_IFIR_OFFSET 0x01
606#define MDIO_WC_REG_TX0_TX_DRIVER_IFIR_MASK 0x000e
607#define MDIO_WC_REG_TX0_TX_DRIVER_IPRE_DRIVER_OFFSET 0x04
608#define MDIO_WC_REG_TX0_TX_DRIVER_IPRE_DRIVER_MASK 0x00f0
609#define MDIO_WC_REG_TX0_TX_DRIVER_IDRIVER_OFFSET 0x08
610#define MDIO_WC_REG_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00
611#define MDIO_WC_REG_TX0_TX_DRIVER_POST2_COEFF_OFFSET 0x0c
612#define MDIO_WC_REG_TX0_TX_DRIVER_POST2_COEFF_MASK 0x7000
613#define MDIO_WC_REG_TX1_TX_DRIVER 0x8077
614#define MDIO_WC_REG_TX2_TX_DRIVER 0x8087
615#define MDIO_WC_REG_TX3_TX_DRIVER 0x8097
616#define MDIO_WC_REG_RX0_ANARXCONTROL1G 0x80b9
617#define MDIO_WC_REG_RX2_ANARXCONTROL1G 0x80d9
618#define MDIO_WC_REG_RX0_PCI_CTRL 0x80ba
619#define MDIO_WC_REG_RX1_PCI_CTRL 0x80ca
620#define MDIO_WC_REG_RX2_PCI_CTRL 0x80da
621#define MDIO_WC_REG_RX3_PCI_CTRL 0x80ea
622#define MDIO_WC_REG_RXB_ANA_RX_CONTROL_PCI 0x80fa
623#define MDIO_WC_REG_XGXSBLK2_UNICORE_MODE_10G 0x8104
624#define MDIO_WC_REG_XGXSBLK2_LANE_RESET 0x810a
625#define MDIO_WC_REG_XGXS_STATUS3 0x8129
626#define MDIO_WC_REG_PAR_DET_10G_STATUS 0x8130
627#define MDIO_WC_REG_PAR_DET_10G_CTRL 0x8131
628#define MDIO_WC_REG_XGXS_STATUS4 0x813c
629#define MDIO_WC_REG_XGXS_X2_CONTROL2 0x8141
630#define MDIO_WC_REG_XGXS_X2_CONTROL3 0x8142
631#define MDIO_WC_REG_XGXS_RX_LN_SWAP1 0x816B
632#define MDIO_WC_REG_XGXS_TX_LN_SWAP1 0x8169
633#define MDIO_WC_REG_GP2_STATUS_GP_2_0 0x81d0
634#define MDIO_WC_REG_GP2_STATUS_GP_2_1 0x81d1
635#define MDIO_WC_REG_GP2_STATUS_GP_2_2 0x81d2
636#define MDIO_WC_REG_GP2_STATUS_GP_2_3 0x81d3
637#define MDIO_WC_REG_GP2_STATUS_GP_2_4 0x81d4
638 #define MDIO_WC_REG_GP2_STATUS_GP_2_4_CL73_AN_CMPL 0x1000
639 #define MDIO_WC_REG_GP2_STATUS_GP_2_4_CL37_AN_CMPL 0x0100
640 #define MDIO_WC_REG_GP2_STATUS_GP_2_4_CL37_LP_AN_CAP 0x0010
641 #define MDIO_WC_REG_GP2_STATUS_GP_2_4_CL37_AN_CAP 0x1
642#define MDIO_WC_REG_UC_INFO_B0_DEAD_TRAP 0x81EE
643#define MDIO_WC_REG_UC_INFO_B1_VERSION 0x81F0
644#define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE 0x81F2
645 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_LANE0_OFFSET 0x0
646 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_DEFAULT 0x0
647 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_SFP_OPT_LR 0x1
648 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_SFP_DAC 0x2
649 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_SFP_XLAUI 0x3
650 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_LONG_CH_6G 0x4
651 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_LANE1_OFFSET 0x4
652 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_LANE2_OFFSET 0x8
653 #define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_LANE3_OFFSET 0xc
654#define MDIO_WC_REG_UC_INFO_B1_CRC 0x81FE
655#define MDIO_WC_REG_DSC1B0_UC_CTRL 0x820e
656 #define MDIO_WC_REG_DSC1B0_UC_CTRL_RDY4CMD (1<<7)
657#define MDIO_WC_REG_DSC_SMC 0x8213
658#define MDIO_WC_REG_DSC2B0_DSC_MISC_CTRL0 0x821e
659#define MDIO_WC_REG_TX_FIR_TAP 0x82e2
660 #define MDIO_WC_REG_TX_FIR_TAP_PRE_TAP_OFFSET 0x00
661 #define MDIO_WC_REG_TX_FIR_TAP_PRE_TAP_MASK 0x000f
662 #define MDIO_WC_REG_TX_FIR_TAP_MAIN_TAP_OFFSET 0x04
663 #define MDIO_WC_REG_TX_FIR_TAP_MAIN_TAP_MASK 0x03f0
664 #define MDIO_WC_REG_TX_FIR_TAP_POST_TAP_OFFSET 0x0a
665 #define MDIO_WC_REG_TX_FIR_TAP_POST_TAP_MASK 0x7c00
666 #define MDIO_WC_REG_TX_FIR_TAP_ENABLE 0x8000
667#define MDIO_WC_REG_CL72_USERB0_CL72_TX_FIR_TAP 0x82e2
668#define MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL 0x82e3
669#define MDIO_WC_REG_CL72_USERB0_CL72_OS_DEF_CTRL 0x82e6
670#define MDIO_WC_REG_CL72_USERB0_CL72_BR_DEF_CTRL 0x82e7
671#define MDIO_WC_REG_CL72_USERB0_CL72_2P5_DEF_CTRL 0x82e8
672#define MDIO_WC_REG_CL72_USERB0_CL72_MISC4_CONTROL 0x82ec
673#define MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X1 0x8300
674#define MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X2 0x8301
675#define MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X3 0x8302
676#define MDIO_WC_REG_SERDESDIGITAL_STATUS1000X1 0x8304
677#define MDIO_WC_REG_SERDESDIGITAL_MISC1 0x8308
678#define MDIO_WC_REG_SERDESDIGITAL_MISC2 0x8309
679#define MDIO_WC_REG_DIGITAL3_UP1 0x8329
680#define MDIO_WC_REG_DIGITAL3_LP_UP1 0x832c
681#define MDIO_WC_REG_DIGITAL4_MISC3 0x833c
682#define MDIO_WC_REG_DIGITAL4_MISC5 0x833e
683#define MDIO_WC_REG_DIGITAL5_MISC6 0x8345
684#define MDIO_WC_REG_DIGITAL5_MISC7 0x8349
685#define MDIO_WC_REG_DIGITAL5_LINK_STATUS 0x834d
686#define MDIO_WC_REG_DIGITAL5_ACTUAL_SPEED 0x834e
687#define MDIO_WC_REG_DIGITAL6_MP5_NEXTPAGECTRL 0x8350
688#define MDIO_WC_REG_CL49_USERB0_CTRL 0x8368
689#define MDIO_WC_REG_CL73_USERB0_CTRL 0x8370
690#define MDIO_WC_REG_CL73_USERB0_USTAT 0x8371
691#define MDIO_WC_REG_CL73_BAM_CTRL1 0x8372
692#define MDIO_WC_REG_CL73_BAM_CTRL2 0x8373
693#define MDIO_WC_REG_CL73_BAM_CTRL3 0x8374
694#define MDIO_WC_REG_CL73_BAM_CODE_FIELD 0x837b
695#define MDIO_WC_REG_EEE_COMBO_CONTROL0 0x8390
696#define MDIO_WC_REG_TX66_CONTROL 0x83b0
697#define MDIO_WC_REG_RX66_CONTROL 0x83c0
698#define MDIO_WC_REG_RX66_SCW0 0x83c2
699#define MDIO_WC_REG_RX66_SCW1 0x83c3
700#define MDIO_WC_REG_RX66_SCW2 0x83c4
701#define MDIO_WC_REG_RX66_SCW3 0x83c5
702#define MDIO_WC_REG_RX66_SCW0_MASK 0x83c6
703#define MDIO_WC_REG_RX66_SCW1_MASK 0x83c7
704#define MDIO_WC_REG_RX66_SCW2_MASK 0x83c8
705#define MDIO_WC_REG_RX66_SCW3_MASK 0x83c9
706#define MDIO_WC_REG_FX100_CTRL1 0x8400
707#define MDIO_WC_REG_FX100_CTRL3 0x8402
708#define MDIO_WC_REG_CL82_USERB1_TX_CTRL5 0x8436
709#define MDIO_WC_REG_CL82_USERB1_TX_CTRL6 0x8437
710#define MDIO_WC_REG_CL82_USERB1_TX_CTRL7 0x8438
711#define MDIO_WC_REG_CL82_USERB1_TX_CTRL9 0x8439
712#define MDIO_WC_REG_CL82_USERB1_RX_CTRL10 0x843a
713#define MDIO_WC_REG_CL82_USERB1_RX_CTRL11 0x843b
714#define MDIO_WC_REG_ETA_CL73_OUI1 0x8453
715#define MDIO_WC_REG_ETA_CL73_OUI2 0x8454
716#define MDIO_WC_REG_ETA_CL73_OUI3 0x8455
717#define MDIO_WC_REG_ETA_CL73_LD_BAM_CODE 0x8456
718#define MDIO_WC_REG_ETA_CL73_LD_UD_CODE 0x8457
719#define MDIO_WC_REG_MICROBLK_CMD 0xffc2
720#define MDIO_WC_REG_MICROBLK_DL_STATUS 0xffc5
721#define MDIO_WC_REG_MICROBLK_CMD3 0xffcc
723#define MDIO_WC_REG_AERBLK_AER 0xffde
724#define MDIO_WC_REG_COMBO_IEEE0_MIICTRL 0xffe0
725#define MDIO_WC_REG_COMBO_IEEE0_MIIISTAT 0xffe1
727#define MDIO_WC0_XGXS_BLK2_LANE_RESET 0x810A
728 #define MDIO_WC0_XGXS_BLK2_LANE_RESET_RX_BITSHIFT 0
729 #define MDIO_WC0_XGXS_BLK2_LANE_RESET_TX_BITSHIFT 4
731#define MDIO_WC0_XGXS_BLK6_XGXS_X2_CONTROL2 0x8141
733#define DIGITAL5_ACTUAL_SPEED_TX_MASK 0x003f
736#define MDIO_REG_GPHY_MII_STATUS 0x1
737#define MDIO_REG_GPHY_PHYID_LSB 0x3
738#define MDIO_REG_GPHY_CL45_ADDR_REG 0xd
739 #define MDIO_REG_GPHY_CL45_REG_WRITE 0x4000
740 #define MDIO_REG_GPHY_CL45_REG_READ 0xc000
741#define MDIO_REG_GPHY_CL45_DATA_REG 0xe
742 #define MDIO_REG_GPHY_EEE_RESOLVED 0x803e
743#define MDIO_REG_GPHY_EXP_ACCESS_GATE 0x15
744#define MDIO_REG_GPHY_EXP_ACCESS 0x17
745 #define MDIO_REG_GPHY_EXP_ACCESS_TOP 0xd00
746 #define MDIO_REG_GPHY_EXP_TOP_2K_BUF 0x40
747#define MDIO_REG_GPHY_AUX_STATUS 0x19
748#define MDIO_REG_INTR_STATUS 0x1a
749#define MDIO_REG_INTR_MASK 0x1b
750 #define MDIO_REG_INTR_MASK_LINK_STATUS (0x1 << 1)
751#define MDIO_REG_GPHY_SHADOW 0x1c
752 #define MDIO_REG_GPHY_SHADOW_LED_SEL1 (0x0d << 10)
753 #define MDIO_REG_GPHY_SHADOW_LED_SEL2 (0x0e << 10)
754 #define MDIO_REG_GPHY_SHADOW_WR_ENA (0x1 << 15)
755 #define MDIO_REG_GPHY_SHADOW_AUTO_DET_MED (0x1e << 10)
756 #define MDIO_REG_GPHY_SHADOW_INVERT_FIB_SD (0x1 << 8)
761 uint8_t dev_addr, uint16_t
addr, uint8_t byte_cnt,
762 uint8_t *o_buf, uint8_t);
764#define ELINK_ETH_HLEN 14
766#define ELINK_ETH_OVREHEAD (ELINK_ETH_HLEN + 8 + 8)
767#define ELINK_ETH_MIN_PACKET_SIZE 60
768#define ELINK_ETH_MAX_PACKET_SIZE 1500
769#define ELINK_ETH_MAX_JUMBO_PACKET_SIZE 9600
770#define ELINK_MDIO_ACCESS_TIMEOUT 1000
772#define I2C_SWITCH_WIDTH 2
775#define I2C_WA_RETRY_CNT 3
776#define I2C_WA_PWR_ITER (I2C_WA_RETRY_CNT - 1)
777#define MCPR_IMC_COMMAND_READ_OP 1
778#define MCPR_IMC_COMMAND_WRITE_OP 2
781#define LED_BLINK_RATE_VAL_E3 354
782#define LED_BLINK_RATE_VAL_E1X_E2 480
787#define ELINK_NIG_LATCH_BC_ENABLE_MI_INT 0
789#define ELINK_NIG_STATUS_EMAC0_MI_INT \
790 NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_EMAC0_MISC_MI_INT
791#define ELINK_NIG_STATUS_XGXS0_LINK10G \
792 NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK10G
793#define ELINK_NIG_STATUS_XGXS0_LINK_STATUS \
794 NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK_STATUS
795#define ELINK_NIG_STATUS_XGXS0_LINK_STATUS_SIZE \
796 NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK_STATUS_SIZE
797#define ELINK_NIG_STATUS_SERDES0_LINK_STATUS \
798 NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_SERDES0_LINK_STATUS
799#define ELINK_NIG_MASK_MI_INT \
800 NIG_MASK_INTERRUPT_PORT0_REG_MASK_EMAC0_MISC_MI_INT
801#define ELINK_NIG_MASK_XGXS0_LINK10G \
802 NIG_MASK_INTERRUPT_PORT0_REG_MASK_XGXS0_LINK10G
803#define ELINK_NIG_MASK_XGXS0_LINK_STATUS \
804 NIG_MASK_INTERRUPT_PORT0_REG_MASK_XGXS0_LINK_STATUS
805#define ELINK_NIG_MASK_SERDES0_LINK_STATUS \
806 NIG_MASK_INTERRUPT_PORT0_REG_MASK_SERDES0_LINK_STATUS
808#define ELINK_MDIO_AN_CL73_OR_37_COMPLETE \
809 (MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE | \
810 MDIO_GP_STATUS_TOP_AN_STATUS1_CL37_AUTONEG_COMPLETE)
812#define ELINK_XGXS_RESET_BITS \
813 (MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_RSTB_HW | \
814 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_IDDQ | \
815 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_PWRDWN | \
816 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_PWRDWN_SD | \
817 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_TXD_FIFO_RSTB)
819#define ELINK_SERDES_RESET_BITS \
820 (MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_RSTB_HW | \
821 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_IDDQ | \
822 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_PWRDWN | \
823 MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_PWRDWN_SD)
825#define ELINK_AUTONEG_CL37 SHARED_HW_CFG_AN_ENABLE_CL37
826#define ELINK_AUTONEG_CL73 SHARED_HW_CFG_AN_ENABLE_CL73
827#define ELINK_AUTONEG_BAM SHARED_HW_CFG_AN_ENABLE_BAM
828#define ELINK_AUTONEG_PARALLEL \
829 SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION
830#define ELINK_AUTONEG_SGMII_FIBER_AUTODET \
831 SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT
832#define ELINK_AUTONEG_REMOTE_PHY SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY
834#define ELINK_GP_STATUS_PAUSE_RSOLUTION_TXSIDE \
835 MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE
836#define ELINK_GP_STATUS_PAUSE_RSOLUTION_RXSIDE \
837 MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_RXSIDE
838#define ELINK_GP_STATUS_SPEED_MASK \
839 MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_MASK
840#define ELINK_GP_STATUS_10M MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10M
841#define ELINK_GP_STATUS_100M MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_100M
842#define ELINK_GP_STATUS_1G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G
843#define ELINK_GP_STATUS_2_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_2_5G
844#define ELINK_GP_STATUS_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_5G
845#define ELINK_GP_STATUS_6G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_6G
846#define ELINK_GP_STATUS_10G_HIG \
847 MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_HIG
848#define ELINK_GP_STATUS_10G_CX4 \
849 MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_CX4
850#define ELINK_GP_STATUS_1G_KX MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G_KX
851#define ELINK_GP_STATUS_10G_KX4 \
852 MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KX4
853#define ELINK_GP_STATUS_10G_KR MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KR
854#define ELINK_GP_STATUS_10G_XFI MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_XFI
855#define ELINK_GP_STATUS_20G_DXGXS MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_20G_DXGXS
856#define ELINK_GP_STATUS_10G_SFI MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_SFI
857#define ELINK_GP_STATUS_20G_KR2 MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_20G_KR2
858#define ELINK_LINK_10THD LINK_STATUS_SPEED_AND_DUPLEX_10THD
859#define ELINK_LINK_10TFD LINK_STATUS_SPEED_AND_DUPLEX_10TFD
860#define ELINK_LINK_100TXHD LINK_STATUS_SPEED_AND_DUPLEX_100TXHD
861#define ELINK_LINK_100T4 LINK_STATUS_SPEED_AND_DUPLEX_100T4
862#define ELINK_LINK_100TXFD LINK_STATUS_SPEED_AND_DUPLEX_100TXFD
863#define ELINK_LINK_1000THD LINK_STATUS_SPEED_AND_DUPLEX_1000THD
864#define ELINK_LINK_1000TFD LINK_STATUS_SPEED_AND_DUPLEX_1000TFD
865#define ELINK_LINK_1000XFD LINK_STATUS_SPEED_AND_DUPLEX_1000XFD
866#define ELINK_LINK_2500THD LINK_STATUS_SPEED_AND_DUPLEX_2500THD
867#define ELINK_LINK_2500TFD LINK_STATUS_SPEED_AND_DUPLEX_2500TFD
868#define ELINK_LINK_2500XFD LINK_STATUS_SPEED_AND_DUPLEX_2500XFD
869#define ELINK_LINK_10GTFD LINK_STATUS_SPEED_AND_DUPLEX_10GTFD
870#define ELINK_LINK_10GXFD LINK_STATUS_SPEED_AND_DUPLEX_10GXFD
871#define ELINK_LINK_20GTFD LINK_STATUS_SPEED_AND_DUPLEX_20GTFD
872#define ELINK_LINK_20GXFD LINK_STATUS_SPEED_AND_DUPLEX_20GXFD
874#define ELINK_LINK_UPDATE_MASK \
875 (LINK_STATUS_SPEED_AND_DUPLEX_MASK | \
876 LINK_STATUS_LINK_UP | \
877 LINK_STATUS_PHYSICAL_LINK_FLAG | \
878 LINK_STATUS_AUTO_NEGOTIATE_COMPLETE | \
879 LINK_STATUS_RX_FLOW_CONTROL_FLAG_MASK | \
880 LINK_STATUS_TX_FLOW_CONTROL_FLAG_MASK | \
881 LINK_STATUS_PARALLEL_DETECTION_FLAG_MASK | \
882 LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE | \
883 LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE)
885#define ELINK_SFP_EEPROM_CON_TYPE_ADDR 0x2
886 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_UNKNOWN 0x0
887 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_LC 0x7
888 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21
889 #define ELINK_SFP_EEPROM_CON_TYPE_VAL_RJ45 0x22
892#define ELINK_SFP_EEPROM_10G_COMP_CODE_ADDR 0x3
893 #define ELINK_SFP_EEPROM_10G_COMP_CODE_SR_MASK (1<<4)
894 #define ELINK_SFP_EEPROM_10G_COMP_CODE_LR_MASK (1<<5)
895 #define ELINK_SFP_EEPROM_10G_COMP_CODE_LRM_MASK (1<<6)
897#define ELINK_SFP_EEPROM_1G_COMP_CODE_ADDR 0x6
898 #define ELINK_SFP_EEPROM_1G_COMP_CODE_SX (1<<0)
899 #define ELINK_SFP_EEPROM_1G_COMP_CODE_LX (1<<1)
900 #define ELINK_SFP_EEPROM_1G_COMP_CODE_CX (1<<2)
901 #define ELINK_SFP_EEPROM_1G_COMP_CODE_BASE_T (1<<3)
903#define ELINK_SFP_EEPROM_FC_TX_TECH_ADDR 0x8
904 #define ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE 0x4
905 #define ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE 0x8
907#define ELINK_SFP_EEPROM_OPTIONS_ADDR 0x40
908 #define ELINK_SFP_EEPROM_OPTIONS_LINEAR_RX_OUT_MASK 0x1
909#define ELINK_SFP_EEPROM_OPTIONS_SIZE 2
911#define ELINK_EDC_MODE_LINEAR 0x0022
912#define ELINK_EDC_MODE_LIMITING 0x0044
913#define ELINK_EDC_MODE_PASSIVE_DAC 0x0055
914#define ELINK_EDC_MODE_ACTIVE_DAC 0x0066
917#define DCBX_INVALID_COS (0xFF)
919#define ELINK_ETS_BW_LIMIT_CREDIT_UPPER_BOUND (0x5000)
920#define ELINK_ETS_BW_LIMIT_CREDIT_WEIGHT (0x5000)
921#define ELINK_ETS_E3B0_NIG_MIN_W_VAL_UP_TO_10GBPS (1360)
922#define ELINK_ETS_E3B0_NIG_MIN_W_VAL_20GBPS (2720)
923#define ELINK_ETS_E3B0_PBF_MIN_W_VAL (10000)
925#define ELINK_MAX_PACKET_SIZE (9700)
926#define MAX_KR_LINK_RETRY 4
927#define DEFAULT_TX_DRV_BRDCT 2
928#define DEFAULT_TX_DRV_IFIR 0
929#define DEFAULT_TX_DRV_POST2 3
930#define DEFAULT_TX_DRV_IPRE_DRIVER 6
936#define CL22_WR_OVER_CL45(_sc, _phy, _bank, _addr, _val) \
937 elink_cl45_write(_sc, _phy, \
938 (_phy)->def_md_devad, \
939 (_bank + (_addr & 0xf)), \
942#define CL22_RD_OVER_CL45(_sc, _phy, _bank, _addr, _val) \
943 elink_cl45_read(_sc, _phy, \
944 (_phy)->def_md_devad, \
945 (_bank + (_addr & 0xf)), \
981 uint32_t link_status, cfg_idx, lfa_mask, cfg_size;
982 uint32_t cur_speed_cap_mask, cur_req_fc_auto_adv, additional_config;
983 uint32_t saved_val, req_val, eee_status;
988 offsetof(
struct shmem_lfa, additional_config));
996 offsetof(
struct shmem_lfa, additional_config),
1004 port_mb[params->
port].link_status));
1024 lfa_mask = 0xffffffff;
1032 offsetof(
struct shmem_lfa, req_duplex));
1034 if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
1036 (saved_val & lfa_mask), (req_val & lfa_mask));
1041 offsetof(
struct shmem_lfa, req_flow_ctrl));
1043 if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
1045 (saved_val & lfa_mask), (req_val & lfa_mask));
1050 offsetof(
struct shmem_lfa, req_line_speed));
1052 if ((saved_val & lfa_mask) != (req_val & lfa_mask)) {
1054 (saved_val & lfa_mask), (req_val & lfa_mask));
1058 for (cfg_idx = 0; cfg_idx < cfg_size; cfg_idx++) {
1061 speed_cap_mask[cfg_idx]));
1071 cur_req_fc_auto_adv =
1073 offsetof(
struct shmem_lfa, additional_config)) &
1084 eee_status[params->
port]));
1103 uint32_t epio_mask, gp_oenable;
1106 if (epio_pin > 31) {
1111 epio_mask = 1 << epio_pin;
1120 uint32_t epio_mask, gp_output, gp_oenable;
1123 if (epio_pin > 31) {
1128 epio_mask = 1 << epio_pin;
1132 gp_output |= epio_mask;
1134 gp_output &= ~epio_mask;
1233 uint32_t min_w_val = 0;
1254 const uint32_t credit_upper_bound = (uint32_t)
ELINK_MAXVAL((150 * min_w_val),
1256 return credit_upper_bound;
1265 const uint32_t min_w_val)
1269 const uint32_t credit_upper_bound =
1287 credit_upper_bound);
1289 credit_upper_bound);
1291 credit_upper_bound);
1387 const uint32_t min_w_val)
1390 const uint32_t credit_upper_bound =
1393 uint32_t base_upper_bound = 0;
1408 REG_WR(sc, base_upper_bound + (i << 2), credit_upper_bound);
1425 uint32_t base_weight = 0;
1468 REG_WR(sc, base_weight + (0x4 * i), 0);
1484 "elink_ets_e3b0_disabled the chip isn't E3B0\n");
1525 const uint8_t cos_sp_bitmap,
1526 const uint8_t cos_bw_bitmap)
1530 const uint8_t nig_cli_sp_bitmap = 0x7 | (cos_sp_bitmap << 3);
1531 const uint8_t pbf_cli_sp_bitmap = cos_sp_bitmap;
1532 const uint8_t nig_cli_subject2wfq_bitmap = cos_bw_bitmap << 3;
1533 const uint8_t pbf_cli_subject2wfq_bitmap = cos_bw_bitmap;
1543 nig_cli_subject2wfq_bitmap);
1547 pbf_cli_subject2wfq_bitmap);
1558 const uint8_t cos_entry,
1559 const uint32_t min_w_val_nig,
1560 const uint32_t min_w_val_pbf,
1561 const uint16_t total_bw,
1565 uint32_t nig_reg_adress_crd_weight = 0;
1566 uint32_t pbf_reg_adress_crd_weight = 0;
1568 const uint32_t cos_bw_nig = ((bw ? bw : 1) * min_w_val_nig) / total_bw;
1569 const uint32_t cos_bw_pbf = ((bw ? bw : 1) * min_w_val_pbf) / total_bw;
1571 switch (cos_entry) {
1573 nig_reg_adress_crd_weight =
1576 pbf_reg_adress_crd_weight = (
port) ?
1580 nig_reg_adress_crd_weight = (
port) ?
1583 pbf_reg_adress_crd_weight = (
port) ?
1587 nig_reg_adress_crd_weight = (
port) ?
1591 pbf_reg_adress_crd_weight = (
port) ?
1597 nig_reg_adress_crd_weight =
1599 pbf_reg_adress_crd_weight =
1605 nig_reg_adress_crd_weight =
1612 nig_reg_adress_crd_weight =
1618 REG_WR(sc, nig_reg_adress_crd_weight, cos_bw_nig);
1620 REG_WR(sc, pbf_reg_adress_crd_weight, cos_bw_pbf);
1635 uint8_t cos_idx = 0;
1636 uint8_t is_bw_cos_exist = 0;
1640 for (cos_idx = 0; cos_idx < ets_params->
num_of_cos; cos_idx++) {
1642 is_bw_cos_exist = 1;
1658 if ((is_bw_cos_exist == 1) && (*total_bw != 100)) {
1659 if (*total_bw == 0) {
1661 "elink_ets_E3B0_config total BW shouldn't be 0\n");
1665 "elink_ets_E3B0_config total BW should be 100\n");
1691 uint8_t *sp_pri_to_cos,
const uint8_t pri,
1692 const uint8_t cos_entry)
1699 if (pri >= max_num_of_cos) {
1701 "parameter Illegal strict priority\n");
1707 "parameter There can't be two COS's with "
1708 "the same strict pri\n");
1712 sp_pri_to_cos[pri] = cos_entry;
1724 const uint8_t pri_set,
1725 const uint8_t pri_offset,
1726 const uint8_t entry_size)
1728 uint64_t pri_cli_nig = 0;
1729 pri_cli_nig = ((uint64_t)(cos + cos_offset)) << (entry_size *
1730 (pri_set + pri_offset));
1743 const uint8_t nig_cos_offset = 3;
1744 const uint8_t nig_pri_offset = 3;
1758 const uint8_t pbf_cos_offset = 0;
1759 const uint8_t pbf_pri_offset = 0;
1773 uint8_t *sp_pri_to_cos)
1779 uint64_t pri_cli_nig = 0x210;
1780 uint32_t pri_cli_pbf = 0x0;
1781 uint8_t pri_set = 0;
1782 uint8_t pri_bitmask = 0;
1786 uint8_t cos_bit_to_set = (1 << max_num_of_cos) - 1;
1789 for (i = 0; i < max_num_of_cos; i++) {
1793 "elink_ets_e3b0_sp_set_pri_cli_reg "
1794 "invalid cos entry\n");
1799 sp_pri_to_cos[i], pri_set);
1802 sp_pri_to_cos[i], pri_set);
1803 pri_bitmask = 1 << sp_pri_to_cos[i];
1805 if (!(pri_bitmask & cos_bit_to_set)) {
1807 "elink_ets_e3b0_sp_set_pri_cli_reg "
1808 "invalid There can't be two COS's with"
1809 " the same strict pri\n");
1812 cos_bit_to_set &= ~pri_bitmask;
1818 for (i = 0; i < max_num_of_cos; i++) {
1819 pri_bitmask = 1 << i;
1821 if (pri_bitmask & cos_bit_to_set) {
1829 cos_bit_to_set &= ~pri_bitmask;
1834 if (pri_set != max_num_of_cos) {
1836 "entries were set\n");
1843 (uint32_t)pri_cli_nig);
1848 const uint32_t pri_cli_nig_lsb = (uint32_t) (pri_cli_nig);
1849 const uint32_t pri_cli_nig_msb = (uint32_t) ((pri_cli_nig >> 32) & 0xF);
1872 uint16_t total_bw = 0;
1875 uint8_t cos_bw_bitmap = 0;
1876 uint8_t cos_sp_bitmap = 0;
1880 uint8_t cos_entry = 0;
1884 "elink_ets_e3b0_disabled the chip isn't E3B0\n");
1888 if ((ets_params->
num_of_cos > max_num_of_cos)) {
1890 "isn't supported\n");
1902 "elink_ets_E3B0_config get_total_bw failed\n");
1913 for (cos_entry = 0; cos_entry < ets_params->
num_of_cos; cos_entry++) {
1915 cos_bw_bitmap |= (1 << cos_entry);
1920 sc, cos_entry, min_w_val_nig, min_w_val_pbf,
1926 cos_sp_bitmap |= (1 << cos_entry);
1936 "elink_ets_e3b0_config cos state not valid\n");
1941 "elink_ets_e3b0_config set cos bw failed\n");
1952 "elink_ets_E3B0_config set_pri_cli_reg failed\n");
2012 const uint32_t cos1_bw)
2016 const uint32_t total_bw = cos0_bw + cos1_bw;
2017 uint32_t cos0_credit_weight = 0;
2018 uint32_t cos1_credit_weight = 0;
2077 val = (!strict_cos) ? 0x2318 : 0x22E0;
2092 uint32_t pause_val, pfc0_val, pfc1_val;
2098 pause_val = 0x18000;
2099 pfc0_val = 0xFFFF8000;
2124 pfc1_val &= ~XMAC_PFC_CTRL_HI_REG_FORCE_PFC_XON;
2148 uint32_t pfc_frames_sent[2],
2149 uint32_t pfc_frames_received[2])
2154 uint32_t val_xon = 0;
2155 uint32_t val_xoff = 0;
2160 val_xoff =
REG_RD(sc, emac_base +
2166 pfc_frames_received[0] = val_xon + val_xoff;
2169 val_xoff =
REG_RD(sc, emac_base +
2175 pfc_frames_sent[0] = val_xon + val_xoff;
2180 uint32_t pfc_frames_sent[2],
2181 uint32_t pfc_frames_received[2])
2194 pfc_frames_received);
2203 uint32_t new_mode, cur_mode;
2219 new_mode = cur_mode &
2221 new_mode |= clc_cnt;
2225 cur_mode, new_mode);
2232 uint32_t port4mode_ovwr_val;
2235 if (port4mode_ovwr_val & (1<<0)) {
2237 return ((port4mode_ovwr_val & (1<<1)) == (1<<1));
2289 val = ((params->
mac_addr[0] << 8) |
2293 val = ((params->
mac_addr[2] << 24) |
2301 uint16_t tx_pause_en,
2407 val &= ~UMAC_COMMAND_CONFIG_REG_PAD_EN;
2414 val &= ~UMAC_COMMAND_CONFIG_REG_SW_RESET;
2450 "XMAC already out of reset in 4-port mode\n");
2474 "Init XMAC to 10G x 1 port per path\n");
2479 "Init XMAC to 20G x 2 ports per path\n");
2509 (pfc_ctrl & ~(1<<1)));
2511 (pfc_ctrl | (1<<1)));
2525 uint32_t val, xmac_base;
2609#ifdef ELINK_INCLUDE_EMUL
2619#ifdef ELINK_INCLUDE_FPGA
2651#if defined(ELINK_INCLUDE_EMUL) || defined(ELINK_INCLUDE_FPGA)
2680#if defined(ELINK_INCLUDE_EMUL) || defined(ELINK_INCLUDE_FPGA)
2748#ifdef ELINK_INCLUDE_EMUL
2767 uint32_t wb_data[2];
2772 uint32_t val = 0x14;
2800 uint32_t wb_data[2];
2804 uint32_t val = 0x14;
2830 wb_data[0] |= (1<<0);
2831 wb_data[0] |= (1<<1);
2832 wb_data[0] |= (1<<2);
2833 wb_data[0] |= (1<<3);
2834 wb_data[0] |= (1<<5);
2839 wb_data[0] &= ~(1<<2);
2871 val |= ((1<<6)|(1<<5));
2885 uint32_t priority_mask, uint8_t
port)
2887 uint32_t nig_reg_rx_priority_mask_add = 0;
2889 switch (cos_entry) {
2891 nig_reg_rx_priority_mask_add = (
port) ?
2896 nig_reg_rx_priority_mask_add = (
port) ?
2901 nig_reg_rx_priority_mask_add = (
port) ?
2922 REG_WR(sc, nig_reg_rx_priority_mask_add, priority_mask);
2932 port_mb[params->
port].link_status), link_status);
2939 uint32_t xcm_mask = 0, ppp_enable = 0, pause_enable = 0, llfc_out_en = 0;
2940 uint32_t llfc_enable = 0, xcm_out_en = 0, hwpfc_enable = 0;
2941 uint32_t pkt_priority_to_cos = 0;
3028 pkt_priority_to_cos);
3093 uint32_t wb_data[2];
3105 wb_data[0] = ((params->
mac_addr[2] << 24) |
3109 wb_data[1] = ((params->
mac_addr[0] << 8) |
3141 wb_data[0] = 0x1000200;
3145#ifdef ELINK_INCLUDE_EMUL
3148 wb_data[0] = 0xf000;
3166 uint32_t wb_data[2];
3184 wb_data[0] = ((params->
mac_addr[2] << 24) |
3188 wb_data[1] = ((params->
mac_addr[0] << 8) |
3196 wb_data[0] = 0x1000200;
3225 uint8_t is_lb, uint8_t reset_bmac)
3272 uint32_t wb_data[2];
3288 wb_data[0] &= ~ELINK_BMAC_CONTROL_RX_ENABLE;
3295 uint32_t line_speed)
3299 uint32_t init_crd, crd;
3300 uint32_t count = 1000;
3310 while ((init_crd != crd) && count) {
3316 if (init_crd != crd) {
3340 switch (line_speed) {
3342 init_crd = thresh + 553 - 22;
3352 line_speed, init_crd);
3380 uint32_t mdc_mdio_access, uint8_t
port)
3382 uint32_t emac_base = 0;
3383 switch (mdc_mdio_access) {
3416 uint16_t reg, uint16_t val)
3427 tmp = ((phy->
addr << 21) | (reg << 16) | val |
3432 for (i = 0; i < 50; i++) {
3451 uint16_t reg, uint16_t *ret_val)
3463 val = ((phy->
addr << 21) | (reg << 16) |
3468 for (i = 0; i < 50; i++) {
3492 uint8_t devad, uint16_t reg, uint16_t *ret_val)
3508 val = ((phy->
addr << 21) | (devad << 16) | reg |
3513 for (i = 0; i < 50; i++) {
3530 val = ((phy->
addr << 21) | (devad << 16) |
3535 for (i = 0; i < 50; i++) {
3569 uint8_t devad, uint16_t reg, uint16_t val)
3586 tmp = ((phy->
addr << 21) | (devad << 16) | reg |
3591 for (i = 0; i < 50; i++) {
3607 tmp = ((phy->
addr << 21) | (devad << 16) | val |
3612 for (i = 0; i < 50; i++) {
3659 switch (nvram_mode) {
3679 switch (idle_timer) {
3699 uint32_t eee_mode, eee_idle;
3717 port_feature_config[params->
port].
3732 uint32_t eee_idle = 0, eee_mode;
3771 vars->
eee_status &= ~SHMEM_EEE_LPI_REQUESTED_BIT;
3776 vars->
eee_status &= ~SHMEM_EEE_REQUESTED_BIT;
3792 vars->
eee_status &= ~SHMEM_EEE_ADV_STATUS_MASK;
3818 vars->
eee_status &= ~SHMEM_EEE_ADV_STATUS_MASK;
3831 eee_status[params->
port]), eee_status);
3839 uint16_t adv = 0, lp = 0;
3840 uint32_t lp_adv = 0;
3871 vars->
eee_status &= ~SHMEM_EEE_LP_ADV_STATUS_MASK;
3886 uint32_t board_cfg, sfp_ctrl;
3893 dev_info.shared_hw_config.board));
3901 dev_info.port_hw_config[
port].e3_cmn_pin_cfg));
3914 uint32_t *data_array)
3919 if (xfer_cnt > 16) {
3925 xfer_cnt = 16 - lc_addr;
3933 val = (sl_devid << 16) | sl_addr;
3982 for (i = (lc_addr >> 2); i < 4; i++) {
3985 data_array[i] = ((data_array[i] & 0x000000ff) << 24) |
3986 ((data_array[i] & 0x0000ff00) << 8) |
3987 ((data_array[i] & 0x00ff0000) >> 8) |
3988 ((data_array[i] & 0xff000000) >> 24);
3995 uint8_t devad, uint16_t reg, uint16_t or_val)
4004 uint8_t devad, uint16_t reg, uint16_t and_val)
4012 uint8_t devad, uint16_t reg, uint16_t *ret_val)
4018 for (phy_index = 0; phy_index < params->
num_phys; phy_index++) {
4019 if (params->
phy[phy_index].
addr == phy_addr) {
4021 ¶ms->
phy[phy_index], devad,
4029 uint8_t devad, uint16_t reg, uint16_t val)
4035 for (phy_index = 0; phy_index < params->
num_phys; phy_index++) {
4036 if (params->
phy[phy_index].
addr == phy_addr) {
4038 ¶ms->
phy[phy_index], devad,
4050 uint32_t path_swap, path_swap_ovr;
4057 uint32_t port_swap, port_swap_ovr;
4061 if (path_swap_ovr & 0x1)
4062 path_swap = (path_swap_ovr & 0x2);
4071 if (port_swap_ovr & 0x1)
4072 port_swap = (port_swap_ovr & 0x2);
4079 lane = (
port<<1) + path;
4085 if (path_swap_ovr & 0x1) {
4086 path_swap = (path_swap_ovr & 0x2);
4104 uint16_t
offset, aer_val;
4111 (phy->
addr + ser_lane) : 0;
4122 aer_val = (aer_val >> 1) | 0x200;
4124 aer_val = 0x3800 +
offset - 1;
4126 aer_val = 0x3800 +
offset;
4248 uint8_t actual_phy_idx, phy_index, link_cfg_idx;
4254 actual_phy_idx = phy_index;
4255 if (phy_config_swapped) {
4278 " speed_cap_mask %x\n",
4294 val &= ~MDIO_AN_REG_ADV_PAUSE_BOTH;
4315 uint32_t pause_result)
4319 switch (pause_result) {
4352 if (pause_result & (1<<0))
4354 if (pause_result & (1<<1))
4365 uint16_t pause_result;
4373 uint16_t gp_status, gp_mask;
4380 if ((gp_status & gp_mask) == gp_mask) {
4390 ld_pause = ((ld_pause &
4393 lp_pause = ((lp_pause &
4405 pause_result = (ld_pause &
4407 pause_result |= (lp_pause &
4442#define WC_TX_DRIVER(post2, idriver, ipre, ifir) \
4443 ((post2 << MDIO_WC_REG_TX0_TX_DRIVER_POST2_COEFF_OFFSET) | \
4444 (idriver << MDIO_WC_REG_TX0_TX_DRIVER_IDRIVER_OFFSET) | \
4445 (ipre << MDIO_WC_REG_TX0_TX_DRIVER_IPRE_DRIVER_OFFSET) | \
4446 (ifir << MDIO_WC_REG_TX0_TX_DRIVER_IFIR_OFFSET))
4448#define WC_TX_FIR(post, main, pre) \
4449 ((post << MDIO_WC_REG_TX_FIR_TAP_POST_TAP_OFFSET) | \
4450 (main << MDIO_WC_REG_TX_FIR_TAP_MAIN_TAP_OFFSET) | \
4451 (pre << MDIO_WC_REG_TX_FIR_TAP_PRE_TAP_OFFSET))
4460 link_attr_sync[params->
port]), link_attr);
4567 uint16_t lane, i, cl72_ctrl, an_adv = 0, val;
4568 uint32_t wc_lane_config;
4588 cl72_ctrl &= 0x08ff;
4589 cl72_ctrl |= 0x3800;
4649 port_hw_config[params->
port].default_cfg)) &
4689 shared_hw_config.wc_lane_config));
4700 if (wc_lane_config &
4721 uint16_t val16, i, lane;
4746 val16 &= ~(0x0011 << lane);
4752 val16 |= (0x0303 << (lane << 1));
4789 uint16_t misc1_val, tap_val, tx_driver_val, lane, val;
4790 uint32_t cfg_tap_val, tx_drv_brdct, tx_equal;
4791 uint32_t ifir_val, ipost2_val, ipre_driver_val;
4825 ((val | 0x0006) & 0xFFFE));
4831 misc1_val &= ~(0x1f);
4840 port_hw_config[params->
port].
4849 tap_val = (uint16_t)tx_equal;
4864 ifir_val = (cfg_tap_val &
4867 ipre_driver_val = (cfg_tap_val &
4870 ipost2_val = (cfg_tap_val &
4876 tx_drv_brdct = (cfg_tap_val &
4882 ipre_driver_val, ifir_val);
5029 uint8_t always_autoneg)
5032 uint16_t val16, digctrl_kx1, digctrl_kx2;
5084 digctrl_kx1 &= 0xff4a;
5095 (digctrl_kx2 & ~(1<<2)));
5100 (digctrl_kx2 | (1<<2)));
5105 (digctrl_kx1 | 0x10));
5166 uint32_t shmem_base, uint8_t port,
5167 uint8_t *gpio_num, uint8_t *gpio_port)
5173 cfg_pin = (
REG_RD(sc, shmem_base +
5175 dev_info.port_hw_config[port].e3_sfp_ctrl)) &
5188 "No cfg pin %x for module detect indication\n",
5207 uint8_t gpio_num, gpio_port;
5224 uint16_t gp2_status_reg0, lane;
5232 return (gp2_status_reg0 >> (8+lane)) & 0x1;
5240 uint32_t serdes_net_if;
5241 uint16_t gp_status1 = 0, lnkup = 0, lnkup_kr = 0;
5252 port_hw_config[params->
port].default_cfg)) &
5255 switch (serdes_net_if) {
5260 lnkup = (gp_status1 >> (8+lane)) & 0x1;
5262 lnkup_kr = (gp_status1 >> (12+lane)) & 0x1;
5264 if (lnkup_kr || lnkup) {
5315 dev_info.port_hw_config[
port].e3_sfp_ctrl)) &
5331 uint32_t serdes_net_if;
5336 port_hw_config[params->
port].default_cfg)) &
5339 "serdes_net_if = 0x%x\n",
5353 switch (serdes_net_if) {
5423 "Unsupported Serdes Net Interface 0x%x\n",
5438 uint16_t val16, lane;
5467 val16 |= (0x11 << lane);
5469 val16 |= (0x22 << lane);
5475 val16 &= ~(0x0303 << (lane << 1));
5476 val16 |= (0x0101 << (lane << 1));
5478 val16 &= ~(0x0c0c << (lane << 1));
5479 val16 |= (0x0404 << (lane << 1));
5495 ELINK_DEBUG_P2(sc,
"Setting Warpcore loopback type %x, speed %d\n",
5538 uint8_t link_10g_plus;
5612 if (link_10g_plus) {
5646 uint32_t sync_offset, media_types;
5652 port_mb[
port].link_status));
5662 eee_status[params->
port]));
5669 dev_info.port_hw_config[
port].media_type);
5670 media_types =
REG_RD(sc, sync_offset);
5686 dev_info.port_hw_config[
port].aeu_int_mask);
5696 ~ELINK_FEATURE_CONFIG_PFC_ENABLED;
5700 link_attr_sync[params->
port]);
5702 ELINK_DEBUG_P3(sc,
"link_status 0x%x phy_link_up %x int_mask 0x%x\n",
5712 uint16_t new_master_ln, ser_lane;
5726 (new_master_ln | ser_lane));
5734 uint16_t mii_control;
5780 uint16_t rx_lane_swap, tx_lane_swap;
5789 if (rx_lane_swap != 0x1b) {
5802 if (tx_lane_swap != 0x1b) {
5827 control2 &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN;
5828 ELINK_DEBUG_P2(sc,
"phy->speed_cap_mask = 0x%x, control2 = 0x%x\n",
5871 uint8_t enable_cl73)
5903 reg_val &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET;
5999 ELINK_DEBUG_P1(sc,
"MDIO_REG_BANK_SERDES_DIGITAL = 0x%x\n", reg_val);
6055 val &= ~MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_BOTH;
6064 uint8_t enable_cl73)
6067 uint16_t mii_control;
6091 "elink_restart_autoneg mii_control before = 0x%x\n",
6128 uint16_t mii_control;
6178 uint16_t pd_10g, status2_1000x;
6215 uint16_t pause_result;
6231 pause_result = (ld_pause &
6233 pause_result |= (lp_pause &
6245 pause_result = (ld_pause &
6247 pause_result |= (lp_pause &
6287 uint16_t rx_status, ustat_val, cl37_fsm_received;
6297 "rx_status(0x80b0) = 0x%x\n", rx_status);
6315 "ustat_val(0x8371) = 0x%x\n", ustat_val);
6324 &cl37_fsm_received);
6325 if ((cl37_fsm_received &
6331 "misc_rx_status(0x8330) = 0x%x\n",
6348 ELINK_DEBUG_P0(sc,
"Disabling CL73, and restarting CL37 autoneg\n");
6367 uint16_t is_link_up,
6368 uint16_t speed_mask,
6380 switch (speed_mask) {
6417 "link speed unsupported gp_status 0x%x\n",
6437 "link speed unsupported gp_status 0x%x\n",
6450 ELINK_DEBUG_P2(sc,
" in elink_get_link_speed_duplex vars->link_status = %x, vars->duplex = %x\n",
6463 uint16_t gp_status, duplex =
DUPLEX_HALF, link_up = 0, speed_mask;
6476 ELINK_DEBUG_P1(sc,
"phy status does not allow interface to be FULL_DUPLEX : %x\n",
6484 ELINK_DEBUG_P3(sc,
"gp_status 0x%x, is_link_up %d, speed_mask 0x%x\n",
6485 gp_status, link_up, speed_mask);
6534 ELINK_DEBUG_P3(sc,
"duplex %x flow_ctrl 0x%x link_status 0x%x\n",
6545 uint16_t gp_status1, gp_speed, link_up, duplex =
DUPLEX_FULL;
6560 uint16_t temp_link_up;
6566 temp_link_up, link_up);
6576 link_up = ((gp_status1 >> 8) |
6577 (gp_status1 >> 12) |
6586 link_up |= (an_link & (1<<2));
6591 uint16_t pd, gp_status4;
6597 if (gp_status4 & ((1<<12)<<lane))
6613 ELINK_DEBUG_P3(sc,
" ELINK_SINGLE_MEDIA_DIRECT duplex %x flow_ctrl 0x%x link_status 0x%x\n",
6617 ELINK_DEBUG_P3(sc,
"duplex %x flow_ctrl 0x%x link_status 0x%x\n",
6659 if ((lane & 1) == 0)
6662 link_up = !!link_up;
6673 ELINK_DEBUG_P3(sc,
"duplex %x flow_ctrl 0x%x link_status 0x%x\n",
6707 tx_driver &= ~MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK;
6708 tx_driver |= lp_up2;
6767 uint16_t bank, i = 0;
6881 for (cnt = 0; cnt < 1000; cnt++) {
6889 if (!(ctrl & (1<<15)))
6898 ELINK_DEBUG_P2(sc,
"control reg 0x%x (after %d ms)\n", ctrl, cnt);
6941 ELINK_DEBUG_P3(sc,
" int_mask 0x%x, MI_INT %x, SERDES_LINK %x\n",
6953 uint32_t latch_status = 0;
6960 latch_status =
REG_RD(sc,
6975 if (latch_status & 1) {
6979 (latch_status & 0xfffe) | (latch_status & 1));
6985 struct elink_vars *vars, uint8_t is_10g_plus)
7011 mask = ((1 << ser_lane) <<
7026 uint8_t *str_ptr = str;
7027 uint32_t mask = 0xf0000000;
7028 uint8_t shift = 8*4;
7030 uint8_t remove_leading_zeros = 1;
7040 digit = ((num & mask) >> shift);
7041 if (digit == 0 && remove_leading_zeros) {
7044 }
else if (digit < 0xa)
7045 *str_ptr = digit +
'0';
7047 *str_ptr = digit - 0xa +
'a';
7048 remove_leading_zeros = 0;
7056 remove_leading_zeros = 1;
7074 uint32_t spirom_ver = 0;
7076 uint8_t *ver_p = version;
7077 uint16_t remain_len = len;
7078 if (version == NULL || params == NULL)
7090 ver_p += (len - remain_len);
7103 ver_p = version + (len - remain_len);
7117 uint32_t md_devad = 0;
7166 struct elink_vars *vars, uint8_t mode, uint32_t speed)
7177 speed, hw_led_mode);
7182 ¶ms->
phy[phy_idx], params, mode);
7185#ifdef ELINK_INCLUDE_EMUL
7322 uint16_t gp_status = 0, phy_index = 0;
7323 uint8_t ext_phy_link_up = 0, serdes_phy_type;
7326#ifdef ELINK_INCLUDE_FPGA
7330#ifdef ELINK_INCLUDE_EMUL
7351 gp_status = ((gp_status >> 8) & 0xf) |
7352 ((gp_status >> 12) & 0xf);
7353 link_up = gp_status & (1 << lane);
7377 params, &temp_vars);
7391 if (is_serdes != serdes_phy_type)
7396 ¶ms->
phy[phy_index],
7397 params, &temp_vars);
7402 if (ext_phy_link_up)
7410 uint8_t phy_index, non_ext_phy;
7467 "Not initializing second phy\n");
7471 ¶ms->
phy[phy_index],
7490 (0x1ff << (params->
port*16)));
7502 gpio_port = params->
port;
7520 vars->
phy_flags &= ~PHY_PHYSICAL_LINK_FLAG;
7564 uint8_t phy_idx,
port = params->
port;
7596 (params->
port << 2), 1);
7599 (params->
port << 2), 0xfc20);
7684 uint8_t port = params->
port;
7685 uint8_t link_10g_plus, phy_index;
7687 uint8_t ext_phy_link_up = 0, cur_link_up;
7689 uint16_t ext_phy_line_speed = 0, prev_line_speed = vars->
line_speed;
7691 vars->
phy_flags &= ~PHY_HALF_OPEN_CONN_FLAG;
7700 phy_vars[phy_index].
link_up = 0;
7740 &phy_vars[phy_index]);
7750 if (!ext_phy_link_up) {
7751 ext_phy_link_up = 1;
7752 active_external_phy = phy_index;
7779 "mpc=0x%x. DISABLING LINK !!!\n",
7781 ext_phy_link_up = 0;
7817 "Disabling TX on EXT_PHY2\n");
7824 ext_phy_line_speed = phy_vars[active_external_phy].
line_speed;
7835 active_external_phy);
7838 ELINK_DEBUG_P3(sc,
"vars : phy_flags = %x, mac_type = %x, phy_link_up = %x\n",
7840 ELINK_DEBUG_P3(sc,
"vars : link_up = %x, line_speed = %x, duplex = %x\n",
7842 ELINK_DEBUG_P3(sc,
"vars : flow_ctrl = %x, ieee_fc = %x, link_status = %x\n",
7844 ELINK_DEBUG_P3(sc,
"vars : eee_status = %x, fault_detected = %x, check_kr2_recovery_cnt = %x\n",
7846 ELINK_DEBUG_P3(sc,
"vars : periodic_flags = %x, aeu_int_mask = %x, rx_tx_asic_rst = %x\n",
7848 ELINK_DEBUG_P2(sc,
"vars : turn_to_run_wc_rt = %x, rsrv2 = %x\n",
7857 active_external_phy);
7861 ELINK_DEBUG_P3(sc,
"vars->flow_ctrl = 0x%x, vars->link_status = 0x%x,"
7862 " ext_phy_line_speed = %d\n", vars->
flow_ctrl,
7873 " different than the external"
7875 ext_phy_line_speed);
7878 }
else if (prev_line_speed != vars->
line_speed) {
7899 " init_preceding = %d\n", ext_phy_link_up,
7924 (phy_vars[active_external_phy].fault_detected == 0));
7929 ELINK_DEBUG_P0(sc,
"either local phy or external phy or both are down\n");
7966 uint32_t spirom_ver, uint32_t
ver_addr)
7969 (uint16_t)(spirom_ver>>16), (uint16_t)spirom_ver, port);
7979 uint16_t fw_ver1, fw_ver2;
8002 if ((val & (1<<0)) == 0)
8022 uint16_t pause_result;
8032 pause_result = (ld_pause &
8034 pause_result |= (lp_pause &
8047 uint16_t fw_ver1, fw_msgout;
8087 "elink_8073_8727_external_rom_boot port %x:"
8088 "Download failed. fw version = 0x%x\n",
8102 }
while (fw_ver1 == 0 || fw_ver1 == 0x4321 ||
8103 ((fw_msgout & 0xff) != 0x03 && (phy->
type ==
8113 "elink_8073_8727_external_rom_boot port %x:"
8114 "Download complete. fw version = 0x%x\n",
8151 uint16_t val, cnt, cnt1 ;
8167 for (cnt = 0; cnt < 1000; cnt++) {
8176 if (!(val & (1<<14)) || !(val & (1<<13))) {
8179 }
else if (!(val & (1<<15))) {
8186 for (cnt1 = 0; cnt1 < 1000; cnt1++) {
8190 if (val & (1<<15)) {
8192 "XAUI workaround has completed\n");
8227 cl37_val &= ~MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH;
8246 "Ext phy AN advertize cl37 0x%x\n", cl37_val);
8274 uint16_t val = 0, tmp1;
8281 gpio_port = params->
port;
8318 port_hw_config[params->
port].default_cfg)) &
8412 ELINK_DEBUG_P2(sc,
"807x Autoneg Restart: Advertise 1G=%x, 10G=%x\n",
8413 ((val & (1<<5)) > 0), ((val & (1<<7)) > 0));
8422 uint8_t link_up = 0;
8423 uint16_t val1, val2;
8424 uint16_t link_status = 0;
8425 uint16_t an1000_status = 0;
8457 link_up = ((val1 & 4) == 4);
8476 "an_link_status=0x%x\n", val2, val1, an1000_status);
8478 link_up = (((val1 & 4) == 4) || (an1000_status & (1<<1)));
8498 if ((link_status & (1<<2)) && (!(link_status & (1<<15)))) {
8503 }
else if ((link_status & (1<<1)) && (!(link_status & (1<<14)))) {
8508 }
else if ((link_status & (1<<0)) && (!(link_status & (1<<13)))) {
8570 gpio_port = params->
port;
8612 uint8_t link_up = 0;
8613 uint16_t val1, rx_sd;
8633 link_up = ((rx_sd & 0x1) && (val1 & (1<<9)) && ((val1 & (1<<8)) == 0));
8670 uint32_t swap_val, swap_override;
8675 gpio_port = params->
port;
8678 return gpio_port ^ (swap_val && swap_override);
8688 uint32_t tx_en_mode;
8693 dev_info.port_hw_config[
port].sfp_ctrl)) &
8696 "mode = %x\n", tx_en,
port, tx_en_mode);
8697 switch (tx_en_mode) {
8721 uint8_t gpio_port, gpio_mode;
8752 uint8_t dev_addr, uint16_t
addr, uint8_t byte_cnt,
8753 uint8_t *o_buf, uint8_t is_init)
8760 "Reading from eeprom is limited to 0xf\n");
8766 (byte_cnt | (dev_addr << 8)));
8779 for (i = 0; i < 100; i++) {
8792 "Got bad status 0x%x when reading from SFP+ EEPROM\n",
8798 for (i = 0; i < byte_cnt; i++) {
8805 for (i = 0; i < 100; i++) {
8825 dev_info.port_hw_config[params->
port].e3_sfp_ctrl)) &
8831 ELINK_DEBUG_P2(sc,
"Setting SFP+ module power to %d using pin cfg %d\n",
8841 uint16_t
addr, uint8_t byte_cnt,
8842 uint8_t *o_buf, uint8_t is_init)
8845 uint8_t i, j = 0, cnt = 0;
8846 uint32_t data_array[4];
8852 "Reading from eeprom is limited to 16 bytes\n");
8857 addr32 =
addr & (~0x3);
8872 for (i = (
addr - addr32); i < byte_cnt + (
addr - addr32); i++) {
8873 o_buf[j] = *((uint8_t *)data_array + i);
8883 uint8_t dev_addr, uint16_t
addr, uint8_t byte_cnt,
8884 uint8_t *o_buf, uint8_t is_init)
8891 "Reading from eeprom is limited to 0xf\n");
8902 ((dev_addr << 8) | 1));
8914 ((byte_cnt < 2) ? 2 : byte_cnt));
8938 for (i = 0; i < 100; i++) {
8951 "Got bad status 0x%x when reading from SFP+ EEPROM\n",
8957 for (i = 0; i < byte_cnt; i++) {
8964 for (i = 0; i < 100; i++) {
8978 uint16_t
addr, uint16_t byte_cnt, uint8_t *o_buf)
8983 uint8_t *user_data = o_buf;
8985 if ((dev_addr != 0xa0) && (dev_addr != 0xa2)) {
8990 switch (phy->
type) {
9005 while (!rc && (byte_cnt > 0)) {
9008 rc = read_func(phy, params, dev_addr,
addr, xfer_size,
9010 byte_cnt -= xfer_size;
9011 user_data += xfer_size;
9022 uint32_t sync_offset = 0, phy_idx, media_types;
9032 (uint8_t *)val) != 0) {
9043 uint8_t copper_module_type;
9049 if (copper_module_type &
9055 check_limiting_mode = 1;
9062 if (copper_module_type &
9065 "Passive Copper cable detected\n");
9068 "Unknown copper-cable-type\n");
9076 check_limiting_mode = 1;
9088 uint8_t gport = params->
port;
9092 (params->
port << 1);
9110 int idx, cfg_idx = 0;
9129 dev_info.port_hw_config[params->
port].media_type);
9130 media_types =
REG_RD(sc, sync_offset);
9133 if (&(params->
phy[phy_idx]) == phy) {
9142 REG_WR(sc, sync_offset, media_types);
9143 if (check_limiting_mode) {
9152 "Failed to read Option field from module EEPROM\n");
9171 uint32_t fw_resp, fw_cmd_param;
9174 phy->
flags &= ~ELINK_FLAGS_SFP_NOT_APPROVED;
9177 port_feature_config[params->
port].config));
9193 "FW does not support OPT MDL verification\n");
9200 "FW does not support OPT MDL verification\n");
9217 (uint8_t *)vendor_name))
9218 vendor_name[0] =
'\0';
9226 (uint8_t *)vendor_pn))
9227 vendor_pn[0] =
'\0';
9252 for (timeout = 0; timeout < 60; timeout++) {
9263 "SFP+ module initialization took %d ms\n",
9276 uint8_t is_power_up) {
9310 uint16_t cur_limiting_mode;
9315 &cur_limiting_mode);
9359 uint16_t phy_identifier;
9360 uint16_t rom_ver2_val;
9369 (phy_identifier & ~(1<<9)));
9379 (rom_ver2_val & 0xff00) | (edc_mode & 0x00ff));
9384 (phy_identifier | (1<<9)));
9442 dev_info.port_hw_config[params->
port].sfp_ctrl)) &
9444 switch (fault_led_gpio) {
9453 uint16_t gpio_pin = fault_led_gpio -
9456 "pin %x port %x mode %x\n",
9457 gpio_pin, gpio_port, gpio_mode);
9475 dev_info.port_hw_config[
port].e3_sfp_ctrl)) &
9479 gpio_mode, pin_cfg);
9487 ELINK_DEBUG_P1(sc,
"Setting SFP+ module fault LED to %d\n", gpio_mode);
9518 switch (phy->
type) {
9542 val &= ~(0xf << (lane << 2));
9557 val |= (mode << (lane << 2));
9574 switch (phy->
type) {
9597 port_feature_config[params->
port].config));
9600 ELINK_DEBUG_P1(sc,
"SFP+ module plugged in/out detected on port %d\n",
9648 uint8_t gpio_num, gpio_port;
9657 params->
port, &gpio_num, &gpio_port) ==
9670 if (gpio_val == 0) {
9681 uint16_t rx_tx_in_reset;
9690 if ((!rx_tx_in_reset) &&
9717 uint16_t alarm_status_offset,
9718 uint16_t alarm_ctrl_offset)
9720 uint16_t alarm_status, val;
9729 if (alarm_status & (1<<0))
9742 uint8_t link_up = 0;
9743 uint16_t val1, val2, rx_sd, pcs_status;
9758 ELINK_DEBUG_P2(sc,
"8706/8726 LASI status 0x%x--> 0x%x\n", val1, val2);
9770 " link_status 0x%x\n", rx_sd, pcs_status, val2);
9774 link_up = ((rx_sd & pcs_status & 0x1) || (val2 & (1<<1)));
9804 uint32_t tx_en_mode;
9805 uint16_t cnt, val, tmp1;
9816 for (cnt = 0; cnt < 100; cnt++) {
9823 ELINK_DEBUG_P1(sc,
"XGXS 8706 is initialized after %d ms\n", cnt);
9828 for (i = 0; i < 4; i++) {
9838 " reg 0x%x <-- val 0x%x\n", reg, val);
9891 dev_info.port_hw_config[params->
port].sfp_ctrl))
9973 if (val1 & (1<<15)) {
10050 "Setting TX_CTRL1 0x%x, TX_CTRL2 0x%x\n",
10087 uint16_t led_mode_bitmask = 0;
10088 uint16_t gpio_pins_bitmask = 0;
10096 led_mode_bitmask = 0;
10097 gpio_pins_bitmask = 0x03;
10100 led_mode_bitmask = 0;
10101 gpio_pins_bitmask = 0x02;
10104 led_mode_bitmask = 0x60;
10105 gpio_pins_bitmask = 0x11;
10113 val |= led_mode_bitmask;
10123 val |= gpio_pins_bitmask;
10131 uint32_t swap_val, swap_override;
10139 port = (swap_val && swap_override) ^ 1;
10148 uint16_t tmp1, val;
10205 uint32_t tx_en_mode;
10206 uint16_t tmp1, mod_abs, tmp2;
10224 mod_abs &= ~(1<<8);
10226 mod_abs &= ~(1<<9);
10264 dev_info.port_hw_config[params->
port].sfp_ctrl))
10291 uint16_t mod_abs, rx_alarm_status;
10294 port_feature_config[params->
port].
10299 if (mod_abs & (1<<8)) {
10303 "MOD_ABS indication show module is absent\n");
10312 mod_abs &= ~(1<<8);
10314 mod_abs &= ~(1<<9);
10329 "MOD_ABS indication show module is present\n");
10378 uint8_t link_up = 0;
10379 uint16_t link_status = 0;
10380 uint16_t rx_alarm_status, lasi_ctrl, val1;
10394 ELINK_DEBUG_P1(sc,
"8727 RX_ALARM_STATUS 0x%x\n", rx_alarm_status);
10417 if ((val1 & (1<<8)) == 0) {
10418 uint8_t oc_port = params->
port;
10422 "8727 Power fault has been detected on port %d\n",
10454 if (rx_alarm_status & (1<<5)) {
10459 ((1<<5) | (1<<2)));
10477 if ((link_status & (1<<2)) && (!(link_status & (1<<15)))) {
10482 }
else if ((link_status & (1<<0)) && (!(link_status & (1<<13)))) {
10501 if (val1 & (1<<0)) {
10560 uint16_t val, fw_ver2, cnt, i;
10579 reg_set[i].
reg, reg_set[i].
val);
10581 for (cnt = 0; cnt < 100; cnt++) {
10589 "phy fw version(1)\n");
10600 for (cnt = 0; cnt < 100; cnt++) {
10691 uint16_t autoneg_val, an_1000_val, an_10_100_val;
10711 autoneg_val &= ~((1<<6) | (1<<8) | (1<<9) | (1<<12) | (1<<13));
10712 an_10_100_val &= ~((1<<5) | (1<<6) | (1<<7) | (1<<8));
10718 an_1000_val |= (1<<8);
10719 autoneg_val |= (1<<9 | 1<<12);
10721 an_1000_val |= (1<<9);
10724 an_1000_val &= ~((1<<8) | (1<<9));
10736 autoneg_val |= (1<<9 | 1<<12);
10737 an_10_100_val |= (1<<8);
10745 autoneg_val |= (1<<9 | 1<<12);
10746 an_10_100_val |= (1<<7);
10753 an_10_100_val |= (1<<6);
10754 autoneg_val |= (1<<9 | 1<<12);
10761 an_10_100_val |= (1<<5);
10762 autoneg_val |= (1<<9 | 1<<12);
10772 autoneg_val |= (1<<13);
10776 (1<<15 | 1<<9 | 7<<0));
10778 an_10_100_val |= (1<<8) | (1<<7);
10788 (1<<15 | 1<<9 | 7<<0));
10797 autoneg_val |= (1<<8);
10803 ((autoneg_val & (1<<12)) == 0))
10849#define PHY848xx_CMDHDLR_WAIT 300
10850#define PHY848xx_CMDHDLR_MAX_ARGS 5
10855 uint16_t cmd_args[],
int argc)
10885 for (idx = 0; idx < argc; idx++) {
10920 for (idx = 0; idx < argc; idx++) {
10931 uint16_t cmd_args[],
int argc,
int process)
10968 for (idx = 0; idx < argc; idx++) {
10993 for (idx = 0; idx < argc; idx++) {
11011 uint16_t cmd_args[],
int argc,
11032 uint32_t pair_swap;
11040 dev_info.port_hw_config[params->
port].xgbt_phy_cfg)) &
11043 if (pair_swap == 0)
11047 data[1] = (uint16_t)pair_swap;
11059 uint32_t shmem_base_path[],
11062 uint32_t reset_pin[2];
11064 uint8_t reset_gpios;
11067 for (idx = 0; idx < 2; idx++) {
11069 reset_pin[idx] =
REG_RD(sc, shmem_base_path[idx] +
11071 dev_info.port_hw_config[0].e3_cmn_pin_cfg));
11072 reset_pin[idx] = (reset_pin[idx] &
11076 reset_pin[idx] = (1 << reset_pin[idx]);
11078 reset_gpios = (uint8_t)(reset_pin[0] | reset_pin[1]);
11081 for (idx = 0; idx < 2; idx++) {
11082 reset_pin[idx] =
REG_RD(sc, shmem_base_path[idx] +
11084 dev_info.port_hw_config[0].default_cfg));
11088 reset_pin[idx] = (1 << reset_pin[idx]);
11090 reset_gpios = (uint8_t)(reset_pin[0] | reset_pin[1]);
11093 return reset_gpios;
11100 uint8_t reset_gpios;
11103 other_shmem_base_addr));
11105 uint32_t shmem_base_path[2];
11116 shmem_base_path[1] = other_shmem_base_addr;
11135 uint16_t cmd_args = 0;
11156 uint16_t cmd_args = 1;
11168#define PHY84833_CONSTANT_LATENCY 1193
11174 uint8_t
port, initialize = 1;
11176 uint32_t actual_phy_selection;
11244 switch (actual_phy_selection) {
11267 ELINK_DEBUG_P2(sc,
"Multi_phy config = 0x%x, Media control = 0x%x\n",
11292 dev_info.port_hw_config[params->
port].default_cfg)) &
11300 val &= ~MDIO_CTL_REG_84823_USER_CTRL_CMS;
11331 vars->
eee_status &= ~SHMEM_EEE_SUPPORTED_MASK;
11349 uint16_t val, val1, val2;
11350 uint8_t link_up = 0;
11360 ELINK_DEBUG_P1(sc,
"BCM848xx: PMD_SIGNAL 1.a811 = 0x%x\n", val2);
11363 if (val2 & (1<<11)) {
11369 uint16_t legacy_status, legacy_speed;
11384 link_up = ((legacy_status & (1<<11)) == (1<<11));
11385 legacy_speed = (legacy_status & (3<<9));
11386 if (legacy_speed == (0<<9))
11388 else if (legacy_speed == (1<<9))
11390 else if (legacy_speed == (2<<9))
11406 link_up |= ((mii_ctrl & 0x3040) == 0x40);
11410 if (legacy_status & (1<<8))
11416 "Link is up in %dMbps, is_duplex_full= %d\n",
11431 if ((val & (1<<0)) == 0)
11445 vars->link_status |=
11448 vars->link_status |=
11451 vars->link_status |=
11454 vars->link_status |=
11457 vars->link_status |=
11464 vars->link_status |=
11467 vars->link_status |=
11474 vars->link_status |=
11488 uint32_t spirom_ver;
11489 spirom_ver = ((raw_ver & 0xF80) >> 7) << 16 | (raw_ver & 0x7F);
11795 ~ELINK_LINK_FLAGS_INT_DISABLED;
11830 temp &= ~(0xf << 4);
11831 temp |= (0x6 << 4);
11849 uint16_t autoneg_val, an_1000_val, an_10_100_val, fc_val, temp;
11862 dev_info.port_hw_config[
port].e3_cmn_pin_cfg)) &
11920 autoneg_val &= ~((1<<6) | (1<<8) | (1<<9) | (1<<12) | (1<<13));
11921 an_10_100_val &= ~((1<<5) | (1<<6) | (1<<7) | (1<<8) | (1<<10) |
11928 an_1000_val |= (1<<8);
11929 autoneg_val |= (1<<9 | 1<<12);
11931 an_1000_val |= (1<<9);
11934 an_1000_val &= ~((1<<8) | (1<<9));
11947 an_10_100_val |= (1<<5);
11948 autoneg_val |= (1<<9 | 1<<12);
11953 an_10_100_val |= (1<<6);
11954 autoneg_val |= (1<<9 | 1<<12);
11959 an_10_100_val |= (1<<7);
11960 autoneg_val |= (1<<9 | 1<<12);
11965 an_10_100_val |= (1<<8);
11966 autoneg_val |= (1<<9 | 1<<12);
11973 autoneg_val |= (1<<13);
11977 (1<<15 | 1<<9 | 7<<0));
11984 (1<<15 | 1<<9 | 7<<0));
12038 an_10_100_val | fc_val);
12041 autoneg_val |= (1<<8);
12103 dev_info.port_hw_config[
port].e3_cmn_pin_cfg)) &
12117 uint8_t link_up = 0;
12118 uint16_t legacy_status, legacy_speed;
12124 ELINK_DEBUG_P1(sc,
"54618SE read_status: 0x%x\n", legacy_status);
12131 link_up = ((legacy_status & (1<<2)) == (1<<2));
12134 legacy_speed = (legacy_status & (7<<8));
12135 if (legacy_speed == (7<<8)) {
12138 }
else if (legacy_speed == (6<<8)) {
12141 }
else if (legacy_speed == (5<<8)) {
12146 else if (legacy_speed == (3<<8)) {
12149 }
else if (legacy_speed == (2<<8)) {
12152 }
else if (legacy_speed == (1<<8)) {
12159 "Link is up in %dMbps, is_duplex_full= %d\n",
12173 if ((val & (1<<0)) == 0)
12237 val &= ~((1<<6) | (1<<12) | (1<<13));
12238 val |= (1<<6) | (1<<8);
12274 uint16_t fw_ver1, fw_ver2, val;
12287 ELINK_DEBUG_P0(sc,
"Setting the SFX7101 LED to blink on traffic\n");
12306 (uint32_t)(fw_ver1<<16 | fw_ver2), phy->
ver_addr);
12316 uint16_t val1, val2;
12329 link_up = ((val1 & 4) == 4);
12338 val2, (val2 & (1<<14)));
12343 if (val2 & (1<<11))
12354 str[0] = (spirom_ver & 0xFF);
12355 str[1] = (spirom_ver & 0xFF00) >> 8;
12356 str[2] = (spirom_ver & 0xFF0000) >> 16;
12357 str[3] = (spirom_ver & 0xFF000000) >> 24;
12371 for (cnt = 0; cnt < 10; cnt++) {
12383 if ((val & (1<<15)) == 0)
12430 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12431 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12436 .req_flow_ctrl = 0,
12437 .req_line_speed = 0,
12438 .speed_cap_mask = 0,
12456 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12457 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12491 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12492 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12526 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12527 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12566 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12567 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12595 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12596 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12626 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12627 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12654 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12655 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12686 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12718 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12747 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12748 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12785 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12823 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12856 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12857 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12890 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12891 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12924 .rx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12925 .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
12963 uint32_t rx = 0, tx = 0, i;
12964 for (i = 0; i < 2; i++) {
12970 rx =
REG_RD(sc, shmem_base +
12972 dev_info.port_hw_config[port].xgxs_config_rx[i<<1]));
12974 tx =
REG_RD(sc, shmem_base +
12976 dev_info.port_hw_config[port].xgxs_config_tx[i<<1]));
12978 rx =
REG_RD(sc, shmem_base +
12980 dev_info.port_hw_config[port].xgxs_config2_rx[i<<1]));
12982 tx =
REG_RD(sc, shmem_base +
12984 dev_info.port_hw_config[port].xgxs_config2_rx[i<<1]));
12992 ELINK_DEBUG_P2(sc,
"phy->rx_preemphasis = %x, phy->tx_preemphasis = %x\n",
12998 uint8_t phy_index, uint8_t port)
13000 uint32_t ext_phy_config = 0;
13001 switch (phy_index) {
13003 ext_phy_config =
REG_RD(sc, shmem_base +
13005 dev_info.port_hw_config[port].external_phy_config));
13008 ext_phy_config =
REG_RD(sc, shmem_base +
13010 dev_info.port_hw_config[port].external_phy_config2));
13017 return ext_phy_config;
13024 uint32_t switch_cfg = (
REG_RD(sc, shmem_base +
13026 dev_info.port_feature_config[port].link_config)) &
13033 uint32_t serdes_net_if;
13040 phy->
flags &= ~ELINK_FLAGS_4_PORT_MODE;
13042 serdes_net_if = (
REG_RD(sc, shmem_base +
13044 port_hw_config[port].default_cfg)) &
13049 switch (serdes_net_if) {
13105 phy->
flags &= ~ELINK_FLAGS_TX_ERROR_CHECK;
13121 ELINK_DEBUG_P3(sc,
"media_type = %x, flags = %x, supported = %x\n",
13125 switch (switch_cfg) {
13143 phy->
addr = (uint8_t)phy_addr;
13152 ELINK_DEBUG_P3(sc,
"Internal phy port=%d, addr=0x%x, mdio_ctl=0x%x\n",
13161 uint32_t shmem_base,
13162 uint32_t shmem2_base,
13166 uint32_t ext_phy_config, phy_type, config2;
13172 switch (phy_type) {
13242 dev_info.shared_hw_config.config2));
13245 port_mb[port].ext_phy_fw_version);
13249 mdc_mdio_access = config2 &
13258 ext_phy_fw_version2[port]);
13262 mdc_mdio_access = (config2 &
13274 if (((raw_ver & 0x7F) <= 39) &&
13275 (((raw_ver & 0xF80) >> 7) <= 1))
13281 phy_type, port, phy_index);
13288 uint32_t shmem2_base, uint8_t port,
struct elink_phy *phy)
13304 uint32_t link_config;
13309 port_feature_config[params->
port].link_config2));
13313 port_hw_config[params->
port].speed_capability_mask2));
13317 port_feature_config[params->
port].link_config));
13321 port_hw_config[params->
port].speed_capability_mask));
13324 "Default config phy idx %x cfg 0x%x speed_cap_mask 0x%x\n",
13353 ELINK_DEBUG_P2(sc,
"Default config phy idx %x, req_duplex config %x\n",
13373 ELINK_DEBUG_P3(sc,
"Requested Duplex = %x, line_speed = %x, flow_ctrl = %x\n",
13379 uint32_t phy_config_swapped, prio_cfg;
13388 if (phy_config_swapped) {
13389 switch (prio_cfg) {
13404 return_cfg = prio_cfg;
13411 uint8_t phy_index, actual_phy_idx;
13412 uint32_t phy_config_swapped, sync_offset, media_types;
13417#ifdef ELINK_INCLUDE_EMUL
13426 actual_phy_idx = phy_index;
13427 if (phy_config_swapped) {
13434 " actual_phy_idx %x\n", phy_config_swapped,
13435 phy_index, actual_phy_idx);
13436 phy = ¶ms->
phy[actual_phy_idx];
13454 phy->
flags &= ~ELINK_FLAGS_TX_ERROR_CHECK;
13462 dev_info.port_hw_config[params->
port].media_type);
13463 media_types =
REG_RD(sc, sync_offset);
13471 actual_phy_idx))) == 0) {
13477 REG_WR(sc, sync_offset, media_types);
13487#ifdef ELINK_INCLUDE_EMUL
13569 if (elink_init_e3_emul_mac(params, vars) !=
13609#ifdef ELINK_INCLUDE_FPGA
13792 phy_index < params->
num_phys; phy_index++)
13795 ¶ms->
phy[phy_index],
13806 uint8_t val = en * 0x1F;
13825 uint32_t dont_clear_stat, lfa_sts;
13856 if (!dont_clear_stat) {
13878 lfa_sts = ((lfa_sts & ~LINK_FLAP_AVOIDANCE_COUNT_MASK) |
13883 lfa_sts &= ~LFA_LINK_FLAP_REASON_MASK;
13886 offsetof(
struct shmem_lfa, lfa_sts), lfa_sts);
13900 uint32_t lfa_sts, cfg_idx, tmp_val;
13909 offsetof(
struct shmem_lfa, req_duplex),
13913 offsetof(
struct shmem_lfa, req_flow_ctrl),
13917 offsetof(
struct shmem_lfa, req_line_speed),
13923 speed_cap_mask[cfg_idx]),
13928 offsetof(
struct shmem_lfa, additional_config));
13929 tmp_val &= ~REQ_FC_AUTO_ADV_MASK;
13933 offsetof(
struct shmem_lfa, additional_config), tmp_val);
13939 lfa_sts &= ~SHMEM_LFA_DONT_CLEAR_STAT;
13942 lfa_sts &= ~LFA_LINK_FLAP_REASON_MASK;
13947 lfa_sts = ((lfa_sts & ~LINK_FLAP_COUNT_MASK) |
13952 offsetof(
struct shmem_lfa, lfa_sts), lfa_sts);
13982 ELINK_DEBUG_P3(sc,
" params : port = %x, loopback_mode = %x req_duplex = %x\n",
13984 ELINK_DEBUG_P3(sc,
" params : switch_cfg = %x, lane_config = %x req_duplex[1] = %x\n",
13986 ELINK_DEBUG_P3(sc,
" params : chip_id = %x, feature_config_flags = %x, num_phys = %x\n",
13988 ELINK_DEBUG_P3(sc,
" params : rsrv = %x, eee_mode = %x, hw_led_mode = x\n",
13990 ELINK_DEBUG_P3(sc,
" params : multi_phy = %x, req_fc_auto_adv = %x, link_flags = %x\n",
13994 if (lfa_status == 0) {
14009#ifdef ELINK_INCLUDE_EMUL
14027#ifdef ELINK_INCLUDE_FPGA
14029 return elink_init_fpga(params, vars);
14032#ifdef ELINK_INCLUDE_EMUL
14034 return elink_init_emul(params, vars);
14073 uint8_t reset_ext_phy)
14076 uint8_t phy_index,
port = params->
port, clear_latch_ind = 0;
14100#ifdef ELINK_INCLUDE_EMUL
14107#ifdef ELINK_INCLUDE_EMUL
14134 ¶ms->
phy[phy_index]);
14136 ¶ms->
phy[phy_index],
14139 if (params->
phy[phy_index].
flags &
14141 clear_latch_ind = 1;
14145 if (clear_latch_ind) {
14151#if defined(ELINK_INCLUDE_EMUL) || defined(ELINK_INCLUDE_FPGA)
14183 params->
link_flags &= ~ELINK_PHY_INITIALIZED;
14233 uint32_t shmem_base_path[],
14234 uint32_t shmem2_base_path[], uint8_t phy_index,
14241 int8_t port_of_path = 0;
14242 uint32_t swap_val, swap_override;
14245 port ^= (swap_val && swap_override);
14249 uint32_t shmem_base, shmem2_base;
14252 shmem_base = shmem_base_path[0];
14253 shmem2_base = shmem2_base_path[0];
14254 port_of_path = port;
14256 shmem_base = shmem_base_path[port];
14257 shmem2_base = shmem2_base_path[port];
14263 port_of_path, &phy[port]) !=
14304 port_of_path = port;
14309 phy_blk[port]->
addr);
14359 uint32_t shmem_base_path[],
14360 uint32_t shmem2_base_path[], uint8_t phy_index,
14375 for (port = 0; port <
PORT_MAX; port++) {
14376 uint32_t shmem_base, shmem2_base;
14380 shmem_base = shmem_base_path[0];
14381 shmem2_base = shmem2_base_path[0];
14383 shmem_base = shmem_base_path[port];
14384 shmem2_base = shmem2_base_path[port];
14408 uint8_t *io_gpio, uint8_t *io_port)
14411 uint32_t phy_gpio_reset =
REG_RD(sc, shmem_base +
14413 dev_info.port_hw_config[
PORT_0].default_cfg));
14414 switch (phy_gpio_reset) {
14454 uint32_t shmem_base_path[],
14455 uint32_t shmem2_base_path[], uint8_t phy_index,
14458 int8_t port, reset_gpio;
14459 uint32_t swap_val, swap_override;
14462 int8_t port_of_path;
14473 (uint8_t *)&reset_gpio, (uint8_t *)&port);
14476 port ^= (swap_val && swap_override);
14489 uint32_t shmem_base, shmem2_base;
14493 shmem_base = shmem_base_path[0];
14494 shmem2_base = shmem2_base_path[0];
14495 port_of_path = port;
14497 shmem_base = shmem_base_path[port];
14498 shmem2_base = shmem2_base_path[port];
14504 port_of_path, &phy[port]) !=
14535 port_of_path = port;
14539 phy_blk[port]->
addr);
14553 uint32_t shmem_base_path[],
14554 uint32_t shmem2_base_path[],
14558 uint8_t reset_gpios;
14568 uint32_t shmem2_base_path[], uint8_t phy_index,
14569 uint32_t ext_phy_type, uint32_t chip_id)
14573 switch (ext_phy_type) {
14577 phy_index, chip_id);
14584 phy_index, chip_id);
14593 phy_index, chip_id);
14603 phy_index, chip_id);
14610 "ext_phy 0x%x common init not required\n",
14623 uint32_t shmem2_base_path[], uint32_t chip_id,
14624 uint8_t one_port_enabled)
14627 uint32_t phy_ver, val;
14628 uint8_t phy_index = 0;
14629 uint32_t ext_phy_type, ext_phy_config;
14630#if defined(ELINK_INCLUDE_EMUL) || defined(ELINK_INCLUDE_FPGA)
14644 phy_ver =
REG_RD(sc, shmem_base_path[0] +
14646 port_mb[
PORT_0].ext_phy_fw_version));
14657 shmem_base_path[0],
14662 phy_index, ext_phy_type,
14678 dev_info.port_hw_config[
port].e3_cmn_pin_cfg1)) &
14699 vars->
phy_flags &= ~PHY_OVER_CURRENT_FLAG;
14705 uint32_t phy_flag, uint32_t link_flag, uint8_t notify)
14710 uint32_t old_status = (vars->
phy_flags & phy_flag) ? 1 : 0;
14712 if ((status ^ old_status) == 0)
14716 switch (phy_flag) {
14727 old_status, status);
14788 uint32_t lss_status = 0;
14819 uint32_t lss_status_reg;
14820 uint32_t wb_data[2];
14829 REG_RD_DMAE(sc, mac_base + lss_status_reg, wb_data, 2);
14830 lss_status = (wb_data[0] > 0);
14843 uint32_t cfg_pin, value = 0;
14844 uint8_t led_change,
port = params->
port;
14848 dev_info.port_hw_config[
port].e3_cmn_pin_cfg)) &
14896 uint16_t base_page, next_page, not_kr2_device, lane;
14928 if (base_page == 0) {
14940 not_kr2_device = (((base_page & 0x8000) == 0) ||
14941 (((base_page & 0x8000) &&
14942 ((next_page & 0xe0) == 0x20))));
14946 if (!not_kr2_device) {
14954 if (not_kr2_device) {
14992 port_hw_config[params->
port].default_cfg))
15001 vars->
phy_flags &= ~PHY_SFP_TX_FAULT_FLAG;
15010 uint32_t shmem_base,
15011 uint32_t shmem2_base,
15014 uint8_t phy_index, fan_failure_det_req = 0;
15024 fan_failure_det_req |= (phy.
flags &
15027 return fan_failure_det_req;
15045 ¶ms->
phy[phy_index],
15053 uint32_t chip_id, uint32_t shmem_base, uint32_t shmem2_base,
15056 uint8_t gpio_num = 0xff, gpio_port = 0xff, phy_index;
15058 uint32_t
offset, aeu_mask, swap_val, swap_override, sync_offset;
15071 shmem2_base, port, &phy)
15084 if (gpio_num == 0xff)
15092 gpio_port ^= (swap_val && swap_override);
15095 (gpio_num + (gpio_port << 2));
15097 sync_offset = shmem_base +
15099 dev_info.port_hw_config[port].aeu_int_mask);
15102 ELINK_DEBUG_P3(sc,
"Setting MOD_ABS (GPIO%d_P%d) AEU to 0x%x\n",
15117 val |= 1 << (gpio_num + (gpio_port << 2));
uint32_t elink_cb_gpio_read(struct bxe_softc *sc, uint16_t gpio_num, uint8_t port)
uint32_t elink_cb_reg_read(struct bxe_softc *sc, uint32_t reg_addr)
uint8_t elink_cb_gpio_mult_write(struct bxe_softc *sc, uint8_t pins, uint8_t mode)
void elink_cb_notify_link_changed(struct bxe_softc *sc)
uint8_t elink_cb_gpio_write(struct bxe_softc *sc, uint16_t gpio_num, uint8_t mode, uint8_t port)
uint8_t elink_cb_gpio_int_write(struct bxe_softc *sc, uint16_t gpio_num, uint8_t mode, uint8_t port)
void elink_cb_event_log(struct bxe_softc *sc, const elink_log_id_t elink_log_id,...)
uint32_t elink_cb_fw_command(struct bxe_softc *sc, uint32_t command, uint32_t param)
void elink_cb_reg_write(struct bxe_softc *sc, uint32_t reg_addr, uint32_t val)
#define SHMEM2_RD(sc, field)
#define CHIP_REV_IS_EMUL(sc)
#define SHMEM2_HAS(sc, field)
#define CHIP_REV_IS_FPGA(sc)
#define CHIP_REV_IS_SLOW(sc)
#define CHIP_NUM_57840_OBS
#define REG_RD(sc, offset)
#define CHIP_NUM_57840_4_10
#define REG_WR(sc, offset, val)
#define REG_WR_DMAE(sc, offset, valp, len32)
#define USES_WARPCORE(sc)
#define REG_RD_DMAE(sc, offset, valp, len32)
#define CHIP_NUM_57840_2_20
static void elink_update_pfc_xmac(struct elink_params *params, struct elink_vars *vars, uint8_t is_lb)
#define MDIO_WC_REG_XGXS_X2_CONTROL3
#define MDIO_CTL_REG_84823_MEDIA_PRIORITY_MASK
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_INVERT_SIGNAL_DETECT
static const struct elink_phy phy_7101
#define MDIO_REG_BANK_BAM_NEXT_PAGE
#define CL22_RD_OVER_CL45(_sc, _phy, _bank, _addr, _val)
static elink_status_t elink_verify_sfp_module(struct elink_phy *phy, struct elink_params *params)
#define MDIO_PMA_REG_ROM_VER1
static void elink_8073_link_reset(struct elink_phy *phy, struct elink_params *params)
#define MDIO_PMA_REG_8726_TWO_WIRE_DATA_MASK
#define MDIO_AN_REG_LP_AUTO_NEG
#define MDIO_PMA_REG_TX_DISABLE
#define ELINK_GP_STATUS_20G_KR2
#define MDIO_CL73_USERB0_CL73_UCTRL
#define MDIO_PMA_REG_SFP_TWO_WIRE_BYTE_CNT
static elink_status_t elink_reset_unicore(struct elink_params *params, struct elink_phy *phy, uint8_t set_serdes)
#define MDIO_WC_REG_XGXSBLK1_LANECTRL2
#define MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL
static elink_status_t elink_eee_advertise(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint8_t modes)
static void elink_8727_link_reset(struct elink_phy *phy, struct elink_params *params)
static void elink_update_mng_eee(struct elink_params *params, uint32_t eee_status)
#define MIDO_AN_REG_8481_EXT_CTRL_FORCE_LEDS_OFF
#define ELINK_ETH_MAX_JUMBO_PACKET_SIZE
#define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_RESTART_AN
static elink_status_t elink_wait_for_sfp_module_initialized(struct elink_phy *phy, struct elink_params *params)
#define MDIO_WC_REG_PAR_DET_10G_STATUS
#define MDIO_WC_REG_GP2_STATUS_GP_2_2
#define MDIO_AN_REG_ADV_PAUSE_MASK
#define MDIO_AN_REG_CL37_FC_LD
static elink_status_t elink_link_initialize(struct elink_params *params, struct elink_vars *vars)
#define MDIO_REG_GPHY_EXP_ACCESS
elink_status_t elink_ets_strict(const struct elink_params *params, const uint8_t strict_cos)
#define MDIO_84833_TOP_CFG_FW_REV
static elink_status_t elink_warpcore_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static const struct elink_phy phy_xgxs
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET
#define MDIO_RX0_RX_STATUS
#define MDIO_WIS_REG_LASI_CNTL
#define MDIO_WC_REG_XGXSBLK1_LANECTRL1
#define MDIO_84833_TOP_CFG_FW_NO_EEE
#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN
static elink_status_t elink_84833_hw_reset_phy(struct elink_phy *phy, struct elink_params *params)
#define PHY84858_STATUS_CMD_IN_PROGRESS
#define MDIO_REG_BANK_COMBO_IEEE0
#define ELINK_SFP_EEPROM_10G_COMP_CODE_LRM_MASK
static const struct elink_phy phy_84833
static elink_status_t elink_populate_ext_phy(struct bxe_softc *sc, uint8_t phy_index, uint32_t shmem_base, uint32_t shmem2_base, uint8_t port, struct elink_phy *phy)
static void elink_ets_e3b0_set_credit_upper_bound_nig(const struct elink_params *params, const uint32_t min_w_val)
#define DEFAULT_TX_DRV_BRDCT
#define MDIO_PMA_REG_8481_PMD_SIGNAL
#define ELINK_GP_STATUS_10M
static void elink_warpcore_set_20G_force_KR2(struct elink_phy *phy, struct elink_params *params)
#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_EN
static elink_status_t elink_8727_common_init_phy(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t shmem2_base_path[], uint8_t phy_index, uint32_t chip_id)
static int elink_check_lfa(struct elink_params *params)
#define MDIO_PMA_REG_8073_XAUI_WA
#define ELINK_GP_STATUS_10G_XFI
#define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_CX4_XGXS
static void elink_8481_link_reset(struct elink_phy *phy, struct elink_params *params)
#define ELINK_NIG_MASK_XGXS0_LINK_STATUS
#define MDIO_WC_REG_RX66_SCW3_MASK
#define MDIO_WC_REG_GP2_STATUS_GP_2_4
elink_status_t elink_phy_read(struct elink_params *params, uint8_t phy_addr, uint8_t devad, uint16_t reg, uint16_t *ret_val)
static uint32_t elink_get_ext_phy_config(struct bxe_softc *sc, uint32_t shmem_base, uint8_t phy_index, uint8_t port)
elink_status_t elink_test_link(struct elink_params *params, struct elink_vars *vars, uint8_t is_serdes)
#define MDIO_PMA_LASI_TXSTAT
static elink_status_t elink_sfp_module_detection(struct elink_phy *phy, struct elink_params *params)
elink_status_t elink_link_update(struct elink_params *params, struct elink_vars *vars)
#define MDIO_PMA_REG_8727_PCS_GP
#define ELINK_SFP_EEPROM_CON_TYPE_VAL_LC
void elink_set_rx_filter(struct elink_params *params, uint8_t en)
void elink_init_mod_abs_int(struct bxe_softc *sc, struct elink_vars *vars, uint32_t chip_id, uint32_t shmem_base, uint32_t shmem2_base, uint8_t port)
#define MDIO_PMA_REG_84823_BLINK_RATE_VAL_15P9HZ
static void elink_warpcore_hw_reset(struct elink_phy *phy, struct elink_params *params)
#define MDIO_84833_TOP_CFG_XGPHY_STRAP1
elink_status_t elink_phy_init(struct elink_params *params, struct elink_vars *vars)
#define MDIO_PMA_REG_84823_CTL_SLOW_CLK_CNT_HIGH
#define MDIO_AN_REG_8481_1000T_CTRL
#define MDIO_AN_REG_LP_EEE_ADV
static void elink_set_autoneg(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint8_t enable_cl73)
elink_status_t elink_ets_e3b0_config(const struct elink_params *params, const struct elink_vars *vars, struct elink_ets_params *ets_params)
#define MDIO_AER_BLOCK_AER_REG
static void elink_warpcore_config_sfi(struct elink_phy *phy, struct elink_params *params)
#define MDIO_WC_REG_CL72_USERB0_CL72_TX_FIR_TAP
static void elink_check_over_curr(struct elink_params *params, struct elink_vars *vars)
#define MDIO_REG_BANK_GP_STATUS
#define MDIO_XGXS_BLOCK2_RX_LN_SWAP_ENABLE
#define MDIO_OVER_1G_UP1_2_5G
#define MDIO_PMA_REG_M8051_MSGOUT_REG
static elink_status_t elink_get_link_speed_duplex(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint16_t is_link_up, uint16_t speed_mask, uint16_t is_duplex)
#define MDIO_AN_REG_8073_2_5G
#define MDIO_WC_REG_RX66_SCW2
#define MDIO_COMBO_IEEO_MII_CONTROL_RESET
static void elink_pause_resolve(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint32_t pause_result)
void elink_hw_reset_phy(struct elink_params *params)
#define MDIO_PMA_REG_8481_LED2_MASK
static elink_status_t elink_ets_e3b0_set_cos_bw(struct bxe_softc *sc, const uint8_t cos_entry, const uint32_t min_w_val_nig, const uint32_t min_w_val_pbf, const uint16_t total_bw, const uint8_t bw, const uint8_t port)
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_FIBER_MODE
#define MDIO_PMA_REG_84823_LED3_STRETCH_EN
#define MDIO_WC_REG_TX66_CONTROL
#define MDIO_XS_REG_8073_RX_CTRL_PCIE
#define MDIO_WC_REG_CL82_USERB1_TX_CTRL9
static elink_status_t elink_8073_xaui_wa(struct bxe_softc *sc, struct elink_phy *phy)
static void elink_emac_init(struct elink_params *params, struct elink_vars *vars)
#define ELINK_LINK_2500TFD
#define DEFAULT_TX_DRV_IFIR
static void elink_warpcore_clear_regs(struct elink_phy *phy, struct elink_params *params, uint16_t lane)
static elink_status_t elink_84858_cmd_hdlr(struct elink_phy *phy, struct elink_params *params, uint16_t fw_cmd, uint16_t cmd_args[], int argc)
static uint8_t elink_analyze_link_error(struct elink_params *params, struct elink_vars *vars, uint32_t status, uint32_t phy_flag, uint32_t link_flag, uint8_t notify)
static void elink_warpcore_set_sgmii_speed(struct elink_phy *phy, struct elink_params *params, uint8_t fiber_mode, uint8_t always_autoneg)
#define MDIO_AN_REG_8481_AUX_CTRL
static void elink_848xx_specific_func(struct elink_phy *phy, struct elink_params *params, uint32_t action)
#define MDIO_PMA_REG_SFP_TWO_WIRE_MEM_ADDR
#define MDIO_REG_BANK_10G_PARALLEL_DETECT
#define MDIO_WC_REG_GP2_STATUS_GP_2_4_CL73_AN_CMPL
#define MDIO_PMA_REG_8073_SPEED_LINK_STATUS
static void elink_ets_e3b0_sp_pri_to_cos_init(uint8_t *sp_pri_to_cos)
#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE
static void elink_get_epio(struct bxe_softc *sc, uint32_t epio_pin, uint32_t *en)
#define MDIO_WC_REG_COMBO_IEEE0_MIICTRL
#define MDIO_AN_REG_8481_EXPANSION_REG_RD_RW
static void elink_ets_bw_limit_common(const struct elink_params *params)
static elink_status_t elink_848x3_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define PHY84833_MB_PROCESS3
#define MDIO_PMA_REG_8727_OPT_CFG_REG
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_FULL_DUPLEX
#define MDIO_PMA_REG_8481_LED3_BLINK
static uint32_t elink_ets_get_min_w_val_nig(const struct elink_vars *vars)
#define MDIO_PMA_REG_PHY_IDENTIFIER
#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK
static void elink_ets_e3b0_pbf_disabled(const struct elink_params *params)
#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK
static int elink_is_sfp_module_plugged(struct elink_phy *phy, struct elink_params *params)
#define MDIO_WC_REG_DIGITAL3_UP1
void elink_pfc_statistic(struct elink_params *params, struct elink_vars *vars, uint32_t pfc_frames_sent[2], uint32_t pfc_frames_received[2])
#define ELINK_GP_STATUS_1G
#define MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP
#define ELINK_LINK_100TXHD
#define ELINK_GP_STATUS_100M
#define ELINK_NIG_MASK_XGXS0_LINK10G
static uint32_t elink_bits_dis(struct bxe_softc *sc, uint32_t reg, uint32_t bits)
#define ELINK_NIG_STATUS_SERDES0_LINK_STATUS
#define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G
static uint16_t elink_wait_reset_complete(struct bxe_softc *sc, struct elink_phy *phy, struct elink_params *params)
static void elink_chng_link_count(struct elink_params *params, uint8_t clear)
#define MDIO_CL73_IEEEB1_AN_LP_ADV1
#define MDIO_WC_REG_RX2_ANARXCONTROL1G
#define PHY848xx_CMDHDLR_MAX_ARGS
static void elink_set_bmac_rx(struct bxe_softc *sc, uint32_t chip_id, uint8_t port, uint8_t en)
#define ELINK_SFP_EEPROM_FC_TX_TECH_ADDR
static uint8_t elink_8706_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_REG_BANK_RX3
#define MDIO_REG_GPHY_EXP_ACCESS_GATE
#define MDIO_XS_8706_REG_BANK_RX0
static void elink_power_sfp_module(struct elink_params *params, struct elink_phy *phy, uint8_t power)
static elink_status_t elink_ets_e3b0_sp_pri_to_cos_set(const struct elink_params *params, uint8_t *sp_pri_to_cos, const uint8_t pri, const uint8_t cos_entry)
#define MDIO_848xx_CMD_HDLR_DATA1
#define MDIO_WC_REG_RX66_SCW3
#define MDIO_PMA_REG_GEN_CTRL
static void elink_848xx_set_link_led(struct elink_phy *phy, struct elink_params *params, uint8_t mode)
#define PHY84833_MB_PROCESS1
#define ELINK_SFP_EEPROM_OPTIONS_LINEAR_RX_OUT_MASK
#define MDIO_AN_REG_CL37_CL73
static elink_status_t elink_8073_common_init_phy(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t shmem2_base_path[], uint8_t phy_index, uint32_t chip_id)
#define MDIO_PMA_REG_CDR_BANDWIDTH
static elink_status_t elink_populate_phy(struct bxe_softc *sc, uint8_t phy_index, uint32_t shmem_base, uint32_t shmem2_base, uint8_t port, struct elink_phy *phy)
static uint32_t elink_get_cfg_pin(struct bxe_softc *sc, uint32_t pin_cfg, uint32_t *val)
#define MDIO_WC_REG_ETA_CL73_LD_UD_CODE
#define ELINK_SFP_EEPROM_10G_COMP_CODE_ADDR
#define PHY84858_STATUS_CMD_COMPLETE_ERROR
static void elink_warpcore_power_module(struct elink_params *params, uint8_t power)
static elink_status_t elink_8073_is_snr_needed(struct bxe_softc *sc, struct elink_phy *phy)
void elink_handle_module_detect_int(struct elink_params *params)
elink_status_t elink_ets_disabled(struct elink_params *params, struct elink_vars *vars)
#define MDIO_WC_REG_RX1_PCI_CTRL
#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN
#define MDIO_848xx_CMD_HDLR_COMMAND
static void elink_warpcore_set_10G_XFI(struct elink_phy *phy, struct elink_params *params, uint8_t is_xfi)
static void elink_8073_specific_func(struct elink_phy *phy, struct elink_params *params, uint32_t action)
static void elink_848xx_set_led(struct bxe_softc *sc, struct elink_phy *phy)
static uint8_t elink_84833_get_reset_gpios(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t chip_id)
static void elink_807x_force_10G(struct bxe_softc *sc, struct elink_phy *phy)
#define ELINK_GP_STATUS_10G_CX4
#define MDIO_AN_REG_8073_BAM
static void elink_848x3_link_reset(struct elink_phy *phy, struct elink_params *params)
#define ELINK_EDC_MODE_PASSIVE_DAC
static elink_status_t elink_8483x_enable_eee(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_PMA_REG_8727_TX_CTRL2
static void elink_warpcore_set_lpi_passthrough(struct elink_phy *phy, struct elink_params *params)
static const struct elink_phy phy_serdes
#define MDIO_WC_REG_RX66_SCW1_MASK
static void elink_cannot_avoid_link_flap(struct elink_params *params, struct elink_vars *vars, int lfa_status)
static elink_status_t elink_84833_common_init_phy(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t shmem2_base_path[], uint8_t phy_index, uint32_t chip_id)
static void elink_8727_specific_func(struct elink_phy *phy, struct elink_params *params, uint32_t action)
elink_status_t(* read_sfp_module_eeprom_func_p)(struct elink_phy *phy, struct elink_params *params, uint8_t dev_addr, uint16_t addr, uint8_t byte_cnt, uint8_t *o_buf, uint8_t)
static elink_status_t elink_prepare_xgxs(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_rearm_latch_signal(struct bxe_softc *sc, uint8_t port, uint8_t exp_mi_int)
#define MDIO_WC_REG_RX66_SCW1
#define MDIO_WC_REG_ETA_CL73_OUI1
#define MDIO_84833_SUPER_ISOLATE
static void elink_update_mng(struct elink_params *params, uint32_t link_status)
#define ELINK_NIG_STATUS_XGXS0_LINK_STATUS
static void elink_common_ext_link_reset(struct elink_phy *phy, struct elink_params *params)
#define DEFAULT_TX_DRV_IPRE_DRIVER
#define MDIO_PMA_REG_DIGITAL_CTRL
#define MDIO_RX0_RX_STATUS_SIGDET
#define MDIO_PMA_REG_10G_CTRL2
#define MDIO_CTL_REG_84823_CTRL_MAC_XFI
#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_CX4
#define ELINK_LINK_1000XFD
#define MDIO_COMBO_IEEO_MII_CONTROL_AN_EN
#define ELINK_GP_STATUS_10G_KX4
#define MDIO_PMA_REG_RX_SD
static void elink_sfp_e1e2_set_transmitter(struct elink_params *params, struct elink_phy *phy, uint8_t tx_en)
#define MDIO_WC_REG_CL73_BAM_CTRL1
static void elink_check_fallback_to_cl37(struct elink_phy *phy, struct elink_params *params)
static elink_status_t elink_8726_set_limiting_mode(struct bxe_softc *sc, struct elink_phy *phy, uint16_t edc_mode)
static elink_status_t elink_eee_nvram_to_time(uint32_t nvram_mode, uint32_t *idle_timer)
static elink_status_t elink_get_mod_abs_int_cfg(struct bxe_softc *sc, uint32_t chip_id, uint32_t shmem_base, uint8_t port, uint8_t *gpio_num, uint8_t *gpio_port)
static void elink_link_int_ack(struct elink_params *params, struct elink_vars *vars, uint8_t is_10g_plus)
#define MDIO_OVER_1G_LP_UP2
#define PHY84833_MB_PROCESS2
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH
static void elink_populate_preemphasis(struct bxe_softc *sc, uint32_t shmem_base, struct elink_phy *phy, uint8_t port, uint8_t phy_index)
static void elink_set_epio(struct bxe_softc *sc, uint32_t epio_pin, uint32_t en)
#define MDIO_PMA_REG_BCM_CTRL
#define ELINK_SFP_EEPROM_CON_TYPE_VAL_UNKNOWN
#define ELINK_ETS_BW_LIMIT_CREDIT_UPPER_BOUND
static void elink_8727_handle_mod_abs(struct elink_phy *phy, struct elink_params *params)
#define MDIO_REG_BANK_TX1
#define MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS
#define MDIO_AN_REG_8481_LEGACY_MII_STATUS
#define MDIO_TX0_TX_DRIVER
#define ELINK_EDC_MODE_ACTIVE_DAC
#define MDIO_WC_REG_GP2_STATUS_GP_2_0
static const struct elink_phy phy_warpcore
static uint8_t elink_8073_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_set_parallel_detection(struct elink_phy *phy, struct elink_params *params)
#define MDIO_REMOTE_PHY_MISC_RX_STATUS
#define MDIO_PMA_REG_8727_TX_CTRL1
#define MDIO_PMA_LASI_RXSTAT
#define ELINK_SFP_EEPROM_1G_COMP_CODE_ADDR
static void elink_set_xmac_rxtx(struct elink_params *params, uint8_t en)
#define ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE
static void elink_check_kr2_wa(struct elink_params *params, struct elink_vars *vars, struct elink_phy *phy)
#define MDIO_WC_REG_RX66_CONTROL
#define MDIO_PMA_REG_7101_RESET
#define MDIO_REG_BANK_OVER_1G
#define ELINK_GP_STATUS_20G_DXGXS
#define MDIO_REG_GPHY_EXP_ACCESS_TOP
static elink_status_t elink_8726_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define ELINK_GP_STATUS_10G_SFI
#define MDIO_WC_REG_XGXSBLK0_XGXSCONTROL
static void elink_set_e1e2_module_fault_led(struct elink_params *params, uint8_t gpio_mode)
#define ELINK_SFP_EEPROM_OPTIONS_SIZE
#define MDIO_PMA_REG_8481_LINK_SIGNAL
#define PHY84833_STATUS_CMD_OPEN_OVERRIDE
#define MDIO_PMA_REG_MISC_CTRL
#define MDIO_WC_REG_CL82_USERB1_RX_CTRL10
#define MDIO_COMBO_IEEE0_MII_CONTROL
static void elink_set_sfp_module_fault_led(struct elink_params *params, uint8_t gpio_mode)
static uint32_t elink_ets_get_credit_upper_bound(const uint32_t min_w_val)
#define MDIO_PMA_REG_84823_CTL_LED_CTL_1
#define MDIO_PMA_REG_8727_TWO_WIRE_DATA_MASK
#define MCPR_IMC_COMMAND_READ_OP
#define MDIO_WC_REG_ETA_CL73_LD_BAM_CODE
#define MDIO_GP_STATUS_TOP_AN_STATUS1
#define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KR
#define MDIO_REG_BANK_CL73_IEEEB1
#define MDIO_WC_REG_DIGITAL4_MISC5
#define MDIO_PMA_REG_8481_LED1_MASK
#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_MR_LP_NP_AN_ABLE
static void elink_set_cfg_pin(struct bxe_softc *sc, uint32_t pin_cfg, uint32_t val)
#define MDIO_CTL_REG_84823_MEDIA_FIBER_1G
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1
static elink_status_t elink_8481_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define ELINK_SFP_EEPROM_1G_COMP_CODE_BASE_T
static void elink_54618se_config_loopback(struct elink_phy *phy, struct elink_params *params)
#define MDIO_PMA_REG_7107_LED_CNTL
static uint8_t elink_is_4_port_mode(struct bxe_softc *sc)
#define MDIO_PMA_REG_MISC_CTRL0
#define MDIO_PMA_LASI_TXCTRL
#define MDIO_PMA_REG_8726_TX_CTRL1
#define MDIO_PMA_REG_PLL_BANDWIDTH
#define ELINK_LINK_20GTFD
static elink_status_t elink_eee_initial_config(struct elink_params *params, struct elink_vars *vars, uint8_t mode)
#define ELINK_NIG_STATUS_EMAC0_MI_INT
#define MDIO_WC_REG_RX0_ANARXCONTROL1G
#define ELINK_EDC_MODE_LINEAR
elink_status_t elink_lfa_reset(struct elink_params *params, struct elink_vars *vars)
#define MDIO_PMA_REG_MISC_CTRL1
static void elink_sfp_tx_fault_detection(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_7101_set_link_led(struct elink_phy *phy, struct elink_params *params, uint8_t mode)
#define MDIO_REG_INTR_MASK_LINK_STATUS
static const struct elink_phy phy_8727
#define MDIO_WC_REG_CL73_BAM_CODE_FIELD
static void elink_set_warpcore_loopback(struct elink_phy *phy, struct elink_params *params)
#define MCPR_IMC_COMMAND_WRITE_OP
static void elink_xgxs_specific_func(struct elink_phy *phy, struct elink_params *params, uint32_t action)
#define MDIO_AN_REG_848xx_ID_MSB
#define MDIO_WC_REG_IEEE0BLK_AUTONEGNP
#define MDIO_WC_REG_GP2_STATUS_GP_2_4_CL37_LP_AN_CAP
#define MDIO_XS_8706_REG_BANK_RX1
static elink_status_t elink_bsc_read(struct bxe_softc *sc, uint8_t sl_devid, uint16_t sl_addr, uint8_t lc_addr, uint8_t xfer_cnt, uint32_t *data_array)
#define MDIO_WC_REG_SERDESDIGITAL_MISC1
#define MDIO_WC_REG_DIGITAL5_MISC7
#define MDIO_CL73_IEEEB1_AN_ADV2
static void elink_8727_set_link_led(struct elink_phy *phy, struct elink_params *params, uint8_t mode)
elink_status_t elink_phy_write(struct elink_params *params, uint8_t phy_addr, uint8_t devad, uint16_t reg, uint16_t val)
#define MDIO_AN_REG_LINK_STATUS
static elink_status_t elink_bmac_enable(struct elink_params *params, struct elink_vars *vars, uint8_t is_lb, uint8_t reset_bmac)
static const struct elink_phy phy_8481
#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL
static void elink_warpcore_set_20G_DXGXS(struct bxe_softc *sc, struct elink_phy *phy, uint16_t lane)
#define MDIO_84833_TOP_CFG_FW_EEE
#define MDIO_WC_REG_CL82_USERB1_TX_CTRL7
static void elink_set_e3_module_fault_led(struct elink_params *params, uint8_t gpio_mode)
#define MDIO_WC_REG_CL73_USERB0_CTRL
elink_status_t elink_update_pfc(struct elink_params *params, struct elink_vars *vars, struct elink_nig_brb_pfc_port_params *pfc_params)
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN
#define MDIO_PMA_REG_8481_SIGNAL_MASK
static uint8_t elink_get_gpio_port(struct elink_params *params)
#define MDIO_REG_GPHY_SHADOW_AUTO_DET_MED
static void elink_ets_e2e3a0_disabled(struct elink_params *params)
#define ELINK_XGXS_RESET_BITS
static void elink_xgxs_an_resolve(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint32_t gp_status)
#define MDIO_PMA_REG_8073_OPT_DIGITAL_CTRL
#define MDIO_PMA_REG_8073_CHIP_REV
#define MDIO_WC_REG_DIGITAL5_LINK_STATUS
#define MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_IDLE
#define MDIO_AN_REG_ADV_PAUSE_ASYMMETRIC
static void elink_warpcore_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static elink_status_t elink_8705_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_WC_REG_CL82_USERB1_RX_CTRL11
#define MDIO_WC_REG_RX66_SCW0_MASK
static void elink_ext_phy_update_adv_fc(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static elink_status_t elink_warpcore_read_sfp_module_eeprom(struct elink_phy *phy, struct elink_params *params, uint8_t dev_addr, uint16_t addr, uint8_t byte_cnt, uint8_t *o_buf, uint8_t is_init)
static void elink_8727_power_module(struct bxe_softc *sc, struct elink_phy *phy, uint8_t is_power_up)
static void elink_warpcore_link_reset(struct elink_phy *phy, struct elink_params *params)
static void elink_eee_an_resolve(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static elink_status_t elink_8073_8727_external_rom_boot(struct bxe_softc *sc, struct elink_phy *phy, uint8_t port)
#define MDIO_PMA_REG_STATUS
static elink_status_t elink_8727_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static uint8_t elink_eee_has_cap(struct elink_params *params)
static const struct elink_phy phy_8706
#define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_DEFAULT
#define MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X2
void elink_ext_phy_hw_reset(struct bxe_softc *sc, uint8_t port)
#define ELINK_ETS_E3B0_PBF_MIN_W_VAL
static void elink_serdes_deassert(struct bxe_softc *sc, uint8_t port)
#define MDIO_WC_REG_RX66_SCW0
#define ELINK_MDIO_ACCESS_TIMEOUT
#define PHY84833_STATUS_CMD_OPEN_FOR_CMDS
static void elink_set_xgxs_loopback(struct elink_phy *phy, struct elink_params *params)
#define MDIO_PMA_LASI_RXCTRL
#define MDIO_AN_REG_ADV_PAUSE_PAUSE
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_MSTR_MODE
static void elink_kr2_recovery(struct elink_params *params, struct elink_vars *vars, struct elink_phy *phy)
#define MDIO_AN_REG_8481_LEGACY_AN_EXPANSION
elink_status_t elink_phy_probe(struct elink_params *params)
#define PHY84858_STATUS_CMD_COMPLETE_PASS
static elink_status_t elink_xmac_enable(struct elink_params *params, struct elink_vars *vars, uint8_t lb)
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC
static int elink_warpcore_get_sigdet(struct elink_phy *phy, struct elink_params *params)
static uint8_t elink_54618se_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_set_brcm_cl37_advertisement(struct elink_phy *phy, struct elink_params *params)
void elink_period_func(struct elink_params *params, struct elink_vars *vars)
#define MDIO_REG_BANK_SERDES_DIGITAL
#define MDIO_PMA_REG_8726_TWO_WIRE_DATA_BUF
static elink_status_t elink_link_settings_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_8727_hw_reset(struct elink_phy *phy, struct elink_params *params)
static elink_status_t elink_eee_disable(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define LED_BLINK_RATE_VAL_E3
#define MDIO_AN_REG_EEE_ADV
static uint8_t elink_8706_8726_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_PMA_LASI_CTRL
#define MDIO_OVER_1G_UP1_10G
static elink_status_t elink_848xx_cmn_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_WC_REG_RX66_SCW2_MASK
static elink_status_t elink_8706_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_AN_REG_1000T_STATUS
#define ELINK_SFP_EEPROM_10G_COMP_CODE_LR_MASK
#define MDIO_WC_REG_DSC2B0_DSC_MISC_CTRL0
#define MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X3
#define ELINK_MAX_PACKET_SIZE
static uint8_t elink_7101_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_disable_kr2(struct elink_params *params, struct elink_vars *vars, struct elink_phy *phy)
#define MDIO_WC_REG_TX0_TX_DRIVER
#define MDIO_PMA_REG_7107_LINK_LED_CNTL
#define MDIO_848xx_CMD_HDLR_STATUS
#define ELINK_NIG_STATUS_XGXS0_LINK_STATUS_SIZE
static void elink_8481_hw_reset(struct elink_phy *phy, struct elink_params *params)
#define MDIO_WC_REG_DIGITAL3_LP_UP1
static void elink_warpcore_set_10G_KR(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK_CNT
#define MDIO_AN_REG_8481_MII_CTRL_FORCE_1G
static elink_status_t elink_direct_parallel_detect_used(struct elink_phy *phy, struct elink_params *params)
#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT2
static void elink_set_serdes_access(struct bxe_softc *sc, uint8_t port)
static elink_status_t elink_get_edc_mode(struct elink_phy *phy, struct elink_params *params, uint16_t *edc_mode)
#define ELINK_GP_STATUS_5G
#define MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X1
#define ELINK_MDIO_AN_CL73_OR_37_COMPLETE
#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN
#define MDIO_XGXS_BLOCK2_TX_LN_SWAP
static const struct elink_phy phy_84823
#define MDIO_WC_REG_PAR_DET_10G_CTRL
static void elink_init_xgxs_loopback(struct elink_params *params, struct elink_vars *vars)
#define DEFAULT_TX_DRV_POST2
#define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX
#define ELINK_LINK_2500THD
#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL
#define MDIO_OVER_1G_LP_UP1
static uint32_t elink_get_emac_base(struct bxe_softc *sc, uint32_t mdc_mdio_access, uint8_t port)
#define MDIO_PMA_REG_SFP_TWO_WIRE_CTRL
#define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4
#define MDIO_PMA_REG_EDC_FFE_MAIN
static void elink_int_link_reset(struct elink_phy *phy, struct elink_params *params)
static void elink_warpcore_config_runtime(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_8073_set_pause_cl37(struct elink_params *params, struct elink_phy *phy, struct elink_vars *vars)
#define MDIO_CTL_REG_84823_USER_CTRL_CMS
#define MDIO_CTL_REG_84823_MEDIA_PRIORITY_FIBER
#define MDIO_CTL_REG_84823_MEDIA_LINE_MASK
static elink_status_t elink_ets_e3b0_sp_set_pri_cli_reg(const struct elink_params *params, uint8_t *sp_pri_to_cos)
#define MDIO_REG_BANK_TX0
static uint8_t elink_8727_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2
#define MDIO_SERDES_DIGITAL_A_1000X_STATUS2_AN_DISABLED
static void elink_phy_def_cfg(struct elink_params *params, struct elink_phy *phy, uint8_t phy_index)
static void elink_init_bmac_loopback(struct elink_params *params, struct elink_vars *vars)
static elink_status_t elink_emac_enable(struct elink_params *params, struct elink_vars *vars, uint8_t lb)
#define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_HIGIG_XGXS
static void elink_set_mdio_emac_per_phy(struct bxe_softc *sc, struct elink_params *params)
#define MDIO_REG_BANK_XGXS_BLOCK2
static void elink_7101_hw_reset(struct elink_phy *phy, struct elink_params *params)
#define MDIO_CTL_REG_84823_MEDIA_PRIORITY_COPPER
#define MDIO_PMA_REG_8726_TX_CTRL2
#define MDIO_WC_REG_GP2_STATUS_GP_2_3
static void elink_init_umac_loopback(struct elink_params *params, struct elink_vars *vars)
#define MDIO_AN_REG_8481_10GBASE_T_AN_CTRL
#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL
static elink_status_t elink_bmac2_enable(struct elink_params *params, struct elink_vars *vars, uint8_t is_lb)
static int elink_is_8483x_8485x(struct elink_phy *phy)
static const struct elink_phy phy_54618se
#define PHY84833_STATUS_CMD_CLEAR_COMPLETE
static void elink_umac_enable(struct elink_params *params, struct elink_vars *vars, uint8_t lb)
static void elink_sfp_mask_fault(struct bxe_softc *sc, struct elink_phy *phy, uint16_t alarm_status_offset, uint16_t alarm_ctrl_offset)
#define MDIO_WC_REG_IEEE0BLK_MIICNTL
static void elink_ext_phy_10G_an_resolve(struct bxe_softc *sc, struct elink_phy *phy, struct elink_vars *vars)
static uint32_t elink_eee_calc_timer(struct elink_params *params)
#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK
#define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE
#define ELINK_SFP_EEPROM_OPTIONS_ADDR
static void elink_sfp_set_transmitter(struct elink_params *params, struct elink_phy *phy, uint8_t tx_en)
static const struct elink_phy phy_null
uint8_t elink_fan_failure_det_req(struct bxe_softc *sc, uint32_t shmem_base, uint32_t shmem2_base, uint8_t port)
#define MDIO_CTL_REG_84823_MEDIA_COPPER_CORE_DOWN
#define ELINK_NIG_LATCH_BC_ENABLE_MI_INT
#define MDIO_REG_GPHY_SHADOW
#define ELINK_ETS_BW_LIMIT_CREDIT_WEIGHT
#define MDIO_WC_REG_FX100_CTRL1
#define ELINK_SFP_EEPROM_CON_TYPE_VAL_RJ45
static elink_status_t elink_avoid_link_flap(struct elink_params *params, struct elink_vars *vars)
#define MDIO_WC_REG_RX0_PCI_CTRL
static const struct elink_phy phy_84834
static void elink_8726_external_rom_boot(struct elink_phy *phy, struct elink_params *params)
#define ELINK_ETH_OVREHEAD
static elink_status_t elink_8727_set_limiting_mode(struct bxe_softc *sc, struct elink_phy *phy, uint16_t edc_mode)
#define PHY848xx_CMD_SET_EEE_MODE
static elink_status_t elink_cl22_write(struct bxe_softc *sc, struct elink_phy *phy, uint16_t reg, uint16_t val)
static uint64_t elink_e3b0_sp_get_pri_cli_reg_pbf(const uint8_t cos, const uint8_t pri_set)
#define LED_BLINK_RATE_VAL_E1X_E2
#define MDIO_WC_REG_DIGITAL4_MISC3
#define ELINK_GP_STATUS_1G_KX
#define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_MASK
static void elink_xgxs_deassert(struct elink_params *params)
#define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN
static uint32_t elink_bits_en(struct bxe_softc *sc, uint32_t reg, uint32_t bits)
static elink_status_t elink_84833_cmd_hdlr(struct elink_phy *phy, struct elink_params *params, uint16_t fw_cmd, uint16_t cmd_args[], int argc, int process)
void elink_ets_bw_limit(const struct elink_params *params, const uint32_t cos0_bw, const uint32_t cos1_bw)
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV
static void elink_calc_ieee_aneg_adv(struct elink_phy *phy, struct elink_params *params, uint16_t *ieee_fc)
elink_status_t elink_common_init_phy(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t shmem2_base_path[], uint32_t chip_id, uint8_t one_port_enabled)
#define MDIO_AN_REG_STATUS
static void elink_xmac_init(struct elink_params *params, uint32_t max_speed)
#define MDIO_PMA_REG_7101_VER2
static void elink_5461x_set_link_led(struct elink_phy *phy, struct elink_params *params, uint8_t mode)
#define MDIO_REG_BANK_CL73_IEEEB0
#define MDIO_CTL_REG_84823_MEDIA_LINE_XAUI_L
#define ELINK_LINK_100TXFD
static uint64_t elink_e3b0_sp_get_pri_cli_reg_nig(const uint8_t cos, const uint8_t pri_set)
#define ELINK_ETS_E3B0_NIG_MIN_W_VAL_20GBPS
#define MDIO_PMA_REG_CTRL
static elink_status_t elink_848xx_cmd_hdlr(struct elink_phy *phy, struct elink_params *params, uint16_t fw_cmd, uint16_t cmd_args[], int argc, int process)
#define ELINK_SERDES_RESET_BITS
static void elink_warpcore_set_limiting_mode(struct elink_params *params, struct elink_phy *phy, uint16_t edc_mode)
static void elink_xgxs_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_AN_REG_ADV_PAUSE
static void elink_warpcore_restart_AN_KR(struct elink_phy *phy, struct elink_params *params)
#define ELINK_GP_STATUS_6G
#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_156_25M
#define MDIO_WC_REG_XGXSBLK1_LANECTRL0
static elink_status_t elink_7101_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_ets_e3b0_set_credit_upper_bound_pbf(const struct elink_params *params, const uint32_t min_w_val)
static uint8_t elink_ext_phy_resolve_fc(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_warpcore_reset_lane(struct bxe_softc *sc, struct elink_phy *phy, uint8_t reset)
elink_status_t elink_get_ext_phy_fw_version(struct elink_params *params, uint8_t *version, uint16_t len)
#define MDIO_PMA_REG_SFP_TWO_WIRE_STATUS_COMPLETE
#define MDIO_AN_REG_CL37_FC_LP
static elink_status_t elink_bmac1_enable(struct elink_params *params, struct elink_vars *vars, uint8_t is_lb)
static void elink_init_emac_loopback(struct elink_params *params, struct elink_vars *vars)
#define ELINK_EDC_MODE_LIMITING
#define MDIO_REG_GPHY_SHADOW_WR_ENA
static void elink_bsc_module_sel(struct elink_params *params)
#define PHY848xx_CMD_SET_PAIR_SWAP
#define MDIO_WC_REG_PMD_KR_CONTROL
static void elink_8726_config_loopback(struct elink_phy *phy, struct elink_params *params)
static elink_status_t elink_8726_read_sfp_module_eeprom(struct elink_phy *phy, struct elink_params *params, uint8_t dev_addr, uint16_t addr, uint8_t byte_cnt, uint8_t *o_buf, uint8_t is_init)
static void elink_update_link_attr(struct elink_params *params, uint32_t link_attr)
#define MDIO_WC_REG_GP2_STATUS_GP_2_1
#define MDIO_AN_REG_8727_MISC_CTRL
static elink_status_t elink_eee_set_timers(struct elink_params *params, struct elink_vars *vars)
#define ELINK_NIG_MASK_MI_INT
static elink_status_t elink_8727_read_sfp_module_eeprom(struct elink_phy *phy, struct elink_params *params, uint8_t dev_addr, uint16_t addr, uint8_t byte_cnt, uint8_t *o_buf, uint8_t is_init)
static elink_status_t elink_update_link_down(struct elink_params *params, struct elink_vars *vars)
static void elink_warpcore_enable_AN_KR(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define ELINK_LINK_10GTFD
#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT
#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADV2_FEC_ABILITY
static elink_status_t elink_pfc_nig_rx_priority_mask(struct bxe_softc *sc, uint8_t cos_entry, uint32_t priority_mask, uint8_t port)
static elink_status_t elink_8726_common_init_phy(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t shmem2_base_path[], uint8_t phy_index, uint32_t chip_id)
#define MDIO_PMA_REG_8481_LINK_SIGNAL_LED4_ENABLE_SHIFT
static const struct elink_phy phy_8705
#define MDIO_WC_REG_EEE_COMBO_CONTROL0
#define MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_OVER1G_MSG
static void elink_initialize_sgmii_process(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static uint8_t elink_8726_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_RX0_RX_EQ_BOOST
#define MDIO_REG_BANK_RX1
#define MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX
#define MDIO_PMA_LASI_STAT
#define MDIO_AN_REG_CL37_AN
static void elink_sync_link(struct elink_params *params, struct elink_vars *vars)
void elink_sfx7101_sp_sw_reset(struct bxe_softc *sc, struct elink_phy *phy)
#define MDIO_PMA_REG_SFP_TWO_WIRE_CTRL_STATUS_MASK
#define MDIO_PMA_REG_8481_LINK_SIGNAL_LED4_ENABLE_MASK
#define MDIO_AN_REG_8481_LEGACY_MII_CTRL
#define ELINK_SFP_EEPROM_10G_COMP_CODE_SR_MASK
static elink_status_t elink_eee_time_to_nvram(uint32_t idle_timer, uint32_t *nvram_mode)
#define MDIO_PMA_REG_7101_VER1
#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS
#define MDIO_WC_REG_CL73_BAM_CTRL3
#define MDIO_WC_REG_CL72_USERB0_CL72_OS_DEF_CTRL
#define MDIO_PMA_REG_LRM_MODE
#define MDIO_WC_REG_TX_FIR_TAP_ENABLE
#define MDIO_GP_STATUS_TOP_AN_STATUS1_DUPLEX_STATUS
static elink_status_t elink_cl45_read(struct bxe_softc *sc, struct elink_phy *phy, uint8_t devad, uint16_t reg, uint16_t *ret_val)
static void elink_7101_config_loopback(struct elink_phy *phy, struct elink_params *params)
static void elink_set_aer_mmd(struct elink_params *params, struct elink_phy *phy)
static void elink_save_spirom_version(struct bxe_softc *sc, uint8_t port, uint32_t spirom_ver, uint32_t ver_addr)
#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1
#define MDIO_XGXS_BLOCK2_TEST_MODE_LANE
#define MDIO_REG_BANK_REMOTE_PHY
#define MDIO_CL73_USERB0_CL73_USTAT1_AN_GOOD_CHECK_BAM37
static void elink_link_int_enable(struct elink_params *params)
#define ELINK_SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_PASSIVE
static void elink_save_848xx_spirom_version(struct elink_phy *phy, struct bxe_softc *sc, uint8_t port)
static void elink_warpcore_enable_AN_KR2(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK
static void elink_54618se_link_reset(struct elink_phy *phy, struct elink_params *params)
#define MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN
#define MDIO_WC_REG_ETA_CL73_OUI2
static elink_status_t elink_8073_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_AN_REG_LP_AUTO_NEG2
static void elink_8073_resolve_fc(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static const struct elink_phy phy_84858
#define MDIO_WC_REG_DIGITAL5_MISC6
static void elink_set_disable_pmd_transmit(struct elink_params *params, struct elink_phy *phy, uint8_t pmd_dis)
#define MAX_KR_LINK_RETRY
#define MDIO_CL73_IEEEB1_AN_LP_ADV2
#define MDIO_PCS_REG_STATUS
static elink_status_t elink_check_half_open_conn(struct elink_params *params, struct elink_vars *vars, uint8_t notify)
#define MDIO_PMA_REG_GEN_CTRL_ROM_MICRO_RESET
#define MDIO_OVER_1G_UP1_10GH
static void elink_set_master_ln(struct elink_params *params, struct elink_phy *phy)
#define MDIO_WC_REG_ETA_CL73_OUI3
static void elink_save_bcm_spirom_ver(struct bxe_softc *sc, struct elink_phy *phy, uint8_t port)
#define MDIO_COMBO_IEEO_MII_CONTROL_LOOPBACK
#define MDIO_CTL_REG_84823_MEDIA
static void elink_set_ieee_aneg_advertisement(struct elink_phy *phy, struct elink_params *params, uint16_t ieee_fc)
static void elink_update_pfc_nig(struct elink_params *params, struct elink_vars *vars, struct elink_nig_brb_pfc_port_params *nig_params)
static void elink_set_xumac_nig(struct elink_params *params, uint16_t tx_pause_en, uint8_t enable)
static void elink_update_adv_fc(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint32_t gp_status)
static elink_status_t elink_848xx_pair_swap_cfg(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_WC_REG_TX_FIR_TAP
static const struct elink_phy phy_8726
#define MDIO_WC_REG_FX100_CTRL3
static void elink_update_pfc_bmac1(struct elink_params *params, struct elink_vars *vars)
static void elink_init_xmac_loopback(struct elink_params *params, struct elink_vars *vars)
static void elink_8726_link_reset(struct elink_phy *phy, struct elink_params *params)
#define MDIO_WC_REG_CL82_USERB1_TX_CTRL6
#define MDIO_PMA_REG_8481_LED5_MASK
#define ELINK_ETS_E3B0_NIG_MIN_W_VAL_UP_TO_10GBPS
#define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK
#define MDIO_PMA_REG_8727_TWO_WIRE_SLAVE_ADDR
#define MDIO_PMA_REG_TX_POWER_DOWN
#define MDIO_REG_INTR_MASK
#define MDIO_WC_REG_UC_INFO_B1_FIRMWARE_MODE_SFP_DAC
#define MDIO_PMA_REG_8481_LED3_MASK
static elink_status_t elink_ets_e3b0_disabled(const struct elink_params *params, const struct elink_vars *vars)
#define ELINK_GP_STATUS_10G_KR
#define MDIO_REG_GPHY_EXP_TOP_2K_BUF
#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE
static void elink_set_gmii_tx_driver(struct elink_params *params)
static uint8_t elink_get_warpcore_lane(struct elink_phy *phy, struct elink_params *params)
static uint8_t elink_848xx_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_PMA_REG_CMU_PLL_BYPASS
#define MDIO_WC_REG_CL49_USERB0_CTRL
elink_status_t elink_link_reset(struct elink_params *params, struct elink_vars *vars, uint8_t reset_ext_phy)
#define MDIO_REG_GPHY_SHADOW_INVERT_FIB_SD
#define MDIO_REG_GPHY_SHADOW_LED_SEL1
static uint64_t elink_e3b0_sp_get_pri_cli_reg(const uint8_t cos, const uint8_t cos_offset, const uint8_t pri_set, const uint8_t pri_offset, const uint8_t entry_size)
static void set_phy_vars(struct elink_params *params, struct elink_vars *vars)
#define PHY84833_STATUS_CMD_COMPLETE_PASS
static void elink_set_mdio_clk(struct bxe_softc *sc, uint32_t chip_id, uint32_t emac_base)
#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_MASK
#define WC_TX_FIR(post, main, pre)
#define MDIO_REG_BANK_TX3
#define MDIO_AN_REG_8481_EXPANSION_REG_ACCESS
#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_SIGNAL_DETECT_EN
#define MDIO_REG_BANK_AER_BLOCK
#define MDIO_AN_REG_MASTER_STATUS
static elink_status_t elink_pbf_update(struct elink_params *params, uint32_t flow_ctrl, uint32_t line_speed)
#define MDIO_XGXS_BLOCK2_RX_LN_SWAP
#define PHY84833_CONSTANT_LATENCY
#define MDIO_REG_BANK_CL73_USERB0
#define MDIO_CL73_IEEEB1_AN_ADV1
#define MDIO_CTL_REG_84823_MEDIA_MAC_MASK
void elink_link_status_update(struct elink_params *params, struct elink_vars *vars)
static elink_status_t elink_8483x_disable_eee(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_REG_BANK_RX0
#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_MASK
static void elink_program_serdes(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_CTL_REG_84823_USER_CTRL_REG
static elink_status_t elink_7101_format_ver(uint32_t spirom_ver, uint8_t *str, uint16_t *len)
static elink_status_t elink_ets_e3b0_get_total_bw(const struct elink_params *params, struct elink_ets_params *ets_params, uint16_t *total_bw)
#define MDIO_PMA_REG_8727_GPIO_CTRL
static elink_status_t elink_848xx_format_ver(uint32_t raw_ver, uint8_t *str, uint16_t *len)
#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT1
#define ELINK_NIG_MASK_SERDES0_LINK_STATUS
elink_status_t elink_set_led(struct elink_params *params, struct elink_vars *vars, uint8_t mode, uint32_t speed)
#define MDIO_REG_GPHY_SHADOW_LED_SEL2
#define MDIO_PMA_REG_8727_PCS_OPT_CTRL
static void elink_sfp_e3_set_transmitter(struct elink_params *params, struct elink_phy *phy, uint8_t tx_en)
#define MDIO_XS_SFX7101_XGXS_TEST1
static void elink_ext_phy_set_pause(struct elink_params *params, struct elink_phy *phy, struct elink_vars *vars)
static void elink_restart_autoneg(struct elink_phy *phy, struct elink_params *params, uint8_t enable_cl73)
#define PHY84833_STATUS_CMD_COMPLETE_ERROR
static elink_status_t elink_ets_e3b0_cli_map(const struct elink_params *params, const struct elink_ets_params *ets_params, const uint8_t cos_sp_bitmap, const uint8_t cos_bw_bitmap)
#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_SHIFT
static void elink_set_limiting_mode(struct elink_params *params, struct elink_phy *phy, uint16_t edc_mode)
#define MDIO_CL73_USERB0_CL73_BAM_CTRL1
#define PHY848xx_CMDHDLR_WAIT
#define CL22_WR_OVER_CL45(_sc, _phy, _bank, _addr, _val)
static void elink_cl45_read_or_write(struct bxe_softc *sc, struct elink_phy *phy, uint8_t devad, uint16_t reg, uint16_t or_val)
#define MDIO_WC_REG_AN_IEEE1BLK_AN_ADV2_FEC_REQ
#define MDIO_REG_INTR_STATUS
static elink_status_t elink_cl22_read(struct bxe_softc *sc, struct elink_phy *phy, uint16_t reg, uint16_t *ret_val)
static void elink_set_swap_lanes(struct elink_params *params, struct elink_phy *phy)
static elink_status_t elink_populate_int_phy(struct bxe_softc *sc, uint32_t shmem_base, uint8_t port, struct elink_phy *phy)
static elink_status_t elink_update_link_up(struct elink_params *params, struct elink_vars *vars, uint8_t link_10g)
static elink_status_t elink_54618se_config_init(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define MDIO_REMOTE_PHY_MISC_RX_STATUS_CL37_FSM_RECEIVED_BRCM_OUI_MSG
static void elink_cl45_read_and_write(struct bxe_softc *sc, struct elink_phy *phy, uint8_t devad, uint16_t reg, uint16_t and_val)
#define ELINK_LINK_1000THD
#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_STATUS_PD_LINK
#define MDIO_SERDES_DIGITAL_MISC1
#define ELINK_GP_STATUS_SPEED_MASK
#define MDIO_WC_REG_SERDESDIGITAL_MISC2
#define MDIO_PMA_REG_84833_CTL_LED_CTL_1
static const struct elink_phy phy_8073
#define ELINK_GP_STATUS_2_5G
uint32_t elink_phy_selection(struct elink_params *params)
#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC
elink_status_t elink_read_sfp_module_eeprom(struct elink_phy *phy, struct elink_params *params, uint8_t dev_addr, uint16_t addr, uint16_t byte_cnt, uint8_t *o_buf)
#define MDIO_PMA_REG_8727_TWO_WIRE_DATA_BUF
static void elink_get_ext_phy_reset_gpio(struct bxe_softc *sc, uint32_t shmem_base, uint8_t *io_gpio, uint8_t *io_port)
static void elink_update_pfc_bmac2(struct elink_params *params, struct elink_vars *vars, uint8_t is_lb)
static void elink_54618se_specific_func(struct elink_phy *phy, struct elink_params *params, uint32_t action)
#define ELINK_NIG_STATUS_XGXS0_LINK10G
#define MDIO_WC_REG_CL72_USERB0_CL72_2P5_DEF_CTRL
#define ELINK_SFP_EEPROM_CON_TYPE_ADDR
static uint8_t elink_8705_read_status(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
static void elink_ets_e3b0_nig_disabled(const struct elink_params *params, const struct elink_vars *vars)
static elink_status_t elink_null_format_ver(uint32_t spirom_ver, uint8_t *str, uint16_t *len)
#define PHY84858_STATUS_CMD_SYSTEM_BUSY
#define MDIO_XGXS_BLOCK2_TX_LN_SWAP_ENABLE
#define MDIO_SERDES_DIGITAL_A_1000X_STATUS2
#define MDIO_PMA_REG_ROM_VER2
static elink_status_t elink_emac_program(struct elink_params *params, struct elink_vars *vars)
#define MDIO_AN_REG_8481_1G_100T_EXT_CTRL
#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_100
#define MDIO_CL73_USERB0_CL73_USTAT1
static void elink_8727_config_speed(struct elink_phy *phy, struct elink_params *params)
static void elink_set_umac_rxtx(struct elink_params *params, uint8_t en)
#define WC_TX_DRIVER(post2, idriver, ipre, ifir)
static elink_status_t elink_format_ver(uint32_t num, uint8_t *str, uint16_t *len)
#define MDIO_CL73_USERB0_CL73_USTAT1_LINK_STATUS_CHECK
#define MDIO_REG_GPHY_AUX_STATUS
#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_1000
#define ELINK_GP_STATUS_10G_HIG
static void elink_set_preemphasis(struct elink_phy *phy, struct elink_params *params)
static void elink_flow_ctrl_resolve(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars, uint32_t gp_status)
#define MDIO_CL73_IEEEB0_CL73_AN_CONTROL
#define MDIO_WC_REG_CL82_USERB1_TX_CTRL5
#define MDIO_AN_REG_8481_LEGACY_AN_ADV
#define MDIO_WIS_REG_LASI_STATUS
#define MDIO_WC_REG_DIGITAL6_MP5_NEXTPAGECTRL
static void elink_emac_get_pfc_stat(struct elink_params *params, uint32_t pfc_frames_sent[2], uint32_t pfc_frames_received[2])
#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN
static elink_status_t elink_cl45_write(struct bxe_softc *sc, struct elink_phy *phy, uint8_t devad, uint16_t reg, uint16_t val)
#define ELINK_SFP_EEPROM_CON_TYPE_VAL_COPPER
#define ELINK_LINK_1000TFD
#define MDIO_XGXS_BLOCK2_RX_LN_SWAP_FORCE_ENABLE
static elink_status_t elink_ext_phy_common_init(struct bxe_softc *sc, uint32_t shmem_base_path[], uint32_t shmem2_base_path[], uint8_t phy_index, uint32_t ext_phy_type, uint32_t chip_id)
#define ELINK_FLAGS_INIT_XGXS_FIRST
#define ELINK_FEATURE_CONFIG_EMUL_DISABLE_EMAC
#define ELINK_DEBUG_P2(sc, fmt, arg1, arg2)
#define ELINK_ETH_PHY_DA_TWINAX
#define ELINK_FEATURE_CONFIG_MT_SUPPORT
#define ELINK_FLAGS_DUMMY_READ
#define ELINK_EEE_MODE_ENABLE_LPI
#define ELINK_SFP_EEPROM_PAGE_SIZE
void(* config_loopback_t)(struct elink_phy *phy, struct elink_params *params)
#define ELINK_SUPPORTED_FIBRE
#define ELINK_FEATURE_CONFIG_BC_SUPPORTS_AFEX
#define ELINK_FEATURE_CONFIG_PFC_ENABLED
#define ELINK_DCBX_MAX_NUM_COS
#define ELINK_FEATURE_CONFIG_BOOT_FROM_SAN
#define ELINK_FEATURE_CONFIG_DISABLE_REMOTE_FAULT_DET
#define ELINK_SUPPORTED_20000baseMLD2_Full
#define ELINK_LOOPBACK_XMAC
void(* hw_reset_t)(struct elink_phy *phy, struct elink_params *params)
#define PHY_OVER_CURRENT_FLAG
#define ELINK_SWITCH_CFG_10G
#define ELINK_DEBUG_P1(sc, fmt, arg1)
#define ELINK_LED_MODE_OFF
#define ELINK_SPEED_20000
#define PHY_SFP_TX_FAULT_FLAG
#define ELINK_EEE_MODE_TIMER_MASK
#define ELINK_FLAGS_SFP_NOT_APPROVED
#define ELINK_SUPPORTED_2500baseX_Full
#define ELINK_SPEED_10000
#define ELINK_FLAGS_4_PORT_MODE
#define ELINK_SWITCH_CFG_1G
#define PHY_HALF_OPEN_CONN_FLAG
#define ELINK_SUPPORTED_100baseT_Half
#define ELINK_I2C_DEV_ADDR_A0
#define ELINK_LOOPBACK_BMAC
#define ELINK_ETH_PHY_BASE_T
#define ELINK_FEATURE_CONFIG_BC_SUPPORTS_DUAL_PHY_OPT_MDL_VRFY
#define ELINK_FEATURE_CONFIG_EMUL_DISABLE_UMAC
#define ELINK_BMAC_CONTROL_RX_ENABLE
#define ELINK_PHY_INITIALIZED
#define ELINK_DCBX_E3B0_MAX_NUM_COS_PORT1
enum elink_status elink_status_t
#define ELINK_LOOPBACK_EXT_PHY
#define ELINK_SUPPORTED_20000baseKR2_Full
#define ELINK_EEE_MODE_ADV_LPI
#define ELINK_FLAGS_TX_ERROR_CHECK
#define ELINK_CHECK_KR2_RECOVERY_CNT
#define ELINK_LINK_CONFIG_IDX(_phy_idx)
#define ELINK_FLAGS_WC_DUAL_MODE
#define ELINK_EEE_MODE_NVRAM_AGGRESSIVE_TIME
#define ELINK_PERIODIC_FLAGS_LINK_EVENT
#define ELINK_ETH_PHY_CX4
#define ELINK_ETH_PHY_XFP_FIBER
#define ELINK_FLOW_CTRL_TX
#define ELINK_FLOW_CTRL_AUTO
#define ELINK_SUPPORTED_100baseT_Full
#define ELINK_SFP_EEPROM_PART_NO_SIZE
#define ELINK_FEATURE_CONFIG_IEEE_PHY_TEST
#define ELINK_SUPPORTED_1000baseT_Full
#define ELINK_LOOPBACK_XGXS
#define ELINK_FEATURE_CONFIG_EMUL_DISABLE_BMAC
#define ELINK_FEATURE_CONFIG_EMUL_DISABLE_XMAC
#define ELINK_DEFAULT_PHY_DEV_ADDR
#define ELINK_DUAL_MEDIA(params)
#define ELINK_DCBX_E3B0_MAX_NUM_COS_PORT0
#define ELINK_FLAGS_TEMPERATURE
#define ELINK_LOOPBACK_EMAC
#define ELINK_EEE_MODE_NVRAM_BALANCED_TIME
#define ELINK_FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED
#define ELINK_LINK_FLAGS_INT_DISABLED
uint8_t(* format_fw_ver_t)(uint32_t raw, uint8_t *str, uint16_t *len)
void(* phy_specific_func_t)(struct elink_phy *phy, struct elink_params *params, uint32_t action)
@ ELINK_LOG_ID_MDIO_ACCESS_TIMEOUT
@ ELINK_LOG_ID_PHY_UNINITIALIZED
@ ELINK_LOG_ID_NON_10G_MODULE
@ ELINK_LOG_ID_UNQUAL_IO_MODULE
@ ELINK_LOG_ID_OVER_CURRENT
#define ELINK_EEE_MODE_NVRAM_LATENCY_TIME
#define ELINK_ETH_PHY_NOT_PRESENT
#define ELINK_EEE_MODE_OUTPUT_TIME
#define ELINK_SUPPORTED_TP
#define ELINK_MAC_TYPE_BMAC
void(* set_link_led_t)(struct elink_phy *phy, struct elink_params *params, uint8_t mode)
#define ELINK_DEBUG_P0(sc, fmt)
#define ELINK_MAXVAL(a, b)
#define ELINK_LOOPBACK_NONE
#define ELINK_SUPPORTED_10baseT_Full
#define ELINK_FW_PARAM_SET(phy_addr, phy_type, mdio_access)
#define ELINK_SFP_EEPROM_VENDOR_NAME_ADDR
#define ELINK_LED_MODE_OPER
#define ELINK_FLOW_CTRL_BOTH
#define ELINK_LED_MODE_ON
#define ELINK_FLAGS_MDC_MDIO_WA_B0
#define ELINK_FLOW_CTRL_NONE
#define ELINK_FEATURE_CONFIG_BC_SUPPORTS_OPT_MDL_VRFY
void(* link_reset_t)(struct elink_phy *phy, struct elink_params *params)
#define ELINK_EEE_MODE_NVRAM_MASK
#define ELINK_SUPPORTED_10000baseT_Full
uint8_t(* config_init_t)(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define ELINK_MAC_TYPE_EMAC
#define ELINK_LOOPBACK_UMAC
#define ELINK_MAC_TYPE_NONE
#define ELINK_SUPPORTED_Asym_Pause
#define ELINK_SUPPORTED_Pause
#define ELINK_ETH_PHY_SFP_1G_FIBER
#define ELINK_SUPPORTED_10000baseKR_Full
#define ELINK_E2_DEFAULT_PHY_DEV_ADDR
#define ELINK_XGXS_EXT_PHY_TYPE(ext_phy_config)
#define ELINK_SFP_EEPROM_PART_NO_ADDR
#define ELINK_FLAGS_MDC_MDIO_WA_G
#define ELINK_FLAGS_FAN_FAILURE_DET_REQ
#define ELINK_LOOPBACK_EXT
#define ELINK_FEATURE_CONFIG_BC_SUPPORTS_SFP_TX_DISABLED
#define ELINK_MAC_TYPE_UMAC
#define ELINK_SFP_EEPROM_VENDOR_NAME_SIZE
#define ELINK_LED_MODE_FRONT_PANEL_OFF
#define ELINK_DEBUG_P3(sc, fmt, arg1, arg2, arg3)
#define ELINK_SUPPORTED_Autoneg
#define ELINK_SUPPORTED_1000baseKX_Full
#define ELINK_SINGLE_MEDIA_DIRECT(params)
#define ELINK_SUPPORTED_10baseT_Half
#define ELINK_FLOW_CTRL_RX
#define ELINK_FLAGS_REARM_LATCH_SIGNAL
#define ELINK_ETH_PHY_SFPP_10G_FIBER
uint8_t(* read_status_t)(struct elink_phy *phy, struct elink_params *params, struct elink_vars *vars)
#define ELINK_FLAGS_MDC_MDIO_WA
#define PHY_PHYSICAL_LINK_FLAG
#define ELINK_MAC_TYPE_XMAC
#define ELINK_XGXS_EXT_PHY_ADDR(ext_phy_config)
#define ELINK_FEATURE_CONFIG_AUTOGREEEN_ENABLED
#define ELINK_SPEED_AUTO_NEG
#define ELINK_EEE_MODE_OVERRIDE_NVRAM
#define ELINK_ETH_PHY_UNSPECIFIED
void(* action)(struct bxe_softc *sc)
#define PORT_HW_CFG_LANE_SWAP_CFG_TX_SHIFT
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO0_P1
#define SHARED_HW_CFG_LED_PHY1
#define PORT_HW_CFG_ENABLE_BAM_ON_KR_ENABLED
#define PORT_HW_CFG_FAULT_MODULE_LED_GPIO2
#define LFA_DUPLEX_MISMATCH
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO0_P0
#define PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT
#define LFA_LINK_FLAP_REASON_OFFSET
#define LINK_SFP_EEPROM_COMP_CODE_SHIFT
#define PORT_HW_CFG_E3_MOD_ABS_SHIFT
#define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_POWER_DOWN
#define PORT_HW_CFG_E3_PWR_DIS_MASK
#define LINK_STATUS_LINK_PARTNER_100TXFD_CAPABLE
#define PORT_HW_CFG_TX_LASER_MASK
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073
#define SHARED_HW_CFG_MDC_MDIO_ACCESS2_SHIFT
#define LFA_LINK_FLAP_REASON_MASK
#define LINK_STATUS_LINK_PARTNER_10THD_CAPABLE
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_EMAC0
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727
#define PORT_HW_CFG_PHY_SELECTION_SECOND_PHY
#define PORT_HW_CFG_MEDIA_TYPE_PHY1_MASK
#define PORT_HW_CFG_TX_LASER_GPIO0
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_BOTH
#define SHARED_HW_CFG_LED_EXTPHY1
#define PORT_HW_CFG_E3_FAULT_MDL_LED_MASK
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_1G
#define PORT_HW_CFG_E3_PWR_DIS_SHIFT
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_SHIFT
#define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_NOT_CONN
#define SHMEM_LINK_CONFIG_SIZE
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF
#define PORT_HW_CFG_MEDIA_TYPE_PHY0_MASK
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_20G
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO2_P0
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO2_P1
#define PORT_HW_CFG_PHY_SELECTION_FIRST_PHY
#define PORT_FEATURE_LINK_SPEED_10M_FULL
#define PORT_HW_CFG_PHY_SELECTION_HARDWARE_DEFAULT
#define SHMEM_EEE_LPI_REQUESTED_BIT
#define LINK_FLAP_AVOIDANCE_COUNT_OFFSET
#define PORT_HW_CFG_TX_DRV_BROADCAST_SHIFT
#define PORT_HW_CFG_FAULT_MODULE_LED_GPIO3
#define SHMEM_EEE_ADV_STATUS_SHIFT
#define PORT_FEATURE_FLOW_CONTROL_BOTH
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726
#define LFA_FLOW_CTRL_MISMATCH
#define PORT_HW_CFG_NET_SERDES_IF_DXGXS
#define PORT_HW_CFG_PHY_SELECTION_MASK
#define SHMEM_EEE_LP_ADV_STATUS_SHIFT
#define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_NO_ENFORCEMENT
#define PORT_HW_CFG_RJ45_PAIR_SWAP_MASK
#define PORT_FEATURE_LINK_SPEED_10M_HALF
#define PORT_HW_CFG_MEDIA_TYPE_PHY2_MASK
#define PORT_FEATURE_LINK_SPEED_100M_HALF
#define SHMEM_EEE_TIME_OUTPUT_BIT
#define PORT_HW_CFG_TX_EQUALIZATION_MASK
#define PORT_HW_CFG_MEDIA_TYPE_PHY1_SHIFT
#define PORT_FEAT_CFG_EEE_POWER_MODE_MASK
#define PORT_FEATURE_LINK_SPEED_1G
#define PORT_HW_CFG_TX_DRV_IFIR_SHIFT
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616
#define PORT_FEATURE_FLOW_CONTROL_AUTO
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84834
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706
#define PORT_FEAT_CFG_EEE_POWER_MODE_BALANCED
#define LINK_STATUS_LINK_PARTNER_100T4_CAPABLE
#define PORT_HW_CFG_E3_OVER_CURRENT_MASK
#define PORT_HW_CFG_E3_FAULT_MDL_LED_SHIFT
#define LINK_STATUS_RX_FLOW_CONTROL_ENABLED
#define PORT_HW_CFG_MEDIA_TYPE_PHY0_SHIFT
#define PORT_HW_CFG_TX_DRV_POST2_SHIFT
#define PORT_HW_CFG_FAULT_MODULE_LED_GPIO1
#define LINK_STATUS_PARALLEL_DETECTION_USED
#define LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE
#define PORT_HW_CFG_E3_OVER_CURRENT_SHIFT
#define LINK_STATUS_SERDES_LINK
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_SWAPPED
#define LINK_FLAP_AVOIDANCE_COUNT_MASK
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G
#define LINK_STATUS_SFP_TX_FAULT
#define PORT_HW_CFG_NET_SERDES_IF_KR
#define PORT_HW_CFG_FAULT_MODULE_LED_GPIO0
#define PORT_HW_CFG_TX_DRV_IPREDRIVER_MASK
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823
#define LINK_FLAP_COUNT_MASK
#define LINK_STATUS_LINK_PARTNER_10TFD_CAPABLE
#define REQ_FC_AUTO_ADV_MASK
#define PORT_FEAT_CFG_EEE_POWER_MODE_SHIFT
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727_NOC
#define LINK_STATUS_TX_FLOW_CONTROL_ENABLED
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT
#define SHARED_HW_CFG_LED_MODE_SHIFT
#define PORT_HW_CFG_NET_SERDES_IF_SFI
#define PORT_FEATURE_LINK_SPEED_MASK
#define FW_MSG_CODE_VRFY_OPT_MDL_SUCCESS
#define SHMEM_EEE_TIMER_MASK
#define SHARED_HW_CFG_MDC_MDIO_ACCESS2_MASK
#define PORT_HW_CFG_NET_SERDES_IF_SGMII
#define SHARED_HW_CFG_E3_I2C_MUX0_MASK
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO3_P1
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_SHIFT
#define PORT_HW_CFG_TX_LASER_GPIO3
#define LFA_SPEED_CAP_MISMATCH
#define PORT_FEATURE_LINK_SPEED_2_5G
#define LFA_LINK_SPEED_MISMATCH
#define PORT_HW_CFG_TX_DRV_IFIR_MASK
#define PORT_HW_CFG_E3_I2C_MUX0_MASK
#define LINK_STATUS_PHYSICAL_LINK_FLAG
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_MASK
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE
#define PORT_HW_CFG_TX_DRV_IPREDRIVER_SHIFT
#define PORT_HW_CFG_NET_SERDES_IF_MASK
#define PORT_HW_CFG_PHY_SELECTION_SECOND_PHY_PRIORITY
#define PORT_FEATURE_FLOW_CONTROL_TX
#define PORT_FEATURE_LINK_SPEED_100M_FULL
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO3_P0
#define LINK_STATUS_SPEED_AND_DUPLEX_MASK
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO1_P0
#define LINK_STATUS_PFC_ENABLED
#define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_MASK
#define LINK_STATUS_LINK_UP
#define SHARED_HW_CFG_RX_LANE0_POL_FLIP_ENABLED
#define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833
#define PORT_FEAT_CFG_EEE_POWER_MODE_AGGRESSIVE
#define SHMEM_EEE_REQUESTED_BIT
#define PORT_FEAT_CFG_EEE_POWER_MODE_DISABLED
#define SHMEM_EEE_ACTIVE_BIT
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_GPIO1_P1
#define PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED
#define PORT_HW_CFG_PHY_SELECTION_FIRST_PHY_PRIORITY
#define PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK
#define PORT_HW_CFG_TX_LASER_MDIO
#define LINK_STATUS_LINK_PARTNER_100TXHD_CAPABLE
#define PORT_HW_CFG_NET_SERDES_IF_KR2
#define PORT_HW_CFG_LANE_SWAP_CFG_TX_MASK
#define SHARED_HW_CFG_E3_I2C_MUX1_MASK
#define PORT_FEATURE_FLOW_CONTROL_RX
#define LINK_STATUS_LINK_PARTNER_10GXFD_CAPABLE
#define PORT_HW_CFG_NET_SERDES_IF_XFI
#define PORT_HW_CFG_TX_LASER_GPIO2
#define PORT_HW_CFG_EXT_PHY_GPIO_RST_MASK
#define PORT_HW_CFG_E3_TX_FAULT_MASK
#define LINK_ATTR_SYNC_KR2_ENABLE
#define LFA_MFW_IS_TOO_OLD
#define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT_SD
#define LFA_LOOPBACK_ENABLED
#define PORT_HW_CFG_FAULT_MODULE_LED_DISABLED
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101
#define PORT_HW_CFG_E3_I2C_MUX1_MASK
#define SHARED_HW_CFG_E3_I2C_MUX1_SHIFT
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_PHY_TYPE
#define PORT_HW_CFG_PHY_SWAPPED_ENABLED
#define PORT_HW_CFG_SPEED_CAPABILITY_D0_10G
#define DRV_MSG_CODE_LINK_STATUS_CHANGED
#define NO_LFA_DUE_TO_DCC_MASK
#define PORT_HW_CFG_TX_DRV_POST2_MASK
#define PORT_HW_CFG_FAULT_MODULE_LED_MASK
#define PORT_HW_CFG_E3_PHY_RESET_SHIFT
#define SHMEM_EEE_LP_ADV_STATUS_MASK
#define PORT_HW_CFG_LANE_SWAP_CFG_RX_MASK
#define SHARED_HW_CFG_LED_EXTPHY2
#define SHMEM_LFA_DONT_CLEAR_STAT
#define LINK_STATUS_AUTO_NEGOTIATE_COMPLETE
#define SHARED_HW_CFG_LED_MAC1
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84858
#define PORT_HW_CFG_ENABLE_CMS_MASK
#define PORT_HW_CFG_E3_TX_FAULT_SHIFT
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE
#define LFA_DCC_LFA_DISABLED
#define PORT_HW_CFG_TX_DRV_BROADCAST_MASK
#define LINK_FLAP_COUNT_OFFSET
#define LINK_STATUS_LINK_PARTNER_1000THD_CAPABLE
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481
#define DRV_MSG_CODE_VRFY_FIRST_PHY_OPT_MDL
#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8722
#define PORT_HW_CFG_LANE_SWAP_CFG_RX_SHIFT
#define PORT_HW_CFG_E3_PHY_RESET_MASK
#define SHMEM_EEE_10G_ADV
#define SHMEM_EEE_100M_ADV
#define SHMEM_EEE_ADV_STATUS_MASK
#define PORT_HW_CFG_MEDIA_TYPE_PHY2_SHIFT
#define PORT_FEAT_CFG_EEE_POWER_MODE_LOW_LATENCY
#define PORT_HW_CFG_E3_TX_LASER_MASK
#define DRV_MSG_CODE_VRFY_SPECIFIC_PHY_OPT_MDL
#define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_WARNING_MSG
#define LINK_STATUS_LINK_PARTNER_1000TFD_CAPABLE
#define PORT_FEATURE_LINK_SPEED_10G_CX4
#define PORT_HW_CFG_E3_MOD_ABS_MASK
#define PORT_FEATURE_FLOW_CONTROL_MASK
#define SHARED_HW_CFG_MDC_MDIO_ACCESS1_EMAC1
#define PORT_FEATURE_CONNECTED_SWITCH_MASK
#define LINK_STATUS_LINK_PARTNER_2500XFD_CAPABLE
#define LINK_STATUS_AUTO_NEGOTIATE_ENABLED
#define LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE
#define PORT_HW_CFG_TX_LASER_GPIO1
#define PORT_FEAT_CFG_OPT_MDL_ENFRCMNT_DISABLE_TX_LASER
#define SHMEM_EEE_SUPPORTED_SHIFT
#define NIG_REG_XGXS0_STATUS_LINK10G
#define EMAC_TX_MODE_RESET
#define NIG_REG_LLFC_LOW_PRIORITY_CLASSES_0
#define NIG_REG_STATUS_INTERRUPT_PORT0
#define UMAC_REG_MAC_ADDR1
#define EMAC_LED_10MB_OVERRIDE
#define NIG_REG_P0_PKT_PRIORITY_TO_COS
#define MISC_REG_CPMU_LP_IDLE_THR_P0
#define EMAC_MODE_PORT_MII_10M
#define EMAC_REG_EMAC_MDIO_MODE
#define EMAC_RX_MODE_RESET
#define NIG_REG_LATCH_STATUS_0
#define MISC_REGISTERS_GPIO_1
#define NIG_REG_LLFC_OUT_EN_0
#define MISC_REGISTERS_GPIO_INPUT_HI_Z
#define NIG_REG_BMAC0_IN_EN
#define NIG_REG_LLH0_BRB1_DRV_MASK
#define NIG_REG_XGXS0_STATUS_LINK_STATUS
#define NIG_REG_BMAC0_PAUSE_OUT_EN
#define MISC_REG_CPMU_LP_DR_ENABLE
#define EMAC_REG_EMAC_MDIO_STATUS
#define NIG_REG_P0_RX_COS2_PRIORITY_MASK
#define XMAC_CTRL_REG_SOFT_RESET
#define MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE
#define MISC_REG_LCPLL_E40_RESETB_DIG
#define EMAC_LED_100MB_OVERRIDE
#define MISC_REG_FOUR_PORT_PORT_SWAP
#define EMAC_REG_EMAC_MODE
#define BIGMAC2_REGISTER_RX_LLFC_MSG_FLDS
#define EMAC_RX_MODE_FLOW_EN
#define XMAC_REG_EEE_TIMERS_HI
#define PBF_REG_COS1_WEIGHT_P0
#define XMAC_REG_CTRL_SA_LO
#define MISC_REG_CHIP_REV
#define PBF_REG_ETS_ARB_PRIORITY_CLIENT_P0
#define NIG_REG_LLH1_BRB1_NOT_MCP
#define UMAC_COMMAND_CONFIG_REG_LOOP_ENA
#define NIG_REG_P1_TX_ARB_CREDIT_UPPER_BOUND_2
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_3
#define NIG_REG_P0_TX_ARB_PRIORITY_CLIENT
#define MISC_REG_WC0_CTRL_PHY_ADDR
#define NIG_REG_LLFC_HIGH_PRIORITY_CLASSES_0
#define PBF_REG_ETS_ARB_NUM_STRICT_ARB_SLOTS_P1
#define XMAC_REG_CTRL_SA_HI
#define EMAC_REG_EMAC_TX_MODE
#define MCP_REG_MCPR_IMC_COMMAND
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_7
#define NIG_REG_LED_MODE_P0
#define BIGMAC2_REGISTER_CNT_MAX_SIZE
#define EMAC_REG_RX_PFC_STATS_XOFF_RCVD_COUNT
#define NIG_REG_BMAC0_REGS_OUT_EN
#define EMAC_MDIO_MODE_AUTO_POLL
#define PBF_REG_COS4_WEIGHT_P0
#define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0
#define NIG_REG_BRB1_PAUSE_IN_EN
#define NIG_REG_P0_RX_COS1_PRIORITY_MASK
#define NIG_REG_EGRESS_DRAIN0_MODE
#define MISC_REG_TWO_PORT_PATH_SWAP_OVWR
#define NIG_REG_LED_CONTROL_TRAFFIC_P0
#define MCP_REG_MCPR_IMC_SLAVE_CONTROL
#define BIGMAC2_REGISTER_TX_MAX_SIZE
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_1
#define NIG_REG_P1_TX_ARB_CREDIT_WEIGHT_1
#define BIGMAC_REGISTER_BMAC_CONTROL
#define MISC_REGISTERS_RESET_REG_2_XMAC_SOFT
#define PBF_REG_COS1_WEIGHT_P1
#define NIG_REG_P1_TX_ARB_CREDIT_UPPER_BOUND_1
#define PBF_REG_COS3_WEIGHT_P0
#define NIG_REG_P0_HWPFC_ENABLE
#define NIG_REG_P0_RX_COS4_PRIORITY_MASK
#define EMAC_RX_MODE_KEEP_MAC_CONTROL
#define UMAC_REG_COMMAND_CONFIG
#define NIG_REG_P1_RX_COS1_PRIORITY_MASK
#define MISC_REG_FOUR_PORT_PATH_SWAP_OVWR
#define EMAC_REG_RX_PFC_STATS_XON_SENT
#define MISC_REG_LCPLL_E40_PWRDWN
#define BIGMAC2_REGISTER_RX_CONTROL
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_5
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_6
#define NIG_REG_EGRESS_EMAC0_OUT_EN
#define MISC_REGISTERS_GPIO_OUTPUT_LOW
#define NIG_REG_P0_TX_ARB_CLIENT_CREDIT_MAP2_LSB
#define NIG_REG_P0_TX_ARB_CLIENT_IS_SUBJECT2WFQ
#define BIGMAC_REGISTER_BMAC_XGXS_CONTROL
#define EMAC_REG_EMAC_RX_MODE
#define EMAC_REG_RX_PFC_STATS_XON_RCVD
#define EMAC_MDIO_MODE_CLAUSE_45
#define PBF_REG_COS0_WEIGHT_P1
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_2
#define BIGMAC2_REGISTER_BMAC_CONTROL
#define UMAC_REG_EEE_WAKE_TIMER
#define PBF_REG_COS5_WEIGHT_P0
#define NIG_LLH1_XCM_MASK_REG_LLH1_XCM_MASK_BCN
#define NIG_REG_P0_MAC_OUT_EN
#define EMAC_MODE_PORT_GMII
#define MCP_REG_MCPR_GP_OUTPUTS
#define PBF_REG_COS1_UPPER_BOUND
#define MISC_REGISTERS_RESET_REG_2_RST_BMAC0
#define MISC_REGISTERS_RESET_REG_3_SET
#define NIG_REG_P1_TX_ARB_CREDIT_WEIGHT_3
#define EMAC_REG_RX_PFC_STATS_XOFF_SENT
#define PBF_REG_COS0_WEIGHT_P0
#define BIGMAC_REGISTER_RX_LSS_STATUS
#define NIG_REG_P1_RX_COS2_PRIORITY_MASK
#define MCP_REG_MCPR_GP_INPUTS
#define XMAC_CTRL_REG_TX_EN
#define UMAC_REG_UMAC_EEE_CTRL
#define EMAC_MODE_HALF_DUPLEX
#define NIG_REG_PPP_ENABLE_1
#define NIG_REG_EMAC0_STATUS_MISC_MI_INT
#define PBF_REG_COS0_WEIGHT
#define MISC_REG_CPMU_LP_FW_ENABLE_P0
#define NIG_REG_EMAC0_PAUSE_OUT_EN
#define BIGMAC_REGISTER_RX_CONTROL
#define MISC_REGISTERS_RESET_REG_2_CLEAR
#define EMAC_MODE_PORT_MII
#define MISC_REGISTERS_RESET_REG_2_XMAC
#define NIG_REG_P1_PKT_PRIORITY_TO_COS
#define NIG_REG_NIG_EMAC0_EN
#define NIG_REG_LLFC_HIGH_PRIORITY_CLASSES_1
#define PBF_REG_NUM_STRICT_ARB_SLOTS
#define NIG_REG_XCM0_OUT_EN
#define BIGMAC2_REGISTER_BMAC_XGXS_CONTROL
#define MISC_REG_FOUR_PORT_PORT_SWAP_OVWR
#define NIG_REG_XGXS_SERDES0_MODE_SEL
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_1
#define NIG_REG_P1_TX_ARB_CLIENT_CREDIT_MAP2_MSB
#define EMAC_REG_EMAC_RX_MTU_SIZE
#define BIGMAC_REGISTER_RX_LLFC_MSG_FLDS
#define MISC_REGISTERS_GPIO_INT_OUTPUT_CLR
#define PBF_REG_P0_PAUSE_ENABLE
#define EMAC_REG_RX_PFC_STATS_XOFF_SENT_COUNT
#define NIG_REG_PPP_ENABLE_0
#define UMAC_COMMAND_CONFIG_REG_RX_ENA
#define XMAC_CTRL_REG_LINE_LOCAL_LPBK
#define MCPR_IMC_COMMAND_IMC_STATUS_BITSHIFT
#define XMAC_REG_RX_LSS_CTRL
#define EMAC_MDIO_COMM_DATA
#define NIG_REG_SERDES0_STATUS_LINK_STATUS
#define EMAC_MDIO_COMM_COMMAND_READ_45
#define EMAC_MODE_25G_MODE
#define EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT
#define XMAC_PFC_CTRL_HI_REG_RX_PFC_EN
#define XMAC_REG_RX_MAX_SIZE
#define PBF_REG_ETS_ENABLED
#define AEU_INPUTS_ATTN_BITS_GPIO0_FUNCTION_0
#define NIG_REG_P0_TX_ARB_NUM_STRICT_ARB_SLOTS
#define MISC_REG_GEN_PURP_HWG
#define XMAC_PFC_CTRL_HI_REG_PFC_REFRESH_EN
#define MISC_REGISTERS_GPIO_3
#define XMAC_RX_LSS_CTRL_REG_LOCAL_FAULT_DISABLE
#define NIG_REG_XCM1_OUT_EN
#define UMAC_COMMAND_CONFIG_REG_PROMIS_EN
#define NIG_REG_P0_MAC_PAUSE_OUT_EN
#define MISC_REGISTERS_GPIO_LOW
#define NIG_REG_LLFC_OUT_EN_1
#define UMAC_COMMAND_CONFIG_REG_IGNORE_TX_PAUSE
#define MISC_REGISTERS_GPIO_2
#define MISC_REGISTERS_GPIO_INT_OUTPUT_SET
#define MISC_REGISTERS_RESET_REG_2_SET
#define EMAC_REG_RX_PFC_STATS_XOFF_RCVD
#define PBF_REG_COS0_UPPER_BOUND
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_2
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_7
#define EMAC_REG_RX_PFC_STATS_XON_SENT_COUNT
#define EMAC_REG_RX_PFC_STATS_XON_RCVD_COUNT
#define MISC_REG_FOUR_PORT_PATH_SWAP
#define MISC_REGISTERS_GPIO_HIGH
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_6
#define BIGMAC2_REGISTER_TX_PAUSE_CONTROL
#define PBF_REG_COS0_UPPER_BOUND_P0
#define NIG_REG_LLH0_XCM_MASK
#define EMAC_MDIO_COMM_COMMAND_READ_22
#define NIG_REG_P1_HWPFC_ENABLE
#define EMAC_TX_MODE_FLOW_EN
#define PBF_REG_HIGH_PRIORITY_COS_NUM
#define MISC_REG_XMAC_CORE_PORT_MODE
#define NIG_REG_LED_CONTROL_BLINK_TRAFFIC_P0
#define NIG_REG_PAUSE_ENABLE_1
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_5
#define XMAC_PFC_CTRL_HI_REG_TX_PFC_EN
#define NIG_REG_P1_TX_ARB_CREDIT_WEIGHT_4
#define BIGMAC_REGISTER_TX_PAUSE_THRESHOLD
#define BIGMAC2_REGISTER_RX_MAX_SIZE
#define NIG_REG_MASK_INTERRUPT_PORT0
#define MISC_REGISTERS_GPIO_OUTPUT_HIGH
#define MISC_REG_TWO_PORT_PATH_SWAP
#define BIGMAC_REGISTER_CNT_MAX_SIZE
#define NIG_REG_BMAC0_OUT_EN
#define NIG_REG_P1_TX_ARB_NUM_STRICT_ARB_SLOTS
#define NIG_REG_LATCH_BC_0
#define NIG_REG_P1_MAC_OUT_EN
#define NIG_REG_INGRESS_BMAC0_MEM
#define EMAC_RX_MODE_PROMISCUOUS
#define PBF_REG_COS2_WEIGHT_P1
#define XMAC_CTRL_REG_XLGMII_ALIGN_ENB
#define PBF_REG_ETS_ARB_CLIENT_IS_SUBJECT2WFQ_P1
#define NIG_REG_PORT_SWAP
#define XMAC_PFC_CTRL_HI_REG_PFC_STATS_EN
#define BIGMAC2_REGISTER_RX_LSS_STAT
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_0
#define NIG_REG_P1_TX_ARB_CREDIT_UPPER_BOUND_5
#define NIG_REG_PAUSE_ENABLE_0
#define NIG_REG_P0_RX_COS0_PRIORITY_MASK
#define NIG_REG_P0_RX_COS5_PRIORITY_MASK
#define NIG_REG_SERDES0_CTRL_MD_DEVAD
#define MCP_REG_MCPR_GP_OENABLE
#define MISC_REG_LCPLL_E40_RESETB_ANA
#define BIGMAC_REGISTER_RX_MAX_SIZE
#define XMAC_REG_CLEAR_RX_LSS_STATUS
#define EMAC_REG_EMAC_LED
#define NIG_REG_EGRESS_EMAC0_PORT
#define XMAC_REG_RX_LSS_STATUS
#define MISC_REGISTERS_RESET_REG_3_CLEAR
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_8
#define NIG_REG_XGXS0_CTRL_PHY_ADDR
#define UMAC_COMMAND_CONFIG_REG_HD_ENA
#define EMAC_REG_RX_PFC_PARAM_PRIORITY_EN_BITSHIFT
#define PBF_REG_ETS_ARB_CLIENT_CREDIT_MAP_P1
#define BIGMAC_REGISTER_TX_MAX_SIZE
#define EMAC_MDIO_COMM_COMMAND_WRITE_22
#define NIG_REG_LLFC_ENABLE_1
#define NIG_REG_P1_MAC_PAUSE_OUT_EN
#define UMAC_COMMAND_CONFIG_REG_SW_RESET
#define NIG_REG_XGXS0_CTRL_MD_ST
#define XMAC_CTRL_REG_RX_EN
#define EMAC_RX_MODE_KEEP_VLAN_TAG
#define MISC_REG_PORT4MODE_EN
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_8
#define NIG_REG_NIG_INGRESS_EMAC0_NO_CRC
#define NIG_REG_LLH0_BRB1_DRV_MASK_MF
#define NIG_REG_P1_TX_ARB_CREDIT_UPPER_BOUND_3
#define MCPR_IMC_COMMAND_TRANSFER_ADDRESS_BITSHIFT
#define NIG_REG_P1_TX_ARB_PRIORITY_CLIENT2_MSB
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_4
#define NIG_REG_P1_TX_ARB_CLIENT_CREDIT_MAP2_LSB
#define NIG_LLH0_XCM_MASK_REG_LLH0_XCM_MASK_BCN
#define EMAC_TX_MODE_EXT_PAUSE_EN
#define NIG_REG_EMAC0_IN_EN
#define NIG_REG_P1_TX_ARB_CLIENT_IS_STRICT
#define NIG_REG_XGXS_LANE_SEL_P0
#define BIGMAC2_REGISTER_PFC_CONTROL
#define EMAC_LED_OVERRIDE
#define NIG_REG_P1_TX_ARB_CREDIT_WEIGHT_2
#define PBF_REG_P0_ARB_THRSH
#define NIG_REG_P1_TX_ARB_CLIENT_IS_SUBJECT2WFQ
#define PBF_REG_ETS_ARB_NUM_STRICT_ARB_SLOTS_P0
#define XMAC_CLEAR_RX_LSS_STATUS_REG_CLEAR_LOCAL_FAULT_STATUS
#define BIGMAC2_REGISTER_TX_CONTROL
#define EMAC_REG_RX_PFC_PARAM_OPCODE_BITSHIFT
#define XMAC_PFC_CTRL_HI_REG_FORCE_PFC_XON
#define PBF_REG_ETS_ARB_CLIENT_IS_SUBJECT2WFQ_P0
#define PBF_REG_COS1_WEIGHT
#define NIG_REG_P0_MAC_IN_EN
#define MISC_REG_GPIO_EVENT_EN
#define XMAC_REG_PFC_CTRL_HI
#define NIG_REG_P0_TX_ARB_PRIORITY_CLIENT2_MSB
#define XMAC_REG_EEE_CTRL
#define EMAC_REG_RX_PFC_MODE_RX_EN
#define MISC_REG_WC0_RESET
#define MISC_REG_RESET_REG_2
#define EMAC_MDIO_STATUS_10MB
#define PBF_REG_ETS_ARB_CLIENT_CREDIT_MAP_P0
#define XMAC_REG_PFC_CTRL
#define NIG_REG_LLFC_EGRESS_SRC_ENABLE_0
#define BIGMAC2_REGISTER_TX_SOURCE_ADDR
#define MCP_REG_MCPR_IMC_DATAREG0
#define NIG_REG_STRAP_OVERRIDE
#define EMAC_MDIO_COMM_START_BUSY
#define EMAC_REG_EMAC_MAC_MATCH
#define NIG_REG_P1_TX_ARB_CREDIT_UPPER_BOUND_0
#define EMAC_RX_MTU_SIZE_JUMBO_ENA
#define NIG_REG_BRB0_PAUSE_IN_EN
#define MCPR_IMC_COMMAND_OPERATION_BITSHIFT
#define NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0
#define MCPR_IMC_COMMAND_ENABLE
#define EMAC_REG_RX_PFC_PARAM
#define MISC_REG_CPMU_LP_MASK_ENT_P0
#define EMAC_MDIO_MODE_CLOCK_CNT
#define NIG_REG_P0_TX_ARB_CLIENT_IS_STRICT
#define PBF_REG_ETS_ARB_CLIENT_IS_STRICT_P0
#define NIG_REG_SERDES0_CTRL_PHY_ADDR
#define BIGMAC_REGISTER_TX_SOURCE_ADDR
#define EMAC_REG_RX_PFC_MODE
#define NIG_REG_LLFC_LOW_PRIORITY_CLASSES_1
#define UMAC_COMMAND_CONFIG_REG_NO_LGTH_CHECK
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_4
#define NIG_REG_SERDES0_CTRL_MD_ST
#define NIG_REG_P0_RX_COS3_PRIORITY_MASK
#define MISC_REGISTERS_GPIO_0
#define NIG_REG_LLH0_BRB1_NOT_MCP
#define NIG_REG_P0_TX_ARB_PRIORITY_CLIENT2_LSB
#define NIG_REG_P0_TX_ARB_CREDIT_UPPER_BOUND_3
#define EMAC_MDIO_COMM_COMMAND_ADDRESS
#define MISC_REG_CHIP_NUM
#define BIGMAC_REGISTER_TX_CONTROL
#define MISC_REGISTERS_GPIO_PORT_SHIFT
#define EMAC_REG_EMAC_MDIO_COMM
#define EMAC_REG_RX_PFC_MODE_TX_EN
#define MISC_REG_CPMU_LP_MASK_EXT_P0
#define UMAC_REG_MAC_ADDR0
#define MISC_REG_XMAC_PHY_PORT_MODE
#define XMAC_PAUSE_CTRL_REG_TX_PAUSE_EN
#define XMAC_CLEAR_RX_LSS_STATUS_REG_CLEAR_REMOTE_FAULT_STATUS
#define UMAC_COMMAND_CONFIG_REG_PAD_EN
#define XMAC_PAUSE_CTRL_REG_RX_PAUSE_EN
#define NIG_REG_P0_TX_ARB_CREDIT_WEIGHT_0
#define PBF_REG_COS0_UPPER_BOUND_P1
#define NIG_REG_P1_TX_ARB_CREDIT_WEIGHT_5
#define XMAC_RX_LSS_CTRL_REG_REMOTE_FAULT_DISABLE
#define EMAC_LED_1000MB_OVERRIDE
#define EMAC_MDIO_COMM_COMMAND_WRITE_45
#define NIG_REG_P1_TX_ARB_CREDIT_UPPER_BOUND_4
#define MISC_REGISTERS_RESET_REG_2_UMAC0
#define NIG_REG_LED_10G_P0
#define PBF_REG_P0_CREDIT
#define NIG_REG_LLFC_ENABLE_0
#define NIG_REG_XGXS0_CTRL_MD_DEVAD
#define NIG_REG_LLH1_XCM_MASK
#define MISC_REG_PORT4MODE_EN_OVWR
#define EMAC_REG_RX_PFC_MODE_PRIORITIES
#define MISC_REGISTERS_RESET_REG_2_MSTAT0
#define PBF_REG_DISABLE_NEW_TASK_PROC_P0
#define NIG_REG_LLFC_EGRESS_SRC_ENABLE_1
#define PBF_REG_P0_INIT_CRD
#define PBF_REG_COS2_WEIGHT_P0
#define NIG_REG_P1_TX_ARB_CREDIT_WEIGHT_0
#define NIG_REG_P0_TX_ARB_CLIENT_CREDIT_MAP2_MSB
#define NIG_REG_P1_MAC_IN_EN
#define NIG_REG_P0_TX_ARB_CLIENT_CREDIT_MAP
#define NIG_REG_P1_TX_ARB_PRIORITY_CLIENT2_LSB
#define UMAC_UMAC_EEE_CTRL_REG_EEE_EN
#define XMAC_REG_PAUSE_CTRL
#define NIG_REG_INGRESS_BMAC1_MEM
#define NIG_REG_LED_CONTROL_BLINK_RATE_P0
#define PBF_REG_ETS_ARB_CLIENT_IS_STRICT_P1
#define UMAC_COMMAND_CONFIG_REG_TX_ENA
#define NIG_REG_LED_CONTROL_BLINK_RATE_ENA_P0
#define NIG_REG_P1_RX_COS0_PRIORITY_MASK
#define PBF_REG_ETS_ARB_PRIORITY_CLIENT_P1
#define UMAC_COMMAND_CONFIG_REG_PAUSE_IGNORE
#define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0
enum elink_cos_state state
struct elink_ets_bw_params bw_params
union elink_ets_cos_params::@13 params
struct elink_ets_sp_params sp_params
struct elink_ets_cos_params cos[ELINK_DCBX_MAX_NUM_COS]
uint8_t num_of_rx_cos_priority_mask
uint32_t pkt_priority_to_cos
uint32_t rx_cos_priority_mask[ELINK_DCBX_MAX_NUM_COS]
uint32_t llfc_high_priority_classes
uint32_t llfc_low_priority_classes
uint16_t req_flow_ctrl[ELINK_LINK_CONFIG_SIZE]
uint16_t req_line_speed[ELINK_LINK_CONFIG_SIZE]
uint32_t speed_cap_mask[ELINK_LINK_CONFIG_SIZE]
uint32_t multi_phy_config
uint16_t req_duplex[ELINK_LINK_CONFIG_SIZE]
uint32_t feature_config_flags
struct elink_phy phy[ELINK_MAX_PHYS]
uint16_t tx_preemphasis[4]
config_loopback_t config_loopback
uint16_t rx_preemphasis[4]
set_link_led_t set_link_led
read_status_t read_status
config_init_t config_init
phy_specific_func_t phy_specific_func
format_fw_ver_t format_fw_ver
uint8_t turn_to_run_wc_rt
uint8_t check_kr2_recovery_cnt