xref: /onnv-gate/usr/src/uts/common/io/nge/nge_chip.h (revision 9906:bfc3790e8ac6)
15578Smx205022 /*
25578Smx205022  * CDDL HEADER START
35578Smx205022  *
45578Smx205022  * The contents of this file are subject to the terms of the
55578Smx205022  * Common Development and Distribution License (the "License").
65578Smx205022  * You may not use this file except in compliance with the License.
75578Smx205022  *
85578Smx205022  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95578Smx205022  * or http://www.opensolaris.org/os/licensing.
105578Smx205022  * See the License for the specific language governing permissions
115578Smx205022  * and limitations under the License.
125578Smx205022  *
135578Smx205022  * When distributing Covered Code, include this CDDL HEADER in each
145578Smx205022  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155578Smx205022  * If applicable, add the following below this CDDL HEADER, with the
165578Smx205022  * fields enclosed by brackets "[]" replaced with your own identifying
175578Smx205022  * information: Portions Copyright [yyyy] [name of copyright owner]
185578Smx205022  *
195578Smx205022  * CDDL HEADER END
205578Smx205022  */
215578Smx205022 
225574Smx205022 /*
239604SZhen.W@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
245574Smx205022  * Use is subject to license terms.
255574Smx205022  */
265574Smx205022 
275574Smx205022 #ifndef _SYS_NGE_CHIP_H
285574Smx205022 #define	_SYS_NGE_CHIP_H
295574Smx205022 
305574Smx205022 #ifdef __cplusplus
315574Smx205022 extern "C" {
325574Smx205022 #endif
335574Smx205022 
345574Smx205022 #include "nge.h"
355574Smx205022 
365574Smx205022 #define	VENDOR_ID_NVIDIA	0x10de
375574Smx205022 
385574Smx205022 #define	DEVICE_ID_MCP04_37	0x37
395574Smx205022 #define	DEVICE_ID_MCP04_38	0x38
405574Smx205022 #define	DEVICE_ID_CK804_56	0x56
415574Smx205022 #define	DEVICE_ID_CK804_57	0x57
425574Smx205022 #define	DEVICE_ID_MCP51_269	0x269
435574Smx205022 #define	DEVICE_ID_MCP51_268	0x268
445574Smx205022 #define	DEVICE_ID_MCP55_373	0x373
455574Smx205022 #define	DEVICE_ID_MCP55_372	0x372
465574Smx205022 #define	DEVICE_ID_MCP61_3EE	0x3ee
475574Smx205022 #define	DEVICE_ID_MCP61_3EF	0x3ef
489708SZhen.W@Sun.COM #define	DEVICE_ID_MCP77_760	0x760
49*9906SZhen.W@Sun.COM #define	DEVICE_ID_MCP79_AB0	0xab0
505574Smx205022 #define	DEVICE_ID_NF3_E6	0xe6
515574Smx205022 #define	DEVICE_ID_NF3_DF	0xdf
525574Smx205022 
535574Smx205022 /* Private PCI configuration register for bus config of ck804/mcp55 */
545574Smx205022 #define	PCI_CONF_HT_INTERNAL	0x4c
555574Smx205022 
565574Smx205022 typedef union _nge_interbus_conf {
575574Smx205022 	uint32_t	conf_val;
585574Smx205022 	struct {
595574Smx205022 		uint32_t	unit_id:5;
605574Smx205022 		uint32_t	resv5_23:19;
615574Smx205022 		uint32_t	aux_val:3;
625574Smx205022 		uint32_t	resv27:1;
635574Smx205022 		uint32_t	msi_off:1;
645574Smx205022 		uint32_t	msix_off:1; /* mcp55 only */
655574Smx205022 		uint32_t	resv30_31:2;
665574Smx205022 	} conf_bits;
675574Smx205022 } nge_interbus_conf;
685574Smx205022 
695574Smx205022 /* Private PCI configuration register for MSI mask of mcp55 */
705574Smx205022 #define	PCI_CONF_HT_MSI_MASK	0x60
715574Smx205022 
725574Smx205022 typedef union _nge_msi_mask_conf {
735574Smx205022 	uint32_t	msi_mask_conf_val;
745574Smx205022 	struct {
755574Smx205022 		uint32_t	vec0_off:1;
765574Smx205022 		uint32_t	vec1_off:1;
775574Smx205022 		uint32_t	vec2_off:1;
785574Smx205022 		uint32_t	vec3_off:1;
795574Smx205022 		uint32_t	vec4_off:1;
805574Smx205022 		uint32_t	vec5_off:1;
815574Smx205022 		uint32_t	vec6_off:1;
825574Smx205022 		uint32_t	vec7_off:1;
835574Smx205022 		uint32_t	resv8_31:24;
845574Smx205022 	} msi_mask_bits;
855574Smx205022 } nge_msi_mask_conf;
865574Smx205022 
875574Smx205022 /* Private PCI configuration register for MSI map capability of mcp55 */
885574Smx205022 #define	PCI_CONF_HT_MSI_MAP_CAP	0x6c
895574Smx205022 
905574Smx205022 typedef union _nge_msi_map_cap_conf {
915574Smx205022 	uint32_t	msi_map_cap_conf_val;
925574Smx205022 	struct {
935574Smx205022 		uint32_t	cap_id:8;
945574Smx205022 		uint32_t	next_ptr:8;
955574Smx205022 		uint32_t	map_en:1;
965574Smx205022 		uint32_t	map_fixed:1;
975574Smx205022 		uint32_t	resv18_26:9;
985574Smx205022 		uint32_t	cap_type:5;
995574Smx205022 	} map_cap_conf_bits;
1005574Smx205022 } nge_msi_map_cap_conf;
1015574Smx205022 
1025574Smx205022 /*
1035574Smx205022  * Master interrupt
1045574Smx205022  */
1055574Smx205022 #define	NGE_INTR_SRC		0x000
1065574Smx205022 #define	INTR_SRC_ALL		0x00007fff
1075574Smx205022 typedef union _nge_intr_src {
1085574Smx205022 	uint32_t	intr_val;
1095574Smx205022 	struct {
1105574Smx205022 		uint32_t	reint:1;
1115574Smx205022 		uint32_t	rcint:1;
1125574Smx205022 		uint32_t	miss:1;
1135574Smx205022 		uint32_t	teint:1;
1145574Smx205022 		uint32_t	tcint:1;
1155574Smx205022 		uint32_t	stint:1;
1165574Smx205022 		uint32_t	mint:1;
1175574Smx205022 		uint32_t	rfint:1;
1185574Smx205022 		uint32_t	tfint:1;
1195574Smx205022 		uint32_t	feint:1;
1205574Smx205022 		uint32_t	resv10:1;
1215574Smx205022 		uint32_t	resv11:1;
1225574Smx205022 		uint32_t	resv12:1;
1235574Smx205022 		uint32_t	resv13:1;
1245574Smx205022 		uint32_t	phyint:1;
1255574Smx205022 		uint32_t	resv15_31:17;
1265574Smx205022 	} int_bits;
1275574Smx205022 } nge_intr_src;
1285574Smx205022 
1295574Smx205022 /*
1305574Smx205022  * Master interrupt Mask
1315574Smx205022  */
1325574Smx205022 #define	NGE_INTR_MASK		0x004
1335574Smx205022 #define	NGE_INTR_ALL_EN		0x00007fff
1345574Smx205022 typedef union _nge_intr_mask {
1355574Smx205022 	uint32_t	mask_val;
1365574Smx205022 	struct {
1375574Smx205022 		uint32_t	reint:1;
1385574Smx205022 		uint32_t	rcint:1;
1395574Smx205022 		uint32_t	miss:1;
1405574Smx205022 		uint32_t	teint:1;
1415574Smx205022 		uint32_t	tcint:1;
1425574Smx205022 		uint32_t	stint:1;
1435574Smx205022 		uint32_t	mint:1;
1445574Smx205022 		uint32_t	rfint:1;
1455574Smx205022 		uint32_t	tfint:1;
1465574Smx205022 		uint32_t	feint:1;
1475574Smx205022 		uint32_t	resv10:1;
1485574Smx205022 		uint32_t	resv11:1;
1495574Smx205022 		uint32_t	resv12:1;
1505574Smx205022 		uint32_t	resv13:1;
1515574Smx205022 		uint32_t	phyint:1;
1525574Smx205022 		uint32_t	resv15_31:17;
1535574Smx205022 	} mask_bits;
1545574Smx205022 } nge_intr_mask;
1555574Smx205022 
1565574Smx205022 /*
1575574Smx205022  * Software timer control register
1585574Smx205022  */
1595574Smx205022 #define	NGE_SWTR_CNTL		0x008
1605574Smx205022 typedef union _nge_swtr_cntl {
1615574Smx205022 	uint8_t	ctrl_val;
1625574Smx205022 	struct {
1635574Smx205022 		uint8_t	stren:1;
1645574Smx205022 		uint8_t	sten:1;
1655574Smx205022 		uint8_t	resv2_7:6;
1665574Smx205022 	} cntl_bits;
1675574Smx205022 } nge_swtr_cntl;
1685574Smx205022 
1695574Smx205022 /*
1705574Smx205022  * Software Timer Interval
1715574Smx205022  */
1725574Smx205022 #define	NGE_SWTR_ITC		0x00c
1735659Sjj146644 
1745659Sjj146644 /* Default timer interval, 97 would mean 1 ms */
1755659Sjj146644 #define	SWTR_ITC		0x8
1765574Smx205022 typedef union _nge_itc {
1775574Smx205022 	uint32_t	itc_val;
1785574Smx205022 	struct {
1795574Smx205022 		uint32_t	sw_intv:16;
1805574Smx205022 		uint32_t	sw_cur_val:16;
1815574Smx205022 	} itc_bits;
1825574Smx205022 } nge_itc;
1835574Smx205022 
1845574Smx205022 /*
1855574Smx205022  * Fatal error register
1865574Smx205022  */
1875574Smx205022 #define	NGE_REG010		0x010
1885574Smx205022 typedef union _nge_reg010 {
1895574Smx205022 	uint32_t	reg010_val;
1905574Smx205022 	struct {
1915574Smx205022 		uint32_t	resv0:1;
1925574Smx205022 		uint32_t	resv1:1;
1935574Smx205022 		uint32_t	resv2:1;
1945574Smx205022 		uint32_t	resv3:1;
1955574Smx205022 		uint32_t	resv4:1;
1965574Smx205022 		uint32_t	resv5:1;
1975574Smx205022 		uint32_t	resv6:1;
1985574Smx205022 		uint32_t	resv7:1;
1995574Smx205022 		uint32_t	resv8:1;
2005574Smx205022 		uint32_t	resv9:1;
2015574Smx205022 		uint32_t	resv10:1;
2025574Smx205022 		uint32_t	resv11_31:21;
2035574Smx205022 	} reg010_bits;
2045574Smx205022 } nge_reg010;
2055574Smx205022 
2065574Smx205022 /*
2075574Smx205022  * MSI vector map register 0
2085574Smx205022  */
2095574Smx205022 #define	NGE_MSI_MAP0		0x020
2105574Smx205022 typedef union _nge_msi_map0_vec {
2115574Smx205022 	uint32_t msi_map0_val;
2125574Smx205022 	struct {
2135574Smx205022 		uint32_t reint_vec:4;
2145574Smx205022 		uint32_t rcint_vec:4;
2155574Smx205022 		uint32_t miss_vec:4;
2165574Smx205022 		uint32_t teint_vec:4;
2175574Smx205022 		uint32_t tcint_vec:4;
2185574Smx205022 		uint32_t stint_vec:4;
2195574Smx205022 		uint32_t mint_vec:4;
2205574Smx205022 		uint32_t rfint_vec:4;
2215574Smx205022 	} vecs_bits;
2225574Smx205022 } nge_msi_map0_vec;
2235574Smx205022 
2245574Smx205022 /*
2255574Smx205022  * MSI vector map register 1
2265574Smx205022  */
2275574Smx205022 #define	NGE_MSI_MAP1		0x024
2285574Smx205022 typedef union _nge_msi_map1_vec {
2295574Smx205022 	uint32_t msi_map1_val;
2305574Smx205022 	struct {
2315574Smx205022 		uint32_t tfint_vec:4;
2325574Smx205022 		uint32_t feint_vec:4;
2335574Smx205022 		uint32_t resv8_11:4;
2345574Smx205022 		uint32_t resv12_15:4;
2355574Smx205022 		uint32_t resv16_19:4;
2365574Smx205022 		uint32_t resv20_23:4;
2375574Smx205022 		uint32_t resv24_31:8;
2385574Smx205022 	} vecs_bits;
2395574Smx205022 } nge_msi_map1_vec;
2405574Smx205022 
2415574Smx205022 
2425574Smx205022 /*
2435574Smx205022  * MSI vector map register 2
2445574Smx205022  */
2455574Smx205022 #define	NGE_MSI_MAP2		0x028
2465574Smx205022 
2475574Smx205022 /*
2485574Smx205022  * MSI vector map register 2
2495574Smx205022  */
2505574Smx205022 #define	NGE_MSI_MAP3		0x02c
2515574Smx205022 
2525574Smx205022 /*
2535574Smx205022  * MSI mask register for mcp55
2545574Smx205022  */
2555574Smx205022 #define	NGE_MSI_MASK	0x30
2565574Smx205022 typedef union _nge_msi_mask {
2575574Smx205022 	uint32_t	msi_mask_val;
2585574Smx205022 	struct {
2595574Smx205022 		uint32_t	vec0:1;
2605574Smx205022 		uint32_t	vec1:1;
2615574Smx205022 		uint32_t	vec2:1;
2625574Smx205022 		uint32_t	vec3:1;
2635574Smx205022 		uint32_t	vec4:1;
2645574Smx205022 		uint32_t	vec5:1;
2655574Smx205022 		uint32_t	vec6:1;
2665574Smx205022 		uint32_t	vec7:1;
2675574Smx205022 		uint32_t	resv8_31:24;
2685574Smx205022 	}msi_msk_bits;
2695574Smx205022 }nge_msi_mask;
2705574Smx205022 
2715574Smx205022 /*
2725574Smx205022  * Software misc register for mcp51
2735574Smx205022  */
2745574Smx205022 #define	NGE_SOFT_MISC		0x034
2755574Smx205022 typedef union _nge_soft_misc {
2765574Smx205022 	uint32_t misc_val;
2775574Smx205022 	struct {
2785574Smx205022 		uint32_t	rx_clk_vx_rst:1;
2795574Smx205022 		uint32_t	tx_clk_vx_rst:1;
2805574Smx205022 		uint32_t	clk12m_vx_rst:1;
2815574Smx205022 		uint32_t	fpci_clk_vx_rst:1;
2825574Smx205022 		uint32_t	rx_clk_vc_rst:1;
2835574Smx205022 		uint32_t	tx_clk_vc_rst:1;
2845574Smx205022 		uint32_t	fs_clk_vc_rst:1;
2855574Smx205022 		uint32_t	rst_ex_m2pintf:1;
2865574Smx205022 		uint32_t	resv8_31:24;
2875574Smx205022 	} misc_bits;
2885574Smx205022 } nge_soft_misc;
2895574Smx205022 
2905574Smx205022 /*
2915574Smx205022  * DMA configuration
2925574Smx205022  */
2935574Smx205022 #define	NGE_DMA_CFG		0x040
2945574Smx205022 typedef union _nge_dma_cfg {
2955574Smx205022 	uint32_t cfg_val;
2965574Smx205022 	struct {
2975574Smx205022 		uint32_t	tx_start_pri:3;
2985574Smx205022 		uint32_t	tx_start_pri_flag:1;
2995574Smx205022 		uint32_t	tx_prd_rpri:3;
3005574Smx205022 		uint32_t	tx_prd_rpri_flag:1;
3015574Smx205022 		uint32_t	tx_prd_wpri:3;
3025574Smx205022 		uint32_t	tx_prd_wpri_flag:1;
3035574Smx205022 		uint32_t	rx_start_pri:3;
3045574Smx205022 		uint32_t	rx_start_pri_flag:1;
3055574Smx205022 		uint32_t	rx_prd_rpri:3;
3065574Smx205022 		uint32_t	rx_prd_rpri_flag:1;
3075574Smx205022 		uint32_t	rx_prd_wpri:3;
3085574Smx205022 		uint32_t	rx_prd_wpri_flag:1;
3095574Smx205022 		uint32_t	dma_max_pri:3;
3105574Smx205022 		uint32_t	dma_wrr_disable:1;
3115574Smx205022 		uint32_t	dma_pri_disable:1;
3125574Smx205022 	} cfg_bits;
3135574Smx205022 } nge_dma_cfg;
3145574Smx205022 
3155574Smx205022 /*
3165574Smx205022  * Request DMA configuration
3175574Smx205022  */
3185574Smx205022 #define	NGE_DMA_RCFG		0x044
3195574Smx205022 typedef union _nge_dma_rcfg {
3205574Smx205022 	uint32_t dma_rcfg_val;
3215574Smx205022 	struct {
3225574Smx205022 		uint32_t	tx_prd_coh_state:2;
3235574Smx205022 		uint32_t	tx_data_coh_state:2;
3245574Smx205022 		uint32_t	rx_prd_coh_state:2;
3255574Smx205022 		uint32_t	rx_data_coh_state:2;
3265574Smx205022 		uint32_t	max_roffset:5;
3275574Smx205022 		uint32_t	resv13_31:19;
3285574Smx205022 	} rcfg_bis;
3295574Smx205022 } nge_dma_rcfg;
3305574Smx205022 
3315574Smx205022 /*
3325574Smx205022  * Hot DMA configuration
3335574Smx205022  */
3345574Smx205022 #define	NGE_DMA_HOT_CFG		0x048
3355574Smx205022 typedef union _nge_dma_hcfg {
3365574Smx205022 	uint32_t	dma_hcfg_val;
3375574Smx205022 	struct {
3385574Smx205022 		uint32_t	resv0_3:4;
3395574Smx205022 		uint32_t	noti_wstart_pri:3;
3405574Smx205022 		uint32_t	noti_wstart_pri_flag:1;
3415574Smx205022 		uint32_t	cmd_rstart_pri:3;
3425574Smx205022 		uint32_t	cmd_rstart_pri_flag:1;
3435574Smx205022 		uint32_t	cmd_wstart_pri:3;
3445574Smx205022 		uint32_t	cmd_wstart_pri_flag:1;
3455574Smx205022 		uint32_t	resv16_31:16;
3465574Smx205022 	} hcfg_bits;
3475574Smx205022 } nge_dma_hcfg;
3485574Smx205022 
3495574Smx205022 /*
3505574Smx205022  * PMU control register 0 for mcp51
3515574Smx205022  */
3525574Smx205022 #define	NGE_PMU_CNTL0			0x060
3535574Smx205022 #define	NGE_PMU_CORE_SPD10_BUSY		0x8
3545574Smx205022 #define	NGE_PMU_CORE_SPD10_IDLE		0xB
3555574Smx205022 #define	NGE_PMU_CORE_SPD100_BUSY	0x4
3565574Smx205022 #define	NGE_PMU_CORE_SPD100_IDLE	0x7
3575574Smx205022 #define	NGE_PMU_CORE_SPD1000_BUSY	0x0
3585574Smx205022 #define	NGE_PMU_CORE_SPD1000_IDLE	0x3
3595574Smx205022 
3605574Smx205022 typedef union _nge_pmu_cntl0 {
3615574Smx205022 	uint32_t	cntl0_val;
3625574Smx205022 	struct {
3635574Smx205022 		uint32_t	core_spd10_fp:4;
3645574Smx205022 		uint32_t	core_spd10_idle:4;
3655574Smx205022 		uint32_t	core_spd100_fp:4;
3665574Smx205022 		uint32_t	core_spd100_idle:4;
3675574Smx205022 		uint32_t	core_spd1000_fp:4;
3685574Smx205022 		uint32_t	core_spd1000_idle:4;
3695574Smx205022 		uint32_t	core_sts_cur:8;
3705574Smx205022 	} cntl0_bits;
3715574Smx205022 } nge_pmu_cntl0;
3725574Smx205022 
3735574Smx205022 /*
3745574Smx205022  * PMU control register 1 for mcp51
3755574Smx205022  */
3765574Smx205022 #define	NGE_PMU_CNTL1		0x064
3775574Smx205022 typedef union _nge_pmu_cntl1 {
3785574Smx205022 	uint32_t	cntl1_val;
3795574Smx205022 	struct {
3805574Smx205022 		uint32_t	dev_fp:4;
3815574Smx205022 		uint32_t	dev_idle:4;
3825574Smx205022 		uint32_t	resv8_27:20;
3835574Smx205022 		uint32_t	dev_sts_cur:4;
3845574Smx205022 	} cntl1_bits;
3855574Smx205022 } nge_pmu_cntl1;
3865574Smx205022 
3875574Smx205022 /*
3885574Smx205022  * PMU control register 2 for mcp51
3895574Smx205022  */
3905574Smx205022 #define	NGE_PMU_CNTL2		0x068
3915574Smx205022 typedef union _nge_pmu_cntl2 {
3925574Smx205022 	uint32_t	cntl2_val;
3935574Smx205022 	struct {
3945574Smx205022 		uint32_t	core_override:4;
3955574Smx205022 		uint32_t	resv4_7:4;
3965574Smx205022 		uint32_t	dev_override:4;
3975574Smx205022 		uint32_t	resv12_15:4;
3985574Smx205022 		uint32_t	core_override_en:1;
3995574Smx205022 		uint32_t	dev_override_en:1;
4005574Smx205022 		uint32_t	core_enable:1;
4015574Smx205022 		uint32_t	dev_enable:1;
4025574Smx205022 		uint32_t	rx_wake_dis:1;
4035574Smx205022 		uint32_t	cidle_timer:1;
4045574Smx205022 		uint32_t	didle_timer:1;
4055574Smx205022 		uint32_t	resv23_31:9;
4065574Smx205022 	} cntl2_bits;
4075574Smx205022 } nge_pmu_cntl2;
4085574Smx205022 
4095574Smx205022 /*
4105574Smx205022  * PMU core idle limit register for mcp51
4115574Smx205022  */
4125574Smx205022 #define	NGE_PMU_CIDLE_LIMIT	0x06c
4135574Smx205022 #define	NGE_PMU_CIDLE_LIMIT_DEF	0xffff
4145574Smx205022 
4155574Smx205022 /*
4165574Smx205022  * PMU device idle limit register for mcp51
4175574Smx205022  */
4185574Smx205022 #define	NGE_PMU_DIDLE_LIMIT	0x070
4195574Smx205022 #define	NGE_PMU_DIDLE_LIMIT_DEF	0xffff
4205574Smx205022 
4215574Smx205022 /*
4225574Smx205022  * PMU core idle count value register for mcp51
4235574Smx205022  */
4245574Smx205022 #define	NGE_PMU_CIDLE_COUNT	0x074
4255574Smx205022 #define	NGE_PMU_CIDEL_COUNT_DEF	0xffff
4265574Smx205022 
4275574Smx205022 /*
4285574Smx205022  * PMU device idle count value register for mcp51
4295574Smx205022  */
4305574Smx205022 #define	NGE_PMU_DIDLE_COUNT	0x078
4315574Smx205022 #define	NGE_PMU_DIDEL_COUNT_DEF	0xffff
4325574Smx205022 
4335574Smx205022 /*
4345574Smx205022  * Transmit control
4355574Smx205022  */
4365574Smx205022 #define	NGE_TX_CNTL		0x080
4375574Smx205022 typedef union _nge_tx_cntl {
4385574Smx205022 	uint32_t	cntl_val;
4395574Smx205022 	struct {
4405574Smx205022 		uint32_t	paen:1; /* only for mcp55, otherwise reserve */
4415574Smx205022 		uint32_t	resv1:1;
4425574Smx205022 		uint32_t	retry_en:1;
4435574Smx205022 		uint32_t	pad_en:1;
4445574Smx205022 		uint32_t	fappend_en:1;
4455574Smx205022 		uint32_t	two_def_en:1;
4465574Smx205022 		uint32_t	resv6_7:2;
4475574Smx205022 		uint32_t	max_retry:4;
4485574Smx205022 		uint32_t	burst_en:1;
4495574Smx205022 		uint32_t	resv13_15:3;
4505574Smx205022 		uint32_t	retry_emask:1;
4515574Smx205022 		uint32_t	exdef_mask:1;
4525574Smx205022 		uint32_t	def_mask:1;
4535574Smx205022 		uint32_t	lcar_mask:1;
4545574Smx205022 		uint32_t	tlcol_mask:1;
4555574Smx205022 		uint32_t	uflo_err_mask:1;
4565574Smx205022 		uint32_t	resv22_23:2;
4575574Smx205022 		uint32_t	jam_seq_en:1;
4585574Smx205022 		uint32_t	resv25_31:7;
4595574Smx205022 	} cntl_bits;
4605574Smx205022 } nge_tx_cntl;
4615574Smx205022 
4625574Smx205022 /*
4635574Smx205022  * Transmit enable
4645574Smx205022  * Note: for ck804 or mcp51, this is 8-bit register;
4655574Smx205022  * for mcp55, it is a 32-bit register.
4665574Smx205022  */
4675574Smx205022 #define	NGE_TX_EN		0x084
4689604SZhen.W@Sun.COM #define	NGE_SMU_FREE		0x0
4699604SZhen.W@Sun.COM #define	NGE_SMU_GET		0xf
4705574Smx205022 typedef union _nge_tx_en {
4719604SZhen.W@Sun.COM 	uint32_t	val;
4725574Smx205022 	struct {
4739604SZhen.W@Sun.COM 		uint32_t	tx_en:1;
4749604SZhen.W@Sun.COM 		uint32_t	resv1_7:7;
4759604SZhen.W@Sun.COM 		uint32_t	smu2mac:4;
4769604SZhen.W@Sun.COM 		uint32_t	mac2smu:4;
4779604SZhen.W@Sun.COM 		uint32_t	resv16_31:16;
4785574Smx205022 	} bits;
4795574Smx205022 } nge_tx_en;
4805574Smx205022 
4815574Smx205022 /*
4825574Smx205022  * Transmit status
4835574Smx205022  */
4845574Smx205022 #define	NGE_TX_STA		0x088
4855574Smx205022 typedef union _nge_tx_sta {
4865574Smx205022 	uint32_t	sta_val;
4875574Smx205022 	struct {
4885574Smx205022 		uint32_t	tx_chan_sta:1;
4895574Smx205022 		uint32_t	resv1_15:15;
4905574Smx205022 		uint32_t	retry_err:1;
4915574Smx205022 		uint32_t	exdef:1;
4925574Smx205022 		uint32_t	def:1;
4935574Smx205022 		uint32_t	lcar:1;
4945574Smx205022 		uint32_t	tlcol:1;
4955574Smx205022 		uint32_t	uflo:1;
4965574Smx205022 		uint32_t	resv22_31:10;
4975574Smx205022 	} sta_bits;
4985574Smx205022 } nge_tx_sta;
4995574Smx205022 
5005574Smx205022 /*
5015574Smx205022  * Receive control
5025574Smx205022  */
5035574Smx205022 #define	NGE_RX_CNTL0		0x08c
5045574Smx205022 typedef union _nge_rx_cntrl0 {
5055574Smx205022 	uint32_t	cntl_val;
5065574Smx205022 	struct {
5075574Smx205022 		uint32_t	resv0:1;
5085574Smx205022 		uint32_t	padsen:1;
5095574Smx205022 		uint32_t	fcsren:1;
5105574Smx205022 		uint32_t	paen:1;
5115574Smx205022 		uint32_t	lben:1;
5125574Smx205022 		uint32_t	afen:1;
5135574Smx205022 		uint32_t	runten:1;
5145574Smx205022 		uint32_t	brdis:1;
5155574Smx205022 		uint32_t	rdfen:1;
5165574Smx205022 		uint32_t	slfb:1;
5175574Smx205022 		uint32_t	resv10_15:6;
5185574Smx205022 		uint32_t	runtm:1;
5195574Smx205022 		uint32_t	rlcolm:1;
5205574Smx205022 		uint32_t	maxerm:1;
5215574Smx205022 		uint32_t	lferm:1;
5225574Smx205022 		uint32_t	crcm:1;
5235574Smx205022 		uint32_t	ofolm:1;
5245574Smx205022 		uint32_t	framerm:1;
5255574Smx205022 		uint32_t 	resv23_31:9;
5265574Smx205022 	} cntl_bits;
5275574Smx205022 } nge_rx_cntrl0;
5285574Smx205022 
5295574Smx205022 /*
5305574Smx205022  * Maximum receive Frame size
5315574Smx205022  */
5325574Smx205022 #define	NGE_RX_CNTL1		0x090
5335574Smx205022 typedef union _nge_rx_cntl1 {
5345574Smx205022 	uint32_t	cntl_val;
5355574Smx205022 	struct {
5365574Smx205022 		uint32_t	length:14;
5375574Smx205022 		uint32_t	resv14_31:18;
5385574Smx205022 	} cntl_bits;
5395574Smx205022 } nge_rx_cntl1;
5405574Smx205022 
5415574Smx205022 /*
5425574Smx205022  * Receive enable register
5435574Smx205022  * Note: for ck804 and mcp51, this is a 8-bit register;
5445574Smx205022  * for mcp55, it is a 32-bit register.
5455574Smx205022  */
5465574Smx205022 #define	NGE_RX_EN		0x094
5475574Smx205022 typedef union _nge_rx_en {
5485574Smx205022 	uint8_t	val;
5495574Smx205022 	struct {
5505574Smx205022 		uint8_t	rx_en:1;
5515574Smx205022 		uint8_t	resv1_7:7;
5525574Smx205022 	} bits;
5535574Smx205022 } nge_rx_en;
5545574Smx205022 
5555574Smx205022 /*
5565574Smx205022  * Receive status register
5575574Smx205022  */
5585574Smx205022 #define	NGE_RX_STA		0x098
5595574Smx205022 typedef union _nge_rx_sta {
5605574Smx205022 	uint32_t	sta_val;
5615574Smx205022 	struct {
5625574Smx205022 		uint32_t	rx_chan_sta:1;
5635574Smx205022 		uint32_t	resv1_15:15;
5645574Smx205022 		uint32_t	runt_sta:1;
5655574Smx205022 		uint32_t	rlcol_sta:1;
5665574Smx205022 		uint32_t	mlen_err:1;
5675574Smx205022 		uint32_t	lf_err:1;
5685574Smx205022 		uint32_t	crc_err:1;
5695574Smx205022 		uint32_t	ofol_err:1;
5705574Smx205022 		uint32_t	fram_err:1;
5715574Smx205022 		uint32_t	resv23_31:9;
5725574Smx205022 	} sta_bits;
5735574Smx205022 } nge_rx_sta;
5745574Smx205022 
5755574Smx205022 /*
5765574Smx205022  * Backoff Control
5775574Smx205022  */
5785574Smx205022 #define	NGE_BKOFF_CNTL		0x09c
5795574Smx205022 #define	BKOFF_RSEED		0x8
5805574Smx205022 #define	BKOFF_SLIM_GMII		0x3ff
5815574Smx205022 #define	BKOFF_SLIM_MII		0x7f
5825574Smx205022 typedef union _nge_bkoff_cntl	{
5835574Smx205022 	uint32_t	cntl_val;
5845574Smx205022 	struct {
5855574Smx205022 		uint32_t	rseed:8;
5865574Smx205022 		uint32_t	sltm:10;
5875574Smx205022 		uint32_t	resv18_30:13;
5885574Smx205022 		uint32_t	leg_bk_en:1;
5895574Smx205022 	} bkoff_bits;
5905574Smx205022 } nge_bkoff_cntl;
5915574Smx205022 
5925574Smx205022 /*
5935574Smx205022  * Transmit defferral timing
5945574Smx205022  */
5955574Smx205022 #define	NGE_TX_DEF		0x0a0
5965574Smx205022 #define	TX_TIFG_MII		0x15
5975574Smx205022 #define	TX_IFG_RGMII_1000_FD	0x14
5985574Smx205022 #define	TX_IFG_RGMII_OTHER	0x16
5995574Smx205022 #define	TX_IFG2_MII		0x5
6005574Smx205022 #define	TX_IFG2_RGMII_10_100	0x7
6015574Smx205022 #define	TX_IFG2_RGMII_1000	0x5
6025574Smx205022 #define	TX_IFG2_DEFAULT		0X0
6035574Smx205022 #define	TX_IFG1_DEFAULT		0xf
6045574Smx205022 typedef union _nge_tx_def {
6055574Smx205022 	uint32_t	def_val;
6065574Smx205022 	struct {
6075574Smx205022 		uint32_t	ifg1_def:8;
6085574Smx205022 		uint32_t	ifg2_def:8;
6095574Smx205022 		uint32_t	if_def:8;
6105574Smx205022 		uint32_t	resv24_31:8;
6115574Smx205022 	} def_bits;
6125574Smx205022 } nge_tx_def;
6135574Smx205022 
6145574Smx205022 /*
6155574Smx205022  * Receive defferral timing
6165574Smx205022  */
6175574Smx205022 #define	NGE_RX_DEf		0x0a4
6185574Smx205022 #define	RX_DEF_DEFAULT		0x16
6195574Smx205022 typedef union _nge_rx_def {
6205574Smx205022 	uint8_t	def_val;
6215574Smx205022 	struct {
6225574Smx205022 		uint8_t rifg;
6235574Smx205022 	} def_bits;
6245574Smx205022 } nge_rx_def;
6255574Smx205022 
6265574Smx205022 /*
6275574Smx205022  * Low 32 bit unicast address
6285574Smx205022  */
6295574Smx205022 #define	NGE_UNI_ADDR0		0x0a8
6305574Smx205022 union {
6315574Smx205022 	uint32_t	addr_val;
6325574Smx205022 	struct {
6335574Smx205022 		uint32_t	addr;
6345574Smx205022 	} addr_bits;
6355574Smx205022 } nge_uni_addr0;
6365574Smx205022 
6375574Smx205022 /*
6385574Smx205022  * High 32 bit unicast address
6395574Smx205022  */
6405574Smx205022 #define	NGE_UNI_ADDR1		0x0ac
6415574Smx205022 typedef union _nge_uni_addr1 {
6425574Smx205022 	uint32_t	addr_val;
6435574Smx205022 	struct {
6445574Smx205022 		uint32_t	addr:16;
6455574Smx205022 		uint32_t	resv16_31:16;
6465574Smx205022 	} addr_bits;
6475574Smx205022 } nge_uni_addr1;
6485574Smx205022 
6498218SMin.Xu@Sun.COM #define	LOW_24BITS_MASK		0xffffffULL
6508218SMin.Xu@Sun.COM #define	REVERSE_MAC_ELITE	0x211900ULL
6518218SMin.Xu@Sun.COM #define	REVERSE_MAC_GIGABYTE	0xe61600ULL
6528218SMin.Xu@Sun.COM #define	REVERSE_MAC_ASUS	0x601d00ULL
6538218SMin.Xu@Sun.COM 
6545574Smx205022 /*
6555574Smx205022  * Low 32 bit multicast address
6565574Smx205022  */
6575574Smx205022 #define	NGE_MUL_ADDR0		0x0b0
6585574Smx205022 union {
6595574Smx205022 	uint32_t	addr_val;
6605574Smx205022 	struct {
6615574Smx205022 		uint32_t	addr;
6625574Smx205022 	}addr_bits;
6635574Smx205022 }nge_mul_addr0;
6645574Smx205022 
6655574Smx205022 /*
6665574Smx205022  * High 32 bit multicast address
6675574Smx205022  */
6685574Smx205022 #define	NGE_MUL_ADDR1		0x0b4
6695574Smx205022 typedef union _nge_mul_addr1 {
6705574Smx205022 	uint32_t	addr_val;
6715574Smx205022 	struct {
6725574Smx205022 		uint32_t	addr:16;
6735574Smx205022 		uint32_t	resv16_31:16;
6745574Smx205022 	}addr_bits;
6755574Smx205022 }nge_mul_addr1;
6765574Smx205022 
6775574Smx205022 /*
6785574Smx205022  * Low 32 bit multicast mask
6795574Smx205022  */
6805574Smx205022 #define	NGE_MUL_MASK		0x0b8
6815574Smx205022 union {
6825574Smx205022 	uint32_t	mask_val;
6835574Smx205022 	struct {
6845574Smx205022 		uint32_t	mask;
6855574Smx205022 	} mask_bits;
6865574Smx205022 } nge_mul_mask0;
6875574Smx205022 
6885574Smx205022 /*
6895574Smx205022  * High 32 bit multicast mask
6905574Smx205022  */
6915574Smx205022 #define	NGE_MUL_MASK1		0x0bc
6925574Smx205022 union {
6935574Smx205022 	uint32_t	mask_val;
6945574Smx205022 	struct {
6955574Smx205022 		uint32_t	mask:16;
6965574Smx205022 		uint32_t	resv16_31:16;
6975574Smx205022 	} mask_bits;
6985574Smx205022 } nge_mul_mask1;
6995574Smx205022 
7005574Smx205022 /*
7015574Smx205022  * Mac-to Phy Interface
7025574Smx205022  */
7035574Smx205022 #define	NGE_MAC2PHY		0x0c0
7045574Smx205022 #define	low_speed		0x0
7055574Smx205022 #define	fast_speed		0x1
7065574Smx205022 #define	giga_speed		0x2
7075574Smx205022 #define	err_speed		0x4
7085574Smx205022 #define	MII_IN			0x0
7095574Smx205022 #define	RGMII_IN		0x1
7105574Smx205022 #define	ERR_IN1			0x3
7115574Smx205022 #define	ERR_IN2			0x4
7125574Smx205022 typedef union _nge_mac2phy {
7135574Smx205022 	uint32_t	m2p_val;
7145574Smx205022 	struct {
7155574Smx205022 		uint32_t	speed:2;
7165574Smx205022 		uint32_t	resv2_7:6;
7175574Smx205022 		uint32_t	hdup_en:1;
7185574Smx205022 		uint32_t	resv9:1;
7195574Smx205022 		uint32_t	phyintr:1;    /* for mcp55 only */
7205574Smx205022 		uint32_t	phyintrlvl:1; /* for mcp55 only */
7215574Smx205022 		uint32_t	resv12_27:16;
7225574Smx205022 		uint32_t	in_type:2;
7235574Smx205022 		uint32_t	resv30_31:2;
7245574Smx205022 	} m2p_bits;
7255574Smx205022 } nge_mac2phy;
7265574Smx205022 
7275574Smx205022 /*
7285574Smx205022  * Transmit Descriptor Ring address
7295574Smx205022  */
7305574Smx205022 #define	NGE_TX_DADR		0x100
7315574Smx205022 typedef union _nge_tx_addr	{
7325574Smx205022 	uint32_t	addr_val;
7335574Smx205022 	struct {
7345574Smx205022 		uint32_t	resv0_2:3;
7355574Smx205022 		uint32_t	addr:29;
7365574Smx205022 	} addr_bits;
7375574Smx205022 } nge_tx_addr;
7385574Smx205022 
7395574Smx205022 /*
7405574Smx205022  * Receive Descriptor Ring address
7415574Smx205022  */
7425574Smx205022 #define	NGE_RX_DADR		0x104
7435574Smx205022 typedef union _nge_rx_addr {
7445574Smx205022 	uint32_t	addr_val;
7455574Smx205022 	struct {
7465574Smx205022 		uint32_t	resv0_2:3;
7475574Smx205022 		uint32_t	addr:29;
7485574Smx205022 	} addr_bits;
7495574Smx205022 } nge_rx_addr;
7505574Smx205022 
7515574Smx205022 /*
7525574Smx205022  * Rx/tx descriptor ring leng
7535574Smx205022  * Note: for mcp55, tdlen/rdlen are 14 bit.
7545574Smx205022  */
7555574Smx205022 #define	NGE_RXTX_DLEN		0x108
7565574Smx205022 typedef union _nge_rxtx_dlen {
7575574Smx205022 	uint32_t	dlen_val;
7585574Smx205022 	struct {
7595574Smx205022 		uint32_t	tdlen:14;
7605574Smx205022 		uint32_t	resv14_15:2;
7615574Smx205022 		uint32_t	rdlen:14;
7625574Smx205022 		uint32_t	resv30_31:2;
7635574Smx205022 	} dlen_bits;
7645574Smx205022 } nge_rxtx_dlen;
7655574Smx205022 
7665574Smx205022 /*
7675574Smx205022  * Transmit polling register
7685574Smx205022  */
7695574Smx205022 #define	NGE_TX_POLL		0x10c
7705574Smx205022 #define	TX_POLL_INTV_1G		10
7715574Smx205022 #define	TX_POLL_INTV_100M	100
7725574Smx205022 #define	TX_POLL_INTV_10M	1000
7735574Smx205022 
7745574Smx205022 typedef union _nge_tx_poll {
7755574Smx205022 	uint32_t	poll_val;
7765574Smx205022 	struct {
7775574Smx205022 		uint32_t	tpi:16;
7785574Smx205022 		uint32_t	tpen:1;
7795574Smx205022 		uint32_t	resv17_31:15;
7805574Smx205022 	} poll_bits;
7815574Smx205022 } nge_tx_poll;
7825574Smx205022 
7835574Smx205022 /*
7845574Smx205022  * Receive polling register
7855574Smx205022  */
7865574Smx205022 #define	NGE_RX_POLL		0x110
7875574Smx205022 #define	RX_POLL_INTV_1G		10
7885574Smx205022 #define	RX_POLL_INTV_100M	100
7895574Smx205022 #define	RX_POLL_INTV_10M	1000
7905574Smx205022 typedef union _nge_rx_poll {
7915574Smx205022 	uint32_t	poll_val;
7925574Smx205022 	struct {
7935574Smx205022 		uint32_t	rpi:16;
7945574Smx205022 		uint32_t	rpen:1;
7955574Smx205022 		uint32_t	resv17_31:15;
7965574Smx205022 	} poll_bits;
7975574Smx205022 } nge_rx_poll;
7985574Smx205022 
7995574Smx205022 /*
8005574Smx205022  * Transmit polling count
8015574Smx205022  */
8025574Smx205022 #define	NGE_TX_PCNT		0x114
8035574Smx205022 union {
8045574Smx205022 	uint32_t	cnt_val;
8055574Smx205022 	struct {
8065574Smx205022 		uint32_t	pcnt:32;
8075574Smx205022 	} cnt_bits;
8085574Smx205022 } nge_tx_pcnt;
8095574Smx205022 
8105574Smx205022 /*
8115574Smx205022  * Receive polling count
8125574Smx205022  */
8135574Smx205022 #define	NGE_RX_PCNT		0x118
8145574Smx205022 union {
8155574Smx205022 	uint32_t	cnt_val;
8165574Smx205022 	struct {
8175574Smx205022 		uint32_t	pcnt:32;
8185574Smx205022 	} cnt_bits;
8195574Smx205022 } nge_rx_pcnt;
8205574Smx205022 
8215574Smx205022 
8225574Smx205022 /*
8235574Smx205022  * Current tx's descriptor address
8245574Smx205022  */
8255574Smx205022 #define	NGE_TX_CUR_DADR		0x11c
8265574Smx205022 union {
8275574Smx205022 	uint32_t	addr_val;
8285574Smx205022 	struct {
8295574Smx205022 		uint32_t	resv0_2:3;
8305574Smx205022 		uint32_t	addr:29;
8315574Smx205022 	} addr_bits;
8325574Smx205022 } nge_tx_cur_addr;
8335574Smx205022 
8345574Smx205022 /*
8355574Smx205022  * Current rx's descriptor address
8365574Smx205022  */
8375574Smx205022 #define	NGE_RX_CUR_DADR		0x120
8385574Smx205022 union {
8395574Smx205022 	uint32_t	addr_val;
8405574Smx205022 	struct {
8415574Smx205022 		uint32_t	resv0_2:3;
8425574Smx205022 		uint32_t	addr:29;
8435574Smx205022 	} addr_bits;
8445574Smx205022 } nge_rx_cur_addr;
8455574Smx205022 
8465574Smx205022 /*
8475574Smx205022  * Current tx's data buffer address
8485574Smx205022  */
8495574Smx205022 #define	NGE_TX_CUR_PRD0		0x124
8505574Smx205022 union {
8515574Smx205022 	uint32_t	prd0_val;
8525574Smx205022 	struct {
8535574Smx205022 		uint32_t	prd0:32;
8545574Smx205022 	} prd0_bits;
8555574Smx205022 } nge_tx_cur_prd0;
8565574Smx205022 
8575574Smx205022 /*
8585574Smx205022  * Current tx's data buffer status
8595574Smx205022  */
8605574Smx205022 #define	NGE_TX_CUR_PRD1		0x128
8615574Smx205022 union {
8625574Smx205022 	uint32_t	prd1_val;
8635574Smx205022 	struct {
8645574Smx205022 		uint32_t	rebytes:16;
8655574Smx205022 		uint32_t	status:16;
8665574Smx205022 	} prd1_bits;
8675574Smx205022 } nge_tx_cur_prd1;
8685574Smx205022 
8695574Smx205022 /*
8705574Smx205022  * Current rx's data buffer address
8715574Smx205022  */
8725574Smx205022 #define	NGE_RX_CUR_PRD0		0x12c
8735574Smx205022 union {
8745574Smx205022 	uint32_t	prd0_val;
8755574Smx205022 	struct {
8765574Smx205022 		uint32_t	prd0:32;
8775574Smx205022 	}prd0_bits;
8785574Smx205022 }nge_rx_cur_prd0;
8795574Smx205022 
8805574Smx205022 /*
8815574Smx205022  * Current rx's data buffer status
8825574Smx205022  */
8835574Smx205022 #define	NGE_RX_CUR_PRD1		0x130
8845574Smx205022 
8855574Smx205022 /*
8865574Smx205022  * Next tx's descriptor address
8875574Smx205022  */
8885574Smx205022 #define	NGE_TX_NXT_DADR		0x134
8895574Smx205022 union {
8905574Smx205022 	uint32_t	dadr_val;
8915574Smx205022 	struct {
8925574Smx205022 		uint32_t	addr:32;
8935574Smx205022 	}addr_bits;
8945574Smx205022 }nge_tx_nxt_dadr;
8955574Smx205022 
8965574Smx205022 /*
8975574Smx205022  * Next rx's descriptor address
8985574Smx205022  */
8995574Smx205022 #define	NGE_RX_NXT_DADR		0x138
9005574Smx205022 union {
9015574Smx205022 	uint32_t	dadr_val;
9025574Smx205022 	struct {
9035574Smx205022 		uint32_t	addr:32;
9045574Smx205022 	} addr_bits;
9055574Smx205022 } nge_rx_nxt_dadr;
9065574Smx205022 
9075574Smx205022 /*
9085574Smx205022  * Transmit fifo watermark
9095574Smx205022  */
9105574Smx205022 #define	NGE_TX_FIFO_WM		0x13c
9115574Smx205022 #define	TX_FIFO_TBFW		0
9125574Smx205022 #define	TX_FIFO_NOB_WM_MII	1
9135574Smx205022 #define	TX_FIFO_NOB_WM_GMII	8
9145574Smx205022 #define	TX_FIFO_DATA_LWM	0x20
9155574Smx205022 #define	TX_FIFO_PRD_LWM		0x8
9165574Smx205022 #define	TX_FIFO_PRD_HWM		0x38
9175574Smx205022 typedef union _nge_tx_fifo_wm {
9185574Smx205022 	uint32_t	wm_val;
9195574Smx205022 	struct {
9205574Smx205022 		uint32_t	data_lwm:9;
9215574Smx205022 		uint32_t	resv8_11:3;
9225574Smx205022 		uint32_t	prd_lwm:6;
9235574Smx205022 		uint32_t	uprd_hwm:6;
9245574Smx205022 		uint32_t	nbfb_wm:4;
9255574Smx205022 		uint32_t	fb_wm:4;
9265574Smx205022 	} wm_bits;
9275574Smx205022 } nge_tx_fifo_wm;
9285574Smx205022 
9295574Smx205022 /*
9305574Smx205022  * Receive fifo watermark
9315574Smx205022  */
9325574Smx205022 #define	NGE_RX_FIFO_WM		0x140
9335574Smx205022 typedef union _nge_rx_fifo_wm {
9345574Smx205022 	uint32_t	wm_val;
9355574Smx205022 	struct {
9365574Smx205022 		uint32_t	data_hwm:9;
9375574Smx205022 		uint32_t	resv9_11:3;
9385574Smx205022 		uint32_t	prd_lwm:4;
9395574Smx205022 		uint32_t	resv16_17:2;
9405574Smx205022 		uint32_t	prd_hwm:4;
9415574Smx205022 		uint32_t	resv22_31:10;
9425574Smx205022 	} wm_bits;
9435574Smx205022 } nge_rx_fifo_wm;
9445574Smx205022 
9455574Smx205022 /*
9465574Smx205022  * Chip mode control
9475574Smx205022  */
9485574Smx205022 #define	NGE_MODE_CNTL		0x144
9495574Smx205022 #define	DESC_MCP1		0x0
9505574Smx205022 #define	DESC_OFFLOAD		0x1
9515574Smx205022 #define	DESC_HOT		0x2
9525574Smx205022 #define	DESC_RESV		0x3
9535574Smx205022 #define	MACHINE_BUSY		0x0
9545574Smx205022 #define	MACHINE_IDLE		0x1
9555574Smx205022 typedef union _nge_mode_cntl {
9565574Smx205022 	uint32_t	mode_val;
9575574Smx205022 	struct {
9585574Smx205022 		uint32_t	txdm:1;
9595574Smx205022 		uint32_t	rxdm:1;
9605574Smx205022 		uint32_t	dma_dis:1;
9615574Smx205022 		uint32_t	dma_status:1;
9625574Smx205022 		uint32_t	bm_reset:1;
9635574Smx205022 		uint32_t	resv5:1;
9645574Smx205022 		uint32_t	vlan_strip:1;	/* mcp55 chip only */
9655574Smx205022 		uint32_t	vlan_ins:1;	/* mcp55 chip only */
9665574Smx205022 		uint32_t	desc_type:2;
9675574Smx205022 		uint32_t	rx_sum_en:1;
9685574Smx205022 		uint32_t	tx_prd_cu_en:1;
9695574Smx205022 		uint32_t	w64_dis:1;
9705574Smx205022 		uint32_t	tx_rcom_en:1;
9715574Smx205022 		uint32_t	rx_filter_en:1;
9725574Smx205022 		uint32_t	resv15:1;
9735574Smx205022 		uint32_t	resv16:1;	/* ck804 and mcp51 only */
9745574Smx205022 		uint32_t	resv17:1;	/* ck804 and mcp51 only */
9755574Smx205022 		uint32_t	resv18:1;	/* ck804 and mcp51 only */
9765574Smx205022 		uint32_t	resv19_21:3;
9775574Smx205022 		uint32_t	tx_fetch_prd:1;	/* mcp51/mcp55 only */
9785574Smx205022 		uint32_t	rx_fetch_prd:1;	/* mcp51/mcp55 only */
9795574Smx205022 		uint32_t	resv24_29:6;
9805574Smx205022 		uint32_t	rx_status:1;
9815574Smx205022 		uint32_t	tx_status:1;
9825574Smx205022 	} mode_bits;
9835574Smx205022 } nge_mode_cntl;
9845574Smx205022 
9855574Smx205022 #define	NGE_TX_DADR_HI		0x148
9865574Smx205022 #define	NGE_RX_DADR_HI		0x14c
9875574Smx205022 
9885574Smx205022 /*
9895574Smx205022  * Mii interrupt register
9905574Smx205022  * Note: for mcp55, this is a 32-bit register.
9915574Smx205022  */
9925574Smx205022 #define	NGE_MINTR_SRC		0x180
9935574Smx205022 typedef union _nge_mintr_src {
9945574Smx205022 	uint8_t	src_val;
9955574Smx205022 	struct {
9965574Smx205022 		uint8_t	mrei:1;
9975574Smx205022 		uint8_t	mcc2:1;
9985574Smx205022 		uint8_t	mcc1:1;
9995574Smx205022 		uint8_t	mapi:1;
10005574Smx205022 		uint8_t	mpdi:1;
10015574Smx205022 		uint8_t	resv5_7:3;
10025574Smx205022 	} src_bits;
10035574Smx205022 } nge_mintr_src;
10045574Smx205022 
10055574Smx205022 /*
10065574Smx205022  * Mii interrupt mask
10075574Smx205022  * Note: for mcp55, this is a 32-bit register.
10085574Smx205022  */
10095574Smx205022 #define	NGE_MINTR_MASK		0x184
10105574Smx205022 typedef union _nge_mintr_mask {
10115574Smx205022 	uint8_t	mask_val;
10125574Smx205022 	struct {
10135574Smx205022 		uint8_t	mrei:1;
10145574Smx205022 		uint8_t	mcc2:1;
10155574Smx205022 		uint8_t	mcc1:1;
10165574Smx205022 		uint8_t	mapi:1;
10175574Smx205022 		uint8_t	mpdi:1;
10185574Smx205022 		uint8_t	resv5_7:3;
10195574Smx205022 	} mask_bits;
10205574Smx205022 } nge_mintr_mask;
10215574Smx205022 
10225574Smx205022 /*
10235574Smx205022  * Mii control and status
10245574Smx205022  */
10255574Smx205022 #define	NGE_MII_CS		0x188
10265574Smx205022 #define	MII_POLL_INTV		0x4
10275574Smx205022 typedef union _nge_mii_cs {
10285574Smx205022 	uint32_t	cs_val;
10295574Smx205022 	struct {
10305574Smx205022 		uint32_t	excap:1;
10315574Smx205022 		uint32_t	jab_dec:1;
10325574Smx205022 		uint32_t	lk_up:1;
10335574Smx205022 		uint32_t	ana_cap:1;
10345574Smx205022 		uint32_t	rfault:1;
10355574Smx205022 		uint32_t	auto_neg:1;
10365574Smx205022 		uint32_t	mfps:1;
10375574Smx205022 		uint32_t	resv7:1;
10385574Smx205022 		uint32_t	exst:1;
10395574Smx205022 		uint32_t	hdup_100m_t2:1;
10405574Smx205022 		uint32_t	fdup_100m_t2:1;
10415574Smx205022 		uint32_t	hdup_10m:1;
10425574Smx205022 		uint32_t	fdup_10m:1;
10435574Smx205022 		uint32_t	hdup_100m_x:1;
10445574Smx205022 		uint32_t	fdup_100m_x:1;
10455574Smx205022 		uint32_t	cap_100m_t4:1;
10465574Smx205022 		uint32_t	ap_intv:4;
10475574Smx205022 		uint32_t	ap_en:1;
10485574Smx205022 		uint32_t	resv21_23:3;
10495574Smx205022 		uint32_t	ap_paddr:5;
10505574Smx205022 		uint32_t	resv29_31:3;
10515574Smx205022 	} cs_bits;
10525574Smx205022 } nge_mii_cs;
10535574Smx205022 
10545574Smx205022 /*
10555574Smx205022  * Mii Clock timer register
10565574Smx205022  */
10575574Smx205022 #define	NGE_MII_TM		0x18c
10585574Smx205022 typedef union _nge_mii_tm {
10595574Smx205022 	uint16_t	tm_val;
10605574Smx205022 	struct {
10615574Smx205022 		uint16_t	timer_interv:8;
10625574Smx205022 		uint16_t	timer_en:1;
10635574Smx205022 		uint16_t	resv9_14:6;
10645574Smx205022 		uint16_t	timer_status:1;
10655574Smx205022 	} tm_bits;
10665574Smx205022 } nge_mii_tm;
10675574Smx205022 
10685574Smx205022 /*
10695574Smx205022  * Mdio address
10705574Smx205022  */
10715574Smx205022 #define	NGE_MDIO_ADR		0x190
10725574Smx205022 typedef union _nge_mdio_adr {
10735574Smx205022 	uint16_t	adr_val;
10745574Smx205022 	struct {
10755574Smx205022 		uint16_t	phy_reg:5;
10765574Smx205022 		uint16_t	phy_adr:5;
10775574Smx205022 		uint16_t	mdio_rw:1;
10785574Smx205022 		uint16_t	resv11_14:4;
10795574Smx205022 		uint16_t	mdio_clc:1;
10805574Smx205022 	} adr_bits;
10815574Smx205022 } nge_mdio_adr;
10825574Smx205022 
10835574Smx205022 /*
10845574Smx205022  * Mdio data
10855574Smx205022  */
10865574Smx205022 #define	NGE_MDIO_DATA		0x194
10875574Smx205022 
10885574Smx205022 /*
10895574Smx205022  * Power Management and Control
10905574Smx205022  */
10915574Smx205022 #define	NGE_PM_CNTL		0x200
10925574Smx205022 typedef union _nge_pm_cntl {
10935574Smx205022 	uint32_t	cntl_val;
10945574Smx205022 	struct {
10955574Smx205022 		/*
10965574Smx205022 		 * mp_en:  Magic Packet Enable
10975574Smx205022 		 * pm_en:  Pattern Match Enable
10985574Smx205022 		 * lc_en:  Link Change Enable
10995574Smx205022 		 */
11005574Smx205022 		uint32_t	mp_en_d0:1;
11015574Smx205022 		uint32_t	pm_en_d0:1;
11025574Smx205022 		uint32_t	lc_en_d0:1;
11035574Smx205022 		uint32_t	resv3:1;
11045574Smx205022 		uint32_t	mp_en_d1:1;
11055574Smx205022 		uint32_t	pm_en_d1:1;
11065574Smx205022 		uint32_t	lc_en_d1:1;
11075574Smx205022 		uint32_t	resv7:1;
11085574Smx205022 		uint32_t	mp_en_d2:1;
11095574Smx205022 		uint32_t	pm_en_d2:1;
11105574Smx205022 		uint32_t	lc_en_d2:1;
11115574Smx205022 		uint32_t	resv11:1;
11125574Smx205022 		uint32_t	mp_en_d3:1;
11135574Smx205022 		uint32_t	pm_en_d3:1;
11145574Smx205022 		uint32_t	lc_en_d3:1;
11155574Smx205022 		uint32_t	resv15:1;
11165574Smx205022 		uint32_t	pat_match_en:5;
11175574Smx205022 		uint32_t	resv21_23:3;
11185574Smx205022 		uint32_t	pat_match_stat:5;
11195574Smx205022 		uint32_t	magic_status:1;
11205574Smx205022 		uint32_t	netman_status:1;
11215574Smx205022 		uint32_t	resv31:1;
11225574Smx205022 	} cntl_bits;
11235574Smx205022 } nge_pm_cntl;
11245574Smx205022 
11255574Smx205022 #define	NGE_MPT_CRC0	0x204
11265574Smx205022 #define	NGE_PMC_MK00	0x208
11275574Smx205022 #define	NGE_PMC_MK01	0x20C
11285574Smx205022 #define	NGE_PMC_MK02	0x210
11295574Smx205022 #define	NGE_PMC_MK03	0x214
11305574Smx205022 #define	NGE_MPT_CRC1	0x218
11315574Smx205022 #define	NGE_PMC_MK10	0x21c
11325574Smx205022 #define	NGE_PMC_MK11	0x220
11335574Smx205022 #define	NGE_PMC_MK12	0x224
11345574Smx205022 #define	NGE_PMC_MK13	0x228
11355574Smx205022 #define	NGE_MPT_CRC2	0x22c
11365574Smx205022 #define	NGE_PMC_MK20	0x230
11375574Smx205022 #define	NGE_PMC_MK21	0x234
11385574Smx205022 #define	NGE_PMC_MK22	0x238
11395574Smx205022 #define	NGE_PMC_MK23	0x23c
11405574Smx205022 #define	NGE_MPT_CRC3	0x240
11415574Smx205022 #define	NGE_PMC_MK30	0x244
11425574Smx205022 #define	NGE_PMC_MK31	0x248
11435574Smx205022 #define	NGE_PMC_MK32	0x24c
11445574Smx205022 #define	NGE_PMC_MK33	0x250
11455574Smx205022 #define	NGE_MPT_CRC4	0x254
11465574Smx205022 #define	NGE_PMC_MK40	0x258
11475574Smx205022 #define	NGE_PMC_MK41	0x25c
11485574Smx205022 #define	NGE_PMC_MK42	0x260
11495574Smx205022 #define	NGE_PMC_MK43	0x264
11505574Smx205022 #define	NGE_PMC_ALIAS	0x268
11515574Smx205022 #define	NGE_PMCSR_ALIAS	0x26c
11525574Smx205022 
11535574Smx205022 /*
11545574Smx205022  * Seeprom control
11555574Smx205022  */
11565574Smx205022 #define	NGE_EP_CNTL		0x500
11575574Smx205022 #define	EEPROM_CLKDIV		249
11585574Smx205022 #define	EEPROM_WAITCLK		0x7
11595574Smx205022 typedef union _nge_cp_cntl {
11605574Smx205022 	uint32_t	cntl_val;
11615574Smx205022 	struct {
11625574Smx205022 		uint32_t	clkdiv:8;
11635574Smx205022 		uint32_t	rom_size:3;
11645574Smx205022 		uint32_t	resv11:1;
11655574Smx205022 		uint32_t	word_wid:1;
11665574Smx205022 		uint32_t	resv13_15:3;
11675574Smx205022 		uint32_t	wait_slots:4;
11685574Smx205022 		uint32_t	resv20_31:12;
11695574Smx205022 	} cntl_bits;
11705574Smx205022 } nge_cp_cntl;
11715574Smx205022 
11725574Smx205022 /*
11735574Smx205022  * Seeprom cmd control
11745574Smx205022  */
11755574Smx205022 #define	NGE_EP_CMD			0x504
11765574Smx205022 #define	SEEPROM_CMD_READ		0x0
11775574Smx205022 #define	SEEPROM_CMD_WRITE_ENABLE	0x1
11785574Smx205022 #define	SEEPROM_CMD_ERASE		0x2
11795574Smx205022 #define	SEEPROM_CMD_WRITE		0x3
11805574Smx205022 #define	SEEPROM_CMD_ERALSE_ALL		0x4
11815574Smx205022 #define	SEEPROM_CMD_WRITE_ALL		0x5
11825574Smx205022 #define	SEEPROM_CMD_WRITE_DIS		0x6
11835574Smx205022 #define	SEEPROM_READY			0x1
11845574Smx205022 typedef union _nge_ep_cmd {
11855574Smx205022 	uint32_t	cmd_val;
11865574Smx205022 	struct {
11875574Smx205022 		uint32_t	addr:16;
11885574Smx205022 		uint32_t	cmd:3;
11895574Smx205022 		uint32_t	resv19_30:12;
11905574Smx205022 		uint32_t	sts:1;
11915574Smx205022 	} cmd_bits;
11925574Smx205022 } nge_ep_cmd;
11935574Smx205022 
11945574Smx205022 /*
11955574Smx205022  * Seeprom data register
11965574Smx205022  */
11975574Smx205022 #define	NGE_EP_DATA		0x508
11985574Smx205022 typedef union _nge_ep_data {
11995574Smx205022 	uint32_t	data_val;
12005574Smx205022 	struct {
12015574Smx205022 		uint32_t	data:16;
12025574Smx205022 		uint32_t	resv16_31:16;
12035574Smx205022 	} data_bits;
12045574Smx205022 } nge_ep_data;
12055574Smx205022 
12065574Smx205022 /*
12075574Smx205022  * Power management control 2nd register (since MCP51)
12085574Smx205022  */
12095574Smx205022 #define	NGE_PM_CNTL2		0x600
12105574Smx205022 typedef union _nge_pm_cntl2 {
12115574Smx205022 	uint32_t	cntl_val;
12125574Smx205022 	struct {
12135574Smx205022 		uint32_t	phy_coma_set:1;
12145574Smx205022 		uint32_t	phy_coma_status:1;
12155574Smx205022 		uint32_t	resv2_3:2;
12165574Smx205022 		uint32_t	resv4:1;
12175574Smx205022 		uint32_t	resv5_7:3;
12185574Smx205022 		uint32_t	resv8_11:4;
12195574Smx205022 		uint32_t	resv12_15:4;
12205574Smx205022 		uint32_t	pmt5_en:1;
12215574Smx205022 		uint32_t	pmt6_en:1;
12225574Smx205022 		uint32_t	pmt7_en:1;
12235574Smx205022 		uint32_t	resv19_23:5;
12245574Smx205022 		uint32_t	pmt5_status:1;
12255574Smx205022 		uint32_t	pmt6_status:1;
12265574Smx205022 		uint32_t	pmt7_status:1;
12275574Smx205022 		uint32_t	resv27_31:5;
12285574Smx205022 	} cntl_bits;
12295574Smx205022 } nge_pm_cntl2;
12305574Smx205022 
12315574Smx205022 
12325574Smx205022 /*
12335574Smx205022  * ASF RAM 0x800-0xfff
12345574Smx205022  */
12355574Smx205022 
12365574Smx205022 /*
12375574Smx205022  * Hardware-defined Statistics Block Offsets
12385574Smx205022  *
12395574Smx205022  * These are given in the manual as addresses in NIC memory, starting
12405574Smx205022  * from the NIC statistics area base address of 0x2000;
12415574Smx205022  */
12425574Smx205022 
12435574Smx205022 #define	KS_BASE			0x0280
12445574Smx205022 #define	KS_ADDR(x)		(((x)-KS_BASE)/sizeof (uint32_t))
12455574Smx205022 
12465574Smx205022 typedef enum {
12475574Smx205022 	KS_ifHOutOctets = KS_ADDR(0x0280),
12485574Smx205022 	KS_ifHOutZeroRetranCount,
12495574Smx205022 	KS_ifHOutOneRetranCount,
12505574Smx205022 	KS_ifHOutMoreRetranCount,
12515574Smx205022 	KS_ifHOutColCount,
12525574Smx205022 	KS_ifHOutFifoovCount,
12535574Smx205022 	KS_ifHOutLOCCount,
12545574Smx205022 	KS_ifHOutExDecCount,
12555574Smx205022 	KS_ifHOutRetryCount,
12565574Smx205022 
12575574Smx205022 	KS_ifHInFrameErrCount,
12585574Smx205022 	KS_ifHInExtraOctErrCount,
12595574Smx205022 	KS_ifHInLColErrCount,
12605574Smx205022 	KS_ifHInRuntCount,
12615574Smx205022 	KS_ifHInOversizeErrCount,
12625574Smx205022 	KS_ifHInFovErrCount,
12635574Smx205022 	KS_ifHInFCSErrCount,
12645574Smx205022 	KS_ifHInAlignErrCount,
12655574Smx205022 	KS_ifHInLenErrCount,
12665574Smx205022 	KS_ifHInUniPktsCount,
12675574Smx205022 	KS_ifHInBroadPksCount,
12685574Smx205022 	KS_ifHInMulPksCount,
12695574Smx205022 	KS_STATS_SIZE = KS_ADDR(0x2d0)
12705574Smx205022 
12715574Smx205022 } nge_stats_offset_t;
12725574Smx205022 
12735574Smx205022 /*
12745574Smx205022  * Hardware-defined Statistics Block
12755574Smx205022  *
12765574Smx205022  * Another view of the statistic block, as a array and a structure ...
12775574Smx205022  */
12785574Smx205022 
12795574Smx205022 typedef union {
12805898Sjj146644 	uint64_t a[KS_STATS_SIZE];
12815574Smx205022 	struct {
12825898Sjj146644 	uint64_t OutOctets;
12835898Sjj146644 	uint64_t OutZeroRetranCount;
12845898Sjj146644 	uint64_t OutOneRetranCount;
12855898Sjj146644 	uint64_t OutMoreRetranCount;
12865898Sjj146644 	uint64_t OutColCount;
12875898Sjj146644 	uint64_t OutFifoovCount;
12885898Sjj146644 	uint64_t OutLOCCount;
12895898Sjj146644 	uint64_t OutExDecCount;
12905898Sjj146644 	uint64_t OutRetryCount;
12915574Smx205022 
12925898Sjj146644 	uint64_t InFrameErrCount;
12935898Sjj146644 	uint64_t InExtraOctErrCount;
12945898Sjj146644 	uint64_t InLColErrCount;
12955898Sjj146644 	uint64_t InRuntCount;
12965898Sjj146644 	uint64_t InOversizeErrCount;
12975898Sjj146644 	uint64_t InFovErrCount;
12985898Sjj146644 	uint64_t InFCSErrCount;
12995898Sjj146644 	uint64_t InAlignErrCount;
13005898Sjj146644 	uint64_t InLenErrCount;
13015898Sjj146644 	uint64_t InUniPktsCount;
13025898Sjj146644 	uint64_t InBroadPksCount;
13035898Sjj146644 	uint64_t InMulPksCount;
13045574Smx205022 	} s;
13055574Smx205022 } nge_hw_statistics_t;
13065574Smx205022 
13075574Smx205022 /*
13085574Smx205022  * MII (PHY) registers, beyond those already defined in <sys/miiregs.h>
13095574Smx205022  */
13105574Smx205022 
13115574Smx205022 #define	NGE_PHY_NUMBER	32
13125574Smx205022 #define	MII_LP_ASYM_PAUSE	0x0800
13135574Smx205022 #define	MII_LP_PAUSE		0x0400
13145574Smx205022 
13155574Smx205022 #define	MII_100BASE_T4		0x0200
13165574Smx205022 #define	MII_100BASET_FD		0x0100
13175574Smx205022 #define	MII_100BASET_HD		0x0080
13185574Smx205022 #define	MII_10BASET_FD		0x0040
13195574Smx205022 #define	MII_10BASET_HD		0x0020
13205574Smx205022 
13215574Smx205022 #define	MII_ID_MARVELL		0x5043
13225574Smx205022 #define	MII_ID_CICADA		0x03f1
13235574Smx205022 #define	MII_IDL_MASK		0xfc00
13245574Smx205022 #define	MII_AN_LPNXTPG		8
13255574Smx205022 
13265574Smx205022 
13275574Smx205022 #define	MII_IEEE_EXT_STATUS	15
13285574Smx205022 
13295574Smx205022 /*
13305574Smx205022  * New bits in the MII_CONTROL register
13315574Smx205022  */
13325574Smx205022 #define	MII_CONTROL_1000MB	0x0040
13335574Smx205022 
13345574Smx205022 /*
13355574Smx205022  * Bits in the MII_1000BASE_T_CONTROL register
13365574Smx205022  *
13375574Smx205022  * The MASTER_CFG bit enables manual configuration of Master/Slave mode
13385574Smx205022  * (otherwise, roles are automatically negotiated).  When this bit is set,
13395574Smx205022  * the MASTER_SEL bit forces Master mode, otherwise Slave mode is forced.
13405574Smx205022  */
13415574Smx205022 #define	MII_1000BASE_T_CONTROL		9
13425574Smx205022 #define	MII_1000BT_CTL_MASTER_CFG	0x1000	/* enable role select	*/
13435574Smx205022 #define	MII_1000BT_CTL_MASTER_SEL	0x0800	/* role select bit	*/
13445574Smx205022 #define	MII_1000BT_CTL_ADV_FDX		0x0200
13455574Smx205022 #define	MII_1000BT_CTL_ADV_HDX		0x0100
13465574Smx205022 
13475574Smx205022 /*
13485574Smx205022  * Bits in the MII_1000BASE_T_STATUS register
13495574Smx205022  */
13505574Smx205022 #define	MII_1000BASE_T_STATUS		10
13515574Smx205022 #define	MII_1000BT_STAT_MASTER_FAULT	0x8000
13525574Smx205022 #define	MII_1000BT_STAT_MASTER_MODE	0x4000
13535574Smx205022 #define	MII_1000BT_STAT_LCL_RCV_OK	0x2000
13545574Smx205022 #define	MII_1000BT_STAT_RMT_RCV_OK	0x1000
13555574Smx205022 #define	MII_1000BT_STAT_LP_FDX_CAP	0x0800
13565574Smx205022 #define	MII_1000BT_STAT_LP_HDX_CAP	0x0400
13575574Smx205022 
13585574Smx205022 #define	MII_CICADA_BYPASS_CONTROL	MII_VENDOR(2)
13595574Smx205022 #define	CICADA_125MHZ_CLOCK_ENABLE	0x0001
13605574Smx205022 
13615574Smx205022 #define	MII_CICADA_10BASET_CONTROL	MII_VENDOR(6)
13625574Smx205022 #define	MII_CICADA_DISABLE_ECHO_MODE	0x2000
13635574Smx205022 
13645574Smx205022 #define	MII_CICADA_EXT_CONTROL		MII_VENDOR(7)
13655574Smx205022 #define	MII_CICADA_MODE_SELECT_BITS 	0xf000
13665574Smx205022 #define	MII_CICADA_MODE_SELECT_RGMII	0x1000
13675574Smx205022 #define	MII_CICADA_POWER_SUPPLY_BITS	0x0e00
13685574Smx205022 #define	MII_CICADA_POWER_SUPPLY_3_3V	0x0000
13695574Smx205022 #define	MII_CICADA_POWER_SUPPLY_2_5V	0x0200
13705574Smx205022 
13715574Smx205022 #define	MII_CICADA_AUXCTRL_STATUS	MII_VENDOR(12)
13725574Smx205022 #define	MII_CICADA_PIN_PRORITY_SETTING	0x0004
13735574Smx205022 #define	MII_CICADA_PIN_PRORITY_DEFAULT	0x0000
13745574Smx205022 
13755574Smx205022 
13765574Smx205022 #define	NGE_REG_SIZE		0xfff
13775574Smx205022 #define	NGE_MII_SIZE		0x20
13785574Smx205022 #define	NGE_SEEROM_SIZE	0x800
13795574Smx205022 /*
13805574Smx205022  * Legacy rx's bd which does not support
13815574Smx205022  * any hardware offload
13825574Smx205022  */
13835574Smx205022 typedef struct _legacy_rx_bd {
13845574Smx205022 	uint32_t	host_buf_addr;
13855574Smx205022 	union {
13865574Smx205022 		uint32_t	cntl_val;
13875574Smx205022 		struct {
13885574Smx205022 			uint32_t	bcnt:16;
13895574Smx205022 			uint32_t	end:1;
13905574Smx205022 			uint32_t	miss:1;
13915574Smx205022 			uint32_t	extra:1;
13925574Smx205022 			uint32_t	inten:1;
13935574Smx205022 			uint32_t	bam:1;
13945574Smx205022 			uint32_t	mam:1;
13955574Smx205022 			uint32_t	pam:1;
13965574Smx205022 			uint32_t	runt:1;
13975574Smx205022 			uint32_t	lcol:1;
13985574Smx205022 			uint32_t	max:1;
13995574Smx205022 			uint32_t	lfer:1;
14005574Smx205022 			uint32_t	crc:1;
14015574Smx205022 			uint32_t	ofol:1;
14025574Smx205022 			uint32_t	fram:1;
14035574Smx205022 			uint32_t	err:1;
14045574Smx205022 			uint32_t	own:1;
14055574Smx205022 		} cntl_bits;
14065574Smx205022 	} cntl_status;
14075574Smx205022 } legacy_rx_bd, *plegacy_rx_bd;
14085574Smx205022 
14095574Smx205022 /*
14105574Smx205022  * Stand offload rx's bd which supports hareware checksum
14115574Smx205022  * for tcp/ip
14125574Smx205022  */
14135574Smx205022 #define	CK8G_NO_HSUM			0x0
14145574Smx205022 #define	CK8G_TCP_SUM_ERR		0x1
14155574Smx205022 #define	CK8G_UDP_SUM_ERR		0x2
14165574Smx205022 #define	CK8G_IP_HSUM_ERR		0x3
14175574Smx205022 #define	CK8G_IP_HSUM			0x4
14185574Smx205022 #define	CK8G_TCP_SUM			0x5
14195574Smx205022 #define	CK8G_UDP_SUM			0x6
14205574Smx205022 #define	CK8G_RESV			0x7
14215574Smx205022 typedef struct _sum_rx_bd {
14225574Smx205022 	uint32_t	host_buf_addr;
14235574Smx205022 	union {
14245574Smx205022 		uint32_t	cntl_val;
14255574Smx205022 		struct {
14265574Smx205022 			uint32_t	bcnt:14;
14275574Smx205022 			uint32_t	resv14_29:16;
14285574Smx205022 			uint32_t	inten:1;
14295574Smx205022 			uint32_t	own:1;
14305574Smx205022 		} control_bits;
14315574Smx205022 		struct {
14325574Smx205022 			uint32_t	bcnt:14;
14335574Smx205022 			uint32_t	resv14:1;
14345574Smx205022 			uint32_t	bam:1;
14355574Smx205022 			uint32_t	mam:1;
14365574Smx205022 			uint32_t	pam:1;
14375574Smx205022 			uint32_t	runt:1;
14385574Smx205022 			uint32_t	lcol:1;
14395574Smx205022 			uint32_t	max:1;
14405574Smx205022 			uint32_t	lfer:1;
14415574Smx205022 			uint32_t	crc:1;
14425574Smx205022 			uint32_t	ofol:1;
14435574Smx205022 			uint32_t	fram:1;
14445574Smx205022 			uint32_t	extra:1;
14455574Smx205022 			uint32_t	l3_l4_sum:3;
14465574Smx205022 			uint32_t	rend:1;
14475574Smx205022 			uint32_t	err:1;
14485574Smx205022 			uint32_t	own:1;
14495574Smx205022 		} status_bits;
14505574Smx205022 	} cntl_status;
14515574Smx205022 } sum_rx_bd, *psum_rx_bd;
14525574Smx205022 /*
14535574Smx205022  * Hot offload rx's bd which support 64bit access and
14545574Smx205022  * full-tcp hardware offload
14555574Smx205022  */
14565574Smx205022 typedef struct _hot_rx_bd {
14575574Smx205022 	uint32_t	host_buf_addr_hi;
14585574Smx205022 	uint32_t	host_buf_addr_lo;
14595574Smx205022 	uint32_t	sw_tag;
14605574Smx205022 	union {
14615574Smx205022 		uint32_t	cntl_val;
14625574Smx205022 		struct {
14635574Smx205022 			uint32_t	bcnt:14;
14645574Smx205022 			uint32_t	resv14_29:16;
14655574Smx205022 			uint32_t	inten:1;
14665574Smx205022 			uint32_t	own:1;
14675574Smx205022 		} control_bits;
14685574Smx205022 
14695574Smx205022 		struct {
14705574Smx205022 			uint32_t	bcnt:14;
14715574Smx205022 			uint32_t	ctmach_rd:1;
14725574Smx205022 			uint32_t	bam:1;
14735574Smx205022 			uint32_t	mam:1;
14745574Smx205022 			uint32_t	pam:1;
14755574Smx205022 			uint32_t	runt:1;
14765574Smx205022 			uint32_t	lcol:1;
14775574Smx205022 			uint32_t	max:1;
14785574Smx205022 			uint32_t	lfer:1;
14795574Smx205022 			uint32_t	crc:1;
14805574Smx205022 			uint32_t	ofol:1;
14815574Smx205022 			uint32_t	fram:1;
14825574Smx205022 			uint32_t	extra:1;
14835574Smx205022 			uint32_t	l3_l4_sum:3;
14845574Smx205022 			uint32_t	rend:1;
14855574Smx205022 			uint32_t	err:1;
14865574Smx205022 			uint32_t	own:1;
14875574Smx205022 		} status_bits_legacy;
14885574Smx205022 	} cntl_status;
14895574Smx205022 } hot_rx_bd, *phot_rx_bd;
14905574Smx205022 
14915574Smx205022 /*
14925574Smx205022  * Legacy tx's bd which does not support
14935574Smx205022  * any hardware offload
14945574Smx205022  */
14955574Smx205022 typedef struct _legacy_tx_bd {
14965574Smx205022 	uint32_t	host_buf_addr;
14975574Smx205022 	union {
14985574Smx205022 		uint32_t	cntl_val;
14995574Smx205022 		struct {
15005574Smx205022 			uint32_t	bcnt:16;
15015574Smx205022 			uint32_t	end:1;
15025574Smx205022 			uint32_t	resv17_23:7;
15035574Smx205022 			uint32_t	inten:1;
15045574Smx205022 			uint32_t	resv25_30:6;
15055574Smx205022 			uint32_t	own:1;
15065574Smx205022 		} control_bits;
15075574Smx205022 
15085574Smx205022 		struct {
15095574Smx205022 			uint32_t	bcnt:16;
15105574Smx205022 			uint32_t	end:1;
15115574Smx205022 			uint32_t	rtry:1;
15125574Smx205022 			uint32_t	trc:4;
15135574Smx205022 			uint32_t	inten:1;
15145574Smx205022 			uint32_t	exdef:1;
15155574Smx205022 			uint32_t	def:1;
15165574Smx205022 			uint32_t	lcar:1;
15175574Smx205022 			uint32_t	lcol:1;
15185574Smx205022 			uint32_t	uflo:1;
15195574Smx205022 			uint32_t	err:1;
15205574Smx205022 			uint32_t	own:1;
15215574Smx205022 		} status_bits;
15225574Smx205022 	} cntl_status;
15235574Smx205022 } legacy_tx_bd, *plegacy_tx_bd;
15245574Smx205022 
15255574Smx205022 /*
15265574Smx205022  * Stand offload tx's bd which supports hareware checksum
15275574Smx205022  * for tcp/ip
15285574Smx205022  */
15295574Smx205022 typedef struct _sum_tx_bd {
15305574Smx205022 	uint32_t	host_buf_addr;
15315574Smx205022 	union {
15325574Smx205022 		uint32_t	cntl_val;
15335574Smx205022 		struct {
15345574Smx205022 			uint32_t	bcnt:14;
15355574Smx205022 			uint32_t	resv14_25:12;
15365574Smx205022 			uint32_t	tcp_hsum:1;
15375574Smx205022 			uint32_t	ip_hsum:1;
15385574Smx205022 			uint32_t	segen:1;
15395574Smx205022 			uint32_t	end:1;
15405574Smx205022 			uint32_t	inten:1;
15415574Smx205022 			uint32_t	own:1;
15425574Smx205022 		} control_sum_bits;
15435574Smx205022 
15445574Smx205022 		struct {
15455574Smx205022 			uint32_t	bcnt:14;
15465574Smx205022 			uint32_t	mss:14;
15475574Smx205022 			uint32_t	segen:1;
15485574Smx205022 			uint32_t	end:1;
15495574Smx205022 			uint32_t	inten:1;
15505574Smx205022 			uint32_t	own:1;
15515574Smx205022 		} control_tso_bits;
15525574Smx205022 
15535574Smx205022 		struct {
15545574Smx205022 			uint32_t	bcnt:14;
15555574Smx205022 			uint32_t	resv14_17:4;
15565574Smx205022 			uint32_t	rtry:1;
15575574Smx205022 			uint32_t	trc:4;
15585574Smx205022 			uint32_t	inten:1;
15595574Smx205022 			uint32_t	exdef:1;
15605574Smx205022 			uint32_t	def:1;
15615574Smx205022 			uint32_t	lcar:1;
15625574Smx205022 			uint32_t	lcol:1;
15635574Smx205022 			uint32_t	uflo:1;
15645574Smx205022 			uint32_t	end:1;
15655574Smx205022 			uint32_t	err:1;
15665574Smx205022 			uint32_t	own:1;
15675574Smx205022 		} status_bits;
15685574Smx205022 	} control_status;
15695574Smx205022 } sum_tx_bd, *psum_tx_bd;
15705574Smx205022 
15715574Smx205022 /*
15725574Smx205022  * Hot offload tx's bd which support 64bit access and
15735574Smx205022  * full-tcp hardware offload
15745574Smx205022  */
15755574Smx205022 
15765574Smx205022 typedef struct _hot_tx_bd {
15775574Smx205022 	uint32_t	host_buf_addr_hi;
15785574Smx205022 	uint32_t	host_buf_addr_lo;
15795574Smx205022 	union {
15805574Smx205022 		uint32_t	parm_val;
15815574Smx205022 		struct {
15825574Smx205022 			uint32_t	resv0_15:16;
15835574Smx205022 			uint32_t	resv16:1;
15845574Smx205022 			uint32_t	resv17:1;
15855574Smx205022 			uint32_t	resv18_31:14;
15865574Smx205022 		} parm_bits;
15875574Smx205022 	} hot_parms;
15885574Smx205022 
15895574Smx205022 	union {
15905574Smx205022 		uint32_t	cntl_val;
15915574Smx205022 		struct {
15925574Smx205022 			uint32_t	bcnt:14;
15935574Smx205022 			uint32_t	resv14_25:12;
15945574Smx205022 			uint32_t	tcp_hsum:1;
15955574Smx205022 			uint32_t	ip_hsum:1;
15965574Smx205022 			uint32_t	segen:1;
15975574Smx205022 			uint32_t	end:1;
15985574Smx205022 			uint32_t	inten:1;
15995574Smx205022 			uint32_t	own:1;
16005574Smx205022 		} control_sum_bits;
16015574Smx205022 
16025574Smx205022 		struct {
16035574Smx205022 			uint32_t	bcnt:14;
16045574Smx205022 			uint32_t	mss:14;
16055574Smx205022 			uint32_t	segen:1;
16065574Smx205022 			uint32_t	end:1;
16075574Smx205022 			uint32_t	inten:1;
16085574Smx205022 			uint32_t	own:1;
16095574Smx205022 		} control_tso_bits;
16105574Smx205022 
16115574Smx205022 		struct {
16125574Smx205022 			uint32_t	bcnt:14;
16135574Smx205022 			uint32_t	resv14_17:4;
16145574Smx205022 			uint32_t	rtry:1;
16155574Smx205022 			uint32_t	trc:4;
16165574Smx205022 			uint32_t	inten:1;
16175574Smx205022 			uint32_t	exdef:1;
16185574Smx205022 			uint32_t	def:1;
16195574Smx205022 			uint32_t	lcar:1;
16205574Smx205022 			uint32_t	lcol:1;
16215574Smx205022 			uint32_t	uflo:1;
16225574Smx205022 			uint32_t	end:1;
16235574Smx205022 			uint32_t	err:1;
16245574Smx205022 			uint32_t	own:1;
16255574Smx205022 		} status_bits;
16265574Smx205022 	} control_status;
16275574Smx205022 } hot_tx_bd, *phot_tx_bd;
16285574Smx205022 
16295574Smx205022 #ifdef __cplusplus
16305574Smx205022 }
16315574Smx205022 #endif
16325574Smx205022 
16335574Smx205022 #endif	/* _SYS_NGE_CHIP_H */
1634