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