1 /*
2  * ipmi_debug.h
3  *
4  * MontaVista IPMI interface, debug information.
5  *
6  * Author: MontaVista Software, Inc.
7  *         Corey Minyard <minyard@mvista.com>
8  *         source@mvista.com
9  *
10  * Copyright 2002,2003,2004,2005 MontaVista Software Inc.
11  *
12  * This software is available to you under a choice of one of two
13  * licenses.  You may choose to be licensed under the terms of the GNU
14  * Lesser General Public License (GPL) Version 2 or the modified BSD
15  * license below.  The following disclamer applies to both licenses:
16  *
17  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
18  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
23  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
25  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
26  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * GNU Lesser General Public Licence
29  *
30  *  This program is free software; you can redistribute it and/or
31  *  modify it under the terms of the GNU Lesser General Public License
32  *  as published by the Free Software Foundation; either version 2 of
33  *  the License, or (at your option) any later version.
34  *
35  *  You should have received a copy of the GNU Lesser General Public
36  *  License along with this program; if not, write to the Free
37  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
38  *
39  * Modified BSD Licence
40  *
41  * Redistribution and use in source and binary forms, with or without
42  * modification, are permitted provided that the following conditions
43  * are met:
44  *
45  *   1. Redistributions of source code must retain the above copyright
46  *      notice, this list of conditions and the following disclaimer.
47  *   2. Redistributions in binary form must reproduce the above
48  *      copyright notice, this list of conditions and the following
49  *      disclaimer in the documentation and/or other materials provided
50  *      with the distribution.
51  *   3. The name of the author may not be used to endorse or promote
52  *      products derived from this software without specific prior
53  *      written permission.
54  */
55 
56 #ifndef OPENIPMI_DEBUG_H
57 #define OPENIPMI_DEBUG_H
58 
59 #include <OpenIPMI/os_handler.h>
60 
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 
65 extern unsigned int i__ipmi_log_mask;
66 
67 /* Log normal IPMI messages, but not low-level protocol messages. */
68 #define DEBUG_MSG_BIT		(1 << 0)
69 
70 /* Log all messages. */
71 #define DEBUG_RAWMSG_BIT	(1 << 1)
72 
73 /* Log events that are received. */
74 #define DEBUG_EVENTS_BIT	(1 << 3)
75 
76 /* Force the given connection to no longer work */
77 #define DEBUG_CON0_FAIL_BIT	(1 << 4)
78 #define DEBUG_CON1_FAIL_BIT	(1 << 5)
79 #define DEBUG_CON2_FAIL_BIT	(1 << 6)
80 #define DEBUG_CON3_FAIL_BIT	(1 << 7)
81 
82 #define DEBUG_MSG_ERR_BIT	(1 << 8)
83 
84 #define DEBUG_MSG	(i__ipmi_log_mask & DEBUG_MSG_BIT)
85 #define DEBUG_MSG_ENABLE() i__ipmi_log_mask |= DEBUG_MSG_BIT
86 #define DEBUG_MSG_DISABLE() i__ipmi_log_mask &= ~DEBUG_MSG_BIT
87 
88 #define DEBUG_RAWMSG	(i__ipmi_log_mask & DEBUG_RAWMSG_BIT)
89 #define DEBUG_RAWMSG_ENABLE() i__ipmi_log_mask |= DEBUG_RAWMSG_BIT
90 #define DEBUG_RAWMSG_DISABLE() i__ipmi_log_mask &= ~DEBUG_RAWMSG_BIT
91 
92 #define DEBUG_EVENTS	(i__ipmi_log_mask & DEBUG_EVENTS_BIT)
93 #define DEBUG_EVENTS_ENABLE() i__ipmi_log_mask |= DEBUG_EVENTS_BIT
94 #define DEBUG_EVENTS_DISABLE() i__ipmi_log_mask &= ~DEBUG_EVENTS_BIT
95 
96 #define DEBUG_CON_FAIL(con)    (i__ipmi_log_mask & (DEBUG_CON0_FAIL_BIT << con))
97 #define DEBUG_CON_FAIL_ENABLE(con) \
98 	i__ipmi_log_mask |= (DEBUG_CON0_FAIL_BIT << con)
99 #define DEBUG_CON_FAIL_DISABLE(con) \
100 	i__ipmi_log_mask &= ~(DEBUG_CON0_FAIL_BIT << con)
101 
102 #define DEBUG_MSG_ERR	(i__ipmi_log_mask & DEBUG_MSG_ERR_BIT)
103 #define DEBUG_MSG_ERR_ENABLE() i__ipmi_log_mask |= DEBUG_MSG_ERR_BIT
104 #define DEBUG_MSG_ERR_DISABLE() i__ipmi_log_mask &= ~DEBUG_MSG_ERR_BIT
105 
106 #ifdef IPMI_CHECK_LOCKS
107 void ipmi_report_lock_error(os_handler_t *handler, char *str);
108 #define IPMI_REPORT_LOCK_ERROR(handler, str) ipmi_report_lock_error(handler, \
109 								    str)
110 #else
111 #define IPMI_REPORT_LOCK_ERROR(handler, str) do {} while (0)
112 #endif
113 
114 extern int i__ipmi_debug_locks;
115 #define DEBUG_LOCKS	(i__ipmi_debug_locks)
116 #define DEBUG_LOCKS_ENABLE() i__ipmi_debug_locks = 1
117 #define DEBUG_LOCKS_DISABLE() i__ipmi_debug_locks = 0
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 
123 #endif /* OPENIPMI_DEBUG_H */
124