diff mbox

[KEYSTONE2,03/15] linux-ks2: align: move internal macros to a public place

Message ID 1426001473-14618-4-git-send-email-taras.kondratiuk@linaro.org
State New
Headers show

Commit Message

Taras Kondratiuk March 10, 2015, 3:31 p.m. UTC
Move macros to be able to access them from installed ODP headers.

Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org>
Signed-off-by: Taras Kondratiuk <taras@ti.com>
---
 platform/linux-keystone2/Makefile.am              |   1 +
 platform/linux-keystone2/include/odp/plat/align.h | 109 ++++++++++++++++++++++
 2 files changed, 110 insertions(+)
 create mode 100644 platform/linux-keystone2/include/odp/plat/align.h
diff mbox

Patch

diff --git a/platform/linux-keystone2/Makefile.am b/platform/linux-keystone2/Makefile.am
index d17ea45..505cb97 100644
--- a/platform/linux-keystone2/Makefile.am
+++ b/platform/linux-keystone2/Makefile.am
@@ -58,6 +58,7 @@  odpinclude_HEADERS = \
 
 odpplatincludedir = $(includedir)/odp/plat
 odpplatinclude_HEADERS = \
+		  $(srcdir)/include/odp/plat/align.h \
 		  $(srcdir)/include/odp/plat/debug.h \
 		  $(srcdir)/include/odp/plat/mcsdk_tune.h \
 		  $(srcdir)/include/odp/plat/state.h \
diff --git a/platform/linux-keystone2/include/odp/plat/align.h b/platform/linux-keystone2/include/odp/plat/align.h
new file mode 100644
index 0000000..55271a5
--- /dev/null
+++ b/platform/linux-keystone2/include/odp/plat/align.h
@@ -0,0 +1,109 @@ 
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:	BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP internal alignments
+ */
+
+#ifndef ODP_ALIGN_INTERNAL_H_
+#define ODP_ALIGN_INTERNAL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @addtogroup odp_compiler_optim
+ *  @{
+ */
+
+/*
+ * Round up
+ */
+
+/**
+ * @internal
+ * Round up 'x' to alignment 'align'
+ */
+#define ODP_ALIGN_ROUNDUP(x, align)\
+	((align) * (((x) + align - 1) / (align)))
+
+/**
+ * @internal
+ * Round up pointer 'x' to alignment 'align'
+ */
+#define ODP_ALIGN_ROUNDUP_PTR(x, align)\
+	((void *)ODP_ALIGN_ROUNDUP((uintptr_t)(x), (uintptr_t)(align)))
+
+/**
+ * @internal
+ * Round up 'x' to cache line size alignment
+ */
+#define ODP_CACHE_LINE_SIZE_ROUNDUP(x)\
+	ODP_ALIGN_ROUNDUP(x, ODP_CACHE_LINE_SIZE)
+
+/**
+ * @internal
+ * Round up 'x' to page size alignment
+ */
+#define ODP_PAGE_SIZE_ROUNDUP(x)\
+	ODP_ALIGN_ROUNDUP(x, ODP_PAGE_SIZE)
+
+/*
+ * Round down
+ */
+
+/**
+ * @internal
+ * Round down 'x' to 'align' alignment, which is a power of two
+ */
+#define ODP_ALIGN_ROUNDDOWN_POWER_2(x, align)\
+	((x) & (~((align) - 1)))
+/**
+ * @internal
+ * Round down 'x' to cache line size alignment
+ */
+#define ODP_CACHE_LINE_SIZE_ROUNDDOWN(x)\
+	ODP_ALIGN_ROUNDDOWN_POWER_2(x, ODP_CACHE_LINE_SIZE)
+
+/*
+ * Check align
+ */
+
+/**
+ * @internal
+ * Check if pointer 'x' is aligned to 'align', which is a power of two
+ */
+#define ODP_ALIGNED_CHECK_POWER_2(x, align)\
+	((((uintptr_t)(x)) & (((uintptr_t)(align))-1)) == 0)
+
+/**
+ * @internal
+ * Check if pointer 'x' is aligned to 'align', which is a power of two
+ */
+#define ODP_ALIGNED_CHECK(x, align)\
+	(((uintptr_t)(x)) % (align) == 0)
+
+/**
+ * @internal
+ * Check if value is a power of two
+ */
+#define ODP_VAL_IS_POWER_2(x) ((((x)-1) & (x)) == 0)
+
+
+#define ODP_CONTAINEROF(ptr, type, member) \
+	(type *)((uintptr_t)(ptr) - ODP_OFFSETOF(type, member))
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif