mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
68 lines
2.6 KiB
Diff
68 lines
2.6 KiB
Diff
|
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
||
|
Date: Sat, 23 Oct 2021 11:10:51 +0200
|
||
|
Subject: [PATCH] mac80211: introduce set_radar_offchan callback
|
||
|
|
||
|
Similar to cfg80211, introduce set_radar_offchan callback in mac80211_ops
|
||
|
in order to configure a dedicated offchannel chain available on some hw
|
||
|
(e.g. mt7915) to perform offchannel CAC detection and avoid tx/rx downtime.
|
||
|
|
||
|
Tested-by: Evelyn Tsai <evelyn.tsai@mediatek.com>
|
||
|
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
||
|
Link: https://lore.kernel.org/r/201110606d4f3a7dfdf31440e351f2e2c375d4f0.1634979655.git.lorenzo@kernel.org
|
||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||
|
---
|
||
|
|
||
|
--- a/include/net/mac80211.h
|
||
|
+++ b/include/net/mac80211.h
|
||
|
@@ -3937,6 +3937,14 @@ struct ieee80211_prep_tx_info {
|
||
|
* twt structure.
|
||
|
* @twt_teardown_request: Update the hw with TWT teardown request received
|
||
|
* from the peer.
|
||
|
+ * @set_radar_offchan: Configure dedicated offchannel chain available for
|
||
|
+ * radar/CAC detection on some hw. This chain can't be used to transmit
|
||
|
+ * or receive frames and it is bounded to a running wdev.
|
||
|
+ * Offchannel radar/CAC detection allows to avoid the CAC downtime
|
||
|
+ * switching to a different channel during CAC detection on the selected
|
||
|
+ * radar channel.
|
||
|
+ * The caller is expected to set chandef pointer to NULL in order to
|
||
|
+ * disable offchannel CAC/radar detection.
|
||
|
* @net_fill_forward_path: Called from .ndo_fill_forward_path in order to
|
||
|
* resolve a path for hardware flow offloading
|
||
|
*/
|
||
|
@@ -4267,6 +4275,8 @@ struct ieee80211_ops {
|
||
|
struct ieee80211_twt_setup *twt);
|
||
|
void (*twt_teardown_request)(struct ieee80211_hw *hw,
|
||
|
struct ieee80211_sta *sta, u8 flowid);
|
||
|
+ int (*set_radar_offchan)(struct ieee80211_hw *hw,
|
||
|
+ struct cfg80211_chan_def *chandef);
|
||
|
int (*net_fill_forward_path)(struct ieee80211_hw *hw,
|
||
|
struct ieee80211_vif *vif,
|
||
|
struct ieee80211_sta *sta,
|
||
|
--- a/net/mac80211/cfg.c
|
||
|
+++ b/net/mac80211/cfg.c
|
||
|
@@ -4344,6 +4344,18 @@ out:
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
+static int
|
||
|
+ieee80211_set_radar_offchan(struct wiphy *wiphy,
|
||
|
+ struct cfg80211_chan_def *chandef)
|
||
|
+{
|
||
|
+ struct ieee80211_local *local = wiphy_priv(wiphy);
|
||
|
+
|
||
|
+ if (!local->ops->set_radar_offchan)
|
||
|
+ return -EOPNOTSUPP;
|
||
|
+
|
||
|
+ return local->ops->set_radar_offchan(&local->hw, chandef);
|
||
|
+}
|
||
|
+
|
||
|
const struct cfg80211_ops mac80211_config_ops = {
|
||
|
.add_virtual_intf = ieee80211_add_iface,
|
||
|
.del_virtual_intf = ieee80211_del_iface,
|
||
|
@@ -4448,4 +4460,5 @@ const struct cfg80211_ops mac80211_confi
|
||
|
.reset_tid_config = ieee80211_reset_tid_config,
|
||
|
.set_sar_specs = ieee80211_set_sar_specs,
|
||
|
.color_change = ieee80211_color_change,
|
||
|
+ .set_radar_offchan = ieee80211_set_radar_offchan,
|
||
|
};
|