xref: /illumos-gate/usr/src/uts/common/io/nge/nge_chip.h (revision 129b3e6c5b0ac55b5021a4c38db6387b6acdaaf1)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SYS_NGE_CHIP_H
28 #define	_SYS_NGE_CHIP_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 #include "nge.h"
35 
36 #define	VENDOR_ID_NVIDIA	0x10de
37 
38 #define	DEVICE_ID_MCP04_37	0x37
39 #define	DEVICE_ID_MCP04_38	0x38
40 #define	DEVICE_ID_CK804_56	0x56
41 #define	DEVICE_ID_CK804_57	0x57
42 #define	DEVICE_ID_MCP51_269	0x269
43 #define	DEVICE_ID_MCP51_268	0x268
44 #define	DEVICE_ID_MCP55_373	0x373
45 #define	DEVICE_ID_MCP55_372	0x372
46 #define	DEVICE_ID_MCP61_3EE	0x3ee
47 #define	DEVICE_ID_MCP61_3EF	0x3ef
48 #define	DEVICE_ID_MCP77_760	0x760
49 #define	DEVICE_ID_NF3_E6	0xe6
50 #define	DEVICE_ID_NF3_DF	0xdf
51 
52 /* Private PCI configuration register for bus config of ck804/mcp55 */
53 #define	PCI_CONF_HT_INTERNAL	0x4c
54 
55 typedef union _nge_interbus_conf {
56 	uint32_t	conf_val;
57 	struct {
58 		uint32_t	unit_id:5;
59 		uint32_t	resv5_23:19;
60 		uint32_t	aux_val:3;
61 		uint32_t	resv27:1;
62 		uint32_t	msi_off:1;
63 		uint32_t	msix_off:1; /* mcp55 only */
64 		uint32_t	resv30_31:2;
65 	} conf_bits;
66 } nge_interbus_conf;
67 
68 /* Private PCI configuration register for MSI mask of mcp55 */
69 #define	PCI_CONF_HT_MSI_MASK	0x60
70 
71 typedef union _nge_msi_mask_conf {
72 	uint32_t	msi_mask_conf_val;
73 	struct {
74 		uint32_t	vec0_off:1;
75 		uint32_t	vec1_off:1;
76 		uint32_t	vec2_off:1;
77 		uint32_t	vec3_off:1;
78 		uint32_t	vec4_off:1;
79 		uint32_t	vec5_off:1;
80 		uint32_t	vec6_off:1;
81 		uint32_t	vec7_off:1;
82 		uint32_t	resv8_31:24;
83 	} msi_mask_bits;
84 } nge_msi_mask_conf;
85 
86 /* Private PCI configuration register for MSI map capability of mcp55 */
87 #define	PCI_CONF_HT_MSI_MAP_CAP	0x6c
88 
89 typedef union _nge_msi_map_cap_conf {
90 	uint32_t	msi_map_cap_conf_val;
91 	struct {
92 		uint32_t	cap_id:8;
93 		uint32_t	next_ptr:8;
94 		uint32_t	map_en:1;
95 		uint32_t	map_fixed:1;
96 		uint32_t	resv18_26:9;
97 		uint32_t	cap_type:5;
98 	} map_cap_conf_bits;
99 } nge_msi_map_cap_conf;
100 
101 /*
102  * Master interrupt
103  */
104 #define	NGE_INTR_SRC		0x000
105 #define	INTR_SRC_ALL		0x00007fff
106 typedef union _nge_intr_src {
107 	uint32_t	intr_val;
108 	struct {
109 		uint32_t	reint:1;
110 		uint32_t	rcint:1;
111 		uint32_t	miss:1;
112 		uint32_t	teint:1;
113 		uint32_t	tcint:1;
114 		uint32_t	stint:1;
115 		uint32_t	mint:1;
116 		uint32_t	rfint:1;
117 		uint32_t	tfint:1;
118 		uint32_t	feint:1;
119 		uint32_t	resv10:1;
120 		uint32_t	resv11:1;
121 		uint32_t	resv12:1;
122 		uint32_t	resv13:1;
123 		uint32_t	phyint:1;
124 		uint32_t	resv15_31:17;
125 	} int_bits;
126 } nge_intr_src;
127 
128 /*
129  * Master interrupt Mask
130  */
131 #define	NGE_INTR_MASK		0x004
132 #define	NGE_INTR_ALL_EN		0x00007fff
133 typedef union _nge_intr_mask {
134 	uint32_t	mask_val;
135 	struct {
136 		uint32_t	reint:1;
137 		uint32_t	rcint:1;
138 		uint32_t	miss:1;
139 		uint32_t	teint:1;
140 		uint32_t	tcint:1;
141 		uint32_t	stint:1;
142 		uint32_t	mint:1;
143 		uint32_t	rfint:1;
144 		uint32_t	tfint:1;
145 		uint32_t	feint:1;
146 		uint32_t	resv10:1;
147 		uint32_t	resv11:1;
148 		uint32_t	resv12:1;
149 		uint32_t	resv13:1;
150 		uint32_t	phyint:1;
151 		uint32_t	resv15_31:17;
152 	} mask_bits;
153 } nge_intr_mask;
154 
155 /*
156  * Software timer control register
157  */
158 #define	NGE_SWTR_CNTL		0x008
159 typedef union _nge_swtr_cntl {
160 	uint8_t	ctrl_val;
161 	struct {
162 		uint8_t	stren:1;
163 		uint8_t	sten:1;
164 		uint8_t	resv2_7:6;
165 	} cntl_bits;
166 } nge_swtr_cntl;
167 
168 /*
169  * Software Timer Interval
170  */
171 #define	NGE_SWTR_ITC		0x00c
172 
173 /* Default timer interval, 97 would mean 1 ms */
174 #define	SWTR_ITC		0x8
175 typedef union _nge_itc {
176 	uint32_t	itc_val;
177 	struct {
178 		uint32_t	sw_intv:16;
179 		uint32_t	sw_cur_val:16;
180 	} itc_bits;
181 } nge_itc;
182 
183 /*
184  * Fatal error register
185  */
186 #define	NGE_REG010		0x010
187 typedef union _nge_reg010 {
188 	uint32_t	reg010_val;
189 	struct {
190 		uint32_t	resv0:1;
191 		uint32_t	resv1:1;
192 		uint32_t	resv2:1;
193 		uint32_t	resv3:1;
194 		uint32_t	resv4:1;
195 		uint32_t	resv5:1;
196 		uint32_t	resv6:1;
197 		uint32_t	resv7:1;
198 		uint32_t	resv8:1;
199 		uint32_t	resv9:1;
200 		uint32_t	resv10:1;
201 		uint32_t	resv11_31:21;
202 	} reg010_bits;
203 } nge_reg010;
204 
205 /*
206  * MSI vector map register 0
207  */
208 #define	NGE_MSI_MAP0		0x020
209 typedef union _nge_msi_map0_vec {
210 	uint32_t msi_map0_val;
211 	struct {
212 		uint32_t reint_vec:4;
213 		uint32_t rcint_vec:4;
214 		uint32_t miss_vec:4;
215 		uint32_t teint_vec:4;
216 		uint32_t tcint_vec:4;
217 		uint32_t stint_vec:4;
218 		uint32_t mint_vec:4;
219 		uint32_t rfint_vec:4;
220 	} vecs_bits;
221 } nge_msi_map0_vec;
222 
223 /*
224  * MSI vector map register 1
225  */
226 #define	NGE_MSI_MAP1		0x024
227 typedef union _nge_msi_map1_vec {
228 	uint32_t msi_map1_val;
229 	struct {
230 		uint32_t tfint_vec:4;
231 		uint32_t feint_vec:4;
232 		uint32_t resv8_11:4;
233 		uint32_t resv12_15:4;
234 		uint32_t resv16_19:4;
235 		uint32_t resv20_23:4;
236 		uint32_t resv24_31:8;
237 	} vecs_bits;
238 } nge_msi_map1_vec;
239 
240 
241 /*
242  * MSI vector map register 2
243  */
244 #define	NGE_MSI_MAP2		0x028
245 
246 /*
247  * MSI vector map register 2
248  */
249 #define	NGE_MSI_MAP3		0x02c
250 
251 /*
252  * MSI mask register for mcp55
253  */
254 #define	NGE_MSI_MASK	0x30
255 typedef union _nge_msi_mask {
256 	uint32_t	msi_mask_val;
257 	struct {
258 		uint32_t	vec0:1;
259 		uint32_t	vec1:1;
260 		uint32_t	vec2:1;
261 		uint32_t	vec3:1;
262 		uint32_t	vec4:1;
263 		uint32_t	vec5:1;
264 		uint32_t	vec6:1;
265 		uint32_t	vec7:1;
266 		uint32_t	resv8_31:24;
267 	}msi_msk_bits;
268 }nge_msi_mask;
269 
270 /*
271  * Software misc register for mcp51
272  */
273 #define	NGE_SOFT_MISC		0x034
274 typedef union _nge_soft_misc {
275 	uint32_t misc_val;
276 	struct {
277 		uint32_t	rx_clk_vx_rst:1;
278 		uint32_t	tx_clk_vx_rst:1;
279 		uint32_t	clk12m_vx_rst:1;
280 		uint32_t	fpci_clk_vx_rst:1;
281 		uint32_t	rx_clk_vc_rst:1;
282 		uint32_t	tx_clk_vc_rst:1;
283 		uint32_t	fs_clk_vc_rst:1;
284 		uint32_t	rst_ex_m2pintf:1;
285 		uint32_t	resv8_31:24;
286 	} misc_bits;
287 } nge_soft_misc;
288 
289 /*
290  * DMA configuration
291  */
292 #define	NGE_DMA_CFG		0x040
293 typedef union _nge_dma_cfg {
294 	uint32_t cfg_val;
295 	struct {
296 		uint32_t	tx_start_pri:3;
297 		uint32_t	tx_start_pri_flag:1;
298 		uint32_t	tx_prd_rpri:3;
299 		uint32_t	tx_prd_rpri_flag:1;
300 		uint32_t	tx_prd_wpri:3;
301 		uint32_t	tx_prd_wpri_flag:1;
302 		uint32_t	rx_start_pri:3;
303 		uint32_t	rx_start_pri_flag:1;
304 		uint32_t	rx_prd_rpri:3;
305 		uint32_t	rx_prd_rpri_flag:1;
306 		uint32_t	rx_prd_wpri:3;
307 		uint32_t	rx_prd_wpri_flag:1;
308 		uint32_t	dma_max_pri:3;
309 		uint32_t	dma_wrr_disable:1;
310 		uint32_t	dma_pri_disable:1;
311 	} cfg_bits;
312 } nge_dma_cfg;
313 
314 /*
315  * Request DMA configuration
316  */
317 #define	NGE_DMA_RCFG		0x044
318 typedef union _nge_dma_rcfg {
319 	uint32_t dma_rcfg_val;
320 	struct {
321 		uint32_t	tx_prd_coh_state:2;
322 		uint32_t	tx_data_coh_state:2;
323 		uint32_t	rx_prd_coh_state:2;
324 		uint32_t	rx_data_coh_state:2;
325 		uint32_t	max_roffset:5;
326 		uint32_t	resv13_31:19;
327 	} rcfg_bis;
328 } nge_dma_rcfg;
329 
330 /*
331  * Hot DMA configuration
332  */
333 #define	NGE_DMA_HOT_CFG		0x048
334 typedef union _nge_dma_hcfg {
335 	uint32_t	dma_hcfg_val;
336 	struct {
337 		uint32_t	resv0_3:4;
338 		uint32_t	noti_wstart_pri:3;
339 		uint32_t	noti_wstart_pri_flag:1;
340 		uint32_t	cmd_rstart_pri:3;
341 		uint32_t	cmd_rstart_pri_flag:1;
342 		uint32_t	cmd_wstart_pri:3;
343 		uint32_t	cmd_wstart_pri_flag:1;
344 		uint32_t	resv16_31:16;
345 	} hcfg_bits;
346 } nge_dma_hcfg;
347 
348 /*
349  * PMU control register 0 for mcp51
350  */
351 #define	NGE_PMU_CNTL0			0x060
352 #define	NGE_PMU_CORE_SPD10_BUSY		0x8
353 #define	NGE_PMU_CORE_SPD10_IDLE		0xB
354 #define	NGE_PMU_CORE_SPD100_BUSY	0x4
355 #define	NGE_PMU_CORE_SPD100_IDLE	0x7
356 #define	NGE_PMU_CORE_SPD1000_BUSY	0x0
357 #define	NGE_PMU_CORE_SPD1000_IDLE	0x3
358 
359 typedef union _nge_pmu_cntl0 {
360 	uint32_t	cntl0_val;
361 	struct {
362 		uint32_t	core_spd10_fp:4;
363 		uint32_t	core_spd10_idle:4;
364 		uint32_t	core_spd100_fp:4;
365 		uint32_t	core_spd100_idle:4;
366 		uint32_t	core_spd1000_fp:4;
367 		uint32_t	core_spd1000_idle:4;
368 		uint32_t	core_sts_cur:8;
369 	} cntl0_bits;
370 } nge_pmu_cntl0;
371 
372 /*
373  * PMU control register 1 for mcp51
374  */
375 #define	NGE_PMU_CNTL1		0x064
376 typedef union _nge_pmu_cntl1 {
377 	uint32_t	cntl1_val;
378 	struct {
379 		uint32_t	dev_fp:4;
380 		uint32_t	dev_idle:4;
381 		uint32_t	resv8_27:20;
382 		uint32_t	dev_sts_cur:4;
383 	} cntl1_bits;
384 } nge_pmu_cntl1;
385 
386 /*
387  * PMU control register 2 for mcp51
388  */
389 #define	NGE_PMU_CNTL2		0x068
390 typedef union _nge_pmu_cntl2 {
391 	uint32_t	cntl2_val;
392 	struct {
393 		uint32_t	core_override:4;
394 		uint32_t	resv4_7:4;
395 		uint32_t	dev_override:4;
396 		uint32_t	resv12_15:4;
397 		uint32_t	core_override_en:1;
398 		uint32_t	dev_override_en:1;
399 		uint32_t	core_enable:1;
400 		uint32_t	dev_enable:1;
401 		uint32_t	rx_wake_dis:1;
402 		uint32_t	cidle_timer:1;
403 		uint32_t	didle_timer:1;
404 		uint32_t	resv23_31:9;
405 	} cntl2_bits;
406 } nge_pmu_cntl2;
407 
408 /*
409  * PMU core idle limit register for mcp51
410  */
411 #define	NGE_PMU_CIDLE_LIMIT	0x06c
412 #define	NGE_PMU_CIDLE_LIMIT_DEF	0xffff
413 
414 /*
415  * PMU device idle limit register for mcp51
416  */
417 #define	NGE_PMU_DIDLE_LIMIT	0x070
418 #define	NGE_PMU_DIDLE_LIMIT_DEF	0xffff
419 
420 /*
421  * PMU core idle count value register for mcp51
422  */
423 #define	NGE_PMU_CIDLE_COUNT	0x074
424 #define	NGE_PMU_CIDEL_COUNT_DEF	0xffff
425 
426 /*
427  * PMU device idle count value register for mcp51
428  */
429 #define	NGE_PMU_DIDLE_COUNT	0x078
430 #define	NGE_PMU_DIDEL_COUNT_DEF	0xffff
431 
432 /*
433  * Transmit control
434  */
435 #define	NGE_TX_CNTL		0x080
436 typedef union _nge_tx_cntl {
437 	uint32_t	cntl_val;
438 	struct {
439 		uint32_t	paen:1; /* only for mcp55, otherwise reserve */
440 		uint32_t	resv1:1;
441 		uint32_t	retry_en:1;
442 		uint32_t	pad_en:1;
443 		uint32_t	fappend_en:1;
444 		uint32_t	two_def_en:1;
445 		uint32_t	resv6_7:2;
446 		uint32_t	max_retry:4;
447 		uint32_t	burst_en:1;
448 		uint32_t	resv13_15:3;
449 		uint32_t	retry_emask:1;
450 		uint32_t	exdef_mask:1;
451 		uint32_t	def_mask:1;
452 		uint32_t	lcar_mask:1;
453 		uint32_t	tlcol_mask:1;
454 		uint32_t	uflo_err_mask:1;
455 		uint32_t	resv22_23:2;
456 		uint32_t	jam_seq_en:1;
457 		uint32_t	resv25_31:7;
458 	} cntl_bits;
459 } nge_tx_cntl;
460 
461 /*
462  * Transmit enable
463  * Note: for ck804 or mcp51, this is 8-bit register;
464  * for mcp55, it is a 32-bit register.
465  */
466 #define	NGE_TX_EN		0x084
467 #define	NGE_SMU_FREE		0x0
468 #define	NGE_SMU_GET		0xf
469 typedef union _nge_tx_en {
470 	uint32_t	val;
471 	struct {
472 		uint32_t	tx_en:1;
473 		uint32_t	resv1_7:7;
474 		uint32_t	smu2mac:4;
475 		uint32_t	mac2smu:4;
476 		uint32_t	resv16_31:16;
477 	} bits;
478 } nge_tx_en;
479 
480 /*
481  * Transmit status
482  */
483 #define	NGE_TX_STA		0x088
484 typedef union _nge_tx_sta {
485 	uint32_t	sta_val;
486 	struct {
487 		uint32_t	tx_chan_sta:1;
488 		uint32_t	resv1_15:15;
489 		uint32_t	retry_err:1;
490 		uint32_t	exdef:1;
491 		uint32_t	def:1;
492 		uint32_t	lcar:1;
493 		uint32_t	tlcol:1;
494 		uint32_t	uflo:1;
495 		uint32_t	resv22_31:10;
496 	} sta_bits;
497 } nge_tx_sta;
498 
499 /*
500  * Receive control
501  */
502 #define	NGE_RX_CNTL0		0x08c
503 typedef union _nge_rx_cntrl0 {
504 	uint32_t	cntl_val;
505 	struct {
506 		uint32_t	resv0:1;
507 		uint32_t	padsen:1;
508 		uint32_t	fcsren:1;
509 		uint32_t	paen:1;
510 		uint32_t	lben:1;
511 		uint32_t	afen:1;
512 		uint32_t	runten:1;
513 		uint32_t	brdis:1;
514 		uint32_t	rdfen:1;
515 		uint32_t	slfb:1;
516 		uint32_t	resv10_15:6;
517 		uint32_t	runtm:1;
518 		uint32_t	rlcolm:1;
519 		uint32_t	maxerm:1;
520 		uint32_t	lferm:1;
521 		uint32_t	crcm:1;
522 		uint32_t	ofolm:1;
523 		uint32_t	framerm:1;
524 		uint32_t 	resv23_31:9;
525 	} cntl_bits;
526 } nge_rx_cntrl0;
527 
528 /*
529  * Maximum receive Frame size
530  */
531 #define	NGE_RX_CNTL1		0x090
532 typedef union _nge_rx_cntl1 {
533 	uint32_t	cntl_val;
534 	struct {
535 		uint32_t	length:14;
536 		uint32_t	resv14_31:18;
537 	} cntl_bits;
538 } nge_rx_cntl1;
539 
540 /*
541  * Receive enable register
542  * Note: for ck804 and mcp51, this is a 8-bit register;
543  * for mcp55, it is a 32-bit register.
544  */
545 #define	NGE_RX_EN		0x094
546 typedef union _nge_rx_en {
547 	uint8_t	val;
548 	struct {
549 		uint8_t	rx_en:1;
550 		uint8_t	resv1_7:7;
551 	} bits;
552 } nge_rx_en;
553 
554 /*
555  * Receive status register
556  */
557 #define	NGE_RX_STA		0x098
558 typedef union _nge_rx_sta {
559 	uint32_t	sta_val;
560 	struct {
561 		uint32_t	rx_chan_sta:1;
562 		uint32_t	resv1_15:15;
563 		uint32_t	runt_sta:1;
564 		uint32_t	rlcol_sta:1;
565 		uint32_t	mlen_err:1;
566 		uint32_t	lf_err:1;
567 		uint32_t	crc_err:1;
568 		uint32_t	ofol_err:1;
569 		uint32_t	fram_err:1;
570 		uint32_t	resv23_31:9;
571 	} sta_bits;
572 } nge_rx_sta;
573 
574 /*
575  * Backoff Control
576  */
577 #define	NGE_BKOFF_CNTL		0x09c
578 #define	BKOFF_RSEED		0x8
579 #define	BKOFF_SLIM_GMII		0x3ff
580 #define	BKOFF_SLIM_MII		0x7f
581 typedef union _nge_bkoff_cntl	{
582 	uint32_t	cntl_val;
583 	struct {
584 		uint32_t	rseed:8;
585 		uint32_t	sltm:10;
586 		uint32_t	resv18_30:13;
587 		uint32_t	leg_bk_en:1;
588 	} bkoff_bits;
589 } nge_bkoff_cntl;
590 
591 /*
592  * Transmit defferral timing
593  */
594 #define	NGE_TX_DEF		0x0a0
595 #define	TX_TIFG_MII		0x15
596 #define	TX_IFG_RGMII_1000_FD	0x14
597 #define	TX_IFG_RGMII_OTHER	0x16
598 #define	TX_IFG2_MII		0x5
599 #define	TX_IFG2_RGMII_10_100	0x7
600 #define	TX_IFG2_RGMII_1000	0x5
601 #define	TX_IFG2_DEFAULT		0X0
602 #define	TX_IFG1_DEFAULT		0xf
603 typedef union _nge_tx_def {
604 	uint32_t	def_val;
605 	struct {
606 		uint32_t	ifg1_def:8;
607 		uint32_t	ifg2_def:8;
608 		uint32_t	if_def:8;
609 		uint32_t	resv24_31:8;
610 	} def_bits;
611 } nge_tx_def;
612 
613 /*
614  * Receive defferral timing
615  */
616 #define	NGE_RX_DEf		0x0a4
617 #define	RX_DEF_DEFAULT		0x16
618 typedef union _nge_rx_def {
619 	uint8_t	def_val;
620 	struct {
621 		uint8_t rifg;
622 	} def_bits;
623 } nge_rx_def;
624 
625 /*
626  * Low 32 bit unicast address
627  */
628 #define	NGE_UNI_ADDR0		0x0a8
629 union {
630 	uint32_t	addr_val;
631 	struct {
632 		uint32_t	addr;
633 	} addr_bits;
634 } nge_uni_addr0;
635 
636 /*
637  * High 32 bit unicast address
638  */
639 #define	NGE_UNI_ADDR1		0x0ac
640 typedef union _nge_uni_addr1 {
641 	uint32_t	addr_val;
642 	struct {
643 		uint32_t	addr:16;
644 		uint32_t	resv16_31:16;
645 	} addr_bits;
646 } nge_uni_addr1;
647 
648 #define	LOW_24BITS_MASK		0xffffffULL
649 #define	REVERSE_MAC_ELITE	0x211900ULL
650 #define	REVERSE_MAC_GIGABYTE	0xe61600ULL
651 #define	REVERSE_MAC_ASUS	0x601d00ULL
652 
653 /*
654  * Low 32 bit multicast address
655  */
656 #define	NGE_MUL_ADDR0		0x0b0
657 union {
658 	uint32_t	addr_val;
659 	struct {
660 		uint32_t	addr;
661 	}addr_bits;
662 }nge_mul_addr0;
663 
664 /*
665  * High 32 bit multicast address
666  */
667 #define	NGE_MUL_ADDR1		0x0b4
668 typedef union _nge_mul_addr1 {
669 	uint32_t	addr_val;
670 	struct {
671 		uint32_t	addr:16;
672 		uint32_t	resv16_31:16;
673 	}addr_bits;
674 }nge_mul_addr1;
675 
676 /*
677  * Low 32 bit multicast mask
678  */
679 #define	NGE_MUL_MASK		0x0b8
680 union {
681 	uint32_t	mask_val;
682 	struct {
683 		uint32_t	mask;
684 	} mask_bits;
685 } nge_mul_mask0;
686 
687 /*
688  * High 32 bit multicast mask
689  */
690 #define	NGE_MUL_MASK1		0x0bc
691 union {
692 	uint32_t	mask_val;
693 	struct {
694 		uint32_t	mask:16;
695 		uint32_t	resv16_31:16;
696 	} mask_bits;
697 } nge_mul_mask1;
698 
699 /*
700  * Mac-to Phy Interface
701  */
702 #define	NGE_MAC2PHY		0x0c0
703 #define	low_speed		0x0
704 #define	fast_speed		0x1
705 #define	giga_speed		0x2
706 #define	err_speed		0x4
707 #define	MII_IN			0x0
708 #define	RGMII_IN		0x1
709 #define	ERR_IN1			0x3
710 #define	ERR_IN2			0x4
711 typedef union _nge_mac2phy {
712 	uint32_t	m2p_val;
713 	struct {
714 		uint32_t	speed:2;
715 		uint32_t	resv2_7:6;
716 		uint32_t	hdup_en:1;
717 		uint32_t	resv9:1;
718 		uint32_t	phyintr:1;    /* for mcp55 only */
719 		uint32_t	phyintrlvl:1; /* for mcp55 only */
720 		uint32_t	resv12_27:16;
721 		uint32_t	in_type:2;
722 		uint32_t	resv30_31:2;
723 	} m2p_bits;
724 } nge_mac2phy;
725 
726 /*
727  * Transmit Descriptor Ring address
728  */
729 #define	NGE_TX_DADR		0x100
730 typedef union _nge_tx_addr	{
731 	uint32_t	addr_val;
732 	struct {
733 		uint32_t	resv0_2:3;
734 		uint32_t	addr:29;
735 	} addr_bits;
736 } nge_tx_addr;
737 
738 /*
739  * Receive Descriptor Ring address
740  */
741 #define	NGE_RX_DADR		0x104
742 typedef union _nge_rx_addr {
743 	uint32_t	addr_val;
744 	struct {
745 		uint32_t	resv0_2:3;
746 		uint32_t	addr:29;
747 	} addr_bits;
748 } nge_rx_addr;
749 
750 /*
751  * Rx/tx descriptor ring leng
752  * Note: for mcp55, tdlen/rdlen are 14 bit.
753  */
754 #define	NGE_RXTX_DLEN		0x108
755 typedef union _nge_rxtx_dlen {
756 	uint32_t	dlen_val;
757 	struct {
758 		uint32_t	tdlen:14;
759 		uint32_t	resv14_15:2;
760 		uint32_t	rdlen:14;
761 		uint32_t	resv30_31:2;
762 	} dlen_bits;
763 } nge_rxtx_dlen;
764 
765 /*
766  * Transmit polling register
767  */
768 #define	NGE_TX_POLL		0x10c
769 #define	TX_POLL_INTV_1G		10
770 #define	TX_POLL_INTV_100M	100
771 #define	TX_POLL_INTV_10M	1000
772 
773 typedef union _nge_tx_poll {
774 	uint32_t	poll_val;
775 	struct {
776 		uint32_t	tpi:16;
777 		uint32_t	tpen:1;
778 		uint32_t	resv17_31:15;
779 	} poll_bits;
780 } nge_tx_poll;
781 
782 /*
783  * Receive polling register
784  */
785 #define	NGE_RX_POLL		0x110
786 #define	RX_POLL_INTV_1G		10
787 #define	RX_POLL_INTV_100M	100
788 #define	RX_POLL_INTV_10M	1000
789 typedef union _nge_rx_poll {
790 	uint32_t	poll_val;
791 	struct {
792 		uint32_t	rpi:16;
793 		uint32_t	rpen:1;
794 		uint32_t	resv17_31:15;
795 	} poll_bits;
796 } nge_rx_poll;
797 
798 /*
799  * Transmit polling count
800  */
801 #define	NGE_TX_PCNT		0x114
802 union {
803 	uint32_t	cnt_val;
804 	struct {
805 		uint32_t	pcnt:32;
806 	} cnt_bits;
807 } nge_tx_pcnt;
808 
809 /*
810  * Receive polling count
811  */
812 #define	NGE_RX_PCNT		0x118
813 union {
814 	uint32_t	cnt_val;
815 	struct {
816 		uint32_t	pcnt:32;
817 	} cnt_bits;
818 } nge_rx_pcnt;
819 
820 
821 /*
822  * Current tx's descriptor address
823  */
824 #define	NGE_TX_CUR_DADR		0x11c
825 union {
826 	uint32_t	addr_val;
827 	struct {
828 		uint32_t	resv0_2:3;
829 		uint32_t	addr:29;
830 	} addr_bits;
831 } nge_tx_cur_addr;
832 
833 /*
834  * Current rx's descriptor address
835  */
836 #define	NGE_RX_CUR_DADR		0x120
837 union {
838 	uint32_t	addr_val;
839 	struct {
840 		uint32_t	resv0_2:3;
841 		uint32_t	addr:29;
842 	} addr_bits;
843 } nge_rx_cur_addr;
844 
845 /*
846  * Current tx's data buffer address
847  */
848 #define	NGE_TX_CUR_PRD0		0x124
849 union {
850 	uint32_t	prd0_val;
851 	struct {
852 		uint32_t	prd0:32;
853 	} prd0_bits;
854 } nge_tx_cur_prd0;
855 
856 /*
857  * Current tx's data buffer status
858  */
859 #define	NGE_TX_CUR_PRD1		0x128
860 union {
861 	uint32_t	prd1_val;
862 	struct {
863 		uint32_t	rebytes:16;
864 		uint32_t	status:16;
865 	} prd1_bits;
866 } nge_tx_cur_prd1;
867 
868 /*
869  * Current rx's data buffer address
870  */
871 #define	NGE_RX_CUR_PRD0		0x12c
872 union {
873 	uint32_t	prd0_val;
874 	struct {
875 		uint32_t	prd0:32;
876 	}prd0_bits;
877 }nge_rx_cur_prd0;
878 
879 /*
880  * Current rx's data buffer status
881  */
882 #define	NGE_RX_CUR_PRD1		0x130
883 
884 /*
885  * Next tx's descriptor address
886  */
887 #define	NGE_TX_NXT_DADR		0x134
888 union {
889 	uint32_t	dadr_val;
890 	struct {
891 		uint32_t	addr:32;
892 	}addr_bits;
893 }nge_tx_nxt_dadr;
894 
895 /*
896  * Next rx's descriptor address
897  */
898 #define	NGE_RX_NXT_DADR		0x138
899 union {
900 	uint32_t	dadr_val;
901 	struct {
902 		uint32_t	addr:32;
903 	} addr_bits;
904 } nge_rx_nxt_dadr;
905 
906 /*
907  * Transmit fifo watermark
908  */
909 #define	NGE_TX_FIFO_WM		0x13c
910 #define	TX_FIFO_TBFW		0
911 #define	TX_FIFO_NOB_WM_MII	1
912 #define	TX_FIFO_NOB_WM_GMII	8
913 #define	TX_FIFO_DATA_LWM	0x20
914 #define	TX_FIFO_PRD_LWM		0x8
915 #define	TX_FIFO_PRD_HWM		0x38
916 typedef union _nge_tx_fifo_wm {
917 	uint32_t	wm_val;
918 	struct {
919 		uint32_t	data_lwm:9;
920 		uint32_t	resv8_11:3;
921 		uint32_t	prd_lwm:6;
922 		uint32_t	uprd_hwm:6;
923 		uint32_t	nbfb_wm:4;
924 		uint32_t	fb_wm:4;
925 	} wm_bits;
926 } nge_tx_fifo_wm;
927 
928 /*
929  * Receive fifo watermark
930  */
931 #define	NGE_RX_FIFO_WM		0x140
932 typedef union _nge_rx_fifo_wm {
933 	uint32_t	wm_val;
934 	struct {
935 		uint32_t	data_hwm:9;
936 		uint32_t	resv9_11:3;
937 		uint32_t	prd_lwm:4;
938 		uint32_t	resv16_17:2;
939 		uint32_t	prd_hwm:4;
940 		uint32_t	resv22_31:10;
941 	} wm_bits;
942 } nge_rx_fifo_wm;
943 
944 /*
945  * Chip mode control
946  */
947 #define	NGE_MODE_CNTL		0x144
948 #define	DESC_MCP1		0x0
949 #define	DESC_OFFLOAD		0x1
950 #define	DESC_HOT		0x2
951 #define	DESC_RESV		0x3
952 #define	MACHINE_BUSY		0x0
953 #define	MACHINE_IDLE		0x1
954 typedef union _nge_mode_cntl {
955 	uint32_t	mode_val;
956 	struct {
957 		uint32_t	txdm:1;
958 		uint32_t	rxdm:1;
959 		uint32_t	dma_dis:1;
960 		uint32_t	dma_status:1;
961 		uint32_t	bm_reset:1;
962 		uint32_t	resv5:1;
963 		uint32_t	vlan_strip:1;	/* mcp55 chip only */
964 		uint32_t	vlan_ins:1;	/* mcp55 chip only */
965 		uint32_t	desc_type:2;
966 		uint32_t	rx_sum_en:1;
967 		uint32_t	tx_prd_cu_en:1;
968 		uint32_t	w64_dis:1;
969 		uint32_t	tx_rcom_en:1;
970 		uint32_t	rx_filter_en:1;
971 		uint32_t	resv15:1;
972 		uint32_t	resv16:1;	/* ck804 and mcp51 only */
973 		uint32_t	resv17:1;	/* ck804 and mcp51 only */
974 		uint32_t	resv18:1;	/* ck804 and mcp51 only */
975 		uint32_t	resv19_21:3;
976 		uint32_t	tx_fetch_prd:1;	/* mcp51/mcp55 only */
977 		uint32_t	rx_fetch_prd:1;	/* mcp51/mcp55 only */
978 		uint32_t	resv24_29:6;
979 		uint32_t	rx_status:1;
980 		uint32_t	tx_status:1;
981 	} mode_bits;
982 } nge_mode_cntl;
983 
984 #define	NGE_TX_DADR_HI		0x148
985 #define	NGE_RX_DADR_HI		0x14c
986 
987 /*
988  * Mii interrupt register
989  * Note: for mcp55, this is a 32-bit register.
990  */
991 #define	NGE_MINTR_SRC		0x180
992 typedef union _nge_mintr_src {
993 	uint8_t	src_val;
994 	struct {
995 		uint8_t	mrei:1;
996 		uint8_t	mcc2:1;
997 		uint8_t	mcc1:1;
998 		uint8_t	mapi:1;
999 		uint8_t	mpdi:1;
1000 		uint8_t	resv5_7:3;
1001 	} src_bits;
1002 } nge_mintr_src;
1003 
1004 /*
1005  * Mii interrupt mask
1006  * Note: for mcp55, this is a 32-bit register.
1007  */
1008 #define	NGE_MINTR_MASK		0x184
1009 typedef union _nge_mintr_mask {
1010 	uint8_t	mask_val;
1011 	struct {
1012 		uint8_t	mrei:1;
1013 		uint8_t	mcc2:1;
1014 		uint8_t	mcc1:1;
1015 		uint8_t	mapi:1;
1016 		uint8_t	mpdi:1;
1017 		uint8_t	resv5_7:3;
1018 	} mask_bits;
1019 } nge_mintr_mask;
1020 
1021 /*
1022  * Mii control and status
1023  */
1024 #define	NGE_MII_CS		0x188
1025 #define	MII_POLL_INTV		0x4
1026 typedef union _nge_mii_cs {
1027 	uint32_t	cs_val;
1028 	struct {
1029 		uint32_t	excap:1;
1030 		uint32_t	jab_dec:1;
1031 		uint32_t	lk_up:1;
1032 		uint32_t	ana_cap:1;
1033 		uint32_t	rfault:1;
1034 		uint32_t	auto_neg:1;
1035 		uint32_t	mfps:1;
1036 		uint32_t	resv7:1;
1037 		uint32_t	exst:1;
1038 		uint32_t	hdup_100m_t2:1;
1039 		uint32_t	fdup_100m_t2:1;
1040 		uint32_t	hdup_10m:1;
1041 		uint32_t	fdup_10m:1;
1042 		uint32_t	hdup_100m_x:1;
1043 		uint32_t	fdup_100m_x:1;
1044 		uint32_t	cap_100m_t4:1;
1045 		uint32_t	ap_intv:4;
1046 		uint32_t	ap_en:1;
1047 		uint32_t	resv21_23:3;
1048 		uint32_t	ap_paddr:5;
1049 		uint32_t	resv29_31:3;
1050 	} cs_bits;
1051 } nge_mii_cs;
1052 
1053 /*
1054  * Mii Clock timer register
1055  */
1056 #define	NGE_MII_TM		0x18c
1057 typedef union _nge_mii_tm {
1058 	uint16_t	tm_val;
1059 	struct {
1060 		uint16_t	timer_interv:8;
1061 		uint16_t	timer_en:1;
1062 		uint16_t	resv9_14:6;
1063 		uint16_t	timer_status:1;
1064 	} tm_bits;
1065 } nge_mii_tm;
1066 
1067 /*
1068  * Mdio address
1069  */
1070 #define	NGE_MDIO_ADR		0x190
1071 typedef union _nge_mdio_adr {
1072 	uint16_t	adr_val;
1073 	struct {
1074 		uint16_t	phy_reg:5;
1075 		uint16_t	phy_adr:5;
1076 		uint16_t	mdio_rw:1;
1077 		uint16_t	resv11_14:4;
1078 		uint16_t	mdio_clc:1;
1079 	} adr_bits;
1080 } nge_mdio_adr;
1081 
1082 /*
1083  * Mdio data
1084  */
1085 #define	NGE_MDIO_DATA		0x194
1086 
1087 /*
1088  * Power Management and Control
1089  */
1090 #define	NGE_PM_CNTL		0x200
1091 typedef union _nge_pm_cntl {
1092 	uint32_t	cntl_val;
1093 	struct {
1094 		/*
1095 		 * mp_en:  Magic Packet Enable
1096 		 * pm_en:  Pattern Match Enable
1097 		 * lc_en:  Link Change Enable
1098 		 */
1099 		uint32_t	mp_en_d0:1;
1100 		uint32_t	pm_en_d0:1;
1101 		uint32_t	lc_en_d0:1;
1102 		uint32_t	resv3:1;
1103 		uint32_t	mp_en_d1:1;
1104 		uint32_t	pm_en_d1:1;
1105 		uint32_t	lc_en_d1:1;
1106 		uint32_t	resv7:1;
1107 		uint32_t	mp_en_d2:1;
1108 		uint32_t	pm_en_d2:1;
1109 		uint32_t	lc_en_d2:1;
1110 		uint32_t	resv11:1;
1111 		uint32_t	mp_en_d3:1;
1112 		uint32_t	pm_en_d3:1;
1113 		uint32_t	lc_en_d3:1;
1114 		uint32_t	resv15:1;
1115 		uint32_t	pat_match_en:5;
1116 		uint32_t	resv21_23:3;
1117 		uint32_t	pat_match_stat:5;
1118 		uint32_t	magic_status:1;
1119 		uint32_t	netman_status:1;
1120 		uint32_t	resv31:1;
1121 	} cntl_bits;
1122 } nge_pm_cntl;
1123 
1124 #define	NGE_MPT_CRC0	0x204
1125 #define	NGE_PMC_MK00	0x208
1126 #define	NGE_PMC_MK01	0x20C
1127 #define	NGE_PMC_MK02	0x210
1128 #define	NGE_PMC_MK03	0x214
1129 #define	NGE_MPT_CRC1	0x218
1130 #define	NGE_PMC_MK10	0x21c
1131 #define	NGE_PMC_MK11	0x220
1132 #define	NGE_PMC_MK12	0x224
1133 #define	NGE_PMC_MK13	0x228
1134 #define	NGE_MPT_CRC2	0x22c
1135 #define	NGE_PMC_MK20	0x230
1136 #define	NGE_PMC_MK21	0x234
1137 #define	NGE_PMC_MK22	0x238
1138 #define	NGE_PMC_MK23	0x23c
1139 #define	NGE_MPT_CRC3	0x240
1140 #define	NGE_PMC_MK30	0x244
1141 #define	NGE_PMC_MK31	0x248
1142 #define	NGE_PMC_MK32	0x24c
1143 #define	NGE_PMC_MK33	0x250
1144 #define	NGE_MPT_CRC4	0x254
1145 #define	NGE_PMC_MK40	0x258
1146 #define	NGE_PMC_MK41	0x25c
1147 #define	NGE_PMC_MK42	0x260
1148 #define	NGE_PMC_MK43	0x264
1149 #define	NGE_PMC_ALIAS	0x268
1150 #define	NGE_PMCSR_ALIAS	0x26c
1151 
1152 /*
1153  * Seeprom control
1154  */
1155 #define	NGE_EP_CNTL		0x500
1156 #define	EEPROM_CLKDIV		249
1157 #define	EEPROM_WAITCLK		0x7
1158 typedef union _nge_cp_cntl {
1159 	uint32_t	cntl_val;
1160 	struct {
1161 		uint32_t	clkdiv:8;
1162 		uint32_t	rom_size:3;
1163 		uint32_t	resv11:1;
1164 		uint32_t	word_wid:1;
1165 		uint32_t	resv13_15:3;
1166 		uint32_t	wait_slots:4;
1167 		uint32_t	resv20_31:12;
1168 	} cntl_bits;
1169 } nge_cp_cntl;
1170 
1171 /*
1172  * Seeprom cmd control
1173  */
1174 #define	NGE_EP_CMD			0x504
1175 #define	SEEPROM_CMD_READ		0x0
1176 #define	SEEPROM_CMD_WRITE_ENABLE	0x1
1177 #define	SEEPROM_CMD_ERASE		0x2
1178 #define	SEEPROM_CMD_WRITE		0x3
1179 #define	SEEPROM_CMD_ERALSE_ALL		0x4
1180 #define	SEEPROM_CMD_WRITE_ALL		0x5
1181 #define	SEEPROM_CMD_WRITE_DIS		0x6
1182 #define	SEEPROM_READY			0x1
1183 typedef union _nge_ep_cmd {
1184 	uint32_t	cmd_val;
1185 	struct {
1186 		uint32_t	addr:16;
1187 		uint32_t	cmd:3;
1188 		uint32_t	resv19_30:12;
1189 		uint32_t	sts:1;
1190 	} cmd_bits;
1191 } nge_ep_cmd;
1192 
1193 /*
1194  * Seeprom data register
1195  */
1196 #define	NGE_EP_DATA		0x508
1197 typedef union _nge_ep_data {
1198 	uint32_t	data_val;
1199 	struct {
1200 		uint32_t	data:16;
1201 		uint32_t	resv16_31:16;
1202 	} data_bits;
1203 } nge_ep_data;
1204 
1205 /*
1206  * Power management control 2nd register (since MCP51)
1207  */
1208 #define	NGE_PM_CNTL2		0x600
1209 typedef union _nge_pm_cntl2 {
1210 	uint32_t	cntl_val;
1211 	struct {
1212 		uint32_t	phy_coma_set:1;
1213 		uint32_t	phy_coma_status:1;
1214 		uint32_t	resv2_3:2;
1215 		uint32_t	resv4:1;
1216 		uint32_t	resv5_7:3;
1217 		uint32_t	resv8_11:4;
1218 		uint32_t	resv12_15:4;
1219 		uint32_t	pmt5_en:1;
1220 		uint32_t	pmt6_en:1;
1221 		uint32_t	pmt7_en:1;
1222 		uint32_t	resv19_23:5;
1223 		uint32_t	pmt5_status:1;
1224 		uint32_t	pmt6_status:1;
1225 		uint32_t	pmt7_status:1;
1226 		uint32_t	resv27_31:5;
1227 	} cntl_bits;
1228 } nge_pm_cntl2;
1229 
1230 
1231 /*
1232  * ASF RAM 0x800-0xfff
1233  */
1234 
1235 /*
1236  * Hardware-defined Statistics Block Offsets
1237  *
1238  * These are given in the manual as addresses in NIC memory, starting
1239  * from the NIC statistics area base address of 0x2000;
1240  */
1241 
1242 #define	KS_BASE			0x0280
1243 #define	KS_ADDR(x)		(((x)-KS_BASE)/sizeof (uint32_t))
1244 
1245 typedef enum {
1246 	KS_ifHOutOctets = KS_ADDR(0x0280),
1247 	KS_ifHOutZeroRetranCount,
1248 	KS_ifHOutOneRetranCount,
1249 	KS_ifHOutMoreRetranCount,
1250 	KS_ifHOutColCount,
1251 	KS_ifHOutFifoovCount,
1252 	KS_ifHOutLOCCount,
1253 	KS_ifHOutExDecCount,
1254 	KS_ifHOutRetryCount,
1255 
1256 	KS_ifHInFrameErrCount,
1257 	KS_ifHInExtraOctErrCount,
1258 	KS_ifHInLColErrCount,
1259 	KS_ifHInRuntCount,
1260 	KS_ifHInOversizeErrCount,
1261 	KS_ifHInFovErrCount,
1262 	KS_ifHInFCSErrCount,
1263 	KS_ifHInAlignErrCount,
1264 	KS_ifHInLenErrCount,
1265 	KS_ifHInUniPktsCount,
1266 	KS_ifHInBroadPksCount,
1267 	KS_ifHInMulPksCount,
1268 	KS_STATS_SIZE = KS_ADDR(0x2d0)
1269 
1270 } nge_stats_offset_t;
1271 
1272 /*
1273  * Hardware-defined Statistics Block
1274  *
1275  * Another view of the statistic block, as a array and a structure ...
1276  */
1277 
1278 typedef union {
1279 	uint64_t a[KS_STATS_SIZE];
1280 	struct {
1281 	uint64_t OutOctets;
1282 	uint64_t OutZeroRetranCount;
1283 	uint64_t OutOneRetranCount;
1284 	uint64_t OutMoreRetranCount;
1285 	uint64_t OutColCount;
1286 	uint64_t OutFifoovCount;
1287 	uint64_t OutLOCCount;
1288 	uint64_t OutExDecCount;
1289 	uint64_t OutRetryCount;
1290 
1291 	uint64_t InFrameErrCount;
1292 	uint64_t InExtraOctErrCount;
1293 	uint64_t InLColErrCount;
1294 	uint64_t InRuntCount;
1295 	uint64_t InOversizeErrCount;
1296 	uint64_t InFovErrCount;
1297 	uint64_t InFCSErrCount;
1298 	uint64_t InAlignErrCount;
1299 	uint64_t InLenErrCount;
1300 	uint64_t InUniPktsCount;
1301 	uint64_t InBroadPksCount;
1302 	uint64_t InMulPksCount;
1303 	} s;
1304 } nge_hw_statistics_t;
1305 
1306 /*
1307  * MII (PHY) registers, beyond those already defined in <sys/miiregs.h>
1308  */
1309 
1310 #define	NGE_PHY_NUMBER	32
1311 #define	MII_LP_ASYM_PAUSE	0x0800
1312 #define	MII_LP_PAUSE		0x0400
1313 
1314 #define	MII_100BASE_T4		0x0200
1315 #define	MII_100BASET_FD		0x0100
1316 #define	MII_100BASET_HD		0x0080
1317 #define	MII_10BASET_FD		0x0040
1318 #define	MII_10BASET_HD		0x0020
1319 
1320 #define	MII_ID_MARVELL		0x5043
1321 #define	MII_ID_CICADA		0x03f1
1322 #define	MII_IDL_MASK		0xfc00
1323 #define	MII_AN_LPNXTPG		8
1324 
1325 
1326 #define	MII_IEEE_EXT_STATUS	15
1327 
1328 /*
1329  * New bits in the MII_CONTROL register
1330  */
1331 #define	MII_CONTROL_1000MB	0x0040
1332 
1333 /*
1334  * Bits in the MII_1000BASE_T_CONTROL register
1335  *
1336  * The MASTER_CFG bit enables manual configuration of Master/Slave mode
1337  * (otherwise, roles are automatically negotiated).  When this bit is set,
1338  * the MASTER_SEL bit forces Master mode, otherwise Slave mode is forced.
1339  */
1340 #define	MII_1000BASE_T_CONTROL		9
1341 #define	MII_1000BT_CTL_MASTER_CFG	0x1000	/* enable role select	*/
1342 #define	MII_1000BT_CTL_MASTER_SEL	0x0800	/* role select bit	*/
1343 #define	MII_1000BT_CTL_ADV_FDX		0x0200
1344 #define	MII_1000BT_CTL_ADV_HDX		0x0100
1345 
1346 /*
1347  * Bits in the MII_1000BASE_T_STATUS register
1348  */
1349 #define	MII_1000BASE_T_STATUS		10
1350 #define	MII_1000BT_STAT_MASTER_FAULT	0x8000
1351 #define	MII_1000BT_STAT_MASTER_MODE	0x4000
1352 #define	MII_1000BT_STAT_LCL_RCV_OK	0x2000
1353 #define	MII_1000BT_STAT_RMT_RCV_OK	0x1000
1354 #define	MII_1000BT_STAT_LP_FDX_CAP	0x0800
1355 #define	MII_1000BT_STAT_LP_HDX_CAP	0x0400
1356 
1357 #define	MII_CICADA_BYPASS_CONTROL	MII_VENDOR(2)
1358 #define	CICADA_125MHZ_CLOCK_ENABLE	0x0001
1359 
1360 #define	MII_CICADA_10BASET_CONTROL	MII_VENDOR(6)
1361 #define	MII_CICADA_DISABLE_ECHO_MODE	0x2000
1362 
1363 #define	MII_CICADA_EXT_CONTROL		MII_VENDOR(7)
1364 #define	MII_CICADA_MODE_SELECT_BITS 	0xf000
1365 #define	MII_CICADA_MODE_SELECT_RGMII	0x1000
1366 #define	MII_CICADA_POWER_SUPPLY_BITS	0x0e00
1367 #define	MII_CICADA_POWER_SUPPLY_3_3V	0x0000
1368 #define	MII_CICADA_POWER_SUPPLY_2_5V	0x0200
1369 
1370 #define	MII_CICADA_AUXCTRL_STATUS	MII_VENDOR(12)
1371 #define	MII_CICADA_PIN_PRORITY_SETTING	0x0004
1372 #define	MII_CICADA_PIN_PRORITY_DEFAULT	0x0000
1373 
1374 
1375 #define	NGE_REG_SIZE		0xfff
1376 #define	NGE_MII_SIZE		0x20
1377 #define	NGE_SEEROM_SIZE	0x800
1378 /*
1379  * Legacy rx's bd which does not support
1380  * any hardware offload
1381  */
1382 typedef struct _legacy_rx_bd {
1383 	uint32_t	host_buf_addr;
1384 	union {
1385 		uint32_t	cntl_val;
1386 		struct {
1387 			uint32_t	bcnt:16;
1388 			uint32_t	end:1;
1389 			uint32_t	miss:1;
1390 			uint32_t	extra:1;
1391 			uint32_t	inten:1;
1392 			uint32_t	bam:1;
1393 			uint32_t	mam:1;
1394 			uint32_t	pam:1;
1395 			uint32_t	runt:1;
1396 			uint32_t	lcol:1;
1397 			uint32_t	max:1;
1398 			uint32_t	lfer:1;
1399 			uint32_t	crc:1;
1400 			uint32_t	ofol:1;
1401 			uint32_t	fram:1;
1402 			uint32_t	err:1;
1403 			uint32_t	own:1;
1404 		} cntl_bits;
1405 	} cntl_status;
1406 } legacy_rx_bd, *plegacy_rx_bd;
1407 
1408 /*
1409  * Stand offload rx's bd which supports hareware checksum
1410  * for tcp/ip
1411  */
1412 #define	CK8G_NO_HSUM			0x0
1413 #define	CK8G_TCP_SUM_ERR		0x1
1414 #define	CK8G_UDP_SUM_ERR		0x2
1415 #define	CK8G_IP_HSUM_ERR		0x3
1416 #define	CK8G_IP_HSUM			0x4
1417 #define	CK8G_TCP_SUM			0x5
1418 #define	CK8G_UDP_SUM			0x6
1419 #define	CK8G_RESV			0x7
1420 typedef struct _sum_rx_bd {
1421 	uint32_t	host_buf_addr;
1422 	union {
1423 		uint32_t	cntl_val;
1424 		struct {
1425 			uint32_t	bcnt:14;
1426 			uint32_t	resv14_29:16;
1427 			uint32_t	inten:1;
1428 			uint32_t	own:1;
1429 		} control_bits;
1430 		struct {
1431 			uint32_t	bcnt:14;
1432 			uint32_t	resv14:1;
1433 			uint32_t	bam:1;
1434 			uint32_t	mam:1;
1435 			uint32_t	pam:1;
1436 			uint32_t	runt:1;
1437 			uint32_t	lcol:1;
1438 			uint32_t	max:1;
1439 			uint32_t	lfer:1;
1440 			uint32_t	crc:1;
1441 			uint32_t	ofol:1;
1442 			uint32_t	fram:1;
1443 			uint32_t	extra:1;
1444 			uint32_t	l3_l4_sum:3;
1445 			uint32_t	rend:1;
1446 			uint32_t	err:1;
1447 			uint32_t	own:1;
1448 		} status_bits;
1449 	} cntl_status;
1450 } sum_rx_bd, *psum_rx_bd;
1451 /*
1452  * Hot offload rx's bd which support 64bit access and
1453  * full-tcp hardware offload
1454  */
1455 typedef struct _hot_rx_bd {
1456 	uint32_t	host_buf_addr_hi;
1457 	uint32_t	host_buf_addr_lo;
1458 	uint32_t	sw_tag;
1459 	union {
1460 		uint32_t	cntl_val;
1461 		struct {
1462 			uint32_t	bcnt:14;
1463 			uint32_t	resv14_29:16;
1464 			uint32_t	inten:1;
1465 			uint32_t	own:1;
1466 		} control_bits;
1467 
1468 		struct {
1469 			uint32_t	bcnt:14;
1470 			uint32_t	ctmach_rd:1;
1471 			uint32_t	bam:1;
1472 			uint32_t	mam:1;
1473 			uint32_t	pam:1;
1474 			uint32_t	runt:1;
1475 			uint32_t	lcol:1;
1476 			uint32_t	max:1;
1477 			uint32_t	lfer:1;
1478 			uint32_t	crc:1;
1479 			uint32_t	ofol:1;
1480 			uint32_t	fram:1;
1481 			uint32_t	extra:1;
1482 			uint32_t	l3_l4_sum:3;
1483 			uint32_t	rend:1;
1484 			uint32_t	err:1;
1485 			uint32_t	own:1;
1486 		} status_bits_legacy;
1487 	} cntl_status;
1488 } hot_rx_bd, *phot_rx_bd;
1489 
1490 /*
1491  * Legacy tx's bd which does not support
1492  * any hardware offload
1493  */
1494 typedef struct _legacy_tx_bd {
1495 	uint32_t	host_buf_addr;
1496 	union {
1497 		uint32_t	cntl_val;
1498 		struct {
1499 			uint32_t	bcnt:16;
1500 			uint32_t	end:1;
1501 			uint32_t	resv17_23:7;
1502 			uint32_t	inten:1;
1503 			uint32_t	resv25_30:6;
1504 			uint32_t	own:1;
1505 		} control_bits;
1506 
1507 		struct {
1508 			uint32_t	bcnt:16;
1509 			uint32_t	end:1;
1510 			uint32_t	rtry:1;
1511 			uint32_t	trc:4;
1512 			uint32_t	inten:1;
1513 			uint32_t	exdef:1;
1514 			uint32_t	def:1;
1515 			uint32_t	lcar:1;
1516 			uint32_t	lcol:1;
1517 			uint32_t	uflo:1;
1518 			uint32_t	err:1;
1519 			uint32_t	own:1;
1520 		} status_bits;
1521 	} cntl_status;
1522 } legacy_tx_bd, *plegacy_tx_bd;
1523 
1524 /*
1525  * Stand offload tx's bd which supports hareware checksum
1526  * for tcp/ip
1527  */
1528 typedef struct _sum_tx_bd {
1529 	uint32_t	host_buf_addr;
1530 	union {
1531 		uint32_t	cntl_val;
1532 		struct {
1533 			uint32_t	bcnt:14;
1534 			uint32_t	resv14_25:12;
1535 			uint32_t	tcp_hsum:1;
1536 			uint32_t	ip_hsum:1;
1537 			uint32_t	segen:1;
1538 			uint32_t	end:1;
1539 			uint32_t	inten:1;
1540 			uint32_t	own:1;
1541 		} control_sum_bits;
1542 
1543 		struct {
1544 			uint32_t	bcnt:14;
1545 			uint32_t	mss:14;
1546 			uint32_t	segen:1;
1547 			uint32_t	end:1;
1548 			uint32_t	inten:1;
1549 			uint32_t	own:1;
1550 		} control_tso_bits;
1551 
1552 		struct {
1553 			uint32_t	bcnt:14;
1554 			uint32_t	resv14_17:4;
1555 			uint32_t	rtry:1;
1556 			uint32_t	trc:4;
1557 			uint32_t	inten:1;
1558 			uint32_t	exdef:1;
1559 			uint32_t	def:1;
1560 			uint32_t	lcar:1;
1561 			uint32_t	lcol:1;
1562 			uint32_t	uflo:1;
1563 			uint32_t	end:1;
1564 			uint32_t	err:1;
1565 			uint32_t	own:1;
1566 		} status_bits;
1567 	} control_status;
1568 } sum_tx_bd, *psum_tx_bd;
1569 
1570 /*
1571  * Hot offload tx's bd which support 64bit access and
1572  * full-tcp hardware offload
1573  */
1574 
1575 typedef struct _hot_tx_bd {
1576 	uint32_t	host_buf_addr_hi;
1577 	uint32_t	host_buf_addr_lo;
1578 	union {
1579 		uint32_t	parm_val;
1580 		struct {
1581 			uint32_t	resv0_15:16;
1582 			uint32_t	resv16:1;
1583 			uint32_t	resv17:1;
1584 			uint32_t	resv18_31:14;
1585 		} parm_bits;
1586 	} hot_parms;
1587 
1588 	union {
1589 		uint32_t	cntl_val;
1590 		struct {
1591 			uint32_t	bcnt:14;
1592 			uint32_t	resv14_25:12;
1593 			uint32_t	tcp_hsum:1;
1594 			uint32_t	ip_hsum:1;
1595 			uint32_t	segen:1;
1596 			uint32_t	end:1;
1597 			uint32_t	inten:1;
1598 			uint32_t	own:1;
1599 		} control_sum_bits;
1600 
1601 		struct {
1602 			uint32_t	bcnt:14;
1603 			uint32_t	mss:14;
1604 			uint32_t	segen:1;
1605 			uint32_t	end:1;
1606 			uint32_t	inten:1;
1607 			uint32_t	own:1;
1608 		} control_tso_bits;
1609 
1610 		struct {
1611 			uint32_t	bcnt:14;
1612 			uint32_t	resv14_17:4;
1613 			uint32_t	rtry:1;
1614 			uint32_t	trc:4;
1615 			uint32_t	inten:1;
1616 			uint32_t	exdef:1;
1617 			uint32_t	def:1;
1618 			uint32_t	lcar:1;
1619 			uint32_t	lcol:1;
1620 			uint32_t	uflo:1;
1621 			uint32_t	end:1;
1622 			uint32_t	err:1;
1623 			uint32_t	own:1;
1624 		} status_bits;
1625 	} control_status;
1626 } hot_tx_bd, *phot_tx_bd;
1627 
1628 #ifdef __cplusplus
1629 }
1630 #endif
1631 
1632 #endif	/* _SYS_NGE_CHIP_H */
1633