1*1b481fc3SMaciej Żenczykowski /* Copyright (c) 2023 Huawei Corporation */
2*1b481fc3SMaciej Żenczykowski #include <stdio.h>
3*1b481fc3SMaciej Żenczykowski #include <stdlib.h>
4*1b481fc3SMaciej Żenczykowski #include <errno.h>
5*1b481fc3SMaciej Żenczykowski #include "internal.h"
6*1b481fc3SMaciej Żenczykowski
7*1b481fc3SMaciej Żenczykowski /* distinguish drive register data of earlier versions */
8*1b481fc3SMaciej Żenczykowski #define HNS3_REG_MAGIC_NUMBER 0x686e733372656773 /* hns3regs */
9*1b481fc3SMaciej Żenczykowski #define HNS3_REG_RSV_NAME "reserved"
10*1b481fc3SMaciej Żenczykowski #define HNS3_REG_UNKNOW_NAME "unknown"
11*1b481fc3SMaciej Żenczykowski #define HNS3_REG_UNKNOW_VALUE_LEN 4
12*1b481fc3SMaciej Żenczykowski
13*1b481fc3SMaciej Żenczykowski struct hns3_reg_tlv {
14*1b481fc3SMaciej Żenczykowski u16 tag;
15*1b481fc3SMaciej Żenczykowski u16 len;
16*1b481fc3SMaciej Żenczykowski };
17*1b481fc3SMaciej Żenczykowski
18*1b481fc3SMaciej Żenczykowski struct hns3_reg_header {
19*1b481fc3SMaciej Żenczykowski u64 magic_number;
20*1b481fc3SMaciej Żenczykowski u8 is_vf;
21*1b481fc3SMaciej Żenczykowski u8 rsv[7];
22*1b481fc3SMaciej Żenczykowski };
23*1b481fc3SMaciej Żenczykowski
24*1b481fc3SMaciej Żenczykowski struct hns3_reg_info {
25*1b481fc3SMaciej Żenczykowski const char *name;
26*1b481fc3SMaciej Żenczykowski u16 value_len;
27*1b481fc3SMaciej Żenczykowski };
28*1b481fc3SMaciej Żenczykowski
29*1b481fc3SMaciej Żenczykowski struct hns3_regs_group {
30*1b481fc3SMaciej Żenczykowski const char *group_name;
31*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info *regs;
32*1b481fc3SMaciej Żenczykowski u16 regs_count;
33*1b481fc3SMaciej Żenczykowski };
34*1b481fc3SMaciej Żenczykowski
35*1b481fc3SMaciej Żenczykowski enum hns3_reg_tag {
36*1b481fc3SMaciej Żenczykowski HNS3_TAG_CMDQ = 0,
37*1b481fc3SMaciej Żenczykowski HNS3_TAG_COMMON,
38*1b481fc3SMaciej Żenczykowski HNS3_TAG_RING,
39*1b481fc3SMaciej Żenczykowski HNS3_TAG_TQP_INTR,
40*1b481fc3SMaciej Żenczykowski HNS3_TAG_QUERY_32_BIT,
41*1b481fc3SMaciej Żenczykowski HNS3_TAG_QUERY_64_BIT,
42*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_BIOS_COMMON,
43*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_SSU_0,
44*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_SSU_1,
45*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_IGU_EGU,
46*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_RPU_0,
47*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_RPU_1,
48*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_NCSI,
49*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_RTC,
50*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_PPP,
51*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_RCB,
52*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_TQP,
53*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_SSU_2,
54*1b481fc3SMaciej Żenczykowski HNS3_TAG_DFX_RPU_TNL,
55*1b481fc3SMaciej Żenczykowski HNS3_TAG_MAX,
56*1b481fc3SMaciej Żenczykowski };
57*1b481fc3SMaciej Żenczykowski
58*1b481fc3SMaciej Żenczykowski const bool hns3_reg_is_repeat_tag_array[] = {
59*1b481fc3SMaciej Żenczykowski [HNS3_TAG_RING] = true,
60*1b481fc3SMaciej Żenczykowski [HNS3_TAG_TQP_INTR] = true,
61*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_RPU_TNL] = true,
62*1b481fc3SMaciej Żenczykowski };
63*1b481fc3SMaciej Żenczykowski
64*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info pf_cmdq_regs[] = {
65*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_baseaddr_l", 4},
66*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_baseaddr_h", 4},
67*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_depth", 4},
68*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_tail", 4},
69*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_head", 4},
70*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_baseaddr_l", 4},
71*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_baseaddr_h", 4},
72*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_depth", 4},
73*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_tail", 4},
74*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_head", 4},
75*1b481fc3SMaciej Żenczykowski {"comm_vector0_cmdq_src", 4},
76*1b481fc3SMaciej Żenczykowski {"comm_cmdq_intr_sts", 4},
77*1b481fc3SMaciej Żenczykowski {"comm_cmdq_intr_en", 4},
78*1b481fc3SMaciej Żenczykowski {"comm_cmdq_intr_gen", 4},
79*1b481fc3SMaciej Żenczykowski };
80*1b481fc3SMaciej Żenczykowski
81*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info pf_common_regs[] = {
82*1b481fc3SMaciej Żenczykowski {"misc_vector_base", 4},
83*1b481fc3SMaciej Żenczykowski {"pf_other_int", 4},
84*1b481fc3SMaciej Żenczykowski {"misc_reset_sts", 4},
85*1b481fc3SMaciej Żenczykowski {"misc_vector_int_sts", 4},
86*1b481fc3SMaciej Żenczykowski {"global_reset", 4},
87*1b481fc3SMaciej Żenczykowski {"fun_rst_ing", 4},
88*1b481fc3SMaciej Żenczykowski {"gro_en", 4},
89*1b481fc3SMaciej Żenczykowski };
90*1b481fc3SMaciej Żenczykowski
91*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info pf_ring_regs[] = {
92*1b481fc3SMaciej Żenczykowski {"ring_rx_addr_l", 4},
93*1b481fc3SMaciej Żenczykowski {"ring_rx_addr_h", 4},
94*1b481fc3SMaciej Żenczykowski {"ring_rx_bd_num", 4},
95*1b481fc3SMaciej Żenczykowski {"ring_rx_bd_length", 4},
96*1b481fc3SMaciej Żenczykowski {"ring_rx_merge_en", 4},
97*1b481fc3SMaciej Żenczykowski {"ring_rx_tail", 4},
98*1b481fc3SMaciej Żenczykowski {"ring_rx_head", 4},
99*1b481fc3SMaciej Żenczykowski {"ring_rx_fbd_num", 4},
100*1b481fc3SMaciej Żenczykowski {"ring_rx_offset", 4},
101*1b481fc3SMaciej Żenczykowski {"ring_rx_fbd_offset", 4},
102*1b481fc3SMaciej Żenczykowski {"ring_rx_stash", 4},
103*1b481fc3SMaciej Żenczykowski {"ring_rx_bd_err", 4},
104*1b481fc3SMaciej Żenczykowski {"ring_tx_addr_l", 4},
105*1b481fc3SMaciej Żenczykowski {"ring_tx_addr_h", 4},
106*1b481fc3SMaciej Żenczykowski {"ring_tx_bd_num", 4},
107*1b481fc3SMaciej Żenczykowski {"ring_tx_priority", 4},
108*1b481fc3SMaciej Żenczykowski {"ring_tx_tc", 4},
109*1b481fc3SMaciej Żenczykowski {"ring_tx_merge_en", 4},
110*1b481fc3SMaciej Żenczykowski {"ring_tx_tail", 4},
111*1b481fc3SMaciej Żenczykowski {"ring_tx_head", 4},
112*1b481fc3SMaciej Żenczykowski {"ring_tx_fbd_num", 4},
113*1b481fc3SMaciej Żenczykowski {"ring_tx_offset", 4},
114*1b481fc3SMaciej Żenczykowski {"ring_tx_ebd_num", 4},
115*1b481fc3SMaciej Żenczykowski {"ring_tx_ebd_offset", 4},
116*1b481fc3SMaciej Żenczykowski {"ring_tx_bd_err", 4},
117*1b481fc3SMaciej Żenczykowski {"ring_en", 4},
118*1b481fc3SMaciej Żenczykowski };
119*1b481fc3SMaciej Żenczykowski
120*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info pf_tqp_intr_regs[] = {
121*1b481fc3SMaciej Żenczykowski {"tqp_intr_ctrl", 4},
122*1b481fc3SMaciej Żenczykowski {"tqp_intr_gl0", 4},
123*1b481fc3SMaciej Żenczykowski {"tqp_intr_gl1", 4},
124*1b481fc3SMaciej Żenczykowski {"tqp_intr_gl2", 4},
125*1b481fc3SMaciej Żenczykowski {"tqp_intr_rl", 4},
126*1b481fc3SMaciej Żenczykowski };
127*1b481fc3SMaciej Żenczykowski
128*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info query_32_bit_regs[] = {
129*1b481fc3SMaciej Żenczykowski {"ssu_common_err_int", 4},
130*1b481fc3SMaciej Żenczykowski {"ssu_port_based_err_int", 4},
131*1b481fc3SMaciej Żenczykowski {"ssu_fifo_overflow_int", 4},
132*1b481fc3SMaciej Żenczykowski {"ssu_ets_tcg_int", 4},
133*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_0", 4},
134*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_1", 4},
135*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_2", 4},
136*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_3", 4},
137*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_4", 4},
138*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_5", 4},
139*1b481fc3SMaciej Żenczykowski {"ssu_mac_tx_pfc_ind", 4},
140*1b481fc3SMaciej Żenczykowski {"ssu_mac_rx_pfc_ind", 4},
141*1b481fc3SMaciej Żenczykowski {"ssu_rx_oq_drop_pkt_cnt", 4},
142*1b481fc3SMaciej Żenczykowski {"ssu_tx_oq_drop_pkt_cnt", 4},
143*1b481fc3SMaciej Żenczykowski };
144*1b481fc3SMaciej Żenczykowski
145*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info query_64_bit_regs[] = {
146*1b481fc3SMaciej Żenczykowski {"ppp_get_rx_pkt_cnt", 8},
147*1b481fc3SMaciej Żenczykowski {"ppp_get_tx_pkt_cnt", 8},
148*1b481fc3SMaciej Żenczykowski {"ppp_send_uc_prt2host_pkt_cnt", 8},
149*1b481fc3SMaciej Żenczykowski {"ppp_send_uc_prt2prt_pkt_cnt", 8},
150*1b481fc3SMaciej Żenczykowski {"ppp_send_uc_host2host_pkt_cnt", 8},
151*1b481fc3SMaciej Żenczykowski {"ppp_send_uc_host2prt_pkt_cnt", 8},
152*1b481fc3SMaciej Żenczykowski {"ppp_send_mc_from_prt_cnt", 8},
153*1b481fc3SMaciej Żenczykowski };
154*1b481fc3SMaciej Żenczykowski
155*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_bios_common_regs[] = {
156*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
157*1b481fc3SMaciej Żenczykowski {"bp_cpu_state", 4},
158*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_nic_0", 4},
159*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_nic_1", 4},
160*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_nic_2", 4},
161*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_nic_3", 4},
162*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_roc_0", 4},
163*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_roc_1", 4},
164*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_roc_2", 4},
165*1b481fc3SMaciej Żenczykowski {"dfx_msix_info_roc_3", 4},
166*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
167*1b481fc3SMaciej Żenczykowski };
168*1b481fc3SMaciej Żenczykowski
169*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_ssu_0_regs[] = {
170*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
171*1b481fc3SMaciej Żenczykowski {"ssu_ets_port_status", 4},
172*1b481fc3SMaciej Żenczykowski {"ssu_ets_tcg_status", 4},
173*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
174*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
175*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_0", 4},
176*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_1", 4},
177*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_2", 4},
178*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_3", 4},
179*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_4", 4},
180*1b481fc3SMaciej Żenczykowski {"ssu_bp_status_5", 4},
181*1b481fc3SMaciej Żenczykowski {"ssu_mac_tx_pfc_ind", 4},
182*1b481fc3SMaciej Żenczykowski {"mac_ssu_rx_pfc_ind", 4},
183*1b481fc3SMaciej Żenczykowski {"btmp_ageing_st_b0", 4},
184*1b481fc3SMaciej Żenczykowski {"btmp_ageing_st_b1", 4},
185*1b481fc3SMaciej Żenczykowski {"btmp_ageing_st_b2", 4},
186*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
187*1b481fc3SMaciej Żenczykowski {"full_drop_num", 4},
188*1b481fc3SMaciej Żenczykowski {"part_drop_num", 4},
189*1b481fc3SMaciej Żenczykowski {"ppp_key_drop_num", 4},
190*1b481fc3SMaciej Żenczykowski {"ppp_rlt_drop_num", 4},
191*1b481fc3SMaciej Żenczykowski {"lo_pri_unicast_rlt_drop_num", 4},
192*1b481fc3SMaciej Żenczykowski {"hi_pri_multicast_rlt_drop_num", 4},
193*1b481fc3SMaciej Żenczykowski {"lo_pri_multicast_rlt_drop_num", 4},
194*1b481fc3SMaciej Żenczykowski {"ncsi_packet_curr_buffer_cnt", 4},
195*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 12},
196*1b481fc3SMaciej Żenczykowski {"ssu_mb_rd_rlt_drop_cnt", 4},
197*1b481fc3SMaciej Żenczykowski {"ssu_ppp_mac_key_num", 8},
198*1b481fc3SMaciej Żenczykowski {"ssu_ppp_host_key_num", 8},
199*1b481fc3SMaciej Żenczykowski {"ppp_ssu_mac_rlt_num", 8},
200*1b481fc3SMaciej Żenczykowski {"ppp_ssu_host_rlt_num", 8},
201*1b481fc3SMaciej Żenczykowski {"ncsi_rx_packet_in_cnt", 8},
202*1b481fc3SMaciej Żenczykowski {"ncsi_tx_packet_out_cnt", 8},
203*1b481fc3SMaciej Żenczykowski {"ssu_key_drop_num", 4},
204*1b481fc3SMaciej Żenczykowski {"mb_uncopy_num", 4},
205*1b481fc3SMaciej Żenczykowski {"rx_oq_drop_pkt_cnt", 4},
206*1b481fc3SMaciej Żenczykowski {"tx_oq_drop_pkt_cnt", 4},
207*1b481fc3SMaciej Żenczykowski {"bank_unbalance_drop_cnt", 4},
208*1b481fc3SMaciej Żenczykowski {"bank_unbalance_rx_drop_cnt", 4},
209*1b481fc3SMaciej Żenczykowski {"nic_l2_err_drop_pkt_cnt", 4},
210*1b481fc3SMaciej Żenczykowski {"roc_l2_err_drop_pkt_cnt", 4},
211*1b481fc3SMaciej Żenczykowski {"nic_l2_err_drop_pkt_cnt_rx", 4},
212*1b481fc3SMaciej Żenczykowski {"roc_l2_err_drop_pkt_cnt_rx", 4},
213*1b481fc3SMaciej Żenczykowski {"rx_oq_glb_drop_pkt_cnt", 4},
214*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
215*1b481fc3SMaciej Żenczykowski {"lo_pri_unicast_cur_cnt", 4},
216*1b481fc3SMaciej Żenczykowski {"hi_pri_multicast_cur_cnt", 4},
217*1b481fc3SMaciej Żenczykowski {"lo_pri_multicast_cur_cnt", 4},
218*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 12},
219*1b481fc3SMaciej Żenczykowski };
220*1b481fc3SMaciej Żenczykowski
221*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_ssu_1_regs[] = {
222*1b481fc3SMaciej Żenczykowski {"prt_id", 4},
223*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_0", 4},
224*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_1", 4},
225*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_2", 4},
226*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_3", 4},
227*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_4", 4},
228*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_5", 4},
229*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_6", 4},
230*1b481fc3SMaciej Żenczykowski {"packet_tc_curr_buffer_cnt_7", 4},
231*1b481fc3SMaciej Żenczykowski {"packet_curr_buffer_cnt", 4},
232*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
233*1b481fc3SMaciej Żenczykowski {"rx_packet_in_cnt", 8},
234*1b481fc3SMaciej Żenczykowski {"rx_packet_out_cnt", 8},
235*1b481fc3SMaciej Żenczykowski {"tx_packet_in_cnt", 8},
236*1b481fc3SMaciej Żenczykowski {"tx_packet_out_cnt", 8},
237*1b481fc3SMaciej Żenczykowski {"roc_rx_packet_in_cnt", 8},
238*1b481fc3SMaciej Żenczykowski {"roc_tx_packet_out_cnt", 8},
239*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_0", 8},
240*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_1", 8},
241*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_2", 8},
242*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_3", 8},
243*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_4", 8},
244*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_5", 8},
245*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_6", 8},
246*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_in_cnt_7", 8},
247*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_0", 8},
248*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_1", 8},
249*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_2", 8},
250*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_3", 8},
251*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_4", 8},
252*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_5", 8},
253*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_6", 8},
254*1b481fc3SMaciej Żenczykowski {"rx_packet_tc_out_cnt_7", 8},
255*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_0", 8},
256*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_1", 8},
257*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_2", 8},
258*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_3", 8},
259*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_4", 8},
260*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_5", 8},
261*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_6", 8},
262*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_in_cnt_7", 8},
263*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_0", 8},
264*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_1", 8},
265*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_2", 8},
266*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_3", 8},
267*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_4", 8},
268*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_5", 8},
269*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_6", 8},
270*1b481fc3SMaciej Żenczykowski {"tx_packet_tc_out_cnt_7", 8},
271*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
272*1b481fc3SMaciej Żenczykowski };
273*1b481fc3SMaciej Żenczykowski
274*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_igu_egu_regs[] = {
275*1b481fc3SMaciej Żenczykowski {"prt_id", 4},
276*1b481fc3SMaciej Żenczykowski {"igu_rx_err_pkt", 4},
277*1b481fc3SMaciej Żenczykowski {"igu_rx_no_sof_pkt", 4},
278*1b481fc3SMaciej Żenczykowski {"egu_tx_1588_short_pkt", 4},
279*1b481fc3SMaciej Żenczykowski {"egu_tx_1588_pkt", 4},
280*1b481fc3SMaciej Żenczykowski {"egu_tx_err_pkt", 4},
281*1b481fc3SMaciej Żenczykowski {"igu_rx_out_l2_pkt", 4},
282*1b481fc3SMaciej Żenczykowski {"igu_rx_out_l3_pkt", 4},
283*1b481fc3SMaciej Żenczykowski {"igu_rx_out_l4_pkt", 4},
284*1b481fc3SMaciej Żenczykowski {"igu_rx_in_l2_pkt", 4},
285*1b481fc3SMaciej Żenczykowski {"igu_rx_in_l3_pkt", 4},
286*1b481fc3SMaciej Żenczykowski {"igu_rx_in_l4_pkt", 4},
287*1b481fc3SMaciej Żenczykowski {"igu_rx_el3e_pkt", 4},
288*1b481fc3SMaciej Żenczykowski {"igu_rx_el4e_pkt", 4},
289*1b481fc3SMaciej Żenczykowski {"igu_rx_l3e_pkt", 4},
290*1b481fc3SMaciej Żenczykowski {"igu_rx_l4e_pkt", 4},
291*1b481fc3SMaciej Żenczykowski {"igu_rx_rocee_pkt", 4},
292*1b481fc3SMaciej Żenczykowski {"igu_rx_out_udp0_pkt", 4},
293*1b481fc3SMaciej Żenczykowski {"igu_rx_in_udp0_pkt", 4},
294*1b481fc3SMaciej Żenczykowski {"mul_car_drop_pkt_cnt", 8},
295*1b481fc3SMaciej Żenczykowski {"bro_car_drop_pkt_cnt", 8},
296*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
297*1b481fc3SMaciej Żenczykowski {"igu_rx_oversize_pkt", 8},
298*1b481fc3SMaciej Żenczykowski {"igu_rx_undersize_pkt", 8},
299*1b481fc3SMaciej Żenczykowski {"igu_rx_out_all_pkt", 8},
300*1b481fc3SMaciej Żenczykowski {"igu_tx_out_all_pkt", 8},
301*1b481fc3SMaciej Żenczykowski {"igu_rx_uni_pkt", 8},
302*1b481fc3SMaciej Żenczykowski {"igu_rx_multi_pkt", 8},
303*1b481fc3SMaciej Żenczykowski {"igu_rx_broad_pkt", 8},
304*1b481fc3SMaciej Żenczykowski {"egu_tx_out_all_pkt", 8},
305*1b481fc3SMaciej Żenczykowski {"egu_tx_uni_pkt", 8},
306*1b481fc3SMaciej Żenczykowski {"egu_tx_multi_pkt", 8},
307*1b481fc3SMaciej Żenczykowski {"egu_tx_broad_pkt", 8},
308*1b481fc3SMaciej Żenczykowski {"igu_tx_key_num", 8},
309*1b481fc3SMaciej Żenczykowski {"igu_rx_non_tun_pkt", 8},
310*1b481fc3SMaciej Żenczykowski {"igu_rx_tun_pkt", 8},
311*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
312*1b481fc3SMaciej Żenczykowski };
313*1b481fc3SMaciej Żenczykowski
314*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_rpu_0_regs[] = {
315*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
316*1b481fc3SMaciej Żenczykowski {"fsm_dfx_st0", 4},
317*1b481fc3SMaciej Żenczykowski {"fsm_dfx_st1", 4},
318*1b481fc3SMaciej Żenczykowski {"rpu_rx_pkt_drop_cnt", 4},
319*1b481fc3SMaciej Żenczykowski {"buf_wait_timeout", 4},
320*1b481fc3SMaciej Żenczykowski {"buf_wait_timeout_qid", 4},
321*1b481fc3SMaciej Żenczykowski };
322*1b481fc3SMaciej Żenczykowski
323*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_rpu_1_regs[] = {
324*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
325*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st0", 4},
326*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st1", 4},
327*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st2", 4},
328*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st3", 4},
329*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st4", 4},
330*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st5", 4},
331*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 20},
332*1b481fc3SMaciej Żenczykowski };
333*1b481fc3SMaciej Żenczykowski
334*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_ncsi_regs[] = {
335*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
336*1b481fc3SMaciej Żenczykowski {"ncsi_egu_tx_fifo_sts", 4},
337*1b481fc3SMaciej Żenczykowski {"ncsi_pause_status", 4},
338*1b481fc3SMaciej Żenczykowski {"ncsi_rx_ctrl_dmac_err_cnt", 4},
339*1b481fc3SMaciej Żenczykowski {"ncsi_rx_ctrl_smac_err_cnt", 4},
340*1b481fc3SMaciej Żenczykowski {"ncsi_rx_ctrl_cks_err_cnt", 4},
341*1b481fc3SMaciej Żenczykowski {"ncsi_rx_ctrl_pkt_cnt", 4},
342*1b481fc3SMaciej Żenczykowski {"ncsi_rx_pt_dmac_err_cnt", 4},
343*1b481fc3SMaciej Żenczykowski {"ncsi_rx_pt_smac_err_cnt", 4},
344*1b481fc3SMaciej Żenczykowski {"ncsi_rx_pt_pkt_cnt", 4},
345*1b481fc3SMaciej Żenczykowski {"ncsi_rx_fcs_err_cnt", 4},
346*1b481fc3SMaciej Żenczykowski {"ncsi_tx_ctrl_dmac_err_cnt", 4},
347*1b481fc3SMaciej Żenczykowski {"ncsi_tx_ctrl_smac_err_cnt", 4},
348*1b481fc3SMaciej Żenczykowski {"ncsi_tx_ctrl_pkt_cnt", 4},
349*1b481fc3SMaciej Żenczykowski {"ncsi_tx_pt_dmac_err_cnt", 4},
350*1b481fc3SMaciej Żenczykowski {"ncsi_tx_pt_smac_err_cnt", 4},
351*1b481fc3SMaciej Żenczykowski {"ncsi_tx_pt_pkt_cnt", 4},
352*1b481fc3SMaciej Żenczykowski {"ncsi_tx_pt_pkt_trun_cnt", 4},
353*1b481fc3SMaciej Żenczykowski {"ncsi_tx_pt_pkt_err_cnt", 4},
354*1b481fc3SMaciej Żenczykowski {"ncsi_tx_ctrl_pkt_err_cnt", 4},
355*1b481fc3SMaciej Żenczykowski {"ncsi_rx_ctrl_pkt_trun_cnt", 4},
356*1b481fc3SMaciej Żenczykowski {"ncsi_rx_ctrl_pkt_cflit_cnt", 4},
357*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
358*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_octets_ok", 4},
359*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_octets_bad", 4},
360*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_uc_pkts", 4},
361*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_mc_pkts", 4},
362*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_bc_pkts", 4},
363*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_64octets", 4},
364*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_65to127octets", 4},
365*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_128to255octets", 4},
366*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_256to511octets", 4},
367*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_512to1023octets", 4},
368*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_1024to1518octets", 4},
369*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pkts_1519tomaxoctets", 4},
370*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_fcs_errors", 4},
371*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_long_errors", 4},
372*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_jabber_errors", 4},
373*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_runt_err_cnt", 4},
374*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_short_err_cnt", 4},
375*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_filt_pkt_cnt", 4},
376*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_octets_total_filt", 4},
377*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_octets_ok", 4},
378*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_octets_bad", 4},
379*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_uc_pkts", 4},
380*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_mc_pkts", 4},
381*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_bc_pkts", 4},
382*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_64octets", 4},
383*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_65to127octets", 4},
384*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_128to255octets", 4},
385*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_256to511octets", 4},
386*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_512to1023octets", 4},
387*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_1024to1518octets", 4},
388*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pkts_1519tomaxoctets", 4},
389*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_underrun", 4},
390*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_crc_error", 4},
391*1b481fc3SMaciej Żenczykowski {"ncsi_mac_tx_pause_frames", 4},
392*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pad_pkts", 4},
393*1b481fc3SMaciej Żenczykowski {"ncsi_mac_rx_pause_frames", 4},
394*1b481fc3SMaciej Żenczykowski };
395*1b481fc3SMaciej Żenczykowski
396*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_rtc_regs[] = {
397*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
398*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_0", 4},
399*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_1", 4},
400*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_2", 4},
401*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_3", 4},
402*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_4", 4},
403*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_5", 4},
404*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_6", 4},
405*1b481fc3SMaciej Żenczykowski {"lge_igu_afifo_dfx_7", 4},
406*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_0", 4},
407*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_1", 4},
408*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_2", 4},
409*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_3", 4},
410*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_4", 4},
411*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_5", 4},
412*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_6", 4},
413*1b481fc3SMaciej Żenczykowski {"lge_egu_afifo_dfx_7", 4},
414*1b481fc3SMaciej Żenczykowski {"cge_igu_afifo_dfx_0", 4},
415*1b481fc3SMaciej Żenczykowski {"cge_igu_afifo_dfx_1", 4},
416*1b481fc3SMaciej Żenczykowski {"cge_egu_afifo_dfx_0", 4},
417*1b481fc3SMaciej Żenczykowski {"cge_egu_afifo_dfx_1", 4},
418*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 12},
419*1b481fc3SMaciej Żenczykowski };
420*1b481fc3SMaciej Żenczykowski
421*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_ppp_regs[] = {
422*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
423*1b481fc3SMaciej Żenczykowski {"drop_from_prt_pkt_cnt", 4},
424*1b481fc3SMaciej Żenczykowski {"drop_from_host_pkt_cnt", 4},
425*1b481fc3SMaciej Żenczykowski {"drop_tx_vlan_proc_cnt", 4},
426*1b481fc3SMaciej Żenczykowski {"drop_mng_cnt", 4},
427*1b481fc3SMaciej Żenczykowski {"drop_fd_cnt", 4},
428*1b481fc3SMaciej Żenczykowski {"drop_no_dst_cnt", 4},
429*1b481fc3SMaciej Żenczykowski {"drop_mc_mbid_full_cnt", 4},
430*1b481fc3SMaciej Żenczykowski {"drop_sc_filtered", 4},
431*1b481fc3SMaciej Żenczykowski {"ppp_mc_drop_pkt_cnt", 4},
432*1b481fc3SMaciej Żenczykowski {"drop_pt_cnt", 4},
433*1b481fc3SMaciej Żenczykowski {"drop_mac_anti_spoof_cnt", 4},
434*1b481fc3SMaciej Żenczykowski {"drop_ig_vfv_cnt", 4},
435*1b481fc3SMaciej Żenczykowski {"drop_ig_prtv_cnt", 4},
436*1b481fc3SMaciej Żenczykowski {"drop_cnm_pfc_pause_cnt", 4},
437*1b481fc3SMaciej Żenczykowski {"drop_torus_tc_cnt", 4},
438*1b481fc3SMaciej Żenczykowski {"drop_torus_lpbk_cnt", 4},
439*1b481fc3SMaciej Żenczykowski {"ppp_hfs_sts", 4},
440*1b481fc3SMaciej Żenczykowski {"ppp_mc_rslt_sts", 4},
441*1b481fc3SMaciej Żenczykowski {"ppp_p3u_sts", 4},
442*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
443*1b481fc3SMaciej Żenczykowski {"ppp_umv_sts_0", 4},
444*1b481fc3SMaciej Żenczykowski {"ppp_umv_sts_1", 4},
445*1b481fc3SMaciej Żenczykowski {"ppp_vfv_sts", 4},
446*1b481fc3SMaciej Żenczykowski {"ppp_gro_key_cnt", 4},
447*1b481fc3SMaciej Żenczykowski {"ppp_gro_info_cnt", 4},
448*1b481fc3SMaciej Żenczykowski {"ppp_gro_drop_cnt", 4},
449*1b481fc3SMaciej Żenczykowski {"ppp_gro_out_cnt", 4},
450*1b481fc3SMaciej Żenczykowski {"ppp_gro_key_match_data_cnt", 4},
451*1b481fc3SMaciej Żenczykowski {"ppp_gro_key_match_tcam_cnt", 4},
452*1b481fc3SMaciej Żenczykowski {"ppp_gro_info_match_cnt", 4},
453*1b481fc3SMaciej Żenczykowski {"ppp_gro_free_entry_cnt", 4},
454*1b481fc3SMaciej Żenczykowski {"ppp_gro_inner_dfx_signal", 4},
455*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 12},
456*1b481fc3SMaciej Żenczykowski {"get_rx_pkt_cnt", 8},
457*1b481fc3SMaciej Żenczykowski {"get_tx_pkt_cnt", 8},
458*1b481fc3SMaciej Żenczykowski {"send_uc_prt2host_pkt_cnt", 8},
459*1b481fc3SMaciej Żenczykowski {"send_uc_prt2prt_pkt_cnt", 8},
460*1b481fc3SMaciej Żenczykowski {"send_uc_host2host_pkt_cnt", 8},
461*1b481fc3SMaciej Żenczykowski {"send_uc_host2prt_pkt_cnt", 8},
462*1b481fc3SMaciej Żenczykowski {"send_mc_from_prt_cnt", 8},
463*1b481fc3SMaciej Żenczykowski {"send_mc_from_host_cnt", 8},
464*1b481fc3SMaciej Żenczykowski {"ssu_mc_rd_cnt", 8},
465*1b481fc3SMaciej Żenczykowski {"ssu_mc_drop_cnt", 8},
466*1b481fc3SMaciej Żenczykowski {"ssu_mc_rd_pkt_cnt", 8},
467*1b481fc3SMaciej Żenczykowski {"ppp_mc_2host_pkt_cnt", 8},
468*1b481fc3SMaciej Żenczykowski {"ppp_mc_2prt_pkt_cnt", 8},
469*1b481fc3SMaciej Żenczykowski {"ntsnos_pkt_cnt", 8},
470*1b481fc3SMaciej Żenczykowski {"ntup_pkt_cnt", 8},
471*1b481fc3SMaciej Żenczykowski {"ntlcl_pkt_cnt", 8},
472*1b481fc3SMaciej Żenczykowski {"nttgt_pkt_cnt", 8},
473*1b481fc3SMaciej Żenczykowski {"rtns_pkt_cnt", 8},
474*1b481fc3SMaciej Żenczykowski {"rtlpbk_pkt_cnt", 8},
475*1b481fc3SMaciej Żenczykowski {"nr_pkt_cnt", 8},
476*1b481fc3SMaciej Żenczykowski {"rr_pkt_cnt", 8},
477*1b481fc3SMaciej Żenczykowski {"mng_tbl_hit_cnt", 8},
478*1b481fc3SMaciej Żenczykowski {"fd_tbl_hit_cnt", 8},
479*1b481fc3SMaciej Żenczykowski {"fd_lkup_cnt", 8},
480*1b481fc3SMaciej Żenczykowski {"bc_hit_cnt", 8},
481*1b481fc3SMaciej Żenczykowski {"um_tbl_uc_hit_cnt", 8},
482*1b481fc3SMaciej Żenczykowski {"um_tbl_mc_hit_cnt", 8},
483*1b481fc3SMaciej Żenczykowski {"um_tbl_snq_hit_cnt", 8},
484*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 8},
485*1b481fc3SMaciej Żenczykowski {"fwd_bonding_hit_cnt", 8},
486*1b481fc3SMaciej Żenczykowski {"promis_tbl_hit_cnt", 8},
487*1b481fc3SMaciej Żenczykowski {"get_tunl_pkt_cnt", 8},
488*1b481fc3SMaciej Żenczykowski {"get_bmc_pkt_cnt", 8},
489*1b481fc3SMaciej Żenczykowski {"send_uc_prt2bmc_pkt_cnt", 8},
490*1b481fc3SMaciej Żenczykowski {"send_uc_host2bmc_pkt_cnt", 8},
491*1b481fc3SMaciej Żenczykowski {"send_uc_bmc2host_pkt_cnt", 8},
492*1b481fc3SMaciej Żenczykowski {"send_uc_bmc2prt_pkt_cnt", 8},
493*1b481fc3SMaciej Żenczykowski {"ppp_mc_2bmc_pkt_cnt", 8},
494*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 24},
495*1b481fc3SMaciej Żenczykowski {"rx_default_host_hit_cnt", 8},
496*1b481fc3SMaciej Żenczykowski {"lan_pair_cnt", 8},
497*1b481fc3SMaciej Żenczykowski {"um_tbl_mc_hit_pkt_cnt", 8},
498*1b481fc3SMaciej Żenczykowski {"mta_tbl_hit_pkt_cnt", 8},
499*1b481fc3SMaciej Żenczykowski {"promis_tbl_hit_pkt_cnt", 8},
500*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 16},
501*1b481fc3SMaciej Żenczykowski };
502*1b481fc3SMaciej Żenczykowski
503*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_rcb_regs[] = {
504*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 4},
505*1b481fc3SMaciej Żenczykowski {"fsm_dfx_st0", 4},
506*1b481fc3SMaciej Żenczykowski {"fsm_dfx_st1", 4},
507*1b481fc3SMaciej Żenczykowski {"fsm_dfx_st2", 4},
508*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st0", 4},
509*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st1", 4},
510*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st2", 4},
511*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st3", 4},
512*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st4", 4},
513*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st5", 4},
514*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st6", 4},
515*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st7", 4},
516*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st8", 4},
517*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st9", 4},
518*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st10", 4},
519*1b481fc3SMaciej Żenczykowski {"fifo_dfx_st11", 4},
520*1b481fc3SMaciej Żenczykowski {"q_credit_vld_0", 4},
521*1b481fc3SMaciej Żenczykowski {"q_credit_vld_1", 4},
522*1b481fc3SMaciej Żenczykowski {"q_credit_vld_2", 4},
523*1b481fc3SMaciej Żenczykowski {"q_credit_vld_3", 4},
524*1b481fc3SMaciej Żenczykowski {"q_credit_vld_4", 4},
525*1b481fc3SMaciej Żenczykowski {"q_credit_vld_5", 4},
526*1b481fc3SMaciej Żenczykowski {"q_credit_vld_6", 4},
527*1b481fc3SMaciej Żenczykowski {"q_credit_vld_7", 4},
528*1b481fc3SMaciej Żenczykowski {"q_credit_vld_8", 4},
529*1b481fc3SMaciej Żenczykowski {"q_credit_vld_9", 4},
530*1b481fc3SMaciej Żenczykowski {"q_credit_vld_10", 4},
531*1b481fc3SMaciej Żenczykowski {"q_credit_vld_11", 4},
532*1b481fc3SMaciej Żenczykowski {"q_credit_vld_12", 4},
533*1b481fc3SMaciej Żenczykowski {"q_credit_vld_13", 4},
534*1b481fc3SMaciej Żenczykowski {"q_credit_vld_14", 4},
535*1b481fc3SMaciej Żenczykowski {"q_credit_vld_15", 4},
536*1b481fc3SMaciej Żenczykowski {"q_credit_vld_16", 4},
537*1b481fc3SMaciej Żenczykowski {"q_credit_vld_17", 4},
538*1b481fc3SMaciej Żenczykowski {"q_credit_vld_18", 4},
539*1b481fc3SMaciej Żenczykowski {"q_credit_vld_19", 4},
540*1b481fc3SMaciej Żenczykowski {"q_credit_vld_20", 4},
541*1b481fc3SMaciej Żenczykowski {"q_credit_vld_21", 4},
542*1b481fc3SMaciej Żenczykowski {"q_credit_vld_22", 4},
543*1b481fc3SMaciej Żenczykowski {"q_credit_vld_23", 4},
544*1b481fc3SMaciej Żenczykowski {"q_credit_vld_24", 4},
545*1b481fc3SMaciej Żenczykowski {"q_credit_vld_25", 4},
546*1b481fc3SMaciej Żenczykowski {"q_credit_vld_26", 4},
547*1b481fc3SMaciej Żenczykowski {"q_credit_vld_27", 4},
548*1b481fc3SMaciej Żenczykowski {"q_credit_vld_28", 4},
549*1b481fc3SMaciej Żenczykowski {"q_credit_vld_29", 4},
550*1b481fc3SMaciej Żenczykowski {"q_credit_vld_30", 4},
551*1b481fc3SMaciej Żenczykowski {"q_credit_vld_31", 4},
552*1b481fc3SMaciej Żenczykowski {"gro_bd_serr_cnt", 4},
553*1b481fc3SMaciej Żenczykowski {"gro_context_serr_cnt", 4},
554*1b481fc3SMaciej Żenczykowski {"rx_stash_cfg_serr_cnt", 4},
555*1b481fc3SMaciej Żenczykowski {"rcb_tx_mem_serr_cnt", 4},
556*1b481fc3SMaciej Żenczykowski {"gro_bd_merr_cnt", 4},
557*1b481fc3SMaciej Żenczykowski {"gro_context_merr_cnt", 4},
558*1b481fc3SMaciej Żenczykowski {"rx_stash_cfg_merr_cnt", 4},
559*1b481fc3SMaciej Żenczykowski {"rcb_tx_mem_merr_cnt", 4},
560*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 16},
561*1b481fc3SMaciej Żenczykowski };
562*1b481fc3SMaciej Żenczykowski
563*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_tqp_regs[] = {
564*1b481fc3SMaciej Żenczykowski {"q_num", 4},
565*1b481fc3SMaciej Żenczykowski {"rcb_cfg_rx_ring_tail", 4},
566*1b481fc3SMaciej Żenczykowski {"rcb_cfg_rx_ring_head", 4},
567*1b481fc3SMaciej Żenczykowski {"rcb_cfg_rx_ring_fbdnum", 4},
568*1b481fc3SMaciej Żenczykowski {"rcb_cfg_rx_ring_offset", 4},
569*1b481fc3SMaciej Żenczykowski {"rcb_cfg_rx_ring_fbdoffset", 4},
570*1b481fc3SMaciej Żenczykowski {"rcb_cfg_rx_ring_pktnum_record", 4},
571*1b481fc3SMaciej Żenczykowski {"rcb_cfg_tx_ring_tail", 4},
572*1b481fc3SMaciej Żenczykowski {"rcb_cfg_tx_ring_head", 4},
573*1b481fc3SMaciej Żenczykowski {"rcb_cfg_tx_ring_fbdnum", 4},
574*1b481fc3SMaciej Żenczykowski {"rcb_cfg_tx_ring_offset", 4},
575*1b481fc3SMaciej Żenczykowski {"rcb_cfg_tx_ring_ebdnum", 4},
576*1b481fc3SMaciej Żenczykowski };
577*1b481fc3SMaciej Żenczykowski
578*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info dfx_ssu_2_regs[] = {
579*1b481fc3SMaciej Żenczykowski {"oq_index", 4},
580*1b481fc3SMaciej Żenczykowski {"queue_cnt", 4},
581*1b481fc3SMaciej Żenczykowski {HNS3_REG_RSV_NAME, 16},
582*1b481fc3SMaciej Żenczykowski };
583*1b481fc3SMaciej Żenczykowski
584*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info vf_cmdq_regs[] = {
585*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_baseaddr_l", 4},
586*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_baseaddr_h", 4},
587*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_depth", 4},
588*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_tail", 4},
589*1b481fc3SMaciej Żenczykowski {"comm_nic_csq_head", 4},
590*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_baseaddr_l", 4},
591*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_baseaddr_h", 4},
592*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_depth", 4},
593*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_tail", 4},
594*1b481fc3SMaciej Żenczykowski {"comm_nic_crq_head", 4},
595*1b481fc3SMaciej Żenczykowski {"comm_vector0_cmdq_src", 4},
596*1b481fc3SMaciej Żenczykowski {"comm_vector0_cmdq_state", 4},
597*1b481fc3SMaciej Żenczykowski {"comm_cmdq_intr_en", 4},
598*1b481fc3SMaciej Żenczykowski {"comm_cmdq_intr_gen", 4},
599*1b481fc3SMaciej Żenczykowski };
600*1b481fc3SMaciej Żenczykowski
601*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info vf_common_regs[] = {
602*1b481fc3SMaciej Żenczykowski {"misc_vector_base", 4},
603*1b481fc3SMaciej Żenczykowski {"rst_ing", 4},
604*1b481fc3SMaciej Żenczykowski {"gro_en", 4},
605*1b481fc3SMaciej Żenczykowski };
606*1b481fc3SMaciej Żenczykowski
607*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info vf_ring_regs[] = {
608*1b481fc3SMaciej Żenczykowski {"ring_rx_addr_l", 4},
609*1b481fc3SMaciej Żenczykowski {"ring_rx_addr_h", 4},
610*1b481fc3SMaciej Żenczykowski {"ring_rx_bd_num", 4},
611*1b481fc3SMaciej Żenczykowski {"ring_rx_bd_length", 4},
612*1b481fc3SMaciej Żenczykowski {"ring_rx_merge_en", 4},
613*1b481fc3SMaciej Żenczykowski {"ring_rx_tail", 4},
614*1b481fc3SMaciej Żenczykowski {"ring_rx_head", 4},
615*1b481fc3SMaciej Żenczykowski {"ring_rx_fbd_num", 4},
616*1b481fc3SMaciej Żenczykowski {"ring_rx_offset", 4},
617*1b481fc3SMaciej Żenczykowski {"ring_rx_fbd_offset", 4},
618*1b481fc3SMaciej Żenczykowski {"ring_rx_stash", 4},
619*1b481fc3SMaciej Żenczykowski {"ring_rx_bd_err", 4},
620*1b481fc3SMaciej Żenczykowski {"ring_tx_addr_l", 4},
621*1b481fc3SMaciej Żenczykowski {"ring_tx_addr_h", 4},
622*1b481fc3SMaciej Żenczykowski {"ring_tx_bd_num", 4},
623*1b481fc3SMaciej Żenczykowski {"ring_tx_priority", 4},
624*1b481fc3SMaciej Żenczykowski {"ring_tx_tc", 4},
625*1b481fc3SMaciej Żenczykowski {"ring_tx_merge_en", 4},
626*1b481fc3SMaciej Żenczykowski {"ring_tx_tail", 4},
627*1b481fc3SMaciej Żenczykowski {"ring_tx_head", 4},
628*1b481fc3SMaciej Żenczykowski {"ring_tx_fbd_num", 4},
629*1b481fc3SMaciej Żenczykowski {"ring_tx_offset", 4},
630*1b481fc3SMaciej Żenczykowski {"ring_tx_ebd_num", 4},
631*1b481fc3SMaciej Żenczykowski {"ring_tx_ebd_offset", 4},
632*1b481fc3SMaciej Żenczykowski {"ring_tx_bd_err", 4},
633*1b481fc3SMaciej Żenczykowski {"ring_en", 4},
634*1b481fc3SMaciej Żenczykowski };
635*1b481fc3SMaciej Żenczykowski
636*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info vf_tqp_intr_regs[] = {
637*1b481fc3SMaciej Żenczykowski {"tqp_intr_ctrl", 4},
638*1b481fc3SMaciej Żenczykowski {"tqp_intr_gl0", 4},
639*1b481fc3SMaciej Żenczykowski {"tqp_intr_gl1", 4},
640*1b481fc3SMaciej Żenczykowski {"tqp_intr_gl2", 4},
641*1b481fc3SMaciej Żenczykowski {"tqp_intr_rl", 4},
642*1b481fc3SMaciej Żenczykowski };
643*1b481fc3SMaciej Żenczykowski
644*1b481fc3SMaciej Żenczykowski const struct hns3_regs_group pf_regs_groups[] = {
645*1b481fc3SMaciej Żenczykowski [HNS3_TAG_CMDQ] = {"cmdq_regs", pf_cmdq_regs, ARRAY_SIZE(pf_cmdq_regs)},
646*1b481fc3SMaciej Żenczykowski [HNS3_TAG_COMMON] = {"common_regs", pf_common_regs,
647*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(pf_common_regs)},
648*1b481fc3SMaciej Żenczykowski [HNS3_TAG_RING] = {"ring_regs", pf_ring_regs, ARRAY_SIZE(pf_ring_regs)},
649*1b481fc3SMaciej Żenczykowski [HNS3_TAG_TQP_INTR] = {"tqp_intr_regs", pf_tqp_intr_regs,
650*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(pf_tqp_intr_regs)},
651*1b481fc3SMaciej Żenczykowski [HNS3_TAG_QUERY_32_BIT] = {"dfx_32_regs", query_32_bit_regs,
652*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(query_32_bit_regs)},
653*1b481fc3SMaciej Żenczykowski [HNS3_TAG_QUERY_64_BIT] = {"dfx_64_regs", query_64_bit_regs,
654*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(query_64_bit_regs)},
655*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_BIOS_COMMON] = {"dfx_bios_common_regs",
656*1b481fc3SMaciej Żenczykowski dfx_bios_common_regs,
657*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_bios_common_regs)},
658*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_SSU_0] = {"dfx_ssu_0_regs", dfx_ssu_0_regs,
659*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_ssu_0_regs)},
660*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_SSU_1] = {"dfx_ssu_1_regs", dfx_ssu_1_regs,
661*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_ssu_1_regs)},
662*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_IGU_EGU] = {"dfx_igu_egu_regs", dfx_igu_egu_regs,
663*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_igu_egu_regs)},
664*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_RPU_0] = {"dfx_rpu_0_regs", dfx_rpu_0_regs,
665*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_rpu_0_regs)},
666*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_RPU_1] = {"dfx_rpu_1_regs", dfx_rpu_1_regs,
667*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_rpu_1_regs)},
668*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_NCSI] = {"dfx_ncsi_regs", dfx_ncsi_regs,
669*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_ncsi_regs)},
670*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_RTC] = {"dfx_rtc_regs", dfx_rtc_regs,
671*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_rtc_regs)},
672*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_PPP] = {"dfx_ppp_regs", dfx_ppp_regs,
673*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_ppp_regs)},
674*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_RCB] = {"dfx_rcb_regs", dfx_rcb_regs,
675*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_rcb_regs)},
676*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_TQP] = {"dfx_tqp_regs", dfx_tqp_regs,
677*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_tqp_regs)},
678*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_SSU_2] = {"dfx_ssu_2_regs", dfx_ssu_2_regs,
679*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_ssu_2_regs)},
680*1b481fc3SMaciej Żenczykowski [HNS3_TAG_DFX_RPU_TNL] = {"dfx_rpu_tnl", dfx_rpu_0_regs,
681*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(dfx_rpu_0_regs)},
682*1b481fc3SMaciej Żenczykowski };
683*1b481fc3SMaciej Żenczykowski
684*1b481fc3SMaciej Żenczykowski const struct hns3_regs_group vf_regs_groups[] = {
685*1b481fc3SMaciej Żenczykowski [HNS3_TAG_CMDQ] = {"cmdq_regs", vf_cmdq_regs, ARRAY_SIZE(vf_cmdq_regs)},
686*1b481fc3SMaciej Żenczykowski [HNS3_TAG_COMMON] = {"common_regs", vf_common_regs,
687*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(vf_common_regs)},
688*1b481fc3SMaciej Żenczykowski [HNS3_TAG_RING] = {"ring_regs", vf_ring_regs, ARRAY_SIZE(vf_ring_regs)},
689*1b481fc3SMaciej Żenczykowski [HNS3_TAG_TQP_INTR] = {"tqp_intr_regs", vf_tqp_intr_regs,
690*1b481fc3SMaciej Żenczykowski ARRAY_SIZE(vf_tqp_intr_regs)},
691*1b481fc3SMaciej Żenczykowski };
692*1b481fc3SMaciej Żenczykowski
hns3_dump_reg_hex(const char * regs_name,const u8 * regs_data,u16 value_len,u32 name_max_len)693*1b481fc3SMaciej Żenczykowski static void hns3_dump_reg_hex(const char *regs_name, const u8 *regs_data,
694*1b481fc3SMaciej Żenczykowski u16 value_len, u32 name_max_len)
695*1b481fc3SMaciej Żenczykowski {
696*1b481fc3SMaciej Żenczykowski if (strcmp(regs_name, HNS3_REG_RSV_NAME) == 0)
697*1b481fc3SMaciej Żenczykowski return;
698*1b481fc3SMaciej Żenczykowski
699*1b481fc3SMaciej Żenczykowski fprintf(stdout, " %-*s : ", name_max_len, regs_name);
700*1b481fc3SMaciej Żenczykowski if (value_len == 4) /* 4 bytes register */
701*1b481fc3SMaciej Żenczykowski fprintf(stdout, "0x%08x\n", *(u32 *)regs_data);
702*1b481fc3SMaciej Żenczykowski if (value_len == 8) /* 8 bytes register */
703*1b481fc3SMaciej Żenczykowski fprintf(stdout, "0x%016llx\n", *(u64 *)regs_data);
704*1b481fc3SMaciej Żenczykowski }
705*1b481fc3SMaciej Żenczykowski
hns3_get_group_regs_name_max_len(const struct hns3_regs_group * group)706*1b481fc3SMaciej Żenczykowski static u32 hns3_get_group_regs_name_max_len(const struct hns3_regs_group *group)
707*1b481fc3SMaciej Żenczykowski {
708*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info *reg;
709*1b481fc3SMaciej Żenczykowski u32 max_len = 0;
710*1b481fc3SMaciej Żenczykowski u16 i;
711*1b481fc3SMaciej Żenczykowski
712*1b481fc3SMaciej Żenczykowski for (i = 0; i < group->regs_count; i++) {
713*1b481fc3SMaciej Żenczykowski reg = &group->regs[i];
714*1b481fc3SMaciej Żenczykowski max_len = strlen(reg->name) > max_len ?
715*1b481fc3SMaciej Żenczykowski strlen(reg->name) : max_len;
716*1b481fc3SMaciej Żenczykowski }
717*1b481fc3SMaciej Żenczykowski
718*1b481fc3SMaciej Żenczykowski return max_len;
719*1b481fc3SMaciej Żenczykowski }
720*1b481fc3SMaciej Żenczykowski
hns3_get_group_name(const struct hns3_regs_group * group,u32 tag)721*1b481fc3SMaciej Żenczykowski static const char *hns3_get_group_name(const struct hns3_regs_group *group,
722*1b481fc3SMaciej Żenczykowski u32 tag)
723*1b481fc3SMaciej Żenczykowski {
724*1b481fc3SMaciej Żenczykowski static u32 pre_tag = HNS3_TAG_MAX;
725*1b481fc3SMaciej Żenczykowski static char group_name[256];
726*1b481fc3SMaciej Żenczykowski static u32 index;
727*1b481fc3SMaciej Żenczykowski
728*1b481fc3SMaciej Żenczykowski if (!hns3_reg_is_repeat_tag_array[tag])
729*1b481fc3SMaciej Żenczykowski return group->group_name;
730*1b481fc3SMaciej Żenczykowski
731*1b481fc3SMaciej Żenczykowski if (tag != pre_tag)
732*1b481fc3SMaciej Żenczykowski index = 0;
733*1b481fc3SMaciej Żenczykowski
734*1b481fc3SMaciej Żenczykowski pre_tag = tag;
735*1b481fc3SMaciej Żenczykowski sprintf(group_name, "%s_%u", group->group_name, index++);
736*1b481fc3SMaciej Żenczykowski return group_name;
737*1b481fc3SMaciej Żenczykowski }
738*1b481fc3SMaciej Żenczykowski
hns3_dump_reg_group(const struct hns3_regs_group * group,u32 tag,u32 expected_len,const u8 * regs_data)739*1b481fc3SMaciej Żenczykowski static void hns3_dump_reg_group(const struct hns3_regs_group *group, u32 tag,
740*1b481fc3SMaciej Żenczykowski u32 expected_len, const u8 *regs_data)
741*1b481fc3SMaciej Żenczykowski {
742*1b481fc3SMaciej Żenczykowski u32 name_max_len = hns3_get_group_regs_name_max_len(group);
743*1b481fc3SMaciej Żenczykowski const struct hns3_reg_info *reg;
744*1b481fc3SMaciej Żenczykowski u32 dump_offset = 0;
745*1b481fc3SMaciej Żenczykowski u16 i;
746*1b481fc3SMaciej Żenczykowski
747*1b481fc3SMaciej Żenczykowski fprintf(stdout, "[%s]\n", hns3_get_group_name(group, tag));
748*1b481fc3SMaciej Żenczykowski for (i = 0; i < group->regs_count && dump_offset < expected_len; i++) {
749*1b481fc3SMaciej Żenczykowski reg = &group->regs[i];
750*1b481fc3SMaciej Żenczykowski hns3_dump_reg_hex(reg->name, regs_data + dump_offset,
751*1b481fc3SMaciej Żenczykowski reg->value_len, name_max_len);
752*1b481fc3SMaciej Żenczykowski dump_offset += reg->value_len;
753*1b481fc3SMaciej Żenczykowski }
754*1b481fc3SMaciej Żenczykowski
755*1b481fc3SMaciej Żenczykowski /* the driver may add new register.
756*1b481fc3SMaciej Żenczykowski * In this case, the register name is unknown.
757*1b481fc3SMaciej Żenczykowski * The register can be parsed as unknown:value format.
758*1b481fc3SMaciej Żenczykowski */
759*1b481fc3SMaciej Żenczykowski while (dump_offset < expected_len) {
760*1b481fc3SMaciej Żenczykowski hns3_dump_reg_hex(HNS3_REG_UNKNOW_NAME, regs_data + dump_offset,
761*1b481fc3SMaciej Żenczykowski HNS3_REG_UNKNOW_VALUE_LEN, name_max_len);
762*1b481fc3SMaciej Żenczykowski dump_offset += HNS3_REG_UNKNOW_VALUE_LEN;
763*1b481fc3SMaciej Żenczykowski }
764*1b481fc3SMaciej Żenczykowski }
765*1b481fc3SMaciej Żenczykowski
hns3_dump_as_groups(const struct hns3_regs_group * groups,const u8 * regs_data,u32 regs_len)766*1b481fc3SMaciej Żenczykowski static void hns3_dump_as_groups(const struct hns3_regs_group *groups,
767*1b481fc3SMaciej Żenczykowski const u8 *regs_data, u32 regs_len)
768*1b481fc3SMaciej Żenczykowski {
769*1b481fc3SMaciej Żenczykowski u32 tlv_size = sizeof(struct hns3_reg_tlv);
770*1b481fc3SMaciej Żenczykowski const struct hns3_reg_tlv *tlv;
771*1b481fc3SMaciej Żenczykowski u32 dump_offset = 0;
772*1b481fc3SMaciej Żenczykowski
773*1b481fc3SMaciej Żenczykowski while (dump_offset < regs_len) {
774*1b481fc3SMaciej Żenczykowski tlv = (const struct hns3_reg_tlv *)(regs_data + dump_offset);
775*1b481fc3SMaciej Żenczykowski hns3_dump_reg_group(&groups[tlv->tag], tlv->tag,
776*1b481fc3SMaciej Żenczykowski tlv->len - tlv_size,
777*1b481fc3SMaciej Żenczykowski regs_data + dump_offset + tlv_size);
778*1b481fc3SMaciej Żenczykowski dump_offset += tlv->len;
779*1b481fc3SMaciej Żenczykowski }
780*1b481fc3SMaciej Żenczykowski }
781*1b481fc3SMaciej Żenczykowski
hns3_dump_validate(const u8 * regs_data,u32 regs_len)782*1b481fc3SMaciej Żenczykowski static bool hns3_dump_validate(const u8 *regs_data, u32 regs_len)
783*1b481fc3SMaciej Żenczykowski {
784*1b481fc3SMaciej Żenczykowski u32 tlv_size = sizeof(struct hns3_reg_tlv);
785*1b481fc3SMaciej Żenczykowski const struct hns3_reg_tlv *tlv;
786*1b481fc3SMaciej Żenczykowski u32 dump_offset = 0;
787*1b481fc3SMaciej Żenczykowski
788*1b481fc3SMaciej Żenczykowski while (dump_offset < regs_len) {
789*1b481fc3SMaciej Żenczykowski tlv = (const struct hns3_reg_tlv *)(regs_data + dump_offset);
790*1b481fc3SMaciej Żenczykowski
791*1b481fc3SMaciej Żenczykowski /* register value length is 4 bytes or 8 bytes */
792*1b481fc3SMaciej Żenczykowski if ((tlv->len - tlv_size) % 4)
793*1b481fc3SMaciej Żenczykowski return false;
794*1b481fc3SMaciej Żenczykowski
795*1b481fc3SMaciej Żenczykowski if (tlv->tag >= HNS3_TAG_MAX)
796*1b481fc3SMaciej Żenczykowski return false;
797*1b481fc3SMaciej Żenczykowski
798*1b481fc3SMaciej Żenczykowski dump_offset += tlv->len;
799*1b481fc3SMaciej Żenczykowski }
800*1b481fc3SMaciej Żenczykowski
801*1b481fc3SMaciej Żenczykowski return dump_offset == regs_len;
802*1b481fc3SMaciej Żenczykowski }
803*1b481fc3SMaciej Żenczykowski
hns3_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)804*1b481fc3SMaciej Żenczykowski int hns3_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
805*1b481fc3SMaciej Żenczykowski struct ethtool_regs *regs)
806*1b481fc3SMaciej Żenczykowski {
807*1b481fc3SMaciej Żenczykowski const struct hns3_regs_group *groups = pf_regs_groups;
808*1b481fc3SMaciej Żenczykowski u32 header_len = sizeof(struct hns3_reg_header);
809*1b481fc3SMaciej Żenczykowski const struct hns3_reg_header *header;
810*1b481fc3SMaciej Żenczykowski
811*1b481fc3SMaciej Żenczykowski /* must contain header and register data */
812*1b481fc3SMaciej Żenczykowski if (regs->len <= header_len)
813*1b481fc3SMaciej Żenczykowski return -ENODATA;
814*1b481fc3SMaciej Żenczykowski
815*1b481fc3SMaciej Żenczykowski header = (struct hns3_reg_header *)regs->data;
816*1b481fc3SMaciej Żenczykowski if (header->magic_number != HNS3_REG_MAGIC_NUMBER)
817*1b481fc3SMaciej Żenczykowski return -EOPNOTSUPP;
818*1b481fc3SMaciej Żenczykowski
819*1b481fc3SMaciej Żenczykowski if (!hns3_dump_validate(regs->data + header_len,
820*1b481fc3SMaciej Żenczykowski regs->len - header_len))
821*1b481fc3SMaciej Żenczykowski return -EINVAL;
822*1b481fc3SMaciej Żenczykowski
823*1b481fc3SMaciej Żenczykowski if (header->is_vf)
824*1b481fc3SMaciej Żenczykowski groups = vf_regs_groups;
825*1b481fc3SMaciej Żenczykowski
826*1b481fc3SMaciej Żenczykowski hns3_dump_as_groups(groups, regs->data + header_len,
827*1b481fc3SMaciej Żenczykowski regs->len - header_len);
828*1b481fc3SMaciej Żenczykowski return 0;
829*1b481fc3SMaciej Żenczykowski }
830