Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'mac80211-next-for-net-next-2021-04-20' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next

Johannes Berg says:

====================
Another set of updates, all over the map:
* set sk_pacing_shift for 802.3->802.11 encap offload
* some monitor support for 802.11->802.3 decap offload
* HE (802.11ax) spec updates
* userspace API for TDLS HE support
* along with various other small features, cleanups and
fixups
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+232 -149
+7 -8
drivers/net/wireless/ath/ath11k/mac.c
··· 1334 1334 * request, then use MAX_AMPDU_LEN_FACTOR as 16 to calculate max_ampdu 1335 1335 * length. 1336 1336 */ 1337 - ampdu_factor = (he_cap->he_cap_elem.mac_cap_info[3] & 1338 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK) >> 1339 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_SHIFT; 1337 + ampdu_factor = u8_get_bits(he_cap->he_cap_elem.mac_cap_info[3], 1338 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK); 1340 1339 1341 1340 if (ampdu_factor) { 1342 1341 if (sta->vht_cap.vht_supported) ··· 3875 3876 IEEE80211_HE_MAC_CAP4_BQR; 3876 3877 he_cap_elem->mac_cap_info[4] &= ~m; 3877 3878 3878 - m = IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION | 3879 + m = IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECTIVE_TRANSMISSION | 3879 3880 IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU | 3880 3881 IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING | 3881 3882 IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX; ··· 3885 3886 IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO; 3886 3887 he_cap_elem->phy_cap_info[2] &= ~m; 3887 3888 3888 - m = IEEE80211_HE_PHY_CAP3_RX_HE_MU_PPDU_FROM_NON_AP_STA | 3889 + m = IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU | 3889 3890 IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK | 3890 3891 IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK; 3891 3892 he_cap_elem->phy_cap_info[3] &= ~m; ··· 3897 3898 he_cap_elem->phy_cap_info[5] &= ~m; 3898 3899 3899 3900 m = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU | 3900 - IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB | 3901 + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB | 3901 3902 IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB | 3902 3903 IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO; 3903 3904 he_cap_elem->phy_cap_info[6] &= ~m; 3904 3905 3905 - m = IEEE80211_HE_PHY_CAP7_SRP_BASED_SR | 3906 - IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | 3906 + m = IEEE80211_HE_PHY_CAP7_PSR_BASED_SR | 3907 + IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | 3907 3908 IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ | 3908 3909 IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ; 3909 3910 he_cap_elem->phy_cap_info[7] &= ~m;
+1 -1
drivers/net/wireless/broadcom/b43/main.c
··· 4053 4053 { 4054 4054 struct ieee80211_supported_band *sband = 4055 4055 dev->wl->hw->wiphy->bands[b43_current_band(dev->wl)]; 4056 - struct ieee80211_rate *rate; 4056 + const struct ieee80211_rate *rate; 4057 4057 int i; 4058 4058 u16 basic, direct, offset, basic_offset, rateptr; 4059 4059
+1 -1
drivers/net/wireless/broadcom/b43legacy/main.c
··· 2762 2762 { 2763 2763 struct ieee80211_supported_band *sband = 2764 2764 dev->wl->hw->wiphy->bands[NL80211_BAND_2GHZ]; 2765 - struct ieee80211_rate *rate; 2765 + const struct ieee80211_rate *rate; 2766 2766 int i; 2767 2767 u16 basic, direct, offset, basic_offset, rateptr; 2768 2768
+7 -7
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
··· 550 550 IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP, 551 551 .mac_cap_info[3] = 552 552 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 553 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, 553 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2, 554 554 .mac_cap_info[4] = 555 - IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU | 555 + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU | 556 556 IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39, 557 557 .mac_cap_info[5] = 558 558 IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40 | ··· 583 583 IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_2 | 584 584 IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_2, 585 585 .phy_cap_info[6] = 586 - IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | 587 - IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB | 586 + IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | 587 + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB | 588 588 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT, 589 589 .phy_cap_info[7] = 590 - IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | 590 + IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | 591 591 IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI | 592 592 IEEE80211_HE_PHY_CAP7_MAX_NC_1, 593 593 .phy_cap_info[8] = ··· 636 636 IEEE80211_HE_MAC_CAP2_BSR, 637 637 .mac_cap_info[3] = 638 638 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 639 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, 639 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2, 640 640 .mac_cap_info[4] = 641 - IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, 641 + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 642 642 .mac_cap_info[5] = 643 643 IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU, 644 644 .phy_cap_info[0] =
+10 -14
drivers/net/wireless/mac80211_hwsim.c
··· 596 596 { .vendor_id = OUI_QCA, .subcmd = 1 }, 597 597 }; 598 598 599 - static spinlock_t hwsim_radio_lock; 599 + static DEFINE_SPINLOCK(hwsim_radio_lock); 600 600 static LIST_HEAD(hwsim_radios); 601 601 static struct rhashtable hwsim_radios_rht; 602 602 static int hwsim_radio_idx; ··· 763 763 /* MAC80211_HWSIM virtio queues */ 764 764 static struct virtqueue *hwsim_vqs[HWSIM_NUM_VQS]; 765 765 static bool hwsim_virtio_enabled; 766 - static spinlock_t hwsim_virtio_lock; 766 + static DEFINE_SPINLOCK(hwsim_virtio_lock); 767 767 768 768 static void hwsim_virtio_rx_work(struct work_struct *work); 769 769 static DECLARE_WORK(hwsim_virtio_rx, hwsim_virtio_rx_work); ··· 2795 2795 IEEE80211_HE_MAC_CAP2_ACK_EN, 2796 2796 .mac_cap_info[3] = 2797 2797 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 2798 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, 2799 - .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, 2798 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, 2799 + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 2800 2800 .phy_cap_info[1] = 2801 2801 IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | 2802 2802 IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | ··· 2839 2839 IEEE80211_HE_MAC_CAP2_ACK_EN, 2840 2840 .mac_cap_info[3] = 2841 2841 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 2842 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, 2843 - .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, 2842 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, 2843 + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 2844 2844 .phy_cap_info[1] = 2845 2845 IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | 2846 2846 IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | ··· 2885 2885 IEEE80211_HE_MAC_CAP2_ACK_EN, 2886 2886 .mac_cap_info[3] = 2887 2887 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 2888 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, 2889 - .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, 2888 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, 2889 + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 2890 2890 .phy_cap_info[0] = 2891 2891 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | 2892 2892 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | ··· 2933 2933 IEEE80211_HE_MAC_CAP2_ACK_EN, 2934 2934 .mac_cap_info[3] = 2935 2935 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 2936 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, 2937 - .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, 2936 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, 2937 + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, 2938 2938 .phy_cap_info[0] = 2939 2939 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | 2940 2940 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | ··· 4410 4410 4411 4411 static int hwsim_register_virtio_driver(void) 4412 4412 { 4413 - spin_lock_init(&hwsim_virtio_lock); 4414 - 4415 4413 return register_virtio_driver(&virtio_hwsim); 4416 4414 } 4417 4415 ··· 4437 4439 4438 4440 if (channels < 1) 4439 4441 return -EINVAL; 4440 - 4441 - spin_lock_init(&hwsim_radio_lock); 4442 4442 4443 4443 err = rhashtable_init(&hwsim_radios_rht, &hwsim_rht_params); 4444 4444 if (err)
+1 -1
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
··· 511 511 if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL) 512 512 cap |= STA_REC_HE_CAP_OM; 513 513 514 - if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU) 514 + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU) 515 515 cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU; 516 516 517 517 if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR)
+7 -7
drivers/net/wireless/mediatek/mt76/mt7915/init.c
··· 442 442 IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK; 443 443 elem->phy_cap_info[5] &= ~c; 444 444 445 - c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | 446 - IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB; 445 + c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | 446 + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB; 447 447 elem->phy_cap_info[6] &= ~c; 448 448 449 449 elem->phy_cap_info[7] &= ~IEEE80211_HE_PHY_CAP7_MAX_NC_MASK; ··· 480 480 c = (nss - 1) | (max_t(int, le16_to_cpu(mcs->tx_mcs_160), 1) << 3); 481 481 elem->phy_cap_info[5] |= c; 482 482 483 - c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | 484 - IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB; 483 + c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | 484 + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB; 485 485 elem->phy_cap_info[6] |= c; 486 486 487 487 /* the maximum cap is 4 x 3, (Nr, Nc) = (3, 2) */ ··· 548 548 IEEE80211_HE_MAC_CAP0_HTC_HE; 549 549 he_cap_elem->mac_cap_info[3] = 550 550 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 551 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; 551 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3; 552 552 he_cap_elem->mac_cap_info[4] = 553 - IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU; 553 + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; 554 554 555 555 if (band == NL80211_BAND_2GHZ) 556 556 he_cap_elem->phy_cap_info[0] = ··· 607 607 IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE | 608 608 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT; 609 609 he_cap_elem->phy_cap_info[7] |= 610 - IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | 610 + IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | 611 611 IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI; 612 612 he_cap_elem->phy_cap_info[8] |= 613 613 IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
+3 -3
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
··· 1355 1355 if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL) 1356 1356 cap |= STA_REC_HE_CAP_OM; 1357 1357 1358 - if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU) 1358 + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU) 1359 1359 cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU; 1360 1360 1361 1361 if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR) ··· 1853 1853 1854 1854 bf->tx_mode = MT_PHY_TYPE_HE_SU; 1855 1855 mt7915_mcu_sta_sounding_rate(bf); 1856 - bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMER_FB, 1856 + bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB, 1857 1857 pe->phy_cap_info[6]); 1858 - bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMER_FB, 1858 + bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB, 1859 1859 pe->phy_cap_info[6]); 1860 1860 bfer_nr = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK, 1861 1861 ve->phy_cap_info[5]);
+3 -3
drivers/net/wireless/mediatek/mt76/mt7921/main.c
··· 65 65 IEEE80211_HE_MAC_CAP0_HTC_HE; 66 66 he_cap_elem->mac_cap_info[3] = 67 67 IEEE80211_HE_MAC_CAP3_OMI_CONTROL | 68 - IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; 68 + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3; 69 69 he_cap_elem->mac_cap_info[4] = 70 - IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU; 70 + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; 71 71 72 72 if (band == NL80211_BAND_2GHZ) 73 73 he_cap_elem->phy_cap_info[0] = ··· 108 108 IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE | 109 109 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT; 110 110 he_cap_elem->phy_cap_info[7] |= 111 - IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | 111 + IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | 112 112 IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI; 113 113 he_cap_elem->phy_cap_info[8] |= 114 114 IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
+19 -14
include/linux/ieee80211.h
··· 2006 2006 * A-MDPU Length Exponent field in the HT capabilities, VHT capabilities and the 2007 2007 * same field in the HE capabilities. 2008 2008 */ 2009 - #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_USE_VHT 0x00 2010 - #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_1 0x08 2011 - #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2 0x10 2012 - #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED 0x18 2009 + #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_0 0x00 2010 + #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1 0x08 2011 + #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2 0x10 2012 + #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3 0x18 2013 2013 #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK 0x18 2014 2014 #define IEEE80211_HE_MAC_CAP3_AMSDU_FRAG 0x20 2015 2015 #define IEEE80211_HE_MAC_CAP3_FLEX_TWT_SCHED 0x40 2016 2016 #define IEEE80211_HE_MAC_CAP3_RX_CTRL_FRAME_TO_MULTIBSS 0x80 2017 2017 2018 - #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_SHIFT 3 2019 - 2020 2018 #define IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG 0x01 2021 2019 #define IEEE80211_HE_MAC_CAP4_QTP 0x02 2022 2020 #define IEEE80211_HE_MAC_CAP4_BQR 0x04 2023 - #define IEEE80211_HE_MAC_CAP4_SRP_RESP 0x08 2021 + #define IEEE80211_HE_MAC_CAP4_PSR_RESP 0x08 2024 2022 #define IEEE80211_HE_MAC_CAP4_NDP_FB_REP 0x10 2025 2023 #define IEEE80211_HE_MAC_CAP4_OPS 0x20 2026 - #define IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU 0x40 2024 + #define IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU 0x40 2027 2025 /* Multi TID agg TX is split between byte #4 and #5 2028 2026 * The value is a combination of B39,B40,B41 2029 2027 */ ··· 2029 2031 2030 2032 #define IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40 0x01 2031 2033 #define IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B41 0x02 2032 - #define IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION 0x04 2034 + #define IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECTIVE_TRANSMISSION 0x04 2033 2035 #define IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU 0x08 2034 2036 #define IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX 0x10 2035 2037 #define IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS 0x20 ··· 2087 2089 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK 0x18 2088 2090 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1 0x00 2089 2091 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_2 0x20 2090 - #define IEEE80211_HE_PHY_CAP3_RX_HE_MU_PPDU_FROM_NON_AP_STA 0x40 2092 + #define IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU 0x40 2091 2093 #define IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER 0x80 2092 2094 2093 2095 #define IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE 0x01 ··· 2134 2136 2135 2137 #define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU 0x01 2136 2138 #define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU 0x02 2137 - #define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB 0x04 2138 - #define IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB 0x08 2139 + #define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB 0x04 2140 + #define IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB 0x08 2139 2141 #define IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB 0x10 2140 2142 #define IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE 0x20 2141 2143 #define IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO 0x40 2142 2144 #define IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT 0x80 2143 2145 2144 - #define IEEE80211_HE_PHY_CAP7_SRP_BASED_SR 0x01 2145 - #define IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR 0x02 2146 + #define IEEE80211_HE_PHY_CAP7_PSR_BASED_SR 0x01 2147 + #define IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP 0x02 2146 2148 #define IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI 0x04 2147 2149 #define IEEE80211_HE_PHY_CAP7_MAX_NC_1 0x08 2148 2150 #define IEEE80211_HE_PHY_CAP7_MAX_NC_2 0x10 ··· 3858 3860 u8 op_class; 3859 3861 u8 channel; 3860 3862 } __packed; 3863 + 3864 + enum ieee80211_range_params_max_total_ltf { 3865 + IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_4 = 0, 3866 + IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_8, 3867 + IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_16, 3868 + IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_UNSPECIFIED, 3869 + }; 3861 3870 3862 3871 #endif /* LINUX_IEEE80211_H */
+18 -6
include/net/cfg80211.h
··· 11 11 */ 12 12 13 13 #include <linux/ethtool.h> 14 + #include <uapi/linux/rfkill.h> 14 15 #include <linux/netdevice.h> 15 16 #include <linux/debugfs.h> 16 17 #include <linux/list.h> ··· 360 359 }; 361 360 362 361 /** 363 - * struct ieee80211_sband_iftype_data 362 + * struct ieee80211_sband_iftype_data - sband data per interface type 364 363 * 365 364 * This structure encapsulates sband data that is relevant for the 366 365 * interface types defined in @types_mask. Each type in the ··· 3521 3520 * @non_trigger_based: use non trigger based ranging for the measurement 3522 3521 * If neither @trigger_based nor @non_trigger_based is set, 3523 3522 * EDCA based ranging will be used. 3523 + * @lmr_feedback: negotiate for I2R LMR feedback. Only valid if either 3524 + * @trigger_based or @non_trigger_based is set. 3524 3525 * 3525 3526 * See also nl80211 for the respective attribute documentation. 3526 3527 */ ··· 3534 3531 request_lci:1, 3535 3532 request_civicloc:1, 3536 3533 trigger_based:1, 3537 - non_trigger_based:1; 3534 + non_trigger_based:1, 3535 + lmr_feedback:1; 3538 3536 u8 num_bursts_exp; 3539 3537 u8 burst_duration; 3540 3538 u8 ftms_per_burst; ··· 5610 5606 * which is, for this function, given as a bitmap of indices of 5611 5607 * rates in the band's bitrate table. 5612 5608 */ 5613 - struct ieee80211_rate * 5609 + const struct ieee80211_rate * 5614 5610 ieee80211_get_response_rate(struct ieee80211_supported_band *sband, 5615 5611 u32 basic_rates, int bitrate); 5616 5612 ··· 6637 6633 */ 6638 6634 6639 6635 /** 6640 - * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state 6636 + * wiphy_rfkill_set_hw_state_reason - notify cfg80211 about hw block state 6641 6637 * @wiphy: the wiphy 6642 6638 * @blocked: block status 6639 + * @reason: one of reasons in &enum rfkill_hard_block_reasons 6643 6640 */ 6644 - void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked); 6641 + void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked, 6642 + enum rfkill_hard_block_reasons reason); 6643 + 6644 + static inline void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked) 6645 + { 6646 + wiphy_rfkill_set_hw_state_reason(wiphy, blocked, 6647 + RFKILL_HARD_BLOCK_SIGNAL); 6648 + } 6645 6649 6646 6650 /** 6647 6651 * wiphy_rfkill_start_polling - start polling rfkill ··· 6743 6731 int cfg80211_vendor_cmd_reply(struct sk_buff *skb); 6744 6732 6745 6733 /** 6746 - * cfg80211_vendor_cmd_get_sender 6734 + * cfg80211_vendor_cmd_get_sender - get the current sender netlink ID 6747 6735 * @wiphy: the wiphy 6748 6736 * 6749 6737 * Return the current netlink port ID in a vendor command handler.
+8 -4
include/net/mac80211.h
··· 1768 1768 * 1769 1769 * This can be used by mac80211 drivers with direct cfg80211 APIs 1770 1770 * (like the vendor commands) that needs to get the wdev for a vif. 1771 - * 1772 - * Note that this function may return %NULL if the given wdev isn't 1773 - * associated with a vif that the driver knows about (e.g. monitor 1774 - * or AP_VLAN interfaces.) 1771 + * This can also be useful to get the netdev associated to a vif. 1775 1772 */ 1776 1773 struct wireless_dev *ieee80211_vif_to_wdev(struct ieee80211_vif *vif); 1777 1774 ··· 2396 2399 * @IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD: Hardware supports rx decapsulation 2397 2400 * offload 2398 2401 * 2402 + * @IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP: Hardware supports concurrent rx 2403 + * decapsulation offload and passing raw 802.11 frames for monitor iface. 2404 + * If this is supported, the driver must pass both 802.3 frames for real 2405 + * usage and 802.11 frames with %RX_FLAG_ONLY_MONITOR set for monitor to 2406 + * the stack. 2407 + * 2399 2408 * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays 2400 2409 */ 2401 2410 enum ieee80211_hw_flags { ··· 2456 2453 IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT, 2457 2454 IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD, 2458 2455 IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD, 2456 + IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP, 2459 2457 2460 2458 /* keep last, obviously */ 2461 2459 NUM_IEEE80211_HW_FLAGS
+22
include/uapi/linux/nl80211.h
··· 655 655 * When a security association was established on an 802.1X network using 656 656 * fast transition, this event should be followed by an 657 657 * %NL80211_CMD_PORT_AUTHORIZED event. 658 + * Following a %NL80211_CMD_ROAM event userspace can issue 659 + * %NL80211_CMD_GET_SCAN in order to obtain the scan information for the 660 + * new BSS the card/driver roamed to. 658 661 * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify 659 662 * userspace that a connection was dropped by the AP or due to other 660 663 * reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and ··· 5940 5937 * @NL80211_EXT_FEATURE_BEACON_RATE_HE: Driver supports beacon rate 5941 5938 * configuration (AP/mesh) with HE rates. 5942 5939 * 5940 + * @NL80211_EXT_FEATURE_SECURE_LTF: Device supports secure LTF measurement 5941 + * exchange protocol. 5942 + * 5943 + * @NL80211_EXT_FEATURE_SECURE_RTT: Device supports secure RTT measurement 5944 + * exchange protocol. 5945 + * 5946 + * @NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE: Device supports management 5947 + * frame protection for all management frames exchanged during the 5948 + * negotiation and range measurement procedure. 5949 + * 5943 5950 * @NUM_NL80211_EXT_FEATURES: number of extended features. 5944 5951 * @MAX_NL80211_EXT_FEATURES: highest extended feature index. 5945 5952 */ ··· 6011 5998 NL80211_EXT_FEATURE_FILS_DISCOVERY, 6012 5999 NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP, 6013 6000 NL80211_EXT_FEATURE_BEACON_RATE_HE, 6001 + NL80211_EXT_FEATURE_SECURE_LTF, 6002 + NL80211_EXT_FEATURE_SECURE_RTT, 6003 + NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE, 6014 6004 6015 6005 /* add new features before the definition below */ 6016 6006 NUM_NL80211_EXT_FEATURES, ··· 6311 6295 * @NL80211_TDLS_PEER_HT: TDLS peer is HT capable. 6312 6296 * @NL80211_TDLS_PEER_VHT: TDLS peer is VHT capable. 6313 6297 * @NL80211_TDLS_PEER_WMM: TDLS peer is WMM capable. 6298 + * @NL80211_TDLS_PEER_HE: TDLS peer is HE capable. 6314 6299 */ 6315 6300 enum nl80211_tdls_peer_capability { 6316 6301 NL80211_TDLS_PEER_HT = 1<<0, 6317 6302 NL80211_TDLS_PEER_VHT = 1<<1, 6318 6303 NL80211_TDLS_PEER_WMM = 1<<2, 6304 + NL80211_TDLS_PEER_HE = 1<<3, 6319 6305 }; 6320 6306 6321 6307 /** ··· 6909 6891 * if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor 6910 6892 * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based 6911 6893 * ranging will be used. 6894 + * @NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK: negotiate for LMR feedback. Only 6895 + * valid if either %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED or 6896 + * %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set. 6912 6897 * 6913 6898 * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal 6914 6899 * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number ··· 6930 6909 NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC, 6931 6910 NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED, 6932 6911 NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED, 6912 + NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK, 6933 6913 6934 6914 /* keep last */ 6935 6915 NUM_NL80211_PMSR_FTM_REQ_ATTR,
+9 -2
net/mac80211/aes_cmac.c
··· 2 2 /* 3 3 * AES-128-CMAC with TLen 16 for IEEE 802.11w BIP 4 4 * Copyright 2008, Jouni Malinen <j@w1.fi> 5 + * Copyright (C) 2020 Intel Corporation 5 6 */ 6 7 7 8 #include <linux/kernel.h> ··· 74 73 struct crypto_shash *tfm; 75 74 76 75 tfm = crypto_alloc_shash("cmac(aes)", 0, 0); 77 - if (!IS_ERR(tfm)) 78 - crypto_shash_setkey(tfm, key, key_len); 76 + if (!IS_ERR(tfm)) { 77 + int err = crypto_shash_setkey(tfm, key, key_len); 78 + 79 + if (err) { 80 + crypto_free_shash(tfm); 81 + return ERR_PTR(err); 82 + } 83 + } 79 84 80 85 return tfm; 81 86 }
+1
net/mac80211/debugfs.c
··· 456 456 FLAG(AMPDU_KEYBORDER_SUPPORT), 457 457 FLAG(SUPPORTS_TX_ENCAP_OFFLOAD), 458 458 FLAG(SUPPORTS_RX_DECAP_OFFLOAD), 459 + FLAG(SUPPORTS_CONC_MON_RX_DECAP), 459 460 #undef FLAG 460 461 }; 461 462
+19 -18
net/mac80211/debugfs_sta.c
··· 711 711 PFLAG(MAC, 3, OFDMA_RA, "OFDMA-RA"); 712 712 713 713 switch (cap[3] & IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK) { 714 - case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_USE_VHT: 715 - PRINT("MAX-AMPDU-LEN-EXP-USE-VHT"); 714 + case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_0: 715 + PRINT("MAX-AMPDU-LEN-EXP-USE-EXT-0"); 716 716 break; 717 - case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_1: 718 - PRINT("MAX-AMPDU-LEN-EXP-VHT-1"); 717 + case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1: 718 + PRINT("MAX-AMPDU-LEN-EXP-VHT-EXT-1"); 719 719 break; 720 - case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2: 721 - PRINT("MAX-AMPDU-LEN-EXP-VHT-2"); 720 + case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2: 721 + PRINT("MAX-AMPDU-LEN-EXP-VHT-EXT-2"); 722 722 break; 723 - case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED: 724 - PRINT("MAX-AMPDU-LEN-EXP-RESERVED"); 723 + case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3: 724 + PRINT("MAX-AMPDU-LEN-EXP-VHT-EXT-3"); 725 725 break; 726 726 } 727 727 ··· 732 732 PFLAG(MAC, 4, BSRP_BQRP_A_MPDU_AGG, "BSRP-BQRP-A-MPDU-AGG"); 733 733 PFLAG(MAC, 4, QTP, "QTP"); 734 734 PFLAG(MAC, 4, BQR, "BQR"); 735 - PFLAG(MAC, 4, SRP_RESP, "SRP-RESP"); 735 + PFLAG(MAC, 4, PSR_RESP, "PSR-RESP"); 736 736 PFLAG(MAC, 4, NDP_FB_REP, "NDP-FB-REP"); 737 737 PFLAG(MAC, 4, OPS, "OPS"); 738 - PFLAG(MAC, 4, AMDSU_IN_AMPDU, "AMSDU-IN-AMPDU"); 738 + PFLAG(MAC, 4, AMSDU_IN_AMPDU, "AMSDU-IN-AMPDU"); 739 739 740 740 PRINT("MULTI-TID-AGG-TX-QOS-%d", ((cap[5] << 1) | (cap[4] >> 7)) & 0x7); 741 741 742 - PFLAG(MAC, 5, SUBCHAN_SELECVITE_TRANSMISSION, 743 - "SUBCHAN-SELECVITE-TRANSMISSION"); 742 + PFLAG(MAC, 5, SUBCHAN_SELECTIVE_TRANSMISSION, 743 + "SUBCHAN-SELECTIVE-TRANSMISSION"); 744 744 PFLAG(MAC, 5, UL_2x996_TONE_RU, "UL-2x996-TONE-RU"); 745 745 PFLAG(MAC, 5, OM_CTRL_UL_MU_DATA_DIS_RX, "OM-CTRL-UL-MU-DATA-DIS-RX"); 746 746 PFLAG(MAC, 5, HE_DYNAMIC_SM_PS, "HE-DYNAMIC-SM-PS"); ··· 832 832 833 833 PFLAG(PHY, 3, DCM_MAX_RX_NSS_1, "DCM-MAX-RX-NSS-1"); 834 834 PFLAG(PHY, 3, DCM_MAX_RX_NSS_2, "DCM-MAX-RX-NSS-2"); 835 - PFLAG(PHY, 3, RX_HE_MU_PPDU_FROM_NON_AP_STA, 836 - "RX-HE-MU-PPDU-FROM-NON-AP-STA"); 835 + PFLAG(PHY, 3, RX_PARTIAL_BW_SU_IN_20MHZ_MU, 836 + "RX-PARTIAL-BW-SU-IN-20MHZ-MU"); 837 837 PFLAG(PHY, 3, SU_BEAMFORMER, "SU-BEAMFORMER"); 838 838 839 839 PFLAG(PHY, 4, SU_BEAMFORMEE, "SU-BEAMFORMEE"); ··· 853 853 854 854 PFLAG(PHY, 6, CODEBOOK_SIZE_42_SU, "CODEBOOK-SIZE-42-SU"); 855 855 PFLAG(PHY, 6, CODEBOOK_SIZE_75_MU, "CODEBOOK-SIZE-75-MU"); 856 - PFLAG(PHY, 6, TRIG_SU_BEAMFORMER_FB, "TRIG-SU-BEAMFORMER-FB"); 857 - PFLAG(PHY, 6, TRIG_MU_BEAMFORMER_FB, "TRIG-MU-BEAMFORMER-FB"); 856 + PFLAG(PHY, 6, TRIG_SU_BEAMFORMING_FB, "TRIG-SU-BEAMFORMING-FB"); 857 + PFLAG(PHY, 6, TRIG_MU_BEAMFORMING_PARTIAL_BW_FB, 858 + "MU-BEAMFORMING-PARTIAL-BW-FB"); 858 859 PFLAG(PHY, 6, TRIG_CQI_FB, "TRIG-CQI-FB"); 859 860 PFLAG(PHY, 6, PARTIAL_BW_EXT_RANGE, "PARTIAL-BW-EXT-RANGE"); 860 861 PFLAG(PHY, 6, PARTIAL_BANDWIDTH_DL_MUMIMO, 861 862 "PARTIAL-BANDWIDTH-DL-MUMIMO"); 862 863 PFLAG(PHY, 6, PPE_THRESHOLD_PRESENT, "PPE-THRESHOLD-PRESENT"); 863 864 864 - PFLAG(PHY, 7, SRP_BASED_SR, "SRP-BASED-SR"); 865 - PFLAG(PHY, 7, POWER_BOOST_FACTOR_AR, "POWER-BOOST-FACTOR-AR"); 865 + PFLAG(PHY, 7, PSR_BASED_SR, "PSR-BASED-SR"); 866 + PFLAG(PHY, 7, POWER_BOOST_FACTOR_SUPP, "POWER-BOOST-FACTOR-SUPP"); 866 867 PFLAG(PHY, 7, HE_SU_MU_PPDU_4XLTF_AND_08_US_GI, 867 868 "HE-SU-MU-PPDU-4XLTF-AND-08-US-GI"); 868 869 PFLAG_RANGE(PHY, 7, MAX_NC, 0, 1, 1, "MAX-NC-%d");
+2
net/mac80211/ieee80211_i.h
··· 1660 1660 void ieee80211_mgd_quiesce(struct ieee80211_sub_if_data *sdata); 1661 1661 void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); 1662 1662 void ieee80211_sta_handle_tspec_ac_params(struct ieee80211_sub_if_data *sdata); 1663 + void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata, 1664 + u8 *bssid, u8 reason, bool tx); 1663 1665 1664 1666 /* IBSS code */ 1665 1667 void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
+2 -1
net/mac80211/iface.c
··· 807 807 ieee80211_iftype_supports_hdr_offload(sdata->vif.type)) { 808 808 flags |= IEEE80211_OFFLOAD_DECAP_ENABLED; 809 809 810 - if (local->monitors) 810 + if (local->monitors && 811 + !ieee80211_hw_check(&local->hw, SUPPORTS_CONC_MON_RX_DECAP)) 811 812 flags &= ~IEEE80211_OFFLOAD_DECAP_ENABLED; 812 813 } else { 813 814 flags &= ~IEEE80211_OFFLOAD_DECAP_ENABLED;
+13 -3
net/mac80211/main.c
··· 5 5 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 6 6 * Copyright 2013-2014 Intel Mobile Communications GmbH 7 7 * Copyright (C) 2017 Intel Deutschland GmbH 8 - * Copyright (C) 2018 - 2019 Intel Corporation 8 + * Copyright (C) 2018-2021 Intel Corporation 9 9 */ 10 10 11 11 #include <net/mac80211.h> ··· 282 282 * Then we can have a race... 283 283 */ 284 284 cancel_work_sync(&sdata->u.mgd.csa_connection_drop_work); 285 + if (sdata->vif.csa_active) { 286 + sdata_lock(sdata); 287 + ieee80211_sta_connection_lost(sdata, 288 + sdata->u.mgd.associated->bssid, 289 + WLAN_REASON_UNSPECIFIED, false); 290 + sdata_unlock(sdata); 291 + } 285 292 } 286 293 flush_delayed_work(&sdata->dec_tailroom_needed_wk); 287 294 } ··· 1148 1141 if (local->hw.wiphy->max_scan_ie_len) 1149 1142 local->hw.wiphy->max_scan_ie_len -= local->scan_ies_len; 1150 1143 1151 - WARN_ON(!ieee80211_cs_list_valid(local->hw.cipher_schemes, 1152 - local->hw.n_cipher_schemes)); 1144 + if (WARN_ON(!ieee80211_cs_list_valid(local->hw.cipher_schemes, 1145 + local->hw.n_cipher_schemes))) { 1146 + result = -EINVAL; 1147 + goto fail_workqueue; 1148 + } 1153 1149 1154 1150 result = ieee80211_init_cipher_suites(local); 1155 1151 if (result < 0)
+9 -7
net/mac80211/mlme.c
··· 1295 1295 1296 1296 sdata->vif.csa_active = false; 1297 1297 ifmgd->csa_waiting_bcn = false; 1298 + /* 1299 + * If the CSA IE is still present on the beacon after the switch, 1300 + * we need to consider it as a new CSA (possibly to self). 1301 + */ 1302 + ifmgd->beacon_crc_valid = false; 1298 1303 1299 1304 ret = drv_post_channel_switch(sdata); 1300 1305 if (ret) { ··· 1405 1400 ch_switch.delay = csa_ie.max_switch_time; 1406 1401 } 1407 1402 1408 - if (res < 0) { 1409 - ieee80211_queue_work(&local->hw, 1410 - &ifmgd->csa_connection_drop_work); 1411 - return; 1412 - } 1403 + if (res < 0) 1404 + goto lock_and_drop_connection; 1413 1405 1414 1406 if (beacon && sdata->vif.csa_active && !ifmgd->csa_waiting_bcn) { 1415 1407 if (res) ··· 4384 4382 ieee80211_queue_work(&sdata->local->hw, &sdata->work); 4385 4383 } 4386 4384 4387 - static void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata, 4388 - u8 *bssid, u8 reason, bool tx) 4385 + void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata, 4386 + u8 *bssid, u8 reason, bool tx) 4389 4387 { 4390 4388 u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN]; 4391 4389
+1 -3
net/mac80211/rc80211_minstrel_ht.c
··· 370 370 /* short preamble */ 371 371 if ((mi->supported[group] & BIT(idx + 4)) && 372 372 (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)) 373 - idx += 4; 373 + idx += 4; 374 374 goto out; 375 375 } 376 376 ··· 868 868 minstrel_ht_next_jump_rate(struct minstrel_ht_sta *mi, u32 fast_rate_dur, 869 869 u32 slow_rate_dur, int *slow_rate_ofs) 870 870 { 871 - struct minstrel_mcs_group_data *mg; 872 871 struct minstrel_rate_stats *mrs; 873 872 u32 max_duration = slow_rate_dur; 874 873 int i, index, offset; ··· 885 886 u8 type; 886 887 887 888 group = (group + 1) % ARRAY_SIZE(minstrel_mcs_groups); 888 - mg = &mi->groups[group]; 889 889 890 890 supported = mi->supported[group]; 891 891 if (!supported)
+40 -18
net/mac80211/tx.c
··· 5 5 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 6 6 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> 7 7 * Copyright 2013-2014 Intel Mobile Communications GmbH 8 - * Copyright (C) 2018-2020 Intel Corporation 8 + * Copyright (C) 2018-2021 Intel Corporation 9 9 * 10 10 * Transmit and frame generation functions. 11 11 */ ··· 1388 1388 ieee80211_set_skb_enqueue_time(skb); 1389 1389 1390 1390 spin_lock_bh(&fq->lock); 1391 - fq_tin_enqueue(fq, tin, flow_idx, skb, 1392 - fq_skb_free_func); 1391 + /* 1392 + * For management frames, don't really apply codel etc., 1393 + * we don't want to apply any shaping or anything we just 1394 + * want to simplify the driver API by having them on the 1395 + * txqi. 1396 + */ 1397 + if (unlikely(txqi->txq.tid == IEEE80211_NUM_TIDS)) { 1398 + IEEE80211_SKB_CB(skb)->control.flags |= 1399 + IEEE80211_TX_INTCFL_NEED_TXPROCESSING; 1400 + __skb_queue_tail(&txqi->frags, skb); 1401 + } else { 1402 + fq_tin_enqueue(fq, tin, flow_idx, skb, 1403 + fq_skb_free_func); 1404 + } 1393 1405 spin_unlock_bh(&fq->lock); 1394 1406 } 1395 1407 ··· 1696 1684 struct ieee80211_sub_if_data *sdata; 1697 1685 struct ieee80211_vif *vif; 1698 1686 struct sk_buff *skb; 1699 - bool result = true; 1687 + bool result; 1700 1688 __le16 fc; 1701 1689 1702 1690 if (WARN_ON(skb_queue_empty(skbs))) ··· 2279 2267 payload[7]); 2280 2268 } 2281 2269 2282 - /* Initialize skb->priority for QoS frames. If the DONT_REORDER flag 2283 - * is set, stick to the default value for skb->priority to assure 2284 - * frames injected with this flag are not reordered relative to each 2285 - * other. 2286 - */ 2287 - if (ieee80211_is_data_qos(hdr->frame_control) && 2288 - !(info->control.flags & IEEE80211_TX_CTRL_DONT_REORDER)) { 2289 - u8 *p = ieee80211_get_qos_ctl(hdr); 2290 - skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK; 2291 - } 2292 - 2293 2270 rcu_read_lock(); 2294 2271 2295 2272 /* ··· 2341 2340 goto fail_rcu; 2342 2341 2343 2342 info->band = chandef->chan->band; 2343 + 2344 + /* Initialize skb->priority according to frame type and TID class, 2345 + * with respect to the sub interface that the frame will actually 2346 + * be transmitted on. If the DONT_REORDER flag is set, the original 2347 + * skb-priority is preserved to assure frames injected with this 2348 + * flag are not reordered relative to each other. 2349 + */ 2350 + ieee80211_select_queue_80211(sdata, skb, hdr); 2351 + skb_set_queue_mapping(skb, ieee80211_ac_from_tid(skb->priority)); 2344 2352 2345 2353 /* remove the injection radiotap header */ 2346 2354 skb_pull(skb, len_rthdr); ··· 3590 3580 3591 3581 /* Make sure fragments stay together. */ 3592 3582 skb = __skb_dequeue(&txqi->frags); 3593 - if (skb) 3594 - goto out; 3583 + if (unlikely(skb)) { 3584 + if (!(IEEE80211_SKB_CB(skb)->control.flags & 3585 + IEEE80211_TX_INTCFL_NEED_TXPROCESSING)) 3586 + goto out; 3587 + IEEE80211_SKB_CB(skb)->control.flags &= 3588 + ~IEEE80211_TX_INTCFL_NEED_TXPROCESSING; 3589 + } else { 3590 + skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func); 3591 + } 3595 3592 3596 - skb = fq_tin_dequeue(fq, tin, fq_tin_dequeue_func); 3597 3593 if (!skb) 3598 3594 goto out; 3599 3595 ··· 3849 3833 return true; 3850 3834 3851 3835 if (!txq->sta) 3836 + return true; 3837 + 3838 + if (unlikely(txq->tid == IEEE80211_NUM_TIDS)) 3852 3839 return true; 3853 3840 3854 3841 sta = container_of(txq->sta, struct sta_info, sta); ··· 4168 4149 struct ieee80211_sta *pubsta = NULL; 4169 4150 unsigned long flags; 4170 4151 int q = info->hw_queue; 4152 + 4153 + if (sta) 4154 + sk_pacing_shift_update(skb->sk, local->hw.tx_sk_pacing_shift); 4171 4155 4172 4156 if (ieee80211_queue_skb(local, sdata, sta, skb)) 4173 4157 return true;
+1 -9
net/mac80211/util.c
··· 888 888 889 889 struct wireless_dev *ieee80211_vif_to_wdev(struct ieee80211_vif *vif) 890 890 { 891 - struct ieee80211_sub_if_data *sdata; 892 - 893 891 if (!vif) 894 892 return NULL; 895 893 896 - sdata = vif_to_sdata(vif); 897 - 898 - if (!ieee80211_sdata_running(sdata) || 899 - !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) 900 - return NULL; 901 - 902 - return &sdata->wdev; 894 + return &vif_to_sdata(vif)->wdev; 903 895 } 904 896 EXPORT_SYMBOL_GPL(ieee80211_vif_to_wdev); 905 897
+1 -3
net/rfkill/input.c
··· 36 36 MODULE_PARM_DESC(master_switch_mode, 37 37 "SW_RFKILL_ALL ON should: 0=do nothing (only unlock); 1=restore; 2=unblock all"); 38 38 39 - static spinlock_t rfkill_op_lock; 39 + static DEFINE_SPINLOCK(rfkill_op_lock); 40 40 static bool rfkill_op_pending; 41 41 static unsigned long rfkill_sw_pending[BITS_TO_LONGS(NUM_RFKILL_TYPES)]; 42 42 static unsigned long rfkill_sw_state[BITS_TO_LONGS(NUM_RFKILL_TYPES)]; ··· 329 329 default: 330 330 return -EINVAL; 331 331 } 332 - 333 - spin_lock_init(&rfkill_op_lock); 334 332 335 333 /* Avoid delay at first schedule */ 336 334 rfkill_last_scheduled =
+4 -3
net/wireless/core.c
··· 1092 1092 } 1093 1093 EXPORT_SYMBOL(wiphy_free); 1094 1094 1095 - void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked) 1095 + void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked, 1096 + enum rfkill_hard_block_reasons reason) 1096 1097 { 1097 1098 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); 1098 1099 1099 - if (rfkill_set_hw_state(rdev->rfkill, blocked)) 1100 + if (rfkill_set_hw_state_reason(rdev->rfkill, blocked, reason)) 1100 1101 schedule_work(&rdev->rfkill_block); 1101 1102 } 1102 - EXPORT_SYMBOL(wiphy_rfkill_set_hw_state); 1103 + EXPORT_SYMBOL(wiphy_rfkill_set_hw_state_reason); 1103 1104 1104 1105 void cfg80211_cqm_config_free(struct wireless_dev *wdev) 1105 1106 {
+5 -3
net/wireless/nl80211.c
··· 313 313 [NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC] = { .type = NLA_FLAG }, 314 314 [NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED] = { .type = NLA_FLAG }, 315 315 [NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED] = { .type = NLA_FLAG }, 316 + [NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK] = { .type = NLA_FLAG }, 316 317 }; 317 318 318 319 static const struct nla_policy ··· 412 411 nl80211_fils_discovery_policy[NL80211_FILS_DISCOVERY_ATTR_MAX + 1] = { 413 412 [NL80211_FILS_DISCOVERY_ATTR_INT_MIN] = NLA_POLICY_MAX(NLA_U32, 10000), 414 413 [NL80211_FILS_DISCOVERY_ATTR_INT_MAX] = NLA_POLICY_MAX(NLA_U32, 10000), 415 - NLA_POLICY_RANGE(NLA_BINARY, 416 - NL80211_FILS_DISCOVERY_TMPL_MIN_LEN, 417 - IEEE80211_MAX_DATA_LEN), 414 + [NL80211_FILS_DISCOVERY_ATTR_TMPL] = 415 + NLA_POLICY_RANGE(NLA_BINARY, 416 + NL80211_FILS_DISCOVERY_TMPL_MIN_LEN, 417 + IEEE80211_MAX_DATA_LEN), 418 418 }; 419 419 420 420 static const struct nla_policy
+11 -1
net/wireless/pmsr.c
··· 1 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 2 /* 3 - * Copyright (C) 2018 - 2019 Intel Corporation 3 + * Copyright (C) 2018 - 2021 Intel Corporation 4 4 */ 5 5 #ifndef __PMSR_H 6 6 #define __PMSR_H ··· 155 155 NL_SET_ERR_MSG_ATTR(info->extack, 156 156 tb[NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE], 157 157 "FTM: non EDCA based ranging must use HE preamble"); 158 + return -EINVAL; 159 + } 160 + 161 + out->ftm.lmr_feedback = 162 + !!tb[NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK]; 163 + if (!out->ftm.trigger_based && !out->ftm.non_trigger_based && 164 + out->ftm.lmr_feedback) { 165 + NL_SET_ERR_MSG_ATTR(info->extack, 166 + tb[NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK], 167 + "FTM: LMR feedback set for EDCA based ranging"); 158 168 return -EINVAL; 159 169 } 160 170
+3 -7
net/wireless/reg.c
··· 126 126 * is relevant for all registered devices. 127 127 */ 128 128 static bool reg_is_indoor; 129 - static spinlock_t reg_indoor_lock; 129 + static DEFINE_SPINLOCK(reg_indoor_lock); 130 130 131 131 /* Used to track the userspace process controlling the indoor setting */ 132 132 static u32 reg_is_indoor_portid; ··· 210 210 211 211 /* Used to queue up regulatory hints */ 212 212 static LIST_HEAD(reg_requests_list); 213 - static spinlock_t reg_requests_lock; 213 + static DEFINE_SPINLOCK(reg_requests_lock); 214 214 215 215 /* Used to queue up beacon hints for review */ 216 216 static LIST_HEAD(reg_pending_beacons); 217 - static spinlock_t reg_pending_beacons_lock; 217 + static DEFINE_SPINLOCK(reg_pending_beacons_lock); 218 218 219 219 /* Used to keep track of processed beacon hints */ 220 220 static LIST_HEAD(reg_beacon_list); ··· 4261 4261 reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0); 4262 4262 if (IS_ERR(reg_pdev)) 4263 4263 return PTR_ERR(reg_pdev); 4264 - 4265 - spin_lock_init(&reg_requests_lock); 4266 - spin_lock_init(&reg_pending_beacons_lock); 4267 - spin_lock_init(&reg_indoor_lock); 4268 4264 4269 4265 rcu_assign_pointer(cfg80211_regdomain, cfg80211_world_regdom); 4270 4266
+3 -1
net/wireless/scan.c
··· 589 589 590 590 elem = cfg80211_find_elem(WLAN_EID_REDUCED_NEIGHBOR_REPORT, ies->data, 591 591 ies->len); 592 - if (!elem || elem->datalen > IEEE80211_MAX_SSID_LEN) 592 + if (!elem) 593 593 return 0; 594 594 595 595 pos = elem->data; ··· 1751 1751 1752 1752 if (rdev->bss_entries >= bss_entries_limit && 1753 1753 !cfg80211_bss_expire_oldest(rdev)) { 1754 + if (!list_empty(&new->hidden_list)) 1755 + list_del(&new->hidden_list); 1754 1756 kfree(new); 1755 1757 goto drop; 1756 1758 }
+1 -1
net/wireless/util.c
··· 24 24 #include "rdev-ops.h" 25 25 26 26 27 - struct ieee80211_rate * 27 + const struct ieee80211_rate * 28 28 ieee80211_get_response_rate(struct ieee80211_supported_band *sband, 29 29 u32 basic_rates, int bitrate) 30 30 {