Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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_CFG_ERROR		0x00000100
 27#define MPI3_DEBUG_TRANSPORT_ERROR	0x00000200
 28#define MPI3_DEBUG_BSG_ERROR		0x00008000
 29#define MPI3_DEBUG_BSG_INFO		0x00010000
 30#define MPI3_DEBUG_SCSI_INFO		0x00020000
 31#define MPI3_DEBUG_CFG_INFO		0x00040000
 32#define MPI3_DEBUG_TRANSPORT_INFO	0x00080000
 33#define MPI3_DEBUG			0x01000000
 34#define MPI3_DEBUG_SG			0x02000000
 35
 36
 37/*
 38 * debug macros
 39 */
 40
 41#define ioc_err(ioc, fmt, ...) \
 42	pr_err("%s: " fmt, (ioc)->name, ##__VA_ARGS__)
 43#define ioc_notice(ioc, fmt, ...) \
 44	pr_notice("%s: " fmt, (ioc)->name, ##__VA_ARGS__)
 45#define ioc_warn(ioc, fmt, ...) \
 46	pr_warn("%s: " fmt, (ioc)->name, ##__VA_ARGS__)
 47#define ioc_info(ioc, fmt, ...) \
 48	pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__)
 49
 50#define dprint(ioc, fmt, ...) \
 51	do { \
 52		if (ioc->logging_level & MPI3_DEBUG) \
 53			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 54	} while (0)
 55
 56#define dprint_event_th(ioc, fmt, ...) \
 57	do { \
 58		if (ioc->logging_level & MPI3_DEBUG_EVENT) \
 59			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 60	} while (0)
 61
 62#define dprint_event_bh(ioc, fmt, ...) \
 63	do { \
 64		if (ioc->logging_level & MPI3_DEBUG_EVENT_WORK_TASK) \
 65			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 66	} while (0)
 67
 68#define dprint_init(ioc, fmt, ...) \
 69	do { \
 70		if (ioc->logging_level & MPI3_DEBUG_INIT) \
 71			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 72	} while (0)
 73
 74#define dprint_exit(ioc, fmt, ...) \
 75	do { \
 76		if (ioc->logging_level & MPI3_DEBUG_EXIT) \
 77			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 78	} while (0)
 79
 80#define dprint_tm(ioc, fmt, ...) \
 81	do { \
 82		if (ioc->logging_level & MPI3_DEBUG_TM) \
 83			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 84	} while (0)
 85
 86#define dprint_reply(ioc, fmt, ...) \
 87	do { \
 88		if (ioc->logging_level & MPI3_DEBUG_REPLY) \
 89			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 90	} while (0)
 91
 92#define dprint_reset(ioc, fmt, ...) \
 93	do { \
 94		if (ioc->logging_level & MPI3_DEBUG_RESET) \
 95			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
 96	} while (0)
 97
 98#define dprint_scsi_info(ioc, fmt, ...) \
 99	do { \
100		if (ioc->logging_level & MPI3_DEBUG_SCSI_INFO) \
101			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
102	} while (0)
103
104#define dprint_scsi_err(ioc, fmt, ...) \
105	do { \
106		if (ioc->logging_level & MPI3_DEBUG_SCSI_ERROR) \
107			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
108	} while (0)
109
110#define dprint_scsi_command(ioc, SCMD, LOG_LEVEL) \
111	do { \
112		if (ioc->logging_level & LOG_LEVEL) \
113			scsi_print_command(SCMD); \
114	} while (0)
115
116
117#define dprint_bsg_info(ioc, fmt, ...) \
118	do { \
119		if (ioc->logging_level & MPI3_DEBUG_BSG_INFO) \
120			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
121	} while (0)
122
123#define dprint_bsg_err(ioc, fmt, ...) \
124	do { \
125		if (ioc->logging_level & MPI3_DEBUG_BSG_ERROR) \
126			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
127	} while (0)
128
129#define dprint_cfg_info(ioc, fmt, ...) \
130	do { \
131		if (ioc->logging_level & MPI3_DEBUG_CFG_INFO) \
132			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
133	} while (0)
134
135#define dprint_cfg_err(ioc, fmt, ...) \
136	do { \
137		if (ioc->logging_level & MPI3_DEBUG_CFG_ERROR) \
138			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
139	} while (0)
140#define dprint_transport_info(ioc, fmt, ...) \
141	do { \
142		if (ioc->logging_level & MPI3_DEBUG_TRANSPORT_INFO) \
143			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
144	} while (0)
145
146#define dprint_transport_err(ioc, fmt, ...) \
147	do { \
148		if (ioc->logging_level & MPI3_DEBUG_TRANSPORT_ERROR) \
149			pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__); \
150	} while (0)
151
152#endif /* MPT3SAS_DEBUG_H_INCLUDED */
153
154/**
155 * dprint_dump - print contents of a memory buffer
156 * @req: Pointer to a memory buffer
157 * @sz: Memory buffer size
158 * @namestr: Name String to identify the buffer type
159 */
160static inline void
161dprint_dump(void *req, int sz, const char *name_string)
162{
163	int i;
164	__le32 *mfp = (__le32 *)req;
165
166	sz = sz/4;
167	if (name_string)
168		pr_info("%s:\n\t", name_string);
169	else
170		pr_info("request:\n\t");
171	for (i = 0; i < sz; i++) {
172		if (i && ((i % 8) == 0))
173			pr_info("\n\t");
174		pr_info("%08x ", le32_to_cpu(mfp[i]));
175	}
176	pr_info("\n");
177}
178
179/**
180 * dprint_dump_req - print message frame contents
181 * @req: pointer to message frame
182 * @sz: number of dwords
183 */
184static inline void
185dprint_dump_req(void *req, int sz)
186{
187	int i;
188	__le32 *mfp = (__le32 *)req;
189
190	pr_info("request:\n\t");
191	for (i = 0; i < sz; i++) {
192		if (i && ((i % 8) == 0))
193			pr_info("\n\t");
194		pr_info("%08x ", le32_to_cpu(mfp[i]));
195	}
196	pr_info("\n");
197}