162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * QLogic Fibre Channel HBA Driver
462306a36Sopenharmony_ci * Copyright (c)  2003-2014 QLogic Corporation
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "qla_def.h"
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/*
1062306a36Sopenharmony_ci * Firmware Dump structure definition
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistruct qla2300_fw_dump {
1462306a36Sopenharmony_ci	__be16 hccr;
1562306a36Sopenharmony_ci	__be16 pbiu_reg[8];
1662306a36Sopenharmony_ci	__be16 risc_host_reg[8];
1762306a36Sopenharmony_ci	__be16 mailbox_reg[32];
1862306a36Sopenharmony_ci	__be16 resp_dma_reg[32];
1962306a36Sopenharmony_ci	__be16 dma_reg[48];
2062306a36Sopenharmony_ci	__be16 risc_hdw_reg[16];
2162306a36Sopenharmony_ci	__be16 risc_gp0_reg[16];
2262306a36Sopenharmony_ci	__be16 risc_gp1_reg[16];
2362306a36Sopenharmony_ci	__be16 risc_gp2_reg[16];
2462306a36Sopenharmony_ci	__be16 risc_gp3_reg[16];
2562306a36Sopenharmony_ci	__be16 risc_gp4_reg[16];
2662306a36Sopenharmony_ci	__be16 risc_gp5_reg[16];
2762306a36Sopenharmony_ci	__be16 risc_gp6_reg[16];
2862306a36Sopenharmony_ci	__be16 risc_gp7_reg[16];
2962306a36Sopenharmony_ci	__be16 frame_buf_hdw_reg[64];
3062306a36Sopenharmony_ci	__be16 fpm_b0_reg[64];
3162306a36Sopenharmony_ci	__be16 fpm_b1_reg[64];
3262306a36Sopenharmony_ci	__be16 risc_ram[0xf800];
3362306a36Sopenharmony_ci	__be16 stack_ram[0x1000];
3462306a36Sopenharmony_ci	__be16 data_ram[1];
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct qla2100_fw_dump {
3862306a36Sopenharmony_ci	__be16 hccr;
3962306a36Sopenharmony_ci	__be16 pbiu_reg[8];
4062306a36Sopenharmony_ci	__be16 mailbox_reg[32];
4162306a36Sopenharmony_ci	__be16 dma_reg[48];
4262306a36Sopenharmony_ci	__be16 risc_hdw_reg[16];
4362306a36Sopenharmony_ci	__be16 risc_gp0_reg[16];
4462306a36Sopenharmony_ci	__be16 risc_gp1_reg[16];
4562306a36Sopenharmony_ci	__be16 risc_gp2_reg[16];
4662306a36Sopenharmony_ci	__be16 risc_gp3_reg[16];
4762306a36Sopenharmony_ci	__be16 risc_gp4_reg[16];
4862306a36Sopenharmony_ci	__be16 risc_gp5_reg[16];
4962306a36Sopenharmony_ci	__be16 risc_gp6_reg[16];
5062306a36Sopenharmony_ci	__be16 risc_gp7_reg[16];
5162306a36Sopenharmony_ci	__be16 frame_buf_hdw_reg[16];
5262306a36Sopenharmony_ci	__be16 fpm_b0_reg[64];
5362306a36Sopenharmony_ci	__be16 fpm_b1_reg[64];
5462306a36Sopenharmony_ci	__be16 risc_ram[0xf000];
5562306a36Sopenharmony_ci	u8	queue_dump[];
5662306a36Sopenharmony_ci};
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_cistruct qla24xx_fw_dump {
5962306a36Sopenharmony_ci	__be32	host_status;
6062306a36Sopenharmony_ci	__be32	host_reg[32];
6162306a36Sopenharmony_ci	__be32	shadow_reg[7];
6262306a36Sopenharmony_ci	__be16	mailbox_reg[32];
6362306a36Sopenharmony_ci	__be32	xseq_gp_reg[128];
6462306a36Sopenharmony_ci	__be32	xseq_0_reg[16];
6562306a36Sopenharmony_ci	__be32	xseq_1_reg[16];
6662306a36Sopenharmony_ci	__be32	rseq_gp_reg[128];
6762306a36Sopenharmony_ci	__be32	rseq_0_reg[16];
6862306a36Sopenharmony_ci	__be32	rseq_1_reg[16];
6962306a36Sopenharmony_ci	__be32	rseq_2_reg[16];
7062306a36Sopenharmony_ci	__be32	cmd_dma_reg[16];
7162306a36Sopenharmony_ci	__be32	req0_dma_reg[15];
7262306a36Sopenharmony_ci	__be32	resp0_dma_reg[15];
7362306a36Sopenharmony_ci	__be32	req1_dma_reg[15];
7462306a36Sopenharmony_ci	__be32	xmt0_dma_reg[32];
7562306a36Sopenharmony_ci	__be32	xmt1_dma_reg[32];
7662306a36Sopenharmony_ci	__be32	xmt2_dma_reg[32];
7762306a36Sopenharmony_ci	__be32	xmt3_dma_reg[32];
7862306a36Sopenharmony_ci	__be32	xmt4_dma_reg[32];
7962306a36Sopenharmony_ci	__be32	xmt_data_dma_reg[16];
8062306a36Sopenharmony_ci	__be32	rcvt0_data_dma_reg[32];
8162306a36Sopenharmony_ci	__be32	rcvt1_data_dma_reg[32];
8262306a36Sopenharmony_ci	__be32	risc_gp_reg[128];
8362306a36Sopenharmony_ci	__be32	lmc_reg[112];
8462306a36Sopenharmony_ci	__be32	fpm_hdw_reg[192];
8562306a36Sopenharmony_ci	__be32	fb_hdw_reg[176];
8662306a36Sopenharmony_ci	__be32	code_ram[0x2000];
8762306a36Sopenharmony_ci	__be32	ext_mem[1];
8862306a36Sopenharmony_ci};
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cistruct qla25xx_fw_dump {
9162306a36Sopenharmony_ci	__be32	host_status;
9262306a36Sopenharmony_ci	__be32	host_risc_reg[32];
9362306a36Sopenharmony_ci	__be32	pcie_regs[4];
9462306a36Sopenharmony_ci	__be32	host_reg[32];
9562306a36Sopenharmony_ci	__be32	shadow_reg[11];
9662306a36Sopenharmony_ci	__be32	risc_io_reg;
9762306a36Sopenharmony_ci	__be16	mailbox_reg[32];
9862306a36Sopenharmony_ci	__be32	xseq_gp_reg[128];
9962306a36Sopenharmony_ci	__be32	xseq_0_reg[48];
10062306a36Sopenharmony_ci	__be32	xseq_1_reg[16];
10162306a36Sopenharmony_ci	__be32	rseq_gp_reg[128];
10262306a36Sopenharmony_ci	__be32	rseq_0_reg[32];
10362306a36Sopenharmony_ci	__be32	rseq_1_reg[16];
10462306a36Sopenharmony_ci	__be32	rseq_2_reg[16];
10562306a36Sopenharmony_ci	__be32	aseq_gp_reg[128];
10662306a36Sopenharmony_ci	__be32	aseq_0_reg[32];
10762306a36Sopenharmony_ci	__be32	aseq_1_reg[16];
10862306a36Sopenharmony_ci	__be32	aseq_2_reg[16];
10962306a36Sopenharmony_ci	__be32	cmd_dma_reg[16];
11062306a36Sopenharmony_ci	__be32	req0_dma_reg[15];
11162306a36Sopenharmony_ci	__be32	resp0_dma_reg[15];
11262306a36Sopenharmony_ci	__be32	req1_dma_reg[15];
11362306a36Sopenharmony_ci	__be32	xmt0_dma_reg[32];
11462306a36Sopenharmony_ci	__be32	xmt1_dma_reg[32];
11562306a36Sopenharmony_ci	__be32	xmt2_dma_reg[32];
11662306a36Sopenharmony_ci	__be32	xmt3_dma_reg[32];
11762306a36Sopenharmony_ci	__be32	xmt4_dma_reg[32];
11862306a36Sopenharmony_ci	__be32	xmt_data_dma_reg[16];
11962306a36Sopenharmony_ci	__be32	rcvt0_data_dma_reg[32];
12062306a36Sopenharmony_ci	__be32	rcvt1_data_dma_reg[32];
12162306a36Sopenharmony_ci	__be32	risc_gp_reg[128];
12262306a36Sopenharmony_ci	__be32	lmc_reg[128];
12362306a36Sopenharmony_ci	__be32	fpm_hdw_reg[192];
12462306a36Sopenharmony_ci	__be32	fb_hdw_reg[192];
12562306a36Sopenharmony_ci	__be32	code_ram[0x2000];
12662306a36Sopenharmony_ci	__be32	ext_mem[1];
12762306a36Sopenharmony_ci};
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_cistruct qla81xx_fw_dump {
13062306a36Sopenharmony_ci	__be32	host_status;
13162306a36Sopenharmony_ci	__be32	host_risc_reg[32];
13262306a36Sopenharmony_ci	__be32	pcie_regs[4];
13362306a36Sopenharmony_ci	__be32	host_reg[32];
13462306a36Sopenharmony_ci	__be32	shadow_reg[11];
13562306a36Sopenharmony_ci	__be32	risc_io_reg;
13662306a36Sopenharmony_ci	__be16	mailbox_reg[32];
13762306a36Sopenharmony_ci	__be32	xseq_gp_reg[128];
13862306a36Sopenharmony_ci	__be32	xseq_0_reg[48];
13962306a36Sopenharmony_ci	__be32	xseq_1_reg[16];
14062306a36Sopenharmony_ci	__be32	rseq_gp_reg[128];
14162306a36Sopenharmony_ci	__be32	rseq_0_reg[32];
14262306a36Sopenharmony_ci	__be32	rseq_1_reg[16];
14362306a36Sopenharmony_ci	__be32	rseq_2_reg[16];
14462306a36Sopenharmony_ci	__be32	aseq_gp_reg[128];
14562306a36Sopenharmony_ci	__be32	aseq_0_reg[32];
14662306a36Sopenharmony_ci	__be32	aseq_1_reg[16];
14762306a36Sopenharmony_ci	__be32	aseq_2_reg[16];
14862306a36Sopenharmony_ci	__be32	cmd_dma_reg[16];
14962306a36Sopenharmony_ci	__be32	req0_dma_reg[15];
15062306a36Sopenharmony_ci	__be32	resp0_dma_reg[15];
15162306a36Sopenharmony_ci	__be32	req1_dma_reg[15];
15262306a36Sopenharmony_ci	__be32	xmt0_dma_reg[32];
15362306a36Sopenharmony_ci	__be32	xmt1_dma_reg[32];
15462306a36Sopenharmony_ci	__be32	xmt2_dma_reg[32];
15562306a36Sopenharmony_ci	__be32	xmt3_dma_reg[32];
15662306a36Sopenharmony_ci	__be32	xmt4_dma_reg[32];
15762306a36Sopenharmony_ci	__be32	xmt_data_dma_reg[16];
15862306a36Sopenharmony_ci	__be32	rcvt0_data_dma_reg[32];
15962306a36Sopenharmony_ci	__be32	rcvt1_data_dma_reg[32];
16062306a36Sopenharmony_ci	__be32	risc_gp_reg[128];
16162306a36Sopenharmony_ci	__be32	lmc_reg[128];
16262306a36Sopenharmony_ci	__be32	fpm_hdw_reg[224];
16362306a36Sopenharmony_ci	__be32	fb_hdw_reg[208];
16462306a36Sopenharmony_ci	__be32	code_ram[0x2000];
16562306a36Sopenharmony_ci	__be32	ext_mem[1];
16662306a36Sopenharmony_ci};
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_cistruct qla83xx_fw_dump {
16962306a36Sopenharmony_ci	__be32	host_status;
17062306a36Sopenharmony_ci	__be32	host_risc_reg[48];
17162306a36Sopenharmony_ci	__be32	pcie_regs[4];
17262306a36Sopenharmony_ci	__be32	host_reg[32];
17362306a36Sopenharmony_ci	__be32	shadow_reg[11];
17462306a36Sopenharmony_ci	__be32	risc_io_reg;
17562306a36Sopenharmony_ci	__be16	mailbox_reg[32];
17662306a36Sopenharmony_ci	__be32	xseq_gp_reg[256];
17762306a36Sopenharmony_ci	__be32	xseq_0_reg[48];
17862306a36Sopenharmony_ci	__be32	xseq_1_reg[16];
17962306a36Sopenharmony_ci	__be32	xseq_2_reg[16];
18062306a36Sopenharmony_ci	__be32	rseq_gp_reg[256];
18162306a36Sopenharmony_ci	__be32	rseq_0_reg[32];
18262306a36Sopenharmony_ci	__be32	rseq_1_reg[16];
18362306a36Sopenharmony_ci	__be32	rseq_2_reg[16];
18462306a36Sopenharmony_ci	__be32	rseq_3_reg[16];
18562306a36Sopenharmony_ci	__be32	aseq_gp_reg[256];
18662306a36Sopenharmony_ci	__be32	aseq_0_reg[32];
18762306a36Sopenharmony_ci	__be32	aseq_1_reg[16];
18862306a36Sopenharmony_ci	__be32	aseq_2_reg[16];
18962306a36Sopenharmony_ci	__be32	aseq_3_reg[16];
19062306a36Sopenharmony_ci	__be32	cmd_dma_reg[64];
19162306a36Sopenharmony_ci	__be32	req0_dma_reg[15];
19262306a36Sopenharmony_ci	__be32	resp0_dma_reg[15];
19362306a36Sopenharmony_ci	__be32	req1_dma_reg[15];
19462306a36Sopenharmony_ci	__be32	xmt0_dma_reg[32];
19562306a36Sopenharmony_ci	__be32	xmt1_dma_reg[32];
19662306a36Sopenharmony_ci	__be32	xmt2_dma_reg[32];
19762306a36Sopenharmony_ci	__be32	xmt3_dma_reg[32];
19862306a36Sopenharmony_ci	__be32	xmt4_dma_reg[32];
19962306a36Sopenharmony_ci	__be32	xmt_data_dma_reg[16];
20062306a36Sopenharmony_ci	__be32	rcvt0_data_dma_reg[32];
20162306a36Sopenharmony_ci	__be32	rcvt1_data_dma_reg[32];
20262306a36Sopenharmony_ci	__be32	risc_gp_reg[128];
20362306a36Sopenharmony_ci	__be32	lmc_reg[128];
20462306a36Sopenharmony_ci	__be32	fpm_hdw_reg[256];
20562306a36Sopenharmony_ci	__be32	rq0_array_reg[256];
20662306a36Sopenharmony_ci	__be32	rq1_array_reg[256];
20762306a36Sopenharmony_ci	__be32	rp0_array_reg[256];
20862306a36Sopenharmony_ci	__be32	rp1_array_reg[256];
20962306a36Sopenharmony_ci	__be32	queue_control_reg[16];
21062306a36Sopenharmony_ci	__be32	fb_hdw_reg[432];
21162306a36Sopenharmony_ci	__be32	at0_array_reg[128];
21262306a36Sopenharmony_ci	__be32	code_ram[0x2400];
21362306a36Sopenharmony_ci	__be32	ext_mem[1];
21462306a36Sopenharmony_ci};
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci#define EFT_NUM_BUFFERS		4
21762306a36Sopenharmony_ci#define EFT_BYTES_PER_BUFFER	0x4000
21862306a36Sopenharmony_ci#define EFT_SIZE		((EFT_BYTES_PER_BUFFER) * (EFT_NUM_BUFFERS))
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci#define FCE_NUM_BUFFERS		64
22162306a36Sopenharmony_ci#define FCE_BYTES_PER_BUFFER	0x400
22262306a36Sopenharmony_ci#define FCE_SIZE		((FCE_BYTES_PER_BUFFER) * (FCE_NUM_BUFFERS))
22362306a36Sopenharmony_ci#define fce_calc_size(b)	((FCE_BYTES_PER_BUFFER) * (b))
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_cistruct qla2xxx_fce_chain {
22662306a36Sopenharmony_ci	__be32	type;
22762306a36Sopenharmony_ci	__be32	chain_size;
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ci	__be32	size;
23062306a36Sopenharmony_ci	__be32	addr_l;
23162306a36Sopenharmony_ci	__be32	addr_h;
23262306a36Sopenharmony_ci	__be32	eregs[8];
23362306a36Sopenharmony_ci};
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci/* used by exchange off load and extended login offload */
23662306a36Sopenharmony_cistruct qla2xxx_offld_chain {
23762306a36Sopenharmony_ci	__be32	type;
23862306a36Sopenharmony_ci	__be32	chain_size;
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci	__be32	size;
24162306a36Sopenharmony_ci	__be32	reserved;
24262306a36Sopenharmony_ci	__be64	addr;
24362306a36Sopenharmony_ci};
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_cistruct qla2xxx_mq_chain {
24662306a36Sopenharmony_ci	__be32	type;
24762306a36Sopenharmony_ci	__be32	chain_size;
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci	__be32	count;
25062306a36Sopenharmony_ci	__be32	qregs[4 * QLA_MQ_SIZE];
25162306a36Sopenharmony_ci};
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_cistruct qla2xxx_mqueue_header {
25462306a36Sopenharmony_ci	__be32	queue;
25562306a36Sopenharmony_ci#define TYPE_REQUEST_QUEUE	0x1
25662306a36Sopenharmony_ci#define TYPE_RESPONSE_QUEUE	0x2
25762306a36Sopenharmony_ci#define TYPE_ATIO_QUEUE		0x3
25862306a36Sopenharmony_ci	__be32	number;
25962306a36Sopenharmony_ci	__be32	size;
26062306a36Sopenharmony_ci};
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_cistruct qla2xxx_mqueue_chain {
26362306a36Sopenharmony_ci	__be32	type;
26462306a36Sopenharmony_ci	__be32	chain_size;
26562306a36Sopenharmony_ci};
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci#define DUMP_CHAIN_VARIANT	0x80000000
26862306a36Sopenharmony_ci#define DUMP_CHAIN_FCE		0x7FFFFAF0
26962306a36Sopenharmony_ci#define DUMP_CHAIN_MQ		0x7FFFFAF1
27062306a36Sopenharmony_ci#define DUMP_CHAIN_QUEUE	0x7FFFFAF2
27162306a36Sopenharmony_ci#define DUMP_CHAIN_EXLOGIN	0x7FFFFAF3
27262306a36Sopenharmony_ci#define DUMP_CHAIN_EXCHG	0x7FFFFAF4
27362306a36Sopenharmony_ci#define DUMP_CHAIN_LAST		0x80000000
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_cistruct qla2xxx_fw_dump {
27662306a36Sopenharmony_ci	uint8_t signature[4];
27762306a36Sopenharmony_ci	__be32	version;
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci	__be32 fw_major_version;
28062306a36Sopenharmony_ci	__be32 fw_minor_version;
28162306a36Sopenharmony_ci	__be32 fw_subminor_version;
28262306a36Sopenharmony_ci	__be32 fw_attributes;
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci	__be32 vendor;
28562306a36Sopenharmony_ci	__be32 device;
28662306a36Sopenharmony_ci	__be32 subsystem_vendor;
28762306a36Sopenharmony_ci	__be32 subsystem_device;
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci	__be32	fixed_size;
29062306a36Sopenharmony_ci	__be32	mem_size;
29162306a36Sopenharmony_ci	__be32	req_q_size;
29262306a36Sopenharmony_ci	__be32	rsp_q_size;
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci	__be32	eft_size;
29562306a36Sopenharmony_ci	__be32	eft_addr_l;
29662306a36Sopenharmony_ci	__be32	eft_addr_h;
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci	__be32	header_size;
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci	union {
30162306a36Sopenharmony_ci		struct qla2100_fw_dump isp21;
30262306a36Sopenharmony_ci		struct qla2300_fw_dump isp23;
30362306a36Sopenharmony_ci		struct qla24xx_fw_dump isp24;
30462306a36Sopenharmony_ci		struct qla25xx_fw_dump isp25;
30562306a36Sopenharmony_ci		struct qla81xx_fw_dump isp81;
30662306a36Sopenharmony_ci		struct qla83xx_fw_dump isp83;
30762306a36Sopenharmony_ci	} isp;
30862306a36Sopenharmony_ci};
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci#define QL_MSGHDR "qla2xxx"
31162306a36Sopenharmony_ci#define QL_DBG_DEFAULT1_MASK    0x1e600000
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci#define ql_log_fatal		0 /* display fatal errors */
31462306a36Sopenharmony_ci#define ql_log_warn		1 /* display critical errors */
31562306a36Sopenharmony_ci#define ql_log_info		2 /* display all recovered errors */
31662306a36Sopenharmony_ci#define ql_log_all		3 /* This value is only used by ql_errlev.
31762306a36Sopenharmony_ci				   * No messages will use this value.
31862306a36Sopenharmony_ci				   * This should be always highest value
31962306a36Sopenharmony_ci				   * as compared to other log levels.
32062306a36Sopenharmony_ci				   */
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ciextern uint ql_errlev;
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_civoid __attribute__((format (printf, 4, 5)))
32562306a36Sopenharmony_ciql_dbg(uint, scsi_qla_host_t *vha, uint, const char *fmt, ...);
32662306a36Sopenharmony_civoid __attribute__((format (printf, 4, 5)))
32762306a36Sopenharmony_ciql_dbg_pci(uint, struct pci_dev *pdev, uint, const char *fmt, ...);
32862306a36Sopenharmony_civoid __attribute__((format (printf, 4, 5)))
32962306a36Sopenharmony_ciql_dbg_qp(uint32_t, struct qla_qpair *, int32_t, const char *fmt, ...);
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_civoid __attribute__((format (printf, 4, 5)))
33362306a36Sopenharmony_ciql_log(uint, scsi_qla_host_t *vha, uint, const char *fmt, ...);
33462306a36Sopenharmony_civoid __attribute__((format (printf, 4, 5)))
33562306a36Sopenharmony_ciql_log_pci(uint, struct pci_dev *pdev, uint, const char *fmt, ...);
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_civoid __attribute__((format (printf, 4, 5)))
33862306a36Sopenharmony_ciql_log_qp(uint32_t, struct qla_qpair *, int32_t, const char *fmt, ...);
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci/* Debug Levels */
34162306a36Sopenharmony_ci/* The 0x40000000 is the max value any debug level can have
34262306a36Sopenharmony_ci * as ql2xextended_error_logging is of type signed int
34362306a36Sopenharmony_ci */
34462306a36Sopenharmony_ci#define ql_dbg_init	0x40000000 /* Init Debug */
34562306a36Sopenharmony_ci#define ql_dbg_mbx	0x20000000 /* MBX Debug */
34662306a36Sopenharmony_ci#define ql_dbg_disc	0x10000000 /* Device Discovery Debug */
34762306a36Sopenharmony_ci#define ql_dbg_io	0x08000000 /* IO Tracing Debug */
34862306a36Sopenharmony_ci#define ql_dbg_dpc	0x04000000 /* DPC Thead Debug */
34962306a36Sopenharmony_ci#define ql_dbg_async	0x02000000 /* Async events Debug */
35062306a36Sopenharmony_ci#define ql_dbg_timer	0x01000000 /* Timer Debug */
35162306a36Sopenharmony_ci#define ql_dbg_user	0x00800000 /* User Space Interations Debug */
35262306a36Sopenharmony_ci#define ql_dbg_taskm	0x00400000 /* Task Management Debug */
35362306a36Sopenharmony_ci#define ql_dbg_aer	0x00200000 /* AER/EEH Debug */
35462306a36Sopenharmony_ci#define ql_dbg_multiq	0x00100000 /* MultiQ Debug */
35562306a36Sopenharmony_ci#define ql_dbg_p3p	0x00080000 /* P3P specific Debug */
35662306a36Sopenharmony_ci#define ql_dbg_vport	0x00040000 /* Virtual Port Debug */
35762306a36Sopenharmony_ci#define ql_dbg_buffer	0x00020000 /* For dumping the buffer/regs */
35862306a36Sopenharmony_ci#define ql_dbg_misc	0x00010000 /* For dumping everything that is not
35962306a36Sopenharmony_ci				    * not covered by upper categories
36062306a36Sopenharmony_ci				    */
36162306a36Sopenharmony_ci#define ql_dbg_verbose	0x00008000 /* More verbosity for each level
36262306a36Sopenharmony_ci				    * This is to be used with other levels where
36362306a36Sopenharmony_ci				    * more verbosity is required. It might not
36462306a36Sopenharmony_ci				    * be applicable to all the levels.
36562306a36Sopenharmony_ci				    */
36662306a36Sopenharmony_ci#define ql_dbg_tgt	0x00004000 /* Target mode */
36762306a36Sopenharmony_ci#define ql_dbg_tgt_mgt	0x00002000 /* Target mode management */
36862306a36Sopenharmony_ci#define ql_dbg_tgt_tmr	0x00001000 /* Target mode task management */
36962306a36Sopenharmony_ci#define ql_dbg_tgt_dif  0x00000800 /* Target mode dif */
37062306a36Sopenharmony_ci#define ql_dbg_edif	0x00000400 /* edif and purex debug */
37162306a36Sopenharmony_ci#define ql_dbg_unsol	0x00000100 /* Unsolicited path debug */
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ciextern int qla27xx_dump_mpi_ram(struct qla_hw_data *, uint32_t, uint32_t *,
37462306a36Sopenharmony_ci	uint32_t, void **);
37562306a36Sopenharmony_ciextern int qla24xx_dump_ram(struct qla_hw_data *, uint32_t, __be32 *,
37662306a36Sopenharmony_ci	uint32_t, void **);
37762306a36Sopenharmony_ciextern void qla24xx_pause_risc(struct device_reg_24xx __iomem *,
37862306a36Sopenharmony_ci	struct qla_hw_data *);
37962306a36Sopenharmony_ciextern int qla24xx_soft_reset(struct qla_hw_data *);
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_cistatic inline int
38262306a36Sopenharmony_ciql_mask_match(uint level)
38362306a36Sopenharmony_ci{
38462306a36Sopenharmony_ci	if (ql2xextended_error_logging == 1)
38562306a36Sopenharmony_ci		ql2xextended_error_logging = QL_DBG_DEFAULT1_MASK;
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci	return level && ((level & ql2xextended_error_logging) == level);
38862306a36Sopenharmony_ci}
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_cistatic inline int
39162306a36Sopenharmony_ciql_mask_match_ext(uint level, int *log_tunable)
39262306a36Sopenharmony_ci{
39362306a36Sopenharmony_ci	if (*log_tunable == 1)
39462306a36Sopenharmony_ci		*log_tunable = QL_DBG_DEFAULT1_MASK;
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci	return (level & *log_tunable) == level;
39762306a36Sopenharmony_ci}
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_ci/* Assumes local variable pbuf and pbuf_ready present. */
40062306a36Sopenharmony_ci#define ql_ktrace(dbg_msg, level, pbuf, pdev, vha, id, fmt) do {	\
40162306a36Sopenharmony_ci	struct va_format _vaf;						\
40262306a36Sopenharmony_ci	va_list _va;							\
40362306a36Sopenharmony_ci	u32 dbg_off = dbg_msg ? ql_dbg_offset : 0;			\
40462306a36Sopenharmony_ci									\
40562306a36Sopenharmony_ci	pbuf[0] = 0;							\
40662306a36Sopenharmony_ci	if (!trace_ql_dbg_log_enabled())				\
40762306a36Sopenharmony_ci		break;							\
40862306a36Sopenharmony_ci									\
40962306a36Sopenharmony_ci	if (dbg_msg && !ql_mask_match_ext(level,			\
41062306a36Sopenharmony_ci				&ql2xextended_error_logging_ktrace))	\
41162306a36Sopenharmony_ci		break;							\
41262306a36Sopenharmony_ci									\
41362306a36Sopenharmony_ci	ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), pdev, vha, id + dbg_off);	\
41462306a36Sopenharmony_ci									\
41562306a36Sopenharmony_ci	va_start(_va, fmt);						\
41662306a36Sopenharmony_ci	_vaf.fmt = fmt;							\
41762306a36Sopenharmony_ci	_vaf.va = &_va;							\
41862306a36Sopenharmony_ci									\
41962306a36Sopenharmony_ci	trace_ql_dbg_log(pbuf, &_vaf);					\
42062306a36Sopenharmony_ci									\
42162306a36Sopenharmony_ci	va_end(_va);							\
42262306a36Sopenharmony_ci} while (0)
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_ci#define QLA_ENABLE_KERNEL_TRACING
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ci#ifdef QLA_ENABLE_KERNEL_TRACING
42762306a36Sopenharmony_ci#define QLA_TRACE_ENABLE(_tr) \
42862306a36Sopenharmony_ci	trace_array_set_clr_event(_tr, "qla", NULL, true)
42962306a36Sopenharmony_ci#else /* QLA_ENABLE_KERNEL_TRACING */
43062306a36Sopenharmony_ci#define QLA_TRACE_ENABLE(_tr)
43162306a36Sopenharmony_ci#endif /* QLA_ENABLE_KERNEL_TRACING */
432