.. | .. |
---|
28 | 28 | return dividend / divisor; |
---|
29 | 29 | } |
---|
30 | 30 | |
---|
31 | | -/** |
---|
| 31 | +/* |
---|
32 | 32 | * div_s64_rem - signed 64bit divide with 32bit divisor with remainder |
---|
33 | 33 | * @dividend: signed 64bit dividend |
---|
34 | 34 | * @divisor: signed 32bit divisor |
---|
.. | .. |
---|
42 | 42 | return dividend / divisor; |
---|
43 | 43 | } |
---|
44 | 44 | |
---|
45 | | -/** |
---|
| 45 | +/* |
---|
46 | 46 | * div64_u64_rem - unsigned 64bit divide with 64bit divisor and remainder |
---|
47 | 47 | * @dividend: unsigned 64bit dividend |
---|
48 | 48 | * @divisor: unsigned 64bit divisor |
---|
.. | .. |
---|
56 | 56 | return dividend / divisor; |
---|
57 | 57 | } |
---|
58 | 58 | |
---|
59 | | -/** |
---|
| 59 | +/* |
---|
60 | 60 | * div64_u64 - unsigned 64bit divide with 64bit divisor |
---|
61 | 61 | * @dividend: unsigned 64bit dividend |
---|
62 | 62 | * @divisor: unsigned 64bit divisor |
---|
.. | .. |
---|
68 | 68 | return dividend / divisor; |
---|
69 | 69 | } |
---|
70 | 70 | |
---|
71 | | -/** |
---|
| 71 | +/* |
---|
72 | 72 | * div64_s64 - signed 64bit divide with 64bit divisor |
---|
73 | 73 | * @dividend: signed 64bit dividend |
---|
74 | 74 | * @divisor: signed 64bit divisor |
---|
.. | .. |
---|
263 | 263 | } |
---|
264 | 264 | #endif /* mul_u64_u32_div */ |
---|
265 | 265 | |
---|
| 266 | +u64 mul_u64_u64_div_u64(u64 a, u64 mul, u64 div); |
---|
| 267 | + |
---|
266 | 268 | #define DIV64_U64_ROUND_UP(ll, d) \ |
---|
267 | 269 | ({ u64 _tmp = (d); div64_u64((ll) + _tmp - 1, _tmp); }) |
---|
268 | 270 | |
---|
| 271 | +/** |
---|
| 272 | + * DIV64_U64_ROUND_CLOSEST - unsigned 64bit divide with 64bit divisor rounded to nearest integer |
---|
| 273 | + * @dividend: unsigned 64bit dividend |
---|
| 274 | + * @divisor: unsigned 64bit divisor |
---|
| 275 | + * |
---|
| 276 | + * Divide unsigned 64bit dividend by unsigned 64bit divisor |
---|
| 277 | + * and round to closest integer. |
---|
| 278 | + * |
---|
| 279 | + * Return: dividend / divisor rounded to nearest integer |
---|
| 280 | + */ |
---|
| 281 | +#define DIV64_U64_ROUND_CLOSEST(dividend, divisor) \ |
---|
| 282 | + ({ u64 _tmp = (divisor); div64_u64((dividend) + _tmp / 2, _tmp); }) |
---|
| 283 | + |
---|
| 284 | +/* |
---|
| 285 | + * DIV_S64_ROUND_CLOSEST - signed 64bit divide with 32bit divisor rounded to nearest integer |
---|
| 286 | + * @dividend: signed 64bit dividend |
---|
| 287 | + * @divisor: signed 32bit divisor |
---|
| 288 | + * |
---|
| 289 | + * Divide signed 64bit dividend by signed 32bit divisor |
---|
| 290 | + * and round to closest integer. |
---|
| 291 | + * |
---|
| 292 | + * Return: dividend / divisor rounded to nearest integer |
---|
| 293 | + */ |
---|
| 294 | +#define DIV_S64_ROUND_CLOSEST(dividend, divisor)( \ |
---|
| 295 | +{ \ |
---|
| 296 | + s64 __x = (dividend); \ |
---|
| 297 | + s32 __d = (divisor); \ |
---|
| 298 | + ((__x > 0) == (__d > 0)) ? \ |
---|
| 299 | + div_s64((__x + (__d / 2)), __d) : \ |
---|
| 300 | + div_s64((__x - (__d / 2)), __d); \ |
---|
| 301 | +} \ |
---|
| 302 | +) |
---|
269 | 303 | #endif /* _LINUX_MATH64_H */ |
---|