static int __lb_down(struct net_device *ndev, enum hnae_loop loop) { struct hns_nic_priv *priv = netdev_priv(ndev); struct hnae_handle *h = priv->ae_handle; int ret; if (loop == MAC_INTERNALLOOP_PHY) ret = __lb_setup(ndev, MAC_LOOP_PHY_NONE); else ret = __lb_setup(ndev, MAC_LOOP_NONE); if (ret) netdev_err(ndev, "%s: __lb_setup return error(%d)!\n", __func__, ret); if (h->dev->ops->stop) h->dev->ops->stop(h); usleep_range(10000, 20000); (void)__lb_clean_rings(priv, 0, h->q_num - 1, 256); hns_nic_net_reset(ndev); return 0; }
static int __lb_up(struct net_device *ndev, enum hnae_loop loop_mode) { struct hns_nic_priv *priv = netdev_priv(ndev); struct hnae_handle *h = priv->ae_handle; int speed, duplex; int ret; hns_nic_net_reset(ndev); ret = __lb_setup(ndev, loop_mode); if (ret) return ret; msleep(200); ret = h->dev->ops->start ? h->dev->ops->start(h) : 0; if (ret) return ret; /* link adjust duplex*/ if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) speed = 1000; else speed = 10000; duplex = 1; h->dev->ops->adjust_link(h, speed, duplex); return 0; }