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