xref: /onnv-gate/usr/src/uts/common/io/nxge/npi/npi_mac.h (revision 6495:1a95fa8c7c94)
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 /*
22*6495Sspeer  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
233859Sml29623  * Use is subject to license terms.
243859Sml29623  */
253859Sml29623 
263859Sml29623 #ifndef _NPI_MAC_H
273859Sml29623 #define	_NPI_MAC_H
283859Sml29623 
293859Sml29623 #pragma ident	"%Z%%M%	%I%	%E% SMI"
303859Sml29623 
313859Sml29623 #ifdef	__cplusplus
323859Sml29623 extern "C" {
333859Sml29623 #endif
343859Sml29623 
353859Sml29623 #include <npi.h>
363859Sml29623 #include <nxge_mac_hw.h>
373859Sml29623 #include <nxge_mii.h>
383859Sml29623 
393859Sml29623 typedef struct _npi_mac_addr {
403859Sml29623 	uint16_t	w0;
413859Sml29623 	uint16_t	w1;
423859Sml29623 	uint16_t	w2;
433859Sml29623 } npi_mac_addr_t;
443859Sml29623 
453859Sml29623 typedef enum npi_mac_attr {
463859Sml29623 	MAC_PORT_MODE = 0,
473859Sml29623 	MAC_PORT_FRAME_SIZE,
483859Sml29623 	MAC_PORT_ADDR,
493859Sml29623 	MAC_PORT_ADDR_FILTER,
503859Sml29623 	MAC_PORT_ADDR_FILTER_MASK,
513859Sml29623 	XMAC_PORT_IPG,
523859Sml29623 	XMAC_10G_PORT_IPG,
533859Sml29623 	BMAC_PORT_MAX_BURST_SIZE,
543859Sml29623 	BMAC_PORT_PA_SIZE,
553859Sml29623 	BMAC_PORT_CTRL_TYPE
563859Sml29623 } npi_mac_attr_t;
573859Sml29623 
583859Sml29623 /* MAC Mode options */
593859Sml29623 
603859Sml29623 typedef enum npi_mac_mode_e {
613859Sml29623 	MAC_MII_MODE = 0,
623859Sml29623 	MAC_GMII_MODE,
633859Sml29623 	MAC_XGMII_MODE
643859Sml29623 } npi_mac_mode_t;
653859Sml29623 
663859Sml29623 typedef enum npi_mac_reset_e {
673859Sml29623 	TX_MAC_RESET = 1,
683859Sml29623 	RX_MAC_RESET,
693859Sml29623 	XTX_MAC_REG_RESET,
703859Sml29623 	XRX_MAC_REG_RESET,
713859Sml29623 	XTX_MAC_LOGIC_RESET,
723859Sml29623 	XRX_MAC_LOGIC_RESET,
733859Sml29623 	XTX_MAC_RESET_ALL,
743859Sml29623 	XRX_MAC_RESET_ALL,
753859Sml29623 	BMAC_RESET_ALL,
763859Sml29623 	XMAC_RESET_ALL
773859Sml29623 } npi_mac_reset_t;
783859Sml29623 
793859Sml29623 typedef enum xmac_tx_iconfig_e {
803859Sml29623 	ICFG_XMAC_TX_FRAME_XMIT 	= XMAC_TX_FRAME_XMIT,
813859Sml29623 	ICFG_XMAC_TX_UNDERRUN		= XMAC_TX_UNDERRUN,
823859Sml29623 	ICFG_XMAC_TX_MAX_PACKET_ERR	= XMAC_TX_MAX_PACKET_ERR,
833859Sml29623 	ICFG_XMAC_TX_OVERFLOW		= XMAC_TX_OVERFLOW,
843859Sml29623 	ICFG_XMAC_TX_FIFO_XFR_ERR	= XMAC_TX_FIFO_XFR_ERR,
853859Sml29623 	ICFG_XMAC_TX_BYTE_CNT_EXP	= XMAC_TX_BYTE_CNT_EXP,
863859Sml29623 	ICFG_XMAC_TX_FRAME_CNT_EXP	= XMAC_TX_FRAME_CNT_EXP,
873859Sml29623 	ICFG_XMAC_TX_ALL = (XMAC_TX_FRAME_XMIT | XMAC_TX_UNDERRUN |
883859Sml29623 				XMAC_TX_MAX_PACKET_ERR | XMAC_TX_OVERFLOW |
893859Sml29623 				XMAC_TX_FIFO_XFR_ERR |  XMAC_TX_BYTE_CNT_EXP |
903859Sml29623 				XMAC_TX_FRAME_CNT_EXP)
913859Sml29623 } xmac_tx_iconfig_t;
923859Sml29623 
933859Sml29623 typedef enum xmac_rx_iconfig_e {
943859Sml29623 	ICFG_XMAC_RX_FRAME_RCVD		= XMAC_RX_FRAME_RCVD,
953859Sml29623 	ICFG_XMAC_RX_OVERFLOW		= XMAC_RX_OVERFLOW,
963859Sml29623 	ICFG_XMAC_RX_UNDERFLOW		= XMAC_RX_UNDERFLOW,
973859Sml29623 	ICFG_XMAC_RX_CRC_ERR_CNT_EXP	= XMAC_RX_CRC_ERR_CNT_EXP,
983859Sml29623 	ICFG_XMAC_RX_LEN_ERR_CNT_EXP	= XMAC_RX_LEN_ERR_CNT_EXP,
993859Sml29623 	ICFG_XMAC_RX_VIOL_ERR_CNT_EXP	= XMAC_RX_VIOL_ERR_CNT_EXP,
1003859Sml29623 	ICFG_XMAC_RX_OCT_CNT_EXP	= XMAC_RX_OCT_CNT_EXP,
1013859Sml29623 	ICFG_XMAC_RX_HST_CNT1_EXP	= XMAC_RX_HST_CNT1_EXP,
1023859Sml29623 	ICFG_XMAC_RX_HST_CNT2_EXP	= XMAC_RX_HST_CNT2_EXP,
1033859Sml29623 	ICFG_XMAC_RX_HST_CNT3_EXP	= XMAC_RX_HST_CNT3_EXP,
1043859Sml29623 	ICFG_XMAC_RX_HST_CNT4_EXP	= XMAC_RX_HST_CNT4_EXP,
1053859Sml29623 	ICFG_XMAC_RX_HST_CNT5_EXP	= XMAC_RX_HST_CNT5_EXP,
1063859Sml29623 	ICFG_XMAC_RX_HST_CNT6_EXP	= XMAC_RX_HST_CNT6_EXP,
1073859Sml29623 	ICFG_XMAC_RX_BCAST_CNT_EXP	= XMAC_RX_BCAST_CNT_EXP,
1083859Sml29623 	ICFG_XMAC_RX_MCAST_CNT_EXP	= XMAC_RX_MCAST_CNT_EXP,
1093859Sml29623 	ICFG_XMAC_RX_FRAG_CNT_EXP	= XMAC_RX_FRAG_CNT_EXP,
1103859Sml29623 	ICFG_XMAC_RX_ALIGNERR_CNT_EXP	= XMAC_RX_ALIGNERR_CNT_EXP,
1113859Sml29623 	ICFG_XMAC_RX_LINK_FLT_CNT_EXP	= XMAC_RX_LINK_FLT_CNT_EXP,
1123859Sml29623 	ICFG_XMAC_RX_HST_CNT7_EXP	= XMAC_RX_HST_CNT7_EXP,
1133859Sml29623 	ICFG_XMAC_RX_REMOTE_FLT_DET	= XMAC_RX_REMOTE_FLT_DET,
1143859Sml29623 	ICFG_XMAC_RX_LOCAL_FLT_DET	= XMAC_RX_LOCAL_FLT_DET,
1153859Sml29623 	ICFG_XMAC_RX_ALL = (XMAC_RX_FRAME_RCVD | XMAC_RX_OVERFLOW |
1163859Sml29623 				XMAC_RX_UNDERFLOW | XMAC_RX_CRC_ERR_CNT_EXP |
1173859Sml29623 				XMAC_RX_LEN_ERR_CNT_EXP |
1183859Sml29623 				XMAC_RX_VIOL_ERR_CNT_EXP |
1193859Sml29623 				XMAC_RX_OCT_CNT_EXP | XMAC_RX_HST_CNT1_EXP |
1203859Sml29623 				XMAC_RX_HST_CNT2_EXP | XMAC_RX_HST_CNT3_EXP |
1213859Sml29623 				XMAC_RX_HST_CNT4_EXP | XMAC_RX_HST_CNT5_EXP |
1223859Sml29623 				XMAC_RX_HST_CNT6_EXP | XMAC_RX_BCAST_CNT_EXP |
1233859Sml29623 				XMAC_RX_MCAST_CNT_EXP | XMAC_RX_FRAG_CNT_EXP |
1243859Sml29623 				XMAC_RX_ALIGNERR_CNT_EXP |
1253859Sml29623 				XMAC_RX_LINK_FLT_CNT_EXP |
1263859Sml29623 				XMAC_RX_HST_CNT7_EXP |
1273859Sml29623 				XMAC_RX_REMOTE_FLT_DET | XMAC_RX_LOCAL_FLT_DET)
1283859Sml29623 } xmac_rx_iconfig_t;
1293859Sml29623 
1303859Sml29623 typedef enum xmac_ctl_iconfig_e {
1313859Sml29623 	ICFG_XMAC_CTRL_PAUSE_RCVD	= XMAC_CTRL_PAUSE_RCVD,
1323859Sml29623 	ICFG_XMAC_CTRL_PAUSE_STATE	= XMAC_CTRL_PAUSE_STATE,
1333859Sml29623 	ICFG_XMAC_CTRL_NOPAUSE_STATE	= XMAC_CTRL_NOPAUSE_STATE,
1343859Sml29623 	ICFG_XMAC_CTRL_ALL = (XMAC_CTRL_PAUSE_RCVD | XMAC_CTRL_PAUSE_STATE |
1353859Sml29623 				XMAC_CTRL_NOPAUSE_STATE)
1363859Sml29623 } xmac_ctl_iconfig_t;
1373859Sml29623 
1383859Sml29623 
1393859Sml29623 typedef enum bmac_tx_iconfig_e {
1403859Sml29623 	ICFG_BMAC_TX_FRAME_SENT 	= MAC_TX_FRAME_XMIT,
1413859Sml29623 	ICFG_BMAC_TX_UNDERFLOW		= MAC_TX_UNDERRUN,
1423859Sml29623 	ICFG_BMAC_TX_MAXPKTSZ_ERR	= MAC_TX_MAX_PACKET_ERR,
1433859Sml29623 	ICFG_BMAC_TX_BYTE_CNT_EXP	= MAC_TX_BYTE_CNT_EXP,
1443859Sml29623 	ICFG_BMAC_TX_FRAME_CNT_EXP	= MAC_TX_FRAME_CNT_EXP,
1453859Sml29623 	ICFG_BMAC_TX_ALL = (MAC_TX_FRAME_XMIT | MAC_TX_UNDERRUN |
1463859Sml29623 				MAC_TX_MAX_PACKET_ERR | MAC_TX_BYTE_CNT_EXP |
1473859Sml29623 				MAC_TX_FRAME_CNT_EXP)
1483859Sml29623 } bmac_tx_iconfig_t;
1493859Sml29623 
1503859Sml29623 typedef enum bmac_rx_iconfig_e {
1513859Sml29623 	ICFG_BMAC_RX_FRAME_RCVD		= MAC_RX_FRAME_RECV,
1523859Sml29623 	ICFG_BMAC_RX_OVERFLOW		= MAC_RX_OVERFLOW,
1533859Sml29623 	ICFG_BMAC_RX_FRAME_CNT_EXP	= MAC_RX_FRAME_COUNT,
1543859Sml29623 	ICFG_BMAC_RX_CRC_ERR_CNT_EXP	= MAC_RX_ALIGN_ERR,
1553859Sml29623 	ICFG_BMAC_RX_LEN_ERR_CNT_EXP	= MAC_RX_CRC_ERR,
1563859Sml29623 	ICFG_BMAC_RX_VIOL_ERR_CNT_EXP	= MAC_RX_LEN_ERR,
1573859Sml29623 	ICFG_BMAC_RX_BYTE_CNT_EXP	= MAC_RX_VIOL_ERR,
1583859Sml29623 	ICFG_BMAC_RX_ALIGNERR_CNT_EXP	= MAC_RX_BYTE_CNT_EXP,
1593859Sml29623 	ICFG_BMAC_RX_ALL = (MAC_RX_FRAME_RECV | MAC_RX_OVERFLOW |
1603859Sml29623 				MAC_RX_FRAME_COUNT | MAC_RX_ALIGN_ERR |
1613859Sml29623 				MAC_RX_CRC_ERR | MAC_RX_LEN_ERR |
1623859Sml29623 				MAC_RX_VIOL_ERR | MAC_RX_BYTE_CNT_EXP)
1633859Sml29623 } bmac_rx_iconfig_t;
1643859Sml29623 
1653859Sml29623 typedef enum bmac_ctl_iconfig_e {
1663859Sml29623 	ICFG_BMAC_CTL_RCVPAUSE		= MAC_CTRL_PAUSE_RECEIVED,
1673859Sml29623 	ICFG_BMAC_CTL_INPAUSE_ST	= MAC_CTRL_PAUSE_STATE,
1683859Sml29623 	ICFG_BMAC_CTL_INNOTPAUSE_ST	= MAC_CTRL_NOPAUSE_STATE,
1693859Sml29623 	ICFG_BMAC_CTL_ALL = (MAC_CTRL_PAUSE_RECEIVED | MAC_CTRL_PAUSE_STATE |
1703859Sml29623 				MAC_CTRL_NOPAUSE_STATE)
1713859Sml29623 } bmac_ctl_iconfig_t;
1723859Sml29623 
1733859Sml29623 typedef	enum xmac_tx_config_e {
1743859Sml29623 	CFG_XMAC_TX			= 0x00000001,
1753859Sml29623 	CFG_XMAC_TX_STRETCH_MODE	= 0x00000002,
1763859Sml29623 	CFG_XMAC_VAR_IPG		= 0x00000004,
1773859Sml29623 	CFG_XMAC_TX_CRC			= 0x00000008,
1783859Sml29623 	CFG_XMAC_TX_ALL			= 0x0000000F
1793859Sml29623 } xmac_tx_config_t;
1803859Sml29623 
1813859Sml29623 typedef enum xmac_rx_config_e {
1823859Sml29623 	CFG_XMAC_RX			= 0x00000001,
1833859Sml29623 	CFG_XMAC_RX_PROMISCUOUS		= 0x00000002,
1843859Sml29623 	CFG_XMAC_RX_PROMISCUOUSGROUP	= 0x00000004,
1853859Sml29623 	CFG_XMAC_RX_ERRCHK		= 0x00000008,
1863859Sml29623 	CFG_XMAC_RX_CRC_CHK		= 0x00000010,
1873859Sml29623 	CFG_XMAC_RX_RESV_MULTICAST	= 0x00000020,
1883859Sml29623 	CFG_XMAC_RX_CODE_VIO_CHK	= 0x00000040,
1893859Sml29623 	CFG_XMAC_RX_HASH_FILTER		= 0x00000080,
1903859Sml29623 	CFG_XMAC_RX_ADDR_FILTER		= 0x00000100,
1913859Sml29623 	CFG_XMAC_RX_STRIP_CRC		= 0x00000200,
1923859Sml29623 	CFG_XMAC_RX_PAUSE		= 0x00000400,
1933859Sml29623 	CFG_XMAC_RX_PASS_FC_FRAME	= 0x00000800,
1943859Sml29623 	CFG_XMAC_RX_MAC2IPP_PKT_CNT	= 0x00001000,
1953859Sml29623 	CFG_XMAC_RX_ALL			= 0x00001FFF
1963859Sml29623 } xmac_rx_config_t;
1973859Sml29623 
1983859Sml29623 typedef	enum xmac_xif_config_e {
1993859Sml29623 	CFG_XMAC_XIF_LED_FORCE		= 0x00000001,
2003859Sml29623 	CFG_XMAC_XIF_LED_POLARITY	= 0x00000002,
2013859Sml29623 	CFG_XMAC_XIF_SEL_POR_CLK_SRC	= 0x00000004,
2023859Sml29623 	CFG_XMAC_XIF_TX_OUTPUT		= 0x00000008,
2033859Sml29623 	CFG_XMAC_XIF_LOOPBACK		= 0x00000010,
2043859Sml29623 	CFG_XMAC_XIF_LFS		= 0x00000020,
2053859Sml29623 	CFG_XMAC_XIF_XPCS_BYPASS	= 0x00000040,
2063859Sml29623 	CFG_XMAC_XIF_1G_PCS_BYPASS	= 0x00000080,
2073859Sml29623 	CFG_XMAC_XIF_SEL_CLK_25MHZ	= 0x00000100,
2083859Sml29623 	CFG_XMAC_XIF_ALL		= 0x000001FF
2093859Sml29623 } xmac_xif_config_t;
2103859Sml29623 
2113859Sml29623 typedef	enum bmac_tx_config_e {
2123859Sml29623 	CFG_BMAC_TX			= 0x00000001,
2133859Sml29623 	CFG_BMAC_TX_CRC			= 0x00000002,
2143859Sml29623 	CFG_BMAC_TX_ALL			= 0x00000003
2153859Sml29623 } bmac_tx_config_t;
2163859Sml29623 
2173859Sml29623 typedef enum bmac_rx_config_e {
2183859Sml29623 	CFG_BMAC_RX			= 0x00000001,
2193859Sml29623 	CFG_BMAC_RX_STRIP_PAD		= 0x00000002,
2203859Sml29623 	CFG_BMAC_RX_STRIP_CRC		= 0x00000004,
2213859Sml29623 	CFG_BMAC_RX_PROMISCUOUS		= 0x00000008,
2223859Sml29623 	CFG_BMAC_RX_PROMISCUOUSGROUP	= 0x00000010,
2233859Sml29623 	CFG_BMAC_RX_HASH_FILTER		= 0x00000020,
2243859Sml29623 	CFG_BMAC_RX_ADDR_FILTER		= 0x00000040,
2253859Sml29623 	CFG_BMAC_RX_DISCARD_ON_ERR	= 0x00000080,
2263859Sml29623 	CFG_BMAC_RX_ALL			= 0x000000FF
2273859Sml29623 } bmac_rx_config_t;
2283859Sml29623 
2293859Sml29623 typedef	enum bmac_xif_config_e {
2303859Sml29623 	CFG_BMAC_XIF_TX_OUTPUT		= 0x00000001,
2313859Sml29623 	CFG_BMAC_XIF_LOOPBACK		= 0x00000002,
2323859Sml29623 	CFG_BMAC_XIF_GMII_MODE		= 0x00000008,
2333859Sml29623 	CFG_BMAC_XIF_LINKLED		= 0x00000020,
2343859Sml29623 	CFG_BMAC_XIF_LED_POLARITY	= 0x00000040,
2353859Sml29623 	CFG_BMAC_XIF_SEL_CLK_25MHZ	= 0x00000080,
2363859Sml29623 	CFG_BMAC_XIF_ALL		= 0x000000FF
2373859Sml29623 } bmac_xif_config_t;
2383859Sml29623 
2393859Sml29623 
2403859Sml29623 typedef enum xmac_ipg_e {
2413859Sml29623 	XGMII_IPG_12_15 = 0,
2423859Sml29623 	XGMII_IPG_16_19,
2433859Sml29623 	XGMII_IPG_20_23,
2443859Sml29623 	MII_GMII_IPG_12,
2453859Sml29623 	MII_GMII_IPG_13,
2463859Sml29623 	MII_GMII_IPG_14,
2473859Sml29623 	MII_GMII_IPG_15,
2483859Sml29623 	MII_GMII_IPG_16
2493859Sml29623 } xmac_ipg_t;
2503859Sml29623 
2513859Sml29623 typedef	enum xpcs_reg_e {
2523859Sml29623 	XPCS_REG_CONTROL1,
2533859Sml29623 	XPCS_REG_STATUS1,
2543859Sml29623 	XPCS_REG_DEVICE_ID,
2553859Sml29623 	XPCS_REG_SPEED_ABILITY,
2563859Sml29623 	XPCS_REG_DEVICE_IN_PKG,
2573859Sml29623 	XPCS_REG_CONTROL2,
2583859Sml29623 	XPCS_REG_STATUS2,
2593859Sml29623 	XPCS_REG_PKG_ID,
2603859Sml29623 	XPCS_REG_STATUS,
2613859Sml29623 	XPCS_REG_TEST_CONTROL,
2623859Sml29623 	XPCS_REG_CONFIG_VENDOR1,
2633859Sml29623 	XPCS_REG_DIAG_VENDOR2,
2643859Sml29623 	XPCS_REG_MASK1,
2653859Sml29623 	XPCS_REG_PACKET_COUNTER,
2663859Sml29623 	XPCS_REG_TX_STATEMACHINE,
2673859Sml29623 	XPCS_REG_DESCWERR_COUNTER,
2683859Sml29623 	XPCS_REG_SYMBOL_ERR_L0_1_COUNTER,
2693859Sml29623 	XPCS_REG_SYMBOL_ERR_L2_3_COUNTER,
2703859Sml29623 	XPCS_REG_TRAINING_VECTOR
2713859Sml29623 } xpcs_reg_t;
2723859Sml29623 
2733859Sml29623 #define	IS_XMAC_PORT_NUM_VALID(portn)\
2743859Sml29623 	((portn == XMAC_PORT_0) || (portn == XMAC_PORT_1))
2753859Sml29623 
2763859Sml29623 #define	IS_BMAC_PORT_NUM_VALID(portn)\
2773859Sml29623 	((portn == BMAC_PORT_0) || (portn == BMAC_PORT_1))
2783859Sml29623 
2793859Sml29623 #define	XMAC_REG_WR(handle, portn, reg, val)\
2803859Sml29623 	NXGE_REG_WR64(handle, XMAC_REG_ADDR((portn), (reg)), (val))
2813859Sml29623 
2823859Sml29623 #define	XMAC_REG_RD(handle, portn, reg, val_p)\
2833859Sml29623 	NXGE_REG_RD64(handle, XMAC_REG_ADDR((portn), (reg)), (val_p))
2843859Sml29623 
2853859Sml29623 #define	BMAC_REG_WR(handle, portn, reg, val)\
2863859Sml29623 	NXGE_REG_WR64(handle, BMAC_REG_ADDR((portn), (reg)), (val))
2873859Sml29623 
2883859Sml29623 #define	BMAC_REG_RD(handle, portn, reg, val_p)\
2893859Sml29623 	NXGE_REG_RD64(handle, BMAC_REG_ADDR((portn), (reg)), (val_p))
2903859Sml29623 
2913859Sml29623 #define	PCS_REG_WR(handle, portn, reg, val)\
2923859Sml29623 	NXGE_REG_WR64(handle, PCS_REG_ADDR((portn), (reg)), (val))
2933859Sml29623 
2943859Sml29623 #define	PCS_REG_RD(handle, portn, reg, val_p)\
2953859Sml29623 	NXGE_REG_RD64(handle, PCS_REG_ADDR((portn), (reg)), (val_p))
2963859Sml29623 
2973859Sml29623 #define	XPCS_REG_WR(handle, portn, reg, val)\
2983859Sml29623 	NXGE_REG_WR64(handle, XPCS_ADDR((portn), (reg)), (val))
2993859Sml29623 
3003859Sml29623 #define	XPCS_REG_RD(handle, portn, reg, val_p)\
3013859Sml29623 	NXGE_REG_RD64(handle, XPCS_ADDR((portn), (reg)), (val_p))
3023859Sml29623 
3033859Sml29623 #define	MIF_REG_WR(handle, reg, val)\
3043859Sml29623 	NXGE_REG_WR64(handle, MIF_ADDR((reg)), (val))
3053859Sml29623 
3063859Sml29623 #define	MIF_REG_RD(handle, reg, val_p)\
3073859Sml29623 	NXGE_REG_RD64(handle, MIF_ADDR((reg)), (val_p))
3083859Sml29623 
3093859Sml29623 
3103859Sml29623 /*
3113859Sml29623  * When MIF_REG_RD is called inside a poll loop and if the poll takes
3123859Sml29623  * very long time to complete, then each poll will print a rt_show_reg
3133859Sml29623  * result on the screen and the rtrace "register show" result may
3143859Sml29623  * become too messy to read.  The solution is to call MIF_REG_RD_NO_SHOW
3153859Sml29623  * instead of MIF_REG_RD in a polling loop. When COSIM or REG_SHOW is
3163859Sml29623  * not defined, this macro is the same as MIF_REG_RD.  When both COSIM
3173859Sml29623  * and REG_SHOW are defined, this macro calls NXGE_REG_RD64_NO_SHOW
3183859Sml29623  * which does not call rt_show_reg.
3193859Sml29623  */
3203859Sml29623 #if defined(COSIM) && defined(REG_SHOW)
3213859Sml29623 #define	MIF_REG_RD_NO_SHOW(handle, reg, val_p)\
3223859Sml29623 	NXGE_REG_RD64_NO_SHOW(handle, MIF_ADDR((reg)), (val_p))
3233859Sml29623 #else
3243859Sml29623 	/*	If not COSIM or REG_SHOW, still show */
3253859Sml29623 #define	MIF_REG_RD_NO_SHOW(handle, reg, val_p)\
3263859Sml29623 	NXGE_REG_RD64(handle, MIF_ADDR((reg)), (val_p))
3273859Sml29623 #endif
3283859Sml29623 
3293859Sml29623 #define	ESR_REG_WR(handle, reg, val)\
3303859Sml29623 	NXGE_REG_WR64(handle, ESR_ADDR((reg)), (val))
3313859Sml29623 
3323859Sml29623 #define	ESR_REG_RD(handle, reg, val_p)\
3333859Sml29623 	NXGE_REG_RD64(handle, ESR_ADDR((reg)), (val_p))
3343859Sml29623 
3353859Sml29623 /* Macros to read/modify MAC attributes */
3363859Sml29623 
3373859Sml29623 #define	SET_MAC_ATTR1(handle, p, portn, attr, val, stat) {\
3383859Sml29623 	p.type = attr;\
3393859Sml29623 	p.idata[0] = (uint32_t)val;\
3403859Sml29623 	stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
3413859Sml29623 }
3423859Sml29623 
3433859Sml29623 #define	SET_MAC_ATTR2(handle, p, portn, attr, val0, val1, stat) {\
3443859Sml29623 	p.type = attr;\
3453859Sml29623 	p.idata[0] = (uint32_t)val0;\
3463859Sml29623 	p.idata[1] = (uint32_t)val1;\
3473859Sml29623 	stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
3483859Sml29623 }
3493859Sml29623 
3503859Sml29623 #define	SET_MAC_ATTR3(handle, p, portn, attr, val0, val1, val2, stat) {\
3513859Sml29623 	p.type = attr;\
3523859Sml29623 	p.idata[0] = (uint32_t)val0;\
3533859Sml29623 	p.idata[1] = (uint32_t)val1;\
3543859Sml29623 	p.idata[2] = (uint32_t)val2;\
3553859Sml29623 	stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
3563859Sml29623 }
3573859Sml29623 
3583859Sml29623 #define	SET_MAC_ATTR4(handle, p, portn, attr, val0, val1, val2, val3, stat) {\
3593859Sml29623 	p.type = attr;\
3603859Sml29623 	p.idata[0] = (uint32_t)val0;\
3613859Sml29623 	p.idata[1] = (uint32_t)val1;\
3623859Sml29623 	p.idata[2] = (uint32_t)val2;\
3633859Sml29623 	p.idata[3] = (uint32_t)val3;\
3643859Sml29623 	stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
3653859Sml29623 }
3663859Sml29623 
3673859Sml29623 #define	GET_MAC_ATTR1(handle, p, portn, attr, val, stat) {\
3683859Sml29623 	p.type = attr;\
3693859Sml29623 	if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
3703859Sml29623 					(npi_attr_t *)&p)) == NPI_SUCCESS) {\
3713859Sml29623 		val = p.odata[0];\
3723859Sml29623 	}\
3733859Sml29623 }
3743859Sml29623 
3753859Sml29623 #define	GET_MAC_ATTR2(handle, p, portn, attr, val0, val1, stat) {\
3763859Sml29623 	p.type = attr;\
3773859Sml29623 	if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
3783859Sml29623 					(npi_attr_t *)&p)) == NPI_SUCCESS) {\
3793859Sml29623 		val0 = p.odata[0];\
3803859Sml29623 		val1 = p.odata[1];\
3813859Sml29623 	}\
3823859Sml29623 }
3833859Sml29623 
3843859Sml29623 #define	GET_MAC_ATTR3(handle, p, portn, attr, val0, val1, \
3853859Sml29623 			val2, stat) {\
3863859Sml29623 	p.type = attr;\
3873859Sml29623 	if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
3883859Sml29623 					(npi_attr_t *)&p)) == NPI_SUCCESS) {\
3893859Sml29623 		val0 = p.odata[0];\
3903859Sml29623 		val1 = p.odata[1];\
3913859Sml29623 		val2 = p.odata[2];\
3923859Sml29623 	}\
3933859Sml29623 }
3943859Sml29623 
3953859Sml29623 #define	GET_MAC_ATTR4(handle, p, portn, attr, val0, val1, \
3963859Sml29623 			val2, val3, stat) {\
3973859Sml29623 	p.type = attr;\
3983859Sml29623 	if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
3993859Sml29623 					(npi_attr_t *)&p)) == NPI_SUCCESS) {\
4003859Sml29623 		val0 = p.odata[0];\
4013859Sml29623 		val1 = p.odata[1];\
4023859Sml29623 		val2 = p.odata[2];\
4033859Sml29623 		val3 = p.odata[3];\
4043859Sml29623 	}\
4053859Sml29623 }
4063859Sml29623 
4073859Sml29623 /* MAC specific errors */
4083859Sml29623 
4093859Sml29623 #define	MAC_PORT_ATTR_INVALID		0x50
4103859Sml29623 #define	MAC_RESET_MODE_INVALID		0x51
4113859Sml29623 #define	MAC_HASHTAB_ENTRY_INVALID	0x52
4123859Sml29623 #define	MAC_HOSTINFO_ENTRY_INVALID	0x53
4133859Sml29623 #define	MAC_ALT_ADDR_ENTRY_INVALID	0x54
4143859Sml29623 
4153859Sml29623 /* MAC error return macros */
4163859Sml29623 
4173859Sml29623 #define	NPI_MAC_PORT_INVALID(portn)	((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4183859Sml29623 					PORT_INVALID | IS_PORT | (portn << 12))
4193859Sml29623 #define	NPI_MAC_OPCODE_INVALID(portn)	((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4203859Sml29623 					OPCODE_INVALID |\
4213859Sml29623 					IS_PORT | (portn << 12))
4223859Sml29623 #define	NPI_MAC_HASHTAB_ENTRY_INVALID(portn)\
4233859Sml29623 					((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4243859Sml29623 					MAC_HASHTAB_ENTRY_INVALID |\
4253859Sml29623 					IS_PORT | (portn << 12))
4263859Sml29623 #define	NPI_MAC_HOSTINFO_ENTRY_INVALID(portn)\
4273859Sml29623 					((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4283859Sml29623 					MAC_HOSTINFO_ENTRY_INVALID |\
4293859Sml29623 					IS_PORT | (portn << 12))
4303859Sml29623 #define	NPI_MAC_ALT_ADDR_ENTRY_INVALID(portn)\
4313859Sml29623 					((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4323859Sml29623 					MAC_ALT_ADDR_ENTRY_INVALID |\
4333859Sml29623 					IS_PORT | (portn << 12))
4343859Sml29623 #define	NPI_MAC_PORT_ATTR_INVALID(portn)\
4353859Sml29623 					((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4363859Sml29623 					MAC_PORT_ATTR_INVALID |\
4373859Sml29623 					IS_PORT | (portn << 12))
4383859Sml29623 #define	NPI_MAC_RESET_MODE_INVALID(portn)\
4393859Sml29623 					((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4403859Sml29623 					MAC_RESET_MODE_INVALID |\
4413859Sml29623 					IS_PORT | (portn << 12))
4423859Sml29623 #define	NPI_MAC_PCS_REG_INVALID(portn)	((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4433859Sml29623 					REGISTER_INVALID |\
4443859Sml29623 					IS_PORT | (portn << 12))
4453859Sml29623 #define	NPI_TXMAC_RESET_FAILED(portn)	((TXMAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4463859Sml29623 					RESET_FAILED | IS_PORT | (portn << 12))
4473859Sml29623 #define	NPI_RXMAC_RESET_FAILED(portn)	((RXMAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4483859Sml29623 					RESET_FAILED | IS_PORT | (portn << 12))
4493859Sml29623 #define	NPI_MAC_CONFIG_INVALID(portn)	((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4503859Sml29623 					CONFIG_INVALID |\
4513859Sml29623 					IS_PORT | (portn << 12))
4523859Sml29623 #define	NPI_MAC_REG_INVALID(portn)	((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4533859Sml29623 					REGISTER_INVALID |\
4543859Sml29623 					IS_PORT | (portn << 12))
4553859Sml29623 #define	NPI_MAC_MII_READ_FAILED(portn)	((MIF_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4563859Sml29623 					READ_FAILED | IS_PORT | (portn << 12))
4573859Sml29623 #define	NPI_MAC_MII_WRITE_FAILED(portn)	((MIF_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
4583859Sml29623 					WRITE_FAILED | IS_PORT | (portn << 12))
4593859Sml29623 
4603859Sml29623 /* library functions prototypes */
4613859Sml29623 
4623859Sml29623 /* general mac functions */
4633859Sml29623 npi_status_t npi_mac_hashtab_entry(npi_handle_t, io_op_t,
4643859Sml29623 				uint8_t, uint8_t, uint16_t *);
4653859Sml29623 npi_status_t npi_mac_hostinfo_entry(npi_handle_t, io_op_t,
4663859Sml29623 				uint8_t, uint8_t,
4673859Sml29623 				hostinfo_t *);
4683859Sml29623 npi_status_t npi_mac_altaddr_enable(npi_handle_t, uint8_t,
4693859Sml29623 				uint8_t);
470*6495Sspeer npi_status_t npi_mac_altaddr_disable(npi_handle_t, uint8_t,
4713859Sml29623 				uint8_t);
4723859Sml29623 npi_status_t npi_mac_altaddr_entry(npi_handle_t, io_op_t,
4733859Sml29623 				uint8_t, uint8_t,
4743859Sml29623 				npi_mac_addr_t *);
4753859Sml29623 npi_status_t npi_mac_port_attr(npi_handle_t, io_op_t, uint8_t,
4763859Sml29623 				npi_attr_t *);
4773859Sml29623 npi_status_t npi_mac_get_link_status(npi_handle_t, uint8_t,
4783859Sml29623 				boolean_t *);
4793859Sml29623 npi_status_t npi_mac_get_10g_link_status(npi_handle_t, uint8_t,
4803859Sml29623 				boolean_t *);
4813859Sml29623 npi_status_t npi_mac_mif_mii_read(npi_handle_t, uint8_t,
4823859Sml29623 				uint8_t, uint16_t *);
4833859Sml29623 npi_status_t npi_mac_mif_mii_write(npi_handle_t, uint8_t,
4843859Sml29623 				uint8_t, uint16_t);
4853859Sml29623 npi_status_t npi_mac_mif_link_intr_enable(npi_handle_t, uint8_t,
4863859Sml29623 				uint8_t, uint16_t);
4873859Sml29623 npi_status_t npi_mac_mif_mdio_read(npi_handle_t, uint8_t,
4883859Sml29623 				uint8_t, uint16_t,
4893859Sml29623 				uint16_t *);
4903859Sml29623 npi_status_t npi_mac_mif_mdio_write(npi_handle_t, uint8_t,
4913859Sml29623 				uint8_t, uint16_t,
4923859Sml29623 				uint16_t);
4933859Sml29623 npi_status_t npi_mac_mif_mdio_link_intr_enable(npi_handle_t,
4943859Sml29623 				uint8_t, uint8_t,
4953859Sml29623 				uint16_t, uint16_t);
4963859Sml29623 npi_status_t npi_mac_mif_link_intr_disable(npi_handle_t, uint8_t);
4973859Sml29623 npi_status_t npi_mac_pcs_mii_read(npi_handle_t, uint8_t,
4983859Sml29623 				uint8_t, uint16_t *);
4993859Sml29623 npi_status_t npi_mac_pcs_mii_write(npi_handle_t, uint8_t,
5003859Sml29623 				uint8_t, uint16_t);
5013859Sml29623 npi_status_t npi_mac_pcs_link_intr_enable(npi_handle_t, uint8_t);
5023859Sml29623 npi_status_t npi_mac_pcs_link_intr_disable(npi_handle_t, uint8_t);
5033859Sml29623 npi_status_t npi_mac_pcs_reset(npi_handle_t, uint8_t);
5043859Sml29623 
5053859Sml29623 /* xmac functions */
5063859Sml29623 npi_status_t npi_xmac_reset(npi_handle_t, uint8_t,
5073859Sml29623 				npi_mac_reset_t);
5083859Sml29623 npi_status_t npi_xmac_xif_config(npi_handle_t, config_op_t,
5093859Sml29623 				uint8_t, xmac_xif_config_t);
5103859Sml29623 npi_status_t npi_xmac_tx_config(npi_handle_t, config_op_t,
5113859Sml29623 				uint8_t, xmac_tx_config_t);
5123859Sml29623 npi_status_t npi_xmac_rx_config(npi_handle_t, config_op_t,
5133859Sml29623 				uint8_t, xmac_rx_config_t);
5143859Sml29623 npi_status_t npi_xmac_tx_iconfig(npi_handle_t, config_op_t,
5153859Sml29623 				uint8_t, xmac_tx_iconfig_t);
5163859Sml29623 npi_status_t npi_xmac_rx_iconfig(npi_handle_t, config_op_t,
5173859Sml29623 				uint8_t, xmac_rx_iconfig_t);
5183859Sml29623 npi_status_t npi_xmac_ctl_iconfig(npi_handle_t, config_op_t,
5193859Sml29623 				uint8_t, xmac_ctl_iconfig_t);
5203859Sml29623 npi_status_t npi_xmac_tx_get_istatus(npi_handle_t, uint8_t,
5213859Sml29623 				xmac_tx_iconfig_t *);
5223859Sml29623 npi_status_t npi_xmac_rx_get_istatus(npi_handle_t, uint8_t,
5233859Sml29623 				xmac_rx_iconfig_t *);
5243859Sml29623 npi_status_t npi_xmac_ctl_get_istatus(npi_handle_t, uint8_t,
5253859Sml29623 				xmac_ctl_iconfig_t *);
5263859Sml29623 npi_status_t npi_xmac_xpcs_reset(npi_handle_t, uint8_t);
5273859Sml29623 npi_status_t npi_xmac_xpcs_enable(npi_handle_t, uint8_t);
5283859Sml29623 npi_status_t npi_xmac_xpcs_disable(npi_handle_t, uint8_t);
5293859Sml29623 npi_status_t npi_xmac_xpcs_read(npi_handle_t, uint8_t,
5303859Sml29623 				uint8_t, uint32_t *);
5313859Sml29623 npi_status_t npi_xmac_xpcs_write(npi_handle_t, uint8_t,
5323859Sml29623 				uint8_t, uint32_t);
5333859Sml29623 npi_status_t npi_xmac_xpcs_link_intr_enable(npi_handle_t, uint8_t);
5343859Sml29623 npi_status_t npi_xmac_xpcs_link_intr_disable(npi_handle_t,
5353859Sml29623 				uint8_t);
5363859Sml29623 npi_status_t npi_xmac_xif_led(npi_handle_t, uint8_t,
5373859Sml29623 				boolean_t);
5383859Sml29623 npi_status_t npi_xmac_zap_tx_counters(npi_handle_t, uint8_t);
5393859Sml29623 npi_status_t npi_xmac_zap_rx_counters(npi_handle_t, uint8_t);
5403859Sml29623 
5413859Sml29623 /* bmac functions */
5423859Sml29623 npi_status_t npi_bmac_reset(npi_handle_t, uint8_t,
5433859Sml29623 				npi_mac_reset_t mode);
5443859Sml29623 npi_status_t npi_bmac_tx_config(npi_handle_t, config_op_t,
5453859Sml29623 				uint8_t, bmac_tx_config_t);
5463859Sml29623 npi_status_t npi_bmac_rx_config(npi_handle_t, config_op_t,
5473859Sml29623 				uint8_t, bmac_rx_config_t);
5483859Sml29623 npi_status_t npi_bmac_rx_iconfig(npi_handle_t, config_op_t,
5493859Sml29623 				uint8_t, bmac_rx_iconfig_t);
5503859Sml29623 npi_status_t npi_bmac_xif_config(npi_handle_t, config_op_t,
5513859Sml29623 				uint8_t, bmac_xif_config_t);
5523859Sml29623 npi_status_t npi_bmac_tx_iconfig(npi_handle_t, config_op_t,
5533859Sml29623 				uint8_t, bmac_tx_iconfig_t);
5543859Sml29623 npi_status_t npi_bmac_ctl_iconfig(npi_handle_t, config_op_t,
5553859Sml29623 				uint8_t, bmac_ctl_iconfig_t);
5563859Sml29623 npi_status_t npi_bmac_tx_get_istatus(npi_handle_t, uint8_t,
5573859Sml29623 				bmac_tx_iconfig_t *);
5583859Sml29623 npi_status_t npi_bmac_rx_get_istatus(npi_handle_t, uint8_t,
5593859Sml29623 				bmac_rx_iconfig_t *);
5603859Sml29623 npi_status_t npi_bmac_ctl_get_istatus(npi_handle_t, uint8_t,
5613859Sml29623 				bmac_ctl_iconfig_t *);
5623859Sml29623 npi_status_t npi_bmac_send_pause(npi_handle_t, uint8_t,
5633859Sml29623 				uint16_t);
5643859Sml29623 npi_status_t npi_mac_dump_regs(npi_handle_t, uint8_t);
5653859Sml29623 
5663859Sml29623 /* MIF common functions */
5673859Sml29623 void npi_mac_mif_set_indirect_mode(npi_handle_t, boolean_t);
5685196Ssbehera void npi_mac_mif_set_atca_mode(npi_handle_t, boolean_t);
5693859Sml29623 
5703859Sml29623 #ifdef	__cplusplus
5713859Sml29623 }
5723859Sml29623 #endif
5733859Sml29623 
5743859Sml29623 #endif	/* _NPI_MAC_H */
575