Commit c4d32f27 authored by Miri Korenblit's avatar Miri Korenblit Committed by Johannes Berg

wifi: iwlwifi: implement can_activate_links callback

This callback checks if a given bitmap of active_links
will be supported by the driver or not.
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Reviewed-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Link: https://msgid.link/20240123200528.a26fd48bfe3d.I03ae6b4c7fd24e8701660a68cec9403dc3469a0e@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 289f57bb
...@@ -253,9 +253,6 @@ __iwl_mvm_mld_assign_vif_chanctx(struct iwl_mvm *mvm, ...@@ -253,9 +253,6 @@ __iwl_mvm_mld_assign_vif_chanctx(struct iwl_mvm *mvm,
if (!rcu_access_pointer(link_conf->chanctx_conf)) if (!rcu_access_pointer(link_conf->chanctx_conf))
n_active++; n_active++;
if (n_active > iwl_mvm_max_active_links(mvm, vif))
return -EOPNOTSUPP;
if (WARN_ON_ONCE(!mvmvif->link[link_id])) if (WARN_ON_ONCE(!mvmvif->link[link_id]))
return -EINVAL; return -EINVAL;
...@@ -1121,17 +1118,12 @@ iwl_mvm_mld_change_vif_links(struct ieee80211_hw *hw, ...@@ -1121,17 +1118,12 @@ iwl_mvm_mld_change_vif_links(struct ieee80211_hw *hw,
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS]) struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
{ {
struct iwl_mvm_vif_link_info *new_link[IEEE80211_MLD_MAX_NUM_LINKS] = {}; struct iwl_mvm_vif_link_info *new_link[IEEE80211_MLD_MAX_NUM_LINKS] = {};
unsigned int n_active = iwl_mvm_mld_count_active_links(vif);
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
u16 removed = old_links & ~new_links; u16 removed = old_links & ~new_links;
u16 added = new_links & ~old_links; u16 added = new_links & ~old_links;
int err, i; int err, i;
if (hweight16(new_links) > 1 &&
n_active > iwl_mvm_max_active_links(mvm, vif))
return -EOPNOTSUPP;
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) { for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
int r; int r;
...@@ -1223,6 +1215,15 @@ iwl_mvm_mld_change_sta_links(struct ieee80211_hw *hw, ...@@ -1223,6 +1215,15 @@ iwl_mvm_mld_change_sta_links(struct ieee80211_hw *hw,
return ret; return ret;
} }
static bool iwl_mvm_mld_can_activate_links(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
u16 desired_links)
{
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
return hweight16(desired_links) <= iwl_mvm_max_active_links(mvm, vif);
}
const struct ieee80211_ops iwl_mvm_mld_hw_ops = { const struct ieee80211_ops iwl_mvm_mld_hw_ops = {
.tx = iwl_mvm_mac_tx, .tx = iwl_mvm_mac_tx,
.wake_tx_queue = iwl_mvm_mac_wake_tx_queue, .wake_tx_queue = iwl_mvm_mac_wake_tx_queue,
...@@ -1317,4 +1318,5 @@ const struct ieee80211_ops iwl_mvm_mld_hw_ops = { ...@@ -1317,4 +1318,5 @@ const struct ieee80211_ops iwl_mvm_mld_hw_ops = {
.change_vif_links = iwl_mvm_mld_change_vif_links, .change_vif_links = iwl_mvm_mld_change_vif_links,
.change_sta_links = iwl_mvm_mld_change_sta_links, .change_sta_links = iwl_mvm_mld_change_sta_links,
.can_activate_links = iwl_mvm_mld_can_activate_links,
}; };
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