On Wed, Feb 1, 2017 at 7:14 AM, Mike Holmes <mike.hol...@linaro.org> wrote:
> Signed-off-by: Mike Holmes <mike.hol...@linaro.org>
> ---
>  helper/Makefile.am                         |  1 +
>  helper/chksum.c                            |  4 ++
>  helper/include/odp/helper/chksum.h         | 59 ++++++-----------------
>  helper/include/odp/helper/chksum_inlines.h | 77 
> ++++++++++++++++++++++++++++++
>  4 files changed, 96 insertions(+), 45 deletions(-)
>  create mode 100644 helper/include/odp/helper/chksum_inlines.h
>
> diff --git a/helper/Makefile.am b/helper/Makefile.am
> index 140f2f4..6820532 100644
> --- a/helper/Makefile.am
> +++ b/helper/Makefile.am
> @@ -15,6 +15,7 @@ AM_LDFLAGS += -version-number '$(ODPHELPER_LIBSO_VERSION)'
>  helperincludedir = $(includedir)/odp/helper/
>  helperinclude_HEADERS = \
>                   $(srcdir)/include/odp/helper/chksum.h\
> +                 $(srcdir)/include/odp/helper/chksum_inlines.h\
>                   $(srcdir)/include/odp/helper/chksum_types.h\
>                   $(srcdir)/include/odp/helper/eth.h\
>                   $(srcdir)/include/odp/helper/icmp.h\
> diff --git a/helper/chksum.c b/helper/chksum.c
> index f740618..c809bc0 100644
> --- a/helper/chksum.c
> +++ b/helper/chksum.c
> @@ -12,6 +12,10 @@
>  #include <stddef.h>
>  #include <stdbool.h>
>
> +#if ODP_ABI_COMPAT == 1
> +#include <odp/helper/chksum_inlines.h>
> +#endif

I agree that using ODP_ABI_COMPAT here makes sense, but this seems to
contradict having defined ODP_HELPER_ABI_COMPAT in Part 1.

> +
>  /* The following union type is used to "view" an ordered set of bytes (either
>   * 2 or 4) as 1 or 2 16-bit quantities - using host endian order. */
>  typedef union {
> diff --git a/helper/include/odp/helper/chksum.h 
> b/helper/include/odp/helper/chksum.h
> index 94c9305..ddca0e1 100644
> --- a/helper/include/odp/helper/chksum.h
> +++ b/helper/include/odp/helper/chksum.h
> @@ -24,6 +24,7 @@ extern "C" {
>   */
>
>  /**
> + * @fn odph_chksum(void *buffer, int len)
>   * Checksum
>   *
>   * @param buffer calculate chksum for buffer
> @@ -31,24 +32,6 @@ extern "C" {
>   *
>   * @return checksum value in host cpu order
>   */
> -static inline odp_u16sum_t odph_chksum(void *buffer, int len)
> -{
> -       uint16_t *buf = (uint16_t *)buffer;
> -       uint32_t sum = 0;
> -       uint16_t result;
> -
> -       for (sum = 0; len > 1; len -= 2)
> -               sum += *buf++;
> -
> -       if (len == 1)
> -               sum += *(unsigned char *)buf;
> -
> -       sum = (sum >> 16) + (sum & 0xFFFF);
> -       sum += (sum >> 16);
> -       result = ~sum;
> -
> -       return  (__odp_force odp_u16sum_t) result;
> -}
>
>  /**
>   * General Purpose TCP/UDP checksum function
> @@ -94,6 +77,7 @@ int odph_udp_tcp_chksum(odp_packet_t     odp_pkt,
>                         uint16_t        *chksum_ptr);
>
>  /**
> + * @fn odph_tcp_chksum_set(odp_packet_t odp_pkt)
>   * Generate TCP checksum
>   *
>   * This function supports TCP over either IPv4 or IPV6 - including handling
> @@ -112,15 +96,9 @@ int odph_udp_tcp_chksum(odp_packet_t     odp_pkt,
>   *                     be over IPv4 or IPv6.
>   * @return             0 upon success and < 0 upon failure.
>   */
> -static inline int odph_tcp_chksum_set(odp_packet_t odp_pkt)
> -{
> -       if (!odp_packet_has_tcp(odp_pkt))
> -               return -1;
> -
> -       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_GENERATE, NULL);
> -}
>
>  /**
> + * @fn odph_udp_chksum_set(odp_packet_t odp_pkt)
>   * Generate UDP checksum
>   *
>   * This function supports UDP over either IPv4 or IPV6 - including handling
> @@ -139,15 +117,9 @@ static inline int odph_tcp_chksum_set(odp_packet_t 
> odp_pkt)
>   *                     be over IPv4 or IPv6.
>   * @return             0 upon success and < 0 upon failure.
>   */
> -static inline int odph_udp_chksum_set(odp_packet_t odp_pkt)
> -{
> -       if (!odp_packet_has_udp(odp_pkt))
> -               return -1;
> -
> -       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_GENERATE, NULL);
> -}
>
>  /**
> + * @fn odph_tcp_chksum_verify(odp_packet_t odp_pkt)
>   * Verify TCP checksum
>   *
>   * This function supports TCP over either IPv4 or IPV6 - including handling
> @@ -167,15 +139,9 @@ static inline int odph_udp_chksum_set(odp_packet_t 
> odp_pkt)
>   *                     the incoming chksum field is correct, else returns 2
>   *                     when the chksum field is incorrect or 0.
>   */
> -static inline int odph_tcp_chksum_verify(odp_packet_t odp_pkt)
> -{
> -       if (!odp_packet_has_tcp(odp_pkt))
> -               return -1;
> -
> -       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_VERIFY, NULL);
> -}
>
>  /**
> + * @fn odph_udp_chksum_verify(odp_packet_t odp_pkt)
>   * Verify UDP checksum
>   *
>   * This function supports UDP over either IPv4 or IPV6 - including handling
> @@ -197,13 +163,16 @@ static inline int odph_tcp_chksum_verify(odp_packet_t 
> odp_pkt)
>   *                     if the incoming chksum field is correct, else returns 
> 2
>   *                     when the chksum field is incorrect.
>   */
> -static inline int odph_udp_chksum_verify(odp_packet_t odp_pkt)
> -{
> -       if (!odp_packet_has_udp(odp_pkt))
> -               return -1;
>
> -       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_VERIFY, NULL);
> -}
> +#if ODP_HELPER_ABI_COMPAT == 0

