MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sfc_rx_check_mode

Function sfc_rx_check_mode

dpdk/drivers/net/sfc/sfc_rx.c:1666–1709  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1664}
1665
1666static int
1667sfc_rx_check_mode(struct sfc_adapter *sa, struct rte_eth_rxmode *rxmode)
1668{
1669 struct sfc_adapter_shared * const sas = sfc_sa2shared(sa);
1670 uint64_t offloads_supported = sfc_rx_get_dev_offload_caps(sa) |
1671 sfc_rx_get_queue_offload_caps(sa);
1672 struct sfc_rss *rss = &sas->rss;
1673 int rc = 0;
1674
1675 switch (rxmode->mq_mode) {
1676 case RTE_ETH_MQ_RX_NONE:
1677 /* No special checks are required */
1678 break;
1679 case RTE_ETH_MQ_RX_RSS:
1680 if (rss->context_type == EFX_RX_SCALE_UNAVAILABLE) {
1681 sfc_err(sa, "RSS is not available");
1682 rc = EINVAL;
1683 }
1684 break;
1685 default:
1686 sfc_err(sa, "Rx multi-queue mode %u not supported",
1687 rxmode->mq_mode);
1688 rc = EINVAL;
1689 }
1690
1691 /*
1692 * Requested offloads are validated against supported by ethdev,
1693 * so unsupported offloads cannot be added as the result of
1694 * below check.
1695 */
1696 if ((rxmode->offloads & RTE_ETH_RX_OFFLOAD_CHECKSUM) !=
1697 (offloads_supported & RTE_ETH_RX_OFFLOAD_CHECKSUM)) {
1698 sfc_warn(sa, "Rx checksum offloads cannot be disabled - always on (IPv4/TCP/UDP)");
1699 rxmode->offloads |= RTE_ETH_RX_OFFLOAD_CHECKSUM;
1700 }
1701
1702 if ((offloads_supported & RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM) &&
1703 (~rxmode->offloads & RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM)) {
1704 sfc_warn(sa, "Rx outer IPv4 checksum offload cannot be disabled - always on");
1705 rxmode->offloads |= RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM;
1706 }
1707
1708 return rc;
1709}
1710
1711/**
1712 * Destroy excess queues that are no longer needed after reconfiguration

Callers 1

sfc_rx_configureFunction · 0.85

Calls 3

sfc_sa2sharedFunction · 0.85

Tested by

no test coverage detected