mpi3mr_debug.h (4187B)
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Driver for Broadcom MPI3 Storage Controllers 4 * 5 * Copyright (C) 2017-2022 Broadcom Inc. 6 * (mailto: mpi3mr-linuxdrv.pdl@broadcom.com) 7 * 8 */ 9 10#ifndef MPI3SAS_DEBUG_H_INCLUDED 11 12#define MPI3SAS_DEBUG_H_INCLUDED 13 14/* 15 * debug levels 16 */ 17 18#define MPI3_DEBUG_EVENT 0x00000001 19#define MPI3_DEBUG_EVENT_WORK_TASK 0x00000002 20#define MPI3_DEBUG_INIT 0x00000004 21#define MPI3_DEBUG_EXIT 0x00000008 22#define MPI3_DEBUG_TM 0x00000010 23#define MPI3_DEBUG_RESET 0x00000020 24#define MPI3_DEBUG_SCSI_ERROR 0x00000040 25#define MPI3_DEBUG_REPLY 0x00000080 26#define MPI3_DEBUG_BSG_ERROR 0x00008000 27#define MPI3_DEBUG_BSG_INFO 0x00010000 28#define MPI3_DEBUG_SCSI_INFO 0x00020000 29#define MPI3_DEBUG 0x01000000 30#define MPI3_DEBUG_SG 0x02000000 31 32 33/* 34 * debug macros 35 */ 36 37#define ioc_err(ioc, fmt, ...) \ 38 pr_err("%s: " fmt, (ioc)->name, ##__VA_ARGS__) 39#define ioc_notice(ioc, fmt, ...) \ 40 pr_notice("%s: " fmt, (ioc)->name, ##__VA_ARGS__) 41#define ioc_warn(ioc, fmt, ...) \ 42 pr_warn("%s: " fmt, (ioc)->name, ##__VA_ARGS__) 43#define ioc_info(ioc, fmt, ...) \ 44 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__) 45 46#define dprint(ioc, fmt, ...) \ 47 do { \ 48 if (ioc->logging_level & MPI3_DEBUG) \ 49 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 50 } while (0) 51 52#define dprint_event_th(ioc, fmt, ...) \ 53 do { \ 54 if (ioc->logging_level & MPI3_DEBUG_EVENT) \ 55 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 56 } while (0) 57 58#define dprint_event_bh(ioc, fmt, ...) \ 59 do { \ 60 if (ioc->logging_level & MPI3_DEBUG_EVENT_WORK_TASK) \ 61 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 62 } while (0) 63 64#define dprint_init(ioc, fmt, ...) \ 65 do { \ 66 if (ioc->logging_level & MPI3_DEBUG_INIT) \ 67 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 68 } while (0) 69 70#define dprint_exit(ioc, fmt, ...) \ 71 do { \ 72 if (ioc->logging_level & MPI3_DEBUG_EXIT) \ 73 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 74 } while (0) 75 76#define dprint_tm(ioc, fmt, ...) \ 77 do { \ 78 if (ioc->logging_level & MPI3_DEBUG_TM) \ 79 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 80 } while (0) 81 82#define dprint_reply(ioc, fmt, ...) \ 83 do { \ 84 if (ioc->logging_level & MPI3_DEBUG_REPLY) \ 85 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 86 } while (0) 87 88#define dprint_reset(ioc, fmt, ...) \ 89 do { \ 90 if (ioc->logging_level & MPI3_DEBUG_RESET) \ 91 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 92 } while (0) 93 94#define dprint_scsi_info(ioc, fmt, ...) \ 95 do { \ 96 if (ioc->logging_level & MPI3_DEBUG_SCSI_INFO) \ 97 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 98 } while (0) 99 100#define dprint_scsi_err(ioc, fmt, ...) \ 101 do { \ 102 if (ioc->logging_level & MPI3_DEBUG_SCSI_ERROR) \ 103 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 104 } while (0) 105 106#define dprint_scsi_command(ioc, SCMD, LOG_LEVEL) \ 107 do { \ 108 if (ioc->logging_level & LOG_LEVEL) \ 109 scsi_print_command(SCMD); \ 110 } while (0) 111 112 113#define dprint_bsg_info(ioc, fmt, ...) \ 114 do { \ 115 if (ioc->logging_level & MPI3_DEBUG_BSG_INFO) \ 116 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 117 } while (0) 118 119#define dprint_bsg_err(ioc, fmt, ...) \ 120 do { \ 121 if (ioc->logging_level & MPI3_DEBUG_BSG_ERROR) \ 122 pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \ 123 } while (0) 124 125#endif /* MPT3SAS_DEBUG_H_INCLUDED */ 126 127/** 128 * dprint_dump - print contents of a memory buffer 129 * @req: Pointer to a memory buffer 130 * @sz: Memory buffer size 131 * @namestr: Name String to identify the buffer type 132 */ 133static inline void 134dprint_dump(void *req, int sz, const char *name_string) 135{ 136 int i; 137 __le32 *mfp = (__le32 *)req; 138 139 sz = sz/4; 140 if (name_string) 141 pr_info("%s:\n\t", name_string); 142 else 143 pr_info("request:\n\t"); 144 for (i = 0; i < sz; i++) { 145 if (i && ((i % 8) == 0)) 146 pr_info("\n\t"); 147 pr_info("%08x ", le32_to_cpu(mfp[i])); 148 } 149 pr_info("\n"); 150} 151 152/** 153 * dprint_dump_req - print message frame contents 154 * @req: pointer to message frame 155 * @sz: number of dwords 156 */ 157static inline void 158dprint_dump_req(void *req, int sz) 159{ 160 int i; 161 __le32 *mfp = (__le32 *)req; 162 163 pr_info("request:\n\t"); 164 for (i = 0; i < sz; i++) { 165 if (i && ((i % 8) == 0)) 166 pr_info("\n\t"); 167 pr_info("%08x ", le32_to_cpu(mfp[i])); 168 } 169 pr_info("\n"); 170}