144961713Sgirish /* 244961713Sgirish * CDDL HEADER START 344961713Sgirish * 444961713Sgirish * The contents of this file are subject to the terms of the 544961713Sgirish * Common Development and Distribution License (the "License"). 644961713Sgirish * You may not use this file except in compliance with the License. 744961713Sgirish * 844961713Sgirish * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 944961713Sgirish * or http://www.opensolaris.org/os/licensing. 1044961713Sgirish * See the License for the specific language governing permissions 1144961713Sgirish * and limitations under the License. 1244961713Sgirish * 1344961713Sgirish * When distributing Covered Code, include this CDDL HEADER in each 1444961713Sgirish * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1544961713Sgirish * If applicable, add the following below this CDDL HEADER, with the 1644961713Sgirish * fields enclosed by brackets "[]" replaced with your own identifying 1744961713Sgirish * information: Portions Copyright [yyyy] [name of copyright owner] 1844961713Sgirish * 1944961713Sgirish * CDDL HEADER END 2044961713Sgirish */ 2144961713Sgirish /* 224202ea4bSsbehera * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 2344961713Sgirish * Use is subject to license terms. 2444961713Sgirish */ 2544961713Sgirish 2644961713Sgirish #pragma ident "%Z%%M% %I% %E% SMI" 2744961713Sgirish 28a3c5bd6dSspeer #include <sys/nxge/nxge_impl.h> 29678453a8Sspeer #include <sys/nxge/nxge_hio.h> 30678453a8Sspeer 3144961713Sgirish #include <inet/mi.h> 32a3c5bd6dSspeer 3344961713Sgirish #define RDC_NAME_FORMAT1 "RDC Channel" 3444961713Sgirish #define TDC_NAME_FORMAT1 "TDC Channel" 3544961713Sgirish #define CH_NAME_FORMAT " %d Stats" 3644961713Sgirish #define TDC_NAME_FORMAT "TDC Channel %d Stats" 3744961713Sgirish #define RDC_NAME_FORMAT "RDC Channel %d Stats" 3844961713Sgirish 3944961713Sgirish void nxge_mac_init_kstats(p_nxge_t, struct kstat *); 4044961713Sgirish void nxge_xmac_init_kstats(struct kstat *); 4144961713Sgirish void nxge_bmac_init_kstats(struct kstat *); 4244961713Sgirish 43a3c5bd6dSspeer /* ARGSUSED */ 4444961713Sgirish void 4544961713Sgirish nxge_init_statsp(p_nxge_t nxgep) 4644961713Sgirish { 4744961713Sgirish size_t stats_size; 4844961713Sgirish 4944961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_init_statsp")); 5044961713Sgirish 5144961713Sgirish stats_size = sizeof (nxge_stats_t); 5244961713Sgirish nxgep->statsp = KMEM_ZALLOC(stats_size, KM_SLEEP); 5344961713Sgirish nxgep->statsp->stats_size = stats_size; 5444961713Sgirish 5544961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_init_statsp")); 5644961713Sgirish } 5744961713Sgirish 5844961713Sgirish typedef struct { 59a3c5bd6dSspeer uint8_t index; 60a3c5bd6dSspeer uint8_t type; 61a3c5bd6dSspeer char *name; 6244961713Sgirish } nxge_kstat_index_t; 6344961713Sgirish 64a3c5bd6dSspeer typedef enum { 6544961713Sgirish RDC_STAT_PACKETS = 0, 6644961713Sgirish RDC_STAT_BYTES, 6744961713Sgirish RDC_STAT_ERRORS, 6844961713Sgirish RDC_STAT_DCF_ERR, 6944961713Sgirish RDC_STAT_RCR_ACK_ERR, 7044961713Sgirish RDC_STAT_RCR_DC_FIFOFLOW_ERR, 7144961713Sgirish RDC_STAT_RCR_SHA_PAR_ERR, 7244961713Sgirish RDC_STAT_RBR_PRE_PAR_ERR, 7344961713Sgirish RDC_STAT_WRED_DROP, 7444961713Sgirish RDC_STAT_RBR_PRE_EMTY, 7544961713Sgirish RDC_STAT_RCR_SHADOW_FULL, 7644961713Sgirish RDC_STAT_RBR_TMOUT, 7744961713Sgirish RDC_STAT_RSP_CNT_ERR, 7844961713Sgirish RDC_STAT_BYTE_EN_BUS, 7944961713Sgirish RDC_STAT_RSP_DAT_ERR, 804202ea4bSsbehera RDC_STAT_PKT_TOO_LONG_ERR, 8144961713Sgirish RDC_STAT_COMPL_L2_ERR, 8244961713Sgirish RDC_STAT_COMPL_L4_CKSUM_ERR, 8344961713Sgirish RDC_STAT_COMPL_ZCP_SOFT_ERR, 8444961713Sgirish RDC_STAT_COMPL_FFLP_SOFT_ERR, 8544961713Sgirish RDC_STAT_CONFIG_ERR, 8644961713Sgirish RDC_STAT_RCRINCON, 8744961713Sgirish RDC_STAT_RCRFULL, 8844961713Sgirish RDC_STAT_RBR_EMPTY, 8944961713Sgirish RDC_STAT_RBR_FULL, 9044961713Sgirish RDC_STAT_RBRLOGPAGE, 9144961713Sgirish RDC_STAT_CFIGLOGPAGE, 9244961713Sgirish RDC_STAT_PORT_DROP_PKT, 9344961713Sgirish RDC_STAT_RCRTO, 9444961713Sgirish RDC_STAT_RCRTHRES, 9544961713Sgirish RDC_STAT_MEX, 9644961713Sgirish RDC_STAT_ID_MIS, 9744961713Sgirish RDC_STAT_ZCP_EOP, 9844961713Sgirish RDC_STAT_IPP_EOP, 9944961713Sgirish RDC_STAT_END 10044961713Sgirish } nxge_rdc_stat_index_t; 10144961713Sgirish 10244961713Sgirish nxge_kstat_index_t nxge_rdc_stats[] = { 103a3c5bd6dSspeer {RDC_STAT_PACKETS, KSTAT_DATA_UINT64, "rdc_packets"}, 104a3c5bd6dSspeer {RDC_STAT_BYTES, KSTAT_DATA_UINT64, "rdc_bytes"}, 105a3c5bd6dSspeer {RDC_STAT_ERRORS, KSTAT_DATA_ULONG, "rdc_errors"}, 106a3c5bd6dSspeer {RDC_STAT_DCF_ERR, KSTAT_DATA_ULONG, "rdc_dcf_err"}, 107a3c5bd6dSspeer {RDC_STAT_RCR_ACK_ERR, KSTAT_DATA_ULONG, "rdc_rcr_ack_err"}, 108a3c5bd6dSspeer {RDC_STAT_RCR_DC_FIFOFLOW_ERR, KSTAT_DATA_ULONG, "rdc_dc_fifoflow_err"}, 109a3c5bd6dSspeer {RDC_STAT_RCR_SHA_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rcr_sha_par_err"}, 110a3c5bd6dSspeer {RDC_STAT_RBR_PRE_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rbr_pre_par_err"}, 111a3c5bd6dSspeer {RDC_STAT_WRED_DROP, KSTAT_DATA_ULONG, "rdc_wred_drop"}, 112a3c5bd6dSspeer {RDC_STAT_RBR_PRE_EMTY, KSTAT_DATA_ULONG, "rdc_rbr_pre_empty"}, 113a3c5bd6dSspeer {RDC_STAT_RCR_SHADOW_FULL, KSTAT_DATA_ULONG, "rdc_rcr_shadow_full"}, 114a3c5bd6dSspeer {RDC_STAT_RBR_TMOUT, KSTAT_DATA_ULONG, "rdc_rbr_tmout"}, 115a3c5bd6dSspeer {RDC_STAT_RSP_CNT_ERR, KSTAT_DATA_ULONG, "rdc_rsp_cnt_err"}, 116a3c5bd6dSspeer {RDC_STAT_BYTE_EN_BUS, KSTAT_DATA_ULONG, "rdc_byte_en_bus"}, 117a3c5bd6dSspeer {RDC_STAT_RSP_DAT_ERR, KSTAT_DATA_ULONG, "rdc_rsp_dat_err"}, 1184202ea4bSsbehera {RDC_STAT_PKT_TOO_LONG_ERR, KSTAT_DATA_ULONG, "rdc_pkt_too_long_err"}, 119a3c5bd6dSspeer {RDC_STAT_COMPL_L2_ERR, KSTAT_DATA_ULONG, "rdc_compl_l2_err"}, 120a3c5bd6dSspeer {RDC_STAT_COMPL_L4_CKSUM_ERR, KSTAT_DATA_ULONG, "rdc_compl_l4_cksum"}, 121a3c5bd6dSspeer {RDC_STAT_COMPL_ZCP_SOFT_ERR, KSTAT_DATA_ULONG, 122a3c5bd6dSspeer "rdc_compl_zcp_soft_err"}, 123a3c5bd6dSspeer {RDC_STAT_COMPL_FFLP_SOFT_ERR, KSTAT_DATA_ULONG, 124a3c5bd6dSspeer "rdc_compl_fflp_soft_err"}, 125a3c5bd6dSspeer {RDC_STAT_CONFIG_ERR, KSTAT_DATA_ULONG, "rdc_config_err"}, 126a3c5bd6dSspeer {RDC_STAT_RCRINCON, KSTAT_DATA_ULONG, "rdc_rcrincon"}, 127a3c5bd6dSspeer {RDC_STAT_RCRFULL, KSTAT_DATA_ULONG, "rdc_rcrfull"}, 128a3c5bd6dSspeer {RDC_STAT_RBR_EMPTY, KSTAT_DATA_ULONG, "rdc_rbr_empty"}, 129a3c5bd6dSspeer {RDC_STAT_RBR_FULL, KSTAT_DATA_ULONG, "rdc_rbrfull"}, 130a3c5bd6dSspeer {RDC_STAT_RBRLOGPAGE, KSTAT_DATA_ULONG, "rdc_rbrlogpage"}, 131a3c5bd6dSspeer {RDC_STAT_CFIGLOGPAGE, KSTAT_DATA_ULONG, "rdc_cfiglogpage"}, 132a3c5bd6dSspeer {RDC_STAT_PORT_DROP_PKT, KSTAT_DATA_ULONG, "rdc_port_drop_pkt"}, 133a3c5bd6dSspeer {RDC_STAT_RCRTO, KSTAT_DATA_ULONG, "rdc_rcrto"}, 134a3c5bd6dSspeer {RDC_STAT_RCRTHRES, KSTAT_DATA_ULONG, "rdc_rcrthres"}, 135a3c5bd6dSspeer {RDC_STAT_MEX, KSTAT_DATA_ULONG, "rdc_mex"}, 136a3c5bd6dSspeer {RDC_STAT_ID_MIS, KSTAT_DATA_ULONG, "rdc_id_mismatch"}, 137a3c5bd6dSspeer {RDC_STAT_ZCP_EOP, KSTAT_DATA_ULONG, "rdc_zcp_eop"}, 138a3c5bd6dSspeer {RDC_STAT_IPP_EOP, KSTAT_DATA_ULONG, "rdc_ipp_eop"}, 139a3c5bd6dSspeer {RDC_STAT_END, NULL, NULL} 14044961713Sgirish }; 14144961713Sgirish 14244961713Sgirish typedef enum { 14344961713Sgirish RDC_SYS_STAT_PRE_PAR_ERR = 0, 14444961713Sgirish RDC_SYS_STAT_SHA_PAR_ERR, 14544961713Sgirish RDC_SYS_STAT_ID_MISMATCH, 14644961713Sgirish RDC_SYS_STAT_IPP_EOP_ERR, 14744961713Sgirish RDC_SYS_STAT_ZCP_EOP_ERR, 14844961713Sgirish RDC_SYS_STAT_END 14944961713Sgirish } nxge_rdc_sys_stat_idx_t; 15044961713Sgirish 15144961713Sgirish nxge_kstat_index_t nxge_rdc_sys_stats[] = { 152a3c5bd6dSspeer {RDC_SYS_STAT_PRE_PAR_ERR, KSTAT_DATA_UINT64, "rdc_pre_par_err"}, 153a3c5bd6dSspeer {RDC_SYS_STAT_SHA_PAR_ERR, KSTAT_DATA_UINT64, "rdc_sha_par_err"}, 154a3c5bd6dSspeer {RDC_SYS_STAT_ID_MISMATCH, KSTAT_DATA_UINT64, "rdc_stat_id_mismatch"}, 155a3c5bd6dSspeer {RDC_SYS_STAT_IPP_EOP_ERR, KSTAT_DATA_UINT64, "rdc_ipp_eop_err"}, 156a3c5bd6dSspeer {RDC_SYS_STAT_ZCP_EOP_ERR, KSTAT_DATA_UINT64, "rdc_zcp_eop_err"}, 157a3c5bd6dSspeer {RDC_SYS_STAT_END, NULL, NULL} 15844961713Sgirish }; 15944961713Sgirish 160a3c5bd6dSspeer typedef enum { 16144961713Sgirish TDC_STAT_PACKETS = 0, 16244961713Sgirish TDC_STAT_BYTES, 16344961713Sgirish TDC_STAT_ERRORS, 16444961713Sgirish TDC_STAT_TX_INITS, 16544961713Sgirish TDC_STAT_TX_NO_BUF, 16644961713Sgirish TDC_STAT_MBOX_ERR, 16744961713Sgirish TDC_STAT_PKT_SIZE_ERR, 16844961713Sgirish TDC_STAT_TX_RING_OFLOW, 16944961713Sgirish TDC_STAT_PREF_BUF_ECC_ERR, 17044961713Sgirish TDC_STAT_NACK_PREF, 17144961713Sgirish TDC_STAT_NACK_PKT_RD, 17244961713Sgirish TDC_STAT_CONF_PART_ERR, 17344961713Sgirish TDC_STAT_PKT_PRT_ERR, 17444961713Sgirish TDC_STAT_RESET_FAIL, 17544961713Sgirish TDC_STAT_TX_STARTS, 17644961713Sgirish TDC_STAT_TX_NOCANPUT, 17744961713Sgirish TDC_STAT_TX_MSGDUP_FAIL, 17844961713Sgirish TDC_STAT_TX_ALLOCB_FAIL, 17944961713Sgirish TDC_STAT_TX_NO_DESC, 18044961713Sgirish TDC_STAT_TX_DMA_BIND_FAIL, 18144961713Sgirish TDC_STAT_TX_UFLOW, 18244961713Sgirish TDC_STAT_TX_HDR_PKTS, 18344961713Sgirish TDC_STAT_TX_DDI_PKTS, 18444961713Sgirish TDC_STAT_TX_DVMA_PKTS, 18544961713Sgirish TDC_STAT_TX_MAX_PEND, 18644961713Sgirish TDC_STAT_END 18744961713Sgirish } nxge_tdc_stats_index_t; 18844961713Sgirish 18944961713Sgirish nxge_kstat_index_t nxge_tdc_stats[] = { 190a3c5bd6dSspeer {TDC_STAT_PACKETS, KSTAT_DATA_UINT64, "tdc_packets"}, 191a3c5bd6dSspeer {TDC_STAT_BYTES, KSTAT_DATA_UINT64, "tdc_bytes"}, 192a3c5bd6dSspeer {TDC_STAT_ERRORS, KSTAT_DATA_UINT64, "tdc_errors"}, 193a3c5bd6dSspeer {TDC_STAT_TX_INITS, KSTAT_DATA_ULONG, "tdc_tx_inits"}, 194a3c5bd6dSspeer {TDC_STAT_TX_NO_BUF, KSTAT_DATA_ULONG, "tdc_tx_no_buf"}, 195a3c5bd6dSspeer {TDC_STAT_MBOX_ERR, KSTAT_DATA_ULONG, "tdc_mbox_err"}, 196a3c5bd6dSspeer {TDC_STAT_PKT_SIZE_ERR, KSTAT_DATA_ULONG, "tdc_pkt_size_err"}, 19744961713Sgirish {TDC_STAT_TX_RING_OFLOW, 198a3c5bd6dSspeer KSTAT_DATA_ULONG, "tdc_tx_ring_oflow"}, 19944961713Sgirish {TDC_STAT_PREF_BUF_ECC_ERR, 200a3c5bd6dSspeer KSTAT_DATA_ULONG, "tdc_pref_buf_err_err"}, 201a3c5bd6dSspeer {TDC_STAT_NACK_PREF, KSTAT_DATA_ULONG, "tdc_nack_pref"}, 202a3c5bd6dSspeer {TDC_STAT_NACK_PKT_RD, KSTAT_DATA_ULONG, "tdc_nack_pkt_rd"}, 20344961713Sgirish {TDC_STAT_CONF_PART_ERR, 204a3c5bd6dSspeer KSTAT_DATA_ULONG, "tdc_conf_part_err"}, 205a3c5bd6dSspeer {TDC_STAT_PKT_PRT_ERR, KSTAT_DATA_ULONG, "tdc_pkt_prt_err"}, 206a3c5bd6dSspeer {TDC_STAT_RESET_FAIL, KSTAT_DATA_ULONG, "tdc_reset_fail"}, 207a3c5bd6dSspeer {TDC_STAT_TX_STARTS, KSTAT_DATA_ULONG, "tdc_tx_starts"}, 208a3c5bd6dSspeer {TDC_STAT_TX_NOCANPUT, KSTAT_DATA_ULONG, "tdc_tx_nocanput"}, 20944961713Sgirish {TDC_STAT_TX_MSGDUP_FAIL, KSTAT_DATA_ULONG, "tdc_tx_msgdup_fail"}, 21044961713Sgirish {TDC_STAT_TX_ALLOCB_FAIL, KSTAT_DATA_ULONG, "tdc_tx_allocb_fail"}, 21144961713Sgirish {TDC_STAT_TX_NO_DESC, KSTAT_DATA_ULONG, "tdc_tx_no_desc"}, 21244961713Sgirish {TDC_STAT_TX_DMA_BIND_FAIL, KSTAT_DATA_ULONG, "tdc_tx_dma_bind_fail"}, 213a3c5bd6dSspeer {TDC_STAT_TX_UFLOW, KSTAT_DATA_ULONG, "tdc_tx_uflow"}, 214a3c5bd6dSspeer {TDC_STAT_TX_HDR_PKTS, KSTAT_DATA_ULONG, "tdc_tx_hdr_pkts"}, 215a3c5bd6dSspeer {TDC_STAT_TX_DDI_PKTS, KSTAT_DATA_ULONG, "tdc_tx_ddi_pkts"}, 216a3c5bd6dSspeer {TDC_STAT_TX_DVMA_PKTS, KSTAT_DATA_ULONG, "tdc_tx_dvma_pkts"}, 217a3c5bd6dSspeer {TDC_STAT_TX_MAX_PEND, KSTAT_DATA_ULONG, "tdc_tx_max_pend"}, 218a3c5bd6dSspeer {TDC_STAT_END, NULL, NULL} 21944961713Sgirish }; 22044961713Sgirish 22144961713Sgirish /* IPP Statistics definitions */ 222a3c5bd6dSspeer typedef enum { 22344961713Sgirish IPP_STAT_EOP_MISS = 0, 22444961713Sgirish IPP_STAT_SOP_MISS, 22544961713Sgirish IPP_STAT_DFIFO_UE, 22644961713Sgirish IPP_STAT_ECC_ERR, 227846a903dSml IPP_STAT_PFIFO_PERR, 22844961713Sgirish IPP_STAT_PFIFO_OVER, 22944961713Sgirish IPP_STAT_PFIFO_UND, 23044961713Sgirish IPP_STAT_BAD_CS, 23144961713Sgirish IPP_STAT_BAD_DIS, 23244961713Sgirish IPP_STAT_END 23344961713Sgirish } nxge_ipp_stat_index_t; 23444961713Sgirish 23544961713Sgirish nxge_kstat_index_t nxge_ipp_stats[] = { 236a3c5bd6dSspeer {IPP_STAT_EOP_MISS, KSTAT_DATA_ULONG, "rxipp_eop_miss"}, 237a3c5bd6dSspeer {IPP_STAT_SOP_MISS, KSTAT_DATA_ULONG, "rxipp_sop_miss"}, 238a3c5bd6dSspeer {IPP_STAT_DFIFO_UE, KSTAT_DATA_ULONG, "rxipp_dfifo_ue"}, 239a3c5bd6dSspeer {IPP_STAT_ECC_ERR, KSTAT_DATA_ULONG, "rxipp_ecc_err"}, 240846a903dSml {IPP_STAT_PFIFO_PERR, KSTAT_DATA_ULONG, "rxipp_pfifo_perr"}, 241a3c5bd6dSspeer {IPP_STAT_PFIFO_OVER, KSTAT_DATA_ULONG, "rxipp_pfifo_over"}, 242a3c5bd6dSspeer {IPP_STAT_PFIFO_UND, KSTAT_DATA_ULONG, "rxipp_pfifo_und"}, 243a3c5bd6dSspeer {IPP_STAT_BAD_CS, KSTAT_DATA_ULONG, "rxipp_bad_cs"}, 244a3c5bd6dSspeer {IPP_STAT_BAD_DIS, KSTAT_DATA_ULONG, "rxipp_bad_dis"}, 245a3c5bd6dSspeer {IPP_STAT_END, NULL, NULL} 24644961713Sgirish }; 24744961713Sgirish 24844961713Sgirish /* TXC Statistics definitions */ 249a3c5bd6dSspeer typedef enum { 25044961713Sgirish TXC_STAT_PKT_STUFFED = 0, 25144961713Sgirish TXC_STAT_PKT_XMIT, 25244961713Sgirish TXC_STAT_RO_CORRECT_ERR, 25344961713Sgirish TXC_STAT_RO_UNCORRECT_ERR, 25444961713Sgirish TXC_STAT_SF_CORRECT_ERR, 25544961713Sgirish TXC_STAT_SF_UNCORRECT_ERR, 25644961713Sgirish TXC_STAT_ADDRESS_FAILED, 25744961713Sgirish TXC_STAT_DMA_FAILED, 25844961713Sgirish TXC_STAT_LENGTH_FAILED, 25944961713Sgirish TXC_STAT_PKT_ASSY_DEAD, 26044961713Sgirish TXC_STAT_REORDER_ERR, 26144961713Sgirish TXC_STAT_END 26244961713Sgirish } nxge_txc_stat_index_t; 26344961713Sgirish 26444961713Sgirish nxge_kstat_index_t nxge_txc_stats[] = { 265a3c5bd6dSspeer {TXC_STAT_PKT_STUFFED, KSTAT_DATA_ULONG, "txc_pkt_stuffed"}, 266a3c5bd6dSspeer {TXC_STAT_PKT_XMIT, KSTAT_DATA_ULONG, "txc_pkt_xmit"}, 267a3c5bd6dSspeer {TXC_STAT_RO_CORRECT_ERR, KSTAT_DATA_ULONG, "txc_ro_correct_err"}, 268a3c5bd6dSspeer {TXC_STAT_RO_UNCORRECT_ERR, KSTAT_DATA_ULONG, "txc_ro_uncorrect_err"}, 269a3c5bd6dSspeer {TXC_STAT_SF_CORRECT_ERR, KSTAT_DATA_ULONG, "txc_sf_correct_err"}, 270a3c5bd6dSspeer {TXC_STAT_SF_UNCORRECT_ERR, KSTAT_DATA_ULONG, "txc_sf_uncorrect_err"}, 271a3c5bd6dSspeer {TXC_STAT_ADDRESS_FAILED, KSTAT_DATA_ULONG, "txc_address_failed"}, 272a3c5bd6dSspeer {TXC_STAT_DMA_FAILED, KSTAT_DATA_ULONG, "txc_dma_failed"}, 273a3c5bd6dSspeer {TXC_STAT_LENGTH_FAILED, KSTAT_DATA_ULONG, "txc_length_failed"}, 274a3c5bd6dSspeer {TXC_STAT_PKT_ASSY_DEAD, KSTAT_DATA_ULONG, "txc_pkt_assy_dead"}, 275a3c5bd6dSspeer {TXC_STAT_REORDER_ERR, KSTAT_DATA_ULONG, "txc_reorder_err"}, 276a3c5bd6dSspeer {TXC_STAT_END, NULL, NULL} 27744961713Sgirish }; 27844961713Sgirish 279a3c5bd6dSspeer typedef enum { 28044961713Sgirish XMAC_STAT_TX_FRAME_CNT = 0, 28144961713Sgirish XMAC_STAT_TX_UNDERFLOW_ERR, 28244961713Sgirish XMAC_STAT_TX_MAXPKTSIZE_ERR, 28344961713Sgirish XMAC_STAT_TX_OVERFLOW_ERR, 28444961713Sgirish XMAC_STAT_TX_FIFO_XFR_ERR, 28544961713Sgirish XMAC_STAT_TX_BYTE_CNT, 28644961713Sgirish XMAC_STAT_RX_FRAME_CNT, 28744961713Sgirish XMAC_STAT_RX_UNDERFLOW_ERR, 28844961713Sgirish XMAC_STAT_RX_OVERFLOW_ERR, 28944961713Sgirish XMAC_STAT_RX_CRC_ERR_CNT, 29044961713Sgirish XMAC_STAT_RX_LEN_ERR_CNT, 29144961713Sgirish XMAC_STAT_RX_VIOL_ERR_CNT, 29244961713Sgirish XMAC_STAT_RX_BYTE_CNT, 29344961713Sgirish XMAC_STAT_RX_HIST1_CNT, 29444961713Sgirish XMAC_STAT_RX_HIST2_CNT, 29544961713Sgirish XMAC_STAT_RX_HIST3_CNT, 29644961713Sgirish XMAC_STAT_RX_HIST4_CNT, 29744961713Sgirish XMAC_STAT_RX_HIST5_CNT, 29844961713Sgirish XMAC_STAT_RX_HIST6_CNT, 29944961713Sgirish XMAC_STAT_RX_HIST7_CNT, 30044961713Sgirish XMAC_STAT_RX_BROADCAST_CNT, 30144961713Sgirish XMAC_STAT_RX_MULT_CNT, 30244961713Sgirish XMAC_STAT_RX_FRAG_CNT, 30344961713Sgirish XMAC_STAT_RX_FRAME_ALIGN_ERR_CNT, 30444961713Sgirish XMAC_STAT_RX_LINKFAULT_ERR_CNT, 30544961713Sgirish XMAC_STAT_RX_REMOTEFAULT_ERR, 30644961713Sgirish XMAC_STAT_RX_LOCALFAULT_ERR, 30744961713Sgirish XMAC_STAT_RX_PAUSE_CNT, 30844961713Sgirish XMAC_STAT_TX_PAUSE_STATE, 30944961713Sgirish XMAC_STAT_TX_NOPAUSE_STATE, 31044961713Sgirish XMAC_STAT_XPCS_DESKEW_ERR_CNT, 31114ea4bb7Ssd #ifdef NXGE_DEBUG_SYMBOL_ERR 31244961713Sgirish XMAC_STAT_XPCS_SYMBOL_L0_ERR_CNT, 31344961713Sgirish XMAC_STAT_XPCS_SYMBOL_L1_ERR_CNT, 31444961713Sgirish XMAC_STAT_XPCS_SYMBOL_L2_ERR_CNT, 31544961713Sgirish XMAC_STAT_XPCS_SYMBOL_L3_ERR_CNT, 31614ea4bb7Ssd #endif 31744961713Sgirish XMAC_STAT_END 31844961713Sgirish } nxge_xmac_stat_index_t; 31944961713Sgirish 32044961713Sgirish nxge_kstat_index_t nxge_xmac_stats[] = { 321a3c5bd6dSspeer {XMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_ULONG, "txmac_frame_cnt"}, 322a3c5bd6dSspeer {XMAC_STAT_TX_UNDERFLOW_ERR, KSTAT_DATA_ULONG, "tmac_underflow_err"}, 323a3c5bd6dSspeer {XMAC_STAT_TX_MAXPKTSIZE_ERR, KSTAT_DATA_ULONG, "txmac_maxpktsize_err"}, 324a3c5bd6dSspeer {XMAC_STAT_TX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "txmac_overflow_err"}, 325a3c5bd6dSspeer {XMAC_STAT_TX_FIFO_XFR_ERR, KSTAT_DATA_ULONG, "txmac_fifo_xfr_err"}, 326a3c5bd6dSspeer {XMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_ULONG, "txmac_byte_cnt"}, 327a3c5bd6dSspeer {XMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_ULONG, "rxmac_frame_cnt"}, 328a3c5bd6dSspeer {XMAC_STAT_RX_UNDERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_underflow_err"}, 329a3c5bd6dSspeer {XMAC_STAT_RX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_overflow_err"}, 330a3c5bd6dSspeer {XMAC_STAT_RX_CRC_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_crc_err"}, 331a3c5bd6dSspeer {XMAC_STAT_RX_LEN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_length_err"}, 33244961713Sgirish {XMAC_STAT_RX_VIOL_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_code_violations"}, 333a3c5bd6dSspeer {XMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_ULONG, "rxmac_byte_cnt"}, 334a3c5bd6dSspeer {XMAC_STAT_RX_HIST1_CNT, KSTAT_DATA_ULONG, "rxmac_64_cnt"}, 335a3c5bd6dSspeer {XMAC_STAT_RX_HIST2_CNT, KSTAT_DATA_ULONG, "rxmac_65_127_cnt"}, 336a3c5bd6dSspeer {XMAC_STAT_RX_HIST3_CNT, KSTAT_DATA_ULONG, "rxmac_128_255_cnt"}, 337a3c5bd6dSspeer {XMAC_STAT_RX_HIST4_CNT, KSTAT_DATA_ULONG, "rxmac_256_511_cnt"}, 338a3c5bd6dSspeer {XMAC_STAT_RX_HIST5_CNT, KSTAT_DATA_ULONG, "rxmac_512_1023_cnt"}, 339a3c5bd6dSspeer {XMAC_STAT_RX_HIST6_CNT, KSTAT_DATA_ULONG, "rxmac_1024_1522_cnt"}, 340a3c5bd6dSspeer {XMAC_STAT_RX_HIST7_CNT, KSTAT_DATA_ULONG, "rxmac_jumbo_cnt"}, 341a3c5bd6dSspeer {XMAC_STAT_RX_BROADCAST_CNT, KSTAT_DATA_ULONG, "rxmac_broadcast_cnt"}, 342a3c5bd6dSspeer {XMAC_STAT_RX_MULT_CNT, KSTAT_DATA_ULONG, "rxmac_multicast_cnt"}, 343a3c5bd6dSspeer {XMAC_STAT_RX_FRAG_CNT, KSTAT_DATA_ULONG, "rxmac_fragment_cnt"}, 34444961713Sgirish {XMAC_STAT_RX_FRAME_ALIGN_ERR_CNT, 345a3c5bd6dSspeer KSTAT_DATA_ULONG, "rxmac_alignment_err"}, 34644961713Sgirish {XMAC_STAT_RX_LINKFAULT_ERR_CNT, 347a3c5bd6dSspeer KSTAT_DATA_ULONG, "rxmac_linkfault_errs"}, 34844961713Sgirish {XMAC_STAT_RX_REMOTEFAULT_ERR, 349a3c5bd6dSspeer KSTAT_DATA_ULONG, "rxmac_remote_faults"}, 35044961713Sgirish {XMAC_STAT_RX_LOCALFAULT_ERR, 351a3c5bd6dSspeer KSTAT_DATA_ULONG, "rxmac_local_faults"}, 352a3c5bd6dSspeer {XMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_ULONG, "rxmac_pause_cnt"}, 353a3c5bd6dSspeer {XMAC_STAT_TX_PAUSE_STATE, KSTAT_DATA_ULONG, "txmac_pause_state"}, 354a3c5bd6dSspeer {XMAC_STAT_TX_NOPAUSE_STATE, KSTAT_DATA_ULONG, "txmac_nopause_state"}, 35544961713Sgirish {XMAC_STAT_XPCS_DESKEW_ERR_CNT, 356a3c5bd6dSspeer KSTAT_DATA_ULONG, "xpcs_deskew_err_cnt"}, 35714ea4bb7Ssd #ifdef NXGE_DEBUG_SYMBOL_ERR 35844961713Sgirish {XMAC_STAT_XPCS_SYMBOL_L0_ERR_CNT, 359a3c5bd6dSspeer KSTAT_DATA_ULONG, "xpcs_ln0_symbol_err_cnt"}, 36044961713Sgirish {XMAC_STAT_XPCS_SYMBOL_L1_ERR_CNT, 361a3c5bd6dSspeer KSTAT_DATA_ULONG, "xpcs_ln1_symbol_err_cnt"}, 36244961713Sgirish {XMAC_STAT_XPCS_SYMBOL_L2_ERR_CNT, 363a3c5bd6dSspeer KSTAT_DATA_ULONG, "xpcs_ln2_symbol_err_cnt"}, 36444961713Sgirish {XMAC_STAT_XPCS_SYMBOL_L3_ERR_CNT, 365a3c5bd6dSspeer KSTAT_DATA_ULONG, "xpcs_ln3_symbol_err_cnt"}, 36614ea4bb7Ssd #endif 367a3c5bd6dSspeer {XMAC_STAT_END, NULL, NULL} 36844961713Sgirish }; 36944961713Sgirish 370a3c5bd6dSspeer typedef enum { 37144961713Sgirish BMAC_STAT_TX_FRAME_CNT = 0, 37244961713Sgirish BMAC_STAT_TX_UNDERRUN_ERR, 37344961713Sgirish BMAC_STAT_TX_MAX_PKT_ERR, 37444961713Sgirish BMAC_STAT_TX_BYTE_CNT, 37544961713Sgirish BMAC_STAT_RX_FRAME_CNT, 37644961713Sgirish BMAC_STAT_RX_BYTE_CNT, 37744961713Sgirish BMAC_STAT_RX_OVERFLOW_ERR, 37844961713Sgirish BMAC_STAT_RX_ALIGN_ERR_CNT, 37944961713Sgirish BMAC_STAT_RX_CRC_ERR_CNT, 38044961713Sgirish BMAC_STAT_RX_LEN_ERR_CNT, 38144961713Sgirish BMAC_STAT_RX_VIOL_ERR_CNT, 38244961713Sgirish BMAC_STAT_RX_PAUSE_CNT, 38344961713Sgirish BMAC_STAT_RX_PAUSE_STATE, 38444961713Sgirish BMAC_STAT_RX_NOPAUSE_STATE, 38544961713Sgirish BMAC_STAT_END 38644961713Sgirish } nxge_bmac_stat_index_t; 38744961713Sgirish 38844961713Sgirish nxge_kstat_index_t nxge_bmac_stats[] = { 389a3c5bd6dSspeer {BMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_ULONG, "txmac_frame_cnt"}, 390a3c5bd6dSspeer {BMAC_STAT_TX_UNDERRUN_ERR, KSTAT_DATA_ULONG, "txmac_underrun_err"}, 391a3c5bd6dSspeer {BMAC_STAT_TX_MAX_PKT_ERR, KSTAT_DATA_ULONG, "txmac_max_pkt_err"}, 392a3c5bd6dSspeer {BMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_ULONG, "txmac_byte_cnt"}, 393a3c5bd6dSspeer {BMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_ULONG, "rxmac_frame_cnt"}, 394a3c5bd6dSspeer {BMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_ULONG, "rxmac_byte_cnt"}, 395a3c5bd6dSspeer {BMAC_STAT_RX_OVERFLOW_ERR, KSTAT_DATA_ULONG, "rxmac_overflow_err"}, 396a3c5bd6dSspeer {BMAC_STAT_RX_ALIGN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_align_err_cnt"}, 397a3c5bd6dSspeer {BMAC_STAT_RX_CRC_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_crc_err_cnt"}, 398a3c5bd6dSspeer {BMAC_STAT_RX_LEN_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_len_err_cnt"}, 399a3c5bd6dSspeer {BMAC_STAT_RX_VIOL_ERR_CNT, KSTAT_DATA_ULONG, "rxmac_viol_err_cnt"}, 400a3c5bd6dSspeer {BMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_ULONG, "rxmac_pause_cnt"}, 401a3c5bd6dSspeer {BMAC_STAT_RX_PAUSE_STATE, KSTAT_DATA_ULONG, "txmac_pause_state"}, 402a3c5bd6dSspeer {BMAC_STAT_RX_NOPAUSE_STATE, KSTAT_DATA_ULONG, "tx_nopause_state"}, 403a3c5bd6dSspeer {BMAC_STAT_END, NULL, NULL} 40444961713Sgirish }; 40544961713Sgirish 406a3c5bd6dSspeer typedef enum { 40744961713Sgirish ZCP_STAT_ERRORS, 40844961713Sgirish ZCP_STAT_INITS, 40944961713Sgirish ZCP_STAT_RRFIFO_UNDERRUN, 41044961713Sgirish ZCP_STAT_RRFIFO_OVERRUN, 41144961713Sgirish ZCP_STAT_RSPFIFO_UNCORR_ERR, 41244961713Sgirish ZCP_STAT_BUFFER_OVERFLOW, 41344961713Sgirish ZCP_STAT_STAT_TBL_PERR, 41444961713Sgirish ZCP_STAT_DYN_TBL_PERR, 41544961713Sgirish ZCP_STAT_BUF_TBL_PERR, 41644961713Sgirish ZCP_STAT_TT_PROGRAM_ERR, 41744961713Sgirish ZCP_STAT_RSP_TT_INDEX_ERR, 41844961713Sgirish ZCP_STAT_SLV_TT_INDEX_ERR, 41944961713Sgirish ZCP_STAT_ZCP_TT_INDEX_ERR, 42044961713Sgirish ZCP_STAT_ZCP_ACCESS_FAIL, 42144961713Sgirish ZCP_CFIFO_ECC, 42244961713Sgirish ZCP_STAT_END 42344961713Sgirish } nxge_zcp_stat_index_t; 42444961713Sgirish 42544961713Sgirish nxge_kstat_index_t nxge_zcp_stats[] = { 426a3c5bd6dSspeer {ZCP_STAT_ERRORS, KSTAT_DATA_ULONG, "zcp_erros"}, 427a3c5bd6dSspeer {ZCP_STAT_INITS, KSTAT_DATA_ULONG, "zcp_inits"}, 428a3c5bd6dSspeer {ZCP_STAT_RRFIFO_UNDERRUN, KSTAT_DATA_ULONG, "zcp_rrfifo_underrun"}, 429a3c5bd6dSspeer {ZCP_STAT_RRFIFO_OVERRUN, KSTAT_DATA_ULONG, "zcp_rrfifo_overrun"}, 43044961713Sgirish {ZCP_STAT_RSPFIFO_UNCORR_ERR, KSTAT_DATA_ULONG, 431a3c5bd6dSspeer "zcp_rspfifo_uncorr_err"}, 432a3c5bd6dSspeer {ZCP_STAT_BUFFER_OVERFLOW, KSTAT_DATA_ULONG, "zcp_buffer_overflow"}, 433a3c5bd6dSspeer {ZCP_STAT_STAT_TBL_PERR, KSTAT_DATA_ULONG, "zcp_stat_tbl_perr"}, 434a3c5bd6dSspeer {ZCP_STAT_DYN_TBL_PERR, KSTAT_DATA_ULONG, "zcp_dyn_tbl_perr"}, 435a3c5bd6dSspeer {ZCP_STAT_BUF_TBL_PERR, KSTAT_DATA_ULONG, "zcp_buf_tbl_perr"}, 436a3c5bd6dSspeer {ZCP_STAT_TT_PROGRAM_ERR, KSTAT_DATA_ULONG, "zcp_tt_program_err"}, 437a3c5bd6dSspeer {ZCP_STAT_RSP_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_rsp_tt_index_err"}, 438a3c5bd6dSspeer {ZCP_STAT_SLV_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_slv_tt_index_err"}, 439a3c5bd6dSspeer {ZCP_STAT_ZCP_TT_INDEX_ERR, KSTAT_DATA_ULONG, "zcp_zcp_tt_index_err"}, 440a3c5bd6dSspeer {ZCP_STAT_ZCP_ACCESS_FAIL, KSTAT_DATA_ULONG, "zcp_access_fail"}, 441a3c5bd6dSspeer {ZCP_STAT_ZCP_ACCESS_FAIL, KSTAT_DATA_ULONG, "zcp_cfifo_ecc"}, 442a3c5bd6dSspeer {ZCP_STAT_END, NULL, NULL} 44344961713Sgirish }; 44444961713Sgirish 445a3c5bd6dSspeer typedef enum { 44644961713Sgirish FFLP_STAT_TCAM_PERR, 44744961713Sgirish FFLP_STAT_TCAM_ECC_ERR, 44844961713Sgirish FFLP_STAT_VLAN_PERR, 44944961713Sgirish FFLP_STAT_HASH_LOOKUP_ERR, 45044961713Sgirish FFLP_STAT_HASH_P0_PIO_ERR, 45144961713Sgirish FFLP_STAT_HASH_P1_PIO_ERR, 45244961713Sgirish FFLP_STAT_HASH_P2_PIO_ERR, 45344961713Sgirish FFLP_STAT_HASH_P3_PIO_ERR, 45444961713Sgirish FFLP_STAT_HASH_P4_PIO_ERR, 45544961713Sgirish FFLP_STAT_HASH_P5_PIO_ERR, 45644961713Sgirish FFLP_STAT_HASH_P6_PIO_ERR, 45744961713Sgirish FFLP_STAT_HASH_P7_PIO_ERR, 45844961713Sgirish FFLP_STAT_END 45944961713Sgirish } nxge_fflp_stat_index_t; 46044961713Sgirish 46144961713Sgirish nxge_kstat_index_t nxge_fflp_stats[] = { 462a3c5bd6dSspeer {FFLP_STAT_TCAM_PERR, KSTAT_DATA_ULONG, "fflp_tcam_perr"}, 463a3c5bd6dSspeer {FFLP_STAT_TCAM_ECC_ERR, KSTAT_DATA_ULONG, "fflp_tcam_ecc_err"}, 464a3c5bd6dSspeer {FFLP_STAT_VLAN_PERR, KSTAT_DATA_ULONG, "fflp_vlan_perr"}, 465a3c5bd6dSspeer {FFLP_STAT_HASH_LOOKUP_ERR, KSTAT_DATA_ULONG, "fflp_hash_lookup_err"}, 466a3c5bd6dSspeer {FFLP_STAT_HASH_P0_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p0_pio_err"}, 467a3c5bd6dSspeer {FFLP_STAT_HASH_P1_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p1_pio_err"}, 468a3c5bd6dSspeer {FFLP_STAT_HASH_P2_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p2_pio_err"}, 469a3c5bd6dSspeer {FFLP_STAT_HASH_P3_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p3_pio_err"}, 470a3c5bd6dSspeer {FFLP_STAT_HASH_P4_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p4_pio_err"}, 471a3c5bd6dSspeer {FFLP_STAT_HASH_P5_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p5_pio_err"}, 472a3c5bd6dSspeer {FFLP_STAT_HASH_P6_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p6_pio_err"}, 473a3c5bd6dSspeer {FFLP_STAT_HASH_P7_PIO_ERR, KSTAT_DATA_ULONG, "fflp_hash_p7_pio_err"}, 474a3c5bd6dSspeer {FFLP_STAT_END, NULL, NULL} 47544961713Sgirish }; 47644961713Sgirish 47744961713Sgirish typedef enum { 47844961713Sgirish MMAC_MAX_ADDR, 47944961713Sgirish MMAC_AVAIL_ADDR, 48044961713Sgirish MMAC_ADDR_POOL1, 48144961713Sgirish MMAC_ADDR_POOL2, 48244961713Sgirish MMAC_ADDR_POOL3, 48344961713Sgirish MMAC_ADDR_POOL4, 48444961713Sgirish MMAC_ADDR_POOL5, 48544961713Sgirish MMAC_ADDR_POOL6, 48644961713Sgirish MMAC_ADDR_POOL7, 48744961713Sgirish MMAC_ADDR_POOL8, 48844961713Sgirish MMAC_ADDR_POOL9, 48944961713Sgirish MMAC_ADDR_POOL10, 49044961713Sgirish MMAC_ADDR_POOL11, 49144961713Sgirish MMAC_ADDR_POOL12, 49244961713Sgirish MMAC_ADDR_POOL13, 49344961713Sgirish MMAC_ADDR_POOL14, 49444961713Sgirish MMAC_ADDR_POOL15, 49544961713Sgirish MMAC_ADDR_POOL16, 49644961713Sgirish MMAC_STATS_END 49744961713Sgirish } nxge_mmac_stat_index_t; 49844961713Sgirish 49944961713Sgirish nxge_kstat_index_t nxge_mmac_stats[] = { 50058324dfcSspeer {MMAC_MAX_ADDR, KSTAT_DATA_UINT64, "max_mmac_addr"}, 50158324dfcSspeer {MMAC_AVAIL_ADDR, KSTAT_DATA_UINT64, "avail_mmac_addr"}, 50244961713Sgirish {MMAC_ADDR_POOL1, KSTAT_DATA_UINT64, "mmac_addr_1"}, 50344961713Sgirish {MMAC_ADDR_POOL2, KSTAT_DATA_UINT64, "mmac_addr_2"}, 50444961713Sgirish {MMAC_ADDR_POOL3, KSTAT_DATA_UINT64, "mmac_addr_3"}, 50544961713Sgirish {MMAC_ADDR_POOL4, KSTAT_DATA_UINT64, "mmac_addr_4"}, 50644961713Sgirish {MMAC_ADDR_POOL5, KSTAT_DATA_UINT64, "mmac_addr_5"}, 50744961713Sgirish {MMAC_ADDR_POOL6, KSTAT_DATA_UINT64, "mmac_addr_6"}, 50844961713Sgirish {MMAC_ADDR_POOL7, KSTAT_DATA_UINT64, "mmac_addr_7"}, 50944961713Sgirish {MMAC_ADDR_POOL8, KSTAT_DATA_UINT64, "mmac_addr_8"}, 51044961713Sgirish {MMAC_ADDR_POOL9, KSTAT_DATA_UINT64, "mmac_addr_9"}, 51144961713Sgirish {MMAC_ADDR_POOL10, KSTAT_DATA_UINT64, "mmac_addr_10"}, 51244961713Sgirish {MMAC_ADDR_POOL11, KSTAT_DATA_UINT64, "mmac_addr_11"}, 51344961713Sgirish {MMAC_ADDR_POOL12, KSTAT_DATA_UINT64, "mmac_addr_12"}, 51444961713Sgirish {MMAC_ADDR_POOL13, KSTAT_DATA_UINT64, "mmac_addr_13"}, 51544961713Sgirish {MMAC_ADDR_POOL14, KSTAT_DATA_UINT64, "mmac_addr_14"}, 51644961713Sgirish {MMAC_ADDR_POOL15, KSTAT_DATA_UINT64, "mmac_addr_15"}, 51744961713Sgirish {MMAC_ADDR_POOL16, KSTAT_DATA_UINT64, "mmac_addr_16"}, 51844961713Sgirish {MMAC_STATS_END, NULL, NULL}, 51944961713Sgirish }; 52044961713Sgirish 521a3c5bd6dSspeer /* ARGSUSED */ 52244961713Sgirish int 52344961713Sgirish nxge_tdc_stat_update(kstat_t *ksp, int rw) 52444961713Sgirish { 525a3c5bd6dSspeer p_nxge_t nxgep; 526a3c5bd6dSspeer p_nxge_tdc_kstat_t tdc_kstatsp; 527a3c5bd6dSspeer p_nxge_tx_ring_stats_t statsp; 528a3c5bd6dSspeer int channel; 529a3c5bd6dSspeer char *ch_name, *end; 53044961713Sgirish 53144961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 53244961713Sgirish if (nxgep == NULL) 53344961713Sgirish return (-1); 534a3c5bd6dSspeer 53544961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rxstat_update")); 53644961713Sgirish 53744961713Sgirish ch_name = ksp->ks_name; 53844961713Sgirish ch_name += strlen(TDC_NAME_FORMAT1); 53944961713Sgirish channel = mi_strtol(ch_name, &end, 10); 54044961713Sgirish 54144961713Sgirish tdc_kstatsp = (p_nxge_tdc_kstat_t)ksp->ks_data; 54244961713Sgirish statsp = (p_nxge_tx_ring_stats_t)&nxgep->statsp->tdc_stats[channel]; 54344961713Sgirish 54444961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, 545*71cd5202Smisaki "nxge_tdc_stat_update data $%p statsp $%p channel %d", 546*71cd5202Smisaki ksp->ks_data, statsp, channel)); 54744961713Sgirish 54844961713Sgirish if (rw == KSTAT_WRITE) { 54944961713Sgirish statsp->opackets = tdc_kstatsp->opackets.value.ull; 55044961713Sgirish statsp->obytes = tdc_kstatsp->obytes.value.ull; 55144961713Sgirish statsp->oerrors = tdc_kstatsp->oerrors.value.ull; 55244961713Sgirish statsp->mbox_err = tdc_kstatsp->mbox_err.value.ul; 55344961713Sgirish statsp->pkt_size_err = tdc_kstatsp->pkt_size_err.value.ul; 55444961713Sgirish statsp->tx_ring_oflow = tdc_kstatsp->tx_ring_oflow.value.ul; 55544961713Sgirish statsp->pre_buf_par_err = 556*71cd5202Smisaki tdc_kstatsp->pref_buf_ecc_err.value.ul; 55744961713Sgirish statsp->nack_pref = tdc_kstatsp->nack_pref.value.ul; 55844961713Sgirish statsp->nack_pkt_rd = tdc_kstatsp->nack_pkt_rd.value.ul; 55944961713Sgirish statsp->conf_part_err = tdc_kstatsp->conf_part_err.value.ul; 56044961713Sgirish statsp->pkt_part_err = tdc_kstatsp->pkt_prt_err.value.ul; 56144961713Sgirish } else { 56244961713Sgirish tdc_kstatsp->opackets.value.ull = statsp->opackets; 56344961713Sgirish tdc_kstatsp->obytes.value.ull = statsp->obytes; 56444961713Sgirish tdc_kstatsp->oerrors.value.ull = statsp->oerrors; 56544961713Sgirish tdc_kstatsp->tx_hdr_pkts.value.ull = statsp->tx_hdr_pkts; 56644961713Sgirish tdc_kstatsp->tx_ddi_pkts.value.ull = statsp->tx_ddi_pkts; 56744961713Sgirish tdc_kstatsp->tx_dvma_pkts.value.ull = statsp->tx_dvma_pkts; 56844961713Sgirish tdc_kstatsp->tx_max_pend.value.ull = statsp->tx_max_pend; 56944961713Sgirish tdc_kstatsp->mbox_err.value.ul = statsp->mbox_err; 57044961713Sgirish tdc_kstatsp->pkt_size_err.value.ul = statsp->pkt_size_err; 57144961713Sgirish tdc_kstatsp->tx_ring_oflow.value.ul = statsp->tx_ring_oflow; 57244961713Sgirish tdc_kstatsp->pref_buf_ecc_err.value.ul = 573*71cd5202Smisaki statsp->pre_buf_par_err; 57444961713Sgirish tdc_kstatsp->nack_pref.value.ul = statsp->nack_pref; 57544961713Sgirish tdc_kstatsp->nack_pkt_rd.value.ul = statsp->nack_pkt_rd; 57644961713Sgirish tdc_kstatsp->conf_part_err.value.ul = statsp->conf_part_err; 57744961713Sgirish tdc_kstatsp->pkt_prt_err.value.ul = statsp->pkt_part_err; 57844961713Sgirish tdc_kstatsp->tx_starts.value.ul = statsp->tx_starts; 57944961713Sgirish tdc_kstatsp->tx_nocanput.value.ul = statsp->tx_nocanput; 58044961713Sgirish tdc_kstatsp->tx_msgdup_fail.value.ul = statsp->tx_msgdup_fail; 58144961713Sgirish tdc_kstatsp->tx_allocb_fail.value.ul = statsp->tx_allocb_fail; 58244961713Sgirish tdc_kstatsp->tx_no_desc.value.ul = statsp->tx_no_desc; 58344961713Sgirish tdc_kstatsp->tx_dma_bind_fail.value.ul = 584*71cd5202Smisaki statsp->tx_dma_bind_fail; 58544961713Sgirish } 58644961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_tdc_stat_update")); 58744961713Sgirish return (0); 58844961713Sgirish } 58944961713Sgirish 590a3c5bd6dSspeer /* ARGSUSED */ 59144961713Sgirish int 59244961713Sgirish nxge_rdc_stat_update(kstat_t *ksp, int rw) 59344961713Sgirish { 594a3c5bd6dSspeer p_nxge_t nxgep; 595a3c5bd6dSspeer p_nxge_rdc_kstat_t rdc_kstatsp; 596a3c5bd6dSspeer p_nxge_rx_ring_stats_t statsp; 597a3c5bd6dSspeer int channel; 59844961713Sgirish char *ch_name, *end; 59944961713Sgirish 60044961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 60144961713Sgirish if (nxgep == NULL) 60244961713Sgirish return (-1); 603a3c5bd6dSspeer 60444961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rdc_stat_update")); 60544961713Sgirish 60644961713Sgirish ch_name = ksp->ks_name; 60744961713Sgirish ch_name += strlen(RDC_NAME_FORMAT1); 60844961713Sgirish channel = mi_strtol(ch_name, &end, 10); 60944961713Sgirish 61044961713Sgirish rdc_kstatsp = (p_nxge_rdc_kstat_t)ksp->ks_data; 61144961713Sgirish statsp = (p_nxge_rx_ring_stats_t)&nxgep->statsp->rdc_stats[channel]; 61244961713Sgirish 61344961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, 614*71cd5202Smisaki "nxge_rdc_stat_update $%p statsp $%p channel %d", 615*71cd5202Smisaki ksp->ks_data, statsp, channel)); 61644961713Sgirish 61744961713Sgirish if (rw == KSTAT_WRITE) { 61844961713Sgirish statsp->dcf_err = rdc_kstatsp->dcf_err.value.ul; 61944961713Sgirish statsp->rcr_ack_err = rdc_kstatsp->rcr_ack_err.value.ul; 62044961713Sgirish statsp->dc_fifo_err = rdc_kstatsp->dc_fifoflow_err.value.ul; 62144961713Sgirish statsp->rcr_sha_par = rdc_kstatsp->rcr_sha_par_err.value.ul; 62244961713Sgirish statsp->rbr_pre_par = rdc_kstatsp->rbr_pre_par_err.value.ul; 62344961713Sgirish statsp->wred_drop = rdc_kstatsp->wred_drop.value.ul; 62444961713Sgirish statsp->rbr_pre_empty = rdc_kstatsp->rbr_pre_emty.value.ul; 62544961713Sgirish statsp->rcr_shadow_full = rdc_kstatsp->rcr_shadow_full.value.ul; 62644961713Sgirish statsp->rx_rbr_tmout = rdc_kstatsp->rbr_tmout.value.ul; 62744961713Sgirish statsp->rsp_cnt_err = rdc_kstatsp->rsp_cnt_err.value.ul; 62844961713Sgirish statsp->byte_en_bus = rdc_kstatsp->byte_en_bus.value.ul; 62944961713Sgirish statsp->rsp_dat_err = rdc_kstatsp->rsp_dat_err.value.ul; 6304202ea4bSsbehera statsp->pkt_too_long_err = 6314202ea4bSsbehera rdc_kstatsp->pkt_too_long_err.value.ul; 63244961713Sgirish statsp->l2_err = rdc_kstatsp->compl_l2_err.value.ul; 63344961713Sgirish statsp->l4_cksum_err = rdc_kstatsp->compl_l4_cksum_err.value.ul; 63444961713Sgirish statsp->fflp_soft_err = 635*71cd5202Smisaki rdc_kstatsp->compl_fflp_soft_err.value.ul; 63644961713Sgirish statsp->zcp_soft_err = rdc_kstatsp->compl_zcp_soft_err.value.ul; 63744961713Sgirish statsp->config_err = rdc_kstatsp->config_err.value.ul; 63844961713Sgirish statsp->rcrincon = rdc_kstatsp->rcrincon.value.ul; 63944961713Sgirish statsp->rcrfull = rdc_kstatsp->rcrfull.value.ul; 64044961713Sgirish statsp->rbr_empty = rdc_kstatsp->rbr_empty.value.ul; 64144961713Sgirish statsp->rbrfull = rdc_kstatsp->rbrfull.value.ul; 64244961713Sgirish statsp->rbrlogpage = rdc_kstatsp->rbrlogpage.value.ul; 64344961713Sgirish statsp->cfiglogpage = rdc_kstatsp->cfiglogpage.value.ul; 64444961713Sgirish } else { 64544961713Sgirish rdc_kstatsp->ipackets.value.ull = statsp->ipackets; 64644961713Sgirish rdc_kstatsp->rbytes.value.ull = statsp->ibytes; 64744961713Sgirish rdc_kstatsp->errors.value.ul = statsp->ierrors; 64844961713Sgirish rdc_kstatsp->dcf_err.value.ul = statsp->dcf_err; 64944961713Sgirish rdc_kstatsp->rcr_ack_err.value.ul = statsp->rcr_ack_err; 65044961713Sgirish rdc_kstatsp->dc_fifoflow_err.value.ul = statsp->dc_fifo_err; 65144961713Sgirish rdc_kstatsp->rcr_sha_par_err.value.ul = statsp->rcr_sha_par; 65244961713Sgirish rdc_kstatsp->rbr_pre_par_err.value.ul = statsp->rbr_pre_par; 653a3c5bd6dSspeer rdc_kstatsp->wred_drop.value.ul = statsp->wred_drop; 654a3c5bd6dSspeer rdc_kstatsp->port_drop_pkt.value.ul = statsp->port_drop_pkt; 65544961713Sgirish rdc_kstatsp->rbr_pre_emty.value.ul = statsp->rbr_pre_empty; 65644961713Sgirish rdc_kstatsp->rcr_shadow_full.value.ul = statsp->rcr_shadow_full; 65744961713Sgirish rdc_kstatsp->rbr_tmout.value.ul = statsp->rx_rbr_tmout; 65844961713Sgirish rdc_kstatsp->rsp_cnt_err.value.ul = statsp->rsp_cnt_err; 65944961713Sgirish rdc_kstatsp->byte_en_bus.value.ul = statsp->byte_en_bus; 66044961713Sgirish rdc_kstatsp->rsp_dat_err.value.ul = statsp->rsp_dat_err; 6614202ea4bSsbehera rdc_kstatsp->pkt_too_long_err.value.ul = 6624202ea4bSsbehera statsp->pkt_too_long_err; 66344961713Sgirish rdc_kstatsp->compl_l2_err.value.ul = statsp->l2_err; 66444961713Sgirish rdc_kstatsp->compl_l4_cksum_err.value.ul = statsp->l4_cksum_err; 66544961713Sgirish rdc_kstatsp->compl_fflp_soft_err.value.ul = 666*71cd5202Smisaki statsp->fflp_soft_err; 66744961713Sgirish rdc_kstatsp->compl_zcp_soft_err.value.ul = statsp->zcp_soft_err; 66844961713Sgirish rdc_kstatsp->config_err.value.ul = statsp->config_err; 66944961713Sgirish rdc_kstatsp->rcrincon.value.ul = statsp->rcrincon; 67044961713Sgirish rdc_kstatsp->rcrfull.value.ul = statsp->rcrfull; 67144961713Sgirish rdc_kstatsp->rbr_empty.value.ul = statsp->rbr_empty; 67244961713Sgirish rdc_kstatsp->rbrfull.value.ul = statsp->rbrfull; 67344961713Sgirish rdc_kstatsp->rbrlogpage.value.ul = statsp->rbrlogpage; 67444961713Sgirish rdc_kstatsp->cfiglogpage.value.ul = statsp->cfiglogpage; 67544961713Sgirish } 676a3c5bd6dSspeer 67744961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_rdc_stat_update")); 67844961713Sgirish return (0); 67944961713Sgirish } 68044961713Sgirish 681a3c5bd6dSspeer /* ARGSUSED */ 68244961713Sgirish int 68344961713Sgirish nxge_rdc_sys_stat_update(kstat_t *ksp, int rw) 68444961713Sgirish { 685a3c5bd6dSspeer p_nxge_t nxgep; 686a3c5bd6dSspeer p_nxge_rdc_sys_kstat_t rdc_sys_kstatsp; 687a3c5bd6dSspeer p_nxge_rdc_sys_stats_t statsp; 68844961713Sgirish 68944961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 69044961713Sgirish if (nxgep == NULL) 69144961713Sgirish return (-1); 692a3c5bd6dSspeer 69344961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_rdc_sys_stat_update")); 69444961713Sgirish 69544961713Sgirish rdc_sys_kstatsp = (p_nxge_rdc_sys_kstat_t)ksp->ks_data; 69644961713Sgirish statsp = (p_nxge_rdc_sys_stats_t)&nxgep->statsp->rdc_sys_stats; 69744961713Sgirish 69844961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "nxge_rdc_sys_stat_update %llx", 699*71cd5202Smisaki ksp->ks_data)); 70044961713Sgirish 70144961713Sgirish if (rw == KSTAT_WRITE) { 70244961713Sgirish statsp->id_mismatch = rdc_sys_kstatsp->id_mismatch.value.ul; 70344961713Sgirish statsp->ipp_eop_err = rdc_sys_kstatsp->ipp_eop_err.value.ul; 70444961713Sgirish statsp->zcp_eop_err = rdc_sys_kstatsp->zcp_eop_err.value.ul; 70544961713Sgirish } else { 70644961713Sgirish rdc_sys_kstatsp->id_mismatch.value.ul = statsp->id_mismatch; 70744961713Sgirish rdc_sys_kstatsp->ipp_eop_err.value.ul = statsp->ipp_eop_err; 70844961713Sgirish rdc_sys_kstatsp->zcp_eop_err.value.ul = statsp->zcp_eop_err; 70944961713Sgirish } 71044961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, " <== nxge_rdc_sys_stat_update")); 71144961713Sgirish return (0); 71244961713Sgirish } 71344961713Sgirish 714a3c5bd6dSspeer /* ARGSUSED */ 71544961713Sgirish static int 71644961713Sgirish nxge_txc_stat_update(kstat_t *ksp, int rw) 71744961713Sgirish { 718a3c5bd6dSspeer p_nxge_t nxgep; 719a3c5bd6dSspeer p_nxge_txc_kstat_t txc_kstatsp; 720a3c5bd6dSspeer p_nxge_txc_stats_t statsp; 72144961713Sgirish 72244961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 72344961713Sgirish 72444961713Sgirish if (nxgep == NULL) 72544961713Sgirish return (-1); 72644961713Sgirish 72744961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_txc_stat_update")); 72844961713Sgirish 72944961713Sgirish txc_kstatsp = (p_nxge_txc_kstat_t)ksp->ks_data; 73044961713Sgirish statsp = (p_nxge_txc_stats_t)&nxgep->statsp->txc_stats; 73144961713Sgirish 73244961713Sgirish if (rw == KSTAT_WRITE) { 73344961713Sgirish statsp->pkt_stuffed = txc_kstatsp->pkt_stuffed.value.ul; 73444961713Sgirish statsp->pkt_xmit = txc_kstatsp->pkt_xmit.value.ul; 73544961713Sgirish statsp->ro_correct_err = txc_kstatsp->ro_correct_err.value.ul; 73644961713Sgirish statsp->ro_uncorrect_err = 737*71cd5202Smisaki txc_kstatsp->ro_uncorrect_err.value.ul; 73844961713Sgirish statsp->sf_correct_err = txc_kstatsp->sf_correct_err.value.ul; 73944961713Sgirish statsp->sf_uncorrect_err = 740*71cd5202Smisaki txc_kstatsp->sf_uncorrect_err.value.ul; 74144961713Sgirish statsp->address_failed = txc_kstatsp->address_failed.value.ul; 74244961713Sgirish statsp->dma_failed = txc_kstatsp->dma_failed.value.ul; 74344961713Sgirish statsp->length_failed = txc_kstatsp->length_failed.value.ul; 74444961713Sgirish statsp->pkt_assy_dead = txc_kstatsp->pkt_assy_dead.value.ul; 74544961713Sgirish statsp->reorder_err = txc_kstatsp->reorder_err.value.ul; 74644961713Sgirish } else { 74744961713Sgirish txc_kstatsp->pkt_stuffed.value.ul = statsp->pkt_stuffed; 74844961713Sgirish txc_kstatsp->pkt_xmit.value.ul = statsp->pkt_xmit; 74944961713Sgirish txc_kstatsp->ro_correct_err.value.ul = statsp->ro_correct_err; 75044961713Sgirish txc_kstatsp->ro_uncorrect_err.value.ul = 751*71cd5202Smisaki statsp->ro_uncorrect_err; 75244961713Sgirish txc_kstatsp->sf_correct_err.value.ul = statsp->sf_correct_err; 75344961713Sgirish txc_kstatsp->sf_uncorrect_err.value.ul = 754*71cd5202Smisaki statsp->sf_uncorrect_err; 75544961713Sgirish txc_kstatsp->address_failed.value.ul = statsp->address_failed; 75644961713Sgirish txc_kstatsp->dma_failed.value.ul = statsp->dma_failed; 75744961713Sgirish txc_kstatsp->length_failed.value.ul = statsp->length_failed; 75844961713Sgirish txc_kstatsp->pkt_assy_dead.value.ul = statsp->pkt_assy_dead; 75944961713Sgirish txc_kstatsp->reorder_err.value.ul = statsp->reorder_err; 76044961713Sgirish } 76144961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_txc_stat_update")); 76244961713Sgirish return (0); 76344961713Sgirish } 76444961713Sgirish 765a3c5bd6dSspeer /* ARGSUSED */ 76644961713Sgirish int 76744961713Sgirish nxge_ipp_stat_update(kstat_t *ksp, int rw) 76844961713Sgirish { 769a3c5bd6dSspeer p_nxge_t nxgep; 770a3c5bd6dSspeer p_nxge_ipp_kstat_t ipp_kstatsp; 771a3c5bd6dSspeer p_nxge_ipp_stats_t statsp; 77244961713Sgirish 77344961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 77444961713Sgirish if (nxgep == NULL) 77544961713Sgirish return (-1); 77644961713Sgirish 77744961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_ipp_stat_update")); 77844961713Sgirish 77944961713Sgirish ipp_kstatsp = (p_nxge_ipp_kstat_t)ksp->ks_data; 78044961713Sgirish statsp = (p_nxge_ipp_stats_t)&nxgep->statsp->ipp_stats; 78144961713Sgirish 78244961713Sgirish if (rw == KSTAT_WRITE) { 78344961713Sgirish statsp->eop_miss = ipp_kstatsp->eop_miss.value.ul; 78444961713Sgirish statsp->sop_miss = ipp_kstatsp->sop_miss.value.ul; 78544961713Sgirish statsp->dfifo_ue = ipp_kstatsp->dfifo_ue.value.ul; 78644961713Sgirish statsp->ecc_err_cnt = ipp_kstatsp->ecc_err_cnt.value.ul; 787846a903dSml statsp->pfifo_perr = ipp_kstatsp->pfifo_perr.value.ul; 78844961713Sgirish statsp->pfifo_over = ipp_kstatsp->pfifo_over.value.ul; 78944961713Sgirish statsp->pfifo_und = ipp_kstatsp->pfifo_und.value.ul; 79044961713Sgirish statsp->bad_cs_cnt = ipp_kstatsp->bad_cs_cnt.value.ul; 79144961713Sgirish statsp->pkt_dis_cnt = ipp_kstatsp->pkt_dis_cnt.value.ul; 79244961713Sgirish } else { 79344961713Sgirish ipp_kstatsp->eop_miss.value.ul = statsp->eop_miss; 79444961713Sgirish ipp_kstatsp->sop_miss.value.ul = statsp->sop_miss; 79544961713Sgirish ipp_kstatsp->dfifo_ue.value.ul = statsp->dfifo_ue; 79644961713Sgirish ipp_kstatsp->ecc_err_cnt.value.ul = statsp->ecc_err_cnt; 797846a903dSml ipp_kstatsp->pfifo_perr.value.ul = statsp->pfifo_perr; 79844961713Sgirish ipp_kstatsp->pfifo_over.value.ul = statsp->pfifo_over; 79944961713Sgirish ipp_kstatsp->pfifo_und.value.ul = statsp->pfifo_und; 80044961713Sgirish ipp_kstatsp->bad_cs_cnt.value.ul = statsp->bad_cs_cnt; 80144961713Sgirish ipp_kstatsp->pkt_dis_cnt.value.ul = statsp->pkt_dis_cnt; 80244961713Sgirish } 80344961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_ipp_stat_update")); 80444961713Sgirish return (0); 80544961713Sgirish } 80644961713Sgirish 807a3c5bd6dSspeer /* ARGSUSED */ 80844961713Sgirish int 80944961713Sgirish nxge_xmac_stat_update(kstat_t *ksp, int rw) 81044961713Sgirish { 811a3c5bd6dSspeer p_nxge_t nxgep; 812a3c5bd6dSspeer p_nxge_xmac_kstat_t xmac_kstatsp; 813a3c5bd6dSspeer p_nxge_xmac_stats_t statsp; 81444961713Sgirish 81544961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 81644961713Sgirish if (nxgep == NULL) 81744961713Sgirish return (-1); 81844961713Sgirish 81944961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_xmac_stat_update")); 82044961713Sgirish 82144961713Sgirish xmac_kstatsp = (p_nxge_xmac_kstat_t)ksp->ks_data; 82244961713Sgirish statsp = (p_nxge_xmac_stats_t)&nxgep->statsp->xmac_stats; 82344961713Sgirish 82444961713Sgirish if (rw == KSTAT_WRITE) { 82544961713Sgirish statsp->tx_frame_cnt = xmac_kstatsp->tx_frame_cnt.value.ul; 82644961713Sgirish statsp->tx_underflow_err = 827*71cd5202Smisaki xmac_kstatsp->tx_underflow_err.value.ul; 82844961713Sgirish statsp->tx_maxpktsize_err = 829*71cd5202Smisaki xmac_kstatsp->tx_maxpktsize_err.value.ul; 83044961713Sgirish statsp->tx_overflow_err = 831*71cd5202Smisaki xmac_kstatsp->tx_overflow_err.value.ul; 83244961713Sgirish statsp->tx_fifo_xfr_err = 833*71cd5202Smisaki xmac_kstatsp->tx_fifo_xfr_err.value.ul; 83444961713Sgirish statsp->tx_byte_cnt = xmac_kstatsp->tx_byte_cnt.value.ul; 83544961713Sgirish statsp->rx_underflow_err = 836*71cd5202Smisaki xmac_kstatsp->rx_underflow_err.value.ul; 83744961713Sgirish statsp->rx_overflow_err = 838*71cd5202Smisaki xmac_kstatsp->rx_overflow_err.value.ul; 83944961713Sgirish statsp->rx_crc_err_cnt = xmac_kstatsp->rx_crc_err_cnt.value.ul; 84044961713Sgirish statsp->rx_len_err_cnt = xmac_kstatsp->rx_len_err_cnt.value.ul; 84144961713Sgirish statsp->rx_viol_err_cnt = 842*71cd5202Smisaki xmac_kstatsp->rx_viol_err_cnt.value.ul; 84344961713Sgirish statsp->rx_byte_cnt = xmac_kstatsp->rx_byte_cnt.value.ul; 844321febdeSsbehera statsp->rx_frame_cnt = xmac_kstatsp->rx_frame_cnt.value.ul; 84544961713Sgirish statsp->rx_hist1_cnt = xmac_kstatsp->rx_hist1_cnt.value.ul; 84644961713Sgirish statsp->rx_hist2_cnt = xmac_kstatsp->rx_hist2_cnt.value.ul; 84744961713Sgirish statsp->rx_hist3_cnt = xmac_kstatsp->rx_hist3_cnt.value.ul; 84844961713Sgirish statsp->rx_hist4_cnt = xmac_kstatsp->rx_hist4_cnt.value.ul; 84944961713Sgirish statsp->rx_hist5_cnt = xmac_kstatsp->rx_hist5_cnt.value.ul; 85044961713Sgirish statsp->rx_hist6_cnt = xmac_kstatsp->rx_hist6_cnt.value.ul; 851321febdeSsbehera statsp->rx_hist7_cnt = xmac_kstatsp->rx_hist7_cnt.value.ul; 85244961713Sgirish statsp->rx_mult_cnt = xmac_kstatsp->rx_mult_cnt.value.ul; 85344961713Sgirish statsp->rx_frag_cnt = xmac_kstatsp->rx_frag_cnt.value.ul; 85444961713Sgirish statsp->rx_frame_align_err_cnt = 855*71cd5202Smisaki xmac_kstatsp->rx_frame_align_err_cnt.value.ul; 85644961713Sgirish statsp->rx_linkfault_err_cnt = 857*71cd5202Smisaki xmac_kstatsp->rx_linkfault_err_cnt.value.ul; 85844961713Sgirish statsp->rx_localfault_err = 859*71cd5202Smisaki xmac_kstatsp->rx_local_fault_err_cnt.value.ul; 86044961713Sgirish statsp->rx_remotefault_err = 861*71cd5202Smisaki xmac_kstatsp->rx_remote_fault_err_cnt.value.ul; 86244961713Sgirish statsp->xpcs_deskew_err_cnt = 863*71cd5202Smisaki xmac_kstatsp->xpcs_deskew_err_cnt.value.ul; 86414ea4bb7Ssd #ifdef NXGE_DEBUG_SYMBOL_ERR 86544961713Sgirish statsp->xpcs_ln0_symbol_err_cnt = 866*71cd5202Smisaki xmac_kstatsp->xpcs_ln0_symbol_err_cnt.value.ul; 86744961713Sgirish statsp->xpcs_ln1_symbol_err_cnt = 868*71cd5202Smisaki xmac_kstatsp->xpcs_ln1_symbol_err_cnt.value.ul; 86944961713Sgirish statsp->xpcs_ln2_symbol_err_cnt = 870*71cd5202Smisaki xmac_kstatsp->xpcs_ln2_symbol_err_cnt.value.ul; 87144961713Sgirish statsp->xpcs_ln3_symbol_err_cnt = 872*71cd5202Smisaki xmac_kstatsp->xpcs_ln3_symbol_err_cnt.value.ul; 87314ea4bb7Ssd #endif 87444961713Sgirish } else { 87544961713Sgirish xmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt; 87644961713Sgirish xmac_kstatsp->tx_underflow_err.value.ul = 877*71cd5202Smisaki statsp->tx_underflow_err; 87844961713Sgirish xmac_kstatsp->tx_maxpktsize_err.value.ul = 879*71cd5202Smisaki statsp->tx_maxpktsize_err; 88044961713Sgirish xmac_kstatsp->tx_overflow_err.value.ul = 881*71cd5202Smisaki statsp->tx_overflow_err; 88244961713Sgirish xmac_kstatsp->tx_fifo_xfr_err.value.ul = 883*71cd5202Smisaki statsp->tx_fifo_xfr_err; 88444961713Sgirish xmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt; 88544961713Sgirish xmac_kstatsp->rx_underflow_err.value.ul = 886*71cd5202Smisaki statsp->rx_underflow_err; 88744961713Sgirish xmac_kstatsp->rx_overflow_err.value.ul = 888*71cd5202Smisaki statsp->rx_overflow_err; 88944961713Sgirish xmac_kstatsp->rx_crc_err_cnt.value.ul = statsp->rx_crc_err_cnt; 89044961713Sgirish xmac_kstatsp->rx_len_err_cnt.value.ul = statsp->rx_len_err_cnt; 89144961713Sgirish xmac_kstatsp->rx_viol_err_cnt.value.ul = 892*71cd5202Smisaki statsp->rx_viol_err_cnt; 89344961713Sgirish xmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt; 894321febdeSsbehera xmac_kstatsp->rx_frame_cnt.value.ul = statsp->rx_frame_cnt; 89544961713Sgirish xmac_kstatsp->rx_hist1_cnt.value.ul = statsp->rx_hist1_cnt; 89644961713Sgirish xmac_kstatsp->rx_hist2_cnt.value.ul = statsp->rx_hist2_cnt; 89744961713Sgirish xmac_kstatsp->rx_hist3_cnt.value.ul = statsp->rx_hist3_cnt; 89844961713Sgirish xmac_kstatsp->rx_hist4_cnt.value.ul = statsp->rx_hist4_cnt; 89944961713Sgirish xmac_kstatsp->rx_hist5_cnt.value.ul = statsp->rx_hist5_cnt; 90044961713Sgirish xmac_kstatsp->rx_hist6_cnt.value.ul = statsp->rx_hist6_cnt; 901321febdeSsbehera xmac_kstatsp->rx_hist7_cnt.value.ul = statsp->rx_hist7_cnt; 90244961713Sgirish xmac_kstatsp->rx_mult_cnt.value.ul = statsp->rx_mult_cnt; 90344961713Sgirish xmac_kstatsp->rx_frag_cnt.value.ul = statsp->rx_frag_cnt; 90444961713Sgirish xmac_kstatsp->rx_frame_align_err_cnt.value.ul = 905*71cd5202Smisaki statsp->rx_frame_align_err_cnt; 90644961713Sgirish xmac_kstatsp->rx_linkfault_err_cnt.value.ul = 907*71cd5202Smisaki statsp->rx_linkfault_err_cnt; 90844961713Sgirish xmac_kstatsp->rx_local_fault_err_cnt.value.ul = 909*71cd5202Smisaki statsp->rx_localfault_err; 91044961713Sgirish xmac_kstatsp->rx_remote_fault_err_cnt.value.ul = 911*71cd5202Smisaki statsp->rx_remotefault_err; 91244961713Sgirish xmac_kstatsp->xpcs_deskew_err_cnt.value.ul = 913*71cd5202Smisaki statsp->xpcs_deskew_err_cnt; 91414ea4bb7Ssd #ifdef NXGE_DEBUG_SYMBOL_ERR 91544961713Sgirish xmac_kstatsp->xpcs_ln0_symbol_err_cnt.value.ul = 916*71cd5202Smisaki statsp->xpcs_ln0_symbol_err_cnt; 91744961713Sgirish xmac_kstatsp->xpcs_ln1_symbol_err_cnt.value.ul = 918*71cd5202Smisaki statsp->xpcs_ln1_symbol_err_cnt; 91944961713Sgirish xmac_kstatsp->xpcs_ln2_symbol_err_cnt.value.ul = 920*71cd5202Smisaki statsp->xpcs_ln2_symbol_err_cnt; 92144961713Sgirish xmac_kstatsp->xpcs_ln3_symbol_err_cnt.value.ul = 922*71cd5202Smisaki statsp->xpcs_ln3_symbol_err_cnt; 92314ea4bb7Ssd #endif 92444961713Sgirish } 92544961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_xmac_stat_update")); 92644961713Sgirish return (0); 92744961713Sgirish } 92844961713Sgirish 929a3c5bd6dSspeer /* ARGSUSED */ 93044961713Sgirish int 93144961713Sgirish nxge_bmac_stat_update(kstat_t *ksp, int rw) 93244961713Sgirish { 933a3c5bd6dSspeer p_nxge_t nxgep; 934a3c5bd6dSspeer p_nxge_bmac_kstat_t bmac_kstatsp; 935a3c5bd6dSspeer p_nxge_bmac_stats_t statsp; 93644961713Sgirish 93744961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 93844961713Sgirish if (nxgep == NULL) 93944961713Sgirish return (-1); 94044961713Sgirish 94144961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_bmac_stat_update")); 94244961713Sgirish 94344961713Sgirish bmac_kstatsp = (p_nxge_bmac_kstat_t)ksp->ks_data; 94444961713Sgirish statsp = (p_nxge_bmac_stats_t)&nxgep->statsp->bmac_stats; 94544961713Sgirish 94644961713Sgirish if (rw == KSTAT_WRITE) { 94744961713Sgirish statsp->tx_frame_cnt = bmac_kstatsp->tx_frame_cnt.value.ul; 94844961713Sgirish statsp->tx_underrun_err = 949*71cd5202Smisaki bmac_kstatsp->tx_underrun_err.value.ul; 95044961713Sgirish statsp->tx_max_pkt_err = bmac_kstatsp->tx_max_pkt_err.value.ul; 95144961713Sgirish statsp->tx_byte_cnt = bmac_kstatsp->tx_byte_cnt.value.ul; 95244961713Sgirish statsp->rx_frame_cnt = bmac_kstatsp->rx_frame_cnt.value.ul; 95344961713Sgirish statsp->rx_byte_cnt = bmac_kstatsp->rx_byte_cnt.value.ul; 95444961713Sgirish statsp->rx_overflow_err = 955*71cd5202Smisaki bmac_kstatsp->rx_overflow_err.value.ul; 95644961713Sgirish statsp->rx_align_err_cnt = 957*71cd5202Smisaki bmac_kstatsp->rx_align_err_cnt.value.ul; 95844961713Sgirish statsp->rx_crc_err_cnt = bmac_kstatsp->rx_crc_err_cnt.value.ul; 95944961713Sgirish statsp->rx_len_err_cnt = bmac_kstatsp->rx_len_err_cnt.value.ul; 96044961713Sgirish statsp->rx_viol_err_cnt = 961*71cd5202Smisaki bmac_kstatsp->rx_viol_err_cnt.value.ul; 96244961713Sgirish } else { 96344961713Sgirish bmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt; 96444961713Sgirish bmac_kstatsp->tx_underrun_err.value.ul = 965*71cd5202Smisaki statsp->tx_underrun_err; 96644961713Sgirish bmac_kstatsp->tx_max_pkt_err.value.ul = statsp->tx_max_pkt_err; 96744961713Sgirish bmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt; 96844961713Sgirish bmac_kstatsp->rx_frame_cnt.value.ul = statsp->rx_frame_cnt; 96944961713Sgirish bmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt; 97044961713Sgirish bmac_kstatsp->rx_overflow_err.value.ul = 971*71cd5202Smisaki statsp->rx_overflow_err; 97244961713Sgirish bmac_kstatsp->rx_align_err_cnt.value.ul = 973*71cd5202Smisaki statsp->rx_align_err_cnt; 97444961713Sgirish bmac_kstatsp->rx_crc_err_cnt.value.ul = statsp->rx_crc_err_cnt; 97544961713Sgirish bmac_kstatsp->rx_len_err_cnt.value.ul = statsp->rx_len_err_cnt; 97644961713Sgirish bmac_kstatsp->rx_viol_err_cnt.value.ul = 977*71cd5202Smisaki statsp->rx_viol_err_cnt; 97844961713Sgirish } 97944961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_bmac_stat_update")); 98044961713Sgirish return (0); 98144961713Sgirish } 98244961713Sgirish 983a3c5bd6dSspeer /* ARGSUSED */ 98444961713Sgirish int 98544961713Sgirish nxge_zcp_stat_update(kstat_t *ksp, int rw) 98644961713Sgirish { 987a3c5bd6dSspeer p_nxge_t nxgep; 988a3c5bd6dSspeer p_nxge_zcp_kstat_t zcp_kstatsp; 989a3c5bd6dSspeer p_nxge_zcp_stats_t statsp; 99044961713Sgirish 99144961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 99244961713Sgirish if (nxgep == NULL) 99344961713Sgirish return (-1); 99444961713Sgirish 99544961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_zcp_stat_update")); 99644961713Sgirish 99744961713Sgirish zcp_kstatsp = (p_nxge_zcp_kstat_t)ksp->ks_data; 99844961713Sgirish statsp = (p_nxge_zcp_stats_t)&nxgep->statsp->zcp_stats; 99944961713Sgirish 100044961713Sgirish if (rw == KSTAT_WRITE) { 100144961713Sgirish statsp->rrfifo_underrun = zcp_kstatsp->rrfifo_underrun.value.ul; 100244961713Sgirish statsp->rrfifo_overrun = zcp_kstatsp->rrfifo_overrun.value.ul; 100344961713Sgirish statsp->rspfifo_uncorr_err = 1004*71cd5202Smisaki zcp_kstatsp->rspfifo_uncorr_err.value.ul; 100544961713Sgirish statsp->buffer_overflow = zcp_kstatsp->buffer_overflow.value.ul; 100644961713Sgirish statsp->stat_tbl_perr = zcp_kstatsp->stat_tbl_perr.value.ul; 100744961713Sgirish statsp->dyn_tbl_perr = zcp_kstatsp->dyn_tbl_perr.value.ul; 100844961713Sgirish statsp->buf_tbl_perr = zcp_kstatsp->buf_tbl_perr.value.ul; 100944961713Sgirish statsp->tt_program_err = zcp_kstatsp->tt_program_err.value.ul; 101044961713Sgirish statsp->rsp_tt_index_err = 1011*71cd5202Smisaki zcp_kstatsp->rsp_tt_index_err.value.ul; 101244961713Sgirish statsp->slv_tt_index_err = 1013*71cd5202Smisaki zcp_kstatsp->slv_tt_index_err.value.ul; 101444961713Sgirish statsp->zcp_tt_index_err = 1015*71cd5202Smisaki zcp_kstatsp->zcp_tt_index_err.value.ul; 101644961713Sgirish statsp->cfifo_ecc = zcp_kstatsp->cfifo_ecc.value.ul; 101744961713Sgirish } else { 101844961713Sgirish zcp_kstatsp->rrfifo_underrun.value.ul = statsp->rrfifo_underrun; 101944961713Sgirish zcp_kstatsp->rrfifo_overrun.value.ul = statsp->rrfifo_overrun; 102044961713Sgirish zcp_kstatsp->rspfifo_uncorr_err.value.ul = 1021*71cd5202Smisaki statsp->rspfifo_uncorr_err; 102244961713Sgirish zcp_kstatsp->buffer_overflow.value.ul = 1023*71cd5202Smisaki statsp->buffer_overflow; 102444961713Sgirish zcp_kstatsp->stat_tbl_perr.value.ul = statsp->stat_tbl_perr; 102544961713Sgirish zcp_kstatsp->dyn_tbl_perr.value.ul = statsp->dyn_tbl_perr; 1026a3c5bd6dSspeer zcp_kstatsp->buf_tbl_perr.value.ul = statsp->buf_tbl_perr; 102744961713Sgirish zcp_kstatsp->tt_program_err.value.ul = statsp->tt_program_err; 102844961713Sgirish zcp_kstatsp->rsp_tt_index_err.value.ul = 1029*71cd5202Smisaki statsp->rsp_tt_index_err; 103044961713Sgirish zcp_kstatsp->slv_tt_index_err.value.ul = 1031*71cd5202Smisaki statsp->slv_tt_index_err; 103244961713Sgirish zcp_kstatsp->zcp_tt_index_err.value.ul = 1033*71cd5202Smisaki statsp->zcp_tt_index_err; 1034a3c5bd6dSspeer zcp_kstatsp->cfifo_ecc.value.ul = statsp->cfifo_ecc; 103544961713Sgirish } 103644961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_zcp_stat_update")); 103744961713Sgirish return (0); 103844961713Sgirish } 103944961713Sgirish 1040a3c5bd6dSspeer /* ARGSUSED */ 104144961713Sgirish int 104244961713Sgirish nxge_fflp_stat_update(kstat_t *ksp, int rw) 104344961713Sgirish { 1044a3c5bd6dSspeer p_nxge_t nxgep; 1045a3c5bd6dSspeer p_nxge_fflp_kstat_t fflp_kstatsp; 1046a3c5bd6dSspeer p_nxge_fflp_stats_t statsp; 1047a3c5bd6dSspeer int ldc_grp; 104844961713Sgirish 104944961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 105044961713Sgirish if (nxgep == NULL) 105144961713Sgirish return (-1); 105244961713Sgirish 105344961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_fflp_stat_update")); 105444961713Sgirish 105544961713Sgirish fflp_kstatsp = (p_nxge_fflp_kstat_t)ksp->ks_data; 105644961713Sgirish statsp = (p_nxge_fflp_stats_t)&nxgep->statsp->fflp_stats; 105744961713Sgirish 105844961713Sgirish if (rw == KSTAT_WRITE) { 105944961713Sgirish statsp->tcam_parity_err = fflp_kstatsp->fflp_tcam_perr.value.ul; 106044961713Sgirish statsp->tcam_ecc_err = fflp_kstatsp->fflp_tcam_ecc_err.value.ul; 106144961713Sgirish statsp->vlan_parity_err = fflp_kstatsp->fflp_vlan_perr.value.ul; 106244961713Sgirish statsp->hash_lookup_err = 1063*71cd5202Smisaki fflp_kstatsp->fflp_hasht_lookup_err.value.ul; 106444961713Sgirish for (ldc_grp = 0; ldc_grp < MAX_PARTITION; ldc_grp++) { 106544961713Sgirish statsp->hash_pio_err[ldc_grp] = 1066*71cd5202Smisaki fflp_kstatsp->fflp_hasht_data_err[ldc_grp]. 1067*71cd5202Smisaki value.ul; 106844961713Sgirish } 106944961713Sgirish } else { 107044961713Sgirish fflp_kstatsp->fflp_tcam_perr.value.ul = 1071*71cd5202Smisaki fflp_kstatsp->fflp_tcam_perr.value.ul; 107244961713Sgirish fflp_kstatsp->fflp_tcam_ecc_err.value.ul = statsp->tcam_ecc_err; 107344961713Sgirish fflp_kstatsp->fflp_vlan_perr.value.ul = statsp->vlan_parity_err; 107444961713Sgirish fflp_kstatsp->fflp_hasht_lookup_err.value.ul = 1075*71cd5202Smisaki statsp->hash_lookup_err; 107644961713Sgirish for (ldc_grp = 0; ldc_grp < MAX_PARTITION; ldc_grp++) { 107744961713Sgirish fflp_kstatsp->fflp_hasht_data_err[ldc_grp].value.ul = 1078*71cd5202Smisaki statsp->hash_pio_err[ldc_grp]; 107944961713Sgirish } 108044961713Sgirish } 108144961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_fflp_stat_update")); 108244961713Sgirish return (0); 108344961713Sgirish } 108444961713Sgirish 1085a3c5bd6dSspeer /* ARGSUSED */ 108644961713Sgirish static uint64_t 108744961713Sgirish nxge_mac_octet_to_u64(struct ether_addr addr) 108844961713Sgirish { 108944961713Sgirish int i; 109044961713Sgirish uint64_t addr64 = 0; 1091a3c5bd6dSspeer 109244961713Sgirish for (i = ETHERADDRL - 1; i >= 0; i--) { 109344961713Sgirish addr64 <<= 8; 109444961713Sgirish addr64 |= addr.ether_addr_octet[i]; 109544961713Sgirish } 109644961713Sgirish return (addr64); 109744961713Sgirish } 109844961713Sgirish 1099a3c5bd6dSspeer /* ARGSUSED */ 110044961713Sgirish int 110144961713Sgirish nxge_mmac_stat_update(kstat_t *ksp, int rw) 110244961713Sgirish { 1103a3c5bd6dSspeer p_nxge_t nxgep; 1104a3c5bd6dSspeer p_nxge_mmac_kstat_t mmac_kstatsp; 1105a3c5bd6dSspeer p_nxge_mmac_stats_t statsp; 110644961713Sgirish 110744961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 110844961713Sgirish if (nxgep == NULL) 110944961713Sgirish return (-1); 111044961713Sgirish 111144961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_mmac_stat_update")); 111244961713Sgirish 111344961713Sgirish mmac_kstatsp = (p_nxge_mmac_kstat_t)ksp->ks_data; 111444961713Sgirish statsp = (p_nxge_mmac_stats_t)&nxgep->statsp->mmac_stats; 111544961713Sgirish 111644961713Sgirish if (rw == KSTAT_WRITE) { 111744961713Sgirish cmn_err(CE_WARN, "Can not write mmac stats"); 111844961713Sgirish } else { 111944961713Sgirish mmac_kstatsp->mmac_max_addr_cnt.value.ul = 1120*71cd5202Smisaki statsp->mmac_max_cnt; 112144961713Sgirish mmac_kstatsp->mmac_avail_addr_cnt.value.ul = 1122*71cd5202Smisaki statsp->mmac_avail_cnt; 112344961713Sgirish mmac_kstatsp->mmac_addr1.value.ul = 1124*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[0]); 112544961713Sgirish mmac_kstatsp->mmac_addr2.value.ul = 1126*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[1]); 112744961713Sgirish mmac_kstatsp->mmac_addr3.value.ul = 1128*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[2]); 112944961713Sgirish mmac_kstatsp->mmac_addr4.value.ul = 1130*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[3]); 113144961713Sgirish mmac_kstatsp->mmac_addr5.value.ul = 1132*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[4]); 113344961713Sgirish mmac_kstatsp->mmac_addr6.value.ul = 1134*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[5]); 113544961713Sgirish mmac_kstatsp->mmac_addr7.value.ul = 1136*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[6]); 113744961713Sgirish mmac_kstatsp->mmac_addr8.value.ul = 1138*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[7]); 113944961713Sgirish mmac_kstatsp->mmac_addr9.value.ul = 1140*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[8]); 114144961713Sgirish mmac_kstatsp->mmac_addr10.value.ul = 1142*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[9]); 114344961713Sgirish mmac_kstatsp->mmac_addr11.value.ul = 1144*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[10]); 114544961713Sgirish mmac_kstatsp->mmac_addr12.value.ul = 1146*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[11]); 114744961713Sgirish mmac_kstatsp->mmac_addr13.value.ul = 1148*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[12]); 114944961713Sgirish mmac_kstatsp->mmac_addr14.value.ul = 1150*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[13]); 115144961713Sgirish mmac_kstatsp->mmac_addr15.value.ul = 1152*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[14]); 115344961713Sgirish mmac_kstatsp->mmac_addr16.value.ul = 1154*71cd5202Smisaki nxge_mac_octet_to_u64(statsp->mmac_avail_pool[15]); 115544961713Sgirish } 115644961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_mmac_stat_update")); 115744961713Sgirish return (0); 115844961713Sgirish } 115944961713Sgirish 1160a3c5bd6dSspeer /* ARGSUSED */ 116144961713Sgirish static kstat_t * 116244961713Sgirish nxge_setup_local_kstat(p_nxge_t nxgep, int instance, char *name, 1163a3c5bd6dSspeer const nxge_kstat_index_t *ksip, size_t count, 1164a3c5bd6dSspeer int (*update) (kstat_t *, int)) 116544961713Sgirish { 116644961713Sgirish kstat_t *ksp; 116744961713Sgirish kstat_named_t *knp; 116844961713Sgirish int i; 1169a3c5bd6dSspeer 117044961713Sgirish ksp = kstat_create(NXGE_DRIVER_NAME, instance, name, "net", 1171*71cd5202Smisaki KSTAT_TYPE_NAMED, count, 0); 117244961713Sgirish if (ksp == NULL) 117344961713Sgirish return (NULL); 117444961713Sgirish 117544961713Sgirish ksp->ks_private = (void *)nxgep; 117644961713Sgirish ksp->ks_update = update; 117744961713Sgirish knp = ksp->ks_data; 117844961713Sgirish 117944961713Sgirish for (i = 0; ksip[i].name != NULL; i++) { 118044961713Sgirish kstat_named_init(&knp[i], ksip[i].name, ksip[i].type); 118144961713Sgirish } 118244961713Sgirish 118344961713Sgirish kstat_install(ksp); 118444961713Sgirish return (ksp); 118544961713Sgirish } 118644961713Sgirish 1187a3c5bd6dSspeer /* ARGSUSED */ 1188678453a8Sspeer void 1189678453a8Sspeer nxge_setup_rdc_kstats(p_nxge_t nxgep, int channel) 1190678453a8Sspeer { 1191678453a8Sspeer char stat_name[64]; 1192678453a8Sspeer 1193678453a8Sspeer /* Setup RDC statistics */ 1194678453a8Sspeer (void) sprintf(stat_name, "%s" CH_NAME_FORMAT, 1195678453a8Sspeer RDC_NAME_FORMAT1, channel); 1196678453a8Sspeer nxgep->statsp->rdc_ksp[channel] = nxge_setup_local_kstat(nxgep, 1197678453a8Sspeer nxgep->instance, 1198678453a8Sspeer stat_name, 1199678453a8Sspeer nxge_rdc_stats, 1200678453a8Sspeer RDC_STAT_END, 1201678453a8Sspeer nxge_rdc_stat_update); 1202678453a8Sspeer #ifdef NXGE_DEBUG_ERROR 1203678453a8Sspeer if (nxgep->statsp->rdc_ksp[channel] == NULL) 1204678453a8Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, 1205*71cd5202Smisaki "kstat_create failed for rdc channel %d", channel)); 1206678453a8Sspeer #endif 1207678453a8Sspeer } 1208678453a8Sspeer 1209678453a8Sspeer void 1210678453a8Sspeer nxge_setup_tdc_kstats(p_nxge_t nxgep, int channel) 1211678453a8Sspeer { 1212678453a8Sspeer char stat_name[64]; 1213678453a8Sspeer 1214678453a8Sspeer /* Setup TDC statistics */ 1215678453a8Sspeer (void) sprintf(stat_name, "%s" CH_NAME_FORMAT, 1216678453a8Sspeer TDC_NAME_FORMAT1, channel); 1217678453a8Sspeer nxgep->statsp->tdc_ksp[channel] = nxge_setup_local_kstat(nxgep, 1218678453a8Sspeer nxgep->instance, 1219678453a8Sspeer stat_name, 1220678453a8Sspeer nxge_tdc_stats, 1221678453a8Sspeer TDC_STAT_END, 1222678453a8Sspeer nxge_tdc_stat_update); 1223678453a8Sspeer #ifdef NXGE_DEBUG_ERROR 1224678453a8Sspeer if (nxgep->statsp->tdc_ksp[channel] == NULL) { 1225678453a8Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, 1226*71cd5202Smisaki "kstat_create failed for tdc channel %d", channel)); 1227678453a8Sspeer } 1228678453a8Sspeer #endif 1229678453a8Sspeer } 1230678453a8Sspeer 123144961713Sgirish void 123244961713Sgirish nxge_setup_kstats(p_nxge_t nxgep) 123344961713Sgirish { 123444961713Sgirish struct kstat *ksp; 123544961713Sgirish p_nxge_port_kstat_t nxgekp; 123644961713Sgirish size_t nxge_kstat_sz; 123744961713Sgirish char mmac_name[64]; 1238a3c5bd6dSspeer 123944961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_setup_kstats")); 124044961713Sgirish 124144961713Sgirish /* Setup RDC System statistics */ 124244961713Sgirish nxgep->statsp->rdc_sys_ksp = nxge_setup_local_kstat(nxgep, 1243*71cd5202Smisaki nxgep->instance, 1244*71cd5202Smisaki "RDC System Stats", 1245*71cd5202Smisaki &nxge_rdc_sys_stats[0], 1246*71cd5202Smisaki RDC_SYS_STAT_END, 1247*71cd5202Smisaki nxge_rdc_sys_stat_update); 124844961713Sgirish 124944961713Sgirish /* Setup IPP statistics */ 125044961713Sgirish nxgep->statsp->ipp_ksp = nxge_setup_local_kstat(nxgep, 1251*71cd5202Smisaki nxgep->instance, 1252*71cd5202Smisaki "IPP Stats", 1253*71cd5202Smisaki &nxge_ipp_stats[0], 1254*71cd5202Smisaki IPP_STAT_END, 1255*71cd5202Smisaki nxge_ipp_stat_update); 125644961713Sgirish #ifdef NXGE_DEBUG_ERROR 125744961713Sgirish if (nxgep->istatsp->pp_ksp == NULL) 125844961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for ipp")); 125944961713Sgirish #endif 126044961713Sgirish 126144961713Sgirish /* Setup TXC statistics */ 126244961713Sgirish nxgep->statsp->txc_ksp = nxge_setup_local_kstat(nxgep, 1263*71cd5202Smisaki nxgep->instance, "TXC Stats", &nxge_txc_stats[0], 1264*71cd5202Smisaki TXC_STAT_END, nxge_txc_stat_update); 126544961713Sgirish #ifdef NXGE_DEBUG_ERROR 126644961713Sgirish if (nxgep->statsp->txc_ksp == NULL) 126744961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for txc")); 126844961713Sgirish #endif 126944961713Sgirish 127044961713Sgirish /* Setup ZCP statistics */ 127144961713Sgirish nxgep->statsp->zcp_ksp = nxge_setup_local_kstat(nxgep, 1272*71cd5202Smisaki nxgep->instance, "ZCP Stats", &nxge_zcp_stats[0], 1273*71cd5202Smisaki ZCP_STAT_END, nxge_zcp_stat_update); 127444961713Sgirish #ifdef NXGE_DEBUG_ERROR 127544961713Sgirish if (nxgep->statsp->zcp_ksp == NULL) 127644961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed for zcp")); 127744961713Sgirish #endif 127844961713Sgirish 127944961713Sgirish /* Setup FFLP statistics */ 128044961713Sgirish nxgep->statsp->fflp_ksp[0] = nxge_setup_local_kstat(nxgep, 1281*71cd5202Smisaki nxgep->instance, "FFLP Stats", &nxge_fflp_stats[0], 1282*71cd5202Smisaki FFLP_STAT_END, nxge_fflp_stat_update); 128344961713Sgirish 128444961713Sgirish #ifdef NXGE_DEBUG_ERROR 128544961713Sgirish if (nxgep->statsp->fflp_ksp == NULL) 128644961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, 1287*71cd5202Smisaki "kstat_create failed for fflp")); 128844961713Sgirish #endif 128944961713Sgirish 129044961713Sgirish (void) sprintf(mmac_name, "MMAC Stats%d", nxgep->instance); 129144961713Sgirish nxgep->statsp->mmac_ksp = nxge_setup_local_kstat(nxgep, 1292*71cd5202Smisaki nxgep->instance, "MMAC Stats", &nxge_mmac_stats[0], 1293*71cd5202Smisaki MMAC_STATS_END, nxge_mmac_stat_update); 129444961713Sgirish 129544961713Sgirish nxge_kstat_sz = sizeof (nxge_port_kstat_t) + 1296*71cd5202Smisaki sizeof (nxge_mac_kstat_t) - sizeof (kstat_named_t); 129744961713Sgirish 129844961713Sgirish if ((ksp = kstat_create(NXGE_DRIVER_NAME, nxgep->instance, 1299*71cd5202Smisaki "Port Stats", "net", KSTAT_TYPE_NAMED, 1300*71cd5202Smisaki nxge_kstat_sz / sizeof (kstat_named_t), 0)) == NULL) { 130144961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "kstat_create failed")); 130244961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_setup_kstats")); 130344961713Sgirish return; 130444961713Sgirish } 130544961713Sgirish 130644961713Sgirish /* 1307a3c5bd6dSspeer * kstats 130844961713Sgirish */ 1309a3c5bd6dSspeer nxgekp = (p_nxge_port_kstat_t)ksp->ks_data; 131044961713Sgirish 131144961713Sgirish /* 131244961713Sgirish * transceiver state informations. 131344961713Sgirish */ 1314a3c5bd6dSspeer kstat_named_init(&nxgekp->xcvr_inits, "xcvr_inits", 1315*71cd5202Smisaki KSTAT_DATA_ULONG); 1316a3c5bd6dSspeer kstat_named_init(&nxgekp->xcvr_inuse, "xcvr_inuse", 1317*71cd5202Smisaki KSTAT_DATA_ULONG); 1318a3c5bd6dSspeer kstat_named_init(&nxgekp->xcvr_addr, "xcvr_addr", 1319*71cd5202Smisaki KSTAT_DATA_ULONG); 1320a3c5bd6dSspeer kstat_named_init(&nxgekp->xcvr_id, "xcvr_id", 1321*71cd5202Smisaki KSTAT_DATA_ULONG); 1322a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_autoneg, "cap_autoneg", 1323*71cd5202Smisaki KSTAT_DATA_ULONG); 1324a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_10gfdx, "cap_10gfdx", 1325*71cd5202Smisaki KSTAT_DATA_ULONG); 1326a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_10ghdx, "cap_10ghdx", 1327*71cd5202Smisaki KSTAT_DATA_ULONG); 1328a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_1000fdx, "cap_1000fdx", 1329*71cd5202Smisaki KSTAT_DATA_ULONG); 1330a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_1000hdx, "cap_1000hdx", 1331*71cd5202Smisaki KSTAT_DATA_ULONG); 1332a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_100T4, "cap_100T4", 1333*71cd5202Smisaki KSTAT_DATA_ULONG); 1334a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_100fdx, "cap_100fdx", 1335*71cd5202Smisaki KSTAT_DATA_ULONG); 1336a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_100hdx, "cap_100hdx", 1337*71cd5202Smisaki KSTAT_DATA_ULONG); 1338a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_10fdx, "cap_10fdx", 1339*71cd5202Smisaki KSTAT_DATA_ULONG); 1340a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_10hdx, "cap_10hdx", 1341*71cd5202Smisaki KSTAT_DATA_ULONG); 1342a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_asmpause, "cap_asmpause", 1343*71cd5202Smisaki KSTAT_DATA_ULONG); 1344a3c5bd6dSspeer kstat_named_init(&nxgekp->cap_pause, "cap_pause", 1345*71cd5202Smisaki KSTAT_DATA_ULONG); 134644961713Sgirish 134744961713Sgirish /* 134844961713Sgirish * Link partner capabilities. 134944961713Sgirish */ 1350a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_autoneg, "lp_cap_autoneg", 1351*71cd5202Smisaki KSTAT_DATA_ULONG); 1352a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_10gfdx, "lp_cap_10gfdx", 1353*71cd5202Smisaki KSTAT_DATA_ULONG); 1354a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_10ghdx, "lp_cap_10ghdx", 1355*71cd5202Smisaki KSTAT_DATA_ULONG); 1356a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_1000fdx, "lp_cap_1000fdx", 1357*71cd5202Smisaki KSTAT_DATA_ULONG); 1358a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_1000hdx, "lp_cap_1000hdx", 1359*71cd5202Smisaki KSTAT_DATA_ULONG); 1360a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_100T4, "lp_cap_100T4", 1361*71cd5202Smisaki KSTAT_DATA_ULONG); 1362a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_100fdx, "lp_cap_100fdx", 1363*71cd5202Smisaki KSTAT_DATA_ULONG); 1364a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_100hdx, "lp_cap_100hdx", 1365*71cd5202Smisaki KSTAT_DATA_ULONG); 1366a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_10fdx, "lp_cap_10fdx", 1367*71cd5202Smisaki KSTAT_DATA_ULONG); 1368a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_10hdx, "lp_cap_10hdx", 1369*71cd5202Smisaki KSTAT_DATA_ULONG); 1370a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_asmpause, "lp_cap_asmpause", 1371*71cd5202Smisaki KSTAT_DATA_ULONG); 1372a3c5bd6dSspeer kstat_named_init(&nxgekp->lp_cap_pause, "lp_cap_pause", 1373*71cd5202Smisaki KSTAT_DATA_ULONG); 137444961713Sgirish /* 137544961713Sgirish * Shared link setup. 137644961713Sgirish */ 1377a3c5bd6dSspeer kstat_named_init(&nxgekp->link_T4, "link_T4", 1378*71cd5202Smisaki KSTAT_DATA_ULONG); 1379a3c5bd6dSspeer kstat_named_init(&nxgekp->link_speed, "link_speed", 1380*71cd5202Smisaki KSTAT_DATA_ULONG); 1381a3c5bd6dSspeer kstat_named_init(&nxgekp->link_duplex, "link_duplex", 1382*71cd5202Smisaki KSTAT_DATA_CHAR); 1383a3c5bd6dSspeer kstat_named_init(&nxgekp->link_asmpause, "link_asmpause", 1384*71cd5202Smisaki KSTAT_DATA_ULONG); 1385a3c5bd6dSspeer kstat_named_init(&nxgekp->link_pause, "link_pause", 1386*71cd5202Smisaki KSTAT_DATA_ULONG); 1387a3c5bd6dSspeer kstat_named_init(&nxgekp->link_up, "link_up", 1388*71cd5202Smisaki KSTAT_DATA_ULONG); 138944961713Sgirish 139044961713Sgirish /* 1391a3c5bd6dSspeer * Let the user know the MTU currently in use by the physical MAC 1392a3c5bd6dSspeer * port. 139344961713Sgirish */ 1394a3c5bd6dSspeer kstat_named_init(&nxgekp->mac_mtu, "mac_mtu", 1395*71cd5202Smisaki KSTAT_DATA_ULONG); 139644961713Sgirish 139744961713Sgirish /* 139844961713Sgirish * Loopback statistics. 139944961713Sgirish */ 1400a3c5bd6dSspeer kstat_named_init(&nxgekp->lb_mode, "lb_mode", 1401*71cd5202Smisaki KSTAT_DATA_ULONG); 140244961713Sgirish 140344961713Sgirish /* 1404a3c5bd6dSspeer * This tells the user whether the driver is in QOS mode or not. 140544961713Sgirish */ 1406a3c5bd6dSspeer kstat_named_init(&nxgekp->qos_mode, "qos_mode", 1407*71cd5202Smisaki KSTAT_DATA_ULONG); 140844961713Sgirish 140944961713Sgirish /* 141044961713Sgirish * This tells whether the instance is trunked or not 141144961713Sgirish */ 1412a3c5bd6dSspeer kstat_named_init(&nxgekp->trunk_mode, "trunk_mode", 1413*71cd5202Smisaki KSTAT_DATA_ULONG); 141444961713Sgirish 141544961713Sgirish #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 1416a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_reqs, "mdt_reqs", 1417*71cd5202Smisaki KSTAT_DATA_ULONG); 1418a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_hdr_bufs, "mdt_hdr_bufs", 1419*71cd5202Smisaki KSTAT_DATA_ULONG); 1420a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_pld_bufs, "mdt_pld_bufs", 1421*71cd5202Smisaki KSTAT_DATA_ULONG); 1422a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_pkts, "mdt_pkts", 1423*71cd5202Smisaki KSTAT_DATA_ULONG); 1424a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_hdrs, "mdt_hdrs", 1425*71cd5202Smisaki KSTAT_DATA_ULONG); 1426a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_plds, "mdt_plds", 1427*71cd5202Smisaki KSTAT_DATA_ULONG); 1428a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_hdr_bind_fail, "mdt_hdr_bind_fail", 1429*71cd5202Smisaki KSTAT_DATA_ULONG); 1430a3c5bd6dSspeer kstat_named_init(&nxgekp->mdt_pld_bind_fail, "mdt_pld_bind_fail", 1431*71cd5202Smisaki KSTAT_DATA_ULONG); 143244961713Sgirish #endif 1433321febdeSsbehera #ifdef ACCEPT_JUMBO 1434a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_jumbo_pkts, "tx_jumbo_pkts", 1435*71cd5202Smisaki KSTAT_DATA_ULONG); 143644961713Sgirish #endif 143744961713Sgirish 143844961713Sgirish /* 143944961713Sgirish * Rx Statistics. 144044961713Sgirish */ 1441321febdeSsbehera #ifdef ACCEPT_JUMBO 1442a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_jumbo_pkts, "rx_jumbo_pkts", 1443*71cd5202Smisaki KSTAT_DATA_ULONG); 144444961713Sgirish #endif 144544961713Sgirish /* General MAC statistics */ 1446a3c5bd6dSspeer kstat_named_init(&nxgekp->ifspeed, "ifspeed", 1447*71cd5202Smisaki KSTAT_DATA_UINT64); 1448a3c5bd6dSspeer kstat_named_init(&nxgekp->promisc, "promisc", 1449*71cd5202Smisaki KSTAT_DATA_CHAR); 1450a3c5bd6dSspeer kstat_named_init(&nxgekp->rev_id, "rev_id", 1451*71cd5202Smisaki KSTAT_DATA_ULONG); 145244961713Sgirish 145344961713Sgirish ksp->ks_update = nxge_port_kstat_update; 145444961713Sgirish ksp->ks_private = (void *) nxgep; 145544961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) 145644961713Sgirish nxge_xmac_init_kstats(ksp); 145744961713Sgirish else 145844961713Sgirish nxge_bmac_init_kstats(ksp); 145944961713Sgirish kstat_install(ksp); 146044961713Sgirish nxgep->statsp->port_ksp = ksp; 146144961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_setup_kstats")); 146244961713Sgirish } 146344961713Sgirish 1464a3c5bd6dSspeer /* ARGSUSED */ 146544961713Sgirish void 146644961713Sgirish nxge_xmac_init_kstats(struct kstat *ksp) 146744961713Sgirish { 1468a3c5bd6dSspeer p_nxge_xmac_kstat_t nxgekp; 146944961713Sgirish 147044961713Sgirish nxgekp = (p_nxge_xmac_kstat_t)ksp->ks_data; 147144961713Sgirish 147244961713Sgirish /* 147344961713Sgirish * Transmit MAC statistics. 147444961713Sgirish */ 1475a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 1476*71cd5202Smisaki KSTAT_DATA_ULONG); 1477a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_underflow_err, "txmac_underflow_err", 1478*71cd5202Smisaki KSTAT_DATA_ULONG); 1479a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_overflow_err, "txmac_overflow_err", 1480*71cd5202Smisaki KSTAT_DATA_ULONG); 1481a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_maxpktsize_err, "txmac_maxpktsize_err", 1482*71cd5202Smisaki KSTAT_DATA_ULONG); 1483a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_fifo_xfr_err, "txmac_fifo_xfr_err", 1484*71cd5202Smisaki KSTAT_DATA_ULONG); 1485a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 1486*71cd5202Smisaki KSTAT_DATA_ULONG); 148744961713Sgirish 148844961713Sgirish /* Receive MAC statistics */ 1489321febdeSsbehera kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 1490321febdeSsbehera KSTAT_DATA_ULONG); 1491a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 1492*71cd5202Smisaki KSTAT_DATA_ULONG); 1493a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_underflow_err, "rxmac_underflow_err", 1494*71cd5202Smisaki KSTAT_DATA_ULONG); 1495a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 1496*71cd5202Smisaki KSTAT_DATA_ULONG); 1497a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 1498*71cd5202Smisaki KSTAT_DATA_ULONG); 1499a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 1500*71cd5202Smisaki KSTAT_DATA_ULONG); 1501a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 1502*71cd5202Smisaki KSTAT_DATA_ULONG); 150344961713Sgirish kstat_named_init(&nxgekp->rx_frame_align_err_cnt, 1504*71cd5202Smisaki "rxmac_alignment_err", 1505*71cd5202Smisaki KSTAT_DATA_ULONG); 1506a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist1_cnt, "rxmac_64_cnt", 1507*71cd5202Smisaki KSTAT_DATA_ULONG); 1508a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist2_cnt, "rxmac_65_127_cnt", 1509*71cd5202Smisaki KSTAT_DATA_ULONG); 1510a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist3_cnt, "rxmac_128_255_cnt", 1511*71cd5202Smisaki KSTAT_DATA_ULONG); 1512a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist4_cnt, "rxmac_256_511_cnt", 1513*71cd5202Smisaki KSTAT_DATA_ULONG); 1514a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist5_cnt, "rxmac_512_1023_cnt", 1515*71cd5202Smisaki KSTAT_DATA_ULONG); 1516a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist6_cnt, "rxmac_1024_1522_cnt", 1517*71cd5202Smisaki KSTAT_DATA_ULONG); 1518321febdeSsbehera kstat_named_init(&nxgekp->rx_hist7_cnt, "rxmac_jumbo_cnt", 1519321febdeSsbehera KSTAT_DATA_ULONG); 1520a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_broadcast_cnt, "rxmac_broadcast_cnt", 1521*71cd5202Smisaki KSTAT_DATA_ULONG); 1522a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_mult_cnt, "rxmac_multicast_cnt", 1523*71cd5202Smisaki KSTAT_DATA_ULONG); 1524a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_frag_cnt, "rxmac_fragment_cnt", 1525*71cd5202Smisaki KSTAT_DATA_ULONG); 1526a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_linkfault_err_cnt, "rxmac_linkfault_errs", 1527*71cd5202Smisaki KSTAT_DATA_ULONG); 152844961713Sgirish kstat_named_init(&nxgekp->rx_remote_fault_err_cnt, 1529*71cd5202Smisaki "rxmac_remote_faults", 1530*71cd5202Smisaki KSTAT_DATA_ULONG); 153144961713Sgirish kstat_named_init(&nxgekp->rx_local_fault_err_cnt, "rxmac_local_faults", 1532*71cd5202Smisaki KSTAT_DATA_ULONG); 153344961713Sgirish 153444961713Sgirish /* XPCS statistics */ 153544961713Sgirish 1536a3c5bd6dSspeer kstat_named_init(&nxgekp->xpcs_deskew_err_cnt, "xpcs_deskew_err_cnt", 1537*71cd5202Smisaki KSTAT_DATA_ULONG); 153814ea4bb7Ssd #ifdef NXGE_DEBUG_SYMBOL_ERR 153944961713Sgirish kstat_named_init(&nxgekp->xpcs_ln0_symbol_err_cnt, 1540*71cd5202Smisaki "xpcs_ln0_symbol_err_cnt", 1541*71cd5202Smisaki KSTAT_DATA_ULONG); 154244961713Sgirish kstat_named_init(&nxgekp->xpcs_ln1_symbol_err_cnt, 1543*71cd5202Smisaki "xpcs_ln1_symbol_err_cnt", 1544*71cd5202Smisaki KSTAT_DATA_ULONG); 154544961713Sgirish kstat_named_init(&nxgekp->xpcs_ln2_symbol_err_cnt, 1546*71cd5202Smisaki "xpcs_ln2_symbol_err_cnt", 1547*71cd5202Smisaki KSTAT_DATA_ULONG); 154844961713Sgirish kstat_named_init(&nxgekp->xpcs_ln3_symbol_err_cnt, 1549*71cd5202Smisaki "xpcs_ln3_symbol_err_cnt", 1550*71cd5202Smisaki KSTAT_DATA_ULONG); 155114ea4bb7Ssd #endif 155244961713Sgirish } 155344961713Sgirish 1554a3c5bd6dSspeer /* ARGSUSED */ 155544961713Sgirish void 155644961713Sgirish nxge_bmac_init_kstats(struct kstat *ksp) 155744961713Sgirish { 1558a3c5bd6dSspeer p_nxge_bmac_kstat_t nxgekp; 155944961713Sgirish 156044961713Sgirish nxgekp = (p_nxge_bmac_kstat_t)ksp->ks_data; 156144961713Sgirish 156244961713Sgirish /* 156344961713Sgirish * Transmit MAC statistics. 156444961713Sgirish */ 1565a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 1566*71cd5202Smisaki KSTAT_DATA_ULONG); 1567a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_underrun_err, "txmac_underflow_err", 1568*71cd5202Smisaki KSTAT_DATA_ULONG); 1569a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_max_pkt_err, "txmac_maxpktsize_err", 1570*71cd5202Smisaki KSTAT_DATA_ULONG); 1571a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 1572*71cd5202Smisaki KSTAT_DATA_ULONG); 157344961713Sgirish 157444961713Sgirish /* Receive MAC statistics */ 1575a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 1576*71cd5202Smisaki KSTAT_DATA_ULONG); 1577a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 1578*71cd5202Smisaki KSTAT_DATA_ULONG); 1579a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 1580*71cd5202Smisaki KSTAT_DATA_ULONG); 1581a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 1582*71cd5202Smisaki KSTAT_DATA_ULONG); 1583a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 1584*71cd5202Smisaki KSTAT_DATA_ULONG); 1585a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_align_err_cnt, "rxmac_alignment_err", 1586*71cd5202Smisaki KSTAT_DATA_ULONG); 1587a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 1588*71cd5202Smisaki KSTAT_DATA_ULONG); 158944961713Sgirish } 159044961713Sgirish 1591a3c5bd6dSspeer /* ARGSUSED */ 159244961713Sgirish void 159344961713Sgirish nxge_mac_init_kstats(p_nxge_t nxgep, struct kstat *ksp) 159444961713Sgirish { 1595a3c5bd6dSspeer p_nxge_mac_kstat_t nxgekp; 159644961713Sgirish 159744961713Sgirish nxgekp = (p_nxge_mac_kstat_t)ksp->ks_data; 159844961713Sgirish 159944961713Sgirish /* 160044961713Sgirish * Transmit MAC statistics. 160144961713Sgirish */ 1602a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_frame_cnt, "txmac_frame_cnt", 1603*71cd5202Smisaki KSTAT_DATA_ULONG); 1604a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_underflow_err, "txmac_underflow_err", 1605*71cd5202Smisaki KSTAT_DATA_ULONG); 1606a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_overflow_err, "txmac_overflow_err", 1607*71cd5202Smisaki KSTAT_DATA_ULONG); 1608a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_maxpktsize_err, "txmac_maxpktsize_err", 1609*71cd5202Smisaki KSTAT_DATA_ULONG); 1610a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_fifo_xfr_err, "txmac_fifo_xfr_err", 1611*71cd5202Smisaki KSTAT_DATA_ULONG); 1612a3c5bd6dSspeer kstat_named_init(&nxgekp->tx_byte_cnt, "txmac_byte_cnt", 1613*71cd5202Smisaki KSTAT_DATA_ULONG); 161444961713Sgirish 1615a3c5bd6dSspeer /* 1616a3c5bd6dSspeer * Receive MAC statistics 1617a3c5bd6dSspeer */ 1618a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_overflow_err, "rxmac_overflow_err", 1619*71cd5202Smisaki KSTAT_DATA_ULONG); 1620a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_underflow_err, "rxmac_underflow_err", 1621*71cd5202Smisaki KSTAT_DATA_ULONG); 1622a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_crc_err_cnt, "rxmac_crc_err", 1623*71cd5202Smisaki KSTAT_DATA_ULONG); 1624a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_len_err_cnt, "rxmac_length_err", 1625*71cd5202Smisaki KSTAT_DATA_ULONG); 1626a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_viol_err_cnt, "rxmac_code_violations", 1627*71cd5202Smisaki KSTAT_DATA_ULONG); 1628a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_byte_cnt, "rxmac_byte_cnt", 1629*71cd5202Smisaki KSTAT_DATA_ULONG); 163044961713Sgirish kstat_named_init(&nxgekp->rx_frame_align_err_cnt, 1631*71cd5202Smisaki "rxmac_alignment_err", 1632*71cd5202Smisaki KSTAT_DATA_ULONG); 1633321febdeSsbehera kstat_named_init(&nxgekp->rx_frame_cnt, "rxmac_frame_cnt", 1634321febdeSsbehera KSTAT_DATA_ULONG); 163544961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 163644961713Sgirish kstat_named_init(&nxgekp->rx_hist1_cnt, "rxmac_64_cnt", 1637*71cd5202Smisaki KSTAT_DATA_ULONG); 163844961713Sgirish kstat_named_init(&nxgekp->rx_hist2_cnt, "rxmac_65_127_cnt", 1639*71cd5202Smisaki KSTAT_DATA_ULONG); 164044961713Sgirish kstat_named_init(&nxgekp->rx_hist3_cnt, "rxmac_128_255_cnt", 1641*71cd5202Smisaki KSTAT_DATA_ULONG); 164244961713Sgirish kstat_named_init(&nxgekp->rx_hist4_cnt, "rxmac_256_511_cnt", 1643*71cd5202Smisaki KSTAT_DATA_ULONG); 164444961713Sgirish kstat_named_init(&nxgekp->rx_hist5_cnt, "rxmac_512_1023_cnt", 1645*71cd5202Smisaki KSTAT_DATA_ULONG); 1646a3c5bd6dSspeer kstat_named_init(&nxgekp->rx_hist6_cnt, "rxmac_1024_1522_cnt", 1647*71cd5202Smisaki KSTAT_DATA_ULONG); 1648321febdeSsbehera kstat_named_init(&nxgekp->rx_hist7_cnt, "rxmac_jumbo_cnt", 1649321febdeSsbehera KSTAT_DATA_ULONG); 165044961713Sgirish kstat_named_init(&nxgekp->rx_broadcast_cnt, 1651*71cd5202Smisaki "rxmac_broadcast_cnt", 1652*71cd5202Smisaki KSTAT_DATA_ULONG); 165344961713Sgirish kstat_named_init(&nxgekp->rx_mult_cnt, "rxmac_multicast_cnt", 1654*71cd5202Smisaki KSTAT_DATA_ULONG); 165544961713Sgirish kstat_named_init(&nxgekp->rx_frag_cnt, "rxmac_fragment_cnt", 1656*71cd5202Smisaki KSTAT_DATA_ULONG); 165744961713Sgirish kstat_named_init(&nxgekp->rx_linkfault_err_cnt, 1658*71cd5202Smisaki "rxmac_linkfault_errs", 1659*71cd5202Smisaki KSTAT_DATA_ULONG); 166044961713Sgirish kstat_named_init(&nxgekp->rx_remote_fault_err_cnt, 1661*71cd5202Smisaki "rxmac_remote_faults", 1662*71cd5202Smisaki KSTAT_DATA_ULONG); 166344961713Sgirish kstat_named_init(&nxgekp->rx_local_fault_err_cnt, 1664*71cd5202Smisaki "rxmac_local_faults", 1665*71cd5202Smisaki KSTAT_DATA_ULONG); 166644961713Sgirish } 166744961713Sgirish } 166844961713Sgirish 1669a3c5bd6dSspeer /* ARGSUSED */ 167044961713Sgirish void 167144961713Sgirish nxge_destroy_kstats(p_nxge_t nxgep) 167244961713Sgirish { 167344961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_destroy_kstats")); 1674a3c5bd6dSspeer 1675a3c5bd6dSspeer if (nxgep->statsp == NULL) 167644961713Sgirish return; 1677a3c5bd6dSspeer if (nxgep->statsp->ksp) 167844961713Sgirish kstat_delete(nxgep->statsp->ksp); 167944961713Sgirish 168044961713Sgirish if (nxgep->statsp->rdc_sys_ksp) 168144961713Sgirish kstat_delete(nxgep->statsp->rdc_sys_ksp); 1682a3c5bd6dSspeer if (nxgep->statsp->fflp_ksp[0]) 168344961713Sgirish kstat_delete(nxgep->statsp->fflp_ksp[0]); 168444961713Sgirish if (nxgep->statsp->ipp_ksp) 168544961713Sgirish kstat_delete(nxgep->statsp->ipp_ksp); 168644961713Sgirish if (nxgep->statsp->txc_ksp) 168744961713Sgirish kstat_delete(nxgep->statsp->txc_ksp); 168844961713Sgirish if (nxgep->statsp->mac_ksp) 168944961713Sgirish kstat_delete(nxgep->statsp->mac_ksp); 169044961713Sgirish if (nxgep->statsp->zcp_ksp) 169144961713Sgirish kstat_delete(nxgep->statsp->zcp_ksp); 169244961713Sgirish if (nxgep->statsp->port_ksp) 169344961713Sgirish kstat_delete(nxgep->statsp->port_ksp); 169444961713Sgirish if (nxgep->statsp->mmac_ksp) 169544961713Sgirish kstat_delete(nxgep->statsp->mmac_ksp); 1696a3c5bd6dSspeer if (nxgep->statsp) 169744961713Sgirish KMEM_FREE(nxgep->statsp, nxgep->statsp->stats_size); 1698a3c5bd6dSspeer 169944961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_destroy_kstats")); 170044961713Sgirish } 170144961713Sgirish 1702a3c5bd6dSspeer /* ARGSUSED */ 170344961713Sgirish int 170444961713Sgirish nxge_port_kstat_update(kstat_t *ksp, int rw) 170544961713Sgirish { 170644961713Sgirish p_nxge_t nxgep; 170744961713Sgirish p_nxge_stats_t statsp; 170844961713Sgirish p_nxge_port_kstat_t nxgekp; 1709a3c5bd6dSspeer 171044961713Sgirish nxgep = (p_nxge_t)ksp->ks_private; 171144961713Sgirish if (nxgep == NULL) 171244961713Sgirish return (-1); 171344961713Sgirish 171444961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_port_kstat_update")); 171544961713Sgirish statsp = (p_nxge_stats_t)nxgep->statsp; 171644961713Sgirish nxgekp = (p_nxge_port_kstat_t)ksp->ks_data; 171744961713Sgirish nxge_save_cntrs(nxgep); 171844961713Sgirish 171944961713Sgirish if (rw == KSTAT_WRITE) { 172044961713Sgirish /* 172144961713Sgirish * transceiver state informations. 172244961713Sgirish */ 1723a3c5bd6dSspeer statsp->mac_stats.xcvr_inits = nxgekp->xcvr_inits.value.ul; 172444961713Sgirish 172544961713Sgirish /* 172644961713Sgirish * Tx Statistics. 172744961713Sgirish */ 172844961713Sgirish #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 1729a3c5bd6dSspeer statsp->port_stats.mdt_reqs = nxgekp->mdt_reqs.value.ul; 1730a3c5bd6dSspeer statsp->port_stats.mdt_hdr_bufs = nxgekp->mdt_hdr_bufs.value.ul; 1731a3c5bd6dSspeer statsp->port_stats.mdt_pld_bufs = nxgekp->mdt_pld_bufs.value.ul; 1732a3c5bd6dSspeer statsp->port_stats.mdt_pkts = nxgekp->mdt_pkts.value.ul; 1733a3c5bd6dSspeer statsp->port_stats.mdt_hdrs = nxgekp->mdt_hdrs.value.ul; 1734a3c5bd6dSspeer statsp->port_stats.mdt_plds = nxgekp->mdt_plds.value.ul; 173544961713Sgirish statsp->port_stats.mdt_hdr_bind_fail = 1736*71cd5202Smisaki nxgekp->mdt_hdr_bind_fail.value.ul; 173744961713Sgirish statsp->port_stats.mdt_pld_bind_fail = 1738*71cd5202Smisaki nxgekp->mdt_pld_bind_fail.value.ul; 173944961713Sgirish #endif 174044961713Sgirish #ifdef ACCEPT_JUMBO 174144961713Sgirish statsp->port_stats.tx_jumbo_pkts = 1742*71cd5202Smisaki nxgekp->tx_jumbo_pkts.value.ul; 174344961713Sgirish #endif 174444961713Sgirish /* 174544961713Sgirish * Rx Statistics. 174644961713Sgirish */ 1747321febdeSsbehera #ifdef ACCEPT_JUMBO 174844961713Sgirish statsp->port_stats.rx_jumbo_pkts = 1749*71cd5202Smisaki nxgekp->rx_jumbo_pkts.value.ul; 175044961713Sgirish #endif 1751321febdeSsbehera if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 1752321febdeSsbehera (void) nxge_xmac_stat_update(ksp, KSTAT_WRITE); 1753321febdeSsbehera } else { 1754321febdeSsbehera (void) nxge_bmac_stat_update(ksp, KSTAT_WRITE); 1755321febdeSsbehera } 175644961713Sgirish return (0); 175744961713Sgirish } else { 175844961713Sgirish if (nxgep->filter.all_phys_cnt) 175944961713Sgirish (void) strcpy(nxgekp->promisc.value.c, "phys"); 176044961713Sgirish else if (nxgep->filter.all_multicast_cnt) 176144961713Sgirish (void) strcpy(nxgekp->promisc.value.c, "multi"); 176244961713Sgirish else 176344961713Sgirish (void) strcpy(nxgekp->promisc.value.c, "off"); 1764a3c5bd6dSspeer nxgekp->ifspeed.value.ul = 1765*71cd5202Smisaki statsp->mac_stats.link_speed * 1000000ULL; 1766a3c5bd6dSspeer nxgekp->rev_id.value.ul = statsp->mac_stats.rev_id; 176744961713Sgirish 176844961713Sgirish /* 176944961713Sgirish * transceiver state informations. 177044961713Sgirish */ 1771a3c5bd6dSspeer nxgekp->xcvr_inits.value.ul = statsp->mac_stats.xcvr_inits; 1772a3c5bd6dSspeer nxgekp->xcvr_inuse.value.ul = statsp->mac_stats.xcvr_inuse; 1773a3c5bd6dSspeer nxgekp->xcvr_addr.value.ul = statsp->mac_stats.xcvr_portn; 1774a3c5bd6dSspeer nxgekp->xcvr_id.value.ul = statsp->mac_stats.xcvr_id; 1775a3c5bd6dSspeer nxgekp->cap_autoneg.value.ul = statsp->mac_stats.cap_autoneg; 1776a3c5bd6dSspeer nxgekp->cap_10gfdx.value.ul = statsp->mac_stats.cap_10gfdx; 1777a3c5bd6dSspeer nxgekp->cap_10ghdx.value.ul = statsp->mac_stats.cap_10ghdx; 1778a3c5bd6dSspeer nxgekp->cap_1000fdx.value.ul = statsp->mac_stats.cap_1000fdx; 1779a3c5bd6dSspeer nxgekp->cap_1000hdx.value.ul = statsp->mac_stats.cap_1000hdx; 1780a3c5bd6dSspeer nxgekp->cap_100T4.value.ul = statsp->mac_stats.cap_100T4; 1781a3c5bd6dSspeer nxgekp->cap_100fdx.value.ul = statsp->mac_stats.cap_100fdx; 1782a3c5bd6dSspeer nxgekp->cap_100hdx.value.ul = statsp->mac_stats.cap_100hdx; 1783a3c5bd6dSspeer nxgekp->cap_10fdx.value.ul = statsp->mac_stats.cap_10fdx; 1784a3c5bd6dSspeer nxgekp->cap_10hdx.value.ul = statsp->mac_stats.cap_10hdx; 1785a3c5bd6dSspeer nxgekp->cap_asmpause.value.ul = 1786*71cd5202Smisaki statsp->mac_stats.cap_asmpause; 1787a3c5bd6dSspeer nxgekp->cap_pause.value.ul = statsp->mac_stats.cap_pause; 178844961713Sgirish 178944961713Sgirish /* 179044961713Sgirish * Link partner capabilities. 179144961713Sgirish */ 1792a3c5bd6dSspeer nxgekp->lp_cap_autoneg.value.ul = 1793*71cd5202Smisaki statsp->mac_stats.lp_cap_autoneg; 179444961713Sgirish nxgekp->lp_cap_10gfdx.value.ul = 1795*71cd5202Smisaki statsp->mac_stats.lp_cap_10gfdx; 179644961713Sgirish nxgekp->lp_cap_10ghdx.value.ul = 1797*71cd5202Smisaki statsp->mac_stats.lp_cap_10ghdx; 1798a3c5bd6dSspeer nxgekp->lp_cap_1000fdx.value.ul = 1799*71cd5202Smisaki statsp->mac_stats.lp_cap_1000fdx; 1800a3c5bd6dSspeer nxgekp->lp_cap_1000hdx.value.ul = 1801*71cd5202Smisaki statsp->mac_stats.lp_cap_1000hdx; 1802a3c5bd6dSspeer nxgekp->lp_cap_100T4.value.ul = 1803*71cd5202Smisaki statsp->mac_stats.lp_cap_100T4; 1804a3c5bd6dSspeer nxgekp->lp_cap_100fdx.value.ul = 1805*71cd5202Smisaki statsp->mac_stats.lp_cap_100fdx; 1806a3c5bd6dSspeer nxgekp->lp_cap_100hdx.value.ul = 1807*71cd5202Smisaki statsp->mac_stats.lp_cap_100hdx; 1808a3c5bd6dSspeer nxgekp->lp_cap_10fdx.value.ul = 1809*71cd5202Smisaki statsp->mac_stats.lp_cap_10fdx; 1810a3c5bd6dSspeer nxgekp->lp_cap_10hdx.value.ul = 1811*71cd5202Smisaki statsp->mac_stats.lp_cap_10hdx; 181244961713Sgirish nxgekp->lp_cap_asmpause.value.ul = 1813*71cd5202Smisaki statsp->mac_stats.lp_cap_asmpause; 1814a3c5bd6dSspeer nxgekp->lp_cap_pause.value.ul = 1815*71cd5202Smisaki statsp->mac_stats.lp_cap_pause; 181644961713Sgirish 181744961713Sgirish /* 181844961713Sgirish * Physical link statistics. 181944961713Sgirish */ 1820a3c5bd6dSspeer nxgekp->link_T4.value.ul = statsp->mac_stats.link_T4; 1821a3c5bd6dSspeer nxgekp->link_speed.value.ul = statsp->mac_stats.link_speed; 182244961713Sgirish if (statsp->mac_stats.link_duplex == 2) 182344961713Sgirish (void) strcpy(nxgekp->link_duplex.value.c, "full"); 182444961713Sgirish else if (statsp->mac_stats.link_duplex == 1) 182544961713Sgirish (void) strcpy(nxgekp->link_duplex.value.c, "half"); 182644961713Sgirish else 182744961713Sgirish (void) strcpy(nxgekp->link_duplex.value.c, "unknown"); 1828a3c5bd6dSspeer nxgekp->link_asmpause.value.ul = 1829*71cd5202Smisaki statsp->mac_stats.link_asmpause; 1830a3c5bd6dSspeer nxgekp->link_pause.value.ul = statsp->mac_stats.link_pause; 1831a3c5bd6dSspeer nxgekp->link_up.value.ul = statsp->mac_stats.link_up; 183244961713Sgirish 183344961713Sgirish /* 1834a3c5bd6dSspeer * Lets the user know the MTU currently in use by the physical 1835a3c5bd6dSspeer * MAC port. 183644961713Sgirish */ 1837a3c5bd6dSspeer nxgekp->mac_mtu.value.ul = statsp->mac_stats.mac_mtu; 183844961713Sgirish 183944961713Sgirish /* 184044961713Sgirish * Loopback statistics. 184144961713Sgirish */ 1842a3c5bd6dSspeer nxgekp->lb_mode.value.ul = statsp->port_stats.lb_mode; 184344961713Sgirish 184444961713Sgirish /* 1845a3c5bd6dSspeer * This tells the user whether the driver is in QOS mode or 1846a3c5bd6dSspeer * not. 184744961713Sgirish */ 1848a3c5bd6dSspeer nxgekp->qos_mode.value.ul = statsp->port_stats.qos_mode; 184944961713Sgirish 185044961713Sgirish /* 185144961713Sgirish * This tells whether the instance is trunked or not 185244961713Sgirish */ 1853a3c5bd6dSspeer nxgekp->trunk_mode.value.ul = statsp->port_stats.trunk_mode; 185444961713Sgirish 185544961713Sgirish #if defined MULTI_DATA_TX || defined MULTI_DATA_TXV2 1856a3c5bd6dSspeer nxgekp->mdt_reqs.value.ul = statsp->port_stats.mdt_reqs; 1857a3c5bd6dSspeer nxgekp->mdt_hdr_bufs.value.ul = 1858*71cd5202Smisaki statsp->port_stats.mdt_hdr_bufs; 1859a3c5bd6dSspeer nxgekp->mdt_pld_bufs.value.ul = 1860*71cd5202Smisaki statsp->port_stats.mdt_pld_bufs; 1861a3c5bd6dSspeer nxgekp->mdt_pkts.value.ul = statsp->port_stats.mdt_pkts; 1862a3c5bd6dSspeer nxgekp->mdt_hdrs.value.ul = statsp->port_stats.mdt_hdrs; 1863a3c5bd6dSspeer nxgekp->mdt_plds.value.ul = statsp->port_stats.mdt_plds; 186444961713Sgirish nxgekp->mdt_hdr_bind_fail.value.ul = 1865*71cd5202Smisaki statsp->port_stats.mdt_hdr_bind_fail; 186644961713Sgirish nxgekp->mdt_pld_bind_fail.value.ul = 1867*71cd5202Smisaki statsp->port_stats.mdt_pld_bind_fail; 186844961713Sgirish #endif 186944961713Sgirish #ifdef ACCEPT_JUMBO 1870a3c5bd6dSspeer nxgekp->tx_jumbo_pkts.value.ul = 1871*71cd5202Smisaki statsp->port_stats.tx_jumbo_pkts; 187244961713Sgirish #endif 187344961713Sgirish #ifdef TX_MBLK_DEST 1874a3c5bd6dSspeer nxgekp->tx_1_desc.value.ul = statsp->port_stats.tx_1_desc; 1875a3c5bd6dSspeer nxgekp->tx_2_desc.value.ul = statsp->port_stats.tx_2_desc; 1876a3c5bd6dSspeer nxgekp->tx_3_desc.value.ul = statsp->port_stats.tx_3_desc; 1877a3c5bd6dSspeer nxgekp->tx_4_desc.value.ul = statsp->port_stats.tx_4_desc; 1878a3c5bd6dSspeer nxgekp->tx_5_desc.value.ul = statsp->port_stats.tx_5_desc; 1879a3c5bd6dSspeer nxgekp->tx_6_desc.value.ul = statsp->port_stats.tx_6_desc; 1880a3c5bd6dSspeer nxgekp->tx_7_desc.value.ul = statsp->port_stats.tx_7_desc; 1881a3c5bd6dSspeer nxgekp->tx_8_desc.value.ul = statsp->port_stats.tx_8_desc; 1882a3c5bd6dSspeer nxgekp->tx_max_desc.value.ul = 1883*71cd5202Smisaki statsp->port_stats.tx_max_desc; 188444961713Sgirish #endif 188544961713Sgirish /* 188644961713Sgirish * Rx Statistics. 188744961713Sgirish */ 188844961713Sgirish #ifdef ACCEPT_JUMBO 1889a3c5bd6dSspeer nxgekp->rx_jumbo_pkts.value.ul = 1890*71cd5202Smisaki statsp->port_stats.rx_jumbo_pkts; 189144961713Sgirish #endif 1892321febdeSsbehera if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 1893321febdeSsbehera (void) nxge_xmac_stat_update(ksp, KSTAT_READ); 1894321febdeSsbehera } else { 1895321febdeSsbehera (void) nxge_bmac_stat_update(ksp, KSTAT_READ); 1896321febdeSsbehera } 189744961713Sgirish } 1898a3c5bd6dSspeer 189944961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "<== nxge_port_kstat_update")); 190044961713Sgirish return (0); 190144961713Sgirish } 190244961713Sgirish 190344961713Sgirish /* 190444961713Sgirish * if this is the first init do not bother to save the 190544961713Sgirish * counters. 190644961713Sgirish */ 1907a3c5bd6dSspeer /* ARGSUSED */ 190844961713Sgirish void 190944961713Sgirish nxge_save_cntrs(p_nxge_t nxgep) 191044961713Sgirish { 1911a3c5bd6dSspeer p_nxge_stats_t statsp; 1912a3c5bd6dSspeer uint64_t val; 1913a3c5bd6dSspeer npi_handle_t handle; 1914a3c5bd6dSspeer uint8_t portn; 1915a3c5bd6dSspeer uint8_t cnt8; 1916a3c5bd6dSspeer uint16_t cnt16; 1917a3c5bd6dSspeer uint32_t cnt32; 191844961713Sgirish 191944961713Sgirish NXGE_DEBUG_MSG((nxgep, DDI_CTL, "==> nxge_save_cntrs")); 192044961713Sgirish 192144961713Sgirish statsp = (p_nxge_stats_t)nxgep->statsp; 192244961713Sgirish handle = nxgep->npi_handle; 192344961713Sgirish portn = nxgep->mac.portnum; 192444961713Sgirish 192544961713Sgirish MUTEX_ENTER(&nxgep->ouraddr_lock); 192644961713Sgirish 192744961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 192844961713Sgirish /* 192944961713Sgirish * Transmit MAC statistics. 193044961713Sgirish */ 193144961713Sgirish XMAC_REG_RD(handle, portn, XTXMAC_FRM_CNT_REG, &val); 193244961713Sgirish statsp->xmac_stats.tx_frame_cnt += (val & XTXMAC_FRM_CNT_MASK); 193344961713Sgirish XMAC_REG_RD(handle, portn, XTXMAC_BYTE_CNT_REG, &val); 193444961713Sgirish statsp->xmac_stats.tx_byte_cnt += (val & XTXMAC_BYTE_CNT_MASK); 193544961713Sgirish /* 193644961713Sgirish * Receive XMAC statistics. 193744961713Sgirish */ 193844961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_CRC_ER_CNT_REG, &val); 193944961713Sgirish statsp->xmac_stats.rx_crc_err_cnt += 1940*71cd5202Smisaki (val & XRXMAC_CRC_ER_CNT_MASK); 1941321febdeSsbehera 194244961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_MPSZER_CNT_REG, &val); 194344961713Sgirish statsp->xmac_stats.rx_len_err_cnt += 1944*71cd5202Smisaki (val & XRXMAC_MPSZER_CNT_MASK); 1945321febdeSsbehera 194644961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_CD_VIO_CNT_REG, &val); 194744961713Sgirish statsp->xmac_stats.rx_viol_err_cnt += 1948*71cd5202Smisaki (val & XRXMAC_CD_VIO_CNT_MASK); 1949321febdeSsbehera 195044961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_BT_CNT_REG, &val); 195144961713Sgirish statsp->xmac_stats.rx_byte_cnt += (val & XRXMAC_BT_CNT_MASK); 1952321febdeSsbehera 195344961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT1_REG, &val); 195444961713Sgirish statsp->xmac_stats.rx_hist1_cnt += 1955*71cd5202Smisaki (val & XRXMAC_HIST_CNT1_MASK); 1956321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1957321febdeSsbehera (val & XRXMAC_HIST_CNT1_MASK); 1958321febdeSsbehera 195944961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT2_REG, &val); 196044961713Sgirish statsp->xmac_stats.rx_hist2_cnt += 1961*71cd5202Smisaki (val & XRXMAC_HIST_CNT2_MASK); 1962321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1963321febdeSsbehera (val & XRXMAC_HIST_CNT2_MASK); 1964321febdeSsbehera 196544961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT3_REG, &val); 196644961713Sgirish statsp->xmac_stats.rx_hist3_cnt += 1967*71cd5202Smisaki (val & XRXMAC_HIST_CNT3_MASK); 1968321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1969321febdeSsbehera (val & XRXMAC_HIST_CNT3_MASK); 1970321febdeSsbehera 197144961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT4_REG, &val); 197244961713Sgirish statsp->xmac_stats.rx_hist4_cnt += 1973*71cd5202Smisaki (val & XRXMAC_HIST_CNT4_MASK); 1974321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1975321febdeSsbehera (val & XRXMAC_HIST_CNT4_MASK); 1976321febdeSsbehera 197744961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT5_REG, &val); 197844961713Sgirish statsp->xmac_stats.rx_hist5_cnt += 1979*71cd5202Smisaki (val & XRXMAC_HIST_CNT5_MASK); 1980321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1981321febdeSsbehera (val & XRXMAC_HIST_CNT5_MASK); 1982321febdeSsbehera 198344961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT6_REG, &val); 198444961713Sgirish statsp->xmac_stats.rx_hist6_cnt += 1985*71cd5202Smisaki (val & XRXMAC_HIST_CNT6_MASK); 1986321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1987321febdeSsbehera (val & XRXMAC_HIST_CNT6_MASK); 1988321febdeSsbehera 1989321febdeSsbehera XMAC_REG_RD(handle, portn, XRXMAC_HIST_CNT7_REG, &val); 1990321febdeSsbehera statsp->xmac_stats.rx_hist7_cnt += 1991321febdeSsbehera (val & XRXMAC_HIST_CNT7_MASK); 1992321febdeSsbehera statsp->xmac_stats.rx_frame_cnt += 1993321febdeSsbehera (val & XRXMAC_HIST_CNT7_MASK); 1994321febdeSsbehera 199544961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_BC_FRM_CNT_REG, &val); 199644961713Sgirish statsp->xmac_stats.rx_broadcast_cnt += 1997*71cd5202Smisaki (val & XRXMAC_BC_FRM_CNT_MASK); 1998321febdeSsbehera 199944961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_MC_FRM_CNT_REG, &val); 200044961713Sgirish statsp->xmac_stats.rx_mult_cnt += 2001*71cd5202Smisaki (val & XRXMAC_MC_FRM_CNT_MASK); 2002321febdeSsbehera 200344961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_FRAG_CNT_REG, &val); 200444961713Sgirish statsp->xmac_stats.rx_frag_cnt += (val & XRXMAC_FRAG_CNT_MASK); 2005321febdeSsbehera 200644961713Sgirish XMAC_REG_RD(handle, portn, XRXMAC_AL_ER_CNT_REG, &val); 200744961713Sgirish statsp->xmac_stats.rx_frame_align_err_cnt += 2008*71cd5202Smisaki (val & XRXMAC_AL_ER_CNT_MASK); 2009321febdeSsbehera 201044961713Sgirish XMAC_REG_RD(handle, portn, XMAC_LINK_FLT_CNT_REG, &val); 201144961713Sgirish statsp->xmac_stats.rx_linkfault_err_cnt += 2012*71cd5202Smisaki (val & XMAC_LINK_FLT_CNT_MASK); 2013321febdeSsbehera 201444961713Sgirish (void) npi_xmac_xpcs_read(handle, portn, 2015*71cd5202Smisaki XPCS_REG_DESCWERR_COUNTER, &cnt32); 201644961713Sgirish statsp->xmac_stats.xpcs_deskew_err_cnt += 2017*71cd5202Smisaki (val & XMAC_XPCS_DESKEW_ERR_CNT_MASK); 2018321febdeSsbehera 201914ea4bb7Ssd #ifdef NXGE_DEBUG_SYMBOL_ERR 202044961713Sgirish (void) npi_xmac_xpcs_read(handle, portn, 2021*71cd5202Smisaki XPCS_REG_SYMBOL_ERR_L0_1_COUNTER, &cnt32); 202244961713Sgirish statsp->xmac_stats.xpcs_ln0_symbol_err_cnt += 2023*71cd5202Smisaki (cnt32 & XMAC_XPCS_SYM_ERR_CNT_L0_MASK); 202444961713Sgirish statsp->xmac_stats.xpcs_ln1_symbol_err_cnt += 2025*71cd5202Smisaki ((cnt32 & XMAC_XPCS_SYM_ERR_CNT_L1_MASK) >> 2026*71cd5202Smisaki XMAC_XPCS_SYM_ERR_CNT_L1_SHIFT); 202744961713Sgirish (void) npi_xmac_xpcs_read(handle, portn, 2028*71cd5202Smisaki XPCS_REG_SYMBOL_ERR_L2_3_COUNTER, &cnt32); 202944961713Sgirish statsp->xmac_stats.xpcs_ln2_symbol_err_cnt += 2030*71cd5202Smisaki (cnt32 & XMAC_XPCS_SYM_ERR_CNT_L2_MASK); 203144961713Sgirish statsp->xmac_stats.xpcs_ln3_symbol_err_cnt += 2032*71cd5202Smisaki ((cnt32 & XMAC_XPCS_SYM_ERR_CNT_L3_MASK) >> 2033*71cd5202Smisaki XMAC_XPCS_SYM_ERR_CNT_L3_SHIFT); 203414ea4bb7Ssd #endif 203544961713Sgirish } else if (nxgep->mac.porttype == PORT_TYPE_BMAC) { 203644961713Sgirish /* 203744961713Sgirish * Transmit MAC statistics. 203844961713Sgirish */ 203944961713Sgirish BMAC_REG_RD(handle, portn, BTXMAC_FRM_CNT_REG, &val); 204044961713Sgirish statsp->bmac_stats.tx_frame_cnt += (val & BTXMAC_FRM_CNT_MASK); 2041321febdeSsbehera /* Clear register as it is not auto clear on read */ 2042321febdeSsbehera BMAC_REG_WR(handle, portn, BTXMAC_FRM_CNT_REG, 0); 2043321febdeSsbehera 2044321febdeSsbehera BMAC_REG_RD(handle, portn, BTXMAC_BYTE_CNT_REG, &val); 204544961713Sgirish statsp->bmac_stats.tx_byte_cnt += (val & BTXMAC_BYTE_CNT_MASK); 2046321febdeSsbehera /* Clear register as it is not auto clear on read */ 2047321febdeSsbehera BMAC_REG_WR(handle, portn, BTXMAC_BYTE_CNT_REG, 0); 204844961713Sgirish 204944961713Sgirish /* 205044961713Sgirish * Receive MAC statistics. 205144961713Sgirish */ 2052321febdeSsbehera BMAC_REG_RD(handle, portn, RXMAC_FRM_CNT_REG, &val); 205344961713Sgirish statsp->bmac_stats.rx_frame_cnt += (val & RXMAC_FRM_CNT_MASK); 2054321febdeSsbehera /* Clear register as it is not auto clear on read */ 2055321febdeSsbehera BMAC_REG_WR(handle, portn, RXMAC_FRM_CNT_REG, 0); 2056321febdeSsbehera 2057321febdeSsbehera BMAC_REG_RD(handle, portn, BRXMAC_BYTE_CNT_REG, &val); 205844961713Sgirish statsp->bmac_stats.rx_byte_cnt += (val & BRXMAC_BYTE_CNT_MASK); 2059321febdeSsbehera /* Clear register as it is not auto clear on read */ 2060321febdeSsbehera BMAC_REG_WR(handle, portn, BRXMAC_BYTE_CNT_REG, 0); 2061321febdeSsbehera 2062321febdeSsbehera BMAC_REG_RD(handle, portn, BMAC_AL_ER_CNT_REG, &val); 206344961713Sgirish statsp->bmac_stats.rx_align_err_cnt += 2064*71cd5202Smisaki (val & BMAC_AL_ER_CNT_MASK); 2065321febdeSsbehera /* Clear register as it is not auto clear on read */ 2066321febdeSsbehera BMAC_REG_WR(handle, portn, BMAC_AL_ER_CNT_REG, 0); 2067321febdeSsbehera 2068321febdeSsbehera BMAC_REG_RD(handle, portn, MAC_LEN_ER_CNT_REG, &val); 206944961713Sgirish statsp->bmac_stats.rx_len_err_cnt += 2070*71cd5202Smisaki (val & MAC_LEN_ER_CNT_MASK); 2071321febdeSsbehera /* Clear register as it is not auto clear on read */ 2072321febdeSsbehera BMAC_REG_WR(handle, portn, MAC_LEN_ER_CNT_REG, 0); 2073321febdeSsbehera 2074321febdeSsbehera BMAC_REG_RD(handle, portn, BMAC_CRC_ER_CNT_REG, &val); 207544961713Sgirish statsp->bmac_stats.rx_crc_err_cnt += 2076*71cd5202Smisaki (val & BMAC_CRC_ER_CNT_MASK); 2077321febdeSsbehera /* Clear register as it is not auto clear on read */ 2078321febdeSsbehera BMAC_REG_WR(handle, portn, BMAC_CRC_ER_CNT_REG, 0); 2079321febdeSsbehera 2080321febdeSsbehera BMAC_REG_RD(handle, portn, BMAC_CD_VIO_CNT_REG, &val); 208144961713Sgirish statsp->bmac_stats.rx_viol_err_cnt += 2082*71cd5202Smisaki (val & BMAC_CD_VIO_CNT_MASK); 2083321febdeSsbehera /* Clear register as it is not auto clear on read */ 2084321febdeSsbehera BMAC_REG_WR(handle, portn, BMAC_CD_VIO_CNT_REG, 0); 208544961713Sgirish } 2086678453a8Sspeer if (isLDOMguest(nxgep)) { 2087678453a8Sspeer MUTEX_EXIT(&nxgep->ouraddr_lock); 2088678453a8Sspeer goto nxge_save_cntrs_exit; 2089678453a8Sspeer } 209044961713Sgirish /* Update IPP counters */ 209144961713Sgirish (void) npi_ipp_get_ecc_err_count(handle, portn, &cnt8); 209244961713Sgirish statsp->ipp_stats.ecc_err_cnt += cnt8; 209344961713Sgirish (void) npi_ipp_get_pkt_dis_count(handle, portn, &cnt16); 209444961713Sgirish statsp->ipp_stats.pkt_dis_cnt += cnt16; 209544961713Sgirish (void) npi_ipp_get_cs_err_count(handle, portn, &cnt16); 209644961713Sgirish statsp->ipp_stats.bad_cs_cnt += cnt16; 209744961713Sgirish 209844961713Sgirish MUTEX_EXIT(&nxgep->ouraddr_lock); 209944961713Sgirish 210044961713Sgirish nxge_save_cntrs_exit: 210144961713Sgirish NXGE_DEBUG_MSG((nxgep, DDI_CTL, "<== nxge_save_cntrs")); 210244961713Sgirish } 210344961713Sgirish 2104678453a8Sspeer uint64_t 2105678453a8Sspeer nxge_m_rx_stat( 2106678453a8Sspeer nxge_t *nxgep, 2107678453a8Sspeer uint_t stat) 2108678453a8Sspeer { 2109678453a8Sspeer p_nxge_stats_t statsp; 2110678453a8Sspeer nxge_grp_set_t *rx_set; 2111678453a8Sspeer int8_t set[NXGE_MAX_RDCS]; 2112678453a8Sspeer int i, cursor; 2113678453a8Sspeer 2114678453a8Sspeer uint64_t val = 0; 2115678453a8Sspeer 2116678453a8Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_rx_stat")); 2117678453a8Sspeer statsp = (p_nxge_stats_t)nxgep->statsp; 2118678453a8Sspeer 2119678453a8Sspeer rx_set = &nxgep->rx_set; 2120678453a8Sspeer for (i = 0, cursor = 0; i < NXGE_MAX_RDCS; i++) { 2121678453a8Sspeer if ((1 << i) & rx_set->owned.map) { 2122678453a8Sspeer set[cursor++] = (uint8_t)i; 2123678453a8Sspeer } 2124678453a8Sspeer } 2125678453a8Sspeer 2126678453a8Sspeer for (i = 0; i < cursor; i++) { 2127678453a8Sspeer int rdc = set[i]; 2128678453a8Sspeer switch (stat) { 2129678453a8Sspeer case MAC_STAT_IERRORS: 2130678453a8Sspeer case ETHER_STAT_MACRCV_ERRORS: 2131678453a8Sspeer val += statsp->rdc_stats[rdc].ierrors; 2132678453a8Sspeer break; 2133678453a8Sspeer 2134678453a8Sspeer case MAC_STAT_RBYTES: 2135678453a8Sspeer val += statsp->rdc_stats[rdc].ibytes; 2136678453a8Sspeer break; 2137678453a8Sspeer 2138678453a8Sspeer case MAC_STAT_IPACKETS: 2139678453a8Sspeer val += statsp->rdc_stats[rdc].ipackets; 2140678453a8Sspeer break; 2141678453a8Sspeer 2142678453a8Sspeer default: 2143678453a8Sspeer break; 2144678453a8Sspeer } 2145678453a8Sspeer } 2146678453a8Sspeer 2147678453a8Sspeer return (val); 2148678453a8Sspeer } 2149678453a8Sspeer 2150678453a8Sspeer uint64_t 2151678453a8Sspeer nxge_m_tx_stat( 2152678453a8Sspeer nxge_t *nxgep, 2153678453a8Sspeer uint_t stat) 2154678453a8Sspeer { 2155678453a8Sspeer p_nxge_stats_t statsp; 2156678453a8Sspeer nxge_grp_set_t *tx_set; 2157678453a8Sspeer int8_t set[NXGE_MAX_TDCS]; 2158678453a8Sspeer int i, cursor; 2159678453a8Sspeer 2160678453a8Sspeer uint64_t val = 0; 2161678453a8Sspeer 2162678453a8Sspeer NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_tx_stat")); 2163678453a8Sspeer statsp = (p_nxge_stats_t)nxgep->statsp; 2164678453a8Sspeer 2165678453a8Sspeer tx_set = &nxgep->tx_set; 2166678453a8Sspeer for (i = 0, cursor = 0; i < NXGE_MAX_RDCS; i++) { 2167678453a8Sspeer if ((1 << i) & tx_set->owned.map) { 2168678453a8Sspeer set[cursor++] = (uint8_t)i; 2169678453a8Sspeer } 2170678453a8Sspeer } 2171678453a8Sspeer 2172678453a8Sspeer for (i = 0; i < cursor; i++) { 2173678453a8Sspeer int tdc = set[i]; 2174678453a8Sspeer switch (stat) { 2175678453a8Sspeer case MAC_STAT_OERRORS: 2176678453a8Sspeer val += statsp->tdc_stats[tdc].oerrors; 2177678453a8Sspeer break; 2178678453a8Sspeer 2179678453a8Sspeer case MAC_STAT_OBYTES: 2180678453a8Sspeer val += statsp->tdc_stats[tdc].obytes; 2181678453a8Sspeer break; 2182678453a8Sspeer 2183678453a8Sspeer case MAC_STAT_OPACKETS: 2184678453a8Sspeer val += statsp->tdc_stats[tdc].opackets; 2185678453a8Sspeer break; 2186678453a8Sspeer 2187678453a8Sspeer default: 2188678453a8Sspeer break; 2189678453a8Sspeer } 2190678453a8Sspeer } 2191678453a8Sspeer 2192678453a8Sspeer return (val); 2193678453a8Sspeer } 2194678453a8Sspeer 2195a3c5bd6dSspeer /* ARGSUSED */ 219644961713Sgirish int 219744961713Sgirish nxge_m_stat(void *arg, uint_t stat, uint64_t *value) 219844961713Sgirish { 2199a3c5bd6dSspeer p_nxge_t nxgep = (p_nxge_t)arg; 2200a3c5bd6dSspeer p_nxge_stats_t statsp; 2201a3c5bd6dSspeer uint64_t val = 0; 220244961713Sgirish 220344961713Sgirish NXGE_DEBUG_MSG((nxgep, KST_CTL, "==> nxge_m_stat")); 220444961713Sgirish statsp = (p_nxge_stats_t)nxgep->statsp; 220544961713Sgirish 220644961713Sgirish switch (stat) { 220744961713Sgirish case MAC_STAT_IFSPEED: 220844961713Sgirish val = statsp->mac_stats.link_speed * 1000000ull; 220944961713Sgirish break; 221044961713Sgirish 221144961713Sgirish case MAC_STAT_MULTIRCV: 221244961713Sgirish val = statsp->port_stats.multircv; 221344961713Sgirish break; 221444961713Sgirish 221544961713Sgirish case MAC_STAT_BRDCSTRCV: 221644961713Sgirish val = statsp->port_stats.brdcstrcv; 221744961713Sgirish break; 221844961713Sgirish 221944961713Sgirish case MAC_STAT_MULTIXMT: 222044961713Sgirish val = statsp->port_stats.multixmt; 222144961713Sgirish break; 222244961713Sgirish 222344961713Sgirish case MAC_STAT_BRDCSTXMT: 222444961713Sgirish val = statsp->port_stats.brdcstxmt; 222544961713Sgirish break; 222644961713Sgirish 222744961713Sgirish case MAC_STAT_NORCVBUF: 222844961713Sgirish val = statsp->port_stats.norcvbuf; 222944961713Sgirish break; 223044961713Sgirish 223144961713Sgirish case MAC_STAT_IERRORS: 223244961713Sgirish case ETHER_STAT_MACRCV_ERRORS: 2233678453a8Sspeer val = nxge_m_rx_stat(nxgep, stat); 223444961713Sgirish break; 223544961713Sgirish 223644961713Sgirish case MAC_STAT_OERRORS: 2237678453a8Sspeer val = nxge_m_tx_stat(nxgep, stat); 2238678453a8Sspeer break; 223944961713Sgirish 2240678453a8Sspeer case MAC_STAT_NOXMTBUF: 2241678453a8Sspeer val = statsp->port_stats.noxmtbuf; 224244961713Sgirish break; 224344961713Sgirish 224444961713Sgirish case MAC_STAT_COLLISIONS: 224544961713Sgirish val = 0; 224644961713Sgirish break; 224744961713Sgirish 224844961713Sgirish case MAC_STAT_RBYTES: 2249678453a8Sspeer val = nxge_m_rx_stat(nxgep, stat); 225044961713Sgirish break; 225144961713Sgirish 225244961713Sgirish case MAC_STAT_IPACKETS: 2253678453a8Sspeer val = nxge_m_rx_stat(nxgep, stat); 225444961713Sgirish break; 225544961713Sgirish 225644961713Sgirish case MAC_STAT_OBYTES: 2257678453a8Sspeer val = nxge_m_tx_stat(nxgep, stat); 225844961713Sgirish break; 225944961713Sgirish 226044961713Sgirish case MAC_STAT_OPACKETS: 2261678453a8Sspeer val = nxge_m_tx_stat(nxgep, stat); 226244961713Sgirish break; 226344961713Sgirish case MAC_STAT_LINK_STATE: 226444961713Sgirish val = statsp->mac_stats.link_duplex; 226544961713Sgirish break; 226644961713Sgirish case MAC_STAT_LINK_UP: 226744961713Sgirish val = statsp->mac_stats.link_up; 226844961713Sgirish break; 226944961713Sgirish case MAC_STAT_PROMISC: 227044961713Sgirish val = statsp->mac_stats.promisc; 227144961713Sgirish break; 227244961713Sgirish case ETHER_STAT_SQE_ERRORS: 227344961713Sgirish val = 0; 227444961713Sgirish break; 227544961713Sgirish 227644961713Sgirish case ETHER_STAT_ALIGN_ERRORS: 227744961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) 227844961713Sgirish val = statsp->xmac_stats.rx_frame_align_err_cnt; 227944961713Sgirish else if (nxgep->mac.porttype == PORT_TYPE_BMAC) 228044961713Sgirish val = statsp->bmac_stats.rx_align_err_cnt; 228144961713Sgirish else 228244961713Sgirish val = 0; 228344961713Sgirish break; 228444961713Sgirish 228544961713Sgirish case ETHER_STAT_FCS_ERRORS: 228644961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) 228744961713Sgirish val = statsp->xmac_stats.rx_crc_err_cnt; 228844961713Sgirish else if (nxgep->mac.porttype == PORT_TYPE_BMAC) 228944961713Sgirish val = statsp->bmac_stats.rx_crc_err_cnt; 229044961713Sgirish else 229144961713Sgirish val = 0; 229244961713Sgirish break; 229344961713Sgirish 229444961713Sgirish case ETHER_STAT_FIRST_COLLISIONS: 229544961713Sgirish val = 0; 229644961713Sgirish break; 229744961713Sgirish 229844961713Sgirish case ETHER_STAT_MULTI_COLLISIONS: 229944961713Sgirish val = 0; 230044961713Sgirish break; 230144961713Sgirish 230244961713Sgirish case ETHER_STAT_TX_LATE_COLLISIONS: 230344961713Sgirish val = 0; 230444961713Sgirish break; 230544961713Sgirish 230644961713Sgirish case ETHER_STAT_EX_COLLISIONS: 230744961713Sgirish val = 0; 230844961713Sgirish break; 230944961713Sgirish 231044961713Sgirish case ETHER_STAT_DEFER_XMTS: 231144961713Sgirish val = 0; 231244961713Sgirish break; 231344961713Sgirish 231444961713Sgirish case ETHER_STAT_MACXMT_ERRORS: 231544961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 231644961713Sgirish val = statsp->xmac_stats.tx_underflow_err + 2317*71cd5202Smisaki statsp->xmac_stats.tx_maxpktsize_err + 2318*71cd5202Smisaki statsp->xmac_stats.tx_overflow_err + 2319*71cd5202Smisaki statsp->xmac_stats.tx_fifo_xfr_err; 232044961713Sgirish } else { 232144961713Sgirish val = statsp->bmac_stats.tx_underrun_err + 2322*71cd5202Smisaki statsp->bmac_stats.tx_max_pkt_err; 232344961713Sgirish } 232444961713Sgirish break; 232544961713Sgirish 232644961713Sgirish case ETHER_STAT_CARRIER_ERRORS: 232744961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 232844961713Sgirish val = statsp->xmac_stats.rx_linkfault_err_cnt; 232944961713Sgirish } else { 233044961713Sgirish val = statsp->mac_stats.xcvr_inits + 2331*71cd5202Smisaki statsp->mac_stats.serdes_inits; 233244961713Sgirish } 233344961713Sgirish break; 233444961713Sgirish 233544961713Sgirish case ETHER_STAT_TOOLONG_ERRORS: 233644961713Sgirish if (nxgep->mac.porttype == PORT_TYPE_XMAC) { 233744961713Sgirish val = statsp->xmac_stats.tx_maxpktsize_err + 2338*71cd5202Smisaki statsp->xmac_stats.rx_len_err_cnt; 233944961713Sgirish 234044961713Sgirish } else { 234144961713Sgirish val = statsp->bmac_stats.rx_len_err_cnt + 2342*71cd5202Smisaki statsp->bmac_stats.tx_max_pkt_err; 234344961713Sgirish } 234444961713Sgirish break; 234544961713Sgirish 234644961713Sgirish 234744961713Sgirish case ETHER_STAT_XCVR_ADDR: 234844961713Sgirish val = statsp->mac_stats.xcvr_portn; 234944961713Sgirish break; 235044961713Sgirish case ETHER_STAT_XCVR_ID: 235144961713Sgirish val = statsp->mac_stats.xcvr_id; 235244961713Sgirish break; 235344961713Sgirish 235444961713Sgirish case ETHER_STAT_XCVR_INUSE: 235544961713Sgirish val = statsp->mac_stats.xcvr_inuse; 235644961713Sgirish break; 235744961713Sgirish 235844961713Sgirish case ETHER_STAT_CAP_1000FDX: 235944961713Sgirish val = statsp->mac_stats.cap_1000fdx; 236044961713Sgirish break; 236144961713Sgirish 236244961713Sgirish case ETHER_STAT_CAP_1000HDX: 236344961713Sgirish val = statsp->mac_stats.cap_1000hdx; 236444961713Sgirish break; 236544961713Sgirish 236644961713Sgirish case ETHER_STAT_CAP_100FDX: 236744961713Sgirish val = statsp->mac_stats.cap_100fdx; 236844961713Sgirish break; 236944961713Sgirish 237044961713Sgirish case ETHER_STAT_CAP_100HDX: 237144961713Sgirish val = statsp->mac_stats.cap_100hdx; 237244961713Sgirish break; 237344961713Sgirish 237444961713Sgirish case ETHER_STAT_CAP_10FDX: 237544961713Sgirish val = statsp->mac_stats.cap_10fdx; 237644961713Sgirish break; 237744961713Sgirish 237844961713Sgirish case ETHER_STAT_CAP_10HDX: 237944961713Sgirish val = statsp->mac_stats.cap_10hdx; 238044961713Sgirish break; 238144961713Sgirish 238244961713Sgirish case ETHER_STAT_CAP_ASMPAUSE: 238344961713Sgirish val = statsp->mac_stats.cap_asmpause; 238444961713Sgirish val = 1; 238544961713Sgirish break; 238644961713Sgirish 238744961713Sgirish case ETHER_STAT_CAP_PAUSE: 238844961713Sgirish val = statsp->mac_stats.cap_pause; 238944961713Sgirish break; 239044961713Sgirish 239144961713Sgirish case ETHER_STAT_CAP_AUTONEG: 239244961713Sgirish val = statsp->mac_stats.cap_autoneg; 239344961713Sgirish break; 239444961713Sgirish 239544961713Sgirish case ETHER_STAT_ADV_CAP_1000FDX: 239644961713Sgirish val = statsp->mac_stats.adv_cap_1000fdx; 239744961713Sgirish break; 239844961713Sgirish 239944961713Sgirish case ETHER_STAT_ADV_CAP_1000HDX: 240044961713Sgirish val = statsp->mac_stats.adv_cap_1000hdx; 240144961713Sgirish break; 240244961713Sgirish 240344961713Sgirish case ETHER_STAT_ADV_CAP_100FDX: 240444961713Sgirish val = statsp->mac_stats.adv_cap_100fdx; 240544961713Sgirish break; 240644961713Sgirish 240744961713Sgirish case ETHER_STAT_ADV_CAP_100HDX: 240844961713Sgirish val = statsp->mac_stats.adv_cap_100hdx; 240944961713Sgirish break; 241044961713Sgirish 241144961713Sgirish case ETHER_STAT_ADV_CAP_10FDX: 241244961713Sgirish val = statsp->mac_stats.adv_cap_10fdx; 241344961713Sgirish break; 241444961713Sgirish 241544961713Sgirish case ETHER_STAT_ADV_CAP_10HDX: 241644961713Sgirish val = statsp->mac_stats.adv_cap_10hdx; 241744961713Sgirish break; 241844961713Sgirish 241944961713Sgirish case ETHER_STAT_ADV_CAP_ASMPAUSE: 242044961713Sgirish val = statsp->mac_stats.adv_cap_asmpause; 242144961713Sgirish break; 242244961713Sgirish 242344961713Sgirish case ETHER_STAT_ADV_CAP_PAUSE: 242444961713Sgirish val = statsp->mac_stats.adv_cap_pause; 242544961713Sgirish break; 242644961713Sgirish 242744961713Sgirish case ETHER_STAT_ADV_CAP_AUTONEG: 242844961713Sgirish val = statsp->mac_stats.adv_cap_autoneg; 242944961713Sgirish break; 243044961713Sgirish 243144961713Sgirish case ETHER_STAT_LP_CAP_1000FDX: 243244961713Sgirish val = statsp->mac_stats.lp_cap_1000fdx; 243344961713Sgirish break; 243444961713Sgirish 243544961713Sgirish case ETHER_STAT_LP_CAP_1000HDX: 243644961713Sgirish val = statsp->mac_stats.lp_cap_1000hdx; 243744961713Sgirish break; 243844961713Sgirish 243944961713Sgirish case ETHER_STAT_LP_CAP_100FDX: 244044961713Sgirish val = statsp->mac_stats.lp_cap_100fdx; 244144961713Sgirish break; 244244961713Sgirish 244344961713Sgirish case ETHER_STAT_LP_CAP_100HDX: 244444961713Sgirish val = statsp->mac_stats.lp_cap_100hdx; 244544961713Sgirish break; 244644961713Sgirish 244744961713Sgirish case ETHER_STAT_LP_CAP_10FDX: 244844961713Sgirish val = statsp->mac_stats.lp_cap_10fdx; 244944961713Sgirish break; 245044961713Sgirish 245144961713Sgirish case ETHER_STAT_LP_CAP_10HDX: 245244961713Sgirish val = statsp->mac_stats.lp_cap_10hdx; 245344961713Sgirish break; 245444961713Sgirish 245544961713Sgirish case ETHER_STAT_LP_CAP_ASMPAUSE: 245644961713Sgirish val = statsp->mac_stats.lp_cap_asmpause; 245744961713Sgirish break; 245844961713Sgirish 245944961713Sgirish case ETHER_STAT_LP_CAP_PAUSE: 246044961713Sgirish val = statsp->mac_stats.lp_cap_pause; 246144961713Sgirish break; 246244961713Sgirish 246344961713Sgirish case ETHER_STAT_LP_CAP_AUTONEG: 246444961713Sgirish val = statsp->mac_stats.lp_cap_autoneg; 246544961713Sgirish break; 246644961713Sgirish 246744961713Sgirish case ETHER_STAT_LINK_ASMPAUSE: 246844961713Sgirish val = statsp->mac_stats.link_asmpause; 246944961713Sgirish break; 247044961713Sgirish 247144961713Sgirish case ETHER_STAT_LINK_PAUSE: 247244961713Sgirish val = statsp->mac_stats.link_pause; 247344961713Sgirish break; 247444961713Sgirish 247544961713Sgirish case ETHER_STAT_LINK_AUTONEG: 247644961713Sgirish val = statsp->mac_stats.cap_autoneg; 247744961713Sgirish break; 247844961713Sgirish 247944961713Sgirish case ETHER_STAT_LINK_DUPLEX: 248044961713Sgirish val = statsp->mac_stats.link_duplex; 248144961713Sgirish break; 248244961713Sgirish 248344961713Sgirish default: 248444961713Sgirish /* 248544961713Sgirish * Shouldn't reach here... 248644961713Sgirish */ 248744961713Sgirish #ifdef NXGE_DEBUG 248844961713Sgirish NXGE_ERROR_MSG((nxgep, KST_CTL, 2489*71cd5202Smisaki "nxge_m_stat: unrecognized parameter value = 0x%x", 2490*71cd5202Smisaki stat)); 249144961713Sgirish #endif 249244961713Sgirish 249344961713Sgirish return (ENOTSUP); 249444961713Sgirish } 249544961713Sgirish *value = val; 249644961713Sgirish return (0); 249744961713Sgirish } 2498