Commit | Line | Data |
---|---|---|
fc4ecaee | 1 | /* |
9c5f8a19 | 2 | * hsr_debugfs code |
32712733 | 3 | * Copyright (C) 2019 Texas Instruments Incorporated |
fc4ecaee MK |
4 | * |
5 | * Author(s): | |
32712733 | 6 | * Murali Karicheri <m-karicheri2@ti.com> |
fc4ecaee MK |
7 | * |
8 | * This program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public License as | |
10 | * published by the Free Software Foundation version 2. | |
11 | * | |
12 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | |
13 | * kind, whether express or implied; without even the implied warranty | |
14 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | * GNU General Public License for more details. | |
16 | */ | |
17 | #include <linux/module.h> | |
18 | #include <linux/errno.h> | |
19 | #include <linux/debugfs.h> | |
20 | #include "hsr_main.h" | |
21 | #include "hsr_framereg.h" | |
22 | ||
23 | static void print_mac_address(struct seq_file *sfp, unsigned char *mac) | |
24 | { | |
25 | seq_printf(sfp, "%02x:%02x:%02x:%02x:%02x:%02x:", | |
26 | mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); | |
27 | } | |
28 | ||
9c5f8a19 | 29 | /* hsr_node_table_show - Formats and prints node_table entries */ |
fc4ecaee | 30 | static int |
9c5f8a19 | 31 | hsr_node_table_show(struct seq_file *sfp, void *data) |
fc4ecaee MK |
32 | { |
33 | struct hsr_priv *priv = (struct hsr_priv *)sfp->private; | |
34 | struct hsr_node *node; | |
35 | ||
36 | seq_puts(sfp, "Node Table entries\n"); | |
37 | seq_puts(sfp, "MAC-Address-A, MAC-Address-B, time_in[A], "); | |
38 | seq_puts(sfp, "time_in[B], Address-B port\n"); | |
39 | rcu_read_lock(); | |
40 | list_for_each_entry_rcu(node, &priv->node_db, mac_list) { | |
41 | /* skip self node */ | |
42 | if (hsr_addr_is_self(priv, node->macaddress_A)) | |
43 | continue; | |
44 | print_mac_address(sfp, &node->macaddress_A[0]); | |
45 | seq_puts(sfp, " "); | |
46 | print_mac_address(sfp, &node->macaddress_B[0]); | |
47 | seq_printf(sfp, "0x%lx, ", node->time_in[HSR_PT_SLAVE_A]); | |
48 | seq_printf(sfp, "0x%lx ", node->time_in[HSR_PT_SLAVE_B]); | |
49 | seq_printf(sfp, "0x%x\n", node->addr_B_port); | |
50 | } | |
51 | rcu_read_unlock(); | |
52 | return 0; | |
53 | } | |
54 | ||
9c5f8a19 | 55 | /* hsr_node_table_open - Open the node_table file |
fc4ecaee MK |
56 | * |
57 | * Description: | |
58 | * This routine opens a debugfs file node_table of specific hsr device | |
59 | */ | |
60 | static int | |
9c5f8a19 | 61 | hsr_node_table_open(struct inode *inode, struct file *filp) |
fc4ecaee | 62 | { |
9c5f8a19 | 63 | return single_open(filp, hsr_node_table_show, inode->i_private); |
fc4ecaee MK |
64 | } |
65 | ||
9c5f8a19 | 66 | static const struct file_operations hsr_fops = { |
fc4ecaee | 67 | .owner = THIS_MODULE, |
9c5f8a19 | 68 | .open = hsr_node_table_open, |
fc4ecaee MK |
69 | .read = seq_read, |
70 | .llseek = seq_lseek, | |
71 | .release = single_release, | |
72 | }; | |
73 | ||
9c5f8a19 | 74 | /* hsr_debugfs_init - create hsr node_table file for dumping |
fc4ecaee MK |
75 | * the node table |
76 | * | |
77 | * Description: | |
78 | * When debugfs is configured this routine sets up the node_table file per | |
9c5f8a19 | 79 | * hsr device for dumping the node_table entries |
fc4ecaee | 80 | */ |
32712733 | 81 | int hsr_debugfs_init(struct hsr_priv *priv, struct net_device *hsr_dev) |
fc4ecaee MK |
82 | { |
83 | int rc = -1; | |
84 | struct dentry *de = NULL; | |
85 | ||
32712733 | 86 | de = debugfs_create_dir(hsr_dev->name, NULL); |
fc4ecaee | 87 | if (!de) { |
9c5f8a19 | 88 | pr_err("Cannot create hsr debugfs root\n"); |
fc4ecaee MK |
89 | return rc; |
90 | } | |
91 | ||
92 | priv->node_tbl_root = de; | |
93 | ||
94 | de = debugfs_create_file("node_table", S_IFREG | 0444, | |
95 | priv->node_tbl_root, priv, | |
9c5f8a19 | 96 | &hsr_fops); |
fc4ecaee | 97 | if (!de) { |
9c5f8a19 | 98 | pr_err("Cannot create hsr node_table directory\n"); |
fc4ecaee MK |
99 | return rc; |
100 | } | |
101 | priv->node_tbl_file = de; | |
fc4ecaee | 102 | |
32712733 | 103 | return 0; |
fc4ecaee MK |
104 | } |
105 | ||
9c5f8a19 | 106 | /* hsr_debugfs_term - Tear down debugfs intrastructure |
fc4ecaee MK |
107 | * |
108 | * Description: | |
109 | * When Debufs is configured this routine removes debugfs file system | |
9c5f8a19 | 110 | * elements that are specific to hsr |
fc4ecaee MK |
111 | */ |
112 | void | |
9c5f8a19 | 113 | hsr_debugfs_term(struct hsr_priv *priv) |
fc4ecaee MK |
114 | { |
115 | debugfs_remove(priv->node_tbl_file); | |
116 | priv->node_tbl_file = NULL; | |
117 | debugfs_remove(priv->node_tbl_root); | |
118 | priv->node_tbl_root = NULL; | |
119 | } |