summaryrefslogtreecommitdiff
path: root/src/commonlib
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2016-09-02 23:14:54 +0200
committerMartin Roth <martinroth@google.com>2016-09-07 20:52:42 +0200
commit29fc9bb855cb878aee263cd1fe110e3bb3e98c80 (patch)
treeed7851f88b58378aa54afa56e755375da3684647 /src/commonlib
parent614ffc60cfd667dae63492d14af2abd50ce91b3e (diff)
downloadcoreboot-29fc9bb855cb878aee263cd1fe110e3bb3e98c80.tar.xz
commonlib: move DIV_ROUND macros from nvidia/tegra
DIV_ROUND_CLOSEST and DIV_ROUND_UP are useful macros for other architectures. This patch moves them from soc/nvidia/tegra/types.h to commonlib/include/commonlib/helpers.h . Change-Id: I54521d9b197934cef8e352f9a5c4823015d85f01 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/16415 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/commonlib')
-rw-r--r--src/commonlib/include/commonlib/helpers.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/commonlib/include/commonlib/helpers.h b/src/commonlib/include/commonlib/helpers.h
index 0318e447d1..1be1fbb709 100644
--- a/src/commonlib/include/commonlib/helpers.h
+++ b/src/commonlib/include/commonlib/helpers.h
@@ -34,6 +34,22 @@
#define ABS(a) (((a) < 0) ? (-(a)) : (a))
#define CEIL_DIV(a, b) (((a) + (b) - 1) / (b))
#define IS_POWER_OF_2(x) (((x) & ((x) - 1)) == 0)
+#define DIV_ROUND_UP(x, y) (((x) + (y) - 1) / (y))
+/*
+ * Divide positive or negative dividend by positive divisor and round
+ * to closest integer. Result is undefined for negative divisors and
+ * for negative dividends if the divisor variable type is unsigned.
+ */
+#define DIV_ROUND_CLOSEST(x, divisor)( \
+{ \
+ typeof(x) __x = x; \
+ typeof(divisor) __d = divisor; \
+ (((typeof(x))-1) > 0 || \
+ ((typeof(divisor))-1) > 0 || (__x) > 0) ? \
+ (((__x) + ((__d) / 2)) / (__d)) : \
+ (((__x) - ((__d) / 2)) / (__d)); \
+} \
+)
/* Standard units. */
#define KiB (1<<10)