net: dsa: sja1105: move devlink param code to sja1105_devlink.c
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 25 Sep 2020 23:04:19 +0000 (02:04 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Sep 2020 23:35:27 +0000 (16:35 -0700)
We'll have more devlink code soon. Group it together in a separate
translation object.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/Makefile
drivers/net/dsa/sja1105/sja1105.h
drivers/net/dsa/sja1105/sja1105_devlink.c [new file with mode: 0644]
drivers/net/dsa/sja1105/sja1105_main.c

index c88e56a..a860e3a 100644 (file)
@@ -6,6 +6,7 @@ sja1105-objs := \
     sja1105_main.o \
     sja1105_flower.o \
     sja1105_ethtool.o \
+    sja1105_devlink.o \
     sja1105_clocking.o \
     sja1105_static_config.o \
     sja1105_dynamic_config.o \
index a93f580..d043332 100644 (file)
@@ -244,9 +244,17 @@ enum sja1105_reset_reason {
 
 int sja1105_static_config_reload(struct sja1105_private *priv,
                                 enum sja1105_reset_reason reason);
-
+int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled);
 void sja1105_frame_memory_partitioning(struct sja1105_private *priv);
 
+/* From sja1105_devlink.c */
+int sja1105_devlink_setup(struct dsa_switch *ds);
+void sja1105_devlink_teardown(struct dsa_switch *ds);
+int sja1105_devlink_param_get(struct dsa_switch *ds, u32 id,
+                             struct devlink_param_gset_ctx *ctx);
+int sja1105_devlink_param_set(struct dsa_switch *ds, u32 id,
+                             struct devlink_param_gset_ctx *ctx);
+
 /* From sja1105_spi.c */
 int sja1105_xfer_buf(const struct sja1105_private *priv,
                     sja1105_spi_rw_mode_t rw, u64 reg_addr,
diff --git a/drivers/net/dsa/sja1105/sja1105_devlink.c b/drivers/net/dsa/sja1105/sja1105_devlink.c
new file mode 100644 (file)
index 0000000..0345463
--- /dev/null
@@ -0,0 +1,119 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2018-2019, Vladimir Oltean <olteanv@gmail.com>
+ */
+#include "sja1105.h"
+
+static int sja1105_best_effort_vlan_filtering_get(struct sja1105_private *priv,
+                                                 bool *be_vlan)
+{
+       *be_vlan = priv->best_effort_vlan_filtering;
+
+       return 0;
+}
+
+static int sja1105_best_effort_vlan_filtering_set(struct sja1105_private *priv,
+                                                 bool be_vlan)
+{
+       struct dsa_switch *ds = priv->ds;
+       bool vlan_filtering;
+       int port;
+       int rc;
+
+       priv->best_effort_vlan_filtering = be_vlan;
+
+       rtnl_lock();
+       for (port = 0; port < ds->num_ports; port++) {
+               struct dsa_port *dp;
+
+               if (!dsa_is_user_port(ds, port))
+                       continue;
+
+               dp = dsa_to_port(ds, port);
+               vlan_filtering = dsa_port_is_vlan_filtering(dp);
+
+               rc = sja1105_vlan_filtering(ds, port, vlan_filtering);
+               if (rc)
+                       break;
+       }
+       rtnl_unlock();
+
+       return rc;
+}
+
+enum sja1105_devlink_param_id {
+       SJA1105_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
+       SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
+};
+
+int sja1105_devlink_param_get(struct dsa_switch *ds, u32 id,
+                             struct devlink_param_gset_ctx *ctx)
+{
+       struct sja1105_private *priv = ds->priv;
+       int err;
+
+       switch (id) {
+       case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
+               err = sja1105_best_effort_vlan_filtering_get(priv,
+                                                            &ctx->val.vbool);
+               break;
+       default:
+               err = -EOPNOTSUPP;
+               break;
+       }
+
+       return err;
+}
+
+int sja1105_devlink_param_set(struct dsa_switch *ds, u32 id,
+                             struct devlink_param_gset_ctx *ctx)
+{
+       struct sja1105_private *priv = ds->priv;
+       int err;
+
+       switch (id) {
+       case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
+               err = sja1105_best_effort_vlan_filtering_set(priv,
+                                                            ctx->val.vbool);
+               break;
+       default:
+               err = -EOPNOTSUPP;
+               break;
+       }
+
+       return err;
+}
+
+static const struct devlink_param sja1105_devlink_params[] = {
+       DSA_DEVLINK_PARAM_DRIVER(SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
+                                "best_effort_vlan_filtering",
+                                DEVLINK_PARAM_TYPE_BOOL,
+                                BIT(DEVLINK_PARAM_CMODE_RUNTIME)),
+};
+
+static int sja1105_setup_devlink_params(struct dsa_switch *ds)
+{
+       return dsa_devlink_params_register(ds, sja1105_devlink_params,
+                                          ARRAY_SIZE(sja1105_devlink_params));
+}
+
+static void sja1105_teardown_devlink_params(struct dsa_switch *ds)
+{
+       dsa_devlink_params_unregister(ds, sja1105_devlink_params,
+                                     ARRAY_SIZE(sja1105_devlink_params));
+}
+
+int sja1105_devlink_setup(struct dsa_switch *ds)
+{
+       int rc;
+
+       rc = sja1105_setup_devlink_params(ds);
+       if (rc)
+               return rc;
+
+       return 0;
+}
+
+void sja1105_devlink_teardown(struct dsa_switch *ds)
+{
+       sja1105_teardown_devlink_params(ds);
+}
index 4a29872..de4773e 100644 (file)
@@ -2634,7 +2634,7 @@ static int sja1105_vlan_prepare(struct dsa_switch *ds, int port,
  * which can only be partially reconfigured at runtime (and not the TPID).
  * So a switch reset is required.
  */
-static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
+int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
 {
        struct sja1105_l2_lookup_params_entry *l2_lookup_params;
        struct sja1105_general_params_entry *general_params;
@@ -2864,105 +2864,6 @@ static const struct dsa_8021q_ops sja1105_dsa_8021q_ops = {
        .vlan_del       = sja1105_dsa_8021q_vlan_del,
 };
 
-static int sja1105_best_effort_vlan_filtering_get(struct sja1105_private *priv,
-                                                 bool *be_vlan)
-{
-       *be_vlan = priv->best_effort_vlan_filtering;
-
-       return 0;
-}
-
-static int sja1105_best_effort_vlan_filtering_set(struct sja1105_private *priv,
-                                                 bool be_vlan)
-{
-       struct dsa_switch *ds = priv->ds;
-       bool vlan_filtering;
-       int port;
-       int rc;
-
-       priv->best_effort_vlan_filtering = be_vlan;
-
-       rtnl_lock();
-       for (port = 0; port < ds->num_ports; port++) {
-               struct dsa_port *dp;
-
-               if (!dsa_is_user_port(ds, port))
-                       continue;
-
-               dp = dsa_to_port(ds, port);
-               vlan_filtering = dsa_port_is_vlan_filtering(dp);
-
-               rc = sja1105_vlan_filtering(ds, port, vlan_filtering);
-               if (rc)
-                       break;
-       }
-       rtnl_unlock();
-
-       return rc;
-}
-
-enum sja1105_devlink_param_id {
-       SJA1105_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
-       SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
-};
-
-static int sja1105_devlink_param_get(struct dsa_switch *ds, u32 id,
-                                    struct devlink_param_gset_ctx *ctx)
-{
-       struct sja1105_private *priv = ds->priv;
-       int err;
-
-       switch (id) {
-       case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
-               err = sja1105_best_effort_vlan_filtering_get(priv,
-                                                            &ctx->val.vbool);
-               break;
-       default:
-               err = -EOPNOTSUPP;
-               break;
-       }
-
-       return err;
-}
-
-static int sja1105_devlink_param_set(struct dsa_switch *ds, u32 id,
-                                    struct devlink_param_gset_ctx *ctx)
-{
-       struct sja1105_private *priv = ds->priv;
-       int err;
-
-       switch (id) {
-       case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
-               err = sja1105_best_effort_vlan_filtering_set(priv,
-                                                            ctx->val.vbool);
-               break;
-       default:
-               err = -EOPNOTSUPP;
-               break;
-       }
-
-       return err;
-}
-
-static const struct devlink_param sja1105_devlink_params[] = {
-       DSA_DEVLINK_PARAM_DRIVER(SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
-                                "best_effort_vlan_filtering",
-                                DEVLINK_PARAM_TYPE_BOOL,
-                                BIT(DEVLINK_PARAM_CMODE_RUNTIME)),
-};
-
-static int sja1105_setup_devlink_params(struct dsa_switch *ds)
-{
-       return dsa_devlink_params_register(ds, sja1105_devlink_params,
-                                          ARRAY_SIZE(sja1105_devlink_params));
-}
-
-static void sja1105_teardown_devlink_params(struct dsa_switch *ds)
-{
-       dsa_devlink_params_unregister(ds, sja1105_devlink_params,
-                                     ARRAY_SIZE(sja1105_devlink_params));
-}
-
 /* The programming model for the SJA1105 switch is "all-at-once" via static
  * configuration tables. Some of these can be dynamically modified at runtime,
  * but not the xMII mode parameters table.
@@ -3030,7 +2931,7 @@ static int sja1105_setup(struct dsa_switch *ds)
 
        ds->configure_vlan_while_not_filtering = true;
 
-       rc = sja1105_setup_devlink_params(ds);
+       rc = sja1105_devlink_setup(ds);
        if (rc < 0)
                return rc;
 
@@ -3061,7 +2962,7 @@ static void sja1105_teardown(struct dsa_switch *ds)
                        kthread_destroy_worker(sp->xmit_worker);
        }
 
-       sja1105_teardown_devlink_params(ds);
+       sja1105_devlink_teardown(ds);
        sja1105_flower_teardown(ds);
        sja1105_tas_teardown(ds);
        sja1105_ptp_clock_unregister(ds);