xref: /freebsd/sys/compat/linuxkpi/common/include/linux/printk.h (revision 4359672e656af5e6758d0aae147212e58f445f5b)
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);
52 
53 static inline void
print_hex_dump(const char * level,const char * prefix_str,const int prefix_type,const int rowsize,const int groupsize,const void * buf,size_t len,const bool ascii)54 print_hex_dump(const char *level, const char *prefix_str,
55     const int prefix_type, const int rowsize, const int groupsize,
56     const void *buf, size_t len, const bool ascii)
57 {
58 	lkpi_hex_dump(__lkpi_hexdump_printf, NULL, level, prefix_str, prefix_type,
59 	    rowsize, groupsize, buf, len, ascii);
60 }
61 
62 static inline void
print_hex_dump_bytes(const char * prefix_str,const int prefix_type,const void * buf,size_t len)63 print_hex_dump_bytes(const char *prefix_str, const int prefix_type,
64     const void *buf, size_t len)
65 {
66 	print_hex_dump(NULL, prefix_str, prefix_type, 16, 1, buf, len, 0);
67 }
68 
69 #define	printk_ratelimit() ({			\
70 	static linux_ratelimit_t __ratelimited;	\
71 	linux_ratelimited(&__ratelimited);	\
72 })
73 
74 #define	printk_ratelimited(...) ({		\
75 	bool __retval = printk_ratelimit();	\
76 	if (__retval)				\
77 		printk(__VA_ARGS__);		\
78 	__retval;				\
79 })
80 
81 #define	pr_err_ratelimited(fmt, ...) \
82 	printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
83 
84 #define	print_hex_dump_debug(...) \
85 	print_hex_dump(KERN_DEBUG, ##__VA_ARGS__)
86 
87 #define	pr_info_ratelimited(fmt, ...) \
88 	printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
89 
90 #define	no_printk(fmt, ...)					\
91 ({								\
92 	if (0)							\
93 		printk(pr_fmt(fmt), ##__VA_ARGS__);		\
94 	0;							\
95 })
96 
97 #endif					/* _LINUXKPI_LINUX_PRINTK_H_ */
98