1#ifndef _LINUX_MATH64_H
2#define _LINUX_MATH64_H
3
4#include <linux/types.h>
5
6#if BITS_PER_LONG == 64
7
8
9
10
11
12
13
14static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
15{
16 *remainder = dividend % divisor;
17 return dividend / divisor;
18}
19
20
21
22
23static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder)
24{
25 *remainder = dividend % divisor;
26 return dividend / divisor;
27}
28
29
30
31
32static inline u64 div64_u64(u64 dividend, u64 divisor)
33{
34 return dividend / divisor;
35}
36
37#elif BITS_PER_LONG == 32
38
39#ifndef div_u64_rem
40static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
41{
42 *remainder = do_div(dividend, divisor);
43 return dividend;
44}
45#endif
46
47#ifndef div_s64_rem
48extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);
49#endif
50
51#ifndef div64_u64
52extern u64 div64_u64(u64 dividend, u64 divisor);
53#endif
54
55#endif
56
57
58
59
60
61
62
63
64#ifndef div_u64
65static inline u64 div_u64(u64 dividend, u32 divisor)
66{
67 u32 remainder;
68 return div_u64_rem(dividend, divisor, &remainder);
69}
70#endif
71
72
73
74
75#ifndef div_s64
76static inline s64 div_s64(s64 dividend, s32 divisor)
77{
78 s32 remainder;
79 return div_s64_rem(dividend, divisor, &remainder);
80}
81#endif
82
83u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder);
84
85#endif
86