| .. | .. |
|---|
| 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 */ |
|---|