Hi Jasvinder,

> 
> APIs for selecting the architecure specific implementation and computing
> the crc (16-bit and 32-bit CRCs) are added. For CRCs calculation, scalar
> as well as x86 intrinsic(sse4.2) versions are implemented.
> 
> The scalar version is based on generic Look-Up Table(LUT) algorithm,
> while x86 intrinsic version uses carry-less multiplication for
> fast CRC computation.
> 
> Signed-off-by: Jasvinder Singh <jasvinder.si...@intel.com>
> ---
>  lib/librte_net/Makefile            |   3 +
>  lib/librte_net/rte_net_crc.c       | 205 ++++++++++++++++++++++
>  lib/librte_net/rte_net_crc.h       | 104 +++++++++++
>  lib/librte_net/rte_net_crc_sse.h   | 351 
> +++++++++++++++++++++++++++++++++++++
>  lib/librte_net/rte_net_version.map |   8 +
>  5 files changed, 671 insertions(+)
>  create mode 100644 lib/librte_net/rte_net_crc.c
>  create mode 100644 lib/librte_net/rte_net_crc.h
>  create mode 100644 lib/librte_net/rte_net_crc_sse.h
> 
> +
> +/**
> + * CRC compute API
> + *
> + * @param mbuf
> + *  Pointer to the packet mbuf for crc computation
> + * @param data_offset
> + *  Offset to the data in the mbuf
> + * @param data_len
> + *  length of the data to compute the crc on
> + * @param type
> + *  crc type
> + *
> + * @return
> + *  computed crc value
> + */
> +uint32_t
> +rte_net_crc_calc(struct rte_mbuf *mbuf,
> +     uint32_t data_offset,
> +     uint32_t data_len,
> +     enum rte_net_crc_type type);


I think it will probably be convenient to have this API not dependent on mbuf,
something like:
 
uint32_t rte_net_crc_calc(const void *buf, uint32_t data_len, enum 
rte_net_crc_type type);

And if we like to have an extra function that would do similar thing for mbuf,
that's fine too, but I suppose such function would have to handle multi-segment 
case too.
Konstantin

Reply via email to