Add a debug filesystem "tag_protocol" entry to query the switch tagging
protocol through the .get_tag_protocol operation.

    # cat switch1/tag_protocol
    EDSA

Signed-off-by: Vivien Didelot <vivien.dide...@savoirfairelinux.com>
---
 net/dsa/debugfs.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/net/dsa/debugfs.c b/net/dsa/debugfs.c
index 5607efdb924d..30a732e86161 100644
--- a/net/dsa/debugfs.c
+++ b/net/dsa/debugfs.c
@@ -109,6 +109,55 @@ static int dsa_debugfs_create_file(struct dsa_switch *ds, 
struct dentry *dir,
        return 0;
 }
 
+static int dsa_debugfs_tag_protocol_read(struct dsa_switch *ds, int id,
+                                        struct seq_file *seq)
+{
+       enum dsa_tag_protocol proto;
+
+       if (!ds->ops->get_tag_protocol)
+               return -EOPNOTSUPP;
+
+       proto = ds->ops->get_tag_protocol(ds);
+
+       switch (proto) {
+       case DSA_TAG_PROTO_NONE:
+               seq_puts(seq, "NONE\n");
+               break;
+       case DSA_TAG_PROTO_BRCM:
+               seq_puts(seq, "BRCM\n");
+               break;
+       case DSA_TAG_PROTO_DSA:
+               seq_puts(seq, "DSA\n");
+               break;
+       case DSA_TAG_PROTO_EDSA:
+               seq_puts(seq, "EDSA\n");
+               break;
+       case DSA_TAG_PROTO_KSZ:
+               seq_puts(seq, "KSZ\n");
+               break;
+       case DSA_TAG_PROTO_LAN9303:
+               seq_puts(seq, "LAN9303\n");
+               break;
+       case DSA_TAG_PROTO_MTK:
+               seq_puts(seq, "MTK\n");
+               break;
+       case DSA_TAG_PROTO_QCA:
+               seq_puts(seq, "QCA\n");
+               break;
+       case DSA_TAG_PROTO_TRAILER:
+               seq_puts(seq, "TRAILER\n");
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static const struct dsa_debugfs_ops dsa_debugfs_tag_protocol_ops = {
+       .read = dsa_debugfs_tag_protocol_read,
+};
+
 static int dsa_debugfs_tree_read(struct dsa_switch *ds, int id,
                                 struct seq_file *seq)
 {
@@ -151,6 +200,11 @@ static int dsa_debugfs_create_switch(struct dsa_switch *ds)
        if (IS_ERR_OR_NULL(ds->debugfs_dir))
                return -EFAULT;
 
+       err = dsa_debugfs_create_file(ds, ds->debugfs_dir, "tag_protocol", -1,
+                                     &dsa_debugfs_tag_protocol_ops);
+       if (err)
+               return err;
+
        err = dsa_debugfs_create_file(ds, ds->debugfs_dir, "tree", -1,
                                      &dsa_debugfs_tree_ops);
        if (err)
-- 
2.14.0

Reply via email to