xref: /dpdk/lib/net/rte_net_crc.h (revision 99a2dd955fba6e4cc23b77d590a033650ced9c45)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017-2020 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 types */
15 enum rte_net_crc_type {
16 	RTE_NET_CRC16_CCITT = 0,
17 	RTE_NET_CRC32_ETH,
18 	RTE_NET_CRC_REQS
19 };
20 
21 /** CRC compute algorithm */
22 enum rte_net_crc_alg {
23 	RTE_NET_CRC_SCALAR = 0,
24 	RTE_NET_CRC_SSE42,
25 	RTE_NET_CRC_NEON,
26 	RTE_NET_CRC_AVX512,
27 };
28 
29 /**
30  * This API set the CRC computation algorithm (i.e. scalar version,
31  * x86 64-bit sse4.2 intrinsic version, etc.) and internal data
32  * structure.
33  *
34  * @param alg
35  *   This parameter is used to select the CRC implementation version.
36  *   - RTE_NET_CRC_SCALAR
37  *   - RTE_NET_CRC_SSE42 (Use 64-bit SSE4.2 intrinsic)
38  *   - RTE_NET_CRC_NEON (Use ARM Neon intrinsic)
39  *   - RTE_NET_CRC_AVX512 (Use 512-bit AVX intrinsic)
40  */
41 void
42 rte_net_crc_set_alg(enum rte_net_crc_alg alg);
43 
44 /**
45  * CRC compute API
46  *
47  * @param data
48  *   Pointer to the packet data for CRC computation
49  * @param data_len
50  *   Data length for CRC computation
51  * @param type
52  *   CRC type (enum rte_net_crc_type)
53  *
54  * @return
55  *   CRC value
56  */
57 uint32_t
58 rte_net_crc_calc(const void *data,
59 	uint32_t data_len,
60 	enum rte_net_crc_type type);
61 
62 #ifdef __cplusplus
63 }
64 #endif
65 
66 
67 #endif /* _RTE_NET_CRC_H_ */
68