Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
s390
include
asm
debug.h
Go to the documentation of this file.
1
/*
2
* S/390 debug facility
3
*
4
* Copyright IBM Corp. 1999, 2000
5
*/
6
#ifndef DEBUG_H
7
#define DEBUG_H
8
9
#include <linux/string.h>
10
#include <
linux/spinlock.h
>
11
#include <linux/kernel.h>
12
#include <linux/time.h>
13
#include <
uapi/asm/debug.h
>
14
15
#define DEBUG_MAX_LEVEL 6
/* debug levels range from 0 to 6 */
16
#define DEBUG_OFF_LEVEL -1
/* level where debug is switched off */
17
#define DEBUG_FLUSH_ALL -1
/* parameter to flush all areas */
18
#define DEBUG_MAX_VIEWS 10
/* max number of views in proc fs */
19
#define DEBUG_MAX_NAME_LEN 64
/* max length for a debugfs file name */
20
#define DEBUG_DEFAULT_LEVEL 3
/* initial debug level */
21
22
#define DEBUG_DIR_ROOT "s390dbf"
/* name of debug root directory in proc fs */
23
24
#define DEBUG_DATA(entry) (char*)(entry + 1)
/* data is stored behind */
25
/* the entry information */
26
27
typedef
struct
__debug_entry
debug_entry_t
;
28
29
struct
debug_view
;
30
31
typedef
struct
debug_info
{
32
struct
debug_info
*
next
;
33
struct
debug_info
*
prev
;
34
atomic_t
ref_count
;
35
spinlock_t
lock
;
36
int
level
;
37
int
nr_areas
;
38
int
pages_per_area
;
39
int
buf_size
;
40
int
entry_size
;
41
debug_entry_t
***
areas
;
42
int
active_area
;
43
int
*
active_pages
;
44
int
*
active_entries
;
45
struct
dentry
*
debugfs_root_entry
;
46
struct
dentry
*
debugfs_entries
[
DEBUG_MAX_VIEWS
];
47
struct
debug_view
*
views
[
DEBUG_MAX_VIEWS
];
48
char
name
[
DEBUG_MAX_NAME_LEN
];
49
umode_t
mode
;
50
}
debug_info_t
;
51
52
typedef
int
(
debug_header_proc_t
) (
debug_info_t
*
id
,
53
struct
debug_view
* view,
54
int
area,
55
debug_entry_t
*
entry
,
56
char
* out_buf);
57
58
typedef
int
(
debug_format_proc_t
) (
debug_info_t
*
id
,
59
struct
debug_view
* view,
char
* out_buf,
60
const
char
* in_buf);
61
typedef
int
(
debug_prolog_proc_t
) (
debug_info_t
*
id
,
62
struct
debug_view
* view,
63
char
* out_buf);
64
typedef
int
(
debug_input_proc_t
) (
debug_info_t
*
id
,
65
struct
debug_view
* view,
66
struct
file
*
file
,
67
const
char
__user
*user_buf,
68
size_t
in_buf_size, loff_t*
offset
);
69
70
int
debug_dflt_header_fn
(
debug_info_t
*
id
,
struct
debug_view
* view,
71
int
area,
debug_entry_t
*
entry
,
char
* out_buf);
72
73
struct
debug_view
{
74
char
name
[
DEBUG_MAX_NAME_LEN
];
75
debug_prolog_proc_t
*
prolog_proc
;
76
debug_header_proc_t
*
header_proc
;
77
debug_format_proc_t
*
format_proc
;
78
debug_input_proc_t
*
input_proc
;
79
void
*
private_data
;
80
};
81
82
extern
struct
debug_view
debug_hex_ascii_view
;
83
extern
struct
debug_view
debug_raw_view
;
84
extern
struct
debug_view
debug_sprintf_view
;
85
86
/* do NOT use the _common functions */
87
88
debug_entry_t
*
debug_event_common
(
debug_info_t
*
id
,
int
level
,
89
const
void
*
data
,
int
length
);
90
91
debug_entry_t
*
debug_exception_common
(
debug_info_t
*
id
,
int
level
,
92
const
void
*
data
,
int
length
);
93
94
/* Debug Feature API: */
95
96
debug_info_t
*
debug_register
(
const
char
*
name
,
int
pages
,
int
nr_areas,
97
int
buf_size
);
98
99
debug_info_t
*
debug_register_mode
(
const
char
*
name
,
int
pages
,
int
nr_areas,
100
int
buf_size
,
umode_t
mode
,
uid_t
uid
,
101
gid_t
gid
);
102
103
void
debug_unregister
(
debug_info_t
*
id
);
104
105
void
debug_set_level
(
debug_info_t
*
id
,
int
new_level);
106
107
void
debug_set_critical
(
void
);
108
void
debug_stop_all
(
void
);
109
110
static
inline
debug_entry_t
*
111
debug_event(
debug_info_t
*
id
,
int
level
,
void
*
data
,
int
length
)
112
{
113
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
114
return
NULL
;
115
return
debug_event_common
(
id
,level,data,length);
116
}
117
118
static
inline
debug_entry_t
*
119
debug_int_event(
debug_info_t
*
id
,
int
level,
unsigned
int
tag
)
120
{
121
unsigned
int
t
=
tag
;
122
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
123
return
NULL
;
124
return
debug_event_common
(
id
,level,&t,
sizeof
(
unsigned
int
));
125
}
126
127
static
inline
debug_entry_t
*
128
debug_long_event (
debug_info_t
*
id
,
int
level,
unsigned
long
tag)
129
{
130
unsigned
long
t=
tag
;
131
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
132
return
NULL
;
133
return
debug_event_common
(
id
,level,&t,
sizeof
(
unsigned
long
));
134
}
135
136
static
inline
debug_entry_t
*
137
debug_text_event(
debug_info_t
*
id
,
int
level,
const
char
* txt)
138
{
139
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
140
return
NULL
;
141
return
debug_event_common
(
id
,level,txt,
strlen
(txt));
142
}
143
144
/*
145
* IMPORTANT: Use "%s" in sprintf format strings with care! Only pointers are
146
* stored in the s390dbf. See Documentation/s390/s390dbf.txt for more details!
147
*/
148
extern
debug_entry_t
*
149
debug_sprintf_event
(
debug_info_t
*
id
,
int
level,
char
*
string
,...)
150
__attribute__
((
format
(
printf
, 3, 4)));
151
152
153
static
inline
debug_entry_t
*
154
debug_exception(
debug_info_t
*
id
,
int
level,
void
* data,
int
length)
155
{
156
if
((!
id
) || (level > id->level) || (id->pages_per_area == 0))
157
return
NULL
;
158
return
debug_exception_common
(
id
,level,data,length);
159
}
160
161
static
inline
debug_entry_t
*
162
debug_int_exception(
debug_info_t
*
id
,
int
level,
unsigned
int
tag)
163
{
164
unsigned
int
t=
tag
;
165
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
166
return
NULL
;
167
return
debug_exception_common
(
id
,level,&t,
sizeof
(
unsigned
int
));
168
}
169
170
static
inline
debug_entry_t
*
171
debug_long_exception (
debug_info_t
*
id
,
int
level,
unsigned
long
tag)
172
{
173
unsigned
long
t=
tag
;
174
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
175
return
NULL
;
176
return
debug_exception_common
(
id
,level,&t,
sizeof
(
unsigned
long
));
177
}
178
179
static
inline
debug_entry_t
*
180
debug_text_exception(
debug_info_t
*
id
,
int
level,
const
char
* txt)
181
{
182
if
((!
id
) || (level > id->
level
) || (id->
pages_per_area
== 0))
183
return
NULL
;
184
return
debug_exception_common
(
id
,level,txt,
strlen
(txt));
185
}
186
187
/*
188
* IMPORTANT: Use "%s" in sprintf format strings with care! Only pointers are
189
* stored in the s390dbf. See Documentation/s390/s390dbf.txt for more details!
190
*/
191
extern
debug_entry_t
*
192
debug_sprintf_exception
(
debug_info_t
*
id
,
int
level,
char
*
string
,...)
193
__attribute__
((
format
(printf, 3, 4)));
194
195
int
debug_register_view
(
debug_info_t
*
id
,
struct
debug_view
* view);
196
int
debug_unregister_view
(
debug_info_t
*
id
,
struct
debug_view
* view);
197
198
/*
199
define the debug levels:
200
- 0 No debugging output to console or syslog
201
- 1 Log internal errors to syslog, ignore check conditions
202
- 2 Log internal errors and check conditions to syslog
203
- 3 Log internal errors to console, log check conditions to syslog
204
- 4 Log internal errors and check conditions to console
205
- 5 panic on internal errors, log check conditions to console
206
- 6 panic on both, internal errors and check conditions
207
*/
208
209
#ifndef DEBUG_LEVEL
210
#define DEBUG_LEVEL 4
211
#endif
212
213
#define INTERNAL_ERRMSG(x,y...) "E" __FILE__ "%d: " x, __LINE__, y
214
#define INTERNAL_WRNMSG(x,y...) "W" __FILE__ "%d: " x, __LINE__, y
215
#define INTERNAL_INFMSG(x,y...) "I" __FILE__ "%d: " x, __LINE__, y
216
#define INTERNAL_DEBMSG(x,y...) "D" __FILE__ "%d: " x, __LINE__, y
217
218
#if DEBUG_LEVEL > 0
219
#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER x )
220
#define PRINT_INFO(x...) printk ( KERN_INFO PRINTK_HEADER x )
221
#define PRINT_WARN(x...) printk ( KERN_WARNING PRINTK_HEADER x )
222
#define PRINT_ERR(x...) printk ( KERN_ERR PRINTK_HEADER x )
223
#define PRINT_FATAL(x...) panic ( PRINTK_HEADER x )
224
#else
225
#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER x )
226
#define PRINT_INFO(x...) printk ( KERN_DEBUG PRINTK_HEADER x )
227
#define PRINT_WARN(x...) printk ( KERN_DEBUG PRINTK_HEADER x )
228
#define PRINT_ERR(x...) printk ( KERN_DEBUG PRINTK_HEADER x )
229
#define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x )
230
#endif
/* DASD_DEBUG */
231
232
#endif
/* DEBUG_H */
Generated on Thu Jan 10 2013 13:09:34 for Linux Kernel by
1.8.2