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