xref: /openbsd-src/sys/dev/pci/drm/include/linux/kernel.h (revision c96eac12212738df022e8da546facc2482b97a41)
17f4dd379Sjsg /* Public domain. */
27f4dd379Sjsg 
37f4dd379Sjsg #ifndef _LINUX_KERNEL_H
47f4dd379Sjsg #define _LINUX_KERNEL_H
57f4dd379Sjsg 
67f4dd379Sjsg #include <sys/param.h>
77f4dd379Sjsg #include <sys/systm.h>
87f4dd379Sjsg #include <sys/stdarg.h>
97f4dd379Sjsg #include <sys/malloc.h>
107f4dd379Sjsg 
117f4dd379Sjsg #include <linux/types.h>
127f4dd379Sjsg #include <linux/compiler.h>
137f4dd379Sjsg #include <linux/bitops.h>
147f4dd379Sjsg #include <linux/log2.h>
157f4dd379Sjsg #include <linux/linkage.h>
167f4dd379Sjsg #include <linux/printk.h>
177f4dd379Sjsg #include <linux/typecheck.h>
181bb76ff1Sjsg #include <linux/container_of.h>
19f005ef32Sjsg #include <linux/stddef.h>
20f005ef32Sjsg #include <linux/align.h>
21*c96eac12Sjsg #include <linux/math.h>
22*c96eac12Sjsg #include <linux/limits.h>
237f4dd379Sjsg #include <asm/byteorder.h>
247f4dd379Sjsg 
257f4dd379Sjsg #define swap(a, b) \
267f4dd379Sjsg 	do { __typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while(0)
277f4dd379Sjsg 
287f4dd379Sjsg #define ARRAY_SIZE nitems
297f4dd379Sjsg 
307f4dd379Sjsg #define lower_32_bits(n)	((u32)(n))
317f4dd379Sjsg #define upper_32_bits(_val)	((u32)(((_val) >> 16) >> 16))
327f4dd379Sjsg 
337f4dd379Sjsg #define scnprintf(str, size, fmt, arg...) snprintf(str, size, fmt, ## arg)
347f4dd379Sjsg 
357f4dd379Sjsg #define min_t(t, a, b) ({ \
367f4dd379Sjsg 	t __min_a = (a); \
377f4dd379Sjsg 	t __min_b = (b); \
387f4dd379Sjsg 	__min_a < __min_b ? __min_a : __min_b; })
397f4dd379Sjsg 
407f4dd379Sjsg #define max_t(t, a, b) ({ \
417f4dd379Sjsg 	t __max_a = (a); \
427f4dd379Sjsg 	t __max_b = (b); \
437f4dd379Sjsg 	__max_a > __max_b ? __max_a : __max_b; })
447f4dd379Sjsg 
457f4dd379Sjsg #define clamp_t(t, x, a, b) min_t(t, max_t(t, x, a), b)
467f4dd379Sjsg #define clamp(x, a, b) clamp_t(__typeof(x), x, a, b)
477f4dd379Sjsg #define clamp_val(x, a, b) clamp_t(__typeof(x), x, a, b)
487f4dd379Sjsg 
497f4dd379Sjsg #define min(a, b) MIN(a, b)
507f4dd379Sjsg #define max(a, b) MAX(a, b)
517f4dd379Sjsg #define min3(x, y, z) MIN(x, MIN(y, z))
527f4dd379Sjsg #define max3(x, y, z) MAX(x, MAX(y, z))
537f4dd379Sjsg 
54f005ef32Sjsg #define min_not_zero(a, b) (a == 0) ? b : ((b == 0) ? a : min(a, b))
55f005ef32Sjsg 
567f4dd379Sjsg static inline char *
kvasprintf(int flags,const char * fmt,va_list ap)57bfffe9a4Sjsg kvasprintf(int flags, const char *fmt, va_list ap)
587f4dd379Sjsg {
597f4dd379Sjsg 	char *buf;
607f4dd379Sjsg 	size_t len;
61bfffe9a4Sjsg 	va_list vl;
627f4dd379Sjsg 
63bfffe9a4Sjsg 	va_copy(vl, ap);
64bfffe9a4Sjsg 	len = vsnprintf(NULL, 0, fmt, vl);
65bfffe9a4Sjsg 	va_end(vl);
667f4dd379Sjsg 
677272c158Smpi 	buf = malloc(len + 1, M_DRM, flags);
687f4dd379Sjsg 	if (buf) {
697272c158Smpi 		vsnprintf(buf, len + 1, fmt, ap);
707f4dd379Sjsg 	}
717f4dd379Sjsg 
727f4dd379Sjsg 	return buf;
737f4dd379Sjsg }
747f4dd379Sjsg 
757f4dd379Sjsg static inline char *
kasprintf(int flags,const char * fmt,...)76bfffe9a4Sjsg kasprintf(int flags, const char *fmt, ...)
777f4dd379Sjsg {
787f4dd379Sjsg 	char *buf;
79bfffe9a4Sjsg 	va_list ap;
807f4dd379Sjsg 
81bfffe9a4Sjsg 	va_start(ap, fmt);
82bfffe9a4Sjsg 	buf = kvasprintf(flags, fmt, ap);
83bfffe9a4Sjsg 	va_end(ap);
847f4dd379Sjsg 
857f4dd379Sjsg 	return buf;
867f4dd379Sjsg }
877f4dd379Sjsg 
887f4dd379Sjsg static inline int
vscnprintf(char * buf,size_t size,const char * fmt,va_list ap)89c349dbc7Sjsg vscnprintf(char *buf, size_t size, const char *fmt, va_list ap)
90c349dbc7Sjsg {
91c349dbc7Sjsg 	int nc;
92c349dbc7Sjsg 
93c349dbc7Sjsg 	nc = vsnprintf(buf, size, fmt, ap);
94c349dbc7Sjsg 	if (nc > (size - 1))
95c349dbc7Sjsg 		return (size - 1);
96c349dbc7Sjsg 	else
97c349dbc7Sjsg 		return nc;
98c349dbc7Sjsg }
99c349dbc7Sjsg 
100ad8b1aafSjsg #define might_sleep()		assertwaitok()
101ad8b1aafSjsg #define might_sleep_if(x)	do {	\
102ad8b1aafSjsg 	if (x)				\
103ad8b1aafSjsg 		assertwaitok();		\
104ad8b1aafSjsg } while (0)
1057f4dd379Sjsg 
1067f4dd379Sjsg #define add_taint(x, y)
1077f4dd379Sjsg #define TAINT_MACHINE_CHECK	0
108c349dbc7Sjsg #define TAINT_WARN		1
1097f4dd379Sjsg #define LOCKDEP_STILL_OK	0
1107f4dd379Sjsg 
1117f4dd379Sjsg #define u64_to_user_ptr(x)	((void *)(uintptr_t)(x))
1127f4dd379Sjsg 
113c349dbc7Sjsg #define _RET_IP_		__builtin_return_address(0)
114c349dbc7Sjsg 
115c349dbc7Sjsg #define STUB() do { printf("%s: stub\n", __func__); } while(0)
116c349dbc7Sjsg 
117f005ef32Sjsg #define PTR_IF(c, p)		((c) ? (p) : NULL)
118f005ef32Sjsg 
1197f4dd379Sjsg #endif
120