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 /* 226028Ssbehera * 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> 296495Sspeer #include <sys/nxge/nxge_hio.h> 306495Sspeer 313859Sml29623 #include <inet/mi.h> 323859Sml29623 333859Sml29623 #define RDC_NAME_FORMAT1 "RDC Channel" 343859Sml29623 #define TDC_NAME_FORMAT1 "TDC Channel" 353859Sml29623 #define CH_NAME_FORMAT " %d Stats" 363859Sml29623 #define TDC_NAME_FORMAT "TDC Channel %d Stats" 373859Sml29623 #define RDC_NAME_FORMAT "RDC Channel %d Stats" 383859Sml29623 393859Sml29623 void nxge_mac_init_kstats(p_nxge_t, struct kstat *); 403859Sml29623 void nxge_xmac_init_kstats(struct kstat *); 413859Sml29623 void nxge_bmac_init_kstats(struct kstat *); 423859Sml29623 433859Sml29623 /* ARGSUSED */ 443859Sml29623 void 453859Sml29623 nxge_init_statsp(p_nxge_t nxgep) 463859Sml29623 { 473859Sml29623 size_t stats_size; 483859Sml29623 493859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_init_statsp")); 503859Sml29623 513859Sml29623 stats_size = sizeof (nxge_stats_t); 523859Sml29623 nxgep->statsp = KMEM_ZALLOC(stats_size, KM_SLEEP); 533859Sml29623 nxgep->statsp->stats_size = stats_size; 543859Sml29623 553859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_init_statsp")); 563859Sml29623 } 573859Sml29623 583859Sml29623 typedef struct { 593859Sml29623 uint8_t index; 603859Sml29623 uint8_t type; 613859Sml29623 char *name; 623859Sml29623 } nxge_kstat_index_t; 633859Sml29623 643859Sml29623 typedef enum { 653859Sml29623 RDC_STAT_PACKETS = 0, 663859Sml29623 RDC_STAT_BYTES, 673859Sml29623 RDC_STAT_ERRORS, 683859Sml29623 RDC_STAT_DCF_ERR, 693859Sml29623 RDC_STAT_RCR_ACK_ERR, 703859Sml29623 RDC_STAT_RCR_DC_FIFOFLOW_ERR, 713859Sml29623 RDC_STAT_RCR_SHA_PAR_ERR, 723859Sml29623 RDC_STAT_RBR_PRE_PAR_ERR, 733859Sml29623 RDC_STAT_WRED_DROP, 743859Sml29623 RDC_STAT_RBR_PRE_EMTY, 753859Sml29623 RDC_STAT_RCR_SHADOW_FULL, 763859Sml29623 RDC_STAT_RBR_TMOUT, 773859Sml29623 RDC_STAT_RSP_CNT_ERR, 783859Sml29623 RDC_STAT_BYTE_EN_BUS, 793859Sml29623 RDC_STAT_RSP_DAT_ERR, 806028Ssbehera RDC_STAT_PKT_TOO_LONG_ERR, 813859Sml29623 RDC_STAT_COMPL_L2_ERR, 823859Sml29623 RDC_STAT_COMPL_L4_CKSUM_ERR, 833859Sml29623 RDC_STAT_COMPL_ZCP_SOFT_ERR, 843859Sml29623 RDC_STAT_COMPL_FFLP_SOFT_ERR, 853859Sml29623 RDC_STAT_CONFIG_ERR, 863859Sml29623 RDC_STAT_RCRINCON, 873859Sml29623 RDC_STAT_RCRFULL, 883859Sml29623 RDC_STAT_RBR_EMPTY, 893859Sml29623 RDC_STAT_RBR_FULL, 903859Sml29623 RDC_STAT_RBRLOGPAGE, 913859Sml29623 RDC_STAT_CFIGLOGPAGE, 923859Sml29623 RDC_STAT_PORT_DROP_PKT, 933859Sml29623 RDC_STAT_RCRTO, 943859Sml29623 RDC_STAT_RCRTHRES, 953859Sml29623 RDC_STAT_MEX, 963859Sml29623 RDC_STAT_ID_MIS, 973859Sml29623 RDC_STAT_ZCP_EOP, 983859Sml29623 RDC_STAT_IPP_EOP, 993859Sml29623 RDC_STAT_END 1003859Sml29623 } nxge_rdc_stat_index_t; 1013859Sml29623 1023859Sml29623 nxge_kstat_index_t nxge_rdc_stats[] = { 1033859Sml29623 {RDC_STAT_PACKETS, KSTAT_DATA_UINT64, "rdc_packets"}, 1043859Sml29623 {RDC_STAT_BYTES, KSTAT_DATA_UINT64, "rdc_bytes"}, 1053859Sml29623 {RDC_STAT_ERRORS, KSTAT_DATA_ULONG, "rdc_errors"}, 1063859Sml29623 {RDC_STAT_DCF_ERR, KSTAT_DATA_ULONG, "rdc_dcf_err"}, 1073859Sml29623 {RDC_STAT_RCR_ACK_ERR, KSTAT_DATA_ULONG, "rdc_rcr_ack_err"}, 1083859Sml29623 {RDC_STAT_RCR_DC_FIFOFLOW_ERR, KSTAT_DATA_ULONG, "rdc_dc_fifoflow_err"}, 1093859Sml29623 {RDC_STAT_RCR_SHA_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rcr_sha_par_err"}, 1103859Sml29623 {RDC_STAT_RBR_PRE_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rbr_pre_par_err"}, 1113859Sml29623 {RDC_STAT_WRED_DROP, KSTAT_DATA_ULONG, "rdc_wred_drop"}, 1123859Sml29623 {RDC_STAT_RBR_PRE_EMTY, KSTAT_DATA_ULONG, "rdc_rbr_pre_empty"}, 1133859Sml29623 {RDC_STAT_RCR_SHADOW_FULL, KSTAT_DATA_ULONG, "rdc_rcr_shadow_full"}, 1143859Sml29623 {RDC_STAT_RBR_TMOUT, KSTAT_DATA_ULONG, "rdc_rbr_tmout"}, 1153859Sml29623 {RDC_STAT_RSP_CNT_ERR, KSTAT_DATA_ULONG, "rdc_rsp_cnt_err"}, 1163859Sml29623 {RDC_STAT_BYTE_EN_BUS, KSTAT_DATA_ULONG, "rdc_byte_en_bus"}, 1173859Sml29623 {RDC_STAT_RSP_DAT_ERR, KSTAT_DATA_ULONG, "rdc_rsp_dat_err"}, 1186028Ssbehera {RDC_STAT_PKT_TOO_LONG_ERR, KSTAT_DATA_ULONG, "rdc_pkt_too_long_err"}, 1193859Sml29623 {RDC_STAT_COMPL_L2_ERR, KSTAT_DATA_ULONG, "rdc_compl_l2_err"}, 1203859Sml29623 {RDC_STAT_COMPL_L4_CKSUM_ERR, KSTAT_DATA_ULONG, "rdc_compl_l4_cksum"}, 1213859Sml29623 {RDC_STAT_COMPL_ZCP_SOFT_ERR, KSTAT_DATA_ULONG, 1223859Sml29623 "rdc_compl_zcp_soft_err"}, 1233859Sml29623 {RDC_STAT_COMPL_FFLP_SOFT_ERR, KSTAT_DATA_ULONG, 1243859Sml29623 "rdc_compl_fflp_soft_err"}, 1253859Sml29623 {RDC_STAT_CONFIG_ERR, KSTAT_DATA_ULONG, "rdc_config_err"}, 1263859Sml29623 {RDC_STAT_RCRINCON, KSTAT_DATA_ULONG, "rdc_rcrincon"}, 1273859Sml29623 {RDC_STAT_RCRFULL, KSTAT_DATA_ULONG, "rdc_rcrfull"}, 1283859Sml29623 {RDC_STAT_RBR_EMPTY, KSTAT_DATA_ULONG, "rdc_rbr_empty"}, 1293859Sml29623 {RDC_STAT_RBR_FULL, KSTAT_DATA_ULONG, "rdc_rbrfull"}, 1303859Sml29623 {RDC_STAT_RBRLOGPAGE, KSTAT_DATA_ULONG, "rdc_rbrlogpage"}, 1313859Sml29623 {RDC_STAT_CFIGLOGPAGE, KSTAT_DATA_ULONG, "rdc_cfiglogpage"}, 1323859Sml29623 {RDC_STAT_PORT_DROP_PKT, KSTAT_DATA_ULONG, "rdc_port_drop_pkt"}, 1333859Sml29623 {RDC_STAT_RCRTO, KSTAT_DATA_ULONG, "rdc_rcrto"}, 1343859Sml29623 {RDC_STAT_RCRTHRES, KSTAT_DATA_ULONG, "rdc_rcrthres"}, 1353859Sml29623 {RDC_STAT_MEX, KSTAT_DATA_ULONG, "rdc_mex"}, 1363859Sml29623 {RDC_STAT_ID_MIS, KSTAT_DATA_ULONG, "rdc_id_mismatch"}, 1373859Sml29623 {RDC_STAT_ZCP_EOP, KSTAT_DATA_ULONG, "rdc_zcp_eop"}, 1383859Sml29623 {RDC_STAT_IPP_EOP, KSTAT_DATA_ULONG, "rdc_ipp_eop"}, 1393859Sml29623 {RDC_STAT_END, NULL, NULL} 1403859Sml29623 }; 1413859Sml29623 1423859Sml29623 typedef enum { 1433859Sml29623 RDC_SYS_STAT_PRE_PAR_ERR = 0, 1443859Sml29623 RDC_SYS_STAT_SHA_PAR_ERR, 1453859Sml29623 RDC_SYS_STAT_ID_MISMATCH, 1463859Sml29623 RDC_SYS_STAT_IPP_EOP_ERR, 1473859Sml29623 RDC_SYS_STAT_ZCP_EOP_ERR, 1483859Sml29623 RDC_SYS_STAT_END 1493859Sml29623 } nxge_rdc_sys_stat_idx_t; 1503859Sml29623 1513859Sml29623 nxge_kstat_index_t nxge_rdc_sys_stats[] = { 1523859Sml29623 {RDC_SYS_STAT_PRE_PAR_ERR, KSTAT_DATA_UINT64, "rdc_pre_par_err"}, 1533859Sml29623 {RDC_SYS_STAT_SHA_PAR_ERR, KSTAT_DATA_UINT64, "rdc_sha_par_err"}, 1543859Sml29623 {RDC_SYS_STAT_ID_MISMATCH, KSTAT_DATA_UINT64, "rdc_stat_id_mismatch"}, 1553859Sml29623 {RDC_SYS_STAT_IPP_EOP_ERR, KSTAT_DATA_UINT64, "rdc_ipp_eop_err"}, 1563859Sml29623 {RDC_SYS_STAT_ZCP_EOP_ERR, KSTAT_DATA_UINT64, "rdc_zcp_eop_err"}, 1573859Sml29623 {RDC_SYS_STAT_END, NULL, NULL} 1583859Sml29623 }; 1593859Sml29623 1603859Sml29623 typedef enum { 1613859Sml29623 TDC_STAT_PACKETS = 0, 1623859Sml29623 TDC_STAT_BYTES, 1633859Sml29623 TDC_STAT_ERRORS, 1643859Sml29623 TDC_STAT_TX_INITS, 1653859Sml29623 TDC_STAT_TX_NO_BUF, 1663859Sml29623 TDC_STAT_MBOX_ERR, 1673859Sml29623 TDC_STAT_PKT_SIZE_ERR, 1683859Sml29623 TDC_STAT_TX_RING_OFLOW, 1693859Sml29623 TDC_STAT_PREF_BUF_ECC_ERR, 1703859Sml29623 TDC_STAT_NACK_PREF, 1713859Sml29623 TDC_STAT_NACK_PKT_RD, 1723859Sml29623 TDC_STAT_CONF_PART_ERR, 1733859Sml29623 TDC_STAT_PKT_PRT_ERR, 1743859Sml29623 TDC_STAT_RESET_FAIL, 1753859Sml29623 TDC_STAT_TX_STARTS, 1763859Sml29623 TDC_STAT_TX_NOCANPUT, 1773859Sml29623 TDC_STAT_TX_MSGDUP_FAIL, 1783859Sml29623 TDC_STAT_TX_ALLOCB_FAIL, 1793859Sml29623 TDC_STAT_TX_NO_DESC, 1803859Sml29623 TDC_STAT_TX_DMA_BIND_FAIL, 1813859Sml29623 TDC_STAT_TX_UFLOW, 1823859Sml29623 TDC_STAT_TX_HDR_PKTS, 1833859Sml29623 TDC_STAT_TX_DDI_PKTS, 1843859Sml29623 TDC_STAT_TX_DVMA_PKTS, 1853859Sml29623 TDC_STAT_TX_MAX_PEND, 1863859Sml29623 TDC_STAT_END 1873859Sml29623 } nxge_tdc_stats_index_t; 1883859Sml29623 1893859Sml29623 nxge_kstat_index_t nxge_tdc_stats[] = { 1903859Sml29623 {TDC_STAT_PACKETS, KSTAT_DATA_UINT64, "tdc_packets"}, 1913859Sml29623 {TDC_STAT_BYTES, KSTAT_DATA_UINT64, "tdc_bytes"}, 1923859Sml29623 {TDC_STAT_ERRORS, KSTAT_DATA_UINT64, "tdc_errors"}, 1933859Sml29623 {TDC_STAT_TX_INITS, KSTAT_DATA_ULONG, "tdc_tx_inits"}, 1943859Sml29623 {TDC_STAT_TX_NO_BUF, KSTAT_DATA_ULONG, "tdc_tx_no_buf"}, 1953859Sml29623 {TDC_STAT_MBOX_ERR, KSTAT_DATA_ULONG, "tdc_mbox_err"}, 1963859Sml29623 {TDC_STAT_PKT_SIZE_ERR, KSTAT_DATA_ULONG, "tdc_pkt_size_err"}, 1973859Sml29623 {TDC_STAT_TX_RING_OFLOW, 1983859Sml29623 KSTAT_DATA_ULONG, "tdc_tx_ring_oflow"}, 1993859Sml29623 {TDC_STAT_PREF_BUF_ECC_ERR, 2003859Sml29623 KSTAT_DATA_ULONG, "tdc_pref_buf_err_err"}, 2013859Sml29623 {TDC_STAT_NACK_PREF, KSTAT_DATA_ULONG, "tdc_nack_pref"}, 2023859Sml29623 {TDC_STAT_NACK_PKT_RD, KSTAT_DATA_ULONG, "tdc_nack_pkt_rd"}, 2033859Sml29623 {TDC_STAT_CONF_PART_ERR, 2043859Sml29623 KSTAT_DATA_ULONG, "tdc_conf_part_err"}, 2053859Sml29623 {TDC_STAT_PKT_PRT_ERR, KSTAT_DATA_ULONG, "tdc_pkt_prt_err"}, 2063859Sml29623 {TDC_STAT_RESET_FAIL, KSTAT_DATA_ULONG, "tdc_reset_fail"}, 2073859Sml29623 {TDC_STAT_TX_STARTS, KSTAT_DATA_ULONG, "tdc_tx_starts"}, 2083859Sml29623 {TDC_STAT_TX_NOCANPUT, KSTAT_DATA_ULONG, "tdc_tx_nocanput"}, 2093859Sml29623 {TDC_STAT_TX_MSGDUP_FAIL, KSTAT_DATA_ULONG, "tdc_tx_msgdup_fail"}, 2103859Sml29623 {TDC_STAT_TX_ALLOCB_FAIL, KSTAT_DATA_ULONG, "tdc_tx_allocb_fail"}, 2113859Sml29623 {TDC_STAT_TX_NO_DESC, KSTAT_DATA_ULONG, "tdc_tx_no_desc"}, 2123859Sml29623 {TDC_STAT_TX_DMA_BIND_FAIL, KSTAT_DATA_ULONG, "tdc_tx_dma_bind_fail"}, 2133859Sml29623 {TDC_STAT_TX_UFLOW, KSTAT_DATA_ULONG, "tdc_tx_uflow"}, 2143859Sml29623 {TDC_STAT_TX_HDR_PKTS, KSTAT_DATA_ULONG, "tdc_tx_hdr_pkts"}, 2153859Sml29623 {TDC_STAT_TX_DDI_PKTS, KSTAT_DATA_ULONG, "tdc_tx_ddi_pkts"}, 2163859Sml29623 {TDC_STAT_TX_DVMA_PKTS, KSTAT_DATA_ULONG, "tdc_tx_dvma_pkts"}, 2173859Sml29623 {TDC_STAT_TX_MAX_PEND, KSTAT_DATA_ULONG, "tdc_tx_max_pend"}, 2183859Sml29623 {TDC_STAT_END, NULL, NULL} 2193859Sml29623 }; 2203859Sml29623 2213859Sml29623 /* IPP Statistics definitions */ 2223859Sml29623 typedef enum { 2233859Sml29623 IPP_STAT_EOP_MISS = 0, 2243859Sml29623 IPP_STAT_SOP_MISS, 2253859Sml29623 IPP_STAT_DFIFO_UE, 2263859Sml29623 IPP_STAT_ECC_ERR, 2274439Sml29623 IPP_STAT_PFIFO_PERR, 2283859Sml29623 IPP_STAT_PFIFO_OVER, 2293859Sml29623 IPP_STAT_PFIFO_UND, 2303859Sml29623 IPP_STAT_BAD_CS, 2313859Sml29623 IPP_STAT_BAD_DIS, 2323859Sml29623 IPP_STAT_END 2333859Sml29623 } nxge_ipp_stat_index_t; 2343859Sml29623 2353859Sml29623 nxge_kstat_index_t nxge_ipp_stats[] = { 2363859Sml29623 {IPP_STAT_EOP_MISS, KSTAT_DATA_ULONG, "rxipp_eop_miss"}, 2373859Sml29623 {IPP_STAT_SOP_MISS, KSTAT_DATA_ULONG, "rxipp_sop_miss"}, 2383859Sml29623 {IPP_STAT_DFIFO_UE, KSTAT_DATA_ULONG, "rxipp_dfifo_ue"}, 2393859Sml29623 {IPP_STAT_ECC_ERR, KSTAT_DATA_ULONG, "rxipp_ecc_err"}, 2404439Sml29623 {IPP_STAT_PFIFO_PERR, KSTAT_DATA_ULONG, "rxipp_pfifo_perr"}, 2413859Sml29623 {IPP_STAT_PFIFO_OVER, KSTAT_DATA_ULONG, "rxipp_pfifo_over"}, 2423859Sml29623 {IPP_STAT_PFIFO_UND, KSTAT_DATA_ULONG, "rxipp_pfifo_und"}, 2433859Sml29623 {IPP_STAT_BAD_CS, KSTAT_DATA_ULONG, "rxipp_bad_cs"}, 2443859Sml29623 {IPP_STAT_BAD_DIS, KSTAT_DATA_ULONG, "rxipp_bad_dis"}, 2453859Sml29623 {IPP_STAT_END, NULL, NULL} 2463859Sml29623 }; 2473859Sml29623 2483859Sml29623 /* TXC Statistics definitions */ 2493859Sml29623 typedef enum { 2503859Sml29623 TXC_STAT_PKT_STUFFED = 0, 2513859Sml29623 TXC_STAT_PKT_XMIT, 2523859Sml29623 TXC_STAT_RO_CORRECT_ERR, 2533859Sml29623 TXC_STAT_RO_UNCORRECT_ERR, 2543859Sml29623 TXC_STAT_SF_CORRECT_ERR, 2553859Sml29623 TXC_STAT_SF_UNCORRECT_ERR, 2563859Sml29623 TXC_STAT_ADDRESS_FAILED, 2573859Sml29623 TXC_STAT_DMA_FAILED, 2583859Sml29623 TXC_STAT_LENGTH_FAILED, 2593859Sml29623 TXC_STAT_PKT_ASSY_DEAD, 2603859Sml29623 TXC_STAT_REORDER_ERR, 2613859Sml29623 TXC_STAT_END 2623859Sml29623 } nxge_txc_stat_index_t; 2633859Sml29623 2643859Sml29623 nxge_kstat_index_t nxge_txc_stats[] = { 2653859Sml29623 {TXC_STAT_PKT_STUFFED, KSTAT_DATA_ULONG, "txc_pkt_stuffed"}, 2663859Sml29623 {TXC_STAT_PKT_XMIT, KSTAT_DATA_ULONG, "txc_pkt_xmit"}, 2673859Sml29623 {TXC_STAT_RO_CORRECT_ERR, KSTAT_DATA_ULONG, "txc_ro_correct_err"}, 2683859Sml29623 {TXC_STAT_RO_UNCORRECT_ERR, KSTAT_DATA_ULONG, "txc_ro_uncorrect_err"}, 2693859Sml29623 {TXC_STAT_SF_CORRECT_ERR, KSTAT_DATA_ULONG, "txc_sf_correct_err"}, 2703859Sml29623 {TXC_STAT_SF_UNCORRECT_ERR, KSTAT_DATA_ULONG, "txc_sf_uncorrect_err"}, 2713859Sml29623 {TXC_STAT_ADDRESS_FAILED, KSTAT_DATA_ULONG, "txc_address_failed"}, 2723859Sml29623 {TXC_STAT_DMA_FAILED, KSTAT_DATA_ULONG, "txc_dma_failed"}, 2733859Sml29623 {TXC_STAT_LENGTH_FAILED, KSTAT_DATA_ULONG, "txc_length_failed"}, 2743859Sml29623 {TXC_STAT_PKT_ASSY_DEAD, KSTAT_DATA_ULONG, "txc_pkt_assy_dead"}, 2753859Sml29623 {TXC_STAT_REORDER_ERR, KSTAT_DATA_ULONG, "txc_reorder_err"}, 2763859Sml29623 {TXC_STAT_END, NULL, NULL} 2773859Sml29623 }; 2783859Sml29623 2793859Sml29623 typedef enum { 2803859Sml29623 XMAC_STAT_TX_FRAME_CNT = 0, 2813859Sml29623 XMAC_STAT_TX_UNDERFLOW_ERR, 2823859Sml29623 XMAC_STAT_TX_MAXPKTSIZE_ERR, 2833859Sml29623 XMAC_STAT_TX_OVERFLOW_ERR, 2843859Sml29623 XMAC_STAT_TX_FIFO_XFR_ERR, 2853859Sml29623 XMAC_STAT_TX_BYTE_CNT, 2863859Sml29623 XMAC_STAT_RX_FRAME_CNT, 2873859Sml29623 XMAC_STAT_RX_UNDERFLOW_ERR, 2883859Sml29623 XMAC_STAT_RX_OVERFLOW_ERR, 2893859Sml29623 XMAC_STAT_RX_CRC_ERR_CNT, 2903859Sml29623 XMAC_STAT_RX_LEN_ERR_CNT, 2913859Sml29623 XMAC_STAT_RX_VIOL_ERR_CNT, 2923859Sml29623 XMAC_STAT_RX_BYTE_CNT, 2933859Sml29623 XMAC_STAT_RX_HIST1_CNT, 2943859Sml29623 XMAC_STAT_RX_HIST2_CNT, 2953859Sml29623 XMAC_STAT_RX_HIST3_CNT, 2963859Sml29623 XMAC_STAT_RX_HIST4_CNT, 2973859Sml29623 XMAC_STAT_RX_HIST5_CNT, 2983859Sml29623 XMAC_STAT_RX_HIST6_CNT, 2993859Sml29623 XMAC_STAT_RX_HIST7_CNT, 3003859Sml29623 XMAC_STAT_RX_BROADCAST_CNT, 3013859Sml29623 XMAC_STAT_RX_MULT_CNT, 3023859Sml29623 XMAC_STAT_RX_FRAG_CNT, 3033859Sml29623 XMAC_STAT_RX_FRAME_ALIGN_ERR_CNT, 3043859Sml29623 XMAC_STAT_RX_LINKFAULT_ERR_CNT, 3053859Sml29623 XMAC_STAT_RX_REMOTEFAULT_ERR, 3063859Sml29623 XMAC_STAT_RX_LOCALFAULT_ERR, 3073859Sml29623 XMAC_STAT_RX_PAUSE_CNT, 3083859Sml29623 XMAC_STAT_TX_PAUSE_STATE, 3093859Sml29623 XMAC_STAT_TX_NOPAUSE_STATE, 3103859Sml29623 XMAC_STAT_XPCS_DESKEW_ERR_CNT, 3113859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 3123859Sml29623 XMAC_STAT_XPCS_SYMBOL_L0_ERR_CNT, 3133859Sml29623 XMAC_STAT_XPCS_SYMBOL_L1_ERR_CNT, 3143859Sml29623 XMAC_STAT_XPCS_SYMBOL_L2_ERR_CNT, 3153859Sml29623 XMAC_STAT_XPCS_SYMBOL_L3_ERR_CNT, 3163859Sml29623 #endif 3173859Sml29623 XMAC_STAT_END 3183859Sml29623 } nxge_xmac_stat_index_t; 3193859Sml29623 3203859Sml29623 nxge_kstat_index_t nxge_xmac_stats[] = { 3213859Sml29623 {XMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_ULONG, "txmac_frame_cnt"}, 3223859Sml29623 {XMAC_STAT_TX_UNDERFLOW_ERR, KSTAT_DATA_ULONG, "tmac_underflow_err"}, 3233859Sml29623 {XMAC_STAT_TX_MAXPKTSIZE_ERR, KSTAT_DATA_ULONG, "txmac_maxpktsize_err"}, 3243859Sml29623 {XMAC_STAT_TX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "txmac_overflow_err"}, 3253859Sml29623 {XMAC_STAT_TX_FIFO_XFR_ERR, KSTAT_DATA_ULONG, "txmac_fifo_xfr_err"}, 3263859Sml29623 {XMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_ULONG, "txmac_byte_cnt"}, 3273859Sml29623 {XMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_ULONG, "rxmac_frame_cnt"}, 3283859Sml29623 {XMAC_STAT_RX_UNDERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_underflow_err"}, 3293859Sml29623 {XMAC_STAT_RX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_overflow_err"}, 3303859Sml29623 {XMAC_STAT_RX_CRC_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_crc_err"}, 3313859Sml29623 {XMAC_STAT_RX_LEN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_length_err"}, 3323859Sml29623 {XMAC_STAT_RX_VIOL_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_code_violations"}, 3333859Sml29623 {XMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_ULONG, "rxmac_byte_cnt"}, 3343859Sml29623 {XMAC_STAT_RX_HIST1_CNT, KSTAT_DATA_ULONG, "rxmac_64_cnt"}, 3353859Sml29623 {XMAC_STAT_RX_HIST2_CNT, KSTAT_DATA_ULONG, "rxmac_65_127_cnt"}, 3363859Sml29623 {XMAC_STAT_RX_HIST3_CNT, KSTAT_DATA_ULONG, "rxmac_128_255_cnt"}, 3373859Sml29623 {XMAC_STAT_RX_HIST4_CNT, KSTAT_DATA_ULONG, "rxmac_256_511_cnt"}, 3383859Sml29623 {XMAC_STAT_RX_HIST5_CNT, KSTAT_DATA_ULONG, "rxmac_512_1023_cnt"}, 3393859Sml29623 {XMAC_STAT_RX_HIST6_CNT, KSTAT_DATA_ULONG, "rxmac_1024_1522_cnt"}, 3403859Sml29623 {XMAC_STAT_RX_HIST7_CNT, KSTAT_DATA_ULONG, "rxmac_jumbo_cnt"}, 3413859Sml29623 {XMAC_STAT_RX_BROADCAST_CNT, KSTAT_DATA_ULONG, "rxmac_broadcast_cnt"}, 3423859Sml29623 {XMAC_STAT_RX_MULT_CNT, KSTAT_DATA_ULONG, "rxmac_multicast_cnt"}, 3433859Sml29623 {XMAC_STAT_RX_FRAG_CNT, KSTAT_DATA_ULONG, "rxmac_fragment_cnt"}, 3443859Sml29623 {XMAC_STAT_RX_FRAME_ALIGN_ERR_CNT, 3453859Sml29623 KSTAT_DATA_ULONG, "rxmac_alignment_err"}, 3463859Sml29623 {XMAC_STAT_RX_LINKFAULT_ERR_CNT, 3473859Sml29623 KSTAT_DATA_ULONG, "rxmac_linkfault_errs"}, 3483859Sml29623 {XMAC_STAT_RX_REMOTEFAULT_ERR, 3493859Sml29623 KSTAT_DATA_ULONG, "rxmac_remote_faults"}, 3503859Sml29623 {XMAC_STAT_RX_LOCALFAULT_ERR, 3513859Sml29623 KSTAT_DATA_ULONG, "rxmac_local_faults"}, 3523859Sml29623 {XMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_ULONG, "rxmac_pause_cnt"}, 3533859Sml29623 {XMAC_STAT_TX_PAUSE_STATE, KSTAT_DATA_ULONG, "txmac_pause_state"}, 3543859Sml29623 {XMAC_STAT_TX_NOPAUSE_STATE, KSTAT_DATA_ULONG, "txmac_nopause_state"}, 3553859Sml29623 {XMAC_STAT_XPCS_DESKEW_ERR_CNT, 3563859Sml29623 KSTAT_DATA_ULONG, "xpcs_deskew_err_cnt"}, 3573859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 3583859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L0_ERR_CNT, 3593859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln0_symbol_err_cnt"}, 3603859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L1_ERR_CNT, 3613859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln1_symbol_err_cnt"}, 3623859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L2_ERR_CNT, 3633859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln2_symbol_err_cnt"}, 3643859Sml29623 {XMAC_STAT_XPCS_SYMBOL_L3_ERR_CNT, 3653859Sml29623 KSTAT_DATA_ULONG, "xpcs_ln3_symbol_err_cnt"}, 3663859Sml29623 #endif 3673859Sml29623 {XMAC_STAT_END, NULL, NULL} 3683859Sml29623 }; 3693859Sml29623 3703859Sml29623 typedef enum { 3713859Sml29623 BMAC_STAT_TX_FRAME_CNT = 0, 3723859Sml29623 BMAC_STAT_TX_UNDERRUN_ERR, 3733859Sml29623 BMAC_STAT_TX_MAX_PKT_ERR, 3743859Sml29623 BMAC_STAT_TX_BYTE_CNT, 3753859Sml29623 BMAC_STAT_RX_FRAME_CNT, 3763859Sml29623 BMAC_STAT_RX_BYTE_CNT, 3773859Sml29623 BMAC_STAT_RX_OVERFLOW_ERR, 3783859Sml29623 BMAC_STAT_RX_ALIGN_ERR_CNT, 3793859Sml29623 BMAC_STAT_RX_CRC_ERR_CNT, 3803859Sml29623 BMAC_STAT_RX_LEN_ERR_CNT, 3813859Sml29623 BMAC_STAT_RX_VIOL_ERR_CNT, 3823859Sml29623 BMAC_STAT_RX_PAUSE_CNT, 3833859Sml29623 BMAC_STAT_RX_PAUSE_STATE, 3843859Sml29623 BMAC_STAT_RX_NOPAUSE_STATE, 3853859Sml29623 BMAC_STAT_END 3863859Sml29623 } nxge_bmac_stat_index_t; 3873859Sml29623 3883859Sml29623 nxge_kstat_index_t nxge_bmac_stats[] = { 3893859Sml29623 {BMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_ULONG, "txmac_frame_cnt"}, 3903859Sml29623 {BMAC_STAT_TX_UNDERRUN_ERR, KSTAT_DATA_ULONG, "txmac_underrun_err"}, 3913859Sml29623 {BMAC_STAT_TX_MAX_PKT_ERR, KSTAT_DATA_ULONG, "txmac_max_pkt_err"}, 3923859Sml29623 {BMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_ULONG, "txmac_byte_cnt"}, 3933859Sml29623 {BMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_ULONG, "rxmac_frame_cnt"}, 3943859Sml29623 {BMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_ULONG, "rxmac_byte_cnt"}, 3953859Sml29623 {BMAC_STAT_RX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_overflow_err"}, 3963859Sml29623 {BMAC_STAT_RX_ALIGN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_align_err_cnt"}, 3973859Sml29623 {BMAC_STAT_RX_CRC_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_crc_err_cnt"}, 3983859Sml29623 {BMAC_STAT_RX_LEN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_len_err_cnt"}, 3993859Sml29623 {BMAC_STAT_RX_VIOL_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_viol_err_cnt"}, 4003859Sml29623 {BMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_ULONG, "rxmac_pause_cnt"}, 4013859Sml29623 {BMAC_STAT_RX_PAUSE_STATE, KSTAT_DATA_ULONG, "txmac_pause_state"}, 4023859Sml29623 {BMAC_STAT_RX_NOPAUSE_STATE, KSTAT_DATA_ULONG, "tx_nopause_state"}, 4033859Sml29623 {BMAC_STAT_END, NULL, NULL} 4043859Sml29623 }; 4053859Sml29623 4063859Sml29623 typedef enum { 4073859Sml29623 ZCP_STAT_ERRORS, 4083859Sml29623 ZCP_STAT_INITS, 4093859Sml29623 ZCP_STAT_RRFIFO_UNDERRUN, 4103859Sml29623 ZCP_STAT_RRFIFO_OVERRUN, 4113859Sml29623 ZCP_STAT_RSPFIFO_UNCORR_ERR, 4123859Sml29623 ZCP_STAT_BUFFER_OVERFLOW, 4133859Sml29623 ZCP_STAT_STAT_TBL_PERR, 4143859Sml29623 ZCP_STAT_DYN_TBL_PERR, 4153859Sml29623 ZCP_STAT_BUF_TBL_PERR, 4163859Sml29623 ZCP_STAT_TT_PROGRAM_ERR, 4173859Sml29623 ZCP_STAT_RSP_TT_INDEX_ERR, 4183859Sml29623 ZCP_STAT_SLV_TT_INDEX_ERR, 4193859Sml29623 ZCP_STAT_ZCP_TT_INDEX_ERR, 4203859Sml29623 ZCP_STAT_ZCP_ACCESS_FAIL, 4213859Sml29623 ZCP_CFIFO_ECC, 4223859Sml29623 ZCP_STAT_END 4233859Sml29623 } nxge_zcp_stat_index_t; 4243859Sml29623 4253859Sml29623 nxge_kstat_index_t nxge_zcp_stats[] = { 4263859Sml29623 {ZCP_STAT_ERRORS, KSTAT_DATA_ULONG, "zcp_erros"}, 4273859Sml29623 {ZCP_STAT_INITS, KSTAT_DATA_ULONG, "zcp_inits"}, 4283859Sml29623 {ZCP_STAT_RRFIFO_UNDERRUN, KSTAT_DATA_ULONG, "zcp_rrfifo_underrun"}, 4293859Sml29623 {ZCP_STAT_RRFIFO_OVERRUN, KSTAT_DATA_ULONG, "zcp_rrfifo_overrun"}, 4303859Sml29623 {ZCP_STAT_RSPFIFO_UNCORR_ERR, KSTAT_DATA_ULONG, 4313859Sml29623 "zcp_rspfifo_uncorr_err"}, 4323859Sml29623 {ZCP_STAT_BUFFER_OVERFLOW, KSTAT_DATA_ULONG, "zcp_buffer_overflow"}, 4333859Sml29623 {ZCP_STAT_STAT_TBL_PERR, KSTAT_DATA_ULONG, "zcp_stat_tbl_perr"}, 4343859Sml29623 {ZCP_STAT_DYN_TBL_PERR, KSTAT_DATA_ULONG, "zcp_dyn_tbl_perr"}, 4353859Sml29623 {ZCP_STAT_BUF_TBL_PERR, KSTAT_DATA_ULONG, "zcp_buf_tbl_perr"}, 4363859Sml29623 {ZCP_STAT_TT_PROGRAM_ERR, KSTAT_DATA_ULONG, "zcp_tt_program_err"}, 4373859Sml29623 {ZCP_STAT_RSP_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_rsp_tt_index_err"}, 4383859Sml29623 {ZCP_STAT_SLV_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_slv_tt_index_err"}, 4393859Sml29623 {ZCP_STAT_ZCP_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_zcp_tt_index_err"}, 4403859Sml29623 {ZCP_STAT_ZCP_ACCESS_FAIL, KSTAT_DATA_ULONG, "zcp_access_fail"}, 4413859Sml29623 {ZCP_STAT_ZCP_ACCESS_FAIL, KSTAT_DATA_ULONG, "zcp_cfifo_ecc"}, 4423859Sml29623 {ZCP_STAT_END, NULL, NULL} 4433859Sml29623 }; 4443859Sml29623 4453859Sml29623 typedef enum { 4463859Sml29623 FFLP_STAT_TCAM_PERR, 4473859Sml29623 FFLP_STAT_TCAM_ECC_ERR, 4483859Sml29623 FFLP_STAT_VLAN_PERR, 4493859Sml29623 FFLP_STAT_HASH_LOOKUP_ERR, 4503859Sml29623 FFLP_STAT_HASH_P0_PIO_ERR, 4513859Sml29623 FFLP_STAT_HASH_P1_PIO_ERR, 4523859Sml29623 FFLP_STAT_HASH_P2_PIO_ERR, 4533859Sml29623 FFLP_STAT_HASH_P3_PIO_ERR, 4543859Sml29623 FFLP_STAT_HASH_P4_PIO_ERR, 4553859Sml29623 FFLP_STAT_HASH_P5_PIO_ERR, 4563859Sml29623 FFLP_STAT_HASH_P6_PIO_ERR, 4573859Sml29623 FFLP_STAT_HASH_P7_PIO_ERR, 4583859Sml29623 FFLP_STAT_END 4593859Sml29623 } nxge_fflp_stat_index_t; 4603859Sml29623 4613859Sml29623 nxge_kstat_index_t nxge_fflp_stats[] = { 4623859Sml29623 {FFLP_STAT_TCAM_PERR, KSTAT_DATA_ULONG, "fflp_tcam_perr"}, 4633859Sml29623 {FFLP_STAT_TCAM_ECC_ERR, KSTAT_DATA_ULONG, "fflp_tcam_ecc_err"}, 4643859Sml29623 {FFLP_STAT_VLAN_PERR, KSTAT_DATA_ULONG, "fflp_vlan_perr"}, 4653859Sml29623 {FFLP_STAT_HASH_LOOKUP_ERR, KSTAT_DATA_ULONG, "fflp_hash_lookup_err"}, 4663859Sml29623 {FFLP_STAT_HASH_P0_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p0_pio_err"}, 4673859Sml29623 {FFLP_STAT_HASH_P1_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p1_pio_err"}, 4683859Sml29623 {FFLP_STAT_HASH_P2_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p2_pio_err"}, 4693859Sml29623 {FFLP_STAT_HASH_P3_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p3_pio_err"}, 4703859Sml29623 {FFLP_STAT_HASH_P4_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p4_pio_err"}, 4713859Sml29623 {FFLP_STAT_HASH_P5_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p5_pio_err"}, 4723859Sml29623 {FFLP_STAT_HASH_P6_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p6_pio_err"}, 4733859Sml29623 {FFLP_STAT_HASH_P7_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p7_pio_err"}, 4743859Sml29623 {FFLP_STAT_END, NULL, NULL} 4753859Sml29623 }; 4763859Sml29623 4773859Sml29623 typedef enum { 4783859Sml29623 MMAC_MAX_ADDR, 4793859Sml29623 MMAC_AVAIL_ADDR, 4803859Sml29623 MMAC_ADDR_POOL1, 4813859Sml29623 MMAC_ADDR_POOL2, 4823859Sml29623 MMAC_ADDR_POOL3, 4833859Sml29623 MMAC_ADDR_POOL4, 4843859Sml29623 MMAC_ADDR_POOL5, 4853859Sml29623 MMAC_ADDR_POOL6, 4863859Sml29623 MMAC_ADDR_POOL7, 4873859Sml29623 MMAC_ADDR_POOL8, 4883859Sml29623 MMAC_ADDR_POOL9, 4893859Sml29623 MMAC_ADDR_POOL10, 4903859Sml29623 MMAC_ADDR_POOL11, 4913859Sml29623 MMAC_ADDR_POOL12, 4923859Sml29623 MMAC_ADDR_POOL13, 4933859Sml29623 MMAC_ADDR_POOL14, 4943859Sml29623 MMAC_ADDR_POOL15, 4953859Sml29623 MMAC_ADDR_POOL16, 4963859Sml29623 MMAC_STATS_END 4973859Sml29623 } nxge_mmac_stat_index_t; 4983859Sml29623 4993859Sml29623 nxge_kstat_index_t nxge_mmac_stats[] = { 5003859Sml29623 {MMAC_MAX_ADDR, KSTAT_DATA_UINT64, "max_mmac_addr"}, 5013859Sml29623 {MMAC_AVAIL_ADDR, KSTAT_DATA_UINT64, "avail_mmac_addr"}, 5023859Sml29623 {MMAC_ADDR_POOL1, KSTAT_DATA_UINT64, "mmac_addr_1"}, 5033859Sml29623 {MMAC_ADDR_POOL2, KSTAT_DATA_UINT64, "mmac_addr_2"}, 5043859Sml29623 {MMAC_ADDR_POOL3, KSTAT_DATA_UINT64, "mmac_addr_3"}, 5053859Sml29623 {MMAC_ADDR_POOL4, KSTAT_DATA_UINT64, "mmac_addr_4"}, 5063859Sml29623 {MMAC_ADDR_POOL5, KSTAT_DATA_UINT64, "mmac_addr_5"}, 5073859Sml29623 {MMAC_ADDR_POOL6, KSTAT_DATA_UINT64, "mmac_addr_6"}, 5083859Sml29623 {MMAC_ADDR_POOL7, KSTAT_DATA_UINT64, "mmac_addr_7"}, 5093859Sml29623 {MMAC_ADDR_POOL8, KSTAT_DATA_UINT64, "mmac_addr_8"}, 5103859Sml29623 {MMAC_ADDR_POOL9, KSTAT_DATA_UINT64, "mmac_addr_9"}, 5113859Sml29623 {MMAC_ADDR_POOL10, KSTAT_DATA_UINT64, "mmac_addr_10"}, 5123859Sml29623 {MMAC_ADDR_POOL11, KSTAT_DATA_UINT64, "mmac_addr_11"}, 5133859Sml29623 {MMAC_ADDR_POOL12, KSTAT_DATA_UINT64, "mmac_addr_12"}, 5143859Sml29623 {MMAC_ADDR_POOL13, KSTAT_DATA_UINT64, "mmac_addr_13"}, 5153859Sml29623 {MMAC_ADDR_POOL14, KSTAT_DATA_UINT64, "mmac_addr_14"}, 5163859Sml29623 {MMAC_ADDR_POOL15, KSTAT_DATA_UINT64, "mmac_addr_15"}, 5173859Sml29623 {MMAC_ADDR_POOL16, KSTAT_DATA_UINT64, "mmac_addr_16"}, 5183859Sml29623 {MMAC_STATS_END, NULL, NULL}, 5193859Sml29623 }; 5203859Sml29623 5213859Sml29623 /* ARGSUSED */ 5223859Sml29623 int 5233859Sml29623 nxge_tdc_stat_update(kstat_t *ksp, int rw) 5243859Sml29623 { 5253859Sml29623 p_nxge_t nxgep; 5263859Sml29623 p_nxge_tdc_kstat_t tdc_kstatsp; 5273859Sml29623 p_nxge_tx_ring_stats_t statsp; 5283859Sml29623 int channel; 5293859Sml29623 char *ch_name, *end; 5303859Sml29623 5313859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 5323859Sml29623 if (nxgep == NULL) 5333859Sml29623 return (-1); 5343859Sml29623 5353859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rxstat_update")); 5363859Sml29623 5373859Sml29623 ch_name = ksp->ks_name; 5383859Sml29623 ch_name += strlen(TDC_NAME_FORMAT1); 5393859Sml29623 channel = mi_strtol(ch_name, &end, 10); 5403859Sml29623 5413859Sml29623 tdc_kstatsp = (p_nxge_tdc_kstat_t)ksp->ks_data; 5423859Sml29623 statsp = (p_nxge_tx_ring_stats_t)&nxgep->statsp->tdc_stats[channel]; 5433859Sml29623 5443859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 5456946Smisaki "nxge_tdc_stat_update data $%p statsp $%p channel %d", 5466946Smisaki ksp->ks_data, statsp, channel)); 5473859Sml29623 5483859Sml29623 if (rw == KSTAT_WRITE) { 5493859Sml29623 statsp->opackets = tdc_kstatsp->opackets.value.ull; 5503859Sml29623 statsp->obytes = tdc_kstatsp->obytes.value.ull; 5513859Sml29623 statsp->oerrors = tdc_kstatsp->oerrors.value.ull; 5523859Sml29623 statsp->mbox_err = tdc_kstatsp->mbox_err.value.ul; 5533859Sml29623 statsp->pkt_size_err = tdc_kstatsp->pkt_size_err.value.ul; 5543859Sml29623 statsp->tx_ring_oflow = tdc_kstatsp->tx_ring_oflow.value.ul; 5553859Sml29623 statsp->pre_buf_par_err = 5566946Smisaki tdc_kstatsp->pref_buf_ecc_err.value.ul; 5573859Sml29623 statsp->nack_pref = tdc_kstatsp->nack_pref.value.ul; 5583859Sml29623 statsp->nack_pkt_rd = tdc_kstatsp->nack_pkt_rd.value.ul; 5593859Sml29623 statsp->conf_part_err = tdc_kstatsp->conf_part_err.value.ul; 5603859Sml29623 statsp->pkt_part_err = tdc_kstatsp->pkt_prt_err.value.ul; 5613859Sml29623 } else { 5623859Sml29623 tdc_kstatsp->opackets.value.ull = statsp->opackets; 5633859Sml29623 tdc_kstatsp->obytes.value.ull = statsp->obytes; 5643859Sml29623 tdc_kstatsp->oerrors.value.ull = statsp->oerrors; 5653859Sml29623 tdc_kstatsp->tx_hdr_pkts.value.ull = statsp->tx_hdr_pkts; 5663859Sml29623 tdc_kstatsp->tx_ddi_pkts.value.ull = statsp->tx_ddi_pkts; 5673859Sml29623 tdc_kstatsp->tx_dvma_pkts.value.ull = statsp->tx_dvma_pkts; 5683859Sml29623 tdc_kstatsp->tx_max_pend.value.ull = statsp->tx_max_pend; 5693859Sml29623 tdc_kstatsp->mbox_err.value.ul = statsp->mbox_err; 5703859Sml29623 tdc_kstatsp->pkt_size_err.value.ul = statsp->pkt_size_err; 5713859Sml29623 tdc_kstatsp->tx_ring_oflow.value.ul = statsp->tx_ring_oflow; 5723859Sml29623 tdc_kstatsp->pref_buf_ecc_err.value.ul = 5736946Smisaki statsp->pre_buf_par_err; 5743859Sml29623 tdc_kstatsp->nack_pref.value.ul = statsp->nack_pref; 5753859Sml29623 tdc_kstatsp->nack_pkt_rd.value.ul = statsp->nack_pkt_rd; 5763859Sml29623 tdc_kstatsp->conf_part_err.value.ul = statsp->conf_part_err; 5773859Sml29623 tdc_kstatsp->pkt_prt_err.value.ul = statsp->pkt_part_err; 5783859Sml29623 tdc_kstatsp->tx_starts.value.ul = statsp->tx_starts; 5793859Sml29623 tdc_kstatsp->tx_nocanput.value.ul = statsp->tx_nocanput; 5803859Sml29623 tdc_kstatsp->tx_msgdup_fail.value.ul = statsp->tx_msgdup_fail; 5813859Sml29623 tdc_kstatsp->tx_allocb_fail.value.ul = statsp->tx_allocb_fail; 5823859Sml29623 tdc_kstatsp->tx_no_desc.value.ul = statsp->tx_no_desc; 5833859Sml29623 tdc_kstatsp->tx_dma_bind_fail.value.ul = 5846946Smisaki statsp->tx_dma_bind_fail; 5853859Sml29623 } 5863859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_tdc_stat_update")); 5873859Sml29623 return (0); 5883859Sml29623 } 5893859Sml29623 5903859Sml29623 /* ARGSUSED */ 5913859Sml29623 int 5923859Sml29623 nxge_rdc_stat_update(kstat_t *ksp, int rw) 5933859Sml29623 { 5943859Sml29623 p_nxge_t nxgep; 5953859Sml29623 p_nxge_rdc_kstat_t rdc_kstatsp; 5963859Sml29623 p_nxge_rx_ring_stats_t statsp; 5973859Sml29623 int channel; 5983859Sml29623 char *ch_name, *end; 5993859Sml29623 6003859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 6013859Sml29623 if (nxgep == NULL) 6023859Sml29623 return (-1); 6033859Sml29623 6043859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rdc_stat_update")); 6053859Sml29623 6063859Sml29623 ch_name = ksp->ks_name; 6073859Sml29623 ch_name += strlen(RDC_NAME_FORMAT1); 6083859Sml29623 channel = mi_strtol(ch_name, &end, 10); 6093859Sml29623 6103859Sml29623 rdc_kstatsp = (p_nxge_rdc_kstat_t)ksp->ks_data; 6113859Sml29623 statsp = (p_nxge_rx_ring_stats_t)&nxgep->statsp->rdc_stats[channel]; 6123859Sml29623 6133859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 6146946Smisaki "nxge_rdc_stat_update $%p statsp $%p channel %d", 6156946Smisaki ksp->ks_data, statsp, channel)); 6163859Sml29623 6173859Sml29623 if (rw == KSTAT_WRITE) { 6183859Sml29623 statsp->dcf_err = rdc_kstatsp->dcf_err.value.ul; 6193859Sml29623 statsp->rcr_ack_err = rdc_kstatsp->rcr_ack_err.value.ul; 6203859Sml29623 statsp->dc_fifo_err = rdc_kstatsp->dc_fifoflow_err.value.ul; 6213859Sml29623 statsp->rcr_sha_par = rdc_kstatsp->rcr_sha_par_err.value.ul; 6223859Sml29623 statsp->rbr_pre_par = rdc_kstatsp->rbr_pre_par_err.value.ul; 6233859Sml29623 statsp->wred_drop = rdc_kstatsp->wred_drop.value.ul; 6243859Sml29623 statsp->rbr_pre_empty = rdc_kstatsp->rbr_pre_emty.value.ul; 6253859Sml29623 statsp->rcr_shadow_full = rdc_kstatsp->rcr_shadow_full.value.ul; 6263859Sml29623 statsp->rx_rbr_tmout = rdc_kstatsp->rbr_tmout.value.ul; 6273859Sml29623 statsp->rsp_cnt_err = rdc_kstatsp->rsp_cnt_err.value.ul; 6283859Sml29623 statsp->byte_en_bus = rdc_kstatsp->byte_en_bus.value.ul; 6293859Sml29623 statsp->rsp_dat_err = rdc_kstatsp->rsp_dat_err.value.ul; 6306028Ssbehera statsp->pkt_too_long_err = 6316028Ssbehera rdc_kstatsp->pkt_too_long_err.value.ul; 6323859Sml29623 statsp->l2_err = rdc_kstatsp->compl_l2_err.value.ul; 6333859Sml29623 statsp->l4_cksum_err = rdc_kstatsp->compl_l4_cksum_err.value.ul; 6343859Sml29623 statsp->fflp_soft_err = 6356946Smisaki rdc_kstatsp->compl_fflp_soft_err.value.ul; 6363859Sml29623 statsp->zcp_soft_err = rdc_kstatsp->compl_zcp_soft_err.value.ul; 6373859Sml29623 statsp->config_err = rdc_kstatsp->config_err.value.ul; 6383859Sml29623 statsp->rcrincon = rdc_kstatsp->rcrincon.value.ul; 6393859Sml29623 statsp->rcrfull = rdc_kstatsp->rcrfull.value.ul; 6403859Sml29623 statsp->rbr_empty = rdc_kstatsp->rbr_empty.value.ul; 6413859Sml29623 statsp->rbrfull = rdc_kstatsp->rbrfull.value.ul; 6423859Sml29623 statsp->rbrlogpage = rdc_kstatsp->rbrlogpage.value.ul; 6433859Sml29623 statsp->cfiglogpage = rdc_kstatsp->cfiglogpage.value.ul; 6443859Sml29623 } else { 6453859Sml29623 rdc_kstatsp->ipackets.value.ull = statsp->ipackets; 6463859Sml29623 rdc_kstatsp->rbytes.value.ull = statsp->ibytes; 6473859Sml29623 rdc_kstatsp->errors.value.ul = statsp->ierrors; 6483859Sml29623 rdc_kstatsp->dcf_err.value.ul = statsp->dcf_err; 6493859Sml29623 rdc_kstatsp->rcr_ack_err.value.ul = statsp->rcr_ack_err; 6503859Sml29623 rdc_kstatsp->dc_fifoflow_err.value.ul = statsp->dc_fifo_err; 6513859Sml29623 rdc_kstatsp->rcr_sha_par_err.value.ul = statsp->rcr_sha_par; 6523859Sml29623 rdc_kstatsp->rbr_pre_par_err.value.ul = statsp->rbr_pre_par; 6533859Sml29623 rdc_kstatsp->wred_drop.value.ul = statsp->wred_drop; 6543859Sml29623 rdc_kstatsp->port_drop_pkt.value.ul = statsp->port_drop_pkt; 6553859Sml29623 rdc_kstatsp->rbr_pre_emty.value.ul = statsp->rbr_pre_empty; 6563859Sml29623 rdc_kstatsp->rcr_shadow_full.value.ul = statsp->rcr_shadow_full; 6573859Sml29623 rdc_kstatsp->rbr_tmout.value.ul = statsp->rx_rbr_tmout; 6583859Sml29623 rdc_kstatsp->rsp_cnt_err.value.ul = statsp->rsp_cnt_err; 6593859Sml29623 rdc_kstatsp->byte_en_bus.value.ul = statsp->byte_en_bus; 6603859Sml29623 rdc_kstatsp->rsp_dat_err.value.ul = statsp->rsp_dat_err; 6616028Ssbehera rdc_kstatsp->pkt_too_long_err.value.ul = 6626028Ssbehera statsp->pkt_too_long_err; 6633859Sml29623 rdc_kstatsp->compl_l2_err.value.ul = statsp->l2_err; 6643859Sml29623 rdc_kstatsp->compl_l4_cksum_err.value.ul = statsp->l4_cksum_err; 6653859Sml29623 rdc_kstatsp->compl_fflp_soft_err.value.ul = 6666946Smisaki statsp->fflp_soft_err; 6673859Sml29623 rdc_kstatsp->compl_zcp_soft_err.value.ul = statsp->zcp_soft_err; 6683859Sml29623 rdc_kstatsp->config_err.value.ul = statsp->config_err; 6693859Sml29623 rdc_kstatsp->rcrincon.value.ul = statsp->rcrincon; 6703859Sml29623 rdc_kstatsp->rcrfull.value.ul = statsp->rcrfull; 6713859Sml29623 rdc_kstatsp->rbr_empty.value.ul = statsp->rbr_empty; 6723859Sml29623 rdc_kstatsp->rbrfull.value.ul = statsp->rbrfull; 6733859Sml29623 rdc_kstatsp->rbrlogpage.value.ul = statsp->rbrlogpage; 6743859Sml29623 rdc_kstatsp->cfiglogpage.value.ul = statsp->cfiglogpage; 6753859Sml29623 } 6763859Sml29623 6773859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_rdc_stat_update")); 6783859Sml29623 return (0); 6793859Sml29623 } 6803859Sml29623 6813859Sml29623 /* ARGSUSED */ 6823859Sml29623 int 6833859Sml29623 nxge_rdc_sys_stat_update(kstat_t *ksp, int rw) 6843859Sml29623 { 6853859Sml29623 p_nxge_t nxgep; 6863859Sml29623 p_nxge_rdc_sys_kstat_t rdc_sys_kstatsp; 6873859Sml29623 p_nxge_rdc_sys_stats_t statsp; 6883859Sml29623 6893859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 6903859Sml29623 if (nxgep == NULL) 6913859Sml29623 return (-1); 6923859Sml29623 6933859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rdc_sys_stat_update")); 6943859Sml29623 6953859Sml29623 rdc_sys_kstatsp = (p_nxge_rdc_sys_kstat_t)ksp->ks_data; 6963859Sml29623 statsp = (p_nxge_rdc_sys_stats_t)&nxgep->statsp->rdc_sys_stats; 6973859Sml29623 6983859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "nxge_rdc_sys_stat_update %llx", 6996946Smisaki ksp->ks_data)); 7003859Sml29623 7013859Sml29623 if (rw == KSTAT_WRITE) { 7023859Sml29623 statsp->id_mismatch = rdc_sys_kstatsp->id_mismatch.value.ul; 7033859Sml29623 statsp->ipp_eop_err = rdc_sys_kstatsp->ipp_eop_err.value.ul; 7043859Sml29623 statsp->zcp_eop_err = rdc_sys_kstatsp->zcp_eop_err.value.ul; 7053859Sml29623 } else { 7063859Sml29623 rdc_sys_kstatsp->id_mismatch.value.ul = statsp->id_mismatch; 7073859Sml29623 rdc_sys_kstatsp->ipp_eop_err.value.ul = statsp->ipp_eop_err; 7083859Sml29623 rdc_sys_kstatsp->zcp_eop_err.value.ul = statsp->zcp_eop_err; 7093859Sml29623 } 7103859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_rdc_sys_stat_update")); 7113859Sml29623 return (0); 7123859Sml29623 } 7133859Sml29623 7143859Sml29623 /* ARGSUSED */ 7153859Sml29623 static int 7163859Sml29623 nxge_txc_stat_update(kstat_t *ksp, int rw) 7173859Sml29623 { 7183859Sml29623 p_nxge_t nxgep; 7193859Sml29623 p_nxge_txc_kstat_t txc_kstatsp; 7203859Sml29623 p_nxge_txc_stats_t statsp; 7213859Sml29623 7223859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 7233859Sml29623 7243859Sml29623 if (nxgep == NULL) 7253859Sml29623 return (-1); 7263859Sml29623 7273859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_txc_stat_update")); 7283859Sml29623 7293859Sml29623 txc_kstatsp = (p_nxge_txc_kstat_t)ksp->ks_data; 7303859Sml29623 statsp = (p_nxge_txc_stats_t)&nxgep->statsp->txc_stats; 7313859Sml29623 7323859Sml29623 if (rw == KSTAT_WRITE) { 7333859Sml29623 statsp->pkt_stuffed = txc_kstatsp->pkt_stuffed.value.ul; 7343859Sml29623 statsp->pkt_xmit = txc_kstatsp->pkt_xmit.value.ul; 7353859Sml29623 statsp->ro_correct_err = txc_kstatsp->ro_correct_err.value.ul; 7363859Sml29623 statsp->ro_uncorrect_err = 7376946Smisaki txc_kstatsp->ro_uncorrect_err.value.ul; 7383859Sml29623 statsp->sf_correct_err = txc_kstatsp->sf_correct_err.value.ul; 7393859Sml29623 statsp->sf_uncorrect_err = 7406946Smisaki txc_kstatsp->sf_uncorrect_err.value.ul; 7413859Sml29623 statsp->address_failed = txc_kstatsp->address_failed.value.ul; 7423859Sml29623 statsp->dma_failed = txc_kstatsp->dma_failed.value.ul; 7433859Sml29623 statsp->length_failed = txc_kstatsp->length_failed.value.ul; 7443859Sml29623 statsp->pkt_assy_dead = txc_kstatsp->pkt_assy_dead.value.ul; 7453859Sml29623 statsp->reorder_err = txc_kstatsp->reorder_err.value.ul; 7463859Sml29623 } else { 7473859Sml29623 txc_kstatsp->pkt_stuffed.value.ul = statsp->pkt_stuffed; 7483859Sml29623 txc_kstatsp->pkt_xmit.value.ul = statsp->pkt_xmit; 7493859Sml29623 txc_kstatsp->ro_correct_err.value.ul = statsp->ro_correct_err; 7503859Sml29623 txc_kstatsp->ro_uncorrect_err.value.ul = 7516946Smisaki statsp->ro_uncorrect_err; 7523859Sml29623 txc_kstatsp->sf_correct_err.value.ul = statsp->sf_correct_err; 7533859Sml29623 txc_kstatsp->sf_uncorrect_err.value.ul = 7546946Smisaki statsp->sf_uncorrect_err; 7553859Sml29623 txc_kstatsp->address_failed.value.ul = statsp->address_failed; 7563859Sml29623 txc_kstatsp->dma_failed.value.ul = statsp->dma_failed; 7573859Sml29623 txc_kstatsp->length_failed.value.ul = statsp->length_failed; 7583859Sml29623 txc_kstatsp->pkt_assy_dead.value.ul = statsp->pkt_assy_dead; 7593859Sml29623 txc_kstatsp->reorder_err.value.ul = statsp->reorder_err; 7603859Sml29623 } 7613859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_txc_stat_update")); 7623859Sml29623 return (0); 7633859Sml29623 } 7643859Sml29623 7653859Sml29623 /* ARGSUSED */ 7663859Sml29623 int 7673859Sml29623 nxge_ipp_stat_update(kstat_t *ksp, int rw) 7683859Sml29623 { 7693859Sml29623 p_nxge_t nxgep; 7703859Sml29623 p_nxge_ipp_kstat_t ipp_kstatsp; 7713859Sml29623 p_nxge_ipp_stats_t statsp; 7723859Sml29623 7733859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 7743859Sml29623 if (nxgep == NULL) 7753859Sml29623 return (-1); 7763859Sml29623 7773859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_ipp_stat_update")); 7783859Sml29623 7793859Sml29623 ipp_kstatsp = (p_nxge_ipp_kstat_t)ksp->ks_data; 7803859Sml29623 statsp = (p_nxge_ipp_stats_t)&nxgep->statsp->ipp_stats; 7813859Sml29623 7823859Sml29623 if (rw == KSTAT_WRITE) { 7833859Sml29623 statsp->eop_miss = ipp_kstatsp->eop_miss.value.ul; 7843859Sml29623 statsp->sop_miss = ipp_kstatsp->sop_miss.value.ul; 7853859Sml29623 statsp->dfifo_ue = ipp_kstatsp->dfifo_ue.value.ul; 7863859Sml29623 statsp->ecc_err_cnt = ipp_kstatsp->ecc_err_cnt.value.ul; 7874439Sml29623 statsp->pfifo_perr = ipp_kstatsp->pfifo_perr.value.ul; 7883859Sml29623 statsp->pfifo_over = ipp_kstatsp->pfifo_over.value.ul; 7893859Sml29623 statsp->pfifo_und = ipp_kstatsp->pfifo_und.value.ul; 7903859Sml29623 statsp->bad_cs_cnt = ipp_kstatsp->bad_cs_cnt.value.ul; 7913859Sml29623 statsp->pkt_dis_cnt = ipp_kstatsp->pkt_dis_cnt.value.ul; 7923859Sml29623 } else { 7933859Sml29623 ipp_kstatsp->eop_miss.value.ul = statsp->eop_miss; 7943859Sml29623 ipp_kstatsp->sop_miss.value.ul = statsp->sop_miss; 7953859Sml29623 ipp_kstatsp->dfifo_ue.value.ul = statsp->dfifo_ue; 7963859Sml29623 ipp_kstatsp->ecc_err_cnt.value.ul = statsp->ecc_err_cnt; 7974439Sml29623 ipp_kstatsp->pfifo_perr.value.ul = statsp->pfifo_perr; 7983859Sml29623 ipp_kstatsp->pfifo_over.value.ul = statsp->pfifo_over; 7993859Sml29623 ipp_kstatsp->pfifo_und.value.ul = statsp->pfifo_und; 8003859Sml29623 ipp_kstatsp->bad_cs_cnt.value.ul = statsp->bad_cs_cnt; 8013859Sml29623 ipp_kstatsp->pkt_dis_cnt.value.ul = statsp->pkt_dis_cnt; 8023859Sml29623 } 8033859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_ipp_stat_update")); 8043859Sml29623 return (0); 8053859Sml29623 } 8063859Sml29623 8073859Sml29623 /* ARGSUSED */ 8083859Sml29623 int 8093859Sml29623 nxge_xmac_stat_update(kstat_t *ksp, int rw) 8103859Sml29623 { 8113859Sml29623 p_nxge_t nxgep; 8123859Sml29623 p_nxge_xmac_kstat_t xmac_kstatsp; 8133859Sml29623 p_nxge_xmac_stats_t statsp; 8143859Sml29623 8153859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 8163859Sml29623 if (nxgep == NULL) 8173859Sml29623 return (-1); 8183859Sml29623 8193859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_xmac_stat_update")); 8203859Sml29623 8213859Sml29623 xmac_kstatsp = (p_nxge_xmac_kstat_t)ksp->ks_data; 8223859Sml29623 statsp = (p_nxge_xmac_stats_t)&nxgep->statsp->xmac_stats; 8233859Sml29623 8243859Sml29623 if (rw == KSTAT_WRITE) { 8253859Sml29623 statsp->tx_frame_cnt = xmac_kstatsp->tx_frame_cnt.value.ul; 8263859Sml29623 statsp->tx_underflow_err = 8276946Smisaki xmac_kstatsp->tx_underflow_err.value.ul; 8283859Sml29623 statsp->tx_maxpktsize_err = 8296946Smisaki xmac_kstatsp->tx_maxpktsize_err.value.ul; 8303859Sml29623 statsp->tx_overflow_err = 8316946Smisaki xmac_kstatsp->tx_overflow_err.value.ul; 8323859Sml29623 statsp->tx_fifo_xfr_err = 8336946Smisaki xmac_kstatsp->tx_fifo_xfr_err.value.ul; 8343859Sml29623 statsp->tx_byte_cnt = xmac_kstatsp->tx_byte_cnt.value.ul; 8353859Sml29623 statsp->rx_underflow_err = 8366946Smisaki xmac_kstatsp->rx_underflow_err.value.ul; 8373859Sml29623 statsp->rx_overflow_err = 8386946Smisaki xmac_kstatsp->rx_overflow_err.value.ul; 8393859Sml29623 statsp->rx_crc_err_cnt = xmac_kstatsp->rx_crc_err_cnt.value.ul; 8403859Sml29623 statsp->rx_len_err_cnt = xmac_kstatsp->rx_len_err_cnt.value.ul; 8413859Sml29623 statsp->rx_viol_err_cnt = 8426946Smisaki xmac_kstatsp->rx_viol_err_cnt.value.ul; 8433859Sml29623 statsp->rx_byte_cnt = xmac_kstatsp->rx_byte_cnt.value.ul; 8446075Ssbehera statsp->rx_frame_cnt = xmac_kstatsp->rx_frame_cnt.value.ul; 8453859Sml29623 statsp->rx_hist1_cnt = xmac_kstatsp->rx_hist1_cnt.value.ul; 8463859Sml29623 statsp->rx_hist2_cnt = xmac_kstatsp->rx_hist2_cnt.value.ul; 8473859Sml29623 statsp->rx_hist3_cnt = xmac_kstatsp->rx_hist3_cnt.value.ul; 8483859Sml29623 statsp->rx_hist4_cnt = xmac_kstatsp->rx_hist4_cnt.value.ul; 8493859Sml29623 statsp->rx_hist5_cnt = xmac_kstatsp->rx_hist5_cnt.value.ul; 8503859Sml29623 statsp->rx_hist6_cnt = xmac_kstatsp->rx_hist6_cnt.value.ul; 8516075Ssbehera statsp->rx_hist7_cnt = xmac_kstatsp->rx_hist7_cnt.value.ul; 8523859Sml29623 statsp->rx_mult_cnt = xmac_kstatsp->rx_mult_cnt.value.ul; 8533859Sml29623 statsp->rx_frag_cnt = xmac_kstatsp->rx_frag_cnt.value.ul; 8543859Sml29623 statsp->rx_frame_align_err_cnt = 8556946Smisaki xmac_kstatsp->rx_frame_align_err_cnt.value.ul; 8563859Sml29623 statsp->rx_linkfault_err_cnt = 8576946Smisaki xmac_kstatsp->rx_linkfault_err_cnt.value.ul; 8583859Sml29623 statsp->rx_localfault_err = 8596946Smisaki xmac_kstatsp->rx_local_fault_err_cnt.value.ul; 8603859Sml29623 statsp->rx_remotefault_err = 8616946Smisaki xmac_kstatsp->rx_remote_fault_err_cnt.value.ul; 8623859Sml29623 statsp->xpcs_deskew_err_cnt = 8636946Smisaki xmac_kstatsp->xpcs_deskew_err_cnt.value.ul; 8643859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 8653859Sml29623 statsp->xpcs_ln0_symbol_err_cnt = 8666946Smisaki xmac_kstatsp->xpcs_ln0_symbol_err_cnt.value.ul; 8673859Sml29623 statsp->xpcs_ln1_symbol_err_cnt = 8686946Smisaki xmac_kstatsp->xpcs_ln1_symbol_err_cnt.value.ul; 8693859Sml29623 statsp->xpcs_ln2_symbol_err_cnt = 8706946Smisaki xmac_kstatsp->xpcs_ln2_symbol_err_cnt.value.ul; 8713859Sml29623 statsp->xpcs_ln3_symbol_err_cnt = 8726946Smisaki xmac_kstatsp->xpcs_ln3_symbol_err_cnt.value.ul; 8733859Sml29623 #endif 8743859Sml29623 } else { 8753859Sml29623 xmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt; 8763859Sml29623 xmac_kstatsp->tx_underflow_err.value.ul = 8776946Smisaki statsp->tx_underflow_err; 8783859Sml29623 xmac_kstatsp->tx_maxpktsize_err.value.ul = 8796946Smisaki statsp->tx_maxpktsize_err; 8803859Sml29623 xmac_kstatsp->tx_overflow_err.value.ul = 8816946Smisaki statsp->tx_overflow_err; 8823859Sml29623 xmac_kstatsp->tx_fifo_xfr_err.value.ul = 8836946Smisaki statsp->tx_fifo_xfr_err; 8843859Sml29623 xmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt; 8853859Sml29623 xmac_kstatsp->rx_underflow_err.value.ul = 8866946Smisaki statsp->rx_underflow_err; 8873859Sml29623 xmac_kstatsp->rx_overflow_err.value.ul = 8886946Smisaki statsp->rx_overflow_err; 8893859Sml29623 xmac_kstatsp->rx_crc_err_cnt.value.ul = statsp->rx_crc_err_cnt; 8903859Sml29623 xmac_kstatsp->rx_len_err_cnt.value.ul = statsp->rx_len_err_cnt; 8913859Sml29623 xmac_kstatsp->rx_viol_err_cnt.value.ul = 8926946Smisaki statsp->rx_viol_err_cnt; 8933859Sml29623 xmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt; 8946075Ssbehera xmac_kstatsp->rx_frame_cnt.value.ul = statsp->rx_frame_cnt; 8953859Sml29623 xmac_kstatsp->rx_hist1_cnt.value.ul = statsp->rx_hist1_cnt; 8963859Sml29623 xmac_kstatsp->rx_hist2_cnt.value.ul = statsp->rx_hist2_cnt; 8973859Sml29623 xmac_kstatsp->rx_hist3_cnt.value.ul = statsp->rx_hist3_cnt; 8983859Sml29623 xmac_kstatsp->rx_hist4_cnt.value.ul = statsp->rx_hist4_cnt; 8993859Sml29623 xmac_kstatsp->rx_hist5_cnt.value.ul = statsp->rx_hist5_cnt; 9003859Sml29623 xmac_kstatsp->rx_hist6_cnt.value.ul = statsp->rx_hist6_cnt; 9016075Ssbehera xmac_kstatsp->rx_hist7_cnt.value.ul = statsp->rx_hist7_cnt; 9023859Sml29623 xmac_kstatsp->rx_mult_cnt.value.ul = statsp->rx_mult_cnt; 9033859Sml29623 xmac_kstatsp->rx_frag_cnt.value.ul = statsp->rx_frag_cnt; 9043859Sml29623 xmac_kstatsp->rx_frame_align_err_cnt.value.ul = 9056946Smisaki statsp->rx_frame_align_err_cnt; 9063859Sml29623 xmac_kstatsp->rx_linkfault_err_cnt.value.ul = 9076946Smisaki statsp->rx_linkfault_err_cnt; 9083859Sml29623 xmac_kstatsp->rx_local_fault_err_cnt.value.ul = 9096946Smisaki statsp->rx_localfault_err; 9103859Sml29623 xmac_kstatsp->rx_remote_fault_err_cnt.value.ul = 9116946Smisaki statsp->rx_remotefault_err; 9123859Sml29623 xmac_kstatsp->xpcs_deskew_err_cnt.value.ul = 9136946Smisaki statsp->xpcs_deskew_err_cnt; 9143859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 9153859Sml29623 xmac_kstatsp->xpcs_ln0_symbol_err_cnt.value.ul = 9166946Smisaki statsp->xpcs_ln0_symbol_err_cnt; 9173859Sml29623 xmac_kstatsp->xpcs_ln1_symbol_err_cnt.value.ul = 9186946Smisaki statsp->xpcs_ln1_symbol_err_cnt; 9193859Sml29623 xmac_kstatsp->xpcs_ln2_symbol_err_cnt.value.ul = 9206946Smisaki statsp->xpcs_ln2_symbol_err_cnt; 9213859Sml29623 xmac_kstatsp->xpcs_ln3_symbol_err_cnt.value.ul = 9226946Smisaki statsp->xpcs_ln3_symbol_err_cnt; 9233859Sml29623 #endif 9243859Sml29623 } 9253859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_xmac_stat_update")); 9263859Sml29623 return (0); 9273859Sml29623 } 9283859Sml29623 9293859Sml29623 /* ARGSUSED */ 9303859Sml29623 int 9313859Sml29623 nxge_bmac_stat_update(kstat_t *ksp, int rw) 9323859Sml29623 { 9333859Sml29623 p_nxge_t nxgep; 9343859Sml29623 p_nxge_bmac_kstat_t bmac_kstatsp; 9353859Sml29623 p_nxge_bmac_stats_t statsp; 9363859Sml29623 9373859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 9383859Sml29623 if (nxgep == NULL) 9393859Sml29623 return (-1); 9403859Sml29623 9413859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_bmac_stat_update")); 9423859Sml29623 9433859Sml29623 bmac_kstatsp = (p_nxge_bmac_kstat_t)ksp->ks_data; 9443859Sml29623 statsp = (p_nxge_bmac_stats_t)&nxgep->statsp->bmac_stats; 9453859Sml29623 9463859Sml29623 if (rw == KSTAT_WRITE) { 9473859Sml29623 statsp->tx_frame_cnt = bmac_kstatsp->tx_frame_cnt.value.ul; 9483859Sml29623 statsp->tx_underrun_err = 9496946Smisaki bmac_kstatsp->tx_underrun_err.value.ul; 9503859Sml29623 statsp->tx_max_pkt_err = bmac_kstatsp->tx_max_pkt_err.value.ul; 9513859Sml29623 statsp->tx_byte_cnt = bmac_kstatsp->tx_byte_cnt.value.ul; 9523859Sml29623 statsp->rx_frame_cnt = bmac_kstatsp->rx_frame_cnt.value.ul; 9533859Sml29623 statsp->rx_byte_cnt = bmac_kstatsp->rx_byte_cnt.value.ul; 9543859Sml29623 statsp->rx_overflow_err = 9556946Smisaki bmac_kstatsp->rx_overflow_err.value.ul; 9563859Sml29623 statsp->rx_align_err_cnt = 9576946Smisaki bmac_kstatsp->rx_align_err_cnt.value.ul; 9583859Sml29623 statsp->rx_crc_err_cnt = bmac_kstatsp->rx_crc_err_cnt.value.ul; 9593859Sml29623 statsp->rx_len_err_cnt = bmac_kstatsp->rx_len_err_cnt.value.ul; 9603859Sml29623 statsp->rx_viol_err_cnt = 9616946Smisaki bmac_kstatsp->rx_viol_err_cnt.value.ul; 9623859Sml29623 } else { 9633859Sml29623 bmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt; 9643859Sml29623 bmac_kstatsp->tx_underrun_err.value.ul = 9656946Smisaki statsp->tx_underrun_err; 9663859Sml29623 bmac_kstatsp->tx_max_pkt_err.value.ul = statsp->tx_max_pkt_err; 9673859Sml29623 bmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt; 9683859Sml29623 bmac_kstatsp->rx_frame_cnt.value.ul = statsp->rx_frame_cnt; 9693859Sml29623 bmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt; 9703859Sml29623 bmac_kstatsp->rx_overflow_err.value.ul = 9716946Smisaki statsp->rx_overflow_err; 9723859Sml29623 bmac_kstatsp->rx_align_err_cnt.value.ul = 9736946Smisaki statsp->rx_align_err_cnt; 9743859Sml29623 bmac_kstatsp->rx_crc_err_cnt.value.ul = statsp->rx_crc_err_cnt; 9753859Sml29623 bmac_kstatsp->rx_len_err_cnt.value.ul = statsp->rx_len_err_cnt; 9763859Sml29623 bmac_kstatsp->rx_viol_err_cnt.value.ul = 9776946Smisaki statsp->rx_viol_err_cnt; 9783859Sml29623 } 9793859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_bmac_stat_update")); 9803859Sml29623 return (0); 9813859Sml29623 } 9823859Sml29623 9833859Sml29623 /* ARGSUSED */ 9843859Sml29623 int 9853859Sml29623 nxge_zcp_stat_update(kstat_t *ksp, int rw) 9863859Sml29623 { 9873859Sml29623 p_nxge_t nxgep; 9883859Sml29623 p_nxge_zcp_kstat_t zcp_kstatsp; 9893859Sml29623 p_nxge_zcp_stats_t statsp; 9903859Sml29623 9913859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 9923859Sml29623 if (nxgep == NULL) 9933859Sml29623 return (-1); 9943859Sml29623 9953859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_zcp_stat_update")); 9963859Sml29623 9973859Sml29623 zcp_kstatsp = (p_nxge_zcp_kstat_t)ksp->ks_data; 9983859Sml29623 statsp = (p_nxge_zcp_stats_t)&nxgep->statsp->zcp_stats; 9993859Sml29623 10003859Sml29623 if (rw == KSTAT_WRITE) { 10013859Sml29623 statsp->rrfifo_underrun = zcp_kstatsp->rrfifo_underrun.value.ul; 10023859Sml29623 statsp->rrfifo_overrun = zcp_kstatsp->rrfifo_overrun.value.ul; 10033859Sml29623 statsp->rspfifo_uncorr_err = 10046946Smisaki zcp_kstatsp->rspfifo_uncorr_err.value.ul; 10053859Sml29623 statsp->buffer_overflow = zcp_kstatsp->buffer_overflow.value.ul; 10063859Sml29623 statsp->stat_tbl_perr = zcp_kstatsp->stat_tbl_perr.value.ul; 10073859Sml29623 statsp->dyn_tbl_perr = zcp_kstatsp->dyn_tbl_perr.value.ul; 10083859Sml29623 statsp->buf_tbl_perr = zcp_kstatsp->buf_tbl_perr.value.ul; 10093859Sml29623 statsp->tt_program_err = zcp_kstatsp->tt_program_err.value.ul; 10103859Sml29623 statsp->rsp_tt_index_err = 10116946Smisaki zcp_kstatsp->rsp_tt_index_err.value.ul; 10123859Sml29623 statsp->slv_tt_index_err = 10136946Smisaki zcp_kstatsp->slv_tt_index_err.value.ul; 10143859Sml29623 statsp->zcp_tt_index_err = 10156946Smisaki zcp_kstatsp->zcp_tt_index_err.value.ul; 10163859Sml29623 statsp->cfifo_ecc = zcp_kstatsp->cfifo_ecc.value.ul; 10173859Sml29623 } else { 10183859Sml29623 zcp_kstatsp->rrfifo_underrun.value.ul = statsp->rrfifo_underrun; 10193859Sml29623 zcp_kstatsp->rrfifo_overrun.value.ul = statsp->rrfifo_overrun; 10203859Sml29623 zcp_kstatsp->rspfifo_uncorr_err.value.ul = 10216946Smisaki statsp->rspfifo_uncorr_err; 10223859Sml29623 zcp_kstatsp->buffer_overflow.value.ul = 10236946Smisaki statsp->buffer_overflow; 10243859Sml29623 zcp_kstatsp->stat_tbl_perr.value.ul = statsp->stat_tbl_perr; 10253859Sml29623 zcp_kstatsp->dyn_tbl_perr.value.ul = statsp->dyn_tbl_perr; 10263859Sml29623 zcp_kstatsp->buf_tbl_perr.value.ul = statsp->buf_tbl_perr; 10273859Sml29623 zcp_kstatsp->tt_program_err.value.ul = statsp->tt_program_err; 10283859Sml29623 zcp_kstatsp->rsp_tt_index_err.value.ul = 10296946Smisaki statsp->rsp_tt_index_err; 10303859Sml29623 zcp_kstatsp->slv_tt_index_err.value.ul = 10316946Smisaki statsp->slv_tt_index_err; 10323859Sml29623 zcp_kstatsp->zcp_tt_index_err.value.ul = 10336946Smisaki statsp->zcp_tt_index_err; 10343859Sml29623 zcp_kstatsp->cfifo_ecc.value.ul = statsp->cfifo_ecc; 10353859Sml29623 } 10363859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_zcp_stat_update")); 10373859Sml29623 return (0); 10383859Sml29623 } 10393859Sml29623 10403859Sml29623 /* ARGSUSED */ 10413859Sml29623 int 10423859Sml29623 nxge_fflp_stat_update(kstat_t *ksp, int rw) 10433859Sml29623 { 10443859Sml29623 p_nxge_t nxgep; 10453859Sml29623 p_nxge_fflp_kstat_t fflp_kstatsp; 10463859Sml29623 p_nxge_fflp_stats_t statsp; 10473859Sml29623 int ldc_grp; 10483859Sml29623 10493859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 10503859Sml29623 if (nxgep == NULL) 10513859Sml29623 return (-1); 10523859Sml29623 10533859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_fflp_stat_update")); 10543859Sml29623 10553859Sml29623 fflp_kstatsp = (p_nxge_fflp_kstat_t)ksp->ks_data; 10563859Sml29623 statsp = (p_nxge_fflp_stats_t)&nxgep->statsp->fflp_stats; 10573859Sml29623 10583859Sml29623 if (rw == KSTAT_WRITE) { 10593859Sml29623 statsp->tcam_parity_err = fflp_kstatsp->fflp_tcam_perr.value.ul; 10603859Sml29623 statsp->tcam_ecc_err = fflp_kstatsp->fflp_tcam_ecc_err.value.ul; 10613859Sml29623 statsp->vlan_parity_err = fflp_kstatsp->fflp_vlan_perr.value.ul; 10623859Sml29623 statsp->hash_lookup_err = 10636946Smisaki fflp_kstatsp->fflp_hasht_lookup_err.value.ul; 10643859Sml29623 for (ldc_grp = 0; ldc_grp < MAX_PARTITION; ldc_grp++) { 10653859Sml29623 statsp->hash_pio_err[ldc_grp] = 10666946Smisaki fflp_kstatsp->fflp_hasht_data_err[ldc_grp]. 10676946Smisaki value.ul; 10683859Sml29623 } 10693859Sml29623 } else { 10703859Sml29623 fflp_kstatsp->fflp_tcam_perr.value.ul = 10716946Smisaki fflp_kstatsp->fflp_tcam_perr.value.ul; 10723859Sml29623 fflp_kstatsp->fflp_tcam_ecc_err.value.ul = statsp->tcam_ecc_err; 10733859Sml29623 fflp_kstatsp->fflp_vlan_perr.value.ul = statsp->vlan_parity_err; 10743859Sml29623 fflp_kstatsp->fflp_hasht_lookup_err.value.ul = 10756946Smisaki statsp->hash_lookup_err; 10763859Sml29623 for (ldc_grp = 0; ldc_grp < MAX_PARTITION; ldc_grp++) { 10773859Sml29623 fflp_kstatsp->fflp_hasht_data_err[ldc_grp].value.ul = 10786946Smisaki statsp->hash_pio_err[ldc_grp]; 10793859Sml29623 } 10803859Sml29623 } 10813859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_fflp_stat_update")); 10823859Sml29623 return (0); 10833859Sml29623 } 10843859Sml29623 10853859Sml29623 /* ARGSUSED */ 10863859Sml29623 static uint64_t 10873859Sml29623 nxge_mac_octet_to_u64(struct ether_addr addr) 10883859Sml29623 { 10893859Sml29623 int i; 10903859Sml29623 uint64_t addr64 = 0; 10913859Sml29623 10923859Sml29623 for (i = ETHERADDRL - 1; i >= 0; i--) { 10933859Sml29623 addr64 <<= 8; 10943859Sml29623 addr64 |= addr.ether_addr_octet[i]; 10953859Sml29623 } 10963859Sml29623 return (addr64); 10973859Sml29623 } 10983859Sml29623 10993859Sml29623 /* ARGSUSED */ 11003859Sml29623 int 11013859Sml29623 nxge_mmac_stat_update(kstat_t *ksp, int rw) 11023859Sml29623 { 11033859Sml29623 p_nxge_t nxgep; 11043859Sml29623 p_nxge_mmac_kstat_t mmac_kstatsp; 11053859Sml29623 p_nxge_mmac_stats_t statsp; 11063859Sml29623 11073859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 11083859Sml29623 if (nxgep == NULL) 11093859Sml29623 return (-1); 11103859Sml29623 11113859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_mmac_stat_update")); 11123859Sml29623 11133859Sml29623 mmac_kstatsp = (p_nxge_mmac_kstat_t)ksp->ks_data; 11143859Sml29623 statsp = (p_nxge_mmac_stats_t)&nxgep->statsp->mmac_stats; 11153859Sml29623 11163859Sml29623 if (rw == KSTAT_WRITE) { 11173859Sml29623 cmn_err(CE_WARN, "Can not write mmac stats"); 11183859Sml29623 } else { 11193859Sml29623 mmac_kstatsp->mmac_max_addr_cnt.value.ul = 11206946Smisaki statsp->mmac_max_cnt; 11213859Sml29623 mmac_kstatsp->mmac_avail_addr_cnt.value.ul = 11226946Smisaki statsp->mmac_avail_cnt; 11233859Sml29623 mmac_kstatsp->mmac_addr1.value.ul = 11246946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[0]); 11253859Sml29623 mmac_kstatsp->mmac_addr2.value.ul = 11266946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[1]); 11273859Sml29623 mmac_kstatsp->mmac_addr3.value.ul = 11286946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[2]); 11293859Sml29623 mmac_kstatsp->mmac_addr4.value.ul = 11306946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[3]); 11313859Sml29623 mmac_kstatsp->mmac_addr5.value.ul = 11326946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[4]); 11333859Sml29623 mmac_kstatsp->mmac_addr6.value.ul = 11346946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[5]); 11353859Sml29623 mmac_kstatsp->mmac_addr7.value.ul = 11366946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[6]); 11373859Sml29623 mmac_kstatsp->mmac_addr8.value.ul = 11386946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[7]); 11393859Sml29623 mmac_kstatsp->mmac_addr9.value.ul = 11406946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[8]); 11413859Sml29623 mmac_kstatsp->mmac_addr10.value.ul = 11426946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[9]); 11433859Sml29623 mmac_kstatsp->mmac_addr11.value.ul = 11446946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[10]); 11453859Sml29623 mmac_kstatsp->mmac_addr12.value.ul = 11466946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[11]); 11473859Sml29623 mmac_kstatsp->mmac_addr13.value.ul = 11486946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[12]); 11493859Sml29623 mmac_kstatsp->mmac_addr14.value.ul = 11506946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[13]); 11513859Sml29623 mmac_kstatsp->mmac_addr15.value.ul = 11526946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[14]); 11533859Sml29623 mmac_kstatsp->mmac_addr16.value.ul = 11546946Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[15]); 11553859Sml29623 } 11563859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_mmac_stat_update")); 11573859Sml29623 return (0); 11583859Sml29623 } 11593859Sml29623 11603859Sml29623 /* ARGSUSED */ 11613859Sml29623 static kstat_t * 11623859Sml29623 nxge_setup_local_kstat(p_nxge_t nxgep, int instance, char *name, 11633859Sml29623 const nxge_kstat_index_t *ksip, size_t count, 11643859Sml29623 int (*update) (kstat_t *, int)) 11653859Sml29623 { 11663859Sml29623 kstat_t *ksp; 11673859Sml29623 kstat_named_t *knp; 11683859Sml29623 int i; 11693859Sml29623 11703859Sml29623 ksp = kstat_create(NXGE_DRIVER_NAME, instance, name, "net", 11716946Smisaki KSTAT_TYPE_NAMED, count, 0); 11723859Sml29623 if (ksp == NULL) 11733859Sml29623 return (NULL); 11743859Sml29623 11753859Sml29623 ksp->ks_private = (void *)nxgep; 11763859Sml29623 ksp->ks_update = update; 11773859Sml29623 knp = ksp->ks_data; 11783859Sml29623 11793859Sml29623 for (i = 0; ksip[i].name != NULL; i++) { 11803859Sml29623 kstat_named_init(&knp[i], ksip[i].name, ksip[i].type); 11813859Sml29623 } 11823859Sml29623 11833859Sml29623 kstat_install(ksp); 11843859Sml29623 return (ksp); 11853859Sml29623 } 11863859Sml29623 11873859Sml29623 /* ARGSUSED */ 11883859Sml29623 void 11896495Sspeer nxge_setup_rdc_kstats(p_nxge_t nxgep, int channel) 11906495Sspeer { 11916495Sspeer char stat_name[64]; 11926495Sspeer 11936495Sspeer /* Setup RDC statistics */ 11946495Sspeer (void) sprintf(stat_name, "%s" CH_NAME_FORMAT, 11956495Sspeer RDC_NAME_FORMAT1, channel); 11966495Sspeer nxgep->statsp->rdc_ksp[channel] = nxge_setup_local_kstat(nxgep, 11976495Sspeer nxgep->instance, 11986495Sspeer stat_name, 11996495Sspeer nxge_rdc_stats, 12006495Sspeer RDC_STAT_END, 12016495Sspeer nxge_rdc_stat_update); 12026495Sspeer #ifdef NXGE_DEBUG_ERROR 12036495Sspeer if (nxgep->statsp->rdc_ksp[channel] == NULL) 12046495Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, 12056946Smisaki "kstat_create failed for rdc channel %d", channel)); 12066495Sspeer #endif 12076495Sspeer } 12086495Sspeer 12096495Sspeer void 12106495Sspeer nxge_setup_tdc_kstats(p_nxge_t nxgep, int channel) 12116495Sspeer { 12126495Sspeer char stat_name[64]; 12136495Sspeer 12146495Sspeer /* Setup TDC statistics */ 12156495Sspeer (void) sprintf(stat_name, "%s" CH_NAME_FORMAT, 12166495Sspeer TDC_NAME_FORMAT1, channel); 12176495Sspeer nxgep->statsp->tdc_ksp[channel] = nxge_setup_local_kstat(nxgep, 12186495Sspeer nxgep->instance, 12196495Sspeer stat_name, 12206495Sspeer nxge_tdc_stats, 12216495Sspeer TDC_STAT_END, 12226495Sspeer nxge_tdc_stat_update); 12236495Sspeer #ifdef NXGE_DEBUG_ERROR 12246495Sspeer if (nxgep->statsp->tdc_ksp[channel] == NULL) { 12256495Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, 12266946Smisaki "kstat_create failed for tdc channel %d", channel)); 12276495Sspeer } 12286495Sspeer #endif 12296495Sspeer } 12306495Sspeer 12316495Sspeer void 12323859Sml29623 nxge_setup_kstats(p_nxge_t nxgep) 12333859Sml29623 { 12343859Sml29623 struct kstat *ksp; 12353859Sml29623 p_nxge_port_kstat_t nxgekp; 12363859Sml29623 size_t nxge_kstat_sz; 12373859Sml29623 char mmac_name[64]; 12383859Sml29623 12393859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_setup_kstats")); 12403859Sml29623 12413859Sml29623 /* Setup RDC System statistics */ 12423859Sml29623 nxgep->statsp->rdc_sys_ksp = nxge_setup_local_kstat(nxgep, 12436946Smisaki nxgep->instance, 12446946Smisaki "RDC System Stats", 12456946Smisaki &nxge_rdc_sys_stats[0], 12466946Smisaki RDC_SYS_STAT_END, 12476946Smisaki nxge_rdc_sys_stat_update); 12483859Sml29623 12493859Sml29623 /* Setup IPP statistics */ 12503859Sml29623 nxgep->statsp->ipp_ksp = nxge_setup_local_kstat(nxgep, 12516946Smisaki nxgep->instance, 12526946Smisaki "IPP Stats", 12536946Smisaki &nxge_ipp_stats[0], 12546946Smisaki IPP_STAT_END, 12556946Smisaki nxge_ipp_stat_update); 12563859Sml29623 #ifdef NXGE_DEBUG_ERROR 12573859Sml29623 if (nxgep->istatsp->pp_ksp == NULL) 12583859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for ipp")); 12593859Sml29623 #endif 12603859Sml29623 12613859Sml29623 /* Setup TXC statistics */ 12623859Sml29623 nxgep->statsp->txc_ksp = nxge_setup_local_kstat(nxgep, 12636946Smisaki nxgep->instance, "TXC Stats", &nxge_txc_stats[0], 12646946Smisaki TXC_STAT_END, nxge_txc_stat_update); 12653859Sml29623 #ifdef NXGE_DEBUG_ERROR 12663859Sml29623 if (nxgep->statsp->txc_ksp == NULL) 12673859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for txc")); 12683859Sml29623 #endif 12693859Sml29623 12703859Sml29623 /* Setup ZCP statistics */ 12713859Sml29623 nxgep->statsp->zcp_ksp = nxge_setup_local_kstat(nxgep, 12726946Smisaki nxgep->instance, "ZCP Stats", &nxge_zcp_stats[0], 12736946Smisaki ZCP_STAT_END, nxge_zcp_stat_update); 12743859Sml29623 #ifdef NXGE_DEBUG_ERROR 12753859Sml29623 if (nxgep->statsp->zcp_ksp == NULL) 12763859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for zcp")); 12773859Sml29623 #endif 12783859Sml29623 12793859Sml29623 /* Setup FFLP statistics */ 12803859Sml29623 nxgep->statsp->fflp_ksp[0] = nxge_setup_local_kstat(nxgep, 12816946Smisaki nxgep->instance, "FFLP Stats", &nxge_fflp_stats[0], 12826946Smisaki FFLP_STAT_END, nxge_fflp_stat_update); 12833859Sml29623 12843859Sml29623 #ifdef NXGE_DEBUG_ERROR 12853859Sml29623 if (nxgep->statsp->fflp_ksp == NULL) 12863859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, 12876946Smisaki "kstat_create failed for fflp")); 12883859Sml29623 #endif 12893859Sml29623 12903859Sml29623 (void) sprintf(mmac_name, "MMAC Stats%d", nxgep->instance); 12913859Sml29623 nxgep->statsp->mmac_ksp = nxge_setup_local_kstat(nxgep, 12926946Smisaki nxgep->instance, "MMAC Stats", &nxge_mmac_stats[0], 12936946Smisaki MMAC_STATS_END, nxge_mmac_stat_update); 12943859Sml29623 12953859Sml29623 nxge_kstat_sz = sizeof (nxge_port_kstat_t) + 12966946Smisaki sizeof (nxge_mac_kstat_t) - sizeof (kstat_named_t); 12973859Sml29623 12983859Sml29623 if ((ksp = kstat_create(NXGE_DRIVER_NAME, nxgep->instance, 12996946Smisaki "Port Stats", "net", KSTAT_TYPE_NAMED, 13006946Smisaki nxge_kstat_sz / sizeof (kstat_named_t), 0)) == NULL) { 13013859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed")); 13023859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_setup_kstats")); 13033859Sml29623 return; 13043859Sml29623 } 13053859Sml29623 13063859Sml29623 /* 13073859Sml29623 * kstats 13083859Sml29623 */ 13093859Sml29623 nxgekp = (p_nxge_port_kstat_t)ksp->ks_data; 13103859Sml29623 13113859Sml29623 /* 13123859Sml29623 * transceiver state informations. 13133859Sml29623 */ 13143859Sml29623 kstat_named_init(&nxgekp->xcvr_inits, "xcvr_inits", 13156946Smisaki KSTAT_DATA_ULONG); 13163859Sml29623 kstat_named_init(&nxgekp->xcvr_inuse, "xcvr_inuse", 13176946Smisaki KSTAT_DATA_ULONG); 13183859Sml29623 kstat_named_init(&nxgekp->xcvr_addr, "xcvr_addr", 13196946Smisaki KSTAT_DATA_ULONG); 13203859Sml29623 kstat_named_init(&nxgekp->xcvr_id, "xcvr_id", 13216946Smisaki KSTAT_DATA_ULONG); 13223859Sml29623 kstat_named_init(&nxgekp->cap_autoneg, "cap_autoneg", 13236946Smisaki KSTAT_DATA_ULONG); 13243859Sml29623 kstat_named_init(&nxgekp->cap_10gfdx, "cap_10gfdx", 13256946Smisaki KSTAT_DATA_ULONG); 13263859Sml29623 kstat_named_init(&nxgekp->cap_10ghdx, "cap_10ghdx", 13276946Smisaki KSTAT_DATA_ULONG); 13283859Sml29623 kstat_named_init(&nxgekp->cap_1000fdx, "cap_1000fdx", 13296946Smisaki KSTAT_DATA_ULONG); 13303859Sml29623 kstat_named_init(&nxgekp->cap_1000hdx, "cap_1000hdx", 13316946Smisaki KSTAT_DATA_ULONG); 13323859Sml29623 kstat_named_init(&nxgekp->cap_100T4, "cap_100T4", 13336946Smisaki KSTAT_DATA_ULONG); 13343859Sml29623 kstat_named_init(&nxgekp->cap_100fdx, "cap_100fdx", 13356946Smisaki KSTAT_DATA_ULONG); 13363859Sml29623 kstat_named_init(&nxgekp->cap_100hdx, "cap_100hdx", 13376946Smisaki KSTAT_DATA_ULONG); 13383859Sml29623 kstat_named_init(&nxgekp->cap_10fdx, "cap_10fdx", 13396946Smisaki KSTAT_DATA_ULONG); 13403859Sml29623 kstat_named_init(&nxgekp->cap_10hdx, "cap_10hdx", 13416946Smisaki KSTAT_DATA_ULONG); 13423859Sml29623 kstat_named_init(&nxgekp->cap_asmpause, "cap_asmpause", 13436946Smisaki KSTAT_DATA_ULONG); 13443859Sml29623 kstat_named_init(&nxgekp->cap_pause, "cap_pause", 13456946Smisaki KSTAT_DATA_ULONG); 13463859Sml29623 13473859Sml29623 /* 13483859Sml29623 * Link partner capabilities. 13493859Sml29623 */ 13503859Sml29623 kstat_named_init(&nxgekp->lp_cap_autoneg, "lp_cap_autoneg", 13516946Smisaki KSTAT_DATA_ULONG); 13523859Sml29623 kstat_named_init(&nxgekp->lp_cap_10gfdx, "lp_cap_10gfdx", 13536946Smisaki KSTAT_DATA_ULONG); 13543859Sml29623 kstat_named_init(&nxgekp->lp_cap_10ghdx, "lp_cap_10ghdx", 13556946Smisaki KSTAT_DATA_ULONG); 13563859Sml29623 kstat_named_init(&nxgekp->lp_cap_1000fdx, "lp_cap_1000fdx", 13576946Smisaki KSTAT_DATA_ULONG); 13583859Sml29623 kstat_named_init(&nxgekp->lp_cap_1000hdx, "lp_cap_1000hdx", 13596946Smisaki KSTAT_DATA_ULONG); 13603859Sml29623 kstat_named_init(&nxgekp->lp_cap_100T4, "lp_cap_100T4", 13616946Smisaki KSTAT_DATA_ULONG); 13623859Sml29623 kstat_named_init(&nxgekp->lp_cap_100fdx, "lp_cap_100fdx", 13636946Smisaki KSTAT_DATA_ULONG); 13643859Sml29623 kstat_named_init(&nxgekp->lp_cap_100hdx, "lp_cap_100hdx", 13656946Smisaki KSTAT_DATA_ULONG); 13663859Sml29623 kstat_named_init(&nxgekp->lp_cap_10fdx, "lp_cap_10fdx", 13676946Smisaki KSTAT_DATA_ULONG); 13683859Sml29623 kstat_named_init(&nxgekp->lp_cap_10hdx, "lp_cap_10hdx", 13696946Smisaki KSTAT_DATA_ULONG); 13703859Sml29623 kstat_named_init(&nxgekp->lp_cap_asmpause, "lp_cap_asmpause", 13716946Smisaki KSTAT_DATA_ULONG); 13723859Sml29623 kstat_named_init(&nxgekp->lp_cap_pause, "lp_cap_pause", 13736946Smisaki KSTAT_DATA_ULONG); 13743859Sml29623 /* 13753859Sml29623 * Shared link setup. 13763859Sml29623 */ 13773859Sml29623 kstat_named_init(&nxgekp->link_T4, "link_T4", 13786946Smisaki KSTAT_DATA_ULONG); 13793859Sml29623 kstat_named_init(&nxgekp->link_speed, "link_speed", 13806946Smisaki KSTAT_DATA_ULONG); 13813859Sml29623 kstat_named_init(&nxgekp->link_duplex, "link_duplex", 13826946Smisaki KSTAT_DATA_CHAR); 13833859Sml29623 kstat_named_init(&nxgekp->link_asmpause, "link_asmpause", 13846946Smisaki KSTAT_DATA_ULONG); 13853859Sml29623 kstat_named_init(&nxgekp->link_pause, "link_pause", 13866946Smisaki KSTAT_DATA_ULONG); 13873859Sml29623 kstat_named_init(&nxgekp->link_up, "link_up", 13886946Smisaki KSTAT_DATA_ULONG); 13893859Sml29623 13903859Sml29623 /* 13913859Sml29623 * Let the user know the MTU currently in use by the physical MAC 13923859Sml29623 * port. 13933859Sml29623 */ 13943859Sml29623 kstat_named_init(&nxgekp->mac_mtu, "mac_mtu", 13956946Smisaki KSTAT_DATA_ULONG); 13963859Sml29623 13973859Sml29623 /* 13983859Sml29623 * Loopback statistics. 13993859Sml29623 */ 14003859Sml29623 kstat_named_init(&nxgekp->lb_mode, "lb_mode", 14016946Smisaki KSTAT_DATA_ULONG); 14023859Sml29623 14033859Sml29623 /* 14043859Sml29623 * This tells the user whether the driver is in QOS mode or not. 14053859Sml29623 */ 14063859Sml29623 kstat_named_init(&nxgekp->qos_mode, "qos_mode", 14076946Smisaki KSTAT_DATA_ULONG); 14083859Sml29623 14093859Sml29623 /* 14103859Sml29623 * This tells whether the instance is trunked or not 14113859Sml29623 */ 14123859Sml29623 kstat_named_init(&nxgekp->trunk_mode, "trunk_mode", 14136946Smisaki KSTAT_DATA_ULONG); 14143859Sml29623 14153859Sml29623 #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 14163859Sml29623 kstat_named_init(&nxgekp->mdt_reqs, "mdt_reqs", 14176946Smisaki KSTAT_DATA_ULONG); 14183859Sml29623 kstat_named_init(&nxgekp->mdt_hdr_bufs, "mdt_hdr_bufs", 14196946Smisaki KSTAT_DATA_ULONG); 14203859Sml29623 kstat_named_init(&nxgekp->mdt_pld_bufs, "mdt_pld_bufs", 14216946Smisaki KSTAT_DATA_ULONG); 14223859Sml29623 kstat_named_init(&nxgekp->mdt_pkts, "mdt_pkts", 14236946Smisaki KSTAT_DATA_ULONG); 14243859Sml29623 kstat_named_init(&nxgekp->mdt_hdrs, "mdt_hdrs", 14256946Smisaki KSTAT_DATA_ULONG); 14263859Sml29623 kstat_named_init(&nxgekp->mdt_plds, "mdt_plds", 14276946Smisaki KSTAT_DATA_ULONG); 14283859Sml29623 kstat_named_init(&nxgekp->mdt_hdr_bind_fail, "mdt_hdr_bind_fail", 14296946Smisaki KSTAT_DATA_ULONG); 14303859Sml29623 kstat_named_init(&nxgekp->mdt_pld_bind_fail, "mdt_pld_bind_fail", 14316946Smisaki KSTAT_DATA_ULONG); 14323859Sml29623 #endif 14336075Ssbehera #ifdef ACCEPT_JUMBO 14343859Sml29623 kstat_named_init(&nxgekp->tx_jumbo_pkts, "tx_jumbo_pkts", 14356946Smisaki KSTAT_DATA_ULONG); 14363859Sml29623 #endif 14373859Sml29623 14383859Sml29623 /* 14393859Sml29623 * Rx Statistics. 14403859Sml29623 */ 14416075Ssbehera #ifdef ACCEPT_JUMBO 14423859Sml29623 kstat_named_init(&nxgekp->rx_jumbo_pkts, "rx_jumbo_pkts", 14436946Smisaki KSTAT_DATA_ULONG); 14443859Sml29623 #endif 14453859Sml29623 /* General MAC statistics */ 14463859Sml29623 kstat_named_init(&nxgekp->ifspeed, "ifspeed", 14476946Smisaki KSTAT_DATA_UINT64); 14483859Sml29623 kstat_named_init(&nxgekp->promisc, "promisc", 14496946Smisaki KSTAT_DATA_CHAR); 14503859Sml29623 kstat_named_init(&nxgekp->rev_id, "rev_id", 14516946Smisaki KSTAT_DATA_ULONG); 14523859Sml29623 14533859Sml29623 ksp->ks_update = nxge_port_kstat_update; 14543859Sml29623 ksp->ks_private = (void *) nxgep; 14553859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) 14563859Sml29623 nxge_xmac_init_kstats(ksp); 14573859Sml29623 else 14583859Sml29623 nxge_bmac_init_kstats(ksp); 14593859Sml29623 kstat_install(ksp); 14603859Sml29623 nxgep->statsp->port_ksp = ksp; 14613859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_setup_kstats")); 14623859Sml29623 } 14633859Sml29623 14643859Sml29623 /* ARGSUSED */ 14653859Sml29623 void 14663859Sml29623 nxge_xmac_init_kstats(struct kstat *ksp) 14673859Sml29623 { 14683859Sml29623 p_nxge_xmac_kstat_t nxgekp; 14693859Sml29623 14703859Sml29623 nxgekp = (p_nxge_xmac_kstat_t)ksp->ks_data; 14713859Sml29623 14723859Sml29623 /* 14733859Sml29623 * Transmit MAC statistics. 14743859Sml29623 */ 14753859Sml29623 kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 14766946Smisaki KSTAT_DATA_ULONG); 14773859Sml29623 kstat_named_init(&nxgekp->tx_underflow_err, "txmac_underflow_err", 14786946Smisaki KSTAT_DATA_ULONG); 14793859Sml29623 kstat_named_init(&nxgekp->tx_overflow_err, "txmac_overflow_err", 14806946Smisaki KSTAT_DATA_ULONG); 14813859Sml29623 kstat_named_init(&nxgekp->tx_maxpktsize_err, "txmac_maxpktsize_err", 14826946Smisaki KSTAT_DATA_ULONG); 14833859Sml29623 kstat_named_init(&nxgekp->tx_fifo_xfr_err, "txmac_fifo_xfr_err", 14846946Smisaki KSTAT_DATA_ULONG); 14853859Sml29623 kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 14866946Smisaki KSTAT_DATA_ULONG); 14873859Sml29623 14883859Sml29623 /* Receive MAC statistics */ 14896075Ssbehera kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 14906075Ssbehera KSTAT_DATA_ULONG); 14913859Sml29623 kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 14926946Smisaki KSTAT_DATA_ULONG); 14933859Sml29623 kstat_named_init(&nxgekp->rx_underflow_err, "rxmac_underflow_err", 14946946Smisaki KSTAT_DATA_ULONG); 14953859Sml29623 kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 14966946Smisaki KSTAT_DATA_ULONG); 14973859Sml29623 kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 14986946Smisaki KSTAT_DATA_ULONG); 14993859Sml29623 kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 15006946Smisaki KSTAT_DATA_ULONG); 15013859Sml29623 kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 15026946Smisaki KSTAT_DATA_ULONG); 15033859Sml29623 kstat_named_init(&nxgekp->rx_frame_align_err_cnt, 15046946Smisaki "rxmac_alignment_err", 15056946Smisaki KSTAT_DATA_ULONG); 15063859Sml29623 kstat_named_init(&nxgekp->rx_hist1_cnt, "rxmac_64_cnt", 15076946Smisaki KSTAT_DATA_ULONG); 15083859Sml29623 kstat_named_init(&nxgekp->rx_hist2_cnt, "rxmac_65_127_cnt", 15096946Smisaki KSTAT_DATA_ULONG); 15103859Sml29623 kstat_named_init(&nxgekp->rx_hist3_cnt, "rxmac_128_255_cnt", 15116946Smisaki KSTAT_DATA_ULONG); 15123859Sml29623 kstat_named_init(&nxgekp->rx_hist4_cnt, "rxmac_256_511_cnt", 15136946Smisaki KSTAT_DATA_ULONG); 15143859Sml29623 kstat_named_init(&nxgekp->rx_hist5_cnt, "rxmac_512_1023_cnt", 15156946Smisaki KSTAT_DATA_ULONG); 15163859Sml29623 kstat_named_init(&nxgekp->rx_hist6_cnt, "rxmac_1024_1522_cnt", 15176946Smisaki KSTAT_DATA_ULONG); 15186075Ssbehera kstat_named_init(&nxgekp->rx_hist7_cnt, "rxmac_jumbo_cnt", 15196075Ssbehera KSTAT_DATA_ULONG); 15203859Sml29623 kstat_named_init(&nxgekp->rx_broadcast_cnt, "rxmac_broadcast_cnt", 15216946Smisaki KSTAT_DATA_ULONG); 15223859Sml29623 kstat_named_init(&nxgekp->rx_mult_cnt, "rxmac_multicast_cnt", 15236946Smisaki KSTAT_DATA_ULONG); 15243859Sml29623 kstat_named_init(&nxgekp->rx_frag_cnt, "rxmac_fragment_cnt", 15256946Smisaki KSTAT_DATA_ULONG); 15263859Sml29623 kstat_named_init(&nxgekp->rx_linkfault_err_cnt, "rxmac_linkfault_errs", 15276946Smisaki KSTAT_DATA_ULONG); 15283859Sml29623 kstat_named_init(&nxgekp->rx_remote_fault_err_cnt, 15296946Smisaki "rxmac_remote_faults", 15306946Smisaki KSTAT_DATA_ULONG); 15313859Sml29623 kstat_named_init(&nxgekp->rx_local_fault_err_cnt, "rxmac_local_faults", 15326946Smisaki KSTAT_DATA_ULONG); 15333859Sml29623 15343859Sml29623 /* XPCS statistics */ 15353859Sml29623 15363859Sml29623 kstat_named_init(&nxgekp->xpcs_deskew_err_cnt, "xpcs_deskew_err_cnt", 15376946Smisaki KSTAT_DATA_ULONG); 15383859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 15393859Sml29623 kstat_named_init(&nxgekp->xpcs_ln0_symbol_err_cnt, 15406946Smisaki "xpcs_ln0_symbol_err_cnt", 15416946Smisaki KSTAT_DATA_ULONG); 15423859Sml29623 kstat_named_init(&nxgekp->xpcs_ln1_symbol_err_cnt, 15436946Smisaki "xpcs_ln1_symbol_err_cnt", 15446946Smisaki KSTAT_DATA_ULONG); 15453859Sml29623 kstat_named_init(&nxgekp->xpcs_ln2_symbol_err_cnt, 15466946Smisaki "xpcs_ln2_symbol_err_cnt", 15476946Smisaki KSTAT_DATA_ULONG); 15483859Sml29623 kstat_named_init(&nxgekp->xpcs_ln3_symbol_err_cnt, 15496946Smisaki "xpcs_ln3_symbol_err_cnt", 15506946Smisaki KSTAT_DATA_ULONG); 15513859Sml29623 #endif 15523859Sml29623 } 15533859Sml29623 15543859Sml29623 /* ARGSUSED */ 15553859Sml29623 void 15563859Sml29623 nxge_bmac_init_kstats(struct kstat *ksp) 15573859Sml29623 { 15583859Sml29623 p_nxge_bmac_kstat_t nxgekp; 15593859Sml29623 15603859Sml29623 nxgekp = (p_nxge_bmac_kstat_t)ksp->ks_data; 15613859Sml29623 15623859Sml29623 /* 15633859Sml29623 * Transmit MAC statistics. 15643859Sml29623 */ 15653859Sml29623 kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 15666946Smisaki KSTAT_DATA_ULONG); 15673859Sml29623 kstat_named_init(&nxgekp->tx_underrun_err, "txmac_underflow_err", 15686946Smisaki KSTAT_DATA_ULONG); 15693859Sml29623 kstat_named_init(&nxgekp->tx_max_pkt_err, "txmac_maxpktsize_err", 15706946Smisaki KSTAT_DATA_ULONG); 15713859Sml29623 kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 15726946Smisaki KSTAT_DATA_ULONG); 15733859Sml29623 15743859Sml29623 /* Receive MAC statistics */ 15753859Sml29623 kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 15766946Smisaki KSTAT_DATA_ULONG); 15773859Sml29623 kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 15786946Smisaki KSTAT_DATA_ULONG); 15793859Sml29623 kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 15806946Smisaki KSTAT_DATA_ULONG); 15813859Sml29623 kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 15826946Smisaki KSTAT_DATA_ULONG); 15833859Sml29623 kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 15846946Smisaki KSTAT_DATA_ULONG); 15853859Sml29623 kstat_named_init(&nxgekp->rx_align_err_cnt, "rxmac_alignment_err", 15866946Smisaki KSTAT_DATA_ULONG); 15873859Sml29623 kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 15886946Smisaki KSTAT_DATA_ULONG); 15893859Sml29623 } 15903859Sml29623 15913859Sml29623 /* ARGSUSED */ 15923859Sml29623 void 15933859Sml29623 nxge_mac_init_kstats(p_nxge_t nxgep, struct kstat *ksp) 15943859Sml29623 { 15953859Sml29623 p_nxge_mac_kstat_t nxgekp; 15963859Sml29623 15973859Sml29623 nxgekp = (p_nxge_mac_kstat_t)ksp->ks_data; 15983859Sml29623 15993859Sml29623 /* 16003859Sml29623 * Transmit MAC statistics. 16013859Sml29623 */ 16023859Sml29623 kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 16036946Smisaki KSTAT_DATA_ULONG); 16043859Sml29623 kstat_named_init(&nxgekp->tx_underflow_err, "txmac_underflow_err", 16056946Smisaki KSTAT_DATA_ULONG); 16063859Sml29623 kstat_named_init(&nxgekp->tx_overflow_err, "txmac_overflow_err", 16076946Smisaki KSTAT_DATA_ULONG); 16083859Sml29623 kstat_named_init(&nxgekp->tx_maxpktsize_err, "txmac_maxpktsize_err", 16096946Smisaki KSTAT_DATA_ULONG); 16103859Sml29623 kstat_named_init(&nxgekp->tx_fifo_xfr_err, "txmac_fifo_xfr_err", 16116946Smisaki KSTAT_DATA_ULONG); 16123859Sml29623 kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 16136946Smisaki KSTAT_DATA_ULONG); 16143859Sml29623 16153859Sml29623 /* 16163859Sml29623 * Receive MAC statistics 16173859Sml29623 */ 16183859Sml29623 kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 16196946Smisaki KSTAT_DATA_ULONG); 16203859Sml29623 kstat_named_init(&nxgekp->rx_underflow_err, "rxmac_underflow_err", 16216946Smisaki KSTAT_DATA_ULONG); 16223859Sml29623 kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 16236946Smisaki KSTAT_DATA_ULONG); 16243859Sml29623 kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 16256946Smisaki KSTAT_DATA_ULONG); 16263859Sml29623 kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 16276946Smisaki KSTAT_DATA_ULONG); 16283859Sml29623 kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 16296946Smisaki KSTAT_DATA_ULONG); 16303859Sml29623 kstat_named_init(&nxgekp->rx_frame_align_err_cnt, 16316946Smisaki "rxmac_alignment_err", 16326946Smisaki KSTAT_DATA_ULONG); 16336075Ssbehera kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 16346075Ssbehera KSTAT_DATA_ULONG); 16353859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 16363859Sml29623 kstat_named_init(&nxgekp->rx_hist1_cnt, "rxmac_64_cnt", 16376946Smisaki KSTAT_DATA_ULONG); 16383859Sml29623 kstat_named_init(&nxgekp->rx_hist2_cnt, "rxmac_65_127_cnt", 16396946Smisaki KSTAT_DATA_ULONG); 16403859Sml29623 kstat_named_init(&nxgekp->rx_hist3_cnt, "rxmac_128_255_cnt", 16416946Smisaki KSTAT_DATA_ULONG); 16423859Sml29623 kstat_named_init(&nxgekp->rx_hist4_cnt, "rxmac_256_511_cnt", 16436946Smisaki KSTAT_DATA_ULONG); 16443859Sml29623 kstat_named_init(&nxgekp->rx_hist5_cnt, "rxmac_512_1023_cnt", 16456946Smisaki KSTAT_DATA_ULONG); 16463859Sml29623 kstat_named_init(&nxgekp->rx_hist6_cnt, "rxmac_1024_1522_cnt", 16476946Smisaki KSTAT_DATA_ULONG); 16486075Ssbehera kstat_named_init(&nxgekp->rx_hist7_cnt, "rxmac_jumbo_cnt", 16496075Ssbehera KSTAT_DATA_ULONG); 16503859Sml29623 kstat_named_init(&nxgekp->rx_broadcast_cnt, 16516946Smisaki "rxmac_broadcast_cnt", 16526946Smisaki KSTAT_DATA_ULONG); 16533859Sml29623 kstat_named_init(&nxgekp->rx_mult_cnt, "rxmac_multicast_cnt", 16546946Smisaki KSTAT_DATA_ULONG); 16553859Sml29623 kstat_named_init(&nxgekp->rx_frag_cnt, "rxmac_fragment_cnt", 16566946Smisaki KSTAT_DATA_ULONG); 16573859Sml29623 kstat_named_init(&nxgekp->rx_linkfault_err_cnt, 16586946Smisaki "rxmac_linkfault_errs", 16596946Smisaki KSTAT_DATA_ULONG); 16603859Sml29623 kstat_named_init(&nxgekp->rx_remote_fault_err_cnt, 16616946Smisaki "rxmac_remote_faults", 16626946Smisaki KSTAT_DATA_ULONG); 16633859Sml29623 kstat_named_init(&nxgekp->rx_local_fault_err_cnt, 16646946Smisaki "rxmac_local_faults", 16656946Smisaki KSTAT_DATA_ULONG); 16663859Sml29623 } 16673859Sml29623 } 16683859Sml29623 16693859Sml29623 /* ARGSUSED */ 16703859Sml29623 void 16713859Sml29623 nxge_destroy_kstats(p_nxge_t nxgep) 16723859Sml29623 { 16733859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_destroy_kstats")); 16743859Sml29623 16753859Sml29623 if (nxgep->statsp == NULL) 16763859Sml29623 return; 16773859Sml29623 if (nxgep->statsp->ksp) 16783859Sml29623 kstat_delete(nxgep->statsp->ksp); 16793859Sml29623 16803859Sml29623 if (nxgep->statsp->rdc_sys_ksp) 16813859Sml29623 kstat_delete(nxgep->statsp->rdc_sys_ksp); 16823859Sml29623 if (nxgep->statsp->fflp_ksp[0]) 16833859Sml29623 kstat_delete(nxgep->statsp->fflp_ksp[0]); 16843859Sml29623 if (nxgep->statsp->ipp_ksp) 16853859Sml29623 kstat_delete(nxgep->statsp->ipp_ksp); 16863859Sml29623 if (nxgep->statsp->txc_ksp) 16873859Sml29623 kstat_delete(nxgep->statsp->txc_ksp); 16883859Sml29623 if (nxgep->statsp->mac_ksp) 16893859Sml29623 kstat_delete(nxgep->statsp->mac_ksp); 16903859Sml29623 if (nxgep->statsp->zcp_ksp) 16913859Sml29623 kstat_delete(nxgep->statsp->zcp_ksp); 16923859Sml29623 if (nxgep->statsp->port_ksp) 16933859Sml29623 kstat_delete(nxgep->statsp->port_ksp); 16943859Sml29623 if (nxgep->statsp->mmac_ksp) 16953859Sml29623 kstat_delete(nxgep->statsp->mmac_ksp); 16963859Sml29623 if (nxgep->statsp) 16973859Sml29623 KMEM_FREE(nxgep->statsp, nxgep->statsp->stats_size); 16983859Sml29623 16993859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_destroy_kstats")); 17003859Sml29623 } 17013859Sml29623 17023859Sml29623 /* ARGSUSED */ 17033859Sml29623 int 17043859Sml29623 nxge_port_kstat_update(kstat_t *ksp, int rw) 17053859Sml29623 { 17063859Sml29623 p_nxge_t nxgep; 17073859Sml29623 p_nxge_stats_t statsp; 17083859Sml29623 p_nxge_port_kstat_t nxgekp; 17093859Sml29623 17103859Sml29623 nxgep = (p_nxge_t)ksp->ks_private; 17113859Sml29623 if (nxgep == NULL) 17123859Sml29623 return (-1); 17133859Sml29623 17143859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_port_kstat_update")); 17153859Sml29623 statsp = (p_nxge_stats_t)nxgep->statsp; 17163859Sml29623 nxgekp = (p_nxge_port_kstat_t)ksp->ks_data; 17173859Sml29623 nxge_save_cntrs(nxgep); 17183859Sml29623 17193859Sml29623 if (rw == KSTAT_WRITE) { 17203859Sml29623 /* 17213859Sml29623 * transceiver state informations. 17223859Sml29623 */ 17233859Sml29623 statsp->mac_stats.xcvr_inits = nxgekp->xcvr_inits.value.ul; 17243859Sml29623 17253859Sml29623 /* 17263859Sml29623 * Tx Statistics. 17273859Sml29623 */ 17283859Sml29623 #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 17293859Sml29623 statsp->port_stats.mdt_reqs = nxgekp->mdt_reqs.value.ul; 17303859Sml29623 statsp->port_stats.mdt_hdr_bufs = nxgekp->mdt_hdr_bufs.value.ul; 17313859Sml29623 statsp->port_stats.mdt_pld_bufs = nxgekp->mdt_pld_bufs.value.ul; 17323859Sml29623 statsp->port_stats.mdt_pkts = nxgekp->mdt_pkts.value.ul; 17333859Sml29623 statsp->port_stats.mdt_hdrs = nxgekp->mdt_hdrs.value.ul; 17343859Sml29623 statsp->port_stats.mdt_plds = nxgekp->mdt_plds.value.ul; 17353859Sml29623 statsp->port_stats.mdt_hdr_bind_fail = 17366946Smisaki nxgekp->mdt_hdr_bind_fail.value.ul; 17373859Sml29623 statsp->port_stats.mdt_pld_bind_fail = 17386946Smisaki nxgekp->mdt_pld_bind_fail.value.ul; 17393859Sml29623 #endif 17403859Sml29623 #ifdef ACCEPT_JUMBO 17413859Sml29623 statsp->port_stats.tx_jumbo_pkts = 17426946Smisaki nxgekp->tx_jumbo_pkts.value.ul; 17433859Sml29623 #endif 17443859Sml29623 /* 17453859Sml29623 * Rx Statistics. 17463859Sml29623 */ 17476075Ssbehera #ifdef ACCEPT_JUMBO 17483859Sml29623 statsp->port_stats.rx_jumbo_pkts = 17496946Smisaki nxgekp->rx_jumbo_pkts.value.ul; 17503859Sml29623 #endif 17516075Ssbehera if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 17526075Ssbehera (void) nxge_xmac_stat_update(ksp, KSTAT_WRITE); 17536075Ssbehera } else { 17546075Ssbehera (void) nxge_bmac_stat_update(ksp, KSTAT_WRITE); 17556075Ssbehera } 17563859Sml29623 return (0); 17573859Sml29623 } else { 17583859Sml29623 if (nxgep->filter.all_phys_cnt) 17593859Sml29623 (void) strcpy(nxgekp->promisc.value.c, "phys"); 17603859Sml29623 else if (nxgep->filter.all_multicast_cnt) 17613859Sml29623 (void) strcpy(nxgekp->promisc.value.c, "multi"); 17623859Sml29623 else 17633859Sml29623 (void) strcpy(nxgekp->promisc.value.c, "off"); 17643859Sml29623 nxgekp->ifspeed.value.ul = 17656946Smisaki statsp->mac_stats.link_speed * 1000000ULL; 17663859Sml29623 nxgekp->rev_id.value.ul = statsp->mac_stats.rev_id; 17673859Sml29623 17683859Sml29623 /* 17693859Sml29623 * transceiver state informations. 17703859Sml29623 */ 17713859Sml29623 nxgekp->xcvr_inits.value.ul = statsp->mac_stats.xcvr_inits; 17723859Sml29623 nxgekp->xcvr_inuse.value.ul = statsp->mac_stats.xcvr_inuse; 17733859Sml29623 nxgekp->xcvr_addr.value.ul = statsp->mac_stats.xcvr_portn; 17743859Sml29623 nxgekp->xcvr_id.value.ul = statsp->mac_stats.xcvr_id; 17753859Sml29623 nxgekp->cap_autoneg.value.ul = statsp->mac_stats.cap_autoneg; 17763859Sml29623 nxgekp->cap_10gfdx.value.ul = statsp->mac_stats.cap_10gfdx; 17773859Sml29623 nxgekp->cap_10ghdx.value.ul = statsp->mac_stats.cap_10ghdx; 17783859Sml29623 nxgekp->cap_1000fdx.value.ul = statsp->mac_stats.cap_1000fdx; 17793859Sml29623 nxgekp->cap_1000hdx.value.ul = statsp->mac_stats.cap_1000hdx; 17803859Sml29623 nxgekp->cap_100T4.value.ul = statsp->mac_stats.cap_100T4; 17813859Sml29623 nxgekp->cap_100fdx.value.ul = statsp->mac_stats.cap_100fdx; 17823859Sml29623 nxgekp->cap_100hdx.value.ul = statsp->mac_stats.cap_100hdx; 17833859Sml29623 nxgekp->cap_10fdx.value.ul = statsp->mac_stats.cap_10fdx; 17843859Sml29623 nxgekp->cap_10hdx.value.ul = statsp->mac_stats.cap_10hdx; 17853859Sml29623 nxgekp->cap_asmpause.value.ul = 17866946Smisaki statsp->mac_stats.cap_asmpause; 17873859Sml29623 nxgekp->cap_pause.value.ul = statsp->mac_stats.cap_pause; 17883859Sml29623 17893859Sml29623 /* 17903859Sml29623 * Link partner capabilities. 17913859Sml29623 */ 17923859Sml29623 nxgekp->lp_cap_autoneg.value.ul = 17936946Smisaki statsp->mac_stats.lp_cap_autoneg; 17943859Sml29623 nxgekp->lp_cap_10gfdx.value.ul = 17956946Smisaki statsp->mac_stats.lp_cap_10gfdx; 17963859Sml29623 nxgekp->lp_cap_10ghdx.value.ul = 17976946Smisaki statsp->mac_stats.lp_cap_10ghdx; 17983859Sml29623 nxgekp->lp_cap_1000fdx.value.ul = 17996946Smisaki statsp->mac_stats.lp_cap_1000fdx; 18003859Sml29623 nxgekp->lp_cap_1000hdx.value.ul = 18016946Smisaki statsp->mac_stats.lp_cap_1000hdx; 18023859Sml29623 nxgekp->lp_cap_100T4.value.ul = 18036946Smisaki statsp->mac_stats.lp_cap_100T4; 18043859Sml29623 nxgekp->lp_cap_100fdx.value.ul = 18056946Smisaki statsp->mac_stats.lp_cap_100fdx; 18063859Sml29623 nxgekp->lp_cap_100hdx.value.ul = 18076946Smisaki statsp->mac_stats.lp_cap_100hdx; 18083859Sml29623 nxgekp->lp_cap_10fdx.value.ul = 18096946Smisaki statsp->mac_stats.lp_cap_10fdx; 18103859Sml29623 nxgekp->lp_cap_10hdx.value.ul = 18116946Smisaki statsp->mac_stats.lp_cap_10hdx; 18123859Sml29623 nxgekp->lp_cap_asmpause.value.ul = 18136946Smisaki statsp->mac_stats.lp_cap_asmpause; 18143859Sml29623 nxgekp->lp_cap_pause.value.ul = 18156946Smisaki statsp->mac_stats.lp_cap_pause; 18163859Sml29623 18173859Sml29623 /* 18183859Sml29623 * Physical link statistics. 18193859Sml29623 */ 18203859Sml29623 nxgekp->link_T4.value.ul = statsp->mac_stats.link_T4; 18213859Sml29623 nxgekp->link_speed.value.ul = statsp->mac_stats.link_speed; 18223859Sml29623 if (statsp->mac_stats.link_duplex == 2) 18233859Sml29623 (void) strcpy(nxgekp->link_duplex.value.c, "full"); 18243859Sml29623 else if (statsp->mac_stats.link_duplex == 1) 18253859Sml29623 (void) strcpy(nxgekp->link_duplex.value.c, "half"); 18263859Sml29623 else 18273859Sml29623 (void) strcpy(nxgekp->link_duplex.value.c, "unknown"); 18283859Sml29623 nxgekp->link_asmpause.value.ul = 18296946Smisaki statsp->mac_stats.link_asmpause; 18303859Sml29623 nxgekp->link_pause.value.ul = statsp->mac_stats.link_pause; 18313859Sml29623 nxgekp->link_up.value.ul = statsp->mac_stats.link_up; 18323859Sml29623 18333859Sml29623 /* 18343859Sml29623 * Lets the user know the MTU currently in use by the physical 18353859Sml29623 * MAC port. 18363859Sml29623 */ 18373859Sml29623 nxgekp->mac_mtu.value.ul = statsp->mac_stats.mac_mtu; 18383859Sml29623 18393859Sml29623 /* 18403859Sml29623 * Loopback statistics. 18413859Sml29623 */ 18423859Sml29623 nxgekp->lb_mode.value.ul = statsp->port_stats.lb_mode; 18433859Sml29623 18443859Sml29623 /* 18453859Sml29623 * This tells the user whether the driver is in QOS mode or 18463859Sml29623 * not. 18473859Sml29623 */ 18483859Sml29623 nxgekp->qos_mode.value.ul = statsp->port_stats.qos_mode; 18493859Sml29623 18503859Sml29623 /* 18513859Sml29623 * This tells whether the instance is trunked or not 18523859Sml29623 */ 18533859Sml29623 nxgekp->trunk_mode.value.ul = statsp->port_stats.trunk_mode; 18543859Sml29623 18553859Sml29623 #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 18563859Sml29623 nxgekp->mdt_reqs.value.ul = statsp->port_stats.mdt_reqs; 18573859Sml29623 nxgekp->mdt_hdr_bufs.value.ul = 18586946Smisaki statsp->port_stats.mdt_hdr_bufs; 18593859Sml29623 nxgekp->mdt_pld_bufs.value.ul = 18606946Smisaki statsp->port_stats.mdt_pld_bufs; 18613859Sml29623 nxgekp->mdt_pkts.value.ul = statsp->port_stats.mdt_pkts; 18623859Sml29623 nxgekp->mdt_hdrs.value.ul = statsp->port_stats.mdt_hdrs; 18633859Sml29623 nxgekp->mdt_plds.value.ul = statsp->port_stats.mdt_plds; 18643859Sml29623 nxgekp->mdt_hdr_bind_fail.value.ul = 18656946Smisaki statsp->port_stats.mdt_hdr_bind_fail; 18663859Sml29623 nxgekp->mdt_pld_bind_fail.value.ul = 18676946Smisaki statsp->port_stats.mdt_pld_bind_fail; 18683859Sml29623 #endif 18693859Sml29623 #ifdef ACCEPT_JUMBO 18703859Sml29623 nxgekp->tx_jumbo_pkts.value.ul = 18716946Smisaki statsp->port_stats.tx_jumbo_pkts; 18723859Sml29623 #endif 18733859Sml29623 #ifdef TX_MBLK_DEST 18743859Sml29623 nxgekp->tx_1_desc.value.ul = statsp->port_stats.tx_1_desc; 18753859Sml29623 nxgekp->tx_2_desc.value.ul = statsp->port_stats.tx_2_desc; 18763859Sml29623 nxgekp->tx_3_desc.value.ul = statsp->port_stats.tx_3_desc; 18773859Sml29623 nxgekp->tx_4_desc.value.ul = statsp->port_stats.tx_4_desc; 18783859Sml29623 nxgekp->tx_5_desc.value.ul = statsp->port_stats.tx_5_desc; 18793859Sml29623 nxgekp->tx_6_desc.value.ul = statsp->port_stats.tx_6_desc; 18803859Sml29623 nxgekp->tx_7_desc.value.ul = statsp->port_stats.tx_7_desc; 18813859Sml29623 nxgekp->tx_8_desc.value.ul = statsp->port_stats.tx_8_desc; 18823859Sml29623 nxgekp->tx_max_desc.value.ul = 18836946Smisaki statsp->port_stats.tx_max_desc; 18843859Sml29623 #endif 18853859Sml29623 /* 18863859Sml29623 * Rx Statistics. 18873859Sml29623 */ 18883859Sml29623 #ifdef ACCEPT_JUMBO 18893859Sml29623 nxgekp->rx_jumbo_pkts.value.ul = 18906946Smisaki statsp->port_stats.rx_jumbo_pkts; 18913859Sml29623 #endif 18926075Ssbehera if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 18936075Ssbehera (void) nxge_xmac_stat_update(ksp, KSTAT_READ); 18946075Ssbehera } else { 18956075Ssbehera (void) nxge_bmac_stat_update(ksp, KSTAT_READ); 18966075Ssbehera } 18973859Sml29623 } 18983859Sml29623 18993859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_port_kstat_update")); 19003859Sml29623 return (0); 19013859Sml29623 } 19023859Sml29623 19033859Sml29623 /* 19043859Sml29623 * if this is the first init do not bother to save the 19053859Sml29623 * counters. 19063859Sml29623 */ 19073859Sml29623 /* ARGSUSED */ 19083859Sml29623 void 19093859Sml29623 nxge_save_cntrs(p_nxge_t nxgep) 19103859Sml29623 { 19113859Sml29623 p_nxge_stats_t statsp; 19123859Sml29623 uint64_t val; 19133859Sml29623 npi_handle_t handle; 19143859Sml29623 uint8_t portn; 19153859Sml29623 uint8_t cnt8; 19163859Sml29623 uint16_t cnt16; 19173859Sml29623 uint32_t cnt32; 19183859Sml29623 19193859Sml29623 NXGE_DEBUG_MSG((nxgep, DDI_CTL, "==> nxge_save_cntrs")); 19203859Sml29623 19213859Sml29623 statsp = (p_nxge_stats_t)nxgep->statsp; 19223859Sml29623 handle = nxgep->npi_handle; 19233859Sml29623 portn = nxgep->mac.portnum; 19243859Sml29623 19253859Sml29623 MUTEX_ENTER(&nxgep->ouraddr_lock); 19263859Sml29623 19273859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 19283859Sml29623 /* 19293859Sml29623 * Transmit MAC statistics. 19303859Sml29623 */ 19313859Sml29623 XMAC_REG_RD(handle, portn, XTXMAC_FRM_CNT_REG, &val); 19323859Sml29623 statsp->xmac_stats.tx_frame_cnt += (val & XTXMAC_FRM_CNT_MASK); 19333859Sml29623 XMAC_REG_RD(handle, portn, XTXMAC_BYTE_CNT_REG, &val); 19343859Sml29623 statsp->xmac_stats.tx_byte_cnt += (val & XTXMAC_BYTE_CNT_MASK); 19353859Sml29623 /* 19363859Sml29623 * Receive XMAC statistics. 19373859Sml29623 */ 19383859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_CRC_ER_CNT_REG, &val); 19393859Sml29623 statsp->xmac_stats.rx_crc_err_cnt += 19406946Smisaki (val & XRXMAC_CRC_ER_CNT_MASK); 19416075Ssbehera 19423859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_MPSZER_CNT_REG, &val); 19433859Sml29623 statsp->xmac_stats.rx_len_err_cnt += 19446946Smisaki (val & XRXMAC_MPSZER_CNT_MASK); 19456075Ssbehera 19463859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_CD_VIO_CNT_REG, &val); 19473859Sml29623 statsp->xmac_stats.rx_viol_err_cnt += 19486946Smisaki (val & XRXMAC_CD_VIO_CNT_MASK); 19496075Ssbehera 19503859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_BT_CNT_REG, &val); 19513859Sml29623 statsp->xmac_stats.rx_byte_cnt += (val & XRXMAC_BT_CNT_MASK); 19526075Ssbehera 19533859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT1_REG, &val); 19543859Sml29623 statsp->xmac_stats.rx_hist1_cnt += 19556946Smisaki (val & XRXMAC_HIST_CNT1_MASK); 19566075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19576075Ssbehera (val & XRXMAC_HIST_CNT1_MASK); 19586075Ssbehera 19593859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT2_REG, &val); 19603859Sml29623 statsp->xmac_stats.rx_hist2_cnt += 19616946Smisaki (val & XRXMAC_HIST_CNT2_MASK); 19626075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19636075Ssbehera (val & XRXMAC_HIST_CNT2_MASK); 19646075Ssbehera 19653859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT3_REG, &val); 19663859Sml29623 statsp->xmac_stats.rx_hist3_cnt += 19676946Smisaki (val & XRXMAC_HIST_CNT3_MASK); 19686075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19696075Ssbehera (val & XRXMAC_HIST_CNT3_MASK); 19706075Ssbehera 19713859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT4_REG, &val); 19723859Sml29623 statsp->xmac_stats.rx_hist4_cnt += 19736946Smisaki (val & XRXMAC_HIST_CNT4_MASK); 19746075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19756075Ssbehera (val & XRXMAC_HIST_CNT4_MASK); 19766075Ssbehera 19773859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT5_REG, &val); 19783859Sml29623 statsp->xmac_stats.rx_hist5_cnt += 19796946Smisaki (val & XRXMAC_HIST_CNT5_MASK); 19806075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19816075Ssbehera (val & XRXMAC_HIST_CNT5_MASK); 19826075Ssbehera 19833859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT6_REG, &val); 19843859Sml29623 statsp->xmac_stats.rx_hist6_cnt += 19856946Smisaki (val & XRXMAC_HIST_CNT6_MASK); 19866075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19876075Ssbehera (val & XRXMAC_HIST_CNT6_MASK); 19886075Ssbehera 19896075Ssbehera XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT7_REG, &val); 19906075Ssbehera statsp->xmac_stats.rx_hist7_cnt += 19916075Ssbehera (val & XRXMAC_HIST_CNT7_MASK); 19926075Ssbehera statsp->xmac_stats.rx_frame_cnt += 19936075Ssbehera (val & XRXMAC_HIST_CNT7_MASK); 19946075Ssbehera 19953859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_BC_FRM_CNT_REG, &val); 19963859Sml29623 statsp->xmac_stats.rx_broadcast_cnt += 19976946Smisaki (val & XRXMAC_BC_FRM_CNT_MASK); 19986075Ssbehera 19993859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_MC_FRM_CNT_REG, &val); 20003859Sml29623 statsp->xmac_stats.rx_mult_cnt += 20016946Smisaki (val & XRXMAC_MC_FRM_CNT_MASK); 20026075Ssbehera 20033859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_FRAG_CNT_REG, &val); 20043859Sml29623 statsp->xmac_stats.rx_frag_cnt += (val & XRXMAC_FRAG_CNT_MASK); 20056075Ssbehera 20063859Sml29623 XMAC_REG_RD(handle, portn, XRXMAC_AL_ER_CNT_REG, &val); 20073859Sml29623 statsp->xmac_stats.rx_frame_align_err_cnt += 20086946Smisaki (val & XRXMAC_AL_ER_CNT_MASK); 20096075Ssbehera 20103859Sml29623 XMAC_REG_RD(handle, portn, XMAC_LINK_FLT_CNT_REG, &val); 20113859Sml29623 statsp->xmac_stats.rx_linkfault_err_cnt += 20126946Smisaki (val & XMAC_LINK_FLT_CNT_MASK); 20136075Ssbehera 20143859Sml29623 (void) npi_xmac_xpcs_read(handle, portn, 20156946Smisaki XPCS_REG_DESCWERR_COUNTER, &cnt32); 20163859Sml29623 statsp->xmac_stats.xpcs_deskew_err_cnt += 20176946Smisaki (val & XMAC_XPCS_DESKEW_ERR_CNT_MASK); 20186075Ssbehera 20193859Sml29623 #ifdef NXGE_DEBUG_SYMBOL_ERR 20203859Sml29623 (void) npi_xmac_xpcs_read(handle, portn, 20216946Smisaki XPCS_REG_SYMBOL_ERR_L0_1_COUNTER, &cnt32); 20223859Sml29623 statsp->xmac_stats.xpcs_ln0_symbol_err_cnt += 20236946Smisaki (cnt32 & XMAC_XPCS_SYM_ERR_CNT_L0_MASK); 20243859Sml29623 statsp->xmac_stats.xpcs_ln1_symbol_err_cnt += 20256946Smisaki ((cnt32 & XMAC_XPCS_SYM_ERR_CNT_L1_MASK) >> 20266946Smisaki XMAC_XPCS_SYM_ERR_CNT_L1_SHIFT); 20273859Sml29623 (void) npi_xmac_xpcs_read(handle, portn, 20286946Smisaki XPCS_REG_SYMBOL_ERR_L2_3_COUNTER, &cnt32); 20293859Sml29623 statsp->xmac_stats.xpcs_ln2_symbol_err_cnt += 20306946Smisaki (cnt32 & XMAC_XPCS_SYM_ERR_CNT_L2_MASK); 20313859Sml29623 statsp->xmac_stats.xpcs_ln3_symbol_err_cnt += 20326946Smisaki ((cnt32 & XMAC_XPCS_SYM_ERR_CNT_L3_MASK) >> 20336946Smisaki XMAC_XPCS_SYM_ERR_CNT_L3_SHIFT); 20343859Sml29623 #endif 20353859Sml29623 } else if (nxgep->mac.porttype == PORT_TYPE_BMAC) { 20363859Sml29623 /* 20373859Sml29623 * Transmit MAC statistics. 20383859Sml29623 */ 20393859Sml29623 BMAC_REG_RD(handle, portn, BTXMAC_FRM_CNT_REG, &val); 20403859Sml29623 statsp->bmac_stats.tx_frame_cnt += (val & BTXMAC_FRM_CNT_MASK); 20416075Ssbehera /* Clear register as it is not auto clear on read */ 20426075Ssbehera BMAC_REG_WR(handle, portn, BTXMAC_FRM_CNT_REG, 0); 20436075Ssbehera 20446075Ssbehera BMAC_REG_RD(handle, portn, BTXMAC_BYTE_CNT_REG, &val); 20453859Sml29623 statsp->bmac_stats.tx_byte_cnt += (val & BTXMAC_BYTE_CNT_MASK); 20466075Ssbehera /* Clear register as it is not auto clear on read */ 20476075Ssbehera BMAC_REG_WR(handle, portn, BTXMAC_BYTE_CNT_REG, 0); 20483859Sml29623 20493859Sml29623 /* 20503859Sml29623 * Receive MAC statistics. 20513859Sml29623 */ 20526075Ssbehera BMAC_REG_RD(handle, portn, RXMAC_FRM_CNT_REG, &val); 20533859Sml29623 statsp->bmac_stats.rx_frame_cnt += (val & RXMAC_FRM_CNT_MASK); 20546075Ssbehera /* Clear register as it is not auto clear on read */ 20556075Ssbehera BMAC_REG_WR(handle, portn, RXMAC_FRM_CNT_REG, 0); 20566075Ssbehera 20576075Ssbehera BMAC_REG_RD(handle, portn, BRXMAC_BYTE_CNT_REG, &val); 20583859Sml29623 statsp->bmac_stats.rx_byte_cnt += (val & BRXMAC_BYTE_CNT_MASK); 20596075Ssbehera /* Clear register as it is not auto clear on read */ 20606075Ssbehera BMAC_REG_WR(handle, portn, BRXMAC_BYTE_CNT_REG, 0); 20616075Ssbehera 20626075Ssbehera BMAC_REG_RD(handle, portn, BMAC_AL_ER_CNT_REG, &val); 20633859Sml29623 statsp->bmac_stats.rx_align_err_cnt += 20646946Smisaki (val & BMAC_AL_ER_CNT_MASK); 20656075Ssbehera /* Clear register as it is not auto clear on read */ 20666075Ssbehera BMAC_REG_WR(handle, portn, BMAC_AL_ER_CNT_REG, 0); 20676075Ssbehera 20686075Ssbehera BMAC_REG_RD(handle, portn, MAC_LEN_ER_CNT_REG, &val); 20693859Sml29623 statsp->bmac_stats.rx_len_err_cnt += 20706946Smisaki (val & MAC_LEN_ER_CNT_MASK); 20716075Ssbehera /* Clear register as it is not auto clear on read */ 20726075Ssbehera BMAC_REG_WR(handle, portn, MAC_LEN_ER_CNT_REG, 0); 20736075Ssbehera 20746075Ssbehera BMAC_REG_RD(handle, portn, BMAC_CRC_ER_CNT_REG, &val); 20753859Sml29623 statsp->bmac_stats.rx_crc_err_cnt += 20766946Smisaki (val & BMAC_CRC_ER_CNT_MASK); 20776075Ssbehera /* Clear register as it is not auto clear on read */ 20786075Ssbehera BMAC_REG_WR(handle, portn, BMAC_CRC_ER_CNT_REG, 0); 20796075Ssbehera 20806075Ssbehera BMAC_REG_RD(handle, portn, BMAC_CD_VIO_CNT_REG, &val); 20813859Sml29623 statsp->bmac_stats.rx_viol_err_cnt += 20826946Smisaki (val & BMAC_CD_VIO_CNT_MASK); 20836075Ssbehera /* Clear register as it is not auto clear on read */ 20846075Ssbehera BMAC_REG_WR(handle, portn, BMAC_CD_VIO_CNT_REG, 0); 20853859Sml29623 } 20866495Sspeer if (isLDOMguest(nxgep)) { 20876495Sspeer MUTEX_EXIT(&nxgep->ouraddr_lock); 20886495Sspeer goto nxge_save_cntrs_exit; 20896495Sspeer } 20903859Sml29623 /* Update IPP counters */ 20913859Sml29623 (void) npi_ipp_get_ecc_err_count(handle, portn, &cnt8); 20923859Sml29623 statsp->ipp_stats.ecc_err_cnt += cnt8; 20933859Sml29623 (void) npi_ipp_get_pkt_dis_count(handle, portn, &cnt16); 20943859Sml29623 statsp->ipp_stats.pkt_dis_cnt += cnt16; 20953859Sml29623 (void) npi_ipp_get_cs_err_count(handle, portn, &cnt16); 20963859Sml29623 statsp->ipp_stats.bad_cs_cnt += cnt16; 20973859Sml29623 20983859Sml29623 MUTEX_EXIT(&nxgep->ouraddr_lock); 20993859Sml29623 21003859Sml29623 nxge_save_cntrs_exit: 21013859Sml29623 NXGE_DEBUG_MSG((nxgep, DDI_CTL, "<== nxge_save_cntrs")); 21023859Sml29623 } 21033859Sml29623 21046495Sspeer uint64_t 21056495Sspeer nxge_m_rx_stat( 21066495Sspeer nxge_t *nxgep, 21076495Sspeer uint_t stat) 21086495Sspeer { 21096495Sspeer p_nxge_stats_t statsp; 21106495Sspeer nxge_grp_set_t *rx_set; 21116495Sspeer int8_t set[NXGE_MAX_RDCS]; 21126495Sspeer int i, cursor; 21136495Sspeer 21146495Sspeer uint64_t val = 0; 21156495Sspeer 21166495Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_rx_stat")); 21176495Sspeer statsp = (p_nxge_stats_t)nxgep->statsp; 21186495Sspeer 21196495Sspeer rx_set = &nxgep->rx_set; 21206495Sspeer for (i = 0, cursor = 0; i < NXGE_MAX_RDCS; i++) { 21216495Sspeer if ((1 << i) & rx_set->owned.map) { 21226495Sspeer set[cursor++] = (uint8_t)i; 21236495Sspeer } 21246495Sspeer } 21256495Sspeer 21266495Sspeer for (i = 0; i < cursor; i++) { 21276495Sspeer int rdc = set[i]; 21286495Sspeer switch (stat) { 21296495Sspeer case MAC_STAT_IERRORS: 21306495Sspeer case ETHER_STAT_MACRCV_ERRORS: 21316495Sspeer val += statsp->rdc_stats[rdc].ierrors; 21326495Sspeer break; 21336495Sspeer 21346495Sspeer case MAC_STAT_RBYTES: 21356495Sspeer val += statsp->rdc_stats[rdc].ibytes; 21366495Sspeer break; 21376495Sspeer 21386495Sspeer case MAC_STAT_IPACKETS: 21396495Sspeer val += statsp->rdc_stats[rdc].ipackets; 21406495Sspeer break; 21416495Sspeer 21426495Sspeer default: 21436495Sspeer break; 21446495Sspeer } 21456495Sspeer } 21466495Sspeer 21476495Sspeer return (val); 21486495Sspeer } 21496495Sspeer 21506495Sspeer uint64_t 21516495Sspeer nxge_m_tx_stat( 21526495Sspeer nxge_t *nxgep, 21536495Sspeer uint_t stat) 21546495Sspeer { 21556495Sspeer p_nxge_stats_t statsp; 21566495Sspeer nxge_grp_set_t *tx_set; 21576495Sspeer int8_t set[NXGE_MAX_TDCS]; 21586495Sspeer int i, cursor; 21596495Sspeer 21606495Sspeer uint64_t val = 0; 21616495Sspeer 21626495Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_tx_stat")); 21636495Sspeer statsp = (p_nxge_stats_t)nxgep->statsp; 21646495Sspeer 21656495Sspeer tx_set = &nxgep->tx_set; 2166*7126Sml29623 for (i = 0, cursor = 0; i < NXGE_MAX_TDCS; i++) { 21676495Sspeer if ((1 << i) & tx_set->owned.map) { 21686495Sspeer set[cursor++] = (uint8_t)i; 21696495Sspeer } 21706495Sspeer } 21716495Sspeer 21726495Sspeer for (i = 0; i < cursor; i++) { 21736495Sspeer int tdc = set[i]; 21746495Sspeer switch (stat) { 21756495Sspeer case MAC_STAT_OERRORS: 21766495Sspeer val += statsp->tdc_stats[tdc].oerrors; 21776495Sspeer break; 21786495Sspeer 21796495Sspeer case MAC_STAT_OBYTES: 21806495Sspeer val += statsp->tdc_stats[tdc].obytes; 21816495Sspeer break; 21826495Sspeer 21836495Sspeer case MAC_STAT_OPACKETS: 21846495Sspeer val += statsp->tdc_stats[tdc].opackets; 21856495Sspeer break; 21866495Sspeer 21876495Sspeer default: 21886495Sspeer break; 21896495Sspeer } 21906495Sspeer } 21916495Sspeer 21926495Sspeer return (val); 21936495Sspeer } 21946495Sspeer 21953859Sml29623 /* ARGSUSED */ 21963859Sml29623 int 21973859Sml29623 nxge_m_stat(void *arg, uint_t stat, uint64_t *value) 21983859Sml29623 { 21993859Sml29623 p_nxge_t nxgep = (p_nxge_t)arg; 22003859Sml29623 p_nxge_stats_t statsp; 22013859Sml29623 uint64_t val = 0; 22023859Sml29623 22033859Sml29623 NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_stat")); 22043859Sml29623 statsp = (p_nxge_stats_t)nxgep->statsp; 22053859Sml29623 22063859Sml29623 switch (stat) { 22073859Sml29623 case MAC_STAT_IFSPEED: 22083859Sml29623 val = statsp->mac_stats.link_speed * 1000000ull; 22093859Sml29623 break; 22103859Sml29623 22113859Sml29623 case MAC_STAT_MULTIRCV: 22123859Sml29623 val = statsp->port_stats.multircv; 22133859Sml29623 break; 22143859Sml29623 22153859Sml29623 case MAC_STAT_BRDCSTRCV: 22163859Sml29623 val = statsp->port_stats.brdcstrcv; 22173859Sml29623 break; 22183859Sml29623 22193859Sml29623 case MAC_STAT_MULTIXMT: 22203859Sml29623 val = statsp->port_stats.multixmt; 22213859Sml29623 break; 22223859Sml29623 22233859Sml29623 case MAC_STAT_BRDCSTXMT: 22243859Sml29623 val = statsp->port_stats.brdcstxmt; 22253859Sml29623 break; 22263859Sml29623 22273859Sml29623 case MAC_STAT_NORCVBUF: 22283859Sml29623 val = statsp->port_stats.norcvbuf; 22293859Sml29623 break; 22303859Sml29623 22313859Sml29623 case MAC_STAT_IERRORS: 22323859Sml29623 case ETHER_STAT_MACRCV_ERRORS: 22336495Sspeer val = nxge_m_rx_stat(nxgep, stat); 22346495Sspeer break; 22356495Sspeer 22366495Sspeer case MAC_STAT_OERRORS: 22376495Sspeer val = nxge_m_tx_stat(nxgep, stat); 22383859Sml29623 break; 22393859Sml29623 22403859Sml29623 case MAC_STAT_NOXMTBUF: 22413859Sml29623 val = statsp->port_stats.noxmtbuf; 22423859Sml29623 break; 22433859Sml29623 22443859Sml29623 case MAC_STAT_COLLISIONS: 22453859Sml29623 val = 0; 22463859Sml29623 break; 22473859Sml29623 22483859Sml29623 case MAC_STAT_RBYTES: 22496495Sspeer val = nxge_m_rx_stat(nxgep, stat); 22503859Sml29623 break; 22513859Sml29623 22523859Sml29623 case MAC_STAT_IPACKETS: 22536495Sspeer val = nxge_m_rx_stat(nxgep, stat); 22543859Sml29623 break; 22553859Sml29623 22563859Sml29623 case MAC_STAT_OBYTES: 22576495Sspeer val = nxge_m_tx_stat(nxgep, stat); 22583859Sml29623 break; 22593859Sml29623 22603859Sml29623 case MAC_STAT_OPACKETS: 22616495Sspeer val = nxge_m_tx_stat(nxgep, stat); 22623859Sml29623 break; 22633859Sml29623 case MAC_STAT_LINK_STATE: 22643859Sml29623 val = statsp->mac_stats.link_duplex; 22653859Sml29623 break; 22663859Sml29623 case MAC_STAT_LINK_UP: 22673859Sml29623 val = statsp->mac_stats.link_up; 22683859Sml29623 break; 22693859Sml29623 case MAC_STAT_PROMISC: 22703859Sml29623 val = statsp->mac_stats.promisc; 22713859Sml29623 break; 22723859Sml29623 case ETHER_STAT_SQE_ERRORS: 22733859Sml29623 val = 0; 22743859Sml29623 break; 22753859Sml29623 22763859Sml29623 case ETHER_STAT_ALIGN_ERRORS: 22773859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) 22783859Sml29623 val = statsp->xmac_stats.rx_frame_align_err_cnt; 22793859Sml29623 else if (nxgep->mac.porttype == PORT_TYPE_BMAC) 22803859Sml29623 val = statsp->bmac_stats.rx_align_err_cnt; 22813859Sml29623 else 22823859Sml29623 val = 0; 22833859Sml29623 break; 22843859Sml29623 22853859Sml29623 case ETHER_STAT_FCS_ERRORS: 22863859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) 22873859Sml29623 val = statsp->xmac_stats.rx_crc_err_cnt; 22883859Sml29623 else if (nxgep->mac.porttype == PORT_TYPE_BMAC) 22893859Sml29623 val = statsp->bmac_stats.rx_crc_err_cnt; 22903859Sml29623 else 22913859Sml29623 val = 0; 22923859Sml29623 break; 22933859Sml29623 22943859Sml29623 case ETHER_STAT_FIRST_COLLISIONS: 22953859Sml29623 val = 0; 22963859Sml29623 break; 22973859Sml29623 22983859Sml29623 case ETHER_STAT_MULTI_COLLISIONS: 22993859Sml29623 val = 0; 23003859Sml29623 break; 23013859Sml29623 23023859Sml29623 case ETHER_STAT_TX_LATE_COLLISIONS: 23033859Sml29623 val = 0; 23043859Sml29623 break; 23053859Sml29623 23063859Sml29623 case ETHER_STAT_EX_COLLISIONS: 23073859Sml29623 val = 0; 23083859Sml29623 break; 23093859Sml29623 23103859Sml29623 case ETHER_STAT_DEFER_XMTS: 23113859Sml29623 val = 0; 23123859Sml29623 break; 23133859Sml29623 23143859Sml29623 case ETHER_STAT_MACXMT_ERRORS: 23153859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 23163859Sml29623 val = statsp->xmac_stats.tx_underflow_err + 23176946Smisaki statsp->xmac_stats.tx_maxpktsize_err + 23186946Smisaki statsp->xmac_stats.tx_overflow_err + 23196946Smisaki statsp->xmac_stats.tx_fifo_xfr_err; 23203859Sml29623 } else { 23213859Sml29623 val = statsp->bmac_stats.tx_underrun_err + 23226946Smisaki statsp->bmac_stats.tx_max_pkt_err; 23233859Sml29623 } 23243859Sml29623 break; 23253859Sml29623 23263859Sml29623 case ETHER_STAT_CARRIER_ERRORS: 23273859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 23283859Sml29623 val = statsp->xmac_stats.rx_linkfault_err_cnt; 23293859Sml29623 } else { 23303859Sml29623 val = statsp->mac_stats.xcvr_inits + 23316946Smisaki statsp->mac_stats.serdes_inits; 23323859Sml29623 } 23333859Sml29623 break; 23343859Sml29623 23353859Sml29623 case ETHER_STAT_TOOLONG_ERRORS: 23363859Sml29623 if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 23373859Sml29623 val = statsp->xmac_stats.tx_maxpktsize_err + 23386946Smisaki statsp->xmac_stats.rx_len_err_cnt; 23393859Sml29623 23403859Sml29623 } else { 23413859Sml29623 val = statsp->bmac_stats.rx_len_err_cnt + 23426946Smisaki statsp->bmac_stats.tx_max_pkt_err; 23433859Sml29623 } 23443859Sml29623 break; 23453859Sml29623 23463859Sml29623 23473859Sml29623 case ETHER_STAT_XCVR_ADDR: 23483859Sml29623 val = statsp->mac_stats.xcvr_portn; 23493859Sml29623 break; 23503859Sml29623 case ETHER_STAT_XCVR_ID: 23513859Sml29623 val = statsp->mac_stats.xcvr_id; 23523859Sml29623 break; 23533859Sml29623 23543859Sml29623 case ETHER_STAT_XCVR_INUSE: 23553859Sml29623 val = statsp->mac_stats.xcvr_inuse; 23563859Sml29623 break; 23573859Sml29623 23583859Sml29623 case ETHER_STAT_CAP_1000FDX: 23593859Sml29623 val = statsp->mac_stats.cap_1000fdx; 23603859Sml29623 break; 23613859Sml29623 23623859Sml29623 case ETHER_STAT_CAP_1000HDX: 23633859Sml29623 val = statsp->mac_stats.cap_1000hdx; 23643859Sml29623 break; 23653859Sml29623 23663859Sml29623 case ETHER_STAT_CAP_100FDX: 23673859Sml29623 val = statsp->mac_stats.cap_100fdx; 23683859Sml29623 break; 23693859Sml29623 23703859Sml29623 case ETHER_STAT_CAP_100HDX: 23713859Sml29623 val = statsp->mac_stats.cap_100hdx; 23723859Sml29623 break; 23733859Sml29623 23743859Sml29623 case ETHER_STAT_CAP_10FDX: 23753859Sml29623 val = statsp->mac_stats.cap_10fdx; 23763859Sml29623 break; 23773859Sml29623 23783859Sml29623 case ETHER_STAT_CAP_10HDX: 23793859Sml29623 val = statsp->mac_stats.cap_10hdx; 23803859Sml29623 break; 23813859Sml29623 23823859Sml29623 case ETHER_STAT_CAP_ASMPAUSE: 23833859Sml29623 val = statsp->mac_stats.cap_asmpause; 23843859Sml29623 val = 1; 23853859Sml29623 break; 23863859Sml29623 23873859Sml29623 case ETHER_STAT_CAP_PAUSE: 23883859Sml29623 val = statsp->mac_stats.cap_pause; 23893859Sml29623 break; 23903859Sml29623 23913859Sml29623 case ETHER_STAT_CAP_AUTONEG: 23923859Sml29623 val = statsp->mac_stats.cap_autoneg; 23933859Sml29623 break; 23943859Sml29623 23953859Sml29623 case ETHER_STAT_ADV_CAP_1000FDX: 23963859Sml29623 val = statsp->mac_stats.adv_cap_1000fdx; 23973859Sml29623 break; 23983859Sml29623 23993859Sml29623 case ETHER_STAT_ADV_CAP_1000HDX: 24003859Sml29623 val = statsp->mac_stats.adv_cap_1000hdx; 24013859Sml29623 break; 24023859Sml29623 24033859Sml29623 case ETHER_STAT_ADV_CAP_100FDX: 24043859Sml29623 val = statsp->mac_stats.adv_cap_100fdx; 24053859Sml29623 break; 24063859Sml29623 24073859Sml29623 case ETHER_STAT_ADV_CAP_100HDX: 24083859Sml29623 val = statsp->mac_stats.adv_cap_100hdx; 24093859Sml29623 break; 24103859Sml29623 24113859Sml29623 case ETHER_STAT_ADV_CAP_10FDX: 24123859Sml29623 val = statsp->mac_stats.adv_cap_10fdx; 24133859Sml29623 break; 24143859Sml29623 24153859Sml29623 case ETHER_STAT_ADV_CAP_10HDX: 24163859Sml29623 val = statsp->mac_stats.adv_cap_10hdx; 24173859Sml29623 break; 24183859Sml29623 24193859Sml29623 case ETHER_STAT_ADV_CAP_ASMPAUSE: 24203859Sml29623 val = statsp->mac_stats.adv_cap_asmpause; 24213859Sml29623 break; 24223859Sml29623 24233859Sml29623 case ETHER_STAT_ADV_CAP_PAUSE: 24243859Sml29623 val = statsp->mac_stats.adv_cap_pause; 24253859Sml29623 break; 24263859Sml29623 24273859Sml29623 case ETHER_STAT_ADV_CAP_AUTONEG: 24283859Sml29623 val = statsp->mac_stats.adv_cap_autoneg; 24293859Sml29623 break; 24303859Sml29623 24313859Sml29623 case ETHER_STAT_LP_CAP_1000FDX: 24323859Sml29623 val = statsp->mac_stats.lp_cap_1000fdx; 24333859Sml29623 break; 24343859Sml29623 24353859Sml29623 case ETHER_STAT_LP_CAP_1000HDX: 24363859Sml29623 val = statsp->mac_stats.lp_cap_1000hdx; 24373859Sml29623 break; 24383859Sml29623 24393859Sml29623 case ETHER_STAT_LP_CAP_100FDX: 24403859Sml29623 val = statsp->mac_stats.lp_cap_100fdx; 24413859Sml29623 break; 24423859Sml29623 24433859Sml29623 case ETHER_STAT_LP_CAP_100HDX: 24443859Sml29623 val = statsp->mac_stats.lp_cap_100hdx; 24453859Sml29623 break; 24463859Sml29623 24473859Sml29623 case ETHER_STAT_LP_CAP_10FDX: 24483859Sml29623 val = statsp->mac_stats.lp_cap_10fdx; 24493859Sml29623 break; 24503859Sml29623 24513859Sml29623 case ETHER_STAT_LP_CAP_10HDX: 24523859Sml29623 val = statsp->mac_stats.lp_cap_10hdx; 24533859Sml29623 break; 24543859Sml29623 24553859Sml29623 case ETHER_STAT_LP_CAP_ASMPAUSE: 24563859Sml29623 val = statsp->mac_stats.lp_cap_asmpause; 24573859Sml29623 break; 24583859Sml29623 24593859Sml29623 case ETHER_STAT_LP_CAP_PAUSE: 24603859Sml29623 val = statsp->mac_stats.lp_cap_pause; 24613859Sml29623 break; 24623859Sml29623 24633859Sml29623 case ETHER_STAT_LP_CAP_AUTONEG: 24643859Sml29623 val = statsp->mac_stats.lp_cap_autoneg; 24653859Sml29623 break; 24663859Sml29623 24673859Sml29623 case ETHER_STAT_LINK_ASMPAUSE: 24683859Sml29623 val = statsp->mac_stats.link_asmpause; 24693859Sml29623 break; 24703859Sml29623 24713859Sml29623 case ETHER_STAT_LINK_PAUSE: 24723859Sml29623 val = statsp->mac_stats.link_pause; 24733859Sml29623 break; 24743859Sml29623 24753859Sml29623 case ETHER_STAT_LINK_AUTONEG: 24763859Sml29623 val = statsp->mac_stats.cap_autoneg; 24773859Sml29623 break; 24783859Sml29623 24793859Sml29623 case ETHER_STAT_LINK_DUPLEX: 24803859Sml29623 val = statsp->mac_stats.link_duplex; 24813859Sml29623 break; 24823859Sml29623 24833859Sml29623 default: 24843859Sml29623 /* 24853859Sml29623 * Shouldn't reach here... 24863859Sml29623 */ 24873859Sml29623 #ifdef NXGE_DEBUG 24883859Sml29623 NXGE_ERROR_MSG((nxgep, KST_CTL, 24896946Smisaki "nxge_m_stat: unrecognized parameter value = 0x%x", 24906946Smisaki stat)); 24913859Sml29623 #endif 24923859Sml29623 24933859Sml29623 return (ENOTSUP); 24943859Sml29623 } 24953859Sml29623 *value = val; 24963859Sml29623 return (0); 24973859Sml29623 } 2498