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
@ -298,33 +298,8 @@ out:
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
static void hns3_set_selftest_param(struct hnae3_handle *h, int (*st_param)[2])
|
||||
{
|
||||
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][1] =
|
||||
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][1] =
|
||||
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)
|
||||
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);
|
||||
|
||||
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++) {
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
h->ae_algo->ops->halt_autoneg(h, false);
|
||||
if (hns3_nic_resetting(ndev)) {
|
||||
netdev_err(ndev, "dev resetting!");
|
||||
return;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_VLAN_8021Q)
|
||||
if (h->ae_algo->ops->enable_vlan_filter)
|
||||
h->ae_algo->ops->enable_vlan_filter(h, true);
|
||||
#endif
|
||||
/* Only do offline selftest, or pass by default */
|
||||
if (eth_test->flags != ETH_TEST_FL_OFFLINE)
|
||||
return;
|
||||
|
||||
if (if_running)
|
||||
ndev->netdev_ops->ndo_open(ndev);
|
||||
|
||||
netif_dbg(h, drv, ndev, "self test end\n");
|
||||
hns3_selftest_prepare(ndev, if_running, st_param);
|
||||
hns3_do_selftest(ndev, st_param, eth_test, data);
|
||||
hns3_selftest_restore(ndev, if_running);
|
||||
}
|
||||
|
||||
static void hns3_update_limit_promisc_mode(struct net_device *netdev,
|
||||
|
Loading…
Reference in New Issue
Block a user