xref: /linux/drivers/net/ethernet/amazon/ena/ena_debugfs.c (revision 8be4d31cb8aaeea27bde4b7ddb26e28a89062ebf)
160e28350SDavid Arinzon // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
260e28350SDavid Arinzon /* Copyright (c) Amazon.com, Inc. or its affiliates.
360e28350SDavid Arinzon  * All rights reserved.
460e28350SDavid Arinzon  */
560e28350SDavid Arinzon 
660e28350SDavid Arinzon #ifdef CONFIG_DEBUG_FS
760e28350SDavid Arinzon 
860e28350SDavid Arinzon #include <linux/seq_file.h>
960e28350SDavid Arinzon #include <linux/pci.h>
1060e28350SDavid Arinzon #include "ena_debugfs.h"
11*e14521e9SDavid Arinzon #include "ena_phc.h"
12*e14521e9SDavid Arinzon 
phc_stats_show(struct seq_file * file,void * priv)13*e14521e9SDavid Arinzon static int phc_stats_show(struct seq_file *file, void *priv)
14*e14521e9SDavid Arinzon {
15*e14521e9SDavid Arinzon 	struct ena_adapter *adapter = file->private;
16*e14521e9SDavid Arinzon 
17*e14521e9SDavid Arinzon 	if (!ena_phc_is_active(adapter))
18*e14521e9SDavid Arinzon 		return 0;
19*e14521e9SDavid Arinzon 
20*e14521e9SDavid Arinzon 	seq_printf(file,
21*e14521e9SDavid Arinzon 		   "phc_cnt: %llu\n",
22*e14521e9SDavid Arinzon 		   adapter->ena_dev->phc.stats.phc_cnt);
23*e14521e9SDavid Arinzon 	seq_printf(file,
24*e14521e9SDavid Arinzon 		   "phc_exp: %llu\n",
25*e14521e9SDavid Arinzon 		   adapter->ena_dev->phc.stats.phc_exp);
26*e14521e9SDavid Arinzon 	seq_printf(file,
27*e14521e9SDavid Arinzon 		   "phc_skp: %llu\n",
28*e14521e9SDavid Arinzon 		   adapter->ena_dev->phc.stats.phc_skp);
29*e14521e9SDavid Arinzon 	seq_printf(file,
30*e14521e9SDavid Arinzon 		   "phc_err_dv: %llu\n",
31*e14521e9SDavid Arinzon 		   adapter->ena_dev->phc.stats.phc_err_dv);
32*e14521e9SDavid Arinzon 	seq_printf(file,
33*e14521e9SDavid Arinzon 		   "phc_err_ts: %llu\n",
34*e14521e9SDavid Arinzon 		   adapter->ena_dev->phc.stats.phc_err_ts);
35*e14521e9SDavid Arinzon 
36*e14521e9SDavid Arinzon 	return 0;
37*e14521e9SDavid Arinzon }
38*e14521e9SDavid Arinzon 
39*e14521e9SDavid Arinzon DEFINE_SHOW_ATTRIBUTE(phc_stats);
4060e28350SDavid Arinzon 
ena_debugfs_init(struct net_device * dev)4160e28350SDavid Arinzon void ena_debugfs_init(struct net_device *dev)
4260e28350SDavid Arinzon {
4360e28350SDavid Arinzon 	struct ena_adapter *adapter = netdev_priv(dev);
4460e28350SDavid Arinzon 
4560e28350SDavid Arinzon 	adapter->debugfs_base =
4660e28350SDavid Arinzon 		debugfs_create_dir(dev_name(&adapter->pdev->dev), NULL);
47*e14521e9SDavid Arinzon 
48*e14521e9SDavid Arinzon 	debugfs_create_file("phc_stats",
49*e14521e9SDavid Arinzon 			    0400,
50*e14521e9SDavid Arinzon 			    adapter->debugfs_base,
51*e14521e9SDavid Arinzon 			    adapter,
52*e14521e9SDavid Arinzon 			    &phc_stats_fops);
5360e28350SDavid Arinzon }
5460e28350SDavid Arinzon 
ena_debugfs_terminate(struct net_device * dev)5560e28350SDavid Arinzon void ena_debugfs_terminate(struct net_device *dev)
5660e28350SDavid Arinzon {
5760e28350SDavid Arinzon 	struct ena_adapter *adapter = netdev_priv(dev);
5860e28350SDavid Arinzon 
5960e28350SDavid Arinzon 	debugfs_remove_recursive(adapter->debugfs_base);
6060e28350SDavid Arinzon }
6160e28350SDavid Arinzon 
6260e28350SDavid Arinzon #endif /* CONFIG_DEBUG_FS */
63