18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * FUJITSU Extended Socket Network Device driver 48c2ecf20Sopenharmony_ci * Copyright (c) 2015-2016 FUJITSU LIMITED 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci/* debugfs support for fjes driver */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_FS 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/debugfs.h> 128c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 138c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "fjes.h" 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistatic struct dentry *fjes_debug_root; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic const char * const ep_status_string[] = { 208c2ecf20Sopenharmony_ci "unshared", 218c2ecf20Sopenharmony_ci "shared", 228c2ecf20Sopenharmony_ci "waiting", 238c2ecf20Sopenharmony_ci "complete", 248c2ecf20Sopenharmony_ci}; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistatic int fjes_dbg_status_show(struct seq_file *m, void *v) 278c2ecf20Sopenharmony_ci{ 288c2ecf20Sopenharmony_ci struct fjes_adapter *adapter = m->private; 298c2ecf20Sopenharmony_ci struct fjes_hw *hw = &adapter->hw; 308c2ecf20Sopenharmony_ci int max_epid = hw->max_epid; 318c2ecf20Sopenharmony_ci int my_epid = hw->my_epid; 328c2ecf20Sopenharmony_ci int epidx; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci seq_puts(m, "EPID\tSTATUS SAME_ZONE CONNECTED\n"); 358c2ecf20Sopenharmony_ci for (epidx = 0; epidx < max_epid; epidx++) { 368c2ecf20Sopenharmony_ci if (epidx == my_epid) { 378c2ecf20Sopenharmony_ci seq_printf(m, "ep%d\t%-16c %-16c %-16c\n", 388c2ecf20Sopenharmony_ci epidx, '-', '-', '-'); 398c2ecf20Sopenharmony_ci } else { 408c2ecf20Sopenharmony_ci seq_printf(m, "ep%d\t%-16s %-16c %-16c\n", 418c2ecf20Sopenharmony_ci epidx, 428c2ecf20Sopenharmony_ci ep_status_string[fjes_hw_get_partner_ep_status(hw, epidx)], 438c2ecf20Sopenharmony_ci fjes_hw_epid_is_same_zone(hw, epidx) ? 'Y' : 'N', 448c2ecf20Sopenharmony_ci fjes_hw_epid_is_shared(hw->hw_info.share, epidx) ? 'Y' : 'N'); 458c2ecf20Sopenharmony_ci } 468c2ecf20Sopenharmony_ci } 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci return 0; 498c2ecf20Sopenharmony_ci} 508c2ecf20Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(fjes_dbg_status); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_civoid fjes_dbg_adapter_init(struct fjes_adapter *adapter) 538c2ecf20Sopenharmony_ci{ 548c2ecf20Sopenharmony_ci const char *name = dev_name(&adapter->plat_dev->dev); 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci adapter->dbg_adapter = debugfs_create_dir(name, fjes_debug_root); 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci debugfs_create_file("status", 0444, adapter->dbg_adapter, adapter, 598c2ecf20Sopenharmony_ci &fjes_dbg_status_fops); 608c2ecf20Sopenharmony_ci} 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_civoid fjes_dbg_adapter_exit(struct fjes_adapter *adapter) 638c2ecf20Sopenharmony_ci{ 648c2ecf20Sopenharmony_ci debugfs_remove_recursive(adapter->dbg_adapter); 658c2ecf20Sopenharmony_ci adapter->dbg_adapter = NULL; 668c2ecf20Sopenharmony_ci} 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_civoid fjes_dbg_init(void) 698c2ecf20Sopenharmony_ci{ 708c2ecf20Sopenharmony_ci fjes_debug_root = debugfs_create_dir(fjes_driver_name, NULL); 718c2ecf20Sopenharmony_ci} 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_civoid fjes_dbg_exit(void) 748c2ecf20Sopenharmony_ci{ 758c2ecf20Sopenharmony_ci debugfs_remove_recursive(fjes_debug_root); 768c2ecf20Sopenharmony_ci fjes_debug_root = NULL; 778c2ecf20Sopenharmony_ci} 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci#endif /* CONFIG_DEBUG_FS */ 80