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*6028Ssbehera * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 233859Sml29623 * Use is subject to license terms. 243859Sml29623 */ 253859Sml29623 263859Sml29623 #pragma ident "%Z%%M% %I% %E% SMI" 273859Sml29623 283859Sml29623 #include <sys/nxge/nxge_impl.h> 293859Sml29623 #include <inet/mi.h> 303859Sml29623 313859Sml29623 #define RDC_NAME_FORMAT1 "RDC Channel" 323859Sml29623 #define TDC_NAME_FORMAT1 "TDC Channel" 333859Sml29623 #define CH_NAME_FORMAT " %d Stats" 343859Sml29623 #define TDC_NAME_FORMAT "TDC Channel %d Stats" 353859Sml29623 #define RDC_NAME_FORMAT "RDC Channel %d Stats" 363859Sml29623 373859Sml29623 void nxge_mac_init_kstats(p_nxge_t, struct kstat *); 383859Sml29623 void nxge_xmac_init_kstats(struct kstat *); 393859Sml29623 void nxge_bmac_init_kstats(struct kstat *); 403859Sml29623 413859Sml29623 /* ARGSUSED */ 423859Sml29623 void 433859Sml29623 nxge_init_statsp(p_nxge_t nxgep) 443859Sml29623 { 453859Sml29623 size_t stats_size; 463859Sml29623 473859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_init_statsp")); 483859Sml29623 493859Sml29623 stats_size = sizeof (nxge_stats_t); 503859Sml29623 nxgep->statsp = KMEM_ZALLOC(stats_size, KM_SLEEP); 513859Sml29623 nxgep->statsp->stats_size = stats_size; 523859Sml29623 533859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_init_statsp")); 543859Sml29623 } 553859Sml29623 563859Sml29623 typedef struct { 573859Sml29623 uint8_t index; 583859Sml29623 uint8_t type; 593859Sml29623 char *name; 603859Sml29623 } nxge_kstat_index_t; 613859Sml29623 623859Sml29623 typedef enum { 633859Sml29623 RDC_STAT_PACKETS = 0, 643859Sml29623 RDC_STAT_BYTES, 653859Sml29623 RDC_STAT_ERRORS, 663859Sml29623 RDC_STAT_DCF_ERR, 673859Sml29623 RDC_STAT_RCR_ACK_ERR, 683859Sml29623 RDC_STAT_RCR_DC_FIFOFLOW_ERR, 693859Sml29623 RDC_STAT_RCR_SHA_PAR_ERR, 703859Sml29623 RDC_STAT_RBR_PRE_PAR_ERR, 713859Sml29623 RDC_STAT_WRED_DROP, 723859Sml29623 RDC_STAT_RBR_PRE_EMTY, 733859Sml29623 RDC_STAT_RCR_SHADOW_FULL, 743859Sml29623 RDC_STAT_RBR_TMOUT, 753859Sml29623 RDC_STAT_RSP_CNT_ERR, 763859Sml29623 RDC_STAT_BYTE_EN_BUS, 773859Sml29623 RDC_STAT_RSP_DAT_ERR, 78*6028Ssbehera RDC_STAT_PKT_TOO_LONG_ERR, 793859Sml29623 RDC_STAT_COMPL_L2_ERR, 803859Sml29623 RDC_STAT_COMPL_L4_CKSUM_ERR, 813859Sml29623 RDC_STAT_COMPL_ZCP_SOFT_ERR, 823859Sml29623 RDC_STAT_COMPL_FFLP_SOFT_ERR, 833859Sml29623 RDC_STAT_CONFIG_ERR, 843859Sml29623 RDC_STAT_RCRINCON, 853859Sml29623 RDC_STAT_RCRFULL, 863859Sml29623 RDC_STAT_RBR_EMPTY, 873859Sml29623 RDC_STAT_RBR_FULL, 883859Sml29623 RDC_STAT_RBRLOGPAGE, 893859Sml29623 RDC_STAT_CFIGLOGPAGE, 903859Sml29623 RDC_STAT_PORT_DROP_PKT, 913859Sml29623 RDC_STAT_RCRTO, 923859Sml29623 RDC_STAT_RCRTHRES, 933859Sml29623 RDC_STAT_MEX, 943859Sml29623 RDC_STAT_ID_MIS, 953859Sml29623 RDC_STAT_ZCP_EOP, 963859Sml29623 RDC_STAT_IPP_EOP, 973859Sml29623 RDC_STAT_END 983859Sml29623 } nxge_rdc_stat_index_t; 993859Sml29623 1003859Sml29623 nxge_kstat_index_t nxge_rdc_stats[] = { 1013859Sml29623 {RDC_STAT_PACKETS, KSTAT_DATA_UINT64, "rdc_packets"}, 1023859Sml29623 {RDC_STAT_BYTES, KSTAT_DATA_UINT64, "rdc_bytes"}, 1033859Sml29623 {RDC_STAT_ERRORS, KSTAT_DATA_ULONG, "rdc_errors"}, 1043859Sml29623 {RDC_STAT_DCF_ERR, KSTAT_DATA_ULONG, "rdc_dcf_err"}, 1053859Sml29623 {RDC_STAT_RCR_ACK_ERR, KSTAT_DATA_ULONG, "rdc_rcr_ack_err"}, 1063859Sml29623 {RDC_STAT_RCR_DC_FIFOFLOW_ERR, KSTAT_DATA_ULONG, "rdc_dc_fifoflow_err"}, 1073859Sml29623 {RDC_STAT_RCR_SHA_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rcr_sha_par_err"}, 1083859Sml29623 {RDC_STAT_RBR_PRE_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rbr_pre_par_err"}, 1093859Sml29623 {RDC_STAT_WRED_DROP, KSTAT_DATA_ULONG, "rdc_wred_drop"}, 1103859Sml29623 {RDC_STAT_RBR_PRE_EMTY, KSTAT_DATA_ULONG, "rdc_rbr_pre_empty"}, 1113859Sml29623 {RDC_STAT_RCR_SHADOW_FULL, KSTAT_DATA_ULONG, "rdc_rcr_shadow_full"}, 1123859Sml29623 {RDC_STAT_RBR_TMOUT, KSTAT_DATA_ULONG, "rdc_rbr_tmout"}, 1133859Sml29623 {RDC_STAT_RSP_CNT_ERR, KSTAT_DATA_ULONG, "rdc_rsp_cnt_err"}, 1143859Sml29623 {RDC_STAT_BYTE_EN_BUS, KSTAT_DATA_ULONG, "rdc_byte_en_bus"}, 1153859Sml29623 {RDC_STAT_RSP_DAT_ERR, KSTAT_DATA_ULONG, "rdc_rsp_dat_err"}, 116*6028Ssbehera {RDC_STAT_PKT_TOO_LONG_ERR, KSTAT_DATA_ULONG, "rdc_pkt_too_long_err"}, 1173859Sml29623 {RDC_STAT_COMPL_L2_ERR, KSTAT_DATA_ULONG, "rdc_compl_l2_err"}, 1183859Sml29623 {RDC_STAT_COMPL_L4_CKSUM_ERR, KSTAT_DATA_ULONG, "rdc_compl_l4_cksum"}, 1193859Sml29623 {RDC_STAT_COMPL_ZCP_SOFT_ERR, KSTAT_DATA_ULONG, 1203859Sml29623 "rdc_compl_zcp_soft_err"}, 1213859Sml29623 {RDC_STAT_COMPL_FFLP_SOFT_ERR, KSTAT_DATA_ULONG, 1223859Sml29623 "rdc_compl_fflp_soft_err"}, 1233859Sml29623 {RDC_STAT_CONFIG_ERR, KSTAT_DATA_ULONG, "rdc_config_err"}, 1243859Sml29623 {RDC_STAT_RCRINCON, KSTAT_DATA_ULONG, "rdc_rcrincon"}, 1253859Sml29623 {RDC_STAT_RCRFULL, KSTAT_DATA_ULONG, "rdc_rcrfull"}, 1263859Sml29623 {RDC_STAT_RBR_EMPTY, KSTAT_DATA_ULONG, "rdc_rbr_empty"}, 1273859Sml29623 {RDC_STAT_RBR_FULL, KSTAT_DATA_ULONG, "rdc_rbrfull"}, 1283859Sml29623 {RDC_STAT_RBRLOGPAGE, KSTAT_DATA_ULONG, "rdc_rbrlogpage"}, 1293859Sml29623 {RDC_STAT_CFIGLOGPAGE, KSTAT_DATA_ULONG, "rdc_cfiglogpage"}, 1303859Sml29623 {RDC_STAT_PORT_DROP_PKT, KSTAT_DATA_ULONG, "rdc_port_drop_pkt"}, 1313859Sml29623 {RDC_STAT_RCRTO, KSTAT_DATA_ULONG, "rdc_rcrto"}, 1323859Sml29623 {RDC_STAT_RCRTHRES, KSTAT_DATA_ULONG, "rdc_rcrthres"}, 1333859Sml29623 {RDC_STAT_MEX, KSTAT_DATA_ULONG, "rdc_mex"}, 1343859Sml29623 {RDC_STAT_ID_MIS, KSTAT_DATA_ULONG, "rdc_id_mismatch"}, 1353859Sml29623 {RDC_STAT_ZCP_EOP, KSTAT_DATA_ULONG, "rdc_zcp_eop"}, 1363859Sml29623 {RDC_STAT_IPP_EOP, KSTAT_DATA_ULONG, "rdc_ipp_eop"}, 1373859Sml29623 {RDC_STAT_END, NULL, NULL} 1383859Sml29623 }; 1393859Sml29623 1403859Sml29623 typedef enum { 1413859Sml29623 RDC_SYS_STAT_PRE_PAR_ERR = 0, 1423859Sml29623 RDC_SYS_STAT_SHA_PAR_ERR, 1433859Sml29623 RDC_SYS_STAT_ID_MISMATCH, 1443859Sml29623 RDC_SYS_STAT_IPP_EOP_ERR, 1453859Sml29623 RDC_SYS_STAT_ZCP_EOP_ERR, 1463859Sml29623 RDC_SYS_STAT_END 1473859Sml29623 } nxge_rdc_sys_stat_idx_t; 1483859Sml29623 1493859Sml29623 nxge_kstat_index_t nxge_rdc_sys_stats[] = { 1503859Sml29623 {RDC_SYS_STAT_PRE_PAR_ERR, KSTAT_DATA_UINT64, "rdc_pre_par_err"}, 1513859Sml29623 {RDC_SYS_STAT_SHA_PAR_ERR, KSTAT_DATA_UINT64, "rdc_sha_par_err"}, 1523859Sml29623 {RDC_SYS_STAT_ID_MISMATCH, KSTAT_DATA_UINT64, "rdc_stat_id_mismatch"}, 1533859Sml29623 {RDC_SYS_STAT_IPP_EOP_ERR, KSTAT_DATA_UINT64, "rdc_ipp_eop_err"}, 1543859Sml29623 {RDC_SYS_STAT_ZCP_EOP_ERR, KSTAT_DATA_UINT64, "rdc_zcp_eop_err"}, 1553859Sml29623 {RDC_SYS_STAT_END, NULL, NULL} 1563859Sml29623 }; 1573859Sml29623 1583859Sml29623 typedef enum { 1593859Sml29623 TDC_STAT_PACKETS = 0, 1603859Sml29623 TDC_STAT_BYTES, 1613859Sml29623 TDC_STAT_ERRORS, 1623859Sml29623 TDC_STAT_TX_INITS, 1633859Sml29623 TDC_STAT_TX_NO_BUF, 1643859Sml29623 TDC_STAT_MBOX_ERR, 1653859Sml29623 TDC_STAT_PKT_SIZE_ERR, 1663859Sml29623 TDC_STAT_TX_RING_OFLOW, 1673859Sml29623 TDC_STAT_PREF_BUF_ECC_ERR, 1683859Sml29623 TDC_STAT_NACK_PREF, 1693859Sml29623 TDC_STAT_NACK_PKT_RD, 1703859Sml29623 TDC_STAT_CONF_PART_ERR, 1713859Sml29623 TDC_STAT_PKT_PRT_ERR, 1723859Sml29623 TDC_STAT_RESET_FAIL, 1733859Sml29623 TDC_STAT_TX_STARTS, 1743859Sml29623 TDC_STAT_TX_NOCANPUT, 1753859Sml29623 TDC_STAT_TX_MSGDUP_FAIL, 1763859Sml29623 TDC_STAT_TX_ALLOCB_FAIL, 1773859Sml29623 TDC_STAT_TX_NO_DESC, 1783859Sml29623 TDC_STAT_TX_DMA_BIND_FAIL, 1793859Sml29623 TDC_STAT_TX_UFLOW, 1803859Sml29623 TDC_STAT_TX_HDR_PKTS, 1813859Sml29623 TDC_STAT_TX_DDI_PKTS, 1823859Sml29623 TDC_STAT_TX_DVMA_PKTS, 1833859Sml29623 TDC_STAT_TX_MAX_PEND, 1843859Sml29623 TDC_STAT_END 1853859Sml29623 } nxge_tdc_stats_index_t; 1863859Sml29623 1873859Sml29623 nxge_kstat_index_t nxge_tdc_stats[] = { 1883859Sml29623 {TDC_STAT_PACKETS, KSTAT_DATA_UINT64, "tdc_packets"}, 1893859Sml29623 {TDC_STAT_BYTES, KSTAT_DATA_UINT64, "tdc_bytes"}, 1903859Sml29623 {TDC_STAT_ERRORS, KSTAT_DATA_UINT64, "tdc_errors"}, 1913859Sml29623 {TDC_STAT_TX_INITS, KSTAT_DATA_ULONG, "tdc_tx_inits"}, 1923859Sml29623 {TDC_STAT_TX_NO_BUF, KSTAT_DATA_ULONG, "tdc_tx_no_buf"}, 1933859Sml29623 {TDC_STAT_MBOX_ERR, KSTAT_DATA_ULONG, "tdc_mbox_err"}, 1943859Sml29623 {TDC_STAT_PKT_SIZE_ERR, KSTAT_DATA_ULONG, "tdc_pkt_size_err"}, 1953859Sml29623 {TDC_STAT_TX_RING_OFLOW, 1963859Sml29623 KSTAT_DATA_ULONG, "tdc_tx_ring_oflow"}, 1973859Sml29623 {TDC_STAT_PREF_BUF_ECC_ERR, 1983859Sml29623 KSTAT_DATA_ULONG, "tdc_pref_buf_err_err"}, 1993859Sml29623 {TDC_STAT_NACK_PREF, KSTAT_DATA_ULONG, "tdc_nack_pref"}, 2003859Sml29623 {TDC_STAT_NACK_PKT_RD, KSTAT_DATA_ULONG, "tdc_nack_pkt_rd"}, 2013859Sml29623 {TDC_STAT_CONF_PART_ERR, 2023859Sml29623 KSTAT_DATA_ULONG, "tdc_conf_part_err"}, 2033859Sml29623 {TDC_STAT_PKT_PRT_ERR, KSTAT_DATA_ULONG, "tdc_pkt_prt_err"}, 2043859Sml29623 {TDC_STAT_RESET_FAIL, KSTAT_DATA_ULONG, "tdc_reset_fail"}, 2053859Sml29623 {TDC_STAT_TX_STARTS, KSTAT_DATA_ULONG, "tdc_tx_starts"}, 2063859Sml29623 {TDC_STAT_TX_NOCANPUT, KSTAT_DATA_ULONG, "tdc_tx_nocanput"}, 2073859Sml29623 {TDC_STAT_TX_MSGDUP_FAIL, KSTAT_DATA_ULONG, "tdc_tx_msgdup_fail"}, 2083859Sml29623 {TDC_STAT_TX_ALLOCB_FAIL, KSTAT_DATA_ULONG, "tdc_tx_allocb_fail"}, 2093859Sml29623 {TDC_STAT_TX_NO_DESC, KSTAT_DATA_ULONG, "tdc_tx_no_desc"}, 2103859Sml29623 {TDC_STAT_TX_DMA_BIND_FAIL, KSTAT_DATA_ULONG, "tdc_tx_dma_bind_fail"}, 2113859Sml29623 {TDC_STAT_TX_UFLOW, KSTAT_DATA_ULONG, "tdc_tx_uflow"}, 2123859Sml29623 {TDC_STAT_TX_HDR_PKTS, KSTAT_DATA_ULONG, "tdc_tx_hdr_pkts"}, 2133859Sml29623 {TDC_STAT_TX_DDI_PKTS, KSTAT_DATA_ULONG, "tdc_tx_ddi_pkts"}, 2143859Sml29623 {TDC_STAT_TX_DVMA_PKTS, KSTAT_DATA_ULONG, "tdc_tx_dvma_pkts"}, 2153859Sml29623 {TDC_STAT_TX_MAX_PEND, KSTAT_DATA_ULONG, "tdc_tx_max_pend"}, 2163859Sml29623 {TDC_STAT_END, NULL, NULL} 2173859Sml29623 }; 2183859Sml29623 2193859Sml29623 /* IPP Statistics definitions */ 2203859Sml29623 typedef enum { 2213859Sml29623 IPP_STAT_EOP_MISS = 0, 2223859Sml29623 IPP_STAT_SOP_MISS, 2233859Sml29623 IPP_STAT_DFIFO_UE, 2243859Sml29623 IPP_STAT_ECC_ERR, 2254439Sml29623 IPP_STAT_PFIFO_PERR, 2263859Sml29623 IPP_STAT_PFIFO_OVER, 2273859Sml29623 IPP_STAT_PFIFO_UND, 2283859Sml29623 IPP_STAT_BAD_CS, 2293859Sml29623 IPP_STAT_BAD_DIS, 2303859Sml29623 IPP_STAT_END 2313859Sml29623 } nxge_ipp_stat_index_t; 2323859Sml29623 2333859Sml29623 nxge_kstat_index_t nxge_ipp_stats[] = { 2343859Sml29623 {IPP_STAT_EOP_MISS, KSTAT_DATA_ULONG, "rxipp_eop_miss"}, 2353859Sml29623 {IPP_STAT_SOP_MISS, KSTAT_DATA_ULONG, "rxipp_sop_miss"}, 2363859Sml29623 {IPP_STAT_DFIFO_UE, KSTAT_DATA_ULONG, "rxipp_dfifo_ue"}, 2373859Sml29623 {IPP_STAT_ECC_ERR, KSTAT_DATA_ULONG, "rxipp_ecc_err"}, 2384439Sml29623 {IPP_STAT_PFIFO_PERR, KSTAT_DATA_ULONG, "rxipp_pfifo_perr"}, 2393859Sml29623 {IPP_STAT_PFIFO_OVER, KSTAT_DATA_ULONG, "rxipp_pfifo_over"}, 2403859Sml29623 {IPP_STAT_PFIFO_UND, KSTAT_DATA_ULONG, "rxipp_pfifo_und"}, 2413859Sml29623 {IPP_STAT_BAD_CS, KSTAT_DATA_ULONG, "rxipp_bad_cs"}, 2423859Sml29623 {IPP_STAT_BAD_DIS, KSTAT_DATA_ULONG, "rxipp_bad_dis"}, 2433859Sml29623 {IPP_STAT_END, NULL, NULL} 2443859Sml29623 }; 2453859Sml29623 2463859Sml29623 /* TXC Statistics definitions */ 2473859Sml29623 typedef enum { 2483859Sml29623 TXC_STAT_PKT_STUFFED = 0, 2493859Sml29623 TXC_STAT_PKT_XMIT, 2503859Sml29623 TXC_STAT_RO_CORRECT_ERR, 2513859Sml29623 TXC_STAT_RO_UNCORRECT_ERR, 2523859Sml29623 TXC_STAT_SF_CORRECT_ERR, 2533859Sml29623 TXC_STAT_SF_UNCORRECT_ERR, 2543859Sml29623 TXC_STAT_ADDRESS_FAILED, 2553859Sml29623 TXC_STAT_DMA_FAILED, 2563859Sml29623 TXC_STAT_LENGTH_FAILED, 2573859Sml29623 TXC_STAT_PKT_ASSY_DEAD, 2583859Sml29623 TXC_STAT_REORDER_ERR, 2593859Sml29623 TXC_STAT_END 2603859Sml29623 } nxge_txc_stat_index_t; 2613859Sml29623 2623859Sml29623 nxge_kstat_index_t nxge_txc_stats[] = { 2633859Sml29623 {TXC_STAT_PKT_STUFFED, KSTAT_DATA_ULONG, "txc_pkt_stuffed"}, 2643859Sml29623 {TXC_STAT_PKT_XMIT, KSTAT_DATA_ULONG, "txc_pkt_xmit"}, 2653859Sml29623 {TXC_STAT_RO_CORRECT_ERR, KSTAT_DATA_ULONG, "txc_ro_correct_err"}, 2663859Sml29623 {TXC_STAT_RO_UNCORRECT_ERR, KSTAT_DATA_ULONG, "txc_ro_uncorrect_err"}, 2673859Sml29623 {TXC_STAT_SF_CORRECT_ERR, KSTAT_DATA_ULONG, "txc_sf_correct_err"}, 2683859Sml29623 {TXC_STAT_SF_UNCORRECT_ERR, KSTAT_DATA_ULONG, "txc_sf_uncorrect_err"}, 2693859Sml29623 {TXC_STAT_ADDRESS_FAILED, KSTAT_DATA_ULONG, "txc_address_failed"}, 2703859Sml29623 {TXC_STAT_DMA_FAILED, KSTAT_DATA_ULONG, "txc_dma_failed"}, 2713859Sml29623 {TXC_STAT_LENGTH_FAILED, KSTAT_DATA_ULONG, "txc_length_failed"}, 2723859Sml29623 {TXC_STAT_PKT_ASSY_DEAD, KSTAT_DATA_ULONG, "txc_pkt_assy_dead"}, 2733859Sml29623 {TXC_STAT_REORDER_ERR, KSTAT_DATA_ULONG, "txc_reorder_err"}, 2743859Sml29623 {TXC_STAT_END, NULL, NULL} 2753859Sml29623 }; 2763859Sml29623 2773859Sml29623 typedef enum { 2783859Sml29623 XMAC_STAT_TX_FRAME_CNT = 0, 2793859Sml29623 XMAC_STAT_TX_UNDERFLOW_ERR, 2803859Sml29623 XMAC_STAT_TX_MAXPKTSIZE_ERR, 2813859Sml29623 XMAC_STAT_TX_OVERFLOW_ERR, 2823859Sml29623 XMAC_STAT_TX_FIFO_XFR_ERR, 2833859Sml29623 XMAC_STAT_TX_BYTE_CNT, 2843859Sml29623 XMAC_STAT_RX_FRAME_CNT, 2853859Sml29623 XMAC_STAT_RX_UNDERFLOW_ERR, 2863859Sml29623 XMAC_STAT_RX_OVERFLOW_ERR, 2873859Sml29623 XMAC_STAT_RX_CRC_ERR_CNT, 2883859Sml29623 XMAC_STAT_RX_LEN_ERR_CNT, 2893859Sml29623 XMAC_STAT_RX_VIOL_ERR_CNT, 2903859Sml29623 XMAC_STAT_RX_BYTE_CNT, 2913859Sml29623 XMAC_STAT_RX_HIST1_CNT, 2923859Sml29623 XMAC_STAT_RX_HIST2_CNT, 2933859Sml29623 XMAC_STAT_RX_HIST3_CNT, 2943859Sml29623 XMAC_STAT_RX_HIST4_CNT, 2953859Sml29623 XMAC_STAT_RX_HIST5_CNT, 2963859Sml29623 XMAC_STAT_RX_HIST6_CNT, 2973859Sml29623 XMAC_STAT_RX_HIST7_CNT, 2983859Sml29623 XMAC_STAT_RX_BROADCAST_CNT, 2993859Sml29623 XMAC_STAT_RX_MULT_CNT, 3003859Sml29623 XMAC_STAT_RX_FRAG_CNT, 3013859Sml29623 XMAC_STAT_RX_FRAME_ALIGN_ERR_CNT, 3023859Sml29623 XMAC_STAT_RX_LINKFAULT_ERR_CNT, 3033859Sml29623 XMAC_STAT_RX_REMOTEFAULT_ERR, 3043859Sml29623 XMAC_STAT_RX_LOCALFAULT_ERR, 3053859Sml29623 XMAC_STAT_RX_PAUSE_CNT, 3063859Sml29623 XMAC_STAT_TX_PAUSE_STATE, 3073859Sml29623 XMAC_STAT_TX_NOPAUSE_STATE, 3083859Sml29623 XMAC_STAT_XPCS_DESKEW_ERR_CNT, 3093859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 3103859Sml29623 XMAC_STAT_XPCS_SYMBOL_L0_ERR_CNT, 3113859Sml29623 XMAC_STAT_XPCS_SYMBOL_L1_ERR_CNT, 3123859Sml29623 XMAC_STAT_XPCS_SYMBOL_L2_ERR_CNT, 3133859Sml29623 XMAC_STAT_XPCS_SYMBOL_L3_ERR_CNT, 3143859Sml29623 #endif 3153859Sml29623 XMAC_STAT_END 3163859Sml29623 } nxge_xmac_stat_index_t; 3173859Sml29623 3183859Sml29623 nxge_kstat_index_t nxge_xmac_stats[] = { 3193859Sml29623 {XMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_ULONG, "txmac_frame_cnt"}, 3203859Sml29623 {XMAC_STAT_TX_UNDERFLOW_ERR, KSTAT_DATA_ULONG, "tmac_underflow_err"}, 3213859Sml29623 {XMAC_STAT_TX_MAXPKTSIZE_ERR, KSTAT_DATA_ULONG, "txmac_maxpktsize_err"}, 3223859Sml29623 {XMAC_STAT_TX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "txmac_overflow_err"}, 3233859Sml29623 {XMAC_STAT_TX_FIFO_XFR_ERR, KSTAT_DATA_ULONG, "txmac_fifo_xfr_err"}, 3243859Sml29623 {XMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_ULONG, "txmac_byte_cnt"}, 3253859Sml29623 {XMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_ULONG, "rxmac_frame_cnt"}, 3263859Sml29623 {XMAC_STAT_RX_UNDERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_underflow_err"}, 3273859Sml29623 {XMAC_STAT_RX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_overflow_err"}, 3283859Sml29623 {XMAC_STAT_RX_CRC_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_crc_err"}, 3293859Sml29623 {XMAC_STAT_RX_LEN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_length_err"}, 3303859Sml29623 {XMAC_STAT_RX_VIOL_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_code_violations"}, 3313859Sml29623 {XMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_ULONG, "rxmac_byte_cnt"}, 3323859Sml29623 {XMAC_STAT_RX_HIST1_CNT, KSTAT_DATA_ULONG, "rxmac_64_cnt"}, 3333859Sml29623 {XMAC_STAT_RX_HIST2_CNT, KSTAT_DATA_ULONG, "rxmac_65_127_cnt"}, 3343859Sml29623 {XMAC_STAT_RX_HIST3_CNT, KSTAT_DATA_ULONG, "rxmac_128_255_cnt"}, 3353859Sml29623 {XMAC_STAT_RX_HIST4_CNT, KSTAT_DATA_ULONG, "rxmac_256_511_cnt"}, 3363859Sml29623 {XMAC_STAT_RX_HIST5_CNT, KSTAT_DATA_ULONG, "rxmac_512_1023_cnt"}, 3373859Sml29623 {XMAC_STAT_RX_HIST6_CNT, KSTAT_DATA_ULONG, "rxmac_1024_1522_cnt"}, 3383859Sml29623 {XMAC_STAT_RX_HIST7_CNT, KSTAT_DATA_ULONG, "rxmac_jumbo_cnt"}, 3393859Sml29623 {XMAC_STAT_RX_BROADCAST_CNT, KSTAT_DATA_ULONG, "rxmac_broadcast_cnt"}, 3403859Sml29623 {XMAC_STAT_RX_MULT_CNT, KSTAT_DATA_ULONG, "rxmac_multicast_cnt"}, 3413859Sml29623 {XMAC_STAT_RX_FRAG_CNT, KSTAT_DATA_ULONG, "rxmac_fragment_cnt"}, 3423859Sml29623 {XMAC_STAT_RX_FRAME_ALIGN_ERR_CNT, 3433859Sml29623 KSTAT_DATA_ULONG, "rxmac_alignment_err"}, 3443859Sml29623 {XMAC_STAT_RX_LINKFAULT_ERR_CNT, 3453859Sml29623 KSTAT_DATA_ULONG, "rxmac_linkfault_errs"}, 3463859Sml29623 {XMAC_STAT_RX_REMOTEFAULT_ERR, 3473859Sml29623 KSTAT_DATA_ULONG, "rxmac_remote_faults"}, 3483859Sml29623 {XMAC_STAT_RX_LOCALFAULT_ERR, 3493859Sml29623 KSTAT_DATA_ULONG, "rxmac_local_faults"}, 3503859Sml29623 {XMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_ULONG, "rxmac_pause_cnt"}, 3513859Sml29623 {XMAC_STAT_TX_PAUSE_STATE, KSTAT_DATA_ULONG, "txmac_pause_state"}, 3523859Sml29623 {XMAC_STAT_TX_NOPAUSE_STATE, KSTAT_DATA_ULONG, "txmac_nopause_state"}, 3533859Sml29623 {XMAC_STAT_XPCS_DESKEW_ERR_CNT, 3543859Sml29623 KSTAT_DATA_ULONG, "xpcs_deskew_err_cnt"}, 3553859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 3563859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L0_ERR_CNT, 3573859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln0_symbol_err_cnt"}, 3583859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L1_ERR_CNT, 3593859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln1_symbol_err_cnt"}, 3603859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L2_ERR_CNT, 3613859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln2_symbol_err_cnt"}, 3623859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L3_ERR_CNT, 3633859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln3_symbol_err_cnt"}, 3643859Sml29623 #endif 3653859Sml29623 {XMAC_STAT_END, NULL, NULL} 3663859Sml29623 }; 3673859Sml29623 3683859Sml29623 typedef enum { 3693859Sml29623 BMAC_STAT_TX_FRAME_CNT = 0, 3703859Sml29623 BMAC_STAT_TX_UNDERRUN_ERR, 3713859Sml29623 BMAC_STAT_TX_MAX_PKT_ERR, 3723859Sml29623 BMAC_STAT_TX_BYTE_CNT, 3733859Sml29623 BMAC_STAT_RX_FRAME_CNT, 3743859Sml29623 BMAC_STAT_RX_BYTE_CNT, 3753859Sml29623 BMAC_STAT_RX_OVERFLOW_ERR, 3763859Sml29623 BMAC_STAT_RX_ALIGN_ERR_CNT, 3773859Sml29623 BMAC_STAT_RX_CRC_ERR_CNT, 3783859Sml29623 BMAC_STAT_RX_LEN_ERR_CNT, 3793859Sml29623 BMAC_STAT_RX_VIOL_ERR_CNT, 3803859Sml29623 BMAC_STAT_RX_PAUSE_CNT, 3813859Sml29623 BMAC_STAT_RX_PAUSE_STATE, 3823859Sml29623 BMAC_STAT_RX_NOPAUSE_STATE, 3833859Sml29623 BMAC_STAT_END 3843859Sml29623 } nxge_bmac_stat_index_t; 3853859Sml29623 3863859Sml29623 nxge_kstat_index_t nxge_bmac_stats[] = { 3873859Sml29623 {BMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_ULONG, "txmac_frame_cnt"}, 3883859Sml29623 {BMAC_STAT_TX_UNDERRUN_ERR, KSTAT_DATA_ULONG, "txmac_underrun_err"}, 3893859Sml29623 {BMAC_STAT_TX_MAX_PKT_ERR, KSTAT_DATA_ULONG, "txmac_max_pkt_err"}, 3903859Sml29623 {BMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_ULONG, "txmac_byte_cnt"}, 3913859Sml29623 {BMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_ULONG, "rxmac_frame_cnt"}, 3923859Sml29623 {BMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_ULONG, "rxmac_byte_cnt"}, 3933859Sml29623 {BMAC_STAT_RX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_overflow_err"}, 3943859Sml29623 {BMAC_STAT_RX_ALIGN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_align_err_cnt"}, 3953859Sml29623 {BMAC_STAT_RX_CRC_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_crc_err_cnt"}, 3963859Sml29623 {BMAC_STAT_RX_LEN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_len_err_cnt"}, 3973859Sml29623 {BMAC_STAT_RX_VIOL_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_viol_err_cnt"}, 3983859Sml29623 {BMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_ULONG, "rxmac_pause_cnt"}, 3993859Sml29623 {BMAC_STAT_RX_PAUSE_STATE, KSTAT_DATA_ULONG, "txmac_pause_state"}, 4003859Sml29623 {BMAC_STAT_RX_NOPAUSE_STATE, KSTAT_DATA_ULONG, "tx_nopause_state"}, 4013859Sml29623 {BMAC_STAT_END, NULL, NULL} 4023859Sml29623 }; 4033859Sml29623 4043859Sml29623 typedef enum { 4053859Sml29623 ZCP_STAT_ERRORS, 4063859Sml29623 ZCP_STAT_INITS, 4073859Sml29623 ZCP_STAT_RRFIFO_UNDERRUN, 4083859Sml29623 ZCP_STAT_RRFIFO_OVERRUN, 4093859Sml29623 ZCP_STAT_RSPFIFO_UNCORR_ERR, 4103859Sml29623 ZCP_STAT_BUFFER_OVERFLOW, 4113859Sml29623 ZCP_STAT_STAT_TBL_PERR, 4123859Sml29623 ZCP_STAT_DYN_TBL_PERR, 4133859Sml29623 ZCP_STAT_BUF_TBL_PERR, 4143859Sml29623 ZCP_STAT_TT_PROGRAM_ERR, 4153859Sml29623 ZCP_STAT_RSP_TT_INDEX_ERR, 4163859Sml29623 ZCP_STAT_SLV_TT_INDEX_ERR, 4173859Sml29623 ZCP_STAT_ZCP_TT_INDEX_ERR, 4183859Sml29623 ZCP_STAT_ZCP_ACCESS_FAIL, 4193859Sml29623 ZCP_CFIFO_ECC, 4203859Sml29623 ZCP_STAT_END 4213859Sml29623 } nxge_zcp_stat_index_t; 4223859Sml29623 4233859Sml29623 nxge_kstat_index_t nxge_zcp_stats[] = { 4243859Sml29623 {ZCP_STAT_ERRORS, KSTAT_DATA_ULONG, "zcp_erros"}, 4253859Sml29623 {ZCP_STAT_INITS, KSTAT_DATA_ULONG, "zcp_inits"}, 4263859Sml29623 {ZCP_STAT_RRFIFO_UNDERRUN, KSTAT_DATA_ULONG, "zcp_rrfifo_underrun"}, 4273859Sml29623 {ZCP_STAT_RRFIFO_OVERRUN, KSTAT_DATA_ULONG, "zcp_rrfifo_overrun"}, 4283859Sml29623 {ZCP_STAT_RSPFIFO_UNCORR_ERR, KSTAT_DATA_ULONG, 4293859Sml29623 "zcp_rspfifo_uncorr_err"}, 4303859Sml29623 {ZCP_STAT_BUFFER_OVERFLOW, KSTAT_DATA_ULONG, "zcp_buffer_overflow"}, 4313859Sml29623 {ZCP_STAT_STAT_TBL_PERR, KSTAT_DATA_ULONG, "zcp_stat_tbl_perr"}, 4323859Sml29623 {ZCP_STAT_DYN_TBL_PERR, KSTAT_DATA_ULONG, "zcp_dyn_tbl_perr"}, 4333859Sml29623 {ZCP_STAT_BUF_TBL_PERR, KSTAT_DATA_ULONG, "zcp_buf_tbl_perr"}, 4343859Sml29623 {ZCP_STAT_TT_PROGRAM_ERR, KSTAT_DATA_ULONG, "zcp_tt_program_err"}, 4353859Sml29623 {ZCP_STAT_RSP_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_rsp_tt_index_err"}, 4363859Sml29623 {ZCP_STAT_SLV_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_slv_tt_index_err"}, 4373859Sml29623 {ZCP_STAT_ZCP_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_zcp_tt_index_err"}, 4383859Sml29623 {ZCP_STAT_ZCP_ACCESS_FAIL, KSTAT_DATA_ULONG, "zcp_access_fail"}, 4393859Sml29623 {ZCP_STAT_ZCP_ACCESS_FAIL, KSTAT_DATA_ULONG, "zcp_cfifo_ecc"}, 4403859Sml29623 {ZCP_STAT_END, NULL, NULL} 4413859Sml29623 }; 4423859Sml29623 4433859Sml29623 typedef enum { 4443859Sml29623 FFLP_STAT_TCAM_PERR, 4453859Sml29623 FFLP_STAT_TCAM_ECC_ERR, 4463859Sml29623 FFLP_STAT_VLAN_PERR, 4473859Sml29623 FFLP_STAT_HASH_LOOKUP_ERR, 4483859Sml29623 FFLP_STAT_HASH_P0_PIO_ERR, 4493859Sml29623 FFLP_STAT_HASH_P1_PIO_ERR, 4503859Sml29623 FFLP_STAT_HASH_P2_PIO_ERR, 4513859Sml29623 FFLP_STAT_HASH_P3_PIO_ERR, 4523859Sml29623 FFLP_STAT_HASH_P4_PIO_ERR, 4533859Sml29623 FFLP_STAT_HASH_P5_PIO_ERR, 4543859Sml29623 FFLP_STAT_HASH_P6_PIO_ERR, 4553859Sml29623 FFLP_STAT_HASH_P7_PIO_ERR, 4563859Sml29623 FFLP_STAT_END 4573859Sml29623 } nxge_fflp_stat_index_t; 4583859Sml29623 4593859Sml29623 nxge_kstat_index_t nxge_fflp_stats[] = { 4603859Sml29623 {FFLP_STAT_TCAM_PERR, KSTAT_DATA_ULONG, "fflp_tcam_perr"}, 4613859Sml29623 {FFLP_STAT_TCAM_ECC_ERR, KSTAT_DATA_ULONG, "fflp_tcam_ecc_err"}, 4623859Sml29623 {FFLP_STAT_VLAN_PERR, KSTAT_DATA_ULONG, "fflp_vlan_perr"}, 4633859Sml29623 {FFLP_STAT_HASH_LOOKUP_ERR, KSTAT_DATA_ULONG, "fflp_hash_lookup_err"}, 4643859Sml29623 {FFLP_STAT_HASH_P0_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p0_pio_err"}, 4653859Sml29623 {FFLP_STAT_HASH_P1_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p1_pio_err"}, 4663859Sml29623 {FFLP_STAT_HASH_P2_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p2_pio_err"}, 4673859Sml29623 {FFLP_STAT_HASH_P3_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p3_pio_err"}, 4683859Sml29623 {FFLP_STAT_HASH_P4_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p4_pio_err"}, 4693859Sml29623 {FFLP_STAT_HASH_P5_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p5_pio_err"}, 4703859Sml29623 {FFLP_STAT_HASH_P6_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p6_pio_err"}, 4713859Sml29623 {FFLP_STAT_HASH_P7_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p7_pio_err"}, 4723859Sml29623 {FFLP_STAT_END, NULL, NULL} 4733859Sml29623 }; 4743859Sml29623 4753859Sml29623 typedef enum { 4763859Sml29623 MMAC_MAX_ADDR, 4773859Sml29623 MMAC_AVAIL_ADDR, 4783859Sml29623 MMAC_ADDR_POOL1, 4793859Sml29623 MMAC_ADDR_POOL2, 4803859Sml29623 MMAC_ADDR_POOL3, 4813859Sml29623 MMAC_ADDR_POOL4, 4823859Sml29623 MMAC_ADDR_POOL5, 4833859Sml29623 MMAC_ADDR_POOL6, 4843859Sml29623 MMAC_ADDR_POOL7, 4853859Sml29623 MMAC_ADDR_POOL8, 4863859Sml29623 MMAC_ADDR_POOL9, 4873859Sml29623 MMAC_ADDR_POOL10, 4883859Sml29623 MMAC_ADDR_POOL11, 4893859Sml29623 MMAC_ADDR_POOL12, 4903859Sml29623 MMAC_ADDR_POOL13, 4913859Sml29623 MMAC_ADDR_POOL14, 4923859Sml29623 MMAC_ADDR_POOL15, 4933859Sml29623 MMAC_ADDR_POOL16, 4943859Sml29623 MMAC_STATS_END 4953859Sml29623 } nxge_mmac_stat_index_t; 4963859Sml29623 4973859Sml29623 nxge_kstat_index_t nxge_mmac_stats[] = { 4983859Sml29623 {MMAC_MAX_ADDR, KSTAT_DATA_UINT64, "max_mmac_addr"}, 4993859Sml29623 {MMAC_AVAIL_ADDR, KSTAT_DATA_UINT64, "avail_mmac_addr"}, 5003859Sml29623 {MMAC_ADDR_POOL1, KSTAT_DATA_UINT64, "mmac_addr_1"}, 5013859Sml29623 {MMAC_ADDR_POOL2, KSTAT_DATA_UINT64, "mmac_addr_2"}, 5023859Sml29623 {MMAC_ADDR_POOL3, KSTAT_DATA_UINT64, "mmac_addr_3"}, 5033859Sml29623 {MMAC_ADDR_POOL4, KSTAT_DATA_UINT64, "mmac_addr_4"}, 5043859Sml29623 {MMAC_ADDR_POOL5, KSTAT_DATA_UINT64, "mmac_addr_5"}, 5053859Sml29623 {MMAC_ADDR_POOL6, KSTAT_DATA_UINT64, "mmac_addr_6"}, 5063859Sml29623 {MMAC_ADDR_POOL7, KSTAT_DATA_UINT64, "mmac_addr_7"}, 5073859Sml29623 {MMAC_ADDR_POOL8, KSTAT_DATA_UINT64, "mmac_addr_8"}, 5083859Sml29623 {MMAC_ADDR_POOL9, KSTAT_DATA_UINT64, "mmac_addr_9"}, 5093859Sml29623 {MMAC_ADDR_POOL10, KSTAT_DATA_UINT64, "mmac_addr_10"}, 5103859Sml29623 {MMAC_ADDR_POOL11, KSTAT_DATA_UINT64, "mmac_addr_11"}, 5113859Sml29623 {MMAC_ADDR_POOL12, KSTAT_DATA_UINT64, "mmac_addr_12"}, 5123859Sml29623 {MMAC_ADDR_POOL13, KSTAT_DATA_UINT64, "mmac_addr_13"}, 5133859Sml29623 {MMAC_ADDR_POOL14, KSTAT_DATA_UINT64, "mmac_addr_14"}, 5143859Sml29623 {MMAC_ADDR_POOL15, KSTAT_DATA_UINT64, "mmac_addr_15"}, 5153859Sml29623 {MMAC_ADDR_POOL16, KSTAT_DATA_UINT64, "mmac_addr_16"}, 5163859Sml29623 {MMAC_STATS_END, NULL, NULL}, 5173859Sml29623 }; 5183859Sml29623 5193859Sml29623 /* ARGSUSED */ 5203859Sml29623 int 5213859Sml29623 nxge_tdc_stat_update(kstat_t *ksp, int rw) 5223859Sml29623 { 5233859Sml29623 p_nxge_t nxgep; 5243859Sml29623 p_nxge_tdc_kstat_t tdc_kstatsp; 5253859Sml29623 p_nxge_tx_ring_stats_t statsp; 5263859Sml29623 int channel; 5273859Sml29623 char *ch_name, *end; 5283859Sml29623 5293859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 5303859Sml29623 if (nxgep == NULL) 5313859Sml29623 return (-1); 5323859Sml29623 5333859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rxstat_update")); 5343859Sml29623 5353859Sml29623 ch_name = ksp->ks_name; 5363859Sml29623 ch_name += strlen(TDC_NAME_FORMAT1); 5373859Sml29623 channel = mi_strtol(ch_name, &end, 10); 5383859Sml29623 5393859Sml29623 tdc_kstatsp = (p_nxge_tdc_kstat_t)ksp->ks_data; 5403859Sml29623 statsp = (p_nxge_tx_ring_stats_t)&nxgep->statsp->tdc_stats[channel]; 5413859Sml29623 5423859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 5433859Sml29623 "nxge_tdc_stat_update data $%p statsp $%p channel %d", 5443859Sml29623 ksp->ks_data, statsp, channel)); 5453859Sml29623 5463859Sml29623 if (rw == KSTAT_WRITE) { 5473859Sml29623 statsp->opackets = tdc_kstatsp->opackets.value.ull; 5483859Sml29623 statsp->obytes = tdc_kstatsp->obytes.value.ull; 5493859Sml29623 statsp->oerrors = tdc_kstatsp->oerrors.value.ull; 5503859Sml29623 statsp->mbox_err = tdc_kstatsp->mbox_err.value.ul; 5513859Sml29623 statsp->pkt_size_err = tdc_kstatsp->pkt_size_err.value.ul; 5523859Sml29623 statsp->tx_ring_oflow = tdc_kstatsp->tx_ring_oflow.value.ul; 5533859Sml29623 statsp->pre_buf_par_err = 5543859Sml29623 tdc_kstatsp->pref_buf_ecc_err.value.ul; 5553859Sml29623 statsp->nack_pref = tdc_kstatsp->nack_pref.value.ul; 5563859Sml29623 statsp->nack_pkt_rd = tdc_kstatsp->nack_pkt_rd.value.ul; 5573859Sml29623 statsp->conf_part_err = tdc_kstatsp->conf_part_err.value.ul; 5583859Sml29623 statsp->pkt_part_err = tdc_kstatsp->pkt_prt_err.value.ul; 5593859Sml29623 } else { 5603859Sml29623 tdc_kstatsp->opackets.value.ull = statsp->opackets; 5613859Sml29623 tdc_kstatsp->obytes.value.ull = statsp->obytes; 5623859Sml29623 tdc_kstatsp->oerrors.value.ull = statsp->oerrors; 5633859Sml29623 tdc_kstatsp->tx_hdr_pkts.value.ull = statsp->tx_hdr_pkts; 5643859Sml29623 tdc_kstatsp->tx_ddi_pkts.value.ull = statsp->tx_ddi_pkts; 5653859Sml29623 tdc_kstatsp->tx_dvma_pkts.value.ull = statsp->tx_dvma_pkts; 5663859Sml29623 tdc_kstatsp->tx_max_pend.value.ull = statsp->tx_max_pend; 5673859Sml29623 tdc_kstatsp->mbox_err.value.ul = statsp->mbox_err; 5683859Sml29623 tdc_kstatsp->pkt_size_err.value.ul = statsp->pkt_size_err; 5693859Sml29623 tdc_kstatsp->tx_ring_oflow.value.ul = statsp->tx_ring_oflow; 5703859Sml29623 tdc_kstatsp->pref_buf_ecc_err.value.ul = 5713859Sml29623 statsp->pre_buf_par_err; 5723859Sml29623 tdc_kstatsp->nack_pref.value.ul = statsp->nack_pref; 5733859Sml29623 tdc_kstatsp->nack_pkt_rd.value.ul = statsp->nack_pkt_rd; 5743859Sml29623 tdc_kstatsp->conf_part_err.value.ul = statsp->conf_part_err; 5753859Sml29623 tdc_kstatsp->pkt_prt_err.value.ul = statsp->pkt_part_err; 5763859Sml29623 tdc_kstatsp->tx_starts.value.ul = statsp->tx_starts; 5773859Sml29623 tdc_kstatsp->tx_nocanput.value.ul = statsp->tx_nocanput; 5783859Sml29623 tdc_kstatsp->tx_msgdup_fail.value.ul = statsp->tx_msgdup_fail; 5793859Sml29623 tdc_kstatsp->tx_allocb_fail.value.ul = statsp->tx_allocb_fail; 5803859Sml29623 tdc_kstatsp->tx_no_desc.value.ul = statsp->tx_no_desc; 5813859Sml29623 tdc_kstatsp->tx_dma_bind_fail.value.ul = 5823859Sml29623 statsp->tx_dma_bind_fail; 5833859Sml29623 } 5843859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_tdc_stat_update")); 5853859Sml29623 return (0); 5863859Sml29623 } 5873859Sml29623 5883859Sml29623 /* ARGSUSED */ 5893859Sml29623 int 5903859Sml29623 nxge_rdc_stat_update(kstat_t *ksp, int rw) 5913859Sml29623 { 5923859Sml29623 p_nxge_t nxgep; 5933859Sml29623 p_nxge_rdc_kstat_t rdc_kstatsp; 5943859Sml29623 p_nxge_rx_ring_stats_t statsp; 5953859Sml29623 int channel; 5963859Sml29623 char *ch_name, *end; 5973859Sml29623 5983859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 5993859Sml29623 if (nxgep == NULL) 6003859Sml29623 return (-1); 6013859Sml29623 6023859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rdc_stat_update")); 6033859Sml29623 6043859Sml29623 ch_name = ksp->ks_name; 6053859Sml29623 ch_name += strlen(RDC_NAME_FORMAT1); 6063859Sml29623 channel = mi_strtol(ch_name, &end, 10); 6073859Sml29623 6083859Sml29623 rdc_kstatsp = (p_nxge_rdc_kstat_t)ksp->ks_data; 6093859Sml29623 statsp = (p_nxge_rx_ring_stats_t)&nxgep->statsp->rdc_stats[channel]; 6103859Sml29623 6113859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 6123859Sml29623 "nxge_rdc_stat_update $%p statsp $%p channel %d", 6133859Sml29623 ksp->ks_data, statsp, channel)); 6143859Sml29623 6153859Sml29623 if (rw == KSTAT_WRITE) { 6163859Sml29623 statsp->dcf_err = rdc_kstatsp->dcf_err.value.ul; 6173859Sml29623 statsp->rcr_ack_err = rdc_kstatsp->rcr_ack_err.value.ul; 6183859Sml29623 statsp->dc_fifo_err = rdc_kstatsp->dc_fifoflow_err.value.ul; 6193859Sml29623 statsp->rcr_sha_par = rdc_kstatsp->rcr_sha_par_err.value.ul; 6203859Sml29623 statsp->rbr_pre_par = rdc_kstatsp->rbr_pre_par_err.value.ul; 6213859Sml29623 statsp->wred_drop = rdc_kstatsp->wred_drop.value.ul; 6223859Sml29623 statsp->rbr_pre_empty = rdc_kstatsp->rbr_pre_emty.value.ul; 6233859Sml29623 statsp->rcr_shadow_full = rdc_kstatsp->rcr_shadow_full.value.ul; 6243859Sml29623 statsp->rx_rbr_tmout = rdc_kstatsp->rbr_tmout.value.ul; 6253859Sml29623 statsp->rsp_cnt_err = rdc_kstatsp->rsp_cnt_err.value.ul; 6263859Sml29623 statsp->byte_en_bus = rdc_kstatsp->byte_en_bus.value.ul; 6273859Sml29623 statsp->rsp_dat_err = rdc_kstatsp->rsp_dat_err.value.ul; 628*6028Ssbehera statsp->pkt_too_long_err = 629*6028Ssbehera rdc_kstatsp->pkt_too_long_err.value.ul; 6303859Sml29623 statsp->l2_err = rdc_kstatsp->compl_l2_err.value.ul; 6313859Sml29623 statsp->l4_cksum_err = rdc_kstatsp->compl_l4_cksum_err.value.ul; 6323859Sml29623 statsp->fflp_soft_err = 6333859Sml29623 rdc_kstatsp->compl_fflp_soft_err.value.ul; 6343859Sml29623 statsp->zcp_soft_err = rdc_kstatsp->compl_zcp_soft_err.value.ul; 6353859Sml29623 statsp->config_err = rdc_kstatsp->config_err.value.ul; 6363859Sml29623 statsp->rcrincon = rdc_kstatsp->rcrincon.value.ul; 6373859Sml29623 statsp->rcrfull = rdc_kstatsp->rcrfull.value.ul; 6383859Sml29623 statsp->rbr_empty = rdc_kstatsp->rbr_empty.value.ul; 6393859Sml29623 statsp->rbrfull = rdc_kstatsp->rbrfull.value.ul; 6403859Sml29623 statsp->rbrlogpage = rdc_kstatsp->rbrlogpage.value.ul; 6413859Sml29623 statsp->cfiglogpage = rdc_kstatsp->cfiglogpage.value.ul; 6423859Sml29623 } else { 6433859Sml29623 rdc_kstatsp->ipackets.value.ull = statsp->ipackets; 6443859Sml29623 rdc_kstatsp->rbytes.value.ull = statsp->ibytes; 6453859Sml29623 rdc_kstatsp->errors.value.ul = statsp->ierrors; 6463859Sml29623 rdc_kstatsp->dcf_err.value.ul = statsp->dcf_err; 6473859Sml29623 rdc_kstatsp->rcr_ack_err.value.ul = statsp->rcr_ack_err; 6483859Sml29623 rdc_kstatsp->dc_fifoflow_err.value.ul = statsp->dc_fifo_err; 6493859Sml29623 rdc_kstatsp->rcr_sha_par_err.value.ul = statsp->rcr_sha_par; 6503859Sml29623 rdc_kstatsp->rbr_pre_par_err.value.ul = statsp->rbr_pre_par; 6513859Sml29623 rdc_kstatsp->wred_drop.value.ul = statsp->wred_drop; 6523859Sml29623 rdc_kstatsp->port_drop_pkt.value.ul = statsp->port_drop_pkt; 6533859Sml29623 rdc_kstatsp->rbr_pre_emty.value.ul = statsp->rbr_pre_empty; 6543859Sml29623 rdc_kstatsp->rcr_shadow_full.value.ul = statsp->rcr_shadow_full; 6553859Sml29623 rdc_kstatsp->rbr_tmout.value.ul = statsp->rx_rbr_tmout; 6563859Sml29623 rdc_kstatsp->rsp_cnt_err.value.ul = statsp->rsp_cnt_err; 6573859Sml29623 rdc_kstatsp->byte_en_bus.value.ul = statsp->byte_en_bus; 6583859Sml29623 rdc_kstatsp->rsp_dat_err.value.ul = statsp->rsp_dat_err; 659*6028Ssbehera rdc_kstatsp->pkt_too_long_err.value.ul = 660*6028Ssbehera statsp->pkt_too_long_err; 6613859Sml29623 rdc_kstatsp->compl_l2_err.value.ul = statsp->l2_err; 6623859Sml29623 rdc_kstatsp->compl_l4_cksum_err.value.ul = statsp->l4_cksum_err; 6633859Sml29623 rdc_kstatsp->compl_fflp_soft_err.value.ul = 6643859Sml29623 statsp->fflp_soft_err; 6653859Sml29623 rdc_kstatsp->compl_zcp_soft_err.value.ul = statsp->zcp_soft_err; 6663859Sml29623 rdc_kstatsp->config_err.value.ul = statsp->config_err; 6673859Sml29623 rdc_kstatsp->rcrincon.value.ul = statsp->rcrincon; 6683859Sml29623 rdc_kstatsp->rcrfull.value.ul = statsp->rcrfull; 6693859Sml29623 rdc_kstatsp->rbr_empty.value.ul = statsp->rbr_empty; 6703859Sml29623 rdc_kstatsp->rbrfull.value.ul = statsp->rbrfull; 6713859Sml29623 rdc_kstatsp->rbrlogpage.value.ul = statsp->rbrlogpage; 6723859Sml29623 rdc_kstatsp->cfiglogpage.value.ul = statsp->cfiglogpage; 6733859Sml29623 } 6743859Sml29623 6753859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_rdc_stat_update")); 6763859Sml29623 return (0); 6773859Sml29623 } 6783859Sml29623 6793859Sml29623 /* ARGSUSED */ 6803859Sml29623 int 6813859Sml29623 nxge_rdc_sys_stat_update(kstat_t *ksp, int rw) 6823859Sml29623 { 6833859Sml29623 p_nxge_t nxgep; 6843859Sml29623 p_nxge_rdc_sys_kstat_t rdc_sys_kstatsp; 6853859Sml29623 p_nxge_rdc_sys_stats_t statsp; 6863859Sml29623 6873859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 6883859Sml29623 if (nxgep == NULL) 6893859Sml29623 return (-1); 6903859Sml29623 6913859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rdc_sys_stat_update")); 6923859Sml29623 6933859Sml29623 rdc_sys_kstatsp = (p_nxge_rdc_sys_kstat_t)ksp->ks_data; 6943859Sml29623 statsp = (p_nxge_rdc_sys_stats_t)&nxgep->statsp->rdc_sys_stats; 6953859Sml29623 6963859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "nxge_rdc_sys_stat_update %llx", 6973859Sml29623 ksp->ks_data)); 6983859Sml29623 6993859Sml29623 if (rw == KSTAT_WRITE) { 7003859Sml29623 statsp->id_mismatch = rdc_sys_kstatsp->id_mismatch.value.ul; 7013859Sml29623 statsp->ipp_eop_err = rdc_sys_kstatsp->ipp_eop_err.value.ul; 7023859Sml29623 statsp->zcp_eop_err = rdc_sys_kstatsp->zcp_eop_err.value.ul; 7033859Sml29623 } else { 7043859Sml29623 rdc_sys_kstatsp->id_mismatch.value.ul = statsp->id_mismatch; 7053859Sml29623 rdc_sys_kstatsp->ipp_eop_err.value.ul = statsp->ipp_eop_err; 7063859Sml29623 rdc_sys_kstatsp->zcp_eop_err.value.ul = statsp->zcp_eop_err; 7073859Sml29623 } 7083859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_rdc_sys_stat_update")); 7093859Sml29623 return (0); 7103859Sml29623 } 7113859Sml29623 7123859Sml29623 /* ARGSUSED */ 7133859Sml29623 static int 7143859Sml29623 nxge_txc_stat_update(kstat_t *ksp, int rw) 7153859Sml29623 { 7163859Sml29623 p_nxge_t nxgep; 7173859Sml29623 p_nxge_txc_kstat_t txc_kstatsp; 7183859Sml29623 p_nxge_txc_stats_t statsp; 7193859Sml29623 7203859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 7213859Sml29623 7223859Sml29623 if (nxgep == NULL) 7233859Sml29623 return (-1); 7243859Sml29623 7253859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_txc_stat_update")); 7263859Sml29623 7273859Sml29623 txc_kstatsp = (p_nxge_txc_kstat_t)ksp->ks_data; 7283859Sml29623 statsp = (p_nxge_txc_stats_t)&nxgep->statsp->txc_stats; 7293859Sml29623 7303859Sml29623 if (rw == KSTAT_WRITE) { 7313859Sml29623 statsp->pkt_stuffed = txc_kstatsp->pkt_stuffed.value.ul; 7323859Sml29623 statsp->pkt_xmit = txc_kstatsp->pkt_xmit.value.ul; 7333859Sml29623 statsp->ro_correct_err = txc_kstatsp->ro_correct_err.value.ul; 7343859Sml29623 statsp->ro_uncorrect_err = 7353859Sml29623 txc_kstatsp->ro_uncorrect_err.value.ul; 7363859Sml29623 statsp->sf_correct_err = txc_kstatsp->sf_correct_err.value.ul; 7373859Sml29623 statsp->sf_uncorrect_err = 7383859Sml29623 txc_kstatsp->sf_uncorrect_err.value.ul; 7393859Sml29623 statsp->address_failed = txc_kstatsp->address_failed.value.ul; 7403859Sml29623 statsp->dma_failed = txc_kstatsp->dma_failed.value.ul; 7413859Sml29623 statsp->length_failed = txc_kstatsp->length_failed.value.ul; 7423859Sml29623 statsp->pkt_assy_dead = txc_kstatsp->pkt_assy_dead.value.ul; 7433859Sml29623 statsp->reorder_err = txc_kstatsp->reorder_err.value.ul; 7443859Sml29623 } else { 7453859Sml29623 txc_kstatsp->pkt_stuffed.value.ul = statsp->pkt_stuffed; 7463859Sml29623 txc_kstatsp->pkt_xmit.value.ul = statsp->pkt_xmit; 7473859Sml29623 txc_kstatsp->ro_correct_err.value.ul = statsp->ro_correct_err; 7483859Sml29623 txc_kstatsp->ro_uncorrect_err.value.ul = 7493859Sml29623 statsp->ro_uncorrect_err; 7503859Sml29623 txc_kstatsp->sf_correct_err.value.ul = statsp->sf_correct_err; 7513859Sml29623 txc_kstatsp->sf_uncorrect_err.value.ul = 7523859Sml29623 statsp->sf_uncorrect_err; 7533859Sml29623 txc_kstatsp->address_failed.value.ul = statsp->address_failed; 7543859Sml29623 txc_kstatsp->dma_failed.value.ul = statsp->dma_failed; 7553859Sml29623 txc_kstatsp->length_failed.value.ul = statsp->length_failed; 7563859Sml29623 txc_kstatsp->pkt_assy_dead.value.ul = statsp->pkt_assy_dead; 7573859Sml29623 txc_kstatsp->reorder_err.value.ul = statsp->reorder_err; 7583859Sml29623 } 7593859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_txc_stat_update")); 7603859Sml29623 return (0); 7613859Sml29623 } 7623859Sml29623 7633859Sml29623 /* ARGSUSED */ 7643859Sml29623 int 7653859Sml29623 nxge_ipp_stat_update(kstat_t *ksp, int rw) 7663859Sml29623 { 7673859Sml29623 p_nxge_t nxgep; 7683859Sml29623 p_nxge_ipp_kstat_t ipp_kstatsp; 7693859Sml29623 p_nxge_ipp_stats_t statsp; 7703859Sml29623 7713859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 7723859Sml29623 if (nxgep == NULL) 7733859Sml29623 return (-1); 7743859Sml29623 7753859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_ipp_stat_update")); 7763859Sml29623 7773859Sml29623 ipp_kstatsp = (p_nxge_ipp_kstat_t)ksp->ks_data; 7783859Sml29623 statsp = (p_nxge_ipp_stats_t)&nxgep->statsp->ipp_stats; 7793859Sml29623 7803859Sml29623 if (rw == KSTAT_WRITE) { 7813859Sml29623 statsp->eop_miss = ipp_kstatsp->eop_miss.value.ul; 7823859Sml29623 statsp->sop_miss = ipp_kstatsp->sop_miss.value.ul; 7833859Sml29623 statsp->dfifo_ue = ipp_kstatsp->dfifo_ue.value.ul; 7843859Sml29623 statsp->ecc_err_cnt = ipp_kstatsp->ecc_err_cnt.value.ul; 7854439Sml29623 statsp->pfifo_perr = ipp_kstatsp->pfifo_perr.value.ul; 7863859Sml29623 statsp->pfifo_over = ipp_kstatsp->pfifo_over.value.ul; 7873859Sml29623 statsp->pfifo_und = ipp_kstatsp->pfifo_und.value.ul; 7883859Sml29623 statsp->bad_cs_cnt = ipp_kstatsp->bad_cs_cnt.value.ul; 7893859Sml29623 statsp->pkt_dis_cnt = ipp_kstatsp->pkt_dis_cnt.value.ul; 7903859Sml29623 } else { 7913859Sml29623 ipp_kstatsp->eop_miss.value.ul = statsp->eop_miss; 7923859Sml29623 ipp_kstatsp->sop_miss.value.ul = statsp->sop_miss; 7933859Sml29623 ipp_kstatsp->dfifo_ue.value.ul = statsp->dfifo_ue; 7943859Sml29623 ipp_kstatsp->ecc_err_cnt.value.ul = statsp->ecc_err_cnt; 7954439Sml29623 ipp_kstatsp->pfifo_perr.value.ul = statsp->pfifo_perr; 7963859Sml29623 ipp_kstatsp->pfifo_over.value.ul = statsp->pfifo_over; 7973859Sml29623 ipp_kstatsp->pfifo_und.value.ul = statsp->pfifo_und; 7983859Sml29623 ipp_kstatsp->bad_cs_cnt.value.ul = statsp->bad_cs_cnt; 7993859Sml29623 ipp_kstatsp->pkt_dis_cnt.value.ul = statsp->pkt_dis_cnt; 8003859Sml29623 } 8013859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_ipp_stat_update")); 8023859Sml29623 return (0); 8033859Sml29623 } 8043859Sml29623 8053859Sml29623 /* ARGSUSED */ 8063859Sml29623 int 8073859Sml29623 nxge_xmac_stat_update(kstat_t *ksp, int rw) 8083859Sml29623 { 8093859Sml29623 p_nxge_t nxgep; 8103859Sml29623 p_nxge_xmac_kstat_t xmac_kstatsp; 8113859Sml29623 p_nxge_xmac_stats_t statsp; 8123859Sml29623 8133859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 8143859Sml29623 if (nxgep == NULL) 8153859Sml29623 return (-1); 8163859Sml29623 8173859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_xmac_stat_update")); 8183859Sml29623 8193859Sml29623 xmac_kstatsp = (p_nxge_xmac_kstat_t)ksp->ks_data; 8203859Sml29623 statsp = (p_nxge_xmac_stats_t)&nxgep->statsp->xmac_stats; 8213859Sml29623 8223859Sml29623 if (rw == KSTAT_WRITE) { 8233859Sml29623 statsp->tx_frame_cnt = xmac_kstatsp->tx_frame_cnt.value.ul; 8243859Sml29623 statsp->tx_underflow_err = 8253859Sml29623 xmac_kstatsp->tx_underflow_err.value.ul; 8263859Sml29623 statsp->tx_maxpktsize_err = 8273859Sml29623 xmac_kstatsp->tx_maxpktsize_err.value.ul; 8283859Sml29623 statsp->tx_overflow_err = 8293859Sml29623 xmac_kstatsp->tx_overflow_err.value.ul; 8303859Sml29623 statsp->tx_fifo_xfr_err = 8313859Sml29623 xmac_kstatsp->tx_fifo_xfr_err.value.ul; 8323859Sml29623 statsp->tx_byte_cnt = xmac_kstatsp->tx_byte_cnt.value.ul; 8333859Sml29623 statsp->rx_underflow_err = 8343859Sml29623 xmac_kstatsp->rx_underflow_err.value.ul; 8353859Sml29623 statsp->rx_overflow_err = 8363859Sml29623 xmac_kstatsp->rx_overflow_err.value.ul; 8373859Sml29623 statsp->rx_crc_err_cnt = xmac_kstatsp->rx_crc_err_cnt.value.ul; 8383859Sml29623 statsp->rx_len_err_cnt = xmac_kstatsp->rx_len_err_cnt.value.ul; 8393859Sml29623 statsp->rx_viol_err_cnt = 8403859Sml29623 xmac_kstatsp->rx_viol_err_cnt.value.ul; 8413859Sml29623 statsp->rx_byte_cnt = xmac_kstatsp->rx_byte_cnt.value.ul; 8423859Sml29623 statsp->rx_hist1_cnt = xmac_kstatsp->rx_hist1_cnt.value.ul; 8433859Sml29623 statsp->rx_hist2_cnt = xmac_kstatsp->rx_hist2_cnt.value.ul; 8443859Sml29623 statsp->rx_hist3_cnt = xmac_kstatsp->rx_hist3_cnt.value.ul; 8453859Sml29623 statsp->rx_hist4_cnt = xmac_kstatsp->rx_hist4_cnt.value.ul; 8463859Sml29623 statsp->rx_hist5_cnt = xmac_kstatsp->rx_hist5_cnt.value.ul; 8473859Sml29623 statsp->rx_hist6_cnt = xmac_kstatsp->rx_hist6_cnt.value.ul; 8483859Sml29623 statsp->rx_mult_cnt = xmac_kstatsp->rx_mult_cnt.value.ul; 8493859Sml29623 statsp->rx_frag_cnt = xmac_kstatsp->rx_frag_cnt.value.ul; 8503859Sml29623 statsp->rx_frame_align_err_cnt = 8513859Sml29623 xmac_kstatsp->rx_frame_align_err_cnt.value.ul; 8523859Sml29623 statsp->rx_linkfault_err_cnt = 8533859Sml29623 xmac_kstatsp->rx_linkfault_err_cnt.value.ul; 8543859Sml29623 statsp->rx_localfault_err = 8553859Sml29623 xmac_kstatsp->rx_local_fault_err_cnt.value.ul; 8563859Sml29623 statsp->rx_remotefault_err = 8573859Sml29623 xmac_kstatsp->rx_remote_fault_err_cnt.value.ul; 8583859Sml29623 statsp->xpcs_deskew_err_cnt = 8593859Sml29623 xmac_kstatsp->xpcs_deskew_err_cnt.value.ul; 8603859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 8613859Sml29623 statsp->xpcs_ln0_symbol_err_cnt = 8623859Sml29623 xmac_kstatsp->xpcs_ln0_symbol_err_cnt.value.ul; 8633859Sml29623 statsp->xpcs_ln1_symbol_err_cnt = 8643859Sml29623 xmac_kstatsp->xpcs_ln1_symbol_err_cnt.value.ul; 8653859Sml29623 statsp->xpcs_ln2_symbol_err_cnt = 8663859Sml29623 xmac_kstatsp->xpcs_ln2_symbol_err_cnt.value.ul; 8673859Sml29623 statsp->xpcs_ln3_symbol_err_cnt = 8683859Sml29623 xmac_kstatsp->xpcs_ln3_symbol_err_cnt.value.ul; 8693859Sml29623 #endif 8703859Sml29623 } else { 8713859Sml29623 xmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt; 8723859Sml29623 xmac_kstatsp->tx_underflow_err.value.ul = 8733859Sml29623 statsp->tx_underflow_err; 8743859Sml29623 xmac_kstatsp->tx_maxpktsize_err.value.ul = 8753859Sml29623 statsp->tx_maxpktsize_err; 8763859Sml29623 xmac_kstatsp->tx_overflow_err.value.ul = 8773859Sml29623 statsp->tx_overflow_err; 8783859Sml29623 xmac_kstatsp->tx_fifo_xfr_err.value.ul = 8793859Sml29623 statsp->tx_fifo_xfr_err; 8803859Sml29623 xmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt; 8813859Sml29623 xmac_kstatsp->rx_underflow_err.value.ul = 8823859Sml29623 statsp->rx_underflow_err; 8833859Sml29623 xmac_kstatsp->rx_overflow_err.value.ul = 8843859Sml29623 statsp->rx_overflow_err; 8853859Sml29623 xmac_kstatsp->rx_crc_err_cnt.value.ul = statsp->rx_crc_err_cnt; 8863859Sml29623 xmac_kstatsp->rx_len_err_cnt.value.ul = statsp->rx_len_err_cnt; 8873859Sml29623 xmac_kstatsp->rx_viol_err_cnt.value.ul = 8883859Sml29623 statsp->rx_viol_err_cnt; 8893859Sml29623 xmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt; 8903859Sml29623 xmac_kstatsp->rx_hist1_cnt.value.ul = statsp->rx_hist1_cnt; 8913859Sml29623 xmac_kstatsp->rx_hist2_cnt.value.ul = statsp->rx_hist2_cnt; 8923859Sml29623 xmac_kstatsp->rx_hist3_cnt.value.ul = statsp->rx_hist3_cnt; 8933859Sml29623 xmac_kstatsp->rx_hist4_cnt.value.ul = statsp->rx_hist4_cnt; 8943859Sml29623 xmac_kstatsp->rx_hist5_cnt.value.ul = statsp->rx_hist5_cnt; 8953859Sml29623 xmac_kstatsp->rx_hist6_cnt.value.ul = statsp->rx_hist6_cnt; 8963859Sml29623 xmac_kstatsp->rx_mult_cnt.value.ul = statsp->rx_mult_cnt; 8973859Sml29623 xmac_kstatsp->rx_frag_cnt.value.ul = statsp->rx_frag_cnt; 8983859Sml29623 xmac_kstatsp->rx_frame_align_err_cnt.value.ul = 8993859Sml29623 statsp->rx_frame_align_err_cnt; 9003859Sml29623 xmac_kstatsp->rx_linkfault_err_cnt.value.ul = 9013859Sml29623 statsp->rx_linkfault_err_cnt; 9023859Sml29623 xmac_kstatsp->rx_local_fault_err_cnt.value.ul = 9033859Sml29623 statsp->rx_localfault_err; 9043859Sml29623 xmac_kstatsp->rx_remote_fault_err_cnt.value.ul = 9053859Sml29623 statsp->rx_remotefault_err; 9063859Sml29623 xmac_kstatsp->xpcs_deskew_err_cnt.value.ul = 9073859Sml29623 statsp->xpcs_deskew_err_cnt; 9083859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 9093859Sml29623 xmac_kstatsp->xpcs_ln0_symbol_err_cnt.value.ul = 9103859Sml29623 statsp->xpcs_ln0_symbol_err_cnt; 9113859Sml29623 xmac_kstatsp->xpcs_ln1_symbol_err_cnt.value.ul = 9123859Sml29623 statsp->xpcs_ln1_symbol_err_cnt; 9133859Sml29623 xmac_kstatsp->xpcs_ln2_symbol_err_cnt.value.ul = 9143859Sml29623 statsp->xpcs_ln2_symbol_err_cnt; 9153859Sml29623 xmac_kstatsp->xpcs_ln3_symbol_err_cnt.value.ul = 9163859Sml29623 statsp->xpcs_ln3_symbol_err_cnt; 9173859Sml29623 #endif 9183859Sml29623 } 9193859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_xmac_stat_update")); 9203859Sml29623 return (0); 9213859Sml29623 } 9223859Sml29623 9233859Sml29623 /* ARGSUSED */ 9243859Sml29623 int 9253859Sml29623 nxge_bmac_stat_update(kstat_t *ksp, int rw) 9263859Sml29623 { 9273859Sml29623 p_nxge_t nxgep; 9283859Sml29623 p_nxge_bmac_kstat_t bmac_kstatsp; 9293859Sml29623 p_nxge_bmac_stats_t statsp; 9303859Sml29623 9313859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 9323859Sml29623 if (nxgep == NULL) 9333859Sml29623 return (-1); 9343859Sml29623 9353859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_bmac_stat_update")); 9363859Sml29623 9373859Sml29623 bmac_kstatsp = (p_nxge_bmac_kstat_t)ksp->ks_data; 9383859Sml29623 statsp = (p_nxge_bmac_stats_t)&nxgep->statsp->bmac_stats; 9393859Sml29623 9403859Sml29623 if (rw == KSTAT_WRITE) { 9413859Sml29623 statsp->tx_frame_cnt = bmac_kstatsp->tx_frame_cnt.value.ul; 9423859Sml29623 statsp->tx_underrun_err = 9433859Sml29623 bmac_kstatsp->tx_underrun_err.value.ul; 9443859Sml29623 statsp->tx_max_pkt_err = bmac_kstatsp->tx_max_pkt_err.value.ul; 9453859Sml29623 statsp->tx_byte_cnt = bmac_kstatsp->tx_byte_cnt.value.ul; 9463859Sml29623 statsp->rx_frame_cnt = bmac_kstatsp->rx_frame_cnt.value.ul; 9473859Sml29623 statsp->rx_byte_cnt = bmac_kstatsp->rx_byte_cnt.value.ul; 9483859Sml29623 statsp->rx_overflow_err = 9493859Sml29623 bmac_kstatsp->rx_overflow_err.value.ul; 9503859Sml29623 statsp->rx_align_err_cnt = 9513859Sml29623 bmac_kstatsp->rx_align_err_cnt.value.ul; 9523859Sml29623 statsp->rx_crc_err_cnt = bmac_kstatsp->rx_crc_err_cnt.value.ul; 9533859Sml29623 statsp->rx_len_err_cnt = bmac_kstatsp->rx_len_err_cnt.value.ul; 9543859Sml29623 statsp->rx_viol_err_cnt = 9553859Sml29623 bmac_kstatsp->rx_viol_err_cnt.value.ul; 9563859Sml29623 } else { 9573859Sml29623 bmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt; 9583859Sml29623 bmac_kstatsp->tx_underrun_err.value.ul = 9593859Sml29623 statsp->tx_underrun_err; 9603859Sml29623 bmac_kstatsp->tx_max_pkt_err.value.ul = statsp->tx_max_pkt_err; 9613859Sml29623 bmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt; 9623859Sml29623 bmac_kstatsp->rx_frame_cnt.value.ul = statsp->rx_frame_cnt; 9633859Sml29623 bmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt; 9643859Sml29623 bmac_kstatsp->rx_overflow_err.value.ul = 9653859Sml29623 statsp->rx_overflow_err; 9663859Sml29623 bmac_kstatsp->rx_align_err_cnt.value.ul = 9673859Sml29623 statsp->rx_align_err_cnt; 9683859Sml29623 bmac_kstatsp->rx_crc_err_cnt.value.ul = statsp->rx_crc_err_cnt; 9693859Sml29623 bmac_kstatsp->rx_len_err_cnt.value.ul = statsp->rx_len_err_cnt; 9703859Sml29623 bmac_kstatsp->rx_viol_err_cnt.value.ul = 9713859Sml29623 statsp->rx_viol_err_cnt; 9723859Sml29623 } 9733859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_bmac_stat_update")); 9743859Sml29623 return (0); 9753859Sml29623 } 9763859Sml29623 9773859Sml29623 /* ARGSUSED */ 9783859Sml29623 int 9793859Sml29623 nxge_zcp_stat_update(kstat_t *ksp, int rw) 9803859Sml29623 { 9813859Sml29623 p_nxge_t nxgep; 9823859Sml29623 p_nxge_zcp_kstat_t zcp_kstatsp; 9833859Sml29623 p_nxge_zcp_stats_t statsp; 9843859Sml29623 9853859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 9863859Sml29623 if (nxgep == NULL) 9873859Sml29623 return (-1); 9883859Sml29623 9893859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_zcp_stat_update")); 9903859Sml29623 9913859Sml29623 zcp_kstatsp = (p_nxge_zcp_kstat_t)ksp->ks_data; 9923859Sml29623 statsp = (p_nxge_zcp_stats_t)&nxgep->statsp->zcp_stats; 9933859Sml29623 9943859Sml29623 if (rw == KSTAT_WRITE) { 9953859Sml29623 statsp->rrfifo_underrun = zcp_kstatsp->rrfifo_underrun.value.ul; 9963859Sml29623 statsp->rrfifo_overrun = zcp_kstatsp->rrfifo_overrun.value.ul; 9973859Sml29623 statsp->rspfifo_uncorr_err = 9983859Sml29623 zcp_kstatsp->rspfifo_uncorr_err.value.ul; 9993859Sml29623 statsp->buffer_overflow = zcp_kstatsp->buffer_overflow.value.ul; 10003859Sml29623 statsp->stat_tbl_perr = zcp_kstatsp->stat_tbl_perr.value.ul; 10013859Sml29623 statsp->dyn_tbl_perr = zcp_kstatsp->dyn_tbl_perr.value.ul; 10023859Sml29623 statsp->buf_tbl_perr = zcp_kstatsp->buf_tbl_perr.value.ul; 10033859Sml29623 statsp->tt_program_err = zcp_kstatsp->tt_program_err.value.ul; 10043859Sml29623 statsp->rsp_tt_index_err = 10053859Sml29623 zcp_kstatsp->rsp_tt_index_err.value.ul; 10063859Sml29623 statsp->slv_tt_index_err = 10073859Sml29623 zcp_kstatsp->slv_tt_index_err.value.ul; 10083859Sml29623 statsp->zcp_tt_index_err = 10093859Sml29623 zcp_kstatsp->zcp_tt_index_err.value.ul; 10103859Sml29623 statsp->cfifo_ecc = zcp_kstatsp->cfifo_ecc.value.ul; 10113859Sml29623 } else { 10123859Sml29623 zcp_kstatsp->rrfifo_underrun.value.ul = statsp->rrfifo_underrun; 10133859Sml29623 zcp_kstatsp->rrfifo_overrun.value.ul = statsp->rrfifo_overrun; 10143859Sml29623 zcp_kstatsp->rspfifo_uncorr_err.value.ul = 10153859Sml29623 statsp->rspfifo_uncorr_err; 10163859Sml29623 zcp_kstatsp->buffer_overflow.value.ul = 10173859Sml29623 statsp->buffer_overflow; 10183859Sml29623 zcp_kstatsp->stat_tbl_perr.value.ul = statsp->stat_tbl_perr; 10193859Sml29623 zcp_kstatsp->dyn_tbl_perr.value.ul = statsp->dyn_tbl_perr; 10203859Sml29623 zcp_kstatsp->buf_tbl_perr.value.ul = statsp->buf_tbl_perr; 10213859Sml29623 zcp_kstatsp->tt_program_err.value.ul = statsp->tt_program_err; 10223859Sml29623 zcp_kstatsp->rsp_tt_index_err.value.ul = 10233859Sml29623 statsp->rsp_tt_index_err; 10243859Sml29623 zcp_kstatsp->slv_tt_index_err.value.ul = 10253859Sml29623 statsp->slv_tt_index_err; 10263859Sml29623 zcp_kstatsp->zcp_tt_index_err.value.ul = 10273859Sml29623 statsp->zcp_tt_index_err; 10283859Sml29623 zcp_kstatsp->cfifo_ecc.value.ul = statsp->cfifo_ecc; 10293859Sml29623 } 10303859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_zcp_stat_update")); 10313859Sml29623 return (0); 10323859Sml29623 } 10333859Sml29623 10343859Sml29623 /* ARGSUSED */ 10353859Sml29623 int 10363859Sml29623 nxge_fflp_stat_update(kstat_t *ksp, int rw) 10373859Sml29623 { 10383859Sml29623 p_nxge_t nxgep; 10393859Sml29623 p_nxge_fflp_kstat_t fflp_kstatsp; 10403859Sml29623 p_nxge_fflp_stats_t statsp; 10413859Sml29623 int ldc_grp; 10423859Sml29623 10433859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 10443859Sml29623 if (nxgep == NULL) 10453859Sml29623 return (-1); 10463859Sml29623 10473859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_fflp_stat_update")); 10483859Sml29623 10493859Sml29623 fflp_kstatsp = (p_nxge_fflp_kstat_t)ksp->ks_data; 10503859Sml29623 statsp = (p_nxge_fflp_stats_t)&nxgep->statsp->fflp_stats; 10513859Sml29623 10523859Sml29623 if (rw == KSTAT_WRITE) { 10533859Sml29623 statsp->tcam_parity_err = fflp_kstatsp->fflp_tcam_perr.value.ul; 10543859Sml29623 statsp->tcam_ecc_err = fflp_kstatsp->fflp_tcam_ecc_err.value.ul; 10553859Sml29623 statsp->vlan_parity_err = fflp_kstatsp->fflp_vlan_perr.value.ul; 10563859Sml29623 statsp->hash_lookup_err = 10573859Sml29623 fflp_kstatsp->fflp_hasht_lookup_err.value.ul; 10583859Sml29623 for (ldc_grp = 0; ldc_grp < MAX_PARTITION; ldc_grp++) { 10593859Sml29623 statsp->hash_pio_err[ldc_grp] = 10603859Sml29623 fflp_kstatsp->fflp_hasht_data_err[ldc_grp]. 10613859Sml29623 value.ul; 10623859Sml29623 } 10633859Sml29623 } else { 10643859Sml29623 fflp_kstatsp->fflp_tcam_perr.value.ul = 10653859Sml29623 fflp_kstatsp->fflp_tcam_perr.value.ul; 10663859Sml29623 fflp_kstatsp->fflp_tcam_ecc_err.value.ul = statsp->tcam_ecc_err; 10673859Sml29623 fflp_kstatsp->fflp_vlan_perr.value.ul = statsp->vlan_parity_err; 10683859Sml29623 fflp_kstatsp->fflp_hasht_lookup_err.value.ul = 10693859Sml29623 statsp->hash_lookup_err; 10703859Sml29623 for (ldc_grp = 0; ldc_grp < MAX_PARTITION; ldc_grp++) { 10713859Sml29623 fflp_kstatsp->fflp_hasht_data_err[ldc_grp].value.ul = 10723859Sml29623 statsp->hash_pio_err[ldc_grp]; 10733859Sml29623 } 10743859Sml29623 } 10753859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_fflp_stat_update")); 10763859Sml29623 return (0); 10773859Sml29623 } 10783859Sml29623 10793859Sml29623 /* ARGSUSED */ 10803859Sml29623 static uint64_t 10813859Sml29623 nxge_mac_octet_to_u64(struct ether_addr addr) 10823859Sml29623 { 10833859Sml29623 int i; 10843859Sml29623 uint64_t addr64 = 0; 10853859Sml29623 10863859Sml29623 for (i = ETHERADDRL - 1; i >= 0; i--) { 10873859Sml29623 addr64 <<= 8; 10883859Sml29623 addr64 |= addr.ether_addr_octet[i]; 10893859Sml29623 } 10903859Sml29623 return (addr64); 10913859Sml29623 } 10923859Sml29623 10933859Sml29623 /* ARGSUSED */ 10943859Sml29623 int 10953859Sml29623 nxge_mmac_stat_update(kstat_t *ksp, int rw) 10963859Sml29623 { 10973859Sml29623 p_nxge_t nxgep; 10983859Sml29623 p_nxge_mmac_kstat_t mmac_kstatsp; 10993859Sml29623 p_nxge_mmac_stats_t statsp; 11003859Sml29623 11013859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 11023859Sml29623 if (nxgep == NULL) 11033859Sml29623 return (-1); 11043859Sml29623 11053859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_mmac_stat_update")); 11063859Sml29623 11073859Sml29623 mmac_kstatsp = (p_nxge_mmac_kstat_t)ksp->ks_data; 11083859Sml29623 statsp = (p_nxge_mmac_stats_t)&nxgep->statsp->mmac_stats; 11093859Sml29623 11103859Sml29623 if (rw == KSTAT_WRITE) { 11113859Sml29623 cmn_err(CE_WARN, "Can not write mmac stats"); 11123859Sml29623 } else { 11133859Sml29623 mmac_kstatsp->mmac_max_addr_cnt.value.ul = 11143859Sml29623 statsp->mmac_max_cnt; 11153859Sml29623 mmac_kstatsp->mmac_avail_addr_cnt.value.ul = 11163859Sml29623 statsp->mmac_avail_cnt; 11173859Sml29623 mmac_kstatsp->mmac_addr1.value.ul = 11183859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[0]); 11193859Sml29623 mmac_kstatsp->mmac_addr2.value.ul = 11203859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[1]); 11213859Sml29623 mmac_kstatsp->mmac_addr3.value.ul = 11223859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[2]); 11233859Sml29623 mmac_kstatsp->mmac_addr4.value.ul = 11243859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[3]); 11253859Sml29623 mmac_kstatsp->mmac_addr5.value.ul = 11263859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[4]); 11273859Sml29623 mmac_kstatsp->mmac_addr6.value.ul = 11283859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[5]); 11293859Sml29623 mmac_kstatsp->mmac_addr7.value.ul = 11303859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[6]); 11313859Sml29623 mmac_kstatsp->mmac_addr8.value.ul = 11323859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[7]); 11333859Sml29623 mmac_kstatsp->mmac_addr9.value.ul = 11343859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[8]); 11353859Sml29623 mmac_kstatsp->mmac_addr10.value.ul = 11363859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[9]); 11373859Sml29623 mmac_kstatsp->mmac_addr11.value.ul = 11383859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[10]); 11393859Sml29623 mmac_kstatsp->mmac_addr12.value.ul = 11403859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[11]); 11413859Sml29623 mmac_kstatsp->mmac_addr13.value.ul = 11423859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[12]); 11433859Sml29623 mmac_kstatsp->mmac_addr14.value.ul = 11443859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[13]); 11453859Sml29623 mmac_kstatsp->mmac_addr15.value.ul = 11463859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[14]); 11473859Sml29623 mmac_kstatsp->mmac_addr16.value.ul = 11483859Sml29623 nxge_mac_octet_to_u64(statsp->mmac_avail_pool[15]); 11493859Sml29623 } 11503859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_mmac_stat_update")); 11513859Sml29623 return (0); 11523859Sml29623 } 11533859Sml29623 11543859Sml29623 /* ARGSUSED */ 11553859Sml29623 static kstat_t * 11563859Sml29623 nxge_setup_local_kstat(p_nxge_t nxgep, int instance, char *name, 11573859Sml29623 const nxge_kstat_index_t *ksip, size_t count, 11583859Sml29623 int (*update) (kstat_t *, int)) 11593859Sml29623 { 11603859Sml29623 kstat_t *ksp; 11613859Sml29623 kstat_named_t *knp; 11623859Sml29623 int i; 11633859Sml29623 11643859Sml29623 ksp = kstat_create(NXGE_DRIVER_NAME, instance, name, "net", 11653859Sml29623 KSTAT_TYPE_NAMED, count, 0); 11663859Sml29623 if (ksp == NULL) 11673859Sml29623 return (NULL); 11683859Sml29623 11693859Sml29623 ksp->ks_private = (void *)nxgep; 11703859Sml29623 ksp->ks_update = update; 11713859Sml29623 knp = ksp->ks_data; 11723859Sml29623 11733859Sml29623 for (i = 0; ksip[i].name != NULL; i++) { 11743859Sml29623 kstat_named_init(&knp[i], ksip[i].name, ksip[i].type); 11753859Sml29623 } 11763859Sml29623 11773859Sml29623 kstat_install(ksp); 11783859Sml29623 return (ksp); 11793859Sml29623 } 11803859Sml29623 11813859Sml29623 /* ARGSUSED */ 11823859Sml29623 void 11833859Sml29623 nxge_setup_kstats(p_nxge_t nxgep) 11843859Sml29623 { 11853859Sml29623 struct kstat *ksp; 11863859Sml29623 p_nxge_port_kstat_t nxgekp; 11873859Sml29623 size_t nxge_kstat_sz; 11883859Sml29623 char stat_name[64]; 11893859Sml29623 char mmac_name[64]; 11903859Sml29623 int i; 11913859Sml29623 11923859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_setup_kstats")); 11933859Sml29623 11943859Sml29623 11953859Sml29623 /* Setup RDC statistics */ 11963859Sml29623 for (i = 0; i < nxgep->nrdc; i++) { 11973859Sml29623 (void) sprintf(stat_name, "%s" CH_NAME_FORMAT, 11983859Sml29623 RDC_NAME_FORMAT1, i); 11993859Sml29623 nxgep->statsp->rdc_ksp[i] = nxge_setup_local_kstat(nxgep, 12003859Sml29623 nxgep->instance, stat_name, 12013859Sml29623 &nxge_rdc_stats[0], RDC_STAT_END, nxge_rdc_stat_update); 12023859Sml29623 #ifdef NXGE_DEBUG_ERROR 12033859Sml29623 if (nxgep->statsp->rdc_ksp[i] == NULL) 12043859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 12053859Sml29623 "kstat_create failed for rdc channel %d", i)); 12063859Sml29623 #endif 12073859Sml29623 } 12083859Sml29623 12093859Sml29623 /* Setup RDC System statistics */ 12103859Sml29623 nxgep->statsp->rdc_sys_ksp = nxge_setup_local_kstat(nxgep, 12113859Sml29623 nxgep->instance, 12123859Sml29623 "RDC System Stats", 12133859Sml29623 &nxge_rdc_sys_stats[0], 12143859Sml29623 RDC_SYS_STAT_END, 12153859Sml29623 nxge_rdc_sys_stat_update); 12163859Sml29623 12173859Sml29623 /* Setup IPP statistics */ 12183859Sml29623 nxgep->statsp->ipp_ksp = nxge_setup_local_kstat(nxgep, 12193859Sml29623 nxgep->instance, 12203859Sml29623 "IPP Stats", 12213859Sml29623 &nxge_ipp_stats[0], 12223859Sml29623 IPP_STAT_END, 12233859Sml29623 nxge_ipp_stat_update); 12243859Sml29623 #ifdef NXGE_DEBUG_ERROR 12253859Sml29623 if (nxgep->istatsp->pp_ksp == NULL) 12263859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for ipp")); 12273859Sml29623 #endif 12283859Sml29623 12293859Sml29623 /* Setup TDC statistics */ 12303859Sml29623 for (i = 0; i < nxgep->ntdc; i++) { 12313859Sml29623 (void) sprintf(stat_name, "%s" CH_NAME_FORMAT, 12323859Sml29623 TDC_NAME_FORMAT1, i); 12333859Sml29623 nxgep->statsp->tdc_ksp[i] = nxge_setup_local_kstat(nxgep, 12343859Sml29623 nxgep->instance, 12353859Sml29623 stat_name, 12363859Sml29623 &nxge_tdc_stats[0], 12373859Sml29623 TDC_STAT_END, 12383859Sml29623 nxge_tdc_stat_update); 12393859Sml29623 #ifdef NXGE_DEBUG_ERROR 12403859Sml29623 if (nxgep->statsp->tdc_ksp[i] == NULL) { 12413859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 12423859Sml29623 "kstat_create failed for tdc channel %d", i)); 12433859Sml29623 } 12443859Sml29623 #endif 12453859Sml29623 } 12463859Sml29623 12473859Sml29623 /* Setup TXC statistics */ 12483859Sml29623 nxgep->statsp->txc_ksp = nxge_setup_local_kstat(nxgep, 12493859Sml29623 nxgep->instance, "TXC Stats", &nxge_txc_stats[0], 12503859Sml29623 TXC_STAT_END, nxge_txc_stat_update); 12513859Sml29623 #ifdef NXGE_DEBUG_ERROR 12523859Sml29623 if (nxgep->statsp->txc_ksp == NULL) 12533859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for txc")); 12543859Sml29623 #endif 12553859Sml29623 12563859Sml29623 /* Setup ZCP statistics */ 12573859Sml29623 nxgep->statsp->zcp_ksp = nxge_setup_local_kstat(nxgep, 12583859Sml29623 nxgep->instance, "ZCP Stats", &nxge_zcp_stats[0], 12593859Sml29623 ZCP_STAT_END, nxge_zcp_stat_update); 12603859Sml29623 #ifdef NXGE_DEBUG_ERROR 12613859Sml29623 if (nxgep->statsp->zcp_ksp == NULL) 12623859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for zcp")); 12633859Sml29623 #endif 12643859Sml29623 12653859Sml29623 /* Setup FFLP statistics */ 12663859Sml29623 nxgep->statsp->fflp_ksp[0] = nxge_setup_local_kstat(nxgep, 12673859Sml29623 nxgep->instance, "FFLP Stats", &nxge_fflp_stats[0], 12683859Sml29623 FFLP_STAT_END, nxge_fflp_stat_update); 12693859Sml29623 12703859Sml29623 #ifdef NXGE_DEBUG_ERROR 12713859Sml29623 if (nxgep->statsp->fflp_ksp == NULL) 12723859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 12733859Sml29623 "kstat_create failed for fflp")); 12743859Sml29623 #endif 12753859Sml29623 12763859Sml29623 (void) sprintf(mmac_name, "MMAC Stats%d", nxgep->instance); 12773859Sml29623 nxgep->statsp->mmac_ksp = nxge_setup_local_kstat(nxgep, 12783859Sml29623 nxgep->instance, "MMAC Stats", &nxge_mmac_stats[0], 12793859Sml29623 MMAC_STATS_END, nxge_mmac_stat_update); 12803859Sml29623 12813859Sml29623 nxge_kstat_sz = sizeof (nxge_port_kstat_t) + 12823859Sml29623 sizeof (nxge_mac_kstat_t) - sizeof (kstat_named_t); 12833859Sml29623 12843859Sml29623 if ((ksp = kstat_create(NXGE_DRIVER_NAME, nxgep->instance, 12853859Sml29623 "Port Stats", "net", KSTAT_TYPE_NAMED, 12863859Sml29623 nxge_kstat_sz / sizeof (kstat_named_t), 0)) == NULL) { 12873859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed")); 12883859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_setup_kstats")); 12893859Sml29623 return; 12903859Sml29623 } 12913859Sml29623 12923859Sml29623 /* 12933859Sml29623 * kstats 12943859Sml29623 */ 12953859Sml29623 nxgekp = (p_nxge_port_kstat_t)ksp->ks_data; 12963859Sml29623 12973859Sml29623 /* 12983859Sml29623 * transceiver state informations. 12993859Sml29623 */ 13003859Sml29623 kstat_named_init(&nxgekp->xcvr_inits, "xcvr_inits", 13013859Sml29623 KSTAT_DATA_ULONG); 13023859Sml29623 kstat_named_init(&nxgekp->xcvr_inuse, "xcvr_inuse", 13033859Sml29623 KSTAT_DATA_ULONG); 13043859Sml29623 kstat_named_init(&nxgekp->xcvr_addr, "xcvr_addr", 13053859Sml29623 KSTAT_DATA_ULONG); 13063859Sml29623 kstat_named_init(&nxgekp->xcvr_id, "xcvr_id", 13073859Sml29623 KSTAT_DATA_ULONG); 13083859Sml29623 kstat_named_init(&nxgekp->cap_autoneg, "cap_autoneg", 13093859Sml29623 KSTAT_DATA_ULONG); 13103859Sml29623 kstat_named_init(&nxgekp->cap_10gfdx, "cap_10gfdx", 13113859Sml29623 KSTAT_DATA_ULONG); 13123859Sml29623 kstat_named_init(&nxgekp->cap_10ghdx, "cap_10ghdx", 13133859Sml29623 KSTAT_DATA_ULONG); 13143859Sml29623 kstat_named_init(&nxgekp->cap_1000fdx, "cap_1000fdx", 13153859Sml29623 KSTAT_DATA_ULONG); 13163859Sml29623 kstat_named_init(&nxgekp->cap_1000hdx, "cap_1000hdx", 13173859Sml29623 KSTAT_DATA_ULONG); 13183859Sml29623 kstat_named_init(&nxgekp->cap_100T4, "cap_100T4", 13193859Sml29623 KSTAT_DATA_ULONG); 13203859Sml29623 kstat_named_init(&nxgekp->cap_100fdx, "cap_100fdx", 13213859Sml29623 KSTAT_DATA_ULONG); 13223859Sml29623 kstat_named_init(&nxgekp->cap_100hdx, "cap_100hdx", 13233859Sml29623 KSTAT_DATA_ULONG); 13243859Sml29623 kstat_named_init(&nxgekp->cap_10fdx, "cap_10fdx", 13253859Sml29623 KSTAT_DATA_ULONG); 13263859Sml29623 kstat_named_init(&nxgekp->cap_10hdx, "cap_10hdx", 13273859Sml29623 KSTAT_DATA_ULONG); 13283859Sml29623 kstat_named_init(&nxgekp->cap_asmpause, "cap_asmpause", 13293859Sml29623 KSTAT_DATA_ULONG); 13303859Sml29623 kstat_named_init(&nxgekp->cap_pause, "cap_pause", 13313859Sml29623 KSTAT_DATA_ULONG); 13323859Sml29623 13333859Sml29623 /* 13343859Sml29623 * Link partner capabilities. 13353859Sml29623 */ 13363859Sml29623 kstat_named_init(&nxgekp->lp_cap_autoneg, "lp_cap_autoneg", 13373859Sml29623 KSTAT_DATA_ULONG); 13383859Sml29623 kstat_named_init(&nxgekp->lp_cap_10gfdx, "lp_cap_10gfdx", 13393859Sml29623 KSTAT_DATA_ULONG); 13403859Sml29623 kstat_named_init(&nxgekp->lp_cap_10ghdx, "lp_cap_10ghdx", 13413859Sml29623 KSTAT_DATA_ULONG); 13423859Sml29623 kstat_named_init(&nxgekp->lp_cap_1000fdx, "lp_cap_1000fdx", 13433859Sml29623 KSTAT_DATA_ULONG); 13443859Sml29623 kstat_named_init(&nxgekp->lp_cap_1000hdx, "lp_cap_1000hdx", 13453859Sml29623 KSTAT_DATA_ULONG); 13463859Sml29623 kstat_named_init(&nxgekp->lp_cap_100T4, "lp_cap_100T4", 13473859Sml29623 KSTAT_DATA_ULONG); 13483859Sml29623 kstat_named_init(&nxgekp->lp_cap_100fdx, "lp_cap_100fdx", 13493859Sml29623 KSTAT_DATA_ULONG); 13503859Sml29623 kstat_named_init(&nxgekp->lp_cap_100hdx, "lp_cap_100hdx", 13513859Sml29623 KSTAT_DATA_ULONG); 13523859Sml29623 kstat_named_init(&nxgekp->lp_cap_10fdx, "lp_cap_10fdx", 13533859Sml29623 KSTAT_DATA_ULONG); 13543859Sml29623 kstat_named_init(&nxgekp->lp_cap_10hdx, "lp_cap_10hdx", 13553859Sml29623 KSTAT_DATA_ULONG); 13563859Sml29623 kstat_named_init(&nxgekp->lp_cap_asmpause, "lp_cap_asmpause", 13573859Sml29623 KSTAT_DATA_ULONG); 13583859Sml29623 kstat_named_init(&nxgekp->lp_cap_pause, "lp_cap_pause", 13593859Sml29623 KSTAT_DATA_ULONG); 13603859Sml29623 /* 13613859Sml29623 * Shared link setup. 13623859Sml29623 */ 13633859Sml29623 kstat_named_init(&nxgekp->link_T4, "link_T4", 13643859Sml29623 KSTAT_DATA_ULONG); 13653859Sml29623 kstat_named_init(&nxgekp->link_speed, "link_speed", 13663859Sml29623 KSTAT_DATA_ULONG); 13673859Sml29623 kstat_named_init(&nxgekp->link_duplex, "link_duplex", 13683859Sml29623 KSTAT_DATA_CHAR); 13693859Sml29623 kstat_named_init(&nxgekp->link_asmpause, "link_asmpause", 13703859Sml29623 KSTAT_DATA_ULONG); 13713859Sml29623 kstat_named_init(&nxgekp->link_pause, "link_pause", 13723859Sml29623 KSTAT_DATA_ULONG); 13733859Sml29623 kstat_named_init(&nxgekp->link_up, "link_up", 13743859Sml29623 KSTAT_DATA_ULONG); 13753859Sml29623 13763859Sml29623 /* 13773859Sml29623 * Let the user know the MTU currently in use by the physical MAC 13783859Sml29623 * port. 13793859Sml29623 */ 13803859Sml29623 kstat_named_init(&nxgekp->mac_mtu, "mac_mtu", 13813859Sml29623 KSTAT_DATA_ULONG); 13823859Sml29623 13833859Sml29623 /* 13843859Sml29623 * Loopback statistics. 13853859Sml29623 */ 13863859Sml29623 kstat_named_init(&nxgekp->lb_mode, "lb_mode", 13873859Sml29623 KSTAT_DATA_ULONG); 13883859Sml29623 13893859Sml29623 /* 13903859Sml29623 * This tells the user whether the driver is in QOS mode or not. 13913859Sml29623 */ 13923859Sml29623 kstat_named_init(&nxgekp->qos_mode, "qos_mode", 13933859Sml29623 KSTAT_DATA_ULONG); 13943859Sml29623 13953859Sml29623 /* 13963859Sml29623 * This tells whether the instance is trunked or not 13973859Sml29623 */ 13983859Sml29623 kstat_named_init(&nxgekp->trunk_mode, "trunk_mode", 13993859Sml29623 KSTAT_DATA_ULONG); 14003859Sml29623 14013859Sml29623 #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 14023859Sml29623 kstat_named_init(&nxgekp->mdt_reqs, "mdt_reqs", 14033859Sml29623 KSTAT_DATA_ULONG); 14043859Sml29623 kstat_named_init(&nxgekp->mdt_hdr_bufs, "mdt_hdr_bufs", 14053859Sml29623 KSTAT_DATA_ULONG); 14063859Sml29623 kstat_named_init(&nxgekp->mdt_pld_bufs, "mdt_pld_bufs", 14073859Sml29623 KSTAT_DATA_ULONG); 14083859Sml29623 kstat_named_init(&nxgekp->mdt_pkts, "mdt_pkts", 14093859Sml29623 KSTAT_DATA_ULONG); 14103859Sml29623 kstat_named_init(&nxgekp->mdt_hdrs, "mdt_hdrs", 14113859Sml29623 KSTAT_DATA_ULONG); 14123859Sml29623 kstat_named_init(&nxgekp->mdt_plds, "mdt_plds", 14133859Sml29623 KSTAT_DATA_ULONG); 14143859Sml29623 kstat_named_init(&nxgekp->mdt_hdr_bind_fail, "mdt_hdr_bind_fail", 14153859Sml29623 KSTAT_DATA_ULONG); 14163859Sml29623 kstat_named_init(&nxgekp->mdt_pld_bind_fail, "mdt_pld_bind_fail", 14173859Sml29623 KSTAT_DATA_ULONG); 14183859Sml29623 #endif 14193859Sml29623 #ifdef ACNXGEPT_JUMBO 14203859Sml29623 kstat_named_init(&nxgekp->tx_jumbo_pkts, "tx_jumbo_pkts", 14213859Sml29623 KSTAT_DATA_ULONG); 14223859Sml29623 #endif 14233859Sml29623 14243859Sml29623 /* 14253859Sml29623 * Rx Statistics. 14263859Sml29623 */ 14273859Sml29623 #ifdef ACNXGEPT_JUMBO 14283859Sml29623 kstat_named_init(&nxgekp->rx_jumbo_pkts, "rx_jumbo_pkts", 14293859Sml29623 KSTAT_DATA_ULONG); 14303859Sml29623 #endif 14313859Sml29623 /* General MAC statistics */ 14323859Sml29623 kstat_named_init(&nxgekp->ifspeed, "ifspeed", 14333859Sml29623 KSTAT_DATA_UINT64); 14343859Sml29623 kstat_named_init(&nxgekp->promisc, "promisc", 14353859Sml29623 KSTAT_DATA_CHAR); 14363859Sml29623 kstat_named_init(&nxgekp->rev_id, "rev_id", 14373859Sml29623 KSTAT_DATA_ULONG); 14383859Sml29623 14393859Sml29623 ksp->ks_update = nxge_port_kstat_update; 14403859Sml29623 ksp->ks_private = (void *) nxgep; 14413859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) 14423859Sml29623 nxge_xmac_init_kstats(ksp); 14433859Sml29623 else 14443859Sml29623 nxge_bmac_init_kstats(ksp); 14453859Sml29623 kstat_install(ksp); 14463859Sml29623 nxgep->statsp->port_ksp = ksp; 14473859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_setup_kstats")); 14483859Sml29623 } 14493859Sml29623 14503859Sml29623 /* ARGSUSED */ 14513859Sml29623 void 14523859Sml29623 nxge_xmac_init_kstats(struct kstat *ksp) 14533859Sml29623 { 14543859Sml29623 p_nxge_xmac_kstat_t nxgekp; 14553859Sml29623 14563859Sml29623 nxgekp = (p_nxge_xmac_kstat_t)ksp->ks_data; 14573859Sml29623 14583859Sml29623 /* 14593859Sml29623 * Transmit MAC statistics. 14603859Sml29623 */ 14613859Sml29623 kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 14623859Sml29623 KSTAT_DATA_ULONG); 14633859Sml29623 kstat_named_init(&nxgekp->tx_underflow_err, "txmac_underflow_err", 14643859Sml29623 KSTAT_DATA_ULONG); 14653859Sml29623 kstat_named_init(&nxgekp->tx_overflow_err, "txmac_overflow_err", 14663859Sml29623 KSTAT_DATA_ULONG); 14673859Sml29623 kstat_named_init(&nxgekp->tx_maxpktsize_err, "txmac_maxpktsize_err", 14683859Sml29623 KSTAT_DATA_ULONG); 14693859Sml29623 kstat_named_init(&nxgekp->tx_fifo_xfr_err, "txmac_fifo_xfr_err", 14703859Sml29623 KSTAT_DATA_ULONG); 14713859Sml29623 kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 14723859Sml29623 KSTAT_DATA_ULONG); 14733859Sml29623 14743859Sml29623 /* Receive MAC statistics */ 14753859Sml29623 kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 14763859Sml29623 KSTAT_DATA_ULONG); 14773859Sml29623 kstat_named_init(&nxgekp->rx_underflow_err, "rxmac_underflow_err", 14783859Sml29623 KSTAT_DATA_ULONG); 14793859Sml29623 kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 14803859Sml29623 KSTAT_DATA_ULONG); 14813859Sml29623 kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 14823859Sml29623 KSTAT_DATA_ULONG); 14833859Sml29623 kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 14843859Sml29623 KSTAT_DATA_ULONG); 14853859Sml29623 kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 14863859Sml29623 KSTAT_DATA_ULONG); 14873859Sml29623 kstat_named_init(&nxgekp->rx_frame_align_err_cnt, 14883859Sml29623 "rxmac_alignment_err", 14893859Sml29623 KSTAT_DATA_ULONG); 14903859Sml29623 kstat_named_init(&nxgekp->rx_hist1_cnt, "rxmac_64_cnt", 14913859Sml29623 KSTAT_DATA_ULONG); 14923859Sml29623 kstat_named_init(&nxgekp->rx_hist2_cnt, "rxmac_65_127_cnt", 14933859Sml29623 KSTAT_DATA_ULONG); 14943859Sml29623 kstat_named_init(&nxgekp->rx_hist3_cnt, "rxmac_128_255_cnt", 14953859Sml29623 KSTAT_DATA_ULONG); 14963859Sml29623 kstat_named_init(&nxgekp->rx_hist4_cnt, "rxmac_256_511_cnt", 14973859Sml29623 KSTAT_DATA_ULONG); 14983859Sml29623 kstat_named_init(&nxgekp->rx_hist5_cnt, "rxmac_512_1023_cnt", 14993859Sml29623 KSTAT_DATA_ULONG); 15003859Sml29623 kstat_named_init(&nxgekp->rx_hist6_cnt, "rxmac_1024_1522_cnt", 15013859Sml29623 KSTAT_DATA_ULONG); 15023859Sml29623 kstat_named_init(&nxgekp->rx_broadcast_cnt, "rxmac_broadcast_cnt", 15033859Sml29623 KSTAT_DATA_ULONG); 15043859Sml29623 kstat_named_init(&nxgekp->rx_mult_cnt, "rxmac_multicast_cnt", 15053859Sml29623 KSTAT_DATA_ULONG); 15063859Sml29623 kstat_named_init(&nxgekp->rx_frag_cnt, "rxmac_fragment_cnt", 15073859Sml29623 KSTAT_DATA_ULONG); 15083859Sml29623 kstat_named_init(&nxgekp->rx_linkfault_err_cnt, "rxmac_linkfault_errs", 15093859Sml29623 KSTAT_DATA_ULONG); 15103859Sml29623 kstat_named_init(&nxgekp->rx_remote_fault_err_cnt, 15113859Sml29623 "rxmac_remote_faults", 15123859Sml29623 KSTAT_DATA_ULONG); 15133859Sml29623 kstat_named_init(&nxgekp->rx_local_fault_err_cnt, "rxmac_local_faults", 15143859Sml29623 KSTAT_DATA_ULONG); 15153859Sml29623 15163859Sml29623 /* XPCS statistics */ 15173859Sml29623 15183859Sml29623 kstat_named_init(&nxgekp->xpcs_deskew_err_cnt, "xpcs_deskew_err_cnt", 15193859Sml29623 KSTAT_DATA_ULONG); 15203859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 15213859Sml29623 kstat_named_init(&nxgekp->xpcs_ln0_symbol_err_cnt, 15223859Sml29623 "xpcs_ln0_symbol_err_cnt", 15233859Sml29623 KSTAT_DATA_ULONG); 15243859Sml29623 kstat_named_init(&nxgekp->xpcs_ln1_symbol_err_cnt, 15253859Sml29623 "xpcs_ln1_symbol_err_cnt", 15263859Sml29623 KSTAT_DATA_ULONG); 15273859Sml29623 kstat_named_init(&nxgekp->xpcs_ln2_symbol_err_cnt, 15283859Sml29623 "xpcs_ln2_symbol_err_cnt", 15293859Sml29623 KSTAT_DATA_ULONG); 15303859Sml29623 kstat_named_init(&nxgekp->xpcs_ln3_symbol_err_cnt, 15313859Sml29623 "xpcs_ln3_symbol_err_cnt", 15323859Sml29623 KSTAT_DATA_ULONG); 15333859Sml29623 #endif 15343859Sml29623 } 15353859Sml29623 15363859Sml29623 /* ARGSUSED */ 15373859Sml29623 void 15383859Sml29623 nxge_bmac_init_kstats(struct kstat *ksp) 15393859Sml29623 { 15403859Sml29623 p_nxge_bmac_kstat_t nxgekp; 15413859Sml29623 15423859Sml29623 nxgekp = (p_nxge_bmac_kstat_t)ksp->ks_data; 15433859Sml29623 15443859Sml29623 /* 15453859Sml29623 * Transmit MAC statistics. 15463859Sml29623 */ 15473859Sml29623 kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 15483859Sml29623 KSTAT_DATA_ULONG); 15493859Sml29623 kstat_named_init(&nxgekp->tx_underrun_err, "txmac_underflow_err", 15503859Sml29623 KSTAT_DATA_ULONG); 15513859Sml29623 kstat_named_init(&nxgekp->tx_max_pkt_err, "txmac_maxpktsize_err", 15523859Sml29623 KSTAT_DATA_ULONG); 15533859Sml29623 kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 15543859Sml29623 KSTAT_DATA_ULONG); 15553859Sml29623 15563859Sml29623 /* Receive MAC statistics */ 15573859Sml29623 kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 15583859Sml29623 KSTAT_DATA_ULONG); 15593859Sml29623 kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 15603859Sml29623 KSTAT_DATA_ULONG); 15613859Sml29623 kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 15623859Sml29623 KSTAT_DATA_ULONG); 15633859Sml29623 kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 15643859Sml29623 KSTAT_DATA_ULONG); 15653859Sml29623 kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 15663859Sml29623 KSTAT_DATA_ULONG); 15673859Sml29623 kstat_named_init(&nxgekp->rx_align_err_cnt, "rxmac_alignment_err", 15683859Sml29623 KSTAT_DATA_ULONG); 15693859Sml29623 kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 15703859Sml29623 KSTAT_DATA_ULONG); 15713859Sml29623 } 15723859Sml29623 15733859Sml29623 /* ARGSUSED */ 15743859Sml29623 void 15753859Sml29623 nxge_mac_init_kstats(p_nxge_t nxgep, struct kstat *ksp) 15763859Sml29623 { 15773859Sml29623 p_nxge_mac_kstat_t nxgekp; 15783859Sml29623 15793859Sml29623 nxgekp = (p_nxge_mac_kstat_t)ksp->ks_data; 15803859Sml29623 15813859Sml29623 /* 15823859Sml29623 * Transmit MAC statistics. 15833859Sml29623 */ 15843859Sml29623 kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 15853859Sml29623 KSTAT_DATA_ULONG); 15863859Sml29623 kstat_named_init(&nxgekp->tx_underflow_err, "txmac_underflow_err", 15873859Sml29623 KSTAT_DATA_ULONG); 15883859Sml29623 kstat_named_init(&nxgekp->tx_overflow_err, "txmac_overflow_err", 15893859Sml29623 KSTAT_DATA_ULONG); 15903859Sml29623 kstat_named_init(&nxgekp->tx_maxpktsize_err, "txmac_maxpktsize_err", 15913859Sml29623 KSTAT_DATA_ULONG); 15923859Sml29623 kstat_named_init(&nxgekp->tx_fifo_xfr_err, "txmac_fifo_xfr_err", 15933859Sml29623 KSTAT_DATA_ULONG); 15943859Sml29623 kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 15953859Sml29623 KSTAT_DATA_ULONG); 15963859Sml29623 15973859Sml29623 /* 15983859Sml29623 * Receive MAC statistics 15993859Sml29623 */ 16003859Sml29623 kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 16013859Sml29623 KSTAT_DATA_ULONG); 16023859Sml29623 kstat_named_init(&nxgekp->rx_underflow_err, "rxmac_underflow_err", 16033859Sml29623 KSTAT_DATA_ULONG); 16043859Sml29623 kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 16053859Sml29623 KSTAT_DATA_ULONG); 16063859Sml29623 kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 16073859Sml29623 KSTAT_DATA_ULONG); 16083859Sml29623 kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 16093859Sml29623 KSTAT_DATA_ULONG); 16103859Sml29623 kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 16113859Sml29623 KSTAT_DATA_ULONG); 16123859Sml29623 kstat_named_init(&nxgekp->rx_frame_align_err_cnt, 16133859Sml29623 "rxmac_alignment_err", 16143859Sml29623 KSTAT_DATA_ULONG); 16153859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 16163859Sml29623 kstat_named_init(&nxgekp->rx_hist1_cnt, "rxmac_64_cnt", 16173859Sml29623 KSTAT_DATA_ULONG); 16183859Sml29623 kstat_named_init(&nxgekp->rx_hist2_cnt, "rxmac_65_127_cnt", 16193859Sml29623 KSTAT_DATA_ULONG); 16203859Sml29623 kstat_named_init(&nxgekp->rx_hist3_cnt, "rxmac_128_255_cnt", 16213859Sml29623 KSTAT_DATA_ULONG); 16223859Sml29623 kstat_named_init(&nxgekp->rx_hist4_cnt, "rxmac_256_511_cnt", 16233859Sml29623 KSTAT_DATA_ULONG); 16243859Sml29623 kstat_named_init(&nxgekp->rx_hist5_cnt, "rxmac_512_1023_cnt", 16253859Sml29623 KSTAT_DATA_ULONG); 16263859Sml29623 kstat_named_init(&nxgekp->rx_hist6_cnt, "rxmac_1024_1522_cnt", 16273859Sml29623 KSTAT_DATA_ULONG); 16283859Sml29623 kstat_named_init(&nxgekp->rx_broadcast_cnt, 16293859Sml29623 "rxmac_broadcast_cnt", 16303859Sml29623 KSTAT_DATA_ULONG); 16313859Sml29623 kstat_named_init(&nxgekp->rx_mult_cnt, "rxmac_multicast_cnt", 16323859Sml29623 KSTAT_DATA_ULONG); 16333859Sml29623 kstat_named_init(&nxgekp->rx_frag_cnt, "rxmac_fragment_cnt", 16343859Sml29623 KSTAT_DATA_ULONG); 16353859Sml29623 kstat_named_init(&nxgekp->rx_linkfault_err_cnt, 16363859Sml29623 "rxmac_linkfault_errs", 16373859Sml29623 KSTAT_DATA_ULONG); 16383859Sml29623 kstat_named_init(&nxgekp->rx_remote_fault_err_cnt, 16393859Sml29623 "rxmac_remote_faults", 16403859Sml29623 KSTAT_DATA_ULONG); 16413859Sml29623 kstat_named_init(&nxgekp->rx_local_fault_err_cnt, 16423859Sml29623 "rxmac_local_faults", 16433859Sml29623 KSTAT_DATA_ULONG); 16443859Sml29623 } else if (nxgep->mac.porttype == PORT_TYPE_BMAC) { 16453859Sml29623 kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 16463859Sml29623 KSTAT_DATA_ULONG); 16473859Sml29623 } 16483859Sml29623 } 16493859Sml29623 16503859Sml29623 /* ARGSUSED */ 16513859Sml29623 void 16523859Sml29623 nxge_destroy_kstats(p_nxge_t nxgep) 16533859Sml29623 { 16543859Sml29623 int channel; 16553859Sml29623 p_nxge_dma_pt_cfg_t p_dma_cfgp; 16563859Sml29623 p_nxge_hw_pt_cfg_t p_cfgp; 16573859Sml29623 16583859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_destroy_kstats")); 16593859Sml29623 16603859Sml29623 if (nxgep->statsp == NULL) 16613859Sml29623 return; 16623859Sml29623 if (nxgep->statsp->ksp) 16633859Sml29623 kstat_delete(nxgep->statsp->ksp); 16643859Sml29623 16653859Sml29623 p_dma_cfgp = (p_nxge_dma_pt_cfg_t)&nxgep->pt_config; 16663859Sml29623 p_cfgp = (p_nxge_hw_pt_cfg_t)&p_dma_cfgp->hw_config; 16673859Sml29623 16683859Sml29623 for (channel = 0; channel < p_cfgp->max_rdcs; channel++) { 16693859Sml29623 if (nxgep->statsp->rdc_ksp[channel]) 16703859Sml29623 kstat_delete(nxgep->statsp->rdc_ksp[channel]); 16713859Sml29623 } 16723859Sml29623 16733859Sml29623 for (channel = 0; channel < p_cfgp->max_tdcs; channel++) { 16743859Sml29623 if (nxgep->statsp->tdc_ksp[channel]) 16753859Sml29623 kstat_delete(nxgep->statsp->tdc_ksp[channel]); 16763859Sml29623 } 16773859Sml29623 16783859Sml29623 if (nxgep->statsp->rdc_sys_ksp) 16793859Sml29623 kstat_delete(nxgep->statsp->rdc_sys_ksp); 16803859Sml29623 if (nxgep->statsp->fflp_ksp[0]) 16813859Sml29623 kstat_delete(nxgep->statsp->fflp_ksp[0]); 16823859Sml29623 if (nxgep->statsp->ipp_ksp) 16833859Sml29623 kstat_delete(nxgep->statsp->ipp_ksp); 16843859Sml29623 if (nxgep->statsp->txc_ksp) 16853859Sml29623 kstat_delete(nxgep->statsp->txc_ksp); 16863859Sml29623 if (nxgep->statsp->mac_ksp) 16873859Sml29623 kstat_delete(nxgep->statsp->mac_ksp); 16883859Sml29623 if (nxgep->statsp->zcp_ksp) 16893859Sml29623 kstat_delete(nxgep->statsp->zcp_ksp); 16903859Sml29623 if (nxgep->statsp->port_ksp) 16913859Sml29623 kstat_delete(nxgep->statsp->port_ksp); 16923859Sml29623 if (nxgep->statsp->mmac_ksp) 16933859Sml29623 kstat_delete(nxgep->statsp->mmac_ksp); 16943859Sml29623 if (nxgep->statsp) 16953859Sml29623 KMEM_FREE(nxgep->statsp, nxgep->statsp->stats_size); 16963859Sml29623 16973859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_destroy_kstats")); 16983859Sml29623 } 16993859Sml29623 17003859Sml29623 /* ARGSUSED */ 17013859Sml29623 int 17023859Sml29623 nxge_port_kstat_update(kstat_t *ksp, int rw) 17033859Sml29623 { 17043859Sml29623 p_nxge_t nxgep; 17053859Sml29623 p_nxge_stats_t statsp; 17063859Sml29623 p_nxge_port_kstat_t nxgekp; 17073859Sml29623 17083859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 17093859Sml29623 if (nxgep == NULL) 17103859Sml29623 return (-1); 17113859Sml29623 17123859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_port_kstat_update")); 17133859Sml29623 statsp = (p_nxge_stats_t)nxgep->statsp; 17143859Sml29623 nxgekp = (p_nxge_port_kstat_t)ksp->ks_data; 17153859Sml29623 nxge_save_cntrs(nxgep); 17163859Sml29623 17173859Sml29623 if (rw == KSTAT_WRITE) { 17183859Sml29623 /* 17193859Sml29623 * transceiver state informations. 17203859Sml29623 */ 17213859Sml29623 statsp->mac_stats.xcvr_inits = nxgekp->xcvr_inits.value.ul; 17223859Sml29623 17233859Sml29623 /* 17243859Sml29623 * Tx Statistics. 17253859Sml29623 */ 17263859Sml29623 #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 17273859Sml29623 statsp->port_stats.mdt_reqs = nxgekp->mdt_reqs.value.ul; 17283859Sml29623 statsp->port_stats.mdt_hdr_bufs = nxgekp->mdt_hdr_bufs.value.ul; 17293859Sml29623 statsp->port_stats.mdt_pld_bufs = nxgekp->mdt_pld_bufs.value.ul; 17303859Sml29623 statsp->port_stats.mdt_pkts = nxgekp->mdt_pkts.value.ul; 17313859Sml29623 statsp->port_stats.mdt_hdrs = nxgekp->mdt_hdrs.value.ul; 17323859Sml29623 statsp->port_stats.mdt_plds = nxgekp->mdt_plds.value.ul; 17333859Sml29623 statsp->port_stats.mdt_hdr_bind_fail = 17343859Sml29623 nxgekp->mdt_hdr_bind_fail.value.ul; 17353859Sml29623 statsp->port_stats.mdt_pld_bind_fail = 17363859Sml29623 nxgekp->mdt_pld_bind_fail.value.ul; 17373859Sml29623 #endif 17383859Sml29623 #ifdef ACCEPT_JUMBO 17393859Sml29623 statsp->port_stats.tx_jumbo_pkts = 17403859Sml29623 nxgekp->tx_jumbo_pkts.value.ul; 17413859Sml29623 #endif 17423859Sml29623 /* 17433859Sml29623 * Rx Statistics. 17443859Sml29623 */ 17453859Sml29623 #ifdef ACNXGEPT_JUMBO 17463859Sml29623 statsp->port_stats.rx_jumbo_pkts = 17473859Sml29623 nxgekp->rx_jumbo_pkts.value.ul; 17483859Sml29623 #endif 17493859Sml29623 (void) nxge_xmac_stat_update(ksp, KSTAT_WRITE); 17503859Sml29623 return (0); 17513859Sml29623 } else { 17523859Sml29623 if (nxgep->filter.all_phys_cnt) 17533859Sml29623 (void) strcpy(nxgekp->promisc.value.c, "phys"); 17543859Sml29623 else if (nxgep->filter.all_multicast_cnt) 17553859Sml29623 (void) strcpy(nxgekp->promisc.value.c, "multi"); 17563859Sml29623 else 17573859Sml29623 (void) strcpy(nxgekp->promisc.value.c, "off"); 17583859Sml29623 nxgekp->ifspeed.value.ul = 17593859Sml29623 statsp->mac_stats.link_speed * 1000000ULL; 17603859Sml29623 nxgekp->rev_id.value.ul = statsp->mac_stats.rev_id; 17613859Sml29623 17623859Sml29623 /* 17633859Sml29623 * transceiver state informations. 17643859Sml29623 */ 17653859Sml29623 nxgekp->xcvr_inits.value.ul = statsp->mac_stats.xcvr_inits; 17663859Sml29623 nxgekp->xcvr_inuse.value.ul = statsp->mac_stats.xcvr_inuse; 17673859Sml29623 nxgekp->xcvr_addr.value.ul = statsp->mac_stats.xcvr_portn; 17683859Sml29623 nxgekp->xcvr_id.value.ul = statsp->mac_stats.xcvr_id; 17693859Sml29623 nxgekp->cap_autoneg.value.ul = statsp->mac_stats.cap_autoneg; 17703859Sml29623 nxgekp->cap_10gfdx.value.ul = statsp->mac_stats.cap_10gfdx; 17713859Sml29623 nxgekp->cap_10ghdx.value.ul = statsp->mac_stats.cap_10ghdx; 17723859Sml29623 nxgekp->cap_1000fdx.value.ul = statsp->mac_stats.cap_1000fdx; 17733859Sml29623 nxgekp->cap_1000hdx.value.ul = statsp->mac_stats.cap_1000hdx; 17743859Sml29623 nxgekp->cap_100T4.value.ul = statsp->mac_stats.cap_100T4; 17753859Sml29623 nxgekp->cap_100fdx.value.ul = statsp->mac_stats.cap_100fdx; 17763859Sml29623 nxgekp->cap_100hdx.value.ul = statsp->mac_stats.cap_100hdx; 17773859Sml29623 nxgekp->cap_10fdx.value.ul = statsp->mac_stats.cap_10fdx; 17783859Sml29623 nxgekp->cap_10hdx.value.ul = statsp->mac_stats.cap_10hdx; 17793859Sml29623 nxgekp->cap_asmpause.value.ul = 17803859Sml29623 statsp->mac_stats.cap_asmpause; 17813859Sml29623 nxgekp->cap_pause.value.ul = statsp->mac_stats.cap_pause; 17823859Sml29623 17833859Sml29623 /* 17843859Sml29623 * Link partner capabilities. 17853859Sml29623 */ 17863859Sml29623 nxgekp->lp_cap_autoneg.value.ul = 17873859Sml29623 statsp->mac_stats.lp_cap_autoneg; 17883859Sml29623 nxgekp->lp_cap_10gfdx.value.ul = 17893859Sml29623 statsp->mac_stats.lp_cap_10gfdx; 17903859Sml29623 nxgekp->lp_cap_10ghdx.value.ul = 17913859Sml29623 statsp->mac_stats.lp_cap_10ghdx; 17923859Sml29623 nxgekp->lp_cap_1000fdx.value.ul = 17933859Sml29623 statsp->mac_stats.lp_cap_1000fdx; 17943859Sml29623 nxgekp->lp_cap_1000hdx.value.ul = 17953859Sml29623 statsp->mac_stats.lp_cap_1000hdx; 17963859Sml29623 nxgekp->lp_cap_100T4.value.ul = 17973859Sml29623 statsp->mac_stats.lp_cap_100T4; 17983859Sml29623 nxgekp->lp_cap_100fdx.value.ul = 17993859Sml29623 statsp->mac_stats.lp_cap_100fdx; 18003859Sml29623 nxgekp->lp_cap_100hdx.value.ul = 18013859Sml29623 statsp->mac_stats.lp_cap_100hdx; 18023859Sml29623 nxgekp->lp_cap_10fdx.value.ul = 18033859Sml29623 statsp->mac_stats.lp_cap_10fdx; 18043859Sml29623 nxgekp->lp_cap_10hdx.value.ul = 18053859Sml29623 statsp->mac_stats.lp_cap_10hdx; 18063859Sml29623 nxgekp->lp_cap_asmpause.value.ul = 18073859Sml29623 statsp->mac_stats.lp_cap_asmpause; 18083859Sml29623 nxgekp->lp_cap_pause.value.ul = 18093859Sml29623 statsp->mac_stats.lp_cap_pause; 18103859Sml29623 18113859Sml29623 /* 18123859Sml29623 * Physical link statistics. 18133859Sml29623 */ 18143859Sml29623 nxgekp->link_T4.value.ul = statsp->mac_stats.link_T4; 18153859Sml29623 nxgekp->link_speed.value.ul = statsp->mac_stats.link_speed; 18163859Sml29623 if (statsp->mac_stats.link_duplex == 2) 18173859Sml29623 (void) strcpy(nxgekp->link_duplex.value.c, "full"); 18183859Sml29623 else if (statsp->mac_stats.link_duplex == 1) 18193859Sml29623 (void) strcpy(nxgekp->link_duplex.value.c, "half"); 18203859Sml29623 else 18213859Sml29623 (void) strcpy(nxgekp->link_duplex.value.c, "unknown"); 18223859Sml29623 nxgekp->link_asmpause.value.ul = 18233859Sml29623 statsp->mac_stats.link_asmpause; 18243859Sml29623 nxgekp->link_pause.value.ul = statsp->mac_stats.link_pause; 18253859Sml29623 nxgekp->link_up.value.ul = statsp->mac_stats.link_up; 18263859Sml29623 18273859Sml29623 /* 18283859Sml29623 * Lets the user know the MTU currently in use by the physical 18293859Sml29623 * MAC port. 18303859Sml29623 */ 18313859Sml29623 nxgekp->mac_mtu.value.ul = statsp->mac_stats.mac_mtu; 18323859Sml29623 18333859Sml29623 /* 18343859Sml29623 * Loopback statistics. 18353859Sml29623 */ 18363859Sml29623 nxgekp->lb_mode.value.ul = statsp->port_stats.lb_mode; 18373859Sml29623 18383859Sml29623 /* 18393859Sml29623 * This tells the user whether the driver is in QOS mode or 18403859Sml29623 * not. 18413859Sml29623 */ 18423859Sml29623 nxgekp->qos_mode.value.ul = statsp->port_stats.qos_mode; 18433859Sml29623 18443859Sml29623 /* 18453859Sml29623 * This tells whether the instance is trunked or not 18463859Sml29623 */ 18473859Sml29623 nxgekp->trunk_mode.value.ul = statsp->port_stats.trunk_mode; 18483859Sml29623 18493859Sml29623 #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 18503859Sml29623 nxgekp->mdt_reqs.value.ul = statsp->port_stats.mdt_reqs; 18513859Sml29623 nxgekp->mdt_hdr_bufs.value.ul = 18523859Sml29623 statsp->port_stats.mdt_hdr_bufs; 18533859Sml29623 nxgekp->mdt_pld_bufs.value.ul = 18543859Sml29623 statsp->port_stats.mdt_pld_bufs; 18553859Sml29623 nxgekp->mdt_pkts.value.ul = statsp->port_stats.mdt_pkts; 18563859Sml29623 nxgekp->mdt_hdrs.value.ul = statsp->port_stats.mdt_hdrs; 18573859Sml29623 nxgekp->mdt_plds.value.ul = statsp->port_stats.mdt_plds; 18583859Sml29623 nxgekp->mdt_hdr_bind_fail.value.ul = 18593859Sml29623 statsp->port_stats.mdt_hdr_bind_fail; 18603859Sml29623 nxgekp->mdt_pld_bind_fail.value.ul = 18613859Sml29623 statsp->port_stats.mdt_pld_bind_fail; 18623859Sml29623 #endif 18633859Sml29623 #ifdef ACCEPT_JUMBO 18643859Sml29623 nxgekp->tx_jumbo_pkts.value.ul = 18653859Sml29623 statsp->port_stats.tx_jumbo_pkts; 18663859Sml29623 #endif 18673859Sml29623 #ifdef TX_MBLK_DEST 18683859Sml29623 nxgekp->tx_1_desc.value.ul = statsp->port_stats.tx_1_desc; 18693859Sml29623 nxgekp->tx_2_desc.value.ul = statsp->port_stats.tx_2_desc; 18703859Sml29623 nxgekp->tx_3_desc.value.ul = statsp->port_stats.tx_3_desc; 18713859Sml29623 nxgekp->tx_4_desc.value.ul = statsp->port_stats.tx_4_desc; 18723859Sml29623 nxgekp->tx_5_desc.value.ul = statsp->port_stats.tx_5_desc; 18733859Sml29623 nxgekp->tx_6_desc.value.ul = statsp->port_stats.tx_6_desc; 18743859Sml29623 nxgekp->tx_7_desc.value.ul = statsp->port_stats.tx_7_desc; 18753859Sml29623 nxgekp->tx_8_desc.value.ul = statsp->port_stats.tx_8_desc; 18763859Sml29623 nxgekp->tx_max_desc.value.ul = 18773859Sml29623 statsp->port_stats.tx_max_desc; 18783859Sml29623 #endif 18793859Sml29623 /* 18803859Sml29623 * Rx Statistics. 18813859Sml29623 */ 18823859Sml29623 #ifdef ACCEPT_JUMBO 18833859Sml29623 nxgekp->rx_jumbo_pkts.value.ul = 18843859Sml29623 statsp->port_stats.rx_jumbo_pkts; 18853859Sml29623 #endif 18863859Sml29623 (void) nxge_xmac_stat_update(ksp, KSTAT_READ); 18873859Sml29623 } 18883859Sml29623 18893859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_port_kstat_update")); 18903859Sml29623 return (0); 18913859Sml29623 } 18923859Sml29623 18933859Sml29623 /* 18943859Sml29623 * if this is the first init do not bother to save the 18953859Sml29623 * counters. 18963859Sml29623 */ 18973859Sml29623 /* ARGSUSED */ 18983859Sml29623 void 18993859Sml29623 nxge_save_cntrs(p_nxge_t nxgep) 19003859Sml29623 { 19013859Sml29623 p_nxge_stats_t statsp; 19023859Sml29623 uint64_t val; 19033859Sml29623 npi_handle_t handle; 19043859Sml29623 uint8_t portn; 19053859Sml29623 uint8_t cnt8; 19063859Sml29623 uint16_t cnt16; 19073859Sml29623 uint32_t cnt32; 19083859Sml29623 19093859Sml29623 NXGE_DEBUG_MSG((nxgep, DDI_CTL, "==> nxge_save_cntrs")); 19103859Sml29623 19113859Sml29623 statsp = (p_nxge_stats_t)nxgep->statsp; 19123859Sml29623 handle = nxgep->npi_handle; 19133859Sml29623 portn = nxgep->mac.portnum; 19143859Sml29623 19153859Sml29623 MUTEX_ENTER(&nxgep->ouraddr_lock); 19163859Sml29623 19173859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 19183859Sml29623 /* 19193859Sml29623 * Transmit MAC statistics. 19203859Sml29623 */ 19213859Sml29623 XMAC_REG_RD(handle, portn, XTXMAC_FRM_CNT_REG, &val); 19223859Sml29623 statsp->xmac_stats.tx_frame_cnt += (val & XTXMAC_FRM_CNT_MASK); 19233859Sml29623 XMAC_REG_RD(handle, portn, XTXMAC_BYTE_CNT_REG, &val); 19243859Sml29623 statsp->xmac_stats.tx_byte_cnt += (val & XTXMAC_BYTE_CNT_MASK); 19253859Sml29623 /* 19263859Sml29623 * Receive XMAC statistics. 19273859Sml29623 */ 19283859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_CRC_ER_CNT_REG, &val); 19293859Sml29623 statsp->xmac_stats.rx_crc_err_cnt += 19303859Sml29623 (val & XRXMAC_CRC_ER_CNT_MASK); 19313859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_MPSZER_CNT_REG, &val); 19323859Sml29623 statsp->xmac_stats.rx_len_err_cnt += 19333859Sml29623 (val & XRXMAC_MPSZER_CNT_MASK); 19343859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_CD_VIO_CNT_REG, &val); 19353859Sml29623 statsp->xmac_stats.rx_viol_err_cnt += 19363859Sml29623 (val & XRXMAC_CD_VIO_CNT_MASK); 19373859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_BT_CNT_REG, &val); 19383859Sml29623 statsp->xmac_stats.rx_byte_cnt += (val & XRXMAC_BT_CNT_MASK); 19393859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT1_REG, &val); 19403859Sml29623 statsp->xmac_stats.rx_hist1_cnt += 19413859Sml29623 (val & XRXMAC_HIST_CNT1_MASK); 19423859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT2_REG, &val); 19433859Sml29623 statsp->xmac_stats.rx_hist2_cnt += 19443859Sml29623 (val & XRXMAC_HIST_CNT2_MASK); 19453859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT3_REG, &val); 19463859Sml29623 statsp->xmac_stats.rx_hist3_cnt += 19473859Sml29623 (val & XRXMAC_HIST_CNT3_MASK); 19483859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT4_REG, &val); 19493859Sml29623 statsp->xmac_stats.rx_hist4_cnt += 19503859Sml29623 (val & XRXMAC_HIST_CNT4_MASK); 19513859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT5_REG, &val); 19523859Sml29623 statsp->xmac_stats.rx_hist5_cnt += 19533859Sml29623 (val & XRXMAC_HIST_CNT5_MASK); 19543859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT6_REG, &val); 19553859Sml29623 statsp->xmac_stats.rx_hist6_cnt += 19563859Sml29623 (val & XRXMAC_HIST_CNT6_MASK); 19573859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_BC_FRM_CNT_REG, &val); 19583859Sml29623 statsp->xmac_stats.rx_broadcast_cnt += 19593859Sml29623 (val & XRXMAC_BC_FRM_CNT_MASK); 19603859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_MC_FRM_CNT_REG, &val); 19613859Sml29623 statsp->xmac_stats.rx_mult_cnt += 19623859Sml29623 (val & XRXMAC_MC_FRM_CNT_MASK); 19633859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_FRAG_CNT_REG, &val); 19643859Sml29623 statsp->xmac_stats.rx_frag_cnt += (val & XRXMAC_FRAG_CNT_MASK); 19653859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_AL_ER_CNT_REG, &val); 19663859Sml29623 statsp->xmac_stats.rx_frame_align_err_cnt += 19673859Sml29623 (val & XRXMAC_AL_ER_CNT_MASK); 19683859Sml29623 XMAC_REG_RD(handle, portn, XMAC_LINK_FLT_CNT_REG, &val); 19693859Sml29623 statsp->xmac_stats.rx_linkfault_err_cnt += 19703859Sml29623 (val & XMAC_LINK_FLT_CNT_MASK); 19713859Sml29623 (void) npi_xmac_xpcs_read(handle, portn, 19723859Sml29623 XPCS_REG_DESCWERR_COUNTER, &cnt32); 19733859Sml29623 statsp->xmac_stats.xpcs_deskew_err_cnt += 19743859Sml29623 (val & XMAC_XPCS_DESKEW_ERR_CNT_MASK); 19753859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 19763859Sml29623 (void) npi_xmac_xpcs_read(handle, portn, 19773859Sml29623 XPCS_REG_SYMBOL_ERR_L0_1_COUNTER, &cnt32); 19783859Sml29623 statsp->xmac_stats.xpcs_ln0_symbol_err_cnt += 19793859Sml29623 (cnt32 & XMAC_XPCS_SYM_ERR_CNT_L0_MASK); 19803859Sml29623 statsp->xmac_stats.xpcs_ln1_symbol_err_cnt += 19813859Sml29623 ((cnt32 & XMAC_XPCS_SYM_ERR_CNT_L1_MASK) >> 19823859Sml29623 XMAC_XPCS_SYM_ERR_CNT_L1_SHIFT); 19833859Sml29623 (void) npi_xmac_xpcs_read(handle, portn, 19843859Sml29623 XPCS_REG_SYMBOL_ERR_L2_3_COUNTER, &cnt32); 19853859Sml29623 statsp->xmac_stats.xpcs_ln2_symbol_err_cnt += 19863859Sml29623 (cnt32 & XMAC_XPCS_SYM_ERR_CNT_L2_MASK); 19873859Sml29623 statsp->xmac_stats.xpcs_ln3_symbol_err_cnt += 19883859Sml29623 ((cnt32 & XMAC_XPCS_SYM_ERR_CNT_L3_MASK) >> 19893859Sml29623 XMAC_XPCS_SYM_ERR_CNT_L3_SHIFT); 19903859Sml29623 #endif 19913859Sml29623 } else if (nxgep->mac.porttype == PORT_TYPE_BMAC) { 19923859Sml29623 /* 19933859Sml29623 * Transmit MAC statistics. 19943859Sml29623 */ 19953859Sml29623 BMAC_REG_RD(handle, portn, BTXMAC_FRM_CNT_REG, &val); 19963859Sml29623 statsp->bmac_stats.tx_frame_cnt += (val & BTXMAC_FRM_CNT_MASK); 19973859Sml29623 XMAC_REG_RD(handle, portn, BTXMAC_BYTE_CNT_REG, &val); 19983859Sml29623 statsp->bmac_stats.tx_byte_cnt += (val & BTXMAC_BYTE_CNT_MASK); 19993859Sml29623 20003859Sml29623 /* 20013859Sml29623 * Receive MAC statistics. 20023859Sml29623 */ 20033859Sml29623 XMAC_REG_RD(handle, portn, RXMAC_FRM_CNT_REG, &val); 20043859Sml29623 statsp->bmac_stats.rx_frame_cnt += (val & RXMAC_FRM_CNT_MASK); 20053859Sml29623 XMAC_REG_RD(handle, portn, BRXMAC_BYTE_CNT_REG, &val); 20063859Sml29623 statsp->bmac_stats.rx_byte_cnt += (val & BRXMAC_BYTE_CNT_MASK); 20073859Sml29623 XMAC_REG_RD(handle, portn, BMAC_AL_ER_CNT_REG, &val); 20083859Sml29623 statsp->bmac_stats.rx_align_err_cnt += 20093859Sml29623 (val & BMAC_AL_ER_CNT_MASK); 20103859Sml29623 XMAC_REG_RD(handle, portn, MAC_LEN_ER_CNT_REG, &val); 20113859Sml29623 statsp->bmac_stats.rx_len_err_cnt += 20123859Sml29623 (val & MAC_LEN_ER_CNT_MASK); 20133859Sml29623 XMAC_REG_RD(handle, portn, BMAC_CRC_ER_CNT_REG, &val); 20143859Sml29623 statsp->bmac_stats.rx_crc_err_cnt += 20153859Sml29623 (val & BMAC_CRC_ER_CNT_MASK); 20163859Sml29623 XMAC_REG_RD(handle, portn, BMAC_CD_VIO_CNT_REG, &val); 20173859Sml29623 statsp->bmac_stats.rx_viol_err_cnt += 20183859Sml29623 (val & BMAC_CD_VIO_CNT_MASK); 20193859Sml29623 } 20203859Sml29623 /* Update IPP counters */ 20213859Sml29623 (void) npi_ipp_get_ecc_err_count(handle, portn, &cnt8); 20223859Sml29623 statsp->ipp_stats.ecc_err_cnt += cnt8; 20233859Sml29623 (void) npi_ipp_get_pkt_dis_count(handle, portn, &cnt16); 20243859Sml29623 statsp->ipp_stats.pkt_dis_cnt += cnt16; 20253859Sml29623 (void) npi_ipp_get_cs_err_count(handle, portn, &cnt16); 20263859Sml29623 statsp->ipp_stats.bad_cs_cnt += cnt16; 20273859Sml29623 20283859Sml29623 MUTEX_EXIT(&nxgep->ouraddr_lock); 20293859Sml29623 20303859Sml29623 nxge_save_cntrs_exit: 20313859Sml29623 NXGE_DEBUG_MSG((nxgep, DDI_CTL, "<== nxge_save_cntrs")); 20323859Sml29623 } 20333859Sml29623 20343859Sml29623 /* ARGSUSED */ 20353859Sml29623 int 20363859Sml29623 nxge_m_stat(void *arg, uint_t stat, uint64_t *value) 20373859Sml29623 { 20383859Sml29623 p_nxge_t nxgep = (p_nxge_t)arg; 20393859Sml29623 p_nxge_stats_t statsp; 20403859Sml29623 uint64_t val = 0; 20413859Sml29623 int channel; 20423859Sml29623 20433859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_stat")); 20443859Sml29623 statsp = (p_nxge_stats_t)nxgep->statsp; 20453859Sml29623 20463859Sml29623 switch (stat) { 20473859Sml29623 case MAC_STAT_IFSPEED: 20483859Sml29623 val = statsp->mac_stats.link_speed * 1000000ull; 20493859Sml29623 break; 20503859Sml29623 20513859Sml29623 case MAC_STAT_MULTIRCV: 20523859Sml29623 val = statsp->port_stats.multircv; 20533859Sml29623 break; 20543859Sml29623 20553859Sml29623 case MAC_STAT_BRDCSTRCV: 20563859Sml29623 val = statsp->port_stats.brdcstrcv; 20573859Sml29623 break; 20583859Sml29623 20593859Sml29623 case MAC_STAT_MULTIXMT: 20603859Sml29623 val = statsp->port_stats.multixmt; 20613859Sml29623 break; 20623859Sml29623 20633859Sml29623 case MAC_STAT_BRDCSTXMT: 20643859Sml29623 val = statsp->port_stats.brdcstxmt; 20653859Sml29623 break; 20663859Sml29623 20673859Sml29623 case MAC_STAT_NORCVBUF: 20683859Sml29623 val = statsp->port_stats.norcvbuf; 20693859Sml29623 break; 20703859Sml29623 20713859Sml29623 case MAC_STAT_IERRORS: 20723859Sml29623 case ETHER_STAT_MACRCV_ERRORS: 20733859Sml29623 val = 0; 20743859Sml29623 for (channel = 0; channel < nxgep->nrdc; channel++) { 20753859Sml29623 val += statsp->rdc_stats[channel].ierrors; 20763859Sml29623 } 20773859Sml29623 break; 20783859Sml29623 20793859Sml29623 case MAC_STAT_NOXMTBUF: 20803859Sml29623 val = statsp->port_stats.noxmtbuf; 20813859Sml29623 break; 20823859Sml29623 20833859Sml29623 case MAC_STAT_OERRORS: 20843859Sml29623 for (channel = 0; channel < nxgep->ntdc; channel++) { 20853859Sml29623 val += statsp->tdc_stats[channel].oerrors; 20863859Sml29623 } 20873859Sml29623 20883859Sml29623 break; 20893859Sml29623 20903859Sml29623 case MAC_STAT_COLLISIONS: 20913859Sml29623 val = 0; 20923859Sml29623 break; 20933859Sml29623 20943859Sml29623 case MAC_STAT_RBYTES: 20953859Sml29623 for (channel = 0; channel < nxgep->nrdc; channel++) { 20963859Sml29623 val += statsp->rdc_stats[channel].ibytes; 20973859Sml29623 } 20983859Sml29623 break; 20993859Sml29623 21003859Sml29623 case MAC_STAT_IPACKETS: 21013859Sml29623 for (channel = 0; channel < nxgep->nrdc; channel++) { 21023859Sml29623 val += statsp->rdc_stats[channel].ipackets; 21033859Sml29623 } 21043859Sml29623 break; 21053859Sml29623 21063859Sml29623 case MAC_STAT_OBYTES: 21073859Sml29623 for (channel = 0; channel < nxgep->ntdc; channel++) { 21083859Sml29623 val += statsp->tdc_stats[channel].obytes; 21093859Sml29623 } 21103859Sml29623 break; 21113859Sml29623 21123859Sml29623 case MAC_STAT_OPACKETS: 21133859Sml29623 for (channel = 0; channel < nxgep->ntdc; channel++) { 21143859Sml29623 val += statsp->tdc_stats[channel].opackets; 21153859Sml29623 } 21163859Sml29623 break; 21173859Sml29623 case MAC_STAT_LINK_STATE: 21183859Sml29623 val = statsp->mac_stats.link_duplex; 21193859Sml29623 break; 21203859Sml29623 case MAC_STAT_LINK_UP: 21213859Sml29623 val = statsp->mac_stats.link_up; 21223859Sml29623 break; 21233859Sml29623 case MAC_STAT_PROMISC: 21243859Sml29623 val = statsp->mac_stats.promisc; 21253859Sml29623 break; 21263859Sml29623 case ETHER_STAT_SQE_ERRORS: 21273859Sml29623 val = 0; 21283859Sml29623 break; 21293859Sml29623 21303859Sml29623 case ETHER_STAT_ALIGN_ERRORS: 21313859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) 21323859Sml29623 val = statsp->xmac_stats.rx_frame_align_err_cnt; 21333859Sml29623 else if (nxgep->mac.porttype == PORT_TYPE_BMAC) 21343859Sml29623 val = statsp->bmac_stats.rx_align_err_cnt; 21353859Sml29623 else 21363859Sml29623 val = 0; 21373859Sml29623 break; 21383859Sml29623 21393859Sml29623 case ETHER_STAT_FCS_ERRORS: 21403859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) 21413859Sml29623 val = statsp->xmac_stats.rx_crc_err_cnt; 21423859Sml29623 else if (nxgep->mac.porttype == PORT_TYPE_BMAC) 21433859Sml29623 val = statsp->bmac_stats.rx_crc_err_cnt; 21443859Sml29623 else 21453859Sml29623 val = 0; 21463859Sml29623 break; 21473859Sml29623 21483859Sml29623 case ETHER_STAT_FIRST_COLLISIONS: 21493859Sml29623 val = 0; 21503859Sml29623 break; 21513859Sml29623 21523859Sml29623 case ETHER_STAT_MULTI_COLLISIONS: 21533859Sml29623 val = 0; 21543859Sml29623 break; 21553859Sml29623 21563859Sml29623 case ETHER_STAT_TX_LATE_COLLISIONS: 21573859Sml29623 val = 0; 21583859Sml29623 break; 21593859Sml29623 21603859Sml29623 case ETHER_STAT_EX_COLLISIONS: 21613859Sml29623 val = 0; 21623859Sml29623 break; 21633859Sml29623 21643859Sml29623 case ETHER_STAT_DEFER_XMTS: 21653859Sml29623 val = 0; 21663859Sml29623 break; 21673859Sml29623 21683859Sml29623 case ETHER_STAT_MACXMT_ERRORS: 21693859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 21703859Sml29623 val = statsp->xmac_stats.tx_underflow_err + 21713859Sml29623 statsp->xmac_stats.tx_maxpktsize_err + 21723859Sml29623 statsp->xmac_stats.tx_overflow_err + 21733859Sml29623 statsp->xmac_stats.tx_fifo_xfr_err; 21743859Sml29623 } else { 21753859Sml29623 val = statsp->bmac_stats.tx_underrun_err + 21763859Sml29623 statsp->bmac_stats.tx_max_pkt_err; 21773859Sml29623 } 21783859Sml29623 break; 21793859Sml29623 21803859Sml29623 case ETHER_STAT_CARRIER_ERRORS: 21813859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 21823859Sml29623 val = statsp->xmac_stats.rx_linkfault_err_cnt; 21833859Sml29623 } else { 21843859Sml29623 val = statsp->mac_stats.xcvr_inits + 21853859Sml29623 statsp->mac_stats.serdes_inits; 21863859Sml29623 } 21873859Sml29623 break; 21883859Sml29623 21893859Sml29623 case ETHER_STAT_TOOLONG_ERRORS: 21903859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 21913859Sml29623 val = statsp->xmac_stats.tx_maxpktsize_err + 21923859Sml29623 statsp->xmac_stats.rx_len_err_cnt; 21933859Sml29623 21943859Sml29623 } else { 21953859Sml29623 val = statsp->bmac_stats.rx_len_err_cnt + 21963859Sml29623 statsp->bmac_stats.tx_max_pkt_err; 21973859Sml29623 } 21983859Sml29623 break; 21993859Sml29623 22003859Sml29623 22013859Sml29623 case ETHER_STAT_XCVR_ADDR: 22023859Sml29623 val = statsp->mac_stats.xcvr_portn; 22033859Sml29623 break; 22043859Sml29623 case ETHER_STAT_XCVR_ID: 22053859Sml29623 val = statsp->mac_stats.xcvr_id; 22063859Sml29623 break; 22073859Sml29623 22083859Sml29623 case ETHER_STAT_XCVR_INUSE: 22093859Sml29623 val = statsp->mac_stats.xcvr_inuse; 22103859Sml29623 break; 22113859Sml29623 22123859Sml29623 case ETHER_STAT_CAP_1000FDX: 22133859Sml29623 val = statsp->mac_stats.cap_1000fdx; 22143859Sml29623 break; 22153859Sml29623 22163859Sml29623 case ETHER_STAT_CAP_1000HDX: 22173859Sml29623 val = statsp->mac_stats.cap_1000hdx; 22183859Sml29623 break; 22193859Sml29623 22203859Sml29623 case ETHER_STAT_CAP_100FDX: 22213859Sml29623 val = statsp->mac_stats.cap_100fdx; 22223859Sml29623 break; 22233859Sml29623 22243859Sml29623 case ETHER_STAT_CAP_100HDX: 22253859Sml29623 val = statsp->mac_stats.cap_100hdx; 22263859Sml29623 break; 22273859Sml29623 22283859Sml29623 case ETHER_STAT_CAP_10FDX: 22293859Sml29623 val = statsp->mac_stats.cap_10fdx; 22303859Sml29623 break; 22313859Sml29623 22323859Sml29623 case ETHER_STAT_CAP_10HDX: 22333859Sml29623 val = statsp->mac_stats.cap_10hdx; 22343859Sml29623 break; 22353859Sml29623 22363859Sml29623 case ETHER_STAT_CAP_ASMPAUSE: 22373859Sml29623 val = statsp->mac_stats.cap_asmpause; 22383859Sml29623 val = 1; 22393859Sml29623 break; 22403859Sml29623 22413859Sml29623 case ETHER_STAT_CAP_PAUSE: 22423859Sml29623 val = statsp->mac_stats.cap_pause; 22433859Sml29623 break; 22443859Sml29623 22453859Sml29623 case ETHER_STAT_CAP_AUTONEG: 22463859Sml29623 val = statsp->mac_stats.cap_autoneg; 22473859Sml29623 break; 22483859Sml29623 22493859Sml29623 case ETHER_STAT_ADV_CAP_1000FDX: 22503859Sml29623 val = statsp->mac_stats.adv_cap_1000fdx; 22513859Sml29623 break; 22523859Sml29623 22533859Sml29623 case ETHER_STAT_ADV_CAP_1000HDX: 22543859Sml29623 val = statsp->mac_stats.adv_cap_1000hdx; 22553859Sml29623 break; 22563859Sml29623 22573859Sml29623 case ETHER_STAT_ADV_CAP_100FDX: 22583859Sml29623 val = statsp->mac_stats.adv_cap_100fdx; 22593859Sml29623 break; 22603859Sml29623 22613859Sml29623 case ETHER_STAT_ADV_CAP_100HDX: 22623859Sml29623 val = statsp->mac_stats.adv_cap_100hdx; 22633859Sml29623 break; 22643859Sml29623 22653859Sml29623 case ETHER_STAT_ADV_CAP_10FDX: 22663859Sml29623 val = statsp->mac_stats.adv_cap_10fdx; 22673859Sml29623 break; 22683859Sml29623 22693859Sml29623 case ETHER_STAT_ADV_CAP_10HDX: 22703859Sml29623 val = statsp->mac_stats.adv_cap_10hdx; 22713859Sml29623 break; 22723859Sml29623 22733859Sml29623 case ETHER_STAT_ADV_CAP_ASMPAUSE: 22743859Sml29623 val = statsp->mac_stats.adv_cap_asmpause; 22753859Sml29623 break; 22763859Sml29623 22773859Sml29623 case ETHER_STAT_ADV_CAP_PAUSE: 22783859Sml29623 val = statsp->mac_stats.adv_cap_pause; 22793859Sml29623 break; 22803859Sml29623 22813859Sml29623 case ETHER_STAT_ADV_CAP_AUTONEG: 22823859Sml29623 val = statsp->mac_stats.adv_cap_autoneg; 22833859Sml29623 break; 22843859Sml29623 22853859Sml29623 case ETHER_STAT_LP_CAP_1000FDX: 22863859Sml29623 val = statsp->mac_stats.lp_cap_1000fdx; 22873859Sml29623 break; 22883859Sml29623 22893859Sml29623 case ETHER_STAT_LP_CAP_1000HDX: 22903859Sml29623 val = statsp->mac_stats.lp_cap_1000hdx; 22913859Sml29623 break; 22923859Sml29623 22933859Sml29623 case ETHER_STAT_LP_CAP_100FDX: 22943859Sml29623 val = statsp->mac_stats.lp_cap_100fdx; 22953859Sml29623 break; 22963859Sml29623 22973859Sml29623 case ETHER_STAT_LP_CAP_100HDX: 22983859Sml29623 val = statsp->mac_stats.lp_cap_100hdx; 22993859Sml29623 break; 23003859Sml29623 23013859Sml29623 case ETHER_STAT_LP_CAP_10FDX: 23023859Sml29623 val = statsp->mac_stats.lp_cap_10fdx; 23033859Sml29623 break; 23043859Sml29623 23053859Sml29623 case ETHER_STAT_LP_CAP_10HDX: 23063859Sml29623 val = statsp->mac_stats.lp_cap_10hdx; 23073859Sml29623 break; 23083859Sml29623 23093859Sml29623 case ETHER_STAT_LP_CAP_ASMPAUSE: 23103859Sml29623 val = statsp->mac_stats.lp_cap_asmpause; 23113859Sml29623 break; 23123859Sml29623 23133859Sml29623 case ETHER_STAT_LP_CAP_PAUSE: 23143859Sml29623 val = statsp->mac_stats.lp_cap_pause; 23153859Sml29623 break; 23163859Sml29623 23173859Sml29623 case ETHER_STAT_LP_CAP_AUTONEG: 23183859Sml29623 val = statsp->mac_stats.lp_cap_autoneg; 23193859Sml29623 break; 23203859Sml29623 23213859Sml29623 case ETHER_STAT_LINK_ASMPAUSE: 23223859Sml29623 val = statsp->mac_stats.link_asmpause; 23233859Sml29623 break; 23243859Sml29623 23253859Sml29623 case ETHER_STAT_LINK_PAUSE: 23263859Sml29623 val = statsp->mac_stats.link_pause; 23273859Sml29623 break; 23283859Sml29623 23293859Sml29623 case ETHER_STAT_LINK_AUTONEG: 23303859Sml29623 val = statsp->mac_stats.cap_autoneg; 23313859Sml29623 break; 23323859Sml29623 23333859Sml29623 case ETHER_STAT_LINK_DUPLEX: 23343859Sml29623 val = statsp->mac_stats.link_duplex; 23353859Sml29623 break; 23363859Sml29623 23373859Sml29623 default: 23383859Sml29623 /* 23393859Sml29623 * Shouldn't reach here... 23403859Sml29623 */ 23413859Sml29623 #ifdef NXGE_DEBUG 23423859Sml29623 NXGE_ERROR_MSG((nxgep, KST_CTL, 23433859Sml29623 "nxge_m_stat: unrecognized parameter value = 0x%x", 23443859Sml29623 stat)); 23453859Sml29623 #endif 23463859Sml29623 23473859Sml29623 return (ENOTSUP); 23483859Sml29623 } 23493859Sml29623 *value = val; 23503859Sml29623 return (0); 23513859Sml29623 } 2352