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