Above uses ODP_ABI_COMPAT, here it's ODP_HELPER_ABI_COMPAT. The former
seems sufficient.

> +#include <odp/helper/chksum_inlines.h>
> +#else
> +odp_u16sum_t odph_chksum(void *buffer, int len);
> +int odph_tcp_chksum_set(odp_packet_t odp_pkt);
> +int odph_udp_chksum_set(odp_packet_t odp_pkt);
> +int odph_tcp_chksum_verify(odp_packet_t odp_pkt);
> +int odph_udp_chksum_verify(odp_packet_t odp_pkt);
> +#endif
>
>  /**
>   * @}
> diff --git a/helper/include/odp/helper/chksum_inlines.h 
> b/helper/include/odp/helper/chksum_inlines.h
> new file mode 100644
> index 0000000..c022061
> --- /dev/null
> +++ b/helper/include/odp/helper/chksum_inlines.h
> @@ -0,0 +1,77 @@
> +/* Copyright (c) 2017, Linaro Limited
> + * All rights reserved.
> + *
> + * SPDX-License-Identifier:     BSD-3-Clause
> + */
> +
> +/**
> + * @file
> + *
> + * ODP checksum inlne helper
> + */
> +#ifndef ODPH_CHKSUM_INLINE_H_
> +#define ODPH_CHKSUM_INLINE_H_
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#include <odp/helper/static_inline.h>
> +#include <odp/helper/chksum.h>
> +
> +_HELPER_STATIC odp_u16sum_t odph_chksum(void *buffer, int len)

If we're going to use ODP_ABI_COMPAT then _STATIC would seem
sufficient here rather than needing a separate _HELPER_STATIC macro
that does the same thing.

> +{
> +       uint16_t *buf = (uint16_t *)buffer;
> +       uint32_t sum = 0;
> +       uint16_t result;
> +
> +       for (sum = 0; len > 1; len -= 2)
> +               sum += *buf++;
> +
> +       if (len == 1)
> +               sum += *(unsigned char *)buf;
> +
> +       sum = (sum >> 16) + (sum & 0xFFFF);
> +       sum += (sum >> 16);
> +       result = ~sum;
> +
> +       return  (__odp_force odp_u16sum_t) result;
> +}
> +
> +_HELPER_STATIC int odph_tcp_chksum_set(odp_packet_t odp_pkt)
> +{
> +       if (!odp_packet_has_tcp(odp_pkt))
> +               return -1;
> +
> +       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_GENERATE, NULL);
> +}
> +
> +_HELPER_STATIC int odph_udp_chksum_set(odp_packet_t odp_pkt)
> +{
> +       if (!odp_packet_has_udp(odp_pkt))
> +               return -1;
> +
> +       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_GENERATE, NULL);
> +}
> +
> +_HELPER_STATIC int odph_tcp_chksum_verify(odp_packet_t odp_pkt)
> +{
> +       if (!odp_packet_has_tcp(odp_pkt))
> +               return -1;
> +
> +       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_VERIFY, NULL);
> +}
> +
> +_HELPER_STATIC int odph_udp_chksum_verify(odp_packet_t odp_pkt)
> +{
> +       if (!odp_packet_has_udp(odp_pkt))
> +               return -1;
> +
> +       return odph_udp_tcp_chksum(odp_pkt, ODPH_CHKSUM_VERIFY, NULL);
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif
> --
> 2.9.3
>

Reply via email to