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