cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mt76x02_debugfs.c (3606B)


      1// SPDX-License-Identifier: ISC
      2/*
      3 * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
      4 */
      5
      6#include <linux/debugfs.h>
      7#include "mt76x02.h"
      8
      9static int
     10mt76x02_ampdu_stat_show(struct seq_file *file, void *data)
     11{
     12	struct mt76x02_dev *dev = file->private;
     13	int i, j;
     14
     15	for (i = 0; i < 4; i++) {
     16		seq_puts(file, "Length: ");
     17		for (j = 0; j < 8; j++)
     18			seq_printf(file, "%8d | ", i * 8 + j + 1);
     19		seq_puts(file, "\n");
     20		seq_puts(file, "Count:  ");
     21		for (j = 0; j < 8; j++)
     22			seq_printf(file, "%8d | ",
     23				   dev->mt76.aggr_stats[i * 8 + j]);
     24		seq_puts(file, "\n");
     25		seq_puts(file, "--------");
     26		for (j = 0; j < 8; j++)
     27			seq_puts(file, "-----------");
     28		seq_puts(file, "\n");
     29	}
     30
     31	return 0;
     32}
     33
     34DEFINE_SHOW_ATTRIBUTE(mt76x02_ampdu_stat);
     35
     36static int read_txpower(struct seq_file *file, void *data)
     37{
     38	struct mt76x02_dev *dev = dev_get_drvdata(file->private);
     39
     40	seq_printf(file, "Target power: %d\n", dev->target_power);
     41
     42	mt76_seq_puts_array(file, "Delta", dev->target_power_delta,
     43			    ARRAY_SIZE(dev->target_power_delta));
     44	return 0;
     45}
     46
     47static int
     48mt76x02_dfs_stat_show(struct seq_file *file, void *data)
     49{
     50	struct mt76x02_dev *dev = file->private;
     51	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
     52	int i;
     53
     54	seq_printf(file, "allocated sequences:\t%d\n",
     55		   dfs_pd->seq_stats.seq_pool_len);
     56	seq_printf(file, "used sequences:\t\t%d\n",
     57		   dfs_pd->seq_stats.seq_len);
     58	seq_puts(file, "\n");
     59
     60	for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {
     61		seq_printf(file, "engine: %d\n", i);
     62		seq_printf(file, "  hw pattern detected:\t%d\n",
     63			   dfs_pd->stats[i].hw_pattern);
     64		seq_printf(file, "  hw pulse discarded:\t%d\n",
     65			   dfs_pd->stats[i].hw_pulse_discarded);
     66		seq_printf(file, "  sw pattern detected:\t%d\n",
     67			   dfs_pd->stats[i].sw_pattern);
     68	}
     69
     70	return 0;
     71}
     72
     73DEFINE_SHOW_ATTRIBUTE(mt76x02_dfs_stat);
     74
     75static int read_agc(struct seq_file *file, void *data)
     76{
     77	struct mt76x02_dev *dev = dev_get_drvdata(file->private);
     78
     79	seq_printf(file, "avg_rssi: %d\n", dev->cal.avg_rssi_all);
     80	seq_printf(file, "low_gain: %d\n", dev->cal.low_gain);
     81	seq_printf(file, "false_cca: %d\n", dev->cal.false_cca);
     82	seq_printf(file, "agc_gain_adjust: %d\n", dev->cal.agc_gain_adjust);
     83
     84	return 0;
     85}
     86
     87static int
     88mt76_edcca_set(void *data, u64 val)
     89{
     90	struct mt76x02_dev *dev = data;
     91	enum nl80211_dfs_regions region = dev->mt76.region;
     92
     93	mutex_lock(&dev->mt76.mutex);
     94
     95	dev->ed_monitor_enabled = !!val;
     96	dev->ed_monitor = dev->ed_monitor_enabled &&
     97			  region == NL80211_DFS_ETSI;
     98	mt76x02_edcca_init(dev);
     99
    100	mutex_unlock(&dev->mt76.mutex);
    101
    102	return 0;
    103}
    104
    105static int
    106mt76_edcca_get(void *data, u64 *val)
    107{
    108	struct mt76x02_dev *dev = data;
    109
    110	*val = dev->ed_monitor_enabled;
    111	return 0;
    112}
    113
    114DEFINE_DEBUGFS_ATTRIBUTE(fops_edcca, mt76_edcca_get, mt76_edcca_set,
    115			 "%lld\n");
    116
    117void mt76x02_init_debugfs(struct mt76x02_dev *dev)
    118{
    119	struct dentry *dir;
    120
    121	dir = mt76_register_debugfs(&dev->mt76);
    122	if (!dir)
    123		return;
    124
    125	debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues", dir,
    126				    mt76_queues_read);
    127	debugfs_create_u8("temperature", 0400, dir, &dev->cal.temp);
    128	debugfs_create_bool("tpc", 0600, dir, &dev->enable_tpc);
    129
    130	debugfs_create_file("edcca", 0600, dir, dev, &fops_edcca);
    131	debugfs_create_file("ampdu_stat", 0400, dir, dev, &mt76x02_ampdu_stat_fops);
    132	debugfs_create_file("dfs_stats", 0400, dir, dev, &mt76x02_dfs_stat_fops);
    133	debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir,
    134				    read_txpower);
    135
    136	debugfs_create_devm_seqfile(dev->mt76.dev, "agc", dir, read_agc);
    137
    138	debugfs_create_u32("tx_hang_reset", 0400, dir, &dev->tx_hang_reset);
    139}
    140EXPORT_SYMBOL_GPL(mt76x02_init_debugfs);