* Generic implementation. Can be used with original rss_key * @param input_tuple * Pointer to input tuple * @param input_len * Length of input_tuple in 4-bytes chunks * @param rss_key * Pointer to RSS hash key. * @return * Calculated hash value. */
| 173 | * Calculated hash value. |
| 174 | */ |
| 175 | static inline uint32_t |
| 176 | rte_softrss(uint32_t *input_tuple, uint32_t input_len, |
| 177 | const uint8_t *rss_key) |
| 178 | { |
| 179 | uint32_t i, j, map, ret = 0; |
| 180 | |
| 181 | for (j = 0; j < input_len; j++) { |
| 182 | for (map = input_tuple[j]; map; map &= (map - 1)) { |
| 183 | i = rte_bsf32(map); |
| 184 | ret ^= rte_cpu_to_be_32(((const uint32_t *)rss_key)[j]) << (31 - i) | |
| 185 | (uint32_t)((uint64_t)(rte_cpu_to_be_32(((const uint32_t *)rss_key)[j + 1])) >> |
| 186 | (i + 1)); |
| 187 | } |
| 188 | } |
| 189 | return ret; |
| 190 | } |
| 191 | |
| 192 | /** |
| 193 | * Optimized implementation. |