@@ -4719,11 +4719,6 @@ static int hclge_put_vector(struct hnae3_handle *handle, int vector)
47194719 return 0 ;
47204720}
47214721
4722- static u32 hclge_get_rss_key_size (struct hnae3_handle * handle )
4723- {
4724- return HCLGE_RSS_KEY_SIZE ;
4725- }
4726-
47274722static int hclge_set_rss_algo_key (struct hclge_dev * hdev ,
47284723 const u8 hfunc , const u8 * key )
47294724{
@@ -4837,22 +4832,6 @@ static int hclge_set_rss_tc_mode(struct hclge_dev *hdev, u16 *tc_valid,
48374832 return ret ;
48384833}
48394834
4840- static void hclge_get_rss_type (struct hclge_vport * vport )
4841- {
4842- if (vport -> rss_tuple_sets .ipv4_tcp_en ||
4843- vport -> rss_tuple_sets .ipv4_udp_en ||
4844- vport -> rss_tuple_sets .ipv4_sctp_en ||
4845- vport -> rss_tuple_sets .ipv6_tcp_en ||
4846- vport -> rss_tuple_sets .ipv6_udp_en ||
4847- vport -> rss_tuple_sets .ipv6_sctp_en )
4848- vport -> nic .kinfo .rss_type = PKT_HASH_TYPE_L4 ;
4849- else if (vport -> rss_tuple_sets .ipv4_fragment_en ||
4850- vport -> rss_tuple_sets .ipv6_fragment_en )
4851- vport -> nic .kinfo .rss_type = PKT_HASH_TYPE_L3 ;
4852- else
4853- vport -> nic .kinfo .rss_type = PKT_HASH_TYPE_NONE ;
4854- }
4855-
48564835static int hclge_set_rss_input_tuple (struct hclge_dev * hdev )
48574836{
48584837 struct hclge_rss_input_tuple_cmd * req ;
@@ -4864,15 +4843,16 @@ static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
48644843 req = (struct hclge_rss_input_tuple_cmd * )desc .data ;
48654844
48664845 /* Get the tuple cfg from pf */
4867- req -> ipv4_tcp_en = hdev -> vport [0 ].rss_tuple_sets .ipv4_tcp_en ;
4868- req -> ipv4_udp_en = hdev -> vport [0 ].rss_tuple_sets .ipv4_udp_en ;
4869- req -> ipv4_sctp_en = hdev -> vport [0 ].rss_tuple_sets .ipv4_sctp_en ;
4870- req -> ipv4_fragment_en = hdev -> vport [0 ].rss_tuple_sets .ipv4_fragment_en ;
4871- req -> ipv6_tcp_en = hdev -> vport [0 ].rss_tuple_sets .ipv6_tcp_en ;
4872- req -> ipv6_udp_en = hdev -> vport [0 ].rss_tuple_sets .ipv6_udp_en ;
4873- req -> ipv6_sctp_en = hdev -> vport [0 ].rss_tuple_sets .ipv6_sctp_en ;
4874- req -> ipv6_fragment_en = hdev -> vport [0 ].rss_tuple_sets .ipv6_fragment_en ;
4875- hclge_get_rss_type (& hdev -> vport [0 ]);
4846+ req -> ipv4_tcp_en = hdev -> rss_cfg .rss_tuple_sets .ipv4_tcp_en ;
4847+ req -> ipv4_udp_en = hdev -> rss_cfg .rss_tuple_sets .ipv4_udp_en ;
4848+ req -> ipv4_sctp_en = hdev -> rss_cfg .rss_tuple_sets .ipv4_sctp_en ;
4849+ req -> ipv4_fragment_en = hdev -> rss_cfg .rss_tuple_sets .ipv4_fragment_en ;
4850+ req -> ipv6_tcp_en = hdev -> rss_cfg .rss_tuple_sets .ipv6_tcp_en ;
4851+ req -> ipv6_udp_en = hdev -> rss_cfg .rss_tuple_sets .ipv6_udp_en ;
4852+ req -> ipv6_sctp_en = hdev -> rss_cfg .rss_tuple_sets .ipv6_sctp_en ;
4853+ req -> ipv6_fragment_en = hdev -> rss_cfg .rss_tuple_sets .ipv6_fragment_en ;
4854+ hclge_comm_get_rss_type (& hdev -> vport [0 ].nic ,
4855+ & hdev -> rss_cfg .rss_tuple_sets );
48764856 ret = hclge_cmd_send (& hdev -> hw , & desc , 1 );
48774857 if (ret )
48784858 dev_err (& hdev -> pdev -> dev ,
@@ -4885,11 +4865,12 @@ static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir,
48854865{
48864866 struct hnae3_ae_dev * ae_dev = pci_get_drvdata (handle -> pdev );
48874867 struct hclge_vport * vport = hclge_get_vport (handle );
4868+ struct hclge_comm_rss_cfg * rss_cfg = & vport -> back -> rss_cfg ;
48884869 int i ;
48894870
48904871 /* Get hash algorithm */
48914872 if (hfunc ) {
4892- switch (vport -> rss_algo ) {
4873+ switch (rss_cfg -> rss_algo ) {
48934874 case HCLGE_RSS_HASH_ALGO_TOEPLITZ :
48944875 * hfunc = ETH_RSS_HASH_TOP ;
48954876 break ;
@@ -4904,34 +4885,16 @@ static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir,
49044885
49054886 /* Get the RSS Key required by the user */
49064887 if (key )
4907- memcpy (key , vport -> rss_hash_key , HCLGE_RSS_KEY_SIZE );
4888+ memcpy (key , rss_cfg -> rss_hash_key , HCLGE_RSS_KEY_SIZE );
49084889
49094890 /* Get indirect table */
49104891 if (indir )
49114892 for (i = 0 ; i < ae_dev -> dev_specs .rss_ind_tbl_size ; i ++ )
4912- indir [i ] = vport -> rss_indirection_tbl [i ];
4893+ indir [i ] = rss_cfg -> rss_indirection_tbl [i ];
49134894
49144895 return 0 ;
49154896}
49164897
4917- static int hclge_parse_rss_hfunc (struct hclge_vport * vport , const u8 hfunc ,
4918- u8 * hash_algo )
4919- {
4920- switch (hfunc ) {
4921- case ETH_RSS_HASH_TOP :
4922- * hash_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ ;
4923- return 0 ;
4924- case ETH_RSS_HASH_XOR :
4925- * hash_algo = HCLGE_RSS_HASH_ALGO_SIMPLE ;
4926- return 0 ;
4927- case ETH_RSS_HASH_NO_CHANGE :
4928- * hash_algo = vport -> rss_algo ;
4929- return 0 ;
4930- default :
4931- return - EINVAL ;
4932- }
4933- }
4934-
49354898static int hclge_set_rss (struct hnae3_handle * handle , const u32 * indir ,
49364899 const u8 * key , const u8 hfunc )
49374900{
@@ -4941,7 +4904,7 @@ static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
49414904 u8 hash_algo ;
49424905 int ret , i ;
49434906
4944- ret = hclge_parse_rss_hfunc ( vport , hfunc , & hash_algo );
4907+ ret = hclge_comm_parse_rss_hfunc ( & hdev -> rss_cfg , hfunc , & hash_algo );
49454908 if (ret ) {
49464909 dev_err (& hdev -> pdev -> dev , "invalid hfunc type %u\n" , hfunc );
49474910 return ret ;
@@ -4954,21 +4917,22 @@ static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
49544917 return ret ;
49554918
49564919 /* Update the shadow RSS key with user specified qids */
4957- memcpy (vport -> rss_hash_key , key , HCLGE_RSS_KEY_SIZE );
4920+ memcpy (hdev -> rss_cfg . rss_hash_key , key , HCLGE_RSS_KEY_SIZE );
49584921 } else {
49594922 ret = hclge_set_rss_algo_key (hdev , hash_algo ,
4960- vport -> rss_hash_key );
4923+ hdev -> rss_cfg . rss_hash_key );
49614924 if (ret )
49624925 return ret ;
49634926 }
4964- vport -> rss_algo = hash_algo ;
4927+ hdev -> rss_cfg . rss_algo = hash_algo ;
49654928
49664929 /* Update the shadow RSS table with user specified qids */
49674930 for (i = 0 ; i < ae_dev -> dev_specs .rss_ind_tbl_size ; i ++ )
4968- vport -> rss_indirection_tbl [i ] = indir [i ];
4931+ hdev -> rss_cfg . rss_indirection_tbl [i ] = indir [i ];
49694932
49704933 /* Update the hardware */
4971- return hclge_set_rss_indir_table (hdev , vport -> rss_indirection_tbl );
4934+ return hclge_set_rss_indir_table (hdev ,
4935+ hdev -> rss_cfg .rss_indirection_tbl );
49724936}
49734937
49744938static u8 hclge_get_rss_hash_bits (struct ethtool_rxnfc * nfc )
@@ -5001,16 +4965,17 @@ static int hclge_init_rss_tuple_cmd(struct hclge_vport *vport,
50014965 struct hclge_rss_input_tuple_cmd * req )
50024966{
50034967 struct hclge_dev * hdev = vport -> back ;
4968+ struct hclge_comm_rss_cfg * rss_cfg = & hdev -> rss_cfg ;
50044969 u8 tuple_sets ;
50054970
5006- req -> ipv4_tcp_en = vport -> rss_tuple_sets .ipv4_tcp_en ;
5007- req -> ipv4_udp_en = vport -> rss_tuple_sets .ipv4_udp_en ;
5008- req -> ipv4_sctp_en = vport -> rss_tuple_sets .ipv4_sctp_en ;
5009- req -> ipv4_fragment_en = vport -> rss_tuple_sets .ipv4_fragment_en ;
5010- req -> ipv6_tcp_en = vport -> rss_tuple_sets .ipv6_tcp_en ;
5011- req -> ipv6_udp_en = vport -> rss_tuple_sets .ipv6_udp_en ;
5012- req -> ipv6_sctp_en = vport -> rss_tuple_sets .ipv6_sctp_en ;
5013- req -> ipv6_fragment_en = vport -> rss_tuple_sets .ipv6_fragment_en ;
4971+ req -> ipv4_tcp_en = rss_cfg -> rss_tuple_sets .ipv4_tcp_en ;
4972+ req -> ipv4_udp_en = rss_cfg -> rss_tuple_sets .ipv4_udp_en ;
4973+ req -> ipv4_sctp_en = rss_cfg -> rss_tuple_sets .ipv4_sctp_en ;
4974+ req -> ipv4_fragment_en = rss_cfg -> rss_tuple_sets .ipv4_fragment_en ;
4975+ req -> ipv6_tcp_en = rss_cfg -> rss_tuple_sets .ipv6_tcp_en ;
4976+ req -> ipv6_udp_en = rss_cfg -> rss_tuple_sets .ipv6_udp_en ;
4977+ req -> ipv6_sctp_en = rss_cfg -> rss_tuple_sets .ipv6_sctp_en ;
4978+ req -> ipv6_fragment_en = rss_cfg -> rss_tuple_sets .ipv6_fragment_en ;
50144979
50154980 tuple_sets = hclge_get_rss_hash_bits (nfc );
50164981 switch (nfc -> flow_type ) {
@@ -5079,48 +5044,15 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
50795044 return ret ;
50805045 }
50815046
5082- vport -> rss_tuple_sets .ipv4_tcp_en = req -> ipv4_tcp_en ;
5083- vport -> rss_tuple_sets .ipv4_udp_en = req -> ipv4_udp_en ;
5084- vport -> rss_tuple_sets .ipv4_sctp_en = req -> ipv4_sctp_en ;
5085- vport -> rss_tuple_sets .ipv4_fragment_en = req -> ipv4_fragment_en ;
5086- vport -> rss_tuple_sets .ipv6_tcp_en = req -> ipv6_tcp_en ;
5087- vport -> rss_tuple_sets .ipv6_udp_en = req -> ipv6_udp_en ;
5088- vport -> rss_tuple_sets .ipv6_sctp_en = req -> ipv6_sctp_en ;
5089- vport -> rss_tuple_sets .ipv6_fragment_en = req -> ipv6_fragment_en ;
5090- hclge_get_rss_type (vport );
5091- return 0 ;
5092- }
5093-
5094- static int hclge_get_vport_rss_tuple (struct hclge_vport * vport , int flow_type ,
5095- u8 * tuple_sets )
5096- {
5097- switch (flow_type ) {
5098- case TCP_V4_FLOW :
5099- * tuple_sets = vport -> rss_tuple_sets .ipv4_tcp_en ;
5100- break ;
5101- case UDP_V4_FLOW :
5102- * tuple_sets = vport -> rss_tuple_sets .ipv4_udp_en ;
5103- break ;
5104- case TCP_V6_FLOW :
5105- * tuple_sets = vport -> rss_tuple_sets .ipv6_tcp_en ;
5106- break ;
5107- case UDP_V6_FLOW :
5108- * tuple_sets = vport -> rss_tuple_sets .ipv6_udp_en ;
5109- break ;
5110- case SCTP_V4_FLOW :
5111- * tuple_sets = vport -> rss_tuple_sets .ipv4_sctp_en ;
5112- break ;
5113- case SCTP_V6_FLOW :
5114- * tuple_sets = vport -> rss_tuple_sets .ipv6_sctp_en ;
5115- break ;
5116- case IPV4_FLOW :
5117- case IPV6_FLOW :
5118- * tuple_sets = HCLGE_S_IP_BIT | HCLGE_D_IP_BIT ;
5119- break ;
5120- default :
5121- return - EINVAL ;
5122- }
5123-
5047+ hdev -> rss_cfg .rss_tuple_sets .ipv4_tcp_en = req -> ipv4_tcp_en ;
5048+ hdev -> rss_cfg .rss_tuple_sets .ipv4_udp_en = req -> ipv4_udp_en ;
5049+ hdev -> rss_cfg .rss_tuple_sets .ipv4_sctp_en = req -> ipv4_sctp_en ;
5050+ hdev -> rss_cfg .rss_tuple_sets .ipv4_fragment_en = req -> ipv4_fragment_en ;
5051+ hdev -> rss_cfg .rss_tuple_sets .ipv6_tcp_en = req -> ipv6_tcp_en ;
5052+ hdev -> rss_cfg .rss_tuple_sets .ipv6_udp_en = req -> ipv6_udp_en ;
5053+ hdev -> rss_cfg .rss_tuple_sets .ipv6_sctp_en = req -> ipv6_sctp_en ;
5054+ hdev -> rss_cfg .rss_tuple_sets .ipv6_fragment_en = req -> ipv6_fragment_en ;
5055+ hclge_comm_get_rss_type (& vport -> nic , & hdev -> rss_cfg .rss_tuple_sets );
51245056 return 0 ;
51255057}
51265058
@@ -5149,7 +5081,8 @@ static int hclge_get_rss_tuple(struct hnae3_handle *handle,
51495081
51505082 nfc -> data = 0 ;
51515083
5152- ret = hclge_get_vport_rss_tuple (vport , nfc -> flow_type , & tuple_sets );
5084+ ret = hclge_comm_get_rss_tuple (& vport -> back -> rss_cfg , nfc -> flow_type ,
5085+ & tuple_sets );
51535086 if (ret || !tuple_sets )
51545087 return ret ;
51555088
@@ -5211,10 +5144,9 @@ static int hclge_init_rss_tc_mode(struct hclge_dev *hdev)
52115144
52125145int hclge_rss_init_hw (struct hclge_dev * hdev )
52135146{
5214- struct hclge_vport * vport = hdev -> vport ;
5215- u16 * rss_indir = vport [0 ].rss_indirection_tbl ;
5216- u8 * key = vport [0 ].rss_hash_key ;
5217- u8 hfunc = vport [0 ].rss_algo ;
5147+ u16 * rss_indir = hdev -> rss_cfg .rss_indirection_tbl ;
5148+ u8 * key = hdev -> rss_cfg .rss_hash_key ;
5149+ u8 hfunc = hdev -> rss_cfg .rss_algo ;
52185150 int ret ;
52195151
52205152 ret = hclge_set_rss_indir_table (hdev , rss_indir );
@@ -5232,48 +5164,39 @@ int hclge_rss_init_hw(struct hclge_dev *hdev)
52325164 return hclge_init_rss_tc_mode (hdev );
52335165}
52345166
5235- void hclge_rss_indir_init_cfg (struct hclge_dev * hdev )
5236- {
5237- struct hclge_vport * vport = & hdev -> vport [0 ];
5238- int i ;
5239-
5240- for (i = 0 ; i < hdev -> ae_dev -> dev_specs .rss_ind_tbl_size ; i ++ )
5241- vport -> rss_indirection_tbl [i ] = i % vport -> alloc_rss_size ;
5242- }
5243-
52445167static int hclge_rss_init_cfg (struct hclge_dev * hdev )
52455168{
52465169 u16 rss_ind_tbl_size = hdev -> ae_dev -> dev_specs .rss_ind_tbl_size ;
52475170 int rss_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ ;
5248- struct hclge_vport * vport = & hdev -> vport [ 0 ] ;
5171+ struct hclge_comm_rss_cfg * rss_cfg = & hdev -> rss_cfg ;
52495172 u16 * rss_ind_tbl ;
52505173
52515174 if (hdev -> ae_dev -> dev_version >= HNAE3_DEVICE_VERSION_V2 )
52525175 rss_algo = HCLGE_RSS_HASH_ALGO_SIMPLE ;
52535176
5254- vport -> rss_tuple_sets .ipv4_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5255- vport -> rss_tuple_sets .ipv4_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5256- vport -> rss_tuple_sets .ipv4_sctp_en = HCLGE_RSS_INPUT_TUPLE_SCTP ;
5257- vport -> rss_tuple_sets .ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5258- vport -> rss_tuple_sets .ipv6_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5259- vport -> rss_tuple_sets .ipv6_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5260- vport -> rss_tuple_sets .ipv6_sctp_en =
5177+ rss_cfg -> rss_tuple_sets .ipv4_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5178+ rss_cfg -> rss_tuple_sets .ipv4_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5179+ rss_cfg -> rss_tuple_sets .ipv4_sctp_en = HCLGE_RSS_INPUT_TUPLE_SCTP ;
5180+ rss_cfg -> rss_tuple_sets .ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5181+ rss_cfg -> rss_tuple_sets .ipv6_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5182+ rss_cfg -> rss_tuple_sets .ipv6_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5183+ rss_cfg -> rss_tuple_sets .ipv6_sctp_en =
52615184 hdev -> ae_dev -> dev_version <= HNAE3_DEVICE_VERSION_V2 ?
52625185 HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT :
52635186 HCLGE_RSS_INPUT_TUPLE_SCTP ;
5264- vport -> rss_tuple_sets .ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
5187+ rss_cfg -> rss_tuple_sets .ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER ;
52655188
5266- vport -> rss_algo = rss_algo ;
5189+ rss_cfg -> rss_algo = rss_algo ;
52675190
52685191 rss_ind_tbl = devm_kcalloc (& hdev -> pdev -> dev , rss_ind_tbl_size ,
52695192 sizeof (* rss_ind_tbl ), GFP_KERNEL );
52705193 if (!rss_ind_tbl )
52715194 return - ENOMEM ;
52725195
5273- vport -> rss_indirection_tbl = rss_ind_tbl ;
5274- memcpy (vport -> rss_hash_key , hclge_hash_key , HCLGE_RSS_KEY_SIZE );
5196+ rss_cfg -> rss_indirection_tbl = rss_ind_tbl ;
5197+ memcpy (rss_cfg -> rss_hash_key , hclge_hash_key , HCLGE_RSS_KEY_SIZE );
52755198
5276- hclge_rss_indir_init_cfg (hdev );
5199+ hclge_comm_rss_indir_init_cfg (hdev -> ae_dev , rss_cfg );
52775200
52785201 return 0 ;
52795202}
@@ -13213,7 +13136,7 @@ static const struct hnae3_ae_ops hclge_ops = {
1321313136 .check_port_speed = hclge_check_port_speed ,
1321413137 .get_fec = hclge_get_fec ,
1321513138 .set_fec = hclge_set_fec ,
13216- .get_rss_key_size = hclge_get_rss_key_size ,
13139+ .get_rss_key_size = hclge_comm_get_rss_key_size ,
1321713140 .get_rss = hclge_get_rss ,
1321813141 .set_rss = hclge_set_rss ,
1321913142 .set_rss_tuple = hclge_set_rss_tuple ,
0 commit comments