00001 00007 #ifndef __QOS_UL_OTHER_H__ 00008 #define __QOS_UL_OTHER_H__ 00009 00010 #include <linux/types.h> 00011 00029 #ifndef __KERNEL__ 00030 #define ul_shl_div(num, SHF, den) ((__u32) ((((__u64) ((__u32)(num))) << (SHF)) / (__u32)(den))) 00031 #else 00032 #define ul_shl_div(num, SHF, den) ({ \ 00033 __u64 result = ((__u64)(num)) << (SHF); \ 00034 do_div(result, (den)); \ 00035 result; \ 00036 }) 00037 #endif 00038 00055 #ifndef __KERNEL__ 00056 #define ul_mul_div(x, num, den) ((__u32) (((__u64) (x)) * (num) / (__u32)(den))) 00057 #else 00058 #define ul_mul_div(x, num, den) ({ \ 00059 __u64 result = ((__u64)(x)) * (num); \ 00060 do_div(result, (den)); \ 00061 result; \ 00062 }) 00063 #endif 00064 00084 #define ul_mul_shr(x, y, SHF) ((__u32) ((((__u64) (x)) * (y)) >> (SHF))) 00085 00092 #ifndef __KERNEL__ 00093 #define ul_shl_ceil(num, SHF, den) ({ \ 00094 __u64 _n = (__u64) (num); \ 00095 __u32 _d = (__u32) (den); \ 00096 __u32 _r = (__u32) ( ( (_n << (SHF)) + _d - 1) / _d ); \ 00097 _r; \ 00098 }) 00099 #else 00100 #define ul_shl_ceil(num, SHF, den) ({ \ 00101 __u64 __den = (__u64) (den); \ 00102 __u64 __result = ((__u64)(num)) << (SHF); \ 00103 __result += __den - 1; \ 00104 do_div(__result, __den); \ 00105 __result; \ 00106 }) 00107 #endif 00108 00109 #endif