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