xref: /onnv-gate/usr/src/uts/common/sys/nxge/nxge_mac_hw.h (revision 6835:07c6485129d0)
13859Sml29623 /*
23859Sml29623  * CDDL HEADER START
33859Sml29623  *
43859Sml29623  * The contents of this file are subject to the terms of the
53859Sml29623  * Common Development and Distribution License (the "License").
63859Sml29623  * You may not use this file except in compliance with the License.
73859Sml29623  *
83859Sml29623  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
93859Sml29623  * or http://www.opensolaris.org/os/licensing.
103859Sml29623  * See the License for the specific language governing permissions
113859Sml29623  * and limitations under the License.
123859Sml29623  *
133859Sml29623  * When distributing Covered Code, include this CDDL HEADER in each
143859Sml29623  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
153859Sml29623  * If applicable, add the following below this CDDL HEADER, with the
163859Sml29623  * fields enclosed by brackets "[]" replaced with your own identifying
173859Sml29623  * information: Portions Copyright [yyyy] [name of copyright owner]
183859Sml29623  *
193859Sml29623  * CDDL HEADER END
203859Sml29623  */
213859Sml29623 /*
226028Ssbehera  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
233859Sml29623  * Use is subject to license terms.
243859Sml29623  */
253859Sml29623 
263859Sml29623 #ifndef	_SYS_MAC_NXGE_MAC_HW_H
273859Sml29623 #define	_SYS_MAC_NXGE_MAC_HW_H
283859Sml29623 
293859Sml29623 #pragma ident	"%Z%%M%	%I%	%E% SMI"
303859Sml29623 
313859Sml29623 #ifdef	__cplusplus
323859Sml29623 extern "C" {
333859Sml29623 #endif
343859Sml29623 
353859Sml29623 #include <nxge_defs.h>
363859Sml29623 
373859Sml29623 /* -------------------------- From May's template --------------------------- */
383859Sml29623 
393859Sml29623 #define	NXGE_1GETHERMIN			255
403859Sml29623 #define	NXGE_ETHERMIN			97
413859Sml29623 #define	NXGE_MAX_HEADER			250
423859Sml29623 
433859Sml29623 /* Hardware reset */
443859Sml29623 typedef enum  {
453859Sml29623 	NXGE_TX_DISABLE,			/* Disable Tx side */
463859Sml29623 	NXGE_RX_DISABLE,			/* Disable Rx side */
473859Sml29623 	NXGE_CHIP_RESET				/* Full chip reset */
483859Sml29623 } nxge_reset_t;
493859Sml29623 
503859Sml29623 #define	NXGE_DELAY_AFTER_TXRX		10000	/* 10ms after idling rx/tx */
513859Sml29623 #define	NXGE_DELAY_AFTER_RESET		1000	/* 1ms after the reset */
523859Sml29623 #define	NXGE_DELAY_AFTER_EE_RESET	10000	/* 10ms after EEPROM reset */
533859Sml29623 #define	NXGE_DELAY_AFTER_LINK_RESET	13	/* 13 Us after link reset */
543859Sml29623 #define	NXGE_LINK_RESETS		8	/* Max PHY resets to wait for */
553859Sml29623 						/* linkup */
563859Sml29623 
573859Sml29623 #define	FILTER_M_CTL 			0xDCEF1
583859Sml29623 #define	HASH_BITS			8
593859Sml29623 #define	NMCFILTER_BITS			(1 << HASH_BITS)
603859Sml29623 #define	HASH_REG_WIDTH			16
613859Sml29623 #define	BROADCAST_HASH_WORD		0x0f
623859Sml29623 #define	BROADCAST_HASH_BIT		0x8000
633859Sml29623 #define	NMCFILTER_REGS			NMCFILTER_BITS / HASH_REG_WIDTH
643859Sml29623 					/* Number of multicast filter regs */
653859Sml29623 
663859Sml29623 /* -------------------------------------------------------------------------- */
673859Sml29623 
683859Sml29623 #define	XMAC_PORT_0			0
693859Sml29623 #define	XMAC_PORT_1			1
703859Sml29623 #define	BMAC_PORT_0			2
713859Sml29623 #define	BMAC_PORT_1			3
723859Sml29623 
733859Sml29623 #define	MAC_RESET_WAIT			10	/* usecs */
743859Sml29623 
753859Sml29623 #define	MAC_ADDR_REG_MASK		0xFFFF
763859Sml29623 
774732Sdavemq /*
784732Sdavemq  * Neptune port PHY type and Speed encoding.
794732Sdavemq  *
804732Sdavemq  * Per port, 4 bits are reserved for port speed (1G/10G) and 4 bits
814732Sdavemq  * are reserved for port PHY type (Copper/Fibre). Bits 0 thru 3 are for port0
824732Sdavemq  * speed, bits 4 thru 7 are for port1 speed, bits 8 thru 11 are for port2 speed
834732Sdavemq  * and bits 12 thru 15 are for port3 speed. Thus, the first 16 bits hold the
844732Sdavemq  * speed encoding for the 4 ports. The next 16 bits (16 thru 31) hold the phy
854732Sdavemq  * type encoding for the ports 0 thru 3.
864732Sdavemq  *
874732Sdavemq  *  p3phy  p2phy  p1phy  p0phy  p3spd p2spd  p1spd p0spd
884732Sdavemq  *    |      |      |      |      |     |      |     |
894732Sdavemq  *   ---    ---    ---    ---    ---   ---    ---   ---
904732Sdavemq  *  /   \  /   \  /   \  /   \  /   \ /   \  /   \ /   \
914732Sdavemq  * 31..28 27..24 23..20 19..16 15..12 11.. 8 7.. 4 3.. 0
924732Sdavemq  */
934977Sraghus 
944732Sdavemq #define	NXGE_PORT_SPD_NONE	0x0
954732Sdavemq #define	NXGE_PORT_SPD_1G	0x1
964732Sdavemq #define	NXGE_PORT_SPD_10G	0x2
974732Sdavemq #define	NXGE_PORT_SPD_RSVD	0x7
984732Sdavemq 
994732Sdavemq #define	NXGE_PHY_NONE		0x0
1004732Sdavemq #define	NXGE_PHY_COPPER		0x1
1014732Sdavemq #define	NXGE_PHY_FIBRE		0x2
1024977Sraghus #define	NXGE_PHY_SERDES		0x3
1034977Sraghus #define	NXGE_PHY_RGMII_FIBER	0x4
104*6835Syc148097 #define	NXGE_PHY_TN1010		0x5
1054732Sdavemq #define	NXGE_PHY_RSVD		0x7
1064732Sdavemq 
1074732Sdavemq #define	NXGE_PORT_SPD_SHIFT	0
1084732Sdavemq #define	NXGE_PORT_SPD_MASK	0x0f
1094732Sdavemq 
1104732Sdavemq #define	NXGE_PHY_SHIFT		16
1114732Sdavemq #define	NXGE_PHY_MASK		0x0f0000
1124732Sdavemq 
113*6835Syc148097 /*
114*6835Syc148097  * "xgc" as a possible value for the device property "phy-type"
115*6835Syc148097  * was intended for the portmode == PORT_10G_COPPER case. But
116*6835Syc148097  * the first 10G copper network I/O device available is the
117*6835Syc148097  * TN1010 based copper XAUI card and we use PORT_10G_TN1010 or
118*6835Syc148097  * PORT_1G_TN1010 as the portmode, so PORT_10G_COPPER is never
119*6835Syc148097  * used as portmode. The driver code related to PORT_10G_COPPER
120*6835Syc148097  * is kept in the driver as a place holder for possble future
121*6835Syc148097  * 10G copper devices.
122*6835Syc148097  */
123*6835Syc148097 #define	NXGE_PORT_10G_COPPER	(NXGE_PORT_SPD_10G |	\
1244732Sdavemq 	(NXGE_PHY_COPPER << NXGE_PHY_SHIFT))
125*6835Syc148097 
126*6835Syc148097 #define	NXGE_PORT_1G_COPPER	(NXGE_PORT_SPD_1G |	\
1274732Sdavemq 	(NXGE_PHY_COPPER << NXGE_PHY_SHIFT))
1284732Sdavemq #define	NXGE_PORT_1G_FIBRE	(NXGE_PORT_SPD_1G |	\
1294732Sdavemq 	(NXGE_PHY_FIBRE << NXGE_PHY_SHIFT))
1304732Sdavemq #define	NXGE_PORT_10G_FIBRE	(NXGE_PORT_SPD_10G |	\
1314732Sdavemq 	(NXGE_PHY_FIBRE << NXGE_PHY_SHIFT))
1324977Sraghus #define	NXGE_PORT_1G_SERDES	(NXGE_PORT_SPD_1G |	\
1334977Sraghus 	(NXGE_PHY_SERDES << NXGE_PHY_SHIFT))
1344977Sraghus #define	NXGE_PORT_10G_SERDES	(NXGE_PORT_SPD_10G |	\
1354977Sraghus 	(NXGE_PHY_SERDES << NXGE_PHY_SHIFT))
1365196Ssbehera #define	NXGE_PORT_1G_RGMII_FIBER	(NXGE_PORT_SPD_1G |	\
1374977Sraghus 	(NXGE_PHY_RGMII_FIBER << NXGE_PHY_SHIFT))
138*6835Syc148097 
139*6835Syc148097 /* The speed of TN1010 will be determined by each nxge instance */
140*6835Syc148097 #define	NXGE_PORT_TN1010	(NXGE_PORT_SPD_NONE |	\
141*6835Syc148097 	(NXGE_PHY_TN1010 << NXGE_PHY_SHIFT))
142*6835Syc148097 
1434732Sdavemq #define	NXGE_PORT_NONE		(NXGE_PORT_SPD_NONE |	\
1444732Sdavemq 	(NXGE_PHY_NONE << NXGE_PHY_SHIFT))
1454732Sdavemq #define	NXGE_PORT_RSVD		(NXGE_PORT_SPD_RSVD |	\
1464732Sdavemq 	(NXGE_PHY_RSVD << NXGE_PHY_SHIFT))
1474732Sdavemq 
1484732Sdavemq #define	NXGE_PORT_TYPE_MASK	(NXGE_PORT_SPD_MASK | NXGE_PHY_MASK)
1494732Sdavemq 
1504732Sdavemq /* number of bits used for phy/spd encoding per port */
1514732Sdavemq #define	NXGE_PORT_TYPE_SHIFT	4
1524732Sdavemq 
1533859Sml29623 /* Network Modes */
1543859Sml29623 
1553859Sml29623 typedef enum nxge_network_mode {
1563859Sml29623 	NET_2_10GE_FIBER = 1,
1573859Sml29623 	NET_2_10GE_COPPER,
1583859Sml29623 	NET_1_10GE_FIBER_3_1GE_COPPER,
1593859Sml29623 	NET_1_10GE_COPPER_3_1GE_COPPER,
1603859Sml29623 	NET_1_10GE_FIBER_3_1GE_FIBER,
1613859Sml29623 	NET_1_10GE_COPPER_3_1GE_FIBER,
1623859Sml29623 	NET_2_1GE_FIBER_2_1GE_COPPER,
1633859Sml29623 	NET_QGE_FIBER,
1643859Sml29623 	NET_QGE_COPPER
1653859Sml29623 } nxge_network_mode_t;
1663859Sml29623 
1673859Sml29623 typedef	enum nxge_port {
1683859Sml29623 	PORT_TYPE_XMAC = 1,
1696495Sspeer 	PORT_TYPE_BMAC,
1706495Sspeer 	PORT_TYPE_LOGICAL
1713859Sml29623 } nxge_port_t;
1723859Sml29623 
1733859Sml29623 typedef	enum nxge_port_mode {
1743859Sml29623 	PORT_1G_COPPER = 1,
1753859Sml29623 	PORT_1G_FIBER,
1763859Sml29623 	PORT_10G_COPPER,
1774977Sraghus 	PORT_10G_FIBER,
178*6835Syc148097 	PORT_10G_SERDES,	/* Port0 or 1 of Alonso or Monza */
179*6835Syc148097 	PORT_1G_SERDES,		/* Port0 or 1 of Alonso or Monza */
180*6835Syc148097 	PORT_1G_RGMII_FIBER,	/* Port2 or 3 of Alonso or ARTM  */
1816495Sspeer 	PORT_HSP_MODE,
182*6835Syc148097 	PORT_LOGICAL,
183*6835Syc148097 	PORT_1G_TN1010,		/* Teranetics PHY in 1G mode */
184*6835Syc148097 	PORT_10G_TN1010		/* Teranetics PHY in 10G mode */
1853859Sml29623 } nxge_port_mode_t;
1863859Sml29623 
1873859Sml29623 typedef	enum nxge_linkchk_mode {
1883859Sml29623 	LINKCHK_INTR = 1,
1893859Sml29623 	LINKCHK_TIMER
1903859Sml29623 } nxge_linkchk_mode_t;
1913859Sml29623 
1923859Sml29623 typedef enum {
1933859Sml29623 	LINK_INTR_STOP,
1943859Sml29623 	LINK_INTR_START
1953859Sml29623 } link_intr_enable_t, *link_intr_enable_pt;
1963859Sml29623 
1973859Sml29623 typedef	enum {
1983859Sml29623 	LINK_MONITOR_STOP,
1994693Stm144005 	LINK_MONITOR_START,
2004693Stm144005 	LINK_MONITOR_STOPPING
2013859Sml29623 } link_mon_enable_t, *link_mon_enable_pt;
2023859Sml29623 
2033859Sml29623 typedef enum {
2043859Sml29623 	NO_XCVR,
2053859Sml29623 	INT_MII_XCVR,
2063859Sml29623 	EXT_MII_XCVR,
2073859Sml29623 	PCS_XCVR,
2085572Ssbehera 	XPCS_XCVR,
2096495Sspeer 	HSP_XCVR,
2106495Sspeer 	LOGICAL_XCVR
2113859Sml29623 } xcvr_inuse_t;
2123859Sml29623 
2133859Sml29623 /* macros for port offset calculations */
2143859Sml29623 
2153859Sml29623 #define	PORT_1_OFFSET			0x6000
2163859Sml29623 #define	PORT_GT_1_OFFSET		0x4000
2173859Sml29623 
2183859Sml29623 /* XMAC address macros */
2193859Sml29623 
2203859Sml29623 #define	XMAC_ADDR_OFFSET_0		0
2213859Sml29623 #define	XMAC_ADDR_OFFSET_1		0x6000
2223859Sml29623 
2233859Sml29623 #define	XMAC_ADDR_OFFSET(port_num)\
2243859Sml29623 	(XMAC_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET))
2253859Sml29623 
2263859Sml29623 #define	XMAC_REG_ADDR(port_num, reg)\
2273859Sml29623 	(FZC_MAC + (XMAC_ADDR_OFFSET(port_num)) + (reg))
2283859Sml29623 
2293859Sml29623 #define	XMAC_PORT_ADDR(port_num)\
2303859Sml29623 	(FZC_MAC + XMAC_ADDR_OFFSET(port_num))
2313859Sml29623 
2323859Sml29623 /* BMAC address macros */
2333859Sml29623 
2343859Sml29623 #define	BMAC_ADDR_OFFSET_2		0x0C000
2353859Sml29623 #define	BMAC_ADDR_OFFSET_3		0x10000
2363859Sml29623 
2373859Sml29623 #define	BMAC_ADDR_OFFSET(port_num)\
2383859Sml29623 	(BMAC_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET))
2393859Sml29623 
2403859Sml29623 #define	BMAC_REG_ADDR(port_num, reg)\
2413859Sml29623 	(FZC_MAC + (BMAC_ADDR_OFFSET(port_num)) + (reg))
2423859Sml29623 
2433859Sml29623 #define	BMAC_PORT_ADDR(port_num)\
2443859Sml29623 	(FZC_MAC + BMAC_ADDR_OFFSET(port_num))
2453859Sml29623 
2463859Sml29623 /* PCS address macros */
2473859Sml29623 
2483859Sml29623 #define	PCS_ADDR_OFFSET_0		0x04000
2493859Sml29623 #define	PCS_ADDR_OFFSET_1		0x0A000
2503859Sml29623 #define	PCS_ADDR_OFFSET_2		0x0E000
2513859Sml29623 #define	PCS_ADDR_OFFSET_3		0x12000
2523859Sml29623 
2533859Sml29623 #define	PCS_ADDR_OFFSET(port_num)\
2543859Sml29623 	((port_num <= 1) ? \
2553859Sml29623 	(PCS_ADDR_OFFSET_0 + (port_num) * PORT_1_OFFSET) : \
2563859Sml29623 	(PCS_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET)))
2573859Sml29623 
2583859Sml29623 #define	PCS_REG_ADDR(port_num, reg)\
2593859Sml29623 	(FZC_MAC + (PCS_ADDR_OFFSET((port_num)) + (reg)))
2603859Sml29623 
2613859Sml29623 #define	PCS_PORT_ADDR(port_num)\
2623859Sml29623 	(FZC_MAC + (PCS_ADDR_OFFSET(port_num)))
2633859Sml29623 
2643859Sml29623 /* XPCS address macros */
2653859Sml29623 
2663859Sml29623 #define	XPCS_ADDR_OFFSET_0		0x02000
2673859Sml29623 #define	XPCS_ADDR_OFFSET_1		0x08000
2683859Sml29623 #define	XPCS_ADDR_OFFSET(port_num)\
2693859Sml29623 	(XPCS_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET))
2703859Sml29623 
2713859Sml29623 #define	XPCS_ADDR(port_num, reg)\
2723859Sml29623 	(FZC_MAC + (XPCS_ADDR_OFFSET((port_num)) + (reg)))
2733859Sml29623 
2743859Sml29623 #define	XPCS_PORT_ADDR(port_num)\
2753859Sml29623 	(FZC_MAC + (XPCS_ADDR_OFFSET(port_num)))
2763859Sml29623 
2773859Sml29623 /* ESR address macro */
2783859Sml29623 #define	ESR_ADDR_OFFSET		0x14000
2793859Sml29623 #define	ESR_ADDR(reg)\
2803859Sml29623 	(FZC_MAC + (ESR_ADDR_OFFSET) + (reg))
2813859Sml29623 
2823859Sml29623 /* MIF address macros */
2833859Sml29623 #define	MIF_ADDR_OFFSET		0x16000
2843859Sml29623 #define	MIF_ADDR(reg)\
2853859Sml29623 	(FZC_MAC + (MIF_ADDR_OFFSET) + (reg))
2863859Sml29623 
2873859Sml29623 /* BMAC registers offset */
2883859Sml29623 #define	BTXMAC_SW_RST_REG		0x000	/* TX MAC software reset */
2893859Sml29623 #define	BRXMAC_SW_RST_REG		0x008	/* RX MAC software reset */
2903859Sml29623 #define	MAC_SEND_PAUSE_REG		0x010	/* send pause command */
2913859Sml29623 #define	BTXMAC_STATUS_REG		0x020	/* TX MAC status */
2923859Sml29623 #define	BRXMAC_STATUS_REG		0x028	/* RX MAC status */
2933859Sml29623 #define	BMAC_CTRL_STAT_REG		0x030	/* MAC control status */
2943859Sml29623 #define	BTXMAC_STAT_MSK_REG		0x040	/* TX MAC mask */
2953859Sml29623 #define	BRXMAC_STAT_MSK_REG		0x048	/* RX MAC mask */
2963859Sml29623 #define	BMAC_C_S_MSK_REG		0x050	/* MAC control mask */
2973859Sml29623 #define	TXMAC_CONFIG_REG		0x060	/* TX MAC config */
2983859Sml29623 /* cfg register bitmap */
2993859Sml29623 
3003859Sml29623 typedef union _btxmac_config_t {
3013859Sml29623 	uint64_t value;
3023859Sml29623 
3033859Sml29623 	struct {
3043859Sml29623 #if defined(_BIG_ENDIAN)
3053859Sml29623 		uint32_t msw;	/* Most significant word */
3063859Sml29623 		uint32_t lsw;	/* Least significant word */
3073859Sml29623 #elif defined(_LITTLE_ENDIAN)
3083859Sml29623 		uint32_t lsw;	/* Least significant word */
3093859Sml29623 		uint32_t msw;	/* Most significant word */
3103859Sml29623 #endif
3113859Sml29623 	} val;
3123859Sml29623 	struct {
3133859Sml29623 #if defined(_BIG_ENDIAN)
3143859Sml29623 		uint32_t	w1;
3153859Sml29623 #endif
3163859Sml29623 		struct {
3173859Sml29623 #if defined(_BIT_FIELDS_HTOL)
3183859Sml29623 			uint32_t rsrvd	: 22;
3193859Sml29623 			uint32_t hdx_ctrl2	: 1;
3203859Sml29623 			uint32_t no_fcs	: 1;
3213859Sml29623 			uint32_t hdx_ctrl	: 7;
3223859Sml29623 			uint32_t txmac_enable	: 1;
3233859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
3243859Sml29623 			uint32_t txmac_enable	: 1;
3253859Sml29623 			uint32_t hdx_ctrl	: 7;
3263859Sml29623 			uint32_t no_fcs	: 1;
3273859Sml29623 			uint32_t hdx_ctrl2	: 1;
3283859Sml29623 			uint32_t rsrvd	: 22;
3293859Sml29623 #endif
3303859Sml29623 		} w0;
3313859Sml29623 
3323859Sml29623 #if defined(_LITTLE_ENDIAN)
3333859Sml29623 		uint32_t	w1;
3343859Sml29623 #endif
3353859Sml29623 	} bits;
3363859Sml29623 } btxmac_config_t, *p_btxmac_config_t;
3373859Sml29623 
3383859Sml29623 #define	RXMAC_CONFIG_REG		0x068	/* RX MAC config */
3393859Sml29623 
3403859Sml29623 typedef union _brxmac_config_t {
3413859Sml29623 	uint64_t value;
3423859Sml29623 
3433859Sml29623 	struct {
3443859Sml29623 #if defined(_BIG_ENDIAN)
3453859Sml29623 		uint32_t msw;	/* Most significant word */
3463859Sml29623 		uint32_t lsw;	/* Least significant word */
3473859Sml29623 #elif defined(_LITTLE_ENDIAN)
3483859Sml29623 		uint32_t lsw;	/* Least significant word */
3493859Sml29623 		uint32_t msw;	/* Most significant word */
3503859Sml29623 #endif
3513859Sml29623 	} val;
3523859Sml29623 	struct {
3533859Sml29623 #if defined(_BIG_ENDIAN)
3543859Sml29623 		uint32_t	w1;
3553859Sml29623 #endif
3563859Sml29623 		struct {
3573859Sml29623 #if defined(_BIT_FIELDS_HTOL)
3583859Sml29623 			uint32_t rsrvd	: 20;
3593859Sml29623 			uint32_t mac_reg_sw_test : 2;
3603859Sml29623 			uint32_t mac2ipp_pkt_cnt_en : 1;
3613859Sml29623 			uint32_t rx_crs_extend_en : 1;
3623859Sml29623 			uint32_t error_chk_dis	: 1;
3633859Sml29623 			uint32_t addr_filter_en	: 1;
3643859Sml29623 			uint32_t hash_filter_en	: 1;
3653859Sml29623 			uint32_t promiscuous_group	: 1;
3663859Sml29623 			uint32_t promiscuous	: 1;
3673859Sml29623 			uint32_t strip_fcs	: 1;
3683859Sml29623 			uint32_t strip_pad	: 1;
3693859Sml29623 			uint32_t rxmac_enable	: 1;
3703859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
3713859Sml29623 			uint32_t rxmac_enable	: 1;
3723859Sml29623 			uint32_t strip_pad	: 1;
3733859Sml29623 			uint32_t strip_fcs	: 1;
3743859Sml29623 			uint32_t promiscuous	: 1;
3753859Sml29623 			uint32_t promiscuous_group	: 1;
3763859Sml29623 			uint32_t hash_filter_en	: 1;
3773859Sml29623 			uint32_t addr_filter_en	: 1;
3783859Sml29623 			uint32_t error_chk_dis	: 1;
3793859Sml29623 			uint32_t rx_crs_extend_en : 1;
3803859Sml29623 			uint32_t mac2ipp_pkt_cnt_en : 1;
3813859Sml29623 			uint32_t mac_reg_sw_test : 2;
3823859Sml29623 			uint32_t rsrvd	: 20;
3833859Sml29623 #endif
3843859Sml29623 		} w0;
3853859Sml29623 
3863859Sml29623 #if defined(_LITTLE_ENDIAN)
3873859Sml29623 		uint32_t	w1;
3883859Sml29623 #endif
3893859Sml29623 	} bits;
3903859Sml29623 } brxmac_config_t, *p_brxmac_config_t;
3913859Sml29623 
3923859Sml29623 #define	MAC_CTRL_CONFIG_REG		0x070	/* MAC control config */
3933859Sml29623 #define	MAC_XIF_CONFIG_REG		0x078	/* XIF config */
3943859Sml29623 
3953859Sml29623 typedef union _bxif_config_t {
3963859Sml29623 	uint64_t value;
3973859Sml29623 
3983859Sml29623 	struct {
3993859Sml29623 #if defined(_BIG_ENDIAN)
4003859Sml29623 		uint32_t msw;	/* Most significant word */
4013859Sml29623 		uint32_t lsw;	/* Least significant word */
4023859Sml29623 #elif defined(_LITTLE_ENDIAN)
4033859Sml29623 		uint32_t lsw;	/* Least significant word */
4043859Sml29623 		uint32_t msw;	/* Most significant word */
4053859Sml29623 #endif
4063859Sml29623 	} val;
4073859Sml29623 	struct {
4083859Sml29623 #if defined(_BIG_ENDIAN)
4093859Sml29623 		uint32_t	w1;
4103859Sml29623 #endif
4113859Sml29623 		struct {
4123859Sml29623 #if defined(_BIT_FIELDS_HTOL)
4133859Sml29623 			uint32_t rsrvd2		: 24;
4143859Sml29623 			uint32_t sel_clk_25mhz	: 1;
4153859Sml29623 			uint32_t led_polarity	: 1;
4163859Sml29623 			uint32_t force_led_on	: 1;
4173859Sml29623 			uint32_t used		: 1;
4183859Sml29623 			uint32_t gmii_mode	: 1;
4193859Sml29623 			uint32_t rsrvd		: 1;
4203859Sml29623 			uint32_t loopback	: 1;
4213859Sml29623 			uint32_t tx_output_en	: 1;
4223859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
4233859Sml29623 			uint32_t tx_output_en	: 1;
4243859Sml29623 			uint32_t loopback	: 1;
4253859Sml29623 			uint32_t rsrvd		: 1;
4263859Sml29623 			uint32_t gmii_mode	: 1;
4273859Sml29623 			uint32_t used		: 1;
4283859Sml29623 			uint32_t force_led_on	: 1;
4293859Sml29623 			uint32_t led_polarity	: 1;
4303859Sml29623 			uint32_t sel_clk_25mhz	: 1;
4313859Sml29623 			uint32_t rsrvd2		: 24;
4323859Sml29623 #endif
4333859Sml29623 		} w0;
4343859Sml29623 
4353859Sml29623 #if defined(_LITTLE_ENDIAN)
4363859Sml29623 		uint32_t	w1;
4373859Sml29623 #endif
4383859Sml29623 	} bits;
4393859Sml29623 } bxif_config_t, *p_bxif_config_t;
4403859Sml29623 
4413859Sml29623 #define	BMAC_MIN_REG			0x0a0	/* min frame size */
4423859Sml29623 #define	BMAC_MAX_REG			0x0a8	/* max frame size reg */
4433859Sml29623 #define	MAC_PA_SIZE_REG			0x0b0	/* num of preamble bytes */
4443859Sml29623 #define	MAC_CTRL_TYPE_REG		0x0c8	/* type field of MAC ctrl */
4453859Sml29623 #define	BMAC_ADDR0_REG			0x100	/* MAC unique ad0 reg (HI 0) */
4463859Sml29623 #define	BMAC_ADDR1_REG			0x108	/* MAC unique ad1 reg */
4473859Sml29623 #define	BMAC_ADDR2_REG			0x110	/* MAC unique ad2 reg */
4483859Sml29623 #define	BMAC_ADDR3_REG			0x118	/* MAC alt ad0 reg (HI 1) */
4493859Sml29623 #define	BMAC_ADDR4_REG			0x120	/* MAC alt ad0 reg */
4503859Sml29623 #define	BMAC_ADDR5_REG			0x128	/* MAC alt ad0 reg */
4513859Sml29623 #define	BMAC_ADDR6_REG			0x130	/* MAC alt ad1 reg (HI 2) */
4523859Sml29623 #define	BMAC_ADDR7_REG			0x138	/* MAC alt ad1 reg */
4533859Sml29623 #define	BMAC_ADDR8_REG			0x140	/* MAC alt ad1 reg */
4543859Sml29623 #define	BMAC_ADDR9_REG			0x148	/* MAC alt ad2 reg (HI 3) */
4553859Sml29623 #define	BMAC_ADDR10_REG			0x150	/* MAC alt ad2 reg */
4563859Sml29623 #define	BMAC_ADDR11_REG			0x158	/* MAC alt ad2 reg */
4573859Sml29623 #define	BMAC_ADDR12_REG			0x160	/* MAC alt ad3 reg (HI 4) */
4583859Sml29623 #define	BMAC_ADDR13_REG			0x168	/* MAC alt ad3 reg */
4593859Sml29623 #define	BMAC_ADDR14_REG			0x170	/* MAC alt ad3 reg */
4603859Sml29623 #define	BMAC_ADDR15_REG			0x178	/* MAC alt ad4 reg (HI 5) */
4613859Sml29623 #define	BMAC_ADDR16_REG			0x180	/* MAC alt ad4 reg */
4623859Sml29623 #define	BMAC_ADDR17_REG			0x188	/* MAC alt ad4 reg */
4633859Sml29623 #define	BMAC_ADDR18_REG			0x190	/* MAC alt ad5 reg (HI 6) */
4643859Sml29623 #define	BMAC_ADDR19_REG			0x198	/* MAC alt ad5 reg */
4653859Sml29623 #define	BMAC_ADDR20_REG			0x1a0	/* MAC alt ad5 reg */
4663859Sml29623 #define	BMAC_ADDR21_REG			0x1a8	/* MAC alt ad6 reg (HI 7) */
4673859Sml29623 #define	BMAC_ADDR22_REG			0x1b0	/* MAC alt ad6 reg */
4683859Sml29623 #define	BMAC_ADDR23_REG			0x1b8	/* MAC alt ad6 reg */
4693859Sml29623 #define	MAC_FC_ADDR0_REG		0x268	/* FC frame addr0 (HI 0, p3) */
4703859Sml29623 #define	MAC_FC_ADDR1_REG		0x270	/* FC frame addr1 */
4713859Sml29623 #define	MAC_FC_ADDR2_REG		0x278	/* FC frame addr2 */
4723859Sml29623 #define	MAC_ADDR_FILT0_REG		0x298	/* bits [47:32] (HI 0, p2) */
4733859Sml29623 #define	MAC_ADDR_FILT1_REG		0x2a0	/* bits [31:16] */
4743859Sml29623 #define	MAC_ADDR_FILT2_REG		0x2a8	/* bits [15:0]  */
4753859Sml29623 #define	MAC_ADDR_FILT12_MASK_REG 	0x2b0	/* addr filter 2 & 1 mask */
4763859Sml29623 #define	MAC_ADDR_FILT00_MASK_REG	0x2b8	/* addr filter 0 mask */
4773859Sml29623 #define	MAC_HASH_TBL0_REG		0x2c0	/* hash table 0 reg */
4783859Sml29623 #define	MAC_HASH_TBL1_REG		0x2c8	/* hash table 1 reg */
4793859Sml29623 #define	MAC_HASH_TBL2_REG		0x2d0	/* hash table 2 reg */
4803859Sml29623 #define	MAC_HASH_TBL3_REG		0x2d8	/* hash table 3 reg */
4813859Sml29623 #define	MAC_HASH_TBL4_REG		0x2e0	/* hash table 4 reg */
4823859Sml29623 #define	MAC_HASH_TBL5_REG		0x2e8	/* hash table 5 reg */
4833859Sml29623 #define	MAC_HASH_TBL6_REG		0x2f0	/* hash table 6 reg */
4843859Sml29623 #define	MAC_HASH_TBL7_REG		0x2f8	/* hash table 7 reg */
4853859Sml29623 #define	MAC_HASH_TBL8_REG		0x300	/* hash table 8 reg */
4863859Sml29623 #define	MAC_HASH_TBL9_REG		0x308	/* hash table 9 reg */
4873859Sml29623 #define	MAC_HASH_TBL10_REG		0x310	/* hash table 10 reg */
4883859Sml29623 #define	MAC_HASH_TBL11_REG		0x318	/* hash table 11 reg */
4893859Sml29623 #define	MAC_HASH_TBL12_REG		0x320	/* hash table 12 reg */
4903859Sml29623 #define	MAC_HASH_TBL13_REG		0x328	/* hash table 13 reg */
4913859Sml29623 #define	MAC_HASH_TBL14_REG		0x330	/* hash table 14 reg */
4923859Sml29623 #define	MAC_HASH_TBL15_REG		0x338	/* hash table 15 reg */
4933859Sml29623 #define	RXMAC_FRM_CNT_REG		0x370	/* receive frame counter */
4943859Sml29623 #define	MAC_LEN_ER_CNT_REG		0x378	/* length error counter */
4953859Sml29623 #define	BMAC_AL_ER_CNT_REG		0x380	/* alignment error counter */
4963859Sml29623 #define	BMAC_CRC_ER_CNT_REG		0x388	/* FCS error counter */
4973859Sml29623 #define	BMAC_CD_VIO_CNT_REG		0x390	/* RX code violation err */
4983859Sml29623 #define	BMAC_SM_REG			0x3a0	/* (ro) state machine reg */
4993859Sml29623 #define	BMAC_ALTAD_CMPEN_REG		0x3f8	/* Alt addr compare enable */
5003859Sml29623 #define	BMAC_HOST_INF0_REG		0x400	/* Host info */
5013859Sml29623 						/* (own da, add filter, fc) */
5023859Sml29623 #define	BMAC_HOST_INF1_REG		0x408	/* Host info (alt ad 0) */
5033859Sml29623 #define	BMAC_HOST_INF2_REG		0x410	/* Host info (alt ad 1) */
5043859Sml29623 #define	BMAC_HOST_INF3_REG		0x418	/* Host info (alt ad 2) */
5053859Sml29623 #define	BMAC_HOST_INF4_REG		0x420	/* Host info (alt ad 3) */
5063859Sml29623 #define	BMAC_HOST_INF5_REG		0x428	/* Host info (alt ad 4) */
5073859Sml29623 #define	BMAC_HOST_INF6_REG		0x430	/* Host info (alt ad 5) */
5083859Sml29623 #define	BMAC_HOST_INF7_REG		0x438	/* Host info (alt ad 6) */
5093859Sml29623 #define	BMAC_HOST_INF8_REG		0x440	/* Host info (hash hit, miss) */
5103859Sml29623 #define	BTXMAC_BYTE_CNT_REG		0x448	/* Tx byte count */
5113859Sml29623 #define	BTXMAC_FRM_CNT_REG		0x450	/* frame count */
5123859Sml29623 #define	BRXMAC_BYTE_CNT_REG		0x458	/* Rx byte count */
5133859Sml29623 /* x ranges from 0 to 6 (BMAC_MAX_ALT_ADDR_ENTRY - 1) */
5143859Sml29623 #define	BMAC_ALT_ADDR0N_REG_ADDR(x)	(BMAC_ADDR3_REG + (x) * 24)
5153859Sml29623 #define	BMAC_ALT_ADDR1N_REG_ADDR(x)	(BMAC_ADDR3_REG + 8 + (x) * 24)
5163859Sml29623 #define	BMAC_ALT_ADDR2N_REG_ADDR(x)	(BMAC_ADDR3_REG + 0x10 + (x) * 24)
5173859Sml29623 #define	BMAC_HASH_TBLN_REG_ADDR(x)	(MAC_HASH_TBL0_REG + (x) * 8)
5183859Sml29623 #define	BMAC_HOST_INFN_REG_ADDR(x)	(BMAC_HOST_INF0_REG + (x) * 8)
5193859Sml29623 
5203859Sml29623 /* XMAC registers offset */
5213859Sml29623 #define	XTXMAC_SW_RST_REG		0x000	/* XTX MAC soft reset */
5223859Sml29623 #define	XRXMAC_SW_RST_REG		0x008	/* XRX MAC soft reset */
5233859Sml29623 #define	XTXMAC_STATUS_REG		0x020	/* XTX MAC status */
5243859Sml29623 #define	XRXMAC_STATUS_REG		0x028	/* XRX MAC status */
5253859Sml29623 #define	XMAC_CTRL_STAT_REG		0x030	/* Control / Status */
5263859Sml29623 #define	XTXMAC_STAT_MSK_REG		0x040	/* XTX MAC Status mask */
5273859Sml29623 #define	XRXMAC_STAT_MSK_REG		0x048	/* XRX MAC Status mask */
5283859Sml29623 #define	XMAC_C_S_MSK_REG		0x050	/* Control / Status mask */
5293859Sml29623 #define	XMAC_CONFIG_REG			0x060	/* Configuration */
5303859Sml29623 
5313859Sml29623 /* xmac config bit fields */
5323859Sml29623 typedef union _xmac_cfg_t {
5333859Sml29623 	uint64_t value;
5343859Sml29623 
5353859Sml29623 	struct {
5363859Sml29623 #if defined(_BIG_ENDIAN)
5373859Sml29623 		uint32_t msw;	/* Most significant word */
5383859Sml29623 		uint32_t lsw;	/* Least significant word */
5393859Sml29623 #elif defined(_LITTLE_ENDIAN)
5403859Sml29623 		uint32_t lsw;	/* Least significant word */
5413859Sml29623 		uint32_t msw;	/* Most significant word */
5423859Sml29623 #endif
5433859Sml29623 	} val;
5443859Sml29623 	struct {
5453859Sml29623 #if defined(_BIG_ENDIAN)
5463859Sml29623 		uint32_t	w1;
5473859Sml29623 #endif
5483859Sml29623 		struct {
5493859Sml29623 #if defined(_BIT_FIELDS_HTOL)
5503859Sml29623 		uint32_t sel_clk_25mhz : 1;
5513859Sml29623 		uint32_t pcs_bypass	: 1;
5523859Sml29623 		uint32_t xpcs_bypass	: 1;
5533859Sml29623 		uint32_t mii_gmii_mode	: 2;
5543859Sml29623 		uint32_t lfs_disable	: 1;
5553859Sml29623 		uint32_t loopback	: 1;
5563859Sml29623 		uint32_t tx_output_en	: 1;
5573859Sml29623 		uint32_t sel_por_clk_src : 1;
5583859Sml29623 		uint32_t led_polarity	: 1;
5593859Sml29623 		uint32_t force_led_on	: 1;
5603859Sml29623 		uint32_t pass_fctl_frames : 1;
5613859Sml29623 		uint32_t recv_pause_en	: 1;
5623859Sml29623 		uint32_t mac2ipp_pkt_cnt_en : 1;
5633859Sml29623 		uint32_t strip_crc	: 1;
5643859Sml29623 		uint32_t addr_filter_en	: 1;
5653859Sml29623 		uint32_t hash_filter_en	: 1;
5663859Sml29623 		uint32_t code_viol_chk_dis	: 1;
5673859Sml29623 		uint32_t reserved_mcast	: 1;
5683859Sml29623 		uint32_t rx_crc_chk_dis	: 1;
5693859Sml29623 		uint32_t error_chk_dis	: 1;
5703859Sml29623 		uint32_t promisc_grp	: 1;
5713859Sml29623 		uint32_t promiscuous	: 1;
5723859Sml29623 		uint32_t rx_mac_enable	: 1;
5733859Sml29623 		uint32_t warning_msg_en	: 1;
5743859Sml29623 		uint32_t used		: 3;
5753859Sml29623 		uint32_t always_no_crc	: 1;
5763859Sml29623 		uint32_t var_min_ipg_en	: 1;
5773859Sml29623 		uint32_t strech_mode	: 1;
5783859Sml29623 		uint32_t tx_enable	: 1;
5793859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
5803859Sml29623 		uint32_t tx_enable	: 1;
5813859Sml29623 		uint32_t strech_mode	: 1;
5823859Sml29623 		uint32_t var_min_ipg_en	: 1;
5833859Sml29623 		uint32_t always_no_crc	: 1;
5843859Sml29623 		uint32_t used		: 3;
5853859Sml29623 		uint32_t warning_msg_en	: 1;
5863859Sml29623 		uint32_t rx_mac_enable	: 1;
5873859Sml29623 		uint32_t promiscuous	: 1;
5883859Sml29623 		uint32_t promisc_grp	: 1;
5893859Sml29623 		uint32_t error_chk_dis	: 1;
5903859Sml29623 		uint32_t rx_crc_chk_dis	: 1;
5913859Sml29623 		uint32_t reserved_mcast	: 1;
5923859Sml29623 		uint32_t code_viol_chk_dis	: 1;
5933859Sml29623 		uint32_t hash_filter_en	: 1;
5943859Sml29623 		uint32_t addr_filter_en	: 1;
5953859Sml29623 		uint32_t strip_crc	: 1;
5963859Sml29623 		uint32_t mac2ipp_pkt_cnt_en : 1;
5973859Sml29623 		uint32_t recv_pause_en	: 1;
5983859Sml29623 		uint32_t pass_fctl_frames : 1;
5993859Sml29623 		uint32_t force_led_on	: 1;
6003859Sml29623 		uint32_t led_polarity	: 1;
6013859Sml29623 		uint32_t sel_por_clk_src : 1;
6023859Sml29623 		uint32_t tx_output_en	: 1;
6033859Sml29623 		uint32_t loopback	: 1;
6043859Sml29623 		uint32_t lfs_disable	: 1;
6053859Sml29623 		uint32_t mii_gmii_mode	: 2;
6063859Sml29623 		uint32_t xpcs_bypass	: 1;
6073859Sml29623 		uint32_t pcs_bypass	: 1;
6083859Sml29623 		uint32_t sel_clk_25mhz : 1;
6093859Sml29623 #endif
6103859Sml29623 		} w0;
6113859Sml29623 
6123859Sml29623 #if defined(_LITTLE_ENDIAN)
6133859Sml29623 		uint32_t	w1;
6143859Sml29623 #endif
6153859Sml29623 	} bits;
6163859Sml29623 } xmac_cfg_t, *p_xmac_cfg_t;
6173859Sml29623 
6183859Sml29623 #define	XMAC_IPG_REG			0x080	/* Inter-Packet-Gap */
6193859Sml29623 #define	XMAC_MIN_REG			0x088	/* min frame size register */
6203859Sml29623 #define	XMAC_MAX_REG			0x090	/* max frame/burst size */
6213859Sml29623 #define	XMAC_ADDR0_REG			0x0a0	/* [47:32] of MAC addr (HI17) */
6223859Sml29623 #define	XMAC_ADDR1_REG			0x0a8	/* [31:16] of MAC addr */
6233859Sml29623 #define	XMAC_ADDR2_REG			0x0b0	/* [15:0] of MAC addr */
6243859Sml29623 #define	XRXMAC_BT_CNT_REG		0x100	/* bytes received / 8 */
6253859Sml29623 #define	XRXMAC_BC_FRM_CNT_REG		0x108	/* good BC frames received */
6263859Sml29623 #define	XRXMAC_MC_FRM_CNT_REG		0x110	/* good MC frames received */
6273859Sml29623 #define	XRXMAC_FRAG_CNT_REG		0x118	/* frag frames rejected */
6283859Sml29623 #define	XRXMAC_HIST_CNT1_REG		0x120	/* 64 bytes frames */
6293859Sml29623 #define	XRXMAC_HIST_CNT2_REG		0x128	/* 65-127 bytes frames */
6303859Sml29623 #define	XRXMAC_HIST_CNT3_REG		0x130	/* 128-255 bytes frames */
6313859Sml29623 #define	XRXMAC_HIST_CNT4_REG		0x138	/* 256-511 bytes frames */
6323859Sml29623 #define	XRXMAC_HIST_CNT5_REG		0x140	/* 512-1023 bytes frames */
6333859Sml29623 #define	XRXMAC_HIST_CNT6_REG		0x148	/* 1024-1522 bytes frames */
6343859Sml29623 #define	XRXMAC_MPSZER_CNT_REG		0x150	/* frames > maxframesize */
6353859Sml29623 #define	XRXMAC_CRC_ER_CNT_REG		0x158	/* frames failed CRC */
6363859Sml29623 #define	XRXMAC_CD_VIO_CNT_REG		0x160	/* frames with code vio */
6373859Sml29623 #define	XRXMAC_AL_ER_CNT_REG		0x168	/* frames with align error */
6383859Sml29623 #define	XTXMAC_FRM_CNT_REG		0x170	/* tx frames */
6393859Sml29623 #define	XTXMAC_BYTE_CNT_REG		0x178	/* tx bytes / 8 */
6403859Sml29623 #define	XMAC_LINK_FLT_CNT_REG		0x180	/* link faults */
6413859Sml29623 #define	XRXMAC_HIST_CNT7_REG		0x188	/* MAC2IPP/>1523 bytes frames */
6423859Sml29623 #define	XMAC_SM_REG			0x1a8	/* State machine */
6433859Sml29623 #define	XMAC_INTERN1_REG		0x1b0	/* internal signals for diag */
6443859Sml29623 #define	XMAC_INTERN2_REG		0x1b8	/* internal signals for diag */
6453859Sml29623 #define	XMAC_ADDR_CMPEN_REG		0x208	/* alt MAC addr check */
6463859Sml29623 #define	XMAC_ADDR3_REG			0x218	/* alt MAC addr 0 (HI 0) */
6473859Sml29623 #define	XMAC_ADDR4_REG			0x220	/* alt MAC addr 0 */
6483859Sml29623 #define	XMAC_ADDR5_REG			0x228	/* alt MAC addr 0 */
6493859Sml29623 #define	XMAC_ADDR6_REG			0x230	/* alt MAC addr 1 (HI 1) */
6503859Sml29623 #define	XMAC_ADDR7_REG			0x238	/* alt MAC addr 1 */
6513859Sml29623 #define	XMAC_ADDR8_REG			0x240	/* alt MAC addr 1 */
6523859Sml29623 #define	XMAC_ADDR9_REG			0x248	/* alt MAC addr 2 (HI 2) */
6533859Sml29623 #define	XMAC_ADDR10_REG			0x250	/* alt MAC addr 2 */
6543859Sml29623 #define	XMAC_ADDR11_REG			0x258	/* alt MAC addr 2 */
6553859Sml29623 #define	XMAC_ADDR12_REG			0x260	/* alt MAC addr 3 (HI 3) */
6563859Sml29623 #define	XMAC_ADDR13_REG			0x268	/* alt MAC addr 3 */
6573859Sml29623 #define	XMAC_ADDR14_REG			0x270	/* alt MAC addr 3 */
6583859Sml29623 #define	XMAC_ADDR15_REG			0x278	/* alt MAC addr 4 (HI 4) */
6593859Sml29623 #define	XMAC_ADDR16_REG			0x280	/* alt MAC addr 4 */
6603859Sml29623 #define	XMAC_ADDR17_REG			0x288	/* alt MAC addr 4 */
6613859Sml29623 #define	XMAC_ADDR18_REG			0x290	/* alt MAC addr 5 (HI 5) */
6623859Sml29623 #define	XMAC_ADDR19_REG			0x298	/* alt MAC addr 5 */
6633859Sml29623 #define	XMAC_ADDR20_REG			0x2a0	/* alt MAC addr 5 */
6643859Sml29623 #define	XMAC_ADDR21_REG			0x2a8	/* alt MAC addr 6 (HI 6) */
6653859Sml29623 #define	XMAC_ADDR22_REG			0x2b0	/* alt MAC addr 6 */
6663859Sml29623 #define	XMAC_ADDR23_REG			0x2b8	/* alt MAC addr 6 */
6673859Sml29623 #define	XMAC_ADDR24_REG			0x2c0	/* alt MAC addr 7 (HI 7) */
6683859Sml29623 #define	XMAC_ADDR25_REG			0x2c8	/* alt MAC addr 7 */
6693859Sml29623 #define	XMAC_ADDR26_REG			0x2d0	/* alt MAC addr 7 */
6703859Sml29623 #define	XMAC_ADDR27_REG			0x2d8	/* alt MAC addr 8 (HI 8) */
6713859Sml29623 #define	XMAC_ADDR28_REG			0x2e0	/* alt MAC addr 8 */
6723859Sml29623 #define	XMAC_ADDR29_REG			0x2e8	/* alt MAC addr 8 */
6733859Sml29623 #define	XMAC_ADDR30_REG			0x2f0	/* alt MAC addr 9 (HI 9) */
6743859Sml29623 #define	XMAC_ADDR31_REG			0x2f8	/* alt MAC addr 9 */
6753859Sml29623 #define	XMAC_ADDR32_REG			0x300	/* alt MAC addr 9 */
6763859Sml29623 #define	XMAC_ADDR33_REG			0x308	/* alt MAC addr 10 (HI 10) */
6773859Sml29623 #define	XMAC_ADDR34_REG			0x310	/* alt MAC addr 10 */
6783859Sml29623 #define	XMAC_ADDR35_REG			0x318	/* alt MAC addr 10 */
6793859Sml29623 #define	XMAC_ADDR36_REG			0x320	/* alt MAC addr 11 (HI 11) */
6803859Sml29623 #define	XMAC_ADDR37_REG			0x328	/* alt MAC addr 11 */
6813859Sml29623 #define	XMAC_ADDR38_REG			0x330	/* alt MAC addr 11 */
6823859Sml29623 #define	XMAC_ADDR39_REG			0x338	/* alt MAC addr 12 (HI 12) */
6833859Sml29623 #define	XMAC_ADDR40_REG			0x340	/* alt MAC addr 12 */
6843859Sml29623 #define	XMAC_ADDR41_REG			0x348	/* alt MAC addr 12 */
6853859Sml29623 #define	XMAC_ADDR42_REG			0x350	/* alt MAC addr 13 (HI 13) */
6863859Sml29623 #define	XMAC_ADDR43_REG			0x358	/* alt MAC addr 13 */
6873859Sml29623 #define	XMAC_ADDR44_REG			0x360	/* alt MAC addr 13 */
6883859Sml29623 #define	XMAC_ADDR45_REG			0x368	/* alt MAC addr 14 (HI 14) */
6893859Sml29623 #define	XMAC_ADDR46_REG			0x370	/* alt MAC addr 14 */
6903859Sml29623 #define	XMAC_ADDR47_REG			0x378	/* alt MAC addr 14 */
6913859Sml29623 #define	XMAC_ADDR48_REG			0x380	/* alt MAC addr 15 (HI 15) */
6923859Sml29623 #define	XMAC_ADDR49_REG			0x388	/* alt MAC addr 15 */
6933859Sml29623 #define	XMAC_ADDR50_REG			0x390	/* alt MAC addr 15 */
6943859Sml29623 #define	XMAC_ADDR_FILT0_REG		0x818	/* [47:32] addr filter (HI18) */
6953859Sml29623 #define	XMAC_ADDR_FILT1_REG		0x820	/* [31:16] of addr filter */
6963859Sml29623 #define	XMAC_ADDR_FILT2_REG		0x828	/* [15:0] of addr filter */
6973859Sml29623 #define	XMAC_ADDR_FILT12_MASK_REG 	0x830	/* addr filter 2 & 1 mask */
6983859Sml29623 #define	XMAC_ADDR_FILT0_MASK_REG	0x838	/* addr filter 0 mask */
6993859Sml29623 #define	XMAC_HASH_TBL0_REG		0x840	/* hash table 0 reg */
7003859Sml29623 #define	XMAC_HASH_TBL1_REG		0x848	/* hash table 1 reg */
7013859Sml29623 #define	XMAC_HASH_TBL2_REG		0x850	/* hash table 2 reg */
7023859Sml29623 #define	XMAC_HASH_TBL3_REG		0x858	/* hash table 3 reg */
7033859Sml29623 #define	XMAC_HASH_TBL4_REG		0x860	/* hash table 4 reg */
7043859Sml29623 #define	XMAC_HASH_TBL5_REG		0x868	/* hash table 5 reg */
7053859Sml29623 #define	XMAC_HASH_TBL6_REG		0x870	/* hash table 6 reg */
7063859Sml29623 #define	XMAC_HASH_TBL7_REG		0x878	/* hash table 7 reg */
7073859Sml29623 #define	XMAC_HASH_TBL8_REG		0x880	/* hash table 8 reg */
7083859Sml29623 #define	XMAC_HASH_TBL9_REG		0x888	/* hash table 9 reg */
7093859Sml29623 #define	XMAC_HASH_TBL10_REG		0x890	/* hash table 10 reg */
7103859Sml29623 #define	XMAC_HASH_TBL11_REG		0x898	/* hash table 11 reg */
7113859Sml29623 #define	XMAC_HASH_TBL12_REG		0x8a0	/* hash table 12 reg */
7123859Sml29623 #define	XMAC_HASH_TBL13_REG		0x8a8	/* hash table 13 reg */
7133859Sml29623 #define	XMAC_HASH_TBL14_REG		0x8b0	/* hash table 14 reg */
7143859Sml29623 #define	XMAC_HASH_TBL15_REG		0x8b8	/* hash table 15 reg */
7153859Sml29623 #define	XMAC_HOST_INF0_REG		0x900	/* Host info 0 (alt ad 0) */
7163859Sml29623 #define	XMAC_HOST_INF1_REG		0x908	/* Host info 1 (alt ad 1) */
7173859Sml29623 #define	XMAC_HOST_INF2_REG		0x910	/* Host info 2 (alt ad 2) */
7183859Sml29623 #define	XMAC_HOST_INF3_REG		0x918	/* Host info 3 (alt ad 3) */
7193859Sml29623 #define	XMAC_HOST_INF4_REG		0x920	/* Host info 4 (alt ad 4) */
7203859Sml29623 #define	XMAC_HOST_INF5_REG		0x928	/* Host info 5 (alt ad 5) */
7213859Sml29623 #define	XMAC_HOST_INF6_REG		0x930	/* Host info 6 (alt ad 6) */
7223859Sml29623 #define	XMAC_HOST_INF7_REG		0x938	/* Host info 7 (alt ad 7) */
7233859Sml29623 #define	XMAC_HOST_INF8_REG		0x940	/* Host info 8 (alt ad 8) */
7243859Sml29623 #define	XMAC_HOST_INF9_REG		0x948	/* Host info 9 (alt ad 9) */
7253859Sml29623 #define	XMAC_HOST_INF10_REG		0x950	/* Host info 10 (alt ad 10) */
7263859Sml29623 #define	XMAC_HOST_INF11_REG		0x958	/* Host info 11 (alt ad 11) */
7273859Sml29623 #define	XMAC_HOST_INF12_REG		0x960	/* Host info 12 (alt ad 12) */
7283859Sml29623 #define	XMAC_HOST_INF13_REG		0x968	/* Host info 13 (alt ad 13) */
7293859Sml29623 #define	XMAC_HOST_INF14_REG		0x970	/* Host info 14 (alt ad 14) */
7303859Sml29623 #define	XMAC_HOST_INF15_REG		0x978	/* Host info 15 (alt ad 15) */
7313859Sml29623 #define	XMAC_HOST_INF16_REG		0x980	/* Host info 16 (hash hit) */
7323859Sml29623 #define	XMAC_HOST_INF17_REG		0x988	/* Host info 17 (own da) */
7333859Sml29623 #define	XMAC_HOST_INF18_REG		0x990	/* Host info 18 (filter hit) */
7343859Sml29623 #define	XMAC_HOST_INF19_REG		0x998	/* Host info 19 (fc hit) */
7353859Sml29623 #define	XMAC_PA_DATA0_REG		0xb80	/* preamble [31:0] */
7363859Sml29623 #define	XMAC_PA_DATA1_REG		0xb88	/* preamble [63:32] */
7373859Sml29623 #define	XMAC_DEBUG_SEL_REG		0xb90	/* debug select */
7383859Sml29623 #define	XMAC_TRAINING_VECT_REG		0xb98	/* training vector */
7393859Sml29623 /* x ranges from 0 to 15 (XMAC_MAX_ALT_ADDR_ENTRY - 1) */
7403859Sml29623 #define	XMAC_ALT_ADDR0N_REG_ADDR(x)	(XMAC_ADDR3_REG + (x) * 24)
7413859Sml29623 #define	XMAC_ALT_ADDR1N_REG_ADDR(x)	(XMAC_ADDR3_REG + 8 + (x) * 24)
7423859Sml29623 #define	XMAC_ALT_ADDR2N_REG_ADDR(x)	(XMAC_ADDR3_REG + 16 + (x) * 24)
7433859Sml29623 #define	XMAC_HASH_TBLN_REG_ADDR(x)	(XMAC_HASH_TBL0_REG + (x) * 8)
7443859Sml29623 #define	XMAC_HOST_INFN_REG_ADDR(x)	(XMAC_HOST_INF0_REG + (x) * 8)
7453859Sml29623 
7463859Sml29623 /* MIF registers offset */
7473859Sml29623 #define	MIF_BB_MDC_REG			0	   /* MIF bit-bang clock */
7483859Sml29623 #define	MIF_BB_MDO_REG			0x008	   /* MIF bit-bang data */
7493859Sml29623 #define	MIF_BB_MDO_EN_REG		0x010	   /* MIF bit-bang output en */
7503859Sml29623 #define	MIF_OUTPUT_FRAME_REG		0x018	   /* MIF frame/output reg */
7513859Sml29623 #define	MIF_CONFIG_REG			0x020	   /* MIF config reg */
7523859Sml29623 #define	MIF_POLL_STATUS_REG		0x028	   /* MIF poll status reg */
7533859Sml29623 #define	MIF_POLL_MASK_REG		0x030	   /* MIF poll mask reg */
7543859Sml29623 #define	MIF_STATE_MACHINE_REG		0x038	   /* MIF state machine reg */
7553859Sml29623 #define	MIF_STATUS_REG			0x040	   /* MIF status reg */
7563859Sml29623 #define	MIF_MASK_REG			0x048	   /* MIF mask reg */
7573859Sml29623 
7583859Sml29623 
7593859Sml29623 /* PCS registers offset */
7603859Sml29623 #define	PCS_MII_CTRL_REG		0	   /* PCS MII control reg */
7613859Sml29623 #define	PCS_MII_STATUS_REG		0x008	   /* PCS MII status reg */
7623859Sml29623 #define	PCS_MII_ADVERT_REG		0x010	   /* PCS MII advertisement */
7633859Sml29623 #define	PCS_MII_LPA_REG			0x018	   /* link partner ability */
7643859Sml29623 #define	PCS_CONFIG_REG			0x020	   /* PCS config reg */
7653859Sml29623 #define	PCS_STATE_MACHINE_REG		0x028	   /* PCS state machine */
7663859Sml29623 #define	PCS_INTR_STATUS_REG		0x030	/* PCS interrupt status */
7673859Sml29623 #define	PCS_DATAPATH_MODE_REG		0x0a0	   /* datapath mode reg */
7683859Sml29623 #define	PCS_PACKET_COUNT_REG		0x0c0	   /* PCS packet counter */
7693859Sml29623 
7703859Sml29623 #define	XPCS_CTRL_1_REG			0	/* Control */
7713859Sml29623 #define	XPCS_STATUS_1_REG		0x008
7723859Sml29623 #define	XPCS_DEV_ID_REG			0x010	/* 32bits IEEE manufacture ID */
7733859Sml29623 #define	XPCS_SPEED_ABILITY_REG		0x018
7743859Sml29623 #define	XPCS_DEV_IN_PKG_REG		0x020
7753859Sml29623 #define	XPCS_CTRL_2_REG			0x028
7763859Sml29623 #define	XPCS_STATUS_2_REG		0x030
7773859Sml29623 #define	XPCS_PKG_ID_REG			0x038	/* Package ID */
7783859Sml29623 #define	XPCS_STATUS_REG			0x040
7793859Sml29623 #define	XPCS_TEST_CTRL_REG		0x048
7803859Sml29623 #define	XPCS_CFG_VENDOR_1_REG		0x050
7813859Sml29623 #define	XPCS_DIAG_VENDOR_2_REG		0x058
7823859Sml29623 #define	XPCS_MASK_1_REG			0x060
7833859Sml29623 #define	XPCS_PKT_CNTR_REG		0x068
7843859Sml29623 #define	XPCS_TX_STATE_MC_REG		0x070
7853859Sml29623 #define	XPCS_DESKEW_ERR_CNTR_REG	0x078
7863859Sml29623 #define	XPCS_SYM_ERR_CNTR_L0_L1_REG	0x080
7873859Sml29623 #define	XPCS_SYM_ERR_CNTR_L2_L3_REG	0x088
7883859Sml29623 #define	XPCS_TRAINING_VECTOR_REG	0x090
7893859Sml29623 
7903859Sml29623 /* ESR registers offset */
7913859Sml29623 #define	ESR_RESET_REG			0
7923859Sml29623 #define	ESR_CONFIG_REG			0x008
7933859Sml29623 #define	ESR_0_PLL_CONFIG_REG		0x010
7943859Sml29623 #define	ESR_0_CONTROL_REG		0x018
7953859Sml29623 #define	ESR_0_TEST_CONFIG_REG		0x020
7963859Sml29623 #define	ESR_1_PLL_CONFIG_REG		0x028
7973859Sml29623 #define	ESR_1_CONTROL_REG		0x030
7983859Sml29623 #define	ESR_1_TEST_CONFIG_REG		0x038
7993859Sml29623 #define	ESR_ENET_RGMII_CFG_REG		0x040
8003859Sml29623 #define	ESR_INTERNAL_SIGNALS_REG	0x800
8013859Sml29623 #define	ESR_DEBUG_SEL_REG		0x808
8023859Sml29623 
8033859Sml29623 
8043859Sml29623 /* Reset Register */
8053859Sml29623 #define	MAC_SEND_PAUSE_TIME_MASK	0x0000FFFF /* value of pause time */
8063859Sml29623 #define	MAC_SEND_PAUSE_SEND		0x00010000 /* send pause flow ctrl */
8073859Sml29623 
8083859Sml29623 /* Tx MAC Status Register */
8093859Sml29623 #define	MAC_TX_FRAME_XMIT		0x00000001 /* successful tx frame */
8103859Sml29623 #define	MAC_TX_UNDERRUN			0x00000002 /* starvation in xmit */
8113859Sml29623 #define	MAC_TX_MAX_PACKET_ERR		0x00000004 /* TX frame exceeds max */
8123859Sml29623 #define	MAC_TX_BYTE_CNT_EXP		0x00000400 /* TX byte cnt overflow */
8133859Sml29623 #define	MAC_TX_FRAME_CNT_EXP		0x00000800 /* Tx frame cnt overflow */
8143859Sml29623 
8153859Sml29623 /* Rx MAC Status Register */
8163859Sml29623 #define	MAC_RX_FRAME_RECV		0x00000001 /* successful rx frame */
8173859Sml29623 #define	MAC_RX_OVERFLOW			0x00000002 /* RX FIFO overflow */
8183859Sml29623 #define	MAC_RX_FRAME_COUNT		0x00000004 /* rx frame cnt rollover */
8193859Sml29623 #define	MAC_RX_ALIGN_ERR		0x00000008 /* alignment err rollover */
8203859Sml29623 #define	MAC_RX_CRC_ERR			0x00000010 /* crc error cnt rollover */
8213859Sml29623 #define	MAC_RX_LEN_ERR			0x00000020 /* length err cnt rollover */
8223859Sml29623 #define	MAC_RX_VIOL_ERR			0x00000040 /* code vio err rollover */
8233859Sml29623 #define	MAC_RX_BYTE_CNT_EXP		0x00000080 /* RX MAC byte rollover */
8243859Sml29623 
8253859Sml29623 /* MAC Control Status Register */
8263859Sml29623 #define	MAC_CTRL_PAUSE_RECEIVED		0x00000001 /* successful pause frame */
8273859Sml29623 #define	MAC_CTRL_PAUSE_STATE		0x00000002 /* notpause-->pause */
8283859Sml29623 #define	MAC_CTRL_NOPAUSE_STATE		0x00000004 /* pause-->notpause */
8293859Sml29623 #define	MAC_CTRL_PAUSE_TIME_MASK	0xFFFF0000 /* value of pause time */
8303859Sml29623 #define	MAC_CTRL_PAUSE_TIME_SHIFT	16
8313859Sml29623 
8323859Sml29623 /* Tx MAC Configuration Register */
8333859Sml29623 #define	MAC_TX_CFG_TXMAC_ENABLE		0x00000001 /* enable TX MAC. */
8343859Sml29623 #define	MAC_TX_CFG_NO_FCS		0x00000100 /* TX not generate CRC */
8353859Sml29623 
8363859Sml29623 /* Rx MAC Configuration Register */
8373859Sml29623 #define	MAC_RX_CFG_RXMAC_ENABLE		0x00000001 /* enable RX MAC */
8383859Sml29623 #define	MAC_RX_CFG_STRIP_PAD		0x00000002 /* not supported, set to 0 */
8393859Sml29623 #define	MAC_RX_CFG_STRIP_FCS		0x00000004 /* strip last 4bytes (CRC) */
8403859Sml29623 #define	MAC_RX_CFG_PROMISC		0x00000008 /* promisc mode enable */
8413859Sml29623 #define	MAC_RX_CFG_PROMISC_GROUP  	0x00000010 /* accept all MC frames */
8423859Sml29623 #define	MAC_RX_CFG_HASH_FILTER_EN	0x00000020 /* use hash table */
8433859Sml29623 #define	MAC_RX_CFG_ADDR_FILTER_EN    	0x00000040 /* use address filter */
8443859Sml29623 #define	MAC_RX_CFG_DISABLE_DISCARD	0x00000080 /* do not set abort bit */
8453859Sml29623 #define	MAC_RX_MAC2IPP_PKT_CNT_EN	0x00000200 /* rx pkt cnt -> BMAC-IPP */
8463859Sml29623 #define	MAC_RX_MAC_REG_RW_TEST_MASK	0x00000c00 /* BMAC reg RW test */
8473859Sml29623 #define	MAC_RX_MAC_REG_RW_TEST_SHIFT	10
8483859Sml29623 
8493859Sml29623 /* MAC Control Configuration Register */
8503859Sml29623 #define	MAC_CTRL_CFG_SEND_PAUSE_EN	0x00000001 /* send pause flow ctrl */
8513859Sml29623 #define	MAC_CTRL_CFG_RECV_PAUSE_EN	0x00000002 /* receive pause flow ctrl */
8523859Sml29623 #define	MAC_CTRL_CFG_PASS_CTRL		0x00000004 /* accept MAC ctrl pkts */
8533859Sml29623 
8543859Sml29623 /* MAC XIF Configuration Register */
8553859Sml29623 #define	MAC_XIF_TX_OUTPUT_EN		0x00000001 /* enable Tx output driver */
8563859Sml29623 #define	MAC_XIF_MII_INT_LOOPBACK	0x00000002 /* loopback GMII xmit data */
8573859Sml29623 #define	MAC_XIF_GMII_MODE		0x00000008 /* operates with GMII clks */
8583859Sml29623 #define	MAC_XIF_LINK_LED		0x00000020 /* LINKLED# active (low) */
8593859Sml29623 #define	MAC_XIF_LED_POLARITY		0x00000040 /* LED polarity */
8603859Sml29623 #define	MAC_XIF_SEL_CLK_25MHZ		0x00000080 /* Select 10/100Mbps */
8613859Sml29623 
8623859Sml29623 /* MAC IPG Registers */
8633859Sml29623 #define	BMAC_MIN_FRAME_MASK		0x3FF	   /* 10-bit reg */
8643859Sml29623 
8653859Sml29623 /* MAC Max Frame Size Register */
8663859Sml29623 #define	BMAC_MAX_BURST_MASK    		0x3FFF0000 /* max burst size [30:16] */
8673859Sml29623 #define	BMAC_MAX_BURST_SHIFT   		16
8683859Sml29623 #define	BMAC_MAX_FRAME_MASK    		0x00007FFF /* max frame size [14:0] */
8693859Sml29623 #define	BMAC_MAX_FRAME_SHIFT   		0
8703859Sml29623 
8713859Sml29623 /* MAC Preamble size register */
8723859Sml29623 #define	BMAC_PA_SIZE_MASK		0x000003FF
8733859Sml29623 	/* # of preable bytes TxMAC sends at the beginning of each frame */
8743859Sml29623 
8753859Sml29623 /*
8763859Sml29623  * mac address registers:
8773859Sml29623  *	register	contains			comparison
8783859Sml29623  *	--------	--------			----------
8793859Sml29623  *	0		16 MSB of primary MAC addr	[47:32] of DA field
8803859Sml29623  *	1		16 middle bits ""		[31:16] of DA field
8813859Sml29623  *	2		16 LSB ""			[15:0] of DA field
8823859Sml29623  *	3*x		16MSB of alt MAC addr 1-7	[47:32] of DA field
8833859Sml29623  *	4*x		16 middle bits ""		[31:16]
8843859Sml29623  *	5*x		16 LSB ""			[15:0]
8853859Sml29623  *	42		16 MSB of MAC CTRL addr		[47:32] of DA.
8863859Sml29623  *	43		16 middle bits ""		[31:16]
8873859Sml29623  *	44		16 LSB ""			[15:0]
8883859Sml29623  *	MAC CTRL addr must be the reserved multicast addr for MAC CTRL frames.
8893859Sml29623  *	if there is a match, MAC will set the bit for alternative address
8903859Sml29623  *	filter pass [15]
8913859Sml29623  *
8923859Sml29623  *	here is the map of registers given MAC address notation: a:b:c:d:e:f
8933859Sml29623  *			ab		cd		ef
8943859Sml29623  *	primary addr	reg 2		reg 1		reg 0
8953859Sml29623  *	alt addr 1	reg 5		reg 4		reg 3
8963859Sml29623  *	alt addr x	reg 5*x		reg 4*x		reg 3*x
8973859Sml29623  *	|		|		|		|
8983859Sml29623  *	|		|		|		|
8993859Sml29623  *	alt addr 7	reg 23		reg 22		reg 21
9003859Sml29623  *	ctrl addr	reg 44		reg 43		reg 42
9013859Sml29623  */
9023859Sml29623 
9033859Sml29623 #define	BMAC_ALT_ADDR_BASE		0x118
9043859Sml29623 #define	BMAC_MAX_ALT_ADDR_ENTRY		7	   /* 7 alternate MAC addr */
9053859Sml29623 #define	BMAC_MAX_ADDR_ENTRY		(BMAC_MAX_ALT_ADDR_ENTRY + 1)
9063859Sml29623 
9073859Sml29623 /* hash table registers */
9083859Sml29623 #define	MAC_MAX_HASH_ENTRY		16
9093859Sml29623 
9103859Sml29623 /* 27-bit register has the current state for key state machines in the MAC */
9113859Sml29623 #define	MAC_SM_RLM_MASK			0x07800000
9123859Sml29623 #define	MAC_SM_RLM_SHIFT		23
9133859Sml29623 #define	MAC_SM_RX_FC_MASK		0x00700000
9143859Sml29623 #define	MAC_SM_RX_FC_SHIFT		20
9153859Sml29623 #define	MAC_SM_TLM_MASK			0x000F0000
9163859Sml29623 #define	MAC_SM_TLM_SHIFT		16
9173859Sml29623 #define	MAC_SM_ENCAP_SM_MASK		0x0000F000
9183859Sml29623 #define	MAC_SM_ENCAP_SM_SHIFT		12
9193859Sml29623 #define	MAC_SM_TX_REQ_MASK		0x00000C00
9203859Sml29623 #define	MAC_SM_TX_REQ_SHIFT		10
9213859Sml29623 #define	MAC_SM_TX_FC_MASK		0x000003C0
9223859Sml29623 #define	MAC_SM_TX_FC_SHIFT		6
9233859Sml29623 #define	MAC_SM_FIFO_WRITE_SEL_MASK	0x00000038
9243859Sml29623 #define	MAC_SM_FIFO_WRITE_SEL_SHIFT	3
9253859Sml29623 #define	MAC_SM_TX_FIFO_EMPTY_MASK	0x00000007
9263859Sml29623 #define	MAC_SM_TX_FIFO_EMPTY_SHIFT	0
9273859Sml29623 
9283859Sml29623 #define	BMAC_ADDR0_CMPEN		0x00000001
9293859Sml29623 #define	BMAC_ADDRN_CMPEN(x)		(BMAC_ADDR0_CMP_EN << (x))
9303859Sml29623 
9313859Sml29623 /* MAC Host Info Table Registers */
9323859Sml29623 #define	BMAC_MAX_HOST_INFO_ENTRY	9 	/* 9 host entries */
9333859Sml29623 
9343859Sml29623 /*
9353859Sml29623  * ********************* XMAC registers *********************************
9363859Sml29623  */
9373859Sml29623 
9383859Sml29623 /* Reset Register */
9393859Sml29623 #define	XTXMAC_SOFT_RST			0x00000001 /* XTX MAC software reset */
9403859Sml29623 #define	XTXMAC_REG_RST			0x00000002 /* XTX MAC registers reset */
9413859Sml29623 #define	XRXMAC_SOFT_RST			0x00000001 /* XRX MAC software reset */
9423859Sml29623 #define	XRXMAC_REG_RST			0x00000002 /* XRX MAC registers reset */
9433859Sml29623 
9443859Sml29623 /* XTX MAC Status Register */
9453859Sml29623 #define	XMAC_TX_FRAME_XMIT		0x00000001 /* successful tx frame */
9463859Sml29623 #define	XMAC_TX_UNDERRUN		0x00000002 /* starvation in xmit */
9473859Sml29623 #define	XMAC_TX_MAX_PACKET_ERR		0x00000004 /* XTX frame exceeds max */
9483859Sml29623 #define	XMAC_TX_OVERFLOW		0x00000008 /* XTX byte cnt overflow */
9493859Sml29623 #define	XMAC_TX_FIFO_XFR_ERR		0x00000010 /* xtlm state mach error */
9503859Sml29623 #define	XMAC_TX_BYTE_CNT_EXP		0x00000400 /* XTX byte cnt overflow */
9513859Sml29623 #define	XMAC_TX_FRAME_CNT_EXP		0x00000800 /* XTX frame cnt overflow */
9523859Sml29623 
9533859Sml29623 /* XRX MAC Status Register */
9543859Sml29623 #define	XMAC_RX_FRAME_RCVD		0x00000001 /* successful rx frame */
9553859Sml29623 #define	XMAC_RX_OVERFLOW		0x00000002 /* RX FIFO overflow */
9563859Sml29623 #define	XMAC_RX_UNDERFLOW		0x00000004 /* RX FIFO underrun */
9573859Sml29623 #define	XMAC_RX_CRC_ERR_CNT_EXP		0x00000008 /* crc error cnt rollover */
9583859Sml29623 #define	XMAC_RX_LEN_ERR_CNT_EXP		0x00000010 /* length err cnt rollover */
9593859Sml29623 #define	XMAC_RX_VIOL_ERR_CNT_EXP	0x00000020 /* code vio err rollover */
9603859Sml29623 #define	XMAC_RX_OCT_CNT_EXP		0x00000040 /* XRX MAC byte rollover */
9613859Sml29623 #define	XMAC_RX_HST_CNT1_EXP		0x00000080 /* XRX MAC hist1 rollover */
9623859Sml29623 #define	XMAC_RX_HST_CNT2_EXP		0x00000100 /* XRX MAC hist2 rollover */
9633859Sml29623 #define	XMAC_RX_HST_CNT3_EXP		0x00000200 /* XRX MAC hist3 rollover */
9643859Sml29623 #define	XMAC_RX_HST_CNT4_EXP		0x00000400 /* XRX MAC hist4 rollover */
9653859Sml29623 #define	XMAC_RX_HST_CNT5_EXP		0x00000800 /* XRX MAC hist5 rollover */
9663859Sml29623 #define	XMAC_RX_HST_CNT6_EXP		0x00001000 /* XRX MAC hist6 rollover */
9673859Sml29623 #define	XMAC_RX_BCAST_CNT_EXP		0x00002000 /* XRX BC cnt rollover */
9683859Sml29623 #define	XMAC_RX_MCAST_CNT_EXP		0x00004000 /* XRX MC cnt rollover */
9693859Sml29623 #define	XMAC_RX_FRAG_CNT_EXP		0x00008000 /* fragment cnt rollover */
9703859Sml29623 #define	XMAC_RX_ALIGNERR_CNT_EXP	0x00010000 /* framealign err rollover */
9713859Sml29623 #define	XMAC_RX_LINK_FLT_CNT_EXP	0x00020000 /* link fault cnt rollover */
9723859Sml29623 #define	XMAC_RX_REMOTE_FLT_DET		0x00040000 /* Remote Fault detected */
9733859Sml29623 #define	XMAC_RX_LOCAL_FLT_DET		0x00080000 /* Local Fault detected */
9743859Sml29623 #define	XMAC_RX_HST_CNT7_EXP		0x00100000 /* XRX MAC hist7 rollover */
9753859Sml29623 
9763859Sml29623 
9773859Sml29623 #define	XMAC_CTRL_PAUSE_RCVD		0x00000001 /* successful pause frame */
9783859Sml29623 #define	XMAC_CTRL_PAUSE_STATE		0x00000002 /* notpause-->pause */
9793859Sml29623 #define	XMAC_CTRL_NOPAUSE_STATE		0x00000004 /* pause-->notpause */
9803859Sml29623 #define	XMAC_CTRL_PAUSE_TIME_MASK	0xFFFF0000 /* value of pause time */
9813859Sml29623 #define	XMAC_CTRL_PAUSE_TIME_SHIFT	16
9823859Sml29623 
9833859Sml29623 /* XMAC Configuration Register */
9843859Sml29623 #define	XMAC_CONFIG_TX_BIT_MASK		0x000000ff /* bits [7:0] */
9853859Sml29623 #define	XMAC_CONFIG_RX_BIT_MASK		0x001fff00 /* bits [20:8] */
9863859Sml29623 #define	XMAC_CONFIG_XIF_BIT_MASK	0xffe00000 /* bits [31:21] */
9873859Sml29623 
9883859Sml29623 /* XTX MAC config bits */
9893859Sml29623 #define	XMAC_TX_CFG_TX_ENABLE		0x00000001 /* enable XTX MAC */
9903859Sml29623 #define	XMAC_TX_CFG_STRETCH_MD		0x00000002 /* WAN application */
9913859Sml29623 #define	XMAC_TX_CFG_VAR_MIN_IPG_EN	0x00000004 /* Transmit pkts < minpsz */
9923859Sml29623 #define	XMAC_TX_CFG_ALWAYS_NO_CRC	0x00000008 /* No CRC generated */
9933859Sml29623 
9943859Sml29623 #define	XMAC_WARNING_MSG_ENABLE		0x00000080 /* Sim warning msg enable */
9953859Sml29623 
9963859Sml29623 /* XRX MAC config bits */
9973859Sml29623 #define	XMAC_RX_CFG_RX_ENABLE		0x00000100 /* enable XRX MAC */
9983859Sml29623 #define	XMAC_RX_CFG_PROMISC		0x00000200 /* promisc mode enable */
9993859Sml29623 #define	XMAC_RX_CFG_PROMISC_GROUP  	0x00000400 /* accept all MC frames */
10003859Sml29623 #define	XMAC_RX_CFG_ERR_CHK_DISABLE	0x00000800 /* do not set abort bit */
10013859Sml29623 #define	XMAC_RX_CFG_CRC_CHK_DISABLE	0x00001000 /* disable CRC logic */
10023859Sml29623 #define	XMAC_RX_CFG_RESERVED_MCAST	0x00002000 /* reserved MCaddr compare */
10033859Sml29623 #define	XMAC_RX_CFG_CD_VIO_CHK		0x00004000 /* rx code violation chk */
10043859Sml29623 #define	XMAC_RX_CFG_HASH_FILTER_EN	0x00008000 /* use hash table */
10053859Sml29623 #define	XMAC_RX_CFG_ADDR_FILTER_EN	0x00010000 /* use alt addr filter */
10063859Sml29623 #define	XMAC_RX_CFG_STRIP_CRC		0x00020000 /* strip last 4bytes (CRC) */
10073859Sml29623 #define	XMAC_RX_MAC2IPP_PKT_CNT_EN	0x00040000 /* histo_cntr7 cnt mode */
10083859Sml29623 #define	XMAC_RX_CFG_RX_PAUSE_EN		0x00080000 /* receive pause flow ctrl */
10093859Sml29623 #define	XMAC_RX_CFG_PASS_FLOW_CTRL	0x00100000 /* accept MAC ctrl pkts */
10103859Sml29623 
10113859Sml29623 
10123859Sml29623 /* MAC transceiver (XIF) configuration registers */
10133859Sml29623 
10143859Sml29623 #define	XMAC_XIF_FORCE_LED_ON		0x00200000 /* Force Link LED on */
10153859Sml29623 #define	XMAC_XIF_LED_POLARITY		0x00400000 /* LED polarity */
10163859Sml29623 #define	XMAC_XIF_SEL_POR_CLK_SRC	0x00800000 /* Select POR clk src */
10173859Sml29623 #define	XMAC_XIF_TX_OUTPUT_EN		0x01000000 /* enable MII/GMII modes */
10183859Sml29623 #define	XMAC_XIF_LOOPBACK		0x02000000 /* loopback xmac xgmii tx */
10193859Sml29623 #define	XMAC_XIF_LFS_DISABLE		0x04000000 /* disable link fault sig */
10203859Sml29623 #define	XMAC_XIF_MII_MODE_MASK		0x18000000 /* MII/GMII/XGMII mode */
10213859Sml29623 #define	XMAC_XIF_MII_MODE_SHIFT		27
10223859Sml29623 #define	XMAC_XIF_XGMII_MODE		0x00
10233859Sml29623 #define	XMAC_XIF_GMII_MODE		0x01
10243859Sml29623 #define	XMAC_XIF_MII_MODE		0x02
10253859Sml29623 #define	XMAC_XIF_ILLEGAL_MODE		0x03
10263859Sml29623 #define	XMAC_XIF_XPCS_BYPASS		0x20000000 /* use external xpcs */
10273859Sml29623 #define	XMAC_XIF_1G_PCS_BYPASS		0x40000000 /* use external pcs */
10283859Sml29623 #define	XMAC_XIF_SEL_CLK_25MHZ		0x80000000 /* 25Mhz clk for 100mbps */
10293859Sml29623 
10303859Sml29623 /* IPG register */
10313859Sml29623 #define	XMAC_IPG_VALUE_MASK		0x00000007 /* IPG in XGMII mode */
10323859Sml29623 #define	XMAC_IPG_VALUE_SHIFT		0
10333859Sml29623 #define	XMAC_IPG_VALUE1_MASK		0x0000ff00 /* IPG in GMII/MII mode */
10343859Sml29623 #define	XMAC_IPG_VALUE1_SHIFT		8
10353859Sml29623 #define	XMAC_IPG_STRETCH_RATIO_MASK	0x001f0000
10363859Sml29623 #define	XMAC_IPG_STRETCH_RATIO_SHIFT	16
10373859Sml29623 #define	XMAC_IPG_STRETCH_CONST_MASK	0x00e00000
10383859Sml29623 #define	XMAC_IPG_STRETCH_CONST_SHIFT	21
10393859Sml29623 
10403859Sml29623 #define	IPG_12_15_BYTE			3
10413859Sml29623 #define	IPG_16_19_BYTE			4
10423859Sml29623 #define	IPG_20_23_BYTE			5
10433859Sml29623 #define	IPG1_12_BYTES			10
10443859Sml29623 #define	IPG1_13_BYTES			11
10453859Sml29623 #define	IPG1_14_BYTES			12
10463859Sml29623 #define	IPG1_15_BYTES			13
10473859Sml29623 #define	IPG1_16_BYTES			14
10483859Sml29623 
10493859Sml29623 
10503859Sml29623 #define	XMAC_MIN_TX_FRM_SZ_MASK		0x3ff	   /* Min tx frame size */
10513859Sml29623 #define	XMAC_MIN_TX_FRM_SZ_SHIFT	0
10523859Sml29623 #define	XMAC_SLOT_TIME_MASK		0x0003fc00 /* slot time */
10533859Sml29623 #define	XMAC_SLOT_TIME_SHIFT		10
10543859Sml29623 #define	XMAC_MIN_RX_FRM_SZ_MASK		0x3ff00000 /* Min rx frame size */
10553859Sml29623 #define	XMAC_MIN_RX_FRM_SZ_SHIFT	20
10563859Sml29623 #define	XMAC_MAX_FRM_SZ_MASK		0x00003fff /* max tx frame size */
10573859Sml29623 
10583859Sml29623 /* State Machine Register */
10593859Sml29623 #define	XMAC_SM_TX_LNK_MGMT_MASK	0x00000007
10603859Sml29623 #define	XMAC_SM_TX_LNK_MGMT_SHIFT	0
10613859Sml29623 #define	XMAC_SM_SOP_DETECT		0x00000008
10623859Sml29623 #define	XMAC_SM_LNK_FLT_SIG_MASK	0x00000030
10633859Sml29623 #define	XMAC_SM_LNK_FLT_SIG_SHIFT	4
10643859Sml29623 #define	XMAC_SM_MII_GMII_MD_RX_LNK	0x00000040
10653859Sml29623 #define	XMAC_SM_XGMII_MD_RX_LNK		0x00000080
10663859Sml29623 #define	XMAC_SM_XGMII_ONLY_VAL_SIG	0x00000100
10673859Sml29623 #define	XMAC_SM_ALT_ADR_N_HSH_FN_SIG	0x00000200
10683859Sml29623 #define	XMAC_SM_RXMAC_IPP_STAT_MASK	0x00001c00
10693859Sml29623 #define	XMAC_SM_RXMAC_IPP_STAT_SHIFT	10
10703859Sml29623 #define	XMAC_SM_RXFIFO_WPTR_CLK_MASK	0x007c0000
10713859Sml29623 #define	XMAC_SM_RXFIFO_WPTR_CLK_SHIFT	18
10723859Sml29623 #define	XMAC_SM_RXFIFO_RPTR_CLK_MASK	0x0F800000
10733859Sml29623 #define	XMAC_SM_RXFIFO_RPTR_CLK_SHIFT	23
10743859Sml29623 #define	XMAC_SM_TXFIFO_FULL_CLK		0x10000000
10753859Sml29623 #define	XMAC_SM_TXFIFO_EMPTY_CLK	0x20000000
10763859Sml29623 #define	XMAC_SM_RXFIFO_FULL_CLK		0x40000000
10773859Sml29623 #define	XMAC_SM_RXFIFO_EMPTY_CLK	0x80000000
10783859Sml29623 
10793859Sml29623 /* Internal Signals 1 Register */
10803859Sml29623 #define	XMAC_IS1_OPP_TXMAC_STAT_MASK	0x0000000F
10813859Sml29623 #define	XMAC_IS1_OPP_TXMAC_STAT_SHIFT	0
10823859Sml29623 #define	XMAC_IS1_OPP_TXMAC_ABORT	0x00000010
10833859Sml29623 #define	XMAC_IS1_OPP_TXMAC_TAG 		0x00000020
10843859Sml29623 #define	XMAC_IS1_OPP_TXMAC_ACK		0x00000040
10853859Sml29623 #define	XMAC_IS1_TXMAC_OPP_REQ		0x00000080
10863859Sml29623 #define	XMAC_IS1_RXMAC_IPP_STAT_MASK	0x0FFFFF00
10873859Sml29623 #define	XMAC_IS1_RXMAC_IPP_STAT_SHIFT	8
10883859Sml29623 #define	XMAC_IS1_RXMAC_IPP_CTRL		0x10000000
10893859Sml29623 #define	XMAC_IS1_RXMAC_IPP_TAG		0x20000000
10903859Sml29623 #define	XMAC_IS1_IPP_RXMAC_REQ		0x40000000
10913859Sml29623 #define	XMAC_IS1_RXMAC_IPP_ACK		0x80000000
10923859Sml29623 
10933859Sml29623 /* Internal Signals 2 Register */
10943859Sml29623 #define	XMAC_IS2_TX_HB_TIMER_MASK	0x0000000F
10953859Sml29623 #define	XMAC_IS2_TX_HB_TIMER_SHIFT	0
10963859Sml29623 #define	XMAC_IS2_RX_HB_TIMER_MASK	0x000000F0
10973859Sml29623 #define	XMAC_IS2_RX_HB_TIMER_SHIFT	4
10983859Sml29623 #define	XMAC_IS2_XPCS_RXC_MASK		0x0000FF00
10993859Sml29623 #define	XMAC_IS2_XPCS_RXC_SHIFT		8
11003859Sml29623 #define	XMAC_IS2_XPCS_TXC_MASK		0x00FF0000
11013859Sml29623 #define	XMAC_IS2_XPCS_TXC_SHIFT		16
11023859Sml29623 #define	XMAC_IS2_LOCAL_FLT_OC_SYNC	0x01000000
11033859Sml29623 #define	XMAC_IS2_RMT_FLT_OC_SYNC	0x02000000
11043859Sml29623 
11053859Sml29623 /* Register size masking */
11063859Sml29623 
11073859Sml29623 #define	XTXMAC_FRM_CNT_MASK		0xFFFFFFFF
11083859Sml29623 #define	XTXMAC_BYTE_CNT_MASK		0xFFFFFFFF
11093859Sml29623 #define	XRXMAC_CRC_ER_CNT_MASK		0x000000FF
11103859Sml29623 #define	XRXMAC_MPSZER_CNT_MASK		0x000000FF
11113859Sml29623 #define	XRXMAC_CD_VIO_CNT_MASK		0x000000FF
11123859Sml29623 #define	XRXMAC_BT_CNT_MASK		0xFFFFFFFF
11133859Sml29623 #define	XRXMAC_HIST_CNT1_MASK		0x001FFFFF
11143859Sml29623 #define	XRXMAC_HIST_CNT2_MASK		0x001FFFFF
11153859Sml29623 #define	XRXMAC_HIST_CNT3_MASK		0x000FFFFF
11163859Sml29623 #define	XRXMAC_HIST_CNT4_MASK		0x0007FFFF
11173859Sml29623 #define	XRXMAC_HIST_CNT5_MASK		0x0003FFFF
11183859Sml29623 #define	XRXMAC_HIST_CNT6_MASK		0x0001FFFF
11196075Ssbehera #define	XRXMAC_HIST_CNT7_MASK		0x07FFFFFF
11203859Sml29623 #define	XRXMAC_BC_FRM_CNT_MASK		0x001FFFFF
11213859Sml29623 #define	XRXMAC_MC_FRM_CNT_MASK		0x001FFFFF
11223859Sml29623 #define	XRXMAC_FRAG_CNT_MASK		0x001FFFFF
11233859Sml29623 #define	XRXMAC_AL_ER_CNT_MASK		0x000000FF
11243859Sml29623 #define	XMAC_LINK_FLT_CNT_MASK		0x000000FF
11253859Sml29623 #define	BTXMAC_FRM_CNT_MASK		0x001FFFFF
11263859Sml29623 #define	BTXMAC_BYTE_CNT_MASK		0x07FFFFFF
11273859Sml29623 #define	RXMAC_FRM_CNT_MASK		0x0000FFFF
11283859Sml29623 #define	BRXMAC_BYTE_CNT_MASK		0x07FFFFFF
11293859Sml29623 #define	BMAC_AL_ER_CNT_MASK		0x0000FFFF
11303859Sml29623 #define	MAC_LEN_ER_CNT_MASK		0x0000FFFF
11313859Sml29623 #define	BMAC_CRC_ER_CNT_MASK		0x0000FFFF
11323859Sml29623 #define	BMAC_CD_VIO_CNT_MASK		0x0000FFFF
11333859Sml29623 #define	XMAC_XPCS_DESKEW_ERR_CNT_MASK	0x000000FF
11343859Sml29623 #define	XMAC_XPCS_SYM_ERR_CNT_L0_MASK	0x0000FFFF
11353859Sml29623 #define	XMAC_XPCS_SYM_ERR_CNT_L1_MASK	0xFFFF0000
11363859Sml29623 #define	XMAC_XPCS_SYM_ERR_CNT_L1_SHIFT	16
11373859Sml29623 #define	XMAC_XPCS_SYM_ERR_CNT_L2_MASK	0x0000FFFF
11383859Sml29623 #define	XMAC_XPCS_SYM_ERR_CNT_L3_MASK	0xFFFF0000
11393859Sml29623 #define	XMAC_XPCS_SYM_ERR_CNT_L3_SHIFT	16
11403859Sml29623 
11413859Sml29623 /* Alternate MAC address registers */
11423859Sml29623 #define	XMAC_MAX_ALT_ADDR_ENTRY		16	   /* 16 alternate MAC addrs */
11433859Sml29623 #define	XMAC_MAX_ADDR_ENTRY		(XMAC_MAX_ALT_ADDR_ENTRY + 1)
11443859Sml29623 
11453859Sml29623 /* Max / Min parameters for Neptune MAC */
11463859Sml29623 
11473859Sml29623 #define	MAC_MAX_ALT_ADDR_ENTRY		XMAC_MAX_ALT_ADDR_ENTRY
11483859Sml29623 #define	MAC_MAX_HOST_INFO_ENTRY		XMAC_MAX_HOST_INFO_ENTRY
11493859Sml29623 
11503859Sml29623 /* HostInfo entry for the unique MAC address */
11513859Sml29623 #define	XMAC_UNIQUE_HOST_INFO_ENTRY	17
11523859Sml29623 #define	BMAC_UNIQUE_HOST_INFO_ENTRY	0
11533859Sml29623 
11543859Sml29623 /* HostInfo entry for the multicat address */
11553859Sml29623 #define	XMAC_MULTI_HOST_INFO_ENTRY	16
11563859Sml29623 #define	BMAC_MULTI_HOST_INFO_ENTRY	8
11573859Sml29623 
11583859Sml29623 /* XMAC Host Info Register */
11593859Sml29623 typedef union hostinfo {
11603859Sml29623 
11613859Sml29623 	uint64_t value;
11623859Sml29623 
11633859Sml29623 	struct {
11643859Sml29623 #if defined(_BIG_ENDIAN)
11653859Sml29623 		uint32_t msw;	/* Most significant word */
11663859Sml29623 		uint32_t lsw;	/* Least significant word */
11673859Sml29623 #elif defined(_LITTLE_ENDIAN)
11683859Sml29623 		uint32_t lsw;	/* Least significant word */
11693859Sml29623 		uint32_t msw;	/* Most significant word */
11703859Sml29623 #endif
11713859Sml29623 	} val;
11723859Sml29623 	struct {
11733859Sml29623 #if defined(_BIG_ENDIAN)
11743859Sml29623 		uint32_t	w1;
11753859Sml29623 #endif
11763859Sml29623 		struct {
11773859Sml29623 #if defined(_BIT_FIELDS_HTOL)
11783859Sml29623 		uint32_t reserved2	: 23;
11793859Sml29623 		uint32_t mac_pref	: 1;
11803859Sml29623 		uint32_t reserved1	: 5;
11813859Sml29623 		uint32_t rdc_tbl_num	: 3;
11823859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
11833859Sml29623 		uint32_t rdc_tbl_num	: 3;
11843859Sml29623 		uint32_t reserved1	: 5;
11853859Sml29623 		uint32_t mac_pref	: 1;
11863859Sml29623 		uint32_t reserved2	: 23;
11873859Sml29623 #endif
11883859Sml29623 		} w0;
11893859Sml29623 
11903859Sml29623 #if defined(_LITTLE_ENDIAN)
11913859Sml29623 		uint32_t	w1;
11923859Sml29623 #endif
11933859Sml29623 	} bits;
11943859Sml29623 
11953859Sml29623 } hostinfo_t;
11963859Sml29623 
11973859Sml29623 typedef union hostinfo *hostinfo_pt;
11983859Sml29623 
11993859Sml29623 #define	XMAC_HI_RDC_TBL_NUM_MASK	0x00000007
12003859Sml29623 #define	XMAC_HI_MAC_PREF		0x00000100
12013859Sml29623 
12023859Sml29623 #define	XMAC_MAX_HOST_INFO_ENTRY	20	   /* 20 host entries */
12033859Sml29623 
12043859Sml29623 /*
12053859Sml29623  * ******************** MIF registers *********************************
12063859Sml29623  */
12073859Sml29623 
12083859Sml29623 /*
12093859Sml29623  * 32-bit register serves as an instruction register when the MIF is
12103859Sml29623  * programmed in frame mode. load this register w/ a valid instruction
12113859Sml29623  * (as per IEEE 802.3u MII spec). poll this register to check for instruction
12123859Sml29623  * execution completion. during a read operation, this register will also
12133859Sml29623  * contain the 16-bit data returned by the transceiver. unless specified
12143859Sml29623  * otherwise, fields are considered "don't care" when polling for
12153859Sml29623  * completion.
12163859Sml29623  */
12173859Sml29623 
12183859Sml29623 #define	MIF_FRAME_START_MASK		0xC0000000 /* start of frame mask */
12193859Sml29623 #define	MIF_FRAME_ST_22			0x40000000 /* STart of frame, Cl 22 */
12203859Sml29623 #define	MIF_FRAME_ST_45			0x00000000 /* STart of frame, Cl 45 */
12213859Sml29623 #define	MIF_FRAME_OPCODE_MASK		0x30000000 /* opcode */
12223859Sml29623 #define	MIF_FRAME_OP_READ_22		0x20000000 /* read OPcode, Cl 22 */
12233859Sml29623 #define	MIF_FRAME_OP_WRITE_22		0x10000000 /* write OPcode, Cl 22 */
12243859Sml29623 #define	MIF_FRAME_OP_ADDR_45		0x00000000 /* addr of reg to access */
12253859Sml29623 #define	MIF_FRAME_OP_READ_45		0x30000000 /* read OPcode, Cl 45 */
12263859Sml29623 #define	MIF_FRAME_OP_WRITE_45		0x10000000 /* write OPcode, Cl 45 */
12273859Sml29623 #define	MIF_FRAME_OP_P_R_I_A_45		0x10000000 /* post-read-inc-addr */
12283859Sml29623 #define	MIF_FRAME_PHY_ADDR_MASK		0x0F800000 /* phy address mask */
12293859Sml29623 #define	MIF_FRAME_PHY_ADDR_SHIFT	23
12303859Sml29623 #define	MIF_FRAME_REG_ADDR_MASK		0x007C0000 /* reg addr in Cl 22 */
12313859Sml29623 						/* dev addr in Cl 45 */
12323859Sml29623 #define	MIF_FRAME_REG_ADDR_SHIFT	18
12333859Sml29623 #define	MIF_FRAME_TURN_AROUND_MSB	0x00020000 /* turn around, MSB. */
12343859Sml29623 #define	MIF_FRAME_TURN_AROUND_LSB	0x00010000 /* turn around, LSB. */
12353859Sml29623 #define	MIF_FRAME_DATA_MASK		0x0000FFFF /* instruction payload */
12363859Sml29623 
12373859Sml29623 /* Clause 45 frame field values */
12383859Sml29623 #define	FRAME45_ST		0
12393859Sml29623 #define	FRAME45_OP_ADDR		0
12403859Sml29623 #define	FRAME45_OP_WRITE	1
12413859Sml29623 #define	FRAME45_OP_READ_INC	2
12423859Sml29623 #define	FRAME45_OP_READ		3
12433859Sml29623 
12443859Sml29623 typedef union _mif_frame_t {
12453859Sml29623 
12463859Sml29623 	uint64_t value;
12473859Sml29623 
12483859Sml29623 	struct {
12493859Sml29623 #if defined(_BIG_ENDIAN)
12503859Sml29623 		uint32_t msw;	/* Most significant word */
12513859Sml29623 		uint32_t lsw;	/* Least significant word */
12523859Sml29623 #elif defined(_LITTLE_ENDIAN)
12533859Sml29623 		uint32_t lsw;	/* Least significant word */
12543859Sml29623 		uint32_t msw;	/* Most significant word */
12553859Sml29623 #endif
12563859Sml29623 	} val;
12573859Sml29623 	struct {
12583859Sml29623 #if defined(_BIG_ENDIAN)
12593859Sml29623 		uint32_t	w1;
12603859Sml29623 #endif
12613859Sml29623 		struct {
12623859Sml29623 #if defined(_BIT_FIELDS_HTOL)
12633859Sml29623 		uint32_t st		: 2;
12643859Sml29623 		uint32_t op		: 2;
12653859Sml29623 		uint32_t phyad		: 5;
12663859Sml29623 		uint32_t regad		: 5;
12673859Sml29623 		uint32_t ta_msb		: 1;
12683859Sml29623 		uint32_t ta_lsb		: 1;
12693859Sml29623 		uint32_t data		: 16;
12703859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
12713859Sml29623 		uint32_t data		: 16;
12723859Sml29623 		uint32_t ta_lsb		: 1;
12733859Sml29623 		uint32_t ta_msb		: 1;
12743859Sml29623 		uint32_t regad		: 5;
12753859Sml29623 		uint32_t phyad		: 5;
12763859Sml29623 		uint32_t op		: 2;
12773859Sml29623 		uint32_t st		: 2;
12783859Sml29623 #endif
12793859Sml29623 		} w0;
12803859Sml29623 
12813859Sml29623 #if defined(_LITTLE_ENDIAN)
12823859Sml29623 		uint32_t	w1;
12833859Sml29623 #endif
12843859Sml29623 	} bits;
12853859Sml29623 } mif_frame_t;
12863859Sml29623 
12873859Sml29623 #define	MIF_CFG_POLL_EN			0x00000008 /* enable polling */
12883859Sml29623 #define	MIF_CFG_BB_MODE			0x00000010 /* bit-bang mode */
12893859Sml29623 #define	MIF_CFG_POLL_REG_MASK		0x000003E0 /* reg addr to be polled */
12903859Sml29623 #define	MIF_CFG_POLL_REG_SHIFT		5
12913859Sml29623 #define	MIF_CFG_POLL_PHY_MASK		0x00007C00 /* XCVR addr to be polled */
12923859Sml29623 #define	MIF_CFG_POLL_PHY_SHIFT		10
12933859Sml29623 #define	MIF_CFG_INDIRECT_MODE		0x0000800
12943859Sml29623 					/* used to decide if Cl 22 */
12953859Sml29623 					/* or Cl 45 frame is */
12963859Sml29623 					/* constructed. */
12973859Sml29623 					/* 1 = Clause 45,ST = '00' */
12983859Sml29623 					/* 0 = Clause 22,ST = '01' */
12993859Sml29623 #define	MIF_CFG_ATCE_GE_EN	0x00010000 /* Enable ATCA gigabit mode */
13003859Sml29623 
13013859Sml29623 typedef union _mif_cfg_t {
13023859Sml29623 
13033859Sml29623 	uint64_t value;
13043859Sml29623 
13053859Sml29623 	struct {
13063859Sml29623 #if defined(_BIG_ENDIAN)
13073859Sml29623 		uint32_t msw;	/* Most significant word */
13083859Sml29623 		uint32_t lsw;	/* Least significant word */
13093859Sml29623 
13103859Sml29623 #elif defined(_LITTLE_ENDIAN)
13113859Sml29623 		uint32_t lsw;	/* Least significant word */
13123859Sml29623 		uint32_t msw;	/* Most significant word */
13133859Sml29623 #endif
13143859Sml29623 	} val;
13153859Sml29623 	struct {
13163859Sml29623 #if defined(_BIG_ENDIAN)
13173859Sml29623 		uint32_t	w1;
13183859Sml29623 #endif
13193859Sml29623 		struct {
13203859Sml29623 #if defined(_BIT_FIELDS_HTOL)
13213859Sml29623 		uint32_t res2		: 15;
13223859Sml29623 		uint32_t atca_ge	: 1;
13233859Sml29623 		uint32_t indirect_md	: 1;
13243859Sml29623 		uint32_t phy_addr	: 5;
13253859Sml29623 		uint32_t reg_addr	: 5;
13263859Sml29623 		uint32_t bb_mode	: 1;
13273859Sml29623 		uint32_t poll_en	: 1;
13283859Sml29623 		uint32_t res1		: 2;
13293859Sml29623 		uint32_t res		: 1;
13303859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
13313859Sml29623 		uint32_t res		: 1;
13323859Sml29623 		uint32_t res1		: 2;
13333859Sml29623 		uint32_t poll_en	: 1;
13343859Sml29623 		uint32_t bb_mode	: 1;
13353859Sml29623 		uint32_t reg_addr	: 5;
13363859Sml29623 		uint32_t phy_addr	: 5;
13373859Sml29623 		uint32_t indirect_md	: 1;
13383859Sml29623 		uint32_t atca_ge	: 1;
13393859Sml29623 		uint32_t res2		: 15;
13403859Sml29623 #endif
13413859Sml29623 		} w0;
13423859Sml29623 
13433859Sml29623 #if defined(_LITTLE_ENDIAN)
13443859Sml29623 		uint32_t	w1;
13453859Sml29623 #endif
13463859Sml29623 	} bits;
13473859Sml29623 
13483859Sml29623 } mif_cfg_t;
13493859Sml29623 
13503859Sml29623 #define	MIF_POLL_STATUS_DATA_MASK	0xffff0000
13513859Sml29623 #define	MIF_POLL_STATUS_STAT_MASK	0x0000ffff
13523859Sml29623 
13533859Sml29623 typedef union _mif_poll_stat_t {
13543859Sml29623 	uint64_t value;
13553859Sml29623 
13563859Sml29623 	struct {
13573859Sml29623 #if defined(_BIG_ENDIAN)
13583859Sml29623 		uint32_t msw;	/* Most significant word */
13593859Sml29623 		uint32_t lsw;	/* Least significant word */
13603859Sml29623 #elif defined(_LITTLE_ENDIAN)
13613859Sml29623 		uint32_t lsw;	/* Least significant word */
13623859Sml29623 		uint32_t msw;	/* Most significant word */
13633859Sml29623 #endif
13643859Sml29623 	} val;
13653859Sml29623 	struct {
13663859Sml29623 #if defined(_BIG_ENDIAN)
13673859Sml29623 		uint32_t	w1;
13683859Sml29623 #endif
13693859Sml29623 		struct {
13703859Sml29623 #if defined(_BIT_FIELDS_HTOL)
13713859Sml29623 		uint16_t data;
13723859Sml29623 		uint16_t status;
13733859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
13743859Sml29623 		uint16_t status;
13753859Sml29623 		uint16_t data;
13763859Sml29623 #endif
13773859Sml29623 		} w0;
13783859Sml29623 
13793859Sml29623 #if defined(_LITTLE_ENDIAN)
13803859Sml29623 		uint32_t	w1;
13813859Sml29623 #endif
13823859Sml29623 	} bits;
13833859Sml29623 } mif_poll_stat_t;
13843859Sml29623 
13853859Sml29623 
13863859Sml29623 #define	MIF_POLL_MASK_MASK	0x0000ffff
13873859Sml29623 
13883859Sml29623 typedef union _mif_poll_mask_t {
13893859Sml29623 	uint64_t value;
13903859Sml29623 
13913859Sml29623 	struct {
13923859Sml29623 #if defined(_BIG_ENDIAN)
13933859Sml29623 		uint32_t msw;	/* Most significant word */
13943859Sml29623 		uint32_t lsw;	/* Least significant word */
13953859Sml29623 #elif defined(_LITTLE_ENDIAN)
13963859Sml29623 		uint32_t lsw;	/* Least significant word */
13973859Sml29623 		uint32_t msw;	/* Most significant word */
13983859Sml29623 #endif
13993859Sml29623 	} val;
14003859Sml29623 	struct {
14013859Sml29623 #if defined(_BIG_ENDIAN)
14023859Sml29623 		uint32_t	w1;
14033859Sml29623 #endif
14043859Sml29623 		struct {
14053859Sml29623 #if defined(_BIT_FIELDS_HTOL)
14063859Sml29623 		uint16_t rsvd;
14073859Sml29623 		uint16_t mask;
14083859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
14093859Sml29623 		uint16_t mask;
14103859Sml29623 		uint16_t rsvd;
14113859Sml29623 #endif
14123859Sml29623 		} w0;
14133859Sml29623 
14143859Sml29623 #if defined(_LITTLE_ENDIAN)
14153859Sml29623 		uint32_t	w1;
14163859Sml29623 #endif
14173859Sml29623 	} bits;
14183859Sml29623 } mif_poll_mask_t;
14193859Sml29623 
14203859Sml29623 #define	MIF_STATUS_INIT_DONE_MASK	0x00000001
14213859Sml29623 #define	MIF_STATUS_XGE_ERR0_MASK	0x00000002
14223859Sml29623 #define	MIF_STATUS_XGE_ERR1_MASK	0x00000004
14233859Sml29623 #define	MIF_STATUS_PEU_ERR_MASK		0x00000008
14243859Sml29623 #define	MIF_STATUS_EXT_PHY_INTR0_MASK	0x00000010
14253859Sml29623 #define	MIF_STATUS_EXT_PHY_INTR1_MASK	0x00000020
14263859Sml29623 
14273859Sml29623 typedef union _mif_stat_t {
14283859Sml29623 	uint64_t value;
14293859Sml29623 
14303859Sml29623 	struct {
14313859Sml29623 #if defined(_BIG_ENDIAN)
14323859Sml29623 		uint32_t msw;	/* Most significant word */
14333859Sml29623 		uint32_t lsw;	/* Least significant word */
14343859Sml29623 #elif defined(_LITTLE_ENDIAN)
14353859Sml29623 		uint32_t lsw;	/* Least significant word */
14363859Sml29623 		uint32_t msw;	/* Most significant word */
14373859Sml29623 #endif
14383859Sml29623 	} val;
14393859Sml29623 	struct {
14403859Sml29623 #if defined(_BIG_ENDIAN)
14413859Sml29623 		uint32_t	w1;
14423859Sml29623 #endif
14433859Sml29623 		struct {
14443859Sml29623 #if defined(_BIT_FIELDS_HTOL)
14453859Sml29623 		uint32_t rsvd:26;
14463859Sml29623 		uint32_t ext_phy_intr_flag1:1;
14473859Sml29623 		uint32_t ext_phy_intr_flag0:1;
14483859Sml29623 		uint32_t peu_err:1;
14493859Sml29623 		uint32_t xge_err1:1;
14503859Sml29623 		uint32_t xge_err0:1;
14513859Sml29623 		uint32_t mif_init_done_stat:1;
14523859Sml29623 
14533859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
14543859Sml29623 		uint32_t mif_init_done_stat:1;
14553859Sml29623 		uint32_t xge_err0:1;
14563859Sml29623 		uint32_t xge_err1:1;
14573859Sml29623 		uint32_t ext_phy_intr_flag0:1;
14583859Sml29623 		uint32_t ext_phy_intr_flag1:1;
14593859Sml29623 		uint32_t rsvd:26;
14603859Sml29623 #endif
14613859Sml29623 		} w0;
14623859Sml29623 
14633859Sml29623 #if defined(_LITTLE_ENDIAN)
14643859Sml29623 		uint32_t	w1;
14653859Sml29623 #endif
14663859Sml29623 	} bits;
14673859Sml29623 } mif_stat_t;
14683859Sml29623 
14693859Sml29623 /* MIF State Machine Register */
14703859Sml29623 
14713859Sml29623 #define	MIF_SM_EXECUTION_MASK		0x0000003f /* execution state */
14723859Sml29623 #define	MIF_SM_EXECUTION_SHIFT		0
14733859Sml29623 #define	MIF_SM_CONTROL_MASK		0x000001c0 /* control state */
14743859Sml29623 #define	MIF_SM_CONTROL_MASK_SHIFT	6
14753859Sml29623 #define	MIF_SM_MDI			0x00000200
14763859Sml29623 #define	MIF_SM_MDO			0x00000400
14773859Sml29623 #define	MIF_SM_MDO_EN			0x00000800
14783859Sml29623 #define	MIF_SM_MDC			0x00001000
14793859Sml29623 #define	MIF_SM_MDI_0			0x00002000
14803859Sml29623 #define	MIF_SM_MDI_1			0x00004000
14813859Sml29623 #define	MIF_SM_MDI_2			0x00008000
14823859Sml29623 #define	MIF_SM_PORT_ADDR_MASK		0x001f0000
14833859Sml29623 #define	MIF_SM_PORT_ADDR_SHIFT		16
14843859Sml29623 #define	MIF_SM_INT_SIG_MASK		0xffe00000
14853859Sml29623 #define	MIF_SM_INT_SIG_SHIFT		21
14863859Sml29623 
14873859Sml29623 
14883859Sml29623 /*
14893859Sml29623  * ******************** PCS registers *********************************
14903859Sml29623  */
14913859Sml29623 
14923859Sml29623 /* PCS Registers */
14933859Sml29623 #define	PCS_MII_CTRL_1000_SEL		0x0040	   /* reads 1. ignored on wr */
14943859Sml29623 #define	PCS_MII_CTRL_COLLISION_TEST	0x0080	   /* COL signal */
14953859Sml29623 #define	PCS_MII_CTRL_DUPLEX		0x0100	   /* forced 0x0. */
14963859Sml29623 #define	PCS_MII_RESTART_AUTONEG		0x0200	   /* self clearing. */
14973859Sml29623 #define	PCS_MII_ISOLATE			0x0400	   /* read 0. ignored on wr */
14983859Sml29623 #define	PCS_MII_POWER_DOWN		0x0800	   /* read 0. ignored on wr */
14993859Sml29623 #define	PCS_MII_AUTONEG_EN		0x1000	   /* autonegotiation */
15003859Sml29623 #define	PCS_MII_10_100_SEL		0x2000	   /* read 0. ignored on wr */
15013859Sml29623 #define	PCS_MII_RESET			0x8000	   /* reset PCS. */
15023859Sml29623 
15033859Sml29623 typedef union _pcs_ctrl_t {
15043859Sml29623 	uint64_t value;
15053859Sml29623 
15063859Sml29623 	struct {
15073859Sml29623 #if defined(_BIG_ENDIAN)
15083859Sml29623 		uint32_t msw;	/* Most significant word */
15093859Sml29623 		uint32_t lsw;	/* Least significant word */
15103859Sml29623 #elif defined(_LITTLE_ENDIAN)
15113859Sml29623 		uint32_t lsw;	/* Least significant word */
15123859Sml29623 		uint32_t msw;	/* Most significant word */
15133859Sml29623 #endif
15143859Sml29623 	} val;
15153859Sml29623 	struct {
15163859Sml29623 #if defined(_BIG_ENDIAN)
15173859Sml29623 		uint32_t	w1;
15183859Sml29623 #endif
15193859Sml29623 		struct {
15203859Sml29623 #if defined(_BIT_FIELDS_HTOL)
15213859Sml29623 			uint32_t res0		: 16;
15223859Sml29623 			uint32_t reset		: 1;
15233859Sml29623 			uint32_t res1		: 1;
15243859Sml29623 			uint32_t sel_10_100	: 1;
15253859Sml29623 			uint32_t an_enable	: 1;
15263859Sml29623 			uint32_t pwr_down	: 1;
15273859Sml29623 			uint32_t isolate	: 1;
15283859Sml29623 			uint32_t restart_an	: 1;
15293859Sml29623 			uint32_t duplex		: 1;
15303859Sml29623 			uint32_t col_test	: 1;
15313859Sml29623 			uint32_t sel_1000	: 1;
15323859Sml29623 			uint32_t res2		: 6;
15333859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
15343859Sml29623 			uint32_t res2		: 6;
15353859Sml29623 			uint32_t sel_1000	: 1;
15363859Sml29623 			uint32_t col_test	: 1;
15373859Sml29623 			uint32_t duplex		: 1;
15383859Sml29623 			uint32_t restart_an	: 1;
15393859Sml29623 			uint32_t isolate	: 1;
15403859Sml29623 			uint32_t pwr_down	: 1;
15413859Sml29623 			uint32_t an_enable	: 1;
15423859Sml29623 			uint32_t sel_10_100	: 1;
15433859Sml29623 			uint32_t res1		: 1;
15443859Sml29623 			uint32_t reset		: 1;
15453859Sml29623 			uint32_t res0		: 16;
15463859Sml29623 #endif
15473859Sml29623 		} w0;
15483859Sml29623 
15493859Sml29623 #if defined(_LITTLE_ENDIAN)
15503859Sml29623 		uint32_t	w1;
15513859Sml29623 #endif
15523859Sml29623 	} bits;
15533859Sml29623 } pcs_ctrl_t;
15543859Sml29623 
15553859Sml29623 #define	PCS_MII_STATUS_EXTEND_CAP	0x0001	   /* reads 0 */
15563859Sml29623 #define	PCS_MII_STATUS_JABBER_DETECT	0x0002	   /* reads 0 */
15573859Sml29623 #define	PCS_MII_STATUS_LINK_STATUS	0x0004	   /* link status */
15583859Sml29623 #define	PCS_MII_STATUS_AUTONEG_ABLE	0x0008	   /* reads 1 */
15593859Sml29623 #define	PCS_MII_STATUS_REMOTE_FAULT	0x0010	   /* remote fault detected */
15603859Sml29623 #define	PCS_MII_STATUS_AUTONEG_COMP	0x0020	   /* auto-neg completed */
15613859Sml29623 #define	PCS_MII_STATUS_EXTEND_STATUS	0x0100	   /* 1000 Base-X PHY */
15623859Sml29623 
15633859Sml29623 typedef union _pcs_stat_t {
15643859Sml29623 	uint64_t value;
15653859Sml29623 
15663859Sml29623 	struct {
15673859Sml29623 #if defined(_BIG_ENDIAN)
15683859Sml29623 		uint32_t msw;	/* Most significant word */
15693859Sml29623 		uint32_t lsw;	/* Least significant word */
15703859Sml29623 #elif defined(_LITTLE_ENDIAN)
15713859Sml29623 		uint32_t lsw;	/* Least significant word */
15723859Sml29623 		uint32_t msw;	/* Most significant word */
15733859Sml29623 #endif
15743859Sml29623 	} val;
15753859Sml29623 	struct {
15763859Sml29623 #if defined(_BIG_ENDIAN)
15773859Sml29623 		uint32_t	w1;
15783859Sml29623 #endif
15793859Sml29623 		struct {
15803859Sml29623 #if defined(_BIT_FIELDS_HTOL)
15813859Sml29623 		uint32_t res0		: 23;
15823859Sml29623 		uint32_t ext_stat	: 1;
15833859Sml29623 		uint32_t res1		: 2;
15843859Sml29623 		uint32_t an_complete	: 1;
15853859Sml29623 		uint32_t remote_fault	: 1;
15863859Sml29623 		uint32_t an_able	: 1;
15873859Sml29623 		uint32_t link_stat	: 1;
15883859Sml29623 		uint32_t jabber_detect	: 1;
15893859Sml29623 		uint32_t ext_cap	: 1;
15903859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
15913859Sml29623 		uint32_t ext_cap	: 1;
15923859Sml29623 		uint32_t jabber_detect	: 1;
15933859Sml29623 		uint32_t link_stat	: 1;
15943859Sml29623 		uint32_t an_able	: 1;
15953859Sml29623 		uint32_t remote_fault	: 1;
15963859Sml29623 		uint32_t an_complete	: 1;
15973859Sml29623 		uint32_t res1		: 2;
15983859Sml29623 		uint32_t ext_stat	: 1;
15993859Sml29623 		uint32_t res0		: 23;
16003859Sml29623 #endif
16013859Sml29623 		} w0;
16023859Sml29623 
16033859Sml29623 #if defined(_LITTLE_ENDIAN)
16043859Sml29623 		uint32_t	w1;
16053859Sml29623 #endif
16063859Sml29623 	} bits;
16073859Sml29623 } pcs_stat_t;
16083859Sml29623 
16093859Sml29623 #define	PCS_MII_ADVERT_FD		0x0020	   /* advertise full duplex */
16103859Sml29623 #define	PCS_MII_ADVERT_HD		0x0040	   /* advertise half-duplex */
16113859Sml29623 #define	PCS_MII_ADVERT_SYM_PAUSE	0x0080	   /* advertise PAUSE sym */
16123859Sml29623 #define	PCS_MII_ADVERT_ASYM_PAUSE	0x0100	   /* advertises PAUSE asym */
16133859Sml29623 #define	PCS_MII_ADVERT_RF_MASK		0x3000	   /* remote fault */
16143859Sml29623 #define	PCS_MII_ADVERT_RF_SHIFT		12
16153859Sml29623 #define	PCS_MII_ADVERT_ACK		0x4000	   /* (ro) */
16163859Sml29623 #define	PCS_MII_ADVERT_NEXT_PAGE	0x8000	   /* (ro) forced 0x0 */
16173859Sml29623 
16183859Sml29623 #define	PCS_MII_LPA_FD			PCS_MII_ADVERT_FD
16193859Sml29623 #define	PCS_MII_LPA_HD			PCS_MII_ADVERT_HD
16203859Sml29623 #define	PCS_MII_LPA_SYM_PAUSE		PCS_MII_ADVERT_SYM_PAUSE
16213859Sml29623 #define	PCS_MII_LPA_ASYM_PAUSE		PCS_MII_ADVERT_ASYM_PAUSE
16223859Sml29623 #define	PCS_MII_LPA_RF_MASK		PCS_MII_ADVERT_RF_MASK
16233859Sml29623 #define	PCS_MII_LPA_RF_SHIFT		PCS_MII_ADVERT_RF_SHIFT
16243859Sml29623 #define	PCS_MII_LPA_ACK			PCS_MII_ADVERT_ACK
16253859Sml29623 #define	PCS_MII_LPA_NEXT_PAGE		PCS_MII_ADVERT_NEXT_PAGE
16263859Sml29623 
16273859Sml29623 typedef union _pcs_anar_t {
16283859Sml29623 	uint64_t value;
16293859Sml29623 
16303859Sml29623 	struct {
16313859Sml29623 #if defined(_BIG_ENDIAN)
16323859Sml29623 		uint32_t msw;	/* Most significant word */
16333859Sml29623 		uint32_t lsw;	/* Least significant word */
16343859Sml29623 #elif defined(_LITTLE_ENDIAN)
16353859Sml29623 		uint32_t lsw;	/* Least significant word */
16363859Sml29623 		uint32_t msw;	/* Most significant word */
16373859Sml29623 #endif
16383859Sml29623 	} val;
16393859Sml29623 	struct {
16403859Sml29623 #if defined(_BIG_ENDIAN)
16413859Sml29623 		uint32_t	w1;
16423859Sml29623 #endif
16433859Sml29623 		struct {
16443859Sml29623 #if defined(_BIT_FIELDS_HTOL)
16453859Sml29623 		uint32_t res0		: 16;
16463859Sml29623 		uint32_t next_page	: 1;
16473859Sml29623 		uint32_t ack		: 1;
16483859Sml29623 		uint32_t remote_fault	: 2;
16493859Sml29623 		uint32_t res1		: 3;
16503859Sml29623 		uint32_t asm_pause	: 1;
16513859Sml29623 		uint32_t pause		: 1;
16523859Sml29623 		uint32_t half_duplex	: 1;
16533859Sml29623 		uint32_t full_duplex	: 1;
16543859Sml29623 		uint32_t res2		: 5;
16553859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
16563859Sml29623 		uint32_t res2		: 5;
16573859Sml29623 		uint32_t full_duplex	: 1;
16583859Sml29623 		uint32_t half_duplex	: 1;
16593859Sml29623 		uint32_t pause		: 1;
16603859Sml29623 		uint32_t asm_pause	: 1;
16613859Sml29623 		uint32_t res1		: 3;
16623859Sml29623 		uint32_t remore_fault	: 2;
16633859Sml29623 		uint32_t ack		: 1;
16643859Sml29623 		uint32_t next_page	: 1;
16653859Sml29623 		uint32_t res0		: 16;
16663859Sml29623 #endif
16673859Sml29623 		} w0;
16683859Sml29623 
16693859Sml29623 #if defined(_LITTLE_ENDIAN)
16703859Sml29623 		uint32_t	w1;
16713859Sml29623 #endif
16723859Sml29623 	} bits;
16733859Sml29623 } pcs_anar_t, *p_pcs_anar_t;
16743859Sml29623 
16753859Sml29623 #define	PCS_CFG_EN			0x0001	   /* enable PCS. */
16763859Sml29623 #define	PCS_CFG_SD_OVERRIDE		0x0002
16773859Sml29623 #define	PCS_CFG_SD_ACTIVE_LOW		0x0004	   /* sig detect active low */
16783859Sml29623 #define	PCS_CFG_JITTER_STUDY_MASK	0x0018	   /* jitter measurements */
16793859Sml29623 #define	PCS_CFG_JITTER_STUDY_SHIFT	4
16803859Sml29623 #define	PCS_CFG_10MS_TIMER_OVERRIDE	0x0020	   /* shortens autoneg timer */
16813859Sml29623 #define	PCS_CFG_MASK			0x0040	   /* PCS global mask bit */
16823859Sml29623 
16833859Sml29623 typedef union _pcs_cfg_t {
16843859Sml29623 	uint64_t value;
16853859Sml29623 
16863859Sml29623 	struct {
16873859Sml29623 #if defined(_BIG_ENDIAN)
16883859Sml29623 		uint32_t msw;	/* Most significant word */
16893859Sml29623 		uint32_t lsw;	/* Least significant word */
16903859Sml29623 #elif defined(_LITTLE_ENDIAN)
16913859Sml29623 		uint32_t lsw;	/* Least significant word */
16923859Sml29623 		uint32_t msw;	/* Most significant word */
16933859Sml29623 #endif
16943859Sml29623 	} val;
16953859Sml29623 	struct {
16963859Sml29623 #if defined(_BIG_ENDIAN)
16973859Sml29623 		uint32_t	w1;
16983859Sml29623 #endif
16993859Sml29623 		struct {
17003859Sml29623 #if defined(_BIT_FIELDS_HTOL)
17013859Sml29623 		uint32_t res0			: 25;
17023859Sml29623 		uint32_t mask			: 1;
17033859Sml29623 		uint32_t override_10ms_timer	: 1;
17043859Sml29623 		uint32_t jitter_study		: 2;
17053859Sml29623 		uint32_t sig_det_a_low		: 1;
17063859Sml29623 		uint32_t sig_det_override	: 1;
17073859Sml29623 		uint32_t enable			: 1;
17083859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
17093859Sml29623 		uint32_t enable			: 1;
17103859Sml29623 		uint32_t sig_det_override	: 1;
17113859Sml29623 		uint32_t sig_det_a_low		: 1;
17123859Sml29623 		uint32_t jitter_study		: 2;
17133859Sml29623 		uint32_t override_10ms_timer	: 1;
17143859Sml29623 		uint32_t mask			: 1;
17153859Sml29623 		uint32_t res0			: 25;
17163859Sml29623 #endif
17173859Sml29623 		} w0;
17183859Sml29623 
17193859Sml29623 #if defined(_LITTLE_ENDIAN)
17203859Sml29623 		uint32_t	w1;
17213859Sml29623 #endif
17223859Sml29623 	} bits;
17233859Sml29623 } pcs_cfg_t, *p_pcs_cfg_t;
17243859Sml29623 
17253859Sml29623 
17263859Sml29623 /* used for diagnostic purposes. bits 20-22 autoclear on read */
17273859Sml29623 #define	PCS_SM_TX_STATE_MASK		0x0000000F /* Tx idle state mask */
17283859Sml29623 #define	PCS_SM_TX_STATE_SHIFT		0
17293859Sml29623 #define	PCS_SM_RX_STATE_MASK		0x000000F0 /* Rx idle state mask */
17303859Sml29623 #define	PCS_SM_RX_STATE_SHIFT		4
17313859Sml29623 #define	PCS_SM_WORD_SYNC_STATE_MASK	0x00000700 /* loss of sync state mask */
17323859Sml29623 #define	PCS_SM_WORD_SYNC_STATE_SHIFT	8
17333859Sml29623 #define	PCS_SM_SEQ_DETECT_STATE_MASK	0x00001800 /* sequence detect */
17343859Sml29623 #define	PCS_SM_SEQ_DETECT_STATE_SHIFT	11
17353859Sml29623 #define	PCS_SM_LINK_STATE_MASK		0x0001E000 /* link state */
17363859Sml29623 #define	PCS_SM_LINK_STATE_SHIFT		13
17373859Sml29623 #define	PCS_SM_LOSS_LINK_C		0x00100000 /* loss of link */
17383859Sml29623 #define	PCS_SM_LOSS_LINK_SYNC		0x00200000 /* loss of sync */
17393859Sml29623 #define	PCS_SM_LOSS_SIGNAL_DETECT	0x00400000 /* signal detect fail */
17403859Sml29623 #define	PCS_SM_NO_LINK_BREAKLINK	0x01000000 /* receipt of breaklink */
17413859Sml29623 #define	PCS_SM_NO_LINK_SERDES		0x02000000 /* serdes initializing */
17423859Sml29623 #define	PCS_SM_NO_LINK_C		0x04000000 /* C codes not stable */
17433859Sml29623 #define	PCS_SM_NO_LINK_SYNC		0x08000000 /* word sync not achieved */
17443859Sml29623 #define	PCS_SM_NO_LINK_WAIT_C		0x10000000 /* waiting for C codes */
17453859Sml29623 #define	PCS_SM_NO_LINK_NO_IDLE		0x20000000 /* linkpartner send C code */
17463859Sml29623 
17473859Sml29623 typedef union _pcs_stat_mc_t {
17483859Sml29623 	uint64_t value;
17493859Sml29623 
17503859Sml29623 	struct {
17513859Sml29623 #if defined(_BIG_ENDIAN)
17523859Sml29623 		uint32_t msw;	/* Most significant word */
17533859Sml29623 		uint32_t lsw;	/* Least significant word */
17543859Sml29623 #elif defined(_LITTLE_ENDIAN)
17553859Sml29623 		uint32_t lsw;	/* Least significant word */
17563859Sml29623 		uint32_t msw;	/* Most significant word */
17573859Sml29623 #endif
17583859Sml29623 	} val;
17593859Sml29623 	struct {
17603859Sml29623 #if defined(_BIG_ENDIAN)
17613859Sml29623 		uint32_t	w1;
17623859Sml29623 #endif
17633859Sml29623 		struct {
17643859Sml29623 #if defined(_BIT_FIELDS_HTOL)
17653859Sml29623 		uint32_t res2		: 2;
17663859Sml29623 		uint32_t lnk_dwn_ni	: 1;
17673859Sml29623 		uint32_t lnk_dwn_wc	: 1;
17683859Sml29623 		uint32_t lnk_dwn_ls	: 1;
17693859Sml29623 		uint32_t lnk_dwn_nc	: 1;
17703859Sml29623 		uint32_t lnk_dwn_ser	: 1;
17713859Sml29623 		uint32_t lnk_loss_bc	: 1;
17723859Sml29623 		uint32_t res1		: 1;
17733859Sml29623 		uint32_t loss_sd	: 1;
17743859Sml29623 		uint32_t lnk_loss_sync	: 1;
17753859Sml29623 		uint32_t lnk_loss_c	: 1;
17763859Sml29623 		uint32_t res0		: 3;
17773859Sml29623 		uint32_t link_cfg_stat	: 4;
17783859Sml29623 		uint32_t seq_detc_stat	: 2;
17793859Sml29623 		uint32_t word_sync	: 3;
17803859Sml29623 		uint32_t rx_ctrl	: 4;
17813859Sml29623 		uint32_t tx_ctrl	: 4;
17823859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
17833859Sml29623 		uint32_t tx_ctrl	: 4;
17843859Sml29623 		uint32_t rx_ctrl	: 4;
17853859Sml29623 		uint32_t word_sync	: 3;
17863859Sml29623 		uint32_t seq_detc_stat	: 2;
17873859Sml29623 		uint32_t link_cfg_stat	: 4;
17883859Sml29623 		uint32_t res0		: 3;
17893859Sml29623 		uint32_t lnk_loss_c	: 1;
17903859Sml29623 		uint32_t lnk_loss_sync	: 1;
17913859Sml29623 		uint32_t loss_sd	: 1;
17923859Sml29623 		uint32_t res1		: 1;
17933859Sml29623 		uint32_t lnk_loss_bc	: 1;
17943859Sml29623 		uint32_t lnk_dwn_ser	: 1;
17953859Sml29623 		uint32_t lnk_dwn_nc	: 1;
17963859Sml29623 		uint32_t lnk_dwn_ls	: 1;
17973859Sml29623 		uint32_t lnk_dwn_wc	: 1;
17983859Sml29623 		uint32_t lnk_dwn_ni	: 1;
17993859Sml29623 		uint32_t res2		: 2;
18003859Sml29623 #endif
18013859Sml29623 		} w0;
18023859Sml29623 
18033859Sml29623 #if defined(_LITTLE_ENDIAN)
18043859Sml29623 		uint32_t	w1;
18053859Sml29623 #endif
18063859Sml29623 	} bits;
18073859Sml29623 } pcs_stat_mc_t, *p_pcs_stat_mc_t;
18083859Sml29623 
18093859Sml29623 #define	PCS_INTR_STATUS_LINK_CHANGE	0x04	/* link status has changed */
18103859Sml29623 
18113859Sml29623 /*
18123859Sml29623  * control which network interface is used. no more than one bit should
18133859Sml29623  * be set.
18143859Sml29623  */
18153859Sml29623 #define	PCS_DATAPATH_MODE_PCS		0	   /* Internal PCS is used */
18163859Sml29623 #define	PCS_DATAPATH_MODE_MII		0x00000002 /* GMII/RGMII is selected. */
18173859Sml29623 
18183859Sml29623 #define	PCS_PACKET_COUNT_TX_MASK	0x000007FF /* pkts xmitted by PCS */
18193859Sml29623 #define	PCS_PACKET_COUNT_RX_MASK	0x07FF0000 /* pkts recvd by PCS */
18203859Sml29623 #define	PCS_PACKET_COUNT_RX_SHIFT	16
18213859Sml29623 
18223859Sml29623 /*
18233859Sml29623  * ******************** XPCS registers *********************************
18243859Sml29623  */
18253859Sml29623 
18263859Sml29623 /* XPCS Base 10G Control1 Register */
18273859Sml29623 #define	XPCS_CTRL1_RST			0x8000 /* Self clearing reset. */
18283859Sml29623 #define	XPCS_CTRL1_LOOPBK		0x4000 /* xpcs Loopback */
18293859Sml29623 #define	XPCS_CTRL1_SPEED_SEL_3		0x2000 /* 1 indicates 10G speed */
18303859Sml29623 #define	XPCS_CTRL1_LOW_PWR		0x0800 /* low power mode. */
18313859Sml29623 #define	XPCS_CTRL1_SPEED_SEL_1		0x0040 /* 1 indicates 10G speed */
18323859Sml29623 #define	XPCS_CTRL1_SPEED_SEL_0_MASK	0x003c /* 0 indicates 10G speed. */
18333859Sml29623 #define	XPCS_CTRL1_SPEED_SEL_0_SHIFT	2
18343859Sml29623 
18353859Sml29623 
18363859Sml29623 
18373859Sml29623 typedef union _xpcs_ctrl1_t {
18383859Sml29623 	uint64_t value;
18393859Sml29623 
18403859Sml29623 	struct {
18413859Sml29623 #if defined(_BIG_ENDIAN)
18423859Sml29623 		uint32_t msw;	/* Most significant word */
18433859Sml29623 		uint32_t lsw;	/* Least significant word */
18443859Sml29623 #elif defined(_LITTLE_ENDIAN)
18453859Sml29623 		uint32_t lsw;	/* Least significant word */
18463859Sml29623 		uint32_t msw;	/* Most significant word */
18473859Sml29623 #endif
18483859Sml29623 	} val;
18493859Sml29623 	struct {
18503859Sml29623 #if defined(_BIG_ENDIAN)
18513859Sml29623 		uint32_t	w1;
18523859Sml29623 #endif
18533859Sml29623 		struct {
18543859Sml29623 #if defined(_BIT_FIELDS_HTOL)
18553859Sml29623 		uint32_t res3		: 16;
18563859Sml29623 		uint32_t reset		: 1;
18573859Sml29623 		uint32_t csr_lb		: 1;
18583859Sml29623 		uint32_t csr_speed_sel3	: 1;
18593859Sml29623 		uint32_t res2		: 1;
18603859Sml29623 		uint32_t csr_low_pwr	: 1;
18613859Sml29623 		uint32_t res1		: 4;
18623859Sml29623 		uint32_t csr_speed_sel1	: 1;
18633859Sml29623 		uint32_t csr_speed_sel0	: 4;
18643859Sml29623 		uint32_t res0		: 2;
18653859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
18663859Sml29623 		uint32_t res0		: 2;
18673859Sml29623 		uint32_t csr_speed_sel0	: 4;
18683859Sml29623 		uint32_t csr_speed_sel1	: 1;
18693859Sml29623 		uint32_t res1		: 4;
18703859Sml29623 		uint32_t csr_low_pwr	: 1;
18713859Sml29623 		uint32_t res2		: 1;
18723859Sml29623 		uint32_t csr_speed_sel3	: 1;
18733859Sml29623 		uint32_t csr_lb		: 1;
18743859Sml29623 		uint32_t reset		: 1;
18753859Sml29623 		uint32_t res3		: 16;
18763859Sml29623 #endif
18773859Sml29623 		} w0;
18783859Sml29623 
18793859Sml29623 #if defined(_LITTLE_ENDIAN)
18803859Sml29623 		uint32_t	w1;
18813859Sml29623 #endif
18823859Sml29623 	} bits;
18833859Sml29623 } xpcs_ctrl1_t;
18843859Sml29623 
18853859Sml29623 
18863859Sml29623 /* XPCS Base 10G Status1 Register (Read Only) */
18873859Sml29623 #define	XPCS_STATUS1_FAULT		0x0080
18883859Sml29623 #define	XPCS_STATUS1_RX_LINK_STATUS_UP	0x0004 /* Link status interrupt */
18893859Sml29623 #define	XPCS_STATUS1_LOW_POWER_ABILITY	0x0002 /* low power mode */
18906028Ssbehera #define	XPCS_STATUS_RX_LINK_STATUS_UP	0x1000 /* Link status interrupt */
18913859Sml29623 
18923859Sml29623 
18933859Sml29623 typedef	union _xpcs_stat1_t {
18943859Sml29623 	uint64_t value;
18953859Sml29623 
18963859Sml29623 	struct {
18973859Sml29623 #if defined(_BIG_ENDIAN)
18983859Sml29623 		uint32_t msw;	/* Most significant word */
18993859Sml29623 		uint32_t lsw;	/* Least significant word */
19003859Sml29623 #elif defined(_LITTLE_ENDIAN)
19013859Sml29623 		uint32_t lsw;	/* Least significant word */
19023859Sml29623 		uint32_t msw;	/* Most significant word */
19033859Sml29623 #endif
19043859Sml29623 	} val;
19053859Sml29623 	struct {
19063859Sml29623 #if defined(_BIG_ENDIAN)
19073859Sml29623 		uint32_t	w1;
19083859Sml29623 #endif
19093859Sml29623 		struct {
19103859Sml29623 #if defined(_BIT_FIELDS_HTOL)
19113859Sml29623 		uint32_t res4			: 16;
19123859Sml29623 		uint32_t res3			: 8;
19133859Sml29623 		uint32_t csr_fault		: 1;
19143859Sml29623 		uint32_t res1			: 4;
19153859Sml29623 		uint32_t csr_rx_link_stat	: 1;
19163859Sml29623 		uint32_t csr_low_pwr_ability	: 1;
19173859Sml29623 		uint32_t res0			: 1;
19183859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
19193859Sml29623 		uint32_t res0			: 1;
19203859Sml29623 		uint32_t csr_low_pwr_ability	: 1;
19213859Sml29623 		uint32_t csr_rx_link_stat	: 1;
19223859Sml29623 		uint32_t res1			: 4;
19233859Sml29623 		uint32_t csr_fault		: 1;
19243859Sml29623 		uint32_t res3			: 8;
19253859Sml29623 		uint32_t res4			: 16;
19263859Sml29623 #endif
19273859Sml29623 		} w0;
19283859Sml29623 
19293859Sml29623 #if defined(_LITTLE_ENDIAN)
19303859Sml29623 		uint32_t	w1;
19313859Sml29623 #endif
19323859Sml29623 	} bits;
19333859Sml29623 } xpcs_stat1_t;
19343859Sml29623 
19353859Sml29623 
19363859Sml29623 /* XPCS Base Speed Ability Register. Indicates 10G capability */
19373859Sml29623 #define	XPCS_SPEED_ABILITY_10_GIG	0x0001
19383859Sml29623 
19393859Sml29623 
19403859Sml29623 typedef	union _xpcs_speed_ab_t {
19413859Sml29623 	uint64_t value;
19423859Sml29623 
19433859Sml29623 	struct {
19443859Sml29623 #if defined(_BIG_ENDIAN)
19453859Sml29623 		uint32_t msw;	/* Most significant word */
19463859Sml29623 		uint32_t lsw;	/* Least significant word */
19473859Sml29623 #elif defined(_LITTLE_ENDIAN)
19483859Sml29623 		uint32_t lsw;	/* Least significant word */
19493859Sml29623 		uint32_t msw;	/* Most significant word */
19503859Sml29623 #endif
19513859Sml29623 	} val;
19523859Sml29623 	struct {
19533859Sml29623 #if defined(_BIG_ENDIAN)
19543859Sml29623 		uint32_t	w1;
19553859Sml29623 #endif
19563859Sml29623 		struct {
19573859Sml29623 #if defined(_BIT_FIELDS_HTOL)
19583859Sml29623 		uint32_t res1		: 16;
19593859Sml29623 		uint32_t res0		: 15;
19603859Sml29623 		uint32_t csr_10gig	: 1;
19613859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
19623859Sml29623 		uint32_t csr_10gig	: 1;
19633859Sml29623 		uint32_t res0		: 15;
19643859Sml29623 		uint32_t res1		: 16;
19653859Sml29623 #endif
19663859Sml29623 		} w0;
19673859Sml29623 
19683859Sml29623 #if defined(_LITTLE_ENDIAN)
19693859Sml29623 		uint32_t	w1;
19703859Sml29623 #endif
19713859Sml29623 	} bits;
19723859Sml29623 } xpcs_speed_ab_t;
19733859Sml29623 
19743859Sml29623 
19753859Sml29623 /* XPCS Base 10G Devices in Package Register */
19763859Sml29623 #define	XPCS_DEV_IN_PKG_CSR_VENDOR2	0x80000000
19773859Sml29623 #define	XPCS_DEV_IN_PKG_CSR_VENDOR1	0x40000000
19783859Sml29623 #define	XPCS_DEV_IN_PKG_DTE_XS		0x00000020
19793859Sml29623 #define	XPCS_DEV_IN_PKG_PHY_XS		0x00000010
19803859Sml29623 #define	XPCS_DEV_IN_PKG_PCS		0x00000008
19813859Sml29623 #define	XPCS_DEV_IN_PKG_WIS		0x00000004
19823859Sml29623 #define	XPCS_DEV_IN_PKG_PMD_PMA		0x00000002
19833859Sml29623 #define	XPCS_DEV_IN_PKG_CLS_22_REG	0x00000000
19843859Sml29623 
19853859Sml29623 
19863859Sml29623 
19873859Sml29623 typedef	union _xpcs_dev_in_pkg_t {
19883859Sml29623 	uint64_t value;
19893859Sml29623 
19903859Sml29623 	struct {
19913859Sml29623 #if defined(_BIG_ENDIAN)
19923859Sml29623 		uint32_t msw;	/* Most significant word */
19933859Sml29623 		uint32_t lsw;	/* Least significant word */
19943859Sml29623 #elif defined(_LITTLE_ENDIAN)
19953859Sml29623 		uint32_t lsw;	/* Least significant word */
19963859Sml29623 		uint32_t msw;	/* Most significant word */
19973859Sml29623 #endif
19983859Sml29623 	} val;
19993859Sml29623 	struct {
20003859Sml29623 #if defined(_BIG_ENDIAN)
20013859Sml29623 		uint32_t	w1;
20023859Sml29623 #endif
20033859Sml29623 		struct {
20043859Sml29623 #if defined(_BIT_FIELDS_HTOL)
20053859Sml29623 		uint32_t csr_vendor2	: 1;
20063859Sml29623 		uint32_t csr_vendor1	: 1;
20073859Sml29623 		uint32_t res1		: 14;
20083859Sml29623 		uint32_t res0		: 10;
20093859Sml29623 		uint32_t dte_xs		: 1;
20103859Sml29623 		uint32_t phy_xs		: 1;
20113859Sml29623 		uint32_t pcs		: 1;
20123859Sml29623 		uint32_t wis		: 1;
20133859Sml29623 		uint32_t pmd_pma	: 1;
20143859Sml29623 		uint32_t clause_22_reg	: 1;
20153859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
20163859Sml29623 		uint32_t clause_22_reg	: 1;
20173859Sml29623 		uint32_t pmd_pma	: 1;
20183859Sml29623 		uint32_t wis		: 1;
20193859Sml29623 		uint32_t pcs		: 1;
20203859Sml29623 		uint32_t phy_xs		: 1;
20213859Sml29623 		uint32_t dte_xs		: 1;
20223859Sml29623 		uint32_t res0		: 10;
20233859Sml29623 		uint32_t res1		: 14;
20243859Sml29623 		uint32_t csr_vendor1	: 1;
20253859Sml29623 		uint32_t csr_vendor2	: 1;
20263859Sml29623 #endif
20273859Sml29623 		} w0;
20283859Sml29623 
20293859Sml29623 #if defined(_LITTLE_ENDIAN)
20303859Sml29623 		uint32_t	w1;
20313859Sml29623 #endif
20323859Sml29623 	} bits;
20333859Sml29623 } xpcs_dev_in_pkg_t;
20343859Sml29623 
20353859Sml29623 
20363859Sml29623 /* XPCS Base 10G Control2 Register */
20373859Sml29623 #define	XPCS_PSC_SEL_MASK		0x0003
20383859Sml29623 #define	PSC_SEL_10G_BASE_X_PCS		0x0001
20393859Sml29623 
20403859Sml29623 
20413859Sml29623 typedef	union _xpcs_ctrl2_t {
20423859Sml29623 	uint64_t value;
20433859Sml29623 
20443859Sml29623 	struct {
20453859Sml29623 #if defined(_BIG_ENDIAN)
20463859Sml29623 		uint32_t msw;	/* Most significant word */
20473859Sml29623 		uint32_t lsw;	/* Least significant word */
20483859Sml29623 #elif defined(_LITTLE_ENDIAN)
20493859Sml29623 		uint32_t lsw;	/* Least significant word */
20503859Sml29623 		uint32_t msw;	/* Most significant word */
20513859Sml29623 #endif
20523859Sml29623 	} val;
20533859Sml29623 	struct {
20543859Sml29623 #if defined(_BIG_ENDIAN)
20553859Sml29623 		uint32_t	w1;
20563859Sml29623 #endif
20573859Sml29623 		struct {
20583859Sml29623 #if defined(_BIT_FIELDS_HTOL)
20593859Sml29623 		uint32_t res1		: 16;
20603859Sml29623 		uint32_t res0		: 14;
20613859Sml29623 		uint32_t csr_psc_sel	: 2;
20623859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
20633859Sml29623 		uint32_t csr_psc_sel	: 2;
20643859Sml29623 		uint32_t res0		: 14;
20653859Sml29623 		uint32_t res1		: 16;
20663859Sml29623 #endif
20673859Sml29623 		} w0;
20683859Sml29623 
20693859Sml29623 #if defined(_LITTLE_ENDIAN)
20703859Sml29623 		uint32_t	w1;
20713859Sml29623 #endif
20723859Sml29623 	} bits;
20733859Sml29623 } xpcs_ctrl2_t;
20743859Sml29623 
20753859Sml29623 
20763859Sml29623 /* XPCS Base10G Status2 Register */
20773859Sml29623 #define	XPCS_STATUS2_DEV_PRESENT_MASK	0xc000	/* ?????? */
20783859Sml29623 #define	XPCS_STATUS2_TX_FAULT		0x0800	/* Fault on tx path */
20793859Sml29623 #define	XPCS_STATUS2_RX_FAULT		0x0400	/* Fault on rx path */
20803859Sml29623 #define	XPCS_STATUS2_TEN_GBASE_W	0x0004	/* 10G-Base-W */
20813859Sml29623 #define	XPCS_STATUS2_TEN_GBASE_X	0x0002	/* 10G-Base-X */
20823859Sml29623 #define	XPCS_STATUS2_TEN_GBASE_R	0x0001	/* 10G-Base-R */
20833859Sml29623 
20843859Sml29623 typedef	union _xpcs_stat2_t {
20853859Sml29623 	uint64_t value;
20863859Sml29623 
20873859Sml29623 	struct {
20883859Sml29623 #if defined(_BIG_ENDIAN)
20893859Sml29623 		uint32_t msw;	/* Most significant word */
20903859Sml29623 		uint32_t lsw;	/* Least significant word */
20913859Sml29623 #elif defined(_LITTLE_ENDIAN)
20923859Sml29623 		uint32_t lsw;	/* Least significant word */
20933859Sml29623 		uint32_t msw;	/* Most significant word */
20943859Sml29623 #endif
20953859Sml29623 	} val;
20963859Sml29623 	struct {
20973859Sml29623 #if defined(_BIG_ENDIAN)
20983859Sml29623 		uint32_t	w1;
20993859Sml29623 #endif
21003859Sml29623 		struct {
21013859Sml29623 #if defined(_BIT_FIELDS_HTOL)
21023859Sml29623 		uint32_t res2		: 16;
21033859Sml29623 		uint32_t csr_dev_pres	: 2;
21043859Sml29623 		uint32_t res1		: 2;
21053859Sml29623 		uint32_t csr_tx_fault	: 1;
21063859Sml29623 		uint32_t csr_rx_fault	: 1;
21073859Sml29623 		uint32_t res0		: 7;
21083859Sml29623 		uint32_t ten_gbase_w	: 1;
21093859Sml29623 		uint32_t ten_gbase_x	: 1;
21103859Sml29623 		uint32_t ten_gbase_r	: 1;
21113859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
21123859Sml29623 		uint32_t ten_gbase_r	: 1;
21133859Sml29623 		uint32_t ten_gbase_x	: 1;
21143859Sml29623 		uint32_t ten_gbase_w	: 1;
21153859Sml29623 		uint32_t res0		: 7;
21163859Sml29623 		uint32_t csr_rx_fault	: 1;
21173859Sml29623 		uint32_t csr_tx_fault	: 1;
21183859Sml29623 		uint32_t res1		: 2;
21193859Sml29623 		uint32_t csr_dev_pres	: 2;
21203859Sml29623 		uint32_t res2		: 16;
21213859Sml29623 #endif
21223859Sml29623 		} w0;
21233859Sml29623 
21243859Sml29623 #if defined(_LITTLE_ENDIAN)
21253859Sml29623 		uint32_t	w1;
21263859Sml29623 #endif
21273859Sml29623 	} bits;
21283859Sml29623 } xpcs_stat2_t;
21293859Sml29623 
21303859Sml29623 
21313859Sml29623 
21323859Sml29623 /* XPCS Base10G Status Register */
21333859Sml29623 #define	XPCS_STATUS_LANE_ALIGN		0x1000 /* 10GBaseX PCS rx lanes align */
21343859Sml29623 #define	XPCS_STATUS_PATTERN_TEST_ABLE	0x0800 /* able to generate patterns. */
21353859Sml29623 #define	XPCS_STATUS_LANE3_SYNC		0x0008 /* Lane 3 is synchronized */
21363859Sml29623 #define	XPCS_STATUS_LANE2_SYNC		0x0004 /* Lane 2 is synchronized */
21373859Sml29623 #define	XPCS_STATUS_LANE1_SYNC		0x0002 /* Lane 1 is synchronized */
21383859Sml29623 #define	XPCS_STATUS_LANE0_SYNC		0x0001 /* Lane 0 is synchronized */
21393859Sml29623 
21403859Sml29623 typedef	union _xpcs_stat_t {
21413859Sml29623 	uint64_t value;
21423859Sml29623 
21433859Sml29623 	struct {
21443859Sml29623 #if defined(_BIG_ENDIAN)
21453859Sml29623 		uint32_t msw;	/* Most significant word */
21463859Sml29623 		uint32_t lsw;	/* Least significant word */
21473859Sml29623 #elif defined(_LITTLE_ENDIAN)
21483859Sml29623 		uint32_t lsw;	/* Least significant word */
21493859Sml29623 		uint32_t msw;	/* Most significant word */
21503859Sml29623 #endif
21513859Sml29623 	} val;
21523859Sml29623 	struct {
21533859Sml29623 #if defined(_BIG_ENDIAN)
21543859Sml29623 		uint32_t	w1;
21553859Sml29623 #endif
21563859Sml29623 		struct {
21573859Sml29623 #if defined(_BIT_FIELDS_HTOL)
21583859Sml29623 		uint32_t res2			: 16;
21593859Sml29623 		uint32_t res1			: 3;
21603859Sml29623 		uint32_t csr_lane_align		: 1;
21613859Sml29623 		uint32_t csr_pattern_test_able	: 1;
21623859Sml29623 		uint32_t res0			: 7;
21633859Sml29623 		uint32_t csr_lane3_sync		: 1;
21643859Sml29623 		uint32_t csr_lane2_sync		: 1;
21653859Sml29623 		uint32_t csr_lane1_sync		: 1;
21663859Sml29623 		uint32_t csr_lane0_sync		: 1;
21673859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
21683859Sml29623 		uint32_t csr_lane0_sync		: 1;
21693859Sml29623 		uint32_t csr_lane1_sync		: 1;
21703859Sml29623 		uint32_t csr_lane2_sync		: 1;
21713859Sml29623 		uint32_t csr_lane3_sync		: 1;
21723859Sml29623 		uint32_t res0			: 7;
21733859Sml29623 		uint32_t csr_pat_test_able	: 1;
21743859Sml29623 		uint32_t csr_lane_align		: 1;
21753859Sml29623 		uint32_t res1			: 3;
21763859Sml29623 		uint32_t res2			: 16;
21773859Sml29623 #endif
21783859Sml29623 		} w0;
21793859Sml29623 
21803859Sml29623 #if defined(_LITTLE_ENDIAN)
21813859Sml29623 		uint32_t	w1;
21823859Sml29623 #endif
21833859Sml29623 	} bits;
21843859Sml29623 } xpcs_stat_t;
21853859Sml29623 
21863859Sml29623 /* XPCS Base10G Test Control Register */
21873859Sml29623 #define	XPCS_TEST_CTRL_TX_TEST_ENABLE		0x0004
21883859Sml29623 #define	XPCS_TEST_CTRL_TEST_PATTERN_SEL_MASK	0x0003
21893859Sml29623 #define	TEST_PATTERN_HIGH_FREQ			0
21903859Sml29623 #define	TEST_PATTERN_LOW_FREQ			1
21913859Sml29623 #define	TEST_PATTERN_MIXED_FREQ			2
21923859Sml29623 
21933859Sml29623 typedef	union _xpcs_test_ctl_t {
21943859Sml29623 	uint64_t value;
21953859Sml29623 
21963859Sml29623 	struct {
21973859Sml29623 #if defined(_BIG_ENDIAN)
21983859Sml29623 		uint32_t msw;	/* Most significant word */
21993859Sml29623 		uint32_t lsw;	/* Least significant word */
22003859Sml29623 #elif defined(_LITTLE_ENDIAN)
22013859Sml29623 		uint32_t lsw;	/* Least significant word */
22023859Sml29623 		uint32_t msw;	/* Most significant word */
22033859Sml29623 #endif
22043859Sml29623 	} val;
22053859Sml29623 	struct {
22063859Sml29623 #if defined(_BIG_ENDIAN)
22073859Sml29623 		uint32_t	w1;
22083859Sml29623 #endif
22093859Sml29623 		struct {
22103859Sml29623 #if defined(_BIT_FIELDS_HTOL)
22113859Sml29623 		uint32_t res1			: 16;
22123859Sml29623 		uint32_t res0			: 13;
22133859Sml29623 		uint32_t csr_tx_test_en		: 1;
22143859Sml29623 		uint32_t csr_test_pat_sel	: 2;
22153859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
22163859Sml29623 		uint32_t csr_test_pat_sel	: 2;
22173859Sml29623 		uint32_t csr_tx_test_en		: 1;
22183859Sml29623 		uint32_t res0			: 13;
22193859Sml29623 		uint32_t res1			: 16;
22203859Sml29623 #endif
22213859Sml29623 		} w0;
22223859Sml29623 
22233859Sml29623 #if defined(_LITTLE_ENDIAN)
22243859Sml29623 		uint32_t	w1;
22253859Sml29623 #endif
22263859Sml29623 	} bits;
22273859Sml29623 } xpcs_test_ctl_t;
22283859Sml29623 
22293859Sml29623 /* XPCS Base10G Diagnostic Register */
22303859Sml29623 #define	XPCS_DIAG_EB_ALIGN_ERR3		0x40
22313859Sml29623 #define	XPCS_DIAG_EB_ALIGN_ERR2		0x20
22323859Sml29623 #define	XPCS_DIAG_EB_ALIGN_ERR1		0x10
22333859Sml29623 #define	XPCS_DIAG_EB_DESKEW_OK		0x08
22343859Sml29623 #define	XPCS_DIAG_EB_ALIGN_DET3		0x04
22353859Sml29623 #define	XPCS_DIAG_EB_ALIGN_DET2		0x02
22363859Sml29623 #define	XPCS_DIAG_EB_ALIGN_DET1		0x01
22373859Sml29623 #define	XPCS_DIAG_EB_DESKEW_LOSS	0
22383859Sml29623 
22393859Sml29623 #define	XPCS_DIAG_SYNC_3_INVALID	0x8
22403859Sml29623 #define	XPCS_DIAG_SYNC_2_INVALID	0x4
22413859Sml29623 #define	XPCS_DIAG_SYNC_1_INVALID	0x2
22423859Sml29623 #define	XPCS_DIAG_SYNC_IN_SYNC		0x1
22433859Sml29623 #define	XPCS_DIAG_SYNC_LOSS_SYNC	0
22443859Sml29623 
22453859Sml29623 #define	XPCS_RX_SM_RECEIVE_STATE	1
22463859Sml29623 #define	XPCS_RX_SM_FAULT_STATE		0
22473859Sml29623 
22483859Sml29623 typedef	union _xpcs_diag_t {
22493859Sml29623 	uint64_t value;
22503859Sml29623 
22513859Sml29623 	struct {
22523859Sml29623 #if defined(_BIG_ENDIAN)
22533859Sml29623 		uint32_t msw;	/* Most significant word */
22543859Sml29623 		uint32_t lsw;	/* Least significant word */
22553859Sml29623 #elif defined(_LITTLE_ENDIAN)
22563859Sml29623 		uint32_t lsw;	/* Least significant word */
22573859Sml29623 		uint32_t msw;	/* Most significant word */
22583859Sml29623 #endif
22593859Sml29623 	} val;
22603859Sml29623 	struct {
22613859Sml29623 #if defined(_BIG_ENDIAN)
22623859Sml29623 		uint32_t	w1;
22633859Sml29623 #endif
22643859Sml29623 		struct {
22653859Sml29623 #if defined(_BIT_FIELDS_HTOL)
22663859Sml29623 		uint32_t res1			: 7;
22673859Sml29623 		uint32_t sync_sm_lane3		: 4;
22683859Sml29623 		uint32_t sync_sm_lane2		: 4;
22693859Sml29623 		uint32_t sync_sm_lane1		: 4;
22703859Sml29623 		uint32_t sync_sm_lane0		: 4;
22713859Sml29623 		uint32_t elastic_buffer_sm	: 8;
22723859Sml29623 		uint32_t receive_sm		: 1;
22733859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
22743859Sml29623 		uint32_t receive_sm		: 1;
22753859Sml29623 		uint32_t elastic_buffer_sm	: 8;
22763859Sml29623 		uint32_t sync_sm_lane0		: 4;
22773859Sml29623 		uint32_t sync_sm_lane1		: 4;
22783859Sml29623 		uint32_t sync_sm_lane2		: 4;
22793859Sml29623 		uint32_t sync_sm_lane3		: 4;
22803859Sml29623 		uint32_t res1			: 7;
22813859Sml29623 #endif
22823859Sml29623 		} w0;
22833859Sml29623 
22843859Sml29623 #if defined(_LITTLE_ENDIAN)
22853859Sml29623 		uint32_t	w1;
22863859Sml29623 #endif
22873859Sml29623 	} bits;
22883859Sml29623 } xpcs_diag_t;
22893859Sml29623 
22903859Sml29623 /* XPCS Base10G Tx State Machine Register */
22913859Sml29623 #define	XPCS_TX_SM_SEND_UNDERRUN	0x9
22923859Sml29623 #define	XPCS_TX_SM_SEND_RANDOM_Q	0x8
22933859Sml29623 #define	XPCS_TX_SM_SEND_RANDOM_K	0x7
22943859Sml29623 #define	XPCS_TX_SM_SEND_RANDOM_A	0x6
22953859Sml29623 #define	XPCS_TX_SM_SEND_RANDOM_R	0x5
22963859Sml29623 #define	XPCS_TX_SM_SEND_Q		0x4
22973859Sml29623 #define	XPCS_TX_SM_SEND_K		0x3
22983859Sml29623 #define	XPCS_TX_SM_SEND_A		0x2
22993859Sml29623 #define	XPCS_TX_SM_SEND_SDP		0x1
23003859Sml29623 #define	XPCS_TX_SM_SEND_DATA		0
23013859Sml29623 
23023859Sml29623 /* XPCS Base10G Configuration Register */
23033859Sml29623 #define	XPCS_CFG_VENDOR_DBG_SEL_MASK	0x78
23043859Sml29623 #define	XPCS_CFG_VENDOR_DBG_SEL_SHIFT	3
23053859Sml29623 #define	XPCS_CFG_BYPASS_SIG_DETECT	0x0004
23063859Sml29623 #define	XPCS_CFG_ENABLE_TX_BUFFERS	0x0002
23073859Sml29623 #define	XPCS_CFG_XPCS_ENABLE		0x0001
23083859Sml29623 
23093859Sml29623 typedef	union _xpcs_config_t {
23103859Sml29623 	uint64_t value;
23113859Sml29623 
23123859Sml29623 	struct {
23133859Sml29623 #if defined(_BIG_ENDIAN)
23143859Sml29623 		uint32_t msw;	/* Most significant word */
23153859Sml29623 		uint32_t lsw;	/* Least significant word */
23163859Sml29623 #elif defined(_LITTLE_ENDIAN)
23173859Sml29623 		uint32_t lsw;	/* Least significant word */
23183859Sml29623 		uint32_t msw;	/* Most significant word */
23193859Sml29623 #endif
23203859Sml29623 	} val;
23213859Sml29623 	struct {
23223859Sml29623 #if defined(_BIG_ENDIAN)
23233859Sml29623 		uint32_t	w1;
23243859Sml29623 #endif
23253859Sml29623 		struct {
23263859Sml29623 #if defined(_BIT_FIELDS_HTOL)
23273859Sml29623 		uint32_t res1			: 16;
23283859Sml29623 		uint32_t res0			: 9;
23293859Sml29623 		uint32_t csr_vendor_dbg_sel	: 4;
23303859Sml29623 		uint32_t csr_bypass_sig_detect	: 1;
23313859Sml29623 		uint32_t csr_en_tx_buf		: 1;
23323859Sml29623 		uint32_t csr_xpcs_en		: 1;
23333859Sml29623 #elif defined(_BIT_FIELDS_LTOH)
23343859Sml29623 		uint32_t csr_xpcs_en		: 1;
23353859Sml29623 		uint32_t csr_en_tx_buf		: 1;
23363859Sml29623 		uint32_t csr_bypass_sig_detect	: 1;
23373859Sml29623 		uint32_t csr_vendor_dbg_sel	: 4;
23383859Sml29623 		uint32_t res0			: 9;
23393859Sml29623 		uint32_t res1			: 16;
23403859Sml29623 #endif
23413859Sml29623 		} w0;
23423859Sml29623 
23433859Sml29623 #if defined(_LITTLE_ENDIAN)
23443859Sml29623 		uint32_t	w1;
23453859Sml29623 #endif
23463859Sml29623 	} bits;
23473859Sml29623 } xpcs_config_t;
23483859Sml29623 
23493859Sml29623 
23503859Sml29623 
23513859Sml29623 /* XPCS Base10G Mask1 Register */
23523859Sml29623 #define	XPCS_MASK1_FAULT_MASK		0x0080	/* mask fault interrupt. */
23533859Sml29623 #define	XPCS_MASK1_RX_LINK_STATUS_MASK	0x0040	/* mask linkstat interrupt */
23543859Sml29623 
23553859Sml29623 /* XPCS Base10G Packet Counter */
23563859Sml29623 #define	XPCS_PKT_CNTR_TX_PKT_CNT_MASK	0xffff0000
23573859Sml29623 #define	XPCS_PKT_CNTR_TX_PKT_CNT_SHIFT	16
23583859Sml29623 #define	XPCS_PKT_CNTR_RX_PKT_CNT_MASK	0x0000ffff
23593859Sml29623 #define	XPCS_PKT_CNTR_RX_PKT_CNT_SHIFT	0
23603859Sml29623 
23613859Sml29623 /* XPCS Base10G TX State Machine status register */
23623859Sml29623 #define	XPCS_TX_STATE_MC_TX_STATE_MASK	0x0f
23633859Sml29623 #define	XPCS_DESKEW_ERR_CNTR_MASK	0xff
23643859Sml29623 
23653859Sml29623 /* XPCS Base10G Lane symbol error counters */
23663859Sml29623 #define	XPCS_SYM_ERR_CNT_L1_MASK  0xffff0000
23673859Sml29623 #define	XPCS_SYM_ERR_CNT_L0_MASK  0x0000ffff
23683859Sml29623 #define	XPCS_SYM_ERR_CNT_L3_MASK  0xffff0000
23693859Sml29623 #define	XPCS_SYM_ERR_CNT_L2_MASK  0x0000ffff
23703859Sml29623 
23713859Sml29623 #define	XPCS_SYM_ERR_CNT_MULTIPLIER	16
23723859Sml29623 
23733859Sml29623 /* ESR Reset Register */
23743859Sml29623 #define	ESR_RESET_1			2
23753859Sml29623 #define	ESR_RESET_0			1
23763859Sml29623 
23773859Sml29623 /* ESR Configuration Register */
23783859Sml29623 #define	ESR_BLUNT_END_LOOPBACK		2
23793859Sml29623 #define	ESR_FORCE_SERDES_SERDES_RDY	1
23803859Sml29623 
23813859Sml29623 /* ESR Neptune Serdes PLL Configuration */
23823859Sml29623 #define	ESR_PLL_CFG_FBDIV_0		0x1
23833859Sml29623 #define	ESR_PLL_CFG_FBDIV_1		0x2
23843859Sml29623 #define	ESR_PLL_CFG_FBDIV_2		0x4
23853859Sml29623 #define	ESR_PLL_CFG_HALF_RATE_0		0x8
23863859Sml29623 #define	ESR_PLL_CFG_HALF_RATE_1		0x10
23873859Sml29623 #define	ESR_PLL_CFG_HALF_RATE_2		0x20
23883859Sml29623 #define	ESR_PLL_CFG_HALF_RATE_3		0x40
23896028Ssbehera #define	ESR_PLL_CFG_1G_SERDES		(ESR_PLL_CFG_FBDIV_0 |		\
23906028Ssbehera 					ESR_PLL_CFG_HALF_RATE_0 |	\
23916028Ssbehera 					ESR_PLL_CFG_HALF_RATE_1 |	\
23926028Ssbehera 					ESR_PLL_CFG_HALF_RATE_2 |	\
23935196Ssbehera 					ESR_PLL_CFG_HALF_RATE_3)
23943859Sml29623 
23956028Ssbehera #define	ESR_PLL_CFG_10G_SERDES		ESR_PLL_CFG_FBDIV_2
23966028Ssbehera 
23973859Sml29623 /* ESR Neptune Serdes Control Register */
23983859Sml29623 #define	ESR_CTL_EN_SYNCDET_0		0x00000001
23993859Sml29623 #define	ESR_CTL_EN_SYNCDET_1		0x00000002
24003859Sml29623 #define	ESR_CTL_EN_SYNCDET_2		0x00000004
24013859Sml29623 #define	ESR_CTL_EN_SYNCDET_3		0x00000008
24023859Sml29623 #define	ESR_CTL_OUT_EMPH_0_MASK		0x00000070
24033859Sml29623 #define	ESR_CTL_OUT_EMPH_0_SHIFT	4
24043859Sml29623 #define	ESR_CTL_OUT_EMPH_1_MASK		0x00000380
24053859Sml29623 #define	ESR_CTL_OUT_EMPH_1_SHIFT	7
24063859Sml29623 #define	ESR_CTL_OUT_EMPH_2_MASK		0x00001c00
24073859Sml29623 #define	ESR_CTL_OUT_EMPH_2_SHIFT	10
24083859Sml29623 #define	ESR_CTL_OUT_EMPH_3_MASK		0x0000e000
24093859Sml29623 #define	ESR_CTL_OUT_EMPH_3_SHIFT	13
24103859Sml29623 #define	ESR_CTL_LOSADJ_0_MASK		0x00070000
24113859Sml29623 #define	ESR_CTL_LOSADJ_0_SHIFT		16
24123859Sml29623 #define	ESR_CTL_LOSADJ_1_MASK		0x00380000
24133859Sml29623 #define	ESR_CTL_LOSADJ_1_SHIFT		19
24143859Sml29623 #define	ESR_CTL_LOSADJ_2_MASK		0x01c00000
24153859Sml29623 #define	ESR_CTL_LOSADJ_2_SHIFT		22
24163859Sml29623 #define	ESR_CTL_LOSADJ_3_MASK		0x0e000000
24173859Sml29623 #define	ESR_CTL_LOSADJ_3_SHIFT		25
24183859Sml29623 #define	ESR_CTL_RXITERM_0		0x10000000
24193859Sml29623 #define	ESR_CTL_RXITERM_1		0x20000000
24203859Sml29623 #define	ESR_CTL_RXITERM_2		0x40000000
24213859Sml29623 #define	ESR_CTL_RXITERM_3		0x80000000
24225196Ssbehera #define	ESR_CTL_1G_SERDES		(ESR_CTL_EN_SYNCDET_0 | \
24235196Ssbehera 					ESR_CTL_EN_SYNCDET_1 |	\
24245196Ssbehera 					ESR_CTL_EN_SYNCDET_2 |	\
24255196Ssbehera 					ESR_CTL_EN_SYNCDET_3 |  \
24265196Ssbehera 					(0x1 << ESR_CTL_OUT_EMPH_0_SHIFT) | \
24275196Ssbehera 					(0x1 << ESR_CTL_OUT_EMPH_1_SHIFT) | \
24285196Ssbehera 					(0x1 << ESR_CTL_OUT_EMPH_2_SHIFT) | \
24295196Ssbehera 					(0x1 << ESR_CTL_OUT_EMPH_3_SHIFT) | \
24305196Ssbehera 					(0x1 << ESR_CTL_OUT_EMPH_3_SHIFT) | \
24315196Ssbehera 					(0x1 << ESR_CTL_LOSADJ_0_SHIFT) | \
24325196Ssbehera 					(0x1 << ESR_CTL_LOSADJ_1_SHIFT) | \
24335196Ssbehera 					(0x1 << ESR_CTL_LOSADJ_2_SHIFT) | \
24345196Ssbehera 					(0x1 << ESR_CTL_LOSADJ_3_SHIFT))
24353859Sml29623 
24363859Sml29623 /* ESR Neptune Serdes Test Configuration Register */
24373859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_0_MASK	0x00000003
24383859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_0_SHIFT	0
24393859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_1_MASK	0x0000000c
24403859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_1_SHIFT	2
24413859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_2_MASK	0x00000030
24423859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_2_SHIFT	4
24433859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_3_MASK	0x000000c0
24443859Sml29623 #define	ESR_TSTCFG_LBTEST_MD_3_SHIFT	6
24455196Ssbehera #define	ESR_TSTCFG_LBTEST_PAD		(ESR_PAD_LOOPBACK_CH3 | \
24465196Ssbehera 					ESR_PAD_LOOPBACK_CH2 | \
24475196Ssbehera 					ESR_PAD_LOOPBACK_CH1 | \
24485196Ssbehera 					ESR_PAD_LOOPBACK_CH0)
24493859Sml29623 
24503859Sml29623 /* ESR Neptune Ethernet RGMII Configuration Register */
24513859Sml29623 #define	ESR_RGMII_PT0_IN_USE		0x00000001
24523859Sml29623 #define	ESR_RGMII_PT1_IN_USE		0x00000002
24533859Sml29623 #define	ESR_RGMII_PT2_IN_USE		0x00000004
24543859Sml29623 #define	ESR_RGMII_PT3_IN_USE		0x00000008
24553859Sml29623 #define	ESR_RGMII_REG_RW_TEST		0x00000010
24563859Sml29623 
24573859Sml29623 /* ESR Internal Signals Observation Register */
24583859Sml29623 #define	ESR_SIG_MASK			0xFFFFFFFF
24593859Sml29623 #define	ESR_SIG_P0_BITS_MASK		0x33E0000F
24603859Sml29623 #define	ESR_SIG_P1_BITS_MASK		0x0C1F00F0
24613859Sml29623 #define	ESR_SIG_SERDES_RDY0_P0		0x20000000
24623859Sml29623 #define	ESR_SIG_DETECT0_P0		0x10000000
24633859Sml29623 #define	ESR_SIG_SERDES_RDY0_P1		0x08000000
24643859Sml29623 #define	ESR_SIG_DETECT0_P1		0x04000000
24653859Sml29623 #define	ESR_SIG_XSERDES_RDY_P0		0x02000000
24663859Sml29623 #define	ESR_SIG_XDETECT_P0_CH3		0x01000000
24673859Sml29623 #define	ESR_SIG_XDETECT_P0_CH2		0x00800000
24683859Sml29623 #define	ESR_SIG_XDETECT_P0_CH1		0x00400000
24693859Sml29623 #define	ESR_SIG_XDETECT_P0_CH0		0x00200000
24703859Sml29623 #define	ESR_SIG_XSERDES_RDY_P1		0x00100000
24713859Sml29623 #define	ESR_SIG_XDETECT_P1_CH3		0x00080000
24723859Sml29623 #define	ESR_SIG_XDETECT_P1_CH2		0x00040000
24733859Sml29623 #define	ESR_SIG_XDETECT_P1_CH1		0x00020000
24743859Sml29623 #define	ESR_SIG_XDETECT_P1_CH0		0x00010000
24753859Sml29623 #define	ESR_SIG_LOS_P1_CH3		0x00000080
24763859Sml29623 #define	ESR_SIG_LOS_P1_CH2		0x00000040
24773859Sml29623 #define	ESR_SIG_LOS_P1_CH1		0x00000020
24783859Sml29623 #define	ESR_SIG_LOS_P1_CH0		0x00000010
24793859Sml29623 #define	ESR_SIG_LOS_P0_CH3		0x00000008
24803859Sml29623 #define	ESR_SIG_LOS_P0_CH2		0x00000004
24813859Sml29623 #define	ESR_SIG_LOS_P0_CH1		0x00000002
24823859Sml29623 #define	ESR_SIG_LOS_P0_CH0		0x00000001
24835196Ssbehera #define	ESR_SIG_P0_BITS_MASK_1G		(ESR_SIG_SERDES_RDY0_P0 | \
24845196Ssbehera 					ESR_SIG_DETECT0_P0)
24855196Ssbehera #define	ESR_SIG_P1_BITS_MASK_1G		(ESR_SIG_SERDES_RDY0_P1 | \
24865196Ssbehera 					ESR_SIG_DETECT0_P1)
24873859Sml29623 
24883859Sml29623 /* ESR Debug Selection Register */
24893859Sml29623 #define	ESR_DEBUG_SEL_MASK		0x00000003f
24903859Sml29623 
24913859Sml29623 /* ESR Test Configuration Register */
24923859Sml29623 #define	ESR_NO_LOOPBACK_CH3		(0x0 << 6)
24933859Sml29623 #define	ESR_EWRAP_CH3			(0x1 << 6)
24943859Sml29623 #define	ESR_PAD_LOOPBACK_CH3		(0x2 << 6)
24953859Sml29623 #define	ESR_REVLOOPBACK_CH3		(0x3 << 6)
24963859Sml29623 #define	ESR_NO_LOOPBACK_CH2		(0x0 << 4)
24973859Sml29623 #define	ESR_EWRAP_CH2			(0x1 << 4)
24983859Sml29623 #define	ESR_PAD_LOOPBACK_CH2		(0x2 << 4)
24993859Sml29623 #define	ESR_REVLOOPBACK_CH2		(0x3 << 4)
25003859Sml29623 #define	ESR_NO_LOOPBACK_CH1		(0x0 << 2)
25013859Sml29623 #define	ESR_EWRAP_CH1			(0x1 << 2)
25023859Sml29623 #define	ESR_PAD_LOOPBACK_CH1		(0x2 << 2)
25033859Sml29623 #define	ESR_REVLOOPBACK_CH1		(0x3 << 2)
25043859Sml29623 #define	ESR_NO_LOOPBACK_CH0		0x0
25053859Sml29623 #define	ESR_EWRAP_CH0			0x1
25063859Sml29623 #define	ESR_PAD_LOOPBACK_CH0		0x2
25073859Sml29623 #define	ESR_REVLOOPBACK_CH0		0x3
25083859Sml29623 
25093859Sml29623 /* convert values */
25103859Sml29623 #define	NXGE_BASE(x, y)	\
25113859Sml29623 	(((y) << (x ## _SHIFT)) & (x ## _MASK))
25123859Sml29623 
25133859Sml29623 #define	NXGE_VAL_GET(fieldname, regval)		\
25143859Sml29623 	(((regval) & ((fieldname) ## _MASK)) >> ((fieldname) ## _SHIFT))
25153859Sml29623 
25163859Sml29623 #define	NXGE_VAL_SET(fieldname, regval, val)		\
25173859Sml29623 {							\
25183859Sml29623 	(regval) &= ~((fieldname) ## _MASK);		\
25193859Sml29623 	(regval) |= ((val) << (fieldname ## _SHIFT)); 	\
25203859Sml29623 }
25213859Sml29623 
25223859Sml29623 
25233859Sml29623 #ifdef	__cplusplus
25243859Sml29623 }
25253859Sml29623 #endif
25263859Sml29623 
25273859Sml29623 #endif	/* _SYS_MAC_NXGE_MAC_HW_H */
2528