2 * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 mt76_reg_set(void *data
, u64 val
)
21 struct mt76_dev
*dev
= data
;
23 dev
->bus
->wr(dev
, dev
->debugfs_reg
, val
);
28 mt76_reg_get(void *data
, u64
*val
)
30 struct mt76_dev
*dev
= data
;
32 *val
= dev
->bus
->rr(dev
, dev
->debugfs_reg
);
36 DEFINE_DEBUGFS_ATTRIBUTE(fops_regval
, mt76_reg_get
, mt76_reg_set
,
40 mt76_queues_read(struct seq_file
*s
, void *data
)
42 struct mt76_dev
*dev
= dev_get_drvdata(s
->private);
45 for (i
= 0; i
< ARRAY_SIZE(dev
->q_tx
); i
++) {
46 struct mt76_sw_queue
*q
= &dev
->q_tx
[i
];
52 "%d: queued=%d head=%d tail=%d swq_queued=%d\n",
53 i
, q
->q
->queued
, q
->q
->head
, q
->q
->tail
,
60 void mt76_seq_puts_array(struct seq_file
*file
, const char *str
,
65 seq_printf(file
, "%10s:", str
);
66 for (i
= 0; i
< len
; i
++)
67 seq_printf(file
, " %2d", val
[i
]);
70 EXPORT_SYMBOL_GPL(mt76_seq_puts_array
);
72 static int mt76_read_rate_txpower(struct seq_file
*s
, void *data
)
74 struct mt76_dev
*dev
= dev_get_drvdata(s
->private);
76 mt76_seq_puts_array(s
, "CCK", dev
->rate_power
.cck
,
77 ARRAY_SIZE(dev
->rate_power
.cck
));
78 mt76_seq_puts_array(s
, "OFDM", dev
->rate_power
.ofdm
,
79 ARRAY_SIZE(dev
->rate_power
.ofdm
));
80 mt76_seq_puts_array(s
, "STBC", dev
->rate_power
.stbc
,
81 ARRAY_SIZE(dev
->rate_power
.stbc
));
82 mt76_seq_puts_array(s
, "HT", dev
->rate_power
.ht
,
83 ARRAY_SIZE(dev
->rate_power
.ht
));
84 mt76_seq_puts_array(s
, "VHT", dev
->rate_power
.vht
,
85 ARRAY_SIZE(dev
->rate_power
.vht
));
89 struct dentry
*mt76_register_debugfs(struct mt76_dev
*dev
)
93 dir
= debugfs_create_dir("mt76", dev
->hw
->wiphy
->debugfsdir
);
97 debugfs_create_u8("led_pin", 0600, dir
, &dev
->led_pin
);
98 debugfs_create_u32("regidx", 0600, dir
, &dev
->debugfs_reg
);
99 debugfs_create_file_unsafe("regval", 0600, dir
, dev
,
101 debugfs_create_blob("eeprom", 0400, dir
, &dev
->eeprom
);
103 debugfs_create_blob("otp", 0400, dir
, &dev
->otp
);
104 debugfs_create_devm_seqfile(dev
->dev
, "queues", dir
, mt76_queues_read
);
105 debugfs_create_devm_seqfile(dev
->dev
, "rate_txpower", dir
,
106 mt76_read_rate_txpower
);
110 EXPORT_SYMBOL_GPL(mt76_register_debugfs
);