This source file includes following definitions.
- __printf
- drm_coredump_printer
- drm_seq_file_printer
- drm_info_printer
- drm_debug_printer
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 #ifndef DRM_PRINT_H_
27 #define DRM_PRINT_H_
28
29 #include <linux/compiler.h>
30 #include <linux/printk.h>
31 #include <linux/seq_file.h>
32 #include <linux/device.h>
33 #include <linux/debugfs.h>
34
35 #include <drm/drm.h>
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 struct drm_printer {
73
74 void (*printfn)(struct drm_printer *p, struct va_format *vaf);
75 void (*puts)(struct drm_printer *p, const char *str);
76 void *arg;
77 const char *prefix;
78 };
79
80 void __drm_printfn_coredump(struct drm_printer *p, struct va_format *vaf);
81 void __drm_puts_coredump(struct drm_printer *p, const char *str);
82 void __drm_printfn_seq_file(struct drm_printer *p, struct va_format *vaf);
83 void __drm_puts_seq_file(struct drm_printer *p, const char *str);
84 void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf);
85 void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf);
86
87 __printf(2, 3)
88 void drm_printf(struct drm_printer *p, const char *f, ...);
89 void drm_puts(struct drm_printer *p, const char *str);
90 void drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset);
91
92 __printf(2, 0)
93
94
95
96
97
98
99 static inline void
100 drm_vprintf(struct drm_printer *p, const char *fmt, va_list *va)
101 {
102 struct va_format vaf = { .fmt = fmt, .va = va };
103
104 p->printfn(p, &vaf);
105 }
106
107
108
109
110
111
112
113 #define drm_printf_indent(printer, indent, fmt, ...) \
114 drm_printf((printer), "%.*s" fmt, (indent), "\t\t\t\t\tX", ##__VA_ARGS__)
115
116
117
118
119
120
121
122 struct drm_print_iterator {
123 void *data;
124 ssize_t start;
125 ssize_t remain;
126
127 ssize_t offset;
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 static inline struct drm_printer
167 drm_coredump_printer(struct drm_print_iterator *iter)
168 {
169 struct drm_printer p = {
170 .printfn = __drm_printfn_coredump,
171 .puts = __drm_puts_coredump,
172 .arg = iter,
173 };
174
175
176 iter->offset = 0;
177
178 return p;
179 }
180
181
182
183
184
185
186
187
188 static inline struct drm_printer drm_seq_file_printer(struct seq_file *f)
189 {
190 struct drm_printer p = {
191 .printfn = __drm_printfn_seq_file,
192 .puts = __drm_puts_seq_file,
193 .arg = f,
194 };
195 return p;
196 }
197
198
199
200
201
202
203
204
205 static inline struct drm_printer drm_info_printer(struct device *dev)
206 {
207 struct drm_printer p = {
208 .printfn = __drm_printfn_info,
209 .arg = dev,
210 };
211 return p;
212 }
213
214
215
216
217
218
219
220
221 static inline struct drm_printer drm_debug_printer(const char *prefix)
222 {
223 struct drm_printer p = {
224 .printfn = __drm_printfn_debug,
225 .prefix = prefix
226 };
227 return p;
228 }
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264 #define DRM_UT_NONE 0x00
265 #define DRM_UT_CORE 0x01
266 #define DRM_UT_DRIVER 0x02
267 #define DRM_UT_KMS 0x04
268 #define DRM_UT_PRIME 0x08
269 #define DRM_UT_ATOMIC 0x10
270 #define DRM_UT_VBL 0x20
271 #define DRM_UT_STATE 0x40
272 #define DRM_UT_LEASE 0x80
273 #define DRM_UT_DP 0x100
274
275 __printf(3, 4)
276 void drm_dev_printk(const struct device *dev, const char *level,
277 const char *format, ...);
278 __printf(3, 4)
279 void drm_dev_dbg(const struct device *dev, unsigned int category,
280 const char *format, ...);
281
282 __printf(2, 3)
283 void drm_dbg(unsigned int category, const char *format, ...);
284 __printf(1, 2)
285 void drm_err(const char *format, ...);
286
287
288
289 #define _DRM_PRINTK(once, level, fmt, ...) \
290 printk##once(KERN_##level "[" DRM_NAME "] " fmt, ##__VA_ARGS__)
291
292 #define DRM_INFO(fmt, ...) \
293 _DRM_PRINTK(, INFO, fmt, ##__VA_ARGS__)
294 #define DRM_NOTE(fmt, ...) \
295 _DRM_PRINTK(, NOTICE, fmt, ##__VA_ARGS__)
296 #define DRM_WARN(fmt, ...) \
297 _DRM_PRINTK(, WARNING, fmt, ##__VA_ARGS__)
298
299 #define DRM_INFO_ONCE(fmt, ...) \
300 _DRM_PRINTK(_once, INFO, fmt, ##__VA_ARGS__)
301 #define DRM_NOTE_ONCE(fmt, ...) \
302 _DRM_PRINTK(_once, NOTICE, fmt, ##__VA_ARGS__)
303 #define DRM_WARN_ONCE(fmt, ...) \
304 _DRM_PRINTK(_once, WARNING, fmt, ##__VA_ARGS__)
305
306
307
308
309
310
311
312 #define DRM_DEV_ERROR(dev, fmt, ...) \
313 drm_dev_printk(dev, KERN_ERR, "*ERROR* " fmt, ##__VA_ARGS__)
314 #define DRM_ERROR(fmt, ...) \
315 drm_err(fmt, ##__VA_ARGS__)
316
317
318
319
320
321
322
323 #define DRM_DEV_ERROR_RATELIMITED(dev, fmt, ...) \
324 ({ \
325 static DEFINE_RATELIMIT_STATE(_rs, \
326 DEFAULT_RATELIMIT_INTERVAL, \
327 DEFAULT_RATELIMIT_BURST); \
328 \
329 if (__ratelimit(&_rs)) \
330 DRM_DEV_ERROR(dev, fmt, ##__VA_ARGS__); \
331 })
332 #define DRM_ERROR_RATELIMITED(fmt, ...) \
333 DRM_DEV_ERROR_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
334
335 #define DRM_DEV_INFO(dev, fmt, ...) \
336 drm_dev_printk(dev, KERN_INFO, fmt, ##__VA_ARGS__)
337
338 #define DRM_DEV_INFO_ONCE(dev, fmt, ...) \
339 ({ \
340 static bool __print_once __read_mostly; \
341 if (!__print_once) { \
342 __print_once = true; \
343 DRM_DEV_INFO(dev, fmt, ##__VA_ARGS__); \
344 } \
345 })
346
347
348
349
350
351
352
353 #define DRM_DEV_DEBUG(dev, fmt, ...) \
354 drm_dev_dbg(dev, DRM_UT_CORE, fmt, ##__VA_ARGS__)
355 #define DRM_DEBUG(fmt, ...) \
356 drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
357
358 #define DRM_DEV_DEBUG_DRIVER(dev, fmt, ...) \
359 drm_dev_dbg(dev, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
360 #define DRM_DEBUG_DRIVER(fmt, ...) \
361 drm_dbg(DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
362
363 #define DRM_DEV_DEBUG_KMS(dev, fmt, ...) \
364 drm_dev_dbg(dev, DRM_UT_KMS, fmt, ##__VA_ARGS__)
365 #define DRM_DEBUG_KMS(fmt, ...) \
366 drm_dbg(DRM_UT_KMS, fmt, ##__VA_ARGS__)
367
368 #define DRM_DEV_DEBUG_PRIME(dev, fmt, ...) \
369 drm_dev_dbg(dev, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
370 #define DRM_DEBUG_PRIME(fmt, ...) \
371 drm_dbg(DRM_UT_PRIME, fmt, ##__VA_ARGS__)
372
373 #define DRM_DEV_DEBUG_ATOMIC(dev, fmt, ...) \
374 drm_dev_dbg(dev, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
375 #define DRM_DEBUG_ATOMIC(fmt, ...) \
376 drm_dbg(DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
377
378 #define DRM_DEV_DEBUG_VBL(dev, fmt, ...) \
379 drm_dev_dbg(dev, DRM_UT_VBL, fmt, ##__VA_ARGS__)
380 #define DRM_DEBUG_VBL(fmt, ...) \
381 drm_dbg(DRM_UT_VBL, fmt, ##__VA_ARGS__)
382
383 #define DRM_DEBUG_LEASE(fmt, ...) \
384 drm_dbg(DRM_UT_LEASE, fmt, ##__VA_ARGS__)
385
386 #define DRM_DEV_DEBUG_DP(dev, fmt, ...) \
387 drm_dev_dbg(dev, DRM_UT_DP, fmt, ## __VA_ARGS__)
388 #define DRM_DEBUG_DP(fmt, ...) \
389 drm_dbg(DRM_UT_DP, fmt, ## __VA_ARGS__)
390
391 #define _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, category, fmt, ...) \
392 ({ \
393 static DEFINE_RATELIMIT_STATE(_rs, \
394 DEFAULT_RATELIMIT_INTERVAL, \
395 DEFAULT_RATELIMIT_BURST); \
396 if (__ratelimit(&_rs)) \
397 drm_dev_dbg(dev, category, fmt, ##__VA_ARGS__); \
398 })
399
400
401
402
403
404
405
406 #define DRM_DEV_DEBUG_RATELIMITED(dev, fmt, ...) \
407 _DEV_DRM_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_CORE, \
408 fmt, ##__VA_ARGS__)
409 #define DRM_DEBUG_RATELIMITED(fmt, ...) \
410 DRM_DEV_DEBUG_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
411
412 #define DRM_DEV_DEBUG_DRIVER_RATELIMITED(dev, fmt, ...) \
413 _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_DRIVER, \
414 fmt, ##__VA_ARGS__)
415 #define DRM_DEBUG_DRIVER_RATELIMITED(fmt, ...) \
416 DRM_DEV_DEBUG_DRIVER_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
417
418 #define DRM_DEV_DEBUG_KMS_RATELIMITED(dev, fmt, ...) \
419 _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_KMS, \
420 fmt, ##__VA_ARGS__)
421 #define DRM_DEBUG_KMS_RATELIMITED(fmt, ...) \
422 DRM_DEV_DEBUG_KMS_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
423
424 #define DRM_DEV_DEBUG_PRIME_RATELIMITED(dev, fmt, ...) \
425 _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_PRIME, \
426 fmt, ##__VA_ARGS__)
427 #define DRM_DEBUG_PRIME_RATELIMITED(fmt, ...) \
428 DRM_DEV_DEBUG_PRIME_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
429
430 #endif