mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
UPSTREAM: 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>
Bug: 215824523
(cherry picked from commit 237337c230)
Change-Id: I80c8f060111e05a1e02b1e8926d4da53c6aa636e
Signed-off-by: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
This commit is contained in:
committed by
Todd Kjos
parent
2706cc9064
commit
aef95dea79
@@ -3933,6 +3933,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.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
@@ -4261,6 +4269,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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -4348,6 +4348,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,
|
||||
@@ -4452,4 +4464,5 @@ const struct cfg80211_ops mac80211_config_ops = {
|
||||
.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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user