| 3550 | } |
| 3551 | |
| 3552 | static void |
| 3553 | ixgbe_hw_rss_hash_set(struct ixgbe_hw *hw, struct rte_eth_rss_conf *rss_conf) |
| 3554 | { |
| 3555 | uint8_t *hash_key; |
| 3556 | uint32_t mrqc; |
| 3557 | uint32_t rss_key; |
| 3558 | uint64_t rss_hf; |
| 3559 | uint16_t i; |
| 3560 | uint32_t mrqc_reg; |
| 3561 | uint32_t rssrk_reg; |
| 3562 | |
| 3563 | mrqc_reg = ixgbe_mrqc_reg_get(hw->mac.type); |
| 3564 | rssrk_reg = ixgbe_rssrk_reg_get(hw->mac.type, 0); |
| 3565 | |
| 3566 | hash_key = rss_conf->rss_key; |
| 3567 | if (hash_key != NULL) { |
| 3568 | /* Fill in RSS hash key */ |
| 3569 | for (i = 0; i < 10; i++) { |
| 3570 | rss_key = hash_key[(i * 4)]; |
| 3571 | rss_key |= hash_key[(i * 4) + 1] << 8; |
| 3572 | rss_key |= hash_key[(i * 4) + 2] << 16; |
| 3573 | rss_key |= hash_key[(i * 4) + 3] << 24; |
| 3574 | IXGBE_WRITE_REG_ARRAY(hw, rssrk_reg, i, rss_key); |
| 3575 | } |
| 3576 | } |
| 3577 | |
| 3578 | /* Set configured hashing protocols in MRQC register */ |
| 3579 | rss_hf = rss_conf->rss_hf; |
| 3580 | mrqc = IXGBE_MRQC_RSSEN; /* Enable RSS */ |
| 3581 | if (rss_hf & RTE_ETH_RSS_IPV4) |
| 3582 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV4; |
| 3583 | if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_TCP) |
| 3584 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV4_TCP; |
| 3585 | if (rss_hf & RTE_ETH_RSS_IPV6) |
| 3586 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6; |
| 3587 | if (rss_hf & RTE_ETH_RSS_IPV6_EX) |
| 3588 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX; |
| 3589 | if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_TCP) |
| 3590 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_TCP; |
| 3591 | if (rss_hf & RTE_ETH_RSS_IPV6_TCP_EX) |
| 3592 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX_TCP; |
| 3593 | if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_UDP) |
| 3594 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV4_UDP; |
| 3595 | if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_UDP) |
| 3596 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_UDP; |
| 3597 | if (rss_hf & RTE_ETH_RSS_IPV6_UDP_EX) |
| 3598 | mrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP; |
| 3599 | IXGBE_WRITE_REG(hw, mrqc_reg, mrqc); |
| 3600 | } |
| 3601 | |
| 3602 | int |
| 3603 | ixgbe_dev_rss_hash_update(struct rte_eth_dev *dev, |
no test coverage detected