@@ -954,56 +954,73 @@ static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
954
954
return 0 ;
955
955
}
956
956
957
- static int hclgevf_get_rss_tuple (struct hnae3_handle * handle ,
958
- struct ethtool_rxnfc * nfc )
957
+ static int hclgevf_get_rss_tuple_by_flow_type (struct hclgevf_dev * hdev ,
958
+ int flow_type , u8 * tuple_sets )
959
959
{
960
- struct hclgevf_dev * hdev = hclgevf_ae_get_hdev (handle );
961
- struct hclgevf_rss_cfg * rss_cfg = & hdev -> rss_cfg ;
962
- u8 tuple_sets ;
963
-
964
- if (hdev -> ae_dev -> dev_version < HNAE3_DEVICE_VERSION_V2 )
965
- return - EOPNOTSUPP ;
966
-
967
- nfc -> data = 0 ;
968
-
969
- switch (nfc -> flow_type ) {
960
+ switch (flow_type ) {
970
961
case TCP_V4_FLOW :
971
- tuple_sets = rss_cfg -> rss_tuple_sets .ipv4_tcp_en ;
962
+ * tuple_sets = hdev -> rss_cfg . rss_tuple_sets .ipv4_tcp_en ;
972
963
break ;
973
964
case UDP_V4_FLOW :
974
- tuple_sets = rss_cfg -> rss_tuple_sets .ipv4_udp_en ;
965
+ * tuple_sets = hdev -> rss_cfg . rss_tuple_sets .ipv4_udp_en ;
975
966
break ;
976
967
case TCP_V6_FLOW :
977
- tuple_sets = rss_cfg -> rss_tuple_sets .ipv6_tcp_en ;
968
+ * tuple_sets = hdev -> rss_cfg . rss_tuple_sets .ipv6_tcp_en ;
978
969
break ;
979
970
case UDP_V6_FLOW :
980
- tuple_sets = rss_cfg -> rss_tuple_sets .ipv6_udp_en ;
971
+ * tuple_sets = hdev -> rss_cfg . rss_tuple_sets .ipv6_udp_en ;
981
972
break ;
982
973
case SCTP_V4_FLOW :
983
- tuple_sets = rss_cfg -> rss_tuple_sets .ipv4_sctp_en ;
974
+ * tuple_sets = hdev -> rss_cfg . rss_tuple_sets .ipv4_sctp_en ;
984
975
break ;
985
976
case SCTP_V6_FLOW :
986
- tuple_sets = rss_cfg -> rss_tuple_sets .ipv6_sctp_en ;
977
+ * tuple_sets = hdev -> rss_cfg . rss_tuple_sets .ipv6_sctp_en ;
987
978
break ;
988
979
case IPV4_FLOW :
989
980
case IPV6_FLOW :
990
- tuple_sets = HCLGEVF_S_IP_BIT | HCLGEVF_D_IP_BIT ;
981
+ * tuple_sets = HCLGEVF_S_IP_BIT | HCLGEVF_D_IP_BIT ;
991
982
break ;
992
983
default :
993
984
return - EINVAL ;
994
985
}
995
986
996
- if (!tuple_sets )
997
- return 0 ;
987
+ return 0 ;
988
+ }
989
+
990
+ static u64 hclgevf_convert_rss_tuple (u8 tuple_sets )
991
+ {
992
+ u64 tuple_data = 0 ;
998
993
999
994
if (tuple_sets & HCLGEVF_D_PORT_BIT )
1000
- nfc -> data |= RXH_L4_B_2_3 ;
995
+ tuple_data |= RXH_L4_B_2_3 ;
1001
996
if (tuple_sets & HCLGEVF_S_PORT_BIT )
1002
- nfc -> data |= RXH_L4_B_0_1 ;
997
+ tuple_data |= RXH_L4_B_0_1 ;
1003
998
if (tuple_sets & HCLGEVF_D_IP_BIT )
1004
- nfc -> data |= RXH_IP_DST ;
999
+ tuple_data |= RXH_IP_DST ;
1005
1000
if (tuple_sets & HCLGEVF_S_IP_BIT )
1006
- nfc -> data |= RXH_IP_SRC ;
1001
+ tuple_data |= RXH_IP_SRC ;
1002
+
1003
+ return tuple_data ;
1004
+ }
1005
+
1006
+ static int hclgevf_get_rss_tuple (struct hnae3_handle * handle ,
1007
+ struct ethtool_rxnfc * nfc )
1008
+ {
1009
+ struct hclgevf_dev * hdev = hclgevf_ae_get_hdev (handle );
1010
+ u8 tuple_sets ;
1011
+ int ret ;
1012
+
1013
+ if (hdev -> ae_dev -> dev_version < HNAE3_DEVICE_VERSION_V2 )
1014
+ return - EOPNOTSUPP ;
1015
+
1016
+ nfc -> data = 0 ;
1017
+
1018
+ ret = hclgevf_get_rss_tuple_by_flow_type (hdev , nfc -> flow_type ,
1019
+ & tuple_sets );
1020
+ if (ret || !tuple_sets )
1021
+ return ret ;
1022
+
1023
+ nfc -> data = hclgevf_convert_rss_tuple (tuple_sets );
1007
1024
1008
1025
return 0 ;
1009
1026
}
0 commit comments