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