xref: /titanic_51/usr/src/uts/common/sys/nxge/nxge_mac.h (revision 1bd6825caba5ece2838569ea639756aee59675a7)
16f45ec7bSml29623 /*
26f45ec7bSml29623  * CDDL HEADER START
36f45ec7bSml29623  *
46f45ec7bSml29623  * The contents of this file are subject to the terms of the
56f45ec7bSml29623  * Common Development and Distribution License (the "License").
66f45ec7bSml29623  * You may not use this file except in compliance with the License.
76f45ec7bSml29623  *
86f45ec7bSml29623  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96f45ec7bSml29623  * or http://www.opensolaris.org/os/licensing.
106f45ec7bSml29623  * See the License for the specific language governing permissions
116f45ec7bSml29623  * and limitations under the License.
126f45ec7bSml29623  *
136f45ec7bSml29623  * When distributing Covered Code, include this CDDL HEADER in each
146f45ec7bSml29623  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
156f45ec7bSml29623  * If applicable, add the following below this CDDL HEADER, with the
166f45ec7bSml29623  * fields enclosed by brackets "[]" replaced with your own identifying
176f45ec7bSml29623  * information: Portions Copyright [yyyy] [name of copyright owner]
186f45ec7bSml29623  *
196f45ec7bSml29623  * CDDL HEADER END
206f45ec7bSml29623  */
216f45ec7bSml29623 /*
22*1bd6825cSml29623  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
236f45ec7bSml29623  * Use is subject to license terms.
246f45ec7bSml29623  */
256f45ec7bSml29623 
266f45ec7bSml29623 #ifndef	_SYS_NXGE_NXGE_MAC_H
276f45ec7bSml29623 #define	_SYS_NXGE_NXGE_MAC_H
286f45ec7bSml29623 
296f45ec7bSml29623 #pragma ident	"%Z%%M%	%I%	%E% SMI"
306f45ec7bSml29623 
316f45ec7bSml29623 #ifdef	__cplusplus
326f45ec7bSml29623 extern "C" {
336f45ec7bSml29623 #endif
346f45ec7bSml29623 
356f45ec7bSml29623 #include <nxge_mac_hw.h>
366f45ec7bSml29623 #include <npi_mac.h>
376f45ec7bSml29623 
386f45ec7bSml29623 #define	NXGE_MTU_DEFAULT_MAX	1522	/* 0x5f2 */
39*1bd6825cSml29623 #define	NXGE_DEFAULT_MTU	1500	/* 0x5dc */
40*1bd6825cSml29623 #define	NXGE_MIN_MAC_FRAMESIZE	64
41*1bd6825cSml29623 #define	NXGE_MAX_MAC_FRAMESIZE	NXGE_MTU_DEFAULT_MAX
42*1bd6825cSml29623 /*
43*1bd6825cSml29623  * Maximum MTU: maximum frame size supported by the
44*1bd6825cSml29623  * hardware (9216) - (22).
45*1bd6825cSml29623  * (22 = ether header size (including VLAN) - CRC size (4)).
46*1bd6825cSml29623  */
47*1bd6825cSml29623 #define	NXGE_EHEADER_VLAN_CRC	(sizeof (struct ether_header) + ETHERFCSL + 4)
48*1bd6825cSml29623 #define	NXGE_MAXIMUM_MTU	(TX_JUMBO_MTU - NXGE_EHEADER_VLAN_CRC)
496f45ec7bSml29623 
506f45ec7bSml29623 #define	NXGE_XMAC_TX_INTRS	(ICFG_XMAC_TX_ALL & \
516f45ec7bSml29623 					~(ICFG_XMAC_TX_FRAME_XMIT |\
526f45ec7bSml29623 					ICFG_XMAC_TX_BYTE_CNT_EXP |\
536f45ec7bSml29623 					ICFG_XMAC_TX_FRAME_CNT_EXP))
546f45ec7bSml29623 #define	NXGE_XMAC_RX_INTRS	(ICFG_XMAC_RX_ALL & \
556f45ec7bSml29623 					~(ICFG_XMAC_RX_FRAME_RCVD |\
566f45ec7bSml29623 					ICFG_XMAC_RX_OCT_CNT_EXP |\
576f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT1_EXP |\
586f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT2_EXP |\
596f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT3_EXP |\
606f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT4_EXP |\
616f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT5_EXP |\
626f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT6_EXP |\
636f45ec7bSml29623 					ICFG_XMAC_RX_BCAST_CNT_EXP |\
646f45ec7bSml29623 					ICFG_XMAC_RX_MCAST_CNT_EXP |\
656f45ec7bSml29623 					ICFG_XMAC_RX_HST_CNT7_EXP))
666f45ec7bSml29623 #define	NXGE_BMAC_TX_INTRS	(ICFG_BMAC_TX_ALL & \
676f45ec7bSml29623 					~(ICFG_BMAC_TX_FRAME_SENT |\
686f45ec7bSml29623 					ICFG_BMAC_TX_BYTE_CNT_EXP |\
696f45ec7bSml29623 					ICFG_BMAC_TX_FRAME_CNT_EXP))
706f45ec7bSml29623 #define	NXGE_BMAC_RX_INTRS	(ICFG_BMAC_RX_ALL & \
716f45ec7bSml29623 					~(ICFG_BMAC_RX_FRAME_RCVD |\
726f45ec7bSml29623 					ICFG_BMAC_RX_FRAME_CNT_EXP |\
736f45ec7bSml29623 					ICFG_BMAC_RX_BYTE_CNT_EXP))
746f45ec7bSml29623 
756f45ec7bSml29623 typedef enum  {
766f45ec7bSml29623 	LINK_NO_CHANGE,
776f45ec7bSml29623 	LINK_IS_UP,
786f45ec7bSml29623 	LINK_IS_DOWN
796f45ec7bSml29623 } nxge_link_state_t;
806f45ec7bSml29623 
816f45ec7bSml29623 /* Common MAC statistics */
826f45ec7bSml29623 
836f45ec7bSml29623 typedef	struct _nxge_mac_stats {
846f45ec7bSml29623 	/*
856f45ec7bSml29623 	 * MTU size
866f45ec7bSml29623 	 */
876f45ec7bSml29623 	uint32_t	mac_mtu;
886f45ec7bSml29623 	uint16_t	rev_id;
896f45ec7bSml29623 
906f45ec7bSml29623 	/*
916f45ec7bSml29623 	 * Transciever state informations.
926f45ec7bSml29623 	 */
936f45ec7bSml29623 	uint32_t	xcvr_inits;
946f45ec7bSml29623 	xcvr_inuse_t	xcvr_inuse;
956f45ec7bSml29623 	uint32_t	xcvr_portn;
966f45ec7bSml29623 	uint32_t	xcvr_id;
976f45ec7bSml29623 	uint32_t	serdes_inits;
986f45ec7bSml29623 	uint32_t	serdes_portn;
996f45ec7bSml29623 	uint32_t	cap_autoneg;
1006f45ec7bSml29623 	uint32_t	cap_10gfdx;
1016f45ec7bSml29623 	uint32_t	cap_10ghdx;
1026f45ec7bSml29623 	uint32_t	cap_1000fdx;
1036f45ec7bSml29623 	uint32_t	cap_1000hdx;
1046f45ec7bSml29623 	uint32_t	cap_100T4;
1056f45ec7bSml29623 	uint32_t	cap_100fdx;
1066f45ec7bSml29623 	uint32_t	cap_100hdx;
1076f45ec7bSml29623 	uint32_t	cap_10fdx;
1086f45ec7bSml29623 	uint32_t	cap_10hdx;
1096f45ec7bSml29623 	uint32_t	cap_asmpause;
1106f45ec7bSml29623 	uint32_t	cap_pause;
1116f45ec7bSml29623 
1126f45ec7bSml29623 	/*
1136f45ec7bSml29623 	 * Advertised capabilities.
1146f45ec7bSml29623 	 */
1156f45ec7bSml29623 	uint32_t	adv_cap_autoneg;
1166f45ec7bSml29623 	uint32_t	adv_cap_10gfdx;
1176f45ec7bSml29623 	uint32_t	adv_cap_10ghdx;
1186f45ec7bSml29623 	uint32_t	adv_cap_1000fdx;
1196f45ec7bSml29623 	uint32_t	adv_cap_1000hdx;
1206f45ec7bSml29623 	uint32_t	adv_cap_100T4;
1216f45ec7bSml29623 	uint32_t	adv_cap_100fdx;
1226f45ec7bSml29623 	uint32_t	adv_cap_100hdx;
1236f45ec7bSml29623 	uint32_t	adv_cap_10fdx;
1246f45ec7bSml29623 	uint32_t	adv_cap_10hdx;
1256f45ec7bSml29623 	uint32_t	adv_cap_asmpause;
1266f45ec7bSml29623 	uint32_t	adv_cap_pause;
1276f45ec7bSml29623 
1286f45ec7bSml29623 	/*
1296f45ec7bSml29623 	 * Link partner capabilities.
1306f45ec7bSml29623 	 */
1316f45ec7bSml29623 	uint32_t	lp_cap_autoneg;
1326f45ec7bSml29623 	uint32_t	lp_cap_10gfdx;
1336f45ec7bSml29623 	uint32_t	lp_cap_10ghdx;
1346f45ec7bSml29623 	uint32_t	lp_cap_1000fdx;
1356f45ec7bSml29623 	uint32_t	lp_cap_1000hdx;
1366f45ec7bSml29623 	uint32_t	lp_cap_100T4;
1376f45ec7bSml29623 	uint32_t	lp_cap_100fdx;
1386f45ec7bSml29623 	uint32_t	lp_cap_100hdx;
1396f45ec7bSml29623 	uint32_t	lp_cap_10fdx;
1406f45ec7bSml29623 	uint32_t	lp_cap_10hdx;
1416f45ec7bSml29623 	uint32_t	lp_cap_asmpause;
1426f45ec7bSml29623 	uint32_t	lp_cap_pause;
1436f45ec7bSml29623 
1446f45ec7bSml29623 	/*
1456f45ec7bSml29623 	 * Physical link statistics.
1466f45ec7bSml29623 	 */
1476f45ec7bSml29623 	uint32_t	link_T4;
1486f45ec7bSml29623 	uint32_t	link_speed;
1496f45ec7bSml29623 	uint32_t	link_duplex;
1506f45ec7bSml29623 	uint32_t	link_asmpause;
1516f45ec7bSml29623 	uint32_t	link_pause;
1526f45ec7bSml29623 	uint32_t	link_up;
1536f45ec7bSml29623 
1546f45ec7bSml29623 	/* Promiscous mode */
1556f45ec7bSml29623 	boolean_t	promisc;
1566f45ec7bSml29623 } nxge_mac_stats_t;
1576f45ec7bSml29623 
1586f45ec7bSml29623 /* XMAC Statistics */
1596f45ec7bSml29623 
1606f45ec7bSml29623 typedef	struct _nxge_xmac_stats {
1616f45ec7bSml29623 	uint32_t tx_frame_cnt;
1626f45ec7bSml29623 	uint32_t tx_underflow_err;
1636f45ec7bSml29623 	uint32_t tx_maxpktsize_err;
1646f45ec7bSml29623 	uint32_t tx_overflow_err;
1656f45ec7bSml29623 	uint32_t tx_fifo_xfr_err;
1666f45ec7bSml29623 	uint64_t tx_byte_cnt;
1676f45ec7bSml29623 	uint32_t rx_frame_cnt;
1686f45ec7bSml29623 	uint32_t rx_underflow_err;
1696f45ec7bSml29623 	uint32_t rx_overflow_err;
1706f45ec7bSml29623 	uint32_t rx_crc_err_cnt;
1716f45ec7bSml29623 	uint32_t rx_len_err_cnt;
1726f45ec7bSml29623 	uint32_t rx_viol_err_cnt;
1736f45ec7bSml29623 	uint64_t rx_byte_cnt;
1746f45ec7bSml29623 	uint64_t rx_hist1_cnt;
1756f45ec7bSml29623 	uint64_t rx_hist2_cnt;
1766f45ec7bSml29623 	uint64_t rx_hist3_cnt;
1776f45ec7bSml29623 	uint64_t rx_hist4_cnt;
1786f45ec7bSml29623 	uint64_t rx_hist5_cnt;
1796f45ec7bSml29623 	uint64_t rx_hist6_cnt;
1806f45ec7bSml29623 	uint64_t rx_hist7_cnt;
1816f45ec7bSml29623 	uint64_t rx_broadcast_cnt;
1826f45ec7bSml29623 	uint64_t rx_mult_cnt;
1836f45ec7bSml29623 	uint32_t rx_frag_cnt;
1846f45ec7bSml29623 	uint32_t rx_frame_align_err_cnt;
1856f45ec7bSml29623 	uint32_t rx_linkfault_err_cnt;
1866f45ec7bSml29623 	uint32_t rx_remotefault_err;
1876f45ec7bSml29623 	uint32_t rx_localfault_err;
1886f45ec7bSml29623 	uint32_t rx_pause_cnt;
1896f45ec7bSml29623 	uint32_t tx_pause_state;
1906f45ec7bSml29623 	uint32_t tx_nopause_state;
1916f45ec7bSml29623 	uint32_t xpcs_deskew_err_cnt;
1926f45ec7bSml29623 	uint32_t xpcs_ln0_symbol_err_cnt;
1936f45ec7bSml29623 	uint32_t xpcs_ln1_symbol_err_cnt;
1946f45ec7bSml29623 	uint32_t xpcs_ln2_symbol_err_cnt;
1956f45ec7bSml29623 	uint32_t xpcs_ln3_symbol_err_cnt;
1966f45ec7bSml29623 } nxge_xmac_stats_t, *p_nxge_xmac_stats_t;
1976f45ec7bSml29623 
1986f45ec7bSml29623 /* BMAC Statistics */
1996f45ec7bSml29623 
2006f45ec7bSml29623 typedef	struct _nxge_bmac_stats {
2016f45ec7bSml29623 	uint64_t tx_frame_cnt;
2026f45ec7bSml29623 	uint32_t tx_underrun_err;
2036f45ec7bSml29623 	uint32_t tx_max_pkt_err;
2046f45ec7bSml29623 	uint64_t tx_byte_cnt;
2056f45ec7bSml29623 	uint64_t rx_frame_cnt;
2066f45ec7bSml29623 	uint64_t rx_byte_cnt;
2076f45ec7bSml29623 	uint32_t rx_overflow_err;
2086f45ec7bSml29623 	uint32_t rx_align_err_cnt;
2096f45ec7bSml29623 	uint32_t rx_crc_err_cnt;
2106f45ec7bSml29623 	uint32_t rx_len_err_cnt;
2116f45ec7bSml29623 	uint32_t rx_viol_err_cnt;
2126f45ec7bSml29623 	uint32_t rx_pause_cnt;
2136f45ec7bSml29623 	uint32_t tx_pause_state;
2146f45ec7bSml29623 	uint32_t tx_nopause_state;
2156f45ec7bSml29623 } nxge_bmac_stats_t, *p_nxge_bmac_stats_t;
2166f45ec7bSml29623 
2176f45ec7bSml29623 typedef struct _hash_filter_t {
2186f45ec7bSml29623 	uint_t hash_ref_cnt;
2196f45ec7bSml29623 	uint16_t hash_filter_regs[NMCFILTER_REGS];
2206f45ec7bSml29623 	uint32_t hash_bit_ref_cnt[NMCFILTER_BITS];
2216f45ec7bSml29623 } hash_filter_t, *p_hash_filter_t;
2226f45ec7bSml29623 
2236f45ec7bSml29623 typedef	struct _nxge_mac {
2246f45ec7bSml29623 	uint8_t			portnum;
2256f45ec7bSml29623 	nxge_port_t		porttype;
2266f45ec7bSml29623 	nxge_port_mode_t	portmode;
2276f45ec7bSml29623 	nxge_linkchk_mode_t	linkchkmode;
2286f45ec7bSml29623 	boolean_t		is_jumbo;
2296f45ec7bSml29623 	uint32_t		tx_config;
2306f45ec7bSml29623 	uint32_t		rx_config;
2316f45ec7bSml29623 	uint32_t		xif_config;
2326f45ec7bSml29623 	uint32_t		tx_iconfig;
2336f45ec7bSml29623 	uint32_t		rx_iconfig;
2346f45ec7bSml29623 	uint32_t		ctl_iconfig;
2356f45ec7bSml29623 	uint16_t		minframesize;
2366f45ec7bSml29623 	uint16_t		maxframesize;
2376f45ec7bSml29623 	uint16_t		maxburstsize;
2386f45ec7bSml29623 	uint16_t		ctrltype;
2396f45ec7bSml29623 	uint16_t		pa_size;
2406f45ec7bSml29623 	uint8_t			ipg[3];
2416f45ec7bSml29623 	struct ether_addr	mac_addr;
2426f45ec7bSml29623 	struct ether_addr	alt_mac_addr[MAC_MAX_ALT_ADDR_ENTRY];
2436f45ec7bSml29623 	struct ether_addr	mac_addr_filter;
2446f45ec7bSml29623 	uint16_t		hashtab[MAC_MAX_HASH_ENTRY];
2456f45ec7bSml29623 	hostinfo_t		hostinfo[MAC_MAX_HOST_INFO_ENTRY];
2466f45ec7bSml29623 	nxge_mac_stats_t	*mac_stats;
2476f45ec7bSml29623 	nxge_xmac_stats_t	*xmac_stats;
2486f45ec7bSml29623 	nxge_bmac_stats_t	*bmac_stats;
249*1bd6825cSml29623 	uint32_t		default_mtu;
2506f45ec7bSml29623 } nxge_mac_t;
2516f45ec7bSml29623 
2526f45ec7bSml29623 #ifdef	__cplusplus
2536f45ec7bSml29623 }
2546f45ec7bSml29623 #endif
2556f45ec7bSml29623 
2566f45ec7bSml29623 #endif	/* _SYS_NXGE_NXGE_MAC_H */
257