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