New upstream version 18.02
[deb_dpdk.git] / lib / librte_net / rte_net_crc.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Intel Corporation
3  */
4
5 #ifndef _RTE_NET_CRC_H_
6 #define _RTE_NET_CRC_H_
7
8 #include <stdint.h>
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 /** CRC polynomials */
15 #define CRC32_ETH_POLYNOMIAL 0x04c11db7UL
16 #define CRC16_CCITT_POLYNOMIAL 0x1021U
17
18 #define CRC_LUT_SIZE 256
19
20 /** CRC types */
21 enum rte_net_crc_type {
22         RTE_NET_CRC16_CCITT = 0,
23         RTE_NET_CRC32_ETH,
24         RTE_NET_CRC_REQS
25 };
26
27 /** CRC compute algorithm */
28 enum rte_net_crc_alg {
29         RTE_NET_CRC_SCALAR = 0,
30         RTE_NET_CRC_SSE42,
31         RTE_NET_CRC_NEON,
32 };
33
34 /**
35  * This API set the CRC computation algorithm (i.e. scalar version,
36  * x86 64-bit sse4.2 intrinsic version, etc.) and internal data
37  * structure.
38  *
39  * @param alg
40  *   This parameter is used to select the CRC implementation version.
41  *   - RTE_NET_CRC_SCALAR
42  *   - RTE_NET_CRC_SSE42 (Use 64-bit SSE4.2 intrinsic)
43  *   - RTE_NET_CRC_NEON (Use ARM Neon intrinsic)
44  */
45 void
46 rte_net_crc_set_alg(enum rte_net_crc_alg alg);
47
48 /**
49  * CRC compute API
50  *
51  * @param data
52  *   Pointer to the packet data for CRC computation
53  * @param data_len
54  *   Data length for CRC computation
55  * @param type
56  *   CRC type (enum rte_net_crc_type)
57  *
58  * @return
59  *   CRC value
60  */
61 uint32_t
62 rte_net_crc_calc(const void *data,
63         uint32_t data_len,
64         enum rte_net_crc_type type);
65
66 #ifdef __cplusplus
67 }
68 #endif
69
70
71 #endif /* _RTE_NET_CRC_H_ */