0001
0002
0003
0004
0005
0006
0007 #include "qla_def.h"
0008
0009
0010
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
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
0314 #define ql_log_warn 1
0315 #define ql_log_info 2
0316 #define ql_log_all 3
0317
0318
0319
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
0341
0342
0343
0344 #define ql_dbg_init 0x40000000
0345 #define ql_dbg_mbx 0x20000000
0346 #define ql_dbg_disc 0x10000000
0347 #define ql_dbg_io 0x08000000
0348 #define ql_dbg_dpc 0x04000000
0349 #define ql_dbg_async 0x02000000
0350 #define ql_dbg_timer 0x01000000
0351 #define ql_dbg_user 0x00800000
0352 #define ql_dbg_taskm 0x00400000
0353 #define ql_dbg_aer 0x00200000
0354 #define ql_dbg_multiq 0x00100000
0355 #define ql_dbg_p3p 0x00080000
0356 #define ql_dbg_vport 0x00040000
0357 #define ql_dbg_buffer 0x00020000
0358 #define ql_dbg_misc 0x00010000
0359
0360
0361 #define ql_dbg_verbose 0x00008000
0362
0363
0364
0365
0366 #define ql_dbg_tgt 0x00004000
0367 #define ql_dbg_tgt_mgt 0x00002000
0368 #define ql_dbg_tgt_tmr 0x00001000
0369 #define ql_dbg_tgt_dif 0x00000800
0370 #define ql_dbg_edif 0x00000400
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 }