9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * This file and its contents are supplied under the terms of the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * You may only use this file in accordance with the terms of version
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * 1.0 of the CDDL.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * A full copy of the text of the CDDL should have accompanied this
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * source. A copy of the CDDL is also available via the Internet at
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * http://www.illumos.org/license/CDDL.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Copyright 2016 Joyent, Inc.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#include "i40e_sw.h"
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * -------------------
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Statistics Overview
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * -------------------
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * As part of managing the driver and understanding what's going on, we keep
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * track of statistics from two different sources:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - Statistics from the device
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - Statistics maintained by the driver
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Generally, the hardware provides us traditional IETF and MIB Ethernet
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * statistics, for example, the total packets in and out, various errors in
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * packets, the negotiated status etc. The driver, on the other hand, primarily
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * contains statistics around driver-specific issues, such as information about
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * checksumming on receive and transmit and the data in and out of a specific
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * ring.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * We export statistics in two different forms. The first form is the required
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * GLDv3 endpoints, specifically:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - The general GLDv3 mc_getstat interface
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - The GLDv3 ring mri_stat interface
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The second form that we export statistics is through kstats. kstats are
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * exported in different ways. Particularly we arrange the kstats to monitor the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * layout of the device. Currently we have kstats which capture both the IEEE
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * and driver-implementation specific stats. There are kstats for each of the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * following structures:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - Each physical function
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - Each VSI
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * - Each Queue
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The PF's kstat is called 'pfstats' so as not to collide with other system
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * provided kstats. Thus, for instance 0, usually the first PF, the full kstat
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * would be: i40e:0:pfstats:.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The kstat for each VSI is called vsi_%instance. So for the first PF, which is
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * instance zero and the first vsi, which has id 0, it will be named vsi_0 and
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the full kstat would be i40e:0:vsi_0:.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The kstat for each queue is trqpair_tx_%queue and trqpair_rx_%queue. Note
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * that these are labeled based on their local index, which may mean that
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * different instances have overlapping sets of queues. This isn't a problem as
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the kstats will always use the instance number of the pf to distinguish it in
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the kstat tuple.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * ---------------------
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Hardware Arrangements
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * ---------------------
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The hardware keeps statistics at each physical function/MAC (PF) and it keeps
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * statistics on each virtual station interface (VSI). Currently we only use one
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * VSI per PF (see the i40e_main.c theory statement). The hardware has a limited
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * number of statistics units available. While every PF is guaranteed to have a
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * statistics unit, it is possible that we will run out for a given VSI. We'll
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * have to figure out an appropriate strategy here when we end up supporting
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * multiple VSIs.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The hardware keeps these statistics as 32-bit and 48-bit counters. We are
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * required to read them and then compute the differences between them. The
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * 48-bit counters span more than one 32-bit register in the BAR. The hardware
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * suggests that to read them, we perform 64-bit reads of the lower of the two
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * registers that make up a 48-bit stat. The hardware guarantees that the reads
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * of those two registers will be atomic and we'll get a consistent value, not a
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * property it has for every read of two registers.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * For every kstat we have based on this, we have a corresponding uint64_t that
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * we keep around as a base value in a separate structure. Whenever we read a
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * value, we end up grabbing the current value, calculating a difference between
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the previously stored value and the current one, and updating the kstat with
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * that difference. After which, we go through and update the base value that we
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * stored. This is all encapsulated in i40e_stat_get_uint32() and
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * i40e_stat_get_uint48().
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The only unfortunate thing here is that the hardware doesn't give us any kind
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * of overflow counter. It just tries to make sure that the uint32_t and
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * uint48_t counters are large enough to hopefully not overflow right away. This
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * isn't the most reassuring statement and we should investigate ways of
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * ensuring that if a system is active, but not actively measured, we don't lose
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * data.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The pf kstats data is stored in the i40e_t`i40e_pf_kstat. It is backed by the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * i40e_t`i40e_pf_stat structure. Similarly the VSI related kstat is in
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * i40e_t`i40e_vsi_kstat and the data is backed in the i40e_t`i40e_vsi_stat. All
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * of this data is protected by the i40e_stat_lock, which should be taken last,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * when acquiring locks.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic void
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_get_uint48(i40e_t *i40e, uintptr_t reg, kstat_named_t *kstat,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi uint64_t *base, boolean_t init)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_hw_t *hw = &i40e->i40e_hw_space;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi uint64_t raw, delta;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ASSERT(MUTEX_HELD(&i40e->i40e_stat_lock));
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi raw = ddi_get64(i40e->i40e_osdep_space.ios_reg_handle,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (uint64_t *)((uintptr_t)hw->hw_addr + reg));
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (init == B_TRUE) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *base = raw;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Check for wraparound, note that the counter is actually only 48-bits,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * even though it has two uint32_t regs present.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (raw >= *base) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi delta = raw - *base;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi } else {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi delta = 0x1000000000000ULL - *base + raw;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat->value.ui64 += delta;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *base = raw;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic void
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_get_uint32(i40e_t *i40e, uintptr_t reg, kstat_named_t *kstat,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi uint64_t *base, boolean_t init)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_hw_t *hw = &i40e->i40e_hw_space;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi uint64_t raw, delta;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ASSERT(MUTEX_HELD(&i40e->i40e_stat_lock));
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi raw = ddi_get32(i40e->i40e_osdep_space.ios_reg_handle,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (uint32_t *)((uintptr_t)hw->hw_addr + reg));
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (init == B_TRUE) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *base = raw;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Watch out for wraparound as we only have a 32-bit counter.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (raw >= *base) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi delta = raw - *base;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi } else {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi delta = 0x100000000ULL - *base + raw;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat->value.ui64 += delta;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *base = raw;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic void
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_vsi_update(i40e_t *i40e, boolean_t init)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_vsi_stats_t *ivs;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_vsi_kstats_t *ivk;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi int id = i40e->i40e_vsi_stat_id;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ASSERT(i40e->i40e_vsi_kstat != NULL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ivs = &i40e->i40e_vsi_stat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ivk = i40e->i40e_vsi_kstat->ks_data;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_enter(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_GORCL(id), &ivk->ivk_rx_bytes,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_rx_bytes, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_UPRCL(id), &ivk->ivk_rx_unicast,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_rx_unicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_MPRCL(id), &ivk->ivk_rx_multicast,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_rx_multicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_BPRCL(id), &ivk->ivk_rx_broadcast,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_rx_broadcast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLV_RDPC(id), &ivk->ivk_rx_discards,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_rx_discards, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLV_RUPP(id),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivk->ivk_rx_unknown_protocol,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_rx_unknown_protocol,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_GOTCL(id), &ivk->ivk_tx_bytes,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_tx_bytes, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_UPTCL(id), &ivk->ivk_tx_unicast,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_tx_unicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_MPTCL(id), &ivk->ivk_tx_multicast,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_tx_multicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLV_BPTCL(id), &ivk->ivk_tx_broadcast,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_tx_broadcast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLV_TEPC(id), &ivk->ivk_tx_errors,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ivs->ivs_tx_errors, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * We follow ixgbe's lead here and that if a kstat update didn't work
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * 100% then we mark service unaffected as opposed to when fetching
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * things for MAC directly.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e_check_acc_handle(i40e->i40e_osdep_space.ios_reg_handle) !=
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi DDI_FM_OK) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_fm_service_impact(i40e->i40e_dip, DDI_SERVICE_UNAFFECTED);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic int
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_vsi_kstat_update(kstat_t *ksp, int rw)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_t *i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (rw == KSTAT_WRITE)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (EACCES);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e = ksp->ks_private;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_vsi_update(i40e, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchivoid
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_vsi_fini(i40e_t *i40e)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e->i40e_vsi_kstat != NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_delete(i40e->i40e_vsi_kstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_vsi_kstat = NULL;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiboolean_t
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_vsi_init(i40e_t *i40e)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_t *ksp;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_vsi_kstats_t *ivk;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi char buf[64];
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (void) snprintf(buf, sizeof (buf), "vsi_%d", i40e->i40e_vsi_id);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ksp = kstat_create(I40E_MODULE_NAME, ddi_get_instance(i40e->i40e_dip),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi buf, "net", KSTAT_TYPE_NAMED,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi sizeof (i40e_vsi_kstats_t) / sizeof (kstat_named_t), 0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (ksp == NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_error(i40e, "Failed to create kstats for VSI %d",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_vsi_id);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_vsi_kstat = ksp;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ivk = ksp->ks_data;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ksp->ks_update = i40e_stat_vsi_kstat_update;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ksp->ks_private = i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_rx_bytes, "rx_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_rx_unicast, "rx_unicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_rx_multicast, "rx_multicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_rx_broadcast, "rx_broadcast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_rx_discards, "rx_discards",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_rx_unknown_protocol, "rx_unknown_protocol",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_tx_bytes, "tx_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_tx_unicast, "tx_unicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_tx_multicast, "tx_multicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_tx_broadcast, "tx_broadcast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ivk->ivk_tx_errors, "tx_errors",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi bzero(&i40e->i40e_vsi_stat, sizeof (i40e_vsi_stats_t));
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_vsi_update(i40e, B_TRUE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_install(i40e->i40e_vsi_kstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_TRUE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic void
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_pf_update(i40e_t *i40e, boolean_t init)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_pf_stats_t *ips;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_pf_kstats_t *ipk;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi int port = i40e->i40e_hw_space.port;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi int i;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ASSERT(i40e->i40e_pf_kstat != NULL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ips = &i40e->i40e_pf_stat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk = i40e->i40e_pf_kstat->ks_data;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_enter(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* 64-bit PCIe regs */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_GORCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_bytes, &ips->ips_rx_bytes, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_UPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_unicast, &ips->ips_rx_unicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_MPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_multicast, &ips->ips_rx_multicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_BPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_broadcast, &ips->ips_rx_broadcast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_GOTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_bytes, &ips->ips_tx_bytes, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_UPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_unicast, &ips->ips_tx_unicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_MPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_multicast, &ips->ips_tx_multicast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_BPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_broadcast, &ips->ips_tx_broadcast, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC64L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_64, &ips->ips_rx_size_64, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC127L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_127, &ips->ips_rx_size_127, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC255L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_255, &ips->ips_rx_size_255, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC511L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_511, &ips->ips_rx_size_511, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC1023L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_1023, &ips->ips_rx_size_1023, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC1522L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_1522, &ips->ips_rx_size_1522, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PRC9522L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_size_9522, &ips->ips_rx_size_9522, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC64L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_64, &ips->ips_tx_size_64, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC127L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_127, &ips->ips_tx_size_127, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC255L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_255, &ips->ips_tx_size_255, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC511L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_511, &ips->ips_tx_size_511, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC1023L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_1023, &ips->ips_tx_size_1023, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC1522L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_1522, &ips->ips_tx_size_1522, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_PTC9522L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_size_9522, &ips->ips_tx_size_9522, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* 32-bit PCIe regs */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_LXONRXC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_link_xon_rx, &ips->ips_link_xon_rx, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_LXOFFRXC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_link_xoff_rx, &ips->ips_link_xoff_rx, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_LXONTXC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_link_xon_tx, &ips->ips_link_xon_tx, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_LXOFFTXC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_link_xoff_tx, &ips->ips_link_xoff_tx, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi for (i = 0; i < 8; i++) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_PXONRXC(port, i),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_priority_xon_rx[i], &ips->ips_priority_xon_rx[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_PXOFFRXC(port, i),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_priority_xoff_rx[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ips->ips_priority_xoff_rx[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_PXONTXC(port, i),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_priority_xon_tx[i], &ips->ips_priority_xon_tx[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_PXOFFTXC(port, i),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_priority_xoff_tx[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ips->ips_priority_xoff_tx[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RXON2OFFCNT(port, i),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_priority_xon_2_xoff[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ips->ips_priority_xon_2_xoff[i],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_CRCERRS(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_crc_errors, &ips->ips_crc_errors, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_ILLERRC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_illegal_bytes, &ips->ips_illegal_bytes, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_MLFC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_mac_local_faults, &ips->ips_mac_local_faults, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_MRFC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_mac_remote_faults, &ips->ips_mac_remote_faults, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RLEC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_length_errors, &ips->ips_rx_length_errors, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RUC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_undersize, &ips->ips_rx_undersize, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RFC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_fragments, &ips->ips_rx_fragments, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_ROC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_oversize, &ips->ips_rx_oversize, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RJC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_jabber, &ips->ips_rx_jabber, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RDPC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_discards, &ips->ips_rx_discards, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_LDPC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_vm_discards, &ips->ips_rx_vm_discards, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_MSPDC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_short_discards, &ips->ips_rx_short_discards, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_TDOLD(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_dropped_link_down, &ips->ips_tx_dropped_link_down,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RUPP(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_unknown_protocol, &ips->ips_rx_unknown_protocol, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* 64-bit */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GL_RXERR1_L(port), &ipk->ipk_rx_err1,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ips->ips_rx_err1, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GL_RXERR2_L(port), &ipk->ipk_rx_err2,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ips->ips_rx_err2, init);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * We follow ixgbe's lead here and that if a kstat update didn't work
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * 100% then we mark service unaffected as opposed to when fetching
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * things for MAC directly.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e_check_acc_handle(i40e->i40e_osdep_space.ios_reg_handle) !=
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi DDI_FM_OK) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_fm_service_impact(i40e->i40e_dip, DDI_SERVICE_UNAFFECTED);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic int
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_pf_kstat_update(kstat_t *ksp, int rw)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_t *i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (rw == KSTAT_WRITE)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (EACCES);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e = ksp->ks_private;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_pf_update(i40e, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchistatic boolean_t
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stat_pf_init(i40e_t *i40e)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_t *ksp;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_pf_kstats_t *ipk;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ksp = kstat_create(I40E_MODULE_NAME, ddi_get_instance(i40e->i40e_dip),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "pfstats", "net", KSTAT_TYPE_NAMED,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi sizeof (i40e_pf_kstats_t) / sizeof (kstat_named_t), 0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (ksp == NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_error(i40e, "Could not create kernel statistics.");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_pf_kstat = ksp;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk = ksp->ks_data;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ksp->ks_update = i40e_stat_pf_kstat_update;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ksp->ks_private = i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_bytes, "rx_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_unicast, "rx_unicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_multicast, "rx_multicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_broadcast, "rx_broadcast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_bytes, "tx_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_unicast, "tx_unicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_multicast, "tx_multicast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_broadcast, "tx_broadcast",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_64, "rx_size_64",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_127, "rx_size_127",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_255, "rx_size_255",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_511, "rx_size_511",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_1023, "rx_size_1023",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_1522, "rx_size_1522",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_size_9522, "rx_size_9522",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_64, "tx_size_64",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_127, "tx_size_127",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_255, "tx_size_255",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_511, "tx_size_511",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_1023, "tx_size_1023",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_1522, "tx_size_1522",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_size_9522, "tx_size_9522",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_link_xon_rx, "link_xon_rx",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_link_xoff_rx, "link_xoff_rx",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_link_xon_tx, "link_xon_tx",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_link_xoff_tx, "link_xoff_tx",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[0], "priority_xon_rx[0]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[0], "priority_xoff_rx[0]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[0], "priority_xon_tx[0]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[0], "priority_xoff_tx[0]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[0],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[0]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[1], "priority_xon_rx[1]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[1], "priority_xoff_rx[1]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[1], "priority_xon_tx[1]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[1], "priority_xoff_tx[1]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[1],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[1]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[2], "priority_xon_rx[2]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[2], "priority_xoff_rx[2]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[2], "priority_xon_tx[2]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[2], "priority_xoff_tx[2]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[2],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[2]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[3], "priority_xon_rx[3]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[3], "priority_xoff_rx[3]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[3], "priority_xon_tx[3]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[3], "priority_xoff_tx[3]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[3],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[3]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[4], "priority_xon_rx[4]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[4], "priority_xoff_rx[4]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[4], "priority_xon_tx[4]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[4], "priority_xoff_tx[4]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[4],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[4]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[5], "priority_xon_rx[5]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[5], "priority_xoff_rx[5]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[5], "priority_xon_tx[5]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[5], "priority_xoff_tx[5]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[5],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[5]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[6], "priority_xon_rx[6]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[6], "priority_xoff_rx[6]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[6], "priority_xon_tx[6]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[6], "priority_xoff_tx[6]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[6],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[6]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_rx[7], "priority_xon_rx[7]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_rx[7], "priority_xoff_rx[7]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_tx[7], "priority_xon_tx[7]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xoff_tx[7], "priority_xoff_tx[7]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_priority_xon_2_xoff[7],
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi "priority_xon_2_xoff[7]",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_crc_errors, "crc_errors",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_illegal_bytes, "illegal_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_mac_local_faults, "mac_local_faults",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_mac_remote_faults, "mac_remote_faults",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_length_errors, "rx_length_errors",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_undersize, "rx_undersize",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_fragments, "rx_fragments",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_oversize, "rx_oversize",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_jabber, "rx_jabber",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_discards, "rx_discards",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_vm_discards, "rx_vm_discards",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_short_discards, "rx_short_discards",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_tx_dropped_link_down, "tx_dropped_link_down",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_unknown_protocol, "rx_unknown_protocol",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_err1, "rx_err1",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&ipk->ipk_rx_err2, "rx_err2",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi bzero(&i40e->i40e_pf_stat, sizeof (i40e_pf_stats_t));
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_pf_update(i40e, B_TRUE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_install(i40e->i40e_pf_kstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_TRUE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchivoid
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stats_fini(i40e_t *i40e)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ASSERT(i40e->i40e_vsi_kstat == NULL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e->i40e_pf_kstat != NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_delete(i40e->i40e_pf_kstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_pf_kstat = NULL;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_destroy(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiboolean_t
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stats_init(i40e_t *i40e)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_init(&i40e->i40e_stat_lock, NULL, MUTEX_DRIVER, NULL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e_stat_pf_init(i40e) == B_FALSE) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_destroy(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_TRUE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * For Nemo/GLDv3.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiint
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_m_stat(void *arg, uint_t stat, uint64_t *val)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_t *i40e = (i40e_t *)arg;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_hw_t *hw = &i40e->i40e_hw_space;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi int port = i40e->i40e_hw_space.port;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_pf_stats_t *ips;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_pf_kstats_t *ipk;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ASSERT(i40e->i40e_pf_kstat != NULL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ips = &i40e->i40e_pf_stat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk = i40e->i40e_pf_kstat->ks_data;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * We need both locks, as various stats are protected by different
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * things here.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_enter(&i40e->i40e_general_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e->i40e_state & I40E_SUSPENDED) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_general_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (ECANCELED);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_enter(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Unfortunately the GLDv3 conflates two rather different things here.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * We're combining statistics about the physical port represented by
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * this instance with statistics that describe the properties of the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * logical interface. As such, we're going to use the various aspects of
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the port to describe these stats as they represent what the physical
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * instance is doing, even though that that means some tools may be
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * confused and that to see the logical traffic on the interface itself
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * sans VNICs and the like will require more work.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Stats which are not listed in this switch statement are unimplemented
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * at this time in hardware or don't currently apply to the device.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi switch (stat) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* MIB-II stats (RFC 1213 and RFC 1573) */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_IFSPEED:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_link_speed * 1000000ull;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_MULTIRCV:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_MPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_multicast, &ips->ips_rx_multicast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_multicast.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_BRDCSTRCV:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_BPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_broadcast, &ips->ips_rx_broadcast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_broadcast.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_MULTIXMT:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_MPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_multicast, &ips->ips_tx_multicast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_tx_multicast.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_BRDCSTXMT:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_BPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_broadcast, &ips->ips_tx_broadcast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_tx_broadcast.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_NORCVBUF:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RDPC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_discards, &ips->ips_rx_discards, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_LDPC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_vm_discards, &ips->ips_rx_vm_discards,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_discards.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_vm_discards.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Note, that some RXERR2 stats are also duplicated by the switch filter
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * stats; however, since we're not using those at this time, it seems
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * reasonable to include them.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_IERRORS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_CRCERRS(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_crc_errors, &ips->ips_crc_errors, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_ILLERRC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_illegal_bytes, &ips->ips_illegal_bytes, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RLEC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_length_errors, &ips->ips_rx_length_errors,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GL_RXERR1_L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_err1, &ips->ips_rx_err1, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GL_RXERR2_L(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_err2, &ips->ips_rx_err2, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_crc_errors.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_illegal_bytes.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_length_errors.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_err1.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_err2.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_UNKNOWNS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RUPP(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_unknown_protocol,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ips->ips_rx_unknown_protocol,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_unknown_protocol.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_RBYTES:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_GORCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_bytes, &ips->ips_rx_bytes, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_bytes.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_IPACKETS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_UPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_unicast, &ips->ips_rx_unicast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_MPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_multicast, &ips->ips_rx_multicast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_BPRCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_broadcast, &ips->ips_rx_broadcast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_unicast.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_multicast.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_broadcast.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_OBYTES:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_GOTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_bytes, &ips->ips_tx_bytes, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_tx_bytes.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_OPACKETS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_UPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_unicast, &ips->ips_tx_unicast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_MPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_multicast, &ips->ips_tx_multicast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint48(i40e, I40E_GLPRT_BPTCL(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_tx_broadcast, &ips->ips_tx_broadcast, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_tx_unicast.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_tx_multicast.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_tx_broadcast.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_UNDERFLOWS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RUC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_undersize, &ips->ips_rx_undersize, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RFC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_fragments, &ips->ips_rx_fragments, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_MSPDC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_short_discards, &ips->ips_rx_short_discards,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_undersize.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_fragments.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_short_discards.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_OVERFLOWS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_ROC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_oversize, &ips->ips_rx_oversize, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RJC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_jabber, &ips->ips_rx_jabber, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_oversize.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_fragments.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* RFC 1643 stats */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_FCS_ERRORS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_CRCERRS(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_crc_errors, &ips->ips_crc_errors, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_crc_errors.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_TOOLONG_ERRORS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_ROC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_oversize, &ips->ips_rx_oversize, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_oversize.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_MACRCV_ERRORS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_ILLERRC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_illegal_bytes, &ips->ips_illegal_bytes, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RLEC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_length_errors, &ips->ips_rx_length_errors,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RFC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_fragments, &ips->ips_rx_fragments, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_illegal_bytes.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_length_errors.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_fragments.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* MII/GMII stats */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * The receiver address is apparently the same as the port number.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_XCVR_ADDR:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /* The Receiver address is apparently the same as the port */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_hw_space.port;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_XCVR_ID:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi switch (hw->phy.media_type) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_BASET:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Transform the data here into the ID. Note, generally
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * the revision is left out.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_phy.phy_id[3] << 24 |
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_phy.phy_id[2] << 16 |
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_phy.phy_id[1] << 8;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_FIBER:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_BACKPLANE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_CX4:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_DA:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_VIRTUAL:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_phy.phy_id[0] |
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_phy.phy_id[1] << 8 |
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e->i40e_phy.phy_id[2] << 16;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_MEDIA_TYPE_UNKNOWN:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi default:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi goto unimpl;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_XCVR_INUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi switch (hw->phy.link_info.phy_type) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_PHY_TYPE_100BASE_TX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = XCVR_100T2;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case I40E_PHY_TYPE_1000BASE_T:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = XCVR_1000T;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi default:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = XCVR_UNDEFINED;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * This group answers the question of do we support a given speed in
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * theory.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_100FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_100MB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_1000FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_1GB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_10GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_10GB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_40GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_40GB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * These ask are we currently advertising these speeds and abilities.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Until we support setting these because we're working with a copper
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * PHY, then the only things we advertise are based on the link PHY
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * speeds. In other words, we advertise everything we support.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_100FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_100MB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_1000FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_1GB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_10GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_10GB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_40GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_40GB) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * These ask if the peer supports these speeds, e.g. what did they tell
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * us in auto-negotiation. Unfortunately, hardware doesn't appear to
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * give us a way to determine whether or not they actually support
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * something, only what they have enabled. This means that all we can
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * tell the user is the speed that we're currently at, unfortunately.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_100FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_link_speed == 100;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_1000FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_link_speed == 1000;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_10GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_link_speed == 10000;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_40GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_link_speed == 40000;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Statistics for unsupported speeds. Note that these often have the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * same constraints as the other ones. For example, we can't answer the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * question of the ETHER_STAT_LP_CAP family because hardware doesn't
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * give us any way of knowing whether or not it does.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_100HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_1000HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_10FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_10HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_100T4:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_100GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_2500FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_5000FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_1000HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_100HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_10FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_10HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_100T4:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_100GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_2500FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_5000FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_1000HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_100HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_10FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_10HDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_100T4:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_100GFDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_2500FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_5000FDX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LINK_DUPLEX:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = i40e->i40e_link_duplex;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_TOOSHORT_ERRORS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RUC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_undersize, &ips->ips_rx_undersize, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_MSPDC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_short_discards, &ips->ips_rx_short_discards,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_undersize.value.ui64 +
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ipk->ipk_rx_short_discards.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_JABBER_ERRORS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_stat_get_uint32(i40e, I40E_GLPRT_RJC(port),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi &ipk->ipk_rx_jabber, &ips->ips_rx_jabber, B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = ipk->ipk_rx_jabber.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Non-Link speed related capabilities.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_AUTONEG:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 1;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_AUTONEG:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 1;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_AUTONEG:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (hw->phy.link_info.an_info & I40E_AQ_LP_AN_ABILITY) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LINK_AUTONEG:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 1;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Note that while the hardware does support the pause functionality, at
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * this time we do not use it at all and effectively disable it.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_ASMPAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.abilities &
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi I40E_AQ_PHY_FLAG_PAUSE_RX) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_CAP_PAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (i40e->i40e_phy.abilities &
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi I40E_AQ_PHY_FLAG_PAUSE_TX) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Because we don't support these at this time, they are always
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * hard-coded to zero.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_ASMPAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_ADV_CAP_PAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi /*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * Like the other LP fields, we can only answer the question have we
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * enabled it, not whether the other end actually supports it.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_ASMPAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LINK_ASMPAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (hw->phy.link_info.an_info & I40E_AQ_LINK_PAUSE_RX) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LP_CAP_PAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case ETHER_STAT_LINK_PAUSE:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = (hw->phy.link_info.an_info & I40E_AQ_LINK_PAUSE_TX) != 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi default:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi unimpl:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_general_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (ENOTSUP);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_stat_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi mutex_exit(&i40e->i40e_general_lock);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e_check_acc_handle(i40e->i40e_osdep_space.ios_reg_handle) !=
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi DDI_FM_OK) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_fm_service_impact(i40e->i40e_dip, DDI_SERVICE_DEGRADED);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (EIO);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiint
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_rx_ring_stat(mac_ring_driver_t rh, uint_t stat, uint64_t *val)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_trqpair_t *itrq = (i40e_trqpair_t *)rh;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_t *i40e = itrq->itrq_i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e->i40e_state & I40E_SUSPENDED) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (ECANCELED);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi switch (stat) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_RBYTES:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = itrq->itrq_rxstat.irxs_bytes.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_IPACKETS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = itrq->itrq_rxstat.irxs_packets.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi default:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (ENOTSUP);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiint
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_tx_ring_stat(mac_ring_driver_t rh, uint_t stat, uint64_t *val)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_trqpair_t *itrq = (i40e_trqpair_t *)rh;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_t *i40e = itrq->itrq_i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (i40e->i40e_state & I40E_SUSPENDED) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (ECANCELED);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi switch (stat) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_OBYTES:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = itrq->itrq_txstat.itxs_bytes.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi case MAC_STAT_OPACKETS:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = itrq->itrq_txstat.itxs_packets.value.ui64;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi break;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi default:
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi *val = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (ENOTSUP);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (0);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi/*
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * When we end up refactoring all off the queue assignments and have non-static
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * queue to VSI mappings, then we may need to revisit the general locking
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * strategy that we employ and have the kstat creation / deletion be part of the
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi * ring start and stop routines.
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi */
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchivoid
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stats_trqpair_fini(i40e_trqpair_t *itrq)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (itrq->itrq_txkstat != NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_delete(itrq->itrq_txkstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_txkstat = NULL;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (itrq->itrq_rxkstat != NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_delete(itrq->itrq_rxkstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_rxkstat = NULL;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiboolean_t
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchii40e_stats_trqpair_init(i40e_trqpair_t *itrq)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi{
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi char buf[128];
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_t *i40e = itrq->itrq_i40e;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_txq_stat_t *tsp = &itrq->itrq_txstat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi i40e_rxq_stat_t *rsp = &itrq->itrq_rxstat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (void) snprintf(buf, sizeof (buf), "trqpair_tx_%d", itrq->itrq_index);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_txkstat = kstat_create(I40E_MODULE_NAME,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_get_instance(i40e->i40e_dip), buf, "net", KSTAT_TYPE_NAMED,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi sizeof (i40e_txq_stat_t) / sizeof (kstat_named_t),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_FLAG_VIRTUAL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (itrq->itrq_txkstat == NULL)
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi (void) snprintf(buf, sizeof (buf), "trqpair_rx_%d", itrq->itrq_index);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_rxkstat = kstat_create(I40E_MODULE_NAME,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi ddi_get_instance(i40e->i40e_dip), buf, "net", KSTAT_TYPE_NAMED,
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi sizeof (i40e_rxq_stat_t) / sizeof (kstat_named_t),
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_FLAG_VIRTUAL);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi if (itrq->itrq_rxkstat == NULL) {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_delete(itrq->itrq_txkstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_txkstat = NULL;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_FALSE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi }
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_txkstat->ks_data = &itrq->itrq_txstat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi itrq->itrq_rxkstat->ks_data = &itrq->itrq_rxstat;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_bytes, "tx_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_bytes.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_packets, "tx_packets",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_packets.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_descriptors, "tx_descriptors",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_descriptors.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_recycled, "tx_recycled",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_recycled.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_hck_meoifail, "tx_hck_meoifail",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_hck_meoifail.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_hck_nol2info, "tx_hck_nol2info",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_hck_nol2info.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_hck_nol3info, "tx_hck_nol3info",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_hck_nol3info.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_hck_nol4info, "tx_hck_nol4info",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_hck_nol4info.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_hck_badl3, "tx_hck_badl3",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_hck_badl3.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_hck_badl4, "tx_hck_badl4",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_hck_badl4.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_err_notcb, "tx_err_notcb",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_err_notcb.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_err_nodescs, "tx_err_nodescs",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_err_nodescs.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_err_context, "tx_err_context",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_err_context.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&tsp->itxs_num_unblocked, "tx_num_unblocked",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi tsp->itxs_num_unblocked.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_bytes, "rx_bytes",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_bytes.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_packets, "rx_packets",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_packets.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_rx_desc_error, "rx_desc_error",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_rx_desc_error.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_rx_intr_limit, "rx_intr_limit",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_rx_intr_limit.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_rx_bind_norcb, "rx_bind_norcb",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_rx_bind_norcb.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_rx_bind_nomp, "rx_bind_nomp",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_rx_bind_nomp.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_rx_copy_nomem, "rx_copy_nomem",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_rx_copy_nomem.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_v4hdrok, "rx_hck_v4hdrok",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_v4hdrok.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_l4hdrok, "rx_hck_l4hdrok",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_l4hdrok.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_unknown, "rx_hck_unknown",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_unknown.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_nol3l4p, "rx_hck_nol3l4p",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_nol3l4p.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_iperr, "rx_hck_iperr",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_iperr.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_eiperr, "rx_hck_eiperr",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_eiperr.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_l4err, "rx_hck_l4err",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_l4err.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_v6skip, "rx_hck_v6skip",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_v6skip.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_set, "rx_hck_set",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_set.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_named_init(&rsp->irxs_hck_miss, "rx_hck_miss",
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi KSTAT_DATA_UINT64);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi rsp->irxs_hck_miss.value.ui64 = 0;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_install(itrq->itrq_txkstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi kstat_install(itrq->itrq_rxkstat);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi return (B_TRUE);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}