summaryrefslogtreecommitdiffstats
path: root/sys/dev/isci/scil/sci_logger.h
blob: e98081223faca0c3af581f9d525d7beb43624244 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
/*-
 * This file is provided under a dual BSD/GPLv2 license.  When using or
 * redistributing this file, you may do so under either license.
 *
 * GPL LICENSE SUMMARY
 *
 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
 * The full GNU General Public License is included in this distribution
 * in the file called LICENSE.GPL.
 *
 * BSD LICENSE
 *
 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   * Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * $FreeBSD$
 */
#ifndef _SCI_LOGGER_H_
#define _SCI_LOGGER_H_

/**
 * @file
 *
 * @brief This file contains all of the interface methods that can be called
 *        by an SCI user on the logger object.  These methods should be
 *        utilized to control the amount of information being logged by the
 *        SCI implementation.
 */

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

#include <dev/isci/scil/sci_types.h>


/* The following is a list of verbosity levels that can be used to enable */
/* logging for specific log objects.                                      */

/** Enable/disable error level logging for the associated logger object(s). */
#define SCI_LOG_VERBOSITY_ERROR      0x00

/** Enable/disable warning level logging for the associated logger object(s). */
#define SCI_LOG_VERBOSITY_WARNING    0x01

/**
 * Enable/disable informative level logging for the associated logger object(s).
 */
#define SCI_LOG_VERBOSITY_INFO       0x02

/**
 * This constant is used to enable function trace (enter/exit) level
 * logging for the associated log object(s).
 */
#define SCI_LOG_VERBOSITY_TRACE      0x03

/**
 * This constant is used to enable state tracing information it will emit a
 * log message each time a state is entered for the associated log object(s).
 */
#define SCI_LOG_VERBOSITY_STATES     0x04

#ifdef SCI_LOGGING

/**
 * @brief This method will return the verbosity levels enabled for the object
 *        listed in the log_object parameter.
 * @note  Logging must be enabled at compile time in the driver, otherwise
 *        calling this method has no affect.
 *
 * @param[in]  logger This parameter specifies the logger for which to
 *             disable the supplied objects/verbosities.  For example,
 *             the framework and core components have different loggers.
 * @param[in]  log_object This parameter specifies the log object for which
 *             to retrieve the associated verbosity levels.
 *             @note This parameter is not a mask, but rather a discrete
 *             value.
 *
 * @return This method will return the verbosity levels enabled for the
 *         supplied log object.
 * @retval SCI_LOGGER_VERBOSITY_ERROR This value indicates that the error
 *         verbosity level was set for the supplied log_object.
 * @retval SCI_LOGGER_VERBOSITY_WARNING This value indicates that the warning
 *         verbosity level was set for the supplied log_object.
 * @retval SCI_LOGGER_VERBOSITY_INFO This value indicates that the
 *         informational verbosity level was set for the supplied log_object.
 * @retval SCI_LOGGER_VERBOSITY_TRACE This value indicates that the trace
 *         verbosity level was set for the supplied log_object.
 * @retval SCI_LOGGER_VERBOSITY_STATES This value indicates that the states
 *         transition verbosity level was set for the supplied log_object
 */
U8 sci_logger_get_verbosity_mask(
   SCI_LOGGER_HANDLE_T  logger,
   U32                  log_object
);

/**
 * @brief This method simply returns the log object mask.  This mask
 *        is essentially a list of log objects for which the specified
 *        level (verbosity) is enabled.
 * @note  Logging must be enabled at compile time in the driver, otherwise
 *        calling this method has no affect.
 * @note  Reserved bits in both the supplied masks shall be ignored.
 *
 * @param[in]  logger This parameter specifies the logger for which to
 *             disable the supplied objects/verbosities.  For example,
 *             the framework and core components have different loggers.
 * @param[in]  verbosity This parameter specifies the verbosity for which
 *             to retrieve the set of enabled log objects.  Valid values for
 *             this parameter are:
 *                -# SCI_LOGGER_VERBOSITY_ERROR
 *                -# SCI_LOGGER_VERBOSITY_WARNING
 *                -# SCI_LOGGER_VERBOSITY_INFO
 *                -# SCI_LOGGER_VERBOSITY_TRACE
 *                -# SCI_LOGGER_VERBOSITY_STATES
 *             @note This parameter is not a mask, but rather a discrete
 *             value.
 *
 * @return This method will return the log object mask indicating each of
 *         the log objects for which logging is enabled at the supplied level.
 */
U32 sci_logger_get_object_mask(
   SCI_LOGGER_HANDLE_T  logger,
   U8                   verbosity
);

/**
 * @brief This method will enable each of the supplied log objects in
 *        log_object_mask for each of the supplied verbosities in
 *        verbosity_mask.  To enable all logging, simply set all bits in
 *        both the log_object_mask and verbosity_mask.
 * @note  Logging must be enabled at compile time in the driver, otherwise
 *        calling this method has no affect.
 * @note  Reserved bits in both the supplied masks shall be ignored.
 *
 * @param[in]  logger This parameter specifies the logger for which to
 *             disable the supplied objects/verbosities.  For example,
 *             the framework and core components have different loggers.
 * @param[in]  log_object_mask This parameter specifies the log objects for
 *             which to enable logging.
 * @param[in]  verbosity_mask This parameter specifies the verbosity levels
 *             at which to enable each log_object.
 *
 * @return none
 */
void sci_logger_enable(
   SCI_LOGGER_HANDLE_T  logger,
   U32                  log_object_mask,
   U8                   verbosity_mask
);

/**
 * @brief This method will disable each of the supplied log objects in
 *        log_object_mask for each of the supplied verbosities in
 *        verbosity_mask.  To disable all logging, simply set all bits in
 *        both the log_object_mask and verbosity_mask.
 * @note  Logging must be enabled at compile time in the driver, otherwise
 *        calling this method has no affect.
 * @note  Reserved bits in both the supplied masks shall be ignored.
 *
 * @param[in]  logger This parameter specifies the logger for which to
 *             disable the supplied objects/verbosities.  For example,
 *             the framework and core components have different loggers.
 * @param[in]  log_object_mask This parameter specifies the log objects for
 *             which to disable logging.
 * @param[in]  verbosity_mask This parameter specifies the verbosity levels
 *             at which to disable each log_object.
 *
 * @return none
 */
void sci_logger_disable(
   SCI_LOGGER_HANDLE_T  logger,
   U32                  log_object_mask,
   U8                   verbosity_mask
);


/**
 * @brief this macro checks whether it is ok to log.
 *
 * @param[in]  logger This parameter specifies the logger for
 *             which to disable the supplied
 *             objects/verbosities.  For example, the framework
 *             and core components have different loggers.
 * @param[in]  log_object_mask This parameter specifies the log objects for
 *             which to disable logging.
 * @param[in]  verbosity_mask This parameter specifies the verbosity levels
 *             at which to disable each log_object.
 *
 * @return TRUE or FALSE
 */
BOOL sci_logger_is_enabled(
   SCI_LOGGER_HANDLE_T  logger,
   U32                  log_object_mask,
   U8                   verbosity_mask
);


#else // SCI_LOGGING

#define sci_logger_get_verbosity_mask(logger, log_object)
#define sci_logger_get_object_mask(logger, verbosity)
#define sci_logger_enable(logger, log_object_mask, verbosity_mask)
#define sci_logger_disable(logger, log_object_mask, verbosity_mask)
#define sci_logger_is_enabled(logger, log_object_mask, verbosity_level)

#endif // SCI_LOGGING

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // _SCI_LOGGER_H_

OpenPOWER on IntegriCloud