+uint64_t bnxt_get_rx_port_offloads(struct bnxt *bp)
+{
+ uint64_t rx_offload_capa;
+
+ rx_offload_capa = RTE_ETH_RX_OFFLOAD_IPV4_CKSUM |
+ RTE_ETH_RX_OFFLOAD_UDP_CKSUM |
+ RTE_ETH_RX_OFFLOAD_TCP_CKSUM |
+ RTE_ETH_RX_OFFLOAD_KEEP_CRC |
+ RTE_ETH_RX_OFFLOAD_VLAN_FILTER |
+ RTE_ETH_RX_OFFLOAD_VLAN_EXTEND |
+ RTE_ETH_RX_OFFLOAD_TCP_LRO |
+ RTE_ETH_RX_OFFLOAD_SCATTER |
+ RTE_ETH_RX_OFFLOAD_RSS_HASH;
+
+ rx_offload_capa |= RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM |
+ RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM;
+
+ if (bp->flags & BNXT_FLAG_PTP_SUPPORTED)
+ rx_offload_capa |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
+ if (bp->vnic_cap_flags & BNXT_VNIC_CAP_VLAN_RX_STRIP)
+ rx_offload_capa |= RTE_ETH_RX_OFFLOAD_VLAN_STRIP;
+
+ return rx_offload_capa;
+}
+
+/* Determine whether the current configuration needs aggregation ring in HW. */
+int bnxt_need_agg_ring(struct rte_eth_dev *eth_dev)
+{
+ /* scattered_rx will be true if OFFLOAD_SCATTER is enabled,
+ * if LRO is enabled, or if the max packet len is greater than the
+ * mbuf data size. So AGG ring will be needed whenever scattered_rx
+ * is set.
+ */
+ return eth_dev->data->scattered_rx ? 1 : 0;
+}
+