1*cba1da49SMasahiro Yamada #ifndef _LINUX_KERNEL_H 2*cba1da49SMasahiro Yamada #define _LINUX_KERNEL_H 3*cba1da49SMasahiro Yamada 4*cba1da49SMasahiro Yamada 5*cba1da49SMasahiro Yamada #include <linux/types.h> 6*cba1da49SMasahiro Yamada 7*cba1da49SMasahiro Yamada #define INT_MAX ((int)(~0U>>1)) 8*cba1da49SMasahiro Yamada #define INT_MIN (-INT_MAX - 1) 9*cba1da49SMasahiro Yamada #define LLONG_MAX ((long long)(~0ULL>>1)) 10*cba1da49SMasahiro Yamada 11*cba1da49SMasahiro Yamada #define U8_MAX ((u8)~0U) 12*cba1da49SMasahiro Yamada #define U32_MAX ((u32)~0U) 13*cba1da49SMasahiro Yamada #define U64_MAX ((u64)~0ULL) 14*cba1da49SMasahiro Yamada 15*cba1da49SMasahiro Yamada #define ALIGN(x,a) __ALIGN_MASK((x),(typeof(x))(a)-1) 16*cba1da49SMasahiro Yamada #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) 17*cba1da49SMasahiro Yamada 18*cba1da49SMasahiro Yamada #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 19*cba1da49SMasahiro Yamada 20*cba1da49SMasahiro Yamada /* 21*cba1da49SMasahiro Yamada * This looks more complex than it should be. But we need to 22*cba1da49SMasahiro Yamada * get the type for the ~ right in round_down (it needs to be 23*cba1da49SMasahiro Yamada * as wide as the result!), and we want to evaluate the macro 24*cba1da49SMasahiro Yamada * arguments just once each. 25*cba1da49SMasahiro Yamada */ 26*cba1da49SMasahiro Yamada #define __round_mask(x, y) ((__typeof__(x))((y)-1)) 27*cba1da49SMasahiro Yamada #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) 28*cba1da49SMasahiro Yamada #define round_down(x, y) ((x) & ~__round_mask(x, y)) 29*cba1da49SMasahiro Yamada 30*cba1da49SMasahiro Yamada #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 31*cba1da49SMasahiro Yamada 32*cba1da49SMasahiro Yamada #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) 33*cba1da49SMasahiro Yamada 34*cba1da49SMasahiro Yamada /* 35*cba1da49SMasahiro Yamada * Divide positive or negative dividend by positive divisor and round 36*cba1da49SMasahiro Yamada * to closest integer. Result is undefined for negative divisors and 37*cba1da49SMasahiro Yamada * for negative dividends if the divisor variable type is unsigned. 38*cba1da49SMasahiro Yamada */ 39*cba1da49SMasahiro Yamada #define DIV_ROUND_CLOSEST(x, divisor)( \ 40*cba1da49SMasahiro Yamada { \ 41*cba1da49SMasahiro Yamada typeof(x) __x = x; \ 42*cba1da49SMasahiro Yamada typeof(divisor) __d = divisor; \ 43*cba1da49SMasahiro Yamada (((typeof(x))-1) > 0 || \ 44*cba1da49SMasahiro Yamada ((typeof(divisor))-1) > 0 || (__x) > 0) ? \ 45*cba1da49SMasahiro Yamada (((__x) + ((__d) / 2)) / (__d)) : \ 46*cba1da49SMasahiro Yamada (((__x) - ((__d) / 2)) / (__d)); \ 47*cba1da49SMasahiro Yamada } \ 48*cba1da49SMasahiro Yamada ) 49*cba1da49SMasahiro Yamada 50*cba1da49SMasahiro Yamada /* 51*cba1da49SMasahiro Yamada * Multiplies an integer by a fraction, while avoiding unnecessary 52*cba1da49SMasahiro Yamada * overflow or loss of precision. 53*cba1da49SMasahiro Yamada */ 54*cba1da49SMasahiro Yamada #define mult_frac(x, numer, denom)( \ 55*cba1da49SMasahiro Yamada { \ 56*cba1da49SMasahiro Yamada typeof(x) quot = (x) / (denom); \ 57*cba1da49SMasahiro Yamada typeof(x) rem = (x) % (denom); \ 58*cba1da49SMasahiro Yamada (quot * (numer)) + ((rem * (numer)) / (denom)); \ 59*cba1da49SMasahiro Yamada } \ 60*cba1da49SMasahiro Yamada ) 61*cba1da49SMasahiro Yamada 62*cba1da49SMasahiro Yamada /** 63*cba1da49SMasahiro Yamada * upper_32_bits - return bits 32-63 of a number 64*cba1da49SMasahiro Yamada * @n: the number we're accessing 65*cba1da49SMasahiro Yamada * 66*cba1da49SMasahiro Yamada * A basic shift-right of a 64- or 32-bit quantity. Use this to suppress 67*cba1da49SMasahiro Yamada * the "right shift count >= width of type" warning when that quantity is 68*cba1da49SMasahiro Yamada * 32-bits. 69*cba1da49SMasahiro Yamada */ 70*cba1da49SMasahiro Yamada #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16)) 71*cba1da49SMasahiro Yamada 72*cba1da49SMasahiro Yamada /** 73*cba1da49SMasahiro Yamada * lower_32_bits - return bits 0-31 of a number 74*cba1da49SMasahiro Yamada * @n: the number we're accessing 75*cba1da49SMasahiro Yamada */ 76*cba1da49SMasahiro Yamada #define lower_32_bits(n) ((u32)(n)) 77*cba1da49SMasahiro Yamada 78*cba1da49SMasahiro Yamada /* 79*cba1da49SMasahiro Yamada * abs() handles unsigned and signed longs, ints, shorts and chars. For all 80*cba1da49SMasahiro Yamada * input types abs() returns a signed long. 81*cba1da49SMasahiro Yamada * abs() should not be used for 64-bit types (s64, u64, long long) - use abs64() 82*cba1da49SMasahiro Yamada * for those. 83*cba1da49SMasahiro Yamada */ 84*cba1da49SMasahiro Yamada #define abs(x) ({ \ 85*cba1da49SMasahiro Yamada long ret; \ 86*cba1da49SMasahiro Yamada if (sizeof(x) == sizeof(long)) { \ 87*cba1da49SMasahiro Yamada long __x = (x); \ 88*cba1da49SMasahiro Yamada ret = (__x < 0) ? -__x : __x; \ 89*cba1da49SMasahiro Yamada } else { \ 90*cba1da49SMasahiro Yamada int __x = (x); \ 91*cba1da49SMasahiro Yamada ret = (__x < 0) ? -__x : __x; \ 92*cba1da49SMasahiro Yamada } \ 93*cba1da49SMasahiro Yamada ret; \ 94*cba1da49SMasahiro Yamada }) 95*cba1da49SMasahiro Yamada 96*cba1da49SMasahiro Yamada #define abs64(x) ({ \ 97*cba1da49SMasahiro Yamada s64 __x = (x); \ 98*cba1da49SMasahiro Yamada (__x < 0) ? -__x : __x; \ 99*cba1da49SMasahiro Yamada }) 100*cba1da49SMasahiro Yamada 101*cba1da49SMasahiro Yamada /* 102*cba1da49SMasahiro Yamada * min()/max()/clamp() macros that also do 103*cba1da49SMasahiro Yamada * strict type-checking.. See the 104*cba1da49SMasahiro Yamada * "unnecessary" pointer comparison. 105*cba1da49SMasahiro Yamada */ 106*cba1da49SMasahiro Yamada #define min(x, y) ({ \ 107*cba1da49SMasahiro Yamada typeof(x) _min1 = (x); \ 108*cba1da49SMasahiro Yamada typeof(y) _min2 = (y); \ 109*cba1da49SMasahiro Yamada _min1 < _min2 ? _min1 : _min2; }) 110*cba1da49SMasahiro Yamada 111*cba1da49SMasahiro Yamada #define max(x, y) ({ \ 112*cba1da49SMasahiro Yamada typeof(x) _max1 = (x); \ 113*cba1da49SMasahiro Yamada typeof(y) _max2 = (y); \ 114*cba1da49SMasahiro Yamada _max1 > _max2 ? _max1 : _max2; }) 115*cba1da49SMasahiro Yamada 116*cba1da49SMasahiro Yamada #define min3(x, y, z) ({ \ 117*cba1da49SMasahiro Yamada typeof(x) _min1 = (x); \ 118*cba1da49SMasahiro Yamada typeof(y) _min2 = (y); \ 119*cba1da49SMasahiro Yamada typeof(z) _min3 = (z); \ 120*cba1da49SMasahiro Yamada _min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) : \ 121*cba1da49SMasahiro Yamada (_min2 < _min3 ? _min2 : _min3); }) 122*cba1da49SMasahiro Yamada 123*cba1da49SMasahiro Yamada #define max3(x, y, z) ({ \ 124*cba1da49SMasahiro Yamada typeof(x) _max1 = (x); \ 125*cba1da49SMasahiro Yamada typeof(y) _max2 = (y); \ 126*cba1da49SMasahiro Yamada typeof(z) _max3 = (z); \ 127*cba1da49SMasahiro Yamada _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \ 128*cba1da49SMasahiro Yamada (_max2 > _max3 ? _max2 : _max3); }) 129*cba1da49SMasahiro Yamada 130*cba1da49SMasahiro Yamada /* 131*cba1da49SMasahiro Yamada * ..and if you can't take the strict 132*cba1da49SMasahiro Yamada * types, you can specify one yourself. 133*cba1da49SMasahiro Yamada * 134*cba1da49SMasahiro Yamada * Or not use min/max/clamp at all, of course. 135*cba1da49SMasahiro Yamada */ 136*cba1da49SMasahiro Yamada #define min_t(type, x, y) ({ \ 137*cba1da49SMasahiro Yamada type __min1 = (x); \ 138*cba1da49SMasahiro Yamada type __min2 = (y); \ 139*cba1da49SMasahiro Yamada __min1 < __min2 ? __min1: __min2; }) 140*cba1da49SMasahiro Yamada 141*cba1da49SMasahiro Yamada #define max_t(type, x, y) ({ \ 142*cba1da49SMasahiro Yamada type __max1 = (x); \ 143*cba1da49SMasahiro Yamada type __max2 = (y); \ 144*cba1da49SMasahiro Yamada __max1 > __max2 ? __max1: __max2; }) 145*cba1da49SMasahiro Yamada 146*cba1da49SMasahiro Yamada /** 147*cba1da49SMasahiro Yamada * container_of - cast a member of a structure out to the containing structure 148*cba1da49SMasahiro Yamada * @ptr: the pointer to the member. 149*cba1da49SMasahiro Yamada * @type: the type of the container struct this is embedded in. 150*cba1da49SMasahiro Yamada * @member: the name of the member within the struct. 151*cba1da49SMasahiro Yamada * 152*cba1da49SMasahiro Yamada */ 153*cba1da49SMasahiro Yamada #define container_of(ptr, type, member) ({ \ 154*cba1da49SMasahiro Yamada const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 155*cba1da49SMasahiro Yamada (type *)( (char *)__mptr - offsetof(type,member) );}) 156*cba1da49SMasahiro Yamada 157*cba1da49SMasahiro Yamada #endif 158