xref: /freebsd/sys/dev/cxgbe/cudbg/cudbg_lib.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*f856f099SNavdeep Parhar /*-
2*f856f099SNavdeep Parhar  * Copyright (c) 2017 Chelsio Communications, Inc.
3*f856f099SNavdeep Parhar  * All rights reserved.
4*f856f099SNavdeep Parhar  *
5*f856f099SNavdeep Parhar  * Redistribution and use in source and binary forms, with or without
6*f856f099SNavdeep Parhar  * modification, are permitted provided that the following conditions
7*f856f099SNavdeep Parhar  * are met:
8*f856f099SNavdeep Parhar  * 1. Redistributions of source code must retain the above copyright
9*f856f099SNavdeep Parhar  *    notice, this list of conditions and the following disclaimer.
10*f856f099SNavdeep Parhar  * 2. Redistributions in binary form must reproduce the above copyright
11*f856f099SNavdeep Parhar  *    notice, this list of conditions and the following disclaimer in the
12*f856f099SNavdeep Parhar  *    documentation and/or other materials provided with the distribution.
13*f856f099SNavdeep Parhar  *
14*f856f099SNavdeep Parhar  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*f856f099SNavdeep Parhar  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*f856f099SNavdeep Parhar  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*f856f099SNavdeep Parhar  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*f856f099SNavdeep Parhar  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*f856f099SNavdeep Parhar  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*f856f099SNavdeep Parhar  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*f856f099SNavdeep Parhar  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*f856f099SNavdeep Parhar  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*f856f099SNavdeep Parhar  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*f856f099SNavdeep Parhar  * SUCH DAMAGE.
25*f856f099SNavdeep Parhar  *
26*f856f099SNavdeep Parhar  */
27*f856f099SNavdeep Parhar 
28*f856f099SNavdeep Parhar #ifndef __CUDBG_LIB_H__
29*f856f099SNavdeep Parhar #define __CUDBG_LIB_H__
30*f856f099SNavdeep Parhar 
31*f856f099SNavdeep Parhar #ifndef min_t
32*f856f099SNavdeep Parhar #define min_t(type, _a, _b)   (((type)(_a) < (type)(_b)) ? (type)(_a) : (type)(_b))
33*f856f099SNavdeep Parhar #endif
34*f856f099SNavdeep Parhar 
35*f856f099SNavdeep Parhar static int collect_reg_dump(struct cudbg_init *, struct cudbg_buffer *,
36*f856f099SNavdeep Parhar 			    struct cudbg_error *);
37*f856f099SNavdeep Parhar static int collect_fw_devlog(struct cudbg_init *, struct cudbg_buffer *,
38*f856f099SNavdeep Parhar 			     struct cudbg_error *);
39*f856f099SNavdeep Parhar static int collect_cim_qcfg(struct cudbg_init *, struct cudbg_buffer *,
40*f856f099SNavdeep Parhar 			    struct cudbg_error *);
41*f856f099SNavdeep Parhar static int collect_cim_la(struct cudbg_init *, struct cudbg_buffer *,
42*f856f099SNavdeep Parhar 			  struct cudbg_error *);
43*f856f099SNavdeep Parhar static int collect_cim_ma_la(struct cudbg_init *, struct cudbg_buffer *,
44*f856f099SNavdeep Parhar 			     struct cudbg_error *);
45*f856f099SNavdeep Parhar static int collect_cim_obq_ulp0(struct cudbg_init *, struct cudbg_buffer *,
46*f856f099SNavdeep Parhar 				struct cudbg_error *);
47*f856f099SNavdeep Parhar static int collect_cim_obq_ulp1(struct cudbg_init *, struct cudbg_buffer *,
48*f856f099SNavdeep Parhar 				struct cudbg_error *);
49*f856f099SNavdeep Parhar static int collect_cim_obq_ulp2(struct cudbg_init *, struct cudbg_buffer *,
50*f856f099SNavdeep Parhar 				struct cudbg_error *);
51*f856f099SNavdeep Parhar static int collect_cim_obq_ulp3(struct cudbg_init *, struct cudbg_buffer *,
52*f856f099SNavdeep Parhar 				struct cudbg_error *);
53*f856f099SNavdeep Parhar static int collect_cim_obq_sge(struct cudbg_init *, struct cudbg_buffer *,
54*f856f099SNavdeep Parhar 			       struct cudbg_error *);
55*f856f099SNavdeep Parhar static int collect_cim_obq_ncsi(struct cudbg_init *, struct cudbg_buffer *,
56*f856f099SNavdeep Parhar 				struct cudbg_error *);
57*f856f099SNavdeep Parhar static int collect_cim_ibq_tp0(struct cudbg_init *, struct cudbg_buffer *,
58*f856f099SNavdeep Parhar 			       struct cudbg_error *);
59*f856f099SNavdeep Parhar static int collect_cim_ibq_tp1(struct cudbg_init *, struct cudbg_buffer *,
60*f856f099SNavdeep Parhar 			       struct cudbg_error *);
61*f856f099SNavdeep Parhar static int collect_cim_ibq_ulp(struct cudbg_init *, struct cudbg_buffer *,
62*f856f099SNavdeep Parhar 			       struct cudbg_error *);
63*f856f099SNavdeep Parhar static int collect_cim_ibq_sge0(struct cudbg_init *, struct cudbg_buffer *,
64*f856f099SNavdeep Parhar 				struct cudbg_error *);
65*f856f099SNavdeep Parhar static int collect_cim_ibq_sge1(struct cudbg_init *, struct cudbg_buffer *,
66*f856f099SNavdeep Parhar 				struct cudbg_error *);
67*f856f099SNavdeep Parhar static int collect_cim_ibq_ncsi(struct cudbg_init *, struct cudbg_buffer *,
68*f856f099SNavdeep Parhar 				struct cudbg_error *);
69*f856f099SNavdeep Parhar static int collect_edc0_meminfo(struct cudbg_init *, struct cudbg_buffer *,
70*f856f099SNavdeep Parhar 				struct cudbg_error *);
71*f856f099SNavdeep Parhar static int collect_edc1_meminfo(struct cudbg_init *, struct cudbg_buffer *,
72*f856f099SNavdeep Parhar 				struct cudbg_error *);
73*f856f099SNavdeep Parhar static int collect_mc0_meminfo(struct cudbg_init *, struct cudbg_buffer *,
74*f856f099SNavdeep Parhar 			       struct cudbg_error *);
75*f856f099SNavdeep Parhar static int collect_mc1_meminfo(struct cudbg_init *, struct cudbg_buffer *,
76*f856f099SNavdeep Parhar 			       struct cudbg_error *);
77*f856f099SNavdeep Parhar static int collect_rss(struct cudbg_init *, struct cudbg_buffer *,
78*f856f099SNavdeep Parhar 		       struct cudbg_error *);
79*f856f099SNavdeep Parhar static int collect_rss_key(struct cudbg_init *, struct cudbg_buffer *,
80*f856f099SNavdeep Parhar 			   struct cudbg_error *);
81*f856f099SNavdeep Parhar static int collect_rss_pf_config(struct cudbg_init *, struct cudbg_buffer *,
82*f856f099SNavdeep Parhar 				 struct cudbg_error *);
83*f856f099SNavdeep Parhar static int collect_rss_vf_config(struct cudbg_init *, struct cudbg_buffer *,
84*f856f099SNavdeep Parhar 				 struct cudbg_error *);
85*f856f099SNavdeep Parhar static int collect_rss_config(struct cudbg_init *, struct cudbg_buffer *,
86*f856f099SNavdeep Parhar 			      struct cudbg_error *);
87*f856f099SNavdeep Parhar static int collect_path_mtu(struct cudbg_init *, struct cudbg_buffer *,
88*f856f099SNavdeep Parhar 			    struct cudbg_error *);
89*f856f099SNavdeep Parhar static int collect_sw_state(struct cudbg_init *, struct cudbg_buffer *,
90*f856f099SNavdeep Parhar 			    struct cudbg_error *);
91*f856f099SNavdeep Parhar int collect_wtp_data(struct cudbg_init *, struct cudbg_buffer *,
92*f856f099SNavdeep Parhar 		     struct cudbg_error *);
93*f856f099SNavdeep Parhar static int collect_pm_stats(struct cudbg_init *, struct cudbg_buffer *,
94*f856f099SNavdeep Parhar 			    struct cudbg_error *);
95*f856f099SNavdeep Parhar static int collect_hw_sched(struct cudbg_init *, struct cudbg_buffer *,
96*f856f099SNavdeep Parhar 			    struct cudbg_error *);
97*f856f099SNavdeep Parhar static int collect_tcp_stats(struct cudbg_init *, struct cudbg_buffer *,
98*f856f099SNavdeep Parhar 			     struct cudbg_error *);
99*f856f099SNavdeep Parhar static int collect_tp_err_stats(struct cudbg_init *, struct cudbg_buffer *,
100*f856f099SNavdeep Parhar 				struct cudbg_error *);
101*f856f099SNavdeep Parhar static int collect_fcoe_stats(struct cudbg_init *, struct cudbg_buffer *,
102*f856f099SNavdeep Parhar 			      struct cudbg_error *);
103*f856f099SNavdeep Parhar static int collect_rdma_stats(struct cudbg_init *, struct cudbg_buffer *,
104*f856f099SNavdeep Parhar 			      struct cudbg_error *);
105*f856f099SNavdeep Parhar static int collect_tp_indirect(struct cudbg_init *, struct cudbg_buffer *,
106*f856f099SNavdeep Parhar 			       struct cudbg_error *);
107*f856f099SNavdeep Parhar static int collect_sge_indirect(struct cudbg_init *, struct cudbg_buffer *,
108*f856f099SNavdeep Parhar 				struct cudbg_error *);
109*f856f099SNavdeep Parhar static int collect_cpl_stats(struct cudbg_init *, struct cudbg_buffer *,
110*f856f099SNavdeep Parhar 			     struct cudbg_error *);
111*f856f099SNavdeep Parhar static int collect_ddp_stats(struct cudbg_init *, struct cudbg_buffer *,
112*f856f099SNavdeep Parhar 			     struct cudbg_error *);
113*f856f099SNavdeep Parhar static int collect_wc_stats(struct cudbg_init *, struct cudbg_buffer *,
114*f856f099SNavdeep Parhar 			    struct cudbg_error *);
115*f856f099SNavdeep Parhar static int collect_ulprx_la(struct cudbg_init *, struct cudbg_buffer *,
116*f856f099SNavdeep Parhar 			    struct cudbg_error *);
117*f856f099SNavdeep Parhar static int collect_lb_stats(struct cudbg_init *, struct cudbg_buffer *,
118*f856f099SNavdeep Parhar 			    struct cudbg_error *);
119*f856f099SNavdeep Parhar static int collect_tp_la(struct cudbg_init *, struct cudbg_buffer *,
120*f856f099SNavdeep Parhar 			 struct cudbg_error *);
121*f856f099SNavdeep Parhar static int collect_meminfo(struct cudbg_init *, struct cudbg_buffer *,
122*f856f099SNavdeep Parhar 			   struct cudbg_error *);
123*f856f099SNavdeep Parhar static int collect_cim_pif_la(struct cudbg_init *, struct cudbg_buffer *,
124*f856f099SNavdeep Parhar 			      struct cudbg_error *);
125*f856f099SNavdeep Parhar static int collect_clk_info(struct cudbg_init *, struct cudbg_buffer *,
126*f856f099SNavdeep Parhar 			    struct cudbg_error *);
127*f856f099SNavdeep Parhar static int collect_obq_sge_rx_q0(struct cudbg_init *, struct cudbg_buffer *,
128*f856f099SNavdeep Parhar 				 struct cudbg_error *);
129*f856f099SNavdeep Parhar static int collect_obq_sge_rx_q1(struct cudbg_init *, struct cudbg_buffer *,
130*f856f099SNavdeep Parhar 				 struct cudbg_error *);
131*f856f099SNavdeep Parhar static int collect_macstats(struct cudbg_init *, struct cudbg_buffer *,
132*f856f099SNavdeep Parhar 			    struct cudbg_error *);
133*f856f099SNavdeep Parhar static int collect_pcie_indirect(struct cudbg_init *, struct cudbg_buffer *,
134*f856f099SNavdeep Parhar 				 struct cudbg_error *);
135*f856f099SNavdeep Parhar static int collect_pm_indirect(struct cudbg_init *, struct cudbg_buffer *,
136*f856f099SNavdeep Parhar 			       struct cudbg_error *);
137*f856f099SNavdeep Parhar static int collect_full(struct cudbg_init *, struct cudbg_buffer *,
138*f856f099SNavdeep Parhar 			struct cudbg_error *);
139*f856f099SNavdeep Parhar static int collect_tx_rate(struct cudbg_init *, struct cudbg_buffer *,
140*f856f099SNavdeep Parhar 			   struct cudbg_error *);
141*f856f099SNavdeep Parhar static int collect_tid(struct cudbg_init *, struct cudbg_buffer *,
142*f856f099SNavdeep Parhar 		       struct cudbg_error *);
143*f856f099SNavdeep Parhar static int collect_pcie_config(struct cudbg_init *, struct cudbg_buffer *,
144*f856f099SNavdeep Parhar 			       struct cudbg_error *);
145*f856f099SNavdeep Parhar static int collect_dump_context(struct cudbg_init *, struct cudbg_buffer *,
146*f856f099SNavdeep Parhar 				struct cudbg_error *);
147*f856f099SNavdeep Parhar static int collect_mps_tcam(struct cudbg_init *, struct cudbg_buffer *,
148*f856f099SNavdeep Parhar 			    struct cudbg_error *);
149*f856f099SNavdeep Parhar static int collect_vpd_data(struct cudbg_init *, struct cudbg_buffer *,
150*f856f099SNavdeep Parhar 			    struct cudbg_error *);
151*f856f099SNavdeep Parhar static int collect_le_tcam(struct cudbg_init *, struct cudbg_buffer *,
152*f856f099SNavdeep Parhar 			   struct cudbg_error *);
153*f856f099SNavdeep Parhar static int collect_cctrl(struct cudbg_init *, struct cudbg_buffer *,
154*f856f099SNavdeep Parhar 			 struct cudbg_error *);
155*f856f099SNavdeep Parhar static int collect_ma_indirect(struct cudbg_init *, struct cudbg_buffer *,
156*f856f099SNavdeep Parhar 			       struct cudbg_error *);
157*f856f099SNavdeep Parhar static int collect_ulptx_la(struct cudbg_init *, struct cudbg_buffer *,
158*f856f099SNavdeep Parhar 		struct cudbg_error *);
159*f856f099SNavdeep Parhar static int collect_up_cim_indirect(struct cudbg_init *, struct cudbg_buffer *,
160*f856f099SNavdeep Parhar 				   struct cudbg_error *);
161*f856f099SNavdeep Parhar static int collect_pbt_tables(struct cudbg_init *, struct cudbg_buffer *,
162*f856f099SNavdeep Parhar 			      struct cudbg_error *);
163*f856f099SNavdeep Parhar static int collect_mbox_log(struct cudbg_init *, struct cudbg_buffer *,
164*f856f099SNavdeep Parhar 			    struct cudbg_error *);
165*f856f099SNavdeep Parhar static int collect_hma_indirect(struct cudbg_init *, struct cudbg_buffer *,
166*f856f099SNavdeep Parhar 				struct cudbg_error *);
167*f856f099SNavdeep Parhar 
168*f856f099SNavdeep Parhar static int (*process_entity[])
169*f856f099SNavdeep Parhar 	(struct cudbg_init *, struct cudbg_buffer *, struct cudbg_error *) = {
170*f856f099SNavdeep Parhar 		collect_reg_dump,
171*f856f099SNavdeep Parhar 		collect_fw_devlog,
172*f856f099SNavdeep Parhar 		collect_cim_la,		/*3*/
173*f856f099SNavdeep Parhar 		collect_cim_ma_la,
174*f856f099SNavdeep Parhar 		collect_cim_qcfg,
175*f856f099SNavdeep Parhar 		collect_cim_ibq_tp0,
176*f856f099SNavdeep Parhar 		collect_cim_ibq_tp1,
177*f856f099SNavdeep Parhar 		collect_cim_ibq_ulp,
178*f856f099SNavdeep Parhar 		collect_cim_ibq_sge0,
179*f856f099SNavdeep Parhar 		collect_cim_ibq_sge1,
180*f856f099SNavdeep Parhar 		collect_cim_ibq_ncsi,
181*f856f099SNavdeep Parhar 		collect_cim_obq_ulp0,
182*f856f099SNavdeep Parhar 		collect_cim_obq_ulp1,	/*13*/
183*f856f099SNavdeep Parhar 		collect_cim_obq_ulp2,
184*f856f099SNavdeep Parhar 		collect_cim_obq_ulp3,
185*f856f099SNavdeep Parhar 		collect_cim_obq_sge,
186*f856f099SNavdeep Parhar 		collect_cim_obq_ncsi,
187*f856f099SNavdeep Parhar 		collect_edc0_meminfo,
188*f856f099SNavdeep Parhar 		collect_edc1_meminfo,
189*f856f099SNavdeep Parhar 		collect_mc0_meminfo,
190*f856f099SNavdeep Parhar 		collect_mc1_meminfo,
191*f856f099SNavdeep Parhar 		collect_rss,		/*22*/
192*f856f099SNavdeep Parhar 		collect_rss_pf_config,
193*f856f099SNavdeep Parhar 		collect_rss_key,
194*f856f099SNavdeep Parhar 		collect_rss_vf_config,
195*f856f099SNavdeep Parhar 		collect_rss_config,	/*26*/
196*f856f099SNavdeep Parhar 		collect_path_mtu,	/*27*/
197*f856f099SNavdeep Parhar 		collect_sw_state,
198*f856f099SNavdeep Parhar 		collect_wtp_data,
199*f856f099SNavdeep Parhar 		collect_pm_stats,
200*f856f099SNavdeep Parhar 		collect_hw_sched,
201*f856f099SNavdeep Parhar 		collect_tcp_stats,
202*f856f099SNavdeep Parhar 		collect_tp_err_stats,
203*f856f099SNavdeep Parhar 		collect_fcoe_stats,
204*f856f099SNavdeep Parhar 		collect_rdma_stats,
205*f856f099SNavdeep Parhar 		collect_tp_indirect,
206*f856f099SNavdeep Parhar 		collect_sge_indirect,
207*f856f099SNavdeep Parhar 		collect_cpl_stats,
208*f856f099SNavdeep Parhar 		collect_ddp_stats,
209*f856f099SNavdeep Parhar 		collect_wc_stats,
210*f856f099SNavdeep Parhar 		collect_ulprx_la,
211*f856f099SNavdeep Parhar 		collect_lb_stats,
212*f856f099SNavdeep Parhar 		collect_tp_la,
213*f856f099SNavdeep Parhar 		collect_meminfo,
214*f856f099SNavdeep Parhar 		collect_cim_pif_la,
215*f856f099SNavdeep Parhar 		collect_clk_info,
216*f856f099SNavdeep Parhar 		collect_obq_sge_rx_q0,
217*f856f099SNavdeep Parhar 		collect_obq_sge_rx_q1,
218*f856f099SNavdeep Parhar 		collect_macstats,
219*f856f099SNavdeep Parhar 		collect_pcie_indirect,
220*f856f099SNavdeep Parhar 		collect_pm_indirect,
221*f856f099SNavdeep Parhar 		collect_full,
222*f856f099SNavdeep Parhar 		collect_tx_rate,
223*f856f099SNavdeep Parhar 		collect_tid,
224*f856f099SNavdeep Parhar 		collect_pcie_config,
225*f856f099SNavdeep Parhar 		collect_dump_context,
226*f856f099SNavdeep Parhar 		collect_mps_tcam,
227*f856f099SNavdeep Parhar 		collect_vpd_data,
228*f856f099SNavdeep Parhar 		collect_le_tcam,
229*f856f099SNavdeep Parhar 		collect_cctrl,
230*f856f099SNavdeep Parhar 		collect_ma_indirect,
231*f856f099SNavdeep Parhar 		collect_ulptx_la,
232*f856f099SNavdeep Parhar 		NULL,			/* ext entity */
233*f856f099SNavdeep Parhar 		collect_up_cim_indirect,
234*f856f099SNavdeep Parhar 		collect_pbt_tables,
235*f856f099SNavdeep Parhar 		collect_mbox_log,
236*f856f099SNavdeep Parhar 		collect_hma_indirect,
237*f856f099SNavdeep Parhar 	};
238*f856f099SNavdeep Parhar 
239*f856f099SNavdeep Parhar struct large_entity {
240*f856f099SNavdeep Parhar 	int entity_code;
241*f856f099SNavdeep Parhar 	int skip_flag;
242*f856f099SNavdeep Parhar 	int priority; /* 1 is high priority */
243*f856f099SNavdeep Parhar };
244*f856f099SNavdeep Parhar 
245*f856f099SNavdeep Parhar static int read_cim_ibq(struct cudbg_init *, struct cudbg_buffer *,
246*f856f099SNavdeep Parhar 			struct cudbg_error * , int);
247*f856f099SNavdeep Parhar static int read_cim_obq(struct cudbg_init *, struct cudbg_buffer *,
248*f856f099SNavdeep Parhar 			struct cudbg_error *, int);
249*f856f099SNavdeep Parhar int get_entity_hdr(void *outbuf, int i, u32 size, struct cudbg_entity_hdr **);
250*f856f099SNavdeep Parhar void skip_entity(int entity_code);
251*f856f099SNavdeep Parhar void reset_skip_entity(void);
252*f856f099SNavdeep Parhar int is_large_entity(int entity_code);
253*f856f099SNavdeep Parhar #endif
254