Path: blob/main/sys/contrib/dev/mediatek/mt76/mt76x02_debugfs.c
48375 views
// SPDX-License-Identifier: ISC1/*2* Copyright (C) 2016 Felix Fietkau <[email protected]>3*/45#include <linux/debugfs.h>6#include "mt76x02.h"78static int9mt76x02_ampdu_stat_show(struct seq_file *file, void *data)10{11struct mt76x02_dev *dev = file->private;12int i, j;1314for (i = 0; i < 4; i++) {15seq_puts(file, "Length: ");16for (j = 0; j < 8; j++)17seq_printf(file, "%8d | ", i * 8 + j + 1);18seq_puts(file, "\n");19seq_puts(file, "Count: ");20for (j = 0; j < 8; j++)21seq_printf(file, "%8d | ",22dev->mphy.aggr_stats[i * 8 + j]);23seq_puts(file, "\n");24seq_puts(file, "--------");25for (j = 0; j < 8; j++)26seq_puts(file, "-----------");27seq_puts(file, "\n");28}2930return 0;31}3233DEFINE_SHOW_ATTRIBUTE(mt76x02_ampdu_stat);3435static int read_txpower(struct seq_file *file, void *data)36{37struct mt76x02_dev *dev = dev_get_drvdata(file->private);3839seq_printf(file, "Target power: %d\n", dev->target_power);4041mt76_seq_puts_array(file, "Delta", dev->target_power_delta,42ARRAY_SIZE(dev->target_power_delta));43return 0;44}4546static int47mt76x02_dfs_stat_show(struct seq_file *file, void *data)48{49struct mt76x02_dev *dev = file->private;50struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;51int i;5253seq_printf(file, "allocated sequences:\t%d\n",54dfs_pd->seq_stats.seq_pool_len);55seq_printf(file, "used sequences:\t\t%d\n",56dfs_pd->seq_stats.seq_len);57seq_puts(file, "\n");5859for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {60seq_printf(file, "engine: %d\n", i);61seq_printf(file, " hw pattern detected:\t%d\n",62dfs_pd->stats[i].hw_pattern);63seq_printf(file, " hw pulse discarded:\t%d\n",64dfs_pd->stats[i].hw_pulse_discarded);65seq_printf(file, " sw pattern detected:\t%d\n",66dfs_pd->stats[i].sw_pattern);67}6869return 0;70}7172DEFINE_SHOW_ATTRIBUTE(mt76x02_dfs_stat);7374static int read_agc(struct seq_file *file, void *data)75{76struct mt76x02_dev *dev = dev_get_drvdata(file->private);7778seq_printf(file, "avg_rssi: %d\n", dev->cal.avg_rssi_all);79seq_printf(file, "low_gain: %d\n", dev->cal.low_gain);80seq_printf(file, "false_cca: %d\n", dev->cal.false_cca);81seq_printf(file, "agc_gain_adjust: %d\n", dev->cal.agc_gain_adjust);8283return 0;84}8586static int87mt76_edcca_set(void *data, u64 val)88{89struct mt76x02_dev *dev = data;90enum nl80211_dfs_regions region = dev->mt76.region;9192mutex_lock(&dev->mt76.mutex);9394dev->ed_monitor_enabled = !!val;95dev->ed_monitor = dev->ed_monitor_enabled &&96region == NL80211_DFS_ETSI;97mt76x02_edcca_init(dev);9899mutex_unlock(&dev->mt76.mutex);100101return 0;102}103104static int105mt76_edcca_get(void *data, u64 *val)106{107struct mt76x02_dev *dev = data;108109*val = dev->ed_monitor_enabled;110return 0;111}112113DEFINE_DEBUGFS_ATTRIBUTE(fops_edcca, mt76_edcca_get, mt76_edcca_set,114"%lld\n");115116static int mt76x02_read_rate_txpower(struct seq_file *s, void *data)117{118struct mt76x02_dev *dev = dev_get_drvdata(s->private);119120mt76_seq_puts_array(s, "CCK", dev->rate_power.cck,121ARRAY_SIZE(dev->rate_power.cck));122mt76_seq_puts_array(s, "OFDM", dev->rate_power.ofdm,123ARRAY_SIZE(dev->rate_power.ofdm));124mt76_seq_puts_array(s, "HT", dev->rate_power.ht,125ARRAY_SIZE(dev->rate_power.ht));126mt76_seq_puts_array(s, "VHT", dev->rate_power.vht,127ARRAY_SIZE(dev->rate_power.vht));128return 0;129}130131void mt76x02_init_debugfs(struct mt76x02_dev *dev)132{133struct dentry *dir;134135dir = mt76_register_debugfs(&dev->mt76);136if (!dir)137return;138139debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues", dir,140mt76_queues_read);141debugfs_create_u8("temperature", 0400, dir, &dev->cal.temp);142debugfs_create_bool("tpc", 0600, dir, &dev->enable_tpc);143144debugfs_create_file("edcca", 0600, dir, dev, &fops_edcca);145debugfs_create_file("ampdu_stat", 0400, dir, dev, &mt76x02_ampdu_stat_fops);146debugfs_create_file("dfs_stats", 0400, dir, dev, &mt76x02_dfs_stat_fops);147debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir,148read_txpower);149150debugfs_create_devm_seqfile(dev->mt76.dev, "rate_txpower", dir,151mt76x02_read_rate_txpower);152debugfs_create_devm_seqfile(dev->mt76.dev, "agc", dir, read_agc);153154debugfs_create_u32("tx_hang_reset", 0400, dir, &dev->tx_hang_reset);155}156EXPORT_SYMBOL_GPL(mt76x02_init_debugfs);157158159