// SPDX-License-Identifier: GPL-2.0-only /* * QLogic Fibre Channel HBA Driver * Copyright (c) 2003-2014 QLogic Corporation */ /* * Table for showing the current message id in use for particular level * Change this table for addition of log/debug messages. * ---------------------------------------------------------------------- * | Level | Last Value Used | Holes | * ---------------------------------------------------------------------- * | Module Init and Probe | 0x0199 | | * | Mailbox commands | 0x1206 | 0x11a5-0x11ff | * | Device Discovery | 0x2134 | 0x2112-0x2115 | * | | | 0x2127-0x2128 | * | Queue Command and IO tracing | 0x3074 | 0x300b | * | | | 0x3027-0x3028 | * | | | 0x303d-0x3041 | * | | | 0x302e,0x3033 | * | | | 0x3036,0x3038 | * | | | 0x303a | * | DPC Thread | 0x4023 | 0x4002,0x4013 | * | Async Events | 0x509c | | * | Timer Routines | 0x6012 | | * | User Space Interactions | 0x70e3 | 0x7018,0x702e | * | | | 0x7020,0x7024 | * | | | 0x7039,0x7045 | * | | | 0x7073-0x7075 | * | | | 0x70a5-0x70a6 | * | | | 0x70a8,0x70ab | * | | | 0x70ad-0x70ae | * | | | 0x70d0-0x70d6 | * | | | 0x70d7-0x70db | * | Task Management | 0x8042 | 0x8000 | * | | | 0x8019 | * | | | 0x8025,0x8026 | * | | | 0x8031,0x8032 | * | | | 0x8039,0x803c | * | AER/EEH | 0x9011 | | * | Virtual Port | 0xa007 | | * | ISP82XX Specific | 0xb157 | 0xb002,0xb024 | * | | | 0xb09e,0xb0ae | * | | | 0xb0c3,0xb0c6 | * | | | 0xb0e0-0xb0ef | * | | | 0xb085,0xb0dc | * | | | 0xb107,0xb108 | * | | | 0xb111,0xb11e | * | | | 0xb12c,0xb12d | * | | | 0xb13a,0xb142 | * | | | 0xb13c-0xb140 | * | | | 0xb149 | * | MultiQ | 0xc010 | | * | Misc | 0xd303 | 0xd031-0xd0ff | * | | | 0xd101-0xd1fe | * | | | 0xd214-0xd2fe | * | Target Mode | 0xe081 | | * | Target Mode Management | 0xf09b | 0xf002 | * | | | 0xf046-0xf049 | * | Target Mode Task Management | 0x1000d | | * ---------------------------------------------------------------------- */ #include "qla_def.h" #include <linux/delay.h> #define CREATE_TRACE_POINTS #include <trace/events/qla.h> static uint32_t ql_dbg_offset = …; static inline void qla2xxx_prep_dump(struct qla_hw_data *ha, struct qla2xxx_fw_dump *fw_dump) { … } static inline void * qla2xxx_copy_queues(struct qla_hw_data *ha, void *ptr) { … } int qla27xx_dump_mpi_ram(struct qla_hw_data *ha, uint32_t addr, uint32_t *ram, uint32_t ram_dwords, void **nxt) { … } int qla24xx_dump_ram(struct qla_hw_data *ha, uint32_t addr, __be32 *ram, uint32_t ram_dwords, void **nxt) { … } static int qla24xx_dump_memory(struct qla_hw_data *ha, __be32 *code_ram, uint32_t cram_size, void **nxt) { … } static __be32 * qla24xx_read_window(struct device_reg_24xx __iomem *reg, uint32_t iobase, uint32_t count, __be32 *buf) { … } void qla24xx_pause_risc(struct device_reg_24xx __iomem *reg, struct qla_hw_data *ha) { … } int qla24xx_soft_reset(struct qla_hw_data *ha) { … } static int qla2xxx_dump_ram(struct qla_hw_data *ha, uint32_t addr, __be16 *ram, uint32_t ram_words, void **nxt) { … } static inline void qla2xxx_read_window(struct device_reg_2xxx __iomem *reg, uint32_t count, __be16 *buf) { … } static inline void * qla24xx_copy_eft(struct qla_hw_data *ha, void *ptr) { … } static inline void * qla25xx_copy_fce(struct qla_hw_data *ha, void *ptr, __be32 **last_chain) { … } static inline void * qla25xx_copy_exlogin(struct qla_hw_data *ha, void *ptr, __be32 **last_chain) { … } static inline void * qla81xx_copy_exchoffld(struct qla_hw_data *ha, void *ptr, __be32 **last_chain) { … } static inline void * qla2xxx_copy_atioqueues(struct qla_hw_data *ha, void *ptr, __be32 **last_chain) { … } static inline void * qla25xx_copy_mqueues(struct qla_hw_data *ha, void *ptr, __be32 **last_chain) { … } static inline void * qla25xx_copy_mq(struct qla_hw_data *ha, void *ptr, __be32 **last_chain) { … } void qla2xxx_dump_post_process(scsi_qla_host_t *vha, int rval) { … } void qla2xxx_dump_fw(scsi_qla_host_t *vha) { … } /** * qla2300_fw_dump() - Dumps binary data from the 2300 firmware. * @vha: HA context */ void qla2300_fw_dump(scsi_qla_host_t *vha) { … } /** * qla2100_fw_dump() - Dumps binary data from the 2100/2200 firmware. * @vha: HA context */ void qla2100_fw_dump(scsi_qla_host_t *vha) { … } void qla24xx_fw_dump(scsi_qla_host_t *vha) { … } void qla25xx_fw_dump(scsi_qla_host_t *vha) { … } void qla81xx_fw_dump(scsi_qla_host_t *vha) { … } void qla83xx_fw_dump(scsi_qla_host_t *vha) { … } /****************************************************************************/ /* Driver Debug Functions. */ /****************************************************************************/ /* Write the debug message prefix into @pbuf. */ static void ql_dbg_prefix(char *pbuf, int pbuf_size, struct pci_dev *pdev, const scsi_qla_host_t *vha, uint msg_id) { … } /* * This function is for formatting and logging debug information. * It is to be used when vha is available. It formats the message * and logs it to the messages file. * parameters: * level: The level of the debug messages to be printed. * If ql2xextended_error_logging value is correctly set, * this message will appear in the messages file. * vha: Pointer to the scsi_qla_host_t. * id: This is a unique identifier for the level. It identifies the * part of the code from where the message originated. * msg: The message to be displayed. */ void ql_dbg(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) { … } /* * This function is for formatting and logging debug information. * It is to be used when vha is not available and pci is available, * i.e., before host allocation. It formats the message and logs it * to the messages file. * parameters: * level: The level of the debug messages to be printed. * If ql2xextended_error_logging value is correctly set, * this message will appear in the messages file. * pdev: Pointer to the struct pci_dev. * id: This is a unique id for the level. It identifies the part * of the code from where the message originated. * msg: The message to be displayed. */ void ql_dbg_pci(uint level, struct pci_dev *pdev, uint id, const char *fmt, ...) { … } /* * This function is for formatting and logging log messages. * It is to be used when vha is available. It formats the message * and logs it to the messages file. All the messages will be logged * irrespective of value of ql2xextended_error_logging. * parameters: * level: The level of the log messages to be printed in the * messages file. * vha: Pointer to the scsi_qla_host_t * id: This is a unique id for the level. It identifies the * part of the code from where the message originated. * msg: The message to be displayed. */ void ql_log(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) { … } /* * This function is for formatting and logging log messages. * It is to be used when vha is not available and pci is available, * i.e., before host allocation. It formats the message and logs * it to the messages file. All the messages are logged irrespective * of the value of ql2xextended_error_logging. * parameters: * level: The level of the log messages to be printed in the * messages file. * pdev: Pointer to the struct pci_dev. * id: This is a unique id for the level. It identifies the * part of the code from where the message originated. * msg: The message to be displayed. */ void ql_log_pci(uint level, struct pci_dev *pdev, uint id, const char *fmt, ...) { … } void ql_dump_regs(uint level, scsi_qla_host_t *vha, uint id) { … } void ql_dump_buffer(uint level, scsi_qla_host_t *vha, uint id, const void *buf, uint size) { … } /* * This function is for formatting and logging log messages. * It is to be used when vha is available. It formats the message * and logs it to the messages file. All the messages will be logged * irrespective of value of ql2xextended_error_logging. * parameters: * level: The level of the log messages to be printed in the * messages file. * vha: Pointer to the scsi_qla_host_t * id: This is a unique id for the level. It identifies the * part of the code from where the message originated. * msg: The message to be displayed. */ void ql_log_qp(uint32_t level, struct qla_qpair *qpair, int32_t id, const char *fmt, ...) { … } /* * This function is for formatting and logging debug information. * It is to be used when vha is available. It formats the message * and logs it to the messages file. * parameters: * level: The level of the debug messages to be printed. * If ql2xextended_error_logging value is correctly set, * this message will appear in the messages file. * vha: Pointer to the scsi_qla_host_t. * id: This is a unique identifier for the level. It identifies the * part of the code from where the message originated. * msg: The message to be displayed. */ void ql_dbg_qp(uint32_t level, struct qla_qpair *qpair, int32_t id, const char *fmt, ...) { … }