1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2021 Intel Corporation 3 */ 4 5 #ifndef _RTE_THASH_GFNI_H_ 6 #define _RTE_THASH_GFNI_H_ 7 8 #include <rte_compat.h> 9 #include <rte_log.h> 10 11 #ifdef RTE_ARCH_X86 12 13 #include <rte_thash_x86_gfni.h> 14 15 #endif 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /** 22 * @internal 23 * Stubs only used when GFNI is not available. 24 */ 25 __rte_internal 26 uint32_t 27 rte_thash_gfni_stub(const uint64_t *mtrx, const uint8_t *key, int len); 28 29 __rte_internal 30 void 31 rte_thash_gfni_bulk_stub(const uint64_t *mtrx, int len, uint8_t *tuple[], 32 uint32_t val[], uint32_t num); 33 34 #ifndef RTE_THASH_GFNI_DEFINED 35 /** 36 * Calculate Toeplitz hash. 37 * 38 * @param m 39 * Pointer to the matrices generated from the corresponding 40 * RSS hash key using rte_thash_complete_matrix(). 41 * @param tuple 42 * Pointer to the data to be hashed. Data must be in network byte order. 43 * @param len 44 * Length of the data to be hashed. 45 * @return 46 * Calculated Toeplitz hash value. 47 */ 48 static inline uint32_t 49 rte_thash_gfni(const uint64_t *mtrx, const uint8_t *key, int len) 50 { 51 return rte_thash_gfni_stub(mtrx, key, len); 52 } 53 54 /** 55 * Bulk implementation for Toeplitz hash. 56 * 57 * @param m 58 * Pointer to the matrices generated from the corresponding 59 * RSS hash key using rte_thash_complete_matrix(). 60 * @param len 61 * Length of the largest data buffer to be hashed. 62 * @param tuple 63 * Array of the pointers on data to be hashed. 64 * Data must be in network byte order. 65 * @param val 66 * Array of uint32_t where to put calculated Toeplitz hash values 67 * @param num 68 * Number of tuples to hash. 69 */ 70 static inline void 71 rte_thash_gfni_bulk(const uint64_t *mtrx, int len, uint8_t *tuple[], 72 uint32_t val[], uint32_t num) 73 { 74 rte_thash_gfni_bulk_stub(mtrx, len, tuple, val, num); 75 } 76 77 #endif /* RTE_THASH_GFNI_DEFINED */ 78 79 #ifdef __cplusplus 80 } 81 #endif 82 83 #endif /* _RTE_THASH_GFNI_H_ */ 84