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