1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (C) 2017 Chelsio Communications. All rights reserved.
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun #ifndef __CUDBG_LIB_H__
7*4882a593Smuzhiyun #define __CUDBG_LIB_H__
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun int cudbg_collect_reg_dump(struct cudbg_init *pdbg_init,
10*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
11*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
12*4882a593Smuzhiyun int cudbg_collect_fw_devlog(struct cudbg_init *pdbg_init,
13*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
14*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
15*4882a593Smuzhiyun int cudbg_collect_cim_la(struct cudbg_init *pdbg_init,
16*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
17*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
18*4882a593Smuzhiyun int cudbg_collect_cim_ma_la(struct cudbg_init *pdbg_init,
19*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
20*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
21*4882a593Smuzhiyun int cudbg_collect_cim_qcfg(struct cudbg_init *pdbg_init,
22*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
23*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
24*4882a593Smuzhiyun int cudbg_collect_cim_ibq_tp0(struct cudbg_init *pdbg_init,
25*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
26*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
27*4882a593Smuzhiyun int cudbg_collect_cim_ibq_tp1(struct cudbg_init *pdbg_init,
28*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
29*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
30*4882a593Smuzhiyun int cudbg_collect_cim_ibq_ulp(struct cudbg_init *pdbg_init,
31*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
32*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
33*4882a593Smuzhiyun int cudbg_collect_cim_ibq_sge0(struct cudbg_init *pdbg_init,
34*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
35*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
36*4882a593Smuzhiyun int cudbg_collect_cim_ibq_sge1(struct cudbg_init *pdbg_init,
37*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
38*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
39*4882a593Smuzhiyun int cudbg_collect_cim_ibq_ncsi(struct cudbg_init *pdbg_init,
40*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
41*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
42*4882a593Smuzhiyun int cudbg_collect_cim_obq_ulp0(struct cudbg_init *pdbg_init,
43*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
44*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
45*4882a593Smuzhiyun int cudbg_collect_cim_obq_ulp1(struct cudbg_init *pdbg_init,
46*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
47*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
48*4882a593Smuzhiyun int cudbg_collect_cim_obq_ulp2(struct cudbg_init *pdbg_init,
49*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
50*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
51*4882a593Smuzhiyun int cudbg_collect_cim_obq_ulp3(struct cudbg_init *pdbg_init,
52*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
53*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
54*4882a593Smuzhiyun int cudbg_collect_cim_obq_sge(struct cudbg_init *pdbg_init,
55*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
56*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
57*4882a593Smuzhiyun int cudbg_collect_cim_obq_ncsi(struct cudbg_init *pdbg_init,
58*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
59*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
60*4882a593Smuzhiyun int cudbg_collect_edc0_meminfo(struct cudbg_init *pdbg_init,
61*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
62*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
63*4882a593Smuzhiyun int cudbg_collect_edc1_meminfo(struct cudbg_init *pdbg_init,
64*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
65*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
66*4882a593Smuzhiyun int cudbg_collect_mc0_meminfo(struct cudbg_init *pdbg_init,
67*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
68*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
69*4882a593Smuzhiyun int cudbg_collect_mc1_meminfo(struct cudbg_init *pdbg_init,
70*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
71*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
72*4882a593Smuzhiyun int cudbg_collect_rss(struct cudbg_init *pdbg_init,
73*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
74*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
75*4882a593Smuzhiyun int cudbg_collect_rss_vf_config(struct cudbg_init *pdbg_init,
76*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
77*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
78*4882a593Smuzhiyun int cudbg_collect_tp_indirect(struct cudbg_init *pdbg_init,
79*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
80*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
81*4882a593Smuzhiyun int cudbg_collect_path_mtu(struct cudbg_init *pdbg_init,
82*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
83*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
84*4882a593Smuzhiyun int cudbg_collect_pm_stats(struct cudbg_init *pdbg_init,
85*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
86*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
87*4882a593Smuzhiyun int cudbg_collect_hw_sched(struct cudbg_init *pdbg_init,
88*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
89*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
90*4882a593Smuzhiyun int cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init,
91*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
92*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
93*4882a593Smuzhiyun int cudbg_collect_ulprx_la(struct cudbg_init *pdbg_init,
94*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
95*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
96*4882a593Smuzhiyun int cudbg_collect_tp_la(struct cudbg_init *pdbg_init,
97*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
98*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
99*4882a593Smuzhiyun int cudbg_collect_meminfo(struct cudbg_init *pdbg_init,
100*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
101*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
102*4882a593Smuzhiyun int cudbg_collect_cim_pif_la(struct cudbg_init *pdbg_init,
103*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
104*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
105*4882a593Smuzhiyun int cudbg_collect_clk_info(struct cudbg_init *pdbg_init,
106*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
107*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
108*4882a593Smuzhiyun int cudbg_collect_obq_sge_rx_q0(struct cudbg_init *pdbg_init,
109*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
110*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
111*4882a593Smuzhiyun int cudbg_collect_obq_sge_rx_q1(struct cudbg_init *pdbg_init,
112*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
113*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
114*4882a593Smuzhiyun int cudbg_collect_pcie_indirect(struct cudbg_init *pdbg_init,
115*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
116*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
117*4882a593Smuzhiyun int cudbg_collect_pm_indirect(struct cudbg_init *pdbg_init,
118*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
119*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
120*4882a593Smuzhiyun int cudbg_collect_tid(struct cudbg_init *pdbg_init,
121*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
122*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
123*4882a593Smuzhiyun int cudbg_collect_pcie_config(struct cudbg_init *pdbg_init,
124*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
125*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
126*4882a593Smuzhiyun int cudbg_collect_dump_context(struct cudbg_init *pdbg_init,
127*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
128*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
129*4882a593Smuzhiyun int cudbg_collect_mps_tcam(struct cudbg_init *pdbg_init,
130*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
131*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
132*4882a593Smuzhiyun int cudbg_collect_vpd_data(struct cudbg_init *pdbg_init,
133*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
134*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
135*4882a593Smuzhiyun int cudbg_collect_le_tcam(struct cudbg_init *pdbg_init,
136*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
137*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
138*4882a593Smuzhiyun int cudbg_collect_cctrl(struct cudbg_init *pdbg_init,
139*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
140*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
141*4882a593Smuzhiyun int cudbg_collect_ma_indirect(struct cudbg_init *pdbg_init,
142*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
143*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
144*4882a593Smuzhiyun int cudbg_collect_ulptx_la(struct cudbg_init *pdbg_init,
145*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
146*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
147*4882a593Smuzhiyun int cudbg_collect_up_cim_indirect(struct cudbg_init *pdbg_init,
148*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
149*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
150*4882a593Smuzhiyun int cudbg_collect_pbt_tables(struct cudbg_init *pdbg_init,
151*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
152*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
153*4882a593Smuzhiyun int cudbg_collect_mbox_log(struct cudbg_init *pdbg_init,
154*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
155*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
156*4882a593Smuzhiyun int cudbg_collect_hma_indirect(struct cudbg_init *pdbg_init,
157*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
158*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
159*4882a593Smuzhiyun int cudbg_collect_hma_meminfo(struct cudbg_init *pdbg_init,
160*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
161*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
162*4882a593Smuzhiyun int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,
163*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
164*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
165*4882a593Smuzhiyun int cudbg_collect_flash(struct cudbg_init *pdbg_init,
166*4882a593Smuzhiyun struct cudbg_buffer *dbg_buff,
167*4882a593Smuzhiyun struct cudbg_error *cudbg_err);
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun u32 cudbg_get_entity_length(struct adapter *adap, u32 entity);
170*4882a593Smuzhiyun struct cudbg_entity_hdr *cudbg_get_entity_hdr(void *outbuf, int i);
171*4882a593Smuzhiyun void cudbg_align_debug_buffer(struct cudbg_buffer *dbg_buff,
172*4882a593Smuzhiyun struct cudbg_entity_hdr *entity_hdr);
173*4882a593Smuzhiyun u32 cudbg_cim_obq_size(struct adapter *padap, int qid);
174*4882a593Smuzhiyun int cudbg_dump_context_size(struct adapter *padap);
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun int cudbg_fill_meminfo(struct adapter *padap,
177*4882a593Smuzhiyun struct cudbg_meminfo *meminfo_buff);
178*4882a593Smuzhiyun void cudbg_fill_le_tcam_info(struct adapter *padap,
179*4882a593Smuzhiyun struct cudbg_tcam *tcam_region);
180*4882a593Smuzhiyun void cudbg_fill_qdesc_num_and_size(const struct adapter *padap,
181*4882a593Smuzhiyun u32 *num, u32 *size);
182*4882a593Smuzhiyun
cudbg_uld_txq_to_qtype(u32 uld)183*4882a593Smuzhiyun static inline u32 cudbg_uld_txq_to_qtype(u32 uld)
184*4882a593Smuzhiyun {
185*4882a593Smuzhiyun switch (uld) {
186*4882a593Smuzhiyun case CXGB4_TX_OFLD:
187*4882a593Smuzhiyun return CUDBG_QTYPE_OFLD_TXQ;
188*4882a593Smuzhiyun case CXGB4_TX_CRYPTO:
189*4882a593Smuzhiyun return CUDBG_QTYPE_CRYPTO_TXQ;
190*4882a593Smuzhiyun }
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun return CUDBG_QTYPE_UNKNOWN;
193*4882a593Smuzhiyun }
194*4882a593Smuzhiyun
cudbg_uld_rxq_to_qtype(u32 uld)195*4882a593Smuzhiyun static inline u32 cudbg_uld_rxq_to_qtype(u32 uld)
196*4882a593Smuzhiyun {
197*4882a593Smuzhiyun switch (uld) {
198*4882a593Smuzhiyun case CXGB4_ULD_RDMA:
199*4882a593Smuzhiyun return CUDBG_QTYPE_RDMA_RXQ;
200*4882a593Smuzhiyun case CXGB4_ULD_ISCSI:
201*4882a593Smuzhiyun return CUDBG_QTYPE_ISCSI_RXQ;
202*4882a593Smuzhiyun case CXGB4_ULD_ISCSIT:
203*4882a593Smuzhiyun return CUDBG_QTYPE_ISCSIT_RXQ;
204*4882a593Smuzhiyun case CXGB4_ULD_CRYPTO:
205*4882a593Smuzhiyun return CUDBG_QTYPE_CRYPTO_RXQ;
206*4882a593Smuzhiyun case CXGB4_ULD_TLS:
207*4882a593Smuzhiyun return CUDBG_QTYPE_TLS_RXQ;
208*4882a593Smuzhiyun }
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun return CUDBG_QTYPE_UNKNOWN;
211*4882a593Smuzhiyun }
212*4882a593Smuzhiyun
cudbg_uld_flq_to_qtype(u32 uld)213*4882a593Smuzhiyun static inline u32 cudbg_uld_flq_to_qtype(u32 uld)
214*4882a593Smuzhiyun {
215*4882a593Smuzhiyun switch (uld) {
216*4882a593Smuzhiyun case CXGB4_ULD_RDMA:
217*4882a593Smuzhiyun return CUDBG_QTYPE_RDMA_FLQ;
218*4882a593Smuzhiyun case CXGB4_ULD_ISCSI:
219*4882a593Smuzhiyun return CUDBG_QTYPE_ISCSI_FLQ;
220*4882a593Smuzhiyun case CXGB4_ULD_ISCSIT:
221*4882a593Smuzhiyun return CUDBG_QTYPE_ISCSIT_FLQ;
222*4882a593Smuzhiyun case CXGB4_ULD_CRYPTO:
223*4882a593Smuzhiyun return CUDBG_QTYPE_CRYPTO_FLQ;
224*4882a593Smuzhiyun case CXGB4_ULD_TLS:
225*4882a593Smuzhiyun return CUDBG_QTYPE_TLS_FLQ;
226*4882a593Smuzhiyun }
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun return CUDBG_QTYPE_UNKNOWN;
229*4882a593Smuzhiyun }
230*4882a593Smuzhiyun
cudbg_uld_ciq_to_qtype(u32 uld)231*4882a593Smuzhiyun static inline u32 cudbg_uld_ciq_to_qtype(u32 uld)
232*4882a593Smuzhiyun {
233*4882a593Smuzhiyun switch (uld) {
234*4882a593Smuzhiyun case CXGB4_ULD_RDMA:
235*4882a593Smuzhiyun return CUDBG_QTYPE_RDMA_CIQ;
236*4882a593Smuzhiyun }
237*4882a593Smuzhiyun
238*4882a593Smuzhiyun return CUDBG_QTYPE_UNKNOWN;
239*4882a593Smuzhiyun }
240*4882a593Smuzhiyun
cudbg_fill_qdesc_txq(const struct sge_txq * txq,enum cudbg_qdesc_qtype type,struct cudbg_qdesc_entry * entry)241*4882a593Smuzhiyun static inline void cudbg_fill_qdesc_txq(const struct sge_txq *txq,
242*4882a593Smuzhiyun enum cudbg_qdesc_qtype type,
243*4882a593Smuzhiyun struct cudbg_qdesc_entry *entry)
244*4882a593Smuzhiyun {
245*4882a593Smuzhiyun entry->qtype = type;
246*4882a593Smuzhiyun entry->qid = txq->cntxt_id;
247*4882a593Smuzhiyun entry->desc_size = sizeof(struct tx_desc);
248*4882a593Smuzhiyun entry->num_desc = txq->size;
249*4882a593Smuzhiyun entry->data_size = txq->size * sizeof(struct tx_desc);
250*4882a593Smuzhiyun memcpy(entry->data, txq->desc, entry->data_size);
251*4882a593Smuzhiyun }
252*4882a593Smuzhiyun
cudbg_fill_qdesc_rxq(const struct sge_rspq * rxq,enum cudbg_qdesc_qtype type,struct cudbg_qdesc_entry * entry)253*4882a593Smuzhiyun static inline void cudbg_fill_qdesc_rxq(const struct sge_rspq *rxq,
254*4882a593Smuzhiyun enum cudbg_qdesc_qtype type,
255*4882a593Smuzhiyun struct cudbg_qdesc_entry *entry)
256*4882a593Smuzhiyun {
257*4882a593Smuzhiyun entry->qtype = type;
258*4882a593Smuzhiyun entry->qid = rxq->cntxt_id;
259*4882a593Smuzhiyun entry->desc_size = rxq->iqe_len;
260*4882a593Smuzhiyun entry->num_desc = rxq->size;
261*4882a593Smuzhiyun entry->data_size = rxq->size * rxq->iqe_len;
262*4882a593Smuzhiyun memcpy(entry->data, rxq->desc, entry->data_size);
263*4882a593Smuzhiyun }
264*4882a593Smuzhiyun
cudbg_fill_qdesc_flq(const struct sge_fl * flq,enum cudbg_qdesc_qtype type,struct cudbg_qdesc_entry * entry)265*4882a593Smuzhiyun static inline void cudbg_fill_qdesc_flq(const struct sge_fl *flq,
266*4882a593Smuzhiyun enum cudbg_qdesc_qtype type,
267*4882a593Smuzhiyun struct cudbg_qdesc_entry *entry)
268*4882a593Smuzhiyun {
269*4882a593Smuzhiyun entry->qtype = type;
270*4882a593Smuzhiyun entry->qid = flq->cntxt_id;
271*4882a593Smuzhiyun entry->desc_size = sizeof(__be64);
272*4882a593Smuzhiyun entry->num_desc = flq->size;
273*4882a593Smuzhiyun entry->data_size = flq->size * sizeof(__be64);
274*4882a593Smuzhiyun memcpy(entry->data, flq->desc, entry->data_size);
275*4882a593Smuzhiyun }
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun static inline
cudbg_next_qdesc(struct cudbg_qdesc_entry * e)278*4882a593Smuzhiyun struct cudbg_qdesc_entry *cudbg_next_qdesc(struct cudbg_qdesc_entry *e)
279*4882a593Smuzhiyun {
280*4882a593Smuzhiyun return (struct cudbg_qdesc_entry *)
281*4882a593Smuzhiyun ((u8 *)e + sizeof(*e) + e->data_size);
282*4882a593Smuzhiyun }
283*4882a593Smuzhiyun #endif /* __CUDBG_LIB_H__ */
284