1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * BSD LICENSE
5 *
6 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 #include <sys/cdefs.h>
34 __FBSDID("$FreeBSD$");
35
36 #include <dev/isci/isci.h>
37
38 #include <dev/isci/scil/scif_user_callback.h>
39 #include <dev/isci/scil/scic_user_callback.h>
40 #include <dev/isci/scil/sci_logger.h>
41
42 #include <machine/stdarg.h>
43 #include <sys/time.h>
44
45 #define ERROR_LEVEL 0
46 #define WARNING_LEVEL 1
47 #define TRACE_LEVEL 2
48 #define INFO_LEVEL 3
49
50 void
51 isci_log_message(uint32_t verbosity, char *log_message_prefix,
52 char *log_message, ...)
53 {
54 va_list argp;
55 char buffer[512];
56 struct timeval tv;
57
58 if (verbosity > g_isci_debug_level)
59 return;
60
61 va_start (argp, log_message);
62 vsnprintf(buffer, sizeof(buffer)-1, log_message, argp);
63 va_end(argp);
64 microtime(&tv);
65
66 printf("isci: %d:%06d %s %s", (int)tv.tv_sec, (int)tv.tv_usec,
67 log_message_prefix, buffer);
68 }
69
70
71 #ifdef SCI_LOGGING
72 #define SCI_ENABLE_LOGGING_ERROR 1
73 #define SCI_ENABLE_LOGGING_WARNING 1
74 #define SCI_ENABLE_LOGGING_INFO 1
75 #define SCI_ENABLE_LOGGING_TRACE 1
76 #define SCI_ENABLE_LOGGING_STATES 1
77
78 #define ISCI_LOG_MESSAGE( \
79 logger_object, \
80 log_object_mask, \
81 log_message, \
82 verbosity, \
83 log_message_prefix \
84 ) \
85 { \
86 va_list argp; \
87 char buffer[512]; \
88 \
89 if (!sci_logger_is_enabled(logger_object, log_object_mask, verbosity)) \
90 return; \
91 \
92 va_start (argp, log_message); \
93 vsnprintf(buffer, sizeof(buffer)-1, log_message, argp); \
94 va_end(argp); \
95 \
96 /* prepend the "object:verbosity_level:" */ \
97 isci_log_message(verbosity, log_message_prefix, buffer); \
98 }
99 #endif /* SCI_LOGGING */
100
101
102 #ifdef SCI_ENABLE_LOGGING_ERROR
103 /**
104 * @brief In this method the user is expected to log the supplied
105 * error information. The user must be capable of handling variable
106 * length argument lists and should consider prepending the fact
107 * that this is an error from the framework.
108 *
109 * @param[in] logger_object This parameter specifies the logger object
110 * associated with this message.
111 * @param[in] log_object_mask This parameter specifies the log objects
112 * for which this message is being generated.
113 * @param[in] log_message This parameter specifies the message to be logged.
114 *
115 * @return none
116 */
117 void scif_cb_logger_log_error(SCI_LOGGER_HANDLE_T logger_object,
118 uint32_t log_object_mask, char *log_message, ...)
119 {
120
121 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
122 SCI_LOG_VERBOSITY_ERROR, "FRAMEWORK: ERROR: ");
123 }
124 #endif
125
126 #ifdef SCI_ENABLE_LOGGING_WARNING
127 /**
128 * @brief In this method the user is expected to log the supplied warning
129 * information. The user must be capable of handling variable
130 * length argument lists and should consider prepending the fact
131 * that this is a warning from the framework.
132 *
133 * @param[in] logger_object This parameter specifies the logger object
134 * associated with this message.
135 * @param[in] log_object_mask This parameter specifies the log objects
136 * for which this message is being generated.
137 * @param[in] log_message This parameter specifies the message to be logged.
138 *
139 * @return none
140 */
141 void
142 scif_cb_logger_log_warning(SCI_LOGGER_HANDLE_T logger_object,
143 uint32_t log_object_mask, char *log_message, ...)
144 {
145
146 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
147 SCI_LOG_VERBOSITY_WARNING, "FRAMEWORK: WARNING: ");
148 }
149 #endif
150
151 #ifdef SCI_ENABLE_LOGGING_INFO
152 /**
153 * @brief In this method the user is expected to log the supplied debug
154 * information. The user must be capable of handling variable
155 * length argument lists and should consider prepending the fact
156 * that this is a debug message from the framework.
157 *
158 * @param[in] logger_object This parameter specifies the logger object
159 * associated with this message.
160 * @param[in] log_object_mask This parameter specifies the log objects
161 * for which this message is being generated.
162 * @param[in] log_message This parameter specifies the message to be logged.
163 *
164 * @return none
165 */
166 void
167 scif_cb_logger_log_info(SCI_LOGGER_HANDLE_T logger_object,
168 uint32_t log_object_mask, char *log_message, ...)
169 {
170
171 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
172 SCI_LOG_VERBOSITY_INFO, "FRAMEWORK: INFO: ");
173 }
174 #endif
175
176 #ifdef SCI_ENABLE_LOGGING_TRACE
177 /**
178 * @brief In this method the user is expected to log the supplied function
179 * trace information. The user must be capable of handling variable
180 * length argument lists and should consider prepending the fact
181 * that this is a function trace (i.e. entry/exit) message from the
182 * framework.
183 *
184 * @param[in] logger_object This parameter specifies the logger object
185 * associated with this message.
186 * @param[in] log_object_mask This parameter specifies the log objects
187 * for which this message is being generated.
188 * @param[in] log_message This parameter specifies the message to be logged.
189 *
190 * @return none
191 */
192 void
193 scif_cb_logger_log_trace(SCI_LOGGER_HANDLE_T logger_object,
194 uint32_t log_object_mask, char *log_message, ...)
195 {
196
197 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
198 SCI_LOG_VERBOSITY_TRACE, "FRAMEWORK: TRACE: ");
199 }
200 #endif
201
202 #ifdef SCI_ENABLE_LOGGING_STATES
203 /**
204 * @brief In this method the user is expected to log the supplied function
205 * state transition information. The user must be capable of handling
206 * variable length argument lists and should consider prepending the
207 * fact that this is a function trace (i.e. entry/exit) message from
208 * the framework.
209 *
210 * @param[in] logger_object This parameter specifies the logger object
211 * associated with this message.
212 * @param[in] log_object_mask This parameter specifies the log objects
213 * for which this message is being generated.
214 * @param[in] log_message This parameter specifies the message to be logged.
215 *
216 * @return none
217 */
218 void
219 scif_cb_logger_log_states(SCI_LOGGER_HANDLE_T logger_object,
220 uint32_t log_object_mask, char *log_message, ...)
221 {
222
223 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
224 SCI_LOG_VERBOSITY_STATES, "FRAMEWORK: STATE TRANSITION: ");
225 }
226 #endif
227
228 #ifdef SCI_ENABLE_LOGGING_ERROR
229 /**
230 * @brief In this method the user is expected to log the supplied
231 * error information. The user must be capable of handling variable
232 * length argument lists and should consider prepending the fact
233 * that this is an error from the core.
234 *
235 * @param[in] logger_object This parameter specifies the logger object
236 * associated with this message.
237 * @param[in] log_object_mask This parameter specifies the log objects
238 * for which this message is being generated.
239 * @param[in] log_message This parameter specifies the message to be logged.
240 *
241 * @return none
242 */
243 void
244 scic_cb_logger_log_error(SCI_LOGGER_HANDLE_T logger_object,
245 uint32_t log_object_mask, char *log_message, ...)
246 {
247
248 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
249 SCI_LOG_VERBOSITY_ERROR, "CORE: ERROR: ");
250 }
251 #endif
252
253 #ifdef SCI_ENABLE_LOGGING_WARNING
254 /**
255 * @brief In this method the user is expected to log the supplied warning
256 * information. The user must be capable of handling variable
257 * length argument lists and should consider prepending the fact
258 * that this is a warning from the core.
259 *
260 * @param[in] logger_object This parameter specifies the logger object
261 * associated with this message.
262 * @param[in] log_object_mask This parameter specifies the log objects
263 * for which this message is being generated.
264 * @param[in] log_message This parameter specifies the message to be logged.
265 *
266 * @return none
267 */
268 void
269 scic_cb_logger_log_warning(SCI_LOGGER_HANDLE_T logger_object,
270 uint32_t log_object_mask, char *log_message, ...)
271 {
272
273 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
274 SCI_LOG_VERBOSITY_WARNING, "CORE: WARNING: ");
275 }
276 #endif
277
278 #ifdef SCI_ENABLE_LOGGING_INFO
279 /**
280 * @brief In this method the user is expected to log the supplied debug
281 * information. The user must be capable of handling variable
282 * length argument lists and should consider prepending the fact
283 * that this is a debug message from the core.
284 *
285 * @param[in] logger_object This parameter specifies the logger object
286 * associated with this message.
287 * @param[in] log_object_mask This parameter specifies the log objects
288 * for which this message is being generated.
289 * @param[in] log_message This parameter specifies the message to be logged.
290 *
291 * @return none
292 */
293 void
294 scic_cb_logger_log_info(SCI_LOGGER_HANDLE_T logger_object,
295 uint32_t log_object_mask, char *log_message, ...)
296 {
297
298 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
299 SCI_LOG_VERBOSITY_INFO, "CORE: INFO: ");
300 }
301 #endif
302
303 #ifdef SCI_ENABLE_LOGGING_TRACE
304 /**
305 * @brief In this method the user is expected to log the supplied function
306 * trace information. The user must be capable of handling variable
307 * length argument lists and should consider prepending the fact
308 * that this is a function trace (i.e. entry/exit) message from the
309 * core.
310 *
311 * @param[in] logger_object This parameter specifies the logger object
312 * associated with this message.
313 * @param[in] log_object_mask This parameter specifies the log objects
314 * for which this message is being generated.
315 * @param[in] log_message This parameter specifies the message to be logged.
316 *
317 * @return none
318 */
319 void
320 scic_cb_logger_log_trace(SCI_LOGGER_HANDLE_T logger_object,
321 uint32_t log_object_mask, char *log_message, ...)
322 {
323
324 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
325 SCI_LOG_VERBOSITY_TRACE, "CORE: TRACE: ");
326 }
327 #endif
328
329 #ifdef SCI_ENABLE_LOGGING_STATES
330 /**
331 * @brief In this method the user is expected to log the supplied function
332 * state transition information. The user must be capable of handling
333 * variable length argument lists and should consider prepending the
334 * fact that this is a function trace (i.e. entry/exit) message from
335 * the core.
336 *
337 * @param[in] logger_object This parameter specifies the logger object
338 * associated with this message.
339 * @param[in] log_object_mask This parameter specifies the log objects
340 * for which this message is being generated.
341 * @param[in] log_message This parameter specifies the message to be logged.
342 *
343 * @return none
344 */
345 void
346 scic_cb_logger_log_states(SCI_LOGGER_HANDLE_T logger_object,
347 uint32_t log_object_mask, char *log_message, ...)
348 {
349
350 ISCI_LOG_MESSAGE(logger_object, log_object_mask, log_message,
351 SCI_LOG_VERBOSITY_STATES, "CORE: STATE TRANSITION: ");
352 }
353 #endif
Cache object: b0dafcb9b607d3c6a596bd3799529f8c
|