1baaee69d853f9e7943194fd3b84a430080b701d
[mirror/winof/.git] / hw / mlx4 / kernel / inc / mlx4_debug.h
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  *\r
29  * $Id: mlx4_debug.h 1936 2007-02-06 16:04:33Z sleybo $\r
30  */\r
31 \r
32 \r
33 #ifndef  _MLX4_DEBUG_H_\r
34 #define _MLX4_DEBUG_H_\r
35 \r
36 #include "ev_log.h"\r
37 \r
38 extern uint32_t         g_mlx4_dbg_level;\r
39 extern uint32_t         g_mlx4_dbg_flags;\r
40 #define MAX_LOG_BUF_LEN         512\r
41 extern WCHAR g_wlog_buf[ MAX_LOG_BUF_LEN ]; \r
42 extern UCHAR g_slog_buf[ MAX_LOG_BUF_LEN ];  \r
43 \r
44 static void _build_str( const char *    format, ... )\r
45 {\r
46         NTSTATUS status;\r
47         va_list p_arg;\r
48         va_start(p_arg, format);\r
49 //      vsprintf((char *)g_slog_buf, format , p_arg);\r
50 //      swprintf(g_wlog_buf, L"%S", g_slog_buf);\r
51         status = RtlStringCbVPrintfA((char *)g_slog_buf, sizeof(g_slog_buf), format , p_arg);\r
52         if (status)\r
53                 goto end;\r
54         status = RtlStringCchPrintfW(g_wlog_buf, sizeof(g_wlog_buf)/sizeof(g_wlog_buf[0]), L"%S", g_slog_buf);\r
55         if (status)\r
56                 goto end;\r
57 //      vsnprintf_s((char *)g_slog_buf, sizeof(g_slog_buf), _TRUNCATE, format , p_arg);\r
58 //      swprintf_s(g_wlog_buf, sizeof(g_wlog_buf), L"%S", g_slog_buf);\r
59 end:\r
60         va_end(p_arg);\r
61 }\r
62 \r
63 #define MLX4_PRINT_TO_EVENT_LOG(_obj_,_level_,_flag_,_msg_)  \\r
64         { \\r
65                 NTSTATUS event_id; \\r
66                 int __lvl = _level_; \\r
67                 switch (__lvl) { \\r
68                         case TRACE_LEVEL_FATAL: case TRACE_LEVEL_ERROR: event_id = EVENT_MLX4_ANY_ERROR; break; \\r
69                         case TRACE_LEVEL_WARNING: event_id = EVENT_MLX4_ANY_WARN; break; \\r
70                         default: event_id = EVENT_MLX4_ANY_INFO; break; \\r
71                 } \\r
72                 _build_str _msg_; \\r
73                 WriteEventLogEntryStr( _obj_, (ULONG)event_id, 0, 0, g_wlog_buf, 0, 0 ); \\r
74         }\r
75 \r
76 #define MLX4_PRINT_EV_MDEV(_level_,_flag_,_msg_)  \\r
77         MLX4_PRINT_TO_EVENT_LOG(mdev->pdev->p_self_do,_level_,_flag_,_msg_)\r
78 \r
79 \r
80 #if defined(EVENT_TRACING)\r
81 //\r
82 // Software Tracing Definitions \r
83 //\r
84 \r
85 #define WPP_CONTROL_GUIDS \\r
86         WPP_DEFINE_CONTROL_GUID(Mlx4BusCtlGuid,(E51BB6E2,914A,4e21,93C0,192F4801BBFF),  \\r
87         WPP_DEFINE_BIT( MLX4_DBG_DEV) \\r
88         WPP_DEFINE_BIT( MLX4_DBG_PNP) \\r
89         WPP_DEFINE_BIT( MLX4_DBG_INIT) \\r
90         WPP_DEFINE_BIT( MLX4_DBG_MAD) \\r
91         WPP_DEFINE_BIT( MLX4_DBG_PO) \\r
92         WPP_DEFINE_BIT( MLX4_DBG_PD)\\r
93         WPP_DEFINE_BIT( MLX4_DBG_CQ) \\r
94         WPP_DEFINE_BIT( MLX4_DBG_QP) \\r
95         WPP_DEFINE_BIT( MLX4_DBG_MEMORY) \\r
96         WPP_DEFINE_BIT( MLX4_DBG_AV) \\r
97         WPP_DEFINE_BIT( MLX4_DBG_SRQ) \\r
98         WPP_DEFINE_BIT( MLX4_DBG_MCAST) \\r
99         WPP_DEFINE_BIT( MLX4_DBG_LOW) \\r
100         WPP_DEFINE_BIT( MLX4_DBG_SHIM)) \\r
101         WPP_DEFINE_BIT( MLX4_DBG_DRV))\r
102 \r
103 \r
104 #define WPP_GLOBALLOGGER\r
105 \r
106 \r
107 #define WPP_LEVEL_FLAGS_ENABLED(lvl, flags) (WPP_LEVEL_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level  >= lvl)\r
108 #define WPP_LEVEL_FLAGS_LOGGER(lvl,flags) WPP_LEVEL_LOGGER(flags)\r
109 #define WPP_FLAG_ENABLED(flags)(WPP_LEVEL_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level  >= TRACE_LEVEL_VERBOSE)\r
110 #define WPP_FLAG_LOGGER(flags) WPP_LEVEL_LOGGER(flags)\r
111 \r
112 \r
113 // begin_wpp config\r
114 // MLX4_ENTER(FLAG);\r
115 // MLX4_EXIT(FLAG);\r
116 // USEPREFIX(MLX4_PRINT, "%!STDPREFIX! [MTMLX4] :%!FUNC!() :");\r
117 // USESUFFIX(MLX4_ENTER, " [MTMLX4] :%!FUNC!()[");\r
118 // USESUFFIX(MLX4_EXIT, " [MTMLX4] :%!FUNC!()]");\r
119 // end_wpp\r
120 \r
121 \r
122 \r
123 #define MLX4_PRINT_EV(_level_,_flag_,_msg_)  \\r
124     { \\r
125             MLX4_PRINT_EV_MDEV(_level_,_flag_,_msg_) \\r
126         }\r
127 \r
128 \r
129 #else\r
130 \r
131 \r
132 #include <evntrace.h>\r
133 \r
134 /*\r
135  * Debug macros\r
136  */\r
137 \r
138 \r
139 #define MLX4_DBG_DEV    (1 << 0)\r
140 #define MLX4_DBG_PNP    (1<<1)\r
141 #define MLX4_DBG_INIT   (1 << 2)\r
142 #define MLX4_DBG_MAD    (1 << 3)\r
143 #define MLX4_DBG_PO             (1 << 4)\r
144 #define MLX4_DBG_PD             (1<<5)\r
145 #define MLX4_DBG_QP             (1 << 6)\r
146 #define MLX4_DBG_CQ             (1 << 7)\r
147 #define MLX4_DBG_MEMORY (1 << 8)\r
148 #define MLX4_DBG_AV             (1<<9)\r
149 #define MLX4_DBG_SRQ    (1 << 10)\r
150 #define MLX4_DBG_MCAST  (1<<11)\r
151 #define MLX4_DBG_LOW    (1 << 12)\r
152 #define MLX4_DBG_SHIM   (1 << 13)\r
153 #define MLX4_DBG_DRV    (1 << 14)\r
154 \r
155 \r
156 #if DBG\r
157 \r
158 // assignment of _level_ is need to to overcome warning C4127\r
159 #define MLX4_PRINT(_level_,_flag_,_msg_)  \\r
160         { \\r
161                 int __lvl = _level_; \\r
162                 if (g_mlx4_dbg_level >= (__lvl) && \\r
163                         (g_mlx4_dbg_flags & (_flag_))) { \\r
164                                 DbgPrint ("~%d:[MLX4_BUS] %s() :", KeGetCurrentProcessorNumber(), __FUNCTION__); \\r
165                                 if(__lvl == TRACE_LEVEL_ERROR) DbgPrint ("***ERROR***  "); \\r
166                                 DbgPrint _msg_; \\r
167                 } \\r
168         }\r
169 \r
170 #else\r
171 \r
172 #define MLX4_PRINT(lvl ,flags, msg) \r
173 \r
174 #endif\r
175 \r
176 #define MLX4_PRINT_EV(_level_,_flag_,_msg_)  \\r
177     { \\r
178             MLX4_PRINT(_level_,_flag_,_msg_) \\r
179             MLX4_PRINT_EV_MDEV(_level_,_flag_,_msg_) \\r
180         }\r
181 \r
182 #define MLX4_ENTER(flags)\\r
183         MLX4_PRINT(TRACE_LEVEL_VERBOSE, flags,("[\n"));\r
184 \r
185 #define MLX4_EXIT(flags)\\r
186         MLX4_PRINT(TRACE_LEVEL_VERBOSE, flags, ("]\n" ));\r
187 \r
188 \r
189 #endif //EVENT_TRACING\r
190 \r
191 \r
192 #endif  /*_MLX4_DEBUG_H_ */\r
193 \r
194 \r
195 \r
196 \r