162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2017 Chelsio Communications. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __CUDBG_LIB_H__ 762306a36Sopenharmony_ci#define __CUDBG_LIB_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciint cudbg_collect_reg_dump(struct cudbg_init *pdbg_init, 1062306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 1162306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 1262306a36Sopenharmony_ciint cudbg_collect_fw_devlog(struct cudbg_init *pdbg_init, 1362306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 1462306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 1562306a36Sopenharmony_ciint cudbg_collect_cim_la(struct cudbg_init *pdbg_init, 1662306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 1762306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 1862306a36Sopenharmony_ciint cudbg_collect_cim_ma_la(struct cudbg_init *pdbg_init, 1962306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 2062306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 2162306a36Sopenharmony_ciint cudbg_collect_cim_qcfg(struct cudbg_init *pdbg_init, 2262306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 2362306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 2462306a36Sopenharmony_ciint cudbg_collect_cim_ibq_tp0(struct cudbg_init *pdbg_init, 2562306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 2662306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 2762306a36Sopenharmony_ciint cudbg_collect_cim_ibq_tp1(struct cudbg_init *pdbg_init, 2862306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 2962306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 3062306a36Sopenharmony_ciint cudbg_collect_cim_ibq_ulp(struct cudbg_init *pdbg_init, 3162306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 3262306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 3362306a36Sopenharmony_ciint cudbg_collect_cim_ibq_sge0(struct cudbg_init *pdbg_init, 3462306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 3562306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 3662306a36Sopenharmony_ciint cudbg_collect_cim_ibq_sge1(struct cudbg_init *pdbg_init, 3762306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 3862306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 3962306a36Sopenharmony_ciint cudbg_collect_cim_ibq_ncsi(struct cudbg_init *pdbg_init, 4062306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 4162306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 4262306a36Sopenharmony_ciint cudbg_collect_cim_obq_ulp0(struct cudbg_init *pdbg_init, 4362306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 4462306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 4562306a36Sopenharmony_ciint cudbg_collect_cim_obq_ulp1(struct cudbg_init *pdbg_init, 4662306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 4762306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 4862306a36Sopenharmony_ciint cudbg_collect_cim_obq_ulp2(struct cudbg_init *pdbg_init, 4962306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 5062306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 5162306a36Sopenharmony_ciint cudbg_collect_cim_obq_ulp3(struct cudbg_init *pdbg_init, 5262306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 5362306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 5462306a36Sopenharmony_ciint cudbg_collect_cim_obq_sge(struct cudbg_init *pdbg_init, 5562306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 5662306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 5762306a36Sopenharmony_ciint cudbg_collect_cim_obq_ncsi(struct cudbg_init *pdbg_init, 5862306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 5962306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 6062306a36Sopenharmony_ciint cudbg_collect_edc0_meminfo(struct cudbg_init *pdbg_init, 6162306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 6262306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 6362306a36Sopenharmony_ciint cudbg_collect_edc1_meminfo(struct cudbg_init *pdbg_init, 6462306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 6562306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 6662306a36Sopenharmony_ciint cudbg_collect_mc0_meminfo(struct cudbg_init *pdbg_init, 6762306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 6862306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 6962306a36Sopenharmony_ciint cudbg_collect_mc1_meminfo(struct cudbg_init *pdbg_init, 7062306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 7162306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 7262306a36Sopenharmony_ciint cudbg_collect_rss(struct cudbg_init *pdbg_init, 7362306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 7462306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 7562306a36Sopenharmony_ciint cudbg_collect_rss_vf_config(struct cudbg_init *pdbg_init, 7662306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 7762306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 7862306a36Sopenharmony_ciint cudbg_collect_tp_indirect(struct cudbg_init *pdbg_init, 7962306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 8062306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 8162306a36Sopenharmony_ciint cudbg_collect_path_mtu(struct cudbg_init *pdbg_init, 8262306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 8362306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 8462306a36Sopenharmony_ciint cudbg_collect_pm_stats(struct cudbg_init *pdbg_init, 8562306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 8662306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 8762306a36Sopenharmony_ciint cudbg_collect_hw_sched(struct cudbg_init *pdbg_init, 8862306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 8962306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 9062306a36Sopenharmony_ciint cudbg_collect_sge_indirect(struct cudbg_init *pdbg_init, 9162306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 9262306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 9362306a36Sopenharmony_ciint cudbg_collect_ulprx_la(struct cudbg_init *pdbg_init, 9462306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 9562306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 9662306a36Sopenharmony_ciint cudbg_collect_tp_la(struct cudbg_init *pdbg_init, 9762306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 9862306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 9962306a36Sopenharmony_ciint cudbg_collect_meminfo(struct cudbg_init *pdbg_init, 10062306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 10162306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 10262306a36Sopenharmony_ciint cudbg_collect_cim_pif_la(struct cudbg_init *pdbg_init, 10362306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 10462306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 10562306a36Sopenharmony_ciint cudbg_collect_clk_info(struct cudbg_init *pdbg_init, 10662306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 10762306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 10862306a36Sopenharmony_ciint cudbg_collect_obq_sge_rx_q0(struct cudbg_init *pdbg_init, 10962306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 11062306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 11162306a36Sopenharmony_ciint cudbg_collect_obq_sge_rx_q1(struct cudbg_init *pdbg_init, 11262306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 11362306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 11462306a36Sopenharmony_ciint cudbg_collect_pcie_indirect(struct cudbg_init *pdbg_init, 11562306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 11662306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 11762306a36Sopenharmony_ciint cudbg_collect_pm_indirect(struct cudbg_init *pdbg_init, 11862306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 11962306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 12062306a36Sopenharmony_ciint cudbg_collect_tid(struct cudbg_init *pdbg_init, 12162306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 12262306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 12362306a36Sopenharmony_ciint cudbg_collect_pcie_config(struct cudbg_init *pdbg_init, 12462306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 12562306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 12662306a36Sopenharmony_ciint cudbg_collect_dump_context(struct cudbg_init *pdbg_init, 12762306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 12862306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 12962306a36Sopenharmony_ciint cudbg_collect_mps_tcam(struct cudbg_init *pdbg_init, 13062306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 13162306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 13262306a36Sopenharmony_ciint cudbg_collect_vpd_data(struct cudbg_init *pdbg_init, 13362306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 13462306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 13562306a36Sopenharmony_ciint cudbg_collect_le_tcam(struct cudbg_init *pdbg_init, 13662306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 13762306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 13862306a36Sopenharmony_ciint cudbg_collect_cctrl(struct cudbg_init *pdbg_init, 13962306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 14062306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 14162306a36Sopenharmony_ciint cudbg_collect_ma_indirect(struct cudbg_init *pdbg_init, 14262306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 14362306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 14462306a36Sopenharmony_ciint cudbg_collect_ulptx_la(struct cudbg_init *pdbg_init, 14562306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 14662306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 14762306a36Sopenharmony_ciint cudbg_collect_up_cim_indirect(struct cudbg_init *pdbg_init, 14862306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 14962306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 15062306a36Sopenharmony_ciint cudbg_collect_pbt_tables(struct cudbg_init *pdbg_init, 15162306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 15262306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 15362306a36Sopenharmony_ciint cudbg_collect_mbox_log(struct cudbg_init *pdbg_init, 15462306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 15562306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 15662306a36Sopenharmony_ciint cudbg_collect_hma_indirect(struct cudbg_init *pdbg_init, 15762306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 15862306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 15962306a36Sopenharmony_ciint cudbg_collect_hma_meminfo(struct cudbg_init *pdbg_init, 16062306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 16162306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 16262306a36Sopenharmony_ciint cudbg_collect_qdesc(struct cudbg_init *pdbg_init, 16362306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 16462306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 16562306a36Sopenharmony_ciint cudbg_collect_flash(struct cudbg_init *pdbg_init, 16662306a36Sopenharmony_ci struct cudbg_buffer *dbg_buff, 16762306a36Sopenharmony_ci struct cudbg_error *cudbg_err); 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ciu32 cudbg_get_entity_length(struct adapter *adap, u32 entity); 17062306a36Sopenharmony_cistruct cudbg_entity_hdr *cudbg_get_entity_hdr(void *outbuf, int i); 17162306a36Sopenharmony_civoid cudbg_align_debug_buffer(struct cudbg_buffer *dbg_buff, 17262306a36Sopenharmony_ci struct cudbg_entity_hdr *entity_hdr); 17362306a36Sopenharmony_ciu32 cudbg_cim_obq_size(struct adapter *padap, int qid); 17462306a36Sopenharmony_ciint cudbg_dump_context_size(struct adapter *padap); 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ciint cudbg_fill_meminfo(struct adapter *padap, 17762306a36Sopenharmony_ci struct cudbg_meminfo *meminfo_buff); 17862306a36Sopenharmony_civoid cudbg_fill_le_tcam_info(struct adapter *padap, 17962306a36Sopenharmony_ci struct cudbg_tcam *tcam_region); 18062306a36Sopenharmony_civoid cudbg_fill_qdesc_num_and_size(const struct adapter *padap, 18162306a36Sopenharmony_ci u32 *num, u32 *size); 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_cistatic inline u32 cudbg_uld_txq_to_qtype(u32 uld) 18462306a36Sopenharmony_ci{ 18562306a36Sopenharmony_ci switch (uld) { 18662306a36Sopenharmony_ci case CXGB4_TX_OFLD: 18762306a36Sopenharmony_ci return CUDBG_QTYPE_OFLD_TXQ; 18862306a36Sopenharmony_ci case CXGB4_TX_CRYPTO: 18962306a36Sopenharmony_ci return CUDBG_QTYPE_CRYPTO_TXQ; 19062306a36Sopenharmony_ci } 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci return CUDBG_QTYPE_UNKNOWN; 19362306a36Sopenharmony_ci} 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_cistatic inline u32 cudbg_uld_rxq_to_qtype(u32 uld) 19662306a36Sopenharmony_ci{ 19762306a36Sopenharmony_ci switch (uld) { 19862306a36Sopenharmony_ci case CXGB4_ULD_RDMA: 19962306a36Sopenharmony_ci return CUDBG_QTYPE_RDMA_RXQ; 20062306a36Sopenharmony_ci case CXGB4_ULD_ISCSI: 20162306a36Sopenharmony_ci return CUDBG_QTYPE_ISCSI_RXQ; 20262306a36Sopenharmony_ci case CXGB4_ULD_ISCSIT: 20362306a36Sopenharmony_ci return CUDBG_QTYPE_ISCSIT_RXQ; 20462306a36Sopenharmony_ci case CXGB4_ULD_CRYPTO: 20562306a36Sopenharmony_ci return CUDBG_QTYPE_CRYPTO_RXQ; 20662306a36Sopenharmony_ci case CXGB4_ULD_TLS: 20762306a36Sopenharmony_ci return CUDBG_QTYPE_TLS_RXQ; 20862306a36Sopenharmony_ci } 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci return CUDBG_QTYPE_UNKNOWN; 21162306a36Sopenharmony_ci} 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_cistatic inline u32 cudbg_uld_flq_to_qtype(u32 uld) 21462306a36Sopenharmony_ci{ 21562306a36Sopenharmony_ci switch (uld) { 21662306a36Sopenharmony_ci case CXGB4_ULD_RDMA: 21762306a36Sopenharmony_ci return CUDBG_QTYPE_RDMA_FLQ; 21862306a36Sopenharmony_ci case CXGB4_ULD_ISCSI: 21962306a36Sopenharmony_ci return CUDBG_QTYPE_ISCSI_FLQ; 22062306a36Sopenharmony_ci case CXGB4_ULD_ISCSIT: 22162306a36Sopenharmony_ci return CUDBG_QTYPE_ISCSIT_FLQ; 22262306a36Sopenharmony_ci case CXGB4_ULD_CRYPTO: 22362306a36Sopenharmony_ci return CUDBG_QTYPE_CRYPTO_FLQ; 22462306a36Sopenharmony_ci case CXGB4_ULD_TLS: 22562306a36Sopenharmony_ci return CUDBG_QTYPE_TLS_FLQ; 22662306a36Sopenharmony_ci } 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci return CUDBG_QTYPE_UNKNOWN; 22962306a36Sopenharmony_ci} 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_cistatic inline u32 cudbg_uld_ciq_to_qtype(u32 uld) 23262306a36Sopenharmony_ci{ 23362306a36Sopenharmony_ci switch (uld) { 23462306a36Sopenharmony_ci case CXGB4_ULD_RDMA: 23562306a36Sopenharmony_ci return CUDBG_QTYPE_RDMA_CIQ; 23662306a36Sopenharmony_ci } 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci return CUDBG_QTYPE_UNKNOWN; 23962306a36Sopenharmony_ci} 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_cistatic inline void cudbg_fill_qdesc_txq(const struct sge_txq *txq, 24262306a36Sopenharmony_ci enum cudbg_qdesc_qtype type, 24362306a36Sopenharmony_ci struct cudbg_qdesc_entry *entry) 24462306a36Sopenharmony_ci{ 24562306a36Sopenharmony_ci entry->qtype = type; 24662306a36Sopenharmony_ci entry->qid = txq->cntxt_id; 24762306a36Sopenharmony_ci entry->desc_size = sizeof(struct tx_desc); 24862306a36Sopenharmony_ci entry->num_desc = txq->size; 24962306a36Sopenharmony_ci entry->data_size = txq->size * sizeof(struct tx_desc); 25062306a36Sopenharmony_ci memcpy(entry->data, txq->desc, entry->data_size); 25162306a36Sopenharmony_ci} 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_cistatic inline void cudbg_fill_qdesc_rxq(const struct sge_rspq *rxq, 25462306a36Sopenharmony_ci enum cudbg_qdesc_qtype type, 25562306a36Sopenharmony_ci struct cudbg_qdesc_entry *entry) 25662306a36Sopenharmony_ci{ 25762306a36Sopenharmony_ci entry->qtype = type; 25862306a36Sopenharmony_ci entry->qid = rxq->cntxt_id; 25962306a36Sopenharmony_ci entry->desc_size = rxq->iqe_len; 26062306a36Sopenharmony_ci entry->num_desc = rxq->size; 26162306a36Sopenharmony_ci entry->data_size = rxq->size * rxq->iqe_len; 26262306a36Sopenharmony_ci memcpy(entry->data, rxq->desc, entry->data_size); 26362306a36Sopenharmony_ci} 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_cistatic inline void cudbg_fill_qdesc_flq(const struct sge_fl *flq, 26662306a36Sopenharmony_ci enum cudbg_qdesc_qtype type, 26762306a36Sopenharmony_ci struct cudbg_qdesc_entry *entry) 26862306a36Sopenharmony_ci{ 26962306a36Sopenharmony_ci entry->qtype = type; 27062306a36Sopenharmony_ci entry->qid = flq->cntxt_id; 27162306a36Sopenharmony_ci entry->desc_size = sizeof(__be64); 27262306a36Sopenharmony_ci entry->num_desc = flq->size; 27362306a36Sopenharmony_ci entry->data_size = flq->size * sizeof(__be64); 27462306a36Sopenharmony_ci memcpy(entry->data, flq->desc, entry->data_size); 27562306a36Sopenharmony_ci} 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_cistatic inline 27862306a36Sopenharmony_cistruct cudbg_qdesc_entry *cudbg_next_qdesc(struct cudbg_qdesc_entry *e) 27962306a36Sopenharmony_ci{ 28062306a36Sopenharmony_ci return (struct cudbg_qdesc_entry *) 28162306a36Sopenharmony_ci ((u8 *)e + sizeof(*e) + e->data_size); 28262306a36Sopenharmony_ci} 28362306a36Sopenharmony_ci#endif /* __CUDBG_LIB_H__ */ 284