xref: /dflybsd-src/sys/dev/drm/include/linux/printk.h (revision 789731325bde747251c28a37e0a00ed4efb88c46)
1912d8a9bSFrançois Tigeot /*
21dedbd3bSFrançois Tigeot  * Copyright (c) 2015-2019 François Tigeot <ftigeot@wolfpond.org>
3912d8a9bSFrançois Tigeot  * All rights reserved.
4912d8a9bSFrançois Tigeot  *
5912d8a9bSFrançois Tigeot  * Redistribution and use in source and binary forms, with or without
6912d8a9bSFrançois Tigeot  * modification, are permitted provided that the following conditions
7912d8a9bSFrançois Tigeot  * are met:
8912d8a9bSFrançois Tigeot  * 1. Redistributions of source code must retain the above copyright
9912d8a9bSFrançois Tigeot  *    notice unmodified, this list of conditions, and the following
10912d8a9bSFrançois Tigeot  *    disclaimer.
11912d8a9bSFrançois Tigeot  * 2. Redistributions in binary form must reproduce the above copyright
12912d8a9bSFrançois Tigeot  *    notice, this list of conditions and the following disclaimer in the
13912d8a9bSFrançois Tigeot  *    documentation and/or other materials provided with the distribution.
14912d8a9bSFrançois Tigeot  *
15912d8a9bSFrançois Tigeot  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16912d8a9bSFrançois Tigeot  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17912d8a9bSFrançois Tigeot  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18912d8a9bSFrançois Tigeot  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19912d8a9bSFrançois Tigeot  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20912d8a9bSFrançois Tigeot  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21912d8a9bSFrançois Tigeot  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22912d8a9bSFrançois Tigeot  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23912d8a9bSFrançois Tigeot  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24912d8a9bSFrançois Tigeot  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25912d8a9bSFrançois Tigeot  */
26912d8a9bSFrançois Tigeot 
27912d8a9bSFrançois Tigeot #ifndef _LINUX_PRINTK_H_
28912d8a9bSFrançois Tigeot #define _LINUX_PRINTK_H_
29912d8a9bSFrançois Tigeot 
309286b91eSSascha Wildner #include <sys/stdarg.h>
31d6aa1cc5SFrançois Tigeot #include <linux/init.h>
32d998b496SFrançois Tigeot #include <linux/cache.h>
33d998b496SFrançois Tigeot 
34742b09c6Szrj #include <sys/types.h>
35742b09c6Szrj #include <sys/systm.h>
36742b09c6Szrj 
378621f407SFrançois Tigeot struct va_format {
388621f407SFrançois Tigeot 	const char *fmt;
399286b91eSSascha Wildner 	va_list *va;
408621f407SFrançois Tigeot };
418621f407SFrançois Tigeot 
421dedbd3bSFrançois Tigeot #define printk(...)	kprintf(__VA_ARGS__)
43742b09c6Szrj 
44742b09c6Szrj #define KERN_CONT	""
45742b09c6Szrj #define KERN_EMERG	"<0>"
46742b09c6Szrj #define KERN_ALERT	"<1>"
47742b09c6Szrj #define KERN_CRIT	"<2>"
48742b09c6Szrj #define KERN_ERR	"<3>"
49742b09c6Szrj #define KERN_WARNING	"<4>"
50742b09c6Szrj #define KERN_NOTICE	"<5>"
51742b09c6Szrj #define KERN_INFO	"<6>"
52742b09c6Szrj #define KERN_DEBUG	"<7>"
53742b09c6Szrj 
54742b09c6Szrj #ifndef pr_fmt
55742b09c6Szrj #define pr_fmt(fmt) fmt
56742b09c6Szrj #endif
57742b09c6Szrj 
58742b09c6Szrj #define pr_emerg(fmt, ...) \
59742b09c6Szrj 	printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
60742b09c6Szrj #define pr_alert(fmt, ...) \
61742b09c6Szrj 	printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
62742b09c6Szrj #define pr_crit(fmt, ...) \
63742b09c6Szrj 	printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
64742b09c6Szrj #define pr_err(fmt, ...) \
65742b09c6Szrj 	printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
66742b09c6Szrj #define pr_warning(fmt, ...) \
67742b09c6Szrj 	printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
68742b09c6Szrj #define pr_warn pr_warning
69742b09c6Szrj #define pr_notice(fmt, ...) \
70742b09c6Szrj 	printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
71742b09c6Szrj #define pr_info(fmt, ...) \
72742b09c6Szrj 	printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
73742b09c6Szrj #define pr_cont(fmt, ...) \
74742b09c6Szrj 	printk(KERN_CONT fmt, ##__VA_ARGS__)
75742b09c6Szrj 
76742b09c6Szrj /* pr_devel() should produce zero code unless DEBUG is defined */
77742b09c6Szrj #ifdef DEBUG
78742b09c6Szrj #define pr_devel(fmt, ...) \
79742b09c6Szrj 	printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
80742b09c6Szrj #else
81742b09c6Szrj #define pr_devel(fmt, ...) \
82742b09c6Szrj 	({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
83742b09c6Szrj #endif
84742b09c6Szrj 
85a89cc4a5SPeeter Must #define pr_debug(fmt, ...) \
86a89cc4a5SPeeter Must 	printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
87742b09c6Szrj 
88742b09c6Szrj /*
89742b09c6Szrj  * Print a one-time message (analogous to WARN_ONCE() et al):
90742b09c6Szrj  */
91742b09c6Szrj #define printk_once(x...)			\
92742b09c6Szrj ({						\
93742b09c6Szrj 	static bool __print_once;		\
94742b09c6Szrj 						\
95742b09c6Szrj 	if (!__print_once) {			\
96742b09c6Szrj 		__print_once = true;		\
97742b09c6Szrj 		printk(x);			\
98742b09c6Szrj 	}					\
99742b09c6Szrj })
100742b09c6Szrj 
101912d8a9bSFrançois Tigeot #define pr_info_once(fmt, ...) do {		\
102912d8a9bSFrançois Tigeot 	static bool __printed_once;		\
103912d8a9bSFrançois Tigeot 						\
104912d8a9bSFrançois Tigeot 	if (!__printed_once) {			\
105912d8a9bSFrançois Tigeot 		__printed_once = true;		\
106912d8a9bSFrançois Tigeot 		kprintf(fmt, ##__VA_ARGS__);	\
107912d8a9bSFrançois Tigeot 	}					\
108912d8a9bSFrançois Tigeot } while (0)
109912d8a9bSFrançois Tigeot 
1102e2ba5b7SFrançois Tigeot enum {
1112e2ba5b7SFrançois Tigeot 	DUMP_PREFIX_NONE,
1122e2ba5b7SFrançois Tigeot 	DUMP_PREFIX_ADDRESS,
1132e2ba5b7SFrançois Tigeot 	DUMP_PREFIX_OFFSET
1142e2ba5b7SFrançois Tigeot };
1152e2ba5b7SFrançois Tigeot 
116dd6db6f0SSascha Wildner static inline void
print_hex_dump(const char * level,const char * prefix_str,int prefix_type,int rowsize,int groupsize,const void * buf,size_t len,bool ascii)117dd6db6f0SSascha Wildner print_hex_dump(const char *level, const char *prefix_str, int prefix_type,
118dd6db6f0SSascha Wildner     int rowsize, int groupsize, const void *buf, size_t len, bool ascii)
119dd6db6f0SSascha Wildner {
120dd6db6f0SSascha Wildner 	int flags;
121dd6db6f0SSascha Wildner 
122dd6db6f0SSascha Wildner 	flags = rowsize;
123dd6db6f0SSascha Wildner 	if (prefix_type != DUMP_PREFIX_OFFSET)
124dd6db6f0SSascha Wildner 		flags |= HD_OMIT_COUNT;
125dd6db6f0SSascha Wildner 	if (!ascii)
126dd6db6f0SSascha Wildner 		flags |= HD_OMIT_CHARS;
127dd6db6f0SSascha Wildner 
128dd6db6f0SSascha Wildner 	hexdump(buf, len, prefix_str, flags);
129dd6db6f0SSascha Wildner }
130dd6db6f0SSascha Wildner 
131*78973132SSergey Zigachev #define printk_ratelimit()	1
132*78973132SSergey Zigachev 
133912d8a9bSFrançois Tigeot #endif	/* _LINUX_PRINTK_H_ */
134