xref: /freebsd/sys/compat/linuxkpi/common/include/linux/printk.h (revision d448578b445da95806ef9af996a0db9754daadeb)
1 /*-
2  * Copyright (c) 2010 Isilon Systems, Inc.
3  * Copyright (c) 2010 iX Systems, Inc.
4  * Copyright (c) 2010 Panasas, Inc.
5  * Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice unmodified, this list of conditions, and the following
13  *    disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 #ifndef _LINUXKPI_LINUX_PRINTK_H_
30 #define	_LINUXKPI_LINUX_PRINTK_H_
31 
32 #include <linux/kernel.h>
33 
34 /* GID printing macros */
35 #define	GID_PRINT_FMT			"%.4x:%.4x:%.4x:%.4x:%.4x:%.4x:%.4x:%.4x"
36 #define	GID_PRINT_ARGS(gid_raw)		htons(((u16 *)gid_raw)[0]), htons(((u16 *)gid_raw)[1]),\
37 					htons(((u16 *)gid_raw)[2]), htons(((u16 *)gid_raw)[3]),\
38 					htons(((u16 *)gid_raw)[4]), htons(((u16 *)gid_raw)[5]),\
39 					htons(((u16 *)gid_raw)[6]), htons(((u16 *)gid_raw)[7])
40 
41 enum {
42 	DUMP_PREFIX_NONE,
43 	DUMP_PREFIX_ADDRESS,
44 	DUMP_PREFIX_OFFSET
45 };
46 
47 int __lkpi_hexdump_printf(void *, const char *, ...) __printflike(2, 3);
48 
49 void lkpi_hex_dump(int(*)(void *, const char *, ...), void *arg1,
50     const char *, const char *, const int, const int, const int,
51     const void *, size_t, const bool, const bool);
52 
53 #define	hex_dump_to_buffer(buf, len, rowsize, groupsize, linebuf, linebuflen, ascii) \
54     lkpi_hex_dump_to_buffer((buf), (len), (rowsize), (groupsize), (linebuf), (linebuflen), (ascii))
55 
56 int lkpi_hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
57     int groupsize, char *linebuf, size_t linebuflen, bool ascii);
58 
59 static inline void
60 print_hex_dump(const char *level, const char *prefix_str,
61     const int prefix_type, const int rowsize, const int groupsize,
62     const void *buf, size_t len, const bool ascii)
63 {
64 	lkpi_hex_dump(__lkpi_hexdump_printf, NULL, level, prefix_str, prefix_type,
65 	    rowsize, groupsize, buf, len, ascii, true);
66 }
67 
68 static inline void
69 print_hex_dump_bytes(const char *prefix_str, const int prefix_type,
70     const void *buf, size_t len)
71 {
72 	print_hex_dump(NULL, prefix_str, prefix_type, 16, 1, buf, len, 0);
73 }
74 
75 #define	printk_ratelimit() ({			\
76 	static linux_ratelimit_t __ratelimited;	\
77 	linux_ratelimited(&__ratelimited);	\
78 })
79 
80 #define	printk_ratelimited(...) ({		\
81 	bool __retval = printk_ratelimit();	\
82 	if (__retval)				\
83 		printk(__VA_ARGS__);		\
84 	__retval;				\
85 })
86 
87 #define	pr_err_ratelimited(fmt, ...) \
88 	printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
89 
90 #define	print_hex_dump_debug(...) \
91 	print_hex_dump(KERN_DEBUG, ##__VA_ARGS__)
92 
93 #define	pr_info_ratelimited(fmt, ...) \
94 	printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
95 
96 #define	no_printk(fmt, ...)					\
97 ({								\
98 	if (0)							\
99 		printk(pr_fmt(fmt), ##__VA_ARGS__);		\
100 	0;							\
101 })
102 
103 #define	FW_BUG		"[Firmware Bug]: "
104 #define	FW_WARN		"[Firmware Warn]: "
105 #define	FW_INFO		"[Firmware Info]: "
106 #define	HW_ERR		"[Hardware Error]: "
107 #define	DEPRECATED	"[Deprecated]: "
108 
109 #endif					/* _LINUXKPI_LINUX_PRINTK_H_ */
110