aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/phy.h
diff options
context:
space:
mode:
authorGiuseppe CAVALLARO <peppe.cavallaro@st.com>2012-06-27 17:14:38 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-01 06:34:50 -0400
commita59a4d1921664da63d801ba477950114c71c88c9 (patch)
treea1b5557c8a70aa35bb98822fabae543dc15ae62a /include/linux/phy.h
parentd765955d2ae0b88781a0db3a5bacfe4241925e09 (diff)
phy: add the EEE support and the way to access to the MMD registers.
This patch adds the support for the Energy-Efficient Ethernet (EEE) to the Physical Abstraction Layer. To support the EEE we have to access to the MMD registers 3.20 and 7.60/61. So two new functions have been added to read/write the MMD registers (clause 45). An Ethernet driver (I tested the stmmac) can invoke the phy_init_eee to properly check if the EEE is supported by the PHYs and it can also set the clock stop enable bit in the 3.0 register. The phy_get_eee_err can be used for reporting the number of time where the PHY failed to complete its normal wake sequence. In the end, this patch also adds the EEE ethtool support implementing: o phy_ethtool_set_eee o phy_ethtool_get_eee v1: initial patch v2: fixed some errors especially on naming convention v3: renamed again the mmd read/write functions thank to Ben's feedback v4: moved file to phy.c and added the ethtool support. v5: fixed phy_adv_to_eee, phy_eee_to_supported, phy_eee_to_adv return values according to ethtool API (thanks to Ben's feedback). Renamed some macros to avoid too long names. v6: fixed kernel-doc comments to be properly parsed. Fixed the phy_init_eee function: we need to check which link mode was autonegotiated and then the corresponding bits in 7.60 and 7.61 registers. v7: reviewed the way to get the negotiated settings. v8: fixed a problem in the phy_init_eee return value erroneously added when included the phy_read_status call. v9: do not remove the MDIO_AN_EEE_ADV_100TX and MDIO_AN_EEE_ADV_1000T and fixed the eee_{cap,lp,adv} declaration as "int" instead of u16. Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/phy.h')
-rw-r--r--include/linux/phy.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 7eac80a2557b..c35299e4da8e 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -554,6 +554,11 @@ int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
554 int (*run)(struct phy_device *)); 554 int (*run)(struct phy_device *));
555int phy_scan_fixups(struct phy_device *phydev); 555int phy_scan_fixups(struct phy_device *phydev);
556 556
557int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
558int phy_get_eee_err(struct phy_device *phydev);
559int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
560int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
561
557int __init mdio_bus_init(void); 562int __init mdio_bus_init(void);
558void mdio_bus_exit(void); 563void mdio_bus_exit(void);
559 564