mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 16:41:39 +00:00
net: hns3: refactor out hclgevf_get_rss_tuple()
To improve code readability and maintainability, separate the flow type parsing part and the converting part from bloated hclgevf_get_rss_tuple(). Signed-off-by: Jian Shen <shenjian15@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
405642a15c
commit
73f7767ed0
@ -954,56 +954,73 @@ static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hclgevf_get_rss_tuple_by_flow_type(struct hclgevf_dev *hdev,
|
||||
int flow_type, u8 *tuple_sets)
|
||||
{
|
||||
switch (flow_type) {
|
||||
case TCP_V4_FLOW:
|
||||
*tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_tcp_en;
|
||||
break;
|
||||
case UDP_V4_FLOW:
|
||||
*tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_udp_en;
|
||||
break;
|
||||
case TCP_V6_FLOW:
|
||||
*tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_tcp_en;
|
||||
break;
|
||||
case UDP_V6_FLOW:
|
||||
*tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_udp_en;
|
||||
break;
|
||||
case SCTP_V4_FLOW:
|
||||
*tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_sctp_en;
|
||||
break;
|
||||
case SCTP_V6_FLOW:
|
||||
*tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_sctp_en;
|
||||
break;
|
||||
case IPV4_FLOW:
|
||||
case IPV6_FLOW:
|
||||
*tuple_sets = HCLGEVF_S_IP_BIT | HCLGEVF_D_IP_BIT;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u64 hclgevf_convert_rss_tuple(u8 tuple_sets)
|
||||
{
|
||||
u64 tuple_data = 0;
|
||||
|
||||
if (tuple_sets & HCLGEVF_D_PORT_BIT)
|
||||
tuple_data |= RXH_L4_B_2_3;
|
||||
if (tuple_sets & HCLGEVF_S_PORT_BIT)
|
||||
tuple_data |= RXH_L4_B_0_1;
|
||||
if (tuple_sets & HCLGEVF_D_IP_BIT)
|
||||
tuple_data |= RXH_IP_DST;
|
||||
if (tuple_sets & HCLGEVF_S_IP_BIT)
|
||||
tuple_data |= RXH_IP_SRC;
|
||||
|
||||
return tuple_data;
|
||||
}
|
||||
|
||||
static int hclgevf_get_rss_tuple(struct hnae3_handle *handle,
|
||||
struct ethtool_rxnfc *nfc)
|
||||
{
|
||||
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
|
||||
struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg;
|
||||
u8 tuple_sets;
|
||||
int ret;
|
||||
|
||||
if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
nfc->data = 0;
|
||||
|
||||
switch (nfc->flow_type) {
|
||||
case TCP_V4_FLOW:
|
||||
tuple_sets = rss_cfg->rss_tuple_sets.ipv4_tcp_en;
|
||||
break;
|
||||
case UDP_V4_FLOW:
|
||||
tuple_sets = rss_cfg->rss_tuple_sets.ipv4_udp_en;
|
||||
break;
|
||||
case TCP_V6_FLOW:
|
||||
tuple_sets = rss_cfg->rss_tuple_sets.ipv6_tcp_en;
|
||||
break;
|
||||
case UDP_V6_FLOW:
|
||||
tuple_sets = rss_cfg->rss_tuple_sets.ipv6_udp_en;
|
||||
break;
|
||||
case SCTP_V4_FLOW:
|
||||
tuple_sets = rss_cfg->rss_tuple_sets.ipv4_sctp_en;
|
||||
break;
|
||||
case SCTP_V6_FLOW:
|
||||
tuple_sets = rss_cfg->rss_tuple_sets.ipv6_sctp_en;
|
||||
break;
|
||||
case IPV4_FLOW:
|
||||
case IPV6_FLOW:
|
||||
tuple_sets = HCLGEVF_S_IP_BIT | HCLGEVF_D_IP_BIT;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = hclgevf_get_rss_tuple_by_flow_type(hdev, nfc->flow_type,
|
||||
&tuple_sets);
|
||||
if (ret || !tuple_sets)
|
||||
return ret;
|
||||
|
||||
if (!tuple_sets)
|
||||
return 0;
|
||||
|
||||
if (tuple_sets & HCLGEVF_D_PORT_BIT)
|
||||
nfc->data |= RXH_L4_B_2_3;
|
||||
if (tuple_sets & HCLGEVF_S_PORT_BIT)
|
||||
nfc->data |= RXH_L4_B_0_1;
|
||||
if (tuple_sets & HCLGEVF_D_IP_BIT)
|
||||
nfc->data |= RXH_IP_DST;
|
||||
if (tuple_sets & HCLGEVF_S_IP_BIT)
|
||||
nfc->data |= RXH_IP_SRC;
|
||||
nfc->data = hclgevf_convert_rss_tuple(tuple_sets);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user