dp83869_driver.h
Go to the documentation of this file.
1 /**
2  * @file dp83869_driver.h
3  * @brief DP83869 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 _DP83869_DRIVER_H
32 #define _DP83869_DRIVER_H
33 
34 //Dependencies
35 #include "core/nic.h"
36 
37 //PHY address
38 #ifndef DP83869_PHY_ADDR
39  #define DP83869_PHY_ADDR 0
40 #elif (DP83869_PHY_ADDR < 0 || DP83869_PHY_ADDR > 31)
41  #error DP83869_PHY_ADDR parameter is not valid
42 #endif
43 
44 //DP83869 PHY registers
45 #define DP83869_BMCR 0x00
46 #define DP83869_BMSR 0x01
47 #define DP83869_PHYIDR1 0x02
48 #define DP83869_PHYIDR2 0x03
49 #define DP83869_ANAR 0x04
50 #define DP83869_ANLPAR 0x05
51 #define DP83869_ANER 0x06
52 #define DP83869_ANNPTR 0x07
53 #define DP83869_ANLNPTR 0x08
54 #define DP83869_GEN_CFG1 0x09
55 #define DP83869_GEN_STATUS1 0x0A
56 #define DP83869_REGCR 0x0D
57 #define DP83869_ADDAR 0x0E
58 #define DP83869_1KSCR 0x0F
59 #define DP83869_PHY_CONTROL 0x10
60 #define DP83869_PHY_STATUS 0x11
61 #define DP83869_INTERRUPT_MASK 0x12
62 #define DP83869_INTERRUPT_STATUS 0x13
63 #define DP83869_GEN_CFG 0x14
64 #define DP83869_RX_ERR_CNT 0x15
65 #define DP83869_BIST_CONTROL 0x16
66 #define DP83869_GEN_STATUS2 0x17
67 #define DP83869_LEDS_CFG1 0x18
68 #define DP83869_LEDS_CFG2 0x19
69 #define DP83869_LEDS_CFG3 0x1A
70 #define DP83869_GEN_CFG4 0x1E
71 #define DP83869_GEN_CTRL 0x1F
72 
73 //DP83869 MMD registers
74 #define DP83869_ANALOG_TEST_CTR 0x1F, 0x0025
75 #define DP83869_GEN_CFG_ENH_AMIX 0x1F, 0x002C
76 #define DP83869_GEN_CFG_FLD 0x1F, 0x002D
77 #define DP83869_GEN_CFG_FLD_THR 0x1F, 0x002E
78 #define DP83869_GEN_CFG3 0x1F, 0x0031
79 #define DP83869_RGMII_CTRL 0x1F, 0x0032
80 #define DP83869_RGMII_CTRL2 0x1F, 0x0033
81 #define DP83869_SGMII_AUTO_NEG_STATUS 0x1F, 0x0037
82 #define DP83869_PRBS_TX_CHK_CTRL 0x1F, 0x0039
83 #define DP83869_PRBS_TX_CHK_BYTE_CNT 0x1F, 0x003A
84 #define DP83869_G_100BT_REG0 0x1F, 0x0043
85 #define DP83869_SERDES_SYNC_STS 0x1F, 0x004F
86 #define DP83869_STRAP_STS 0x1F, 0x006E
87 #define DP83869_ANA_RGMII_DLL_CTRL 0x1F, 0x0086
88 #define DP83869_RXF_CFG 0x1F, 0x0134
89 #define DP83869_RXF_STATUS 0x1F, 0x0135
90 #define DP83869_IO_MUX_CFG 0x1F, 0x0170
91 #define DP83869_TDR_GEN_CFG1 0x1F, 0x0180
92 #define DP83869_TDR_GEN_CFG2 0x1F, 0x0181
93 #define DP83869_TDR_SEG_DURATION 0x1F, 0x0182
94 #define DP83869_TDR_SEG_DURATION2 0x1F, 0x0183
95 #define DP83869_TDR_GEN_CFG3 0x1F, 0x0184
96 #define DP83869_TDR_GEN_CFG4 0x1F, 0x0185
97 #define DP83869_TDR_PEAKS_LOC_A_0_1 0x1F, 0x0190
98 #define DP83869_TDR_PEAKS_LOC_A_2_3 0x1F, 0x0191
99 #define DP83869_TDR_PEAKS_LOC_A_4_B_0 0x1F, 0x0192
100 #define DP83869_TDR_PEAKS_LOC_B_1_2 0x1F, 0x0193
101 #define DP83869_TDR_PEAKS_LOC_B_3_4 0x1F, 0x0194
102 #define DP83869_TDR_PEAKS_LOC_C_0_1 0x1F, 0x0195
103 #define DP83869_TDR_PEAKS_LOC_C_2_3 0x1F, 0x0196
104 #define DP83869_TDR_PEAKS_LOC_C_4_D_0 0x1F, 0x0197
105 #define DP83869_TDR_PEAKS_LOC_D_1_2 0x1F, 0x0198
106 #define DP83869_TDR_PEAKS_LOC_D_3_4 0x1F, 0x0199
107 #define DP83869_TDR_GEN_STATUS 0x1F, 0x01A4
108 #define DP83869_TDR_PEAKS_SIGN_A_B 0x1F, 0x01A5
109 #define DP83869_TDR_PEAKS_SIGN_C_D 0x1F, 0x01A6
110 #define DP83869_OP_MODE_DECODE 0x1F, 0x01DF
111 #define DP83869_GPIO_MUX_CTRL 0x1F, 0x01E0
112 #define DP83869_FX_CTRL 0x1F, 0x0C00
113 #define DP83869_FX_STS 0x1F, 0x0C01
114 #define DP83869_FX_PHYID1 0x1F, 0x0C02
115 #define DP83869_FX_PHYID2 0x1F, 0x0C03
116 #define DP83869_FX_ANADV 0x1F, 0x0C04
117 #define DP83869_FX_LPABL 0x1F, 0x0C05
118 #define DP83869_FX_ANEXP 0x1F, 0x0C06
119 #define DP83869_FX_LOCNP 0x1F, 0x0C07
120 #define DP83869_FX_LPNP 0x1F, 0x0C08
121 #define DP83869_FX_INT_EN 0x1F, 0x0C18
122 #define DP83869_FX_INT_STS 0x1F, 0x0C19
123 
124 //BMCR register
125 #define DP83869_BMCR_RESET 0x8000
126 #define DP83869_BMCR_MII_LOOPBACK 0x4000
127 #define DP83869_BMCR_SPEED_SEL_LSB 0x2000
128 #define DP83869_BMCR_AUTONEG_EN 0x1000
129 #define DP83869_BMCR_PWD_DWN 0x0800
130 #define DP83869_BMCR_ISOLATE 0x0400
131 #define DP83869_BMCR_RSTRT_AUTONEG 0x0200
132 #define DP83869_BMCR_DUPLEX_EN 0x0100
133 #define DP83869_BMCR_COL_TST 0x0080
134 #define DP83869_BMCR_SPEED_SEL_MSB 0x0040
135 
136 //BMSR register
137 #define DP83869_BMSR_100M_FDUP 0x4000
138 #define DP83869_BMSR_100M_HDUP 0x2000
139 #define DP83869_BMSR_10M_FDUP 0x1000
140 #define DP83869_BMSR_10M_HDUP 0x0800
141 #define DP83869_BMSR_EXT_STS 0x0100
142 #define DP83869_BMSR_MF_PREAMBLE_SUP 0x0040
143 #define DP83869_BMSR_AUTONEG_COMP 0x0020
144 #define DP83869_BMSR_REMOTE_FAULT 0x0010
145 #define DP83869_BMSR_AUTONEG_ABL 0x0008
146 #define DP83869_BMSR_LINK_STS1 0x0004
147 #define DP83869_BMSR_JABBER_DTCT 0x0002
148 #define DP83869_BMSR_EXT_CAPBLTY 0x0001
149 
150 //PHYIDR1 register
151 #define DP83869_PHYIDR1_OUI_MSB 0xFFFF
152 #define DP83869_PHYIDR1_OUI_MSB_DEFAULT 0x2000
153 
154 //PHYIDR2 register
155 #define DP83869_PHYIDR2_OUI_LSB 0xFC00
156 #define DP83869_PHYIDR2_OUI_LSB_DEFAULT 0xA000
157 #define DP83869_PHYIDR2_VNDR_MDL 0x03F0
158 #define DP83869_PHYIDR2_VNDR_MDL_DEFAULT 0x00F0
159 #define DP83869_PHYIDR2_MDL_REV 0x000F
160 #define DP83869_PHYIDR2_MDL_REV_DEFAULT 0x0001
161 
162 //ANAR register
163 #define DP83869_ANAR_NEXT_PAGE_1_ADV 0x8000
164 #define DP83869_ANAR_REMOTE_FAULT_ADV 0x2000
165 #define DP83869_ANAR_ASYMMETRIC_PAUSE_ADV 0x0800
166 #define DP83869_ANAR_PAUSE_ADV 0x0400
167 #define DP83869_ANAR_G_100BT_4_ADV 0x0200
168 #define DP83869_ANAR_G_100BTX_FD_ADV 0x0100
169 #define DP83869_ANAR_G_100BTX_HD_ADV 0x0080
170 #define DP83869_ANAR_G_10BT_FD_ADV 0x0040
171 #define DP83869_ANAR_G_10BT_HD_ADV 0x0020
172 #define DP83869_ANAR_SELECTOR_FIELD_ADV 0x001F
173 #define DP83869_ANAR_SELECTOR_FIELD_ADV_DEFAULT 0x0001
174 
175 //ANLPAR register
176 #define DP83869_ANLPAR_NEXT_PAGE_1_LP 0x8000
177 #define DP83869_ANLPAR_ACKNOWLEDGE_1_LP 0x4000
178 #define DP83869_ANLPAR_REMOTE_FAULT_LP 0x2000
179 #define DP83869_ANLPAR_ASYMMETRIC_PAUSE_LP 0x0800
180 #define DP83869_ANLPAR_PAUSE_LP 0x0400
181 #define DP83869_ANLPAR_G_100BT4_LP 0x0200
182 #define DP83869_ANLPAR_G_100BTX_FD_LP 0x0100
183 #define DP83869_ANLPAR_G_100BTX_HD_LP 0x0080
184 #define DP83869_ANLPAR_G_10BT_FD_LP 0x0040
185 #define DP83869_ANLPAR_G_10BT_HD_LP 0x0020
186 #define DP83869_ANLPAR_SELECTOR_FIELD_LP 0x001F
187 
188 //ANER register
189 #define DP83869_ANER_RX_NEXT_PAGE_LOC_ABLE 0x0040
190 #define DP83869_ANER_RX_NEXT_PAGE_STOR_LOC 0x0020
191 #define DP83869_ANER_PRLL_TDCT_FAULE 0x0010
192 #define DP83869_ANER_LP_NP_ABLE 0x0008
193 #define DP83869_ANER_LOCAL_NP_ABLE 0x0004
194 #define DP83869_ANER_PAGE_RECEIVED_1 0x0002
195 #define DP83869_ANER_LP_AUTONEG_ABLE 0x0001
196 
197 //ANNPTR register
198 #define DP83869_ANNPTR_NEXT_PAGE_2_ADV 0x8000
199 #define DP83869_ANNPTR_MESSAGE_PAGE 0x2000
200 #define DP83869_ANNPTR_ACKNOWLEDGE2 0x1000
201 #define DP83869_ANNPTR_TOGGLE 0x0800
202 #define DP83869_ANNPTR_MESSAGE_UNFORMATTED 0x07FF
203 
204 //ANLNPTR register
205 #define DP83869_ANLNPTR_NEXT_PAGE_2_LP 0x8000
206 #define DP83869_ANLNPTR_ACKNOWLEDGE_2_LP 0x4000
207 #define DP83869_ANLNPTR_MESSAGE_PAGE_LP 0x2000
208 #define DP83869_ANLNPTR_ACKNOWLEDGE2_LP 0x1000
209 #define DP83869_ANLNPTR_TOGGLE_LP 0x0800
210 #define DP83869_ANLNPTR_MESSAGE_UNFORMATTED_LP 0x07FF
211 
212 //GEN_CFG1 register
213 #define DP83869_GEN_CFG1_TEST_MODE 0xE000
214 #define DP83869_GEN_CFG1_MASTER_SLAVE_MAN_CFG_EN 0x1000
215 #define DP83869_GEN_CFG1_MASTER_SLAVE_MAN_CFG_VAL 0x0800
216 #define DP83869_GEN_CFG1_PORT_TYPE 0x0400
217 #define DP83869_GEN_CFG1_G_1000BT_FD_ADV 0x0200
218 #define DP83869_GEN_CFG1_G_1000BT_HD_ADV 0x0100
219 #define DP83869_GEN_CFG1_TDR_AUTO_RUN 0x0080
220 
221 //GEN_STATUS1 register
222 #define DP83869_GEN_STATUS1_MS_CONFIG_FAULT 0x8000
223 #define DP83869_GEN_STATUS1_MS_CONFIG_RES 0x4000
224 #define DP83869_GEN_STATUS1_LOC_RCVR_STATUS_1 0x2000
225 #define DP83869_GEN_STATUS1_REM_RCVR_STATUS 0x1000
226 #define DP83869_GEN_STATUS1_LP_1000BT_FD_ABILITY 0x0800
227 #define DP83869_GEN_STATUS1_LP_1000BT_HD_ABILITY 0x0400
228 #define DP83869_GEN_STATUS1_IDLE_ERR_COUNT 0x00FF
229 
230 //REGCR register
231 #define DP83869_REGCR_FUNC 0xC000
232 #define DP83869_REGCR_FUNC_ADDR 0x0000
233 #define DP83869_REGCR_FUNC_DATA_NO_POST_INC 0x4000
234 #define DP83869_REGCR_FUNC_DATA_POST_INC_RW 0x8000
235 #define DP83869_REGCR_FUNC_DATA_POST_INC_W 0xC000
236 #define DP83869_REGCR_DEVAD 0x001F
237 
238 //1KSCR register
239 #define DP83869_1KSCR_G_1000BX_FD 0x8000
240 #define DP83869_1KSCR_G_1000BX_HD 0x4000
241 #define DP83869_1KSCR_G_1000BT_FD 0x2000
242 #define DP83869_1KSCR_G_1000BT_HD 0x1000
243 
244 //PHY_CONTROL register
245 #define DP83869_PHY_CONTROL_TX_FIFO_DEPTH 0xC000
246 #define DP83869_PHY_CONTROL_RX_FIFO_DEPTH 0x3000
247 #define DP83869_PHY_CONTROL_FORCE_LINK_GOOD 0x0400
248 #define DP83869_PHY_CONTROL_POWER_SAVE_MODE 0x0300
249 #define DP83869_PHY_CONTROL_MDI_CROSSOVER_MODE 0x0060
250 #define DP83869_PHY_CONTROL_DISABLE_CLK_125 0x0010
251 #define DP83869_PHY_CONTROL_LINE_DRIVER_INV_EN 0x0002
252 #define DP83869_PHY_CONTROL_DISABLE_JABBER 0x0001
253 
254 //PHY_STATUS register
255 #define DP83869_PHY_STATUS_SPEED_SEL 0xC000
256 #define DP83869_PHY_STATUS_SPEED_SEL_10MBPS 0x0000
257 #define DP83869_PHY_STATUS_SPEED_SEL_100MBPS 0x4000
258 #define DP83869_PHY_STATUS_SPEED_SEL_1000MBPS 0x8000
259 #define DP83869_PHY_STATUS_DUPLEX_MODE_ENV 0x2000
260 #define DP83869_PHY_STATUS_PAGE_RECEIVED_2 0x1000
261 #define DP83869_PHY_STATUS_SPEED_DUPLEX_RESOLVED 0x0800
262 #define DP83869_PHY_STATUS_LINK_STATUS_2 0x0400
263 #define DP83869_PHY_STATUS_MDI_X_MODE_CD_1 0x0200
264 #define DP83869_PHY_STATUS_MDI_X_MODE_AB_1 0x0100
265 #define DP83869_PHY_STATUS_SPEED_OPT_STATUS 0x0080
266 #define DP83869_PHY_STATUS_SLEEP_MODE 0x0040
267 #define DP83869_PHY_STATUS_WIRE_CROSS 0x003C
268 #define DP83869_PHY_STATUS_DATA_POLARITY 0x0002
269 #define DP83869_PHY_STATUS_JABBER_DTCT_2 0x0001
270 
271 //INTERRUPT_MASK register
272 #define DP83869_INTERRUPT_MASK_AUTONEG_ERR_INT_EN 0x8000
273 #define DP83869_INTERRUPT_MASK_SPEED_CHNG_INT_EN 0x4000
274 #define DP83869_INTERRUPT_MASK_DUPLEX_MODE_CHNG_INT_EN 0x2000
275 #define DP83869_INTERRUPT_MASK_PAGE_RECEIVED_INT_EN 0x1000
276 #define DP83869_INTERRUPT_MASK_AUTONEG_COMP_INT_EN 0x0800
277 #define DP83869_INTERRUPT_MASK_LINK_STATUS_CHNG_INT_EN 0x0400
278 #define DP83869_INTERRUPT_MASK_EEE_ERR_INT_EN 0x0200
279 #define DP83869_INTERRUPT_MASK_FALSE_CARRIER_INT_EN 0x0100
280 #define DP83869_INTERRUPT_MASK_ADC_FIFO_OVF_UNF_INT_EN 0x0080
281 #define DP83869_INTERRUPT_MASK_MDI_CROSSOVER_CHNG_INT_EN 0x0040
282 #define DP83869_INTERRUPT_MASK_SPEED_OPT_EVENT_INT_EN 0x0020
283 #define DP83869_INTERRUPT_MASK_SLEEP_MODE_CHNG_INT_EN 0x0010
284 #define DP83869_INTERRUPT_MASK_WOL_INT_EN 0x0008
285 #define DP83869_INTERRUPT_MASK_XGMII_ERR_INT_EN 0x0004
286 #define DP83869_INTERRUPT_MASK_POLARITY_CHNG_INT_EN 0x0002
287 #define DP83869_INTERRUPT_MASK_JABBER_INT_EN 0x0001
288 
289 //INTERRUPT_STATUS register
290 #define DP83869_INTERRUPT_STATUS_AUTONEG_ERR 0x8000
291 #define DP83869_INTERRUPT_STATUS_SPEED_CHNG 0x4000
292 #define DP83869_INTERRUPT_STATUS_DUPLEX_MODE_CHNG 0x2000
293 #define DP83869_INTERRUPT_STATUS_PAGE_RECEIVED 0x1000
294 #define DP83869_INTERRUPT_STATUS_AUTONEG_COMP 0x0800
295 #define DP83869_INTERRUPT_STATUS_LINK_STATUS_CHNG 0x0400
296 #define DP83869_INTERRUPT_STATUS_EEE_ERR_STATUS 0x0200
297 #define DP83869_INTERRUPT_STATUS_FALSE_CARRIER 0x0100
298 #define DP83869_INTERRUPT_STATUS_ADC_FIFO_OVF_UNF 0x0080
299 #define DP83869_INTERRUPT_STATUS_MDI_CROSSOVER_CHNG 0x0040
300 #define DP83869_INTERRUPT_STATUS_SPEED_OPT_EVENT 0x0020
301 #define DP83869_INTERRUPT_STATUS_SLEEP_MODE_CHNG 0x0010
302 #define DP83869_INTERRUPT_STATUS_WOL 0x0008
303 #define DP83869_INTERRUPT_STATUS_XGMII_ERR 0x0004
304 #define DP83869_INTERRUPT_STATUS_POLARITY_CHNG 0x0002
305 #define DP83869_INTERRUPT_STATUS_JABBER 0x0001
306 
307 //GEN_CFG register
308 #define DP83869_GEN_CFG_PD_DETECT_EN 0x8000
309 #define DP83869_GEN_CFG_SGMII_TX_ERR_DIS 0x4000
310 #define DP83869_GEN_CFG_INTERRUPT_POLARITY 0x2000
311 #define DP83869_GEN_CFG_SGMII_SOFT_RESET 0x1000
312 #define DP83869_GEN_CFG_SPEED_OPT_ATTEMPT_CNT 0x0C00
313 #define DP83869_GEN_CFG_SPEED_OPT_EN 0x0200
314 #define DP83869_GEN_CFG_SPEED_OPT_ENHANCED_EN 0x0100
315 #define DP83869_GEN_CFG_SGMII_AUTONEG_EN 0x0080
316 #define DP83869_GEN_CFG_SPEED_OPT_10M_EN 0x0040
317 #define DP83869_GEN_CFG_MII_CLK_CFG 0x0030
318 #define DP83869_GEN_CFG_COL_FD_EN 0x0008
319 #define DP83869_GEN_CFG_LEGACY_CODING_TXMODE_EN 0x0004
320 #define DP83869_GEN_CFG_MASTER_SEMI_CROSS_EN 0x0002
321 #define DP83869_GEN_CFG_SLAVE_SEMI_CROSS_EN 0x0001
322 
323 //RX_ERR_CNT register
324 #define DP83869_RX_ERR_CNT_RX_ERROR_COUNT 0xFFFF
325 
326 //BIST_CONTROL register
327 #define DP83869_BIST_CONTROL_PACKET_GEN_EN_3_0 0xF000
328 #define DP83869_BIST_CONTROL_REV_LOOP_RX_DATA_CTRL 0x0080
329 #define DP83869_BIST_CONTROL_MII_LOOP_TX_DATA_CTRL 0x0040
330 #define DP83869_BIST_CONTROL_LOOP_TX_DATA_MIX 0x003C
331 #define DP83869_BIST_CONTROL_LOOPBACK_MODE 0x0003
332 #define DP83869_BIST_CONTROL_LOOPBACK_MODE_BEFORE_SCRAMBLER 0x0001
333 #define DP83869_BIST_CONTROL_LOOPBACK_MODE_AFTER_SCRAMBLER 0x0002
334 #define DP83869_BIST_CONTROL_LOOPBACK_MODE_AFTER_MLT3_ENCODER 0x0003
335 
336 //GEN_STATUS2 register
337 #define DP83869_GEN_STATUS2_PD_PASS 0x8000
338 #define DP83869_GEN_STATUS2_PD_PULSE_DET_ZERO 0x4000
339 #define DP83869_GEN_STATUS2_PD_FAIL_WD 0x2000
340 #define DP83869_GEN_STATUS2_PD_FAIL_NON_PD 0x1000
341 #define DP83869_GEN_STATUS2_PRBS_LOCK 0x0800
342 #define DP83869_GEN_STATUS2_PRBS_SYNC_LOSS 0x0400
343 #define DP83869_GEN_STATUS2_PKT_GEN_BUSY 0x0200
344 #define DP83869_GEN_STATUS2_SCR_MODE_MASTER_1G 0x0100
345 #define DP83869_GEN_STATUS2_SCR_MODE_SLAVE_1G 0x0080
346 #define DP83869_GEN_STATUS2_CORE_PWR_MODE 0x0040
347 
348 //LEDS_CFG1 register
349 #define DP83869_LEDS_CFG1_LED_GPIO_SEL 0xF000
350 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_LINK 0x0000
351 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_ACT 0x1000
352 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_TX_ACT 0x2000
353 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_RX_ACT 0x3000
354 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_COL 0x4000
355 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_1000 0x5000
356 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_100 0x6000
357 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_10 0x7000
358 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_10_100 0x8000
359 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_100_1000 0x9000
360 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_FD 0xA000
361 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_LINK_ACT 0xB000
362 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_ERR 0xD000
363 #define DP83869_LEDS_CFG1_LED_GPIO_SEL_RX_ERR 0xE000
364 #define DP83869_LEDS_CFG1_LED_2_SEL 0x1F00
365 #define DP83869_LEDS_CFG1_LED_2_SEL_LINK 0x0000
366 #define DP83869_LEDS_CFG1_LED_2_SEL_ACT 0x0100
367 #define DP83869_LEDS_CFG1_LED_2_SEL_TX_ACT 0x0200
368 #define DP83869_LEDS_CFG1_LED_2_SEL_RX_ACT 0x0300
369 #define DP83869_LEDS_CFG1_LED_2_SEL_COL 0x0400
370 #define DP83869_LEDS_CFG1_LED_2_SEL_1000 0x0500
371 #define DP83869_LEDS_CFG1_LED_2_SEL_100 0x0600
372 #define DP83869_LEDS_CFG1_LED_2_SEL_10 0x0700
373 #define DP83869_LEDS_CFG1_LED_2_SEL_10_100 0x0800
374 #define DP83869_LEDS_CFG1_LED_2_SEL_100_1000 0x0900
375 #define DP83869_LEDS_CFG1_LED_2_SEL_FD 0x0A00
376 #define DP83869_LEDS_CFG1_LED_2_SEL_LINK_ACT 0x0B00
377 #define DP83869_LEDS_CFG1_LED_2_SEL_ERR 0x0D00
378 #define DP83869_LEDS_CFG1_LED_2_SEL_RX_ERR 0x0E00
379 #define DP83869_LEDS_CFG1_LED_1_SEL 0x00F0
380 #define DP83869_LEDS_CFG1_LED_1_SEL_LINK 0x0000
381 #define DP83869_LEDS_CFG1_LED_1_SEL_ACT 0x0010
382 #define DP83869_LEDS_CFG1_LED_1_SEL_TX_ACT 0x0020
383 #define DP83869_LEDS_CFG1_LED_1_SEL_RX_ACT 0x0030
384 #define DP83869_LEDS_CFG1_LED_1_SEL_COL 0x0040
385 #define DP83869_LEDS_CFG1_LED_1_SEL_1000 0x0050
386 #define DP83869_LEDS_CFG1_LED_1_SEL_100 0x0060
387 #define DP83869_LEDS_CFG1_LED_1_SEL_10 0x0070
388 #define DP83869_LEDS_CFG1_LED_1_SEL_10_100 0x0080
389 #define DP83869_LEDS_CFG1_LED_1_SEL_100_1000 0x0090
390 #define DP83869_LEDS_CFG1_LED_1_SEL_FD 0x00A0
391 #define DP83869_LEDS_CFG1_LED_1_SEL_LINK_ACT 0x00B0
392 #define DP83869_LEDS_CFG1_LED_1_SEL_ERR 0x00D0
393 #define DP83869_LEDS_CFG1_LED_1_SEL_RX_ERR 0x00E0
394 #define DP83869_LEDS_CFG1_LED_0_SEL 0x000F
395 #define DP83869_LEDS_CFG1_LED_0_SEL_LINK 0x0000
396 #define DP83869_LEDS_CFG1_LED_0_SEL_ACT 0x0001
397 #define DP83869_LEDS_CFG1_LED_0_SEL_TX_ACT 0x0002
398 #define DP83869_LEDS_CFG1_LED_0_SEL_RX_ACT 0x0003
399 #define DP83869_LEDS_CFG1_LED_0_SEL_COL 0x0004
400 #define DP83869_LEDS_CFG1_LED_0_SEL_1000 0x0005
401 #define DP83869_LEDS_CFG1_LED_0_SEL_100 0x0006
402 #define DP83869_LEDS_CFG1_LED_0_SEL_10 0x0007
403 #define DP83869_LEDS_CFG1_LED_0_SEL_10_100 0x0008
404 #define DP83869_LEDS_CFG1_LED_0_SEL_100_1000 0x0009
405 #define DP83869_LEDS_CFG1_LED_0_SEL_FD 0x000A
406 #define DP83869_LEDS_CFG1_LED_0_SEL_LINK_ACT 0x000B
407 #define DP83869_LEDS_CFG1_LED_0_SEL_ERR 0x000D
408 #define DP83869_LEDS_CFG1_LED_0_SEL_RX_ERR 0x000E
409 
410 //LEDS_CFG2 register
411 #define DP83869_LEDS_CFG2_LED_GPIO_POLARITY 0x4000
412 #define DP83869_LEDS_CFG2_LED_GPIO_DRV_VAL 0x2000
413 #define DP83869_LEDS_CFG2_LED_GPIO_DRV_EN 0x1000
414 #define DP83869_LEDS_CFG2_LED_2_POLARITY 0x0400
415 #define DP83869_LEDS_CFG2_LED_2_DRV_VAL 0x0200
416 #define DP83869_LEDS_CFG2_LED_2_DRV_EN 0x0100
417 #define DP83869_LEDS_CFG2_LED_1_POLARITY 0x0040
418 #define DP83869_LEDS_CFG2_LED_1_DRV_VAL 0x0020
419 #define DP83869_LEDS_CFG2_LED_1_DRV_EN 0x0010
420 #define DP83869_LEDS_CFG2_LED_0_POLARITY 0x0004
421 #define DP83869_LEDS_CFG2_LED_0_DRV_VAL 0x0002
422 #define DP83869_LEDS_CFG2_LED_0_DRV_EN 0x0001
423 
424 //LEDS_CFG3 register
425 #define DP83869_LEDS_CFG3_LEDS_BYPASS_STRETCHING 0x0004
426 #define DP83869_LEDS_CFG3_LEDS_BLINK_RATE 0x0003
427 #define DP83869_LEDS_CFG3_LEDS_BLINK_RATE_20HZ 0x0000
428 #define DP83869_LEDS_CFG3_LEDS_BLINK_RATE_10HZ 0x0001
429 #define DP83869_LEDS_CFG3_LEDS_BLINK_RATE_5HZ 0x0002
430 #define DP83869_LEDS_CFG3_LEDS_BLINK_RATE_2HZ 0x0003
431 
432 //GEN_CFG4 register
433 #define DP83869_GEN_CFG4_CFG_FAST_ANEG_EN 0x4000
434 #define DP83869_GEN_CFG4_CFG_FAST_ANEG_SEL_VAL 0x3000
435 #define DP83869_GEN_CFG4_CFG_ANEG_ADV_FD_EN 0x0800
436 #define DP83869_GEN_CFG4_RESTART_STATUS_BITS_EN 0x0400
437 #define DP83869_GEN_CFG4_CFG_ROBUST_AMDIX_EN 0x0200
438 #define DP83869_GEN_CFG4_CFG_FAST_AMDIX_EN 0x0100
439 #define DP83869_GEN_CFG4_INT_OE 0x0080
440 #define DP83869_GEN_CFG4_FORCE_INTERRUPT 0x0040
441 #define DP83869_GEN_CFG4_FORCE_1G_AUTONEG_EN 0x0008
442 #define DP83869_GEN_CFG4_TDR_FAIL 0x0004
443 #define DP83869_GEN_CFG4_TDR_DONE 0x0002
444 #define DP83869_GEN_CFG4_TDR_START 0x0001
445 
446 //GEN_CTRL register
447 #define DP83869_GEN_CTRL_SW_RESET 0x8000
448 #define DP83869_GEN_CTRL_SW_RESTART 0x4000
449 
450 //ANALOG_TEST_CTR register
451 #define DP83869_ANALOG_TEST_CTR_TM7_PULSE_SEL 0x0C00
452 #define DP83869_ANALOG_TEST_CTR_EXTND_TM7_100BT_MSB 0x0200
453 #define DP83869_ANALOG_TEST_CTR_EXTND_TM7_100BT_EN 0x0100
454 #define DP83869_ANALOG_TEST_CTR_TM_CH_SEL 0x00E0
455 #define DP83869_ANALOG_TEST_CTR_ANALOG_TEST 0x001F
456 
457 //GEN_CFG_ENH_AMIX register
458 #define DP83869_GEN_CFG_ENH_AMIX_CFG_FLD_WINDW_CNT 0x3E00
459 #define DP83869_GEN_CFG_ENH_AMIX_CFG_FAST_AMDIX_VAL 0x01F0
460 #define DP83869_GEN_CFG_ENH_AMIX_CFG_ROBUST_AMDIX_VAL 0x000F
461 
462 //GEN_CFG_FLD register
463 #define DP83869_GEN_CFG_FLD_CFG_FORCE_DROP_LINK_EN 0x8000
464 #define DP83869_GEN_CFG_FLD_FLD_BYPASS_MAX_WAIT_TIMER 0x4000
465 #define DP83869_GEN_CFG_FLD_SLICER_OUT_STUCK 0x2000
466 #define DP83869_GEN_CFG_FLD_FLD_STATUS 0x1F00
467 #define DP83869_GEN_CFG_FLD_CFG_FAST_LINK_DOWN_MODES 0x001F
468 
469 //GEN_CFG_FLD_THR register
470 #define DP83869_GEN_CFG_FLD_THR_ENERGY_WINDOW_LEN_FLD 0x0700
471 #define DP83869_GEN_CFG_FLD_THR_ENERGY_ON_FLD_THR 0x0070
472 #define DP83869_GEN_CFG_FLD_THR_ENERGY_LOST_FLD_THR 0x0007
473 
474 //GEN_CFG3 register
475 #define DP83869_GEN_CFG3_SGMII_AUTONEG_TIMER 0x0060
476 #define DP83869_GEN_CFG3_PORT_MIRRORING_MODE 0x0001
477 
478 //RGMII_CTRL register
479 #define DP83869_RGMII_CTRL_RGMII_RX_HALF_FULL_THR 0x0060
480 #define DP83869_RGMII_CTRL_RGMII_TX_HALF_FULL_THR 0x0018
481 #define DP83869_RGMII_CTRL_SUPPRESS_TX_ERR_EN 0x0004
482 #define DP83869_RGMII_CTRL_RGMII_TX_CLK_DELAY 0x0002
483 #define DP83869_RGMII_CTRL_RGMII_RX_CLK_DELAY 0x0001
484 
485 //RGMII_CTRL2 register
486 #define DP83869_RGMII_CTRL2_RGMII_AF_BYPASS_EN 0x0010
487 #define DP83869_RGMII_CTRL2_RGMII_AF_BYPASS_DLY_EN 0x0008
488 #define DP83869_RGMII_CTRL2_LOW_LATENCY_10_100_EN 0x0004
489 
490 //SGMII_AUTO_NEG_STATUS register
491 #define DP83869_SGMII_AUTO_NEG_STATUS_SGMII_PAGE_RX 0x0002
492 #define DP83869_SGMII_AUTO_NEG_STATUS_SGMII_AUTONEG_COMPLETE 0x0001
493 
494 //PRBS_TX_CHK_CTRL register
495 #define DP83869_PRBS_TX_CHK_CTRL_PRBS_TX_CHK_ERR_CNT 0x7F80
496 #define DP83869_PRBS_TX_CHK_CTRL_PRBS_TX_CHK_SYNC_LOSS 0x0020
497 #define DP83869_PRBS_TX_CHK_CTRL_PRBS_TX_CHK_LOCK_STS 0x0010
498 #define DP83869_PRBS_TX_CHK_CTRL_PRBS_TX_CHK_BYTE_CNT_OVF 0x0004
499 #define DP83869_PRBS_TX_CHK_CTRL_PRBS_TX_CHK_CNT_MODE 0x0002
500 #define DP83869_PRBS_TX_CHK_CTRL_PRBS_TX_CHK_EN 0x0001
501 
502 //PRBS_TX_CHK_BYTE_CNT register
503 #define DP83869_PRBS_TX_CHK_BYTE_CNT_PRBS_TX_CHK_BYTE_CNT 0xFFFF
504 
505 //G_100BT_REG0 register
506 #define DP83869_G_100BT_REG0_FAST_RX_DV 0x0001
507 
508 //SERDES_SYNC_STS register
509 #define DP83869_SERDES_SYNC_STS_SYNC_STATUS 0x0100
510 
511 //STRAP_STS register
512 #define DP83869_STRAP_STS_STRAP_LINK_LOSS_PASS_THRU 0x2000
513 #define DP83869_STRAP_STS_STRAP_MIRROR_EN 0x1000
514 #define DP83869_STRAP_STS_STRAP_OPMODE 0x0E00
515 #define DP83869_STRAP_STS_STRAP_PHY_ADD 0x01F0
516 #define DP83869_STRAP_STS_STRAP_ANEGSEL 0x000C
517 #define DP83869_STRAP_STS_STRAP_ANEG_EN 0x0002
518 #define DP83869_STRAP_STS_STRAP_RGMII_MII_SEL 0x0001
519 
520 //ANA_RGMII_DLL_CTRL register
521 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_EN_FORCE_VAL 0x0200
522 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_EN_FORCE_CTRL 0x0100
523 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL 0x00F0
524 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_0_25NS 0x0000
525 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_0_50NS 0x0010
526 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_0_75NS 0x0020
527 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_1_00NS 0x0030
528 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_1_25NS 0x0040
529 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_1_50NS 0x0050
530 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_1_75NS 0x0060
531 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_2_00NS 0x0070
532 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_2_25NS 0x0080
533 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_2_50NS 0x0090
534 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_2_75NS 0x00A0
535 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_3_00NS 0x00B0
536 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_3_25NS 0x00C0
537 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_3_50NS 0x00D0
538 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_3_75NS 0x00E0
539 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_TX_DELAY_CTRL_SL_4_00NS 0x00F0
540 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL 0x000F
541 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_0_25NS 0x0000
542 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_0_50NS 0x0001
543 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_0_75NS 0x0002
544 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_1_00NS 0x0003
545 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_1_25NS 0x0004
546 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_1_50NS 0x0005
547 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_1_75NS 0x0006
548 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_2_00NS 0x0007
549 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_2_25NS 0x0008
550 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_2_50NS 0x0009
551 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_2_75NS 0x000A
552 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_3_00NS 0x000B
553 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_3_25NS 0x000C
554 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_3_50NS 0x000D
555 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_3_75NS 0x000E
556 #define DP83869_ANA_RGMII_DLL_CTRL_DLL_RX_DELAY_CTRL_SL_4_00NS 0x000F
557 
558 //RXF_CFG register
559 #define DP83869_RXF_CFG_WOL_OUT_CLEAN 0x0800
560 #define DP83869_RXF_CFG_WOL_OUT_STRETCH 0x0600
561 #define DP83869_RXF_CFG_WOL_OUT_MODE 0x0100
562 #define DP83869_RXF_CFG_ENHANCED_MAC_SUPPORT 0x0080
563 #define DP83869_RXF_CFG_WAKE_ON_UCAST 0x0010
564 #define DP83869_RXF_CFG_WAKE_ON_BCAST 0x0004
565 #define DP83869_RXF_CFG_WAKE_ON_PATTERN 0x0002
566 #define DP83869_RXF_CFG_WAKE_ON_MAGIC 0x0001
567 
568 //RXF_STATUS register
569 #define DP83869_RXF_STATUS_SFD_ERR 0x0080
570 #define DP83869_RXF_STATUS_BAD_CRC 0x0040
571 #define DP83869_RXF_STATUS_UCAST_RCVD 0x0010
572 #define DP83869_RXF_STATUS_BCAST_RCVD 0x0004
573 #define DP83869_RXF_STATUS_PATTERN_RCVD 0x0002
574 #define DP83869_RXF_STATUS_MAGIC_RCVD 0x0001
575 
576 //IO_MUX_CFG register
577 #define DP83869_IO_MUX_CFG_CLK_O_SEL 0x1F00
578 #define DP83869_IO_MUX_CFG_CLK_O_DISABLE 0x0040
579 #define DP83869_IO_MUX_CFG_IO_IMPEDANCE_CTRL 0x001F
580 
581 //TDR_GEN_CFG1 register
582 #define DP83869_TDR_GEN_CFG1_TDR_CH_CD_BYPASS 0x1000
583 #define DP83869_TDR_GEN_CFG1_TDR_CROSS_MODE_DIS 0x0800
584 #define DP83869_TDR_GEN_CFG1_TDR_NLP_CHECK 0x0400
585 #define DP83869_TDR_GEN_CFG1_TDR_AVG_NUM 0x0380
586 #define DP83869_TDR_GEN_CFG1_TDR_SEG_NUM 0x0070
587 #define DP83869_TDR_GEN_CFG1_TDR_CYCLE_TIME 0x000F
588 
589 //TDR_GEN_CFG2 register
590 #define DP83869_TDR_GEN_CFG2_TDR_SILENCE_TH 0xFF00
591 #define DP83869_TDR_GEN_CFG2_TDR_POST_SILENCE_TIME 0x00C0
592 #define DP83869_TDR_GEN_CFG2_TDR_PRE_SILENCE_TIME 0x0030
593 
594 //TDR_SEG_DURATION register
595 #define DP83869_TDR_SEG_DURATION_TDR_SEG_DURATION_SEG3 0x7C00
596 #define DP83869_TDR_SEG_DURATION_TDR_SEG_DURATION_SEG2 0x03E0
597 #define DP83869_TDR_SEG_DURATION_TDR_SEG_DURATION_SEG1 0x001F
598 
599 //TDR_SEG_DURATION2 register
600 #define DP83869_TDR_SEG_DURATION2_TDR_SEG_DURATION_SEG5 0xFF00
601 #define DP83869_TDR_SEG_DURATION2_TDR_SEG_DURATION_SEG4 0x003F
602 
603 //TDR_GEN_CFG3 register
604 #define DP83869_TDR_GEN_CFG3_TDR_FWD_SHADOW_SEG4 0xF000
605 #define DP83869_TDR_GEN_CFG3_TDR_FWD_SHADOW_SEG3 0x0F00
606 #define DP83869_TDR_GEN_CFG3_TDR_FWD_SHADOW_SEG2 0x0070
607 #define DP83869_TDR_GEN_CFG3_TDR_FWD_SHADOW_SEG1 0x0007
608 
609 //TDR_GEN_CFG4 register
610 #define DP83869_TDR_GEN_CFG4_TDR_SDW_AVG_LOC 0x3800
611 #define DP83869_TDR_GEN_CFG4_TDR_TX_TYPE_SEG5 0x0100
612 #define DP83869_TDR_GEN_CFG4_TDR_TX_TYPE_SEG4 0x0080
613 #define DP83869_TDR_GEN_CFG4_TDR_TX_TYPE_SEG3 0x0040
614 #define DP83869_TDR_GEN_CFG4_TDR_TX_TYPE_SEG2 0x0020
615 #define DP83869_TDR_GEN_CFG4_TDR_TX_TYPE_SEG1 0x0010
616 #define DP83869_TDR_GEN_CFG4_TDR_FWD_SHADOW_SEG5 0x000F
617 
618 //TDR_PEAKS_LOC_A_0_1 register
619 #define DP83869_TDR_PEAKS_LOC_A_0_1_TDR_PEAKS_LOC_A_1 0xFF00
620 #define DP83869_TDR_PEAKS_LOC_A_0_1_TDR_PEAKS_LOC_A_0 0x00FF
621 
622 //TDR_PEAKS_LOC_A_2_3 register
623 #define DP83869_TDR_PEAKS_LOC_A_2_3_TDR_PEAKS_LOC_A_3 0xFF00
624 #define DP83869_TDR_PEAKS_LOC_A_2_3_TDR_PEAKS_LOC_A_2 0x00FF
625 
626 //TDR_PEAKS_LOC_A_4_B_0 register
627 #define DP83869_TDR_PEAKS_LOC_A_4_B_0_TDR_PEAKS_LOC_B_0 0xFF00
628 #define DP83869_TDR_PEAKS_LOC_A_4_B_0_TDR_PEAKS_LOC_A_4 0x00FF
629 
630 //TDR_PEAKS_LOC_B_1_2 register
631 #define DP83869_TDR_PEAKS_LOC_B_1_2_TDR_PEAKS_LOC_B_2 0xFF00
632 #define DP83869_TDR_PEAKS_LOC_B_1_2_TDR_PEAKS_LOC_B_1 0x00FF
633 
634 //TDR_PEAKS_LOC_B_3_4 register
635 #define DP83869_TDR_PEAKS_LOC_B_3_4_TDR_PEAKS_LOC_B_4 0xFF00
636 #define DP83869_TDR_PEAKS_LOC_B_3_4_TDR_PEAKS_LOC_B_3 0x00FF
637 
638 //TDR_PEAKS_LOC_C_0_1 register
639 #define DP83869_TDR_PEAKS_LOC_C_0_1_TDR_PEAKS_LOC_C_1 0xFF00
640 #define DP83869_TDR_PEAKS_LOC_C_0_1_TDR_PEAKS_LOC_C_0 0x00FF
641 
642 //TDR_PEAKS_LOC_C_2_3 register
643 #define DP83869_TDR_PEAKS_LOC_C_2_3_TDR_PEAKS_LOC_C_3 0xFF00
644 #define DP83869_TDR_PEAKS_LOC_C_2_3_TDR_PEAKS_LOC_C_2 0x00FF
645 
646 //TDR_PEAKS_LOC_C_4_D_0 register
647 #define DP83869_TDR_PEAKS_LOC_C_4_D_0_TDR_PEAKS_LOC_D_0 0xFF00
648 #define DP83869_TDR_PEAKS_LOC_C_4_D_0_TDR_PEAKS_LOC_C_4 0x00FF
649 
650 //TDR_PEAKS_LOC_D_1_2 register
651 #define DP83869_TDR_PEAKS_LOC_D_1_2_TDR_PEAKS_LOC_D_2 0xFF00
652 #define DP83869_TDR_PEAKS_LOC_D_1_2_TDR_PEAKS_LOC_D_1 0x00FF
653 
654 //TDR_PEAKS_LOC_D_3_4 register
655 #define DP83869_TDR_PEAKS_LOC_D_3_4_TDR_PEAKS_LOC_D_4 0xFF00
656 #define DP83869_TDR_PEAKS_LOC_D_3_4_TDR_PEAKS_LOC_D_3 0x00FF
657 
658 //TDR_GEN_STATUS register
659 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_CROSS_MODE_D 0x0800
660 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_CROSS_MODE_C 0x0400
661 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_CROSS_MODE_B 0x0200
662 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_CROSS_MODE_A 0x0100
663 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_OVERFLOW_D 0x0080
664 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_OVERFLOW_C 0x0040
665 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_OVERFLOW_B 0x0020
666 #define DP83869_TDR_GEN_STATUS_TDR_P_LOC_OVERFLOW_A 0x0010
667 #define DP83869_TDR_GEN_STATUS_TDR_SEG1_HIGH_CROSS_D 0x0008
668 #define DP83869_TDR_GEN_STATUS_TDR_SEG1_HIGH_CROSS_C 0x0004
669 #define DP83869_TDR_GEN_STATUS_TDR_SEG1_HIGH_CROSS_B 0x0002
670 #define DP83869_TDR_GEN_STATUS_TDR_SEG1_HIGH_CROSS_A 0x0001
671 
672 //TDR_PEAKS_SIGN_A_B register
673 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_B_4 0x0200
674 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_B_3 0x0100
675 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_B_2 0x0080
676 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_B_1 0x0040
677 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_B_0 0x0020
678 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_A_4 0x0010
679 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_A_3 0x0008
680 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_A_2 0x0004
681 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_A_1 0x0002
682 #define DP83869_TDR_PEAKS_SIGN_A_B_TDR_PEAKS_SIGN_A_0 0x0001
683 
684 //TDR_PEAKS_SIGN_C_D register
685 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_D_4 0x0200
686 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_D_3 0x0100
687 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_D_2 0x0080
688 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_D_1 0x0040
689 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_D_0 0x0020
690 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_C_4 0x0010
691 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_C_3 0x0008
692 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_C_2 0x0004
693 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_C_1 0x0002
694 #define DP83869_TDR_PEAKS_SIGN_C_D_TDR_PEAKS_SIGN_C_0 0x0001
695 
696 //OP_MODE_DECODE register
697 #define DP83869_OP_MODE_DECODE_BRIDGE_MODE_RGMII_MAC 0x0040
698 #define DP83869_OP_MODE_DECODE_RGMII_MII_SEL 0x0020
699 #define DP83869_OP_MODE_DECODE_CFG_OPMODE 0x0007
700 
701 //GPIO_MUX_CTRL register
702 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL 0x00F0
703 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_CLK_OUT 0x0000
704 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_INT 0x0020
705 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_LINK 0x0030
706 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_TX_SFD 0x0050
707 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_RX_SFD 0x0060
708 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_WOL 0x0070
709 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_ED 0x0080
710 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_PRBS_ERR 0x0090
711 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_LED_2 0x00A0
712 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_LED_3 0x00B0
713 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_CRS 0x00C0
714 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_COL 0x00D0
715 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_CONST_0 0x00E0
716 #define DP83869_GPIO_MUX_CTRL_JTAG_TDO_GPIO_1_CTRL_CONST_1 0x00F0
717 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL 0x000F
718 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_CLK_OUT 0x0000
719 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_INT 0x0002
720 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_LINK 0x0003
721 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_TX_SFD 0x0005
722 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_RX_SFD 0x0006
723 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_WOL 0x0007
724 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_ED 0x0008
725 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_PRBS_ERR 0x0009
726 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_LED_2 0x000A
727 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_LED_3 0x000B
728 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_CRS 0x000C
729 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_COL 0x000D
730 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_CONST_0 0x000E
731 #define DP83869_GPIO_MUX_CTRL_LED_2_GPIO_0_CTRL_CONST_1 0x000F
732 
733 //FX_CTRL register
734 #define DP83869_FX_CTRL_CTRL0_RESET 0x8000
735 #define DP83869_FX_CTRL_CTRL0_LOOPBACK 0x4000
736 #define DP83869_FX_CTRL_CTRL0_SPEED_SEL_LSB 0x2000
737 #define DP83869_FX_CTRL_CTRL0_ANEG_EN 0x1000
738 #define DP83869_FX_CTRL_CTRL0_PWRDN 0x0800
739 #define DP83869_FX_CTRL_CTRL0_ISOLATE 0x0400
740 #define DP83869_FX_CTRL_CTRL0_RESTART_AN 0x0200
741 #define DP83869_FX_CTRL_CTRL0_DUPLEX_MODE 0x0100
742 #define DP83869_FX_CTRL_CTRL0_COL_TEST 0x0080
743 #define DP83869_FX_CTRL_CTRL0_SPEED_SEL_MSB 0x0040
744 
745 //FX_STS register
746 #define DP83869_FX_STS_STTS_100B_T4 0x8000
747 #define DP83869_FX_STS_STTS_100B_X_FD 0x4000
748 #define DP83869_FX_STS_STTS_100B_X_HD 0x2000
749 #define DP83869_FX_STS_STTS_10B_FD 0x1000
750 #define DP83869_FX_STS_STTS_10B_HD 0x0800
751 #define DP83869_FX_STS_STTS_100B_T2_FD 0x0400
752 #define DP83869_FX_STS_STTS_100B_T2_HD 0x0200
753 #define DP83869_FX_STS_STTS_EXTENDED_STATUS 0x0100
754 #define DP83869_FX_STS_STTS_MF_PREAMBLE_SUPRSN 0x0040
755 #define DP83869_FX_STS_STTS_ANEG_COMPLETE 0x0020
756 #define DP83869_FX_STS_STTS_REMOTE_FAULT 0x0010
757 #define DP83869_FX_STS_STTS_ANEG_ABILITY 0x0008
758 #define DP83869_FX_STS_STTS_LINK_STATUS 0x0004
759 #define DP83869_FX_STS_STTS_JABBER_DET 0x0002
760 #define DP83869_FX_STS_STTS_EXTENDED_CAPABILITY 0x0001
761 
762 //FX_PHYID1 register
763 #define DP83869_FX_PHYID1_OUI_6_19_FIBER 0x3FFF
764 #define DP83869_FX_PHYID1_OUI_6_19_FIBER_DEFAULT 0x2000
765 
766 //FX_PHYID2 register
767 #define DP83869_FX_PHYID2_OUI_0_5_FIBER 0xFC00
768 #define DP83869_FX_PHYID2_OUI_0_5_FIBER_DEFAULT 0xA000
769 #define DP83869_FX_PHYID2_MODEL_NUM_FIBER 0x03F0
770 #define DP83869_FX_PHYID2_MODEL_NUM_FIBER_DEFAULT 0x00F0
771 #define DP83869_FX_PHYID2_REVISION_NUM_FIBER 0x000F
772 #define DP83869_FX_PHYID2_REVISION_NUM_FIBER_DEFAULT 0x0001
773 
774 //FX_ANADV register
775 #define DP83869_FX_ANADV_BP_NEXT_PAGE 0x8000
776 #define DP83869_FX_ANADV_BP_ACK 0x4000
777 #define DP83869_FX_ANADV_BP_REMOTE_FAULT 0x3000
778 #define DP83869_FX_ANADV_BP_ASYMMETRIC_PAUSE 0x0100
779 #define DP83869_FX_ANADV_BP_PAUSE 0x0080
780 #define DP83869_FX_ANADV_BP_HALF_DUPLEX 0x0040
781 #define DP83869_FX_ANADV_BP_FULL_DUPLEX 0x0020
782 #define DP83869_FX_ANADV_BP_RSVD1 0x001F
783 
784 //FX_LPABL register
785 #define DP83869_FX_LPABL_LP_ABILITY_NEXT_PAGE 0x8000
786 #define DP83869_FX_LPABL_LP_ABILITY_ACK 0x4000
787 #define DP83869_FX_LPABL_LP_ABILITY_REMOTE_FAULT 0x3000
788 #define DP83869_FX_LPABL_LP_ABILITY_ASYMMETRIC_PAUSE 0x0100
789 #define DP83869_FX_LPABL_LP_ABILITY_PAUSE 0x0080
790 #define DP83869_FX_LPABL_LP_ABILITY_HALF_DUPLEX 0x0040
791 #define DP83869_FX_LPABL_LP_ABILITY_FULL_DUPLEX 0x0020
792 
793 //FX_ANEXP register
794 #define DP83869_FX_ANEXP_AN_EXP_LP_NEXT_PAGE_ABLE 0x0008
795 #define DP83869_FX_ANEXP_AN_EXP_LOCAL_NEXT_PAGE_ABLE 0x0004
796 #define DP83869_FX_ANEXP_AN_EXP_PAGE_RECEIVED 0x0002
797 #define DP83869_FX_ANEXP_AN_EXP_LP_AUTO_NEG_ABLE 0x0001
798 
799 //FX_LOCNP register
800 #define DP83869_FX_LOCNP_NP_TX_NEXT_PAGE 0x8000
801 #define DP83869_FX_LOCNP_NP_TX_MESSAGE_PAGE_MODE 0x2000
802 #define DP83869_FX_LOCNP_NP_TX_ACK_2 0x1000
803 #define DP83869_FX_LOCNP_NP_TX_TOGGLE 0x0800
804 #define DP83869_FX_LOCNP_NP_TX_MESSAGE_FIELD 0x07FF
805 
806 //FX_LPNP register
807 #define DP83869_FX_LPNP_LP_NP_NEXT_PAGE 0x8000
808 #define DP83869_FX_LPNP_LP_NP_ACK 0x4000
809 #define DP83869_FX_LPNP_LP_NP_MESSAGE_PAGE_MODE 0x2000
810 #define DP83869_FX_LPNP_LP_NP_ACK_2 0x1000
811 #define DP83869_FX_LPNP_LP_NP_TOGGLE 0x0800
812 #define DP83869_FX_LPNP_LP_NP_MESSAGE_FIELD 0x07FF
813 
814 //FX_INT_EN register
815 #define DP83869_FX_INT_EN_FEF_FAULT_EN 0x0200
816 #define DP83869_FX_INT_EN_TX_FIFO_FULL_EN 0x0100
817 #define DP83869_FX_INT_EN_TX_FIFO_EMPTY_EN 0x0080
818 #define DP83869_FX_INT_EN_RX_FIFO_FULL_EN 0x0040
819 #define DP83869_FX_INT_EN_RX_FIFO_EMPTY_EN 0x0020
820 #define DP83869_FX_INT_EN_LINK_STS_CHANGE_EN 0x0010
821 #define DP83869_FX_INT_EN_LP_FAULT_RX_EN 0x0008
822 #define DP83869_FX_INT_EN_PRI_RES_FAIL_EN 0x0004
823 #define DP83869_FX_INT_EN_LP_NP_RX_EN 0x0002
824 #define DP83869_FX_INT_EN_LP_BP_RX_EN 0x0001
825 
826 //FX_INT_STS register
827 #define DP83869_FX_INT_STS_FEF_FAULT 0x0200
828 #define DP83869_FX_INT_STS_TX_FIFO_FULL 0x0100
829 #define DP83869_FX_INT_STS_TX_FIFO_EMPTY 0x0080
830 #define DP83869_FX_INT_STS_RX_FIFO_FULL 0x0040
831 #define DP83869_FX_INT_STS_RX_FIFO_EMPTY 0x0020
832 #define DP83869_FX_INT_STS_LINK_STS_CHANGE 0x0010
833 #define DP83869_FX_INT_STS_LP_FAULT_RX 0x0008
834 #define DP83869_FX_INT_STS_PRI_RES_FAIL 0x0004
835 #define DP83869_FX_INT_STS_LP_NP_RX 0x0002
836 #define DP83869_FX_INT_STS_LP_BP_RX 0x0001
837 
838 //C++ guard
839 #ifdef __cplusplus
840 extern "C" {
841 #endif
842 
843 //DP83869 Ethernet PHY driver
844 extern const PhyDriver dp83869PhyDriver;
845 
846 //DP83869 related functions
847 error_t dp83869Init(NetInterface *interface);
848 void dp83869InitHook(NetInterface *interface);
849 
850 void dp83869Tick(NetInterface *interface);
851 
852 void dp83869EnableIrq(NetInterface *interface);
853 void dp83869DisableIrq(NetInterface *interface);
854 
855 void dp83869EventHandler(NetInterface *interface);
856 
857 void dp83869WritePhyReg(NetInterface *interface, uint8_t address,
858  uint16_t data);
859 
860 uint16_t dp83869ReadPhyReg(NetInterface *interface, uint8_t address);
861 
862 void dp83869DumpPhyReg(NetInterface *interface);
863 
864 void dp83869WriteMmdReg(NetInterface *interface, uint8_t devAddr,
865  uint16_t regAddr, uint16_t data);
866 
867 uint16_t dp83869ReadMmdReg(NetInterface *interface, uint8_t devAddr,
868  uint16_t regAddr);
869 
870 //C++ guard
871 #ifdef __cplusplus
872 }
873 #endif
874 
875 #endif
void dp83869WritePhyReg(NetInterface *interface, uint8_t address, uint16_t data)
Write PHY register.
void dp83869EventHandler(NetInterface *interface)
DP83869 event handler.
void dp83869WriteMmdReg(NetInterface *interface, uint8_t devAddr, uint16_t regAddr, uint16_t data)
Write MMD register.
void dp83869Tick(NetInterface *interface)
DP83869 timer handler.
void dp83869InitHook(NetInterface *interface)
DP83869 custom configuration.
uint16_t dp83869ReadPhyReg(NetInterface *interface, uint8_t address)
Read PHY register.
const PhyDriver dp83869PhyDriver
DP83869 Ethernet PHY driver.
void dp83869DisableIrq(NetInterface *interface)
Disable interrupts.
void dp83869DumpPhyReg(NetInterface *interface)
Dump PHY registers for debugging purpose.
uint16_t dp83869ReadMmdReg(NetInterface *interface, uint8_t devAddr, uint16_t regAddr)
Read MMD register.
error_t dp83869Init(NetInterface *interface)
DP83869 PHY transceiver initialization.
void dp83869EnableIrq(NetInterface *interface)
Enable interrupts.
error_t
Error codes.
Definition: error.h:43
uint8_t data[]
Definition: ethernet.h:222
Ipv6Addr address[]
Definition: ipv6.h:316
uint16_t regAddr
#define NetInterface
Definition: net.h:36
Network interface controller abstraction layer.
Ethernet PHY driver.
Definition: nic.h:308