LCOV - code coverage report
Current view: top level - drivers/net/hns3 - hns3_regs.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 235 0.0 %
Date: 2024-12-01 18:57:19 Functions: 0 16 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 138 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2018-2021 HiSilicon Limited.
       3                 :            :  */
       4                 :            : 
       5                 :            : #include <ethdev_pci.h>
       6                 :            : #include <rte_io.h>
       7                 :            : 
       8                 :            : #include "hns3_ethdev.h"
       9                 :            : #include "hns3_logs.h"
      10                 :            : #include "hns3_rxtx.h"
      11                 :            : #include "hns3_regs.h"
      12                 :            : 
      13                 :            : #define HNS3_64_BIT_REG_OUTPUT_SIZE (sizeof(uint64_t) / sizeof(uint32_t))
      14                 :            : 
      15                 :            : #define HNS3_MAX_MODULES_LEN 512
      16                 :            : 
      17                 :            : struct hns3_dirt_reg_entry {
      18                 :            :         const char *name;
      19                 :            :         uint32_t addr;
      20                 :            : };
      21                 :            : 
      22                 :            : static const struct hns3_dirt_reg_entry cmdq_reg_list[] = {
      23                 :            :         {"cmdq_tx_depth",             HNS3_CMDQ_TX_DEPTH_REG},
      24                 :            :         {"cmdq_tx_tail",              HNS3_CMDQ_TX_TAIL_REG},
      25                 :            :         {"cmdq_tx_head",              HNS3_CMDQ_TX_HEAD_REG},
      26                 :            :         {"cmdq_rx_depth",             HNS3_CMDQ_RX_DEPTH_REG},
      27                 :            :         {"cmdq_rx_tail",              HNS3_CMDQ_RX_TAIL_REG},
      28                 :            :         {"cmdq_rx_head",              HNS3_CMDQ_RX_HEAD_REG},
      29                 :            :         {"vector0_cmdq_src",          HNS3_VECTOR0_CMDQ_SRC_REG},
      30                 :            :         {"cmdq_intr_sts",             HNS3_CMDQ_INTR_STS_REG},
      31                 :            :         {"cmdq_intr_en",              HNS3_CMDQ_INTR_EN_REG},
      32                 :            :         {"cmdq_intr_gen",             HNS3_CMDQ_INTR_GEN_REG},
      33                 :            : };
      34                 :            : 
      35                 :            : static const struct hns3_dirt_reg_entry common_reg_list[] = {
      36                 :            :         {"misc_vector_reg_base",      HNS3_MISC_VECTOR_REG_BASE},
      37                 :            :         {"vector0_oter_en",           HNS3_VECTOR0_OTER_EN_REG},
      38                 :            :         {"misc_reset_sts",            HNS3_MISC_RESET_STS_REG},
      39                 :            :         {"vector0_other_int_sts",     HNS3_VECTOR0_OTHER_INT_STS_REG},
      40                 :            :         {"global_reset",              HNS3_GLOBAL_RESET_REG},
      41                 :            :         {"fun_rst_ing",                       HNS3_FUN_RST_ING},
      42                 :            :         {"gro_en",                    HNS3_GRO_EN_REG},
      43                 :            : };
      44                 :            : 
      45                 :            : static const struct hns3_dirt_reg_entry common_vf_reg_list[] = {
      46                 :            :         {"misc_vector_reg_base",      HNS3_MISC_VECTOR_REG_BASE},
      47                 :            :         {"fun_rst_ing",                       HNS3_FUN_RST_ING},
      48                 :            :         {"gro_en",                    HNS3_GRO_EN_REG},
      49                 :            : };
      50                 :            : 
      51                 :            : static const struct hns3_dirt_reg_entry ring_reg_list[] = {
      52                 :            :         {"ring_rx_bd_num",            HNS3_RING_RX_BD_NUM_REG},
      53                 :            :         {"ring_rx_bd_len",            HNS3_RING_RX_BD_LEN_REG},
      54                 :            :         {"ring_rx_en",                        HNS3_RING_RX_EN_REG},
      55                 :            :         {"ring_rx_merge_en",          HNS3_RING_RX_MERGE_EN_REG},
      56                 :            :         {"ring_rx_tail",              HNS3_RING_RX_TAIL_REG},
      57                 :            :         {"ring_rx_head",              HNS3_RING_RX_HEAD_REG},
      58                 :            :         {"ring_rx_fbdnum",            HNS3_RING_RX_FBDNUM_REG},
      59                 :            :         {"ring_rx_offset",            HNS3_RING_RX_OFFSET_REG},
      60                 :            :         {"ring_rx_fbd_offset",                HNS3_RING_RX_FBD_OFFSET_REG},
      61                 :            :         {"ring_rx_stash",             HNS3_RING_RX_STASH_REG},
      62                 :            :         {"ring_rx_bd_err",            HNS3_RING_RX_BD_ERR_REG},
      63                 :            :         {"ring_tx_bd_num",            HNS3_RING_TX_BD_NUM_REG},
      64                 :            :         {"ring_tx_en",                        HNS3_RING_TX_EN_REG},
      65                 :            :         {"ring_tx_priority",          HNS3_RING_TX_PRIORITY_REG},
      66                 :            :         {"ring_tx_tc",                        HNS3_RING_TX_TC_REG},
      67                 :            :         {"ring_tx_merge_en",          HNS3_RING_TX_MERGE_EN_REG},
      68                 :            :         {"ring_tx_tail",              HNS3_RING_TX_TAIL_REG},
      69                 :            :         {"ring_tx_head",              HNS3_RING_TX_HEAD_REG},
      70                 :            :         {"ring_tx_fbdnum",            HNS3_RING_TX_FBDNUM_REG},
      71                 :            :         {"ring_tx_offset",            HNS3_RING_TX_OFFSET_REG},
      72                 :            :         {"ring_tx_ebd_num",           HNS3_RING_TX_EBD_NUM_REG},
      73                 :            :         {"ring_tx_ebd_offset",                HNS3_RING_TX_EBD_OFFSET_REG},
      74                 :            :         {"ring_tx_bd_err",            HNS3_RING_TX_BD_ERR_REG},
      75                 :            :         {"ring_en",                   HNS3_RING_EN_REG},
      76                 :            : };
      77                 :            : 
      78                 :            : static const struct hns3_dirt_reg_entry tqp_intr_reg_list[] = {
      79                 :            :         {"tqp_intr_ctrl",             HNS3_TQP_INTR_CTRL_REG},
      80                 :            :         {"tqp_intr_gl0",              HNS3_TQP_INTR_GL0_REG},
      81                 :            :         {"tqp_intr_gl1",              HNS3_TQP_INTR_GL1_REG},
      82                 :            :         {"tqp_intr_gl2",              HNS3_TQP_INTR_GL2_REG},
      83                 :            :         {"tqp_intr_rl",                       HNS3_TQP_INTR_RL_REG},
      84                 :            : };
      85                 :            : 
      86                 :            : struct hns3_dfx_reg_entry {
      87                 :            :         /**
      88                 :            :          * name_v1 -- default register name for all platforms (HIP08/HIP09/newer).
      89                 :            :          * name_v2 -- register name different from the default for HIP09.
      90                 :            :          * If there are more platform with different register name, name_vXX is extended.
      91                 :            :          * If the platform is newer than HIP09, use default name.
      92                 :            :          */
      93                 :            :         const char *name_v1;
      94                 :            :         const char *name_v2;
      95                 :            : };
      96                 :            : 
      97                 :            : static struct hns3_dfx_reg_entry regs_32_bit_list[] = {
      98                 :            :         {"ssu_common_err_int"},
      99                 :            :         {"ssu_port_based_err_int"},
     100                 :            :         {"ssu_fifo_overflow_int"},
     101                 :            :         {"ssu_ets_tcg_int"},
     102                 :            :         {"ssu_bp_status_0"},
     103                 :            :         {"ssu_bp_status_1"},
     104                 :            : 
     105                 :            :         {"ssu_bp_status_2"},
     106                 :            :         {"ssu_bp_status_3"},
     107                 :            :         {"ssu_bp_status_4"},
     108                 :            :         {"ssu_bp_status_5"},
     109                 :            :         {"ssu_mac_tx_pfc_ind"},
     110                 :            :         {"ssu_mac_rx_pfc_ind"},
     111                 :            : 
     112                 :            :         {"ssu_rx_oq_drop_pkt_cnt"},
     113                 :            :         {"ssu_tx_oq_drop_pkt_cnt"},
     114                 :            : };
     115                 :            : 
     116                 :            : static struct hns3_dfx_reg_entry regs_64_bit_list[] = {
     117                 :            :         {"ppp_get_rx_pkt_cnt_l"},
     118                 :            :         {"ppp_get_rx_pkt_cnt_h"},
     119                 :            :         {"ppp_get_tx_pkt_cnt_l"},
     120                 :            :         {"ppp_get_tx_pkt_cnt_h"},
     121                 :            :         {"ppp_send_uc_prt2host_pkt_cnt_l"},
     122                 :            :         {"ppp_send_uc_prt2host_pkt_cnt_h"},
     123                 :            : 
     124                 :            :         {"ppp_send_uc_prt2prt_pkt_cnt_l"},
     125                 :            :         {"ppp_send_uc_prt2prt_pkt_cnt_h"},
     126                 :            :         {"ppp_send_uc_host2host_pkt_cnt_l"},
     127                 :            :         {"ppp_send_uc_host2host_pkt_cnt_h"},
     128                 :            :         {"ppp_send_uc_host2prt_pkt_cnt_l"},
     129                 :            :         {"ppp_send_uc_host2prt_pkt_cnt_h"},
     130                 :            :         {"ppp_send_mc_from_prt_cnt_l"},
     131                 :            :         {"ppp_send_mc_from_prt_cnt_h"},
     132                 :            : };
     133                 :            : 
     134                 :            : static struct hns3_dfx_reg_entry dfx_bios_common_reg_list[] = {
     135                 :            :         {"bios_rsv0"},
     136                 :            :         {"bp_cpu_state"},
     137                 :            :         {"dfx_msix_info_nic_0"},
     138                 :            :         {"dfx_msix_info_nic_1"},
     139                 :            :         {"dfx_msix_info_nic_2"},
     140                 :            :         {"dfx_msix_info_nic_3"},
     141                 :            : 
     142                 :            :         {"dfx_msix_info_roce_0"},
     143                 :            :         {"dfx_msix_info_roce_1"},
     144                 :            :         {"dfx_msix_info_roce_2"},
     145                 :            :         {"dfx_msix_info_roce_3"},
     146                 :            :         {"bios_rsv1"},
     147                 :            :         {"bios_rsv2"},
     148                 :            : };
     149                 :            : 
     150                 :            : static struct hns3_dfx_reg_entry dfx_ssu_reg_0_list[] = {
     151                 :            :         {"dfx_ssu0_rsv0"},
     152                 :            :         {"ssu_ets_port_status"},
     153                 :            :         {"ssu_ets_tcg_status"},
     154                 :            :         {"dfx_ssu0_rsv1"},
     155                 :            :         {"dfx_ssu0_rsv2"},
     156                 :            :         {"ssu_bp_status_0"},
     157                 :            : 
     158                 :            :         {"ssu_bp_status_1"},
     159                 :            :         {"ssu_bp_status_2"},
     160                 :            :         {"ssu_bp_status_3"},
     161                 :            :         {"ssu_bp_status_4"},
     162                 :            :         {"ssu_bp_status_5"},
     163                 :            :         {"ssu_mac_tx_pfc_ind"},
     164                 :            : 
     165                 :            :         {"mac_ssu_rx_pfc_ind"},
     166                 :            :         {"btmp_ageing_st_b0"},
     167                 :            :         {"btmp_ageing_st_b1"},
     168                 :            :         {"btmp_ageing_st_b2"},
     169                 :            :         {"dfx_ssu0_rsv3"},
     170                 :            :         {"dfx_ssu0_rsv4"},
     171                 :            : 
     172                 :            :         {"ssu_full_drop_num"},
     173                 :            :         {"ssu_part_drop_num"},
     174                 :            :         {"ppp_key_drop_num"},
     175                 :            :         {"ppp_rlt_drop_num"},
     176                 :            :         {"lo_pri_unicast_rlt_drop_num"},
     177                 :            :         {"hi_pri_multicast_rlt_drop_num"},
     178                 :            : 
     179                 :            :         {"lo_pri_multicast_rlt_drop_num"},
     180                 :            :         {"ncsi_packet_curr_buffer_cnt"},
     181                 :            :         {"btmp_ageing_rls_cnt_bank0",         "dfx_ssu0_rsv5"},
     182                 :            :         {"btmp_ageing_rls_cnt_bank1",         "dfx_ssu0_rsv6"},
     183                 :            :         {"btmp_ageing_rls_cnt_bank2",         "dfx_ssu0_rsv7"},
     184                 :            :         {"ssu_mb_rd_rlt_drop_cnt"},
     185                 :            : 
     186                 :            :         {"ssu_ppp_mac_key_num_l"},
     187                 :            :         {"ssu_ppp_mac_key_num_h"},
     188                 :            :         {"ssu_ppp_host_key_num_l"},
     189                 :            :         {"ssu_ppp_host_key_num_h"},
     190                 :            :         {"ppp_ssu_mac_rlt_num_l"},
     191                 :            :         {"ppp_ssu_mac_rlt_num_h"},
     192                 :            : 
     193                 :            :         {"ppp_ssu_host_rlt_num_l"},
     194                 :            :         {"ppp_ssu_host_rlt_num_h"},
     195                 :            :         {"ncsi_rx_packet_in_cnt_l"},
     196                 :            :         {"ncsi_rx_packet_in_cnt_h"},
     197                 :            :         {"ncsi_tx_packet_out_cnt_l"},
     198                 :            :         {"ncsi_tx_packet_out_cnt_h"},
     199                 :            : 
     200                 :            :         {"ssu_key_drop_num"},
     201                 :            :         {"mb_uncopy_num"},
     202                 :            :         {"rx_oq_drop_pkt_cnt"},
     203                 :            :         {"tx_oq_drop_pkt_cnt"},
     204                 :            :         {"bank_unbalance_drop_cnt"},
     205                 :            :         {"bank_unbalance_rx_drop_cnt"},
     206                 :            : 
     207                 :            :         {"nic_l2_eer_drop_pkt_cnt"},
     208                 :            :         {"roc_l2_eer_drop_pkt_cnt"},
     209                 :            :         {"nic_l2_eer_drop_pkt_cnt_rx"},
     210                 :            :         {"roc_l2_eer_drop_pkt_cnt_rx"},
     211                 :            :         {"rx_oq_glb_drop_pkt_cnt"},
     212                 :            :         {"dfx_ssu0_rsv8"},
     213                 :            : 
     214                 :            :         {"lo_pri_unicast_cur_cnt"},
     215                 :            :         {"hi_pri_multicast_cur_cnt"},
     216                 :            :         {"lo_pri_multicast_cur_cnt"},
     217                 :            :         {"dfx_ssu0_rsv9"},
     218                 :            :         {"dfx_ssu0_rsv10"},
     219                 :            :         {"dfx_ssu0_rsv11"},
     220                 :            : };
     221                 :            : 
     222                 :            : static struct hns3_dfx_reg_entry dfx_ssu_reg_1_list[] = {
     223                 :            :         {"dfx_ssu1_prt_id"},
     224                 :            :         {"packet_tc_curr_buffer_cnt_0"},
     225                 :            :         {"packet_tc_curr_buffer_cnt_1"},
     226                 :            :         {"packet_tc_curr_buffer_cnt_2"},
     227                 :            :         {"packet_tc_curr_buffer_cnt_3"},
     228                 :            :         {"packet_tc_curr_buffer_cnt_4"},
     229                 :            : 
     230                 :            :         {"packet_tc_curr_buffer_cnt_5"},
     231                 :            :         {"packet_tc_curr_buffer_cnt_6"},
     232                 :            :         {"packet_tc_curr_buffer_cnt_7"},
     233                 :            :         {"packet_curr_buffer_cnt"},
     234                 :            :         {"dfx_ssu1_rsv0"},
     235                 :            :         {"dfx_ssu1_rsv1"},
     236                 :            : 
     237                 :            :         {"rx_packet_in_cnt_l"},
     238                 :            :         {"rx_packet_in_cnt_h"},
     239                 :            :         {"rx_packet_out_cnt_l"},
     240                 :            :         {"rx_packet_out_cnt_h"},
     241                 :            :         {"tx_packet_in_cnt_l"},
     242                 :            :         {"tx_packet_in_cnt_h"},
     243                 :            : 
     244                 :            :         {"tx_packet_out_cnt_l"},
     245                 :            :         {"tx_packet_out_cnt_h"},
     246                 :            :         {"roc_rx_packet_in_cnt_l"},
     247                 :            :         {"roc_rx_packet_in_cnt_h"},
     248                 :            :         {"roc_tx_packet_in_cnt_l"},
     249                 :            :         {"roc_tx_packet_in_cnt_h"},
     250                 :            : 
     251                 :            :         {"rx_packet_tc_in_cnt_0_l"},
     252                 :            :         {"rx_packet_tc_in_cnt_0_h"},
     253                 :            :         {"rx_packet_tc_in_cnt_1_l"},
     254                 :            :         {"rx_packet_tc_in_cnt_1_h"},
     255                 :            :         {"rx_packet_tc_in_cnt_2_l"},
     256                 :            :         {"rx_packet_tc_in_cnt_2_h"},
     257                 :            : 
     258                 :            :         {"rx_packet_tc_in_cnt_3_l"},
     259                 :            :         {"rx_packet_tc_in_cnt_3_h"},
     260                 :            :         {"rx_packet_tc_in_cnt_4_l"},
     261                 :            :         {"rx_packet_tc_in_cnt_4_h"},
     262                 :            :         {"rx_packet_tc_in_cnt_5_l"},
     263                 :            :         {"rx_packet_tc_in_cnt_5_h"},
     264                 :            : 
     265                 :            :         {"rx_packet_tc_in_cnt_6_l"},
     266                 :            :         {"rx_packet_tc_in_cnt_6_h"},
     267                 :            :         {"rx_packet_tc_in_cnt_7_l"},
     268                 :            :         {"rx_packet_tc_in_cnt_7_h"},
     269                 :            :         {"rx_packet_tc_out_cnt_0_l"},
     270                 :            :         {"rx_packet_tc_out_cnt_0_h"},
     271                 :            : 
     272                 :            :         {"rx_packet_tc_out_cnt_1_l"},
     273                 :            :         {"rx_packet_tc_out_cnt_1_h"},
     274                 :            :         {"rx_packet_tc_out_cnt_2_l"},
     275                 :            :         {"rx_packet_tc_out_cnt_2_h"},
     276                 :            :         {"rx_packet_tc_out_cnt_3_l"},
     277                 :            :         {"rx_packet_tc_out_cnt_3_h"},
     278                 :            : 
     279                 :            :         {"rx_packet_tc_out_cnt_4_l"},
     280                 :            :         {"rx_packet_tc_out_cnt_4_h"},
     281                 :            :         {"rx_packet_tc_out_cnt_5_l"},
     282                 :            :         {"rx_packet_tc_out_cnt_5_h"},
     283                 :            :         {"rx_packet_tc_out_cnt_6_l"},
     284                 :            :         {"rx_packet_tc_out_cnt_6_h"},
     285                 :            : 
     286                 :            :         {"rx_packet_tc_out_cnt_7_l"},
     287                 :            :         {"rx_packet_tc_out_cnt_7_h"},
     288                 :            :         {"tx_packet_tc_in_cnt_0_l"},
     289                 :            :         {"tx_packet_tc_in_cnt_0_h"},
     290                 :            :         {"tx_packet_tc_in_cnt_1_l"},
     291                 :            :         {"tx_packet_tc_in_cnt_1_h"},
     292                 :            : 
     293                 :            :         {"tx_packet_tc_in_cnt_2_l"},
     294                 :            :         {"tx_packet_tc_in_cnt_2_h"},
     295                 :            :         {"tx_packet_tc_in_cnt_3_l"},
     296                 :            :         {"tx_packet_tc_in_cnt_3_h"},
     297                 :            :         {"tx_packet_tc_in_cnt_4_l"},
     298                 :            :         {"tx_packet_tc_in_cnt_4_h"},
     299                 :            : 
     300                 :            :         {"tx_packet_tc_in_cnt_5_l"},
     301                 :            :         {"tx_packet_tc_in_cnt_5_h"},
     302                 :            :         {"tx_packet_tc_in_cnt_6_l"},
     303                 :            :         {"tx_packet_tc_in_cnt_6_h"},
     304                 :            :         {"tx_packet_tc_in_cnt_7_l"},
     305                 :            :         {"tx_packet_tc_in_cnt_7_h"},
     306                 :            : 
     307                 :            :         {"tx_packet_tc_out_cnt_0_l"},
     308                 :            :         {"tx_packet_tc_out_cnt_0_h"},
     309                 :            :         {"tx_packet_tc_out_cnt_1_l"},
     310                 :            :         {"tx_packet_tc_out_cnt_1_h"},
     311                 :            :         {"tx_packet_tc_out_cnt_2_l"},
     312                 :            :         {"tx_packet_tc_out_cnt_2_h"},
     313                 :            : 
     314                 :            :         {"tx_packet_tc_out_cnt_3_l"},
     315                 :            :         {"tx_packet_tc_out_cnt_3_h"},
     316                 :            :         {"tx_packet_tc_out_cnt_4_l"},
     317                 :            :         {"tx_packet_tc_out_cnt_4_h"},
     318                 :            :         {"tx_packet_tc_out_cnt_5_l"},
     319                 :            :         {"tx_packet_tc_out_cnt_5_h"},
     320                 :            : 
     321                 :            :         {"tx_packet_tc_out_cnt_6_l"},
     322                 :            :         {"tx_packet_tc_out_cnt_6_h"},
     323                 :            :         {"tx_packet_tc_out_cnt_7_l"},
     324                 :            :         {"tx_packet_tc_out_cnt_7_h"},
     325                 :            :         {"dfx_ssu1_rsv2"},
     326                 :            :         {"dfx_ssu1_rsv3"},
     327                 :            : };
     328                 :            : 
     329                 :            : static struct hns3_dfx_reg_entry dfx_igu_egu_reg_list[] = {
     330                 :            :         {"igu_egu_prt_id"},
     331                 :            :         {"igu_rx_err_pkt"},
     332                 :            :         {"igu_rx_no_sof_pkt"},
     333                 :            :         {"egu_tx_1588_short_pkt"},
     334                 :            :         {"egu_tx_1588_pkt"},
     335                 :            :         {"egu_tx_1588_err_pkt"},
     336                 :            : 
     337                 :            :         {"igu_rx_out_l2_pkt"},
     338                 :            :         {"igu_rx_out_l3_pkt"},
     339                 :            :         {"igu_rx_out_l4_pkt"},
     340                 :            :         {"igu_rx_in_l2_pkt"},
     341                 :            :         {"igu_rx_in_l3_pkt"},
     342                 :            :         {"igu_rx_in_l4_pkt"},
     343                 :            : 
     344                 :            :         {"igu_rx_el3e_pkt"},
     345                 :            :         {"igu_rx_el4e_pkt"},
     346                 :            :         {"igu_rx_l3e_pkt"},
     347                 :            :         {"igu_rx_l4e_pkt"},
     348                 :            :         {"igu_rx_rocee_pkt"},
     349                 :            :         {"igu_rx_out_udp0_pkt"},
     350                 :            : 
     351                 :            :         {"igu_rx_in_udp0_pkt"},
     352                 :            :         {"igu_egu_rsv0",              "igu_egu_mul_car_drop_pkt_cnt_l"},
     353                 :            :         {"igu_egu_rsv1",              "igu_egu_mul_car_drop_pkt_cnt_h"},
     354                 :            :         {"igu_egu_rsv2",              "igu_egu_bro_car_drop_pkt_cnt_l"},
     355                 :            :         {"igu_egu_rsv3",              "igu_egu_bro_car_drop_pkt_cnt_h"},
     356                 :            :         {"igu_egu_rsv4",              "igu_egu_rsv0"},
     357                 :            : 
     358                 :            :         {"igu_rx_oversize_pkt_l"},
     359                 :            :         {"igu_rx_oversize_pkt_h"},
     360                 :            :         {"igu_rx_undersize_pkt_l"},
     361                 :            :         {"igu_rx_undersize_pkt_h"},
     362                 :            :         {"igu_rx_out_all_pkt_l"},
     363                 :            :         {"igu_rx_out_all_pkt_h"},
     364                 :            : 
     365                 :            :         {"igu_tx_out_all_pkt_l"},
     366                 :            :         {"igu_tx_out_all_pkt_h"},
     367                 :            :         {"igu_rx_uni_pkt_l"},
     368                 :            :         {"igu_rx_uni_pkt_h"},
     369                 :            :         {"igu_rx_multi_pkt_l"},
     370                 :            :         {"igu_rx_multi_pkt_h"},
     371                 :            : 
     372                 :            :         {"igu_rx_broad_pkt_l"},
     373                 :            :         {"igu_rx_broad_pkt_h"},
     374                 :            :         {"egu_tx_out_all_pkt_l"},
     375                 :            :         {"egu_tx_out_all_pkt_h"},
     376                 :            :         {"egu_tx_uni_pkt_l"},
     377                 :            :         {"egu_tx_uni_pkt_h"},
     378                 :            : 
     379                 :            :         {"egu_tx_multi_pkt_l"},
     380                 :            :         {"egu_tx_multi_pkt_h"},
     381                 :            :         {"egu_tx_broad_pkt_l"},
     382                 :            :         {"egu_tx_broad_pkt_h"},
     383                 :            :         {"igu_tx_key_num_l"},
     384                 :            :         {"igu_tx_key_num_h"},
     385                 :            : 
     386                 :            :         {"igu_rx_non_tun_pkt_l"},
     387                 :            :         {"igu_rx_non_tun_pkt_h"},
     388                 :            :         {"igu_rx_tun_pkt_l"},
     389                 :            :         {"igu_rx_tun_pkt_h"},
     390                 :            :         {"igu_egu_rsv5"},
     391                 :            :         {"igu_egu_rsv6"},
     392                 :            : };
     393                 :            : 
     394                 :            : static struct hns3_dfx_reg_entry dfx_rpu_reg_0_list[] = {
     395                 :            :         {"rpu_tc_queue_num",          "rpu_currport_tnl_index"},
     396                 :            :         {"rpu_fsm_dfx_st0"},
     397                 :            :         {"rpu_fsm_dfx_st1"},
     398                 :            :         {"rpu_rpu_rx_pkt_drop_cnt"},
     399                 :            :         {"rpu_buf_wait_timeout"},
     400                 :            :         {"rpu_buf_wait_timeout_qid"},
     401                 :            : };
     402                 :            : 
     403                 :            : static struct hns3_dfx_reg_entry dfx_rpu_reg_1_list[] = {
     404                 :            :         {"rpu_rsv0"},
     405                 :            :         {"rpu_fifo_dfx_st0"},
     406                 :            :         {"rpu_fifo_dfx_st1"},
     407                 :            :         {"rpu_fifo_dfx_st2"},
     408                 :            :         {"rpu_fifo_dfx_st3"},
     409                 :            :         {"rpu_fifo_dfx_st4"},
     410                 :            : 
     411                 :            :         {"rpu_fifo_dfx_st5"},
     412                 :            :         {"rpu_rsv1"},
     413                 :            :         {"rpu_rsv2"},
     414                 :            :         {"rpu_rsv3"},
     415                 :            :         {"rpu_rsv4"},
     416                 :            :         {"rpu_rsv5"},
     417                 :            : };
     418                 :            : 
     419                 :            : static struct hns3_dfx_reg_entry dfx_ncsi_reg_list[] = {
     420                 :            :         {"ncsi_rsv0"},
     421                 :            :         {"ncsi_egu_tx_fifo_sts"},
     422                 :            :         {"ncsi_pause_status"},
     423                 :            :         {"ncsi_rx_ctrl_dmac_err_cnt"},
     424                 :            :         {"ncsi_rx_ctrl_smac_err_cnt"},
     425                 :            :         {"ncsi_rx_ctrl_cks_err_cnt"},
     426                 :            : 
     427                 :            :         {"ncsi_rx_ctrl_pkt_err_cnt"},
     428                 :            :         {"ncsi_rx_pt_dmac_err_cnt"},
     429                 :            :         {"ncsi_rx_pt_smac_err_cnt"},
     430                 :            :         {"ncsi_rx_pt_pkt_cnt"},
     431                 :            :         {"ncsi_rx_fcs_err_cnt"},
     432                 :            :         {"ncsi_tx_ctrl_dmac_err_cnt"},
     433                 :            : 
     434                 :            :         {"ncsi_tx_ctrl_smac_err_cnt"},
     435                 :            :         {"ncsi_tx_ctrl_pkt_cnt"},
     436                 :            :         {"ncsi_tx_pt_dmac_err_cnt"},
     437                 :            :         {"ncsi_tx_pt_smac_err_cnt"},
     438                 :            :         {"ncsi_tx_pt_pkt_cnt"},
     439                 :            :         {"ncsi_tx_pt_pkt_trun_cnt"},
     440                 :            : 
     441                 :            :         {"ncsi_tx_pt_pkt_err_cnt"},
     442                 :            :         {"ncsi_tx_ctrl_pkt_err_cnt"},
     443                 :            :         {"ncsi_rx_ctrl_pkt_trun_cnt"},
     444                 :            :         {"ncsi_rx_ctrl_pkt_cflit_cnt"},
     445                 :            :         {"ncsi_rsv1"},
     446                 :            :         {"ncsi_rsv2"},
     447                 :            : 
     448                 :            :         {"ncsi_mac_rx_octets_ok"},
     449                 :            :         {"ncsi_mac_rx_octets_bad"},
     450                 :            :         {"ncsi_mac_rx_uc_pkts"},
     451                 :            :         {"ncsi_mac_rx_mc_pkts"},
     452                 :            :         {"ncsi_mac_rx_bc_pkts"},
     453                 :            :         {"ncsi_mac_rx_pkts_64octets"},
     454                 :            : 
     455                 :            :         {"ncsi_mac_rx_pkts_64to127_octets"},
     456                 :            :         {"ncsi_mac_rx_pkts_128to255_octets"},
     457                 :            :         {"ncsi_mac_rx_pkts_256to511_octets"},
     458                 :            :         {"ncsi_mac_rx_pkts_512to1023_octets"},
     459                 :            :         {"ncsi_mac_rx_pkts_1024to1518_octets"},
     460                 :            :         {"ncsi_mac_rx_pkts_1519tomax_octets"},
     461                 :            : 
     462                 :            :         {"ncsi_mac_rx_fcs_errors"},
     463                 :            :         {"ncsi_mac_rx_long_errors"},
     464                 :            :         {"ncsi_mac_rx_jabber_errors"},
     465                 :            :         {"ncsi_mac_rx_runt_err_cnt"},
     466                 :            :         {"ncsi_mac_rx_short_err_cnt"},
     467                 :            :         {"ncsi_mac_rx_filt_pkt_cnt"},
     468                 :            : 
     469                 :            :         {"ncsi_mac_rx_octets_total_filt"},
     470                 :            :         {"ncsi_mac_tx_octets_ok"},
     471                 :            :         {"ncsi_mac_tx_octets_bad"},
     472                 :            :         {"ncsi_mac_tx_uc_pkts"},
     473                 :            :         {"ncsi_mac_tx_mc_pkts"},
     474                 :            :         {"ncsi_mac_tx_bc_pkts"},
     475                 :            : 
     476                 :            :         {"ncsi_mac_tx_pkts_64octets"},
     477                 :            :         {"ncsi_mac_tx_pkts_64to127_octets"},
     478                 :            :         {"ncsi_mac_tx_pkts_128to255_octets"},
     479                 :            :         {"ncsi_mac_tx_pkts_256to511_octets"},
     480                 :            :         {"ncsi_mac_tx_pkts_512to1023_octets"},
     481                 :            :         {"ncsi_mac_tx_pkts_1024to1518_octets"},
     482                 :            : 
     483                 :            :         {"ncsi_mac_tx_pkts_1519tomax_octets"},
     484                 :            :         {"ncsi_mac_tx_underrun"},
     485                 :            :         {"ncsi_mac_tx_crc_error"},
     486                 :            :         {"ncsi_mac_tx_pause_frames"},
     487                 :            :         {"ncsi_mac_rx_pad_pkts"},
     488                 :            :         {"ncsi_mac_rx_pause_frames"},
     489                 :            : };
     490                 :            : 
     491                 :            : static struct hns3_dfx_reg_entry dfx_rtc_reg_list[] = {
     492                 :            :         {"rtc_rsv0"},
     493                 :            :         {"lge_igu_afifo_dfx_0"},
     494                 :            :         {"lge_igu_afifo_dfx_1"},
     495                 :            :         {"lge_igu_afifo_dfx_2"},
     496                 :            :         {"lge_igu_afifo_dfx_3"},
     497                 :            :         {"lge_igu_afifo_dfx_4"},
     498                 :            : 
     499                 :            :         {"lge_igu_afifo_dfx_5"},
     500                 :            :         {"lge_igu_afifo_dfx_6"},
     501                 :            :         {"lge_igu_afifo_dfx_7"},
     502                 :            :         {"lge_egu_afifo_dfx_0"},
     503                 :            :         {"lge_egu_afifo_dfx_1"},
     504                 :            :         {"lge_egu_afifo_dfx_2"},
     505                 :            : 
     506                 :            :         {"lge_egu_afifo_dfx_3"},
     507                 :            :         {"lge_egu_afifo_dfx_4"},
     508                 :            :         {"lge_egu_afifo_dfx_5"},
     509                 :            :         {"lge_egu_afifo_dfx_6"},
     510                 :            :         {"lge_egu_afifo_dfx_7"},
     511                 :            :         {"cge_igu_afifo_dfx_0"},
     512                 :            : 
     513                 :            :         {"cge_igu_afifo_dfx_1"},
     514                 :            :         {"cge_egu_afifo_dfx_0"},
     515                 :            :         {"cge_egu_afifo_dfx_i"},
     516                 :            :         {"rtc_rsv1"},
     517                 :            :         {"rtc_rsv2"},
     518                 :            :         {"rtc_rsv3"},
     519                 :            : };
     520                 :            : 
     521                 :            : static struct hns3_dfx_reg_entry dfx_ppp_reg_list[] = {
     522                 :            :         {"ppp_rsv0"},
     523                 :            :         {"ppp_drop_from_prt_pkt_cnt"},
     524                 :            :         {"ppp_drop_from_host_pkt_cnt"},
     525                 :            :         {"ppp_drop_tx_vlan_proc_cnt"},
     526                 :            :         {"ppp_drop_mng_cnt"},
     527                 :            :         {"ppp_drop_fd_cnt"},
     528                 :            : 
     529                 :            :         {"ppp_drop_no_dst_cnt"},
     530                 :            :         {"ppp_drop_mc_mbid_full_cnt"},
     531                 :            :         {"ppp_drop_sc_filtered"},
     532                 :            :         {"ppp_ppp_mc_drop_pkt_cnt"},
     533                 :            :         {"ppp_drop_pt_cnt"},
     534                 :            :         {"ppp_drop_mac_anti_spoof_cnt"},
     535                 :            : 
     536                 :            :         {"ppp_drop_ig_vfv_cnt"},
     537                 :            :         {"ppp_drop_ig_prtv_cnt"},
     538                 :            :         {"ppp_drop_cnm_pfc_pause_cnt"},
     539                 :            :         {"ppp_drop_torus_tc_cnt"},
     540                 :            :         {"ppp_drop_torus_lpbk_cnt"},
     541                 :            :         {"ppp_ppp_hfs_sts"},
     542                 :            : 
     543                 :            :         {"ppp_mc_rslt_sts"},
     544                 :            :         {"ppp_p3u_sts"},
     545                 :            :         {"ppp_rslt_descr_sts",                "ppp_rsv1"},
     546                 :            :         {"ppp_umv_sts_0"},
     547                 :            :         {"ppp_umv_sts_1"},
     548                 :            :         {"ppp_vfv_sts"},
     549                 :            : 
     550                 :            :         {"ppp_gro_key_cnt"},
     551                 :            :         {"ppp_gro_info_cnt"},
     552                 :            :         {"ppp_gro_drop_cnt"},
     553                 :            :         {"ppp_gro_out_cnt"},
     554                 :            :         {"ppp_gro_key_match_data_cnt"},
     555                 :            :         {"ppp_gro_key_match_tcam_cnt"},
     556                 :            : 
     557                 :            :         {"ppp_gro_info_match_cnt"},
     558                 :            :         {"ppp_gro_free_entry_cnt"},
     559                 :            :         {"ppp_gro_inner_dfx_signal"},
     560                 :            :         {"ppp_rsv2"},
     561                 :            :         {"ppp_rsv3"},
     562                 :            :         {"ppp_rsv4"},
     563                 :            : 
     564                 :            :         {"ppp_get_rx_pkt_cnt_l"},
     565                 :            :         {"ppp_get_rx_pkt_cnt_h"},
     566                 :            :         {"ppp_get_tx_pkt_cnt_l"},
     567                 :            :         {"ppp_get_tx_pkt_cnt_h"},
     568                 :            :         {"ppp_send_uc_prt2host_pkt_cnt_l"},
     569                 :            :         {"ppp_send_uc_prt2host_pkt_cnt_h"},
     570                 :            : 
     571                 :            :         {"ppp_send_uc_prt2prt_pkt_cnt_l"},
     572                 :            :         {"ppp_send_uc_prt2prt_pkt_cnt_h"},
     573                 :            :         {"ppp_send_uc_host2host_pkt_cnt_l"},
     574                 :            :         {"ppp_send_uc_host2host_pkt_cnt_h"},
     575                 :            :         {"ppp_send_uc_host2prt_pkt_cnt_l"},
     576                 :            :         {"ppp_send_uc_host2prt_pkt_cnt_h"},
     577                 :            : 
     578                 :            :         {"ppp_send_mc_from_prt_cnt_l"},
     579                 :            :         {"ppp_send_mc_from_prt_cnt_h"},
     580                 :            :         {"ppp_send_mc_from_host_cnt_l"},
     581                 :            :         {"ppp_send_mc_from_host_cnt_h"},
     582                 :            :         {"ppp_ssu_mc_rd_cnt_l"},
     583                 :            :         {"ppp_ssu_mc_rd_cnt_h"},
     584                 :            : 
     585                 :            :         {"ppp_ssu_mc_drop_cnt_l"},
     586                 :            :         {"ppp_ssu_mc_drop_cnt_h"},
     587                 :            :         {"ppp_ssu_mc_rd_pkt_cnt_l"},
     588                 :            :         {"ppp_ssu_mc_rd_pkt_cnt_h"},
     589                 :            :         {"ppp_mc_2host_pkt_cnt_l"},
     590                 :            :         {"ppp_mc_2host_pkt_cnt_h"},
     591                 :            : 
     592                 :            :         {"ppp_mc_2prt_pkt_cnt_l"},
     593                 :            :         {"ppp_mc_2prt_pkt_cnt_h"},
     594                 :            :         {"ppp_ntsnos_pkt_cnt_l"},
     595                 :            :         {"ppp_ntsnos_pkt_cnt_h"},
     596                 :            :         {"ppp_ntup_pkt_cnt_l"},
     597                 :            :         {"ppp_ntup_pkt_cnt_h"},
     598                 :            : 
     599                 :            :         {"ppp_ntlcl_pkt_cnt_l"},
     600                 :            :         {"ppp_ntlcl_pkt_cnt_h"},
     601                 :            :         {"ppp_nttgt_pkt_cnt_l"},
     602                 :            :         {"ppp_nttgt_pkt_cnt_h"},
     603                 :            :         {"ppp_rtns_pkt_cnt_l"},
     604                 :            :         {"ppp_rtns_pkt_cnt_h"},
     605                 :            : 
     606                 :            :         {"ppp_rtlpbk_pkt_cnt_l"},
     607                 :            :         {"ppp_rtlpbk_pkt_cnt_h"},
     608                 :            :         {"ppp_nr_pkt_cnt_l"},
     609                 :            :         {"ppp_nr_pkt_cnt_h"},
     610                 :            :         {"ppp_rr_pkt_cnt_l"},
     611                 :            :         {"ppp_rr_pkt_cnt_h"},
     612                 :            : 
     613                 :            :         {"ppp_mng_tbl_hit_cnt_l"},
     614                 :            :         {"ppp_mng_tbl_hit_cnt_h"},
     615                 :            :         {"ppp_fd_tbl_hit_cnt_l"},
     616                 :            :         {"ppp_fd_tbl_hit_cnt_h"},
     617                 :            :         {"ppp_fd_lkup_cnt_l"},
     618                 :            :         {"ppp_fd_lkup_cnt_h"},
     619                 :            : 
     620                 :            :         {"ppp_bc_hit_cnt"},
     621                 :            :         {"ppp_bc_hit_cnt_h"},
     622                 :            :         {"ppp_um_tbl_uc_hit_cnt"},
     623                 :            :         {"ppp_um_tbl_uc_hit_cnt_h"},
     624                 :            :         {"ppp_um_tbl_mc_hit_cnt"},
     625                 :            :         {"ppp_um_tbl_mc_hit_cnt_h"},
     626                 :            : 
     627                 :            :         {"ppp_um_tbl_vmdq1_hit_cnt_l",        "ppp_um_tbl_snq_hit_cnt_l"},
     628                 :            :         {"ppp_um_tbl_vmdq1_hit_cnt_h",        "ppp_um_tbl_snq_hit_cnt_h"},
     629                 :            :         {"ppp_mta_tbl_hit_cnt_l",     "ppp_rsv5"},
     630                 :            :         {"ppp_mta_tbl_hit_cnt_h",     "ppp_rsv6"},
     631                 :            :         {"ppp_fwd_bonding_hit_cnt_l"},
     632                 :            :         {"ppp_fwd_bonding_hit_cnt_h"},
     633                 :            : 
     634                 :            :         {"ppp_promisc_tbl_hit_cnt_l"},
     635                 :            :         {"ppp_promisc_tbl_hit_cnt_h"},
     636                 :            :         {"ppp_get_tunl_pkt_cnt_l"},
     637                 :            :         {"ppp_get_tunl_pkt_cnt_h"},
     638                 :            :         {"ppp_get_bmc_pkt_cnt_l"},
     639                 :            :         {"ppp_get_bmc_pkt_cnt_h"},
     640                 :            : 
     641                 :            :         {"ppp_send_uc_prt2bmc_pkt_cnt_l"},
     642                 :            :         {"ppp_send_uc_prt2bmc_pkt_cnt_h"},
     643                 :            :         {"ppp_send_uc_host2bmc_pkt_cnt_l"},
     644                 :            :         {"ppp_send_uc_host2bmc_pkt_cnt_h"},
     645                 :            :         {"ppp_send_uc_bmc2host_pkt_cnt_l"},
     646                 :            :         {"ppp_send_uc_bmc2host_pkt_cnt_h"},
     647                 :            : 
     648                 :            :         {"ppp_send_uc_bmc2prt_pkt_cnt_l"},
     649                 :            :         {"ppp_send_uc_bmc2prt_pkt_cnt_h"},
     650                 :            :         {"ppp_mc_2bmc_pkt_cnt_l"},
     651                 :            :         {"ppp_mc_2bmc_pkt_cnt_h"},
     652                 :            :         {"ppp_vlan_mirr_cnt_l",               "ppp_rsv7"},
     653                 :            :         {"ppp_vlan_mirr_cnt_h",               "ppp_rsv8"},
     654                 :            : 
     655                 :            :         {"ppp_ig_mirr_cnt_l",         "ppp_rsv9"},
     656                 :            :         {"ppp_ig_mirr_cnt_h",         "ppp_rsv10"},
     657                 :            :         {"ppp_eg_mirr_cnt_l",         "ppp_rsv11"},
     658                 :            :         {"ppp_eg_mirr_cnt_h",         "ppp_rsv12"},
     659                 :            :         {"ppp_rx_default_host_hit_cnt_l"},
     660                 :            :         {"ppp_rx_default_host_hit_cnt_h"},
     661                 :            : 
     662                 :            :         {"ppp_lan_pair_cnt_l"},
     663                 :            :         {"ppp_lan_pair_cnt_h"},
     664                 :            :         {"ppp_um_tbl_mc_hit_pkt_cnt_l"},
     665                 :            :         {"ppp_um_tbl_mc_hit_pkt_cnt_h"},
     666                 :            :         {"ppp_mta_tbl_hit_pkt_cnt_l"},
     667                 :            :         {"ppp_mta_tbl_hit_pkt_cnt_h"},
     668                 :            : 
     669                 :            :         {"ppp_promisc_tbl_hit_pkt_cnt_l"},
     670                 :            :         {"ppp_promisc_tbl_hit_pkt_cnt_h"},
     671                 :            :         {"ppp_rsv13"},
     672                 :            :         {"ppp_rsv14"},
     673                 :            :         {"ppp_rsv15"},
     674                 :            :         {"ppp_rsv16"},
     675                 :            : };
     676                 :            : 
     677                 :            : static struct hns3_dfx_reg_entry dfx_rcb_reg_list[] = {
     678                 :            :         {"rcb_rsv0"},
     679                 :            :         {"rcb_fsm_dfx_st0"},
     680                 :            :         {"rcb_fsm_dfx_st1"},
     681                 :            :         {"rcb_fsm_dfx_st2"},
     682                 :            :         {"rcb_fifo_dfx_st0"},
     683                 :            :         {"rcb_fifo_dfx_st1"},
     684                 :            : 
     685                 :            :         {"rcb_fifo_dfx_st2"},
     686                 :            :         {"rcb_fifo_dfx_st3"},
     687                 :            :         {"rcb_fifo_dfx_st4"},
     688                 :            :         {"rcb_fifo_dfx_st5"},
     689                 :            :         {"rcb_fifo_dfx_st6"},
     690                 :            :         {"rcb_fifo_dfx_st7"},
     691                 :            : 
     692                 :            :         {"rcb_fifo_dfx_st8"},
     693                 :            :         {"rcb_fifo_dfx_st9"},
     694                 :            :         {"rcb_fifo_dfx_st10"},
     695                 :            :         {"rcb_fifo_dfx_st11"},
     696                 :            :         {"rcb_q_credit_vld_0"},
     697                 :            :         {"rcb_q_credit_vld_1"},
     698                 :            : 
     699                 :            :         {"rcb_q_credit_vld_2"},
     700                 :            :         {"rcb_q_credit_vld_3"},
     701                 :            :         {"rcb_q_credit_vld_4"},
     702                 :            :         {"rcb_q_credit_vld_5"},
     703                 :            :         {"rcb_q_credit_vld_6"},
     704                 :            :         {"rcb_q_credit_vld_7"},
     705                 :            : 
     706                 :            :         {"rcb_q_credit_vld_8"},
     707                 :            :         {"rcb_q_credit_vld_9"},
     708                 :            :         {"rcb_q_credit_vld_10"},
     709                 :            :         {"rcb_q_credit_vld_11"},
     710                 :            :         {"rcb_q_credit_vld_12"},
     711                 :            :         {"rcb_q_credit_vld_13"},
     712                 :            : 
     713                 :            :         {"rcb_q_credit_vld_14"},
     714                 :            :         {"rcb_q_credit_vld_15"},
     715                 :            :         {"rcb_q_credit_vld_16"},
     716                 :            :         {"rcb_q_credit_vld_17"},
     717                 :            :         {"rcb_q_credit_vld_18"},
     718                 :            :         {"rcb_q_credit_vld_19"},
     719                 :            : 
     720                 :            :         {"rcb_q_credit_vld_20"},
     721                 :            :         {"rcb_q_credit_vld_21"},
     722                 :            :         {"rcb_q_credit_vld_22"},
     723                 :            :         {"rcb_q_credit_vld_23"},
     724                 :            :         {"rcb_q_credit_vld_24"},
     725                 :            :         {"rcb_q_credit_vld_25"},
     726                 :            : 
     727                 :            :         {"rcb_q_credit_vld_26"},
     728                 :            :         {"rcb_q_credit_vld_27"},
     729                 :            :         {"rcb_q_credit_vld_28"},
     730                 :            :         {"rcb_q_credit_vld_29"},
     731                 :            :         {"rcb_q_credit_vld_30"},
     732                 :            :         {"rcb_q_credit_vld_31"},
     733                 :            : 
     734                 :            :         {"rcb_gro_bd_serr_cnt"},
     735                 :            :         {"rcb_gro_context_serr_cnt"},
     736                 :            :         {"rcb_rx_stash_cfg_serr_cnt"},
     737                 :            :         {"rcb_axi_rd_fbd_serr_cnt",   "rcb_rcb_tx_mem_serr_cnt"},
     738                 :            :         {"rcb_gro_bd_merr_cnt"},
     739                 :            :         {"rcb_gro_context_merr_cnt"},
     740                 :            : 
     741                 :            :         {"rcb_rx_stash_cfg_merr_cnt"},
     742                 :            :         {"rcb_axi_rd_fbd_merr_cnt"},
     743                 :            :         {"rcb_rsv1"},
     744                 :            :         {"rcb_rsv2"},
     745                 :            :         {"rcb_rsv3"},
     746                 :            :         {"rcb_rsv4"},
     747                 :            : };
     748                 :            : 
     749                 :            : static struct hns3_dfx_reg_entry dfx_tqp_reg_list[] = {
     750                 :            :         {"dfx_tqp_q_num"},
     751                 :            :         {"rcb_cfg_rx_ring_tail"},
     752                 :            :         {"rcb_cfg_rx_ring_head"},
     753                 :            :         {"rcb_cfg_rx_ring_fbdnum"},
     754                 :            :         {"rcb_cfg_rx_ring_offset"},
     755                 :            :         {"rcb_cfg_rx_ring_fbdoffset"},
     756                 :            : 
     757                 :            :         {"rcb_cfg_rx_ring_pktnum_record"},
     758                 :            :         {"rcb_cfg_tx_ring_tail"},
     759                 :            :         {"rcb_cfg_tx_ring_head"},
     760                 :            :         {"rcb_cfg_tx_ring_fbdnum"},
     761                 :            :         {"rcb_cfg_tx_ring_offset"},
     762                 :            :         {"rcb_cfg_tx_ring_ebdnum"},
     763                 :            : };
     764                 :            : 
     765                 :            : static struct hns3_dfx_reg_entry dfx_ssu_reg_2_list[] = {
     766                 :            :         {"dfx_ssu2_oq_index"},
     767                 :            :         {"dfx_ssu2_queue_cnt"},
     768                 :            :         {"dfx_ssu2_rsv0"},
     769                 :            :         {"dfx_ssu2_rsv1"},
     770                 :            :         {"dfx_ssu2_rsv2"},
     771                 :            :         {"dfx_ssu2_rsv3"},
     772                 :            : };
     773                 :            : 
     774                 :            : enum hns3_reg_modules {
     775                 :            :         HNS3_BIOS_COMMON = 0,
     776                 :            :         HNS3_SSU_0,
     777                 :            :         HNS3_SSU_1,
     778                 :            :         HNS3_IGU_EGU,
     779                 :            :         HNS3_RPU_0,
     780                 :            :         HNS3_RPU_1,
     781                 :            :         HNS3_NCSI,
     782                 :            :         HNS3_RTC,
     783                 :            :         HNS3_PPP,
     784                 :            :         HNS3_RCB,
     785                 :            :         HNS3_TQP,
     786                 :            :         HNS3_SSU_2,
     787                 :            : 
     788                 :            :         HNS3_CMDQ = 12,
     789                 :            :         HNS3_COMMON_PF,
     790                 :            :         HNS3_COMMON_VF,
     791                 :            :         HNS3_RING,
     792                 :            :         HNS3_TQP_INTR,
     793                 :            : 
     794                 :            :         HNS3_32_BIT_DFX,
     795                 :            :         HNS3_64_BIT_DFX,
     796                 :            : };
     797                 :            : 
     798                 :            : #define HNS3_MODULE_MASK(x) RTE_BIT32(x)
     799                 :            : #define HNS3_VF_MODULES (HNS3_MODULE_MASK(HNS3_CMDQ) | HNS3_MODULE_MASK(HNS3_COMMON_VF) | \
     800                 :            :                          HNS3_MODULE_MASK(HNS3_RING) | HNS3_MODULE_MASK(HNS3_TQP_INTR))
     801                 :            : #define HNS3_VF_ONLY_MODULES HNS3_MODULE_MASK(HNS3_COMMON_VF)
     802                 :            : 
     803                 :            : struct hns3_reg_list {
     804                 :            :         const void *reg_list;
     805                 :            :         uint32_t entry_num;
     806                 :            : };
     807                 :            : 
     808                 :            : struct {
     809                 :            :         const char *name;
     810                 :            :         uint32_t module;
     811                 :            : } hns3_module_name_map[] = {
     812                 :            :         { "bios",     HNS3_MODULE_MASK(HNS3_BIOS_COMMON) },
     813                 :            :         { "ssu",      HNS3_MODULE_MASK(HNS3_SSU_0) | HNS3_MODULE_MASK(HNS3_SSU_1) |
     814                 :            :                         HNS3_MODULE_MASK(HNS3_SSU_2) },
     815                 :            :         { "igu_egu",  HNS3_MODULE_MASK(HNS3_IGU_EGU) },
     816                 :            :         { "rpu",      HNS3_MODULE_MASK(HNS3_RPU_0) | HNS3_MODULE_MASK(HNS3_RPU_1) },
     817                 :            :         { "ncsi",     HNS3_MODULE_MASK(HNS3_NCSI) },
     818                 :            :         { "rtc",      HNS3_MODULE_MASK(HNS3_RTC) },
     819                 :            :         { "ppp",      HNS3_MODULE_MASK(HNS3_PPP) },
     820                 :            :         { "rcb",      HNS3_MODULE_MASK(HNS3_RCB) },
     821                 :            :         { "tqp",      HNS3_MODULE_MASK(HNS3_TQP) },
     822                 :            :         { "cmdq",     HNS3_MODULE_MASK(HNS3_CMDQ) },
     823                 :            :         { "common_pf",        HNS3_MODULE_MASK(HNS3_COMMON_PF) },
     824                 :            :         { "common_vf",        HNS3_MODULE_MASK(HNS3_COMMON_VF) },
     825                 :            :         { "ring",     HNS3_MODULE_MASK(HNS3_RING) },
     826                 :            :         { "tqp_intr", HNS3_MODULE_MASK(HNS3_TQP_INTR) },
     827                 :            :         { "32_bit_dfx",       HNS3_MODULE_MASK(HNS3_32_BIT_DFX) },
     828                 :            :         { "64_bit_dfx",       HNS3_MODULE_MASK(HNS3_64_BIT_DFX) },
     829                 :            : };
     830                 :            : 
     831                 :            : static struct hns3_reg_list hns3_reg_lists[] = {
     832                 :            :         [HNS3_BIOS_COMMON]      = { dfx_bios_common_reg_list,   RTE_DIM(dfx_bios_common_reg_list) },
     833                 :            :         [HNS3_SSU_0]            = { dfx_ssu_reg_0_list,         RTE_DIM(dfx_ssu_reg_0_list) },
     834                 :            :         [HNS3_SSU_1]            = { dfx_ssu_reg_1_list,         RTE_DIM(dfx_ssu_reg_1_list) },
     835                 :            :         [HNS3_IGU_EGU]          = { dfx_igu_egu_reg_list,       RTE_DIM(dfx_igu_egu_reg_list) },
     836                 :            :         [HNS3_RPU_0]            = { dfx_rpu_reg_0_list,         RTE_DIM(dfx_rpu_reg_0_list) },
     837                 :            :         [HNS3_RPU_1]            = { dfx_rpu_reg_1_list,         RTE_DIM(dfx_rpu_reg_1_list) },
     838                 :            :         [HNS3_NCSI]             = { dfx_ncsi_reg_list,          RTE_DIM(dfx_ncsi_reg_list) },
     839                 :            :         [HNS3_RTC]              = { dfx_rtc_reg_list,           RTE_DIM(dfx_rtc_reg_list) },
     840                 :            :         [HNS3_PPP]              = { dfx_ppp_reg_list,           RTE_DIM(dfx_ppp_reg_list) },
     841                 :            :         [HNS3_RCB]              = { dfx_rcb_reg_list,           RTE_DIM(dfx_rcb_reg_list) },
     842                 :            :         [HNS3_TQP]              = { dfx_tqp_reg_list,           RTE_DIM(dfx_tqp_reg_list) },
     843                 :            :         [HNS3_SSU_2]            = { dfx_ssu_reg_2_list,         RTE_DIM(dfx_ssu_reg_2_list) },
     844                 :            :         [HNS3_CMDQ]             = { cmdq_reg_list,              RTE_DIM(cmdq_reg_list) },
     845                 :            :         [HNS3_COMMON_PF]        = { common_reg_list,            RTE_DIM(common_reg_list) },
     846                 :            :         [HNS3_COMMON_VF]        = { common_vf_reg_list,         RTE_DIM(common_vf_reg_list) },
     847                 :            :         [HNS3_RING]             = { ring_reg_list,              RTE_DIM(ring_reg_list) },
     848                 :            :         [HNS3_TQP_INTR]         = { tqp_intr_reg_list,          RTE_DIM(tqp_intr_reg_list) },
     849                 :            :         [HNS3_32_BIT_DFX]       = { regs_32_bit_list,           RTE_DIM(regs_32_bit_list) },
     850                 :            :         [HNS3_64_BIT_DFX]       = { regs_64_bit_list,           RTE_DIM(regs_64_bit_list) },
     851                 :            : };
     852                 :            : 
     853                 :            : static const uint32_t hns3_dfx_reg_opcode_list[] = {
     854                 :            :         [HNS3_BIOS_COMMON]      =       HNS3_OPC_DFX_BIOS_COMMON_REG,
     855                 :            :         [HNS3_SSU_0]            =       HNS3_OPC_DFX_SSU_REG_0,
     856                 :            :         [HNS3_SSU_1]            =       HNS3_OPC_DFX_SSU_REG_1,
     857                 :            :         [HNS3_IGU_EGU]          =       HNS3_OPC_DFX_IGU_EGU_REG,
     858                 :            :         [HNS3_RPU_0]            =       HNS3_OPC_DFX_RPU_REG_0,
     859                 :            :         [HNS3_RPU_1]            =       HNS3_OPC_DFX_RPU_REG_1,
     860                 :            :         [HNS3_NCSI]             =       HNS3_OPC_DFX_NCSI_REG,
     861                 :            :         [HNS3_RTC]              =       HNS3_OPC_DFX_RTC_REG,
     862                 :            :         [HNS3_PPP]              =       HNS3_OPC_DFX_PPP_REG,
     863                 :            :         [HNS3_RCB]              =       HNS3_OPC_DFX_RCB_REG,
     864                 :            :         [HNS3_TQP]              =       HNS3_OPC_DFX_TQP_REG,
     865                 :            :         [HNS3_SSU_2]            =       HNS3_OPC_DFX_SSU_REG_2
     866                 :            : };
     867                 :            : 
     868                 :            : static int
     869                 :          0 : hns3_get_regs_num(struct hns3_hw *hw, uint32_t *regs_num_32_bit,
     870                 :            :                   uint32_t *regs_num_64_bit)
     871                 :            : {
     872                 :            :         struct hns3_cmd_desc desc;
     873                 :            :         int ret;
     874                 :            : 
     875                 :          0 :         hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_QUERY_REG_NUM, true);
     876                 :          0 :         ret = hns3_cmd_send(hw, &desc, 1);
     877         [ #  # ]:          0 :         if (ret) {
     878                 :          0 :                 hns3_err(hw, "Query register number cmd failed, ret = %d",
     879                 :            :                          ret);
     880                 :          0 :                 return ret;
     881                 :            :         }
     882                 :            : 
     883                 :          0 :         *regs_num_32_bit = rte_le_to_cpu_32(desc.data[0]);
     884                 :          0 :         *regs_num_64_bit = rte_le_to_cpu_32(desc.data[1]);
     885         [ #  # ]:          0 :         if (*regs_num_32_bit != RTE_DIM(regs_32_bit_list) ||
     886         [ #  # ]:          0 :             *regs_num_64_bit * HNS3_64_BIT_REG_OUTPUT_SIZE != RTE_DIM(regs_64_bit_list)) {
     887                 :          0 :                 hns3_err(hw, "Query register number differ from the list!");
     888                 :          0 :                 return -EINVAL;
     889                 :            :         }
     890                 :            : 
     891                 :            :         return 0;
     892                 :            : }
     893                 :            : 
     894                 :            : static const char *
     895                 :            : hns3_get_name_by_module(enum hns3_reg_modules module)
     896                 :            : {
     897                 :            :         size_t i;
     898                 :            : 
     899         [ #  # ]:          0 :         for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
     900         [ #  # ]:          0 :                 if ((hns3_module_name_map[i].module & HNS3_MODULE_MASK(module)) != 0)
     901                 :          0 :                         return hns3_module_name_map[i].name;
     902                 :            :         }
     903                 :            :         return "unknown";
     904                 :            : }
     905                 :            : 
     906                 :            : static void
     907                 :          0 : hns3_get_module_names(char *names, uint32_t len)
     908                 :            : {
     909                 :            :         size_t i;
     910                 :            : 
     911         [ #  # ]:          0 :         for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
     912                 :          0 :                 strlcat(names, " ", len);
     913                 :          0 :                 strlcat(names, hns3_module_name_map[i].name, len);
     914                 :            :         }
     915                 :          0 : }
     916                 :            : 
     917                 :            : static uint32_t
     918                 :          0 : hns3_parse_modules_by_filter(struct hns3_hw *hw, const char *filter)
     919                 :            : {
     920                 :            :         struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
     921                 :          0 :         char names[HNS3_MAX_MODULES_LEN] = {0};
     922                 :            :         uint32_t modules = 0;
     923                 :            :         size_t i;
     924                 :            : 
     925         [ #  # ]:          0 :         if (filter == NULL) {
     926                 :            :                 modules = (1 << RTE_DIM(hns3_reg_lists)) - 1;
     927                 :            :         } else {
     928         [ #  # ]:          0 :                 for (i = 0; i < RTE_DIM(hns3_module_name_map); i++) {
     929         [ #  # ]:          0 :                         if (strcmp(filter, hns3_module_name_map[i].name) == 0) {
     930                 :          0 :                                 modules |= hns3_module_name_map[i].module;
     931                 :          0 :                                 break;
     932                 :            :                         }
     933                 :            :                 }
     934                 :            :         }
     935                 :            : 
     936         [ #  # ]:          0 :         if (hns->is_vf)
     937                 :          0 :                 modules &= HNS3_VF_MODULES;
     938                 :            :         else
     939                 :          0 :                 modules &= ~HNS3_VF_ONLY_MODULES;
     940         [ #  # ]:          0 :         if (modules == 0) {
     941                 :          0 :                 hns3_get_module_names(names, HNS3_MAX_MODULES_LEN);
     942                 :          0 :                 hns3_err(hw, "mismatched module name! Available names are:%s.",
     943                 :            :                          names);
     944                 :            :         }
     945                 :          0 :         return modules;
     946                 :            : }
     947                 :            : 
     948                 :            : static int
     949                 :          0 : hns3_get_dfx_reg_bd_num(struct hns3_hw *hw, uint32_t *bd_num_list,
     950                 :            :                         uint32_t list_size)
     951                 :            : {
     952                 :            : #define HNS3_GET_DFX_REG_BD_NUM_SIZE    4
     953                 :            :         struct hns3_cmd_desc desc[HNS3_GET_DFX_REG_BD_NUM_SIZE];
     954                 :            :         uint32_t index, desc_index;
     955                 :            :         uint32_t bd_num;
     956                 :            :         uint32_t i;
     957                 :            :         int ret;
     958                 :            : 
     959         [ #  # ]:          0 :         for (i = 0; i < HNS3_GET_DFX_REG_BD_NUM_SIZE - 1; i++) {
     960                 :          0 :                 hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_DFX_BD_NUM, true);
     961                 :          0 :                 desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
     962                 :            :         }
     963                 :            :         /* The last BD does not need a next flag */
     964                 :          0 :         hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_DFX_BD_NUM, true);
     965                 :            : 
     966                 :          0 :         ret = hns3_cmd_send(hw, desc, HNS3_GET_DFX_REG_BD_NUM_SIZE);
     967         [ #  # ]:          0 :         if (ret) {
     968                 :          0 :                 hns3_err(hw, "fail to get dfx bd num, ret = %d.", ret);
     969                 :          0 :                 return ret;
     970                 :            :         }
     971                 :            : 
     972                 :            :         /* The first data in the first BD is a reserved field */
     973         [ #  # ]:          0 :         for (i = 1; i <= list_size; i++) {
     974                 :          0 :                 desc_index = i / HNS3_CMD_DESC_DATA_NUM;
     975                 :          0 :                 index = i % HNS3_CMD_DESC_DATA_NUM;
     976                 :          0 :                 bd_num = rte_le_to_cpu_32(desc[desc_index].data[index]);
     977                 :          0 :                 bd_num_list[i - 1] = bd_num;
     978                 :            :         }
     979                 :            : 
     980                 :            :         return 0;
     981                 :            : }
     982                 :            : 
     983                 :            : static uint32_t
     984                 :            : hns3_get_regs_length(struct hns3_hw *hw, uint32_t modules)
     985                 :            : {
     986                 :            :         uint32_t reg_num = 0, length = 0;
     987                 :            :         uint32_t i;
     988                 :            : 
     989         [ #  # ]:          0 :         for (i = 0; i < RTE_DIM(hns3_reg_lists); i++) {
     990         [ #  # ]:          0 :                 if ((RTE_BIT32(i) & modules) == 0)
     991                 :          0 :                         continue;
     992                 :          0 :                 reg_num = hns3_reg_lists[i].entry_num;
     993         [ #  # ]:          0 :                 if (i == HNS3_RING)
     994                 :          0 :                         reg_num *= hw->tqps_num;
     995         [ #  # ]:          0 :                 else if (i == HNS3_TQP_INTR)
     996                 :          0 :                         reg_num *= hw->intr_tqps_num;
     997                 :            : 
     998                 :          0 :                 length += reg_num;
     999                 :            :         }
    1000                 :            : 
    1001                 :            :         return length;
    1002                 :            : }
    1003                 :            : 
    1004                 :            : static void
    1005                 :          0 : hns3_fill_dfx_regs_name(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
    1006                 :            :                         const struct hns3_dfx_reg_entry *reg_list, uint32_t reg_num)
    1007                 :            : {
    1008                 :          0 :         uint32_t i, cnt = regs->length;
    1009                 :            :         const char *name;
    1010                 :            : 
    1011         [ #  # ]:          0 :         if (regs->names == NULL)
    1012                 :            :                 return;
    1013                 :            : 
    1014         [ #  # ]:          0 :         for (i = 0; i < reg_num; i++) {
    1015                 :          0 :                 name = reg_list[i].name_v1;
    1016   [ #  #  #  # ]:          0 :                 if (hw->revision == PCI_REVISION_ID_HIP09_A && reg_list[i].name_v2 != NULL)
    1017                 :            :                         name = reg_list[i].name_v2;
    1018                 :          0 :                 snprintf(regs->names[cnt++].name, RTE_ETH_REG_NAME_SIZE, "%s", name);
    1019                 :            :         }
    1020                 :            : }
    1021                 :            : 
    1022                 :            : static int
    1023                 :          0 : hns3_get_32_bit_regs(struct hns3_hw *hw, uint32_t regs_num, struct rte_dev_reg_info *regs)
    1024                 :            : {
    1025                 :            : #define HNS3_32_BIT_REG_RTN_DATANUM 8
    1026                 :            : #define HNS3_32_BIT_DESC_NODATA_LEN 2
    1027                 :          0 :         uint32_t *reg_val = regs->data;
    1028                 :            :         struct hns3_cmd_desc *desc;
    1029                 :            :         uint32_t *desc_data;
    1030                 :            :         int cmd_num;
    1031                 :            :         int i, k, n;
    1032                 :            :         int ret;
    1033                 :            : 
    1034         [ #  # ]:          0 :         if (regs_num == 0)
    1035                 :            :                 return 0;
    1036                 :            : 
    1037                 :          0 :         cmd_num = DIV_ROUND_UP(regs_num + HNS3_32_BIT_DESC_NODATA_LEN,
    1038                 :            :                                HNS3_32_BIT_REG_RTN_DATANUM);
    1039                 :          0 :         desc = rte_zmalloc("hns3-32bit-regs",
    1040                 :            :                            sizeof(struct hns3_cmd_desc) * cmd_num, 0);
    1041         [ #  # ]:          0 :         if (desc == NULL) {
    1042                 :          0 :                 hns3_err(hw, "Failed to allocate %zx bytes needed to "
    1043                 :            :                          "store 32bit regs",
    1044                 :            :                          sizeof(struct hns3_cmd_desc) * cmd_num);
    1045                 :          0 :                 return -ENOMEM;
    1046                 :            :         }
    1047                 :            : 
    1048                 :          0 :         hns3_cmd_setup_basic_desc(&desc[0], HNS3_OPC_QUERY_32_BIT_REG, true);
    1049                 :          0 :         ret = hns3_cmd_send(hw, desc, cmd_num);
    1050         [ #  # ]:          0 :         if (ret) {
    1051                 :          0 :                 hns3_err(hw, "Query 32 bit register cmd failed, ret = %d",
    1052                 :            :                          ret);
    1053                 :          0 :                 rte_free(desc);
    1054                 :          0 :                 return ret;
    1055                 :            :         }
    1056                 :            : 
    1057                 :          0 :         hns3_fill_dfx_regs_name(hw, regs, regs_32_bit_list, regs_num);
    1058                 :          0 :         reg_val += regs->length;
    1059                 :          0 :         regs->length += regs_num;
    1060         [ #  # ]:          0 :         for (i = 0; i < cmd_num; i++) {
    1061         [ #  # ]:          0 :                 if (i == 0) {
    1062                 :          0 :                         desc_data = &desc[i].data[0];
    1063                 :            :                         n = HNS3_32_BIT_REG_RTN_DATANUM -
    1064                 :            :                             HNS3_32_BIT_DESC_NODATA_LEN;
    1065                 :            :                 } else {
    1066                 :          0 :                         desc_data = (uint32_t *)(&desc[i]);
    1067                 :            :                         n = HNS3_32_BIT_REG_RTN_DATANUM;
    1068                 :            :                 }
    1069         [ #  # ]:          0 :                 for (k = 0; k < n; k++) {
    1070                 :          0 :                         *reg_val++ = rte_le_to_cpu_32(*desc_data++);
    1071                 :          0 :                         regs_num--;
    1072         [ #  # ]:          0 :                         if (regs_num == 0)
    1073                 :            :                                 break;
    1074                 :            :                 }
    1075                 :            :         }
    1076                 :            : 
    1077                 :          0 :         rte_free(desc);
    1078                 :          0 :         return 0;
    1079                 :            : }
    1080                 :            : 
    1081                 :            : static int
    1082                 :          0 : hns3_get_64_bit_regs(struct hns3_hw *hw, uint32_t regs_num, struct rte_dev_reg_info *regs)
    1083                 :            : {
    1084                 :            : #define HNS3_64_BIT_REG_RTN_DATANUM 4
    1085                 :            : #define HNS3_64_BIT_DESC_NODATA_LEN 1
    1086                 :          0 :         uint32_t *reg_val = regs->data;
    1087                 :            :         struct hns3_cmd_desc *desc;
    1088                 :            :         uint64_t *desc_data;
    1089                 :            :         int cmd_num;
    1090                 :            :         int i, k, n;
    1091                 :            :         int ret;
    1092                 :            : 
    1093         [ #  # ]:          0 :         if (regs_num == 0)
    1094                 :            :                 return 0;
    1095                 :            : 
    1096                 :          0 :         cmd_num = DIV_ROUND_UP(regs_num + HNS3_64_BIT_DESC_NODATA_LEN,
    1097                 :            :                                HNS3_64_BIT_REG_RTN_DATANUM);
    1098                 :          0 :         desc = rte_zmalloc("hns3-64bit-regs",
    1099                 :            :                            sizeof(struct hns3_cmd_desc) * cmd_num, 0);
    1100         [ #  # ]:          0 :         if (desc == NULL) {
    1101                 :          0 :                 hns3_err(hw, "Failed to allocate %zx bytes needed to "
    1102                 :            :                          "store 64bit regs",
    1103                 :            :                          sizeof(struct hns3_cmd_desc) * cmd_num);
    1104                 :          0 :                 return -ENOMEM;
    1105                 :            :         }
    1106                 :            : 
    1107                 :          0 :         hns3_cmd_setup_basic_desc(&desc[0], HNS3_OPC_QUERY_64_BIT_REG, true);
    1108                 :          0 :         ret = hns3_cmd_send(hw, desc, cmd_num);
    1109         [ #  # ]:          0 :         if (ret) {
    1110                 :          0 :                 hns3_err(hw, "Query 64 bit register cmd failed, ret = %d",
    1111                 :            :                          ret);
    1112                 :          0 :                 rte_free(desc);
    1113                 :          0 :                 return ret;
    1114                 :            :         }
    1115                 :            : 
    1116                 :          0 :         hns3_fill_dfx_regs_name(hw, regs, regs_64_bit_list, regs_num * HNS3_64_BIT_REG_OUTPUT_SIZE);
    1117                 :          0 :         reg_val += regs->length;
    1118                 :          0 :         regs->length += regs_num * HNS3_64_BIT_REG_OUTPUT_SIZE;
    1119         [ #  # ]:          0 :         for (i = 0; i < cmd_num; i++) {
    1120         [ #  # ]:          0 :                 if (i == 0) {
    1121                 :          0 :                         desc_data = (uint64_t *)(&desc[i].data[0]);
    1122                 :            :                         n = HNS3_64_BIT_REG_RTN_DATANUM -
    1123                 :            :                             HNS3_64_BIT_DESC_NODATA_LEN;
    1124                 :            :                 } else {
    1125                 :          0 :                         desc_data = (uint64_t *)(&desc[i]);
    1126                 :            :                         n = HNS3_64_BIT_REG_RTN_DATANUM;
    1127                 :            :                 }
    1128         [ #  # ]:          0 :                 for (k = 0; k < n; k++) {
    1129                 :          0 :                         *reg_val++ = rte_le_to_cpu_64(*desc_data++);
    1130                 :          0 :                         regs_num--;
    1131         [ #  # ]:          0 :                         if (!regs_num)
    1132                 :            :                                 break;
    1133                 :            :                 }
    1134                 :            :         }
    1135                 :            : 
    1136                 :          0 :         rte_free(desc);
    1137                 :          0 :         return 0;
    1138                 :            : }
    1139                 :            : 
    1140                 :            : static void
    1141                 :          0 : hns3_direct_access_regs_help(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
    1142                 :            :                              uint32_t modules, enum hns3_reg_modules idx)
    1143                 :            : {
    1144                 :            :         const struct hns3_dirt_reg_entry *reg_list;
    1145                 :          0 :         uint32_t *data = regs->data;
    1146                 :            :         size_t reg_num, i, cnt;
    1147                 :            : 
    1148         [ #  # ]:          0 :         if ((modules & HNS3_MODULE_MASK(idx)) == 0)
    1149                 :            :                 return;
    1150                 :            : 
    1151                 :          0 :         data += regs->length;
    1152                 :          0 :         reg_num = hns3_reg_lists[idx].entry_num;
    1153                 :          0 :         reg_list = hns3_reg_lists[idx].reg_list;
    1154                 :            :         cnt = regs->length;
    1155         [ #  # ]:          0 :         for (i = 0; i < reg_num; i++) {
    1156                 :          0 :                 *data++ = hns3_read_dev(hw, reg_list[i].addr);
    1157         [ #  # ]:          0 :                 if (regs->names != NULL)
    1158                 :          0 :                         snprintf(regs->names[cnt++].name, RTE_ETH_REG_NAME_SIZE,
    1159                 :          0 :                                  "%s", reg_list[i].name);
    1160                 :            :         }
    1161                 :            : 
    1162                 :          0 :         regs->length += reg_num;
    1163                 :            : }
    1164                 :            : 
    1165                 :            : static uint32_t
    1166                 :          0 : hns3_get_module_tqp_reg_offset(enum hns3_reg_modules idx, uint16_t queue_id)
    1167                 :            : {
    1168         [ #  # ]:          0 :         if (idx == HNS3_RING)
    1169                 :          0 :                 return hns3_get_tqp_reg_offset(queue_id);
    1170         [ #  # ]:          0 :         else if (idx == HNS3_TQP_INTR)
    1171                 :          0 :                 return hns3_get_tqp_intr_reg_offset(queue_id);
    1172                 :            : 
    1173                 :            :         return 0;
    1174                 :            : }
    1175                 :            : 
    1176                 :            : static void
    1177                 :          0 : hns3_direct_access_tqp_regs_help(struct hns3_hw *hw, struct rte_dev_reg_info *regs,
    1178                 :            :                                  uint32_t modules, enum hns3_reg_modules idx)
    1179                 :            : {
    1180                 :            :         const struct hns3_dirt_reg_entry *reg_list;
    1181                 :            :         uint32_t reg_num, i, j, reg_offset;
    1182                 :          0 :         uint32_t *data = regs->data;
    1183                 :            :         uint16_t tqp_num;
    1184                 :            : 
    1185         [ #  # ]:          0 :         if ((modules & HNS3_MODULE_MASK(idx)) == 0)
    1186                 :            :                 return;
    1187                 :            : 
    1188         [ #  # ]:          0 :         tqp_num = (idx == HNS3_RING) ? hw->tqps_num : hw->intr_tqps_num;
    1189                 :          0 :         reg_list = hns3_reg_lists[idx].reg_list;
    1190                 :          0 :         reg_num = hns3_reg_lists[idx].entry_num;
    1191                 :          0 :         data += regs->length;
    1192         [ #  # ]:          0 :         for (i = 0; i < tqp_num; i++) {
    1193                 :          0 :                 reg_offset = hns3_get_module_tqp_reg_offset(idx, i);
    1194         [ #  # ]:          0 :                 for (j = 0; j < reg_num; j++) {
    1195                 :          0 :                         *data++ = hns3_read_dev(hw, reg_list[j].addr + reg_offset);
    1196         [ #  # ]:          0 :                         if (regs->names != NULL)
    1197                 :          0 :                                 snprintf(regs->names[regs->length].name,
    1198                 :          0 :                                          RTE_ETH_REG_NAME_SIZE, "Q%u_%s", i, reg_list[j].name);
    1199                 :          0 :                         regs->length++;
    1200                 :            :                 }
    1201                 :            :         }
    1202                 :            : }
    1203                 :            : 
    1204                 :            : static void
    1205                 :          0 : hns3_direct_access_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
    1206                 :            : {
    1207                 :          0 :         hns3_direct_access_regs_help(hw, regs, modules, HNS3_COMMON_VF);
    1208                 :          0 :         hns3_direct_access_regs_help(hw, regs, modules, HNS3_COMMON_PF);
    1209                 :          0 :         hns3_direct_access_regs_help(hw, regs, modules, HNS3_CMDQ);
    1210                 :          0 :         hns3_direct_access_tqp_regs_help(hw, regs, modules, HNS3_RING);
    1211                 :          0 :         hns3_direct_access_tqp_regs_help(hw, regs, modules, HNS3_TQP_INTR);
    1212                 :          0 : }
    1213                 :            : 
    1214                 :            : static int
    1215                 :          0 : hns3_dfx_reg_cmd_send(struct hns3_hw *hw, struct hns3_cmd_desc *desc,
    1216                 :            :                         int bd_num, uint32_t opcode)
    1217                 :            : {
    1218                 :            :         int ret;
    1219                 :            :         int i;
    1220                 :            : 
    1221         [ #  # ]:          0 :         for (i = 0; i < bd_num - 1; i++) {
    1222                 :          0 :                 hns3_cmd_setup_basic_desc(&desc[i], opcode, true);
    1223                 :          0 :                 desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT);
    1224                 :            :         }
    1225                 :            :         /* The last BD does not need a next flag */
    1226                 :          0 :         hns3_cmd_setup_basic_desc(&desc[i], opcode, true);
    1227                 :            : 
    1228                 :          0 :         ret = hns3_cmd_send(hw, desc, bd_num);
    1229         [ #  # ]:          0 :         if (ret)
    1230                 :          0 :                 hns3_err(hw, "fail to query dfx registers, opcode = 0x%04X, "
    1231                 :            :                          "ret = %d.", opcode, ret);
    1232                 :            : 
    1233                 :          0 :         return ret;
    1234                 :            : }
    1235                 :            : 
    1236                 :            : static int
    1237                 :            : hns3_dfx_reg_fetch_data(struct hns3_cmd_desc *desc, int bd_num, uint32_t *reg)
    1238                 :            : {
    1239                 :            :         int desc_index;
    1240                 :            :         int reg_num;
    1241                 :            :         int index;
    1242                 :            :         int i;
    1243                 :            : 
    1244                 :          0 :         reg_num = bd_num * HNS3_CMD_DESC_DATA_NUM;
    1245         [ #  # ]:          0 :         for (i = 0; i < reg_num; i++) {
    1246                 :          0 :                 desc_index = i / HNS3_CMD_DESC_DATA_NUM;
    1247                 :          0 :                 index = i % HNS3_CMD_DESC_DATA_NUM;
    1248                 :          0 :                 *reg++ = desc[desc_index].data[index];
    1249                 :            :         }
    1250                 :            : 
    1251                 :            :         return reg_num;
    1252                 :            : }
    1253                 :            : 
    1254                 :            : static int
    1255                 :          0 : hns3_get_dfx_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
    1256                 :          0 : {
    1257                 :            :         int opcode_num = RTE_DIM(hns3_dfx_reg_opcode_list);
    1258                 :            :         uint32_t max_bd_num, bd_num, opcode, regs_num;
    1259                 :          0 :         uint32_t bd_num_list[opcode_num];
    1260                 :            :         struct hns3_cmd_desc *cmd_descs;
    1261                 :          0 :         uint32_t *data = regs->data;
    1262                 :            :         int ret;
    1263                 :            :         int i;
    1264                 :            : 
    1265                 :          0 :         ret = hns3_get_dfx_reg_bd_num(hw, bd_num_list, opcode_num);
    1266         [ #  # ]:          0 :         if (ret)
    1267                 :            :                 return ret;
    1268                 :            : 
    1269                 :            :         max_bd_num = 0;
    1270         [ #  # ]:          0 :         for (i = 0; i < opcode_num; i++)
    1271                 :          0 :                 max_bd_num = RTE_MAX(bd_num_list[i], max_bd_num);
    1272                 :            : 
    1273                 :          0 :         cmd_descs = rte_zmalloc(NULL, sizeof(*cmd_descs) * max_bd_num, 0);
    1274         [ #  # ]:          0 :         if (cmd_descs == NULL)
    1275                 :            :                 return -ENOMEM;
    1276                 :            : 
    1277                 :          0 :         data += regs->length;
    1278         [ #  # ]:          0 :         for (i = 0; i < opcode_num; i++) {
    1279                 :          0 :                 opcode = hns3_dfx_reg_opcode_list[i];
    1280                 :          0 :                 bd_num = bd_num_list[i];
    1281         [ #  # ]:          0 :                 if ((modules & HNS3_MODULE_MASK(i)) == 0)
    1282                 :          0 :                         continue;
    1283         [ #  # ]:          0 :                 if (bd_num == 0)
    1284                 :          0 :                         continue;
    1285                 :          0 :                 ret = hns3_dfx_reg_cmd_send(hw, cmd_descs, bd_num, opcode);
    1286         [ #  # ]:          0 :                 if (ret)
    1287                 :            :                         break;
    1288                 :            : 
    1289                 :          0 :                 regs_num = hns3_dfx_reg_fetch_data(cmd_descs, bd_num, data);
    1290         [ #  # ]:          0 :                 if (regs_num !=  hns3_reg_lists[i].entry_num) {
    1291                 :          0 :                         hns3_err(hw, "Query register number differ from the list for module %s!",
    1292                 :            :                                  hns3_get_name_by_module(i));
    1293                 :          0 :                         return -EINVAL;
    1294                 :            :                 }
    1295                 :          0 :                 hns3_fill_dfx_regs_name(hw, regs, hns3_reg_lists[i].reg_list, regs_num);
    1296                 :          0 :                 regs->length += regs_num;
    1297                 :          0 :                 data += regs_num;
    1298                 :            :         }
    1299                 :          0 :         rte_free(cmd_descs);
    1300                 :            : 
    1301                 :          0 :         return ret;
    1302                 :            : }
    1303                 :            : 
    1304                 :            : static int
    1305                 :          0 : hns3_get_32_b4_bit_regs(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
    1306                 :            : {
    1307                 :            :         uint32_t regs_num_32_bit;
    1308                 :            :         uint32_t regs_num_64_bit;
    1309                 :            :         int ret;
    1310                 :            : 
    1311         [ #  # ]:          0 :         if ((modules & HNS3_MODULE_MASK(HNS3_32_BIT_DFX)) == 0 &&
    1312                 :            :             (modules & HNS3_MODULE_MASK(HNS3_64_BIT_DFX)) == 0)
    1313                 :            :                 return 0;
    1314                 :            : 
    1315                 :          0 :         ret = hns3_get_regs_num(hw, &regs_num_32_bit, &regs_num_64_bit);
    1316         [ #  # ]:          0 :         if (ret) {
    1317                 :          0 :                 hns3_err(hw, "Get register number failed, ret = %d", ret);
    1318                 :          0 :                 return ret;
    1319                 :            :         }
    1320                 :            : 
    1321         [ #  # ]:          0 :         if ((modules & HNS3_MODULE_MASK(HNS3_32_BIT_DFX)) != 0) {
    1322                 :          0 :                 ret = hns3_get_32_bit_regs(hw, regs_num_32_bit, regs);
    1323         [ #  # ]:          0 :                 if (ret) {
    1324                 :          0 :                         hns3_err(hw, "Get 32 bit register failed, ret = %d", ret);
    1325                 :          0 :                         return ret;
    1326                 :            :                 }
    1327                 :            :         }
    1328                 :            : 
    1329         [ #  # ]:          0 :         if ((modules & HNS3_MODULE_MASK(HNS3_64_BIT_DFX)) != 0) {
    1330                 :          0 :                 ret = hns3_get_64_bit_regs(hw, regs_num_64_bit, regs);
    1331         [ #  # ]:          0 :                 if (ret) {
    1332                 :          0 :                         hns3_err(hw, "Get 64 bit register failed, ret = %d", ret);
    1333                 :          0 :                         return ret;
    1334                 :            :                 }
    1335                 :            :         }
    1336                 :            : 
    1337                 :            :         return 0;
    1338                 :            : }
    1339                 :            : 
    1340                 :            : static int
    1341                 :          0 : hns3_get_regs_from_firmware(struct hns3_hw *hw, struct rte_dev_reg_info *regs, uint32_t modules)
    1342                 :            : {
    1343                 :            :         struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
    1344                 :            :         int ret;
    1345                 :            : 
    1346         [ #  # ]:          0 :         if (hns->is_vf)
    1347                 :            :                 return 0;
    1348                 :            : 
    1349                 :          0 :         ret = hns3_get_32_b4_bit_regs(hw, regs, modules);
    1350         [ #  # ]:          0 :         if (ret != 0)
    1351                 :            :                 return ret;
    1352                 :            : 
    1353                 :          0 :         return hns3_get_dfx_regs(hw, regs, modules);
    1354                 :            : }
    1355                 :            : 
    1356                 :            : int
    1357                 :          0 : hns3_get_regs(struct rte_eth_dev *eth_dev, struct rte_dev_reg_info *regs)
    1358                 :            : {
    1359                 :          0 :         struct hns3_adapter *hns = eth_dev->data->dev_private;
    1360                 :          0 :         struct hns3_hw *hw = &hns->hw;
    1361                 :            :         uint32_t modules;
    1362                 :            :         uint32_t length;
    1363                 :            : 
    1364                 :          0 :         modules = hns3_parse_modules_by_filter(hw, regs->filter);
    1365         [ #  # ]:          0 :         if (modules == 0)
    1366                 :            :                 return -EINVAL;
    1367                 :            : 
    1368                 :            :         length = hns3_get_regs_length(hw, modules);
    1369         [ #  # ]:          0 :         if (regs->data == NULL) {
    1370                 :          0 :                 regs->length = length;
    1371                 :          0 :                 regs->width = sizeof(uint32_t);
    1372                 :          0 :                 return 0;
    1373                 :            :         }
    1374                 :            : 
    1375                 :            :         /* Only full register dump is supported */
    1376   [ #  #  #  # ]:          0 :         if (regs->length && regs->length != length)
    1377                 :            :                 return -ENOTSUP;
    1378                 :            : 
    1379                 :          0 :         regs->version = hw->fw_version;
    1380                 :            :         /* to count the number of filled registers */
    1381                 :          0 :         regs->length = 0;
    1382                 :            : 
    1383                 :            :         /* fetching per-PF registers values from PF PCIe register space */
    1384                 :          0 :         hns3_direct_access_regs(hw, regs, modules);
    1385                 :            : 
    1386                 :            :         /* fetching PF common registers values from firmware */
    1387                 :          0 :         return  hns3_get_regs_from_firmware(hw, regs, modules);
    1388                 :            : }

Generated by: LCOV version 1.14