| 329 | } |
| 330 | |
| 331 | static int ena_set_hash_fields(struct ena_com_dev *ena_dev, uint64_t rss_hf) |
| 332 | { |
| 333 | struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM] = {}; |
| 334 | int rc, i; |
| 335 | |
| 336 | /* Turn on appropriate fields for each requested packet type */ |
| 337 | if ((rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_TCP) != 0) |
| 338 | selected_fields[ENA_ADMIN_RSS_TCP4].fields = |
| 339 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_TCP4, rss_hf); |
| 340 | |
| 341 | if ((rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_UDP) != 0) |
| 342 | selected_fields[ENA_ADMIN_RSS_UDP4].fields = |
| 343 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_UDP4, rss_hf); |
| 344 | |
| 345 | if ((rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_TCP) != 0) |
| 346 | selected_fields[ENA_ADMIN_RSS_TCP6].fields = |
| 347 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_TCP6, rss_hf); |
| 348 | |
| 349 | if ((rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_UDP) != 0) |
| 350 | selected_fields[ENA_ADMIN_RSS_UDP6].fields = |
| 351 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_UDP6, rss_hf); |
| 352 | |
| 353 | if ((rss_hf & RTE_ETH_RSS_IPV4) != 0) |
| 354 | selected_fields[ENA_ADMIN_RSS_IP4].fields = |
| 355 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_IP4, rss_hf); |
| 356 | |
| 357 | if ((rss_hf & RTE_ETH_RSS_IPV6) != 0) |
| 358 | selected_fields[ENA_ADMIN_RSS_IP6].fields = |
| 359 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_IP6, rss_hf); |
| 360 | |
| 361 | if ((rss_hf & RTE_ETH_RSS_FRAG_IPV4) != 0) |
| 362 | selected_fields[ENA_ADMIN_RSS_IP4_FRAG].fields = |
| 363 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_IP4_FRAG, rss_hf); |
| 364 | |
| 365 | if ((rss_hf & RTE_ETH_RSS_L2_PAYLOAD) != 0) |
| 366 | selected_fields[ENA_ADMIN_RSS_NOT_IP].fields = |
| 367 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_NOT_IP, rss_hf); |
| 368 | |
| 369 | if ((rss_hf & RTE_ETH_RSS_IPV6_TCP_EX) != 0) |
| 370 | selected_fields[ENA_ADMIN_RSS_TCP6_EX].fields = |
| 371 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_TCP6_EX, rss_hf); |
| 372 | |
| 373 | if ((rss_hf & RTE_ETH_RSS_IPV6_EX) != 0) |
| 374 | selected_fields[ENA_ADMIN_RSS_IP6_EX].fields = |
| 375 | ena_eth_hf_to_admin_hf(ENA_ADMIN_RSS_IP6_EX, rss_hf); |
| 376 | |
| 377 | /* Try to write them to the device */ |
| 378 | for (i = 0; i < ENA_ADMIN_RSS_PROTO_NUM; i++) { |
| 379 | rc = ena_com_fill_hash_ctrl(ena_dev, |
| 380 | (enum ena_admin_flow_hash_proto)i, |
| 381 | selected_fields[i].fields); |
| 382 | if (unlikely(rc != 0)) { |
| 383 | PMD_DRV_LOG(DEBUG, |
| 384 | "Failed to set ENA HF %d with fields %" PRIu16 "\n", |
| 385 | i, selected_fields[i].fields); |
| 386 | return rc; |
| 387 | } |
| 388 | } |
no test coverage detected