Commit cb75abce authored by Daniel Gabay's avatar Daniel Gabay Committed by Johannes Berg

wifi: iwlwifi: nvm: Update HE capabilities on 6GHz band for EHT device

Max A-MPDU length exponent shall be set to 2 for EHT capable
device on 6GHz band in order to support 4MB aggregation.

Update HE MAC capabilities accordingly for station and softap
interfaces.

This change requires to add another ieee80211_sband_iftype_data for
uhb since high/uhb are no longer the same.
Signed-off-by: default avatarDaniel Gabay <daniel.gabay@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230413102635.1eee32cfd199.I9c5ff3a6956d509137deca620814935149516fbc@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent a0c8ab93
...@@ -47,13 +47,12 @@ struct iwl_nvm_data { ...@@ -47,13 +47,12 @@ struct iwl_nvm_data {
struct ieee80211_supported_band bands[NUM_NL80211_BANDS]; struct ieee80211_supported_band bands[NUM_NL80211_BANDS];
/* /*
* iftype data for low (2.4 GHz) and high (5 and 6 GHz) bands, * iftype data for low (2.4 GHz) high (5 GHz) and uhb (6 GHz) bands
* we can use the same for 5 and 6 GHz bands because they have
* the same data
*/ */
struct { struct {
struct ieee80211_sband_iftype_data low[2]; struct ieee80211_sband_iftype_data low[2];
struct ieee80211_sband_iftype_data high[2]; struct ieee80211_sband_iftype_data high[2];
struct ieee80211_sband_iftype_data uhb[2];
} iftd; } iftd;
struct ieee80211_channel channels[]; struct ieee80211_channel channels[];
......
...@@ -860,7 +860,10 @@ iwl_nvm_fixup_sband_iftd(struct iwl_trans *trans, ...@@ -860,7 +860,10 @@ iwl_nvm_fixup_sband_iftd(struct iwl_trans *trans,
/* Advertise an A-MPDU exponent extension based on /* Advertise an A-MPDU exponent extension based on
* operating band * operating band
*/ */
if (sband->band != NL80211_BAND_2GHZ) if (sband->band == NL80211_BAND_6GHZ && iftype_data->eht_cap.has_eht)
iftype_data->he_cap.he_cap_elem.mac_cap_info[3] |=
IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2;
else if (sband->band != NL80211_BAND_2GHZ)
iftype_data->he_cap.he_cap_elem.mac_cap_info[3] |= iftype_data->he_cap.he_cap_elem.mac_cap_info[3] |=
IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1; IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1;
else else
...@@ -996,15 +999,18 @@ static void iwl_init_he_hw_capab(struct iwl_trans *trans, ...@@ -996,15 +999,18 @@ static void iwl_init_he_hw_capab(struct iwl_trans *trans,
BUILD_BUG_ON(sizeof(data->iftd.low) != sizeof(iwl_he_eht_capa)); BUILD_BUG_ON(sizeof(data->iftd.low) != sizeof(iwl_he_eht_capa));
BUILD_BUG_ON(sizeof(data->iftd.high) != sizeof(iwl_he_eht_capa)); BUILD_BUG_ON(sizeof(data->iftd.high) != sizeof(iwl_he_eht_capa));
BUILD_BUG_ON(sizeof(data->iftd.uhb) != sizeof(iwl_he_eht_capa));
switch (sband->band) { switch (sband->band) {
case NL80211_BAND_2GHZ: case NL80211_BAND_2GHZ:
iftype_data = data->iftd.low; iftype_data = data->iftd.low;
break; break;
case NL80211_BAND_5GHZ: case NL80211_BAND_5GHZ:
case NL80211_BAND_6GHZ:
iftype_data = data->iftd.high; iftype_data = data->iftd.high;
break; break;
case NL80211_BAND_6GHZ:
iftype_data = data->iftd.uhb;
break;
default: default:
WARN_ON(1); WARN_ON(1);
return; return;
......
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