mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 16:01:44 -04:00
wifi: iwlwifi: mld: support changing iftype at runtime
While the interface isn't really operating, which is already required by mac80211, we can simply remove the MAC and add it again to change the type. Implement this simple handling. We could almost consider moving this to mac80211 itself, as this kind of flow should be supportable by any device, but for now keep it here. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20260320100746.2fb530f9d825.I7cc68fa36e40c9f3bef3be9c2982061cb9ea2300@changeid
This commit is contained in:
committed by
Miri Korenblit
parent
d60cbe9ef6
commit
7fa6fcfca7
@@ -754,6 +754,30 @@ void iwl_mld_mac80211_remove_interface(struct ieee80211_hw *hw,
|
||||
mld->monitor.phy.valid = false;
|
||||
}
|
||||
|
||||
static
|
||||
int iwl_mld_mac80211_change_interface(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
enum nl80211_iftype new_type, bool p2p)
|
||||
{
|
||||
enum nl80211_iftype old_type = vif->type;
|
||||
bool old_p2p = vif->p2p;
|
||||
int ret;
|
||||
|
||||
iwl_mld_mac80211_remove_interface(hw, vif);
|
||||
|
||||
/* set the new type for adding it cleanly */
|
||||
vif->type = new_type;
|
||||
vif->p2p = p2p;
|
||||
|
||||
ret = iwl_mld_mac80211_add_interface(hw, vif);
|
||||
|
||||
/* restore for mac80211, it will change it again */
|
||||
vif->type = old_type;
|
||||
vif->p2p = old_p2p;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct iwl_mld_mc_iter_data {
|
||||
struct iwl_mld *mld;
|
||||
int port_id;
|
||||
@@ -2716,6 +2740,7 @@ const struct ieee80211_ops iwl_mld_hw_ops = {
|
||||
.get_antenna = iwl_mld_get_antenna,
|
||||
.set_antenna = iwl_mld_set_antenna,
|
||||
.add_interface = iwl_mld_mac80211_add_interface,
|
||||
.change_interface = iwl_mld_mac80211_change_interface,
|
||||
.remove_interface = iwl_mld_mac80211_remove_interface,
|
||||
.conf_tx = iwl_mld_mac80211_conf_tx,
|
||||
.prepare_multicast = iwl_mld_mac80211_prepare_multicast,
|
||||
|
||||
Reference in New Issue
Block a user