net: hns3: reconstruct function hns3_self_test
This patch reconstructs function hns3_self_test to reduce the code cycle complexity and make code more concise. Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
60fe9ff9b7
commit
4c8dab1c70
1 changed files with 64 additions and 37 deletions
|
@ -298,33 +298,8 @@ out:
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static void hns3_set_selftest_param(struct hnae3_handle *h, int (*st_param)[2])
|
||||||
* hns3_self_test - self test
|
|
||||||
* @ndev: net device
|
|
||||||
* @eth_test: test cmd
|
|
||||||
* @data: test result
|
|
||||||
*/
|
|
||||||
static void hns3_self_test(struct net_device *ndev,
|
|
||||||
struct ethtool_test *eth_test, u64 *data)
|
|
||||||
{
|
{
|
||||||
struct hns3_nic_priv *priv = netdev_priv(ndev);
|
|
||||||
struct hnae3_handle *h = priv->ae_handle;
|
|
||||||
int st_param[HNS3_SELF_TEST_TYPE_NUM][2];
|
|
||||||
bool if_running = netif_running(ndev);
|
|
||||||
int test_index = 0;
|
|
||||||
u32 i;
|
|
||||||
|
|
||||||
if (hns3_nic_resetting(ndev)) {
|
|
||||||
netdev_err(ndev, "dev resetting!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Only do offline selftest, or pass by default */
|
|
||||||
if (eth_test->flags != ETH_TEST_FL_OFFLINE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
netif_dbg(h, drv, ndev, "self test start");
|
|
||||||
|
|
||||||
st_param[HNAE3_LOOP_APP][0] = HNAE3_LOOP_APP;
|
st_param[HNAE3_LOOP_APP][0] = HNAE3_LOOP_APP;
|
||||||
st_param[HNAE3_LOOP_APP][1] =
|
st_param[HNAE3_LOOP_APP][1] =
|
||||||
h->flags & HNAE3_SUPPORT_APP_LOOPBACK;
|
h->flags & HNAE3_SUPPORT_APP_LOOPBACK;
|
||||||
|
@ -341,6 +316,18 @@ static void hns3_self_test(struct net_device *ndev,
|
||||||
st_param[HNAE3_LOOP_PHY][0] = HNAE3_LOOP_PHY;
|
st_param[HNAE3_LOOP_PHY][0] = HNAE3_LOOP_PHY;
|
||||||
st_param[HNAE3_LOOP_PHY][1] =
|
st_param[HNAE3_LOOP_PHY][1] =
|
||||||
h->flags & HNAE3_SUPPORT_PHY_LOOPBACK;
|
h->flags & HNAE3_SUPPORT_PHY_LOOPBACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hns3_selftest_prepare(struct net_device *ndev,
|
||||||
|
bool if_running, int (*st_param)[2])
|
||||||
|
{
|
||||||
|
struct hns3_nic_priv *priv = netdev_priv(ndev);
|
||||||
|
struct hnae3_handle *h = priv->ae_handle;
|
||||||
|
|
||||||
|
if (netif_msg_ifdown(h))
|
||||||
|
netdev_info(ndev, "self test start\n");
|
||||||
|
|
||||||
|
hns3_set_selftest_param(h, st_param);
|
||||||
|
|
||||||
if (if_running)
|
if (if_running)
|
||||||
ndev->netdev_ops->ndo_stop(ndev);
|
ndev->netdev_ops->ndo_stop(ndev);
|
||||||
|
@ -359,6 +346,35 @@ static void hns3_self_test(struct net_device *ndev,
|
||||||
h->ae_algo->ops->halt_autoneg(h, true);
|
h->ae_algo->ops->halt_autoneg(h, true);
|
||||||
|
|
||||||
set_bit(HNS3_NIC_STATE_TESTING, &priv->state);
|
set_bit(HNS3_NIC_STATE_TESTING, &priv->state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hns3_selftest_restore(struct net_device *ndev, bool if_running)
|
||||||
|
{
|
||||||
|
struct hns3_nic_priv *priv = netdev_priv(ndev);
|
||||||
|
struct hnae3_handle *h = priv->ae_handle;
|
||||||
|
|
||||||
|
clear_bit(HNS3_NIC_STATE_TESTING, &priv->state);
|
||||||
|
|
||||||
|
if (h->ae_algo->ops->halt_autoneg)
|
||||||
|
h->ae_algo->ops->halt_autoneg(h, false);
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_VLAN_8021Q)
|
||||||
|
if (h->ae_algo->ops->enable_vlan_filter)
|
||||||
|
h->ae_algo->ops->enable_vlan_filter(h, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (if_running)
|
||||||
|
ndev->netdev_ops->ndo_open(ndev);
|
||||||
|
|
||||||
|
if (netif_msg_ifdown(h))
|
||||||
|
netdev_info(ndev, "self test end\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hns3_do_selftest(struct net_device *ndev, int (*st_param)[2],
|
||||||
|
struct ethtool_test *eth_test, u64 *data)
|
||||||
|
{
|
||||||
|
int test_index = 0;
|
||||||
|
u32 i;
|
||||||
|
|
||||||
for (i = 0; i < HNS3_SELF_TEST_TYPE_NUM; i++) {
|
for (i = 0; i < HNS3_SELF_TEST_TYPE_NUM; i++) {
|
||||||
enum hnae3_loop loop_type = (enum hnae3_loop)st_param[i][0];
|
enum hnae3_loop loop_type = (enum hnae3_loop)st_param[i][0];
|
||||||
|
@ -377,21 +393,32 @@ static void hns3_self_test(struct net_device *ndev,
|
||||||
|
|
||||||
test_index++;
|
test_index++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
clear_bit(HNS3_NIC_STATE_TESTING, &priv->state);
|
/**
|
||||||
|
* hns3_nic_self_test - self test
|
||||||
|
* @ndev: net device
|
||||||
|
* @eth_test: test cmd
|
||||||
|
* @data: test result
|
||||||
|
*/
|
||||||
|
static void hns3_self_test(struct net_device *ndev,
|
||||||
|
struct ethtool_test *eth_test, u64 *data)
|
||||||
|
{
|
||||||
|
int st_param[HNS3_SELF_TEST_TYPE_NUM][2];
|
||||||
|
bool if_running = netif_running(ndev);
|
||||||
|
|
||||||
if (h->ae_algo->ops->halt_autoneg)
|
if (hns3_nic_resetting(ndev)) {
|
||||||
h->ae_algo->ops->halt_autoneg(h, false);
|
netdev_err(ndev, "dev resetting!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_VLAN_8021Q)
|
/* Only do offline selftest, or pass by default */
|
||||||
if (h->ae_algo->ops->enable_vlan_filter)
|
if (eth_test->flags != ETH_TEST_FL_OFFLINE)
|
||||||
h->ae_algo->ops->enable_vlan_filter(h, true);
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (if_running)
|
hns3_selftest_prepare(ndev, if_running, st_param);
|
||||||
ndev->netdev_ops->ndo_open(ndev);
|
hns3_do_selftest(ndev, st_param, eth_test, data);
|
||||||
|
hns3_selftest_restore(ndev, if_running);
|
||||||
netif_dbg(h, drv, ndev, "self test end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hns3_update_limit_promisc_mode(struct net_device *netdev,
|
static void hns3_update_limit_promisc_mode(struct net_device *netdev,
|
||||||
|
|
Loading…
Add table
Reference in a new issue