• Home
  • Raw
  • Download

Lines Matching full:phydev

68  * @phydev: the phy_device struct
70 void phy_print_status(struct phy_device *phydev) in phy_print_status() argument
72 if (phydev->link) { in phy_print_status()
73 netdev_info(phydev->attached_dev, in phy_print_status()
75 phy_speed_to_str(phydev->speed), in phy_print_status()
76 phy_duplex_to_str(phydev->duplex), in phy_print_status()
77 phydev->pause ? "rx/tx" : "off"); in phy_print_status()
79 netdev_info(phydev->attached_dev, "Link is Down\n"); in phy_print_status()
86 * @phydev: the phy_device struct
88 * If the @phydev driver has an ack_interrupt function, call it to
93 static int phy_clear_interrupt(struct phy_device *phydev) in phy_clear_interrupt() argument
95 if (phydev->drv->ack_interrupt) in phy_clear_interrupt()
96 return phydev->drv->ack_interrupt(phydev); in phy_clear_interrupt()
103 * @phydev: the phy_device struct
104 * @interrupts: interrupt flags to configure for this @phydev
108 static int phy_config_interrupt(struct phy_device *phydev, u32 interrupts) in phy_config_interrupt() argument
110 phydev->interrupts = interrupts; in phy_config_interrupt()
111 if (phydev->drv->config_intr) in phy_config_interrupt()
112 return phydev->drv->config_intr(phydev); in phy_config_interrupt()
119 * @phydev: target phy_device struct
121 * Restart the autonegotiation on @phydev. Returns >= 0 on success or
124 int phy_restart_aneg(struct phy_device *phydev) in phy_restart_aneg() argument
128 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) in phy_restart_aneg()
129 ret = genphy_c45_restart_aneg(phydev); in phy_restart_aneg()
131 ret = genphy_restart_aneg(phydev); in phy_restart_aneg()
139 * @phydev: target phy_device struct
141 * Description: Return the auto-negotiation status from this @phydev
145 int phy_aneg_done(struct phy_device *phydev) in phy_aneg_done() argument
147 if (phydev->drv && phydev->drv->aneg_done) in phy_aneg_done()
148 return phydev->drv->aneg_done(phydev); in phy_aneg_done()
153 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) in phy_aneg_done()
156 return genphy_aneg_done(phydev); in phy_aneg_done()
218 * @phydev: the target phy_device struct
224 static void phy_sanitize_settings(struct phy_device *phydev) in phy_sanitize_settings() argument
227 u32 features = phydev->supported; in phy_sanitize_settings()
231 phydev->autoneg = AUTONEG_DISABLE; in phy_sanitize_settings()
233 setting = phy_find_valid(phydev->speed, phydev->duplex, features); in phy_sanitize_settings()
235 phydev->speed = setting->speed; in phy_sanitize_settings()
236 phydev->duplex = setting->duplex; in phy_sanitize_settings()
239 phydev->speed = SPEED_UNKNOWN; in phy_sanitize_settings()
240 phydev->duplex = DUPLEX_UNKNOWN; in phy_sanitize_settings()
246 * @phydev: target phy_device struct
257 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd) in phy_ethtool_sset() argument
261 if (cmd->phy_address != phydev->mdio.addr) in phy_ethtool_sset()
265 cmd->advertising &= phydev->supported; in phy_ethtool_sset()
282 phydev->autoneg = cmd->autoneg; in phy_ethtool_sset()
284 phydev->speed = speed; in phy_ethtool_sset()
286 phydev->advertising = cmd->advertising; in phy_ethtool_sset()
289 phydev->advertising |= ADVERTISED_Autoneg; in phy_ethtool_sset()
291 phydev->advertising &= ~ADVERTISED_Autoneg; in phy_ethtool_sset()
293 phydev->duplex = cmd->duplex; in phy_ethtool_sset()
295 phydev->mdix_ctrl = cmd->eth_tp_mdix_ctrl; in phy_ethtool_sset()
298 phy_start_aneg(phydev); in phy_ethtool_sset()
304 int phy_ethtool_ksettings_set(struct phy_device *phydev, in phy_ethtool_ksettings_set() argument
312 if (cmd->base.phy_address != phydev->mdio.addr) in phy_ethtool_ksettings_set()
319 advertising &= phydev->supported; in phy_ethtool_ksettings_set()
336 phydev->autoneg = autoneg; in phy_ethtool_ksettings_set()
338 phydev->speed = speed; in phy_ethtool_ksettings_set()
340 phydev->advertising = advertising; in phy_ethtool_ksettings_set()
343 phydev->advertising |= ADVERTISED_Autoneg; in phy_ethtool_ksettings_set()
345 phydev->advertising &= ~ADVERTISED_Autoneg; in phy_ethtool_ksettings_set()
347 phydev->duplex = duplex; in phy_ethtool_ksettings_set()
349 phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl; in phy_ethtool_ksettings_set()
352 phy_start_aneg(phydev); in phy_ethtool_ksettings_set()
358 void phy_ethtool_ksettings_get(struct phy_device *phydev, in phy_ethtool_ksettings_get() argument
362 phydev->supported); in phy_ethtool_ksettings_get()
365 phydev->advertising); in phy_ethtool_ksettings_get()
368 phydev->lp_advertising); in phy_ethtool_ksettings_get()
370 cmd->base.speed = phydev->speed; in phy_ethtool_ksettings_get()
371 cmd->base.duplex = phydev->duplex; in phy_ethtool_ksettings_get()
372 if (phydev->interface == PHY_INTERFACE_MODE_MOCA) in phy_ethtool_ksettings_get()
376 cmd->base.transceiver = phy_is_internal(phydev) ? in phy_ethtool_ksettings_get()
378 cmd->base.phy_address = phydev->mdio.addr; in phy_ethtool_ksettings_get()
379 cmd->base.autoneg = phydev->autoneg; in phy_ethtool_ksettings_get()
380 cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl; in phy_ethtool_ksettings_get()
381 cmd->base.eth_tp_mdix = phydev->mdix; in phy_ethtool_ksettings_get()
387 * @phydev: the phy_device struct
395 int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd) in phy_mii_ioctl() argument
403 mii_data->phy_id = phydev->mdio.addr; in phy_mii_ioctl()
407 mii_data->val_out = mdiobus_read(phydev->mdio.bus, in phy_mii_ioctl()
413 if (mii_data->phy_id == phydev->mdio.addr) { in phy_mii_ioctl()
417 if (phydev->autoneg == AUTONEG_ENABLE) in phy_mii_ioctl()
419 phydev->autoneg = AUTONEG_DISABLE; in phy_mii_ioctl()
421 phydev->duplex = DUPLEX_FULL; in phy_mii_ioctl()
423 phydev->duplex = DUPLEX_HALF; in phy_mii_ioctl()
425 phydev->speed = SPEED_1000; in phy_mii_ioctl()
427 phydev->speed = SPEED_100; in phy_mii_ioctl()
428 else phydev->speed = SPEED_10; in phy_mii_ioctl()
431 if (phydev->autoneg == AUTONEG_DISABLE) in phy_mii_ioctl()
433 phydev->autoneg = AUTONEG_ENABLE; in phy_mii_ioctl()
437 phydev->advertising = mii_adv_to_ethtool_adv_t(val); in phy_mii_ioctl()
446 mdiobus_write(phydev->mdio.bus, mii_data->phy_id, in phy_mii_ioctl()
449 if (mii_data->phy_id == phydev->mdio.addr && in phy_mii_ioctl()
452 return phy_init_hw(phydev); in phy_mii_ioctl()
455 return phy_start_aneg(phydev); in phy_mii_ioctl()
460 if (phydev->drv && phydev->drv->hwtstamp) in phy_mii_ioctl()
461 return phydev->drv->hwtstamp(phydev, ifr); in phy_mii_ioctl()
470 static int phy_config_aneg(struct phy_device *phydev) in phy_config_aneg() argument
472 if (phydev->drv->config_aneg) in phy_config_aneg()
473 return phydev->drv->config_aneg(phydev); in phy_config_aneg()
478 if (phydev->is_c45 && !(phydev->c45_ids.devices_in_package & BIT(0))) in phy_config_aneg()
481 return genphy_config_aneg(phydev); in phy_config_aneg()
486 * @phydev: the phy_device struct
494 static int phy_start_aneg_priv(struct phy_device *phydev, bool sync) in phy_start_aneg_priv() argument
499 if (!phydev->drv) in phy_start_aneg_priv()
502 mutex_lock(&phydev->lock); in phy_start_aneg_priv()
504 if (AUTONEG_DISABLE == phydev->autoneg) in phy_start_aneg_priv()
505 phy_sanitize_settings(phydev); in phy_start_aneg_priv()
508 phydev->lp_advertising = 0; in phy_start_aneg_priv()
510 err = phy_config_aneg(phydev); in phy_start_aneg_priv()
514 if (phydev->state != PHY_HALTED) { in phy_start_aneg_priv()
515 if (AUTONEG_ENABLE == phydev->autoneg) { in phy_start_aneg_priv()
516 phydev->state = PHY_AN; in phy_start_aneg_priv()
517 phydev->link_timeout = PHY_AN_TIMEOUT; in phy_start_aneg_priv()
519 phydev->state = PHY_FORCING; in phy_start_aneg_priv()
520 phydev->link_timeout = PHY_FORCE_TIMEOUT; in phy_start_aneg_priv()
528 if (!phy_polling_mode(phydev) && phydev->state == PHY_AN) { in phy_start_aneg_priv()
529 err = phy_aneg_done(phydev); in phy_start_aneg_priv()
537 mutex_unlock(&phydev->lock); in phy_start_aneg_priv()
540 phy_trigger_machine(phydev, sync); in phy_start_aneg_priv()
547 * @phydev: the phy_device struct
554 int phy_start_aneg(struct phy_device *phydev) in phy_start_aneg() argument
556 return phy_start_aneg_priv(phydev, true); in phy_start_aneg()
560 static int phy_poll_aneg_done(struct phy_device *phydev) in phy_poll_aneg_done() argument
567 ret = phy_aneg_done(phydev); in phy_poll_aneg_done()
578 * @phydev: the phy_device struct
589 int phy_speed_down(struct phy_device *phydev, bool sync) in phy_speed_down() argument
591 u32 adv = phydev->lp_advertising & phydev->supported; in phy_speed_down()
592 u32 adv_old = phydev->advertising; in phy_speed_down()
595 if (phydev->autoneg != AUTONEG_ENABLE) in phy_speed_down()
599 phydev->advertising &= ~(PHY_100BT_FEATURES | in phy_speed_down()
602 phydev->advertising &= ~PHY_1000BT_FEATURES; in phy_speed_down()
604 if (phydev->advertising == adv_old) in phy_speed_down()
607 ret = phy_config_aneg(phydev); in phy_speed_down()
611 return sync ? phy_poll_aneg_done(phydev) : 0; in phy_speed_down()
617 * @phydev: the phy_device struct
621 int phy_speed_up(struct phy_device *phydev) in phy_speed_up() argument
624 u32 adv_old = phydev->advertising; in phy_speed_up()
626 if (phydev->autoneg != AUTONEG_ENABLE) in phy_speed_up()
629 phydev->advertising = (adv_old & ~mask) | (phydev->supported & mask); in phy_speed_up()
631 if (phydev->advertising == adv_old) in phy_speed_up()
634 return phy_config_aneg(phydev); in phy_speed_up()
640 * @phydev: the phy_device struct
648 void phy_start_machine(struct phy_device *phydev) in phy_start_machine() argument
650 queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, HZ); in phy_start_machine()
657 * @phydev: the phy_device struct
664 void phy_trigger_machine(struct phy_device *phydev, bool sync) in phy_trigger_machine() argument
667 cancel_delayed_work_sync(&phydev->state_queue); in phy_trigger_machine()
669 cancel_delayed_work(&phydev->state_queue); in phy_trigger_machine()
670 queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, 0); in phy_trigger_machine()
675 * @phydev: target phy_device struct
681 void phy_stop_machine(struct phy_device *phydev) in phy_stop_machine() argument
683 cancel_delayed_work_sync(&phydev->state_queue); in phy_stop_machine()
685 mutex_lock(&phydev->lock); in phy_stop_machine()
686 if (phydev->state > PHY_UP && phydev->state != PHY_HALTED) in phy_stop_machine()
687 phydev->state = PHY_UP; in phy_stop_machine()
688 mutex_unlock(&phydev->lock); in phy_stop_machine()
693 * @phydev: target phy_device struct
698 * phydev->lock is held.
700 static void phy_error(struct phy_device *phydev) in phy_error() argument
702 mutex_lock(&phydev->lock); in phy_error()
703 phydev->state = PHY_HALTED; in phy_error()
704 mutex_unlock(&phydev->lock); in phy_error()
706 phy_trigger_machine(phydev, false); in phy_error()
711 * @phydev: target phy_device struct
713 static int phy_disable_interrupts(struct phy_device *phydev) in phy_disable_interrupts() argument
718 err = phy_config_interrupt(phydev, PHY_INTERRUPT_DISABLED); in phy_disable_interrupts()
723 return phy_clear_interrupt(phydev); in phy_disable_interrupts()
728 * @phydev: phy_device struct that interrupted
730 static irqreturn_t phy_change(struct phy_device *phydev) in phy_change() argument
732 if (phy_interrupt_is_valid(phydev)) { in phy_change()
733 if (phydev->drv->did_interrupt && in phy_change()
734 !phydev->drv->did_interrupt(phydev)) in phy_change()
737 if (phydev->state == PHY_HALTED) in phy_change()
738 if (phy_disable_interrupts(phydev)) in phy_change()
742 mutex_lock(&phydev->lock); in phy_change()
743 if ((PHY_RUNNING == phydev->state) || (PHY_NOLINK == phydev->state)) in phy_change()
744 phydev->state = PHY_CHANGELINK; in phy_change()
745 mutex_unlock(&phydev->lock); in phy_change()
748 phy_trigger_machine(phydev, true); in phy_change()
750 if (phy_interrupt_is_valid(phydev) && phy_clear_interrupt(phydev)) in phy_change()
755 phy_error(phydev); in phy_change()
765 struct phy_device *phydev = in phy_change_work() local
768 phy_change(phydev); in phy_change_work()
781 struct phy_device *phydev = phy_dat; in phy_interrupt() local
783 if (PHY_HALTED == phydev->state) in phy_interrupt()
786 return phy_change(phydev); in phy_interrupt()
791 * @phydev: target phy_device struct
793 static int phy_enable_interrupts(struct phy_device *phydev) in phy_enable_interrupts() argument
795 int err = phy_clear_interrupt(phydev); in phy_enable_interrupts()
800 return phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED); in phy_enable_interrupts()
805 * @phydev: target phy_device struct
813 int phy_start_interrupts(struct phy_device *phydev) in phy_start_interrupts() argument
815 if (request_threaded_irq(phydev->irq, NULL, phy_interrupt, in phy_start_interrupts()
817 phydev_name(phydev), phydev) < 0) { in phy_start_interrupts()
819 phydev->mdio.bus->name, phydev->irq); in phy_start_interrupts()
820 phydev->irq = PHY_POLL; in phy_start_interrupts()
824 return phy_enable_interrupts(phydev); in phy_start_interrupts()
830 * @phydev: target phy_device struct
832 int phy_stop_interrupts(struct phy_device *phydev) in phy_stop_interrupts() argument
834 int err = phy_disable_interrupts(phydev); in phy_stop_interrupts()
837 phy_error(phydev); in phy_stop_interrupts()
839 free_irq(phydev->irq, phydev); in phy_stop_interrupts()
847 * @phydev: target phy_device struct
849 void phy_stop(struct phy_device *phydev) in phy_stop() argument
851 mutex_lock(&phydev->lock); in phy_stop()
853 if (PHY_HALTED == phydev->state) in phy_stop()
856 if (phy_interrupt_is_valid(phydev)) in phy_stop()
857 phy_disable_interrupts(phydev); in phy_stop()
859 phydev->state = PHY_HALTED; in phy_stop()
862 mutex_unlock(&phydev->lock); in phy_stop()
873 * @phydev: target phy_device struct
881 void phy_start(struct phy_device *phydev) in phy_start() argument
885 mutex_lock(&phydev->lock); in phy_start()
887 switch (phydev->state) { in phy_start()
889 phydev->state = PHY_PENDING; in phy_start()
892 phydev->state = PHY_UP; in phy_start()
896 __phy_resume(phydev); in phy_start()
899 if (phy_interrupt_is_valid(phydev)) { in phy_start()
900 err = phy_enable_interrupts(phydev); in phy_start()
905 phydev->state = PHY_RESUMING; in phy_start()
910 mutex_unlock(&phydev->lock); in phy_start()
912 phy_trigger_machine(phydev, true); in phy_start()
916 static void phy_link_up(struct phy_device *phydev) in phy_link_up() argument
918 phydev->phy_link_change(phydev, true, true); in phy_link_up()
919 phy_led_trigger_change_speed(phydev); in phy_link_up()
922 static void phy_link_down(struct phy_device *phydev, bool do_carrier) in phy_link_down() argument
924 phydev->phy_link_change(phydev, false, do_carrier); in phy_link_down()
925 phy_led_trigger_change_speed(phydev); in phy_link_down()
935 struct phy_device *phydev = in phy_state_machine() local
942 mutex_lock(&phydev->lock); in phy_state_machine()
944 old_state = phydev->state; in phy_state_machine()
946 if (phydev->drv && phydev->drv->link_change_notify) in phy_state_machine()
947 phydev->drv->link_change_notify(phydev); in phy_state_machine()
949 switch (phydev->state) { in phy_state_machine()
958 phydev->link_timeout = PHY_AN_TIMEOUT; in phy_state_machine()
962 err = phy_read_status(phydev); in phy_state_machine()
967 if (!phydev->link) { in phy_state_machine()
968 phydev->state = PHY_NOLINK; in phy_state_machine()
969 phy_link_down(phydev, true); in phy_state_machine()
974 err = phy_aneg_done(phydev); in phy_state_machine()
980 phydev->state = PHY_RUNNING; in phy_state_machine()
981 phy_link_up(phydev); in phy_state_machine()
982 } else if (0 == phydev->link_timeout--) in phy_state_machine()
986 if (!phy_polling_mode(phydev)) in phy_state_machine()
989 err = phy_read_status(phydev); in phy_state_machine()
993 if (phydev->link) { in phy_state_machine()
994 if (AUTONEG_ENABLE == phydev->autoneg) { in phy_state_machine()
995 err = phy_aneg_done(phydev); in phy_state_machine()
1000 phydev->state = PHY_AN; in phy_state_machine()
1001 phydev->link_timeout = PHY_AN_TIMEOUT; in phy_state_machine()
1005 phydev->state = PHY_RUNNING; in phy_state_machine()
1006 phy_link_up(phydev); in phy_state_machine()
1010 err = genphy_update_link(phydev); in phy_state_machine()
1014 if (phydev->link) { in phy_state_machine()
1015 phydev->state = PHY_RUNNING; in phy_state_machine()
1016 phy_link_up(phydev); in phy_state_machine()
1018 if (0 == phydev->link_timeout--) in phy_state_machine()
1020 phy_link_down(phydev, false); in phy_state_machine()
1027 if (phy_polling_mode(phydev)) { in phy_state_machine()
1028 old_link = phydev->link; in phy_state_machine()
1029 err = phy_read_status(phydev); in phy_state_machine()
1033 if (old_link != phydev->link) in phy_state_machine()
1034 phydev->state = PHY_CHANGELINK; in phy_state_machine()
1037 * Failsafe: check that nobody set phydev->link=0 between two in phy_state_machine()
1041 if (!phydev->link && phydev->state == PHY_RUNNING) { in phy_state_machine()
1042 phydev->state = PHY_CHANGELINK; in phy_state_machine()
1043 phydev_err(phydev, "no link in PHY_RUNNING\n"); in phy_state_machine()
1047 err = phy_read_status(phydev); in phy_state_machine()
1051 if (phydev->link) { in phy_state_machine()
1052 phydev->state = PHY_RUNNING; in phy_state_machine()
1053 phy_link_up(phydev); in phy_state_machine()
1055 phydev->state = PHY_NOLINK; in phy_state_machine()
1056 phy_link_down(phydev, true); in phy_state_machine()
1060 if (phydev->link) { in phy_state_machine()
1061 phydev->link = 0; in phy_state_machine()
1062 phy_link_down(phydev, true); in phy_state_machine()
1067 if (AUTONEG_ENABLE == phydev->autoneg) { in phy_state_machine()
1068 err = phy_aneg_done(phydev); in phy_state_machine()
1076 err = phy_read_status(phydev); in phy_state_machine()
1080 if (phydev->link) { in phy_state_machine()
1081 phydev->state = PHY_RUNNING; in phy_state_machine()
1082 phy_link_up(phydev); in phy_state_machine()
1084 phydev->state = PHY_NOLINK; in phy_state_machine()
1085 phy_link_down(phydev, false); in phy_state_machine()
1088 phydev->state = PHY_AN; in phy_state_machine()
1089 phydev->link_timeout = PHY_AN_TIMEOUT; in phy_state_machine()
1092 err = phy_read_status(phydev); in phy_state_machine()
1096 if (phydev->link) { in phy_state_machine()
1097 phydev->state = PHY_RUNNING; in phy_state_machine()
1098 phy_link_up(phydev); in phy_state_machine()
1100 phydev->state = PHY_NOLINK; in phy_state_machine()
1101 phy_link_down(phydev, false); in phy_state_machine()
1107 mutex_unlock(&phydev->lock); in phy_state_machine()
1110 err = phy_start_aneg_priv(phydev, false); in phy_state_machine()
1112 phy_suspend(phydev); in phy_state_machine()
1115 phy_error(phydev); in phy_state_machine()
1117 if (old_state != phydev->state) in phy_state_machine()
1118 phydev_dbg(phydev, "PHY state change %s -> %s\n", in phy_state_machine()
1120 phy_state_to_str(phydev->state)); in phy_state_machine()
1126 if (phy_polling_mode(phydev)) in phy_state_machine()
1127 queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, in phy_state_machine()
1133 * @phydev: phy_device struct with changed link
1138 void phy_mac_interrupt(struct phy_device *phydev) in phy_mac_interrupt() argument
1141 queue_work(system_power_efficient_wq, &phydev->phy_queue); in phy_mac_interrupt()
1147 * @phydev: target phy_device struct
1155 int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable) in phy_init_eee() argument
1157 if (!phydev->drv) in phy_init_eee()
1162 if (phydev->duplex == DUPLEX_FULL) { in phy_init_eee()
1168 status = phy_read_status(phydev); in phy_init_eee()
1173 eee_cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in phy_init_eee()
1184 eee_lp = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in phy_init_eee()
1188 eee_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in phy_init_eee()
1194 if (!phy_check_valid(phydev->speed, phydev->duplex, lp & adv)) in phy_init_eee()
1201 int val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1); in phy_init_eee()
1206 phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, val); in phy_init_eee()
1218 * @phydev: target phy_device struct
1223 int phy_get_eee_err(struct phy_device *phydev) in phy_get_eee_err() argument
1225 if (!phydev->drv) in phy_get_eee_err()
1228 return phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_WK_ERR); in phy_get_eee_err()
1234 * @phydev: target phy_device struct
1240 int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data) in phy_ethtool_get_eee() argument
1244 if (!phydev->drv) in phy_ethtool_get_eee()
1248 val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in phy_ethtool_get_eee()
1254 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in phy_ethtool_get_eee()
1260 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in phy_ethtool_get_eee()
1271 * @phydev: target phy_device struct
1276 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data) in phy_ethtool_set_eee() argument
1280 if (!phydev->drv) in phy_ethtool_set_eee()
1284 cap = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in phy_ethtool_set_eee()
1288 old_adv = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in phy_ethtool_set_eee()
1295 adv &= ~phydev->eee_broken_modes; in phy_ethtool_set_eee()
1298 ret = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv); in phy_ethtool_set_eee()
1305 if (phydev->autoneg == AUTONEG_ENABLE) { in phy_ethtool_set_eee()
1306 ret = phy_restart_aneg(phydev); in phy_ethtool_set_eee()
1316 int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in phy_ethtool_set_wol() argument
1318 if (phydev->drv && phydev->drv->set_wol) in phy_ethtool_set_wol()
1319 return phydev->drv->set_wol(phydev, wol); in phy_ethtool_set_wol()
1325 void phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol) in phy_ethtool_get_wol() argument
1327 if (phydev->drv && phydev->drv->get_wol) in phy_ethtool_get_wol()
1328 phydev->drv->get_wol(phydev, wol); in phy_ethtool_get_wol()
1335 struct phy_device *phydev = ndev->phydev; in phy_ethtool_get_link_ksettings() local
1337 if (!phydev) in phy_ethtool_get_link_ksettings()
1340 phy_ethtool_ksettings_get(phydev, cmd); in phy_ethtool_get_link_ksettings()
1349 struct phy_device *phydev = ndev->phydev; in phy_ethtool_set_link_ksettings() local
1351 if (!phydev) in phy_ethtool_set_link_ksettings()
1354 return phy_ethtool_ksettings_set(phydev, cmd); in phy_ethtool_set_link_ksettings()
1360 struct phy_device *phydev = ndev->phydev; in phy_ethtool_nway_reset() local
1362 if (!phydev) in phy_ethtool_nway_reset()
1365 if (!phydev->drv) in phy_ethtool_nway_reset()
1368 return phy_restart_aneg(phydev); in phy_ethtool_nway_reset()