OSDN Git Service

net: phylink: add phylink_get_link_timer_ns() helper
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thu, 27 Oct 2022 13:10:37 +0000 (14:10 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 29 Oct 2022 04:48:30 +0000 (21:48 -0700)
Add a helper to convert the PHY interface mode to the required link
timer setting as stated by the appropriate standard. Inappropriate
interface modes return an error.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/linux/phylink.h

index 63800bf..1df3e5e 100644 (file)
@@ -616,6 +616,30 @@ int phylink_speed_up(struct phylink *pl);
 
 void phylink_set_port_modes(unsigned long *bits);
 
+/**
+ * phylink_get_link_timer_ns - return the PCS link timer value
+ * @interface: link &typedef phy_interface_t mode
+ *
+ * Return the PCS link timer setting in nanoseconds for the PHY @interface
+ * mode, or -EINVAL if not appropriate.
+ */
+static inline int phylink_get_link_timer_ns(phy_interface_t interface)
+{
+       switch (interface) {
+       case PHY_INTERFACE_MODE_SGMII:
+       case PHY_INTERFACE_MODE_QSGMII:
+       case PHY_INTERFACE_MODE_USXGMII:
+               return 1600000;
+
+       case PHY_INTERFACE_MODE_1000BASEX:
+       case PHY_INTERFACE_MODE_2500BASEX:
+               return 10000000;
+
+       default:
+               return -EINVAL;
+       }
+}
+
 void phylink_mii_c22_pcs_decode_state(struct phylink_link_state *state,
                                      u16 bmsr, u16 lpa);
 void phylink_mii_c22_pcs_get_state(struct mdio_device *pcs,