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 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 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 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