Lines Matching +full:self +full:- +full:advertising

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (c) 2014-2015 Hisilicon Limited.
34 *hns_nic_get_link - get current link status
36 *retuen 0 - success , negative --fail
41 u32 link_stat = priv->link; in hns_nic_get_link()
44 h = priv->ae_handle; in hns_nic_get_link()
46 if (net_dev->phydev) { in hns_nic_get_link()
47 if (!genphy_read_status(net_dev->phydev)) in hns_nic_get_link()
48 link_stat = net_dev->phydev->link; in hns_nic_get_link()
53 if (h->dev && h->dev->ops && h->dev->ops->get_status) in hns_nic_get_link()
54 link_stat = link_stat && h->dev->ops->get_status(h); in hns_nic_get_link()
65 struct phy_device *phy_dev = net_dev->phydev; in hns_get_mdix_mode()
67 if (!phy_dev || !phy_dev->mdio.bus) { in hns_get_mdix_mode()
68 cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID; in hns_get_mdix_mode()
69 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; in hns_get_mdix_mode()
86 cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI; in hns_get_mdix_mode()
89 cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_X; in hns_get_mdix_mode()
92 cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO; in hns_get_mdix_mode()
95 cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID; in hns_get_mdix_mode()
100 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; in hns_get_mdix_mode()
102 cmd->base.eth_tp_mdix = ETH_TP_MDI_X; in hns_get_mdix_mode()
104 cmd->base.eth_tp_mdix = ETH_TP_MDI; in hns_get_mdix_mode()
108 *hns_nic_get_link_ksettings - implement ethtool get link ksettings
111 *retuen 0 - success , negative --fail
122 u32 supported, advertising; in hns_nic_get_link_ksettings() local
124 if (!priv || !priv->ae_handle) in hns_nic_get_link_ksettings()
125 return -ESRCH; in hns_nic_get_link_ksettings()
127 h = priv->ae_handle; in hns_nic_get_link_ksettings()
128 if (!h->dev || !h->dev->ops || !h->dev->ops->get_info) in hns_nic_get_link_ksettings()
129 return -ESRCH; in hns_nic_get_link_ksettings()
131 ret = h->dev->ops->get_info(h, NULL, &speed, &duplex); in hns_nic_get_link_ksettings()
134 return -EINVAL; in hns_nic_get_link_ksettings()
138 cmd->link_modes.supported); in hns_nic_get_link_ksettings()
139 ethtool_convert_link_mode_to_legacy_u32(&advertising, in hns_nic_get_link_ksettings()
140 cmd->link_modes.advertising); in hns_nic_get_link_ksettings()
143 cmd->base.autoneg = false; in hns_nic_get_link_ksettings()
144 cmd->base.speed = speed; in hns_nic_get_link_ksettings()
145 cmd->base.duplex = duplex; in hns_nic_get_link_ksettings()
147 if (net_dev->phydev) in hns_nic_get_link_ksettings()
148 phy_ethtool_ksettings_get(net_dev->phydev, cmd); in hns_nic_get_link_ksettings()
152 cmd->base.speed = (u32)SPEED_UNKNOWN; in hns_nic_get_link_ksettings()
153 cmd->base.duplex = DUPLEX_UNKNOWN; in hns_nic_get_link_ksettings()
156 if (cmd->base.autoneg) in hns_nic_get_link_ksettings()
157 advertising |= ADVERTISED_Autoneg; in hns_nic_get_link_ksettings()
159 supported |= h->if_support; in hns_nic_get_link_ksettings()
160 if (h->phy_if == PHY_INTERFACE_MODE_SGMII) { in hns_nic_get_link_ksettings()
162 advertising |= ADVERTISED_1000baseT_Full; in hns_nic_get_link_ksettings()
163 } else if (h->phy_if == PHY_INTERFACE_MODE_XGMII) { in hns_nic_get_link_ksettings()
165 advertising |= ADVERTISED_10000baseKR_Full; in hns_nic_get_link_ksettings()
168 switch (h->media_type) { in hns_nic_get_link_ksettings()
170 cmd->base.port = PORT_FIBRE; in hns_nic_get_link_ksettings()
173 cmd->base.port = PORT_TP; in hns_nic_get_link_ksettings()
180 if (!(AE_IS_VER1(priv->enet_ver) && h->port_type == HNAE_PORT_DEBUG)) in hns_nic_get_link_ksettings()
183 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, in hns_nic_get_link_ksettings()
185 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, in hns_nic_get_link_ksettings()
186 advertising); in hns_nic_get_link_ksettings()
188 cmd->base.mdio_support = ETH_MDIO_SUPPORTS_C45 | ETH_MDIO_SUPPORTS_C22; in hns_nic_get_link_ksettings()
195 *hns_nic_set_link_ksettings - implement ethtool set link ksettings
198 *retuen 0 - success , negative --fail
208 return -ESRCH; in hns_nic_set_link_ksettings()
210 if (!priv || !priv->ae_handle || !priv->ae_handle->dev || in hns_nic_set_link_ksettings()
211 !priv->ae_handle->dev->ops) in hns_nic_set_link_ksettings()
212 return -ENODEV; in hns_nic_set_link_ksettings()
214 h = priv->ae_handle; in hns_nic_set_link_ksettings()
215 speed = cmd->base.speed; in hns_nic_set_link_ksettings()
217 if (h->phy_if == PHY_INTERFACE_MODE_XGMII) { in hns_nic_set_link_ksettings()
218 if (cmd->base.autoneg == AUTONEG_ENABLE || in hns_nic_set_link_ksettings()
220 cmd->base.duplex != DUPLEX_FULL) in hns_nic_set_link_ksettings()
221 return -EINVAL; in hns_nic_set_link_ksettings()
222 } else if (h->phy_if == PHY_INTERFACE_MODE_SGMII) { in hns_nic_set_link_ksettings()
223 if (!net_dev->phydev && cmd->base.autoneg == AUTONEG_ENABLE) in hns_nic_set_link_ksettings()
224 return -EINVAL; in hns_nic_set_link_ksettings()
226 if (speed == SPEED_1000 && cmd->base.duplex == DUPLEX_HALF) in hns_nic_set_link_ksettings()
227 return -EINVAL; in hns_nic_set_link_ksettings()
228 if (net_dev->phydev) in hns_nic_set_link_ksettings()
229 return phy_ethtool_ksettings_set(net_dev->phydev, cmd); in hns_nic_set_link_ksettings()
232 speed != SPEED_1000) || (cmd->base.duplex != DUPLEX_HALF && in hns_nic_set_link_ksettings()
233 cmd->base.duplex != DUPLEX_FULL)) in hns_nic_set_link_ksettings()
234 return -EINVAL; in hns_nic_set_link_ksettings()
237 return -ENOTSUPP; in hns_nic_set_link_ksettings()
240 if (h->dev->ops->adjust_link) { in hns_nic_set_link_ksettings()
242 h->dev->ops->adjust_link(h, (int)speed, cmd->base.duplex); in hns_nic_set_link_ksettings()
248 return -ENOTSUPP; in hns_nic_set_link_ksettings()
287 struct phy_device *phy_dev = ndev->phydev; in __lb_setup()
288 struct hnae_handle *h = priv->ae_handle; in __lb_setup()
294 ret = h->dev->ops->set_loopback(h, loop, 0x1); in __lb_setup()
297 if ((h->dev->ops->set_loopback) && in __lb_setup()
298 (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII)) in __lb_setup()
299 ret = h->dev->ops->set_loopback(h, loop, 0x1); in __lb_setup()
302 if (h->dev->ops->set_loopback) in __lb_setup()
303 ret = h->dev->ops->set_loopback(h, loop, 0x1); in __lb_setup()
309 if (!ret && h->dev->ops->set_loopback) { in __lb_setup()
310 if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) in __lb_setup()
311 ret = h->dev->ops->set_loopback(h, in __lb_setup()
315 ret = h->dev->ops->set_loopback(h, in __lb_setup()
320 ret = -EINVAL; in __lb_setup()
326 h->dev->ops->set_promisc_mode( in __lb_setup()
327 h, ndev->flags & IFF_PROMISC); in __lb_setup()
329 h->dev->ops->set_promisc_mode(h, 1); in __lb_setup()
339 struct hnae_handle *h = priv->ae_handle; in __lb_up()
351 ret = h->dev->ops->start ? h->dev->ops->start(h) : 0; in __lb_up()
356 if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) in __lb_up()
362 h->dev->ops->adjust_link(h, speed, duplex); in __lb_up()
384 ndev = skb->dev; in __lb_other_process()
387 frame_size = skb->len; in __lb_other_process()
388 memset(skb->data, 0xFF, frame_size); in __lb_other_process()
389 if ((!AE_IS_VER1(priv->enet_ver)) && in __lb_other_process()
390 (priv->ae_handle->port_type == HNAE_PORT_SERVICE)) { in __lb_other_process()
391 memcpy(skb->data, ndev->dev_addr, 6); in __lb_other_process()
392 skb->data[5] += 0x1f; in __lb_other_process()
396 memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1); in __lb_other_process()
397 memset(&skb->data[frame_size / 2 + 10], 0xBE, in __lb_other_process()
398 frame_size / 2 - 11); in __lb_other_process()
399 memset(&skb->data[frame_size / 2 + 12], 0xAF, in __lb_other_process()
400 frame_size / 2 - 13); in __lb_other_process()
404 ring = ring_data->ring; in __lb_other_process()
405 ndev = ring_data->napi.dev; in __lb_other_process()
407 dev_queue = netdev_get_tx_queue(ndev, ring_data->queue_index); in __lb_other_process()
412 frame_size = skb->len; in __lb_other_process()
424 if (*(skb->data + 10) == 0xFF) { /* for rx check frame*/ in __lb_other_process()
425 if ((*(skb->data + frame_size / 2 + 10) == 0xBE) && in __lb_other_process()
426 (*(skb->data + frame_size / 2 + 12) == 0xAF)) in __lb_other_process()
431 ndev->stats.rx_packets++; in __lb_other_process()
432 ndev->stats.rx_bytes += skb->len; in __lb_other_process()
434 ndev->stats.rx_frame_errors++; in __lb_other_process()
435 for (i = 0; i < skb->len; i++) { in __lb_other_process()
437 "%02x", *(skb->data + i)); in __lb_other_process()
438 if ((i % 16 == 15) || (i == skb->len - 1)) in __lb_other_process()
450 struct net_device *ndev = priv->netdev; in __lb_clean_rings()
451 unsigned long rx_packets = ndev->stats.rx_packets; in __lb_clean_rings()
452 unsigned long rx_bytes = ndev->stats.rx_bytes; in __lb_clean_rings()
453 unsigned long rx_frame_errors = ndev->stats.rx_frame_errors; in __lb_clean_rings()
456 ring_data = &priv->ring_data[i]; in __lb_clean_rings()
457 (void)ring_data->poll_one(ring_data, in __lb_clean_rings()
460 ret = (int)(ndev->stats.rx_packets - rx_packets); in __lb_clean_rings()
461 ndev->stats.rx_packets = rx_packets; in __lb_clean_rings()
462 ndev->stats.rx_bytes = rx_bytes; in __lb_clean_rings()
463 ndev->stats.rx_frame_errors = rx_frame_errors; in __lb_clean_rings()
468 * __lb_run_test - run loopback test
484 struct hnae_handle *h = priv->ae_handle; in __lb_run_test()
498 skb->dev = ndev; in __lb_run_test()
500 skb->queue_mapping = NIC_LB_TEST_RING_ID; in __lb_run_test()
512 &tx_ring_data(priv, skb->queue_mapping)); in __lb_run_test()
520 dev_err(priv->dev, "%s sent fail, cnt=0x%x, budget=0x%x\n", in __lb_run_test()
530 h->q_num, h->q_num * 2 - 1, in __lb_run_test()
534 dev_err(priv->dev, "%s recv fail, cnt=0x%x, budget=0x%x\n", in __lb_run_test()
553 struct hnae_handle *h = priv->ae_handle; in __lb_down()
565 if (h->dev->ops->stop) in __lb_down()
566 h->dev->ops->stop(h); in __lb_down()
569 (void)__lb_clean_rings(priv, 0, h->q_num - 1, 256); in __lb_down()
577 * hns_nic_self_test - self test
593 st_param[0][1] = (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII); in hns_nic_self_test()
597 st_param[2][1] = ((!!(priv->ae_handle->phy_dev)) && in hns_nic_self_test()
598 (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII)); in hns_nic_self_test()
600 if (eth_test->flags == ETH_TEST_FL_OFFLINE) { in hns_nic_self_test()
601 set_bit(NIC_STATE_TESTING, &priv->state); in hns_nic_self_test()
620 eth_test->flags |= ETH_TEST_FL_FAILED; in hns_nic_self_test()
625 hns_nic_net_reset(priv->netdev); in hns_nic_self_test()
627 clear_bit(NIC_STATE_TESTING, &priv->state); in hns_nic_self_test()
638 * hns_nic_get_drvinfo - get net driver info
647 strscpy(drvinfo->version, HNAE_DRIVER_VERSION, in hns_nic_get_drvinfo()
648 sizeof(drvinfo->version)); in hns_nic_get_drvinfo()
650 strscpy(drvinfo->driver, HNAE_DRIVER_NAME, sizeof(drvinfo->driver)); in hns_nic_get_drvinfo()
652 strscpy(drvinfo->bus_info, priv->dev->bus->name, in hns_nic_get_drvinfo()
653 sizeof(drvinfo->bus_info)); in hns_nic_get_drvinfo()
655 strscpy(drvinfo->fw_version, "N/A", ETHTOOL_FWVERS_LEN); in hns_nic_get_drvinfo()
656 drvinfo->eedump_len = 0; in hns_nic_get_drvinfo()
660 * hns_get_ringparam - get ring parameter
676 queue = priv->ae_handle->qs[0]; in hns_get_ringparam()
677 ops = priv->ae_handle->dev->ops; in hns_get_ringparam()
679 if (ops->get_ring_bdnum_limit) in hns_get_ringparam()
680 ops->get_ring_bdnum_limit(queue, &uplimit); in hns_get_ringparam()
682 param->rx_max_pending = uplimit; in hns_get_ringparam()
683 param->tx_max_pending = uplimit; in hns_get_ringparam()
684 param->rx_pending = queue->rx_ring.desc_num; in hns_get_ringparam()
685 param->tx_pending = queue->tx_ring.desc_num; in hns_get_ringparam()
689 * hns_get_pauseparam - get pause parameter
699 ops = priv->ae_handle->dev->ops; in hns_get_pauseparam()
701 if (ops->get_pauseparam) in hns_get_pauseparam()
702 ops->get_pauseparam(priv->ae_handle, &param->autoneg, in hns_get_pauseparam()
703 &param->rx_pause, &param->tx_pause); in hns_get_pauseparam()
707 * hns_set_pauseparam - set pause parameter
720 h = priv->ae_handle; in hns_set_pauseparam()
721 ops = h->dev->ops; in hns_set_pauseparam()
723 if (!ops->set_pauseparam) in hns_set_pauseparam()
724 return -ESRCH; in hns_set_pauseparam()
726 return ops->set_pauseparam(priv->ae_handle, param->autoneg, in hns_set_pauseparam()
727 param->rx_pause, param->tx_pause); in hns_set_pauseparam()
731 * hns_get_coalesce - get coalesce info.
747 ops = priv->ae_handle->dev->ops; in hns_get_coalesce()
749 ec->use_adaptive_rx_coalesce = priv->ae_handle->coal_adapt_en; in hns_get_coalesce()
750 ec->use_adaptive_tx_coalesce = priv->ae_handle->coal_adapt_en; in hns_get_coalesce()
752 if ((!ops->get_coalesce_usecs) || in hns_get_coalesce()
753 (!ops->get_max_coalesced_frames)) in hns_get_coalesce()
754 return -ESRCH; in hns_get_coalesce()
756 ops->get_coalesce_usecs(priv->ae_handle, in hns_get_coalesce()
757 &ec->tx_coalesce_usecs, in hns_get_coalesce()
758 &ec->rx_coalesce_usecs); in hns_get_coalesce()
760 ops->get_max_coalesced_frames( in hns_get_coalesce()
761 priv->ae_handle, in hns_get_coalesce()
762 &ec->tx_max_coalesced_frames, in hns_get_coalesce()
763 &ec->rx_max_coalesced_frames); in hns_get_coalesce()
765 ops->get_coalesce_range(priv->ae_handle, in hns_get_coalesce()
766 &ec->tx_max_coalesced_frames_low, in hns_get_coalesce()
767 &ec->rx_max_coalesced_frames_low, in hns_get_coalesce()
768 &ec->tx_max_coalesced_frames_high, in hns_get_coalesce()
769 &ec->rx_max_coalesced_frames_high, in hns_get_coalesce()
770 &ec->tx_coalesce_usecs_low, in hns_get_coalesce()
771 &ec->rx_coalesce_usecs_low, in hns_get_coalesce()
772 &ec->tx_coalesce_usecs_high, in hns_get_coalesce()
773 &ec->rx_coalesce_usecs_high); in hns_get_coalesce()
779 * hns_set_coalesce - set coalesce info.
796 ops = priv->ae_handle->dev->ops; in hns_set_coalesce()
798 if (ec->tx_coalesce_usecs != ec->rx_coalesce_usecs) in hns_set_coalesce()
799 return -EINVAL; in hns_set_coalesce()
801 if ((!ops->set_coalesce_usecs) || in hns_set_coalesce()
802 (!ops->set_coalesce_frames)) in hns_set_coalesce()
803 return -ESRCH; in hns_set_coalesce()
805 if (ec->use_adaptive_rx_coalesce != priv->ae_handle->coal_adapt_en) in hns_set_coalesce()
806 priv->ae_handle->coal_adapt_en = ec->use_adaptive_rx_coalesce; in hns_set_coalesce()
808 rc1 = ops->set_coalesce_usecs(priv->ae_handle, in hns_set_coalesce()
809 ec->rx_coalesce_usecs); in hns_set_coalesce()
811 rc2 = ops->set_coalesce_frames(priv->ae_handle, in hns_set_coalesce()
812 ec->tx_max_coalesced_frames, in hns_set_coalesce()
813 ec->rx_max_coalesced_frames); in hns_set_coalesce()
816 return -EINVAL; in hns_set_coalesce()
822 * hns_get_channels - get channel info.
831 ch->max_rx = priv->ae_handle->q_num; in hns_get_channels()
832 ch->max_tx = priv->ae_handle->q_num; in hns_get_channels()
834 ch->rx_count = priv->ae_handle->q_num; in hns_get_channels()
835 ch->tx_count = priv->ae_handle->q_num; in hns_get_channels()
839 * hns_get_ethtool_stats - get detail statistics.
849 struct hnae_handle *h = priv->ae_handle; in hns_get_ethtool_stats()
853 if (!h->dev->ops->get_stats || !h->dev->ops->update_stats) { in hns_get_ethtool_stats()
858 h->dev->ops->update_stats(h, &netdev->stats); in hns_get_ethtool_stats()
863 p[0] = net_stats->rx_packets; in hns_get_ethtool_stats()
864 p[1] = net_stats->tx_packets; in hns_get_ethtool_stats()
865 p[2] = net_stats->rx_bytes; in hns_get_ethtool_stats()
866 p[3] = net_stats->tx_bytes; in hns_get_ethtool_stats()
867 p[4] = net_stats->rx_errors; in hns_get_ethtool_stats()
868 p[5] = net_stats->tx_errors; in hns_get_ethtool_stats()
869 p[6] = net_stats->rx_dropped; in hns_get_ethtool_stats()
870 p[7] = net_stats->tx_dropped; in hns_get_ethtool_stats()
871 p[8] = net_stats->multicast; in hns_get_ethtool_stats()
872 p[9] = net_stats->collisions; in hns_get_ethtool_stats()
873 p[10] = net_stats->rx_over_errors; in hns_get_ethtool_stats()
874 p[11] = net_stats->rx_crc_errors; in hns_get_ethtool_stats()
875 p[12] = net_stats->rx_frame_errors; in hns_get_ethtool_stats()
876 p[13] = net_stats->rx_fifo_errors; in hns_get_ethtool_stats()
877 p[14] = net_stats->rx_missed_errors; in hns_get_ethtool_stats()
878 p[15] = net_stats->tx_aborted_errors; in hns_get_ethtool_stats()
879 p[16] = net_stats->tx_carrier_errors; in hns_get_ethtool_stats()
880 p[17] = net_stats->tx_fifo_errors; in hns_get_ethtool_stats()
881 p[18] = net_stats->tx_heartbeat_errors; in hns_get_ethtool_stats()
882 p[19] = net_stats->rx_length_errors; in hns_get_ethtool_stats()
883 p[20] = net_stats->tx_window_errors; in hns_get_ethtool_stats()
884 p[21] = net_stats->rx_compressed; in hns_get_ethtool_stats()
885 p[22] = net_stats->tx_compressed; in hns_get_ethtool_stats()
887 p[23] = 0; /* was netdev->rx_dropped.counter */ in hns_get_ethtool_stats()
888 p[24] = 0; /* was netdev->tx_dropped.counter */ in hns_get_ethtool_stats()
890 p[25] = priv->tx_timeout_count; in hns_get_ethtool_stats()
893 h->dev->ops->get_stats(h, &p[26]); in hns_get_ethtool_stats()
905 struct hnae_handle *h = priv->ae_handle; in hns_get_strings()
907 if (!h->dev->ops->get_strings) { in hns_get_strings()
908 netdev_err(netdev, "h->dev->ops->get_strings is null!\n"); in hns_get_strings()
913 if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) in hns_get_strings()
917 if ((netdev->phydev) && (!netdev->phydev->is_c45)) in hns_get_strings()
950 h->dev->ops->get_strings(h, stringset, &data); in hns_get_strings()
955 * hns_get_sset_count - get string set count returned by nic_get_strings
957 * @stringset: string set index, 0: self test string; 1: statistics string.
964 struct hnae_handle *h = priv->ae_handle; in hns_get_sset_count()
965 struct hnae_ae_ops *ops = h->dev->ops; in hns_get_sset_count()
967 if (!ops->get_sset_count) { in hns_get_sset_count()
969 return -EOPNOTSUPP; in hns_get_sset_count()
974 if (priv->ae_handle->phy_if == PHY_INTERFACE_MODE_XGMII) in hns_get_sset_count()
975 cnt--; in hns_get_sset_count()
977 if ((!netdev->phydev) || (netdev->phydev->is_c45)) in hns_get_sset_count()
978 cnt--; in hns_get_sset_count()
982 return (HNS_NET_STATS_CNT + ops->get_sset_count(h, stringset)); in hns_get_sset_count()
984 return -EOPNOTSUPP; in hns_get_sset_count()
989 * hns_phy_led_set - set phy LED status.
998 struct phy_device *phy_dev = netdev->phydev; in hns_phy_led_set()
1011 * hns_set_phys_id - set phy identify LED.
1021 struct hnae_handle *h = priv->ae_handle; in hns_set_phys_id()
1022 struct phy_device *phy_dev = netdev->phydev; in hns_set_phys_id()
1033 priv->phy_led_val = phy_read(phy_dev, HNS_LED_FC_REG); in hns_set_phys_id()
1057 priv->phy_led_val); in hns_set_phys_id()
1067 return -EINVAL; in hns_set_phys_id()
1072 return h->dev->ops->set_led_id(h, HNAE_LED_ACTIVE); in hns_set_phys_id()
1074 return h->dev->ops->set_led_id(h, HNAE_LED_ON); in hns_set_phys_id()
1076 return h->dev->ops->set_led_id(h, HNAE_LED_OFF); in hns_set_phys_id()
1078 return h->dev->ops->set_led_id(h, HNAE_LED_INACTIVE); in hns_set_phys_id()
1080 return -EINVAL; in hns_set_phys_id()
1087 * hns_get_regs - get net device register
1098 ops = priv->ae_handle->dev->ops; in hns_get_regs()
1100 cmd->version = HNS_CHIP_VERSION; in hns_get_regs()
1101 if (!ops->get_regs) { in hns_get_regs()
1102 netdev_err(net_dev, "ops->get_regs is null!\n"); in hns_get_regs()
1105 ops->get_regs(priv->ae_handle, data); in hns_get_regs()
1109 * hns_get_regs_len - get total register len.
1120 ops = priv->ae_handle->dev->ops; in hns_get_regs_len()
1121 if (!ops->get_regs_len) { in hns_get_regs_len()
1122 netdev_err(net_dev, "ops->get_regs_len is null!\n"); in hns_get_regs_len()
1123 return -EOPNOTSUPP; in hns_get_regs_len()
1126 reg_num = ops->get_regs_len(priv->ae_handle); in hns_get_regs_len()
1134 * hns_nic_nway_reset - nway reset
1141 struct phy_device *phy = netdev->phydev; in hns_nic_nway_reset()
1147 return -EOPNOTSUPP; in hns_nic_nway_reset()
1149 if (phy->autoneg != AUTONEG_ENABLE) in hns_nic_nway_reset()
1150 return -EINVAL; in hns_nic_nway_reset()
1161 if (AE_IS_VER1(priv->enet_ver)) { in hns_get_rss_key_size()
1167 ops = priv->ae_handle->dev->ops; in hns_get_rss_key_size()
1168 return ops->get_rss_key_size(priv->ae_handle); in hns_get_rss_key_size()
1177 if (AE_IS_VER1(priv->enet_ver)) { in hns_get_rss_indir_size()
1183 ops = priv->ae_handle->dev->ops; in hns_get_rss_indir_size()
1184 return ops->get_rss_indir_size(priv->ae_handle); in hns_get_rss_indir_size()
1193 if (AE_IS_VER1(priv->enet_ver)) { in hns_get_rss()
1196 return -EOPNOTSUPP; in hns_get_rss()
1199 ops = priv->ae_handle->dev->ops; in hns_get_rss()
1201 if (!rxfh->indir) in hns_get_rss()
1204 return ops->get_rss(priv->ae_handle, in hns_get_rss()
1205 rxfh->indir, rxfh->key, &rxfh->hfunc); in hns_get_rss()
1215 if (AE_IS_VER1(priv->enet_ver)) { in hns_set_rss()
1218 return -EOPNOTSUPP; in hns_set_rss()
1221 ops = priv->ae_handle->dev->ops; in hns_set_rss()
1223 if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && in hns_set_rss()
1224 rxfh->hfunc != ETH_RSS_HASH_TOP) { in hns_set_rss()
1226 return -EOPNOTSUPP; in hns_set_rss()
1229 return ops->set_rss(priv->ae_handle, in hns_set_rss()
1230 rxfh->indir, rxfh->key, rxfh->hfunc); in hns_set_rss()
1239 switch (cmd->cmd) { in hns_get_rxnfc()
1241 cmd->data = priv->ae_handle->q_num; in hns_get_rxnfc()
1244 return -EOPNOTSUPP; in hns_get_rxnfc()
1283 ndev->ethtool_ops = &hns_ethtool_ops; in hns_ethtool_set_ops()