net: dsa: Move the phylink driver calls into port.c
authorIoana Ciornei <ioana.ciornei@nxp.com>
Tue, 28 May 2019 17:38:15 +0000 (20:38 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 May 2019 04:48:53 +0000 (21:48 -0700)
In order to have a common handling of PHYLINK for the slave and non-user
ports, the DSA core glue logic (between PHYLINK and the driver) must use
an API that does not rely on a struct net_device.

These will also be called by the CPU-port-handling code in a further
patch.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Suggested-by: Vladimir Oltean <olteanv@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/dsa_priv.h
net/dsa/port.c
net/dsa/slave.c

index 8f12223..418490b 100644 (file)
@@ -163,6 +163,23 @@ int dsa_port_vid_add(struct dsa_port *dp, u16 vid, u16 flags);
 int dsa_port_vid_del(struct dsa_port *dp, u16 vid);
 int dsa_port_link_register_of(struct dsa_port *dp);
 void dsa_port_link_unregister_of(struct dsa_port *dp);
+void dsa_port_phylink_validate(struct phylink_config *config,
+                              unsigned long *supported,
+                              struct phylink_link_state *state);
+int dsa_port_phylink_mac_link_state(struct phylink_config *config,
+                                   struct phylink_link_state *state);
+void dsa_port_phylink_mac_config(struct phylink_config *config,
+                                unsigned int mode,
+                                const struct phylink_link_state *state);
+void dsa_port_phylink_mac_an_restart(struct phylink_config *config);
+void dsa_port_phylink_mac_link_down(struct phylink_config *config,
+                                   unsigned int mode,
+                                   phy_interface_t interface);
+void dsa_port_phylink_mac_link_up(struct phylink_config *config,
+                                 unsigned int mode,
+                                 phy_interface_t interface,
+                                 struct phy_device *phydev);
+extern const struct phylink_mac_ops dsa_port_phylink_mac_ops;
 
 /* slave.c */
 extern const struct dsa_device_ops notag_netdev_ops;
index ed8ba9d..0051f50 100644 (file)
@@ -422,6 +422,106 @@ static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp)
        return phydev;
 }
 
