1 #ifndef __TOOLS_LINUX_KERNEL_H
2 #define __TOOLS_LINUX_KERNEL_H
11 #include <linux/bug.h>
12 #include <linux/byteorder.h>
13 #include <linux/compiler.h>
14 #include <linux/math.h>
16 #define BIT(nr) (1UL << (nr))
17 #define BIT_ULL(nr) (1ULL << (nr))
19 #define __ARG_PLACEHOLDER_1 0,
20 #define __take_second_arg(__ignored, val, ...) val
22 #define __and(x, y) ___and(x, y)
23 #define ___and(x, y) ____and(__ARG_PLACEHOLDER_##x, y)
24 #define ____and(arg1_or_junk, y) __take_second_arg(arg1_or_junk y, 0)
26 #define __or(x, y) ___or(x, y)
27 #define ___or(x, y) ____or(__ARG_PLACEHOLDER_##x, y)
28 #define ____or(arg1_or_junk, y) __take_second_arg(arg1_or_junk 1, y)
30 #define __is_defined(x) ___is_defined(x)
31 #define ___is_defined(val) ____is_defined(__ARG_PLACEHOLDER_##val)
32 #define ____is_defined(arg1_or_junk) __take_second_arg(arg1_or_junk 1, 0)
35 * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
36 * otherwise. For boolean options, this is equivalent to
37 * IS_ENABLED(CONFIG_FOO).
39 #define IS_BUILTIN(option) __is_defined(option)
42 * IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0
45 #define IS_MODULE(option) __is_defined(option##_MODULE)
48 * IS_REACHABLE(CONFIG_FOO) evaluates to 1 if the currently compiled
49 * code can call a function defined in code compiled based on CONFIG_FOO.
50 * This is similar to IS_ENABLED(), but returns false when invoked from
51 * built-in code when CONFIG_FOO is set to 'm'.
53 #define IS_REACHABLE(option) __or(IS_BUILTIN(option), \
54 __and(IS_MODULE(option), __is_defined(MODULE)))
57 * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
60 #define IS_ENABLED(option) __or(IS_BUILTIN(option), IS_MODULE(option))
61 #define EXPORT_SYMBOL(sym)
63 #define U8_MAX ((u8)~0U)
64 #define S8_MAX ((s8)(U8_MAX>>1))
65 #define S8_MIN ((s8)(-S8_MAX - 1))
66 #define U16_MAX ((u16)~0U)
67 #define S16_MAX ((s16)(U16_MAX>>1))
68 #define S16_MIN ((s16)(-S16_MAX - 1))
69 #define U32_MAX ((u32)~0U)
70 #define S32_MAX ((s32)(U32_MAX>>1))
71 #define S32_MIN ((s32)(-S32_MAX - 1))
72 #define U64_MAX ((u64)~0ULL)
73 #define S64_MAX ((s64)(U64_MAX>>1))
74 #define S64_MIN ((s64)(-S64_MAX - 1))
76 #define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1)
77 #define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))
79 #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a)))
80 #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
82 #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
83 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
86 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
91 * container_of - cast a member of a structure out to the containing structure
92 * @ptr: the pointer to the member.
93 * @type: the type of the container struct this is embedded in.
94 * @member: the name of the member within the struct.
97 #define container_of(ptr, type, member) ({ \
98 const typeof(((type *)0)->member) * __mptr = (ptr); \
99 (type *)((char *)__mptr - offsetof(type, member)); })
102 #ifndef __struct_group
103 #define __struct_group(TAG, NAME, ATTRS, MEMBERS...) \
105 struct { MEMBERS } ATTRS; \
106 struct TAG { MEMBERS } ATTRS NAME; \
110 #define struct_group(NAME, MEMBERS...) \
111 __struct_group(/* no tag */, NAME, /* no attrs */, MEMBERS)
113 #define max(x, y) ({ \
114 typeof(x) _max1 = (x); \
115 typeof(y) _max2 = (y); \
116 (void) (&_max1 == &_max2); \
117 _max1 > _max2 ? _max1 : _max2; })
119 #define min(x, y) ({ \
120 typeof(x) _min1 = (x); \
121 typeof(y) _min2 = (y); \
122 (void) (&_min1 == &_min2); \
123 _min1 < _min2 ? _min1 : _min2; })
125 #define min_t(type, x, y) ({ \
128 __min1 < __min2 ? __min1: __min2; })
130 #define max_t(type, x, y) ({ \
133 __max1 > __max2 ? __max1: __max2; })
135 #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi)
138 do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
140 /* This counts to 12. Any more, it will return 13th argument. */
141 #define __COUNT_ARGS(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _n, X...) _n
142 #define COUNT_ARGS(X...) __COUNT_ARGS(, ##X, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
144 #define _RET_IP_ (unsigned long)__builtin_return_address(0)
145 #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; })
147 #define might_sleep()
149 #define cpu_relax() barrier()
150 #define cpu_relax_lowlatency() barrier()
152 #define panic(fmt, ...) \
154 printf(fmt, ##__VA_ARGS__); \
158 int __must_check _kstrtoul(const char *s, unsigned int base, unsigned long *res);
159 int __must_check _kstrtol(const char *s, unsigned int base, long *res);
161 int __must_check kstrtoull(const char *s, unsigned int base, unsigned long long *res);
162 int __must_check kstrtoll(const char *s, unsigned int base, long long *res);
165 * kstrtoul - convert a string to an unsigned long
166 * @s: The start of the string. The string must be null-terminated, and may also
167 * include a single newline before its terminating null. The first character
168 * may also be a plus sign, but not a minus sign.
169 * @base: The number base to use. The maximum supported base is 16. If base is
170 * given as 0, then the base of the string is automatically detected with the
171 * conventional semantics - If it begins with 0x the number will be parsed as a
172 * hexadecimal (case insensitive), if it otherwise begins with 0, it will be
173 * parsed as an octal number. Otherwise it will be parsed as a decimal.
174 * @res: Where to write the result of the conversion on success.
176 * Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.
177 * Used as a replacement for the obsolete simple_strtoull. Return code must
180 static inline int __must_check kstrtoul(const char *s, unsigned int base, unsigned long *res)
183 * We want to shortcut function call, but
184 * __builtin_types_compatible_p(unsigned long, unsigned long long) = 0.
186 if (sizeof(unsigned long) == sizeof(unsigned long long) &&
187 __alignof__(unsigned long) == __alignof__(unsigned long long))
188 return kstrtoull(s, base, (unsigned long long *)res);
190 return _kstrtoul(s, base, res);
194 * kstrtol - convert a string to a long
195 * @s: The start of the string. The string must be null-terminated, and may also
196 * include a single newline before its terminating null. The first character
197 * may also be a plus sign or a minus sign.
198 * @base: The number base to use. The maximum supported base is 16. If base is
199 * given as 0, then the base of the string is automatically detected with the
200 * conventional semantics - If it begins with 0x the number will be parsed as a
201 * hexadecimal (case insensitive), if it otherwise begins with 0, it will be
202 * parsed as an octal number. Otherwise it will be parsed as a decimal.
203 * @res: Where to write the result of the conversion on success.
205 * Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.
206 * Used as a replacement for the obsolete simple_strtoull. Return code must
209 static inline int __must_check kstrtol(const char *s, unsigned int base, long *res)
212 * We want to shortcut function call, but
213 * __builtin_types_compatible_p(long, long long) = 0.
215 if (sizeof(long) == sizeof(long long) &&
216 __alignof__(long) == __alignof__(long long))
217 return kstrtoll(s, base, (long long *)res);
219 return _kstrtol(s, base, res);
222 int __must_check kstrtouint(const char *s, unsigned int base, unsigned int *res);
223 int __must_check kstrtoint(const char *s, unsigned int base, int *res);
225 static inline int __must_check kstrtou64(const char *s, unsigned int base, u64 *res)
227 return kstrtoull(s, base, res);
230 static inline int __must_check kstrtos64(const char *s, unsigned int base, s64 *res)
232 return kstrtoll(s, base, res);
235 static inline int __must_check kstrtou32(const char *s, unsigned int base, u32 *res)
237 return kstrtouint(s, base, res);
240 static inline int __must_check kstrtos32(const char *s, unsigned int base, s32 *res)
242 return kstrtoint(s, base, res);
246 extern void prt_u64(struct printbuf *out, u64 num);
248 extern __printf(2, 0) void prt_vprintf(struct printbuf *out, const char *fmt, va_list args);
249 extern __printf(2, 3) void prt_printf(struct printbuf *out, const char *fmt, ...);
251 static const char hex_asc[] = "0123456789abcdef";
252 #define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
253 #define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
254 static const char hex_asc_upper[] = "0123456789ABCDEF";
255 #define hex_asc_upper_lo(x) hex_asc_upper[((x) & 0x0f)]
256 #define hex_asc_upper_hi(x) hex_asc_upper[((x) & 0xf0) >> 4]
258 /* The hash is always the low bits of hash_len */
259 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
260 #define HASH_LEN_DECLARE u32 hash; u32 len
262 #define HASH_LEN_DECLARE u32 len; u32 hash
272 const unsigned char *name;
275 #define QSTR_INIT(n,l) { { { .len = l } }, .name = n }
277 #define POISON_FREE 0x6b
279 static inline void dump_stack(void) {}
281 #define unsafe_memcpy(dst, src, bytes, justification) \
282 memcpy(dst, src, bytes)
284 #ifdef __DECLARE_FLEX_ARRAY
285 #define DECLARE_FLEX_ARRAY(TYPE, NAME) __DECLARE_FLEX_ARRAY(TYPE, NAME)
287 #define DECLARE_FLEX_ARRAY(T, member) T member[0]