xref: /openbsd-src/sys/dev/pci/drm/include/linux/log2.h (revision c349dbc7938c71a30e13c1be4acc1976165f4630)
17f4dd379Sjsg /* Public domain. */
27f4dd379Sjsg 
37f4dd379Sjsg #ifndef _LINUX_LOG2_H
47f4dd379Sjsg #define _LINUX_LOG2_H
57f4dd379Sjsg 
67f4dd379Sjsg #include <sys/types.h>
77f4dd379Sjsg #include <sys/systm.h>
87f4dd379Sjsg 
97f4dd379Sjsg #define ilog2(x) ((sizeof(x) <= 4) ? (fls(x) - 1) : (flsl(x) - 1))
107f4dd379Sjsg 
11*c349dbc7Sjsg int	drm_order(unsigned long);
12*c349dbc7Sjsg 
137f4dd379Sjsg #define is_power_of_2(x)	(((x) != 0) && (((x) - 1) & (x)) == 0)
147f4dd379Sjsg #define order_base_2(x)		drm_order(x)
157f4dd379Sjsg 
167f4dd379Sjsg static inline unsigned long
roundup_pow_of_two(unsigned long x)177f4dd379Sjsg roundup_pow_of_two(unsigned long x)
187f4dd379Sjsg {
197f4dd379Sjsg 	return (1UL << flsl(x - 1));
207f4dd379Sjsg }
217f4dd379Sjsg 
227f4dd379Sjsg static inline unsigned long
rounddown_pow_of_two(unsigned long x)237f4dd379Sjsg rounddown_pow_of_two(unsigned long x)
247f4dd379Sjsg {
257f4dd379Sjsg 	return (1UL << (flsl(x) - 1));
267f4dd379Sjsg }
277f4dd379Sjsg 
287f4dd379Sjsg #endif
29