Add a debug filesystem "tag_protocol" entry to query the switch tagging protocol through the .get_tag_protocol operation.
# cat switch1/tag_protocol EDSA To ease maintenance of tag protocols, add a dsa_tag_protocol_name helper to the public API which to convert a tag protocol enum to a string. Signed-off-by: Vivien Didelot <vivien.dide...@savoirfairelinux.com> --- include/net/dsa.h | 26 ++++++++++++++++++++++++++ net/dsa/debugfs.c | 23 +++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/include/net/dsa.h b/include/net/dsa.h index 7341178319f5..1309ba0376ae 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -39,6 +39,32 @@ enum dsa_tag_protocol { DSA_TAG_LAST, /* MUST BE LAST */ }; +static inline const char *dsa_tag_protocol_name(enum dsa_tag_protocol proto) +{ + switch (proto) { + case DSA_TAG_PROTO_NONE: + return "none"; + case DSA_TAG_PROTO_BRCM: + return "BRCM"; + case DSA_TAG_PROTO_DSA: + return "DSA"; + case DSA_TAG_PROTO_EDSA: + return "EDSA"; + case DSA_TAG_PROTO_KSZ: + return "KSZ"; + case DSA_TAG_PROTO_LAN9303: + return "LAN9303"; + case DSA_TAG_PROTO_MTK: + return "MTK"; + case DSA_TAG_PROTO_QCA: + return "QCA"; + case DSA_TAG_PROTO_TRAILER: + return "TRAILER"; + default: + return "unknown"; + } +} + #define DSA_MAX_SWITCHES 4 #define DSA_MAX_PORTS 12 diff --git a/net/dsa/debugfs.c b/net/dsa/debugfs.c index 54e97e05a9d7..8a0e4311ff8c 100644 --- a/net/dsa/debugfs.c +++ b/net/dsa/debugfs.c @@ -109,6 +109,24 @@ 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); + seq_printf(seq, "%s\n", dsa_tag_protocol_name(proto)); + + 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) { @@ -150,6 +168,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.1