@@ -703,8 +703,10 @@ static int idpf_cfg_netdev(struct idpf_vport *vport)
703
703
{
704
704
struct idpf_adapter * adapter = vport -> adapter ;
705
705
struct idpf_vport_config * vport_config ;
706
+ netdev_features_t other_offloads = 0 ;
707
+ netdev_features_t csum_offloads = 0 ;
708
+ netdev_features_t tso_offloads = 0 ;
706
709
netdev_features_t dflt_features ;
707
- netdev_features_t offloads = 0 ;
708
710
struct idpf_netdev_priv * np ;
709
711
struct net_device * netdev ;
710
712
u16 idx = vport -> idx ;
@@ -766,53 +768,32 @@ static int idpf_cfg_netdev(struct idpf_vport *vport)
766
768
767
769
if (idpf_is_cap_ena_all (adapter , IDPF_RSS_CAPS , IDPF_CAP_RSS ))
768
770
dflt_features |= NETIF_F_RXHASH ;
769
- if (idpf_is_cap_ena_all (adapter , IDPF_CSUM_CAPS , IDPF_CAP_RX_CSUM_L4V4 ))
770
- dflt_features |= NETIF_F_IP_CSUM ;
771
- if (idpf_is_cap_ena_all (adapter , IDPF_CSUM_CAPS , IDPF_CAP_RX_CSUM_L4V6 ))
772
- dflt_features |= NETIF_F_IPV6_CSUM ;
771
+ if (idpf_is_cap_ena_all (adapter , IDPF_CSUM_CAPS , IDPF_CAP_TX_CSUM_L4V4 ))
772
+ csum_offloads |= NETIF_F_IP_CSUM ;
773
+ if (idpf_is_cap_ena_all (adapter , IDPF_CSUM_CAPS , IDPF_CAP_TX_CSUM_L4V6 ))
774
+ csum_offloads |= NETIF_F_IPV6_CSUM ;
773
775
if (idpf_is_cap_ena (adapter , IDPF_CSUM_CAPS , IDPF_CAP_RX_CSUM ))
774
- dflt_features |= NETIF_F_RXCSUM ;
775
- if (idpf_is_cap_ena_all (adapter , IDPF_CSUM_CAPS , IDPF_CAP_SCTP_CSUM ))
776
- dflt_features |= NETIF_F_SCTP_CRC ;
776
+ csum_offloads |= NETIF_F_RXCSUM ;
777
+ if (idpf_is_cap_ena_all (adapter , IDPF_CSUM_CAPS , IDPF_CAP_TX_SCTP_CSUM ))
778
+ csum_offloads |= NETIF_F_SCTP_CRC ;
777
779
778
780
if (idpf_is_cap_ena (adapter , IDPF_SEG_CAPS , VIRTCHNL2_CAP_SEG_IPV4_TCP ))
779
- dflt_features |= NETIF_F_TSO ;
781
+ tso_offloads |= NETIF_F_TSO ;
780
782
if (idpf_is_cap_ena (adapter , IDPF_SEG_CAPS , VIRTCHNL2_CAP_SEG_IPV6_TCP ))
781
- dflt_features |= NETIF_F_TSO6 ;
783
+ tso_offloads |= NETIF_F_TSO6 ;
782
784
if (idpf_is_cap_ena_all (adapter , IDPF_SEG_CAPS ,
783
785
VIRTCHNL2_CAP_SEG_IPV4_UDP |
784
786
VIRTCHNL2_CAP_SEG_IPV6_UDP ))
785
- dflt_features |= NETIF_F_GSO_UDP_L4 ;
787
+ tso_offloads |= NETIF_F_GSO_UDP_L4 ;
786
788
if (idpf_is_cap_ena_all (adapter , IDPF_RSC_CAPS , IDPF_CAP_RSC ))
787
- offloads |= NETIF_F_GRO_HW ;
788
- /* advertise to stack only if offloads for encapsulated packets is
789
- * supported
790
- */
791
- if (idpf_is_cap_ena (vport -> adapter , IDPF_SEG_CAPS ,
792
- VIRTCHNL2_CAP_SEG_TX_SINGLE_TUNNEL )) {
793
- offloads |= NETIF_F_GSO_UDP_TUNNEL |
794
- NETIF_F_GSO_GRE |
795
- NETIF_F_GSO_GRE_CSUM |
796
- NETIF_F_GSO_PARTIAL |
797
- NETIF_F_GSO_UDP_TUNNEL_CSUM |
798
- NETIF_F_GSO_IPXIP4 |
799
- NETIF_F_GSO_IPXIP6 |
800
- 0 ;
801
-
802
- if (!idpf_is_cap_ena_all (vport -> adapter , IDPF_CSUM_CAPS ,
803
- IDPF_CAP_TUNNEL_TX_CSUM ))
804
- netdev -> gso_partial_features |=
805
- NETIF_F_GSO_UDP_TUNNEL_CSUM ;
806
-
807
- netdev -> gso_partial_features |= NETIF_F_GSO_GRE_CSUM ;
808
- offloads |= NETIF_F_TSO_MANGLEID ;
809
- }
789
+ other_offloads |= NETIF_F_GRO_HW ;
810
790
if (idpf_is_cap_ena (adapter , IDPF_OTHER_CAPS , VIRTCHNL2_CAP_LOOPBACK ))
811
- offloads |= NETIF_F_LOOPBACK ;
791
+ other_offloads |= NETIF_F_LOOPBACK ;
812
792
813
- netdev -> features |= dflt_features ;
814
- netdev -> hw_features |= dflt_features | offloads ;
815
- netdev -> hw_enc_features |= dflt_features | offloads ;
793
+ netdev -> features |= dflt_features | csum_offloads | tso_offloads ;
794
+ netdev -> hw_features |= netdev -> features | other_offloads ;
795
+ netdev -> vlan_features |= netdev -> features | other_offloads ;
796
+ netdev -> hw_enc_features |= dflt_features | other_offloads ;
816
797
idpf_set_ethtool_ops (netdev );
817
798
netif_set_affinity_auto (netdev );
818
799
SET_NETDEV_DEV (netdev , & adapter -> pdev -> dev );
0 commit comments