xref: /dpdk/lib/hash/rte_thash_gfni.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
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