mv88e1112_driver.h
Go to the documentation of this file.
1 /**
2  * @file mv88e1112_driver.h
3  * @brief 88E1112 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.4
29  **/
30 
31 #ifndef _MV88E1112_DRIVER_H
32 #define _MV88E1112_DRIVER_H
33 
34 //Dependencies
35 #include "core/nic.h"
36 
37 //PHY address
38 #ifndef MV88E1112_PHY_ADDR
39  #define MV88E1112_PHY_ADDR 0
40 #elif (MV88E1112_PHY_ADDR < 0 || MV88E1112_PHY_ADDR > 31)
41  #error MV88E1112_PHY_ADDR parameter is not valid
42 #endif
43 
44 //MV88E1112 PHY registers (page 0)
45 #define MV88E1112_COPPER_CTRL 0x00
46 #define MV88E1112_COPPER_STAT 0x01
47 #define MV88E1112_COPPER_PHYID1 0x02
48 #define MV88E1112_COPPER_PHYID2 0x03
49 #define MV88E1112_COPPER_ANAR 0x04
50 #define MV88E1112_COPPER_ANLPAR 0x05
51 #define MV88E1112_COPPER_ANER 0x06
52 #define MV88E1112_COPPER_ANNPTR 0x07
53 #define MV88E1112_COPPER_ANLPNPR 0x08
54 #define MV88E1112_GBCR 0x09
55 #define MV88E1112_GBSR 0x0A
56 #define MV88E1112_GBESR 0x0F
57 #define MV88E1112_COPPER_CTRL1 0x10
58 #define MV88E1112_COPPER_STAT1 0x11
59 #define MV88E1112_COPPER_INT_EN 0x12
60 #define MV88E1112_COPPER_STAT2 0x13
61 #define MV88E1112_COPPER_RX_ERR_COUNTER 0x15
62 #define MV88E1112_PAGE_ADDR 0x16
63 #define MV88E1112_COPPER_CTRL2 0x1A
64 
65 //MV88E1112 PHY registers (page 1)
66 #define MV88E1112_FIBER_CTRL 0x00
67 #define MV88E1112_FIBER_STAT 0x01
68 #define MV88E1112_FIBER_ANAR 0x04
69 #define MV88E1112_FIBER_ANLPAR 0x05
70 #define MV88E1112_FIBER_ANER 0x06
71 #define MV88E1112_FIBER_ANNPTR 0x07
72 #define MV88E1112_FIBER_ANLPNPR 0x08
73 #define MV88E1112_FIBER_CTRL1 0x10
74 #define MV88E1112_FIBER_STAT1 0x11
75 #define MV88E1112_FIBER_INT_EN 0x12
76 #define MV88E1112_FIBER_STAT2 0x13
77 #define MV88E1112_FIBER_CTRL2 0x1A
78 
79 //MV88E1112 PHY registers (page 2)
80 #define MV88E1112_MAC_CTRL 0x00
81 #define MV88E1112_MAC_CTRL1 0x10
82 #define MV88E1112_MAC_STAT1 0x11
83 #define MV88E1112_MAC_INT_EN 0x12
84 #define MV88E1112_MAC_STAT2 0x13
85 #define MV88E1112_MAC_CTRL2 0x1A
86 
87 //MV88E1112 PHY registers (page 3)
88 #define MV88E1112_LED_FUNC_CTRL 0x10
89 #define MV88E1112_LED_POL_CTRL 0x11
90 #define MV88E1112_LED_TIMER_CTRL 0x12
91 
92 //MV88E1112 PHY registers (page 4)
93 #define MV88E1112_NVM_ADDR 0x10
94 #define MV88E1112_NVM_RD_DATA_STAT 0x11
95 #define MV88E1112_NVM_WR_DATA_CTRL 0x12
96 #define MV88E1112_RAM_DATA 0x13
97 #define MV88E1112_RAM_ADDR 0x14
98 
99 //MV88E1112 PHY registers (page 5)
100 #define MV88E1112_MDI0_VCT_STAT 0x10
101 #define MV88E1112_MDI1_VCT_STAT 0x11
102 #define MV88E1112_MDI2_VCT_STAT 0x12
103 #define MV88E1112_MDI3_VCT_STAT 0x13
104 #define MV88E1112_1000BT_PAIR_SKEW 0x14
105 #define MV88E1112_1000BT_PAIR_SWAP_POL 0x15
106 #define MV88E1112_VCT_DSP_DIST 0x1A
107 
108 //MV88E1112 PHY registers (page 6)
109 #define MV88E1112_PKT_GEN 0x10
110 #define MV88E1112_CRC_COUNTERS 0x11
111 
112 //Copper Control register
113 #define MV88E1112_COPPER_CTRL_RESET 0x8000
114 #define MV88E1112_COPPER_CTRL_LOOPBACK 0x4000
115 #define MV88E1112_COPPER_CTRL_SPEED_SEL_LSB 0x2000
116 #define MV88E1112_COPPER_CTRL_AN_EN 0x1000
117 #define MV88E1112_COPPER_CTRL_POWER_DOWN 0x0800
118 #define MV88E1112_COPPER_CTRL_ISOLATE 0x0400
119 #define MV88E1112_COPPER_CTRL_RESTART_AN 0x0200
120 #define MV88E1112_COPPER_CTRL_DUPLEX_MODE 0x0100
121 #define MV88E1112_COPPER_CTRL_COL_TEST 0x0080
122 #define MV88E1112_COPPER_CTRL_SPEED_SEL_MSB 0x0040
123 
124 //Copper Status register
125 #define MV88E1112_COPPER_STAT_100BT4 0x8000
126 #define MV88E1112_COPPER_STAT_100BTX_FD 0x4000
127 #define MV88E1112_COPPER_STAT_100BTX_HD 0x2000
128 #define MV88E1112_COPPER_STAT_10BT_FD 0x1000
129 #define MV88E1112_COPPER_STAT_10BT_HD 0x0800
130 #define MV88E1112_COPPER_STAT_100BT2_FD 0x0400
131 #define MV88E1112_COPPER_STAT_100BT2_HD 0x0200
132 #define MV88E1112_COPPER_STAT_EXTENDED_STATUS 0x0100
133 #define MV88E1112_COPPER_STAT_MF_PREAMBLE_SUPPR 0x0040
134 #define MV88E1112_COPPER_STAT_AN_COMPLETE 0x0020
135 #define MV88E1112_COPPER_STAT_REMOTE_FAULT 0x0010
136 #define MV88E1112_COPPER_STAT_AN_CAPABLE 0x0008
137 #define MV88E1112_COPPER_STAT_LINK_STATUS 0x0004
138 #define MV88E1112_COPPER_STAT_JABBER_DETECT 0x0002
139 #define MV88E1112_COPPER_STAT_EXTENDED_CAPABLE 0x0001
140 
141 //PHY Identifier 1 register
142 #define MV88E1112_COPPER_PHYID1_OUI_MSB 0xFFFF
143 #define MV88E1112_COPPER_PHYID1_OUI_MSB_DEFAULT 0x0141
144 
145 //PHY Identifier 2 register
146 #define MV88E1112_COPPER_PHYID2_OUI_LSB 0xFC00
147 #define MV88E1112_COPPER_PHYID2_OUI_LSB_DEFAULT 0x0C00
148 #define MV88E1112_COPPER_PHYID2_MODEL_NUM 0x03F0
149 #define MV88E1112_COPPER_PHYID2_MODEL_NUM_DEFAULT 0x0090
150 #define MV88E1112_COPPER_PHYID2_REVISION_NUM 0x000F
151 
152 //Copper Auto-Negotiation Advertisement register
153 #define MV88E1112_COPPER_ANAR_NEXT_PAGE 0x8000
154 #define MV88E1112_COPPER_ANAR_ACK 0x4000
155 #define MV88E1112_COPPER_ANAR_REMOTE_FAULT 0x2000
156 #define MV88E1112_COPPER_ANAR_ASYM_PAUSE 0x0800
157 #define MV88E1112_COPPER_ANAR_PAUSE 0x0400
158 #define MV88E1112_COPPER_ANAR_100BT4 0x0200
159 #define MV88E1112_COPPER_ANAR_100BTX_FD 0x0100
160 #define MV88E1112_COPPER_ANAR_100BTX_HD 0x0080
161 #define MV88E1112_COPPER_ANAR_10BT_FD 0x0040
162 #define MV88E1112_COPPER_ANAR_10BT_HD 0x0020
163 #define MV88E1112_COPPER_ANAR_SELECTOR 0x001F
164 #define MV88E1112_COPPER_ANAR_SELECTOR_DEFAULT 0x0001
165 
166 //Copper Link Partner Ability register
167 #define MV88E1112_COPPER_ANLPAR_NEXT_PAGE 0x8000
168 #define MV88E1112_COPPER_ANLPAR_ACK 0x4000
169 #define MV88E1112_COPPER_ANLPAR_REMOTE_FAULT 0x2000
170 #define MV88E1112_COPPER_ANLPAR_TECH_ABLE 0x1000
171 #define MV88E1112_COPPER_ANLPAR_ASYM_PAUSE 0x0800
172 #define MV88E1112_COPPER_ANLPAR_PAUSE 0x0400
173 #define MV88E1112_COPPER_ANLPAR_100BT4 0x0200
174 #define MV88E1112_COPPER_ANLPAR_100BTX_FD 0x0100
175 #define MV88E1112_COPPER_ANLPAR_100BTX_HD 0x0080
176 #define MV88E1112_COPPER_ANLPAR_10BT_FD 0x0040
177 #define MV88E1112_COPPER_ANLPAR_10BT_HD 0x0020
178 #define MV88E1112_COPPER_ANLPAR_SELECTOR 0x001F
179 #define MV88E1112_COPPER_ANLPAR_SELECTOR_DEFAULT 0x0001
180 
181 //Copper Auto-Negotiation Expansion register
182 #define MV88E1112_COPPER_ANER_PAR_DETECT_FAULT 0x0010
183 #define MV88E1112_COPPER_ANER_LP_NEXT_PAGE_ABLE 0x0008
184 #define MV88E1112_COPPER_ANER_NEXT_PAGE_ABLE 0x0004
185 #define MV88E1112_COPPER_ANER_PAGE_RECEIVED 0x0002
186 #define MV88E1112_COPPER_ANER_LP_AN_ABLE 0x0001
187 
188 //Copper Next Page Transmit register
189 #define MV88E1112_COPPER_ANNPTR_NEXT_PAGE 0x8000
190 #define MV88E1112_COPPER_ANNPTR_MSG_PAGE 0x2000
191 #define MV88E1112_COPPER_ANNPTR_ACK2 0x1000
192 #define MV88E1112_COPPER_ANNPTR_TOGGLE 0x0800
193 #define MV88E1112_COPPER_ANNPTR_MESSAGE 0x07FF
194 
195 //Copper Link Partner Next Page register
196 #define MV88E1112_COPPER_ANLPNPR_NEXT_PAGE 0x8000
197 #define MV88E1112_COPPER_ANLPNPR_ACK 0x4000
198 #define MV88E1112_COPPER_ANLPNPR_MSG_PAGE 0x2000
199 #define MV88E1112_COPPER_ANLPNPR_ACK2 0x1000
200 #define MV88E1112_COPPER_ANLPNPR_TOGGLE 0x0800
201 #define MV88E1112_COPPER_ANLPNPR_MESSAGE 0x07FF
202 
203 //1000BASE-T Control register
204 #define MV88E1112_GBCR_TEST_MODE 0xE000
205 #define MV88E1112_GBCR_MS_MAN_CONF_EN 0x1000
206 #define MV88E1112_GBCR_MS_MAN_CONF_VAL 0x0800
207 #define MV88E1112_GBCR_PORT_TYPE 0x0400
208 #define MV88E1112_GBCR_1000BT_FD 0x0200
209 #define MV88E1112_GBCR_1000BT_HD 0x0100
210 
211 //1000BASE-T Status register
212 #define MV88E1112_GBSR_MS_CONF_FAULT 0x8000
213 #define MV88E1112_GBSR_MS_CONF_RES 0x4000
214 #define MV88E1112_GBSR_LOCAL_RECEIVER_STATUS 0x2000
215 #define MV88E1112_GBSR_REMOTE_RECEIVER_STATUS 0x1000
216 #define MV88E1112_GBSR_LP_1000BT_FD 0x0800
217 #define MV88E1112_GBSR_LP_1000BT_HD 0x0400
218 #define MV88E1112_GBSR_IDLE_ERR_COUNT 0x00FF
219 
220 //Extended Status register
221 #define MV88E1112_GBESR_1000BX_FD 0x8000
222 #define MV88E1112_GBESR_1000BX_HD 0x4000
223 #define MV88E1112_GBESR_1000BT_FD 0x2000
224 #define MV88E1112_GBESR_1000BT_HD 0x1000
225 
226 //Copper Specific Control 1 register
227 #define MV88E1112_COPPER_CTRL1_LINK_PULSE_DIS 0x8000
228 #define MV88E1112_COPPER_CTRL1_DOWNSHIFT_COUNTER 0x7000
229 #define MV88E1112_COPPER_CTRL1_DOWNSHIFT_EN 0x0800
230 #define MV88E1112_COPPER_CTRL1_FORCE_LINK_GOOD 0x0400
231 #define MV88E1112_COPPER_CTRL1_ENERGY_DETECT 0x0300
232 #define MV88E1112_COPPER_CTRL1_EXTENDED_DIST_EN 0x0080
233 #define MV88E1112_COPPER_CTRL1_MDI_CROSSOVER_MODE 0x0060
234 #define MV88E1112_COPPER_CTRL1_MDI_CROSSOVER_MODE_MANUAL_MDI 0x0000
235 #define MV88E1112_COPPER_CTRL1_MDI_CROSSOVER_MODE_MANUAL_MDIX 0x0020
236 #define MV88E1112_COPPER_CTRL1_MDI_CROSSOVER_MODE_AUTO 0x0060
237 #define MV88E1112_COPPER_CTRL1_TX_DIS 0x0008
238 #define MV88E1112_COPPER_CTRL1_POLARITY_REVERSAL_DIS 0x0002
239 #define MV88E1112_COPPER_CTRL1_JABBER_DIS 0x0001
240 
241 //Copper Specific Status 1 register
242 #define MV88E1112_COPPER_STAT1_SPEED 0xC000
243 #define MV88E1112_COPPER_STAT1_SPEED_10MBPS 0x0000
244 #define MV88E1112_COPPER_STAT1_SPEED_100MBPS 0x4000
245 #define MV88E1112_COPPER_STAT1_SPEED_1000MBPS 0x8000
246 #define MV88E1112_COPPER_STAT1_DUPLEX 0x2000
247 #define MV88E1112_COPPER_STAT1_PAGE_RECEIVED 0x1000
248 #define MV88E1112_COPPER_STAT1_SPEED_DUPLEX_RESOLVED 0x0800
249 #define MV88E1112_COPPER_STAT1_LINK 0x0400
250 #define MV88E1112_COPPER_STAT1_TX_PAUSE_EN 0x0200
251 #define MV88E1112_COPPER_STAT1_RX_PAUSE_EN 0x0100
252 #define MV88E1112_COPPER_STAT1_FIBER_COPPER_RESOLUTION 0x0080
253 #define MV88E1112_COPPER_STAT1_MDI_CROSSOVER_STATUS 0x0040
254 #define MV88E1112_COPPER_STAT1_DOWNSHIFT_STATUS 0x0020
255 #define MV88E1112_COPPER_STAT1_ENERGY_DETECT_STATUS 0x0010
256 #define MV88E1112_COPPER_STAT1_GLOBAL_LINK_STATUS 0x0008
257 #define MV88E1112_COPPER_STAT1_DTE_POWER_STATUS 0x0004
258 #define MV88E1112_COPPER_STAT1_POLARITY 0x0002
259 #define MV88E1112_COPPER_STAT1_JABBER 0x0001
260 
261 //Copper Interrupt Enable register
262 #define MV88E1112_COPPER_INT_EN_AN_ERROR 0x8000
263 #define MV88E1112_COPPER_INT_EN_SPEED_CHANGED 0x4000
264 #define MV88E1112_COPPER_INT_EN_DUPLEX_CHANGED 0x2000
265 #define MV88E1112_COPPER_INT_EN_PAGE_RECEIVED 0x1000
266 #define MV88E1112_COPPER_INT_EN_AN_COMPLETE 0x0800
267 #define MV88E1112_COPPER_INT_EN_LINK_STATUS_CHANGED 0x0400
268 #define MV88E1112_COPPER_INT_EN_SYMBOL_ERROR 0x0200
269 #define MV88E1112_COPPER_INT_EN_FALSE_CARRIER 0x0100
270 #define MV88E1112_COPPER_INT_EN_MDI_CROSSOVER_CHANGED 0x0040
271 #define MV88E1112_COPPER_INT_EN_DOWNSHIFT 0x0020
272 #define MV88E1112_COPPER_INT_EN_ENERGY_DETECT 0x0010
273 #define MV88E1112_COPPER_INT_EN_DTE_POWER_DET_STATUS_CHANGED 0x0004
274 #define MV88E1112_COPPER_INT_EN_POLARITY_CHANGED 0x0002
275 #define MV88E1112_COPPER_INT_EN_JABBER 0x0001
276 
277 //Copper Specific Status 2 register
278 #define MV88E1112_COPPER_STAT2_AN_ERROR 0x8000
279 #define MV88E1112_COPPER_STAT2_SPEED_CHANGED 0x4000
280 #define MV88E1112_COPPER_STAT2_DUPLEX_CHANGED 0x2000
281 #define MV88E1112_COPPER_STAT2_PAGE_RECEIVED 0x1000
282 #define MV88E1112_COPPER_STAT2_AN_COMPLETE 0x0800
283 #define MV88E1112_COPPER_STAT2_LINK_STATUS_CHANGED 0x0400
284 #define MV88E1112_COPPER_STAT2_SYMBOL_ERROR 0x0200
285 #define MV88E1112_COPPER_STAT2_FALSE_CARRIER 0x0100
286 #define MV88E1112_COPPER_STAT2_MDI_CROSSOVER_CHANGED 0x0040
287 #define MV88E1112_COPPER_STAT2_DOWNSHIFT 0x0020
288 #define MV88E1112_COPPER_STAT2_ENERGY_DETECT 0x0010
289 #define MV88E1112_COPPER_STAT2_DTE_POWER_DET_STATUS_CHANGED 0x0004
290 #define MV88E1112_COPPER_STAT2_POLARITY_CHANGED 0x0002
291 #define MV88E1112_COPPER_STAT2_JABBER 0x0001
292 
293 //Page Address register
294 #define MV88E1112_PAGE_ADDR_AUTO_MEDIUM_REG_SEL 0x8000
295 #define MV88E1112_PAGE_ADDR_PAGE_SEL 0x00FF
296 
297 //Copper Specific Control 2 register
298 #define MV88E1112_COPPER_CTRL2_TRANSMITTER_TYPE 0x8000
299 #define MV88E1112_COPPER_CTRL2_TRANSMITTER_TYPE_CLASS_B 0x0000
300 #define MV88E1112_COPPER_CTRL2_TRANSMITTER_TYPE_CLASS_A 0x8000
301 #define MV88E1112_COPPER_CTRL2_DTE_DETECT_EN 0x0100
302 #define MV88E1112_COPPER_CTRL2_DTE_DETECT_STATUS_DROP_HYST 0x00F0
303 #define MV88E1112_COPPER_CTRL2_DTE_DETECT_STATUS_DROP_HYST_DEFAULT 0x0040
304 #define MV88E1112_COPPER_CTRL2_100MB_TEST_SEL 0x000C
305 #define MV88E1112_COPPER_CTRL2_100MB_TEST_SEL_NORMAL 0x0000
306 #define MV88E1112_COPPER_CTRL2_100MB_TEST_SEL_112NS_SEQ 0x0008
307 #define MV88E1112_COPPER_CTRL2_100MB_TEST_SEL_16NS_SEQ 0x000C
308 #define MV88E1112_COPPER_CTRL2_10BT_POL_FORCE 0x0002
309 
310 //Fiber Control register
311 #define MV88E1112_FIBER_CTRL_RESET 0x8000
312 #define MV88E1112_FIBER_CTRL_LOOPBACK 0x4000
313 #define MV88E1112_FIBER_CTRL_SPEED_SEL_LSB 0x2000
314 #define MV88E1112_FIBER_CTRL_AN_EN 0x1000
315 #define MV88E1112_FIBER_CTRL_POWER_DOWN 0x0800
316 #define MV88E1112_FIBER_CTRL_ISOLATE 0x0400
317 #define MV88E1112_FIBER_CTRL_RESTART_AN 0x0200
318 #define MV88E1112_FIBER_CTRL_DUPLEX_MODE 0x0100
319 #define MV88E1112_FIBER_CTRL_COL_TEST 0x0080
320 #define MV88E1112_FIBER_CTRL_SPEED_SEL_MSB 0x0040
321 
322 //Fiber Status register
323 #define MV88E1112_FIBER_STAT_100BT4 0x8000
324 #define MV88E1112_FIBER_STAT_100BTX_FD 0x4000
325 #define MV88E1112_FIBER_STAT_100BTX_HD 0x2000
326 #define MV88E1112_FIBER_STAT_10BT_FD 0x1000
327 #define MV88E1112_FIBER_STAT_10BT_HD 0x0800
328 #define MV88E1112_FIBER_STAT_100BT2_FD 0x0400
329 #define MV88E1112_FIBER_STAT_100BT2_HD 0x0200
330 #define MV88E1112_FIBER_STAT_EXTENDED_STATUS 0x0100
331 #define MV88E1112_FIBER_STAT_MF_PREAMBLE_SUPPR 0x0040
332 #define MV88E1112_FIBER_STAT_AN_COMPLETE 0x0020
333 #define MV88E1112_FIBER_STAT_REMOTE_FAULT 0x0010
334 #define MV88E1112_FIBER_STAT_AN_CAPABLE 0x0008
335 #define MV88E1112_FIBER_STAT_LINK_STATUS 0x0004
336 #define MV88E1112_FIBER_STAT_EXTENDED_CAPABLE 0x0001
337 
338 //Fiber Auto-Negotiation Advertisement register
339 #define MV88E1112_FIBER_ANAR_NEXT_PAGE 0x8000
340 #define MV88E1112_FIBER_ANAR_REMOTE_FAULT 0x3000
341 #define MV88E1112_FIBER_ANAR_REMOTE_FAULT_NO_ERROR 0x0000
342 #define MV88E1112_FIBER_ANAR_REMOTE_FAULT_LINK_FAILURE 0x1000
343 #define MV88E1112_FIBER_ANAR_REMOTE_FAULT_OFFLINE 0x2000
344 #define MV88E1112_FIBER_ANAR_REMOTE_FAULT_AN_ERROR 0x3000
345 #define MV88E1112_FIBER_ANAR_PAUSE 0x0180
346 #define MV88E1112_FIBER_ANAR_1000BX_HD 0x0040
347 #define MV88E1112_FIBER_ANAR_1000BX_FD 0x0020
348 
349 //Fiber Link Partner Ability register
350 #define MV88E1112_FIBER_ANLPAR_NEXT_PAGE 0x8000
351 #define MV88E1112_FIBER_ANLPAR_ACK 0x4000
352 #define MV88E1112_FIBER_ANLPAR_REMOTE_FAULT 0x3000
353 #define MV88E1112_FIBER_ANLPAR_REMOTE_FAULT_NO_ERROR 0x0000
354 #define MV88E1112_FIBER_ANLPAR_REMOTE_FAULT_LINK_FAILURE 0x1000
355 #define MV88E1112_FIBER_ANLPAR_REMOTE_FAULT_OFFLINE 0x2000
356 #define MV88E1112_FIBER_ANLPAR_REMOTE_FAULT_AN_ERROR 0x3000
357 #define MV88E1112_FIBER_ANLPAR_ASYM_PAUSE 0x0180
358 #define MV88E1112_FIBER_ANLPAR_1000BX_HD 0x0040
359 #define MV88E1112_FIBER_ANLPAR_1000BX_FD 0x0020
360 
361 //Fiber Auto-Negotiation Expansion register
362 #define MV88E1112_FIBER_ANER_LP_NEXT_PAGE_ABLE 0x0008
363 #define MV88E1112_FIBER_ANER_NEXT_PAGE_ABLE 0x0004
364 #define MV88E1112_FIBER_ANER_PAGE_RECEIVED 0x0002
365 #define MV88E1112_FIBER_ANER_LP_AN_ABLE 0x0001
366 
367 //Fiber Next Page Transmit register
368 #define MV88E1112_FIBER_ANNPTR_NEXT_PAGE 0x8000
369 #define MV88E1112_FIBER_ANNPTR_MSG_PAGE 0x2000
370 #define MV88E1112_FIBER_ANNPTR_ACK2 0x1000
371 #define MV88E1112_FIBER_ANNPTR_TOGGLE 0x0800
372 #define MV88E1112_FIBER_ANNPTR_MESSAGE 0x07FF
373 
374 //Fiber Link Partner Next Page register
375 #define MV88E1112_FIBER_ANLPNPR_NEXT_PAGE 0x8000
376 #define MV88E1112_FIBER_ANLPNPR_ACK 0x4000
377 #define MV88E1112_FIBER_ANLPNPR_MSG_PAGE 0x2000
378 #define MV88E1112_FIBER_ANLPNPR_ACK2 0x1000
379 #define MV88E1112_FIBER_ANLPNPR_TOGGLE 0x0800
380 #define MV88E1112_FIBER_ANLPNPR_MESSAGE 0x07FF
381 
382 //Fiber Specific Control 1 register
383 #define MV88E1112_FIBER_CTRL1_FEFI_EN 0x0800
384 #define MV88E1112_FIBER_CTRL1_FORCE_LINK_GOOD 0x0400
385 #define MV88E1112_FIBER_CTRL1_SIGDET_POL 0x0200
386 #define MV88E1112_FIBER_CTRL1_TX_DIS 0x0008
387 
388 //Fiber Specific Status 1 register
389 #define MV88E1112_FIBER_STAT1_SPEED 0xC000
390 #define MV88E1112_FIBER_STAT1_SPEED_100MBPS 0x4000
391 #define MV88E1112_FIBER_STAT1_DUPLEX 0x2000
392 #define MV88E1112_FIBER_STAT1_PAGE_RECEIVED 0x1000
393 #define MV88E1112_FIBER_STAT1_SPEED_DUPLEX_RESOLVED 0x0800
394 #define MV88E1112_FIBER_STAT1_LINK 0x0400
395 #define MV88E1112_FIBER_STAT1_TX_PAUSE_EN 0x0200
396 #define MV88E1112_FIBER_STAT1_RX_PAUSE_EN 0x0100
397 #define MV88E1112_FIBER_STAT1_FIBER_COPPER_RESOLUTION 0x0080
398 #define MV88E1112_FIBER_STAT1_AN_BYPASS_STATUS 0x0020
399 #define MV88E1112_FIBER_STAT1_AUTOSEL_FIBER_ED_STATUS 0x0010
400 #define MV88E1112_FIBER_STAT1_GLOBAL_LINK_STATUS 0x0008
401 
402 //Fiber Interrupt Enable register
403 #define MV88E1112_FIBER_INT_EN_DUPLEX_CHANGED 0x2000
404 #define MV88E1112_FIBER_INT_EN_PAGE_RECEIVED 0x1000
405 #define MV88E1112_FIBER_INT_EN_AN_COMPLETE 0x0800
406 #define MV88E1112_FIBER_INT_EN_LINK_STATUS_CHANGED 0x0400
407 #define MV88E1112_FIBER_INT_EN_SYMBOL_ERROR 0x0200
408 #define MV88E1112_FIBER_INT_EN_FALSE_CARRIER 0x0100
409 #define MV88E1112_FIBER_INT_EN_ENERGY_DETECT 0x0010
410 
411 //Fiber Specific Status 2 register
412 #define MV88E1112_FIBER_STAT2_DUPLEX_CHANGED 0x2000
413 #define MV88E1112_FIBER_STAT2_PAGE_RECEIVED 0x1000
414 #define MV88E1112_FIBER_STAT2_AN_COMPLETE 0x0800
415 #define MV88E1112_FIBER_STAT2_LINK_STATUS_CHANGED 0x0400
416 #define MV88E1112_FIBER_STAT2_SYMBOL_ERROR 0x0200
417 #define MV88E1112_FIBER_STAT2_FALSE_CARRIER 0x0100
418 #define MV88E1112_FIBER_STAT2_ENERGY_DETECT 0x0010
419 
420 //Fiber Specific Control 2 register
421 #define MV88E1112_FIBER_CTRL2_AN_BYPASS_EN 0x8000
422 #define MV88E1112_FIBER_CTRL2_SGMII_AN_TIMER 0x6000
423 #define MV88E1112_FIBER_CTRL2_SGMII_AN_TIMER_1_6MS_TO_2_0MS 0x0000
424 #define MV88E1112_FIBER_CTRL2_SGMII_AN_TIMER_0_5US_TO_0_6US 0x2000
425 #define MV88E1112_FIBER_CTRL2_SGMII_AN_TIMER_0_98US_TO_1_2US 0x4000
426 #define MV88E1112_FIBER_CTRL2_SGMII_AN_TIMER_2_1US_TO_2_3US 0x6000
427 #define MV88E1112_FIBER_CTRL2_EXT_FIBER_SIG_DETECT_IN_EN 0x0080
428 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE 0x0007
429 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_0_50V 0x0000
430 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_0_60V 0x0001
431 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_0_70V 0x0002
432 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_0_80V 0x0003
433 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_0_90V 0x0004
434 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_1_00V 0x0005
435 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_1_10V 0x0006
436 #define MV88E1112_FIBER_CTRL2_OUT_AMPLITUDE_1_20V 0x0007
437 
438 //MAC Control register
439 #define MV88E1112_MAC_CTRL_RESET 0x8000
440 #define MV88E1112_MAC_CTRL_LOOPBACK 0x4000
441 #define MV88E1112_MAC_CTRL_SPEED_SEL_LSB 0x2000
442 #define MV88E1112_MAC_CTRL_AN_EN 0x1000
443 #define MV88E1112_MAC_CTRL_POWER_DOWN 0x0800
444 #define MV88E1112_MAC_CTRL_SPEED_SEL_MSB 0x0040
445 
446 //MAC Specific Control 1 register
447 #define MV88E1112_MAC_CTRL1_TX_FIFO_DEPTH 0xC000
448 #define MV88E1112_MAC_CTRL1_RX_FIFO_DEPTH 0x3000
449 #define MV88E1112_MAC_CTRL1_AUTOSEL_PREF_MEDIA 0x0C00
450 #define MV88E1112_MAC_CTRL1_MODE_SELECT 0x0380
451 #define MV88E1112_MAC_CTRL1_MODE_SELECT_100FX 0x0000
452 #define MV88E1112_MAC_CTRL1_MODE_SELECT_COPPER_GBIC 0x0080
453 #define MV88E1112_MAC_CTRL1_MODE_SELECT_AUTO_COPPER_SGMII 0x0100
454 #define MV88E1112_MAC_CTRL1_MODE_SELECT_AUTO_COPPER_1000BX 0x0180
455 #define MV88E1112_MAC_CTRL1_MODE_SELECT_COPPER_ONLY 0x0280
456 #define MV88E1112_MAC_CTRL1_MODE_SELECT_SGMII_ONLY 0x0300
457 #define MV88E1112_MAC_CTRL1_MODE_SELECT_1000BX_ONLY 0x0380
458 #define MV88E1112_MAC_CTRL1_SGMII_MAC_POWER_DOWN 0x0008
459 #define MV88E1112_MAC_CTRL1_ENHANCED_SGMII 0x0004
460 
461 //MAC Specific Status 1 register
462 #define MV88E1112_MAC_STAT1_AN_BYPASS_STATUS 0x0020
463 
464 //MAC Interrupt Enable register
465 #define MV88E1112_MAC_INT_EN_FIFO_OVER_UNDERFLOW 0x0080
466 
467 //MAC Specific Status 2 register
468 #define MV88E1112_MAC_STAT2_FIFO_OVER_UNDERFLOW 0x0080
469 
470 //MAC Specific Control 2 register
471 #define MV88E1112_MAC_CTRL2_AN_BYPASS_EN 0x8000
472 #define MV88E1112_MAC_CTRL2_SGMII_MAC_AN_TIMER 0x6000
473 #define MV88E1112_MAC_CTRL2_SGMII_MAC_AN_TIMER_1_6MS_TO_2_0MS 0x0000
474 #define MV88E1112_MAC_CTRL2_SGMII_MAC_AN_TIMER_0_5US_TO_0_6US 0x2000
475 #define MV88E1112_MAC_CTRL2_SGMII_MAC_AN_TIMER_0_98US_TO_1_2US 0x4000
476 #define MV88E1112_MAC_CTRL2_SGMII_MAC_AN_TIMER_2_1US_TO_2_3US 0x6000
477 #define MV88E1112_MAC_CTRL2_FORCE_FIBER_LINK_DOWN 0x0080
478 #define MV88E1112_MAC_CTRL2_SGMII_MAC_CLK_EN 0x0010
479 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE 0x0007
480 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_0_50V 0x0000
481 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_0_60V 0x0001
482 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_0_70V 0x0002
483 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_0_80V 0x0003
484 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_0_90V 0x0004
485 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_1_00V 0x0005
486 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_1_10V 0x0006
487 #define MV88E1112_MAC_CTRL2_OUT_AMPLITUDE_1_20V 0x0007
488 
489 //LOS, INIT, STATUS[1:0] Function Control register
490 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL 0xF000
491 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_NORMAL 0x0000
492 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_LINK_ACT 0x1000
493 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_LINK_RX 0x2000
494 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_ACT 0x3000
495 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_ACT_BLINK 0x4000
496 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_TX 0x5000
497 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_SPEED_10_1000 0x6000
498 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_LINK_FIBER 0x7000
499 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_FORCE_OFF 0x8000
500 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_FORCE_ON 0x9000
501 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_FORCE_HIZ 0xA000
502 #define MV88E1112_LED_FUNC_CTRL_LOS_CTRL_FORCE_BLINK 0xB000
503 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL 0x0F00
504 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_LINK 0x0000
505 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_LINK_ACT 0x0100
506 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_NORMAL 0x0200
507 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_ACT 0x0300
508 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_ACT_BLINK 0x0400
509 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_TX 0x0500
510 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_SPEED_10_1000 0x0600
511 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_SPEED_10 0x0700
512 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_FORCE_OFF 0x0800
513 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_FORCE_ON 0x0900
514 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_FORCE_HIZ 0x0A00
515 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_FORCE_BLINK 0x0B00
516 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_MODE1 0x0C00
517 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_MODE2 0x0D00
518 #define MV88E1112_LED_FUNC_CTRL_INIT_CTRL_INT 0x0E00
519 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL 0x00F0
520 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_COPPER_LINK 0x0000
521 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_LINK_ACT 0x0010
522 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_LINK_RX 0x00A0
523 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_LINK 0x00B0
524 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_LINK_BLINK 0x0640
525 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_SPEED_100_FIBER 0x0650
526 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_SPEED_100_1000 0x06E0
527 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_SPEED_100 0x06F0
528 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_FORCE_OFF 0x3E80
529 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_FORCE_ON 0x3E90
530 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_FORCE_HIZ 0x3F20
531 #define MV88E1112_LED_FUNC_CTRL_STATUS1_CTRL_FORCE_BLINK 0x3F30
532 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL 0x000F
533 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_LINK 0x0000
534 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_LINK_ACT 0x0001
535 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_SPEED_BLINK 0x0002
536 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_ACT 0x0003
537 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_ACT_BLINK 0x0004
538 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_TX 0x0005
539 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_COPPER_LINK 0x0006
540 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_SPEED_1000 0x0007
541 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_FORCE_OFF 0x0008
542 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_FORCE_ON 0x0009
543 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_FORCE_HIZ 0x000A
544 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_FORCE_BLINK 0x000B
545 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_MODE1 0x000C
546 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_MODE2 0x000D
547 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_MODE3 0x000E
548 #define MV88E1112_LED_FUNC_CTRL_STATUS0_CTRL_MODE4 0x000F
549 
550 //LOS, INIT, STATUS[1:0] Polarity Control register
551 #define MV88E1112_LED_POL_CTRL_LOS_STATUS1_MIX 0xF000
552 #define MV88E1112_LED_POL_CTRL_LOS_STATUS1_MIX_0 0x0000
553 #define MV88E1112_LED_POL_CTRL_LOS_STATUS1_MIX_12_5 0x0000
554 #define MV88E1112_LED_POL_CTRL_LOS_STATUS1_MIX_87_5 0x7000
555 #define MV88E1112_LED_POL_CTRL_LOS_STATUS1_MIX_100 0x8000
556 #define MV88E1112_LED_POL_CTRL_INIT_STATUS0_MIX 0x0F00
557 #define MV88E1112_LED_POL_CTRL_INIT_STATUS0_MIX_0 0x0000
558 #define MV88E1112_LED_POL_CTRL_INIT_STATUS0_MIX_12_5 0x0000
559 #define MV88E1112_LED_POL_CTRL_INIT_STATUS0_MIX_87_5 0x0700
560 #define MV88E1112_LED_POL_CTRL_INIT_STATUS0_MIX_100 0x0800
561 #define MV88E1112_LED_POL_CTRL_LOS_POL 0x00C0
562 #define MV88E1112_LED_POL_CTRL_LOS_POL_ON_LOW_OFF_HIGH 0x0000
563 #define MV88E1112_LED_POL_CTRL_LOS_POL_ON_LOW_OFF_TRIS 0x0080
564 #define MV88E1112_LED_POL_CTRL_LOS_POL_ON_HIGH_OFF_TRIS 0x00C0
565 #define MV88E1112_LED_POL_CTRL_INIT_POL 0x0030
566 #define MV88E1112_LED_POL_CTRL_INIT_POL_ON_LOW_OFF_HIGH 0x0000
567 #define MV88E1112_LED_POL_CTRL_INIT_POL_ON_HIGH_OFF_LOW 0x0010
568 #define MV88E1112_LED_POL_CTRL_INIT_POL_ON_LOW_OFF_TRIS 0x0020
569 #define MV88E1112_LED_POL_CTRL_INIT_POL_ON_HIGH_OFF_TRIS 0x0030
570 #define MV88E1112_LED_POL_CTRL_STATUS1_POL 0x000C
571 #define MV88E1112_LED_POL_CTRL_STATUS1_POL_ON_LOW_OFF_HIGH 0x0000
572 #define MV88E1112_LED_POL_CTRL_STATUS1_POL_ON_HIGH_OFF_LOW 0x0004
573 #define MV88E1112_LED_POL_CTRL_STATUS1_POL_ON_LOW_OFF_TRIS 0x0008
574 #define MV88E1112_LED_POL_CTRL_STATUS1_POL_ON_HIGH_OFF_TRIS 0x000C
575 #define MV88E1112_LED_POL_CTRL_STATUS0_POL 0x0003
576 #define MV88E1112_LED_POL_CTRL_STATUS0_POL_ON_LOW_OFF_HIGH 0x0000
577 #define MV88E1112_LED_POL_CTRL_STATUS0_POL_ON_HIGH_OFF_LOW 0x0001
578 #define MV88E1112_LED_POL_CTRL_STATUS0_POL_ON_LOW_OFF_TRIS 0x0002
579 #define MV88E1112_LED_POL_CTRL_STATUS0_POL_ON_HIGH_OFF_TRIS 0x0003
580 
581 //LOS, INIT, STATUS[1:0] Timer Control register
582 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH 0x7000
583 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_NO 0x0000
584 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_21MS_TO_42MS 0x1000
585 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_42MS_TO_84MS 0x2000
586 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_84MS_TO_170MS 0x3000
587 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_170MS_TO_340MS 0x4000
588 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_340MS_TO_670MS 0x5000
589 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_670MS_TO_1_3S 0x6000
590 #define MV88E1112_LED_TIMER_CTRL_PULSE_STRETCH_1_3S_TO_2_7S 0x7000
591 #define MV88E1112_LED_TIMER_CTRL_BLINK_RATE 0x0700
592 #define MV88E1112_LED_TIMER_CTRL_BLINK_RATE_42MS 0x0000
593 #define MV88E1112_LED_TIMER_CTRL_BLINK_RATE_84MS 0x0100
594 #define MV88E1112_LED_TIMER_CTRL_BLINK_RATE_170MS 0x0200
595 #define MV88E1112_LED_TIMER_CTRL_BLINK_RATE_340MS 0x0300
596 #define MV88E1112_LED_TIMER_CTRL_BLINK_RATE_670MS 0x0400
597 #define MV88E1112_LED_TIMER_CTRL_SPEED_OFF_PULSE 0x000C
598 #define MV88E1112_LED_TIMER_CTRL_SPEED_OFF_PULSE_84MS 0x0000
599 #define MV88E1112_LED_TIMER_CTRL_SPEED_OFF_PULSE_170MS 0x0004
600 #define MV88E1112_LED_TIMER_CTRL_SPEED_OFF_PULSE_340MS 0x0008
601 #define MV88E1112_LED_TIMER_CTRL_SPEED_OFF_PULSE_670MS 0x000C
602 #define MV88E1112_LED_TIMER_CTRL_SPEED_ON_PULSE 0x0003
603 #define MV88E1112_LED_TIMER_CTRL_SPEED_ON_PULSE_84MS 0x0000
604 #define MV88E1112_LED_TIMER_CTRL_SPEED_ON_PULSE_170MS 0x0001
605 #define MV88E1112_LED_TIMER_CTRL_SPEED_ON_PULSE_340MS 0x0002
606 #define MV88E1112_LED_TIMER_CTRL_SPEED_ON_PULSE_670MS 0x0003
607 
608 //Non-Volatile Memory Address register
609 #define MV88E1112_NVM_ADDR_SLAVE_ADDR 0xFE00
610 #define MV88E1112_NVM_ADDR_RD_WR 0x0100
611 #define MV88E1112_NVM_ADDR_BYTE_ADDR 0x00FF
612 
613 //Non-Volatile Memory Read Data and Status register
614 #define MV88E1112_NVM_RD_DATA_STAT_RAM_STATUS 0xE000
615 #define MV88E1112_NVM_RD_DATA_STAT_TWI_STATUS 0x0700
616 #define MV88E1112_NVM_RD_DATA_STAT_READ_DATA 0x00FF
617 
618 //Non-Volatile Memory Write Data and Control register
619 #define MV88E1112_NVM_WR_DATA_CTRL_EEPROM_WRITE_TIME 0xF000
620 #define MV88E1112_NVM_WR_DATA_CTRL_EEPROM_WRITE_TIME_0MS 0x0000
621 #define MV88E1112_NVM_WR_DATA_CTRL_EEPROM_WRITE_TIME_1_05MS 0x1000
622 #define MV88E1112_NVM_WR_DATA_CTRL_EEPROM_WRITE_TIME_14_68MS 0xE000
623 #define MV88E1112_NVM_WR_DATA_CTRL_EEPROM_WRITE_TIME_15_73MS 0xF000
624 #define MV88E1112_NVM_WR_DATA_CTRL_RELOAD_EEPROM_VALUES 0x0C00
625 #define MV88E1112_NVM_WR_DATA_CTRL_RELOAD_EEPROM_VALUES_NORMAL 0x0000
626 #define MV88E1112_NVM_WR_DATA_CTRL_RELOAD_EEPROM_VALUES_RELOAD 0x0800
627 #define MV88E1112_NVM_WR_DATA_CTRL_RELOAD_EEPROM_VALUES_RELOAD_REINIT 0x0C00
628 #define MV88E1112_NVM_WR_DATA_CTRL_AUTO_RB_AFTER_WR 0x0200
629 #define MV88E1112_NVM_WR_DATA_CTRL_WRITE_DATA 0x00FF
630 
631 //RAM Data register
632 #define MV88E1112_RAM_DATA_RAM_DATA 0x00FF
633 
634 //RAM Address register
635 #define MV88E1112_RAM_ADDR_RAM_BYTE_ADDR 0x00FF
636 
637 //MDI[0] Virtual Cable Tester Status register
638 #define MV88E1112_MDI0_VCT_STAT_RUN_VCT_TEST 0x8000
639 #define MV88E1112_MDI0_VCT_STAT_STATUS 0x6000
640 #define MV88E1112_MDI0_VCT_STAT_STATUS_VALID_NORMAL 0x0000
641 #define MV88E1112_MDI0_VCT_STAT_STATUS_VALID_SHORT 0x2000
642 #define MV88E1112_MDI0_VCT_STAT_STATUS_VALID_OPEN 0x4000
643 #define MV88E1112_MDI0_VCT_STAT_STATUS_FAILET 0x6000
644 #define MV88E1112_MDI0_VCT_STAT_AMPLITUDE 0x1F00
645 #define MV88E1112_MDI0_VCT_STAT_AMPLITUDE_MAX_NEG 0x0000
646 #define MV88E1112_MDI0_VCT_STAT_AMPLITUDE_ZERO 0x1000
647 #define MV88E1112_MDI0_VCT_STAT_AMPLITUDE_MAX_POS 0x1F00
648 #define MV88E1112_MDI0_VCT_STAT_DISTANCE 0x00FF
649 
650 //MDI[1] Virtual Cable Tester Status register
651 #define MV88E1112_MDI1_VCT_STAT_WAITING_PERIOD_DIS 0x8000
652 #define MV88E1112_MDI1_VCT_STAT_STATUS 0x6000
653 #define MV88E1112_MDI1_VCT_STAT_STATUS_VALID_NORMAL 0x0000
654 #define MV88E1112_MDI1_VCT_STAT_STATUS_VALID_SHORT 0x2000
655 #define MV88E1112_MDI1_VCT_STAT_STATUS_VALID_OPEN 0x4000
656 #define MV88E1112_MDI1_VCT_STAT_STATUS_FAILET 0x6000
657 #define MV88E1112_MDI1_VCT_STAT_AMPLITUDE 0x1F00
658 #define MV88E1112_MDI1_VCT_STAT_AMPLITUDE_MAX_NEG 0x0000
659 #define MV88E1112_MDI1_VCT_STAT_AMPLITUDE_ZERO 0x1000
660 #define MV88E1112_MDI1_VCT_STAT_AMPLITUDE_MAX_POS 0x1F00
661 #define MV88E1112_MDI1_VCT_STAT_DISTANCE 0x00FF
662 
663 //MDI[2] Virtual Cable Tester Status register
664 #define MV88E1112_MDI2_VCT_STAT_STATUS 0x6000
665 #define MV88E1112_MDI2_VCT_STAT_STATUS_VALID_NORMAL 0x0000
666 #define MV88E1112_MDI2_VCT_STAT_STATUS_VALID_SHORT 0x2000
667 #define MV88E1112_MDI2_VCT_STAT_STATUS_VALID_OPEN 0x4000
668 #define MV88E1112_MDI2_VCT_STAT_STATUS_FAILET 0x6000
669 #define MV88E1112_MDI2_VCT_STAT_AMPLITUDE 0x1F00
670 #define MV88E1112_MDI2_VCT_STAT_AMPLITUDE_MAX_NEG 0x0000
671 #define MV88E1112_MDI2_VCT_STAT_AMPLITUDE_ZERO 0x1000
672 #define MV88E1112_MDI2_VCT_STAT_AMPLITUDE_MAX_POS 0x1F00
673 #define MV88E1112_MDI2_VCT_STAT_DISTANCE 0x00FF
674 
675 //MDI[3] Virtual Cable Tester Status register
676 #define MV88E1112_MDI3_VCT_STAT_STATUS 0x6000
677 #define MV88E1112_MDI3_VCT_STAT_STATUS_VALID_NORMAL 0x0000
678 #define MV88E1112_MDI3_VCT_STAT_STATUS_VALID_SHORT 0x2000
679 #define MV88E1112_MDI3_VCT_STAT_STATUS_VALID_OPEN 0x4000
680 #define MV88E1112_MDI3_VCT_STAT_STATUS_FAILET 0x6000
681 #define MV88E1112_MDI3_VCT_STAT_AMPLITUDE 0x1F00
682 #define MV88E1112_MDI3_VCT_STAT_AMPLITUDE_MAX_NEG 0x0000
683 #define MV88E1112_MDI3_VCT_STAT_AMPLITUDE_ZERO 0x1000
684 #define MV88E1112_MDI3_VCT_STAT_AMPLITUDE_MAX_POS 0x1F00
685 #define MV88E1112_MDI3_VCT_STAT_DISTANCE 0x00FF
686 
687 //1000 BASE-T Pair Skew register
688 #define MV88E1112_1000BT_PAIR_SKEW_PAIR_7_8_MDI3 0xF000
689 #define MV88E1112_1000BT_PAIR_SKEW_PAIR_4_5_MDI2 0x0F00
690 #define MV88E1112_1000BT_PAIR_SKEW_PAIR_3_6_MDI1 0x00F0
691 #define MV88E1112_1000BT_PAIR_SKEW_PAIR_3_6_MDI0 0x000F
692 
693 //1000 BASE-T Pair Swap and Polarity register
694 #define MV88E1112_1000BT_PAIR_SWAP_POL_REG_21_4_21_5_VALID 0x0040
695 #define MV88E1112_1000BT_PAIR_SWAP_POL_C_D_CROSSOVER 0x0020
696 #define MV88E1112_1000BT_PAIR_SWAP_POL_A_B_CROSSOVER 0x0010
697 #define MV88E1112_1000BT_PAIR_SWAP_POL_PAIR_7_8_MDI3_POL 0x0008
698 #define MV88E1112_1000BT_PAIR_SWAP_POL_PAIR_4_5_MDI2_POL 0x0004
699 #define MV88E1112_1000BT_PAIR_SWAP_POL_PAIR_3_6_MDI1_POL 0x0002
700 #define MV88E1112_1000BT_PAIR_SWAP_POL_PAIR_1_2_MDI0_POL 0x0001
701 
702 //VCT DSP Distance register
703 #define MV88E1112_VCT_DSP_DIST_CABLE_LENGTH 0x0007
704 
705 //Packet Generation register
706 #define MV88E1112_PKT_GEN_STUB_TEST_EN 0x0020
707 #define MV88E1112_PKT_GEN_CRC_CHECKER_EN 0x0010
708 #define MV88E1112_PKT_GEN_PKT_GEN_EN 0x0008
709 #define MV88E1112_PKT_GEN_PAYLOAD 0x0004
710 #define MV88E1112_PKT_GEN_PAYLOAD_PSEUDO_RANDOM 0x0000
711 #define MV88E1112_PKT_GEN_PAYLOAD_5A_A5 0x0004
712 #define MV88E1112_PKT_GEN_LENGTH 0x0002
713 #define MV88E1112_PKT_GEN_LENGTH_64B 0x0000
714 #define MV88E1112_PKT_GEN_LENGTH_1518B 0x0002
715 #define MV88E1112_PKT_GEN_TX_ERR_PKT 0x0001
716 
717 //CRC Counters register
718 #define MV88E1112_CRC_COUNTERS_CRC_PKT_COUNT 0xFF00
719 #define MV88E1112_CRC_COUNTERS_CRC_ERR_COUNT 0x00FF
720 
721 //C++ guard
722 #ifdef __cplusplus
723 extern "C" {
724 #endif
725 
726 //88E1112 Ethernet PHY driver
727 extern const PhyDriver mv88e1112PhyDriver;
728 
729 //88E1112 related functions
731 void mv88e1112InitHook(NetInterface *interface);
732 
733 void mv88e1112Tick(NetInterface *interface);
734 
735 void mv88e1112EnableIrq(NetInterface *interface);
736 void mv88e1112DisableIrq(NetInterface *interface);
737 
738 void mv88e1112EventHandler(NetInterface *interface);
739 
740 void mv88e1112WritePhyReg(NetInterface *interface, uint8_t address,
741  uint16_t data);
742 
743 uint16_t mv88e1112ReadPhyReg(NetInterface *interface, uint8_t address);
744 
745 void mv88e1112DumpPhyReg(NetInterface *interface);
746 
747 //C++ guard
748 #ifdef __cplusplus
749 }
750 #endif
751 
752 #endif
const PhyDriver mv88e1112PhyDriver
88E1112 Ethernet PHY driver
Ethernet PHY driver.
Definition: nic.h:311
uint8_t data[]
Definition: ethernet.h:222
error_t mv88e1112Init(NetInterface *interface)
88E1112 PHY transceiver initialization
void mv88e1112Tick(NetInterface *interface)
88E1112 timer handler
void mv88e1112WritePhyReg(NetInterface *interface, uint8_t address, uint16_t data)
Write PHY register.
void mv88e1112DisableIrq(NetInterface *interface)
Disable interrupts.
error_t
Error codes.
Definition: error.h:43
void mv88e1112DumpPhyReg(NetInterface *interface)
Dump PHY registers for debugging purpose.
#define NetInterface
Definition: net.h:36
void mv88e1112EnableIrq(NetInterface *interface)
Enable interrupts.
uint16_t mv88e1112ReadPhyReg(NetInterface *interface, uint8_t address)
Read PHY register.
Ipv6Addr address[]
Definition: ipv6.h:325
Network interface controller abstraction layer.
void mv88e1112InitHook(NetInterface *interface)
88E1112 custom configuration
void mv88e1112EventHandler(NetInterface *interface)
88E1112 event handler