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