Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * QLogic Fibre Channel HBA Driver
0004  * Copyright (c)  2003-2014 QLogic Corporation
0005  */
0006 
0007 #include "qla_def.h"
0008 
0009 /*
0010  * Firmware Dump structure definition
0011  */
0012 
0013 struct qla2300_fw_dump {
0014     __be16 hccr;
0015     __be16 pbiu_reg[8];
0016     __be16 risc_host_reg[8];
0017     __be16 mailbox_reg[32];
0018     __be16 resp_dma_reg[32];
0019     __be16 dma_reg[48];
0020     __be16 risc_hdw_reg[16];
0021     __be16 risc_gp0_reg[16];
0022     __be16 risc_gp1_reg[16];
0023     __be16 risc_gp2_reg[16];
0024     __be16 risc_gp3_reg[16];
0025     __be16 risc_gp4_reg[16];
0026     __be16 risc_gp5_reg[16];
0027     __be16 risc_gp6_reg[16];
0028     __be16 risc_gp7_reg[16];
0029     __be16 frame_buf_hdw_reg[64];
0030     __be16 fpm_b0_reg[64];
0031     __be16 fpm_b1_reg[64];
0032     __be16 risc_ram[0xf800];
0033     __be16 stack_ram[0x1000];
0034     __be16 data_ram[1];
0035 };
0036 
0037 struct qla2100_fw_dump {
0038     __be16 hccr;
0039     __be16 pbiu_reg[8];
0040     __be16 mailbox_reg[32];
0041     __be16 dma_reg[48];
0042     __be16 risc_hdw_reg[16];
0043     __be16 risc_gp0_reg[16];
0044     __be16 risc_gp1_reg[16];
0045     __be16 risc_gp2_reg[16];
0046     __be16 risc_gp3_reg[16];
0047     __be16 risc_gp4_reg[16];
0048     __be16 risc_gp5_reg[16];
0049     __be16 risc_gp6_reg[16];
0050     __be16 risc_gp7_reg[16];
0051     __be16 frame_buf_hdw_reg[16];
0052     __be16 fpm_b0_reg[64];
0053     __be16 fpm_b1_reg[64];
0054     __be16 risc_ram[0xf000];
0055     u8  queue_dump[];
0056 };
0057 
0058 struct qla24xx_fw_dump {
0059     __be32  host_status;
0060     __be32  host_reg[32];
0061     __be32  shadow_reg[7];
0062     __be16  mailbox_reg[32];
0063     __be32  xseq_gp_reg[128];
0064     __be32  xseq_0_reg[16];
0065     __be32  xseq_1_reg[16];
0066     __be32  rseq_gp_reg[128];
0067     __be32  rseq_0_reg[16];
0068     __be32  rseq_1_reg[16];
0069     __be32  rseq_2_reg[16];
0070     __be32  cmd_dma_reg[16];
0071     __be32  req0_dma_reg[15];
0072     __be32  resp0_dma_reg[15];
0073     __be32  req1_dma_reg[15];
0074     __be32  xmt0_dma_reg[32];
0075     __be32  xmt1_dma_reg[32];
0076     __be32  xmt2_dma_reg[32];
0077     __be32  xmt3_dma_reg[32];
0078     __be32  xmt4_dma_reg[32];
0079     __be32  xmt_data_dma_reg[16];
0080     __be32  rcvt0_data_dma_reg[32];
0081     __be32  rcvt1_data_dma_reg[32];
0082     __be32  risc_gp_reg[128];
0083     __be32  lmc_reg[112];
0084     __be32  fpm_hdw_reg[192];
0085     __be32  fb_hdw_reg[176];
0086     __be32  code_ram[0x2000];
0087     __be32  ext_mem[1];
0088 };
0089 
0090 struct qla25xx_fw_dump {
0091     __be32  host_status;
0092     __be32  host_risc_reg[32];
0093     __be32  pcie_regs[4];
0094     __be32  host_reg[32];
0095     __be32  shadow_reg[11];
0096     __be32  risc_io_reg;
0097     __be16  mailbox_reg[32];
0098     __be32  xseq_gp_reg[128];
0099     __be32  xseq_0_reg[48];
0100     __be32  xseq_1_reg[16];
0101     __be32  rseq_gp_reg[128];
0102     __be32  rseq_0_reg[32];
0103     __be32  rseq_1_reg[16];
0104     __be32  rseq_2_reg[16];
0105     __be32  aseq_gp_reg[128];
0106     __be32  aseq_0_reg[32];
0107     __be32  aseq_1_reg[16];
0108     __be32  aseq_2_reg[16];
0109     __be32  cmd_dma_reg[16];
0110     __be32  req0_dma_reg[15];
0111     __be32  resp0_dma_reg[15];
0112     __be32  req1_dma_reg[15];
0113     __be32  xmt0_dma_reg[32];
0114     __be32  xmt1_dma_reg[32];
0115     __be32  xmt2_dma_reg[32];
0116     __be32  xmt3_dma_reg[32];
0117     __be32  xmt4_dma_reg[32];
0118     __be32  xmt_data_dma_reg[16];
0119     __be32  rcvt0_data_dma_reg[32];
0120     __be32  rcvt1_data_dma_reg[32];
0121     __be32  risc_gp_reg[128];
0122     __be32  lmc_reg[128];
0123     __be32  fpm_hdw_reg[192];
0124     __be32  fb_hdw_reg[192];
0125     __be32  code_ram[0x2000];
0126     __be32  ext_mem[1];
0127 };
0128 
0129 struct qla81xx_fw_dump {
0130     __be32  host_status;
0131     __be32  host_risc_reg[32];
0132     __be32  pcie_regs[4];
0133     __be32  host_reg[32];
0134     __be32  shadow_reg[11];
0135     __be32  risc_io_reg;
0136     __be16  mailbox_reg[32];
0137     __be32  xseq_gp_reg[128];
0138     __be32  xseq_0_reg[48];
0139     __be32  xseq_1_reg[16];
0140     __be32  rseq_gp_reg[128];
0141     __be32  rseq_0_reg[32];
0142     __be32  rseq_1_reg[16];
0143     __be32  rseq_2_reg[16];
0144     __be32  aseq_gp_reg[128];
0145     __be32  aseq_0_reg[32];
0146     __be32  aseq_1_reg[16];
0147     __be32  aseq_2_reg[16];
0148     __be32  cmd_dma_reg[16];
0149     __be32  req0_dma_reg[15];
0150     __be32  resp0_dma_reg[15];
0151     __be32  req1_dma_reg[15];
0152     __be32  xmt0_dma_reg[32];
0153     __be32  xmt1_dma_reg[32];
0154     __be32  xmt2_dma_reg[32];
0155     __be32  xmt3_dma_reg[32];
0156     __be32  xmt4_dma_reg[32];
0157     __be32  xmt_data_dma_reg[16];
0158     __be32  rcvt0_data_dma_reg[32];
0159     __be32  rcvt1_data_dma_reg[32];
0160     __be32  risc_gp_reg[128];
0161     __be32  lmc_reg[128];
0162     __be32  fpm_hdw_reg[224];
0163     __be32  fb_hdw_reg[208];
0164     __be32  code_ram[0x2000];
0165     __be32  ext_mem[1];
0166 };
0167 
0168 struct qla83xx_fw_dump {
0169     __be32  host_status;
0170     __be32  host_risc_reg[48];
0171     __be32  pcie_regs[4];
0172     __be32  host_reg[32];
0173     __be32  shadow_reg[11];
0174     __be32  risc_io_reg;
0175     __be16  mailbox_reg[32];
0176     __be32  xseq_gp_reg[256];
0177     __be32  xseq_0_reg[48];
0178     __be32  xseq_1_reg[16];
0179     __be32  xseq_2_reg[16];
0180     __be32  rseq_gp_reg[256];
0181     __be32  rseq_0_reg[32];
0182     __be32  rseq_1_reg[16];
0183     __be32  rseq_2_reg[16];
0184     __be32  rseq_3_reg[16];
0185     __be32  aseq_gp_reg[256];
0186     __be32  aseq_0_reg[32];
0187     __be32  aseq_1_reg[16];
0188     __be32  aseq_2_reg[16];
0189     __be32  aseq_3_reg[16];
0190     __be32  cmd_dma_reg[64];
0191     __be32  req0_dma_reg[15];
0192     __be32  resp0_dma_reg[15];
0193     __be32  req1_dma_reg[15];
0194     __be32  xmt0_dma_reg[32];
0195     __be32  xmt1_dma_reg[32];
0196     __be32  xmt2_dma_reg[32];
0197     __be32  xmt3_dma_reg[32];
0198     __be32  xmt4_dma_reg[32];
0199     __be32  xmt_data_dma_reg[16];
0200     __be32  rcvt0_data_dma_reg[32];
0201     __be32  rcvt1_data_dma_reg[32];
0202     __be32  risc_gp_reg[128];
0203     __be32  lmc_reg[128];
0204     __be32  fpm_hdw_reg[256];
0205     __be32  rq0_array_reg[256];
0206     __be32  rq1_array_reg[256];
0207     __be32  rp0_array_reg[256];
0208     __be32  rp1_array_reg[256];
0209     __be32  queue_control_reg[16];
0210     __be32  fb_hdw_reg[432];
0211     __be32  at0_array_reg[128];
0212     __be32  code_ram[0x2400];
0213     __be32  ext_mem[1];
0214 };
0215 
0216 #define EFT_NUM_BUFFERS     4
0217 #define EFT_BYTES_PER_BUFFER    0x4000
0218 #define EFT_SIZE        ((EFT_BYTES_PER_BUFFER) * (EFT_NUM_BUFFERS))
0219 
0220 #define FCE_NUM_BUFFERS     64
0221 #define FCE_BYTES_PER_BUFFER    0x400
0222 #define FCE_SIZE        ((FCE_BYTES_PER_BUFFER) * (FCE_NUM_BUFFERS))
0223 #define fce_calc_size(b)    ((FCE_BYTES_PER_BUFFER) * (b))
0224 
0225 struct qla2xxx_fce_chain {
0226     __be32  type;
0227     __be32  chain_size;
0228 
0229     __be32  size;
0230     __be32  addr_l;
0231     __be32  addr_h;
0232     __be32  eregs[8];
0233 };
0234 
0235 /* used by exchange off load and extended login offload */
0236 struct qla2xxx_offld_chain {
0237     __be32  type;
0238     __be32  chain_size;
0239 
0240     __be32  size;
0241     __be32  reserved;
0242     __be64  addr;
0243 };
0244 
0245 struct qla2xxx_mq_chain {
0246     __be32  type;
0247     __be32  chain_size;
0248 
0249     __be32  count;
0250     __be32  qregs[4 * QLA_MQ_SIZE];
0251 };
0252 
0253 struct qla2xxx_mqueue_header {
0254     __be32  queue;
0255 #define TYPE_REQUEST_QUEUE  0x1
0256 #define TYPE_RESPONSE_QUEUE 0x2
0257 #define TYPE_ATIO_QUEUE     0x3
0258     __be32  number;
0259     __be32  size;
0260 };
0261 
0262 struct qla2xxx_mqueue_chain {
0263     __be32  type;
0264     __be32  chain_size;
0265 };
0266 
0267 #define DUMP_CHAIN_VARIANT  0x80000000
0268 #define DUMP_CHAIN_FCE      0x7FFFFAF0
0269 #define DUMP_CHAIN_MQ       0x7FFFFAF1
0270 #define DUMP_CHAIN_QUEUE    0x7FFFFAF2
0271 #define DUMP_CHAIN_EXLOGIN  0x7FFFFAF3
0272 #define DUMP_CHAIN_EXCHG    0x7FFFFAF4
0273 #define DUMP_CHAIN_LAST     0x80000000
0274 
0275 struct qla2xxx_fw_dump {
0276     uint8_t signature[4];
0277     __be32  version;
0278 
0279     __be32 fw_major_version;
0280     __be32 fw_minor_version;
0281     __be32 fw_subminor_version;
0282     __be32 fw_attributes;
0283 
0284     __be32 vendor;
0285     __be32 device;
0286     __be32 subsystem_vendor;
0287     __be32 subsystem_device;
0288 
0289     __be32  fixed_size;
0290     __be32  mem_size;
0291     __be32  req_q_size;
0292     __be32  rsp_q_size;
0293 
0294     __be32  eft_size;
0295     __be32  eft_addr_l;
0296     __be32  eft_addr_h;
0297 
0298     __be32  header_size;
0299 
0300     union {
0301         struct qla2100_fw_dump isp21;
0302         struct qla2300_fw_dump isp23;
0303         struct qla24xx_fw_dump isp24;
0304         struct qla25xx_fw_dump isp25;
0305         struct qla81xx_fw_dump isp81;
0306         struct qla83xx_fw_dump isp83;
0307     } isp;
0308 };
0309 
0310 #define QL_MSGHDR "qla2xxx"
0311 #define QL_DBG_DEFAULT1_MASK    0x1e600000
0312 
0313 #define ql_log_fatal        0 /* display fatal errors */
0314 #define ql_log_warn     1 /* display critical errors */
0315 #define ql_log_info     2 /* display all recovered errors */
0316 #define ql_log_all      3 /* This value is only used by ql_errlev.
0317                    * No messages will use this value.
0318                    * This should be always highest value
0319                    * as compared to other log levels.
0320                    */
0321 
0322 extern uint ql_errlev;
0323 
0324 void __attribute__((format (printf, 4, 5)))
0325 ql_dbg(uint, scsi_qla_host_t *vha, uint, const char *fmt, ...);
0326 void __attribute__((format (printf, 4, 5)))
0327 ql_dbg_pci(uint, struct pci_dev *pdev, uint, const char *fmt, ...);
0328 void __attribute__((format (printf, 4, 5)))
0329 ql_dbg_qp(uint32_t, struct qla_qpair *, int32_t, const char *fmt, ...);
0330 
0331 
0332 void __attribute__((format (printf, 4, 5)))
0333 ql_log(uint, scsi_qla_host_t *vha, uint, const char *fmt, ...);
0334 void __attribute__((format (printf, 4, 5)))
0335 ql_log_pci(uint, struct pci_dev *pdev, uint, const char *fmt, ...);
0336 
0337 void __attribute__((format (printf, 4, 5)))
0338 ql_log_qp(uint32_t, struct qla_qpair *, int32_t, const char *fmt, ...);
0339 
0340 /* Debug Levels */
0341 /* The 0x40000000 is the max value any debug level can have
0342  * as ql2xextended_error_logging is of type signed int
0343  */
0344 #define ql_dbg_init 0x40000000 /* Init Debug */
0345 #define ql_dbg_mbx  0x20000000 /* MBX Debug */
0346 #define ql_dbg_disc 0x10000000 /* Device Discovery Debug */
0347 #define ql_dbg_io   0x08000000 /* IO Tracing Debug */
0348 #define ql_dbg_dpc  0x04000000 /* DPC Thead Debug */
0349 #define ql_dbg_async    0x02000000 /* Async events Debug */
0350 #define ql_dbg_timer    0x01000000 /* Timer Debug */
0351 #define ql_dbg_user 0x00800000 /* User Space Interations Debug */
0352 #define ql_dbg_taskm    0x00400000 /* Task Management Debug */
0353 #define ql_dbg_aer  0x00200000 /* AER/EEH Debug */
0354 #define ql_dbg_multiq   0x00100000 /* MultiQ Debug */
0355 #define ql_dbg_p3p  0x00080000 /* P3P specific Debug */
0356 #define ql_dbg_vport    0x00040000 /* Virtual Port Debug */
0357 #define ql_dbg_buffer   0x00020000 /* For dumping the buffer/regs */
0358 #define ql_dbg_misc 0x00010000 /* For dumping everything that is not
0359                     * not covered by upper categories
0360                     */
0361 #define ql_dbg_verbose  0x00008000 /* More verbosity for each level
0362                     * This is to be used with other levels where
0363                     * more verbosity is required. It might not
0364                     * be applicable to all the levels.
0365                     */
0366 #define ql_dbg_tgt  0x00004000 /* Target mode */
0367 #define ql_dbg_tgt_mgt  0x00002000 /* Target mode management */
0368 #define ql_dbg_tgt_tmr  0x00001000 /* Target mode task management */
0369 #define ql_dbg_tgt_dif  0x00000800 /* Target mode dif */
0370 #define ql_dbg_edif 0x00000400 /* edif and purex debug */
0371 
0372 extern int qla27xx_dump_mpi_ram(struct qla_hw_data *, uint32_t, uint32_t *,
0373     uint32_t, void **);
0374 extern int qla24xx_dump_ram(struct qla_hw_data *, uint32_t, __be32 *,
0375     uint32_t, void **);
0376 extern void qla24xx_pause_risc(struct device_reg_24xx __iomem *,
0377     struct qla_hw_data *);
0378 extern int qla24xx_soft_reset(struct qla_hw_data *);
0379 
0380 static inline int
0381 ql_mask_match(uint level)
0382 {
0383     if (ql2xextended_error_logging == 1)
0384         ql2xextended_error_logging = QL_DBG_DEFAULT1_MASK;
0385 
0386     return level && ((level & ql2xextended_error_logging) == level);
0387 }