xref: /illumos-gate/usr/src/uts/common/sys/nxge/nxge_mac.h (revision 2d6eb4a5)
144961713Sgirish /*
244961713Sgirish  * CDDL HEADER START
344961713Sgirish  *
444961713Sgirish  * The contents of this file are subject to the terms of the
544961713Sgirish  * Common Development and Distribution License (the "License").
644961713Sgirish  * You may not use this file except in compliance with the License.
744961713Sgirish  *
844961713Sgirish  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
944961713Sgirish  * or http://www.opensolaris.org/os/licensing.
1044961713Sgirish  * See the License for the specific language governing permissions
1144961713Sgirish  * and limitations under the License.
1244961713Sgirish  *
1344961713Sgirish  * When distributing Covered Code, include this CDDL HEADER in each
1444961713Sgirish  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1544961713Sgirish  * If applicable, add the following below this CDDL HEADER, with the
1644961713Sgirish  * fields enclosed by brackets "[]" replaced with your own identifying
1744961713Sgirish  * information: Portions Copyright [yyyy] [name of copyright owner]
1844961713Sgirish  *
1944961713Sgirish  * CDDL HEADER END
2044961713Sgirish  */
2144961713Sgirish /*
22*1bd6825cSml  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
2344961713Sgirish  * Use is subject to license terms.
2444961713Sgirish  */
2544961713Sgirish 
2644961713Sgirish #ifndef	_SYS_NXGE_NXGE_MAC_H
2744961713Sgirish #define	_SYS_NXGE_NXGE_MAC_H
2844961713Sgirish 
2944961713Sgirish #ifdef	__cplusplus
3044961713Sgirish extern "C" {
3144961713Sgirish #endif
3244961713Sgirish 
3344961713Sgirish #include <nxge_mac_hw.h>
3444961713Sgirish #include <npi_mac.h>
3544961713Sgirish 
3644961713Sgirish #define	NXGE_MTU_DEFAULT_MAX	1522	/* 0x5f2 */
37*1bd6825cSml #define	NXGE_DEFAULT_MTU	1500	/* 0x5dc */
38*1bd6825cSml #define	NXGE_MIN_MAC_FRAMESIZE	64
39*1bd6825cSml #define	NXGE_MAX_MAC_FRAMESIZE	NXGE_MTU_DEFAULT_MAX
40*1bd6825cSml /*
41*1bd6825cSml  * Maximum MTU: maximum frame size supported by the
42*1bd6825cSml  * hardware (9216) - (22).
43*1bd6825cSml  * (22 = ether header size (including VLAN) - CRC size (4)).
44*1bd6825cSml  */
45*1bd6825cSml #define	NXGE_EHEADER_VLAN_CRC	(sizeof (struct ether_header) + ETHERFCSL + 4)
46*1bd6825cSml #define	NXGE_MAXIMUM_MTU	(TX_JUMBO_MTU - NXGE_EHEADER_VLAN_CRC)
4744961713Sgirish 
4844961713Sgirish #define	NXGE_XMAC_TX_INTRS	(ICFG_XMAC_TX_ALL & \
4944961713Sgirish 					~(ICFG_XMAC_TX_FRAME_XMIT |\
5044961713Sgirish 					ICFG_XMAC_TX_BYTE_CNT_EXP |\
5144961713Sgirish 					ICFG_XMAC_TX_FRAME_CNT_EXP))
5244961713Sgirish #define	NXGE_XMAC_RX_INTRS	(ICFG_XMAC_RX_ALL & \
5344961713Sgirish 					~(ICFG_XMAC_RX_FRAME_RCVD |\
5444961713Sgirish 					ICFG_XMAC_RX_OCT_CNT_EXP |\
5544961713Sgirish 					ICFG_XMAC_RX_HST_CNT1_EXP |\
5644961713Sgirish 					ICFG_XMAC_RX_HST_CNT2_EXP |\
5744961713Sgirish 					ICFG_XMAC_RX_HST_CNT3_EXP |\
5844961713Sgirish 					ICFG_XMAC_RX_HST_CNT4_EXP |\
5944961713Sgirish 					ICFG_XMAC_RX_HST_CNT5_EXP |\
6044961713Sgirish 					ICFG_XMAC_RX_HST_CNT6_EXP |\
6144961713Sgirish 					ICFG_XMAC_RX_BCAST_CNT_EXP |\
6244961713Sgirish 					ICFG_XMAC_RX_MCAST_CNT_EXP |\
6344961713Sgirish 					ICFG_XMAC_RX_HST_CNT7_EXP))
6444961713Sgirish #define	NXGE_BMAC_TX_INTRS	(ICFG_BMAC_TX_ALL & \
6544961713Sgirish 					~(ICFG_BMAC_TX_FRAME_SENT |\
6644961713Sgirish 					ICFG_BMAC_TX_BYTE_CNT_EXP |\
6744961713Sgirish 					ICFG_BMAC_TX_FRAME_CNT_EXP))
6844961713Sgirish #define	NXGE_BMAC_RX_INTRS	(ICFG_BMAC_RX_ALL & \
6944961713Sgirish 					~(ICFG_BMAC_RX_FRAME_RCVD |\
7044961713Sgirish 					ICFG_BMAC_RX_FRAME_CNT_EXP |\
7144961713Sgirish 					ICFG_BMAC_RX_BYTE_CNT_EXP))
7244961713Sgirish 
73a3c5bd6dSspeer typedef enum  {
74a3c5bd6dSspeer 	LINK_NO_CHANGE,
75a3c5bd6dSspeer 	LINK_IS_UP,
76a3c5bd6dSspeer 	LINK_IS_DOWN
77a3c5bd6dSspeer } nxge_link_state_t;
78a3c5bd6dSspeer 
7944961713Sgirish /* Common MAC statistics */
8044961713Sgirish 
8144961713Sgirish typedef	struct _nxge_mac_stats {
8244961713Sgirish 	/*
8344961713Sgirish 	 * MTU size
8444961713Sgirish 	 */
8544961713Sgirish 	uint32_t	mac_mtu;
8644961713Sgirish 	uint16_t	rev_id;
8744961713Sgirish 
8844961713Sgirish 	/*
8944961713Sgirish 	 * Transciever state informations.
9044961713Sgirish 	 */
9144961713Sgirish 	uint32_t	xcvr_inits;
9244961713Sgirish 	xcvr_inuse_t	xcvr_inuse;
9344961713Sgirish 	uint32_t	xcvr_portn;
9444961713Sgirish 	uint32_t	xcvr_id;
9544961713Sgirish 	uint32_t	serdes_inits;
9644961713Sgirish 	uint32_t	serdes_portn;
9744961713Sgirish 	uint32_t	cap_autoneg;
9844961713Sgirish 	uint32_t	cap_10gfdx;
9944961713Sgirish 	uint32_t	cap_10ghdx;
10044961713Sgirish 	uint32_t	cap_1000fdx;
10144961713Sgirish 	uint32_t	cap_1000hdx;
10244961713Sgirish 	uint32_t	cap_100T4;
10344961713Sgirish 	uint32_t	cap_100fdx;
10444961713Sgirish 	uint32_t	cap_100hdx;
10544961713Sgirish 	uint32_t	cap_10fdx;
10644961713Sgirish 	uint32_t	cap_10hdx;
10744961713Sgirish 	uint32_t	cap_asmpause;
10844961713Sgirish 	uint32_t	cap_pause;
10944961713Sgirish 
11044961713Sgirish 	/*
11144961713Sgirish 	 * Advertised capabilities.
11244961713Sgirish 	 */
11344961713Sgirish 	uint32_t	adv_cap_autoneg;
11444961713Sgirish 	uint32_t	adv_cap_10gfdx;
11544961713Sgirish 	uint32_t	adv_cap_10ghdx;
11644961713Sgirish 	uint32_t	adv_cap_1000fdx;
11744961713Sgirish 	uint32_t	adv_cap_1000hdx;
11844961713Sgirish 	uint32_t	adv_cap_100T4;
11944961713Sgirish 	uint32_t	adv_cap_100fdx;
12044961713Sgirish 	uint32_t	adv_cap_100hdx;
12144961713Sgirish 	uint32_t	adv_cap_10fdx;
12244961713Sgirish 	uint32_t	adv_cap_10hdx;
12344961713Sgirish 	uint32_t	adv_cap_asmpause;
12444961713Sgirish 	uint32_t	adv_cap_pause;
12544961713Sgirish 
12644961713Sgirish 	/*
12744961713Sgirish 	 * Link partner capabilities.
12844961713Sgirish 	 */
12944961713Sgirish 	uint32_t	lp_cap_autoneg;
13044961713Sgirish 	uint32_t	lp_cap_10gfdx;
13144961713Sgirish 	uint32_t	lp_cap_10ghdx;
13244961713Sgirish 	uint32_t	lp_cap_1000fdx;
13344961713Sgirish 	uint32_t	lp_cap_1000hdx;
13444961713Sgirish 	uint32_t	lp_cap_100T4;
13544961713Sgirish 	uint32_t	lp_cap_100fdx;
13644961713Sgirish 	uint32_t	lp_cap_100hdx;
13744961713Sgirish 	uint32_t	lp_cap_10fdx;
13844961713Sgirish 	uint32_t	lp_cap_10hdx;
13944961713Sgirish 	uint32_t	lp_cap_asmpause;
14044961713Sgirish 	uint32_t	lp_cap_pause;
14144961713Sgirish 
14244961713Sgirish 	/*
14344961713Sgirish 	 * Physical link statistics.
14444961713Sgirish 	 */
14544961713Sgirish 	uint32_t	link_T4;
14644961713Sgirish 	uint32_t	link_speed;
14744961713Sgirish 	uint32_t	link_duplex;
14844961713Sgirish 	uint32_t	link_asmpause;
14944961713Sgirish 	uint32_t	link_pause;
15044961713Sgirish 	uint32_t	link_up;
15144961713Sgirish 
15244961713Sgirish 	/* Promiscous mode */
15344961713Sgirish 	boolean_t	promisc;
15444961713Sgirish } nxge_mac_stats_t;
15544961713Sgirish 
15644961713Sgirish /* XMAC Statistics */
15744961713Sgirish 
15844961713Sgirish typedef	struct _nxge_xmac_stats {
15944961713Sgirish 	uint32_t tx_frame_cnt;
16044961713Sgirish 	uint32_t tx_underflow_err;
16144961713Sgirish 	uint32_t tx_maxpktsize_err;
16244961713Sgirish 	uint32_t tx_overflow_err;
16344961713Sgirish 	uint32_t tx_fifo_xfr_err;
16444961713Sgirish 	uint64_t tx_byte_cnt;
16544961713Sgirish 	uint32_t rx_frame_cnt;
16644961713Sgirish 	uint32_t rx_underflow_err;
16744961713Sgirish 	uint32_t rx_overflow_err;
16844961713Sgirish 	uint32_t rx_crc_err_cnt;
16944961713Sgirish 	uint32_t rx_len_err_cnt;
17044961713Sgirish 	uint32_t rx_viol_err_cnt;
17144961713Sgirish 	uint64_t rx_byte_cnt;
17244961713Sgirish 	uint64_t rx_hist1_cnt;
17344961713Sgirish 	uint64_t rx_hist2_cnt;
17444961713Sgirish 	uint64_t rx_hist3_cnt;
17544961713Sgirish 	uint64_t rx_hist4_cnt;
17644961713Sgirish 	uint64_t rx_hist5_cnt;
17744961713Sgirish 	uint64_t rx_hist6_cnt;
17844961713Sgirish 	uint64_t rx_hist7_cnt;
17944961713Sgirish 	uint64_t rx_broadcast_cnt;
18044961713Sgirish 	uint64_t rx_mult_cnt;
18144961713Sgirish 	uint32_t rx_frag_cnt;
18244961713Sgirish 	uint32_t rx_frame_align_err_cnt;
18344961713Sgirish 	uint32_t rx_linkfault_err_cnt;
18444961713Sgirish 	uint32_t rx_remotefault_err;
18544961713Sgirish 	uint32_t rx_localfault_err;
18644961713Sgirish 	uint32_t rx_pause_cnt;
18744961713Sgirish 	uint32_t tx_pause_state;
18844961713Sgirish 	uint32_t tx_nopause_state;
18944961713Sgirish 	uint32_t xpcs_deskew_err_cnt;
19044961713Sgirish 	uint32_t xpcs_ln0_symbol_err_cnt;
19144961713Sgirish 	uint32_t xpcs_ln1_symbol_err_cnt;
19244961713Sgirish 	uint32_t xpcs_ln2_symbol_err_cnt;
19344961713Sgirish 	uint32_t xpcs_ln3_symbol_err_cnt;
19444961713Sgirish } nxge_xmac_stats_t, *p_nxge_xmac_stats_t;
19544961713Sgirish 
19644961713Sgirish /* BMAC Statistics */
19744961713Sgirish 
19844961713Sgirish typedef	struct _nxge_bmac_stats {
19944961713Sgirish 	uint64_t tx_frame_cnt;
20044961713Sgirish 	uint32_t tx_underrun_err;
20144961713Sgirish 	uint32_t tx_max_pkt_err;
20244961713Sgirish 	uint64_t tx_byte_cnt;
20344961713Sgirish 	uint64_t rx_frame_cnt;
20444961713Sgirish 	uint64_t rx_byte_cnt;
20544961713Sgirish 	uint32_t rx_overflow_err;
20644961713Sgirish 	uint32_t rx_align_err_cnt;
20744961713Sgirish 	uint32_t rx_crc_err_cnt;
20844961713Sgirish 	uint32_t rx_len_err_cnt;
20944961713Sgirish 	uint32_t rx_viol_err_cnt;
21044961713Sgirish 	uint32_t rx_pause_cnt;
21144961713Sgirish 	uint32_t tx_pause_state;
21244961713Sgirish 	uint32_t tx_nopause_state;
21344961713Sgirish } nxge_bmac_stats_t, *p_nxge_bmac_stats_t;
21444961713Sgirish 
21544961713Sgirish typedef struct _hash_filter_t {
21644961713Sgirish 	uint_t hash_ref_cnt;
21744961713Sgirish 	uint16_t hash_filter_regs[NMCFILTER_REGS];
21844961713Sgirish 	uint32_t hash_bit_ref_cnt[NMCFILTER_BITS];
21944961713Sgirish } hash_filter_t, *p_hash_filter_t;
22044961713Sgirish 
22144961713Sgirish typedef	struct _nxge_mac {
22244961713Sgirish 	uint8_t			portnum;
22344961713Sgirish 	nxge_port_t		porttype;
22444961713Sgirish 	nxge_port_mode_t	portmode;
22544961713Sgirish 	nxge_linkchk_mode_t	linkchkmode;
22644961713Sgirish 	boolean_t		is_jumbo;
22744961713Sgirish 	uint32_t		tx_config;
22844961713Sgirish 	uint32_t		rx_config;
22944961713Sgirish 	uint32_t		xif_config;
23044961713Sgirish 	uint32_t		tx_iconfig;
23144961713Sgirish 	uint32_t		rx_iconfig;
23244961713Sgirish 	uint32_t		ctl_iconfig;
23344961713Sgirish 	uint16_t		minframesize;
23444961713Sgirish 	uint16_t		maxframesize;
23544961713Sgirish 	uint16_t		maxburstsize;
23644961713Sgirish 	uint16_t		ctrltype;
23744961713Sgirish 	uint16_t		pa_size;
23844961713Sgirish 	uint8_t			ipg[3];
23944961713Sgirish 	struct ether_addr	mac_addr;
24044961713Sgirish 	struct ether_addr	alt_mac_addr[MAC_MAX_ALT_ADDR_ENTRY];
24144961713Sgirish 	struct ether_addr	mac_addr_filter;
24244961713Sgirish 	uint16_t		hashtab[MAC_MAX_HASH_ENTRY];
24344961713Sgirish 	hostinfo_t		hostinfo[MAC_MAX_HOST_INFO_ENTRY];
24444961713Sgirish 	nxge_mac_stats_t	*mac_stats;
24544961713Sgirish 	nxge_xmac_stats_t	*xmac_stats;
24644961713Sgirish 	nxge_bmac_stats_t	*bmac_stats;
247*1bd6825cSml 	uint32_t		default_mtu;
24844961713Sgirish } nxge_mac_t;
24944961713Sgirish 
25044961713Sgirish #ifdef	__cplusplus
25144961713Sgirish }
25244961713Sgirish #endif
25344961713Sgirish 
25444961713Sgirish #endif	/* _SYS_NXGE_NXGE_MAC_H */
255