mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
mac80211: add HE 6 GHz Band Capability element
Construct HE 6 GHz band capability element (IEEE 802.11ax/D6.0, 9.4.2.261) for association request and mesh beacon. The 6 GHz capability information is passed by driver through iftypes caps. Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org> Link: https://lore.kernel.org/r/1589399105-25472-7-git-send-email-rmanohar@codeaurora.org [handle SMPS, adjust for previous patches, reserve SKB space properly, change to handle SKB directly] Link: https://lore.kernel.org/r/20200528213443.643aa8101111.I3f9747c1147480f65445f13eda5c4a5ed4e86757@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
2239521772
commit
24a2042cb2
6 changed files with 65 additions and 1 deletions
|
@ -2839,6 +2839,52 @@ end:
|
|||
return pos;
|
||||
}
|
||||
|
||||
void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_supported_band *sband;
|
||||
const struct ieee80211_sband_iftype_data *iftd;
|
||||
enum nl80211_iftype iftype = ieee80211_vif_type_p2p(&sdata->vif);
|
||||
u8 *pos;
|
||||
u16 cap;
|
||||
|
||||
sband = ieee80211_get_sband(sdata);
|
||||
if (!sband)
|
||||
return;
|
||||
|
||||
iftd = ieee80211_get_sband_iftype_data(sband, iftype);
|
||||
if (WARN_ON(!iftd))
|
||||
return;
|
||||
|
||||
cap = le16_to_cpu(iftd->he_6ghz_capa.capa);
|
||||
cap &= ~IEEE80211_HE_6GHZ_CAP_SM_PS;
|
||||
|
||||
switch (sdata->smps_mode) {
|
||||
case IEEE80211_SMPS_AUTOMATIC:
|
||||
case IEEE80211_SMPS_NUM_MODES:
|
||||
WARN_ON(1);
|
||||
/* fall through */
|
||||
case IEEE80211_SMPS_OFF:
|
||||
cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_DISABLED,
|
||||
IEEE80211_HE_6GHZ_CAP_SM_PS);
|
||||
break;
|
||||
case IEEE80211_SMPS_STATIC:
|
||||
cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_STATIC,
|
||||
IEEE80211_HE_6GHZ_CAP_SM_PS);
|
||||
break;
|
||||
case IEEE80211_SMPS_DYNAMIC:
|
||||
cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_DYNAMIC,
|
||||
IEEE80211_HE_6GHZ_CAP_SM_PS);
|
||||
break;
|
||||
}
|
||||
|
||||
pos = skb_put(skb, 2 + 1 + sizeof(cap));
|
||||
*pos++ = WLAN_EID_EXTENSION;
|
||||
*pos++ = 1 + sizeof(cap);
|
||||
*pos++ = WLAN_EID_EXT_HE_6GHZ_CAPA;
|
||||
put_unaligned_le16(cap, pos);
|
||||
}
|
||||
|
||||
u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
u16 prot_mode, bool rifs_mode)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue