xref: /openbmc/linux/drivers/net/fjes/fjes_debugfs.c (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
1dcc4086dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2c753119eSTaku Izumi /*
3c753119eSTaku Izumi  *  FUJITSU Extended Socket Network Device driver
4c753119eSTaku Izumi  *  Copyright (c) 2015-2016 FUJITSU LIMITED
5c753119eSTaku Izumi  */
6c753119eSTaku Izumi 
7c753119eSTaku Izumi /* debugfs support for fjes driver */
8c753119eSTaku Izumi 
9c753119eSTaku Izumi #ifdef CONFIG_DEBUG_FS
10c753119eSTaku Izumi 
11c753119eSTaku Izumi #include <linux/debugfs.h>
12c753119eSTaku Izumi #include <linux/seq_file.h>
13c753119eSTaku Izumi #include <linux/platform_device.h>
14c753119eSTaku Izumi 
15c753119eSTaku Izumi #include "fjes.h"
16c753119eSTaku Izumi 
17c753119eSTaku Izumi static struct dentry *fjes_debug_root;
18c753119eSTaku Izumi 
19c753119eSTaku Izumi static const char * const ep_status_string[] = {
20c753119eSTaku Izumi 	"unshared",
21c753119eSTaku Izumi 	"shared",
22c753119eSTaku Izumi 	"waiting",
23c753119eSTaku Izumi 	"complete",
24c753119eSTaku Izumi };
25c753119eSTaku Izumi 
fjes_dbg_status_show(struct seq_file * m,void * v)26c753119eSTaku Izumi static int fjes_dbg_status_show(struct seq_file *m, void *v)
27c753119eSTaku Izumi {
28c753119eSTaku Izumi 	struct fjes_adapter *adapter = m->private;
29c753119eSTaku Izumi 	struct fjes_hw *hw = &adapter->hw;
30c753119eSTaku Izumi 	int max_epid = hw->max_epid;
31c753119eSTaku Izumi 	int my_epid = hw->my_epid;
32c753119eSTaku Izumi 	int epidx;
33c753119eSTaku Izumi 
34c753119eSTaku Izumi 	seq_puts(m, "EPID\tSTATUS           SAME_ZONE        CONNECTED\n");
35c753119eSTaku Izumi 	for (epidx = 0; epidx < max_epid; epidx++) {
36c753119eSTaku Izumi 		if (epidx == my_epid) {
37c753119eSTaku Izumi 			seq_printf(m, "ep%d\t%-16c %-16c %-16c\n",
38c753119eSTaku Izumi 				   epidx, '-', '-', '-');
39c753119eSTaku Izumi 		} else {
40c753119eSTaku Izumi 			seq_printf(m, "ep%d\t%-16s %-16c %-16c\n",
41c753119eSTaku Izumi 				   epidx,
42c753119eSTaku Izumi 				   ep_status_string[fjes_hw_get_partner_ep_status(hw, epidx)],
43c753119eSTaku Izumi 				   fjes_hw_epid_is_same_zone(hw, epidx) ? 'Y' : 'N',
44c753119eSTaku Izumi 				   fjes_hw_epid_is_shared(hw->hw_info.share, epidx) ? 'Y' : 'N');
45c753119eSTaku Izumi 		}
46c753119eSTaku Izumi 	}
47c753119eSTaku Izumi 
48c753119eSTaku Izumi 	return 0;
49c753119eSTaku Izumi }
50a93f5b56SYangtao Li DEFINE_SHOW_ATTRIBUTE(fjes_dbg_status);
51c753119eSTaku Izumi 
fjes_dbg_adapter_init(struct fjes_adapter * adapter)52c753119eSTaku Izumi void fjes_dbg_adapter_init(struct fjes_adapter *adapter)
53c753119eSTaku Izumi {
54c753119eSTaku Izumi 	const char *name = dev_name(&adapter->plat_dev->dev);
55c753119eSTaku Izumi 
56c753119eSTaku Izumi 	adapter->dbg_adapter = debugfs_create_dir(name, fjes_debug_root);
57c753119eSTaku Izumi 
58*de467c11SGreg Kroah-Hartman 	debugfs_create_file("status", 0444, adapter->dbg_adapter, adapter,
59*de467c11SGreg Kroah-Hartman 			    &fjes_dbg_status_fops);
60c753119eSTaku Izumi }
61c753119eSTaku Izumi 
fjes_dbg_adapter_exit(struct fjes_adapter * adapter)62c753119eSTaku Izumi void fjes_dbg_adapter_exit(struct fjes_adapter *adapter)
63c753119eSTaku Izumi {
64c753119eSTaku Izumi 	debugfs_remove_recursive(adapter->dbg_adapter);
65c753119eSTaku Izumi 	adapter->dbg_adapter = NULL;
66c753119eSTaku Izumi }
67c753119eSTaku Izumi 
fjes_dbg_init(void)68c753119eSTaku Izumi void fjes_dbg_init(void)
69c753119eSTaku Izumi {
70c753119eSTaku Izumi 	fjes_debug_root = debugfs_create_dir(fjes_driver_name, NULL);
71c753119eSTaku Izumi }
72c753119eSTaku Izumi 
fjes_dbg_exit(void)73c753119eSTaku Izumi void fjes_dbg_exit(void)
74c753119eSTaku Izumi {
75c753119eSTaku Izumi 	debugfs_remove_recursive(fjes_debug_root);
76c753119eSTaku Izumi 	fjes_debug_root = NULL;
77c753119eSTaku Izumi }
78c753119eSTaku Izumi 
79c753119eSTaku Izumi #endif /* CONFIG_DEBUG_FS */
80