1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * linux/drivers/message/fusion/mptdebug.h |
4 | * For use with LSI PCI chip/adapter(s) |
5 | * running LSI Fusion MPT (Message Passing Technology) firmware. |
6 | * |
7 | * Copyright (c) 1999-2008 LSI Corporation |
8 | * (mailto:DL-MPTFusionLinux@lsi.com) |
9 | * |
10 | */ |
11 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
12 | |
13 | #ifndef MPTDEBUG_H_INCLUDED |
14 | #define MPTDEBUG_H_INCLUDED |
15 | |
16 | /* |
17 | * debug level can be programmed on the fly via SysFS (hex values) |
18 | * |
19 | * Example: (programming for MPT_DEBUG_EVENTS on host 5) |
20 | * |
21 | * echo 8 > /sys/class/scsi_host/host5/debug_level |
22 | * |
23 | * -------------------------------------------------------- |
24 | * mpt_debug_level - command line parameter |
25 | * this allow enabling debug at driver load time (for all iocs) |
26 | * |
27 | * Example (programming for MPT_DEBUG_EVENTS) |
28 | * |
29 | * insmod mptbase.ko mpt_debug_level=8 |
30 | * |
31 | * -------------------------------------------------------- |
32 | * CONFIG_FUSION_LOGGING - enables compiling debug into driver |
33 | * this can be enabled in the driver Makefile |
34 | * |
35 | * |
36 | * -------------------------------------------------------- |
37 | * Please note most debug prints are set to logging priority = debug |
38 | * This is the lowest level, and most verbose. Please refer to manual |
39 | * pages for syslogd or syslogd-ng on how to configure this. |
40 | */ |
41 | |
42 | #define MPT_DEBUG 0x00000001 |
43 | #define MPT_DEBUG_MSG_FRAME 0x00000002 |
44 | #define MPT_DEBUG_SG 0x00000004 |
45 | #define MPT_DEBUG_EVENTS 0x00000008 |
46 | #define MPT_DEBUG_VERBOSE_EVENTS 0x00000010 |
47 | #define MPT_DEBUG_INIT 0x00000020 |
48 | #define MPT_DEBUG_EXIT 0x00000040 |
49 | #define MPT_DEBUG_FAIL 0x00000080 |
50 | #define MPT_DEBUG_TM 0x00000100 |
51 | #define MPT_DEBUG_DV 0x00000200 |
52 | #define MPT_DEBUG_REPLY 0x00000400 |
53 | #define MPT_DEBUG_HANDSHAKE 0x00000800 |
54 | #define MPT_DEBUG_CONFIG 0x00001000 |
55 | #define MPT_DEBUG_DL 0x00002000 |
56 | #define MPT_DEBUG_RESET 0x00008000 |
57 | #define MPT_DEBUG_SCSI 0x00010000 |
58 | #define MPT_DEBUG_IOCTL 0x00020000 |
59 | #define MPT_DEBUG_FC 0x00080000 |
60 | #define MPT_DEBUG_SAS 0x00100000 |
61 | #define MPT_DEBUG_SAS_WIDE 0x00200000 |
62 | #define MPT_DEBUG_36GB_MEM 0x00400000 |
63 | |
64 | /* |
65 | * CONFIG_FUSION_LOGGING - enabled in Kconfig |
66 | */ |
67 | |
68 | #ifdef CONFIG_FUSION_LOGGING |
69 | #define MPT_CHECK_LOGGING(IOC, CMD, BITS) \ |
70 | do { \ |
71 | if (IOC->debug_level & BITS) \ |
72 | CMD; \ |
73 | } while (0) |
74 | #else |
75 | #define MPT_CHECK_LOGGING(IOC, CMD, BITS) \ |
76 | do { } while (0) |
77 | #endif |
78 | |
79 | |
80 | /* |
81 | * debug macros |
82 | */ |
83 | |
84 | #define dprintk(IOC, CMD) \ |
85 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG) |
86 | |
87 | #define dsgprintk(IOC, CMD) \ |
88 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG) |
89 | |
90 | #define devtprintk(IOC, CMD) \ |
91 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS) |
92 | |
93 | #define devtverboseprintk(IOC, CMD) \ |
94 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_VERBOSE_EVENTS) |
95 | |
96 | #define dinitprintk(IOC, CMD) \ |
97 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT) |
98 | |
99 | #define dexitprintk(IOC, CMD) \ |
100 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT) |
101 | |
102 | #define dfailprintk(IOC, CMD) \ |
103 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL) |
104 | |
105 | #define dtmprintk(IOC, CMD) \ |
106 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM) |
107 | |
108 | #define ddvprintk(IOC, CMD) \ |
109 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DV) |
110 | |
111 | #define dreplyprintk(IOC, CMD) \ |
112 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY) |
113 | |
114 | #define dhsprintk(IOC, CMD) \ |
115 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE) |
116 | |
117 | #define dcprintk(IOC, CMD) \ |
118 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG) |
119 | |
120 | #define ddlprintk(IOC, CMD) \ |
121 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL) |
122 | |
123 | #define drsprintk(IOC, CMD) \ |
124 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET) |
125 | |
126 | #define dsprintk(IOC, CMD) \ |
127 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI) |
128 | |
129 | #define dctlprintk(IOC, CMD) \ |
130 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL) |
131 | |
132 | #define dfcprintk(IOC, CMD) \ |
133 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FC) |
134 | |
135 | #define dsasprintk(IOC, CMD) \ |
136 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS) |
137 | |
138 | #define dsaswideprintk(IOC, CMD) \ |
139 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE) |
140 | |
141 | #define d36memprintk(IOC, CMD) \ |
142 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_36GB_MEM) |
143 | |
144 | |
145 | /* |
146 | * Verbose logging |
147 | */ |
148 | #if defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) |
149 | static inline void |
150 | DBG_DUMP_FW_DOWNLOAD(MPT_ADAPTER *ioc, u32 *mfp, int numfrags) |
151 | { |
152 | int i; |
153 | |
154 | if (!(ioc->debug_level & MPT_DEBUG)) |
155 | return; |
156 | printk(KERN_DEBUG "F/W download request:\n" ); |
157 | for (i=0; i < 7+numfrags*2; i++) |
158 | printk(" %08x" , le32_to_cpu(mfp[i])); |
159 | printk("\n" ); |
160 | } |
161 | |
162 | static inline void |
163 | DBG_DUMP_PUT_MSG_FRAME(MPT_ADAPTER *ioc, u32 *mfp) |
164 | { |
165 | int ii, n; |
166 | |
167 | if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) |
168 | return; |
169 | printk(KERN_DEBUG "%s: About to Put msg frame @ %p:\n" , |
170 | ioc->name, mfp); |
171 | n = ioc->req_sz/4 - 1; |
172 | while (mfp[n] == 0) |
173 | n--; |
174 | for (ii=0; ii<=n; ii++) { |
175 | if (ii && ((ii%8)==0)) |
176 | printk("\n" ); |
177 | printk(" %08x" , le32_to_cpu(mfp[ii])); |
178 | } |
179 | printk("\n" ); |
180 | } |
181 | |
182 | static inline void |
183 | DBG_DUMP_FW_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) |
184 | { |
185 | int i, n; |
186 | |
187 | if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) |
188 | return; |
189 | n = 10; |
190 | printk(KERN_INFO " " ); |
191 | for (i = 0; i < n; i++) |
192 | printk(" %08x" , le32_to_cpu(mfp[i])); |
193 | printk("\n" ); |
194 | } |
195 | |
196 | static inline void |
197 | DBG_DUMP_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) |
198 | { |
199 | int i, n; |
200 | |
201 | if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) |
202 | return; |
203 | n = 24; |
204 | for (i=0; i<n; i++) { |
205 | if (i && ((i%8)==0)) |
206 | printk("\n" ); |
207 | printk("%08x " , le32_to_cpu(mfp[i])); |
208 | } |
209 | printk("\n" ); |
210 | } |
211 | |
212 | static inline void |
213 | DBG_DUMP_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp) |
214 | { |
215 | int i, n; |
216 | |
217 | if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) |
218 | return; |
219 | n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16; |
220 | printk(KERN_INFO " " ); |
221 | for (i=0; i<n; i++) |
222 | printk(" %08x" , le32_to_cpu(mfp[i])); |
223 | printk("\n" ); |
224 | } |
225 | |
226 | static inline void |
227 | DBG_DUMP_REQUEST_FRAME_HDR(MPT_ADAPTER *ioc, u32 *mfp) |
228 | { |
229 | int i, n; |
230 | |
231 | if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME)) |
232 | return; |
233 | n = 3; |
234 | printk(KERN_INFO " " ); |
235 | for (i=0; i<n; i++) |
236 | printk(" %08x" , le32_to_cpu(mfp[i])); |
237 | printk("\n" ); |
238 | } |
239 | |
240 | static inline void |
241 | DBG_DUMP_TM_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp) |
242 | { |
243 | int i, n; |
244 | |
245 | if (!(ioc->debug_level & MPT_DEBUG_TM)) |
246 | return; |
247 | n = 13; |
248 | printk(KERN_DEBUG "TM_REQUEST:\n" ); |
249 | for (i=0; i<n; i++) { |
250 | if (i && ((i%8)==0)) |
251 | printk("\n" ); |
252 | printk("%08x " , le32_to_cpu(mfp[i])); |
253 | } |
254 | printk("\n" ); |
255 | } |
256 | |
257 | static inline void |
258 | DBG_DUMP_TM_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp) |
259 | { |
260 | int i, n; |
261 | |
262 | if (!(ioc->debug_level & MPT_DEBUG_TM)) |
263 | return; |
264 | n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16; |
265 | printk(KERN_DEBUG "TM_REPLY MessageLength=%d:\n" , n); |
266 | for (i=0; i<n; i++) { |
267 | if (i && ((i%8)==0)) |
268 | printk("\n" ); |
269 | printk(" %08x" , le32_to_cpu(mfp[i])); |
270 | } |
271 | printk("\n" ); |
272 | } |
273 | |
274 | #define dmfprintk(IOC, CMD) \ |
275 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME) |
276 | |
277 | # else /* ifdef MPT_DEBUG_MF */ |
278 | |
279 | #define DBG_DUMP_FW_DOWNLOAD(IOC, mfp, numfrags) |
280 | #define DBG_DUMP_PUT_MSG_FRAME(IOC, mfp) |
281 | #define DBG_DUMP_FW_REQUEST_FRAME(IOC, mfp) |
282 | #define DBG_DUMP_REQUEST_FRAME(IOC, mfp) |
283 | #define DBG_DUMP_REPLY_FRAME(IOC, mfp) |
284 | #define DBG_DUMP_REQUEST_FRAME_HDR(IOC, mfp) |
285 | #define DBG_DUMP_TM_REQUEST_FRAME(IOC, mfp) |
286 | #define DBG_DUMP_TM_REPLY_FRAME(IOC, mfp) |
287 | |
288 | #define dmfprintk(IOC, CMD) \ |
289 | MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME) |
290 | |
291 | #endif /* defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) */ |
292 | |
293 | #endif /* ifndef MPTDEBUG_H_INCLUDED */ |
294 | |