bxe_stats.h revision 271782
152419Sjulian/*- 252419Sjulian * Copyright (c) 2007-2014 QLogic Corporation. All rights reserved. 3139823Simp * 4139823Simp * Redistribution and use in source and binary forms, with or without 5139823Simp * modification, are permitted provided that the following conditions 652419Sjulian * are met: 752419Sjulian * 870784Sjulian * 1. Redistributions of source code must retain the above copyright 952419Sjulian * notice, this list of conditions and the following disclaimer. 1052419Sjulian * 2. Redistributions in binary form must reproduce the above copyright 1152419Sjulian * notice, this list of conditions and the following disclaimer in the 1252419Sjulian * documentation and/or other materials provided with the distribution. 1352419Sjulian * 1452419Sjulian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS' 1552419Sjulian * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1652419Sjulian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1752419Sjulian * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 1852419Sjulian * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1970784Sjulian * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2052419Sjulian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2152419Sjulian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2252419Sjulian * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2352419Sjulian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2452419Sjulian * THE POSSIBILITY OF SUCH DAMAGE. 2552419Sjulian */ 2652419Sjulian 2752419Sjulian#ifndef BXE_STATS_H 2852419Sjulian#define BXE_STATS_H 2952419Sjulian 3052419Sjulian#include <sys/cdefs.h> 3152419Sjulian__FBSDID("$FreeBSD: head/sys/dev/bxe/bxe_stats.h 271782 2014-09-18 15:56:14Z glebius $"); 3252419Sjulian 3352419Sjulian#include <sys/types.h> 3452419Sjulian 3552419Sjulianstruct nig_stats { 3652419Sjulian uint32_t brb_discard; 3752419Sjulian uint32_t brb_packet; 3867506Sjulian uint32_t brb_truncate; 3952419Sjulian uint32_t flow_ctrl_discard; 4052419Sjulian uint32_t flow_ctrl_octets; 4152752Sjulian uint32_t flow_ctrl_packet; 4252419Sjulian uint32_t mng_discard; 4352419Sjulian uint32_t mng_octet_inp; 4452419Sjulian uint32_t mng_octet_out; 4552419Sjulian uint32_t mng_packet_inp; 4652419Sjulian uint32_t mng_packet_out; 4752419Sjulian uint32_t pbf_octets; 4852419Sjulian uint32_t pbf_packet; 4952419Sjulian uint32_t safc_inp; 5052419Sjulian uint32_t egress_mac_pkt0_lo; 5152419Sjulian uint32_t egress_mac_pkt0_hi; 5252419Sjulian uint32_t egress_mac_pkt1_lo; 5352419Sjulian uint32_t egress_mac_pkt1_hi; 5452419Sjulian}; 55132705Sglebius 5695759Stanimura 5752419Sjulianenum bxe_stats_event { 5852419Sjulian STATS_EVENT_PMF = 0, 59132013Srwatson STATS_EVENT_LINK_UP, 60164033Srwatson STATS_EVENT_UPDATE, 6152419Sjulian STATS_EVENT_STOP, 6295759Stanimura STATS_EVENT_MAX 6352419Sjulian}; 6452419Sjulian 65159590Sjhbenum bxe_stats_state { 6652419Sjulian STATS_STATE_DISABLED = 0, 6752419Sjulian STATS_STATE_ENABLED, 6852419Sjulian STATS_STATE_MAX 6952419Sjulian}; 7052419Sjulian 7152419Sjulianstruct bxe_eth_stats { 7252919Sjulian uint32_t total_bytes_received_hi; 7352419Sjulian uint32_t total_bytes_received_lo; 7452419Sjulian uint32_t total_bytes_transmitted_hi; 7570870Sjulian uint32_t total_bytes_transmitted_lo; 7670870Sjulian uint32_t total_unicast_packets_received_hi; 7770870Sjulian uint32_t total_unicast_packets_received_lo; 7870870Sjulian uint32_t total_multicast_packets_received_hi; 7970870Sjulian uint32_t total_multicast_packets_received_lo; 8070870Sjulian uint32_t total_broadcast_packets_received_hi; 8170870Sjulian uint32_t total_broadcast_packets_received_lo; 8270870Sjulian uint32_t total_unicast_packets_transmitted_hi; 8352419Sjulian uint32_t total_unicast_packets_transmitted_lo; 8452419Sjulian uint32_t total_multicast_packets_transmitted_hi; 8552419Sjulian uint32_t total_multicast_packets_transmitted_lo; 8652419Sjulian uint32_t total_broadcast_packets_transmitted_hi; 8752419Sjulian uint32_t total_broadcast_packets_transmitted_lo; 8852419Sjulian uint32_t valid_bytes_received_hi; 8952419Sjulian uint32_t valid_bytes_received_lo; 9052419Sjulian 9152419Sjulian uint32_t error_bytes_received_hi; 9252419Sjulian uint32_t error_bytes_received_lo; 9352419Sjulian uint32_t etherstatsoverrsizepkts_hi; 9452419Sjulian uint32_t etherstatsoverrsizepkts_lo; 9552419Sjulian uint32_t no_buff_discard_hi; 9652419Sjulian uint32_t no_buff_discard_lo; 9752419Sjulian 9852419Sjulian uint32_t rx_stat_ifhcinbadoctets_hi; 9952419Sjulian uint32_t rx_stat_ifhcinbadoctets_lo; 10052419Sjulian uint32_t tx_stat_ifhcoutbadoctets_hi; 10152419Sjulian uint32_t tx_stat_ifhcoutbadoctets_lo; 10252419Sjulian uint32_t rx_stat_dot3statsfcserrors_hi; 10352419Sjulian uint32_t rx_stat_dot3statsfcserrors_lo; 10452419Sjulian uint32_t rx_stat_dot3statsalignmenterrors_hi; 10552419Sjulian uint32_t rx_stat_dot3statsalignmenterrors_lo; 10652419Sjulian uint32_t rx_stat_dot3statscarriersenseerrors_hi; 10752419Sjulian uint32_t rx_stat_dot3statscarriersenseerrors_lo; 10852419Sjulian uint32_t rx_stat_falsecarriererrors_hi; 10952419Sjulian uint32_t rx_stat_falsecarriererrors_lo; 11052752Sjulian uint32_t rx_stat_etherstatsundersizepkts_hi; 11152752Sjulian uint32_t rx_stat_etherstatsundersizepkts_lo; 11270700Sjulian uint32_t rx_stat_dot3statsframestoolong_hi; 11352752Sjulian uint32_t rx_stat_dot3statsframestoolong_lo; 11472053Sjulian uint32_t rx_stat_etherstatsfragments_hi; 11552752Sjulian uint32_t rx_stat_etherstatsfragments_lo; 11652885Sjulian uint32_t rx_stat_etherstatsjabbers_hi; 11752419Sjulian uint32_t rx_stat_etherstatsjabbers_lo; 11852419Sjulian uint32_t rx_stat_maccontrolframesreceived_hi; 11952419Sjulian uint32_t rx_stat_maccontrolframesreceived_lo; 12052419Sjulian uint32_t rx_stat_bmac_xpf_hi; 12152419Sjulian uint32_t rx_stat_bmac_xpf_lo; 122151975Sglebius uint32_t rx_stat_bmac_xcf_hi; 123151975Sglebius uint32_t rx_stat_bmac_xcf_lo; 124163463Sglebius uint32_t rx_stat_xoffstateentered_hi; 125163463Sglebius uint32_t rx_stat_xoffstateentered_lo; 126163463Sglebius uint32_t rx_stat_xonpauseframesreceived_hi; 12752419Sjulian uint32_t rx_stat_xonpauseframesreceived_lo; 12852419Sjulian uint32_t rx_stat_xoffpauseframesreceived_hi; 12952419Sjulian uint32_t rx_stat_xoffpauseframesreceived_lo; 13052419Sjulian uint32_t tx_stat_outxonsent_hi; 131147774Sglebius uint32_t tx_stat_outxonsent_lo; 13252419Sjulian uint32_t tx_stat_outxoffsent_hi; 13352419Sjulian uint32_t tx_stat_outxoffsent_lo; 13452419Sjulian uint32_t tx_stat_flowcontroldone_hi; 135129823Sjulian uint32_t tx_stat_flowcontroldone_lo; 136129823Sjulian uint32_t tx_stat_etherstatscollisions_hi; 137129823Sjulian uint32_t tx_stat_etherstatscollisions_lo; 138129823Sjulian uint32_t tx_stat_dot3statssinglecollisionframes_hi; 139129823Sjulian uint32_t tx_stat_dot3statssinglecollisionframes_lo; 140129823Sjulian uint32_t tx_stat_dot3statsmultiplecollisionframes_hi; 141129823Sjulian uint32_t tx_stat_dot3statsmultiplecollisionframes_lo; 142129823Sjulian uint32_t tx_stat_dot3statsdeferredtransmissions_hi; 143129823Sjulian uint32_t tx_stat_dot3statsdeferredtransmissions_lo; 144129823Sjulian uint32_t tx_stat_dot3statsexcessivecollisions_hi; 14552419Sjulian uint32_t tx_stat_dot3statsexcessivecollisions_lo; 146138238Smlaier uint32_t tx_stat_dot3statslatecollisions_hi; 14752419Sjulian uint32_t tx_stat_dot3statslatecollisions_lo; 14852419Sjulian uint32_t tx_stat_etherstatspkts64octets_hi; 14964512Sarchie uint32_t tx_stat_etherstatspkts64octets_lo; 150124871Sru uint32_t tx_stat_etherstatspkts65octetsto127octets_hi; 151124871Sru uint32_t tx_stat_etherstatspkts65octetsto127octets_lo; 15252419Sjulian uint32_t tx_stat_etherstatspkts128octetsto255octets_hi; 153124871Sru uint32_t tx_stat_etherstatspkts128octetsto255octets_lo; 154125116Sru uint32_t tx_stat_etherstatspkts256octetsto511octets_hi; 15552419Sjulian uint32_t tx_stat_etherstatspkts256octetsto511octets_lo; 15653526Sjulian uint32_t tx_stat_etherstatspkts512octetsto1023octets_hi; 15752419Sjulian uint32_t tx_stat_etherstatspkts512octetsto1023octets_lo; 158131933Smarcel uint32_t tx_stat_etherstatspkts1024octetsto1522octets_hi; 15952419Sjulian uint32_t tx_stat_etherstatspkts1024octetsto1522octets_lo; 16052419Sjulian uint32_t tx_stat_etherstatspktsover1522octets_hi; 16152419Sjulian uint32_t tx_stat_etherstatspktsover1522octets_lo; 16252419Sjulian uint32_t tx_stat_bmac_2047_hi; 16352419Sjulian uint32_t tx_stat_bmac_2047_lo; 16452419Sjulian uint32_t tx_stat_bmac_4095_hi; 16552419Sjulian uint32_t tx_stat_bmac_4095_lo; 16652419Sjulian uint32_t tx_stat_bmac_9216_hi; 16752419Sjulian uint32_t tx_stat_bmac_9216_lo; 16883366Sjulian uint32_t tx_stat_bmac_16383_hi; 16952419Sjulian uint32_t tx_stat_bmac_16383_lo; 17052419Sjulian uint32_t tx_stat_dot3statsinternalmactransmiterrors_hi; 171164033Srwatson uint32_t tx_stat_dot3statsinternalmactransmiterrors_lo; 17252419Sjulian uint32_t tx_stat_bmac_ufl_hi; 173164033Srwatson uint32_t tx_stat_bmac_ufl_lo; 174164033Srwatson 175164033Srwatson uint32_t pause_frames_received_hi; 17652419Sjulian uint32_t pause_frames_received_lo; 17752419Sjulian uint32_t pause_frames_sent_hi; 17852419Sjulian uint32_t pause_frames_sent_lo; 17952419Sjulian 18052419Sjulian uint32_t etherstatspkts1024octetsto1522octets_hi; 181157370Srwatson uint32_t etherstatspkts1024octetsto1522octets_lo; 18252419Sjulian uint32_t etherstatspktsover1522octets_hi; 18352419Sjulian uint32_t etherstatspktsover1522octets_lo; 18452419Sjulian 18552419Sjulian uint32_t brb_drop_hi; 186157370Srwatson uint32_t brb_drop_lo; 187151975Sglebius uint32_t brb_truncate_hi; 18852419Sjulian uint32_t brb_truncate_lo; 18952419Sjulian 19052419Sjulian uint32_t mac_filter_discard; 19152419Sjulian uint32_t mf_tag_discard; 19283366Sjulian uint32_t brb_truncate_discard; 19352419Sjulian uint32_t mac_discard; 19452419Sjulian 195147774Sglebius uint32_t nig_timer_max; 19652419Sjulian 19770700Sjulian uint32_t total_tpa_aggregations_hi; 19852419Sjulian uint32_t total_tpa_aggregations_lo; 199146317Sglebius uint32_t total_tpa_aggregated_frames_hi; 20070700Sjulian uint32_t total_tpa_aggregated_frames_lo; 20152419Sjulian uint32_t total_tpa_bytes_hi; 202172806Smav uint32_t total_tpa_bytes_lo; 20352419Sjulian 20452419Sjulian /* PFC */ 20583366Sjulian uint32_t pfc_frames_received_hi; 20652419Sjulian uint32_t pfc_frames_received_lo; 20752419Sjulian uint32_t pfc_frames_sent_hi; 20852419Sjulian uint32_t pfc_frames_sent_lo; 20952419Sjulian 21052419Sjulian /* Recovery */ 21152419Sjulian uint32_t recoverable_error; 21252419Sjulian uint32_t unrecoverable_error; 21352419Sjulian 21452419Sjulian /* src: Clear-on-Read register; Will not survive PMF Migration */ 21552419Sjulian uint32_t eee_tx_lpi; 21652419Sjulian 21752419Sjulian /* receive path driver statistics */ 218163463Sglebius uint32_t rx_calls; 21952419Sjulian uint32_t rx_pkts; 22052419Sjulian uint32_t rx_tpa_pkts; 22152419Sjulian uint32_t rx_soft_errors; 22252419Sjulian uint32_t rx_hw_csum_errors; 22352419Sjulian uint32_t rx_ofld_frames_csum_ip; 224163463Sglebius uint32_t rx_ofld_frames_csum_tcp_udp; 225163463Sglebius uint32_t rx_budget_reached; 226163463Sglebius 227163463Sglebius /* tx path driver statistics */ 22852419Sjulian uint32_t tx_pkts; 229163463Sglebius uint32_t tx_soft_errors; 23052419Sjulian uint32_t tx_ofld_frames_csum_ip; 23152419Sjulian uint32_t tx_ofld_frames_csum_tcp; 23252419Sjulian uint32_t tx_ofld_frames_csum_udp; 233163463Sglebius uint32_t tx_ofld_frames_lso; 234163463Sglebius uint32_t tx_ofld_frames_lso_hdr_splits; 235163463Sglebius uint32_t tx_encap_failures; 236163463Sglebius uint32_t tx_hw_queue_full; 23752419Sjulian uint32_t tx_hw_max_queue_depth; 23852419Sjulian uint32_t tx_dma_mapping_failure; 23952419Sjulian uint32_t tx_max_drbr_queue_depth; 240163463Sglebius uint32_t tx_window_violation_std; 241163463Sglebius uint32_t tx_window_violation_tso; 242163463Sglebius //uint32_t tx_unsupported_tso_request_ipv6; 243163463Sglebius //uint32_t tx_unsupported_tso_request_not_tcp; 244163463Sglebius uint32_t tx_chain_lost_mbuf; 24570700Sjulian uint32_t tx_frames_deferred; 24652419Sjulian uint32_t tx_queue_xoff; 247141308Sglebius 248163463Sglebius /* mbuf driver statistics */ 249141308Sglebius uint32_t mbuf_defrag_attempts; 250141308Sglebius uint32_t mbuf_defrag_failures; 251141308Sglebius uint32_t mbuf_rx_bd_alloc_failed; 252141308Sglebius uint32_t mbuf_rx_bd_mapping_failed; 253132705Sglebius uint32_t mbuf_rx_tpa_alloc_failed; 254132705Sglebius uint32_t mbuf_rx_tpa_mapping_failed; 255132705Sglebius uint32_t mbuf_rx_sge_alloc_failed; 256132705Sglebius uint32_t mbuf_rx_sge_mapping_failed; 257132705Sglebius 258132705Sglebius /* track the number of allocated mbufs */ 259132939Sglebius uint32_t mbuf_alloc_tx; 260132939Sglebius uint32_t mbuf_alloc_rx; 261132705Sglebius uint32_t mbuf_alloc_sge; 262132705Sglebius uint32_t mbuf_alloc_tpa; 263132705Sglebius}; 264132705Sglebius 265132705Sglebius 266159590Sjhbstruct bxe_eth_q_stats { 267132705Sglebius uint32_t total_unicast_bytes_received_hi; 268146296Sglebius uint32_t total_unicast_bytes_received_lo; 269146296Sglebius uint32_t total_broadcast_bytes_received_hi; 270146296Sglebius uint32_t total_broadcast_bytes_received_lo; 271159590Sjhb uint32_t total_multicast_bytes_received_hi; 272132705Sglebius uint32_t total_multicast_bytes_received_lo; 273163463Sglebius uint32_t total_bytes_received_hi; 274132705Sglebius uint32_t total_bytes_received_lo; 275132705Sglebius uint32_t total_unicast_bytes_transmitted_hi; 276132705Sglebius uint32_t total_unicast_bytes_transmitted_lo; 277146296Sglebius uint32_t total_broadcast_bytes_transmitted_hi; 278132705Sglebius uint32_t total_broadcast_bytes_transmitted_lo; 279163463Sglebius uint32_t total_multicast_bytes_transmitted_hi; 280159590Sjhb uint32_t total_multicast_bytes_transmitted_lo; 281159590Sjhb uint32_t total_bytes_transmitted_hi; 282132705Sglebius uint32_t total_bytes_transmitted_lo; 283132705Sglebius uint32_t total_unicast_packets_received_hi; 284132705Sglebius uint32_t total_unicast_packets_received_lo; 285132705Sglebius uint32_t total_multicast_packets_received_hi; 286132705Sglebius uint32_t total_multicast_packets_received_lo; 287132705Sglebius uint32_t total_broadcast_packets_received_hi; 288163463Sglebius uint32_t total_broadcast_packets_received_lo; 289163463Sglebius uint32_t total_unicast_packets_transmitted_hi; 290163463Sglebius uint32_t total_unicast_packets_transmitted_lo; 291146296Sglebius uint32_t total_multicast_packets_transmitted_hi; 292146317Sglebius uint32_t total_multicast_packets_transmitted_lo; 293146317Sglebius uint32_t total_broadcast_packets_transmitted_hi; 294146317Sglebius uint32_t total_broadcast_packets_transmitted_lo; 295146317Sglebius uint32_t valid_bytes_received_hi; 296146296Sglebius uint32_t valid_bytes_received_lo; 297146317Sglebius 298146317Sglebius uint32_t etherstatsoverrsizepkts_hi; 299146317Sglebius uint32_t etherstatsoverrsizepkts_lo; 300146317Sglebius uint32_t no_buff_discard_hi; 301146317Sglebius uint32_t no_buff_discard_lo; 302146317Sglebius 303146317Sglebius uint32_t total_packets_received_checksum_discarded_hi; 304146317Sglebius uint32_t total_packets_received_checksum_discarded_lo; 305146317Sglebius uint32_t total_packets_received_ttl0_discarded_hi; 30670784Sjulian uint32_t total_packets_received_ttl0_discarded_lo; 307146317Sglebius uint32_t total_transmitted_dropped_packets_error_hi; 308147774Sglebius uint32_t total_transmitted_dropped_packets_error_lo; 309147774Sglebius 310147774Sglebius uint32_t total_tpa_aggregations_hi; 311147774Sglebius uint32_t total_tpa_aggregations_lo; 312147774Sglebius uint32_t total_tpa_aggregated_frames_hi; 313147774Sglebius uint32_t total_tpa_aggregated_frames_lo; 314147774Sglebius uint32_t total_tpa_bytes_hi; 315147774Sglebius uint32_t total_tpa_bytes_lo; 316172806Smav 317172806Smav /* receive path driver statistics */ 318172806Smav uint32_t rx_calls; 319172806Smav uint32_t rx_pkts; 320147774Sglebius uint32_t rx_tpa_pkts; 321146296Sglebius uint32_t rx_soft_errors; 322172806Smav uint32_t rx_hw_csum_errors; 323147774Sglebius uint32_t rx_ofld_frames_csum_ip; 324172806Smav uint32_t rx_ofld_frames_csum_tcp_udp; 325172806Smav uint32_t rx_budget_reached; 326172806Smav 327172806Smav /* tx path driver statistics */ 328172806Smav uint32_t tx_pkts; 329172806Smav uint32_t tx_soft_errors; 330172806Smav uint32_t tx_ofld_frames_csum_ip; 331147774Sglebius uint32_t tx_ofld_frames_csum_tcp; 33252419Sjulian uint32_t tx_ofld_frames_csum_udp; 33352419Sjulian uint32_t tx_ofld_frames_lso; 334163463Sglebius uint32_t tx_ofld_frames_lso_hdr_splits; 33552419Sjulian uint32_t tx_encap_failures; 33652419Sjulian uint32_t tx_hw_queue_full; 33752419Sjulian uint32_t tx_hw_max_queue_depth; 33852419Sjulian uint32_t tx_dma_mapping_failure; 33952419Sjulian uint32_t tx_max_drbr_queue_depth; 34052419Sjulian uint32_t tx_window_violation_std; 34152419Sjulian uint32_t tx_window_violation_tso; 34252419Sjulian //uint32_t tx_unsupported_tso_request_ipv6; 34383366Sjulian //uint32_t tx_unsupported_tso_request_not_tcp; 34452419Sjulian uint32_t tx_chain_lost_mbuf; 34552419Sjulian uint32_t tx_frames_deferred; 34652419Sjulian uint32_t tx_queue_xoff; 34752419Sjulian 34852419Sjulian /* mbuf driver statistics */ 34952419Sjulian uint32_t mbuf_defrag_attempts; 35052419Sjulian uint32_t mbuf_defrag_failures; 35152419Sjulian uint32_t mbuf_rx_bd_alloc_failed; 35252419Sjulian uint32_t mbuf_rx_bd_mapping_failed; 35383366Sjulian uint32_t mbuf_rx_tpa_alloc_failed; 35452419Sjulian uint32_t mbuf_rx_tpa_mapping_failed; 35570700Sjulian uint32_t mbuf_rx_sge_alloc_failed; 35670784Sjulian uint32_t mbuf_rx_sge_mapping_failed; 35770700Sjulian 35870700Sjulian /* track the number of allocated mbufs */ 359163463Sglebius uint32_t mbuf_alloc_tx; 36070700Sjulian uint32_t mbuf_alloc_rx; 36152419Sjulian uint32_t mbuf_alloc_sge; 36252419Sjulian uint32_t mbuf_alloc_tpa; 36352419Sjulian}; 36452419Sjulian 36552419Sjulianstruct bxe_eth_stats_old { 36652419Sjulian uint32_t rx_stat_dot3statsframestoolong_hi; 36752419Sjulian uint32_t rx_stat_dot3statsframestoolong_lo; 36883366Sjulian}; 36952419Sjulian 37052419Sjulianstruct bxe_eth_q_stats_old { 37152419Sjulian /* Fields to perserve over fw reset*/ 37252419Sjulian uint32_t total_unicast_bytes_received_hi; 37352419Sjulian uint32_t total_unicast_bytes_received_lo; 37452419Sjulian uint32_t total_broadcast_bytes_received_hi; 37552419Sjulian uint32_t total_broadcast_bytes_received_lo; 37652419Sjulian uint32_t total_multicast_bytes_received_hi; 377157370Srwatson uint32_t total_multicast_bytes_received_lo; 37852419Sjulian uint32_t total_unicast_bytes_transmitted_hi; 37952419Sjulian uint32_t total_unicast_bytes_transmitted_lo; 38052419Sjulian uint32_t total_broadcast_bytes_transmitted_hi; 38152419Sjulian uint32_t total_broadcast_bytes_transmitted_lo; 382157558Srwatson uint32_t total_multicast_bytes_transmitted_hi; 383151975Sglebius uint32_t total_multicast_bytes_transmitted_lo; 38452419Sjulian uint32_t total_tpa_bytes_hi; 38552419Sjulian uint32_t total_tpa_bytes_lo; 38652419Sjulian 38752419Sjulian /* Fields to perserve last of */ 38883366Sjulian uint32_t total_bytes_received_hi; 38952419Sjulian uint32_t total_bytes_received_lo; 39052419Sjulian uint32_t total_bytes_transmitted_hi; 39152419Sjulian uint32_t total_bytes_transmitted_lo; 392163463Sglebius uint32_t total_unicast_packets_received_hi; 39353498Sjulian uint32_t total_unicast_packets_received_lo; 394125028Sharti uint32_t total_multicast_packets_received_hi; 39552419Sjulian uint32_t total_multicast_packets_received_lo; 39652419Sjulian uint32_t total_broadcast_packets_received_hi; 39752419Sjulian uint32_t total_broadcast_packets_received_lo; 39852419Sjulian uint32_t total_unicast_packets_transmitted_hi; 39952419Sjulian uint32_t total_unicast_packets_transmitted_lo; 40052419Sjulian uint32_t total_multicast_packets_transmitted_hi; 40152419Sjulian uint32_t total_multicast_packets_transmitted_lo; 40252419Sjulian uint32_t total_broadcast_packets_transmitted_hi; 40352419Sjulian uint32_t total_broadcast_packets_transmitted_lo; 404146718Sbz uint32_t valid_bytes_received_hi; 405146718Sbz uint32_t valid_bytes_received_lo; 406146718Sbz 407146718Sbz uint32_t total_tpa_bytes_hi_old; 408146718Sbz uint32_t total_tpa_bytes_lo_old; 409146718Sbz 41053498Sjulian /* receive path driver statistics */ 41153498Sjulian uint32_t rx_calls_old; 41253498Sjulian uint32_t rx_pkts_old; 41353498Sjulian uint32_t rx_tpa_pkts_old; 414146718Sbz uint32_t rx_soft_errors_old; 41570784Sjulian uint32_t rx_hw_csum_errors_old; 41653498Sjulian uint32_t rx_ofld_frames_csum_ip_old; 41753498Sjulian uint32_t rx_ofld_frames_csum_tcp_udp_old; 41853498Sjulian uint32_t rx_budget_reached_old; 41953498Sjulian 420163463Sglebius /* tx path driver statistics */ 42153498Sjulian uint32_t tx_pkts_old; 42253498Sjulian uint32_t tx_soft_errors_old; 42370784Sjulian uint32_t tx_ofld_frames_csum_ip_old; 42453498Sjulian uint32_t tx_ofld_frames_csum_tcp_old; 425125028Sharti uint32_t tx_ofld_frames_csum_udp_old; 42653498Sjulian uint32_t tx_ofld_frames_lso_old; 42753498Sjulian uint32_t tx_ofld_frames_lso_hdr_splits_old; 42853498Sjulian uint32_t tx_encap_failures_old; 42952419Sjulian uint32_t tx_hw_queue_full_old; 43053498Sjulian uint32_t tx_hw_max_queue_depth_old; 43153498Sjulian uint32_t tx_dma_mapping_failure_old; 43253498Sjulian uint32_t tx_max_drbr_queue_depth_old; 43353498Sjulian uint32_t tx_window_violation_std_old; 43453498Sjulian uint32_t tx_window_violation_tso_old; 43553498Sjulian //uint32_t tx_unsupported_tso_request_ipv6_old; 43652419Sjulian //uint32_t tx_unsupported_tso_request_not_tcp_old; 43753498Sjulian uint32_t tx_chain_lost_mbuf_old; 438163463Sglebius uint32_t tx_frames_deferred_old; 43972053Sjulian uint32_t tx_queue_xoff_old; 44053498Sjulian 441163463Sglebius /* mbuf driver statistics */ 44272053Sjulian uint32_t mbuf_defrag_attempts_old; 44352419Sjulian uint32_t mbuf_defrag_failures_old; 44452419Sjulian uint32_t mbuf_rx_bd_alloc_failed_old; 445163463Sglebius uint32_t mbuf_rx_bd_mapping_failed_old; 446163463Sglebius uint32_t mbuf_rx_tpa_alloc_failed_old; 44752419Sjulian uint32_t mbuf_rx_tpa_mapping_failed_old; 44852419Sjulian uint32_t mbuf_rx_sge_alloc_failed_old; 44952419Sjulian uint32_t mbuf_rx_sge_mapping_failed_old; 45052419Sjulian 45152419Sjulian /* track the number of allocated mbufs */ 45252419Sjulian int mbuf_alloc_tx_old; 45352419Sjulian int mbuf_alloc_rx_old; 45452419Sjulian int mbuf_alloc_sge_old; 45552419Sjulian int mbuf_alloc_tpa_old; 45652419Sjulian}; 45783366Sjulian 45852419Sjulianstruct bxe_net_stats_old { 45952419Sjulian uint32_t rx_dropped; 46052419Sjulian}; 46152419Sjulian 46252419Sjulianstruct bxe_fw_port_stats_old { 46352419Sjulian uint32_t pfc_frames_tx_hi; 46452419Sjulian uint32_t pfc_frames_tx_lo; 46552419Sjulian uint32_t pfc_frames_rx_hi; 46652419Sjulian uint32_t pfc_frames_rx_lo; 46752419Sjulian 46852419Sjulian uint32_t mac_filter_discard; 46952419Sjulian uint32_t mf_tag_discard; 470169462Srwatson uint32_t brb_truncate_discard; 47152419Sjulian uint32_t mac_discard; 47253098Sbrian}; 47353098Sbrian 474151975Sglebius/* sum[hi:lo] += add[hi:lo] */ 475151975Sglebius#define ADD_64(s_hi, a_hi, s_lo, a_lo) \ 47652419Sjulian do { \ 47753098Sbrian s_lo += a_lo; \ 47853098Sbrian s_hi += a_hi + ((s_lo < a_lo) ? 1 : 0); \ 47953098Sbrian } while (0) 48053098Sbrian 481151975Sglebius#define LE32_0 ((uint32_t) 0) 482151975Sglebius#define LE16_0 ((uint16_t) 0) 48352419Sjulian 48453098Sbrian/* The _force is for cases where high value is 0 */ 485151975Sglebius#define ADD_64_LE(s_hi, a_hi_le, s_lo, a_lo_le) \ 486151975Sglebius ADD_64(s_hi, le32toh(a_hi_le), \ 487151975Sglebius s_lo, le32toh(a_lo_le)) 488151975Sglebius 48953098Sbrian#define ADD_64_LE16(s_hi, a_hi_le, s_lo, a_lo_le) \ 490151975Sglebius ADD_64(s_hi, le16toh(a_hi_le), \ 491151975Sglebius s_lo, le16toh(a_lo_le)) 49253098Sbrian 493151975Sglebius/* difference = minuend - subtrahend */ 49453098Sbrian#define DIFF_64(d_hi, m_hi, s_hi, d_lo, m_lo, s_lo) \ 495151975Sglebius do { \ 496151975Sglebius if (m_lo < s_lo) { \ 49753098Sbrian /* underflow */ \ 498151975Sglebius d_hi = m_hi - s_hi; \ 499151975Sglebius if (d_hi > 0) { \ 500151975Sglebius /* we can 'loan' 1 */ \ 501151975Sglebius d_hi--; \ 502151975Sglebius d_lo = m_lo + (UINT_MAX - s_lo) + 1; \ 503151975Sglebius } else { \ 504151975Sglebius /* m_hi <= s_hi */ \ 505151975Sglebius d_hi = 0; \ 506151975Sglebius d_lo = 0; \ 507151975Sglebius } \ 50852419Sjulian } else { \ 50952419Sjulian /* m_lo >= s_lo */ \ 51052419Sjulian if (m_hi < s_hi) { \ 51152419Sjulian d_hi = 0; \ 51252419Sjulian d_lo = 0; \ 51352419Sjulian } else { \ 51452419Sjulian /* m_hi >= s_hi */ \ 51552419Sjulian d_hi = m_hi - s_hi; \ 51652419Sjulian d_lo = m_lo - s_lo; \ 51752419Sjulian } \ 51852419Sjulian } \ 519151975Sglebius } while (0) 52052419Sjulian 52152419Sjulian#define UPDATE_STAT64(s, t) \ 52252419Sjulian do { \ 523151975Sglebius DIFF_64(diff.hi, new->s##_hi, pstats->mac_stx[0].t##_hi, \ 524163463Sglebius diff.lo, new->s##_lo, pstats->mac_stx[0].t##_lo); \ 525151975Sglebius pstats->mac_stx[0].t##_hi = new->s##_hi; \ 52652419Sjulian pstats->mac_stx[0].t##_lo = new->s##_lo; \ 527151975Sglebius ADD_64(pstats->mac_stx[1].t##_hi, diff.hi, \ 528163463Sglebius pstats->mac_stx[1].t##_lo, diff.lo); \ 52952419Sjulian } while (0) 530151975Sglebius 53153526Sjulian#define UPDATE_STAT64_NIG(s, t) \ 53252419Sjulian do { \ 533151975Sglebius DIFF_64(diff.hi, new->s##_hi, old->s##_hi, \ 534151975Sglebius diff.lo, new->s##_lo, old->s##_lo); \ 535151975Sglebius ADD_64(estats->t##_hi, diff.hi, \ 536151975Sglebius estats->t##_lo, diff.lo); \ 53752419Sjulian } while (0) 538151975Sglebius 539151975Sglebius/* sum[hi:lo] += add */ 540151975Sglebius#define ADD_EXTEND_64(s_hi, s_lo, a) \ 54152419Sjulian do { \ 542151975Sglebius s_lo += a; \ 543163463Sglebius s_hi += (s_lo < a) ? 1 : 0; \ 544151975Sglebius } while (0) 54552419Sjulian 54652419Sjulian#define ADD_STAT64(diff, t) \ 54752419Sjulian do { \ 548151975Sglebius ADD_64(pstats->mac_stx[1].t##_hi, new->diff##_hi, \ 549151975Sglebius pstats->mac_stx[1].t##_lo, new->diff##_lo); \ 550151975Sglebius } while (0) 551151975Sglebius 552147774Sglebius#define UPDATE_EXTEND_STAT(s) \ 55352419Sjulian do { \ 55452419Sjulian ADD_EXTEND_64(pstats->mac_stx[1].s##_hi, \ 55552419Sjulian pstats->mac_stx[1].s##_lo, \ 55652419Sjulian new->s); \ 55752419Sjulian } while (0) 55852419Sjulian 559163463Sglebius#define UPDATE_EXTEND_TSTAT_X(s, t, size) \ 56052419Sjulian do { \ 56152419Sjulian diff = le##size##toh(tclient->s) - \ 56252419Sjulian le##size##toh(old_tclient->s); \ 56352419Sjulian old_tclient->s = tclient->s; \ 56452419Sjulian ADD_EXTEND_64(qstats->t##_hi, qstats->t##_lo, diff); \ 56552419Sjulian } while (0) 56652419Sjulian 56752419Sjulian#define UPDATE_EXTEND_TSTAT(s, t) UPDATE_EXTEND_TSTAT_X(s, t, 32) 56852419Sjulian 56952419Sjulian#define UPDATE_EXTEND_E_TSTAT(s, t, size) \ 57052419Sjulian do { \ 57152419Sjulian UPDATE_EXTEND_TSTAT_X(s, t, size); \ 572163463Sglebius ADD_EXTEND_64(estats->t##_hi, estats->t##_lo, diff); \ 57352419Sjulian } while (0) 57452419Sjulian 57552419Sjulian#define UPDATE_EXTEND_USTAT(s, t) \ 57652419Sjulian do { \ 577163463Sglebius diff = le32toh(uclient->s) - le32toh(old_uclient->s); \ 578163463Sglebius old_uclient->s = uclient->s; \ 57952419Sjulian ADD_EXTEND_64(qstats->t##_hi, qstats->t##_lo, diff); \ 58052419Sjulian } while (0) 581163463Sglebius 582163463Sglebius#define UPDATE_EXTEND_E_USTAT(s, t) \ 58352419Sjulian do { \ 58452419Sjulian UPDATE_EXTEND_USTAT(s, t); \ 58552419Sjulian ADD_EXTEND_64(estats->t##_hi, estats->t##_lo, diff); \ 58652419Sjulian } while (0) 58752419Sjulian 58852419Sjulian#define UPDATE_EXTEND_XSTAT(s, t) \ 58952419Sjulian do { \ 59052419Sjulian diff = le32toh(xclient->s) - le32toh(old_xclient->s); \ 59152419Sjulian old_xclient->s = xclient->s; \ 59252419Sjulian ADD_EXTEND_64(qstats->t##_hi, qstats->t##_lo, diff); \ 59352419Sjulian } while (0) 59452419Sjulian 595151975Sglebius#define UPDATE_QSTAT(s, t) \ 59652419Sjulian do { \ 597151975Sglebius qstats->t##_hi = qstats_old->t##_hi + le32toh(s.hi); \ 59852419Sjulian qstats->t##_lo = qstats_old->t##_lo + le32toh(s.lo); \ 599151975Sglebius } while (0) 600151975Sglebius 601146290Sglebius#define UPDATE_QSTAT_OLD(f) \ 60252419Sjulian do { \ 60352419Sjulian qstats_old->f = qstats->f; \ 60472053Sjulian } while (0) 60552419Sjulian 60652419Sjulian#define UPDATE_ESTAT_QSTAT_64(s) \ 60772053Sjulian do { \ 60852419Sjulian ADD_64(estats->s##_hi, qstats->s##_hi, \ 60952419Sjulian estats->s##_lo, qstats->s##_lo); \ 61087599Sobrien SUB_64(estats->s##_hi, qstats_old->s##_hi_old, \ 61152419Sjulian estats->s##_lo, qstats_old->s##_lo_old); \ 612151975Sglebius qstats_old->s##_hi_old = qstats->s##_hi; \ 613151975Sglebius qstats_old->s##_lo_old = qstats->s##_lo; \ 614151975Sglebius } while (0) 61552419Sjulian 616151975Sglebius#define UPDATE_ESTAT_QSTAT(s) \ 61752419Sjulian do { \ 618163463Sglebius estats->s += qstats->s; \ 61952419Sjulian estats->s -= qstats_old->s##_old; \ 62052419Sjulian qstats_old->s##_old = qstats->s; \ 621151975Sglebius } while (0) 622151975Sglebius 623151975Sglebius#define UPDATE_FSTAT_QSTAT(s) \ 624151975Sglebius do { \ 625151975Sglebius ADD_64(fstats->s##_hi, qstats->s##_hi, \ 626151975Sglebius fstats->s##_lo, qstats->s##_lo); \ 627151975Sglebius SUB_64(fstats->s##_hi, qstats_old->s##_hi, \ 628151975Sglebius fstats->s##_lo, qstats_old->s##_lo); \ 629151975Sglebius estats->s##_hi = fstats->s##_hi; \ 630151975Sglebius estats->s##_lo = fstats->s##_lo; \ 631151975Sglebius qstats_old->s##_hi = qstats->s##_hi; \ 632151975Sglebius qstats_old->s##_lo = qstats->s##_lo; \ 633163463Sglebius } while (0) 634151975Sglebius 635151975Sglebius#define UPDATE_FW_STAT(s) \ 636151975Sglebius do { \ 637151975Sglebius estats->s = le32toh(tport->s) + fwstats->s; \ 638151975Sglebius } while (0) 639151975Sglebius 640151975Sglebius#define UPDATE_FW_STAT_OLD(f) \ 641151975Sglebius do { \ 642151975Sglebius fwstats->f = estats->f; \ 643151975Sglebius } while (0) 644151975Sglebius 645151975Sglebius#define UPDATE_ESTAT(s, t) \ 646151975Sglebius do { \ 647151975Sglebius SUB_64(estats->s##_hi, estats_old->t##_hi, \ 64852419Sjulian estats->s##_lo, estats_old->t##_lo); \ 64952419Sjulian ADD_64(estats->s##_hi, estats->t##_hi, \ 650108533Sschweikh estats->s##_lo, estats->t##_lo); \ 65152419Sjulian estats_old->t##_hi = estats->t##_hi; \ 65252419Sjulian estats_old->t##_lo = estats->t##_lo; \ 65352419Sjulian } while (0) 65452419Sjulian 65552419Sjulian/* minuend -= subtrahend */ 65652419Sjulian#define SUB_64(m_hi, s_hi, m_lo, s_lo) \ 65783366Sjulian do { \ 65852419Sjulian DIFF_64(m_hi, m_hi, s_hi, m_lo, m_lo, s_lo); \ 65997897Sarchie } while (0) 66052419Sjulian 66152419Sjulian/* minuend[hi:lo] -= subtrahend */ 66252419Sjulian#define SUB_EXTEND_64(m_hi, m_lo, s) \ 66352419Sjulian do { \ 66452419Sjulian SUB_64(m_hi, 0, m_lo, s); \ 66552419Sjulian } while (0) 66652419Sjulian 66752419Sjulian#define SUB_EXTEND_USTAT(s, t) \ 66852419Sjulian do { \ 66952419Sjulian diff = le32toh(uclient->s) - le32toh(old_uclient->s); \ 67052419Sjulian SUB_EXTEND_64(qstats->t##_hi, qstats->t##_lo, diff); \ 67152419Sjulian } while (0) 67284472Sdwmalone 67352419Sjulianstruct bxe_softc; 67452419Sjulianvoid bxe_stats_init(struct bxe_softc *sc); 67552419Sjulianvoid bxe_stats_handle(struct bxe_softc *sc, enum bxe_stats_event event); 67652419Sjulianvoid bxe_save_statistics(struct bxe_softc *sc); 67752419Sjulianvoid bxe_afex_collect_stats(struct bxe_softc *sc, void *void_afex_stats, uint32_t stats_type); 67852419Sjulianuint64_t bxe_get_counter(if_t, ift_counter); 67952419Sjulian 68084472Sdwmalone#endif /* BXE_STATS_H */ 68189319Salfred 68289319Salfred