mv88e1512_driver.h
Go to the documentation of this file.
1 /**
2  * @file mv88e1512_driver.h
3  * @brief 88E1512 Gigabit Ethernet PHY driver
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneTCP Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.4.0
29  **/
30 
31 #ifndef _MV88E1512_DRIVER_H
32 #define _MV88E1512_DRIVER_H
33 
34 //Dependencies
35 #include "core/nic.h"
36 
37 //PHY address
38 #ifndef MV88E1512_PHY_ADDR
39  #define MV88E1512_PHY_ADDR 0
40 #elif (MV88E1512_PHY_ADDR < 0 || MV88E1512_PHY_ADDR > 31)
41  #error MV88E1512_PHY_ADDR parameter is not valid
42 #endif
43 
44 //MV88E1512 PHY registers (page 0)
45 #define MV88E1512_COPPER_CTRL 0x00
46 #define MV88E1512_COPPER_STAT 0x01
47 #define MV88E1512_COPPER_PHYID1 0x02
48 #define MV88E1512_COPPER_PHYID2 0x03
49 #define MV88E1512_COPPER_ANAR 0x04
50 #define MV88E1512_COPPER_ANLPAR 0x05
51 #define MV88E1512_COPPER_ANER 0x06
52 #define MV88E1512_COPPER_ANNPTR 0x07
53 #define MV88E1512_COPPER_ANLPNPR 0x08
54 #define MV88E1512_GBCR 0x09
55 #define MV88E1512_GBSR 0x0A
56 #define MV88E1512_GBESR 0x0F
57 #define MV88E1512_COPPER_CTRL1 0x10
58 #define MV88E1512_COPPER_STAT1 0x11
59 #define MV88E1512_COPPER_INT_EN 0x12
60 #define MV88E1512_COPPER_INT_STAT 0x13
61 #define MV88E1512_COPPER_CTRL2 0x14
62 #define MV88E1512_COPPER_RX_ERR_COUNTER 0x15
63 #define MV88E1512_PAGSR 0x16
64 #define MV88E1512_GISR 0x17
65 
66 //MV88E1512 PHY registers (page 1)
67 #define MV88E1512_FIBER_CTRL 0x00
68 #define MV88E1512_FIBER_STAT 0x01
69 #define MV88E1512_FIBER_PHYID1 0x02
70 #define MV88E1512_FIBER_PHYID2 0x03
71 #define MV88E1512_FIBER_ANAR 0x04
72 #define MV88E1512_FIBER_ANLPAR 0x05
73 #define MV88E1512_FIBER_ANER 0x06
74 #define MV88E1512_FIBER_ANNPTR 0x07
75 #define MV88E1512_FIBER_ANLPNPR 0x08
76 #define MV88E1512_EXTENDED_STATUS 0x0F
77 #define MV88E1512_FIBER_CTRL1 0x10
78 #define MV88E1512_FIBER_STAT1 0x11
79 #define MV88E1512_FIBER_INT_EN 0x12
80 #define MV88E1512_FIBER_INT_STAT 0x13
81 #define MV88E1512_PRBS_CTRL 0x17
82 #define MV88E1512_PRBS_ERR_COUNTER_LSB 0x18
83 #define MV88E1512_PRBS_ERR_COUNTER_MSB 0x19
84 #define MV88E1512_FIBER_CTRL2 0x1A
85 
86 //MV88E1512 PHY registers (page 2)
87 #define MV88E1512_MAC_CTRL1 0x10
88 #define MV88E1512_MAC_INT_EN 0x12
89 #define MV88E1512_MAC_INT_STAT 0x13
90 #define MV88E1512_MAC_CTRL2 0x15
91 #define MV88E1512_RGMII_OUT_IMP_CAL 0x18
92 
93 //MV88E1512 PHY registers (page 3)
94 #define MV88E1512_LED_FUNC_CTRL 0x10
95 #define MV88E1512_LED_POL_CTRL 0x11
96 #define MV88E1512_LED_TIMER_CTRL 0x12
97 
98 //MV88E1512 PHY registers (page 5)
99 #define MV88E1512_1000BT_PAIR_SKEW 0x14
100 #define MV88E1512_1000BT_PAIR_SWAP_POL 0x15
101 
102 //MV88E1512 PHY registers (page 6)
103 #define MV88E1512_COPPER_PKT_GEN 0x10
104 #define MV88E1512_COPPER_CRC_COUNTERS 0x11
105 #define MV88E1512_CHECKER_CTRL 0x12
106 #define MV88E1512_COPPER_PKT_GEN_IPG_CTRL 0x13
107 #define MV88E1512_LATE_COL_COUNTERS_1_2 0x17
108 #define MV88E1512_LATE_COL_COUNTERS_3_4 0x18
109 #define MV88E1512_LATE_COL_WIN_ADJ_LINK_DISCONNECT 0x19
110 #define MV88E1512_MISC_TEST 0x1A
111 #define MV88E1512_TEMP_SENSOR 0x1B
112 
113 //Copper Control register
114 #define MV88E1512_COPPER_CTRL_RESET 0x8000
115 #define MV88E1512_COPPER_CTRL_LOOPBACK 0x4000
116 #define MV88E1512_COPPER_CTRL_SPEED_SEL_LSB 0x2000
117 #define MV88E1512_COPPER_CTRL_AN_EN 0x1000
118 #define MV88E1512_COPPER_CTRL_POWER_DOWN 0x0800
119 #define MV88E1512_COPPER_CTRL_ISOLATE 0x0400
120 #define MV88E1512_COPPER_CTRL_RESTART_AN 0x0200
121 #define MV88E1512_COPPER_CTRL_DUPLEX_MODE 0x0100
122 #define MV88E1512_COPPER_CTRL_COL_TEST 0x0080
123 #define MV88E1512_COPPER_CTRL_SPEED_SEL_MSB 0x0040
124 
125 //Copper Status register
126 #define MV88E1512_COPPER_STAT_100BT4 0x8000
127 #define MV88E1512_COPPER_STAT_100BTX_FD 0x4000
128 #define MV88E1512_COPPER_STAT_100BTX_HD 0x2000
129 #define MV88E1512_COPPER_STAT_10BT_FD 0x1000
130 #define MV88E1512_COPPER_STAT_10BT_HD 0x0800
131 #define MV88E1512_COPPER_STAT_100BT2_FD 0x0400
132 #define MV88E1512_COPPER_STAT_100BT2_HD 0x0200
133 #define MV88E1512_COPPER_STAT_EXTENDED_STATUS 0x0100
134 #define MV88E1512_COPPER_STAT_MF_PREAMBLE_SUPPR 0x0040
135 #define MV88E1512_COPPER_STAT_AN_COMPLETE 0x0020
136 #define MV88E1512_COPPER_STAT_REMOTE_FAULT 0x0010
137 #define MV88E1512_COPPER_STAT_AN_CAPABLE 0x0008
138 #define MV88E1512_COPPER_STAT_LINK_STATUS 0x0004
139 #define MV88E1512_COPPER_STAT_JABBER_DETECT 0x0002
140 #define MV88E1512_COPPER_STAT_EXTENDED_CAPABLE 0x0001
141 
142 //PHY Identifier 1 register
143 #define MV88E1512_COPPER_PHYID1_OUI_MSB 0xFFFF
144 #define MV88E1512_COPPER_PHYID1_OUI_MSB_DEFAULT 0x0141
145 
146 //PHY Identifier 2 register
147 #define MV88E1512_COPPER_PHYID2_OUI_LSB 0xFC00
148 #define MV88E1512_COPPER_PHYID2_OUI_LSB_DEFAULT 0x0C00
149 #define MV88E1512_COPPER_PHYID2_MODEL_NUM 0x03F0
150 #define MV88E1512_COPPER_PHYID2_MODEL_NUM_DEFAULT 0x01D0
151 #define MV88E1512_COPPER_PHYID2_REVISION_NUM 0x000F
152 
153 //Copper Auto-Negotiation Advertisement register
154 #define MV88E1512_COPPER_ANAR_NEXT_PAGE 0x8000
155 #define MV88E1512_COPPER_ANAR_ACK 0x4000
156 #define MV88E1512_COPPER_ANAR_REMOTE_FAULT 0x2000
157 #define MV88E1512_COPPER_ANAR_ASYM_PAUSE 0x0800
158 #define MV88E1512_COPPER_ANAR_PAUSE 0x0400
159 #define MV88E1512_COPPER_ANAR_100BT4 0x0200
160 #define MV88E1512_COPPER_ANAR_100BTX_FD 0x0100
161 #define MV88E1512_COPPER_ANAR_100BTX_HD 0x0080
162 #define MV88E1512_COPPER_ANAR_10BT_FD 0x0040
163 #define MV88E1512_COPPER_ANAR_10BT_HD 0x0020
164 #define MV88E1512_COPPER_ANAR_SELECTOR 0x001F
165 #define MV88E1512_COPPER_ANAR_SELECTOR_DEFAULT 0x0001
166 
167 //Copper Link Partner Ability register
168 #define MV88E1512_COPPER_ANLPAR_NEXT_PAGE 0x8000
169 #define MV88E1512_COPPER_ANLPAR_ACK 0x4000
170 #define MV88E1512_COPPER_ANLPAR_REMOTE_FAULT 0x2000
171 #define MV88E1512_COPPER_ANLPAR_TECH_ABLE 0x1000
172 #define MV88E1512_COPPER_ANLPAR_ASYM_PAUSE 0x0800
173 #define MV88E1512_COPPER_ANLPAR_PAUSE 0x0400
174 #define MV88E1512_COPPER_ANLPAR_100BT4 0x0200
175 #define MV88E1512_COPPER_ANLPAR_100BTX_FD 0x0100
176 #define MV88E1512_COPPER_ANLPAR_100BTX_HD 0x0080
177 #define MV88E1512_COPPER_ANLPAR_10BT_FD 0x0040
178 #define MV88E1512_COPPER_ANLPAR_10BT_HD 0x0020
179 #define MV88E1512_COPPER_ANLPAR_SELECTOR 0x001F
180 #define MV88E1512_COPPER_ANLPAR_SELECTOR_DEFAULT 0x0001
181 
182 //Copper Auto-Negotiation Expansion register
183 #define MV88E1512_COPPER_ANER_PAR_DETECT_FAULT 0x0010
184 #define MV88E1512_COPPER_ANER_LP_NEXT_PAGE_ABLE 0x0008
185 #define MV88E1512_COPPER_ANER_NEXT_PAGE_ABLE 0x0004
186 #define MV88E1512_COPPER_ANER_PAGE_RECEIVED 0x0002
187 #define MV88E1512_COPPER_ANER_LP_AN_ABLE 0x0001
188 
189 //Copper Next Page Transmit register
190 #define MV88E1512_COPPER_ANNPTR_NEXT_PAGE 0x8000
191 #define MV88E1512_COPPER_ANNPTR_MSG_PAGE 0x2000
192 #define MV88E1512_COPPER_ANNPTR_ACK2 0x1000
193 #define MV88E1512_COPPER_ANNPTR_TOGGLE 0x0800
194 #define MV88E1512_COPPER_ANNPTR_MESSAGE 0x07FF
195 
196 //Copper Link Partner Next Page register
197 #define MV88E1512_COPPER_ANLPNPR_NEXT_PAGE 0x8000
198 #define MV88E1512_COPPER_ANLPNPR_ACK 0x4000
199 #define MV88E1512_COPPER_ANLPNPR_MSG_PAGE 0x2000
200 #define MV88E1512_COPPER_ANLPNPR_ACK2 0x1000
201 #define MV88E1512_COPPER_ANLPNPR_TOGGLE 0x0800
202 #define MV88E1512_COPPER_ANLPNPR_MESSAGE 0x07FF
203 
204 //1000BASE-T Control register
205 #define MV88E1512_GBCR_TEST_MODE 0xE000
206 #define MV88E1512_GBCR_MS_MAN_CONF_EN 0x1000
207 #define MV88E1512_GBCR_MS_MAN_CONF_VAL 0x0800
208 #define MV88E1512_GBCR_PORT_TYPE 0x0400
209 #define MV88E1512_GBCR_1000BT_FD 0x0200
210 #define MV88E1512_GBCR_1000BT_HD 0x0100
211 
212 //1000BASE-T Status register
213 #define MV88E1512_GBSR_MS_CONF_FAULT 0x8000
214 #define MV88E1512_GBSR_MS_CONF_RES 0x4000
215 #define MV88E1512_GBSR_LOCAL_RECEIVER_STATUS 0x2000
216 #define MV88E1512_GBSR_REMOTE_RECEIVER_STATUS 0x1000
217 #define MV88E1512_GBSR_LP_1000BT_FD 0x0800
218 #define MV88E1512_GBSR_LP_1000BT_HD 0x0400
219 #define MV88E1512_GBSR_IDLE_ERR_COUNT 0x00FF
220 
221 //Extended Status register
222 #define MV88E1512_GBESR_1000BX_FD 0x8000
223 #define MV88E1512_GBESR_1000BX_HD 0x4000
224 #define MV88E1512_GBESR_1000BT_FD 0x2000
225 #define MV88E1512_GBESR_1000BT_HD 0x1000
226 
227 //Copper Specific Control 1 register
228 #define MV88E1512_COPPER_CTRL1_LINK_PULSE_DIS 0x8000
229 #define MV88E1512_COPPER_CTRL1_FORCE_LINK_GOOD 0x0400
230 #define MV88E1512_COPPER_CTRL1_ENERGY_DETECT 0x0300
231 #define MV88E1512_COPPER_CTRL1_MDI_CROSSOVER_MODE 0x0060
232 #define MV88E1512_COPPER_CTRL1_MDI_CROSSOVER_MODE_MANUAL_MDI 0x0000
233 #define MV88E1512_COPPER_CTRL1_MDI_CROSSOVER_MODE_MANUAL_MDIX 0x0020
234 #define MV88E1512_COPPER_CTRL1_MDI_CROSSOVER_MODE_AUTO 0x0060
235 #define MV88E1512_COPPER_CTRL1_TX_DIS 0x0008
236 #define MV88E1512_COPPER_CTRL1_POWER_DOWN 0x0004
237 #define MV88E1512_COPPER_CTRL1_POLARITY_REVERSAL_DIS 0x0002
238 #define MV88E1512_COPPER_CTRL1_JABBER_DIS 0x0001
239 
240 //Copper Specific Status 1 register
241 #define MV88E1512_COPPER_STAT1_SPEED 0xC000
242 #define MV88E1512_COPPER_STAT1_SPEED_10MBPS 0x0000
243 #define MV88E1512_COPPER_STAT1_SPEED_100MBPS 0x4000
244 #define MV88E1512_COPPER_STAT1_SPEED_1000MBPS 0x8000
245 #define MV88E1512_COPPER_STAT1_DUPLEX 0x2000
246 #define MV88E1512_COPPER_STAT1_PAGE_RECEIVED 0x1000
247 #define MV88E1512_COPPER_STAT1_SPEED_DUPLEX_RESOLVED 0x0800
248 #define MV88E1512_COPPER_STAT1_LINK 0x0400
249 #define MV88E1512_COPPER_STAT1_TX_PAUSE_EN 0x0200
250 #define MV88E1512_COPPER_STAT1_RX_PAUSE_EN 0x0100
251 #define MV88E1512_COPPER_STAT1_MDI_CROSSOVER_STATUS 0x0040
252 #define MV88E1512_COPPER_STAT1_ENERGY_DETECT_STATUS 0x0010
253 #define MV88E1512_COPPER_STAT1_GLOBAL_LINK_STATUS 0x0008
254 #define MV88E1512_COPPER_STAT1_POLARITY 0x0002
255 #define MV88E1512_COPPER_STAT1_JABBER 0x0001
256 
257 //Copper Specific Interrupt Enable register
258 #define MV88E1512_COPPER_INT_EN_AN_ERROR 0x8000
259 #define MV88E1512_COPPER_INT_EN_SPEED_CHANGED 0x4000
260 #define MV88E1512_COPPER_INT_EN_DUPLEX_CHANGED 0x2000
261 #define MV88E1512_COPPER_INT_EN_PAGE_RECEIVED 0x1000
262 #define MV88E1512_COPPER_INT_EN_AN_COMPLETE 0x0800
263 #define MV88E1512_COPPER_INT_EN_LINK_STATUS_CHANGED 0x0400
264 #define MV88E1512_COPPER_INT_EN_SYMBOL_ERROR 0x0200
265 #define MV88E1512_COPPER_INT_EN_FALSE_CARRIER 0x0100
266 #define MV88E1512_COPPER_INT_EN_MDI_CROSSOVER_CHANGED 0x0040
267 #define MV88E1512_COPPER_INT_EN_ENERGY_DETECT 0x0010
268 #define MV88E1512_COPPER_INT_EN_FLP_COMPLETE 0x0008
269 #define MV88E1512_COPPER_INT_EN_POLARITY_CHANGED 0x0002
270 #define MV88E1512_COPPER_INT_EN_JABBER 0x0001
271 
272 //Copper Interrupt Status register
273 #define MV88E1512_COPPER_INT_STAT_AN_ERROR 0x8000
274 #define MV88E1512_COPPER_INT_STAT_SPEED_CHANGED 0x4000
275 #define MV88E1512_COPPER_INT_STAT_DUPLEX_CHANGED 0x2000
276 #define MV88E1512_COPPER_INT_STAT_PAGE_RECEIVED 0x1000
277 #define MV88E1512_COPPER_INT_STAT_AN_COMPLETE 0x0800
278 #define MV88E1512_COPPER_INT_STAT_LINK_STATUS_CHANGED 0x0400
279 #define MV88E1512_COPPER_INT_STAT_SYMBOL_ERROR 0x0200
280 #define MV88E1512_COPPER_INT_STAT_FALSE_CARRIER 0x0100
281 #define MV88E1512_COPPER_INT_STAT_MDI_CROSSOVER_CHANGED 0x0040
282 #define MV88E1512_COPPER_INT_STAT_ENERGY_DETECT 0x0010
283 #define MV88E1512_COPPER_INT_STAT_FLP_COMPLETE 0x0008
284 #define MV88E1512_COPPER_INT_STAT_POLARITY_CHANGED 0x0002
285 #define MV88E1512_COPPER_INT_STAT_JABBER 0x0001
286 
287 //Copper Specific Control 2 register
288 #define MV88E1512_COPPER_CTRL2_BREAK_LINK_ON_INSUF_IPG 0x0040
289 #define MV88E1512_COPPER_CTRL2_REVERSE_MDIPN3_TX_POL 0x0008
290 #define MV88E1512_COPPER_CTRL2_REVERSE_MDIPN2_TX_POL 0x0004
291 #define MV88E1512_COPPER_CTRL2_REVERSE_MDIPN1_TX_POL 0x0002
292 #define MV88E1512_COPPER_CTRL2_REVERSE_MDIPN0_TX_POL 0x0001
293 
294 //Page Address register
295 #define MV88E1512_PAGSR_PAGE_SEL 0x00FF
296 
297 //Global Interrupt Status register
298 #define MV88E1512_GISR_INTERRUPT 0x0001
299 
300 //Fiber Control register
301 #define MV88E1512_FIBER_CTRL_RESET 0x8000
302 #define MV88E1512_FIBER_CTRL_LOOPBACK 0x4000
303 #define MV88E1512_FIBER_CTRL_SPEED_SEL_LSB 0x2000
304 #define MV88E1512_FIBER_CTRL_AN_EN 0x1000
305 #define MV88E1512_FIBER_CTRL_POWER_DOWN 0x0800
306 #define MV88E1512_FIBER_CTRL_ISOLATE 0x0400
307 #define MV88E1512_FIBER_CTRL_RESTART_AN 0x0200
308 #define MV88E1512_FIBER_CTRL_DUPLEX_MODE 0x0100
309 #define MV88E1512_FIBER_CTRL_COL_TEST 0x0080
310 #define MV88E1512_FIBER_CTRL_SPEED_SEL_MSB 0x0040
311 
312 //Fiber Status register
313 #define MV88E1512_FIBER_STAT_100BT4 0x8000
314 #define MV88E1512_FIBER_STAT_100BTX_FD 0x4000
315 #define MV88E1512_FIBER_STAT_100BTX_HD 0x2000
316 #define MV88E1512_FIBER_STAT_10BT_FD 0x1000
317 #define MV88E1512_FIBER_STAT_10BT_HD 0x0800
318 #define MV88E1512_FIBER_STAT_100BT2_FD 0x0400
319 #define MV88E1512_FIBER_STAT_100BT2_HD 0x0200
320 #define MV88E1512_FIBER_STAT_EXTENDED_STATUS 0x0100
321 #define MV88E1512_FIBER_STAT_MF_PREAMBLE_SUPPR 0x0040
322 #define MV88E1512_FIBER_STAT_AN_COMPLETE 0x0020
323 #define MV88E1512_FIBER_STAT_REMOTE_FAULT 0x0010
324 #define MV88E1512_FIBER_STAT_AN_CAPABLE 0x0008
325 #define MV88E1512_FIBER_STAT_LINK_STATUS 0x0004
326 #define MV88E1512_FIBER_STAT_EXTENDED_CAPABLE 0x0001
327 
328 //PHY Identifier 1 register
329 #define MV88E1512_FIBER_PHYID1_OUI_MSB 0xFFFF
330 #define MV88E1512_FIBER_PHYID1_OUI_MSB_DEFAULT 0x0141
331 
332 //PHY Identifier 2 register
333 #define MV88E1512_FIBER_PHYID2_OUI_LSB 0xFC00
334 #define MV88E1512_FIBER_PHYID2_OUI_LSB_DEFAULT 0x0C00
335 #define MV88E1512_FIBER_PHYID2_MODEL_NUM 0x03F0
336 #define MV88E1512_FIBER_PHYID2_MODEL_NUM_DEFAULT 0x01D0
337 #define MV88E1512_FIBER_PHYID2_REVISION_NUM 0x000F
338 
339 //Fiber Auto-Negotiation Advertisement register
340 #define MV88E1512_FIBER_ANAR_NEXT_PAGE 0x8000
341 #define MV88E1512_FIBER_ANAR_REMOTE_FAULT 0x3000
342 #define MV88E1512_FIBER_ANAR_REMOTE_FAULT_NO_ERROR 0x0000
343 #define MV88E1512_FIBER_ANAR_REMOTE_FAULT_LINK_FAILURE 0x1000
344 #define MV88E1512_FIBER_ANAR_REMOTE_FAULT_OFFLINE 0x2000
345 #define MV88E1512_FIBER_ANAR_REMOTE_FAULT_AN_ERROR 0x3000
346 #define MV88E1512_FIBER_ANAR_PAUSE 0x0180
347 #define MV88E1512_FIBER_ANAR_1000BX_HD 0x0040
348 #define MV88E1512_FIBER_ANAR_1000BX_FD 0x0020
349 
350 //Fiber Link Partner Ability register
351 #define MV88E1512_FIBER_ANLPAR_NEXT_PAGE 0x8000
352 #define MV88E1512_FIBER_ANLPAR_ACK 0x4000
353 #define MV88E1512_FIBER_ANLPAR_REMOTE_FAULT 0x3000
354 #define MV88E1512_FIBER_ANLPAR_REMOTE_FAULT_NO_ERROR 0x0000
355 #define MV88E1512_FIBER_ANLPAR_REMOTE_FAULT_LINK_FAILURE 0x1000
356 #define MV88E1512_FIBER_ANLPAR_REMOTE_FAULT_OFFLINE 0x2000
357 #define MV88E1512_FIBER_ANLPAR_REMOTE_FAULT_AN_ERROR 0x3000
358 #define MV88E1512_FIBER_ANLPAR_ASYM_PAUSE 0x0180
359 #define MV88E1512_FIBER_ANLPAR_1000BX_HD 0x0040
360 #define MV88E1512_FIBER_ANLPAR_1000BX_FD 0x0020
361 
362 //Fiber Auto-Negotiation Expansion register
363 #define MV88E1512_FIBER_ANER_LP_NEXT_PAGE_ABLE 0x0008
364 #define MV88E1512_FIBER_ANER_NEXT_PAGE_ABLE 0x0004
365 #define MV88E1512_FIBER_ANER_PAGE_RECEIVED 0x0002
366 #define MV88E1512_FIBER_ANER_LP_AN_ABLE 0x0001
367 
368 //Fiber Next Page Transmit register
369 #define MV88E1512_FIBER_ANNPTR_NEXT_PAGE 0x8000
370 #define MV88E1512_FIBER_ANNPTR_MSG_PAGE 0x2000
371 #define MV88E1512_FIBER_ANNPTR_ACK2 0x1000
372 #define MV88E1512_FIBER_ANNPTR_TOGGLE 0x0800
373 #define MV88E1512_FIBER_ANNPTR_MESSAGE 0x07FF
374 
375 //Fiber Link Partner Next Page register
376 #define MV88E1512_FIBER_ANLPNPR_NEXT_PAGE 0x8000
377 #define MV88E1512_FIBER_ANLPNPR_ACK 0x4000
378 #define MV88E1512_FIBER_ANLPNPR_MSG_PAGE 0x2000
379 #define MV88E1512_FIBER_ANLPNPR_ACK2 0x1000
380 #define MV88E1512_FIBER_ANLPNPR_TOGGLE 0x0800
381 #define MV88E1512_FIBER_ANLPNPR_MESSAGE 0x07FF
382 
383 //Extended Status register
384 #define MV88E1512_EXTENDED_STATUS_1000BX_FD 0x8000
385 #define MV88E1512_EXTENDED_STATUS_1000BX_HD 0x4000
386 #define MV88E1512_EXTENDED_STATUS_1000BT_FD 0x2000
387 #define MV88E1512_EXTENDED_STATUS_1000BT_HD 0x1000
388 
389 //Fiber Specific Control 1 register
390 #define MV88E1512_FIBER_CTRL1_BLOCK_CARRIER_EXTENSION 0x2000
391 #define MV88E1512_FIBER_CTRL1_ASSERT_CRS_TX 0x0800
392 #define MV88E1512_FIBER_CTRL1_FORCE_LINK_GOOD 0x0400
393 #define MV88E1512_FIBER_CTRL1_SERDES_LOOPBACK_TYPE 0x0100
394 #define MV88E1512_FIBER_CTRL1_MARVELL_REMOTE_FAULT_IND 0x0020
395 #define MV88E1512_FIBER_CTRL1_IEEE_REMOTE_FAULT_IND 0x0010
396 #define MV88E1512_FIBER_CTRL1_INT_POLARITY 0x0004
397 #define MV88E1512_FIBER_CTRL1_MODE 0x0003
398 
399 //Fiber Specific Status register
400 #define MV88E1512_FIBER_STAT1_SPEED 0xC000
401 #define MV88E1512_FIBER_STAT1_SPEED_10MBPS 0x0000
402 #define MV88E1512_FIBER_STAT1_SPEED_100MBPS 0x4000
403 #define MV88E1512_FIBER_STAT1_SPEED_1000MBPS 0x8000
404 #define MV88E1512_FIBER_STAT1_DUPLEX 0x2000
405 #define MV88E1512_FIBER_STAT1_PAGE_RECEIVED 0x1000
406 #define MV88E1512_FIBER_STAT1_SPEED_DUPLEX_RESOLVED 0x0800
407 #define MV88E1512_FIBER_STAT1_LINK 0x0400
408 #define MV88E1512_FIBER_STAT1_REMOTE_FAULT_RECEIVED 0x00C0
409 #define MV88E1512_FIBER_STAT1_SYNC_STATUS 0x0020
410 #define MV88E1512_FIBER_STAT1_ENERGY_DETECT_STATUS 0x0010
411 #define MV88E1512_FIBER_STAT1_TX_PAUSE_EN 0x0008
412 #define MV88E1512_FIBER_STAT1_RX_PAUSE_EN 0x0004
413 
414 //Copper Specific Interrupt Enable register
415 #define MV88E1512_FIBER_INT_EN_SPEED_CHANGED 0x4000
416 #define MV88E1512_FIBER_INT_EN_DUPLEX_CHANGED 0x2000
417 #define MV88E1512_FIBER_INT_EN_PAGE_RECEIVED 0x1000
418 #define MV88E1512_FIBER_INT_EN_AN_COMPLETE 0x0800
419 #define MV88E1512_FIBER_INT_EN_LINK_STATUS_CHANGED 0x0400
420 #define MV88E1512_FIBER_INT_EN_SYMBOL_ERROR 0x0200
421 #define MV88E1512_FIBER_INT_EN_FALSE_CARRIER 0x0100
422 #define MV88E1512_FIBER_INT_EN_FIFO_OVER_UNDERFLOW 0x0080
423 #define MV88E1512_FIBER_INT_EN_REMOTE_FAULT_RECEIVE 0x0020
424 #define MV88E1512_FIBER_INT_EN_ENERGY_DETECT 0x0010
425 
426 //Copper Interrupt Status register
427 #define MV88E1512_FIBER_INT_STAT_SPEED_CHANGED 0x4000
428 #define MV88E1512_FIBER_INT_STAT_DUPLEX_CHANGED 0x2000
429 #define MV88E1512_FIBER_INT_STAT_PAGE_RECEIVED 0x1000
430 #define MV88E1512_FIBER_INT_STAT_AN_COMPLETE 0x0800
431 #define MV88E1512_FIBER_INT_STAT_LINK_STATUS_CHANGED 0x0400
432 #define MV88E1512_FIBER_INT_STAT_SYMBOL_ERROR 0x0200
433 #define MV88E1512_FIBER_INT_STAT_FALSE_CARRIER 0x0100
434 #define MV88E1512_FIBER_INT_STAT_FIFO_OVER_UNDERFLOW 0x0080
435 #define MV88E1512_FIBER_INT_STAT_REMOTE_FAULT_RECEIVE 0x0020
436 #define MV88E1512_FIBER_INT_STAT_ENERGY_DETECT 0x0010
437 
438 //PRBS Control register
439 #define MV88E1512_PRBS_CTRL_INVERT_CHECK_POL 0x0080
440 #define MV88E1512_PRBS_CTRL_INVERT_GEN_POL 0x0040
441 #define MV88E1512_PRBS_CTRL_PRBS_LOCK 0x0020
442 #define MV88E1512_PRBS_CTRL_CLEAR_COUNTER 0x0010
443 #define MV88E1512_PRBS_CTRL_PATTERN_SEL 0x000C
444 #define MV88E1512_PRBS_CTRL_PRBS_CHECK_EN 0x0002
445 #define MV88E1512_PRBS_CTRL_PRBS_GEN_EN 0x0001
446 
447 //Fiber Specific Control 2 register
448 #define MV88E1512_FIBER_CTRL2_FORCE_INT 0x8000
449 #define MV88E1512_FIBER_CTRL2_1000BX_NOISE_FILT 0x4000
450 #define MV88E1512_FIBER_CTRL2_FEFI_EN 0x0200
451 #define MV88E1512_FIBER_CTRL2_SERIAL_IF_AN_BYPASS_EN 0x0040
452 #define MV88E1512_FIBER_CTRL2_SERIAL_IF_AN_BYPASS_STATUS 0x0020
453 #define MV88E1512_FIBER_CTRL2_FIBER_TX_DIS 0x0008
454 #define MV88E1512_FIBER_CTRL2_SGMII_FIBER_OUT_AMPL 0x0007
455 
456 //MAC Specific Control 1 register
457 #define MV88E1512_MAC_CTRL1_PASS_ODD_NIBBLE_PREAMBLES 0x0040
458 #define MV88E1512_MAC_CTRL1_RGMII_IF_POWER_DOWN 0x0008
459 
460 //MAC Specific Interrupt Enable register
461 #define MV88E1512_MAC_INT_EN_FIFO_OVER_UNDERFLOW 0x0080
462 #define MV88E1512_MAC_INT_EN_FIFO_IDLE_INSERTED 0x0008
463 #define MV88E1512_MAC_INT_EN_FIFO_IDLE_DELETED 0x0004
464 
465 //MAC Specific Status register
466 #define MV88E1512_MAC_INT_STAT_FIFO_OVER_UNDERFLOW 0x0080
467 #define MV88E1512_MAC_INT_STAT_FIFO_IDLE_INSERTED 0x0008
468 #define MV88E1512_MAC_INT_STAT_FIFO_IDLE_DELETED 0x0004
469 
470 //MAC Specific Control 2 register
471 #define MV88E1512_MAC_CTRL2_COPPER_LINE_LOOPBACK 0x4000
472 #define MV88E1512_MAC_CTRL2_DEFAULT_MAC_IF_SPEED_LSB 0x2000
473 #define MV88E1512_MAC_CTRL2_DEFAULT_MAC_IF_SPEED_MSB 0x0040
474 #define MV88E1512_MAC_CTRL2_RGMII_RX_TIMING_CTRL 0x0020
475 #define MV88E1512_MAC_CTRL2_RGMII_TX_TIMING_CTRL 0x0010
476 #define MV88E1512_MAC_CTRL2_BLOCK_CARRIER_EXTENSION 0x0008
477 
478 //RGMII Output Impedance Calibration Override register
479 #define MV88E1512_RGMII_OUT_IMP_CAL_VDDO_LEVEL 0x2000
480 #define MV88E1512_RGMII_OUT_IMP_CAL_1V8_VDDO_USED 0x1000
481 
482 //LED[2:0] Function Control register
483 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL 0x0F00
484 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_LINK 0x0000
485 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_LINK_ACT 0x0100
486 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_DUPLEX_COL 0x0200
487 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_ACT 0x0300
488 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_ACT_BLINK 0x0400
489 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_TX 0x0500
490 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_SPEED_10_1000 0x0600
491 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_SPEED_10 0x0700
492 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_FORCE_OFF 0x0800
493 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_FORCE_ON 0x0900
494 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_FORCE_HIZ 0x0A00
495 #define MV88E1512_LED_FUNC_CTRL_LED2_CTRL_FORCE_BLINK 0x0B00
496 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL 0x00F0
497 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_LINK 0x0000
498 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_LINK_ACT 0x0010
499 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_DUPLEX_COL 0x0020
500 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_ACT 0x0030
501 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_ACT_BLINK 0x0040
502 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_TX 0x0050
503 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_SPEED_10_1000 0x0060
504 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_SPEED_10 0x0070
505 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_FORCE_OFF 0x0080
506 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_FORCE_ON 0x0090
507 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_FORCE_HIZ 0x00A0
508 #define MV88E1512_LED_FUNC_CTRL_LED1_CTRL_FORCE_BLINK 0x00B0
509 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL 0x000F
510 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_LINK 0x0000
511 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_LINK_ACT 0x0001
512 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_DUPLEX_COL 0x0002
513 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_ACT 0x0003
514 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_ACT_BLINK 0x0004
515 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_TX 0x0005
516 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_SPEED_10_1000 0x0006
517 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_SPEED_10 0x0007
518 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_FORCE_OFF 0x0008
519 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_FORCE_ON 0x0009
520 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_FORCE_HIZ 0x000A
521 #define MV88E1512_LED_FUNC_CTRL_LED0_CTRL_FORCE_BLINK 0x000B
522 
523 //LED[2:0] Polarity Control register
524 #define MV88E1512_LED_POL_CTRL_LED1_MIX_PERCENT 0xF000
525 #define MV88E1512_LED_POL_CTRL_LED0_MIX_PERCENT 0x0F00
526 #define MV88E1512_LED_POL_CTRL_LED2_POL 0x0030
527 #define MV88E1512_LED_POL_CTRL_LED2_POL_ON_LOW_OFF_HIGH 0x0000
528 #define MV88E1512_LED_POL_CTRL_LED2_POL_ON_HIGH_OFF_LOW 0x0010
529 #define MV88E1512_LED_POL_CTRL_LED2_POL_ON_LOW_OFF_TRISTATE 0x0020
530 #define MV88E1512_LED_POL_CTRL_LED2_POL_ON_HIGH_OFF_TRISTATE 0x0030
531 #define MV88E1512_LED_POL_CTRL_LED1_POL 0x000C
532 #define MV88E1512_LED_POL_CTRL_LED1_POL_ON_LOW_OFF_HIGH 0x0000
533 #define MV88E1512_LED_POL_CTRL_LED1_POL_ON_HIGH_OFF_LOW 0x0004
534 #define MV88E1512_LED_POL_CTRL_LED1_POL_ON_LOW_OFF_TRISTATE 0x0008
535 #define MV88E1512_LED_POL_CTRL_LED1_POL_ON_HIGH_OFF_TRISTATE 0x000C
536 #define MV88E1512_LED_POL_CTRL_LED0_POL 0x0003
537 #define MV88E1512_LED_POL_CTRL_LED0_POL_ON_LOW_OFF_HIGH 0x0000
538 #define MV88E1512_LED_POL_CTRL_LED0_POL_ON_HIGH_OFF_LOW 0x0001
539 #define MV88E1512_LED_POL_CTRL_LED0_POL_ON_LOW_OFF_TRISTATE 0x0002
540 #define MV88E1512_LED_POL_CTRL_LED0_POL_ON_HIGH_OFF_TRISTATE 0x0003
541 
542 //LED Timer Control register
543 #define MV88E1512_LED_TIMER_CTRL_FORCE_INT 0x8000
544 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH 0x7000
545 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_NO 0x0000
546 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_21MS_TO_42MS 0x1000
547 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_42MS_TO_84MS 0x2000
548 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_84MS_TO_170MS 0x3000
549 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_170MS_TO_340MS 0x4000
550 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_340MS_TO_670MS 0x5000
551 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_670MS_TO_1_3S 0x6000
552 #define MV88E1512_LED_TIMER_CTRL_PULSE_STRETCH_1_3S_TO_2_7S 0x7000
553 #define MV88E1512_LED_TIMER_CTRL_INT_POL 0x0800
554 #define MV88E1512_LED_TIMER_CTRL_BLINK_RATE 0x0700
555 #define MV88E1512_LED_TIMER_CTRL_BLINK_RATE_42MS 0x0000
556 #define MV88E1512_LED_TIMER_CTRL_BLINK_RATE_84MS 0x0100
557 #define MV88E1512_LED_TIMER_CTRL_BLINK_RATE_170MS 0x0200
558 #define MV88E1512_LED_TIMER_CTRL_BLINK_RATE_340MS 0x0300
559 #define MV88E1512_LED_TIMER_CTRL_BLINK_RATE_670MS 0x0400
560 #define MV88E1512_LED_TIMER_CTRL_INT_EN 0x0080
561 #define MV88E1512_LED_TIMER_CTRL_SPEED_OFF_PULSE 0x000C
562 #define MV88E1512_LED_TIMER_CTRL_SPEED_OFF_PULSE_84MS 0x0000
563 #define MV88E1512_LED_TIMER_CTRL_SPEED_OFF_PULSE_170MS 0x0004
564 #define MV88E1512_LED_TIMER_CTRL_SPEED_OFF_PULSE_340MS 0x0008
565 #define MV88E1512_LED_TIMER_CTRL_SPEED_OFF_PULSE_670MS 0x000C
566 #define MV88E1512_LED_TIMER_CTRL_SPEED_ON_PULSE 0x0003
567 #define MV88E1512_LED_TIMER_CTRL_SPEED_ON_PULSE_84MS 0x0000
568 #define MV88E1512_LED_TIMER_CTRL_SPEED_ON_PULSE_170MS 0x0001
569 #define MV88E1512_LED_TIMER_CTRL_SPEED_ON_PULSE_340MS 0x0002
570 #define MV88E1512_LED_TIMER_CTRL_SPEED_ON_PULSE_670MS 0x0003
571 
572 //1000BASE-T Pair Skew register
573 #define MV88E1512_1000BT_PAIR_SKEW_PAIR_7_8_MDI3 0xF000
574 #define MV88E1512_1000BT_PAIR_SKEW_PAIR_4_5_MDI2 0x0F00
575 #define MV88E1512_1000BT_PAIR_SKEW_PAIR_3_6_MDI1 0x00F0
576 #define MV88E1512_1000BT_PAIR_SKEW_PAIR_1_2_MDI0 0x000F
577 
578 //1000BASE-T Pair Swap and Polarity register
579 #define MV88E1512_1000BT_PAIR_SWAP_POL_REG_20_5_21_5_VALID 0x0040
580 #define MV88E1512_1000BT_PAIR_SWAP_POL_C_D_CROSSOVER 0x0020
581 #define MV88E1512_1000BT_PAIR_SWAP_POL_A_B_CROSSOVER 0x0010
582 #define MV88E1512_1000BT_PAIR_SWAP_POL_PAIR_7_8_POL 0x0008
583 #define MV88E1512_1000BT_PAIR_SWAP_POL_PAIR_4_5_POL 0x0004
584 #define MV88E1512_1000BT_PAIR_SWAP_POL_PAIR_3_6_POL 0x0002
585 #define MV88E1512_1000BT_PAIR_SWAP_POL_PAIR_1_2_POL 0x0001
586 
587 //C++ guard
588 #ifdef __cplusplus
589 extern "C" {
590 #endif
591 
592 //88E1512 Ethernet PHY driver
593 extern const PhyDriver mv88e1512PhyDriver;
594 
595 //88E1512 related functions
597 void mv88e1512InitHook(NetInterface *interface);
598 
599 void mv88e1512Tick(NetInterface *interface);
600 
601 void mv88e1512EnableIrq(NetInterface *interface);
602 void mv88e1512DisableIrq(NetInterface *interface);
603 
604 void mv88e1512EventHandler(NetInterface *interface);
605 
606 void mv88e1512WritePhyReg(NetInterface *interface, uint8_t address,
607  uint16_t data);
608 
609 uint16_t mv88e1512ReadPhyReg(NetInterface *interface, uint8_t address);
610 
611 void mv88e1512DumpPhyReg(NetInterface *interface);
612 
613 //C++ guard
614 #ifdef __cplusplus
615 }
616 #endif
617 
618 #endif
error_t
Error codes.
Definition: error.h:43
uint8_t data[]
Definition: ethernet.h:222
Ipv6Addr address[]
Definition: ipv6.h:316
void mv88e1512EnableIrq(NetInterface *interface)
Enable interrupts.
uint16_t mv88e1512ReadPhyReg(NetInterface *interface, uint8_t address)
Read PHY register.
void mv88e1512EventHandler(NetInterface *interface)
88E1512 event handler
void mv88e1512DumpPhyReg(NetInterface *interface)
Dump PHY registers for debugging purpose.
void mv88e1512InitHook(NetInterface *interface)
88E1512 custom configuration
const PhyDriver mv88e1512PhyDriver
88E1512 Ethernet PHY driver
void mv88e1512Tick(NetInterface *interface)
88E1512 timer handler
void mv88e1512WritePhyReg(NetInterface *interface, uint8_t address, uint16_t data)
Write PHY register.
error_t mv88e1512Init(NetInterface *interface)
88E1512 PHY transceiver initialization
void mv88e1512DisableIrq(NetInterface *interface)
Disable interrupts.
#define NetInterface
Definition: net.h:36
Network interface controller abstraction layer.
Ethernet PHY driver.
Definition: nic.h:308