Linux Audio

Check our new training course

Loading...
v3.1
 
  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:DL-MPTFusionLinux@lsi.com)
  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)
147static inline void
148DBG_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
160static inline void
161DBG_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
180static inline void
181DBG_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
194static inline void
195DBG_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
210static inline void
211DBG_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
224static inline void
225DBG_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
238static inline void
239DBG_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
255static inline void
256DBG_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 */
v4.17
  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{								\
 71	if (IOC->debug_level & BITS)				\
 72		CMD;						\
 73}
 74#else
 75#define MPT_CHECK_LOGGING(IOC, CMD, BITS)
 76#endif
 77
 78
 79/*
 80 * debug macros
 81 */
 82
 83#define dprintk(IOC, CMD)			\
 84	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG)
 85
 86#define dsgprintk(IOC, CMD)			\
 87	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SG)
 88
 89#define devtprintk(IOC, CMD)			\
 90	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EVENTS)
 91
 92#define devtverboseprintk(IOC, CMD)		\
 93	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_VERBOSE_EVENTS)
 94
 95#define dinitprintk(IOC, CMD)			\
 96	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_INIT)
 97
 98#define dexitprintk(IOC, CMD)			\
 99	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_EXIT)
100
101#define dfailprintk(IOC, CMD)			\
102	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FAIL)
103
104#define dtmprintk(IOC, CMD)			\
105	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_TM)
106
107#define ddvprintk(IOC, CMD)			\
108	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DV)
109
110#define dreplyprintk(IOC, CMD)			\
111	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_REPLY)
112
113#define dhsprintk(IOC, CMD)			\
114	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_HANDSHAKE)
115
116#define dcprintk(IOC, CMD)			\
117	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_CONFIG)
118
119#define ddlprintk(IOC, CMD)			\
120	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_DL)
121
122#define drsprintk(IOC, CMD)			\
123	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_RESET)
124
125#define dsprintk(IOC, CMD)			\
126	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SCSI)
127
128#define dctlprintk(IOC, CMD)			\
129	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_IOCTL)
130
131#define dfcprintk(IOC, CMD)			\
132	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_FC)
133
134#define dsasprintk(IOC, CMD)			\
135	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS)
136
137#define dsaswideprintk(IOC, CMD)		\
138	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_SAS_WIDE)
139
140#define d36memprintk(IOC, CMD)		\
141	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_36GB_MEM)
142
143
144/*
145 * Verbose logging
146 */
147#if defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING)
148static inline void
149DBG_DUMP_FW_DOWNLOAD(MPT_ADAPTER *ioc, u32  *mfp, int numfrags)
150{
151	int i;
152
153	if (!(ioc->debug_level & MPT_DEBUG))
154		return;
155	printk(KERN_DEBUG "F/W download request:\n");
156	for (i=0; i < 7+numfrags*2; i++)
157		printk(" %08x", le32_to_cpu(mfp[i]));
158	printk("\n");
159}
160
161static inline void
162DBG_DUMP_PUT_MSG_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
163{
164	int	 ii, n;
165
166	if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
167		return;
168	printk(KERN_DEBUG "%s: About to Put msg frame @ %p:\n",
169		ioc->name, mfp);
170	n = ioc->req_sz/4 - 1;
171	while (mfp[n] == 0)
172		n--;
173	for (ii=0; ii<=n; ii++) {
174		if (ii && ((ii%8)==0))
175			printk("\n");
176		printk(" %08x", le32_to_cpu(mfp[ii]));
177	}
178	printk("\n");
179}
180
181static inline void
182DBG_DUMP_FW_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
183{
184	int  i, n;
185
186	if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
187		return;
188	n = 10;
189	printk(KERN_INFO " ");
190	for (i = 0; i < n; i++)
191		printk(" %08x", le32_to_cpu(mfp[i]));
192	printk("\n");
193}
194
195static inline void
196DBG_DUMP_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
197{
198	int  i, n;
199
200	if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
201		return;
202	n = 24;
203	for (i=0; i<n; i++) {
204		if (i && ((i%8)==0))
205			printk("\n");
206		printk("%08x ", le32_to_cpu(mfp[i]));
207	}
208	printk("\n");
209}
210
211static inline void
212DBG_DUMP_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
213{
214	int  i, n;
215
216	if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
217		return;
218	n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16;
219	printk(KERN_INFO " ");
220	for (i=0; i<n; i++)
221		printk(" %08x", le32_to_cpu(mfp[i]));
222	printk("\n");
223}
224
225static inline void
226DBG_DUMP_REQUEST_FRAME_HDR(MPT_ADAPTER *ioc, u32 *mfp)
227{
228	int  i, n;
229
230	if (!(ioc->debug_level & MPT_DEBUG_MSG_FRAME))
231		return;
232	n = 3;
233	printk(KERN_INFO " ");
234	for (i=0; i<n; i++)
235		printk(" %08x", le32_to_cpu(mfp[i]));
236	printk("\n");
237}
238
239static inline void
240DBG_DUMP_TM_REQUEST_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
241{
242	int  i, n;
243
244	if (!(ioc->debug_level & MPT_DEBUG_TM))
245		return;
246	n = 13;
247	printk(KERN_DEBUG "TM_REQUEST:\n");
248	for (i=0; i<n; i++) {
249		if (i && ((i%8)==0))
250			printk("\n");
251		printk("%08x ", le32_to_cpu(mfp[i]));
252	}
253	printk("\n");
254}
255
256static inline void
257DBG_DUMP_TM_REPLY_FRAME(MPT_ADAPTER *ioc, u32 *mfp)
258{
259	int  i, n;
260
261	if (!(ioc->debug_level & MPT_DEBUG_TM))
262		return;
263	n = (le32_to_cpu(mfp[0]) & 0x00FF0000) >> 16;
264	printk(KERN_DEBUG "TM_REPLY MessageLength=%d:\n", n);
265	for (i=0; i<n; i++) {
266		if (i && ((i%8)==0))
267			printk("\n");
268		printk(" %08x", le32_to_cpu(mfp[i]));
269	}
270	printk("\n");
271}
272
273#define dmfprintk(IOC, CMD)			\
274	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
275
276# else /* ifdef MPT_DEBUG_MF */
277
278#define DBG_DUMP_FW_DOWNLOAD(IOC, mfp, numfrags)
279#define DBG_DUMP_PUT_MSG_FRAME(IOC, mfp)
280#define DBG_DUMP_FW_REQUEST_FRAME(IOC, mfp)
281#define DBG_DUMP_REQUEST_FRAME(IOC, mfp)
282#define DBG_DUMP_REPLY_FRAME(IOC, mfp)
283#define DBG_DUMP_REQUEST_FRAME_HDR(IOC, mfp)
284#define DBG_DUMP_TM_REQUEST_FRAME(IOC, mfp)
285#define DBG_DUMP_TM_REPLY_FRAME(IOC, mfp)
286
287#define dmfprintk(IOC, CMD)			\
288	MPT_CHECK_LOGGING(IOC, CMD, MPT_DEBUG_MSG_FRAME)
289
290#endif /* defined(MPT_DEBUG_VERBOSE) && defined(CONFIG_FUSION_LOGGING) */
291
292#endif /* ifndef MPTDEBUG_H_INCLUDED */