xref: /titanic_44/usr/src/uts/common/sys/nxge/nxge_hw.h (revision 678453a8ed49104d8adad58f3ba591bdc39883e8)
16f45ec7bSml29623 /*
26f45ec7bSml29623  * CDDL HEADER START
36f45ec7bSml29623  *
46f45ec7bSml29623  * The contents of this file are subject to the terms of the
56f45ec7bSml29623  * Common Development and Distribution License (the "License").
66f45ec7bSml29623  * You may not use this file except in compliance with the License.
76f45ec7bSml29623  *
86f45ec7bSml29623  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96f45ec7bSml29623  * or http://www.opensolaris.org/os/licensing.
106f45ec7bSml29623  * See the License for the specific language governing permissions
116f45ec7bSml29623  * and limitations under the License.
126f45ec7bSml29623  *
136f45ec7bSml29623  * When distributing Covered Code, include this CDDL HEADER in each
146f45ec7bSml29623  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
156f45ec7bSml29623  * If applicable, add the following below this CDDL HEADER, with the
166f45ec7bSml29623  * fields enclosed by brackets "[]" replaced with your own identifying
176f45ec7bSml29623  * information: Portions Copyright [yyyy] [name of copyright owner]
186f45ec7bSml29623  *
196f45ec7bSml29623  * CDDL HEADER END
206f45ec7bSml29623  */
216f45ec7bSml29623 /*
22*678453a8Sspeer  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
236f45ec7bSml29623  * Use is subject to license terms.
246f45ec7bSml29623  */
256f45ec7bSml29623 
266f45ec7bSml29623 #ifndef	_SYS_NXGE_NXGE_HW_H
276f45ec7bSml29623 #define	_SYS_NXGE_NXGE_HW_H
286f45ec7bSml29623 
296f45ec7bSml29623 #pragma ident	"%Z%%M%	%I%	%E% SMI"
306f45ec7bSml29623 
316f45ec7bSml29623 #ifdef	__cplusplus
326f45ec7bSml29623 extern "C" {
336f45ec7bSml29623 #endif
346f45ec7bSml29623 
356f45ec7bSml29623 #if	!defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) && \
366f45ec7bSml29623 		!defined(__BIG_ENDIAN) && !defined(__LITTLE_ENDIAN)
376f45ec7bSml29623 #error	Host endianness not defined
386f45ec7bSml29623 #endif
396f45ec7bSml29623 
406f45ec7bSml29623 #if	!defined(_BIT_FIELDS_HTOL) && !defined(_BIT_FIELDS_LTOH) && \
416f45ec7bSml29623 		!defined(__BIT_FIELDS_HTOL) && !defined(__BIT_FIELDS_LTOH)
426f45ec7bSml29623 #error	Bit ordering not defined
436f45ec7bSml29623 #endif
446f45ec7bSml29623 
456f45ec7bSml29623 #include <nxge_fflp_hw.h>
466f45ec7bSml29623 #include <nxge_ipp_hw.h>
476f45ec7bSml29623 #include <nxge_mac_hw.h>
486f45ec7bSml29623 #include <nxge_rxdma_hw.h>
496f45ec7bSml29623 #include <nxge_txc_hw.h>
506f45ec7bSml29623 #include <nxge_txdma_hw.h>
516f45ec7bSml29623 #include <nxge_zcp_hw.h>
526f45ec7bSml29623 #include <nxge_espc_hw.h>
536f45ec7bSml29623 #include <nxge_n2_esr_hw.h>
546f45ec7bSml29623 #include <nxge_sr_hw.h>
556f45ec7bSml29623 #include <nxge_phy_hw.h>
566f45ec7bSml29623 
576f45ec7bSml29623 
58*678453a8Sspeer /*
59*678453a8Sspeer  * The Neptune chip has 16 Receive DMA channels, but no more than
60*678453a8Sspeer  * 24 Transmit DMA channels.
61*678453a8Sspeer  */
62*678453a8Sspeer typedef uint32_t dc_map_t;
63*678453a8Sspeer 
64*678453a8Sspeer /*
65*678453a8Sspeer  * The logical group map is a Crossbow addition.
66*678453a8Sspeer  */
67*678453a8Sspeer typedef uint32_t lg_map_t;
68*678453a8Sspeer 
696f45ec7bSml29623 /* Modes of NXGE core */
706f45ec7bSml29623 typedef	enum nxge_mode_e {
716f45ec7bSml29623 	NXGE_MODE_NE		= 1,
726f45ec7bSml29623 	NXGE_MODE_N2		= 2
736f45ec7bSml29623 } nxge_mode_t;
746f45ec7bSml29623 
756f45ec7bSml29623 /*
766f45ec7bSml29623  * Function control Register
776f45ec7bSml29623  * (bit 31 is reset to 0. Read back 0 then free to use it.
786f45ec7bSml29623  * (once done with it, bit 0:15 can be used to store SW status)
796f45ec7bSml29623  */
806f45ec7bSml29623 #define	DEV_FUNC_SR_REG			(PIO + 0x10000)
816f45ec7bSml29623 #define	DEV_FUNC_SR_SR_SHIFT		0
826f45ec7bSml29623 #define	DEV_FUNC_SR_SR_MASK		0x000000000000FFFFULL
836f45ec7bSml29623 #define	DEV_FUNC_SR_FUNCID_SHIFT	16
846f45ec7bSml29623 #define	DEV_FUNC_SR_FUNCID_MASK		0x0000000000030000ULL
856f45ec7bSml29623 #define	DEV_FUNC_SR_TAS_SHIFT		31
866f45ec7bSml29623 #define	DEV_FUNC_SR_TAS_MASK		0x0000000080000000ULL
876f45ec7bSml29623 
886f45ec7bSml29623 typedef union _dev_func_sr_t {
896f45ec7bSml29623 	uint64_t value;
906f45ec7bSml29623 	struct {
916f45ec7bSml29623 #if defined(_BIG_ENDIAN)
926f45ec7bSml29623 		uint32_t hdw;
936f45ec7bSml29623 #endif
946f45ec7bSml29623 		struct {
956f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
966f45ec7bSml29623 			uint32_t tas:1;
976f45ec7bSml29623 			uint32_t res2:13;
986f45ec7bSml29623 			uint32_t funcid:2;
996f45ec7bSml29623 			uint32_t sr:16;
1006f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
1016f45ec7bSml29623 			uint32_t sr:16;
1026f45ec7bSml29623 			uint32_t funcid:2;
1036f45ec7bSml29623 			uint32_t res2:13;
1046f45ec7bSml29623 			uint32_t tas:1;
1056f45ec7bSml29623 #endif
1066f45ec7bSml29623 		} ldw;
1076f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
1086f45ec7bSml29623 		uint32_t hdw;
1096f45ec7bSml29623 #endif
1106f45ec7bSml29623 	} bits;
1116f45ec7bSml29623 } dev_func_sr_t, *p_dev_func_sr_t;
1126f45ec7bSml29623 
1136f45ec7bSml29623 
1146f45ec7bSml29623 /*
1156f45ec7bSml29623  * Multi Parition Control Register (partitiion manager)
1166f45ec7bSml29623  */
1176f45ec7bSml29623 #define	MULTI_PART_CTL_REG	(FZC_PIO + 0x00000)
1186f45ec7bSml29623 #define	MULTI_PART_CTL_MPC	0x0000000000000001ULL
1196f45ec7bSml29623 
1206f45ec7bSml29623 typedef union _multi_part_ctl_t {
1216f45ec7bSml29623 	uint64_t value;
1226f45ec7bSml29623 	struct {
1236f45ec7bSml29623 #if defined(_BIG_ENDIAN)
1246f45ec7bSml29623 		uint32_t hdw;
1256f45ec7bSml29623 #endif
1266f45ec7bSml29623 		struct {
1276f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
1286f45ec7bSml29623 			uint32_t res1:31;
1296f45ec7bSml29623 			uint32_t mpc:1;
1306f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
1316f45ec7bSml29623 			uint32_t mpc:1;
1326f45ec7bSml29623 			uint32_t res1:31;
1336f45ec7bSml29623 #endif
1346f45ec7bSml29623 		} ldw;
1356f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
1366f45ec7bSml29623 		uint32_t hdw;
1376f45ec7bSml29623 #endif
1386f45ec7bSml29623 	} bits;
1396f45ec7bSml29623 } multi_part_ctl_t, *p_multi_part_ctl_t;
1406f45ec7bSml29623 
1416f45ec7bSml29623 /*
1426f45ec7bSml29623  * Virtual DMA CSR Address (partition manager)
1436f45ec7bSml29623  */
1446f45ec7bSml29623 #define	VADDR_REG		(PIO_VADDR + 0x00000)
1456f45ec7bSml29623 
1466f45ec7bSml29623 /*
1476f45ec7bSml29623  * DMA Channel Binding Register (partition manager)
1486f45ec7bSml29623  */
1496f45ec7bSml29623 #define	DMA_BIND_REG		(FZC_PIO + 0x10000)
1506f45ec7bSml29623 #define	DMA_BIND_RX_SHIFT	0
1516f45ec7bSml29623 #define	DMA_BIND_RX_MASK	0x000000000000001FULL
1526f45ec7bSml29623 #define	DMA_BIND_RX_BIND_SHIFT	5
1536f45ec7bSml29623 #define	DMA_BIND_RX_BIND_SET	0x0000000000000020ULL
1546f45ec7bSml29623 #define	DMA_BIND_RX_BIND_MASK	0x0000000000000020ULL
1556f45ec7bSml29623 #define	DMA_BIND_TX_SHIFT	8
1566f45ec7bSml29623 #define	DMA_BIND_TX_MASK	0x0000000000001f00ULL
1576f45ec7bSml29623 #define	DMA_BIND_TX_BIND_SHIFT	13
1586f45ec7bSml29623 #define	DMA_BIND_TX_BIND_SET	0x0000000000002000ULL
1596f45ec7bSml29623 #define	DMA_BIND_TX_BIND_MASK	0x0000000000002000ULL
1606f45ec7bSml29623 
1616f45ec7bSml29623 typedef union _dma_bind_t {
1626f45ec7bSml29623 	uint64_t value;
1636f45ec7bSml29623 	struct {
1646f45ec7bSml29623 #if defined(_BIG_ENDIAN)
1656f45ec7bSml29623 		uint32_t hdw;
1666f45ec7bSml29623 #endif
1676f45ec7bSml29623 		struct {
1686f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
1696f45ec7bSml29623 			uint32_t res1_1:16;
1706f45ec7bSml29623 			uint32_t tx_bind:1;
1716f45ec7bSml29623 			uint32_t tx:5;
1726f45ec7bSml29623 			uint32_t res2:2;
1736f45ec7bSml29623 			uint32_t rx_bind:1;
1746f45ec7bSml29623 			uint32_t rx:5;
1756f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
1766f45ec7bSml29623 			uint32_t rx:5;
1776f45ec7bSml29623 			uint32_t rx_bind:1;
1786f45ec7bSml29623 			uint32_t res2:2;
1796f45ec7bSml29623 			uint32_t tx:5;
1806f45ec7bSml29623 			uint32_t tx_bind:1;
1816f45ec7bSml29623 			uint32_t res1_1:16;
1826f45ec7bSml29623 #endif
1836f45ec7bSml29623 		} ldw;
1846f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
1856f45ec7bSml29623 		uint32_t hdw;
1866f45ec7bSml29623 #endif
1876f45ec7bSml29623 	} bits;
1886f45ec7bSml29623 }  dma_bind_t, *p_dma_bind_t;
1896f45ec7bSml29623 
1906f45ec7bSml29623 /*
1916f45ec7bSml29623  * System interrupts:
1926f45ec7bSml29623  *	Logical device and group definitions.
1936f45ec7bSml29623  */
1946f45ec7bSml29623 #define	NXGE_INT_MAX_LDS		69
1956f45ec7bSml29623 #define	NXGE_INT_MAX_LDGS		64
1966f45ec7bSml29623 #define	NXGE_LDGRP_PER_NIU_PORT		(NXGE_INT_MAX_LDGS/2)
1976f45ec7bSml29623 #define	NXGE_LDGRP_PER_NEP_PORT		(NXGE_INT_MAX_LDGS/4)
1986f45ec7bSml29623 #define	NXGE_LDGRP_PER_2PORTS		(NXGE_INT_MAX_LDGS/2)
1996f45ec7bSml29623 #define	NXGE_LDGRP_PER_4PORTS		(NXGE_INT_MAX_LDGS/4)
2006f45ec7bSml29623 
2016f45ec7bSml29623 #define	NXGE_RDMA_LD_START		0
2026f45ec7bSml29623 #define	NXGE_TDMA_LD_START		32
2036f45ec7bSml29623 #define	NXGE_MIF_LD			63
2046f45ec7bSml29623 #define	NXGE_MAC_LD_START		64
2056f45ec7bSml29623 #define	NXGE_MAC_LD_PORT0		64
2066f45ec7bSml29623 #define	NXGE_MAC_LD_PORT1		65
2076f45ec7bSml29623 #define	NXGE_MAC_LD_PORT2		66
2086f45ec7bSml29623 #define	NXGE_MAC_LD_PORT3		67
2096f45ec7bSml29623 #define	NXGE_SYS_ERROR_LD		68
2106f45ec7bSml29623 
2116f45ec7bSml29623 /*
2126f45ec7bSml29623  * Logical Device Group Number
2136f45ec7bSml29623  */
2146f45ec7bSml29623 #define	LDG_NUM_REG		(FZC_PIO + 0x20000)
2156f45ec7bSml29623 #define	LDG_NUM_NUM_SHIFT	0
2166f45ec7bSml29623 #define	LDG_NUM_NUM_MASK	0x000000000000001FULL
2176f45ec7bSml29623 
2186f45ec7bSml29623 typedef union _ldg_num_t {
2196f45ec7bSml29623 	uint64_t value;
2206f45ec7bSml29623 	struct {
2216f45ec7bSml29623 #if defined(_BIG_ENDIAN)
2226f45ec7bSml29623 		uint32_t hdw;
2236f45ec7bSml29623 #endif
2246f45ec7bSml29623 		struct {
2256f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
2266f45ec7bSml29623 			uint32_t res1_1:26;
2276f45ec7bSml29623 			uint32_t num:6;
2286f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
2296f45ec7bSml29623 			uint32_t num:6;
2306f45ec7bSml29623 			uint32_t res1_1:26;
2316f45ec7bSml29623 #endif
2326f45ec7bSml29623 		} ldw;
2336f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
2346f45ec7bSml29623 		uint32_t hdw;
2356f45ec7bSml29623 #endif
2366f45ec7bSml29623 	} bits;
2376f45ec7bSml29623 } ldg_num_t, *p_ldg_num_t;
2386f45ec7bSml29623 
2396f45ec7bSml29623 /*
2406f45ec7bSml29623  * Logical Device State Vector
2416f45ec7bSml29623  */
2426f45ec7bSml29623 #define	LDSV0_REG		(PIO_LDSV + 0x00000)
2436f45ec7bSml29623 #define	LDSV0_LDF_SHIFT		0
2446f45ec7bSml29623 #define	LDSV0_LDF_MASK		0x00000000000003FFULL
2456f45ec7bSml29623 #define	LDG_NUM_NUM_MASK	0x000000000000001FULL
2466f45ec7bSml29623 #define	LDSV_MASK_ALL		0x0000000000000001ULL
2476f45ec7bSml29623 
2486f45ec7bSml29623 /*
2496f45ec7bSml29623  * Logical Device State Vector 1
2506f45ec7bSml29623  */
2516f45ec7bSml29623 #define	LDSV1_REG		(PIO_LDSV + 0x00008)
2526f45ec7bSml29623 
2536f45ec7bSml29623 /*
2546f45ec7bSml29623  * Logical Device State Vector 2
2556f45ec7bSml29623  */
2566f45ec7bSml29623 #define	LDSV2_REG		(PIO_LDSV + 0x00010)
2576f45ec7bSml29623 
2586f45ec7bSml29623 /* For Logical Device State Vector 0 and 1 */
2596f45ec7bSml29623 typedef union _ldsv_t {
2606f45ec7bSml29623 	uint64_t value;
2616f45ec7bSml29623 	struct {
2626f45ec7bSml29623 #if defined(_BIG_ENDIAN)
2636f45ec7bSml29623 		uint32_t hdw;
2646f45ec7bSml29623 #endif
2656f45ec7bSml29623 		uint32_t ldw;
2666f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
2676f45ec7bSml29623 		uint32_t hdw;
2686f45ec7bSml29623 #endif
2696f45ec7bSml29623 	} bits;
2706f45ec7bSml29623 } ldsv_t, *p_ldsv_t;
2716f45ec7bSml29623 
2726f45ec7bSml29623 #define	LDSV2_LDF0_SHIFT		0
2736f45ec7bSml29623 #define	LDSV2_LDF0_MASK			0x000000000000001FULL
2746f45ec7bSml29623 #define	LDSV2_LDF1_SHIFT		5
2756f45ec7bSml29623 #define	LDSV2_LDF1_MASK			0x00000000000001E0ULL
2766f45ec7bSml29623 
2776f45ec7bSml29623 typedef union _ldsv2_t {
2786f45ec7bSml29623 	uint64_t value;
2796f45ec7bSml29623 	struct {
2806f45ec7bSml29623 #if defined(_BIG_ENDIAN)
2816f45ec7bSml29623 		uint32_t hdw;
2826f45ec7bSml29623 #endif
2836f45ec7bSml29623 		struct {
2846f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
2856f45ec7bSml29623 			uint32_t res1_1:22;
2866f45ec7bSml29623 			uint32_t ldf1:5;
2876f45ec7bSml29623 			uint32_t ldf0:5;
2886f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
2896f45ec7bSml29623 			uint32_t ldf0:5;
2906f45ec7bSml29623 			uint32_t ldf1:5;
2916f45ec7bSml29623 			uint32_t res1_1:22;
2926f45ec7bSml29623 #endif
2936f45ec7bSml29623 		} ldw;
2946f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
2956f45ec7bSml29623 		uint32_t hdw;
2966f45ec7bSml29623 #endif
2976f45ec7bSml29623 	} bits;
2986f45ec7bSml29623 } ldsv2_t, *p_ldsv2_t;
2996f45ec7bSml29623 
3006f45ec7bSml29623 /*
3016f45ec7bSml29623  * Logical Device Interrupt Mask 0
3026f45ec7bSml29623  */
3036f45ec7bSml29623 #define	LD_IM0_REG		(PIO_IMASK0 + 0x00000)
3046f45ec7bSml29623 #define	LD_IM0_SHIFT		0
3056f45ec7bSml29623 #define	LD_IM0_MASK		0x0000000000000003ULL
3066f45ec7bSml29623 #define	LD_IM_MASK		0x0000000000000003ULL
3076f45ec7bSml29623 
3086f45ec7bSml29623 /*
3096f45ec7bSml29623  * Logical Device Interrupt Mask 1
3106f45ec7bSml29623  */
3116f45ec7bSml29623 #define	LD_IM1_REG		(PIO_IMASK1 + 0x00000)
3126f45ec7bSml29623 #define	LD_IM1_SHIFT		0
3136f45ec7bSml29623 #define	LD_IM1_MASK		0x0000000000000003ULL
3146f45ec7bSml29623 
3156f45ec7bSml29623 /* For Lofical Device Interrupt Mask 0 and 1 */
3166f45ec7bSml29623 typedef union _ld_im_t {
3176f45ec7bSml29623 	uint64_t value;
3186f45ec7bSml29623 	struct {
3196f45ec7bSml29623 #if defined(_BIG_ENDIAN)
3206f45ec7bSml29623 		uint32_t hdw;
3216f45ec7bSml29623 #endif
3226f45ec7bSml29623 		struct {
3236f45ec7bSml29623 
3246f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
3256f45ec7bSml29623 			uint32_t res1_1:30;
3266f45ec7bSml29623 			uint32_t ldf_mask:2;
3276f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
3286f45ec7bSml29623 			uint32_t ldf_mask:2;
3296f45ec7bSml29623 			uint32_t res1_1:30;
3306f45ec7bSml29623 #endif
3316f45ec7bSml29623 		} ldw;
3326f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
3336f45ec7bSml29623 		uint32_t hdw;
3346f45ec7bSml29623 #endif
3356f45ec7bSml29623 	} bits;
3366f45ec7bSml29623 } ld_im_t, *p_ld_im_t;
3376f45ec7bSml29623 
3386f45ec7bSml29623 /*
3396f45ec7bSml29623  * Logical Device Group Interrupt Management
3406f45ec7bSml29623  */
3416f45ec7bSml29623 #define	LDGIMGN_REG		(PIO_LDSV + 0x00018)
3426f45ec7bSml29623 #define	LDGIMGN_TIMER_SHIFT	0
3436f45ec7bSml29623 #define	LDGIMGM_TIMER_MASK	0x000000000000003FULL
3446f45ec7bSml29623 #define	LDGIMGN_ARM_SHIFT	31
3456f45ec7bSml29623 #define	LDGIMGM_ARM		0x0000000080000000ULL
3466f45ec7bSml29623 #define	LDGIMGM_ARM_MASK	0x0000000080000000ULL
3476f45ec7bSml29623 
3486f45ec7bSml29623 typedef union _ldgimgm_t {
3496f45ec7bSml29623 	uint64_t value;
3506f45ec7bSml29623 	struct {
3516f45ec7bSml29623 #if defined(_BIG_ENDIAN)
3526f45ec7bSml29623 		uint32_t hdw;
3536f45ec7bSml29623 #endif
3546f45ec7bSml29623 		struct {
3556f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
3566f45ec7bSml29623 		uint32_t arm:1;
3576f45ec7bSml29623 		uint32_t res2:25;
3586f45ec7bSml29623 		uint32_t timer:6;
3596f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
3606f45ec7bSml29623 		uint32_t timer:6;
3616f45ec7bSml29623 		uint32_t res2:25;
3626f45ec7bSml29623 		uint32_t arm:1;
3636f45ec7bSml29623 #endif
3646f45ec7bSml29623 		} ldw;
3656f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
3666f45ec7bSml29623 		uint32_t hdw;
3676f45ec7bSml29623 #endif
3686f45ec7bSml29623 	} bits;
3696f45ec7bSml29623 } ldgimgm_t, *p_ldgimgm_t;
3706f45ec7bSml29623 
3716f45ec7bSml29623 /*
3726f45ec7bSml29623  * Logical Device Group Interrupt Timer Resolution
3736f45ec7bSml29623  */
3746f45ec7bSml29623 #define	LDGITMRES_REG		(FZC_PIO + 0x00008)
3756f45ec7bSml29623 #define	LDGTITMRES_RES_SHIFT	0			/* bits 19:0 */
3766f45ec7bSml29623 #define	LDGTITMRES_RES_MASK	0x00000000000FFFFFULL
3776f45ec7bSml29623 typedef union _ldgitmres_t {
3786f45ec7bSml29623 	uint64_t value;
3796f45ec7bSml29623 	struct {
3806f45ec7bSml29623 #if defined(_BIG_ENDIAN)
3816f45ec7bSml29623 		uint32_t hdw;
3826f45ec7bSml29623 #endif
3836f45ec7bSml29623 		struct {
3846f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
3856f45ec7bSml29623 		uint32_t res1_1:12;
3866f45ec7bSml29623 		uint32_t res:20;
3876f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
3886f45ec7bSml29623 		uint32_t res:20;
3896f45ec7bSml29623 		uint32_t res1_1:12;
3906f45ec7bSml29623 #endif
3916f45ec7bSml29623 		} ldw;
3926f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
3936f45ec7bSml29623 		uint32_t hdw;
3946f45ec7bSml29623 #endif
3956f45ec7bSml29623 	} bits;
3966f45ec7bSml29623 } ldgitmres_t, *p_ldgitmres_t;
3976f45ec7bSml29623 
3986f45ec7bSml29623 /*
3996f45ec7bSml29623  * System Interrupt Data
4006f45ec7bSml29623  */
4016f45ec7bSml29623 #define	SID_REG			(FZC_PIO + 0x10200)
4026f45ec7bSml29623 #define	SID_DATA_SHIFT		0			/* bits 6:0 */
4036f45ec7bSml29623 #define	SID_DATA_MASK		0x000000000000007FULL
4046f45ec7bSml29623 #define	SID_DATA_INTNUM_SHIFT	0			/* bits 4:0 */
4056f45ec7bSml29623 #define	SID_DATA_INTNUM_MASK	0x000000000000001FULL
4066f45ec7bSml29623 #define	SID_DATA_FUNCNUM_SHIFT	5			/* bits 6:5 */
4076f45ec7bSml29623 #define	SID_DATA_FUNCNUM_MASK	0x0000000000000060ULL
4086f45ec7bSml29623 #define	SID_PCI_FUNCTION_SHIFT	(1 << 5)
4096f45ec7bSml29623 #define	SID_N2_INDEX		(1 << 6)
4106f45ec7bSml29623 
4116f45ec7bSml29623 #define	SID_DATA(f, v)		((f << SID_DATA_FUNCNUM_SHIFT) |	\
4126f45ec7bSml29623 				((v << SID_DATA_SHIFT) & SID_DATA_INTNUM_MASK))
4136f45ec7bSml29623 
4146f45ec7bSml29623 #define	SID_DATA_N2(v)		(v | SID_N2_INDEX)
4156f45ec7bSml29623 
4166f45ec7bSml29623 typedef union _sid_t {
4176f45ec7bSml29623 	uint64_t value;
4186f45ec7bSml29623 	struct {
4196f45ec7bSml29623 #if defined(_BIG_ENDIAN)
4206f45ec7bSml29623 		uint32_t hdw;
4216f45ec7bSml29623 #endif
4226f45ec7bSml29623 		struct {
4236f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
4246f45ec7bSml29623 		uint32_t res1_1:25;
4256f45ec7bSml29623 		uint32_t data:7;
4266f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
4276f45ec7bSml29623 		uint32_t data:7;
4286f45ec7bSml29623 		uint32_t res1_1:25;
4296f45ec7bSml29623 #endif
4306f45ec7bSml29623 		} ldw;
4316f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
4326f45ec7bSml29623 		uint32_t hdw;
4336f45ec7bSml29623 #endif
4346f45ec7bSml29623 	} bits;
4356f45ec7bSml29623 } sid_t, *p_sid_t;
4366f45ec7bSml29623 
4376f45ec7bSml29623 /*
4386f45ec7bSml29623  * Reset Control
4396f45ec7bSml29623  */
4406f45ec7bSml29623 #define	RST_CTL_REG		(FZC_PIO + 0x00038)
4416f45ec7bSml29623 #define	RST_CTL_MAC_RST3	0x0000000000400000ULL
4426f45ec7bSml29623 #define	RST_CTL_MAC_RST3_SHIFT	22
4436f45ec7bSml29623 #define	RST_CTL_MAC_RST2	0x0000000000200000ULL
4446f45ec7bSml29623 #define	RST_CTL_MAC_RST2_SHIFT	21
4456f45ec7bSml29623 #define	RST_CTL_MAC_RST1	0x0000000000100000ULL
4466f45ec7bSml29623 #define	RST_CTL_MAC_RST1_SHIFT	20
4476f45ec7bSml29623 #define	RST_CTL_MAC_RST0	0x0000000000080000ULL
4486f45ec7bSml29623 #define	RST_CTL_MAC_RST0_SHIFT	19
4496f45ec7bSml29623 #define	RST_CTL_EN_ACK_TO	0x0000000000000800ULL
4506f45ec7bSml29623 #define	RST_CTL_EN_ACK_TO_SHIFT	11
4516f45ec7bSml29623 #define	RST_CTL_ACK_TO_MASK	0x00000000000007FEULL
4526f45ec7bSml29623 #define	RST_CTL_ACK_TO_SHIFT	1
4536f45ec7bSml29623 
4546f45ec7bSml29623 
4556f45ec7bSml29623 typedef union _rst_ctl_t {
4566f45ec7bSml29623 	uint64_t value;
4576f45ec7bSml29623 	struct {
4586f45ec7bSml29623 #if defined(_BIG_ENDIAN)
4596f45ec7bSml29623 		uint32_t hdw;
4606f45ec7bSml29623 #endif
4616f45ec7bSml29623 		struct {
4626f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
4636f45ec7bSml29623 		uint32_t res1:9;
4646f45ec7bSml29623 		uint32_t mac_rst3:1;
4656f45ec7bSml29623 		uint32_t mac_rst2:1;
4666f45ec7bSml29623 		uint32_t mac_rst1:1;
4676f45ec7bSml29623 		uint32_t mac_rst0:1;
4686f45ec7bSml29623 		uint32_t res2:7;
4696f45ec7bSml29623 		uint32_t ack_to_en:1;
4706f45ec7bSml29623 		uint32_t ack_to_val:10;
4716f45ec7bSml29623 		uint32_t res3:1;
4726f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
4736f45ec7bSml29623 		uint32_t res3:1;
4746f45ec7bSml29623 		uint32_t ack_to_val:10;
4756f45ec7bSml29623 		uint32_t ack_to_en:1;
4766f45ec7bSml29623 		uint32_t res2:7;
4776f45ec7bSml29623 		uint32_t mac_rst0:1;
4786f45ec7bSml29623 		uint32_t mac_rst1:1;
4796f45ec7bSml29623 		uint32_t mac_rst2:1;
4806f45ec7bSml29623 		uint32_t mac_rst3:1;
4816f45ec7bSml29623 		uint32_t res1:9;
4826f45ec7bSml29623 #endif
4836f45ec7bSml29623 		} ldw;
4846f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
4856f45ec7bSml29623 		uint32_t hdw;
4866f45ec7bSml29623 #endif
4876f45ec7bSml29623 	} bits;
4886f45ec7bSml29623 } rst_ctl_t, *p_rst_ctl_t;
4896f45ec7bSml29623 
4906f45ec7bSml29623 /*
4916f45ec7bSml29623  * System Error Mask
4926f45ec7bSml29623  */
4936f45ec7bSml29623 #define	SYS_ERR_MASK_REG	(FZC_PIO + 0x00090)
4946f45ec7bSml29623 
4956f45ec7bSml29623 /*
4966f45ec7bSml29623  * System Error Status
4976f45ec7bSml29623  */
4986f45ec7bSml29623 #define	SYS_ERR_STAT_REG	(FZC_PIO + 0x00098)
4996f45ec7bSml29623 
5006f45ec7bSml29623 
5016f45ec7bSml29623 #define	SYS_ERR_META2_MASK	0x0000000000000400ULL
5026f45ec7bSml29623 #define	SYS_ERR_META2_SHIFT	10
5036f45ec7bSml29623 #define	SYS_ERR_META1_MASK	0x0000000000000200ULL
5046f45ec7bSml29623 #define	SYS_ERR_META1_SHIFT	9
5056f45ec7bSml29623 #define	SYS_ERR_PEU_MASK	0x0000000000000100ULL
5066f45ec7bSml29623 #define	SYS_ERR_PEU_SHIFT	8
5076f45ec7bSml29623 #define	SYS_ERR_TXC_MASK	0x0000000000000080ULL
5086f45ec7bSml29623 #define	SYS_ERR_TXC_SHIFT	7
5096f45ec7bSml29623 #define	SYS_ERR_RDMC_MASK	0x0000000000000040ULL
5106f45ec7bSml29623 #define	SYS_ERR_RDMC_SHIFT	6
5116f45ec7bSml29623 #define	SYS_ERR_TDMC_MASK	0x0000000000000020ULL
5126f45ec7bSml29623 #define	SYS_ERR_TDMC_SHIFT	5
5136f45ec7bSml29623 #define	SYS_ERR_ZCP_MASK	0x0000000000000010ULL
5146f45ec7bSml29623 #define	SYS_ERR_ZCP_SHIFT	4
5156f45ec7bSml29623 #define	SYS_ERR_FFLP_MASK	0x0000000000000008ULL
5166f45ec7bSml29623 #define	SYS_ERR_FFLP_SHIFT	3
5176f45ec7bSml29623 #define	SYS_ERR_IPP_MASK	0x0000000000000004ULL
5186f45ec7bSml29623 #define	SYS_ERR_IPP_SHIFT	2
5196f45ec7bSml29623 #define	SYS_ERR_MAC_MASK	0x0000000000000002ULL
5206f45ec7bSml29623 #define	SYS_ERR_MAC_SHIFT	1
5216f45ec7bSml29623 #define	SYS_ERR_SMX_MASK	0x0000000000000001ULL
5226f45ec7bSml29623 #define	SYS_ERR_SMX_SHIFT	0
5236f45ec7bSml29623 #define	SYS_ERR_MASK_ALL	(SYS_ERR_SMX_MASK | SYS_ERR_MAC_MASK | \
5246f45ec7bSml29623 				SYS_ERR_IPP_MASK | SYS_ERR_FFLP_MASK | \
5256f45ec7bSml29623 				SYS_ERR_ZCP_MASK | SYS_ERR_TDMC_MASK | \
5266f45ec7bSml29623 				SYS_ERR_RDMC_MASK | SYS_ERR_TXC_MASK | \
5276f45ec7bSml29623 				SYS_ERR_PEU_MASK | SYS_ERR_META1_MASK | \
5286f45ec7bSml29623 				SYS_ERR_META2_MASK)
5296f45ec7bSml29623 
5306f45ec7bSml29623 
5316f45ec7bSml29623 typedef union _sys_err_mask_t {
5326f45ec7bSml29623 	uint64_t value;
5336f45ec7bSml29623 	struct {
5346f45ec7bSml29623 #if defined(_BIG_ENDIAN)
5356f45ec7bSml29623 		uint32_t hdw;
5366f45ec7bSml29623 #endif
5376f45ec7bSml29623 		struct {
5386f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
5396f45ec7bSml29623 		uint32_t res:21;
5406f45ec7bSml29623 		uint32_t meta2:1;
5416f45ec7bSml29623 		uint32_t meta1:1;
5426f45ec7bSml29623 		uint32_t peu:1;
5436f45ec7bSml29623 		uint32_t txc:1;
5446f45ec7bSml29623 		uint32_t rdmc:1;
5456f45ec7bSml29623 		uint32_t tdmc:1;
5466f45ec7bSml29623 		uint32_t zcp:1;
5476f45ec7bSml29623 		uint32_t fflp:1;
5486f45ec7bSml29623 		uint32_t ipp:1;
5496f45ec7bSml29623 		uint32_t mac:1;
5506f45ec7bSml29623 		uint32_t smx:1;
5516f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
5526f45ec7bSml29623 		uint32_t smx:1;
5536f45ec7bSml29623 		uint32_t mac:1;
5546f45ec7bSml29623 		uint32_t ipp:1;
5556f45ec7bSml29623 		uint32_t fflp:1;
5566f45ec7bSml29623 		uint32_t zcp:1;
5576f45ec7bSml29623 		uint32_t tdmc:1;
5586f45ec7bSml29623 		uint32_t rdmc:1;
5596f45ec7bSml29623 		uint32_t txc:1;
5606f45ec7bSml29623 		uint32_t peu:1;
5616f45ec7bSml29623 		uint32_t meta1:1;
5626f45ec7bSml29623 		uint32_t meta2:1;
5636f45ec7bSml29623 		uint32_t res:21;
5646f45ec7bSml29623 #endif
5656f45ec7bSml29623 		} ldw;
5666f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
5676f45ec7bSml29623 		uint32_t hdw;
5686f45ec7bSml29623 #endif
5696f45ec7bSml29623 	} bits;
5706f45ec7bSml29623 } sys_err_mask_t, sys_err_stat_t, *p_sys_err_mask_t, *p_sys_err_stat_t;
5716f45ec7bSml29623 
5726f45ec7bSml29623 
5736f45ec7bSml29623 /*
5746f45ec7bSml29623  * Meta Arbiter Dirty Transaction ID Control
5756f45ec7bSml29623  */
5766f45ec7bSml29623 
5776f45ec7bSml29623 #define	DIRTY_TID_CTL_REG		(FZC_PIO + 0x0010)
5786f45ec7bSml29623 #define	DIRTY_TID_CTL_WR_THRES_MASK	0x00000000003F0000ULL
5796f45ec7bSml29623 #define	DIRTY_TID_CTL_WR_THRES_SHIFT    16
5806f45ec7bSml29623 #define	DIRTY_TID_CTL_RD_THRES_MASK	0x00000000000003F0ULL
5816f45ec7bSml29623 #define	DIRTY_TID_CTL_RD_THRES_SHIFT	4
5826f45ec7bSml29623 #define	DIRTY_TID_CTL_DTID_CLR		0x0000000000000002ULL
5836f45ec7bSml29623 #define	DIRTY_TID_CTL_DTID_CLR_SHIFT	1
5846f45ec7bSml29623 #define	DIRTY_TID_CTL_DTID_EN		0x0000000000000001ULL
5856f45ec7bSml29623 #define	DIRTY_TID_CTL_DTID_EN_SHIFT	0
5866f45ec7bSml29623 
5876f45ec7bSml29623 typedef union _dty_tid_ctl_t {
5886f45ec7bSml29623 	uint64_t value;
5896f45ec7bSml29623 	struct {
5906f45ec7bSml29623 #if defined(_BIG_ENDIAN)
5916f45ec7bSml29623 		uint32_t hdw;
5926f45ec7bSml29623 #endif
5936f45ec7bSml29623 		struct {
5946f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
5956f45ec7bSml29623 		uint32_t res1:10;
5966f45ec7bSml29623 		uint32_t np_wr_thres_val:6;
5976f45ec7bSml29623 		uint32_t res2:6;
5986f45ec7bSml29623 		uint32_t np_rd_thres_val:6;
5996f45ec7bSml29623 		uint32_t res3:2;
6006f45ec7bSml29623 		uint32_t dty_tid_clr:1;
6016f45ec7bSml29623 		uint32_t dty_tid_en:1;
6026f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
6036f45ec7bSml29623 		uint32_t dty_tid_en:1;
6046f45ec7bSml29623 		uint32_t dty_tid_clr:1;
6056f45ec7bSml29623 		uint32_t res3:2;
6066f45ec7bSml29623 		uint32_t np_rd_thres_val:6;
6076f45ec7bSml29623 		uint32_t res2:6;
6086f45ec7bSml29623 		uint32_t np_wr_thres_val:6;
6096f45ec7bSml29623 		uint32_t res1:10;
6106f45ec7bSml29623 #endif
6116f45ec7bSml29623 		} ldw;
6126f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
6136f45ec7bSml29623 		uint32_t hdw;
6146f45ec7bSml29623 #endif
6156f45ec7bSml29623 	} bits;
6166f45ec7bSml29623 } dty_tid_ctl_t, *p_dty_tid_ctl_t;
6176f45ec7bSml29623 
6186f45ec7bSml29623 
6196f45ec7bSml29623 /*
6206f45ec7bSml29623  * Meta Arbiter Dirty Transaction ID Status
6216f45ec7bSml29623  */
6226f45ec7bSml29623 #define	DIRTY_TID_STAT_REG			(FZC_PIO + 0x0018)
6236f45ec7bSml29623 #define	DIRTY_TID_STAT_WR_TID_DTY_CNT_MASK	0x0000000000003F00ULL
6246f45ec7bSml29623 #define	DIRTY_TID_STAT_WR_TID_DTY_CNT_SHIFT	8
6256f45ec7bSml29623 #define	DIRTY_TID_STAT_RD_TID_DTY_CNT_MASK	0x000000000000003FULL
6266f45ec7bSml29623 #define	DIRTY_TID_STAT_RD_TID_DTY_CNT_SHIFT	0
6276f45ec7bSml29623 
6286f45ec7bSml29623 typedef union _dty_tid_stat_t {
6296f45ec7bSml29623 	uint64_t value;
6306f45ec7bSml29623 	struct {
6316f45ec7bSml29623 #if defined(_BIG_ENDIAN)
6326f45ec7bSml29623 		uint32_t hdw;
6336f45ec7bSml29623 #endif
6346f45ec7bSml29623 		struct {
6356f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
6366f45ec7bSml29623 		uint32_t res1:18;
6376f45ec7bSml29623 		uint32_t wr_tid_dirty_cnt:6;
6386f45ec7bSml29623 		uint32_t res2:2;
6396f45ec7bSml29623 		uint32_t rd_tid_dirty_cnt:6;
6406f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
6416f45ec7bSml29623 		uint32_t rd_tid_dirty_cnt:6;
6426f45ec7bSml29623 		uint32_t res2:2;
6436f45ec7bSml29623 		uint32_t wr_tid_dirty_cnt:6;
6446f45ec7bSml29623 		uint32_t res1:18;
6456f45ec7bSml29623 #endif
6466f45ec7bSml29623 		} ldw;
6476f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
6486f45ec7bSml29623 		uint32_t hdw;
6496f45ec7bSml29623 #endif
6506f45ec7bSml29623 	} bits;
6516f45ec7bSml29623 } dty_tid_stat_t, *p_dty_tid_stat_t;
6526f45ec7bSml29623 
6536f45ec7bSml29623 
6546f45ec7bSml29623 /*
6556f45ec7bSml29623  * SMX Registers
6566f45ec7bSml29623  */
6576f45ec7bSml29623 #define	SMX_CFIG_DAT_REG		(FZC_PIO + 0x00040)
6586f45ec7bSml29623 #define	SMX_CFIG_DAT_RAS_DET_EN_MASK	0x0000000080000000ULL
6596f45ec7bSml29623 #define	SMX_CFIG_DAT_RAS_DET_EN_SHIFT	31
6606f45ec7bSml29623 #define	SMX_CFIG_DAT_RAS_INJ_EN_MASK	0x0000000040000000ULL
6616f45ec7bSml29623 #define	SMX_CFIG_DAT_RAS_INJ_EN_SHIFT	30
6626f45ec7bSml29623 #define	SMX_CFIG_DAT_TRANS_TO_MASK	0x000000000FFFFFFFULL
6636f45ec7bSml29623 #define	SMX_CFIG_DAT_TRANS_TO_SHIFT	0
6646f45ec7bSml29623 
6656f45ec7bSml29623 typedef union _smx_cfg_dat_t {
6666f45ec7bSml29623 	uint64_t value;
6676f45ec7bSml29623 	struct {
6686f45ec7bSml29623 #if defined(_BIG_ENDIAN)
6696f45ec7bSml29623 		uint32_t hdw;
6706f45ec7bSml29623 #endif
6716f45ec7bSml29623 		struct {
6726f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
6736f45ec7bSml29623 		uint32_t res_err_det:1;
6746f45ec7bSml29623 		uint32_t ras_err_inj_en:1;
6756f45ec7bSml29623 		uint32_t res:2;
6766f45ec7bSml29623 		uint32_t trans_to_val:28;
6776f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
6786f45ec7bSml29623 		uint32_t trans_to_val:28;
6796f45ec7bSml29623 		uint32_t res:2;
6806f45ec7bSml29623 		uint32_t ras_err_inj_en:1;
6816f45ec7bSml29623 		uint32_t res_err_det:1;
6826f45ec7bSml29623 #endif
6836f45ec7bSml29623 		} ldw;
6846f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
6856f45ec7bSml29623 		uint32_t hdw;
6866f45ec7bSml29623 #endif
6876f45ec7bSml29623 	} bits;
6886f45ec7bSml29623 } smx_cfg_dat_t, *p_smx_cfg_dat_t;
6896f45ec7bSml29623 
6906f45ec7bSml29623 
6916f45ec7bSml29623 #define	SMX_INT_STAT_REG	(FZC_PIO + 0x00048)
6926f45ec7bSml29623 #define	SMX_INT_STAT_SM_MASK	0x00000000FFFFFFC0ULL
6936f45ec7bSml29623 #define	SMX_INT_STAT_SM_SHIFT	6
6946f45ec7bSml29623 
6956f45ec7bSml29623 typedef union _smx_int_stat_t {
6966f45ec7bSml29623 	uint64_t value;
6976f45ec7bSml29623 	struct {
6986f45ec7bSml29623 #if defined(_BIG_ENDIAN)
6996f45ec7bSml29623 		uint32_t hdw;
7006f45ec7bSml29623 #endif
7016f45ec7bSml29623 		struct {
7026f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
7036f45ec7bSml29623 		uint32_t st_mc_stat:26;
7046f45ec7bSml29623 		uint32_t res:6;
7056f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
7066f45ec7bSml29623 		uint32_t res:6;
7076f45ec7bSml29623 		uint32_t st_mc_stat:26;
7086f45ec7bSml29623 #endif
7096f45ec7bSml29623 		} ldw;
7106f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
7116f45ec7bSml29623 		uint32_t hdw;
7126f45ec7bSml29623 #endif
7136f45ec7bSml29623 	} bits;
7146f45ec7bSml29623 } smx_int_stat_t, *p_smx_int_stat_t;
7156f45ec7bSml29623 
7166f45ec7bSml29623 
7176f45ec7bSml29623 #define		SMX_CTL_REG	(FZC_PIO + 0x00050)
7186f45ec7bSml29623 
7196f45ec7bSml29623 typedef union _smx_ctl_t {
7206f45ec7bSml29623 	uint64_t value;
7216f45ec7bSml29623 	struct {
7226f45ec7bSml29623 #if defined(_BIG_ENDIAN)
7236f45ec7bSml29623 		uint32_t hdw;
7246f45ec7bSml29623 #endif
7256f45ec7bSml29623 		struct {
7266f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
7276f45ec7bSml29623 		uint32_t res1:21;
7286f45ec7bSml29623 		uint32_t resp_err_inj:3;
7296f45ec7bSml29623 		uint32_t res2:1;
7306f45ec7bSml29623 		uint32_t xtb_err_inj:3;
7316f45ec7bSml29623 		uint32_t res3:1;
7326f45ec7bSml29623 		uint32_t dbg_sel:3;
7336f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
7346f45ec7bSml29623 		uint32_t dbg_sel:3;
7356f45ec7bSml29623 		uint32_t res3:1;
7366f45ec7bSml29623 		uint32_t xtb_err_inj:3;
7376f45ec7bSml29623 		uint32_t res2:1;
7386f45ec7bSml29623 		uint32_t resp_err_inj:3;
7396f45ec7bSml29623 		uint32_t res1:21;
7406f45ec7bSml29623 #endif
7416f45ec7bSml29623 		} ldw;
7426f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
7436f45ec7bSml29623 		uint32_t hdw;
7446f45ec7bSml29623 #endif
7456f45ec7bSml29623 	} bits;
7466f45ec7bSml29623 } smx_ctl_t, *p_smx_ctl_t;
7476f45ec7bSml29623 
7486f45ec7bSml29623 
7496f45ec7bSml29623 #define	SMX_DBG_VEC_REG	(FZC_PIO + 0x00058)
7506f45ec7bSml29623 
7516f45ec7bSml29623 typedef union _smx_dbg_vec_t {
7526f45ec7bSml29623 	uint64_t value;
7536f45ec7bSml29623 	struct {
7546f45ec7bSml29623 #if defined(_BIG_ENDIAN)
7556f45ec7bSml29623 		uint32_t hdw;
7566f45ec7bSml29623 #endif
7576f45ec7bSml29623 		struct {
7586f45ec7bSml29623 		uint32_t dbg_tng_vec;
7596f45ec7bSml29623 		} ldw;
7606f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
7616f45ec7bSml29623 		uint32_t hdw;
7626f45ec7bSml29623 #endif
7636f45ec7bSml29623 	} bits;
7646f45ec7bSml29623 } smx_dbg_vec_t, *p_smx_dbg_vec_t;
7656f45ec7bSml29623 
7666f45ec7bSml29623 
7676f45ec7bSml29623 /*
7686f45ec7bSml29623  * Debug registers
7696f45ec7bSml29623  */
7706f45ec7bSml29623 
7716f45ec7bSml29623 #define	PIO_DBG_SEL_REG	(FZC_PIO + 0x00060)
7726f45ec7bSml29623 
7736f45ec7bSml29623 typedef union _pio_dbg_sel_t {
7746f45ec7bSml29623 	uint64_t value;
7756f45ec7bSml29623 	struct {
7766f45ec7bSml29623 #if defined(_BIG_ENDIAN)
7776f45ec7bSml29623 		uint32_t hdw;
7786f45ec7bSml29623 #endif
7796f45ec7bSml29623 		struct {
7806f45ec7bSml29623 		uint32_t sel;
7816f45ec7bSml29623 		} ldw;
7826f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
7836f45ec7bSml29623 		uint32_t hdw;
7846f45ec7bSml29623 #endif
7856f45ec7bSml29623 	} bits;
7866f45ec7bSml29623 } pio_dbg_sel_t, *p_pio_dbg_sel_t;
7876f45ec7bSml29623 
7886f45ec7bSml29623 
7896f45ec7bSml29623 #define	PIO_TRAIN_VEC_REG	(FZC_PIO + 0x00068)
7906f45ec7bSml29623 
7916f45ec7bSml29623 typedef union _pio_tng_vec_t {
7926f45ec7bSml29623 	uint64_t value;
7936f45ec7bSml29623 	struct {
7946f45ec7bSml29623 #if defined(_BIG_ENDIAN)
7956f45ec7bSml29623 		uint32_t hdw;
7966f45ec7bSml29623 #endif
7976f45ec7bSml29623 		struct {
7986f45ec7bSml29623 		uint32_t training_vec;
7996f45ec7bSml29623 		} ldw;
8006f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
8016f45ec7bSml29623 		uint32_t hdw;
8026f45ec7bSml29623 #endif
8036f45ec7bSml29623 	} bits;
8046f45ec7bSml29623 } pio_tng_vec_t, *p_pio_tng_vec_t;
8056f45ec7bSml29623 
8066f45ec7bSml29623 #define	PIO_ARB_CTL_REG	(FZC_PIO + 0x00070)
8076f45ec7bSml29623 
8086f45ec7bSml29623 typedef union _pio_arb_ctl_t {
8096f45ec7bSml29623 	uint64_t value;
8106f45ec7bSml29623 	struct {
8116f45ec7bSml29623 #if defined(_BIG_ENDIAN)
8126f45ec7bSml29623 		uint32_t hdw;
8136f45ec7bSml29623 #endif
8146f45ec7bSml29623 		struct {
8156f45ec7bSml29623 		uint32_t ctl;
8166f45ec7bSml29623 		} ldw;
8176f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
8186f45ec7bSml29623 		uint32_t hdw;
8196f45ec7bSml29623 #endif
8206f45ec7bSml29623 	} bits;
8216f45ec7bSml29623 } pio_arb_ctl_t, *p_pio_arb_ctl_t;
8226f45ec7bSml29623 
8236f45ec7bSml29623 #define	PIO_ARB_DBG_VEC_REG	(FZC_PIO + 0x00078)
8246f45ec7bSml29623 
8256f45ec7bSml29623 typedef union _pio_arb_dbg_vec_t {
8266f45ec7bSml29623 	uint64_t value;
8276f45ec7bSml29623 	struct {
8286f45ec7bSml29623 #if defined(_BIG_ENDIAN)
8296f45ec7bSml29623 		uint32_t hdw;
8306f45ec7bSml29623 #endif
8316f45ec7bSml29623 		struct {
8326f45ec7bSml29623 		uint32_t dbg_vector;
8336f45ec7bSml29623 		} ldw;
8346f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
8356f45ec7bSml29623 		uint32_t hdw;
8366f45ec7bSml29623 #endif
8376f45ec7bSml29623 	} bits;
8386f45ec7bSml29623 } pio_arb_dbg_vec_t, *p_pio_arb_dbg_vec_t;
8396f45ec7bSml29623 
8406f45ec7bSml29623 
8416f45ec7bSml29623 /*
8426f45ec7bSml29623  * GPIO Registers
8436f45ec7bSml29623  */
8446f45ec7bSml29623 
8456f45ec7bSml29623 #define	GPIO_EN_REG	(FZC_PIO + 0x00028)
8466f45ec7bSml29623 #define	GPIO_EN_ENABLE_MASK	 0x000000000000FFFFULL
8476f45ec7bSml29623 #define	GPIO_EN_ENABLE_SHIFT	 0
8486f45ec7bSml29623 typedef union _gpio_en_t {
8496f45ec7bSml29623 	uint64_t value;
8506f45ec7bSml29623 	struct {
8516f45ec7bSml29623 #if defined(_BIG_ENDIAN)
8526f45ec7bSml29623 		uint32_t hdw;
8536f45ec7bSml29623 #endif
8546f45ec7bSml29623 		struct {
8556f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
8566f45ec7bSml29623 		uint32_t res:16;
8576f45ec7bSml29623 		uint32_t enable:16;
8586f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
8596f45ec7bSml29623 		uint32_t enable:16;
8606f45ec7bSml29623 		uint32_t res:16;
8616f45ec7bSml29623 #endif
8626f45ec7bSml29623 		} ldw;
8636f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
8646f45ec7bSml29623 		uint32_t hdw;
8656f45ec7bSml29623 #endif
8666f45ec7bSml29623 	} bits;
8676f45ec7bSml29623 } gpio_en_t, *p_gpio_en_t;
8686f45ec7bSml29623 
8696f45ec7bSml29623 #define	GPIO_DATA_IN_REG	(FZC_PIO + 0x00030)
8706f45ec7bSml29623 #define	GPIO_DATA_IN_MASK	0x000000000000FFFFULL
8716f45ec7bSml29623 #define	GPIO_DATA_IN_SHIFT	0
8726f45ec7bSml29623 typedef union _gpio_data_in_t {
8736f45ec7bSml29623 	uint64_t value;
8746f45ec7bSml29623 	struct {
8756f45ec7bSml29623 #if defined(_BIG_ENDIAN)
8766f45ec7bSml29623 		uint32_t hdw;
8776f45ec7bSml29623 #endif
8786f45ec7bSml29623 		struct {
8796f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
8806f45ec7bSml29623 		uint32_t res:16;
8816f45ec7bSml29623 		uint32_t data_in:16;
8826f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
8836f45ec7bSml29623 		uint32_t data_in:16;
8846f45ec7bSml29623 		uint32_t res:16;
8856f45ec7bSml29623 #endif
8866f45ec7bSml29623 		} ldw;
8876f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
8886f45ec7bSml29623 		uint32_t hdw;
8896f45ec7bSml29623 #endif
8906f45ec7bSml29623 	} bits;
8916f45ec7bSml29623 } gpio_data_in_t, *p_gpio_data_in_t;
8926f45ec7bSml29623 
8936f45ec7bSml29623 
8946f45ec7bSml29623 /*
8956f45ec7bSml29623  * PCI Express Interface Module (PIM) registers
8966f45ec7bSml29623  */
8976f45ec7bSml29623 #define	PIM_CONTROL_REG	(FZC_PIM + 0x0)
8986f45ec7bSml29623 #define	PIM_CONTROL_DBG_SEL_MASK 0x000000000000000FULL
8996f45ec7bSml29623 #define	PIM_CONTROL_DBG_SEL_SHIFT	0
9006f45ec7bSml29623 typedef union _pim_ctl_t {
9016f45ec7bSml29623 	uint64_t value;
9026f45ec7bSml29623 	struct {
9036f45ec7bSml29623 #if defined(_BIG_ENDIAN)
9046f45ec7bSml29623 		uint32_t hdw;
9056f45ec7bSml29623 #endif
9066f45ec7bSml29623 		struct {
9076f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
9086f45ec7bSml29623 		uint32_t res:28;
9096f45ec7bSml29623 		uint32_t dbg_sel:4;
9106f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
9116f45ec7bSml29623 		uint32_t dbg_sel:4;
9126f45ec7bSml29623 		uint32_t res:28;
9136f45ec7bSml29623 #endif
9146f45ec7bSml29623 		} ldw;
9156f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
9166f45ec7bSml29623 		uint32_t hdw;
9176f45ec7bSml29623 #endif
9186f45ec7bSml29623 	} bits;
9196f45ec7bSml29623 } pim_ctl_t, *p_pim_ctl_t;
9206f45ec7bSml29623 
9216f45ec7bSml29623 #define	PIM_DBG_TRAINING_VEC_REG	(FZC_PIM + 0x00008)
9226f45ec7bSml29623 #define	PIM_DBG_TRAINING_VEC_MASK	0x00000000FFFFFFFFULL
9236f45ec7bSml29623 
9246f45ec7bSml29623 #define	PIM_INTR_STATUS_REG		(FZC_PIM + 0x00010)
9256f45ec7bSml29623 #define	PIM_INTR_STATUS_MASK		0x00000000FFFFFFFFULL
9266f45ec7bSml29623 
9276f45ec7bSml29623 #define	PIM_INTERNAL_STATUS_REG		(FZC_PIM + 0x00018)
9286f45ec7bSml29623 #define	PIM_INTERNAL_STATUS_MASK	0x00000000FFFFFFFFULL
9296f45ec7bSml29623 
9306f45ec7bSml29623 #define	PIM_INTR_MASK_REG		(FZC_PIM + 0x00020)
9316f45ec7bSml29623 #define	PIM_INTR_MASK_MASK		0x00000000FFFFFFFFULL
9326f45ec7bSml29623 
9336f45ec7bSml29623 /*
9346f45ec7bSml29623  * Partitioning Logical pages Definition registers.
9356f45ec7bSml29623  * (used by both receive and transmit DMA channels)
9366f45ec7bSml29623  */
9376f45ec7bSml29623 
9386f45ec7bSml29623 /* Logical page definitions */
9396f45ec7bSml29623 typedef union _log_page_vld_t {
9406f45ec7bSml29623 	uint64_t value;
9416f45ec7bSml29623 	struct {
9426f45ec7bSml29623 #if defined(_BIG_ENDIAN)
9436f45ec7bSml29623 		uint32_t hdw;
9446f45ec7bSml29623 #endif
9456f45ec7bSml29623 		struct {
9466f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
9476f45ec7bSml29623 			uint32_t res1_1:28;
9486f45ec7bSml29623 			uint32_t func:2;
9496f45ec7bSml29623 			uint32_t page1:1;
9506f45ec7bSml29623 			uint32_t page0:1;
9516f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
9526f45ec7bSml29623 			uint32_t page0:1;
9536f45ec7bSml29623 			uint32_t page1:1;
9546f45ec7bSml29623 			uint32_t func:2;
9556f45ec7bSml29623 			uint32_t res1_1:28;
9566f45ec7bSml29623 #endif
9576f45ec7bSml29623 		} ldw;
9586f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
9596f45ec7bSml29623 		uint32_t hdw;
9606f45ec7bSml29623 #endif
9616f45ec7bSml29623 	} bits;
9626f45ec7bSml29623 } log_page_vld_t, *p_log_page_vld_t;
9636f45ec7bSml29623 
9646f45ec7bSml29623 
9656f45ec7bSml29623 #define	DMA_LOG_PAGE_MASK_SHIFT		0
9666f45ec7bSml29623 #define	DMA_LOG_PAGE_MASK_MASK		0x00000000ffffffffULL
9676f45ec7bSml29623 
9686f45ec7bSml29623 /* Receive Logical Page Mask */
9696f45ec7bSml29623 typedef union _log_page_mask_t {
9706f45ec7bSml29623 	uint64_t value;
9716f45ec7bSml29623 	struct {
9726f45ec7bSml29623 #if defined(_BIG_ENDIAN)
9736f45ec7bSml29623 		uint32_t hdw;
9746f45ec7bSml29623 #endif
9756f45ec7bSml29623 		struct {
9766f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
9776f45ec7bSml29623 			uint32_t mask:32;
9786f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
9796f45ec7bSml29623 			uint32_t mask:32;
9806f45ec7bSml29623 #endif
9816f45ec7bSml29623 		} ldw;
9826f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
9836f45ec7bSml29623 		uint32_t hdw;
9846f45ec7bSml29623 #endif
9856f45ec7bSml29623 	} bits;
9866f45ec7bSml29623 } log_page_mask_t, *p_log_page_mask_t;
9876f45ec7bSml29623 
9886f45ec7bSml29623 
9896f45ec7bSml29623 /* Receive Logical Page Value */
9906f45ec7bSml29623 #define	DMA_LOG_PAGE_VALUE_SHIFT	0
9916f45ec7bSml29623 #define	DMA_LOG_PAGE_VALUE_MASK		0x00000000ffffffffULL
9926f45ec7bSml29623 
9936f45ec7bSml29623 /* Receive Logical Page Value */
9946f45ec7bSml29623 typedef union _log_page_value_t {
9956f45ec7bSml29623 	uint64_t value;
9966f45ec7bSml29623 	struct {
9976f45ec7bSml29623 #if defined(_BIG_ENDIAN)
9986f45ec7bSml29623 		uint32_t hdw;
9996f45ec7bSml29623 #endif
10006f45ec7bSml29623 		struct {
10016f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
10026f45ec7bSml29623 			uint32_t value:32;
10036f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
10046f45ec7bSml29623 			uint32_t value:32;
10056f45ec7bSml29623 #endif
10066f45ec7bSml29623 		} ldw;
10076f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
10086f45ec7bSml29623 		uint32_t hdw;
10096f45ec7bSml29623 #endif
10106f45ec7bSml29623 	} bits;
10116f45ec7bSml29623 } log_page_value_t, *p_log_page_value_t;
10126f45ec7bSml29623 
10136f45ec7bSml29623 /* Receive Logical Page Relocation */
10146f45ec7bSml29623 #define	DMA_LOG_PAGE_RELO_SHIFT		0			/* bits 31:0 */
10156f45ec7bSml29623 #define	DMA_LOG_PAGE_RELO_MASK		0x00000000ffffffffULL
10166f45ec7bSml29623 
10176f45ec7bSml29623 /* Receive Logical Page Relocation */
10186f45ec7bSml29623 typedef union _log_page_relo_t {
10196f45ec7bSml29623 	uint64_t value;
10206f45ec7bSml29623 	struct {
10216f45ec7bSml29623 #if defined(_BIG_ENDIAN)
10226f45ec7bSml29623 		uint32_t hdw;
10236f45ec7bSml29623 #endif
10246f45ec7bSml29623 		struct {
10256f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
10266f45ec7bSml29623 			uint32_t relo:32;
10276f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
10286f45ec7bSml29623 			uint32_t relo:32;
10296f45ec7bSml29623 #endif
10306f45ec7bSml29623 		} ldw;
10316f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
10326f45ec7bSml29623 		uint32_t hdw;
10336f45ec7bSml29623 #endif
10346f45ec7bSml29623 	} bits;
10356f45ec7bSml29623 } log_page_relo_t, *p_log_page_relo_t;
10366f45ec7bSml29623 
10376f45ec7bSml29623 
10386f45ec7bSml29623 /* Receive Logical Page Handle */
10396f45ec7bSml29623 #define	DMA_LOG_PAGE_HANDLE_SHIFT	0			/* bits 19:0 */
10406f45ec7bSml29623 #define	DMA_LOG_PAGE_HANDLE_MASK	0x00000000ffffffffULL
10416f45ec7bSml29623 
10426f45ec7bSml29623 /* Receive Logical Page Handle */
10436f45ec7bSml29623 typedef union _log_page_hdl_t {
10446f45ec7bSml29623 	uint64_t value;
10456f45ec7bSml29623 	struct {
10466f45ec7bSml29623 #if defined(_BIG_ENDIAN)
10476f45ec7bSml29623 		uint32_t hdw;
10486f45ec7bSml29623 #endif
10496f45ec7bSml29623 		struct {
10506f45ec7bSml29623 #if defined(_BIT_FIELDS_HTOL)
10516f45ec7bSml29623 			uint32_t res1_1:12;
10526f45ec7bSml29623 			uint32_t handle:20;
10536f45ec7bSml29623 #elif defined(_BIT_FIELDS_LTOH)
10546f45ec7bSml29623 			uint32_t handle:20;
10556f45ec7bSml29623 			uint32_t res1_1:12;
10566f45ec7bSml29623 #endif
10576f45ec7bSml29623 		} ldw;
10586f45ec7bSml29623 #if !defined(_BIG_ENDIAN)
10596f45ec7bSml29623 		uint32_t hdw;
10606f45ec7bSml29623 #endif
10616f45ec7bSml29623 	} bits;
10626f45ec7bSml29623 } log_page_hdl_t, *p_log_page_hdl_t;
10636f45ec7bSml29623 
10646f45ec7bSml29623 #ifdef	__cplusplus
10656f45ec7bSml29623 }
10666f45ec7bSml29623 #endif
10676f45ec7bSml29623 
10686f45ec7bSml29623 #endif	/* _SYS_NXGE_NXGE_HW_H */
1069