root/drivers/net/wireless/mediatek/mt76/debugfs.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mt76_reg_set
  2. mt76_reg_get
  3. mt76_queues_read
  4. mt76_seq_puts_array
  5. mt76_read_rate_txpower
  6. mt76_register_debugfs

   1 // SPDX-License-Identifier: ISC
   2 /*
   3  * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
   4  */
   5 #include "mt76.h"
   6 
   7 static int
   8 mt76_reg_set(void *data, u64 val)
   9 {
  10         struct mt76_dev *dev = data;
  11 
  12         dev->bus->wr(dev, dev->debugfs_reg, val);
  13         return 0;
  14 }
  15 
  16 static int
  17 mt76_reg_get(void *data, u64 *val)
  18 {
  19         struct mt76_dev *dev = data;
  20 
  21         *val = dev->bus->rr(dev, dev->debugfs_reg);
  22         return 0;
  23 }
  24 
  25 DEFINE_DEBUGFS_ATTRIBUTE(fops_regval, mt76_reg_get, mt76_reg_set,
  26                          "0x%08llx\n");
  27 
  28 static int
  29 mt76_queues_read(struct seq_file *s, void *data)
  30 {
  31         struct mt76_dev *dev = dev_get_drvdata(s->private);
  32         int i;
  33 
  34         for (i = 0; i < ARRAY_SIZE(dev->q_tx); i++) {
  35                 struct mt76_sw_queue *q = &dev->q_tx[i];
  36 
  37                 if (!q->q)
  38                         continue;
  39 
  40                 seq_printf(s,
  41                            "%d: queued=%d head=%d tail=%d swq_queued=%d\n",
  42                            i, q->q->queued, q->q->head, q->q->tail,
  43                            q->swq_queued);
  44         }
  45 
  46         return 0;
  47 }
  48 
  49 void mt76_seq_puts_array(struct seq_file *file, const char *str,
  50                          s8 *val, int len)
  51 {
  52         int i;
  53 
  54         seq_printf(file, "%10s:", str);
  55         for (i = 0; i < len; i++)
  56                 seq_printf(file, " %2d", val[i]);
  57         seq_puts(file, "\n");
  58 }
  59 EXPORT_SYMBOL_GPL(mt76_seq_puts_array);
  60 
  61 static int mt76_read_rate_txpower(struct seq_file *s, void *data)
  62 {
  63         struct mt76_dev *dev = dev_get_drvdata(s->private);
  64 
  65         mt76_seq_puts_array(s, "CCK", dev->rate_power.cck,
  66                             ARRAY_SIZE(dev->rate_power.cck));
  67         mt76_seq_puts_array(s, "OFDM", dev->rate_power.ofdm,
  68                             ARRAY_SIZE(dev->rate_power.ofdm));
  69         mt76_seq_puts_array(s, "STBC", dev->rate_power.stbc,
  70                             ARRAY_SIZE(dev->rate_power.stbc));
  71         mt76_seq_puts_array(s, "HT", dev->rate_power.ht,
  72                             ARRAY_SIZE(dev->rate_power.ht));
  73         mt76_seq_puts_array(s, "VHT", dev->rate_power.vht,
  74                             ARRAY_SIZE(dev->rate_power.vht));
  75         return 0;
  76 }
  77 
  78 struct dentry *mt76_register_debugfs(struct mt76_dev *dev)
  79 {
  80         struct dentry *dir;
  81 
  82         dir = debugfs_create_dir("mt76", dev->hw->wiphy->debugfsdir);
  83         if (!dir)
  84                 return NULL;
  85 
  86         debugfs_create_u8("led_pin", 0600, dir, &dev->led_pin);
  87         debugfs_create_u32("regidx", 0600, dir, &dev->debugfs_reg);
  88         debugfs_create_file_unsafe("regval", 0600, dir, dev,
  89                                    &fops_regval);
  90         debugfs_create_blob("eeprom", 0400, dir, &dev->eeprom);
  91         if (dev->otp.data)
  92                 debugfs_create_blob("otp", 0400, dir, &dev->otp);
  93         debugfs_create_devm_seqfile(dev->dev, "queues", dir, mt76_queues_read);
  94         debugfs_create_devm_seqfile(dev->dev, "rate_txpower", dir,
  95                                     mt76_read_rate_txpower);
  96 
  97         return dir;
  98 }
  99 EXPORT_SYMBOL_GPL(mt76_register_debugfs);

/* [<][>][^][v][top][bottom][index][help] */