1fd710bb1SScott Branden /* SPDX-License-Identifier: BSD-3-Clause 2e6e8f03eSRandy Schacher * Copyright(c) 2014-2023 Broadcom 357d5e5bcSAjit Khaparde * All rights reserved. 457d5e5bcSAjit Khaparde */ 557d5e5bcSAjit Khaparde 657d5e5bcSAjit Khaparde #include <inttypes.h> 757d5e5bcSAjit Khaparde 86723c0fcSBruce Richardson #include <rte_string_fns.h> 957d5e5bcSAjit Khaparde #include <rte_byteorder.h> 1057d5e5bcSAjit Khaparde 1157d5e5bcSAjit Khaparde #include "bnxt.h" 1257d5e5bcSAjit Khaparde #include "bnxt_cpr.h" 1302a95625SSomnath Kotur #include "bnxt_filter.h" 1457d5e5bcSAjit Khaparde #include "bnxt_hwrm.h" 1557d5e5bcSAjit Khaparde #include "bnxt_rxq.h" 1657d5e5bcSAjit Khaparde #include "bnxt_stats.h" 1757d5e5bcSAjit Khaparde #include "bnxt_txq.h" 1802a95625SSomnath Kotur #include "bnxt_vnic.h" 1957d5e5bcSAjit Khaparde #include "hsi_struct_def_dpdk.h" 2057d5e5bcSAjit Khaparde 21bfb9c226SAjit Khaparde static const struct bnxt_xstats_name_off bnxt_rx_stats_strings[] = { 22bfb9c226SAjit Khaparde {"rx_64b_frames", offsetof(struct rx_port_stats, 23bfb9c226SAjit Khaparde rx_64b_frames)}, 24bfb9c226SAjit Khaparde {"rx_65b_127b_frames", offsetof(struct rx_port_stats, 25bfb9c226SAjit Khaparde rx_65b_127b_frames)}, 26bfb9c226SAjit Khaparde {"rx_128b_255b_frames", offsetof(struct rx_port_stats, 27bfb9c226SAjit Khaparde rx_128b_255b_frames)}, 28bfb9c226SAjit Khaparde {"rx_256b_511b_frames", offsetof(struct rx_port_stats, 29bfb9c226SAjit Khaparde rx_256b_511b_frames)}, 30bfb9c226SAjit Khaparde {"rx_512b_1023b_frames", offsetof(struct rx_port_stats, 31bfb9c226SAjit Khaparde rx_512b_1023b_frames)}, 32757d6f6bSAjit Khaparde {"rx_1024b_1518b_frames", offsetof(struct rx_port_stats, 33757d6f6bSAjit Khaparde rx_1024b_1518b_frames)}, 34bfb9c226SAjit Khaparde {"rx_good_vlan_frames", offsetof(struct rx_port_stats, 35bfb9c226SAjit Khaparde rx_good_vlan_frames)}, 36bfb9c226SAjit Khaparde {"rx_1519b_2047b_frames", offsetof(struct rx_port_stats, 37bfb9c226SAjit Khaparde rx_1519b_2047b_frames)}, 38bfb9c226SAjit Khaparde {"rx_2048b_4095b_frames", offsetof(struct rx_port_stats, 39bfb9c226SAjit Khaparde rx_2048b_4095b_frames)}, 40bfb9c226SAjit Khaparde {"rx_4096b_9216b_frames", offsetof(struct rx_port_stats, 41bfb9c226SAjit Khaparde rx_4096b_9216b_frames)}, 42bfb9c226SAjit Khaparde {"rx_9217b_16383b_frames", offsetof(struct rx_port_stats, 43bfb9c226SAjit Khaparde rx_9217b_16383b_frames)}, 44bfb9c226SAjit Khaparde {"rx_total_frames", offsetof(struct rx_port_stats, 45bfb9c226SAjit Khaparde rx_total_frames)}, 46bfb9c226SAjit Khaparde {"rx_ucast_frames", offsetof(struct rx_port_stats, 47bfb9c226SAjit Khaparde rx_ucast_frames)}, 48bfb9c226SAjit Khaparde {"rx_mcast_frames", offsetof(struct rx_port_stats, 49bfb9c226SAjit Khaparde rx_mcast_frames)}, 50bfb9c226SAjit Khaparde {"rx_bcast_frames", offsetof(struct rx_port_stats, 51bfb9c226SAjit Khaparde rx_bcast_frames)}, 52bfb9c226SAjit Khaparde {"rx_fcs_err_frames", offsetof(struct rx_port_stats, 53bfb9c226SAjit Khaparde rx_fcs_err_frames)}, 54bfb9c226SAjit Khaparde {"rx_ctrl_frames", offsetof(struct rx_port_stats, 55bfb9c226SAjit Khaparde rx_ctrl_frames)}, 56bfb9c226SAjit Khaparde {"rx_pause_frames", offsetof(struct rx_port_stats, 57bfb9c226SAjit Khaparde rx_pause_frames)}, 58bfb9c226SAjit Khaparde {"rx_pfc_frames", offsetof(struct rx_port_stats, 59bfb9c226SAjit Khaparde rx_pfc_frames)}, 6064261910SChristos Ricudis {"rx_unsupported_opcode_frames", offsetof(struct rx_port_stats, 6164261910SChristos Ricudis rx_unsupported_opcode_frames)}, 6264261910SChristos Ricudis {"rx_unsupported_da_pausepfc_frames", offsetof(struct rx_port_stats, 6364261910SChristos Ricudis rx_unsupported_da_pausepfc_frames)}, 6464261910SChristos Ricudis {"rx_wrong_sa_frames", offsetof(struct rx_port_stats, 6564261910SChristos Ricudis rx_wrong_sa_frames)}, 66bfb9c226SAjit Khaparde {"rx_align_err_frames", offsetof(struct rx_port_stats, 67bfb9c226SAjit Khaparde rx_align_err_frames)}, 6864261910SChristos Ricudis {"rx_oor_len_frames", offsetof(struct rx_port_stats, 6964261910SChristos Ricudis rx_oor_len_frames)}, 7064261910SChristos Ricudis {"rx_code_err_frames", offsetof(struct rx_port_stats, 7164261910SChristos Ricudis rx_code_err_frames)}, 7264261910SChristos Ricudis {"rx_false_carrier_frames", offsetof(struct rx_port_stats, 7364261910SChristos Ricudis rx_false_carrier_frames)}, 74bfb9c226SAjit Khaparde {"rx_ovrsz_frames", offsetof(struct rx_port_stats, 75bfb9c226SAjit Khaparde rx_ovrsz_frames)}, 76bfb9c226SAjit Khaparde {"rx_jbr_frames", offsetof(struct rx_port_stats, 77bfb9c226SAjit Khaparde rx_jbr_frames)}, 78bfb9c226SAjit Khaparde {"rx_mtu_err_frames", offsetof(struct rx_port_stats, 79bfb9c226SAjit Khaparde rx_mtu_err_frames)}, 8064261910SChristos Ricudis {"rx_match_crc_frames", offsetof(struct rx_port_stats, 8164261910SChristos Ricudis rx_match_crc_frames)}, 8264261910SChristos Ricudis {"rx_promiscuous_frames", offsetof(struct rx_port_stats, 8364261910SChristos Ricudis rx_promiscuous_frames)}, 84bfb9c226SAjit Khaparde {"rx_tagged_frames", offsetof(struct rx_port_stats, 85bfb9c226SAjit Khaparde rx_tagged_frames)}, 86bfb9c226SAjit Khaparde {"rx_double_tagged_frames", offsetof(struct rx_port_stats, 87bfb9c226SAjit Khaparde rx_double_tagged_frames)}, 8864261910SChristos Ricudis {"rx_trunc_frames", offsetof(struct rx_port_stats, 8964261910SChristos Ricudis rx_trunc_frames)}, 90bfb9c226SAjit Khaparde {"rx_good_frames", offsetof(struct rx_port_stats, 91bfb9c226SAjit Khaparde rx_good_frames)}, 9264261910SChristos Ricudis {"rx_sch_crc_err_frames", offsetof(struct rx_port_stats, 9364261910SChristos Ricudis rx_sch_crc_err_frames)}, 94bfb9c226SAjit Khaparde {"rx_undrsz_frames", offsetof(struct rx_port_stats, 95bfb9c226SAjit Khaparde rx_undrsz_frames)}, 9664261910SChristos Ricudis {"rx_frag_frames", offsetof(struct rx_port_stats, 9764261910SChristos Ricudis rx_frag_frames)}, 98bfb9c226SAjit Khaparde {"rx_eee_lpi_events", offsetof(struct rx_port_stats, 99bfb9c226SAjit Khaparde rx_eee_lpi_events)}, 100bfb9c226SAjit Khaparde {"rx_eee_lpi_duration", offsetof(struct rx_port_stats, 101bfb9c226SAjit Khaparde rx_eee_lpi_duration)}, 10264261910SChristos Ricudis {"rx_llfc_physical_msgs", offsetof(struct rx_port_stats, 10364261910SChristos Ricudis rx_llfc_physical_msgs)}, 10464261910SChristos Ricudis {"rx_llfc_logical_msgs", offsetof(struct rx_port_stats, 10564261910SChristos Ricudis rx_llfc_logical_msgs)}, 10664261910SChristos Ricudis {"rx_llfc_msgs_with_crc_err", offsetof(struct rx_port_stats, 10764261910SChristos Ricudis rx_llfc_msgs_with_crc_err)}, 10864261910SChristos Ricudis {"rx_hcfc_msgs", offsetof(struct rx_port_stats, 10964261910SChristos Ricudis rx_hcfc_msgs)}, 11064261910SChristos Ricudis {"rx_hcfc_msgs_with_crc_err", offsetof(struct rx_port_stats, 11164261910SChristos Ricudis rx_hcfc_msgs_with_crc_err)}, 112bfb9c226SAjit Khaparde {"rx_bytes", offsetof(struct rx_port_stats, 113bfb9c226SAjit Khaparde rx_bytes)}, 114bfb9c226SAjit Khaparde {"rx_runt_bytes", offsetof(struct rx_port_stats, 115bfb9c226SAjit Khaparde rx_runt_bytes)}, 116bfb9c226SAjit Khaparde {"rx_runt_frames", offsetof(struct rx_port_stats, 117bfb9c226SAjit Khaparde rx_runt_frames)}, 11864261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri0", offsetof(struct rx_port_stats, 11964261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri0)}, 12064261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri1", offsetof(struct rx_port_stats, 12164261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri1)}, 12264261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri2", offsetof(struct rx_port_stats, 12364261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri2)}, 12464261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri3", offsetof(struct rx_port_stats, 12564261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri3)}, 12664261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri4", offsetof(struct rx_port_stats, 12764261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri4)}, 12864261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri5", offsetof(struct rx_port_stats, 12964261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri5)}, 13064261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri6", offsetof(struct rx_port_stats, 13164261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri6)}, 13264261910SChristos Ricudis {"rx_pfc_xon2xoff_frames_pri7", offsetof(struct rx_port_stats, 13364261910SChristos Ricudis rx_pfc_xon2xoff_frames_pri7)}, 134bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri0", offsetof(struct rx_port_stats, 135bd94753fSSomnath Kotur rx_pfc_ena_frames_pri0)}, 136bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri1", offsetof(struct rx_port_stats, 137bd94753fSSomnath Kotur rx_pfc_ena_frames_pri1)}, 138bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri2", offsetof(struct rx_port_stats, 139bd94753fSSomnath Kotur rx_pfc_ena_frames_pri2)}, 140bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri3", offsetof(struct rx_port_stats, 141bd94753fSSomnath Kotur rx_pfc_ena_frames_pri3)}, 142bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri4", offsetof(struct rx_port_stats, 143bd94753fSSomnath Kotur rx_pfc_ena_frames_pri4)}, 144bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri5", offsetof(struct rx_port_stats, 145bd94753fSSomnath Kotur rx_pfc_ena_frames_pri5)}, 146bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri6", offsetof(struct rx_port_stats, 147bd94753fSSomnath Kotur rx_pfc_ena_frames_pri6)}, 148bd94753fSSomnath Kotur {"rx_pfc_ena_frames_pri7", offsetof(struct rx_port_stats, 149bd94753fSSomnath Kotur rx_pfc_ena_frames_pri7)}, 15064261910SChristos Ricudis {"rx_stat_discard", offsetof(struct rx_port_stats, 15164261910SChristos Ricudis rx_stat_discard)}, 15264261910SChristos Ricudis {"rx_stat_err", offsetof(struct rx_port_stats, 15364261910SChristos Ricudis rx_stat_err)}, 154bfb9c226SAjit Khaparde }; 155bfb9c226SAjit Khaparde 156bfb9c226SAjit Khaparde static const struct bnxt_xstats_name_off bnxt_tx_stats_strings[] = { 157bfb9c226SAjit Khaparde {"tx_64b_frames", offsetof(struct tx_port_stats, 158bfb9c226SAjit Khaparde tx_64b_frames)}, 159bfb9c226SAjit Khaparde {"tx_65b_127b_frames", offsetof(struct tx_port_stats, 160bfb9c226SAjit Khaparde tx_65b_127b_frames)}, 161bfb9c226SAjit Khaparde {"tx_128b_255b_frames", offsetof(struct tx_port_stats, 162bfb9c226SAjit Khaparde tx_128b_255b_frames)}, 163bfb9c226SAjit Khaparde {"tx_256b_511b_frames", offsetof(struct tx_port_stats, 164bfb9c226SAjit Khaparde tx_256b_511b_frames)}, 165bfb9c226SAjit Khaparde {"tx_512b_1023b_frames", offsetof(struct tx_port_stats, 166bfb9c226SAjit Khaparde tx_512b_1023b_frames)}, 167757d6f6bSAjit Khaparde {"tx_1024b_1518b_frames", offsetof(struct tx_port_stats, 168757d6f6bSAjit Khaparde tx_1024b_1518b_frames)}, 169bfb9c226SAjit Khaparde {"tx_good_vlan_frames", offsetof(struct tx_port_stats, 170bfb9c226SAjit Khaparde tx_good_vlan_frames)}, 171757d6f6bSAjit Khaparde {"tx_1519b_2047b_frames", offsetof(struct tx_port_stats, 172757d6f6bSAjit Khaparde tx_1519b_2047b_frames)}, 173bfb9c226SAjit Khaparde {"tx_2048b_4095b_frames", offsetof(struct tx_port_stats, 174bfb9c226SAjit Khaparde tx_2048b_4095b_frames)}, 175bfb9c226SAjit Khaparde {"tx_4096b_9216b_frames", offsetof(struct tx_port_stats, 176bfb9c226SAjit Khaparde tx_4096b_9216b_frames)}, 177bfb9c226SAjit Khaparde {"tx_9217b_16383b_frames", offsetof(struct tx_port_stats, 178bfb9c226SAjit Khaparde tx_9217b_16383b_frames)}, 179bfb9c226SAjit Khaparde {"tx_good_frames", offsetof(struct tx_port_stats, 180bfb9c226SAjit Khaparde tx_good_frames)}, 181bfb9c226SAjit Khaparde {"tx_total_frames", offsetof(struct tx_port_stats, 182bfb9c226SAjit Khaparde tx_total_frames)}, 183bfb9c226SAjit Khaparde {"tx_ucast_frames", offsetof(struct tx_port_stats, 184bfb9c226SAjit Khaparde tx_ucast_frames)}, 185bfb9c226SAjit Khaparde {"tx_mcast_frames", offsetof(struct tx_port_stats, 186bfb9c226SAjit Khaparde tx_mcast_frames)}, 187bfb9c226SAjit Khaparde {"tx_bcast_frames", offsetof(struct tx_port_stats, 188bfb9c226SAjit Khaparde tx_bcast_frames)}, 189bfb9c226SAjit Khaparde {"tx_pause_frames", offsetof(struct tx_port_stats, 190bfb9c226SAjit Khaparde tx_pause_frames)}, 191bfb9c226SAjit Khaparde {"tx_pfc_frames", offsetof(struct tx_port_stats, 192bfb9c226SAjit Khaparde tx_pfc_frames)}, 193bfb9c226SAjit Khaparde {"tx_jabber_frames", offsetof(struct tx_port_stats, 194bfb9c226SAjit Khaparde tx_jabber_frames)}, 195bfb9c226SAjit Khaparde {"tx_fcs_err_frames", offsetof(struct tx_port_stats, 196bfb9c226SAjit Khaparde tx_fcs_err_frames)}, 19764261910SChristos Ricudis {"tx_control_frames", offsetof(struct tx_port_stats, 19864261910SChristos Ricudis tx_control_frames)}, 19964261910SChristos Ricudis {"tx_oversz_frames", offsetof(struct tx_port_stats, 20064261910SChristos Ricudis tx_oversz_frames)}, 20164261910SChristos Ricudis {"tx_single_dfrl_frames", offsetof(struct tx_port_stats, 20264261910SChristos Ricudis tx_single_dfrl_frames)}, 20364261910SChristos Ricudis {"tx_multi_dfrl_frames", offsetof(struct tx_port_stats, 20464261910SChristos Ricudis tx_multi_dfrl_frames)}, 20564261910SChristos Ricudis {"tx_single_coll_frames", offsetof(struct tx_port_stats, 20664261910SChristos Ricudis tx_single_coll_frames)}, 20764261910SChristos Ricudis {"tx_multi_coll_frames", offsetof(struct tx_port_stats, 20864261910SChristos Ricudis tx_multi_coll_frames)}, 20964261910SChristos Ricudis {"tx_late_coll_frames", offsetof(struct tx_port_stats, 21064261910SChristos Ricudis tx_late_coll_frames)}, 21164261910SChristos Ricudis {"tx_excessive_coll_frames", offsetof(struct tx_port_stats, 21264261910SChristos Ricudis tx_excessive_coll_frames)}, 21364261910SChristos Ricudis {"tx_frag_frames", offsetof(struct tx_port_stats, 21464261910SChristos Ricudis tx_frag_frames)}, 215bfb9c226SAjit Khaparde {"tx_err", offsetof(struct tx_port_stats, 216bfb9c226SAjit Khaparde tx_err)}, 21764261910SChristos Ricudis {"tx_tagged_frames", offsetof(struct tx_port_stats, 21864261910SChristos Ricudis tx_tagged_frames)}, 21964261910SChristos Ricudis {"tx_dbl_tagged_frames", offsetof(struct tx_port_stats, 22064261910SChristos Ricudis tx_dbl_tagged_frames)}, 22164261910SChristos Ricudis {"tx_runt_frames", offsetof(struct tx_port_stats, 22264261910SChristos Ricudis tx_runt_frames)}, 223bfb9c226SAjit Khaparde {"tx_fifo_underruns", offsetof(struct tx_port_stats, 224bfb9c226SAjit Khaparde tx_fifo_underruns)}, 225bfb9c226SAjit Khaparde {"tx_eee_lpi_events", offsetof(struct tx_port_stats, 226bfb9c226SAjit Khaparde tx_eee_lpi_events)}, 227bfb9c226SAjit Khaparde {"tx_eee_lpi_duration", offsetof(struct tx_port_stats, 228bfb9c226SAjit Khaparde tx_eee_lpi_duration)}, 229bfb9c226SAjit Khaparde {"tx_total_collisions", offsetof(struct tx_port_stats, 230bfb9c226SAjit Khaparde tx_total_collisions)}, 231bfb9c226SAjit Khaparde {"tx_bytes", offsetof(struct tx_port_stats, 232bfb9c226SAjit Khaparde tx_bytes)}, 233bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri0", offsetof(struct tx_port_stats, 234bd94753fSSomnath Kotur tx_pfc_ena_frames_pri0)}, 235bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri1", offsetof(struct tx_port_stats, 236bd94753fSSomnath Kotur tx_pfc_ena_frames_pri1)}, 237bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri2", offsetof(struct tx_port_stats, 238bd94753fSSomnath Kotur tx_pfc_ena_frames_pri2)}, 239bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri3", offsetof(struct tx_port_stats, 240bd94753fSSomnath Kotur tx_pfc_ena_frames_pri3)}, 241bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri4", offsetof(struct tx_port_stats, 242bd94753fSSomnath Kotur tx_pfc_ena_frames_pri4)}, 243bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri5", offsetof(struct tx_port_stats, 244bd94753fSSomnath Kotur tx_pfc_ena_frames_pri5)}, 245bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri6", offsetof(struct tx_port_stats, 246bd94753fSSomnath Kotur tx_pfc_ena_frames_pri6)}, 247bd94753fSSomnath Kotur {"tx_pfc_ena_frames_pri7", offsetof(struct tx_port_stats, 248bd94753fSSomnath Kotur tx_pfc_ena_frames_pri7)}, 24964261910SChristos Ricudis {"tx_llfc_logical_msgs", offsetof(struct tx_port_stats, 25064261910SChristos Ricudis tx_llfc_logical_msgs)}, 25164261910SChristos Ricudis {"tx_hcfc_msgs", offsetof(struct tx_port_stats, 25264261910SChristos Ricudis tx_hcfc_msgs)}, 25364261910SChristos Ricudis {"tx_xthol_frames", offsetof(struct tx_port_stats, 25464261910SChristos Ricudis tx_xthol_frames)}, 25564261910SChristos Ricudis {"tx_stat_discard", offsetof(struct tx_port_stats, 25664261910SChristos Ricudis tx_stat_discard)}, 25764261910SChristos Ricudis {"tx_stat_error", offsetof(struct tx_port_stats, 25864261910SChristos Ricudis tx_stat_error)}, 259bfb9c226SAjit Khaparde }; 260bfb9c226SAjit Khaparde 26127c32143SDamodharam Ammepalli static const struct bnxt_xstats_name_off bnxt_func_stats_ext_strings[] = { 26227c32143SDamodharam Ammepalli {"tx_ucast_pkts", offsetof(struct hwrm_func_qstats_ext_output, 26327c32143SDamodharam Ammepalli tx_ucast_pkts)}, 26427c32143SDamodharam Ammepalli {"tx_mcast_pkts", offsetof(struct hwrm_func_qstats_ext_output, 26527c32143SDamodharam Ammepalli tx_mcast_pkts)}, 26627c32143SDamodharam Ammepalli {"tx_bcast_pkts", offsetof(struct hwrm_func_qstats_ext_output, 26727c32143SDamodharam Ammepalli tx_bcast_pkts)}, 26827c32143SDamodharam Ammepalli {"tx_discard_pkts", offsetof(struct hwrm_func_qstats_ext_output, 26927c32143SDamodharam Ammepalli tx_discard_pkts)}, 27027c32143SDamodharam Ammepalli {"tx_drop_pkts", offsetof(struct hwrm_func_qstats_ext_output, 27127c32143SDamodharam Ammepalli tx_error_pkts)}, 27227c32143SDamodharam Ammepalli {"tx_ucast_bytes", offsetof(struct hwrm_func_qstats_ext_output, 27327c32143SDamodharam Ammepalli tx_ucast_bytes)}, 27427c32143SDamodharam Ammepalli {"tx_mcast_bytes", offsetof(struct hwrm_func_qstats_ext_output, 27527c32143SDamodharam Ammepalli tx_mcast_bytes)}, 27627c32143SDamodharam Ammepalli {"tx_bcast_bytes", offsetof(struct hwrm_func_qstats_ext_output, 27727c32143SDamodharam Ammepalli tx_bcast_bytes)}, 27827c32143SDamodharam Ammepalli {"rx_ucast_pkts", offsetof(struct hwrm_func_qstats_ext_output, 27927c32143SDamodharam Ammepalli rx_ucast_pkts)}, 28027c32143SDamodharam Ammepalli {"rx_mcast_pkts", offsetof(struct hwrm_func_qstats_ext_output, 28127c32143SDamodharam Ammepalli rx_mcast_pkts)}, 28227c32143SDamodharam Ammepalli {"rx_bcast_pkts", offsetof(struct hwrm_func_qstats_ext_output, 28327c32143SDamodharam Ammepalli rx_bcast_pkts)}, 28427c32143SDamodharam Ammepalli {"rx_discard_pkts", offsetof(struct hwrm_func_qstats_ext_output, 28527c32143SDamodharam Ammepalli rx_discard_pkts)}, 28627c32143SDamodharam Ammepalli {"rx_drop_pkts", offsetof(struct hwrm_func_qstats_ext_output, 28727c32143SDamodharam Ammepalli rx_error_pkts)}, 28827c32143SDamodharam Ammepalli {"rx_ucast_bytes", offsetof(struct hwrm_func_qstats_ext_output, 28927c32143SDamodharam Ammepalli rx_ucast_bytes)}, 29027c32143SDamodharam Ammepalli {"rx_mcast_bytes", offsetof(struct hwrm_func_qstats_ext_output, 29127c32143SDamodharam Ammepalli rx_mcast_bytes)}, 29227c32143SDamodharam Ammepalli {"rx_bcast_bytes", offsetof(struct hwrm_func_qstats_ext_output, 29327c32143SDamodharam Ammepalli rx_bcast_bytes)}, 29427c32143SDamodharam Ammepalli {"rx_tpa_eligible_pkt", offsetof(struct hwrm_func_qstats_ext_output, 29527c32143SDamodharam Ammepalli rx_tpa_eligible_pkt)}, 29627c32143SDamodharam Ammepalli {"rx_tpa_eligible_bytes", offsetof(struct hwrm_func_qstats_ext_output, 29727c32143SDamodharam Ammepalli rx_tpa_eligible_bytes)}, 29827c32143SDamodharam Ammepalli {"rx_tpa_pkt", offsetof(struct hwrm_func_qstats_ext_output, 29927c32143SDamodharam Ammepalli rx_tpa_pkt)}, 30027c32143SDamodharam Ammepalli {"rx_tpa_bytes", offsetof(struct hwrm_func_qstats_ext_output, 30127c32143SDamodharam Ammepalli rx_tpa_bytes)}, 30227c32143SDamodharam Ammepalli {"rx_tpa_errors", offsetof(struct hwrm_func_qstats_ext_output, 30327c32143SDamodharam Ammepalli rx_tpa_errors)}, 30427c32143SDamodharam Ammepalli {"rx_tpa_events", offsetof(struct hwrm_func_qstats_ext_output, 30527c32143SDamodharam Ammepalli rx_tpa_events)}, 30627c32143SDamodharam Ammepalli }; 30727c32143SDamodharam Ammepalli 308dd46c6bbSAjit Khaparde static const struct bnxt_xstats_name_off bnxt_func_stats_strings[] = { 309dd46c6bbSAjit Khaparde {"tx_ucast_pkts", offsetof(struct hwrm_func_qstats_output, 310dd46c6bbSAjit Khaparde tx_ucast_pkts)}, 311dd46c6bbSAjit Khaparde {"tx_mcast_pkts", offsetof(struct hwrm_func_qstats_output, 312dd46c6bbSAjit Khaparde tx_mcast_pkts)}, 313dd46c6bbSAjit Khaparde {"tx_bcast_pkts", offsetof(struct hwrm_func_qstats_output, 314dd46c6bbSAjit Khaparde tx_bcast_pkts)}, 3159a891c17SAjit Khaparde {"tx_discard_pkts", offsetof(struct hwrm_func_qstats_output, 3169a891c17SAjit Khaparde tx_discard_pkts)}, 317dd46c6bbSAjit Khaparde {"tx_drop_pkts", offsetof(struct hwrm_func_qstats_output, 318dd46c6bbSAjit Khaparde tx_drop_pkts)}, 319dd46c6bbSAjit Khaparde {"tx_ucast_bytes", offsetof(struct hwrm_func_qstats_output, 320dd46c6bbSAjit Khaparde tx_ucast_bytes)}, 321dd46c6bbSAjit Khaparde {"tx_mcast_bytes", offsetof(struct hwrm_func_qstats_output, 322dd46c6bbSAjit Khaparde tx_mcast_bytes)}, 323dd46c6bbSAjit Khaparde {"tx_bcast_bytes", offsetof(struct hwrm_func_qstats_output, 324dd46c6bbSAjit Khaparde tx_bcast_bytes)}, 325dd46c6bbSAjit Khaparde {"rx_ucast_pkts", offsetof(struct hwrm_func_qstats_output, 326dd46c6bbSAjit Khaparde rx_ucast_pkts)}, 327dd46c6bbSAjit Khaparde {"rx_mcast_pkts", offsetof(struct hwrm_func_qstats_output, 328dd46c6bbSAjit Khaparde rx_mcast_pkts)}, 329dd46c6bbSAjit Khaparde {"rx_bcast_pkts", offsetof(struct hwrm_func_qstats_output, 330dd46c6bbSAjit Khaparde rx_bcast_pkts)}, 3319a891c17SAjit Khaparde {"rx_discard_pkts", offsetof(struct hwrm_func_qstats_output, 3329a891c17SAjit Khaparde rx_discard_pkts)}, 333dd46c6bbSAjit Khaparde {"rx_drop_pkts", offsetof(struct hwrm_func_qstats_output, 334dd46c6bbSAjit Khaparde rx_drop_pkts)}, 335dd46c6bbSAjit Khaparde {"rx_ucast_bytes", offsetof(struct hwrm_func_qstats_output, 336dd46c6bbSAjit Khaparde rx_ucast_bytes)}, 337dd46c6bbSAjit Khaparde {"rx_mcast_bytes", offsetof(struct hwrm_func_qstats_output, 338dd46c6bbSAjit Khaparde rx_mcast_bytes)}, 339dd46c6bbSAjit Khaparde {"rx_bcast_bytes", offsetof(struct hwrm_func_qstats_output, 340dd46c6bbSAjit Khaparde rx_bcast_bytes)}, 341dd46c6bbSAjit Khaparde {"rx_agg_pkts", offsetof(struct hwrm_func_qstats_output, 342dd46c6bbSAjit Khaparde rx_agg_pkts)}, 343dd46c6bbSAjit Khaparde {"rx_agg_bytes", offsetof(struct hwrm_func_qstats_output, 344dd46c6bbSAjit Khaparde rx_agg_bytes)}, 345dd46c6bbSAjit Khaparde {"rx_agg_events", offsetof(struct hwrm_func_qstats_output, 346dd46c6bbSAjit Khaparde rx_agg_events)}, 347dd46c6bbSAjit Khaparde {"rx_agg_aborts", offsetof(struct hwrm_func_qstats_output, 348dd46c6bbSAjit Khaparde rx_agg_aborts)}, 349dd46c6bbSAjit Khaparde }; 350dd46c6bbSAjit Khaparde 35164261910SChristos Ricudis 352f55e12f3SAjit Khaparde static const struct bnxt_xstats_name_off bnxt_rx_ext_stats_strings[] = { 353f55e12f3SAjit Khaparde {"link_down_events", offsetof(struct rx_port_stats_ext, 354f55e12f3SAjit Khaparde link_down_events)}, 355f55e12f3SAjit Khaparde {"continuous_pause_events", offsetof(struct rx_port_stats_ext, 356f55e12f3SAjit Khaparde continuous_pause_events)}, 357f55e12f3SAjit Khaparde {"resume_pause_events", offsetof(struct rx_port_stats_ext, 358f55e12f3SAjit Khaparde resume_pause_events)}, 359f55e12f3SAjit Khaparde {"continuous_roce_pause_events", offsetof(struct rx_port_stats_ext, 360f55e12f3SAjit Khaparde continuous_roce_pause_events)}, 361f55e12f3SAjit Khaparde {"resume_roce_pause_events", offsetof(struct rx_port_stats_ext, 362f55e12f3SAjit Khaparde resume_roce_pause_events)}, 363f55e12f3SAjit Khaparde {"rx_bytes_cos0", offsetof(struct rx_port_stats_ext, 364f55e12f3SAjit Khaparde rx_bytes_cos0)}, 365f55e12f3SAjit Khaparde {"rx_bytes_cos1", offsetof(struct rx_port_stats_ext, 366f55e12f3SAjit Khaparde rx_bytes_cos1)}, 367f55e12f3SAjit Khaparde {"rx_bytes_cos2", offsetof(struct rx_port_stats_ext, 368f55e12f3SAjit Khaparde rx_bytes_cos2)}, 369f55e12f3SAjit Khaparde {"rx_bytes_cos3", offsetof(struct rx_port_stats_ext, 370f55e12f3SAjit Khaparde rx_bytes_cos3)}, 371f55e12f3SAjit Khaparde {"rx_bytes_cos4", offsetof(struct rx_port_stats_ext, 372f55e12f3SAjit Khaparde rx_bytes_cos4)}, 373f55e12f3SAjit Khaparde {"rx_bytes_cos5", offsetof(struct rx_port_stats_ext, 374f55e12f3SAjit Khaparde rx_bytes_cos5)}, 375f55e12f3SAjit Khaparde {"rx_bytes_cos6", offsetof(struct rx_port_stats_ext, 376f55e12f3SAjit Khaparde rx_bytes_cos6)}, 377f55e12f3SAjit Khaparde {"rx_bytes_cos7", offsetof(struct rx_port_stats_ext, 378f55e12f3SAjit Khaparde rx_bytes_cos7)}, 379f55e12f3SAjit Khaparde {"rx_packets_cos0", offsetof(struct rx_port_stats_ext, 380f55e12f3SAjit Khaparde rx_packets_cos0)}, 381f55e12f3SAjit Khaparde {"rx_packets_cos1", offsetof(struct rx_port_stats_ext, 382f55e12f3SAjit Khaparde rx_packets_cos1)}, 383f55e12f3SAjit Khaparde {"rx_packets_cos2", offsetof(struct rx_port_stats_ext, 384f55e12f3SAjit Khaparde rx_packets_cos2)}, 385f55e12f3SAjit Khaparde {"rx_packets_cos3", offsetof(struct rx_port_stats_ext, 386f55e12f3SAjit Khaparde rx_packets_cos3)}, 387f55e12f3SAjit Khaparde {"rx_packets_cos4", offsetof(struct rx_port_stats_ext, 388f55e12f3SAjit Khaparde rx_packets_cos4)}, 389f55e12f3SAjit Khaparde {"rx_packets_cos5", offsetof(struct rx_port_stats_ext, 390f55e12f3SAjit Khaparde rx_packets_cos5)}, 391f55e12f3SAjit Khaparde {"rx_packets_cos6", offsetof(struct rx_port_stats_ext, 392f55e12f3SAjit Khaparde rx_packets_cos6)}, 393f55e12f3SAjit Khaparde {"rx_packets_cos7", offsetof(struct rx_port_stats_ext, 394f55e12f3SAjit Khaparde rx_packets_cos7)}, 395f55e12f3SAjit Khaparde {"pfc_pri0_rx_duration_us", offsetof(struct rx_port_stats_ext, 396f55e12f3SAjit Khaparde pfc_pri0_rx_duration_us)}, 397f55e12f3SAjit Khaparde {"pfc_pri0_rx_transitions", offsetof(struct rx_port_stats_ext, 398f55e12f3SAjit Khaparde pfc_pri0_rx_transitions)}, 399f55e12f3SAjit Khaparde {"pfc_pri1_rx_duration_us", offsetof(struct rx_port_stats_ext, 400f55e12f3SAjit Khaparde pfc_pri1_rx_duration_us)}, 401f55e12f3SAjit Khaparde {"pfc_pri1_rx_transitions", offsetof(struct rx_port_stats_ext, 402f55e12f3SAjit Khaparde pfc_pri1_rx_transitions)}, 403f55e12f3SAjit Khaparde {"pfc_pri2_rx_duration_us", offsetof(struct rx_port_stats_ext, 404f55e12f3SAjit Khaparde pfc_pri2_rx_duration_us)}, 405f55e12f3SAjit Khaparde {"pfc_pri2_rx_transitions", offsetof(struct rx_port_stats_ext, 406f55e12f3SAjit Khaparde pfc_pri2_rx_transitions)}, 407f55e12f3SAjit Khaparde {"pfc_pri3_rx_duration_us", offsetof(struct rx_port_stats_ext, 408f55e12f3SAjit Khaparde pfc_pri3_rx_duration_us)}, 409f55e12f3SAjit Khaparde {"pfc_pri3_rx_transitions", offsetof(struct rx_port_stats_ext, 410f55e12f3SAjit Khaparde pfc_pri3_rx_transitions)}, 411f55e12f3SAjit Khaparde {"pfc_pri4_rx_duration_us", offsetof(struct rx_port_stats_ext, 412f55e12f3SAjit Khaparde pfc_pri4_rx_duration_us)}, 413f55e12f3SAjit Khaparde {"pfc_pri4_rx_transitions", offsetof(struct rx_port_stats_ext, 414f55e12f3SAjit Khaparde pfc_pri4_rx_transitions)}, 415f55e12f3SAjit Khaparde {"pfc_pri5_rx_duration_us", offsetof(struct rx_port_stats_ext, 416f55e12f3SAjit Khaparde pfc_pri5_rx_duration_us)}, 417f55e12f3SAjit Khaparde {"pfc_pri5_rx_transitions", offsetof(struct rx_port_stats_ext, 418f55e12f3SAjit Khaparde pfc_pri5_rx_transitions)}, 419f55e12f3SAjit Khaparde {"pfc_pri6_rx_duration_us", offsetof(struct rx_port_stats_ext, 420f55e12f3SAjit Khaparde pfc_pri6_rx_duration_us)}, 421f55e12f3SAjit Khaparde {"pfc_pri6_rx_transitions", offsetof(struct rx_port_stats_ext, 422f55e12f3SAjit Khaparde pfc_pri6_rx_transitions)}, 423f55e12f3SAjit Khaparde {"pfc_pri7_rx_duration_us", offsetof(struct rx_port_stats_ext, 424f55e12f3SAjit Khaparde pfc_pri7_rx_duration_us)}, 425f55e12f3SAjit Khaparde {"pfc_pri7_rx_transitions", offsetof(struct rx_port_stats_ext, 426f55e12f3SAjit Khaparde pfc_pri7_rx_transitions)}, 42764261910SChristos Ricudis {"rx_bits", offsetof(struct rx_port_stats_ext, 42864261910SChristos Ricudis rx_bits)}, 42964261910SChristos Ricudis {"rx_buffer_passed_threshold", offsetof(struct rx_port_stats_ext, 43064261910SChristos Ricudis rx_buffer_passed_threshold)}, 43164261910SChristos Ricudis {"rx_pcs_symbol_err", offsetof(struct rx_port_stats_ext, 43264261910SChristos Ricudis rx_pcs_symbol_err)}, 43364261910SChristos Ricudis {"rx_corrected_bits", offsetof(struct rx_port_stats_ext, 43464261910SChristos Ricudis rx_corrected_bits)}, 43564261910SChristos Ricudis {"rx_discard_bytes_cos0", offsetof(struct rx_port_stats_ext, 43664261910SChristos Ricudis rx_discard_bytes_cos0)}, 43764261910SChristos Ricudis {"rx_discard_bytes_cos1", offsetof(struct rx_port_stats_ext, 43864261910SChristos Ricudis rx_discard_bytes_cos1)}, 43964261910SChristos Ricudis {"rx_discard_bytes_cos2", offsetof(struct rx_port_stats_ext, 44064261910SChristos Ricudis rx_discard_bytes_cos2)}, 44164261910SChristos Ricudis {"rx_discard_bytes_cos3", offsetof(struct rx_port_stats_ext, 44264261910SChristos Ricudis rx_discard_bytes_cos3)}, 44364261910SChristos Ricudis {"rx_discard_bytes_cos4", offsetof(struct rx_port_stats_ext, 44464261910SChristos Ricudis rx_discard_bytes_cos4)}, 44564261910SChristos Ricudis {"rx_discard_bytes_cos5", offsetof(struct rx_port_stats_ext, 44664261910SChristos Ricudis rx_discard_bytes_cos5)}, 44764261910SChristos Ricudis {"rx_discard_bytes_cos6", offsetof(struct rx_port_stats_ext, 44864261910SChristos Ricudis rx_discard_bytes_cos6)}, 44964261910SChristos Ricudis {"rx_discard_bytes_cos7", offsetof(struct rx_port_stats_ext, 45064261910SChristos Ricudis rx_discard_bytes_cos7)}, 45164261910SChristos Ricudis {"rx_discard_packets_cos0", offsetof(struct rx_port_stats_ext, 45264261910SChristos Ricudis rx_discard_packets_cos0)}, 45364261910SChristos Ricudis {"rx_discard_packets_cos1", offsetof(struct rx_port_stats_ext, 45464261910SChristos Ricudis rx_discard_packets_cos1)}, 45564261910SChristos Ricudis {"rx_discard_packets_cos2", offsetof(struct rx_port_stats_ext, 45664261910SChristos Ricudis rx_discard_packets_cos2)}, 45764261910SChristos Ricudis {"rx_discard_packets_cos3", offsetof(struct rx_port_stats_ext, 45864261910SChristos Ricudis rx_discard_packets_cos3)}, 45964261910SChristos Ricudis {"rx_discard_packets_cos4", offsetof(struct rx_port_stats_ext, 46064261910SChristos Ricudis rx_discard_packets_cos4)}, 46164261910SChristos Ricudis {"rx_discard_packets_cos5", offsetof(struct rx_port_stats_ext, 46264261910SChristos Ricudis rx_discard_packets_cos5)}, 46364261910SChristos Ricudis {"rx_discard_packets_cos6", offsetof(struct rx_port_stats_ext, 46464261910SChristos Ricudis rx_discard_packets_cos6)}, 46564261910SChristos Ricudis {"rx_discard_packets_cos7", offsetof(struct rx_port_stats_ext, 46664261910SChristos Ricudis rx_discard_packets_cos7)}, 46727c32143SDamodharam Ammepalli {"rx_fec_corrected_blocks", offsetof(struct rx_port_stats_ext, 46827c32143SDamodharam Ammepalli rx_fec_corrected_blocks)}, 46927c32143SDamodharam Ammepalli {"rx_fec_uncorrectable_blocks", offsetof(struct rx_port_stats_ext, 47027c32143SDamodharam Ammepalli rx_fec_uncorrectable_blocks)}, 47127c32143SDamodharam Ammepalli {"rx_filter_miss", offsetof(struct rx_port_stats_ext, 47227c32143SDamodharam Ammepalli rx_filter_miss)}, 473f55e12f3SAjit Khaparde }; 474f55e12f3SAjit Khaparde 475f55e12f3SAjit Khaparde static const struct bnxt_xstats_name_off bnxt_tx_ext_stats_strings[] = { 476f55e12f3SAjit Khaparde {"tx_bytes_cos0", offsetof(struct tx_port_stats_ext, 477f55e12f3SAjit Khaparde tx_bytes_cos0)}, 478f55e12f3SAjit Khaparde {"tx_bytes_cos1", offsetof(struct tx_port_stats_ext, 479f55e12f3SAjit Khaparde tx_bytes_cos1)}, 480f55e12f3SAjit Khaparde {"tx_bytes_cos2", offsetof(struct tx_port_stats_ext, 481f55e12f3SAjit Khaparde tx_bytes_cos2)}, 482f55e12f3SAjit Khaparde {"tx_bytes_cos3", offsetof(struct tx_port_stats_ext, 483f55e12f3SAjit Khaparde tx_bytes_cos3)}, 484f55e12f3SAjit Khaparde {"tx_bytes_cos4", offsetof(struct tx_port_stats_ext, 485f55e12f3SAjit Khaparde tx_bytes_cos4)}, 486f55e12f3SAjit Khaparde {"tx_bytes_cos5", offsetof(struct tx_port_stats_ext, 487f55e12f3SAjit Khaparde tx_bytes_cos5)}, 488f55e12f3SAjit Khaparde {"tx_bytes_cos6", offsetof(struct tx_port_stats_ext, 489f55e12f3SAjit Khaparde tx_bytes_cos6)}, 490f55e12f3SAjit Khaparde {"tx_bytes_cos7", offsetof(struct tx_port_stats_ext, 491f55e12f3SAjit Khaparde tx_bytes_cos7)}, 492f55e12f3SAjit Khaparde {"tx_packets_cos0", offsetof(struct tx_port_stats_ext, 493f55e12f3SAjit Khaparde tx_packets_cos0)}, 494f55e12f3SAjit Khaparde {"tx_packets_cos1", offsetof(struct tx_port_stats_ext, 495f55e12f3SAjit Khaparde tx_packets_cos1)}, 496f55e12f3SAjit Khaparde {"tx_packets_cos2", offsetof(struct tx_port_stats_ext, 497f55e12f3SAjit Khaparde tx_packets_cos2)}, 498f55e12f3SAjit Khaparde {"tx_packets_cos3", offsetof(struct tx_port_stats_ext, 499f55e12f3SAjit Khaparde tx_packets_cos3)}, 500f55e12f3SAjit Khaparde {"tx_packets_cos4", offsetof(struct tx_port_stats_ext, 501f55e12f3SAjit Khaparde tx_packets_cos4)}, 502f55e12f3SAjit Khaparde {"tx_packets_cos5", offsetof(struct tx_port_stats_ext, 503f55e12f3SAjit Khaparde tx_packets_cos5)}, 504f55e12f3SAjit Khaparde {"tx_packets_cos6", offsetof(struct tx_port_stats_ext, 505f55e12f3SAjit Khaparde tx_packets_cos6)}, 506f55e12f3SAjit Khaparde {"tx_packets_cos7", offsetof(struct tx_port_stats_ext, 507f55e12f3SAjit Khaparde tx_packets_cos7)}, 508f55e12f3SAjit Khaparde {"pfc_pri0_tx_duration_us", offsetof(struct tx_port_stats_ext, 509f55e12f3SAjit Khaparde pfc_pri0_tx_duration_us)}, 510f55e12f3SAjit Khaparde {"pfc_pri0_tx_transitions", offsetof(struct tx_port_stats_ext, 511f55e12f3SAjit Khaparde pfc_pri0_tx_transitions)}, 512f55e12f3SAjit Khaparde {"pfc_pri1_tx_duration_us", offsetof(struct tx_port_stats_ext, 513f55e12f3SAjit Khaparde pfc_pri1_tx_duration_us)}, 514f55e12f3SAjit Khaparde {"pfc_pri1_tx_transitions", offsetof(struct tx_port_stats_ext, 515f55e12f3SAjit Khaparde pfc_pri1_tx_transitions)}, 516f55e12f3SAjit Khaparde {"pfc_pri2_tx_duration_us", offsetof(struct tx_port_stats_ext, 517f55e12f3SAjit Khaparde pfc_pri2_tx_duration_us)}, 518f55e12f3SAjit Khaparde {"pfc_pri2_tx_transitions", offsetof(struct tx_port_stats_ext, 519f55e12f3SAjit Khaparde pfc_pri2_tx_transitions)}, 520f55e12f3SAjit Khaparde {"pfc_pri3_tx_duration_us", offsetof(struct tx_port_stats_ext, 521f55e12f3SAjit Khaparde pfc_pri3_tx_duration_us)}, 522f55e12f3SAjit Khaparde {"pfc_pri3_tx_transitions", offsetof(struct tx_port_stats_ext, 523f55e12f3SAjit Khaparde pfc_pri3_tx_transitions)}, 524f55e12f3SAjit Khaparde {"pfc_pri4_tx_duration_us", offsetof(struct tx_port_stats_ext, 525f55e12f3SAjit Khaparde pfc_pri4_tx_duration_us)}, 526f55e12f3SAjit Khaparde {"pfc_pri4_tx_transitions", offsetof(struct tx_port_stats_ext, 527f55e12f3SAjit Khaparde pfc_pri4_tx_transitions)}, 528f55e12f3SAjit Khaparde {"pfc_pri5_tx_duration_us", offsetof(struct tx_port_stats_ext, 529f55e12f3SAjit Khaparde pfc_pri5_tx_duration_us)}, 530f55e12f3SAjit Khaparde {"pfc_pri5_tx_transitions", offsetof(struct tx_port_stats_ext, 531f55e12f3SAjit Khaparde pfc_pri5_tx_transitions)}, 532f55e12f3SAjit Khaparde {"pfc_pri6_tx_duration_us", offsetof(struct tx_port_stats_ext, 533f55e12f3SAjit Khaparde pfc_pri6_tx_duration_us)}, 534f55e12f3SAjit Khaparde {"pfc_pri6_tx_transitions", offsetof(struct tx_port_stats_ext, 535f55e12f3SAjit Khaparde pfc_pri6_tx_transitions)}, 536f55e12f3SAjit Khaparde {"pfc_pri7_tx_duration_us", offsetof(struct tx_port_stats_ext, 537f55e12f3SAjit Khaparde pfc_pri7_tx_duration_us)}, 538f55e12f3SAjit Khaparde {"pfc_pri7_tx_transitions", offsetof(struct tx_port_stats_ext, 539f55e12f3SAjit Khaparde pfc_pri7_tx_transitions)}, 540f55e12f3SAjit Khaparde }; 541f55e12f3SAjit Khaparde 54257d5e5bcSAjit Khaparde /* 54357d5e5bcSAjit Khaparde * Statistics functions 54457d5e5bcSAjit Khaparde */ 54557d5e5bcSAjit Khaparde 54657d5e5bcSAjit Khaparde void bnxt_free_stats(struct bnxt *bp) 54757d5e5bcSAjit Khaparde { 54857d5e5bcSAjit Khaparde int i; 54957d5e5bcSAjit Khaparde 55057d5e5bcSAjit Khaparde for (i = 0; i < (int)bp->tx_cp_nr_rings; i++) { 55157d5e5bcSAjit Khaparde struct bnxt_tx_queue *txq = bp->tx_queues[i]; 55257d5e5bcSAjit Khaparde 55357d5e5bcSAjit Khaparde bnxt_free_txq_stats(txq); 55457d5e5bcSAjit Khaparde } 55557d5e5bcSAjit Khaparde for (i = 0; i < (int)bp->rx_cp_nr_rings; i++) { 55657d5e5bcSAjit Khaparde struct bnxt_rx_queue *rxq = bp->rx_queues[i]; 55757d5e5bcSAjit Khaparde 55857d5e5bcSAjit Khaparde bnxt_free_rxq_stats(rxq); 55957d5e5bcSAjit Khaparde } 56057d5e5bcSAjit Khaparde } 56157d5e5bcSAjit Khaparde 56227c32143SDamodharam Ammepalli static void bnxt_fill_rte_eth_stats_ext(struct rte_eth_stats *stats, 56327c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext *ring_stats, 56427c32143SDamodharam Ammepalli unsigned int i, bool rx) 56527c32143SDamodharam Ammepalli { 56627c32143SDamodharam Ammepalli if (rx) { 56727c32143SDamodharam Ammepalli stats->q_ipackets[i] = ring_stats->rx_ucast_pkts; 56827c32143SDamodharam Ammepalli stats->q_ipackets[i] += ring_stats->rx_mcast_pkts; 56927c32143SDamodharam Ammepalli stats->q_ipackets[i] += ring_stats->rx_bcast_pkts; 57027c32143SDamodharam Ammepalli 57127c32143SDamodharam Ammepalli stats->ipackets += stats->q_ipackets[i]; 57227c32143SDamodharam Ammepalli 57327c32143SDamodharam Ammepalli stats->q_ibytes[i] = ring_stats->rx_ucast_bytes; 57427c32143SDamodharam Ammepalli stats->q_ibytes[i] += ring_stats->rx_mcast_bytes; 57527c32143SDamodharam Ammepalli stats->q_ibytes[i] += ring_stats->rx_bcast_bytes; 57627c32143SDamodharam Ammepalli 57727c32143SDamodharam Ammepalli stats->ibytes += stats->q_ibytes[i]; 57827c32143SDamodharam Ammepalli 57927c32143SDamodharam Ammepalli stats->q_errors[i] = ring_stats->rx_discard_pkts; 58027c32143SDamodharam Ammepalli stats->q_errors[i] += ring_stats->rx_error_pkts; 58127c32143SDamodharam Ammepalli 58227c32143SDamodharam Ammepalli stats->imissed += ring_stats->rx_discard_pkts; 58327c32143SDamodharam Ammepalli stats->ierrors += ring_stats->rx_error_pkts; 58427c32143SDamodharam Ammepalli } else { 58527c32143SDamodharam Ammepalli stats->q_opackets[i] = ring_stats->tx_ucast_pkts; 58627c32143SDamodharam Ammepalli stats->q_opackets[i] += ring_stats->tx_mcast_pkts; 58727c32143SDamodharam Ammepalli stats->q_opackets[i] += ring_stats->tx_bcast_pkts; 58827c32143SDamodharam Ammepalli 58927c32143SDamodharam Ammepalli stats->opackets += stats->q_opackets[i]; 59027c32143SDamodharam Ammepalli 59127c32143SDamodharam Ammepalli stats->q_obytes[i] = ring_stats->tx_ucast_bytes; 59227c32143SDamodharam Ammepalli stats->q_obytes[i] += ring_stats->tx_mcast_bytes; 59327c32143SDamodharam Ammepalli stats->q_obytes[i] += ring_stats->tx_bcast_bytes; 59427c32143SDamodharam Ammepalli 59527c32143SDamodharam Ammepalli stats->obytes += stats->q_obytes[i]; 59627c32143SDamodharam Ammepalli 59727c32143SDamodharam Ammepalli stats->oerrors += ring_stats->tx_discard_pkts; 59827c32143SDamodharam Ammepalli } 59927c32143SDamodharam Ammepalli } 60027c32143SDamodharam Ammepalli 601219842b9SSomnath Kotur static void bnxt_fill_rte_eth_stats(struct rte_eth_stats *stats, 602219842b9SSomnath Kotur struct bnxt_ring_stats *ring_stats, 603219842b9SSomnath Kotur unsigned int i, bool rx) 604219842b9SSomnath Kotur { 605219842b9SSomnath Kotur if (rx) { 606219842b9SSomnath Kotur stats->q_ipackets[i] = ring_stats->rx_ucast_pkts; 607219842b9SSomnath Kotur stats->q_ipackets[i] += ring_stats->rx_mcast_pkts; 608219842b9SSomnath Kotur stats->q_ipackets[i] += ring_stats->rx_bcast_pkts; 609219842b9SSomnath Kotur 610219842b9SSomnath Kotur stats->ipackets += stats->q_ipackets[i]; 611219842b9SSomnath Kotur 612219842b9SSomnath Kotur stats->q_ibytes[i] = ring_stats->rx_ucast_bytes; 613219842b9SSomnath Kotur stats->q_ibytes[i] += ring_stats->rx_mcast_bytes; 614219842b9SSomnath Kotur stats->q_ibytes[i] += ring_stats->rx_bcast_bytes; 615219842b9SSomnath Kotur 616219842b9SSomnath Kotur stats->ibytes += stats->q_ibytes[i]; 617219842b9SSomnath Kotur 618219842b9SSomnath Kotur stats->q_errors[i] = ring_stats->rx_discard_pkts; 619219842b9SSomnath Kotur stats->q_errors[i] += ring_stats->rx_error_pkts; 620219842b9SSomnath Kotur 621219842b9SSomnath Kotur stats->imissed += ring_stats->rx_discard_pkts; 622219842b9SSomnath Kotur stats->ierrors += ring_stats->rx_error_pkts; 623219842b9SSomnath Kotur } else { 624219842b9SSomnath Kotur stats->q_opackets[i] = ring_stats->tx_ucast_pkts; 625219842b9SSomnath Kotur stats->q_opackets[i] += ring_stats->tx_mcast_pkts; 626219842b9SSomnath Kotur stats->q_opackets[i] += ring_stats->tx_bcast_pkts; 627219842b9SSomnath Kotur 628219842b9SSomnath Kotur stats->opackets += stats->q_opackets[i]; 629219842b9SSomnath Kotur 630219842b9SSomnath Kotur stats->q_obytes[i] = ring_stats->tx_ucast_bytes; 631219842b9SSomnath Kotur stats->q_obytes[i] += ring_stats->tx_mcast_bytes; 632219842b9SSomnath Kotur stats->q_obytes[i] += ring_stats->tx_bcast_bytes; 633219842b9SSomnath Kotur 634219842b9SSomnath Kotur stats->obytes += stats->q_obytes[i]; 635219842b9SSomnath Kotur 636219842b9SSomnath Kotur stats->oerrors += ring_stats->tx_discard_pkts; 637219842b9SSomnath Kotur } 638219842b9SSomnath Kotur } 639219842b9SSomnath Kotur 64027c32143SDamodharam Ammepalli static int bnxt_stats_get_ext(struct rte_eth_dev *eth_dev, 64127c32143SDamodharam Ammepalli struct rte_eth_stats *bnxt_stats) 64227c32143SDamodharam Ammepalli { 64327c32143SDamodharam Ammepalli int rc = 0; 64427c32143SDamodharam Ammepalli unsigned int i; 64527c32143SDamodharam Ammepalli struct bnxt *bp = eth_dev->data->dev_private; 64627c32143SDamodharam Ammepalli unsigned int num_q_stats; 64727c32143SDamodharam Ammepalli 64827c32143SDamodharam Ammepalli num_q_stats = RTE_MIN(bp->rx_cp_nr_rings, 64927c32143SDamodharam Ammepalli (unsigned int)RTE_ETHDEV_QUEUE_STAT_CNTRS); 65027c32143SDamodharam Ammepalli 65127c32143SDamodharam Ammepalli for (i = 0; i < num_q_stats; i++) { 65227c32143SDamodharam Ammepalli struct bnxt_rx_queue *rxq = bp->rx_queues[i]; 65327c32143SDamodharam Ammepalli struct bnxt_cp_ring_info *cpr = rxq->cp_ring; 65427c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext ring_stats = {0}; 65527c32143SDamodharam Ammepalli 65627c32143SDamodharam Ammepalli if (!rxq->rx_started) 65727c32143SDamodharam Ammepalli continue; 65827c32143SDamodharam Ammepalli 65927c32143SDamodharam Ammepalli rc = bnxt_hwrm_ring_stats_ext(bp, cpr->hw_stats_ctx_id, i, 66027c32143SDamodharam Ammepalli &ring_stats, true); 66127c32143SDamodharam Ammepalli if (unlikely(rc)) 66227c32143SDamodharam Ammepalli return rc; 66327c32143SDamodharam Ammepalli 66427c32143SDamodharam Ammepalli bnxt_fill_rte_eth_stats_ext(bnxt_stats, &ring_stats, i, true); 66527c32143SDamodharam Ammepalli bnxt_stats->rx_nombuf += 666e12a0166STyler Retzlaff rte_atomic_load_explicit(&rxq->rx_mbuf_alloc_fail, 667e12a0166STyler Retzlaff rte_memory_order_relaxed); 66827c32143SDamodharam Ammepalli } 66927c32143SDamodharam Ammepalli 67027c32143SDamodharam Ammepalli num_q_stats = RTE_MIN(bp->tx_cp_nr_rings, 67127c32143SDamodharam Ammepalli (unsigned int)RTE_ETHDEV_QUEUE_STAT_CNTRS); 67227c32143SDamodharam Ammepalli 67327c32143SDamodharam Ammepalli for (i = 0; i < num_q_stats; i++) { 67427c32143SDamodharam Ammepalli struct bnxt_tx_queue *txq = bp->tx_queues[i]; 67527c32143SDamodharam Ammepalli struct bnxt_cp_ring_info *cpr = txq->cp_ring; 67627c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext ring_stats = {0}; 67727c32143SDamodharam Ammepalli 67827c32143SDamodharam Ammepalli if (!txq->tx_started) 67927c32143SDamodharam Ammepalli continue; 68027c32143SDamodharam Ammepalli 68127c32143SDamodharam Ammepalli rc = bnxt_hwrm_ring_stats_ext(bp, cpr->hw_stats_ctx_id, i, 68227c32143SDamodharam Ammepalli &ring_stats, false); 68327c32143SDamodharam Ammepalli if (unlikely(rc)) 68427c32143SDamodharam Ammepalli return rc; 68527c32143SDamodharam Ammepalli 68627c32143SDamodharam Ammepalli bnxt_fill_rte_eth_stats_ext(bnxt_stats, &ring_stats, i, false); 68727c32143SDamodharam Ammepalli } 68827c32143SDamodharam Ammepalli 68927c32143SDamodharam Ammepalli return rc; 69027c32143SDamodharam Ammepalli } 69127c32143SDamodharam Ammepalli 692d5b0924bSMatan Azrad int bnxt_stats_get_op(struct rte_eth_dev *eth_dev, 69357d5e5bcSAjit Khaparde struct rte_eth_stats *bnxt_stats) 69457d5e5bcSAjit Khaparde { 695d5b0924bSMatan Azrad int rc = 0; 69657d5e5bcSAjit Khaparde unsigned int i; 69757d5e5bcSAjit Khaparde struct bnxt *bp = eth_dev->data->dev_private; 69875306ee0SLance Richardson unsigned int num_q_stats; 69957d5e5bcSAjit Khaparde 7001bf01f51SKalesh AP rc = is_bnxt_in_error(bp); 7011bf01f51SKalesh AP if (rc) 7021bf01f51SKalesh AP return rc; 7031bf01f51SKalesh AP 704925e3cbdSKalesh AP if (!eth_dev->data->dev_started) 7059f55e6acSKalesh AP return -EIO; 70657d5e5bcSAjit Khaparde 70727c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 70827c32143SDamodharam Ammepalli return bnxt_stats_get_ext(eth_dev, bnxt_stats); 70927c32143SDamodharam Ammepalli 71075306ee0SLance Richardson num_q_stats = RTE_MIN(bp->rx_cp_nr_rings, 71175306ee0SLance Richardson (unsigned int)RTE_ETHDEV_QUEUE_STAT_CNTRS); 71275306ee0SLance Richardson 71375306ee0SLance Richardson for (i = 0; i < num_q_stats; i++) { 71457d5e5bcSAjit Khaparde struct bnxt_rx_queue *rxq = bp->rx_queues[i]; 71557d5e5bcSAjit Khaparde struct bnxt_cp_ring_info *cpr = rxq->cp_ring; 716219842b9SSomnath Kotur struct bnxt_ring_stats ring_stats = {0}; 71757d5e5bcSAjit Khaparde 7186aba4a03SStephen Hemminger if (!rxq->rx_started) 7196aba4a03SStephen Hemminger continue; 720219842b9SSomnath Kotur 721219842b9SSomnath Kotur rc = bnxt_hwrm_ring_stats(bp, cpr->hw_stats_ctx_id, i, 722219842b9SSomnath Kotur &ring_stats, true); 723d5b0924bSMatan Azrad if (unlikely(rc)) 724d5b0924bSMatan Azrad return rc; 725219842b9SSomnath Kotur 726219842b9SSomnath Kotur bnxt_fill_rte_eth_stats(bnxt_stats, &ring_stats, i, true); 727472193a7SAjit Khaparde bnxt_stats->rx_nombuf += 728e12a0166STyler Retzlaff rte_atomic_load_explicit(&rxq->rx_mbuf_alloc_fail, 729e12a0166STyler Retzlaff rte_memory_order_relaxed); 73057d5e5bcSAjit Khaparde } 73157d5e5bcSAjit Khaparde 73275306ee0SLance Richardson num_q_stats = RTE_MIN(bp->tx_cp_nr_rings, 73375306ee0SLance Richardson (unsigned int)RTE_ETHDEV_QUEUE_STAT_CNTRS); 73475306ee0SLance Richardson 73575306ee0SLance Richardson for (i = 0; i < num_q_stats; i++) { 73657d5e5bcSAjit Khaparde struct bnxt_tx_queue *txq = bp->tx_queues[i]; 73757d5e5bcSAjit Khaparde struct bnxt_cp_ring_info *cpr = txq->cp_ring; 738219842b9SSomnath Kotur struct bnxt_ring_stats ring_stats = {0}; 73957d5e5bcSAjit Khaparde 7406aba4a03SStephen Hemminger if (!txq->tx_started) 7416aba4a03SStephen Hemminger continue; 742219842b9SSomnath Kotur 743219842b9SSomnath Kotur rc = bnxt_hwrm_ring_stats(bp, cpr->hw_stats_ctx_id, i, 744219842b9SSomnath Kotur &ring_stats, false); 745d5b0924bSMatan Azrad if (unlikely(rc)) 746d5b0924bSMatan Azrad return rc; 747219842b9SSomnath Kotur 748219842b9SSomnath Kotur bnxt_fill_rte_eth_stats(bnxt_stats, &ring_stats, i, false); 749*6cc5dfa6SAjit Khaparde bnxt_stats->oerrors += 750*6cc5dfa6SAjit Khaparde rte_atomic_load_explicit(&txq->tx_mbuf_drop, 751*6cc5dfa6SAjit Khaparde rte_memory_order_relaxed); 75257d5e5bcSAjit Khaparde } 7539f55e6acSKalesh AP 754d5b0924bSMatan Azrad return rc; 75557d5e5bcSAjit Khaparde } 75657d5e5bcSAjit Khaparde 75784fd852cSKalesh AP static void bnxt_clear_prev_stat(struct bnxt *bp) 75884fd852cSKalesh AP { 75984fd852cSKalesh AP /* 76084fd852cSKalesh AP * Clear the cached values of stats returned by HW in the previous 76184fd852cSKalesh AP * get operation. 76284fd852cSKalesh AP */ 76327c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) { 76427c32143SDamodharam Ammepalli memset(bp->prev_rx_ring_stats_ext, 0, 76527c32143SDamodharam Ammepalli sizeof(struct bnxt_ring_stats_ext) * bp->rx_cp_nr_rings); 76627c32143SDamodharam Ammepalli memset(bp->prev_tx_ring_stats_ext, 0, 76727c32143SDamodharam Ammepalli sizeof(struct bnxt_ring_stats_ext) * bp->tx_cp_nr_rings); 76827c32143SDamodharam Ammepalli } else { 76927c32143SDamodharam Ammepalli memset(bp->prev_rx_ring_stats, 0, 77027c32143SDamodharam Ammepalli sizeof(struct bnxt_ring_stats) * bp->rx_cp_nr_rings); 77127c32143SDamodharam Ammepalli memset(bp->prev_tx_ring_stats, 0, 77227c32143SDamodharam Ammepalli sizeof(struct bnxt_ring_stats) * bp->tx_cp_nr_rings); 77327c32143SDamodharam Ammepalli } 77484fd852cSKalesh AP } 77584fd852cSKalesh AP 7769970a9adSIgor Romanov int bnxt_stats_reset_op(struct rte_eth_dev *eth_dev) 77757d5e5bcSAjit Khaparde { 77878466c95SStephen Hemminger struct bnxt *bp = eth_dev->data->dev_private; 779472193a7SAjit Khaparde unsigned int i; 7809970a9adSIgor Romanov int ret; 78157d5e5bcSAjit Khaparde 7821bf01f51SKalesh AP ret = is_bnxt_in_error(bp); 7831bf01f51SKalesh AP if (ret) 7841bf01f51SKalesh AP return ret; 7851bf01f51SKalesh AP 786925e3cbdSKalesh AP if (!eth_dev->data->dev_started) { 787e99981afSDavid Marchand PMD_DRV_LOG_LINE(ERR, "Device Initialization not complete!"); 7889970a9adSIgor Romanov return -EINVAL; 789ed2ced6fSAjit Khaparde } 790ed2ced6fSAjit Khaparde 7919970a9adSIgor Romanov ret = bnxt_clear_all_hwrm_stat_ctxs(bp); 792472193a7SAjit Khaparde for (i = 0; i < bp->rx_cp_nr_rings; i++) { 793472193a7SAjit Khaparde struct bnxt_rx_queue *rxq = bp->rx_queues[i]; 794472193a7SAjit Khaparde 79556bbd6acSRuifeng Wang rxq->rx_mbuf_alloc_fail = 0; 796472193a7SAjit Khaparde } 7979970a9adSIgor Romanov 798*6cc5dfa6SAjit Khaparde for (i = 0; i < bp->tx_cp_nr_rings; i++) { 799*6cc5dfa6SAjit Khaparde struct bnxt_tx_queue *txq = bp->tx_queues[i]; 800*6cc5dfa6SAjit Khaparde 801*6cc5dfa6SAjit Khaparde txq->tx_mbuf_drop = 0; 802*6cc5dfa6SAjit Khaparde } 803*6cc5dfa6SAjit Khaparde 80484fd852cSKalesh AP bnxt_clear_prev_stat(bp); 80584fd852cSKalesh AP 8069970a9adSIgor Romanov return ret; 80757d5e5bcSAjit Khaparde } 808bfb9c226SAjit Khaparde 80927c32143SDamodharam Ammepalli static void bnxt_fill_func_qstats_ext(struct hwrm_func_qstats_ext_output *func_qstats, 81027c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext *ring_stats, 81127c32143SDamodharam Ammepalli bool rx) 81227c32143SDamodharam Ammepalli { 81327c32143SDamodharam Ammepalli if (rx) { 81427c32143SDamodharam Ammepalli func_qstats->rx_ucast_pkts += ring_stats->rx_ucast_pkts; 81527c32143SDamodharam Ammepalli func_qstats->rx_mcast_pkts += ring_stats->rx_mcast_pkts; 81627c32143SDamodharam Ammepalli func_qstats->rx_bcast_pkts += ring_stats->rx_bcast_pkts; 81727c32143SDamodharam Ammepalli 81827c32143SDamodharam Ammepalli func_qstats->rx_ucast_bytes += ring_stats->rx_ucast_bytes; 81927c32143SDamodharam Ammepalli func_qstats->rx_mcast_bytes += ring_stats->rx_mcast_bytes; 82027c32143SDamodharam Ammepalli func_qstats->rx_bcast_bytes += ring_stats->rx_bcast_bytes; 82127c32143SDamodharam Ammepalli 82227c32143SDamodharam Ammepalli func_qstats->rx_discard_pkts += ring_stats->rx_discard_pkts; 82327c32143SDamodharam Ammepalli func_qstats->rx_error_pkts += ring_stats->rx_error_pkts; 82427c32143SDamodharam Ammepalli 82527c32143SDamodharam Ammepalli func_qstats->rx_tpa_eligible_pkt += ring_stats->rx_tpa_eligible_pkt; 82627c32143SDamodharam Ammepalli func_qstats->rx_tpa_eligible_bytes += ring_stats->rx_tpa_eligible_bytes; 82727c32143SDamodharam Ammepalli func_qstats->rx_tpa_pkt += ring_stats->rx_tpa_pkt; 82827c32143SDamodharam Ammepalli func_qstats->rx_tpa_bytes += ring_stats->rx_tpa_bytes; 82927c32143SDamodharam Ammepalli func_qstats->rx_tpa_errors += ring_stats->rx_tpa_errors; 83027c32143SDamodharam Ammepalli func_qstats->rx_tpa_events += ring_stats->rx_tpa_events; 83127c32143SDamodharam Ammepalli } else { 83227c32143SDamodharam Ammepalli func_qstats->tx_ucast_pkts += ring_stats->tx_ucast_pkts; 83327c32143SDamodharam Ammepalli func_qstats->tx_mcast_pkts += ring_stats->tx_mcast_pkts; 83427c32143SDamodharam Ammepalli func_qstats->tx_bcast_pkts += ring_stats->tx_bcast_pkts; 83527c32143SDamodharam Ammepalli 83627c32143SDamodharam Ammepalli func_qstats->tx_ucast_bytes += ring_stats->tx_ucast_bytes; 83727c32143SDamodharam Ammepalli func_qstats->tx_mcast_bytes += ring_stats->tx_mcast_bytes; 83827c32143SDamodharam Ammepalli func_qstats->tx_bcast_bytes += ring_stats->tx_bcast_bytes; 83927c32143SDamodharam Ammepalli 84027c32143SDamodharam Ammepalli func_qstats->tx_error_pkts += ring_stats->tx_error_pkts; 84127c32143SDamodharam Ammepalli func_qstats->tx_discard_pkts += ring_stats->tx_discard_pkts; 84227c32143SDamodharam Ammepalli } 84327c32143SDamodharam Ammepalli } 84427c32143SDamodharam Ammepalli 845219842b9SSomnath Kotur static void bnxt_fill_func_qstats(struct hwrm_func_qstats_output *func_qstats, 846219842b9SSomnath Kotur struct bnxt_ring_stats *ring_stats, 847219842b9SSomnath Kotur bool rx) 848219842b9SSomnath Kotur { 849219842b9SSomnath Kotur if (rx) { 850219842b9SSomnath Kotur func_qstats->rx_ucast_pkts += ring_stats->rx_ucast_pkts; 851219842b9SSomnath Kotur func_qstats->rx_mcast_pkts += ring_stats->rx_mcast_pkts; 852219842b9SSomnath Kotur func_qstats->rx_bcast_pkts += ring_stats->rx_bcast_pkts; 853219842b9SSomnath Kotur 854219842b9SSomnath Kotur func_qstats->rx_ucast_bytes += ring_stats->rx_ucast_bytes; 855219842b9SSomnath Kotur func_qstats->rx_mcast_bytes += ring_stats->rx_mcast_bytes; 856219842b9SSomnath Kotur func_qstats->rx_bcast_bytes += ring_stats->rx_bcast_bytes; 857219842b9SSomnath Kotur 858219842b9SSomnath Kotur func_qstats->rx_discard_pkts += ring_stats->rx_discard_pkts; 859219842b9SSomnath Kotur func_qstats->rx_drop_pkts += ring_stats->rx_error_pkts; 860219842b9SSomnath Kotur 861219842b9SSomnath Kotur func_qstats->rx_agg_pkts += ring_stats->rx_agg_pkts; 862219842b9SSomnath Kotur func_qstats->rx_agg_bytes += ring_stats->rx_agg_bytes; 863219842b9SSomnath Kotur func_qstats->rx_agg_events += ring_stats->rx_agg_events; 864219842b9SSomnath Kotur func_qstats->rx_agg_aborts += ring_stats->rx_agg_aborts; 865219842b9SSomnath Kotur } else { 866219842b9SSomnath Kotur func_qstats->tx_ucast_pkts += ring_stats->tx_ucast_pkts; 867219842b9SSomnath Kotur func_qstats->tx_mcast_pkts += ring_stats->tx_mcast_pkts; 868219842b9SSomnath Kotur func_qstats->tx_bcast_pkts += ring_stats->tx_bcast_pkts; 869219842b9SSomnath Kotur 870219842b9SSomnath Kotur func_qstats->tx_ucast_bytes += ring_stats->tx_ucast_bytes; 871219842b9SSomnath Kotur func_qstats->tx_mcast_bytes += ring_stats->tx_mcast_bytes; 872219842b9SSomnath Kotur func_qstats->tx_bcast_bytes += ring_stats->tx_bcast_bytes; 873219842b9SSomnath Kotur 874219842b9SSomnath Kotur func_qstats->tx_drop_pkts += ring_stats->tx_error_pkts; 875219842b9SSomnath Kotur func_qstats->tx_discard_pkts += ring_stats->tx_discard_pkts; 876219842b9SSomnath Kotur } 877219842b9SSomnath Kotur } 878219842b9SSomnath Kotur 879bfb9c226SAjit Khaparde int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev, 880bfb9c226SAjit Khaparde struct rte_eth_xstat *xstats, unsigned int n) 881bfb9c226SAjit Khaparde { 88278466c95SStephen Hemminger struct bnxt *bp = eth_dev->data->dev_private; 883bfb9c226SAjit Khaparde unsigned int count, i; 884f55e12f3SAjit Khaparde unsigned int rx_port_stats_ext_cnt; 885f55e12f3SAjit Khaparde unsigned int tx_port_stats_ext_cnt; 886f55e12f3SAjit Khaparde unsigned int stat_size = sizeof(uint64_t); 8875f9374deSAjit Khaparde struct hwrm_func_qstats_output func_qstats = {0}; 88827c32143SDamodharam Ammepalli struct hwrm_func_qstats_ext_output func_qstats_ext = {0}; 88927c32143SDamodharam Ammepalli unsigned int stat_count, sz; 8901bf01f51SKalesh AP int rc; 8911bf01f51SKalesh AP 8921bf01f51SKalesh AP rc = is_bnxt_in_error(bp); 8931bf01f51SKalesh AP if (rc) 8941bf01f51SKalesh AP return rc; 895bfb9c226SAjit Khaparde 89627c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 89727c32143SDamodharam Ammepalli sz = RTE_DIM(bnxt_func_stats_ext_strings); 89827c32143SDamodharam Ammepalli else 89927c32143SDamodharam Ammepalli sz = RTE_DIM(bnxt_func_stats_strings); 90027c32143SDamodharam Ammepalli 901eac4fc71SSomnath Kotur stat_count = RTE_DIM(bnxt_rx_stats_strings) + 90227c32143SDamodharam Ammepalli RTE_DIM(bnxt_tx_stats_strings) + sz + 903eac4fc71SSomnath Kotur RTE_DIM(bnxt_rx_ext_stats_strings) + 904eac4fc71SSomnath Kotur RTE_DIM(bnxt_tx_ext_stats_strings) + 905eac4fc71SSomnath Kotur bnxt_flow_stats_cnt(bp); 906063e59ddSAjit Khaparde 907eac4fc71SSomnath Kotur if (n < stat_count || xstats == NULL) 908eac4fc71SSomnath Kotur return stat_count; 909a9586abdSKalesh AP 910219842b9SSomnath Kotur for (i = 0; i < bp->rx_cp_nr_rings; i++) { 911219842b9SSomnath Kotur struct bnxt_rx_queue *rxq = bp->rx_queues[i]; 912219842b9SSomnath Kotur struct bnxt_cp_ring_info *cpr = rxq->cp_ring; 913219842b9SSomnath Kotur struct bnxt_ring_stats ring_stats = {0}; 91427c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext ring_stats_ext = {0}; 915219842b9SSomnath Kotur 916219842b9SSomnath Kotur if (!rxq->rx_started) 917219842b9SSomnath Kotur continue; 918219842b9SSomnath Kotur 91927c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 92027c32143SDamodharam Ammepalli rc = bnxt_hwrm_ring_stats_ext(bp, cpr->hw_stats_ctx_id, i, 92127c32143SDamodharam Ammepalli &ring_stats_ext, true); 92227c32143SDamodharam Ammepalli else 923219842b9SSomnath Kotur rc = bnxt_hwrm_ring_stats(bp, cpr->hw_stats_ctx_id, i, 924219842b9SSomnath Kotur &ring_stats, true); 92527c32143SDamodharam Ammepalli 926219842b9SSomnath Kotur if (unlikely(rc)) 927219842b9SSomnath Kotur return rc; 928219842b9SSomnath Kotur 92927c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 93027c32143SDamodharam Ammepalli bnxt_fill_func_qstats_ext(&func_qstats_ext, 93127c32143SDamodharam Ammepalli &ring_stats_ext, true); 93227c32143SDamodharam Ammepalli else 933219842b9SSomnath Kotur bnxt_fill_func_qstats(&func_qstats, &ring_stats, true); 934219842b9SSomnath Kotur } 935219842b9SSomnath Kotur 936219842b9SSomnath Kotur for (i = 0; i < bp->tx_cp_nr_rings; i++) { 937219842b9SSomnath Kotur struct bnxt_tx_queue *txq = bp->tx_queues[i]; 938219842b9SSomnath Kotur struct bnxt_cp_ring_info *cpr = txq->cp_ring; 939219842b9SSomnath Kotur struct bnxt_ring_stats ring_stats = {0}; 94027c32143SDamodharam Ammepalli struct bnxt_ring_stats_ext ring_stats_ext = {0}; 941219842b9SSomnath Kotur 942219842b9SSomnath Kotur if (!txq->tx_started) 943219842b9SSomnath Kotur continue; 944219842b9SSomnath Kotur 94527c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 94627c32143SDamodharam Ammepalli rc = bnxt_hwrm_ring_stats_ext(bp, cpr->hw_stats_ctx_id, i, 94727c32143SDamodharam Ammepalli &ring_stats_ext, false); 94827c32143SDamodharam Ammepalli else 949219842b9SSomnath Kotur rc = bnxt_hwrm_ring_stats(bp, cpr->hw_stats_ctx_id, i, 950219842b9SSomnath Kotur &ring_stats, false); 951219842b9SSomnath Kotur if (unlikely(rc)) 952219842b9SSomnath Kotur return rc; 953219842b9SSomnath Kotur 95427c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 95527c32143SDamodharam Ammepalli bnxt_fill_func_qstats_ext(&func_qstats_ext, 95627c32143SDamodharam Ammepalli &ring_stats_ext, false); 95727c32143SDamodharam Ammepalli else 958219842b9SSomnath Kotur bnxt_fill_func_qstats(&func_qstats, &ring_stats, false); 959219842b9SSomnath Kotur } 960219842b9SSomnath Kotur 961bfb9c226SAjit Khaparde bnxt_hwrm_port_qstats(bp); 962f55e12f3SAjit Khaparde bnxt_hwrm_ext_port_qstats(bp); 963b02a39baSSantoshkumar Karanappa Rastapur rx_port_stats_ext_cnt = RTE_MIN(RTE_DIM(bnxt_rx_ext_stats_strings), 964b02a39baSSantoshkumar Karanappa Rastapur (bp->fw_rx_port_stats_ext_size / 965b02a39baSSantoshkumar Karanappa Rastapur stat_size)); 966b02a39baSSantoshkumar Karanappa Rastapur tx_port_stats_ext_cnt = RTE_MIN(RTE_DIM(bnxt_tx_ext_stats_strings), 967b02a39baSSantoshkumar Karanappa Rastapur (bp->fw_tx_port_stats_ext_size / 968b02a39baSSantoshkumar Karanappa Rastapur stat_size)); 969bfb9c226SAjit Khaparde 970c05c22f9SKalesh AP memset(xstats, 0, sizeof(*xstats) * n); 971bfb9c226SAjit Khaparde 972bfb9c226SAjit Khaparde count = 0; 973bfb9c226SAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_rx_stats_strings); i++) { 974bfb9c226SAjit Khaparde uint64_t *rx_stats = (uint64_t *)bp->hw_rx_port_stats; 97567659988SDavid Marchand xstats[count].id = count; 976bfb9c226SAjit Khaparde xstats[count].value = rte_le_to_cpu_64( 977bfb9c226SAjit Khaparde *(uint64_t *)((char *)rx_stats + 978bfb9c226SAjit Khaparde bnxt_rx_stats_strings[i].offset)); 979bfb9c226SAjit Khaparde count++; 980bfb9c226SAjit Khaparde } 981bfb9c226SAjit Khaparde 982bfb9c226SAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_tx_stats_strings); i++) { 983bfb9c226SAjit Khaparde uint64_t *tx_stats = (uint64_t *)bp->hw_tx_port_stats; 98467659988SDavid Marchand xstats[count].id = count; 985bfb9c226SAjit Khaparde xstats[count].value = rte_le_to_cpu_64( 986bfb9c226SAjit Khaparde *(uint64_t *)((char *)tx_stats + 987bfb9c226SAjit Khaparde bnxt_tx_stats_strings[i].offset)); 988bfb9c226SAjit Khaparde count++; 989bfb9c226SAjit Khaparde } 990bfb9c226SAjit Khaparde 99127c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) { 99227c32143SDamodharam Ammepalli for (i = 0; i < RTE_DIM(bnxt_func_stats_ext_strings); i++) { 99327c32143SDamodharam Ammepalli xstats[count].id = count; 99427c32143SDamodharam Ammepalli xstats[count].value = *(uint64_t *)((char *)&func_qstats_ext + 99527c32143SDamodharam Ammepalli bnxt_func_stats_ext_strings[i].offset); 99627c32143SDamodharam Ammepalli count++; 99727c32143SDamodharam Ammepalli } 99827c32143SDamodharam Ammepalli goto skip_func_stats; 99927c32143SDamodharam Ammepalli } 10005f9374deSAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_func_stats_strings); i++) { 100167659988SDavid Marchand xstats[count].id = count; 1002219842b9SSomnath Kotur xstats[count].value = *(uint64_t *)((char *)&func_qstats + 1003219842b9SSomnath Kotur bnxt_func_stats_strings[i].offset); 1004dd46c6bbSAjit Khaparde count++; 10055f9374deSAjit Khaparde } 10065f9374deSAjit Khaparde 100727c32143SDamodharam Ammepalli skip_func_stats: 1008f55e12f3SAjit Khaparde for (i = 0; i < rx_port_stats_ext_cnt; i++) { 1009f55e12f3SAjit Khaparde uint64_t *rx_stats_ext = (uint64_t *)bp->hw_rx_port_stats_ext; 1010f55e12f3SAjit Khaparde 1011f55e12f3SAjit Khaparde xstats[count].value = rte_le_to_cpu_64 1012f55e12f3SAjit Khaparde (*(uint64_t *)((char *)rx_stats_ext + 1013f55e12f3SAjit Khaparde bnxt_rx_ext_stats_strings[i].offset)); 1014f55e12f3SAjit Khaparde 1015f55e12f3SAjit Khaparde count++; 1016f55e12f3SAjit Khaparde } 1017f55e12f3SAjit Khaparde 1018b02a39baSSantoshkumar Karanappa Rastapur for (i = 0; i < tx_port_stats_ext_cnt; i++) { 1019b02a39baSSantoshkumar Karanappa Rastapur uint64_t *tx_stats_ext = (uint64_t *)bp->hw_tx_port_stats_ext; 1020b02a39baSSantoshkumar Karanappa Rastapur 1021b02a39baSSantoshkumar Karanappa Rastapur xstats[count].value = rte_le_to_cpu_64 1022b02a39baSSantoshkumar Karanappa Rastapur (*(uint64_t *)((char *)tx_stats_ext + 1023b02a39baSSantoshkumar Karanappa Rastapur bnxt_tx_ext_stats_strings[i].offset)); 1024b02a39baSSantoshkumar Karanappa Rastapur count++; 1025b02a39baSSantoshkumar Karanappa Rastapur } 1026b02a39baSSantoshkumar Karanappa Rastapur 102702a95625SSomnath Kotur if (bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_COUNTERS && 102802a95625SSomnath Kotur bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_MGMT && 10291e2f8acaSAjit Khaparde BNXT_FLOW_XSTATS_EN(bp)) { 103002a95625SSomnath Kotur int j; 103102a95625SSomnath Kotur 103202a95625SSomnath Kotur i = 0; 103302a95625SSomnath Kotur for (j = 0; j < bp->max_vnics; j++) { 103402a95625SSomnath Kotur struct bnxt_filter_info *filter; 103502a95625SSomnath Kotur struct bnxt_vnic_info *vnic; 103602a95625SSomnath Kotur struct rte_flow *flow; 103702a95625SSomnath Kotur 103802a95625SSomnath Kotur vnic = &bp->vnic_info[j]; 103902a95625SSomnath Kotur if (vnic && vnic->fw_vnic_id == INVALID_VNIC_ID) 104002a95625SSomnath Kotur continue; 104102a95625SSomnath Kotur 104202a95625SSomnath Kotur if (STAILQ_EMPTY(&vnic->flow_list)) 104302a95625SSomnath Kotur continue; 104402a95625SSomnath Kotur 104502a95625SSomnath Kotur STAILQ_FOREACH(flow, &vnic->flow_list, next) { 104602a95625SSomnath Kotur if (!flow || !flow->filter) 104702a95625SSomnath Kotur continue; 104802a95625SSomnath Kotur 104902a95625SSomnath Kotur filter = flow->filter; 105002a95625SSomnath Kotur xstats[count].id = count; 105102a95625SSomnath Kotur xstats[count].value = 105202a95625SSomnath Kotur filter->hw_stats.bytes; 105302a95625SSomnath Kotur count++; 105402a95625SSomnath Kotur xstats[count].id = count; 105502a95625SSomnath Kotur xstats[count].value = 105602a95625SSomnath Kotur filter->hw_stats.packets; 105702a95625SSomnath Kotur count++; 105802a95625SSomnath Kotur if (++i > bp->max_l2_ctx) 105902a95625SSomnath Kotur break; 106002a95625SSomnath Kotur } 106102a95625SSomnath Kotur if (i > bp->max_l2_ctx) 106202a95625SSomnath Kotur break; 106302a95625SSomnath Kotur } 106402a95625SSomnath Kotur } 106502a95625SSomnath Kotur 1066f55e12f3SAjit Khaparde return stat_count; 1067bfb9c226SAjit Khaparde } 1068bfb9c226SAjit Khaparde 106902a95625SSomnath Kotur int bnxt_flow_stats_cnt(struct bnxt *bp) 107002a95625SSomnath Kotur { 107102a95625SSomnath Kotur if (bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_COUNTERS && 107202a95625SSomnath Kotur bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_MGMT && 10731e2f8acaSAjit Khaparde BNXT_FLOW_XSTATS_EN(bp)) { 107402a95625SSomnath Kotur struct bnxt_xstats_name_off flow_bytes[bp->max_l2_ctx]; 107502a95625SSomnath Kotur struct bnxt_xstats_name_off flow_pkts[bp->max_l2_ctx]; 107602a95625SSomnath Kotur 107702a95625SSomnath Kotur return RTE_DIM(flow_bytes) + RTE_DIM(flow_pkts); 107802a95625SSomnath Kotur } 107902a95625SSomnath Kotur 108002a95625SSomnath Kotur return 0; 108102a95625SSomnath Kotur } 108202a95625SSomnath Kotur 1083fd36aa85SKalesh AP int bnxt_dev_xstats_get_names_op(struct rte_eth_dev *eth_dev, 1084bfb9c226SAjit Khaparde struct rte_eth_xstat_name *xstats_names, 10858dcee14fSLance Richardson unsigned int size) 1086bfb9c226SAjit Khaparde { 108702a95625SSomnath Kotur struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; 108827c32143SDamodharam Ammepalli unsigned int stat_cnt; 108927c32143SDamodharam Ammepalli unsigned int i, count = 0, sz; 10901bf01f51SKalesh AP int rc; 10911bf01f51SKalesh AP 10921bf01f51SKalesh AP rc = is_bnxt_in_error(bp); 10931bf01f51SKalesh AP if (rc) 10941bf01f51SKalesh AP return rc; 1095bfb9c226SAjit Khaparde 109627c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) 109727c32143SDamodharam Ammepalli sz = RTE_DIM(bnxt_func_stats_ext_strings); 109827c32143SDamodharam Ammepalli else 109927c32143SDamodharam Ammepalli sz = RTE_DIM(bnxt_func_stats_strings); 110027c32143SDamodharam Ammepalli 110127c32143SDamodharam Ammepalli stat_cnt = RTE_DIM(bnxt_rx_stats_strings) + 110227c32143SDamodharam Ammepalli RTE_DIM(bnxt_tx_stats_strings) + 110327c32143SDamodharam Ammepalli sz + 110427c32143SDamodharam Ammepalli RTE_DIM(bnxt_rx_ext_stats_strings) + 110527c32143SDamodharam Ammepalli RTE_DIM(bnxt_tx_ext_stats_strings) + 110627c32143SDamodharam Ammepalli bnxt_flow_stats_cnt(bp); 110727c32143SDamodharam Ammepalli 11088dcee14fSLance Richardson if (xstats_names == NULL || size < stat_cnt) 11098dcee14fSLance Richardson return stat_cnt; 1110bfb9c226SAjit Khaparde 1111bfb9c226SAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_rx_stats_strings); i++) { 11126723c0fcSBruce Richardson strlcpy(xstats_names[count].name, 11136723c0fcSBruce Richardson bnxt_rx_stats_strings[i].name, 11146723c0fcSBruce Richardson sizeof(xstats_names[count].name)); 1115bfb9c226SAjit Khaparde count++; 1116bfb9c226SAjit Khaparde } 1117bfb9c226SAjit Khaparde 1118bfb9c226SAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_tx_stats_strings); i++) { 11196723c0fcSBruce Richardson strlcpy(xstats_names[count].name, 11206723c0fcSBruce Richardson bnxt_tx_stats_strings[i].name, 11216723c0fcSBruce Richardson sizeof(xstats_names[count].name)); 1122bfb9c226SAjit Khaparde count++; 1123bfb9c226SAjit Khaparde } 1124dd46c6bbSAjit Khaparde 112527c32143SDamodharam Ammepalli if (BNXT_TPA_V2_P7(bp)) { 112627c32143SDamodharam Ammepalli for (i = 0; i < RTE_DIM(bnxt_func_stats_ext_strings); i++) { 112727c32143SDamodharam Ammepalli strlcpy(xstats_names[count].name, 112827c32143SDamodharam Ammepalli bnxt_func_stats_ext_strings[i].name, 112927c32143SDamodharam Ammepalli sizeof(xstats_names[count].name)); 113027c32143SDamodharam Ammepalli count++; 113127c32143SDamodharam Ammepalli } 113227c32143SDamodharam Ammepalli goto skip_func_stats; 113327c32143SDamodharam Ammepalli } 113427c32143SDamodharam Ammepalli 11355f9374deSAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_func_stats_strings); i++) { 11366723c0fcSBruce Richardson strlcpy(xstats_names[count].name, 11375f9374deSAjit Khaparde bnxt_func_stats_strings[i].name, 11386723c0fcSBruce Richardson sizeof(xstats_names[count].name)); 1139dd46c6bbSAjit Khaparde count++; 11405f9374deSAjit Khaparde } 1141f55e12f3SAjit Khaparde 114227c32143SDamodharam Ammepalli skip_func_stats: 1143f55e12f3SAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_rx_ext_stats_strings); i++) { 11446723c0fcSBruce Richardson strlcpy(xstats_names[count].name, 11456723c0fcSBruce Richardson bnxt_rx_ext_stats_strings[i].name, 11466723c0fcSBruce Richardson sizeof(xstats_names[count].name)); 1147f55e12f3SAjit Khaparde 1148f55e12f3SAjit Khaparde count++; 1149f55e12f3SAjit Khaparde } 1150f55e12f3SAjit Khaparde 1151f55e12f3SAjit Khaparde for (i = 0; i < RTE_DIM(bnxt_tx_ext_stats_strings); i++) { 11526723c0fcSBruce Richardson strlcpy(xstats_names[count].name, 11536723c0fcSBruce Richardson bnxt_tx_ext_stats_strings[i].name, 11546723c0fcSBruce Richardson sizeof(xstats_names[count].name)); 1155f55e12f3SAjit Khaparde 1156f55e12f3SAjit Khaparde count++; 1157f55e12f3SAjit Khaparde } 1158f55e12f3SAjit Khaparde 115902a95625SSomnath Kotur if (bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_COUNTERS && 116002a95625SSomnath Kotur bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_MGMT && 11611e2f8acaSAjit Khaparde BNXT_FLOW_XSTATS_EN(bp)) { 116202a95625SSomnath Kotur for (i = 0; i < bp->max_l2_ctx; i++) { 116302a95625SSomnath Kotur char buf[RTE_ETH_XSTATS_NAME_SIZE]; 116402a95625SSomnath Kotur 116502a95625SSomnath Kotur sprintf(buf, "flow_%d_bytes", i); 116602a95625SSomnath Kotur strlcpy(xstats_names[count].name, buf, 116702a95625SSomnath Kotur sizeof(xstats_names[count].name)); 116802a95625SSomnath Kotur count++; 116902a95625SSomnath Kotur 117002a95625SSomnath Kotur sprintf(buf, "flow_%d_packets", i); 117102a95625SSomnath Kotur strlcpy(xstats_names[count].name, buf, 117202a95625SSomnath Kotur sizeof(xstats_names[count].name)); 117302a95625SSomnath Kotur 117402a95625SSomnath Kotur count++; 1175bfb9c226SAjit Khaparde } 117602a95625SSomnath Kotur } 117702a95625SSomnath Kotur 1178bfb9c226SAjit Khaparde return stat_cnt; 1179bfb9c226SAjit Khaparde } 1180bfb9c226SAjit Khaparde 11819970a9adSIgor Romanov int bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev) 1182bfb9c226SAjit Khaparde { 118378466c95SStephen Hemminger struct bnxt *bp = eth_dev->data->dev_private; 11849970a9adSIgor Romanov int ret; 1185bfb9c226SAjit Khaparde 11861bf01f51SKalesh AP ret = is_bnxt_in_error(bp); 11871bf01f51SKalesh AP if (ret) 11881bf01f51SKalesh AP return ret; 11891bf01f51SKalesh AP 11909f55e6acSKalesh AP if (BNXT_VF(bp) || !BNXT_SINGLE_PF(bp) || 11919f55e6acSKalesh AP !(bp->flags & BNXT_FLAG_PORT_STATS)) { 1192e99981afSDavid Marchand PMD_DRV_LOG_LINE(ERR, "Operation not supported"); 11939bc556e3SKalesh AP return -ENOTSUP; 11949970a9adSIgor Romanov } 11959970a9adSIgor Romanov 11969f55e6acSKalesh AP ret = bnxt_hwrm_port_clr_stats(bp); 11979f55e6acSKalesh AP if (ret != 0) 1198e99981afSDavid Marchand PMD_DRV_LOG_LINE(ERR, "Failed to reset xstats: %s", 11999f55e6acSKalesh AP strerror(-ret)); 12009f55e6acSKalesh AP 120184fd852cSKalesh AP bnxt_clear_prev_stat(bp); 120284fd852cSKalesh AP 12039970a9adSIgor Romanov return ret; 1204bfb9c226SAjit Khaparde } 120588920136SAjit Khaparde 120602a95625SSomnath Kotur /* Update the input context memory with the flow counter IDs 120702a95625SSomnath Kotur * of the flows that we are interested in. 120802a95625SSomnath Kotur * Also, update the output tables with the current local values 120902a95625SSomnath Kotur * since that is what will be used by FW to accumulate 121002a95625SSomnath Kotur */ 121102a95625SSomnath Kotur static void bnxt_update_fc_pre_qstat(uint32_t *in_tbl, 121202a95625SSomnath Kotur uint64_t *out_tbl, 121302a95625SSomnath Kotur struct bnxt_filter_info *filter, 121402a95625SSomnath Kotur uint32_t *ptbl_cnt) 121502a95625SSomnath Kotur { 121602a95625SSomnath Kotur uint32_t in_tbl_cnt = *ptbl_cnt; 121702a95625SSomnath Kotur 121802a95625SSomnath Kotur in_tbl[in_tbl_cnt] = filter->flow_id; 121902a95625SSomnath Kotur out_tbl[2 * in_tbl_cnt] = filter->hw_stats.packets; 122002a95625SSomnath Kotur out_tbl[2 * in_tbl_cnt + 1] = filter->hw_stats.bytes; 122102a95625SSomnath Kotur in_tbl_cnt++; 122202a95625SSomnath Kotur *ptbl_cnt = in_tbl_cnt; 122302a95625SSomnath Kotur } 122402a95625SSomnath Kotur 122502a95625SSomnath Kotur /* Post issuing counter_qstats cmd, update the driver's local stat 122602a95625SSomnath Kotur * entries with the values DMA-ed by FW in the output table 122702a95625SSomnath Kotur */ 122802a95625SSomnath Kotur static void bnxt_update_fc_post_qstat(struct bnxt_filter_info *filter, 122902a95625SSomnath Kotur uint64_t *out_tbl, 123002a95625SSomnath Kotur uint32_t out_tbl_idx) 123102a95625SSomnath Kotur { 123202a95625SSomnath Kotur filter->hw_stats.packets = out_tbl[2 * out_tbl_idx]; 123302a95625SSomnath Kotur filter->hw_stats.bytes = out_tbl[(2 * out_tbl_idx) + 1]; 123402a95625SSomnath Kotur } 123502a95625SSomnath Kotur 123602a95625SSomnath Kotur static int bnxt_update_fc_tbl(struct bnxt *bp, uint16_t ctr, 123702a95625SSomnath Kotur struct bnxt_filter_info *en_tbl[], 123802a95625SSomnath Kotur uint16_t in_flow_cnt) 123902a95625SSomnath Kotur { 124002a95625SSomnath Kotur uint32_t *in_rx_tbl; 124102a95625SSomnath Kotur uint64_t *out_rx_tbl; 124202a95625SSomnath Kotur uint32_t in_rx_tbl_cnt = 0; 124302a95625SSomnath Kotur uint32_t out_rx_tbl_cnt = 0; 124402a95625SSomnath Kotur int i, rc = 0; 124502a95625SSomnath Kotur 12461e2f8acaSAjit Khaparde in_rx_tbl = (uint32_t *)bp->flow_stat->rx_fc_in_tbl.va; 12471e2f8acaSAjit Khaparde out_rx_tbl = (uint64_t *)bp->flow_stat->rx_fc_out_tbl.va; 124802a95625SSomnath Kotur 124902a95625SSomnath Kotur for (i = 0; i < in_flow_cnt; i++) { 125002a95625SSomnath Kotur if (!en_tbl[i]) 125102a95625SSomnath Kotur continue; 125202a95625SSomnath Kotur 125302a95625SSomnath Kotur /* Currently only ingress/Rx flows are supported anyway. */ 125402a95625SSomnath Kotur bnxt_update_fc_pre_qstat(in_rx_tbl, out_rx_tbl, 125502a95625SSomnath Kotur en_tbl[i], &in_rx_tbl_cnt); 125602a95625SSomnath Kotur } 125702a95625SSomnath Kotur 125802a95625SSomnath Kotur /* Currently only ingress/Rx flows are supported */ 125902a95625SSomnath Kotur if (in_rx_tbl_cnt) { 126002a95625SSomnath Kotur rc = bnxt_hwrm_cfa_counter_qstats(bp, BNXT_DIR_RX, ctr, 126102a95625SSomnath Kotur in_rx_tbl_cnt); 126202a95625SSomnath Kotur if (rc) 126302a95625SSomnath Kotur return rc; 126402a95625SSomnath Kotur } 126502a95625SSomnath Kotur 126602a95625SSomnath Kotur for (i = 0; i < in_flow_cnt; i++) { 126702a95625SSomnath Kotur if (!en_tbl[i]) 126802a95625SSomnath Kotur continue; 126902a95625SSomnath Kotur 127002a95625SSomnath Kotur /* Currently only ingress/Rx flows are supported */ 127102a95625SSomnath Kotur bnxt_update_fc_post_qstat(en_tbl[i], out_rx_tbl, 127202a95625SSomnath Kotur out_rx_tbl_cnt); 127302a95625SSomnath Kotur out_rx_tbl_cnt++; 127402a95625SSomnath Kotur } 127502a95625SSomnath Kotur 127602a95625SSomnath Kotur return rc; 127702a95625SSomnath Kotur } 127802a95625SSomnath Kotur 127902a95625SSomnath Kotur /* Walks through the list which has all the flows 128002a95625SSomnath Kotur * requesting for explicit flow counters. 128102a95625SSomnath Kotur */ 128202a95625SSomnath Kotur int bnxt_flow_stats_req(struct bnxt *bp) 128302a95625SSomnath Kotur { 128402a95625SSomnath Kotur int i; 128502a95625SSomnath Kotur int rc = 0; 128602a95625SSomnath Kotur struct rte_flow *flow; 128702a95625SSomnath Kotur uint16_t in_flow_tbl_cnt = 0; 128802a95625SSomnath Kotur struct bnxt_vnic_info *vnic = NULL; 12891e2f8acaSAjit Khaparde struct bnxt_filter_info *valid_en_tbl[bp->flow_stat->max_fc]; 129002a95625SSomnath Kotur uint16_t counter_type = CFA_COUNTER_CFG_IN_COUNTER_TYPE_FC; 129102a95625SSomnath Kotur 129202a95625SSomnath Kotur bnxt_acquire_flow_lock(bp); 129302a95625SSomnath Kotur for (i = 0; i < bp->max_vnics; i++) { 129402a95625SSomnath Kotur vnic = &bp->vnic_info[i]; 129502a95625SSomnath Kotur if (vnic && vnic->fw_vnic_id == INVALID_VNIC_ID) 129602a95625SSomnath Kotur continue; 129702a95625SSomnath Kotur 129802a95625SSomnath Kotur if (STAILQ_EMPTY(&vnic->flow_list)) 129902a95625SSomnath Kotur continue; 130002a95625SSomnath Kotur 130102a95625SSomnath Kotur STAILQ_FOREACH(flow, &vnic->flow_list, next) { 130202a95625SSomnath Kotur if (!flow || !flow->filter) 130302a95625SSomnath Kotur continue; 130402a95625SSomnath Kotur 130502a95625SSomnath Kotur valid_en_tbl[in_flow_tbl_cnt++] = flow->filter; 13061e2f8acaSAjit Khaparde if (in_flow_tbl_cnt >= bp->flow_stat->max_fc) { 130702a95625SSomnath Kotur rc = bnxt_update_fc_tbl(bp, counter_type, 130802a95625SSomnath Kotur valid_en_tbl, 130902a95625SSomnath Kotur in_flow_tbl_cnt); 131002a95625SSomnath Kotur if (rc) 131102a95625SSomnath Kotur goto err; 131202a95625SSomnath Kotur in_flow_tbl_cnt = 0; 131302a95625SSomnath Kotur continue; 131402a95625SSomnath Kotur } 131502a95625SSomnath Kotur } 131602a95625SSomnath Kotur } 131702a95625SSomnath Kotur 1318df212347SYunjian Wang if (!in_flow_tbl_cnt) { 1319df212347SYunjian Wang bnxt_release_flow_lock(bp); 132002a95625SSomnath Kotur goto out; 1321df212347SYunjian Wang } 132202a95625SSomnath Kotur 132302a95625SSomnath Kotur rc = bnxt_update_fc_tbl(bp, counter_type, valid_en_tbl, 132402a95625SSomnath Kotur in_flow_tbl_cnt); 132502a95625SSomnath Kotur if (!rc) { 132602a95625SSomnath Kotur bnxt_release_flow_lock(bp); 132702a95625SSomnath Kotur return 0; 132802a95625SSomnath Kotur } 132902a95625SSomnath Kotur 133002a95625SSomnath Kotur err: 133102a95625SSomnath Kotur /* If cmd fails once, no need of 133202a95625SSomnath Kotur * invoking again every second 133302a95625SSomnath Kotur */ 133402a95625SSomnath Kotur bnxt_release_flow_lock(bp); 133502a95625SSomnath Kotur bnxt_cancel_fc_thread(bp); 133602a95625SSomnath Kotur out: 133702a95625SSomnath Kotur return rc; 133802a95625SSomnath Kotur } 1339