Lines Matching +full:report +full:- +full:speed +full:- +full:hz
1 // SPDX-License-Identifier: GPL-2.0+
38 #define PHY_STATE_TIME HZ
62 if (old_state != phydev->state) { in phy_process_state_change()
63 phydev_dbg(phydev, "PHY state change %s -> %s\n", in phy_process_state_change()
65 phy_state_to_str(phydev->state)); in phy_process_state_change()
66 if (phydev->drv && phydev->drv->link_change_notify) in phy_process_state_change()
67 phydev->drv->link_change_notify(phydev); in phy_process_state_change()
73 phydev->phy_link_change(phydev, true); in phy_link_up()
79 phydev->phy_link_change(phydev, false); in phy_link_down()
87 if (phydev->autoneg == AUTONEG_DISABLE) in phy_pause_str()
91 phydev->advertising); in phy_pause_str()
93 phydev->advertising); in phy_pause_str()
95 if (local_pause && phydev->pause) in phy_pause_str()
98 if (local_asym_pause && phydev->asym_pause) { in phy_pause_str()
101 if (phydev->pause) in phy_pause_str()
110 * phy_print_status - Convenience function to print out the current phy status
115 if (phydev->link) { in phy_print_status()
116 netdev_info(phydev->attached_dev, in phy_print_status()
117 "Link is Up - %s/%s %s- flow control %s\n", in phy_print_status()
118 phy_speed_to_str(phydev->speed), in phy_print_status()
119 phy_duplex_to_str(phydev->duplex), in phy_print_status()
120 phydev->downshifted_rate ? "(downshifted) " : "", in phy_print_status()
123 netdev_info(phydev->attached_dev, "Link is Down\n"); in phy_print_status()
129 * phy_clear_interrupt - Ack the phy device's interrupt
141 if (phydev->drv->ack_interrupt) { in phy_clear_interrupt()
142 mutex_lock(&phydev->lock); in phy_clear_interrupt()
143 ret = phydev->drv->ack_interrupt(phydev); in phy_clear_interrupt()
144 mutex_unlock(&phydev->lock); in phy_clear_interrupt()
151 * phy_config_interrupt - configure the PHY device for the requested interrupts
159 phydev->interrupts = interrupts ? 1 : 0; in phy_config_interrupt()
160 if (phydev->drv->config_intr) in phy_config_interrupt()
161 return phydev->drv->config_intr(phydev); in phy_config_interrupt()
167 * phy_restart_aneg - restart auto-negotiation
177 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) in phy_restart_aneg()
187 * phy_aneg_done - return auto-negotiation status
190 * Description: Return the auto-negotiation status from this @phydev
191 * Returns > 0 on success or < 0 on error. 0 means that auto-negotiation
196 if (phydev->drv && phydev->drv->aneg_done) in phy_aneg_done()
197 return phydev->drv->aneg_done(phydev); in phy_aneg_done()
198 else if (phydev->is_c45) in phy_aneg_done()
206 * phy_find_valid - find a PHY setting that matches the requested parameters
207 * @speed: desired speed
212 * - an exact match for the specified speed and duplex mode
213 * - a match for the specified speed, or slower speed
214 * - the slowest supported speed
219 phy_find_valid(int speed, int duplex, unsigned long *supported) in phy_find_valid() argument
221 return phy_lookup_setting(speed, duplex, supported, false); in phy_find_valid()
225 * phy_supported_speeds - return all speeds currently supported by a phy device
238 return phy_speeds(speeds, size, phy->supported); in phy_supported_speeds()
242 * phy_check_valid - check if there is a valid PHY setting which matches
243 * speed, duplex, and feature mask
244 * @speed: speed to match
250 static inline bool phy_check_valid(int speed, int duplex, in phy_check_valid() argument
253 return !!phy_lookup_setting(speed, duplex, features, true); in phy_check_valid()
257 * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex
268 setting = phy_find_valid(phydev->speed, phydev->duplex, in phy_sanitize_settings()
269 phydev->supported); in phy_sanitize_settings()
271 phydev->speed = setting->speed; in phy_sanitize_settings()
272 phydev->duplex = setting->duplex; in phy_sanitize_settings()
275 phydev->speed = SPEED_UNKNOWN; in phy_sanitize_settings()
276 phydev->duplex = DUPLEX_UNKNOWN; in phy_sanitize_settings()
283 mutex_lock(&phydev->lock); in phy_ethtool_ksettings_get()
284 linkmode_copy(cmd->link_modes.supported, phydev->supported); in phy_ethtool_ksettings_get()
285 linkmode_copy(cmd->link_modes.advertising, phydev->advertising); in phy_ethtool_ksettings_get()
286 linkmode_copy(cmd->link_modes.lp_advertising, phydev->lp_advertising); in phy_ethtool_ksettings_get()
288 cmd->base.speed = phydev->speed; in phy_ethtool_ksettings_get()
289 cmd->base.duplex = phydev->duplex; in phy_ethtool_ksettings_get()
290 cmd->base.master_slave_cfg = phydev->master_slave_get; in phy_ethtool_ksettings_get()
291 cmd->base.master_slave_state = phydev->master_slave_state; in phy_ethtool_ksettings_get()
292 if (phydev->interface == PHY_INTERFACE_MODE_MOCA) in phy_ethtool_ksettings_get()
293 cmd->base.port = PORT_BNC; in phy_ethtool_ksettings_get()
295 cmd->base.port = phydev->port; in phy_ethtool_ksettings_get()
296 cmd->base.transceiver = phy_is_internal(phydev) ? in phy_ethtool_ksettings_get()
298 cmd->base.phy_address = phydev->mdio.addr; in phy_ethtool_ksettings_get()
299 cmd->base.autoneg = phydev->autoneg; in phy_ethtool_ksettings_get()
300 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl; in phy_ethtool_ksettings_get()
301 cmd->base.eth_tp_mdix = phydev->mdix; in phy_ethtool_ksettings_get()
302 mutex_unlock(&phydev->lock); in phy_ethtool_ksettings_get()
307 * phy_mii_ioctl - generic PHY MII ioctl interface
319 u16 val = mii_data->val_in; in phy_mii_ioctl()
325 mii_data->phy_id = phydev->mdio.addr; in phy_mii_ioctl()
329 if (mdio_phy_id_is_c45(mii_data->phy_id)) { in phy_mii_ioctl()
330 prtad = mdio_phy_id_prtad(mii_data->phy_id); in phy_mii_ioctl()
331 devad = mdio_phy_id_devad(mii_data->phy_id); in phy_mii_ioctl()
332 devad = mdiobus_c45_addr(devad, mii_data->reg_num); in phy_mii_ioctl()
334 prtad = mii_data->phy_id; in phy_mii_ioctl()
335 devad = mii_data->reg_num; in phy_mii_ioctl()
337 mii_data->val_out = mdiobus_read(phydev->mdio.bus, prtad, in phy_mii_ioctl()
342 if (mdio_phy_id_is_c45(mii_data->phy_id)) { in phy_mii_ioctl()
343 prtad = mdio_phy_id_prtad(mii_data->phy_id); in phy_mii_ioctl()
344 devad = mdio_phy_id_devad(mii_data->phy_id); in phy_mii_ioctl()
345 devad = mdiobus_c45_addr(devad, mii_data->reg_num); in phy_mii_ioctl()
347 prtad = mii_data->phy_id; in phy_mii_ioctl()
348 devad = mii_data->reg_num; in phy_mii_ioctl()
350 if (prtad == phydev->mdio.addr) { in phy_mii_ioctl()
354 if (phydev->autoneg == AUTONEG_ENABLE) in phy_mii_ioctl()
356 phydev->autoneg = AUTONEG_DISABLE; in phy_mii_ioctl()
358 phydev->duplex = DUPLEX_FULL; in phy_mii_ioctl()
360 phydev->duplex = DUPLEX_HALF; in phy_mii_ioctl()
362 phydev->speed = SPEED_1000; in phy_mii_ioctl()
364 phydev->speed = SPEED_100; in phy_mii_ioctl()
365 else phydev->speed = SPEED_10; in phy_mii_ioctl()
368 if (phydev->autoneg == AUTONEG_DISABLE) in phy_mii_ioctl()
370 phydev->autoneg = AUTONEG_ENABLE; in phy_mii_ioctl()
374 mii_adv_mod_linkmode_adv_t(phydev->advertising, in phy_mii_ioctl()
379 mii_ctrl1000_mod_linkmode_adv_t(phydev->advertising, in phy_mii_ioctl()
389 mdiobus_write(phydev->mdio.bus, prtad, devad, val); in phy_mii_ioctl()
391 if (prtad == phydev->mdio.addr && in phy_mii_ioctl()
402 if (phydev->mii_ts && phydev->mii_ts->hwtstamp) in phy_mii_ioctl()
403 return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr); in phy_mii_ioctl()
407 return -EOPNOTSUPP; in phy_mii_ioctl()
413 * phy_do_ioctl - generic ndo_do_ioctl implementation
420 if (!dev->phydev) in phy_do_ioctl()
421 return -ENODEV; in phy_do_ioctl()
423 return phy_mii_ioctl(dev->phydev, ifr, cmd); in phy_do_ioctl()
428 * phy_do_ioctl_running - generic ndo_do_ioctl implementation but test first
440 return -ENODEV; in phy_do_ioctl_running()
447 * phy_queue_state_machine - Trigger the state machine to run soon
454 mod_delayed_work(system_power_efficient_wq, &phydev->state_queue, in phy_queue_state_machine()
460 * phy_queue_state_machine - Trigger the state machine to run now
481 * phy_ethtool_get_strings - Get the statistic counter names
488 if (!phydev->drv) in phy_ethtool_get_strings()
489 return -EIO; in phy_ethtool_get_strings()
491 mutex_lock(&phydev->lock); in phy_ethtool_get_strings()
492 phydev->drv->get_strings(phydev, data); in phy_ethtool_get_strings()
493 mutex_unlock(&phydev->lock); in phy_ethtool_get_strings()
500 * phy_ethtool_get_sset_count - Get the number of statistic counters
508 if (!phydev->drv) in phy_ethtool_get_sset_count()
509 return -EIO; in phy_ethtool_get_sset_count()
511 if (phydev->drv->get_sset_count && in phy_ethtool_get_sset_count()
512 phydev->drv->get_strings && in phy_ethtool_get_sset_count()
513 phydev->drv->get_stats) { in phy_ethtool_get_sset_count()
514 mutex_lock(&phydev->lock); in phy_ethtool_get_sset_count()
515 ret = phydev->drv->get_sset_count(phydev); in phy_ethtool_get_sset_count()
516 mutex_unlock(&phydev->lock); in phy_ethtool_get_sset_count()
521 return -EOPNOTSUPP; in phy_ethtool_get_sset_count()
526 * phy_ethtool_get_stats - Get the statistic counters
535 if (!phydev->drv) in phy_ethtool_get_stats()
536 return -EIO; in phy_ethtool_get_stats()
538 mutex_lock(&phydev->lock); in phy_ethtool_get_stats()
539 phydev->drv->get_stats(phydev, stats, data); in phy_ethtool_get_stats()
540 mutex_unlock(&phydev->lock); in phy_ethtool_get_stats()
547 * phy_start_cable_test - Start a cable test
555 struct net_device *dev = phydev->attached_dev; in phy_start_cable_test()
556 int err = -ENOMEM; in phy_start_cable_test()
558 if (!(phydev->drv && in phy_start_cable_test()
559 phydev->drv->cable_test_start && in phy_start_cable_test()
560 phydev->drv->cable_test_get_status)) { in phy_start_cable_test()
563 return -EOPNOTSUPP; in phy_start_cable_test()
566 mutex_lock(&phydev->lock); in phy_start_cable_test()
567 if (phydev->state == PHY_CABLETEST) { in phy_start_cable_test()
570 err = -EBUSY; in phy_start_cable_test()
574 if (phydev->state < PHY_UP || in phy_start_cable_test()
575 phydev->state > PHY_CABLETEST) { in phy_start_cable_test()
578 err = -EBUSY; in phy_start_cable_test()
590 err = phydev->drv->cable_test_start(phydev); in phy_start_cable_test()
597 phydev->state = PHY_CABLETEST; in phy_start_cable_test()
602 mutex_unlock(&phydev->lock); in phy_start_cable_test()
609 mutex_unlock(&phydev->lock); in phy_start_cable_test()
616 * phy_start_cable_test_tdr - Start a raw TDR cable test
626 struct net_device *dev = phydev->attached_dev; in phy_start_cable_test_tdr()
627 int err = -ENOMEM; in phy_start_cable_test_tdr()
629 if (!(phydev->drv && in phy_start_cable_test_tdr()
630 phydev->drv->cable_test_tdr_start && in phy_start_cable_test_tdr()
631 phydev->drv->cable_test_get_status)) { in phy_start_cable_test_tdr()
634 return -EOPNOTSUPP; in phy_start_cable_test_tdr()
637 mutex_lock(&phydev->lock); in phy_start_cable_test_tdr()
638 if (phydev->state == PHY_CABLETEST) { in phy_start_cable_test_tdr()
641 err = -EBUSY; in phy_start_cable_test_tdr()
645 if (phydev->state < PHY_UP || in phy_start_cable_test_tdr()
646 phydev->state > PHY_CABLETEST) { in phy_start_cable_test_tdr()
649 err = -EBUSY; in phy_start_cable_test_tdr()
661 err = phydev->drv->cable_test_tdr_start(phydev, config); in phy_start_cable_test_tdr()
668 phydev->state = PHY_CABLETEST; in phy_start_cable_test_tdr()
673 mutex_unlock(&phydev->lock); in phy_start_cable_test_tdr()
680 mutex_unlock(&phydev->lock); in phy_start_cable_test_tdr()
688 if (phydev->drv->config_aneg) in phy_config_aneg()
689 return phydev->drv->config_aneg(phydev); in phy_config_aneg()
694 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) in phy_config_aneg()
701 * phy_check_link_status - check link status and set state accordingly
711 WARN_ON(!mutex_is_locked(&phydev->lock)); in phy_check_link_status()
714 * report that Link is Down when loopback is enabled. in phy_check_link_status()
716 if (phydev->loopback_enabled) in phy_check_link_status()
723 if (phydev->link && phydev->state != PHY_RUNNING) { in phy_check_link_status()
725 phydev->state = PHY_RUNNING; in phy_check_link_status()
727 } else if (!phydev->link && phydev->state != PHY_NOLINK) { in phy_check_link_status()
728 phydev->state = PHY_NOLINK; in phy_check_link_status()
736 * _phy_start_aneg - start auto-negotiation for this PHY device
742 * reflect the beginning of Auto-negotiation or forcing.
748 lockdep_assert_held(&phydev->lock); in _phy_start_aneg()
750 if (!phydev->drv) in _phy_start_aneg()
751 return -EIO; in _phy_start_aneg()
753 if (AUTONEG_DISABLE == phydev->autoneg) in _phy_start_aneg()
767 * phy_start_aneg - start auto-negotiation for this PHY device
773 * reflect the beginning of Auto-negotiation or forcing.
779 mutex_lock(&phydev->lock); in phy_start_aneg()
781 mutex_unlock(&phydev->lock); in phy_start_aneg()
795 } while (!ret && --retries); in phy_poll_aneg_done()
798 return -ETIMEDOUT; in phy_poll_aneg_done()
807 u8 autoneg = cmd->base.autoneg; in phy_ethtool_ksettings_set()
808 u8 duplex = cmd->base.duplex; in phy_ethtool_ksettings_set()
809 u32 speed = cmd->base.speed; in phy_ethtool_ksettings_set() local
811 if (cmd->base.phy_address != phydev->mdio.addr) in phy_ethtool_ksettings_set()
812 return -EINVAL; in phy_ethtool_ksettings_set()
814 linkmode_copy(advertising, cmd->link_modes.advertising); in phy_ethtool_ksettings_set()
817 linkmode_and(advertising, advertising, phydev->supported); in phy_ethtool_ksettings_set()
821 return -EINVAL; in phy_ethtool_ksettings_set()
824 return -EINVAL; in phy_ethtool_ksettings_set()
827 ((speed != SPEED_1000 && in phy_ethtool_ksettings_set()
828 speed != SPEED_100 && in phy_ethtool_ksettings_set()
829 speed != SPEED_10) || in phy_ethtool_ksettings_set()
832 return -EINVAL; in phy_ethtool_ksettings_set()
834 mutex_lock(&phydev->lock); in phy_ethtool_ksettings_set()
835 phydev->autoneg = autoneg; in phy_ethtool_ksettings_set()
838 phydev->speed = speed; in phy_ethtool_ksettings_set()
839 phydev->duplex = duplex; in phy_ethtool_ksettings_set()
842 linkmode_copy(phydev->advertising, advertising); in phy_ethtool_ksettings_set()
845 phydev->advertising, autoneg == AUTONEG_ENABLE); in phy_ethtool_ksettings_set()
847 phydev->master_slave_set = cmd->base.master_slave_cfg; in phy_ethtool_ksettings_set()
848 phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl; in phy_ethtool_ksettings_set()
852 phydev->state = PHY_UP; in phy_ethtool_ksettings_set()
858 mutex_unlock(&phydev->lock); in phy_ethtool_ksettings_set()
864 * phy_speed_down - set speed to lowest speed supported by both link partners
881 if (phydev->autoneg != AUTONEG_ENABLE) in phy_speed_down()
884 linkmode_copy(adv_tmp, phydev->advertising); in phy_speed_down()
890 linkmode_copy(phydev->adv_old, adv_tmp); in phy_speed_down()
892 if (linkmode_equal(phydev->advertising, adv_tmp)) in phy_speed_down()
904 * phy_speed_up - (re)set advertised speeds to all supported speeds
913 if (phydev->autoneg != AUTONEG_ENABLE) in phy_speed_up()
916 if (linkmode_empty(phydev->adv_old)) in phy_speed_up()
919 linkmode_copy(adv_tmp, phydev->advertising); in phy_speed_up()
920 linkmode_copy(phydev->advertising, phydev->adv_old); in phy_speed_up()
921 linkmode_zero(phydev->adv_old); in phy_speed_up()
923 if (linkmode_equal(phydev->advertising, adv_tmp)) in phy_speed_up()
931 * phy_start_machine - start PHY state machine tracking
947 * phy_stop_machine - stop the PHY state machine tracking
956 cancel_delayed_work_sync(&phydev->state_queue); in phy_stop_machine()
958 mutex_lock(&phydev->lock); in phy_stop_machine()
960 phydev->state = PHY_UP; in phy_stop_machine()
961 mutex_unlock(&phydev->lock); in phy_stop_machine()
965 * phy_error - enter HALTED state for this PHY device
971 * phydev->lock is held.
977 mutex_lock(&phydev->lock); in phy_error()
978 phydev->state = PHY_HALTED; in phy_error()
979 mutex_unlock(&phydev->lock); in phy_error()
985 * phy_disable_interrupts - Disable the PHY interrupts from the PHY side
1002 * phy_did_interrupt - Checks if the PHY generated an interrupt
1009 mutex_lock(&phydev->lock); in phy_did_interrupt()
1010 ret = phydev->drv->did_interrupt(phydev); in phy_did_interrupt()
1011 mutex_unlock(&phydev->lock); in phy_did_interrupt()
1017 * phy_handle_interrupt - Handle PHY interrupt
1024 mutex_lock(&phydev->lock); in phy_handle_interrupt()
1025 ret = phydev->drv->handle_interrupt(phydev); in phy_handle_interrupt()
1026 mutex_unlock(&phydev->lock); in phy_handle_interrupt()
1032 * phy_interrupt - PHY interrupt handler
1041 struct phy_driver *drv = phydev->drv; in phy_interrupt()
1043 if (drv->handle_interrupt) in phy_interrupt()
1046 if (drv->did_interrupt && !phy_did_interrupt(phydev)) in phy_interrupt()
1053 if (!drv->did_interrupt && phy_clear_interrupt(phydev)) { in phy_interrupt()
1062 * phy_enable_interrupts - Enable the interrupts from the PHY side
1076 * phy_request_interrupt - request and enable interrupt for a PHY device
1087 err = request_threaded_irq(phydev->irq, NULL, phy_interrupt, in phy_request_interrupt()
1092 err, phydev->irq); in phy_request_interrupt()
1093 phydev->irq = PHY_POLL; in phy_request_interrupt()
1098 phydev->irq = PHY_POLL; in phy_request_interrupt()
1105 * phy_free_interrupt - disable and free interrupt for a PHY device
1114 free_irq(phydev->irq, phydev); in phy_free_interrupt()
1119 * phy_stop - Bring down the PHY link, and stop checking the status
1124 struct net_device *dev = phydev->attached_dev; in phy_stop()
1127 if (!phy_is_started(phydev) && phydev->state != PHY_DOWN) { in phy_stop()
1129 phy_state_to_str(phydev->state)); in phy_stop()
1133 mutex_lock(&phydev->lock); in phy_stop()
1134 old_state = phydev->state; in phy_stop()
1136 if (phydev->state == PHY_CABLETEST) { in phy_stop()
1141 if (phydev->sfp_bus) in phy_stop()
1142 sfp_upstream_stop(phydev->sfp_bus); in phy_stop()
1144 phydev->state = PHY_HALTED; in phy_stop()
1147 mutex_unlock(&phydev->lock); in phy_stop()
1149 phy_state_machine(&phydev->state_queue.work); in phy_stop()
1160 * phy_start - start or restart a PHY device
1164 * handle PHY-related work. Used during startup to start the
1171 mutex_lock(&phydev->lock); in phy_start()
1173 if (phydev->state != PHY_READY && phydev->state != PHY_HALTED) { in phy_start()
1175 phy_state_to_str(phydev->state)); in phy_start()
1179 if (phydev->sfp_bus) in phy_start()
1180 sfp_upstream_start(phydev->sfp_bus); in phy_start()
1185 phydev->state = PHY_UP; in phy_start()
1189 mutex_unlock(&phydev->lock); in phy_start()
1194 * phy_state_machine - Handle the state machine
1202 struct net_device *dev = phydev->attached_dev; in phy_state_machine()
1208 mutex_lock(&phydev->lock); in phy_state_machine()
1210 old_state = phydev->state; in phy_state_machine()
1212 switch (phydev->state) { in phy_state_machine()
1225 err = phydev->drv->cable_test_get_status(phydev, &finished); in phy_state_machine()
1230 phydev->state = PHY_UP; in phy_state_machine()
1238 phydev->state = PHY_UP; in phy_state_machine()
1242 if (phydev->link) { in phy_state_machine()
1243 phydev->link = 0; in phy_state_machine()
1250 mutex_unlock(&phydev->lock); in phy_state_machine()
1262 /* Only re-schedule a PHY state machine change if we are polling the in phy_state_machine()
1270 mutex_lock(&phydev->lock); in phy_state_machine()
1273 mutex_unlock(&phydev->lock); in phy_state_machine()
1277 * phy_mac_interrupt - MAC says the link has changed
1315 * phy_init_eee - init and check the EEE feature
1319 * Description: it checks if the Energy-Efficient Ethernet (EEE)
1326 if (!phydev->drv) in phy_init_eee()
1327 return -EIO; in phy_init_eee()
1329 /* According to 802.3az,the EEE is supported only in full duplex-mode. in phy_init_eee()
1331 if (phydev->duplex == DUPLEX_FULL) { in phy_init_eee()
1368 if (!phy_check_valid(phydev->speed, phydev->duplex, common)) in phy_init_eee()
1381 return -EPROTONOSUPPORT; in phy_init_eee()
1386 * phy_get_eee_err - report the EEE wake error count
1389 * Description: it is to report the number of time where the PHY
1394 if (!phydev->drv) in phy_get_eee_err()
1395 return -EIO; in phy_get_eee_err()
1402 * phy_ethtool_get_eee - get EEE supported and status
1413 if (!phydev->drv) in phy_ethtool_get_eee()
1414 return -EIO; in phy_ethtool_get_eee()
1420 data->supported = mmd_eee_cap_to_ethtool_sup_t(val); in phy_ethtool_get_eee()
1426 data->advertised = mmd_eee_adv_to_ethtool_adv_t(val); in phy_ethtool_get_eee()
1427 data->eee_enabled = !!data->advertised; in phy_ethtool_get_eee()
1433 data->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val); in phy_ethtool_get_eee()
1435 data->eee_active = !!(data->advertised & data->lp_advertised); in phy_ethtool_get_eee()
1442 * phy_ethtool_set_eee - set EEE supported and status
1452 if (!phydev->drv) in phy_ethtool_set_eee()
1453 return -EIO; in phy_ethtool_set_eee()
1464 if (data->eee_enabled) { in phy_ethtool_set_eee()
1465 adv = !data->advertised ? cap : in phy_ethtool_set_eee()
1466 ethtool_adv_to_mmd_eee_adv_t(data->advertised) & cap; in phy_ethtool_set_eee()
1468 adv &= ~phydev->eee_broken_modes; in phy_ethtool_set_eee()
1479 if (phydev->autoneg == AUTONEG_ENABLE) { in phy_ethtool_set_eee()
1491 * phy_ethtool_set_wol - Configure Wake On LAN
1498 if (phydev->drv && phydev->drv->set_wol) in phy_ethtool_set_wol()
1499 return phydev->drv->set_wol(phydev, wol); in phy_ethtool_set_wol()
1501 return -EOPNOTSUPP; in phy_ethtool_set_wol()
1506 * phy_ethtool_get_wol - Get the current Wake On LAN configuration
1513 if (phydev->drv && phydev->drv->get_wol) in phy_ethtool_get_wol()
1514 phydev->drv->get_wol(phydev, wol); in phy_ethtool_get_wol()
1521 struct phy_device *phydev = ndev->phydev; in phy_ethtool_get_link_ksettings()
1524 return -ENODEV; in phy_ethtool_get_link_ksettings()
1535 struct phy_device *phydev = ndev->phydev; in phy_ethtool_set_link_ksettings()
1538 return -ENODEV; in phy_ethtool_set_link_ksettings()
1545 * phy_ethtool_nway_reset - Restart auto negotiation
1550 struct phy_device *phydev = ndev->phydev; in phy_ethtool_nway_reset()
1553 return -ENODEV; in phy_ethtool_nway_reset()
1555 if (!phydev->drv) in phy_ethtool_nway_reset()
1556 return -EIO; in phy_ethtool_nway_reset()