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