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