Branch data Line data Source code
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 : 0 : 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 : 0 : 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_ */