Commit b6d20ce4 authored by Ryder Lee's avatar Ryder Lee Committed by Felix Fietkau

mt76: mt7915: fix CSA notification for DBDC

Add CSA notification for second phy.
Signed-off-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 62da7a38
...@@ -336,6 +336,22 @@ mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) ...@@ -336,6 +336,22 @@ mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
ieee80211_csa_finish(vif); ieee80211_csa_finish(vif);
} }
static void
mt7915_mcu_rx_csa_notify(struct mt7915_dev *dev, struct sk_buff *skb)
{
struct mt76_phy *mphy = &dev->mt76.phy;
struct mt7915_mcu_csa_notify *c;
c = (struct mt7915_mcu_csa_notify *)skb->data;
if (c->band_idx && dev->mt76.phy2)
mphy = dev->mt76.phy2;
ieee80211_iterate_active_interfaces_atomic(mphy->hw,
IEEE80211_IFACE_ITER_RESUME_ALL,
mt7915_mcu_csa_finish, mphy->hw);
}
static void static void
mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb) mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
{ {
...@@ -344,7 +360,7 @@ mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb) ...@@ -344,7 +360,7 @@ mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
r = (struct mt7915_mcu_rdd_report *)skb->data; r = (struct mt7915_mcu_rdd_report *)skb->data;
if (r->idx && dev->mt76.phy2) if (r->band_idx && dev->mt76.phy2)
mphy = dev->mt76.phy2; mphy = dev->mt76.phy2;
ieee80211_radar_detected(mphy->hw); ieee80211_radar_detected(mphy->hw);
...@@ -511,9 +527,7 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb) ...@@ -511,9 +527,7 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
mt7915_mcu_rx_radar_detected(dev, skb); mt7915_mcu_rx_radar_detected(dev, skb);
break; break;
case MCU_EXT_EVENT_CSA_NOTIFY: case MCU_EXT_EVENT_CSA_NOTIFY:
ieee80211_iterate_active_interfaces_atomic(dev->mt76.hw, mt7915_mcu_rx_csa_notify(dev, skb);
IEEE80211_IFACE_ITER_RESUME_ALL,
mt7915_mcu_csa_finish, dev);
break; break;
case MCU_EXT_EVENT_RATE_REPORT: case MCU_EXT_EVENT_RATE_REPORT:
mt7915_mcu_tx_rate_report(dev, skb); mt7915_mcu_tx_rate_report(dev, skb);
...@@ -3219,7 +3233,7 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd) ...@@ -3219,7 +3233,7 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd)
} }
#endif #endif
if (dev->mt76.hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) if (phy->mt76->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD; req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
else if ((chandef->chan->flags & IEEE80211_CHAN_RADAR) && else if ((chandef->chan->flags & IEEE80211_CHAN_RADAR) &&
chandef->chan->dfs_state != NL80211_DFS_AVAILABLE) chandef->chan->dfs_state != NL80211_DFS_AVAILABLE)
......
...@@ -68,10 +68,19 @@ struct mt7915_mcu_rxd { ...@@ -68,10 +68,19 @@ struct mt7915_mcu_rxd {
u8 s2d_index; u8 s2d_index;
}; };
struct mt7915_mcu_csa_notify {
struct mt7915_mcu_rxd rxd;
u8 omac_idx;
u8 csa_count;
u8 band_idx;
u8 rsv;
} __packed;
struct mt7915_mcu_rdd_report { struct mt7915_mcu_rdd_report {
struct mt7915_mcu_rxd rxd; struct mt7915_mcu_rxd rxd;
u8 idx; u8 band_idx;
u8 long_detected; u8 long_detected;
u8 constant_prf_detected; u8 constant_prf_detected;
u8 staggered_prf_detected; u8 staggered_prf_detected;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment