diff mbox

[API-NEXT,2/3] linux-generic: byte-order: split common part

Message ID 1455719777-15879-3-git-send-email-christophe.milard@linaro.org
State New
Headers show

Commit Message

Christophe Milard Feb. 17, 2016, 2:36 p.m. UTC
The files defining byte order and related functions are split so that
a common part can be re-used for other odp interfaces.

Signed-off-by: Christophe Milard <christophe.milard@linaro.org>
---
 platform/linux-generic/Makefile.am                 |   8 ++
 platform/linux-generic/include/odp/api/byteorder.h |  76 ++----------
 .../include/odp/api/plat/byteorder_types.h         |  55 +++------
 platform/linux-generic/include/odp/com/byteorder.h | 132 +++++++++++++++++++++
 .../include/odp/com/plat/byteorder_types.h         |  71 +++++++++++
 5 files changed, 238 insertions(+), 104 deletions(-)
 create mode 100644 platform/linux-generic/include/odp/com/byteorder.h
 create mode 100644 platform/linux-generic/include/odp/com/plat/byteorder_types.h

Comments

Bill Fischofer Feb. 18, 2016, 1:14 a.m. UTC | #1
This patch fails to apply for me to a fresh clone of api-next:

bill@Ubuntu15:~/linaro/chrisdoc$ git am --reject
~/Mail/Incoming/Christophe/6
Applying: linux-generic: byte-order: split common part
Checking patch platform/linux-generic/Makefile.am...
error: while searching for:
odpdrvinclude_HEADERS = \
 $(srcdir)/include/odp/drv/compiler.h

noinst_HEADERS = \
 ${srcdir}/include/odp_align_internal.h \
 ${srcdir}/include/odp_atomic_internal.h \

error: patch failed: platform/linux-generic/Makefile.am:92
Checking patch platform/linux-generic/include/odp/api/byteorder.h...
Checking patch
platform/linux-generic/include/odp/api/plat/byteorder_types.h...
Checking patch platform/linux-generic/include/odp/com/byteorder.h...
Checking patch
platform/linux-generic/include/odp/com/plat/byteorder_types.h...
Applying patch platform/linux-generic/Makefile.am with 1 reject...
Rejected hunk #1.
Applied patch platform/linux-generic/include/odp/api/byteorder.h cleanly.
Applied patch platform/linux-generic/include/odp/api/plat/byteorder_types.h
cleanly.
Applied patch platform/linux-generic/include/odp/com/byteorder.h cleanly.
Applied patch platform/linux-generic/include/odp/com/plat/byteorder_types.h
cleanly.
Patch failed at 0001 linux-generic: byte-order: split common part
The copy of the patch that failed is found in:
   /home/bill/linaro/chrisdoc/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


On Wed, Feb 17, 2016 at 8:36 AM, Christophe Milard <
christophe.milard@linaro.org> wrote:

> The files defining byte order and related functions are split so that

> a common part can be re-used for other odp interfaces.

>

> Signed-off-by: Christophe Milard <christophe.milard@linaro.org>

> ---

>  platform/linux-generic/Makefile.am                 |   8 ++

>  platform/linux-generic/include/odp/api/byteorder.h |  76 ++----------

>  .../include/odp/api/plat/byteorder_types.h         |  55 +++------

>  platform/linux-generic/include/odp/com/byteorder.h | 132

> +++++++++++++++++++++

>  .../include/odp/com/plat/byteorder_types.h         |  71 +++++++++++

>  5 files changed, 238 insertions(+), 104 deletions(-)

>  create mode 100644 platform/linux-generic/include/odp/com/byteorder.h

>  create mode 100644

> platform/linux-generic/include/odp/com/plat/byteorder_types.h

>

> 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

> --

> 2.1.4

>

>
Christophe Milard Feb. 18, 2016, 7:14 a.m. UTC | #2
Hi Bill,

The cover letter states: "This patch should be applied on top of
[API-NEXT PATCHv2 1/2] drv: adding compiler.h"
"

did you do that?

Many thanks for going through this anyway!! :-)

Christophe.

On 18 February 2016 at 02:14, Bill Fischofer <bill.fischofer@linaro.org>
wrote:

> This patch fails to apply for me to a fresh clone of api-next:

>

> bill@Ubuntu15:~/linaro/chrisdoc$ git am --reject

> ~/Mail/Incoming/Christophe/6

> Applying: linux-generic: byte-order: split common part

> Checking patch platform/linux-generic/Makefile.am...

> error: while searching for:

> odpdrvinclude_HEADERS = \

>  $(srcdir)/include/odp/drv/compiler.h

>

> noinst_HEADERS = \

>  ${srcdir}/include/odp_align_internal.h \

>  ${srcdir}/include/odp_atomic_internal.h \

>

> error: patch failed: platform/linux-generic/Makefile.am:92

> Checking patch platform/linux-generic/include/odp/api/byteorder.h...

> Checking patch

> platform/linux-generic/include/odp/api/plat/byteorder_types.h...

> Checking patch platform/linux-generic/include/odp/com/byteorder.h...

> Checking patch

> platform/linux-generic/include/odp/com/plat/byteorder_types.h...

> Applying patch platform/linux-generic/Makefile.am with 1 reject...

> Rejected hunk #1.

> Applied patch platform/linux-generic/include/odp/api/byteorder.h cleanly.

> Applied patch

> platform/linux-generic/include/odp/api/plat/byteorder_types.h cleanly.

> Applied patch platform/linux-generic/include/odp/com/byteorder.h cleanly.

> Applied patch

> platform/linux-generic/include/odp/com/plat/byteorder_types.h cleanly.

> Patch failed at 0001 linux-generic: byte-order: split common part

> The copy of the patch that failed is found in:

>    /home/bill/linaro/chrisdoc/.git/rebase-apply/patch

> When you have resolved this problem, run "git am --continue".

> If you prefer to skip this patch, run "git am --skip" instead.

> To restore the original branch and stop patching, run "git am --abort".

>

>

> On Wed, Feb 17, 2016 at 8:36 AM, Christophe Milard <

> christophe.milard@linaro.org> wrote:

>

>> The files defining byte order and related functions are split so that

>> a common part can be re-used for other odp interfaces.

>>

>> Signed-off-by: Christophe Milard <christophe.milard@linaro.org>

>> ---

>>  platform/linux-generic/Makefile.am                 |   8 ++

>>  platform/linux-generic/include/odp/api/byteorder.h |  76 ++----------

>>  .../include/odp/api/plat/byteorder_types.h         |  55 +++------

>>  platform/linux-generic/include/odp/com/byteorder.h | 132

>> +++++++++++++++++++++

>>  .../include/odp/com/plat/byteorder_types.h         |  71 +++++++++++

>>  5 files changed, 238 insertions(+), 104 deletions(-)

>>  create mode 100644 platform/linux-generic/include/odp/com/byteorder.h

>>  create mode 100644

>> platform/linux-generic/include/odp/com/plat/byteorder_types.h

>>

>> 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

>> --

>> 2.1.4

>>

>>

>
diff mbox

Patch

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