void falcon_update_stats_xmac(struct efx_nic *efx) { struct efx_mac_stats *mac_stats = &efx->mac_stats; /* Update MAC stats from DMAed values */ FALCON_STAT(efx, XgRxOctets, rx_bytes); FALCON_STAT(efx, XgRxOctetsOK, rx_good_bytes); FALCON_STAT(efx, XgRxPkts, rx_packets); FALCON_STAT(efx, XgRxPktsOK, rx_good); FALCON_STAT(efx, XgRxBroadcastPkts, rx_broadcast); FALCON_STAT(efx, XgRxMulticastPkts, rx_multicast); FALCON_STAT(efx, XgRxUnicastPkts, rx_unicast); FALCON_STAT(efx, XgRxUndersizePkts, rx_lt64); FALCON_STAT(efx, XgRxOversizePkts, rx_gtjumbo); FALCON_STAT(efx, XgRxJabberPkts, rx_bad_gtjumbo); FALCON_STAT(efx, XgRxUndersizeFCSerrorPkts, rx_bad_lt64); FALCON_STAT(efx, XgRxDropEvents, rx_overflow); FALCON_STAT(efx, XgRxFCSerrorPkts, rx_bad); FALCON_STAT(efx, XgRxAlignError, rx_align_error); FALCON_STAT(efx, XgRxSymbolError, rx_symbol_error); FALCON_STAT(efx, XgRxInternalMACError, rx_internal_error); FALCON_STAT(efx, XgRxControlPkts, rx_control); FALCON_STAT(efx, XgRxPausePkts, rx_pause); FALCON_STAT(efx, XgRxPkts64Octets, rx_64); FALCON_STAT(efx, XgRxPkts65to127Octets, rx_65_to_127); FALCON_STAT(efx, XgRxPkts128to255Octets, rx_128_to_255); FALCON_STAT(efx, XgRxPkts256to511Octets, rx_256_to_511); FALCON_STAT(efx, XgRxPkts512to1023Octets, rx_512_to_1023); FALCON_STAT(efx, XgRxPkts1024to15xxOctets, rx_1024_to_15xx); FALCON_STAT(efx, XgRxPkts15xxtoMaxOctets, rx_15xx_to_jumbo); FALCON_STAT(efx, XgRxLengthError, rx_length_error); FALCON_STAT(efx, XgTxPkts, tx_packets); FALCON_STAT(efx, XgTxOctets, tx_bytes); FALCON_STAT(efx, XgTxMulticastPkts, tx_multicast); FALCON_STAT(efx, XgTxBroadcastPkts, tx_broadcast); FALCON_STAT(efx, XgTxUnicastPkts, tx_unicast); FALCON_STAT(efx, XgTxControlPkts, tx_control); FALCON_STAT(efx, XgTxPausePkts, tx_pause); FALCON_STAT(efx, XgTxPkts64Octets, tx_64); FALCON_STAT(efx, XgTxPkts65to127Octets, tx_65_to_127); FALCON_STAT(efx, XgTxPkts128to255Octets, tx_128_to_255); FALCON_STAT(efx, XgTxPkts256to511Octets, tx_256_to_511); FALCON_STAT(efx, XgTxPkts512to1023Octets, tx_512_to_1023); FALCON_STAT(efx, XgTxPkts1024to15xxOctets, tx_1024_to_15xx); FALCON_STAT(efx, XgTxPkts1519toMaxOctets, tx_15xx_to_jumbo); FALCON_STAT(efx, XgTxUndersizePkts, tx_lt64); FALCON_STAT(efx, XgTxOversizePkts, tx_gtjumbo); FALCON_STAT(efx, XgTxNonTcpUdpPkt, tx_non_tcpudp); FALCON_STAT(efx, XgTxMacSrcErrPkt, tx_mac_src_error); FALCON_STAT(efx, XgTxIpSrcErrPkt, tx_ip_src_error); /* Update derived statistics */ efx_update_diff_stat(&mac_stats->tx_good_bytes, mac_stats->tx_bytes - mac_stats->tx_bad_bytes - mac_stats->tx_control * 64); efx_update_diff_stat(&mac_stats->rx_bad_bytes, mac_stats->rx_bytes - mac_stats->rx_good_bytes - mac_stats->rx_control * 64); }
static int siena_try_update_nic_stats(struct efx_nic *efx) { struct siena_nic_data *nic_data = efx->nic_data; u64 *stats = nic_data->stats; __le64 *dma_stats; __le64 generation_start, generation_end; dma_stats = efx->stats_buffer.addr; generation_end = dma_stats[efx->num_mac_stats - 1]; if (generation_end == EFX_MC_STATS_GENERATION_INVALID) return 0; rmb(); efx_nic_update_stats(siena_stat_desc, SIENA_STAT_COUNT, siena_stat_mask, stats, efx->stats_buffer.addr, false); rmb(); generation_start = dma_stats[MC_CMD_MAC_GENERATION_START]; if (generation_end != generation_start) return -EAGAIN; /* Update derived statistics */ efx_nic_fix_nodesc_drop_stat(efx, &stats[SIENA_STAT_rx_nodesc_drop_cnt]); efx_update_diff_stat(&stats[SIENA_STAT_tx_good_bytes], stats[SIENA_STAT_tx_bytes] - stats[SIENA_STAT_tx_bad_bytes]); stats[SIENA_STAT_tx_collision] = stats[SIENA_STAT_tx_single_collision] + stats[SIENA_STAT_tx_multiple_collision] + stats[SIENA_STAT_tx_excessive_collision] + stats[SIENA_STAT_tx_late_collision]; efx_update_diff_stat(&stats[SIENA_STAT_rx_good_bytes], stats[SIENA_STAT_rx_bytes] - stats[SIENA_STAT_rx_bad_bytes]); efx_update_sw_stats(efx, stats); return 0; }
static int siena_try_update_nic_stats(struct efx_nic *efx) { __le64 *dma_stats; struct efx_mac_stats *mac_stats; __le64 generation_start, generation_end; mac_stats = &efx->mac_stats; dma_stats = efx->stats_buffer.addr; generation_end = dma_stats[MC_CMD_MAC_GENERATION_END]; if (generation_end == STATS_GENERATION_INVALID) return 0; rmb(); #define MAC_STAT(M, D) \ mac_stats->M = le64_to_cpu(dma_stats[MC_CMD_MAC_ ## D]) MAC_STAT(tx_bytes, TX_BYTES); MAC_STAT(tx_bad_bytes, TX_BAD_BYTES); efx_update_diff_stat(&mac_stats->tx_good_bytes, mac_stats->tx_bytes - mac_stats->tx_bad_bytes); MAC_STAT(tx_packets, TX_PKTS); MAC_STAT(tx_bad, TX_BAD_FCS_PKTS); MAC_STAT(tx_pause, TX_PAUSE_PKTS); MAC_STAT(tx_control, TX_CONTROL_PKTS); MAC_STAT(tx_unicast, TX_UNICAST_PKTS); MAC_STAT(tx_multicast, TX_MULTICAST_PKTS); MAC_STAT(tx_broadcast, TX_BROADCAST_PKTS); MAC_STAT(tx_lt64, TX_LT64_PKTS); MAC_STAT(tx_64, TX_64_PKTS); MAC_STAT(tx_65_to_127, TX_65_TO_127_PKTS); MAC_STAT(tx_128_to_255, TX_128_TO_255_PKTS); MAC_STAT(tx_256_to_511, TX_256_TO_511_PKTS); MAC_STAT(tx_512_to_1023, TX_512_TO_1023_PKTS); MAC_STAT(tx_1024_to_15xx, TX_1024_TO_15XX_PKTS); MAC_STAT(tx_15xx_to_jumbo, TX_15XX_TO_JUMBO_PKTS); MAC_STAT(tx_gtjumbo, TX_GTJUMBO_PKTS); mac_stats->tx_collision = 0; MAC_STAT(tx_single_collision, TX_SINGLE_COLLISION_PKTS); MAC_STAT(tx_multiple_collision, TX_MULTIPLE_COLLISION_PKTS); MAC_STAT(tx_excessive_collision, TX_EXCESSIVE_COLLISION_PKTS); MAC_STAT(tx_deferred, TX_DEFERRED_PKTS); MAC_STAT(tx_late_collision, TX_LATE_COLLISION_PKTS); mac_stats->tx_collision = (mac_stats->tx_single_collision + mac_stats->tx_multiple_collision + mac_stats->tx_excessive_collision + mac_stats->tx_late_collision); MAC_STAT(tx_excessive_deferred, TX_EXCESSIVE_DEFERRED_PKTS); MAC_STAT(tx_non_tcpudp, TX_NON_TCPUDP_PKTS); MAC_STAT(tx_mac_src_error, TX_MAC_SRC_ERR_PKTS); MAC_STAT(tx_ip_src_error, TX_IP_SRC_ERR_PKTS); MAC_STAT(rx_bytes, RX_BYTES); MAC_STAT(rx_bad_bytes, RX_BAD_BYTES); efx_update_diff_stat(&mac_stats->rx_good_bytes, mac_stats->rx_bytes - mac_stats->rx_bad_bytes); MAC_STAT(rx_packets, RX_PKTS); MAC_STAT(rx_good, RX_GOOD_PKTS); MAC_STAT(rx_bad, RX_BAD_FCS_PKTS); MAC_STAT(rx_pause, RX_PAUSE_PKTS); MAC_STAT(rx_control, RX_CONTROL_PKTS); MAC_STAT(rx_unicast, RX_UNICAST_PKTS); MAC_STAT(rx_multicast, RX_MULTICAST_PKTS); MAC_STAT(rx_broadcast, RX_BROADCAST_PKTS); MAC_STAT(rx_lt64, RX_UNDERSIZE_PKTS); MAC_STAT(rx_64, RX_64_PKTS); MAC_STAT(rx_65_to_127, RX_65_TO_127_PKTS); MAC_STAT(rx_128_to_255, RX_128_TO_255_PKTS); MAC_STAT(rx_256_to_511, RX_256_TO_511_PKTS); MAC_STAT(rx_512_to_1023, RX_512_TO_1023_PKTS); MAC_STAT(rx_1024_to_15xx, RX_1024_TO_15XX_PKTS); MAC_STAT(rx_15xx_to_jumbo, RX_15XX_TO_JUMBO_PKTS); MAC_STAT(rx_gtjumbo, RX_GTJUMBO_PKTS); mac_stats->rx_bad_lt64 = 0; mac_stats->rx_bad_64_to_15xx = 0; mac_stats->rx_bad_15xx_to_jumbo = 0; MAC_STAT(rx_bad_gtjumbo, RX_JABBER_PKTS); MAC_STAT(rx_overflow, RX_OVERFLOW_PKTS); mac_stats->rx_missed = 0; MAC_STAT(rx_false_carrier, RX_FALSE_CARRIER_PKTS); MAC_STAT(rx_symbol_error, RX_SYMBOL_ERROR_PKTS); MAC_STAT(rx_align_error, RX_ALIGN_ERROR_PKTS); MAC_STAT(rx_length_error, RX_LENGTH_ERROR_PKTS); MAC_STAT(rx_internal_error, RX_INTERNAL_ERROR_PKTS); mac_stats->rx_good_lt64 = 0; efx->n_rx_nodesc_drop_cnt = le64_to_cpu(dma_stats[MC_CMD_MAC_RX_NODESC_DROPS]); #undef MAC_STAT rmb(); generation_start = dma_stats[MC_CMD_MAC_GENERATION_START]; if (generation_end != generation_start) return -EAGAIN; return 0; }