+void dsa_port_phylink_validate(struct phylink_config *config,
+                              unsigned long *supported,
+                              struct phylink_link_state *state)
+{
+       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+       struct dsa_switch *ds = dp->ds;
+
+       if (!ds->ops->phylink_validate)
+               return;
+
+       ds->ops->phylink_validate(ds, dp->index, supported, state);
+}
+EXPORT_SYMBOL_GPL(dsa_port_phylink_validate);
+
+int dsa_port_phylink_mac_link_state(struct phylink_config *config,
+                                   struct phylink_link_state *state)
+{
+       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+       struct dsa_switch *ds = dp->ds;
+
+       /* Only called for SGMII and 802.3z */
+       if (!ds->ops->phylink_mac_link_state)
+               return -EOPNOTSUPP;
+
+       return ds->ops->phylink_mac_link_state(ds, dp->index, state);
+}
+EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_link_state);
+
+void dsa_port_phylink_mac_config(struct phylink_config *config,
+                                unsigned int mode,
+                                const struct phylink_link_state *state)
+{
+       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+       struct dsa_switch *ds = dp->ds;
+
+       if (!ds->ops->phylink_mac_config)
+               return;
+
+       ds->ops->phylink_mac_config(ds, dp->index, mode, state);
+}
+EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_config);
+
+void dsa_port_phylink_mac_an_restart(struct phylink_config *config)
+{
+       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+       struct dsa_switch *ds = dp->ds;
+
+       if (!ds->ops->phylink_mac_an_restart)
+               return;
+
+       ds->ops->phylink_mac_an_restart(ds, dp->index);
+}
+EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_an_restart);
+
+void dsa_port_phylink_mac_link_down(struct phylink_config *config,
+                                   unsigned int mode,
+                                   phy_interface_t interface)
+{
+       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+       struct net_device *dev = dp->slave;
+       struct dsa_switch *ds = dp->ds;
+
+       if (!ds->ops->phylink_mac_link_down) {
+               if (ds->ops->adjust_link && dev->phydev)
+                       ds->ops->adjust_link(ds, dp->index, dev->phydev);
+               return;
+       }
+
+       ds->ops->phylink_mac_link_down(ds, dp->index, mode, interface);
+}
+EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_link_down);
+
+void dsa_port_phylink_mac_link_up(struct phylink_config *config,
+                                 unsigned int mode,
+                                 phy_interface_t interface,
+                                 struct phy_device *phydev)
+{
+       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+       struct net_device *dev = dp->slave;
+       struct dsa_switch *ds = dp->ds;
+
+       if (!ds->ops->phylink_mac_link_up) {
+               if (ds->ops->adjust_link && dev->phydev)
+                       ds->ops->adjust_link(ds, dp->index, dev->phydev);
+               return;
+       }
+
+       ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev);
+}
+EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_link_up);
+
+const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
+       .validate = dsa_port_phylink_validate,
+       .mac_link_state = dsa_port_phylink_mac_link_state,
+       .mac_config = dsa_port_phylink_mac_config,
+       .mac_an_restart = dsa_port_phylink_mac_an_restart,
+       .mac_link_down = dsa_port_phylink_mac_link_down,
+       .mac_link_up = dsa_port_phylink_mac_link_up,
+};
+
 static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
 {
        struct dsa_switch *ds = dp->ds;
index 48e0176..1e2ae9d 100644 (file)
@@ -1164,100 +1164,6 @@ static struct device_type dsa_type = {
        .name   = "dsa",
 };
 
-static void dsa_slave_phylink_validate(struct phylink_config *config,
-                                      unsigned long *supported,
-                                      struct phylink_link_state *state)
-{
-       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
-       struct dsa_switch *ds = dp->ds;
-
-       if (!ds->ops->phylink_validate)
-               return;
-
-       ds->ops->phylink_validate(ds, dp->index, supported, state);
-}
-
-static int dsa_slave_phylink_mac_link_state(struct phylink_config *config,
-                                           struct phylink_link_state *state)
-{
-       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
-       struct dsa_switch *ds = dp->ds;
-
-       /* Only called for SGMII and 802.3z */
-       if (!ds->ops->phylink_mac_link_state)
-               return -EOPNOTSUPP;
-
-       return ds->ops->phylink_mac_link_state(ds, dp->index, state);
-}
-
-static void dsa_slave_phylink_mac_config(struct phylink_config *config,
-                                        unsigned int mode,
-                                        const struct phylink_link_state *state)
-{
-       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
-       struct dsa_switch *ds = dp->ds;
-
-       if (!ds->ops->phylink_mac_config)
-               return;
-
-       ds->ops->phylink_mac_config(ds, dp->index, mode, state);
-}
-
-static void dsa_slave_phylink_mac_an_restart(struct phylink_config *config)
-{
-       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
-       struct dsa_switch *ds = dp->ds;
-
-       if (!ds->ops->phylink_mac_an_restart)
-               return;
-
-       ds->ops->phylink_mac_an_restart(ds, dp->index);
-}
-
-static void dsa_slave_phylink_mac_link_down(struct phylink_config *config,
-                                           unsigned int mode,
-                                           phy_interface_t interface)
-{
-       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
-       struct net_device *dev = dp->slave;
-       struct dsa_switch *ds = dp->ds;
-
-       if (!ds->ops->phylink_mac_link_down) {
-               if (ds->ops->adjust_link && dev->phydev)
-                       ds->ops->adjust_link(ds, dp->index, dev->phydev);
-               return;
-       }
-
-       ds->ops->phylink_mac_link_down(ds, dp->index, mode, interface);
-}
-
-static void dsa_slave_phylink_mac_link_up(struct phylink_config *config,
-                                         unsigned int mode,
-                                         phy_interface_t interface,
-                                         struct phy_device *phydev)
-{
-       struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
-       struct net_device *dev = dp->slave;
-       struct dsa_switch *ds = dp->ds;
-
-       if (!ds->ops->phylink_mac_link_up) {
-               if (ds->ops->adjust_link && dev->phydev)
-                       ds->ops->adjust_link(ds, dp->index, dev->phydev);
-               return;
-       }
-
-       ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev);
-}
-
-static const struct phylink_mac_ops dsa_slave_phylink_mac_ops = {
-       .validate = dsa_slave_phylink_validate,
-       .mac_link_state = dsa_slave_phylink_mac_link_state,
-       .mac_config = dsa_slave_phylink_mac_config,
-       .mac_an_restart = dsa_slave_phylink_mac_an_restart,
-       .mac_link_down = dsa_slave_phylink_mac_link_down,
-       .mac_link_up = dsa_slave_phylink_mac_link_up,
-};
-
 void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up)
 {
        const struct dsa_port *dp = dsa_to_port(ds, port);
@@ -1309,7 +1215,7 @@ static int dsa_slave_phy_setup(struct net_device *slave_dev)
        dp->pl_config.type = PHYLINK_NETDEV;
 
        dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn), mode,
-                               &dsa_slave_phylink_mac_ops);
+                               &dsa_port_phylink_mac_ops);
        if (IS_ERR(dp->pl)) {
                netdev_err(slave_dev,
                           "error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));