X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fhash%2Frte_thash.h;h=c11ca0d5b8d4acea621a5cd60eb90647ba2dc7c1;hb=bef7c9ff285a90373f3f409e2c21d1263ed0f548;hp=76109fcdb0e6bbb49a2e89449781c799e866d0a3;hpb=99a2dd955fba6e4cc23b77d590a033650ced9c45;p=dpdk.git diff --git a/lib/hash/rte_thash.h b/lib/hash/rte_thash.h index 76109fcdb0..c11ca0d5b8 100644 --- a/lib/hash/rte_thash.h +++ b/lib/hash/rte_thash.h @@ -9,25 +9,22 @@ /** * @file * - * toeplitz hash functions. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** * Software implementation of the Toeplitz hash function used by RSS. * Can be used either for packet distribution on single queue NIC * or for simulating of RSS computation on specific NIC (for example * after GRE header decapsulating) */ +#ifdef __cplusplus +extern "C" { +#endif + #include #include #include #include #include +#include #if defined(RTE_ARCH_X86) || defined(__ARM_NEON) #include @@ -223,6 +220,40 @@ rte_softrss_be(uint32_t *input_tuple, uint32_t input_len, return ret; } +/** + * Indicates if GFNI implementations of the Toeplitz hash are supported. + * + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * @return + * 1 if GFNI is supported + * 0 otherwise + */ +__rte_experimental +int +rte_thash_gfni_supported(void); + +/** + * Converts Toeplitz hash key (RSS key) into matrixes required + * for GFNI implementation + * + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * @param matrixes + * pointer to the memory where matrices will be written. + * Note: the size of this memory must be equal to size * 8 + * @param rss_key + * pointer to the Toeplitz hash key + * @param size + * Size of the rss_key in bytes. + */ +__rte_experimental +void +rte_thash_complete_matrix(uint64_t *matrixes, const uint8_t *rss_key, + int size); + /** @internal Logarithm of minimum size of the RSS ReTa */ #define RTE_THASH_RETA_SZ_MIN 2U /** @internal Logarithm of maximum size of the RSS ReTa */ @@ -387,6 +418,25 @@ __rte_experimental const uint8_t * rte_thash_get_key(struct rte_thash_ctx *ctx); +/** + * Get a pointer to the toeplitz hash matrices contained in the context. + * These matrices could be used with fast toeplitz hash implementation if + * CPU supports GFNI. + * Matrices changes after each addition of a helper. + * + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * @param ctx + * Thash context + * @return + * A pointer to the toeplitz hash key matrices on success + * NULL if GFNI is not supported. + */ +__rte_experimental +const uint64_t * +rte_thash_get_gfni_matrices(struct rte_thash_ctx *ctx); + /** * Function prototype for the rte_thash_adjust_tuple * to check if adjusted tuple could be used.