@@ -842,6 +842,48 @@ mt7996_rf_regval_set(void *data, u64 val)
DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, mt7996_rf_regval_get,
mt7996_rf_regval_set, "0x%08llx\n");
+static int
+mt7996_rxfilter_show(struct seq_file *file, void *data)
+{
+ struct mt7996_phy *phy = file->private;
+
+ mutex_lock(&phy->dev->mt76.mutex);
+
+ seq_printf(file, "CR: 0x%08x\n", phy->rxfilter);
+
+#define MT7996_RFCR_PRINT(flag) do { \
+ if (phy->rxfilter & MT_WF_RFCR_##flag) \
+ seq_printf(file, #flag "\n"); \
+ } while (0)
+
+ MT7996_RFCR_PRINT(DROP_STBC_MULTI);
+ MT7996_RFCR_PRINT(DROP_FCSFAIL);
+ MT7996_RFCR_PRINT(DROP_PROBEREQ);
+ MT7996_RFCR_PRINT(DROP_MCAST);
+ MT7996_RFCR_PRINT(DROP_BCAST);
+ MT7996_RFCR_PRINT(DROP_MCAST_FILTERED);
+ MT7996_RFCR_PRINT(DROP_A3_MAC);
+ MT7996_RFCR_PRINT(DROP_A3_BSSID);
+ MT7996_RFCR_PRINT(DROP_A2_BSSID);
+ MT7996_RFCR_PRINT(DROP_OTHER_BEACON);
+ MT7996_RFCR_PRINT(DROP_FRAME_REPORT);
+ MT7996_RFCR_PRINT(DROP_CTL_RSV);
+ MT7996_RFCR_PRINT(DROP_CTS);
+ MT7996_RFCR_PRINT(DROP_RTS);
+ MT7996_RFCR_PRINT(DROP_DUPLICATE);
+ MT7996_RFCR_PRINT(DROP_OTHER_BSS);
+ MT7996_RFCR_PRINT(DROP_OTHER_UC);
+ MT7996_RFCR_PRINT(DROP_OTHER_TIM);
+ MT7996_RFCR_PRINT(DROP_NDPA);
+ MT7996_RFCR_PRINT(DROP_UNWANTED_CTL);
+
+ mutex_unlock(&phy->dev->mt76.mutex);
+
+ return 0;
+}
+
+DEFINE_SHOW_ATTRIBUTE(mt7996_rxfilter);
+
static int
mt7996_init_radio_phy_debugfs(struct mt7996_phy *phy)
{
@@ -854,6 +896,8 @@ mt7996_init_radio_phy_debugfs(struct mt7996_phy *phy)
if (IS_ERR_OR_NULL(dir))
return -ENOMEM;
+ debugfs_create_file("rxfilter", 0400, dir, phy, &mt7996_rxfilter_fops);
+
phy->debugfs_dir = dir;
return 0;
Will report both control registers, and list both the raw u32 value as well as reporting each flag in plain text. Signed-off-by: Rory Little <rory@candelatech.com> --- .../wireless/mediatek/mt76/mt7996/debugfs.c | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+)