wifi: mt76: mt7996: fix monitor mode

Enable sniffer mode via MCU command in order to properly enable promiscuous
mode on the device.

Link: https://patch.msgid.link/20250102163508.52945-24-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau
2025-01-02 17:35:08 +01:00
parent 69d54ce749
commit e48da5c9ca
3 changed files with 23 additions and 0 deletions

View File

@@ -368,6 +368,7 @@ static void mt7996_set_monitor(struct mt7996_phy *phy, bool enabled)
mt76_rmw_field(dev, MT_DMA_DCR0(phy->mt76->band_idx),
MT_DMA_DCR0_RXD_G5_EN, enabled);
mt7996_phy_set_rxfilter(phy);
mt7996_mcu_set_sniffer_mode(phy, enabled);
}
static int mt7996_add_interface(struct ieee80211_hw *hw,

View File

@@ -4496,6 +4496,27 @@ int mt7996_mcu_wed_rro_reset_sessions(struct mt7996_dev *dev, u16 id)
sizeof(req), true);
}
int mt7996_mcu_set_sniffer_mode(struct mt7996_phy *phy, bool enabled)
{
struct mt7996_dev *dev = phy->dev;
struct {
u8 band_idx;
u8 _rsv[3];
__le16 tag;
__le16 len;
u8 enable;
u8 _pad[3];
} __packed req = {
.band_idx = phy->mt76->band_idx,
.tag = 0,
.len = cpu_to_le16(sizeof(req) - 4),
.enable = enabled,
};
return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(SNIFFER), &req,
sizeof(req), true);
}
int mt7996_mcu_set_txpower_sku(struct mt7996_phy *phy)
{
#define TX_POWER_LIMIT_TABLE_RATE 0

View File

@@ -621,6 +621,7 @@ void mt7996_mcu_rx_event(struct mt7996_dev *dev, struct sk_buff *skb);
void mt7996_mcu_exit(struct mt7996_dev *dev);
int mt7996_mcu_get_all_sta_info(struct mt7996_phy *phy, u16 tag);
int mt7996_mcu_wed_rro_reset_sessions(struct mt7996_dev *dev, u16 id);
int mt7996_mcu_set_sniffer_mode(struct mt7996_phy *phy, bool enabled);
static inline u8 mt7996_max_interface_num(struct mt7996_dev *dev)
{