Message ID | 1455719777-15879-3-git-send-email-christophe.milard@linaro.org |
---|---|
State | New |
Headers | show |
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 > >
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 --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
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