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