]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/usb/net/if_urereg.h
MFV r338866: 9700 ZFS resilvered mirror does not balance reads
[FreeBSD/FreeBSD.git] / sys / dev / usb / net / if_urereg.h
1 /*-
2  * Copyright (c) 2015-2016 Kevin Lo <kevlo@FreeBSD.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28
29 #define URE_CONFIG_IDX          0       /* config number 1 */
30 #define URE_IFACE_IDX           0
31
32 #define URE_CTL_READ            0x01
33 #define URE_CTL_WRITE           0x02
34
35 #define URE_TIMEOUT             1000
36 #define URE_PHY_TIMEOUT         2000
37
38 #define URE_BYTE_EN_DWORD       0xff
39 #define URE_BYTE_EN_WORD        0x33
40 #define URE_BYTE_EN_BYTE        0x11
41 #define URE_BYTE_EN_SIX_BYTES   0x3f
42
43 #define URE_MAX_FRAMELEN        (ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN)
44
45 #define URE_PLA_IDR             0xc000
46 #define URE_PLA_RCR             0xc010
47 #define URE_PLA_RMS             0xc016
48 #define URE_PLA_RXFIFO_CTRL0    0xc0a0
49 #define URE_PLA_RXFIFO_CTRL1    0xc0a4
50 #define URE_PLA_RXFIFO_CTRL2    0xc0a8
51 #define URE_PLA_DMY_REG0        0xc0b0
52 #define URE_PLA_FMC             0xc0b4
53 #define URE_PLA_CFG_WOL         0xc0b6
54 #define URE_PLA_TEREDO_CFG      0xc0bc
55 #define URE_PLA_MAR0            0xcd00
56 #define URE_PLA_MAR4            0xcd04
57 #define URE_PLA_BACKUP          0xd000
58 #define URE_PAL_BDC_CR          0xd1a0
59 #define URE_PLA_TEREDO_TIMER    0xd2cc
60 #define URE_PLA_REALWOW_TIMER   0xd2e8
61 #define URE_PLA_LEDSEL          0xdd90
62 #define URE_PLA_LED_FEATURE     0xdd92
63 #define URE_PLA_PHYAR           0xde00
64 #define URE_PLA_BOOT_CTRL       0xe004
65 #define URE_PLA_GPHY_INTR_IMR   0xe022
66 #define URE_PLA_EEE_CR          0xe040
67 #define URE_PLA_EEEP_CR         0xe080
68 #define URE_PLA_MAC_PWR_CTRL    0xe0c0
69 #define URE_PLA_MAC_PWR_CTRL2   0xe0ca
70 #define URE_PLA_MAC_PWR_CTRL3   0xe0cc
71 #define URE_PLA_MAC_PWR_CTRL4   0xe0ce
72 #define URE_PLA_WDT6_CTRL       0xe428
73 #define URE_PLA_TCR0            0xe610
74 #define URE_PLA_TCR1            0xe612
75 #define URE_PLA_MTPS            0xe615
76 #define URE_PLA_TXFIFO_CTRL     0xe618
77 #define URE_PLA_RSTTELLY        0xe800
78 #define URE_PLA_CR              0xe813
79 #define URE_PLA_CRWECR          0xe81c
80 #define URE_PLA_CONFIG5         0xe822
81 #define URE_PLA_PHY_PWR         0xe84c
82 #define URE_PLA_OOB_CTRL        0xe84f
83 #define URE_PLA_CPCR            0xe854
84 #define URE_PLA_MISC_0          0xe858
85 #define URE_PLA_MISC_1          0xe85a
86 #define URE_PLA_OCP_GPHY_BASE   0xe86c
87 #define URE_PLA_TELLYCNT        0xe890
88 #define URE_PLA_SFF_STS_7       0xe8de
89 #define URE_GMEDIASTAT          0xe908
90
91 #define URE_USB_USB2PHY         0xb41e
92 #define URE_USB_SSPHYLINK2      0xb428
93 #define URE_USB_U2P3_CTRL       0xb460
94 #define URE_USB_CSR_DUMMY1      0xb464
95 #define URE_USB_CSR_DUMMY2      0xb466
96 #define URE_USB_DEV_STAT        0xb808
97 #define URE_USB_CONNECT_TIMER   0xcbf8
98 #define URE_USB_BURST_SIZE      0xcfc0
99 #define URE_USB_USB_CTRL        0xd406
100 #define URE_USB_PHY_CTRL        0xd408
101 #define URE_USB_TX_AGG          0xd40a
102 #define URE_USB_RX_BUF_TH       0xd40c
103 #define URE_USB_USB_TIMER       0xd428
104 #define URE_USB_RX_EARLY_AGG    0xd42c
105 #define URE_USB_PM_CTRL_STATUS  0xd432
106 #define URE_USB_TX_DMA          0xd434
107 #define URE_USB_TOLERANCE       0xd490
108 #define URE_USB_LPM_CTRL        0xd41a
109 #define URE_USB_UPS_CTRL        0xd800
110 #define URE_USB_MISC_0          0xd81a
111 #define URE_USB_POWER_CUT       0xd80a
112 #define URE_USB_AFE_CTRL2       0xd824
113 #define URE_USB_WDT11_CTRL      0xe43c
114
115 /* OCP Registers. */
116 #define URE_OCP_ALDPS_CONFIG    0x2010
117 #define URE_OCP_EEE_CONFIG1     0x2080
118 #define URE_OCP_EEE_CONFIG2     0x2092
119 #define URE_OCP_EEE_CONFIG3     0x2094
120 #define URE_OCP_BASE_MII        0xa400
121 #define URE_OCP_EEE_AR          0xa41a
122 #define URE_OCP_EEE_DATA        0xa41c
123 #define URE_OCP_PHY_STATUS      0xa420
124 #define URE_OCP_POWER_CFG       0xa430
125 #define URE_OCP_EEE_CFG         0xa432
126 #define URE_OCP_SRAM_ADDR       0xa436
127 #define URE_OCP_SRAM_DATA       0xa438
128 #define URE_OCP_DOWN_SPEED      0xa442
129 #define URE_OCP_EEE_ABLE        0xa5c4
130 #define URE_OCP_EEE_ADV         0xa5d0
131 #define URE_OCP_EEE_LPABLE      0xa5d2
132 #define URE_OCP_PHY_STATE       0xa708
133 #define URE_OCP_ADC_CFG         0xbc06
134
135 /* SRAM Register. */
136 #define URE_SRAM_LPF_CFG        0x8012
137 #define URE_SRAM_10M_AMP1       0x8080
138 #define URE_SRAM_10M_AMP2       0x8082
139 #define URE_SRAM_IMPEDANCE      0x8084
140
141 /* PLA_RCR */
142 #define URE_RCR_AAP             0x00000001
143 #define URE_RCR_APM             0x00000002
144 #define URE_RCR_AM              0x00000004
145 #define URE_RCR_AB              0x00000008
146 #define URE_RCR_ACPT_ALL        \
147         (URE_RCR_AAP | URE_RCR_APM | URE_RCR_AM | URE_RCR_AB)
148
149 /* PLA_RXFIFO_CTRL0 */
150 #define URE_RXFIFO_THR1_NORMAL  0x00080002
151 #define URE_RXFIFO_THR1_OOB     0x01800003
152
153 /* PLA_RXFIFO_CTRL1 */
154 #define URE_RXFIFO_THR2_FULL    0x00000060
155 #define URE_RXFIFO_THR2_HIGH    0x00000038
156 #define URE_RXFIFO_THR2_OOB     0x0000004a
157 #define URE_RXFIFO_THR2_NORMAL  0x00a0
158
159 /* PLA_RXFIFO_CTRL2 */
160 #define URE_RXFIFO_THR3_FULL    0x00000078
161 #define URE_RXFIFO_THR3_HIGH    0x00000048
162 #define URE_RXFIFO_THR3_OOB     0x0000005a
163 #define URE_RXFIFO_THR3_NORMAL  0x0110
164
165 /* PLA_TXFIFO_CTRL */
166 #define URE_TXFIFO_THR_NORMAL   0x00400008
167 #define URE_TXFIFO_THR_NORMAL2  0x01000008
168
169 /* PLA_DMY_REG0 */
170 #define URE_ECM_ALDPS           0x0002
171
172 /* PLA_FMC */
173 #define URE_FMC_FCR_MCU_EN      0x0001
174
175 /* PLA_EEEP_CR */
176 #define URE_EEEP_CR_EEEP_TX     0x0002
177
178 /* PLA_WDT6_CTRL */
179 #define URE_WDT6_SET_MODE       0x001
180
181 /* PLA_TCR0 */
182 #define URE_TCR0_TX_EMPTY       0x0800
183 #define URE_TCR0_AUTO_FIFO      0x0080
184
185 /* PLA_TCR1 */
186 #define URE_VERSION_MASK        0x7cf0
187
188 /* PLA_CR */
189 #define URE_CR_RST              0x10
190 #define URE_CR_RE               0x08
191 #define URE_CR_TE               0x04
192
193 /* PLA_CRWECR */
194 #define URE_CRWECR_NORAML       0x00
195 #define URE_CRWECR_CONFIG       0xc0
196
197 /* PLA_OOB_CTRL */
198 #define URE_NOW_IS_OOB          0x80    
199 #define URE_TXFIFO_EMPTY        0x20    
200 #define URE_RXFIFO_EMPTY        0x10    
201 #define URE_LINK_LIST_READY     0x02    
202 #define URE_DIS_MCU_CLROOB      0x01    
203 #define URE_FIFO_EMPTY          (URE_TXFIFO_EMPTY | URE_RXFIFO_EMPTY)
204
205 /* PLA_MISC_1 */
206 #define URE_RXDY_GATED_EN       0x0008  
207
208 /* PLA_SFF_STS_7 */
209 #define URE_RE_INIT_LL          0x8000  
210 #define URE_MCU_BORW_EN         0x4000  
211
212 /* PLA_CPCR */
213 #define URE_CPCR_RX_VLAN        0x0040
214
215 /* PLA_TEREDO_CFG */
216 #define URE_TEREDO_SEL                  0x8000
217 #define URE_TEREDO_WAKE_MASK            0x7f00
218 #define URE_TEREDO_RS_EVENT_MASK        0x00fe
219 #define URE_OOB_TEREDO_EN               0x0001
220
221 /* PAL_BDC_CR */
222 #define URE_ALDPS_PROXY_MODE    0x0001
223
224 /* PLA_CONFIG5 */
225 #define URE_LAN_WAKE_EN         0x0002
226
227 /* PLA_LED_FEATURE */
228 #define URE_LED_MODE_MASK       0x0700
229
230 /* PLA_PHY_PWR */
231 #define URE_TX_10M_IDLE_EN      0x0080
232 #define URE_PFM_PWM_SWITCH      0x0040
233
234 /* PLA_MAC_PWR_CTRL */
235 #define URE_D3_CLK_GATED_EN     0x00004000
236 #define URE_MCU_CLK_RATIO       0x07010f07
237 #define URE_MCU_CLK_RATIO_MASK  0x0f0f0f0f
238 #define URE_ALDPS_SPDWN_RATIO   0x0f87
239
240 /* PLA_MAC_PWR_CTRL2 */
241 #define URE_EEE_SPDWN_RATIO     0x8007
242
243 /* PLA_MAC_PWR_CTRL3 */
244 #define URE_PKT_AVAIL_SPDWN_EN  0x0100
245 #define URE_SUSPEND_SPDWN_EN    0x0004
246 #define URE_U1U2_SPDWN_EN       0x0002
247 #define URE_L1_SPDWN_EN         0x0001
248
249 /* PLA_MAC_PWR_CTRL4 */
250 #define URE_PWRSAVE_SPDWN_EN    0x1000
251 #define URE_RXDV_SPDWN_EN       0x0800
252 #define URE_TX10MIDLE_EN        0x0100
253 #define URE_TP100_SPDWN_EN      0x0020
254 #define URE_TP500_SPDWN_EN      0x0010
255 #define URE_TP1000_SPDWN_EN     0x0008
256 #define URE_EEE_SPDWN_EN        0x0001
257
258 /* PLA_GPHY_INTR_IMR */
259 #define URE_GPHY_STS_MSK        0x0001
260 #define URE_SPEED_DOWN_MSK      0x0002
261 #define URE_SPDWN_RXDV_MSK      0x0004
262 #define URE_SPDWN_LINKCHG_MSK   0x0008
263
264 /* PLA_PHYAR */
265 #define URE_PHYAR_PHYDATA       0x0000ffff
266 #define URE_PHYAR_BUSY          0x80000000
267
268 /* PLA_EEE_CR */
269 #define URE_EEE_RX_EN           0x0001
270 #define URE_EEE_TX_EN           0x0002
271
272 /* PLA_BOOT_CTRL */
273 #define URE_AUTOLOAD_DONE       0x0002
274
275 /* USB_USB2PHY */
276 #define URE_USB2PHY_SUSPEND     0x0001
277 #define URE_USB2PHY_L1          0x0002
278
279 /* USB_SSPHYLINK2 */
280 #define URE_PWD_DN_SCALE_MASK   0x3ffe
281 #define URE_PWD_DN_SCALE(x)     ((x) << 1)
282
283 /* USB_CSR_DUMMY1 */
284 #define URE_DYNAMIC_BURST       0x0001
285
286 /* USB_CSR_DUMMY2 */
287 #define URE_EP4_FULL_FC         0x0001
288
289 /* USB_DEV_STAT */
290 #define URE_STAT_SPEED_MASK     0x0006
291 #define URE_STAT_SPEED_HIGH     0x0000
292 #define URE_STAT_SPEED_FULL     0x0001
293
294 /* USB_TX_AGG */
295 #define URE_TX_AGG_MAX_THRESHOLD        0x03
296
297 /* USB_RX_BUF_TH */
298 #define URE_RX_THR_SUPER        0x0c350180
299 #define URE_RX_THR_HIGH         0x7a120180
300 #define URE_RX_THR_SLOW         0xffff0180
301
302 /* USB_TX_DMA */
303 #define URE_TEST_MODE_DISABLE   0x00000001
304 #define URE_TX_SIZE_ADJUST1     0x00000100
305
306 /* USB_UPS_CTRL */
307 #define URE_POWER_CUT           0x0100
308
309 /* USB_PM_CTRL_STATUS */
310 #define URE_RESUME_INDICATE     0x0001
311
312 /* USB_USB_CTRL */
313 #define URE_RX_AGG_DISABLE      0x0010
314 #define URE_RX_ZERO_EN          0x0080
315
316 /* USB_U2P3_CTRL */
317 #define URE_U2P3_ENABLE         0x0001
318
319 /* USB_POWER_CUT */
320 #define URE_PWR_EN              0x0001
321 #define URE_PHASE2_EN           0x0008
322
323 /* USB_MISC_0 */
324 #define URE_PCUT_STATUS         0x0001
325
326 /* USB_RX_EARLY_TIMEOUT */
327 #define URE_COALESCE_SUPER      85000U
328 #define URE_COALESCE_HIGH       250000U
329 #define URE_COALESCE_SLOW       524280U
330
331 /* USB_WDT11_CTRL */
332 #define URE_TIMER11_EN          0x0001
333
334 /* USB_LPM_CTRL */
335 #define URE_FIFO_EMPTY_1FB      0x30
336 #define URE_LPM_TIMER_MASK      0x0c
337 #define URE_LPM_TIMER_500MS     0x04
338 #define URE_LPM_TIMER_500US     0x0c
339 #define URE_ROK_EXIT_LPM        0x02
340
341 /* USB_AFE_CTRL2 */
342 #define URE_SEN_VAL_MASK        0xf800
343 #define URE_SEN_VAL_NORMAL      0xa000
344 #define URE_SEL_RXIDLE          0x0100
345
346 /* OCP_ALDPS_CONFIG */
347 #define URE_ENPWRSAVE           0x8000  
348 #define URE_ENPDNPS             0x0200  
349 #define URE_LINKENA             0x0100  
350 #define URE_DIS_SDSAVE          0x0010
351
352 /* OCP_PHY_STATUS */
353 #define URE_PHY_STAT_MASK       0x0007
354 #define URE_PHY_STAT_LAN_ON     3       
355 #define URE_PHY_STAT_PWRDN      5
356
357 /* OCP_POWER_CFG */
358 #define URE_EEE_CLKDIV_EN       0x8000
359 #define URE_EN_ALDPS            0x0004
360 #define URE_EN_10M_PLLOFF       0x0001
361
362 /* OCP_EEE_CFG */
363 #define URE_CTAP_SHORT_EN       0x0040
364 #define URE_EEE10_EN            0x0010
365
366 /* OCP_DOWN_SPEED */
367 #define URE_EN_10M_BGOFF        0x0080
368
369 /* OCP_PHY_STATE */
370 #define URE_TXDIS_STATE         0x01
371 #define URE_ABD_STATE           0x02
372
373 /* OCP_ADC_CFG */
374 #define URE_CKADSEL_L           0x0100
375 #define URE_ADC_EN              0x0080
376 #define URE_EN_EMI_L            0x0040
377
378 #define URE_MCU_TYPE_PLA        0x0100
379 #define URE_MCU_TYPE_USB        0x0000
380
381 #define GET_MII(sc)             uether_getmii(&(sc)->sc_ue)
382
383 struct ure_intrpkt {
384         uint8_t ure_tsr;
385         uint8_t ure_rsr;
386         uint8_t ure_gep_msr;
387         uint8_t ure_waksr;
388         uint8_t ure_txok_cnt;
389         uint8_t ure_rxlost_cnt;
390         uint8_t ure_crcerr_cnt;
391         uint8_t ure_col_cnt;
392 } __packed;
393
394 struct ure_rxpkt {
395         uint32_t ure_pktlen;
396 #define URE_RXPKT_LEN_MASK      0x7fff
397         uint32_t ure_rsvd0;
398         uint32_t ure_rsvd1;
399         uint32_t ure_rsvd2;
400         uint32_t ure_rsvd3;
401         uint32_t ure_rsvd4;
402 } __packed;
403
404 struct ure_txpkt {
405         uint32_t ure_pktlen;
406 #define URE_TKPKT_TX_FS         (1 << 31)
407 #define URE_TKPKT_TX_LS         (1 << 30)
408 #define URE_TXPKT_LEN_MASK      0xffff
409         uint32_t ure_rsvd0;
410 } __packed;
411
412 enum {
413         URE_BULK_DT_WR,
414         URE_BULK_DT_RD,
415         URE_N_TRANSFER,
416 };
417
418 struct ure_softc {
419         struct usb_ether        sc_ue;
420         struct mtx              sc_mtx;
421         struct usb_xfer         *sc_xfer[URE_N_TRANSFER];
422
423         int                     sc_phyno;
424
425         u_int                   sc_flags;
426 #define URE_FLAG_LINK           0x0001
427 #define URE_FLAG_8152           0x1000  /* RTL8152 */
428
429         u_int                   sc_chip;
430 #define URE_CHIP_VER_4C00       0x01
431 #define URE_CHIP_VER_4C10       0x02
432 #define URE_CHIP_VER_5C00       0x04
433 #define URE_CHIP_VER_5C10       0x08
434 #define URE_CHIP_VER_5C20       0x10
435 #define URE_CHIP_VER_5C30       0x20
436 };
437
438 #define URE_LOCK(_sc)           mtx_lock(&(_sc)->sc_mtx)
439 #define URE_UNLOCK(_sc)         mtx_unlock(&(_sc)->sc_mtx)
440 #define URE_LOCK_ASSERT(_sc, t) mtx_assert(&(_sc)->sc_mtx, t)