diff options
author | sanfran <sanfran.shen@broadcom.corp-partner.google.com> | 2020-05-22 17:04:59 +0800 |
---|---|---|
committer | Ahmed ElArabawy <arabawy@google.com> | 2020-06-12 17:29:21 +0000 |
commit | 5980f40fa49ea88225938cd9e9cf73580b6b8ffa (patch) | |
tree | 066981321ecfdd6215e1cd7c3c32eb599e3cce55 | |
parent | 0771ecce65496e2249f06b3ed78aa630a0cbd288 (diff) | |
download | bcm43752-5980f40fa49ea88225938cd9e9cf73580b6b8ffa.tar.gz |
Add NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY
Add mac_cap_info and phy_cap_info to ieee80211_sband_iftype_data
Bug: 153995393
Test: Check if is_80211ax_supported is true
Change-Id: I6b618b56584fbb6773e8a531a71dd5667ac105c8
Signed-off-by: sanfran <sanfran.shen@broadcom.corp-partner.google.com>
-rw-r--r-- | wl_cfg80211.c | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/wl_cfg80211.c b/wl_cfg80211.c index 4e0f70f..d4102dc 100644 --- a/wl_cfg80211.c +++ b/wl_cfg80211.c @@ -1166,12 +1166,68 @@ static struct ieee80211_channel __wl_5ghz_a_channels[] = { #endif /* WL_6G_BAND */ }; +static struct ieee80211_sband_iftype_data __wl_he_cap = { + .types_mask = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_AP), + .he_cap = { + .has_he = true, + .he_cap_elem = { + .mac_cap_info[0] = + IEEE80211_HE_MAC_CAP0_HTC_HE | + IEEE80211_HE_MAC_CAP0_TWT_REQ, + .mac_cap_info[1] = + IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US, + .mac_cap_info[2] = + IEEE80211_HE_MAC_CAP2_BSR | + IEEE80211_HE_MAC_CAP2_BCAST_TWT, + + /* The kernel is too old. So remove this for + backward compatibility and memory safety + .mac_cap_info[5] = IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX, + */ + + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | + IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD, + .phy_cap_info[4] = + IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE | + IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4, + .phy_cap_info[6] = + IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU | + IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU | + IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB | + IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB | + IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT, + .phy_cap_info[7] = + IEEE80211_HE_PHY_CAP7_MAX_NC_1, + .phy_cap_info[8] = + IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU | + IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU, + }, + .he_mcs_nss_supp = { + .rx_mcs_80 = cpu_to_le16(0xfffa), + .tx_mcs_80 = cpu_to_le16(0xfffa), + .rx_mcs_160 = cpu_to_le16((0xffff)), + .tx_mcs_160 = cpu_to_le16((0xffff)), + .rx_mcs_80p80 = cpu_to_le16(0xffff), + .tx_mcs_80p80 = cpu_to_le16(0xffff), + } + } +}; + static struct ieee80211_supported_band __wl_band_2ghz = { .band = IEEE80211_BAND_2GHZ, .channels = __wl_2ghz_channels, .n_channels = ARRAY_SIZE(__wl_2ghz_channels), .bitrates = wl_g_rates, - .n_bitrates = wl_g_rates_size + .n_bitrates = wl_g_rates_size, + .iftype_data = &__wl_he_cap, + .n_iftype_data = 1 }; static struct ieee80211_supported_band __wl_band_5ghz_a = { @@ -1179,7 +1235,9 @@ static struct ieee80211_supported_band __wl_band_5ghz_a = { .channels = __wl_5ghz_a_channels, .n_channels = ARRAY_SIZE(__wl_5ghz_a_channels), .bitrates = wl_a_rates, - .n_bitrates = wl_a_rates_size + .n_bitrates = wl_a_rates_size, + .iftype_data = &__wl_he_cap, + .n_iftype_data = 1 }; static const u32 __wl_cipher_suites[] = { |