diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 734e2a4..df3f0b9 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -92,6 +92,14 @@ odpdrvincludedir= $(includedir)/odp/drv
 odpdrvinclude_HEADERS = \
 		  $(srcdir)/include/odp/drv/compiler.h
 
+odpcomincludedir= $(includedir)/odp/com
+odpcominclude_HEADERS = \
+		  $(srcdir)/include/odp/api/byteorder.h
+
+odpcomplatincludedir= $(includedir)/odp/com/plat
+odpcomplatinclude_HEADERS = \
+		  $(srcdir)/include/odp/com/plat/byteorder_types.h
+
 noinst_HEADERS = \
 		  ${srcdir}/include/odp_align_internal.h \
 		  ${srcdir}/include/odp_atomic_internal.h \
diff --git a/platform/linux-generic/include/odp/api/byteorder.h b/platform/linux-generic/include/odp/api/byteorder.h
index c347be0..8cdc5df 100644
--- a/platform/linux-generic/include/odp/api/byteorder.h
+++ b/platform/linux-generic/include/odp/api/byteorder.h
@@ -20,6 +20,7 @@ extern "C" {
 #include <odp/api/plat/byteorder_types.h>
 #include <odp/api/std_types.h>
 #include <odp/api/compiler.h>
+#include <odp/com/byteorder.h>
 
 /** @ingroup odp_compiler_optim
  *  @{
@@ -27,113 +28,62 @@ extern "C" {
 
 static inline uint16_t odp_be_to_cpu_16(odp_u16be_t be16)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return __odp_builtin_bswap16((__odp_force uint16_t)be16);
-#else
-	return (__odp_force uint16_t)be16;
-#endif
+	return _odp_be_to_cpu_16((_odp_u16be_t)be16);
 }
 
 static inline uint32_t odp_be_to_cpu_32(odp_u32be_t be32)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return __builtin_bswap32((__odp_force uint32_t)be32);
-#else
-	return (__odp_force uint32_t)be32;
-#endif
+	return _odp_be_to_cpu_32((_odp_u32be_t)be32);
 }
 
 static inline uint64_t odp_be_to_cpu_64(odp_u64be_t be64)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return __builtin_bswap64((__odp_force uint64_t)be64);
-#else
-	return (__odp_force uint64_t)be64;
-#endif
+	return _odp_be_to_cpu_64((_odp_u64be_t)be64);
 }
 
-
 static inline odp_u16be_t odp_cpu_to_be_16(uint16_t cpu16)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force odp_u16be_t)__odp_builtin_bswap16(cpu16);
-#else
-	return (__odp_force odp_u16be_t)cpu16;
-#endif
+	return (odp_u16be_t)_odp_cpu_to_be_16(cpu16);
 }
 
 static inline odp_u32be_t odp_cpu_to_be_32(uint32_t cpu32)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force odp_u32be_t)__builtin_bswap32(cpu32);
-#else
-	return (__odp_force odp_u32be_t)cpu32;
-#endif
+	return (odp_u32be_t)_odp_cpu_to_be_32(cpu32);
 }
 
 static inline odp_u64be_t odp_cpu_to_be_64(uint64_t cpu64)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force odp_u64be_t)__builtin_bswap64(cpu64);
-#else
-	return (__odp_force odp_u64be_t)cpu64;
-#endif
+	return (odp_u64be_t)_odp_cpu_to_be_64(cpu64);
 }
 
-
 static inline uint16_t odp_le_to_cpu_16(odp_u16le_t le16)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force uint16_t)le16;
-#else
-	return __odp_builtin_bswap16((__odp_force uint16_t)le16);
-#endif
+	return _odp_le_to_cpu_16((_odp_u16le_t)le16);
 }
 
 static inline uint32_t odp_le_to_cpu_32(odp_u32le_t le32)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force uint32_t)le32;
-#else
-	return __builtin_bswap32((__odp_force uint32_t)le32);
-#endif
+	return _odp_le_to_cpu_32((_odp_u32le_t)le32);
 }
 
 static inline uint64_t odp_le_to_cpu_64(odp_u64le_t le64)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force uint64_t)le64;
-#else
-	return __builtin_bswap64((__odp_force uint64_t)le64);
-#endif
+	return _odp_le_to_cpu_64((_odp_u64le_t)le64);
 }
 
-
 static inline odp_u16le_t odp_cpu_to_le_16(uint16_t cpu16)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force odp_u16le_t)cpu16;
-#else
-	return (__odp_force odp_u16le_t)__odp_builtin_bswap16(cpu16);
-#endif
+	return (odp_u16le_t)_odp_cpu_to_le_16(cpu16);
 }
 
 static inline odp_u32le_t odp_cpu_to_le_32(uint32_t cpu32)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force odp_u32le_t)cpu32;
-#else
-	return (__odp_force odp_u32le_t)__builtin_bswap32(cpu32);
-#endif
+	return (odp_u32le_t)_odp_cpu_to_le_32(cpu32);
 }
 
 static inline odp_u64le_t odp_cpu_to_le_64(uint64_t cpu64)
 {
-#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
-	return (__odp_force odp_u64le_t)cpu64;
-#else
-	return (__odp_force odp_u64le_t)__builtin_bswap64(cpu64);
-#endif
+	return (odp_u64le_t)_odp_cpu_to_le_64(cpu64);
 }
 
 /**
diff --git a/platform/linux-generic/include/odp/api/plat/byteorder_types.h b/platform/linux-generic/include/odp/api/plat/byteorder_types.h
index 0a8e409..d5dead7 100644
--- a/platform/linux-generic/include/odp/api/plat/byteorder_types.h
+++ b/platform/linux-generic/include/odp/api/plat/byteorder_types.h
@@ -14,44 +14,19 @@
 #ifndef ODP_BYTEORDER_TYPES_H_
 #define ODP_BYTEORDER_TYPES_H_
 
+#include "odp/com/plat/byteorder_types.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifndef __BYTE_ORDER
-#error __BYTE_ORDER not defined!
-#endif
-
-#ifndef __BIG_ENDIAN
-#error __BIG_ENDIAN not defined!
-#endif
-
-#ifndef __LITTLE_ENDIAN
-#error __LITTLE_ENDIAN not defined!
-#endif
-
-
-/* for use with type checkers such as sparse */
-#ifdef __CHECKER__
-/** @internal bitwise attribute */
-#define __odp_bitwise	__attribute__((bitwise))
-/** @internal force attribute */
-#define __odp_force     __attribute__((force))
-#else
-/** @internal bitwise attribute */
-#define __odp_bitwise
-/** @internal force attribute */
-#define __odp_force
-#endif
-
-
 /** @addtogroup odp_compiler_optim
  *  @{
  */
 
-#define ODP_BIG_ENDIAN    __BIG_ENDIAN
+#define ODP_BIG_ENDIAN    _ODP_BIG_ENDIAN
 
-#define ODP_LITTLE_ENDIAN __LITTLE_ENDIAN
+#define ODP_LITTLE_ENDIAN _ODP_LITTLE_ENDIAN
 
 #ifdef __BIG_ENDIAN_BITFIELD
 #define ODP_BIG_ENDIAN_BITFIELD
@@ -61,23 +36,21 @@ extern "C" {
 #define ODP_LITTLE_ENDIAN_BITFIELD
 #endif
 
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define ODP_BYTE_ORDER ODP_LITTLE_ENDIAN
-#elif __BYTE_ORDER == __BIG_ENDIAN
-#define ODP_BYTE_ORDER ODP_BIG_ENDIAN
+#ifdef _ODP_BYTE_ORDER
+#define ODP_BYTE_ORDER _ODP_BYTE_ORDER
 #endif
 
-typedef uint16_t __odp_bitwise	odp_u16le_t;
-typedef uint16_t __odp_bitwise	odp_u16be_t;
+typedef _odp_u16le_t odp_u16le_t;
+typedef _odp_u16be_t odp_u16be_t;
 
-typedef uint32_t __odp_bitwise	odp_u32le_t;
-typedef uint32_t __odp_bitwise	odp_u32be_t;
+typedef _odp_u32le_t odp_u32le_t;
+typedef _odp_u32be_t odp_u32be_t;
 
-typedef uint64_t __odp_bitwise	odp_u64le_t;
-typedef uint64_t __odp_bitwise	odp_u64be_t;
+typedef _odp_u64le_t odp_u64le_t;
+typedef _odp_u64be_t odp_u64be_t;
 
-typedef uint16_t __odp_bitwise  odp_u16sum_t;
-typedef uint32_t __odp_bitwise  odp_u32sum_t;
+typedef _odp_u16sum_t odp_u16sum_t;
+typedef _odp_u32sum_t odp_u32sum_t;
 
 /**
  * @}
diff --git a/platform/linux-generic/include/odp/com/byteorder.h b/platform/linux-generic/include/odp/com/byteorder.h
new file mode 100644
index 0000000..7bd838f
--- /dev/null
+++ b/platform/linux-generic/include/odp/com/byteorder.h
@@ -0,0 +1,132 @@
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP byteorder, things common to API and DRV interfaces
+ */
+
+#ifndef ODPCOM_PLAT_BYTEORDER_H_
+#define ODPCOM_PLAT_BYTEORDER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline uint16_t _odp_be_to_cpu_16(_odp_u16be_t be16)
+{
+#if _ODP_BYTE_ORDER == _ODP_LITTLE_ENDIAN
+	return __odp_builtin_bswap16((__odp_force uint16_t)be16);
+#else
+	return (__odp_force uint16_t)be16;
+#endif
+}
+
+static inline uint32_t _odp_be_to_cpu_32(_odp_u32be_t be32)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return __builtin_bswap32((__odp_force uint32_t)be32);
+#else
+	return (__odp_force uint32_t)be32;
+#endif
+}
+
+static inline uint64_t _odp_be_to_cpu_64(_odp_u64be_t be64)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return __builtin_bswap64((__odp_force uint64_t)be64);
+#else
+	return (__odp_force uint64_t)be64;
+#endif
+}
+
+static inline _odp_u16be_t _odp_cpu_to_be_16(uint16_t cpu16)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force _odp_u16be_t)__odp_builtin_bswap16(cpu16);
+#else
+	return (__odp_force _odp_u16be_t)cpu16;
+#endif
+}
+
+static inline _odp_u32be_t _odp_cpu_to_be_32(uint32_t cpu32)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force _odp_u32be_t)__builtin_bswap32(cpu32);
+#else
+	return (__odp_force _odp_u32be_t)cpu32;
+#endif
+}
+
+static inline odp_u64be_t _odp_cpu_to_be_64(uint64_t cpu64)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force _odp_u64be_t)__builtin_bswap64(cpu64);
+#else
+	return (__odp_force _odp_u64be_t)cpu64;
+#endif
+}
+
+static inline uint16_t _odp_le_to_cpu_16(_odp_u16le_t le16)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force uint16_t)le16;
+#else
+	return __odp_builtin_bswap16((__odp_force uint16_t)le16);
+#endif
+}
+
+static inline uint32_t _odp_le_to_cpu_32(_odp_u32le_t le32)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force uint32_t)le32;
+#else
+	return __builtin_bswap32((__odp_force uint32_t)le32);
+#endif
+}
+
+static inline uint64_t _odp_le_to_cpu_64(_odp_u64le_t le64)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force uint64_t)le64;
+#else
+	return __builtin_bswap64((__odp_force uint64_t)le64);
+#endif
+}
+
+static inline _odp_u16le_t _odp_cpu_to_le_16(uint16_t cpu16)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force odp_u16le_t)cpu16;
+#else
+	return (__odp_force odp_u16le_t)__odp_builtin_bswap16(cpu16);
+#endif
+}
+
+static inline _odp_u32le_t _odp_cpu_to_le_32(uint32_t cpu32)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force odp_u32le_t)cpu32;
+#else
+	return (__odp_force odp_u32le_t)__builtin_bswap32(cpu32);
+#endif
+}
+
+static inline _odp_u64le_t _odp_cpu_to_le_64(uint64_t cpu64)
+{
+#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
+	return (__odp_force odp_u64le_t)cpu64;
+#else
+	return (__odp_force odp_u64le_t)__builtin_bswap64(cpu64);
+#endif
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/platform/linux-generic/include/odp/com/plat/byteorder_types.h b/platform/linux-generic/include/odp/com/plat/byteorder_types.h
new file mode 100644
index 0000000..6828d28
--- /dev/null
+++ b/platform/linux-generic/include/odp/com/plat/byteorder_types.h
@@ -0,0 +1,71 @@
+/* Copyright (c) 2016, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP byteorder, things common to API and DRV interfaces
+ */
+
+#ifndef ODPCOM_BYTEORDER_TYPES_H_
+#define ODPCOM_BYTEORDER_TYPES_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __BYTE_ORDER
+#error __BYTE_ORDER not defined!
+#endif
+
+#ifndef __BIG_ENDIAN
+#error __BIG_ENDIAN not defined!
+#endif
+
+#ifndef __LITTLE_ENDIAN
+#error __LITTLE_ENDIAN not defined!
+#endif
+
+/* for use with type checkers such as sparse */
+#ifdef __CHECKER__
+/** @internal bitwise attribute */
+#define __odp_bitwise	__attribute__((bitwise))
+/** @internal force attribute */
+#define __odp_force     __attribute__((force))
+#else
+/** @internal bitwise attribute */
+#define __odp_bitwise
+/** @internal force attribute */
+#define __odp_force
+#endif
+
+#define _ODP_BIG_ENDIAN    __BIG_ENDIAN
+
+#define _ODP_LITTLE_ENDIAN __LITTLE_ENDIAN
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define _ODP_BYTE_ORDER _ODP_LITTLE_ENDIAN
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define _ODP_BYTE_ORDER _ODP_BIG_ENDIAN
+#endif
+
+typedef uint16_t __odp_bitwise	_odp_u16le_t;
+typedef uint16_t __odp_bitwise	_odp_u16be_t;
+
+typedef uint32_t __odp_bitwise	_odp_u32le_t;
+typedef uint32_t __odp_bitwise	_odp_u32be_t;
+
+typedef uint64_t __odp_bitwise	_odp_u64le_t;
+typedef uint64_t __odp_bitwise	_odp_u64be_t;
+
+typedef uint16_t __odp_bitwise  _odp_u16sum_t;
+typedef uint32_t __odp_bitwise  _odp_u32sum_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
