3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The contents of this file are subject to the terms of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Common Development and Distribution License (the "License").
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You may not use this file except in compliance with the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * or http://www.opensolaris.org/os/licensing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * When distributing Covered Code, include this CDDL HEADER in each
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * If applicable, add the following below this CDDL HEADER, with the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * fields enclosed by brackets "[]" replaced with your own identifying
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * information: Portions Copyright [yyyy] [name of copyright owner]
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hxge_impl.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <inet/mi.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <sys/cmn_err.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define RDC_NAME_FORMAT1 "RDC_"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TDC_NAME_FORMAT1 "TDC_"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define CH_NAME_FORMAT "%d"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speerstatic int hxge_mmac_stat_update(kstat_t *ksp, int rw);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_init_statsp(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs size_t stats_size;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_init_statsp"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs stats_size = sizeof (hxge_stats_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp = KMEM_ZALLOC(stats_size, KM_SLEEP);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->stats_size = stats_size;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_init_statsp"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t index;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t type;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *name;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_kstat_index_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_PACKETS = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_BYTES,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_ERRORS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_JUMBO_PKTS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RCR_UNKNOWN_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RCR_SHA_PAR_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RBR_PRE_PAR_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RBR_PRE_EMTY,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RCR_SHADOW_FULL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RBR_TMOUT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_PEU_RESP_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_CTRL_FIFO_ECC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_DATA_FIFO_ECC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RCRFULL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RBR_EMPTY,
b83cd2c35abe58abb09c73f2ef35426f1384ad46Michael Speer RDC_STAT_RBR_EMPTY_FAIL,
1c29f7e382074ff2792b7f30c9be898ead487a30Qiyan Sun - Sun Microsystems - San Diego United States RDC_STAT_RBR_EMPTY_RESTORE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RBR_FULL,
8ad8db65d4781f61f1fd519144f555e6045100e1Michael Speer RDC_STAT_RCR_INVALIDS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RCRTO,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_RCRTHRES,
fd9489cef0e9b7d8a708339e560d453f230af2cfQiyan Sun - Sun Microsystems - San Diego United States RDC_STAT_PKT_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_rdc_stat_index_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_rdc_stats[] = {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_PACKETS, KSTAT_DATA_UINT64, "rdc_packets"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_BYTES, KSTAT_DATA_UINT64, "rdc_bytes"},
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States {RDC_STAT_ERRORS, KSTAT_DATA_ULONG, "rdc_errors"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_JUMBO_PKTS, KSTAT_DATA_ULONG, "rdc_jumbo_pkts"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RCR_UNKNOWN_ERR, KSTAT_DATA_ULONG, "rdc_rcr_unknown_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RCR_SHA_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rcr_sha_par_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RBR_PRE_PAR_ERR, KSTAT_DATA_ULONG, "rdc_rbr_pre_par_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RBR_PRE_EMTY, KSTAT_DATA_ULONG, "rdc_rbr_pre_empty"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RCR_SHADOW_FULL, KSTAT_DATA_ULONG, "rdc_rcr_shadow_full"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RBR_TMOUT, KSTAT_DATA_ULONG, "rdc_rbr_tmout"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_PEU_RESP_ERR, KSTAT_DATA_ULONG, "peu_resp_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_CTRL_FIFO_ECC_ERR, KSTAT_DATA_ULONG, "ctrl_fifo_ecc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_DATA_FIFO_ECC_ERR, KSTAT_DATA_ULONG, "data_fifo_ecc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RCRFULL, KSTAT_DATA_ULONG, "rdc_rcrfull"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RBR_EMPTY, KSTAT_DATA_ULONG, "rdc_rbr_empty"},
b83cd2c35abe58abb09c73f2ef35426f1384ad46Michael Speer {RDC_STAT_RBR_EMPTY_FAIL, KSTAT_DATA_ULONG, "rdc_rbr_empty_fail"},
1c29f7e382074ff2792b7f30c9be898ead487a30Qiyan Sun - Sun Microsystems - San Diego United States {RDC_STAT_RBR_EMPTY_FAIL, KSTAT_DATA_ULONG, "rdc_rbr_empty_restore"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RBR_FULL, KSTAT_DATA_ULONG, "rdc_rbrfull"},
8ad8db65d4781f61f1fd519144f555e6045100e1Michael Speer {RDC_STAT_RCR_INVALIDS, KSTAT_DATA_ULONG, "rdc_rcr_invalids"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RCRTO, KSTAT_DATA_ULONG, "rdc_rcrto"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_RCRTHRES, KSTAT_DATA_ULONG, "rdc_rcrthres"},
fd9489cef0e9b7d8a708339e560d453f230af2cfQiyan Sun - Sun Microsystems - San Diego United States {RDC_STAT_PKT_DROP, KSTAT_DATA_ULONG, "rdc_pkt_drop"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_CTRL_FIFO_SEC = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_CTRL_FIFO_DED,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_DATA_FIFO_SEC,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_DATA_FIFO_DED,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_rdc_sys_stat_idx_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_rdc_sys_stats[] = {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_SYS_STAT_CTRL_FIFO_SEC, KSTAT_DATA_UINT64, "rdc_ctrl_fifo_sec"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_SYS_STAT_CTRL_FIFO_DED, KSTAT_DATA_UINT64, "rdc_ctrl_fifo_ded"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_SYS_STAT_DATA_FIFO_SEC, KSTAT_DATA_UINT64, "rdc_data_fifo_sec"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_SYS_STAT_DATA_FIFO_DED, KSTAT_DATA_UINT64, "tdc_data_fifo_ded"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_SYS_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_PACKETS = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_BYTES,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_BYTES_WITH_PAD,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_ERRORS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_INITS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_NO_BUF,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_PEU_RESP_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_PKT_SIZE_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_RNG_OFLOW,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_PKT_SIZE_HDR_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_RUNT_PKT_DROP_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_PREF_PAR_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TDR_PREF_CPL_TO,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_PKT_CPL_TO,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_INVALID_SOP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_UNEXPECTED_SOP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_COUNT_HDR_SIZE_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_COUNT_RUNT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_COUNT_ABORT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_STARTS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_NO_DESC,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_DMA_BIND_FAIL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_HDR_PKTS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_DDI_PKTS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_JUMBO_PKTS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_MAX_PEND,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_TX_MARKS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tdc_stats_index_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_tdc_stats[] = {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_PACKETS, KSTAT_DATA_UINT64, "tdc_packets"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_BYTES, KSTAT_DATA_UINT64, "tdc_bytes"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_BYTES_WITH_PAD, KSTAT_DATA_UINT64, "tdc_bytes_with_pad"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_ERRORS, KSTAT_DATA_UINT64, "tdc_errors"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_INITS, KSTAT_DATA_ULONG, "tdc_tx_inits"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_NO_BUF, KSTAT_DATA_ULONG, "tdc_tx_no_buf"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_PEU_RESP_ERR, KSTAT_DATA_ULONG, "tdc_peu_resp_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_PKT_SIZE_ERR, KSTAT_DATA_ULONG, "tdc_pkt_size_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_RNG_OFLOW, KSTAT_DATA_ULONG, "tdc_tx_rng_oflow"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_PKT_SIZE_HDR_ERR, KSTAT_DATA_ULONG, "tdc_pkt_size_hdr_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_RUNT_PKT_DROP_ERR, KSTAT_DATA_ULONG, "tdc_runt_pkt_drop_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_PREF_PAR_ERR, KSTAT_DATA_ULONG, "tdc_pref_par_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TDR_PREF_CPL_TO, KSTAT_DATA_ULONG, "tdc_tdr_pref_cpl_to"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_PKT_CPL_TO, KSTAT_DATA_ULONG, "tdc_pkt_cpl_to"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_INVALID_SOP, KSTAT_DATA_ULONG, "tdc_invalid_sop"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_UNEXPECTED_SOP, KSTAT_DATA_ULONG, "tdc_unexpected_sop"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_COUNT_HDR_SIZE_ERR, KSTAT_DATA_ULONG,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "tdc_count_hdr_size_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_COUNT_RUNT, KSTAT_DATA_ULONG, "tdc_count_runt"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_COUNT_ABORT, KSTAT_DATA_ULONG, "tdc_count_abort"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_STARTS, KSTAT_DATA_ULONG, "tdc_tx_starts"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_NO_DESC, KSTAT_DATA_ULONG, "tdc_tx_no_desc"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_DMA_BIND_FAIL, KSTAT_DATA_ULONG, "tdc_tx_dma_bind_fail"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_HDR_PKTS, KSTAT_DATA_ULONG, "tdc_tx_hdr_pkts"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_DDI_PKTS, KSTAT_DATA_ULONG, "tdc_tx_ddi_pkts"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_JUMBO_PKTS, KSTAT_DATA_ULONG, "tdc_tx_jumbo_pkts"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_MAX_PEND, KSTAT_DATA_ULONG, "tdc_tx_max_pend"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_TX_MARKS, KSTAT_DATA_ULONG, "tdc_tx_marks"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REORD_TBL_PAR_ERR = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REORD_BUF_DED_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REORD_BUF_SEC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_SYS_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tdc_sys_stat_idx_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_tdc_sys_stats[] = {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {REORD_TBL_PAR_ERR, KSTAT_DATA_UINT64, "reord_tbl_par_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {REORD_BUF_DED_ERR, KSTAT_DATA_UINT64, "reord_buf_ded_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {REORD_BUF_SEC_ERR, KSTAT_DATA_UINT64, "reord_buf_sec_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_SYS_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_TX_FRAME_CNT, /* vmac_tx_frame_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_TX_BYTE_CNT, /* vmac_tx_byte_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_FRAME_CNT, /* vmac_rx_frame_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_BYTE_CNT, /* vmac_rx_byte_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_DROP_FRAME_CNT, /* vmac_rx_drop_fr_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_DROP_BYTE_CNT, /* vmac_rx_drop_byte_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_CRC_CNT, /* vmac_rx_crc_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_PAUSE_CNT, /* vmac_rx_pause_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_BCAST_FR_CNT, /* vmac_rx_bcast_fr_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_RX_MCAST_FR_CNT, /* vmac_rx_mcast_fr_cnt_t */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_vmac_stat_index_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_vmac_stats[] = {
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_TX_FRAME_CNT, KSTAT_DATA_UINT64, "vmac_tx_frame_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_TX_BYTE_CNT, KSTAT_DATA_UINT64, "vmac_tx_byte_cnt"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_FRAME_CNT, KSTAT_DATA_UINT64, "vmac_rx_frame_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_BYTE_CNT, KSTAT_DATA_UINT64, "vmac_rx_byte_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_DROP_FRAME_CNT, KSTAT_DATA_UINT64,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "vmac_rx_drop_frame_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_DROP_BYTE_CNT, KSTAT_DATA_UINT64,
fe930412c257f961ae67039de3b164b83717976aqs "vmac_rx_drop_byte_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_CRC_CNT, KSTAT_DATA_UINT64, "vmac_rx_crc_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_PAUSE_CNT, KSTAT_DATA_UINT64, "vmac_rx_pause_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_BCAST_FR_CNT, KSTAT_DATA_UINT64, "vmac_rx_bcast_fr_cnt"},
fe930412c257f961ae67039de3b164b83717976aqs {VMAC_STAT_RX_MCAST_FR_CNT, KSTAT_DATA_UINT64, "vmac_rx_mcast_fr_cnt"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {VMAC_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_PKT_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_TCAM_PARITY_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_VLAN_PARITY_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_BAD_CS_COUNT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_DROP_COUNT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_TCP_CTRL_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_L2_ADDR_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_CLASS_CODE_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_TCAM_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_VLAN_DROP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_pfc_stat_index_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_pfc_stats[] = {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_PKT_DROP, KSTAT_DATA_ULONG, "pfc_pkt_drop"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_TCAM_PARITY_ERR, KSTAT_DATA_ULONG, "pfc_tcam_parity_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_VLAN_PARITY_ERR, KSTAT_DATA_ULONG, "pfc_vlan_parity_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_BAD_CS_COUNT, KSTAT_DATA_ULONG, "pfc_bad_cs_count"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_DROP_COUNT, KSTAT_DATA_ULONG, "pfc_drop_count"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_TCP_CTRL_DROP, KSTAT_DATA_ULONG, " pfc_pkt_drop_tcp_ctrl"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_L2_ADDR_DROP, KSTAT_DATA_ULONG, " pfc_pkt_drop_l2_addr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_CLASS_CODE_DROP, KSTAT_DATA_ULONG,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " pfc_pkt_drop_class_code"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_TCAM_DROP, KSTAT_DATA_ULONG, " pfc_pkt_drop_tcam"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_VLAN_DROP, KSTAT_DATA_ULONG, " pfc_pkt_drop_vlan"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs SPC_ACC_ERR = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_PIOACC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_PIOACC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_PIOACC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_PIOACC_ERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs CPL_HDRQ_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs CPL_DATAQ_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RETRYRAM_XDLH_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RETRYSOTRAM_XDLH_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs P_HDRQ_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs P_DATAQ_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs NP_HDRQ_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs NP_DATAQ_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs EIC_MSIX_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HCR_PARERR,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PEU_SYS_STAT_END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_peu_sys_stat_idx_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_kstat_index_t hxge_peu_sys_stats[] = {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {SPC_ACC_ERR, KSTAT_DATA_UINT64, "spc_acc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_PIOACC_ERR, KSTAT_DATA_UINT64, "tdc_pioacc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RDC_PIOACC_ERR, KSTAT_DATA_UINT64, "rdc_pioacc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {PFC_PIOACC_ERR, KSTAT_DATA_UINT64, "pfc_pioacc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {VMAC_PIOACC_ERR, KSTAT_DATA_UINT64, "vmac_pioacc_err"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {CPL_HDRQ_PARERR, KSTAT_DATA_UINT64, "cpl_hdrq_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {CPL_DATAQ_PARERR, KSTAT_DATA_UINT64, "cpl_dataq_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RETRYRAM_XDLH_PARERR, KSTAT_DATA_UINT64, "retryram_xdlh_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {RETRYSOTRAM_XDLH_PARERR, KSTAT_DATA_UINT64, "retrysotram_xdlh_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {P_HDRQ_PARERR, KSTAT_DATA_UINT64, "p_hdrq_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {P_DATAQ_PARERR, KSTAT_DATA_UINT64, "p_dataq_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {NP_HDRQ_PARERR, KSTAT_DATA_UINT64, "np_hdrq_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {NP_DATAQ_PARERR, KSTAT_DATA_UINT64, "np_dataq_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {EIC_MSIX_PARERR, KSTAT_DATA_UINT64, "eic_msix_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {HCR_PARERR, KSTAT_DATA_UINT64, "hcr_parerr"},
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs {TDC_SYS_STAT_END, NULL, NULL}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speertypedef enum {
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_MAX_ADDR,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_AVAIL_ADDR,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL1,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL2,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL3,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL4,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL5,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL6,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL7,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL8,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL9,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL10,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL11,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL12,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL13,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL14,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL15,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_ADDR_POOL16,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_STATS_END
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer} hxge_mmac_stat_index_t;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speerhxge_kstat_index_t hxge_mmac_stats[] = {
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_MAX_ADDR, KSTAT_DATA_UINT64, "max_mmac_addr"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_AVAIL_ADDR, KSTAT_DATA_UINT64, "avail_mmac_addr"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL1, KSTAT_DATA_UINT64, "mmac_addr_1"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL2, KSTAT_DATA_UINT64, "mmac_addr_2"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL3, KSTAT_DATA_UINT64, "mmac_addr_3"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL4, KSTAT_DATA_UINT64, "mmac_addr_4"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL5, KSTAT_DATA_UINT64, "mmac_addr_5"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL6, KSTAT_DATA_UINT64, "mmac_addr_6"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL7, KSTAT_DATA_UINT64, "mmac_addr_7"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL8, KSTAT_DATA_UINT64, "mmac_addr_8"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL9, KSTAT_DATA_UINT64, "mmac_addr_9"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL10, KSTAT_DATA_UINT64, "mmac_addr_10"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL11, KSTAT_DATA_UINT64, "mmac_addr_11"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL12, KSTAT_DATA_UINT64, "mmac_addr_12"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL13, KSTAT_DATA_UINT64, "mmac_addr_13"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL14, KSTAT_DATA_UINT64, "mmac_addr_14"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL15, KSTAT_DATA_UINT64, "mmac_addr_15"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_ADDR_POOL16, KSTAT_DATA_UINT64, "mmac_addr_16"},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer {MMAC_STATS_END, NULL, NULL},
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer};
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_tdc_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_tdc_kstat_t tdc_kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_tx_ring_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int channel;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *ch_name, *end;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_rxstat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ch_name = ksp->ks_name;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ch_name += strlen(TDC_NAME_FORMAT1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs channel = mi_strtol(ch_name, &end, 10);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp = (p_hxge_tdc_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_tx_ring_stats_t)&hxgep->statsp->tdc_stats[channel];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge_tdc_stat_update data $%p statsp $%p channel %d",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_data, statsp, channel));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->opackets.value.ull = statsp->opackets;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->obytes.value.ull = statsp->obytes;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->obytes_with_pad.value.ull = statsp->obytes_with_pad;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->oerrors.value.ull = statsp->oerrors;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_hdr_pkts.value.ull = statsp->tx_hdr_pkts;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_ddi_pkts.value.ull = statsp->tx_ddi_pkts;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_jumbo_pkts.value.ull = statsp->tx_jumbo_pkts;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_max_pend.value.ull = statsp->tx_max_pend;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->peu_resp_err.value.ul = statsp->peu_resp_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->pkt_size_err.value.ul = statsp->pkt_size_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_rng_oflow.value.ul = statsp->tx_rng_oflow;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->pkt_size_hdr_err.value.ul = statsp->pkt_size_hdr_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->runt_pkt_drop_err.value.ul = statsp->runt_pkt_drop_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->pref_par_err.value.ul = statsp->pref_par_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tdr_pref_cpl_to.value.ul = statsp->tdr_pref_cpl_to;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->pkt_cpl_to.value.ul = statsp->pkt_cpl_to;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->invalid_sop.value.ul = statsp->invalid_sop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->unexpected_sop.value.ul = statsp->unexpected_sop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_starts.value.ul = statsp->tx_starts;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_no_desc.value.ul = statsp->tx_no_desc;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_dma_bind_fail.value.ul = statsp->tx_dma_bind_fail;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->count_hdr_size_err.value.ul =
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->count_hdr_size_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->count_runt.value.ul = statsp->count_runt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->count_abort.value.ul = statsp->count_abort;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_kstatsp->tx_marks.value.ul = statsp->tx_marks;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_tdc_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_tdc_sys_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_tdc_sys_kstat_t tdc_sys_kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_tdc_sys_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_tdc_sys_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_sys_kstatsp = (p_hxge_tdc_sys_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_tdc_sys_stats_t)&hxgep->statsp->tdc_sys_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "hxge_tdc_sys_stat_update %llx",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_data));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_sys_kstatsp->reord_tbl_par_err.value.ul =
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->reord_tbl_par_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_sys_kstatsp->reord_buf_ded_err.value.ul =
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->reord_buf_ded_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tdc_sys_kstatsp->reord_buf_sec_err.value.ul =
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->reord_buf_sec_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_tdc_sys_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rdc_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_rdc_kstat_t rdc_kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_rx_ring_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int channel;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *ch_name, *end;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_rdc_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ch_name = ksp->ks_name;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ch_name += strlen(RDC_NAME_FORMAT1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs channel = mi_strtol(ch_name, &end, 10);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp = (p_hxge_rdc_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_rx_ring_stats_t)&hxgep->statsp->rdc_stats[channel];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge_rdc_stat_update $%p statsp $%p channel %d",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_data, statsp, channel));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->ipackets.value.ull = statsp->ipackets;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rbytes.value.ull = statsp->ibytes;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->jumbo_pkts.value.ul = statsp->jumbo_pkts;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rcr_unknown_err.value.ul = statsp->rcr_unknown_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->errors.value.ul = statsp->ierrors;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rcr_sha_par_err.value.ul = statsp->rcr_sha_par;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rbr_pre_par_err.value.ul = statsp->rbr_pre_par;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rbr_pre_emty.value.ul = statsp->rbr_pre_empty;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rcr_shadow_full.value.ul = statsp->rcr_shadow_full;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rbr_tmout.value.ul = statsp->rbr_tmout;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->peu_resp_err.value.ul = statsp->peu_resp_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->ctrl_fifo_ecc_err.value.ul = statsp->ctrl_fifo_ecc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->data_fifo_ecc_err.value.ul = statsp->data_fifo_ecc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rcrfull.value.ul = statsp->rcrfull;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rbr_empty.value.ul = statsp->rbr_empty;
b83cd2c35abe58abb09c73f2ef35426f1384ad46Michael Speer rdc_kstatsp->rbr_empty_fail.value.ul = statsp->rbr_empty_fail;
1c29f7e382074ff2792b7f30c9be898ead487a30Qiyan Sun - Sun Microsystems - San Diego United States rdc_kstatsp->rbr_empty_restore.value.ul = statsp->rbr_empty_restore;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rbrfull.value.ul = statsp->rbrfull;
8ad8db65d4781f61f1fd519144f555e6045100e1Michael Speer rdc_kstatsp->rcr_invalids.value.ul = statsp->rcr_invalids;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rcr_to.value.ul = statsp->rcr_to;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_kstatsp->rcr_thresh.value.ul = statsp->rcr_thres;
fd9489cef0e9b7d8a708339e560d453f230af2cfQiyan Sun - Sun Microsystems - San Diego United States rdc_kstatsp->pkt_drop.value.ul = statsp->pkt_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_rdc_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rdc_sys_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_rdc_sys_kstat_t rdc_sys_kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_rdc_sys_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_rdc_sys_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_sys_kstatsp = (p_hxge_rdc_sys_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_rdc_sys_stats_t)&hxgep->statsp->rdc_sys_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "hxge_rdc_sys_stat_update %llx",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_data));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_sys_kstatsp->ctrl_fifo_sec.value.ul = statsp->ctrl_fifo_sec;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_sys_kstatsp->ctrl_fifo_ded.value.ul = statsp->ctrl_fifo_ded;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_sys_kstatsp->data_fifo_sec.value.ul = statsp->data_fifo_sec;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rdc_sys_kstatsp->data_fifo_ded.value.ul = statsp->data_fifo_ded;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, " <== hxge_rdc_sys_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_vmac_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_vmac_kstat_t vmac_kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_vmac_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_vmac_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_save_cntrs(hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp = (p_hxge_vmac_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_vmac_stats_t)&hxgep->statsp->vmac_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->tx_frame_cnt.value.ul = statsp->tx_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->tx_byte_cnt.value.ul = statsp->tx_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_frame_cnt.value.ul = statsp->rx_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_byte_cnt.value.ul = statsp->rx_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_drop_frame_cnt.value.ul = statsp->rx_drop_frame_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_drop_byte_cnt.value.ul = statsp->rx_drop_byte_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_crc_cnt.value.ul = statsp->rx_crc_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_pause_cnt.value.ul = statsp->rx_pause_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_bcast_fr_cnt.value.ul = statsp->rx_bcast_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs vmac_kstatsp->rx_mcast_fr_cnt.value.ul = statsp->rx_mcast_fr_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_vmac_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_pfc_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_pfc_kstat_t kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_pfc_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_pfc_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp = (p_hxge_pfc_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_pfc_stats_t)&hxgep->statsp->pfc_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_pkt_drop.value.ul = statsp->pkt_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_tcam_parity_err.value.ul = statsp->tcam_parity_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_vlan_parity_err.value.ul = statsp->vlan_parity_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_bad_cs_count.value.ul = statsp->bad_cs_count;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_drop_count.value.ul = statsp->drop_count;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_tcp_ctrl_drop.value.ul = statsp->errlog.tcp_ctrl_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_l2_addr_drop.value.ul = statsp->errlog.l2_addr_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_class_code_drop.value.ul = statsp->errlog.class_code_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_tcam_drop.value.ul = statsp->errlog.tcam_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstatsp->pfc_vlan_drop.value.ul = statsp->errlog.vlan_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_pfc_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_peu_sys_stat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_peu_sys_kstat_t peu_kstatsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_peu_sys_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_peu_sys_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp = (p_hxge_peu_sys_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_peu_sys_stats_t)&hxgep->statsp->peu_sys_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->spc_acc_err.value.ul = statsp->spc_acc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->tdc_pioacc_err.value.ul = statsp->tdc_pioacc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->rdc_pioacc_err.value.ul = statsp->rdc_pioacc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->pfc_pioacc_err.value.ul = statsp->pfc_pioacc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->vmac_pioacc_err.value.ul = statsp->vmac_pioacc_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->cpl_hdrq_parerr.value.ul = statsp->cpl_hdrq_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->cpl_dataq_parerr.value.ul = statsp->cpl_dataq_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->retryram_xdlh_parerr.value.ul =
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->retryram_xdlh_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->retrysotram_xdlh_parerr.value.ul =
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp->retrysotram_xdlh_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->p_hdrq_parerr.value.ul = statsp->p_hdrq_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->p_dataq_parerr.value.ul = statsp->p_dataq_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->np_hdrq_parerr.value.ul = statsp->np_hdrq_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->np_dataq_parerr.value.ul = statsp->np_dataq_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->eic_msix_parerr.value.ul = statsp->eic_msix_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs peu_kstatsp->hcr_parerr.value.ul = statsp->hcr_parerr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_peu_sys_stat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsstatic kstat_t *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_setup_local_kstat(p_hxge_t hxgep, int instance, char *name,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs const hxge_kstat_index_t *ksip, size_t count,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int (*update) (kstat_t *, int))
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_t *ksp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_t *knp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int i;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp = kstat_create(HXGE_DRIVER_NAME, instance, name, "net",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs KSTAT_TYPE_NAMED, count, 0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (ksp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (NULL);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_private = (void *) hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_update = update;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs knp = ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (i = 0; ksip[i].name != NULL; i++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&knp[i], ksip[i].name, ksip[i].type);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_install(ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_setup_kstats(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs struct kstat *ksp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_port_kstat_t hxgekp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs size_t hxge_kstat_sz;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char stat_name[64];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int i;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_setup_kstats"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup RDC statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (i = 0; i < hxgep->nrdc; i++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) sprintf(stat_name, "%s"CH_NAME_FORMAT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_NAME_FORMAT1, i);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->rdc_ksp[i] = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, stat_name, &hxge_rdc_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_STAT_END, hxge_rdc_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->rdc_ksp[i] == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "kstat_create failed for rdc channel %d", i);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup RDC System statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->rdc_sys_ksp = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, "RDC_system", &hxge_rdc_sys_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_END, hxge_rdc_sys_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->rdc_sys_ksp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN, "kstat_create failed for rdc_sys_ksp");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup TDC statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (i = 0; i < hxgep->ntdc; i++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) sprintf(stat_name, "%s"CH_NAME_FORMAT,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_NAME_FORMAT1, i);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->tdc_ksp[i] = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, stat_name, &hxge_tdc_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TDC_STAT_END, hxge_tdc_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->tdc_ksp[i] == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "kstat_create failed for tdc channel %d", i);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup TDC System statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->tdc_sys_ksp = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, "TDC_system", &hxge_tdc_sys_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs RDC_SYS_STAT_END, hxge_tdc_sys_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->tdc_sys_ksp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN, "kstat_create failed for tdc_sys_ksp");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup PFC statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->pfc_ksp = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, "PFC", &hxge_pfc_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PFC_STAT_END, hxge_pfc_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->pfc_ksp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN, "kstat_create failed for pfc");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup VMAC statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->vmac_ksp = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, "VMAC", &hxge_vmac_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs VMAC_STAT_END, hxge_vmac_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->vmac_ksp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN, "kstat_create failed for vmac");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer /* Setup MMAC Statistics. */
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxgep->statsp->mmac_ksp = hxge_setup_local_kstat(hxgep,
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxgep->instance, "MMAC", &hxge_mmac_stats[0],
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MMAC_STATS_END, hxge_mmac_stat_update);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer if (hxgep->statsp->mmac_ksp == NULL)
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer cmn_err(CE_WARN, "kstat_create failed for mmac");
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Setup PEU System statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->peu_sys_ksp = hxge_setup_local_kstat(hxgep,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->instance, "PEU", &hxge_peu_sys_stats[0],
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs PEU_SYS_STAT_END, hxge_peu_sys_stat_update);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->peu_sys_ksp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN, "kstat_create failed for peu sys");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Port stats */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_kstat_sz = sizeof (hxge_port_kstat_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((ksp = kstat_create(HXGE_DRIVER_NAME, hxgep->instance,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "Port", "net", KSTAT_TYPE_NAMED,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_kstat_sz / sizeof (kstat_named_t), 0)) == NULL) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN, "kstat_create failed for port stat");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp = (p_hxge_port_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->cap_10gfdx, "cap_10gfdx", KSTAT_DATA_ULONG);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Link partner capabilities.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->lp_cap_10gfdx, "lp_cap_10gfdx",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs KSTAT_DATA_ULONG);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Shared link setup.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->link_speed, "link_speed", KSTAT_DATA_ULONG);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->link_duplex, "link_duplex", KSTAT_DATA_CHAR);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->link_up, "link_up", KSTAT_DATA_ULONG);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Loopback statistics.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->lb_mode, "lb_mode", KSTAT_DATA_ULONG);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* General MAC statistics */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->ifspeed, "ifspeed", KSTAT_DATA_UINT64);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_named_init(&hxgekp->promisc, "promisc", KSTAT_DATA_CHAR);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_update = hxge_port_kstat_update;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ksp->ks_private = (void *) hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_install(ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->statsp->port_ksp = ksp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_setup_kstats"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_destroy_kstats(p_hxge_t hxgep)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int channel;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_dma_pt_cfg_t p_dma_cfgp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_hw_pt_cfg_t p_cfgp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_destroy_kstats"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_dma_cfgp = (p_hxge_dma_pt_cfg_t)&hxgep->pt_config;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_cfgp = (p_hxge_hw_pt_cfg_t)&p_dma_cfgp->hw_config;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < p_cfgp->max_rdcs; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->rdc_ksp[channel]) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->rdc_ksp[channel]);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < p_cfgp->max_tdcs; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->tdc_ksp[channel]) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->tdc_ksp[channel]);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->rdc_sys_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->rdc_sys_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->tdc_sys_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->tdc_sys_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->peu_sys_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->peu_sys_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->mmac_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->mmac_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->pfc_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->pfc_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->vmac_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->vmac_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp->port_ksp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs kstat_delete(hxgep->statsp->port_ksp);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->statsp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs KMEM_FREE(hxgep->statsp, hxgep->statsp->stats_size);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_destroy_kstats"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* ARGSUSED */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_port_kstat_update(kstat_t *ksp, int rw)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_port_kstat_t hxgekp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_port_stats_t psp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep = (p_hxge_t)ksp->ks_private;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep == NULL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (-1);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_port_kstat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_stats_t)hxgep->statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp = (p_hxge_port_kstat_t)ksp->ks_data;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs psp = &statsp->port_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (hxgep->filter.all_phys_cnt)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) strcpy(hxgekp->promisc.value.c, "phys");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs else if (hxgep->filter.all_multicast_cnt)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) strcpy(hxgekp->promisc.value.c, "multi");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) strcpy(hxgekp->promisc.value.c, "off");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp->ifspeed.value.ul = statsp->mac_stats.link_speed * 1000000ULL;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * transceiver state informations.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp->cap_10gfdx.value.ul = statsp->mac_stats.cap_10gfdx;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Link partner capabilities.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp->lp_cap_10gfdx.value.ul = statsp->mac_stats.lp_cap_10gfdx;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Physical link statistics.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp->link_speed.value.ul = statsp->mac_stats.link_speed;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (statsp->mac_stats.link_duplex == 2)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) strcpy(hxgekp->link_duplex.value.c, "full");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) strcpy(hxgekp->link_duplex.value.c, "unknown");
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp->link_up.value.ul = statsp->mac_stats.link_up;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Loopback statistics.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgekp->lb_mode.value.ul = psp->lb_mode;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_port_kstat_update"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer/*
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Retrieve a value for one of the statistics for a particular rx ring
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer */
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerint
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerhxge_rx_ring_stat(mac_ring_driver_t rdriver, uint_t stat, uint64_t *val)
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer{
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer p_hxge_ring_handle_t rhp = (p_hxge_ring_handle_t)rdriver;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer p_hxge_t hxgep = rhp->hxgep;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(rhp != NULL);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(hxgep != NULL);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(hxgep->statsp != NULL);
5ce95b09f57d17f7d100337b98c95ecd81ea2979Hengqing Hu ASSERT((rhp->index >= 0) && (rhp->index < HXGE_MAX_RDCS));
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer switch (stat) {
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer case MAC_STAT_IERRORS:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = hxgep->statsp->rdc_stats[rhp->index].ierrors;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer break;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer case MAC_STAT_RBYTES:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = hxgep->statsp->rdc_stats[rhp->index].ibytes;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer break;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer case MAC_STAT_IPACKETS:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = hxgep->statsp->rdc_stats[rhp->index].ipackets;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer break;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer default:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = 0;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer return (ENOTSUP);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer }
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer return (0);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer}
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer/*
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Retrieve a value for one of the statistics for a particular tx ring
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer */
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerint
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerhxge_tx_ring_stat(mac_ring_driver_t rdriver, uint_t stat, uint64_t *val)
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer{
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer p_hxge_ring_handle_t rhp = (p_hxge_ring_handle_t)rdriver;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer p_hxge_t hxgep = rhp->hxgep;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(rhp != NULL);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(hxgep != NULL);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ASSERT(hxgep->statsp != NULL);
5ce95b09f57d17f7d100337b98c95ecd81ea2979Hengqing Hu ASSERT((rhp->index >= 0) && (rhp->index < HXGE_MAX_TDCS));
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer switch (stat) {
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer case MAC_STAT_OERRORS:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = hxgep->statsp->tdc_stats[rhp->index].oerrors;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer break;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer case MAC_STAT_OBYTES:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = hxgep->statsp->tdc_stats[rhp->index].obytes;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer break;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer case MAC_STAT_OPACKETS:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = hxgep->statsp->tdc_stats[rhp->index].opackets;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer break;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer default:
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer *val = 0;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer return (ENOTSUP);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer }
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer return (0);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer}
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_m_stat(void *arg, uint_t stat, uint64_t *value)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_t hxgep = (p_hxge_t)arg;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs p_hxge_stats_t statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tx_ring_stats_t *tx_stats;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int channel;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_m_stat"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_stats_t)hxgep->statsp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs switch (stat) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_IFSPEED:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = statsp->mac_stats.link_speed * 1000000ull;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_MULTIRCV:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_BRDCSTRCV:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_MULTIXMT:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_BRDCSTXMT:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_NORCVBUF:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_IERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_MACRCV_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->nrdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += statsp->rdc_stats[channel].ierrors;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_NOXMTBUF:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_OERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->ntdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += statsp->tdc_stats[channel].oerrors;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_COLLISIONS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_RBYTES:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->nrdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += statsp->rdc_stats[channel].ibytes;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_IPACKETS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->nrdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += statsp->rdc_stats[channel].ipackets;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_OBYTES:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->ntdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += statsp->tdc_stats[channel].obytes;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_OPACKETS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->ntdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += statsp->tdc_stats[channel].opackets;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_UNKNOWNS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_UNDERFLOWS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_OVERFLOWS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_LINK_STATE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = statsp->mac_stats.link_duplex;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_LINK_UP:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = statsp->mac_stats.link_up;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case MAC_STAT_PROMISC:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = statsp->mac_stats.promisc;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_SQE_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ALIGN_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * No similar error in Hydra receive channels
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_FCS_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * No similar error in Hydra receive channels
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_FIRST_COLLISIONS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_MULTI_COLLISIONS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_TX_LATE_COLLISIONS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_EX_COLLISIONS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_DEFER_XMTS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_MACXMT_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * A count of frames for which transmission on a
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * particular interface fails due to an internal
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * MAC sublayer transmit error
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->ntdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats = &statsp->tdc_stats[channel];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += tx_stats->pkt_size_hdr_err +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->pkt_size_err +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->tx_rng_oflow +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->peu_resp_err +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->runt_pkt_drop_err +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->pref_par_err +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->tdr_pref_cpl_to +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->pkt_cpl_to +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->invalid_sop +
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats->unexpected_sop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CARRIER_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The number of times that the carrier sense
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * condition was lost or never asserted when
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * attempting to transmit a frame on a particular interface
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->ntdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats = &statsp->tdc_stats[channel];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += tx_stats->tdr_pref_cpl_to + tx_stats->pkt_cpl_to;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_TOOLONG_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * A count of frames received on a particular
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * interface that exceed the maximum permitted frame size
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs for (channel = 0; channel < hxgep->ntdc; channel++) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tx_stats = &statsp->tdc_stats[channel];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val += tx_stats->pkt_size_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_XCVR_ADDR:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_XCVR_ID:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_XCVR_INUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_1000FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_1000HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_100FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_100HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_10FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_10HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_ASMPAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_PAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_AUTONEG:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_1000FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_1000HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_100FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_100HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_10FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_10HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_ASMPAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_PAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_AUTONEG:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_1000FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_1000HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_100FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_100HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_10FDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_10HDX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_ASMPAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_PAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_AUTONEG:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LINK_ASMPAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LINK_PAUSE:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LINK_AUTONEG:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LINK_DUPLEX:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = statsp->mac_stats.link_duplex;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_TOOSHORT_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_REMFAULT:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_REMFAULT:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_REMFAULT:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_JABBER_ERRORS:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_CAP_100T4:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_ADV_CAP_100T4:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case ETHER_STAT_LP_CAP_100T4:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs val = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer case ETHER_STAT_ADV_CAP_10GFDX:
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer case ETHER_STAT_CAP_10GFDX:
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer case ETHER_STAT_LP_CAP_10GFDX:
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer val = 0;
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer break;
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs default:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Shouldn't reach here...
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_WARN,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge_m_stat: unrecognized parameter value = 0x%x", stat);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (ENOTSUP);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *value = val;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (0);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speerstatic uint64_t
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speerhxge_mac_octet_to_u64(uint8_t *addr)
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer{
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer int i;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer uint64_t addr64 = 0;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer for (i = ETHERADDRL - 1; i >= 0; i--) {
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer addr64 <<= 8;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer addr64 |= addr[i];
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer }
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer return (addr64);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer}
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer/*ARGSUSED*/
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speerstatic int
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speerhxge_mmac_stat_update(kstat_t *ksp, int rw)
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer{
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer p_hxge_t hxgep;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer p_hxge_mmac_kstat_t mmac_kstatsp;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxgep = (p_hxge_t)ksp->ks_private;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer if (hxgep == NULL)
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer return (-1);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer HXGE_DEBUG_MSG((hxgep, KST_CTL, "==> hxge_mmac_stat_update"));
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer if (rw == KSTAT_WRITE) {
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer cmn_err(CE_WARN, "Can not write mmac stats");
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer } else {
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MUTEX_ENTER(hxgep->genlock);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp = (p_hxge_mmac_kstat_t)ksp->ks_data;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_max_addr_cnt.value.ul = hxgep->mmac.total;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_avail_addr_cnt.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxgep->mmac.available;
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr1.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[0].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr2.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[1].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr3.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[2].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr4.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[3].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr5.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[4].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr6.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[5].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr7.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[6].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr8.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[7].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr9.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[8].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr10.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[9].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr11.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[10].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr12.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[11].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr13.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[12].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr14.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[13].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr15.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[14].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer mmac_kstatsp->mmac_addr16.value.ul =
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer hxge_mac_octet_to_u64(hxgep->mmac.addrs[15].addr);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer MUTEX_EXIT(hxgep->genlock);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer }
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer HXGE_DEBUG_MSG((hxgep, KST_CTL, "<== hxge_mmac_stat_update"));
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer return (0);
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer}