You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
973 lines
33 KiB
973 lines
33 KiB
From d574baf35b78dc94ba2fbe6273c20b8ed7c20a90 Mon Sep 17 00:00:00 2001
|
|
From: Eugene Syromiatnikov <esyr@redhat.com>
|
|
Date: Fri, 6 Sep 2019 01:23:19 +0200
|
|
Subject: [PATCH 43/43] Revert "iwlwifi: add support for IEEE802.11ax"
|
|
|
|
This reverts commit 514c30696fbc2598a088f8c5e201d305d157b99a.
|
|
---
|
|
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c | 103 -----------
|
|
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 7 -
|
|
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 203 +--------------------
|
|
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
|
|
drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 1 -
|
|
drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c | 44 +----
|
|
drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 39 +---
|
|
drivers/net/wireless/intel/iwlwifi/mvm/rs.h | 21 +--
|
|
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 122 +------------
|
|
drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 8 +-
|
|
drivers/net/wireless/intel/iwlwifi/mvm/sta.h | 6 +-
|
|
11 files changed, 22 insertions(+), 534 deletions(-)
|
|
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c 2019-09-06 01:25:40.744352675 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c 2019-09-06 01:26:14.205925854 +0200
|
|
@@ -480,101 +480,6 @@
|
|
vht_cap->vht_mcs.tx_mcs_map = vht_cap->vht_mcs.rx_mcs_map;
|
|
}
|
|
|
|
-static struct ieee80211_sband_iftype_data iwl_he_capa = {
|
|
- .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,
|
|
- .mac_cap_info[1] =
|
|
- IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US |
|
|
- IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_QOS_8,
|
|
- .mac_cap_info[2] =
|
|
- IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP |
|
|
- IEEE80211_HE_MAC_CAP2_ACK_EN,
|
|
- .mac_cap_info[3] =
|
|
- IEEE80211_HE_MAC_CAP3_GRP_ADDR_MULTI_STA_BA_DL_MU |
|
|
- IEEE80211_HE_MAC_CAP3_MAX_A_AMPDU_LEN_EXP_VHT_2,
|
|
- .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU,
|
|
- .phy_cap_info[0] =
|
|
- IEEE80211_HE_PHY_CAP0_DUAL_BAND |
|
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
|
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
|
|
- IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G,
|
|
- .phy_cap_info[1] =
|
|
- IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
|
|
- IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD |
|
|
- IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_MAX_NSTS,
|
|
- .phy_cap_info[2] =
|
|
- IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US |
|
|
- IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ |
|
|
- IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ,
|
|
- .phy_cap_info[3] =
|
|
- IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_BPSK |
|
|
- IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_1 |
|
|
- IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_BPSK |
|
|
- IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1,
|
|
- .phy_cap_info[4] =
|
|
- IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE |
|
|
- IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_8 |
|
|
- IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_8,
|
|
- .phy_cap_info[5] =
|
|
- IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_2 |
|
|
- IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_2,
|
|
- .phy_cap_info[6] =
|
|
- IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT,
|
|
- .phy_cap_info[7] =
|
|
- IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR |
|
|
- IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI |
|
|
- IEEE80211_HE_PHY_CAP7_MAX_NC_7,
|
|
- .phy_cap_info[8] =
|
|
- IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI |
|
|
- IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
|
|
- IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU |
|
|
- IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU,
|
|
- },
|
|
- /*
|
|
- * Set default Tx/Rx HE MCS NSS Support field. Indicate support
|
|
- * for up to 2 spatial streams and all MCS, without any special
|
|
- * cases
|
|
- */
|
|
- .he_mcs_nss_supp = {
|
|
- .rx_mcs_80 = cpu_to_le16(0xfffa),
|
|
- .tx_mcs_80 = cpu_to_le16(0xfffa),
|
|
- .rx_mcs_160 = cpu_to_le16(0xfffa),
|
|
- .tx_mcs_160 = cpu_to_le16(0xfffa),
|
|
- .rx_mcs_80p80 = cpu_to_le16(0xffff),
|
|
- .tx_mcs_80p80 = cpu_to_le16(0xffff),
|
|
- },
|
|
- /*
|
|
- * Set default PPE thresholds, with PPET16 set to 0, PPET8 set
|
|
- * to 7
|
|
- */
|
|
- .ppe_thres = {0x61, 0x1c, 0xc7, 0x71},
|
|
- },
|
|
-};
|
|
-
|
|
-static void iwl_init_he_hw_capab(struct ieee80211_supported_band *sband,
|
|
- u8 tx_chains, u8 rx_chains)
|
|
-{
|
|
- if (sband->band == NL80211_BAND_2GHZ ||
|
|
- sband->band == NL80211_BAND_5GHZ)
|
|
- sband->iftype_data = &iwl_he_capa;
|
|
- else
|
|
- return;
|
|
-
|
|
- sband->n_iftype_data = 1;
|
|
-
|
|
- /* If not 2x2, we need to indicate 1x1 in the Midamble RX Max NSTS */
|
|
- if ((tx_chains & rx_chains) != ANT_AB) {
|
|
- iwl_he_capa.he_cap.he_cap_elem.phy_cap_info[1] &=
|
|
- ~IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_MAX_NSTS;
|
|
- iwl_he_capa.he_cap.he_cap_elem.phy_cap_info[2] &=
|
|
- ~IEEE80211_HE_PHY_CAP2_MIDAMBLE_RX_MAX_NSTS;
|
|
- }
|
|
-}
|
|
-
|
|
static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
|
|
struct iwl_nvm_data *data,
|
|
const void *nvm_ch_flags, u8 tx_chains,
|
|
@@ -595,9 +500,6 @@
|
|
iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, NL80211_BAND_2GHZ,
|
|
tx_chains, rx_chains);
|
|
|
|
- if (data->sku_cap_11ax_enable)
|
|
- iwl_init_he_hw_capab(sband, tx_chains, rx_chains);
|
|
-
|
|
sband = &data->bands[NL80211_BAND_5GHZ];
|
|
sband->band = NL80211_BAND_5GHZ;
|
|
sband->bitrates = &iwl_cfg80211_rates[RATES_52_OFFS];
|
|
@@ -610,9 +512,6 @@
|
|
iwl_init_vht_hw_capab(cfg, data, &sband->vht_cap,
|
|
tx_chains, rx_chains);
|
|
|
|
- if (data->sku_cap_11ax_enable)
|
|
- iwl_init_he_hw_capab(sband, tx_chains, rx_chains);
|
|
-
|
|
if (n_channels != n_used)
|
|
IWL_ERR_DEV(dev, "NVM: used only %d of %d channels\n",
|
|
n_used, n_channels);
|
|
@@ -1388,8 +1287,6 @@
|
|
!!(mac_flags & NVM_MAC_SKU_FLAGS_802_11AC_ENABLED);
|
|
nvm->sku_cap_11n_enable =
|
|
!!(mac_flags & NVM_MAC_SKU_FLAGS_802_11N_ENABLED);
|
|
- nvm->sku_cap_11ax_enable =
|
|
- !!(mac_flags & NVM_MAC_SKU_FLAGS_802_11AX_ENABLED);
|
|
nvm->sku_cap_band_24ghz_enable =
|
|
!!(mac_flags & NVM_MAC_SKU_FLAGS_BAND_2_4_ENABLED);
|
|
nvm->sku_cap_band_52ghz_enable =
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c 2019-09-06 01:25:47.620264969 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c 2019-09-06 01:26:14.205925854 +0200
|
|
@@ -776,13 +776,6 @@
|
|
if (vif->probe_req_reg && vif->bss_conf.assoc && vif->p2p)
|
|
cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_PROBE_REQUEST);
|
|
|
|
- if (vif->bss_conf.assoc && vif->bss_conf.he_support)
|
|
- cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_11AX);
|
|
- if (vif->bss_conf.twt_requester)
|
|
- ctxt_sta->data_policy |= cpu_to_le32(TWT_SUPPORTED);
|
|
- }
|
|
-
|
|
-
|
|
return iwl_mvm_mac_ctxt_send_cmd(mvm, &cmd);
|
|
}
|
|
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c 2019-09-06 01:25:40.745352663 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c 2019-09-06 01:27:04.186288327 +0200
|
|
@@ -31,7 +31,6 @@
|
|
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
|
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
|
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
|
- * Copyright(c) 2018 - 2019 Intel Corporation
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
@@ -914,7 +913,7 @@
|
|
enum ieee80211_ampdu_mlme_action action = params->action;
|
|
u16 tid = params->tid;
|
|
u16 *ssn = ¶ms->ssn;
|
|
- u16 buf_size = params->buf_size;
|
|
+ u8 buf_size = params->buf_size;
|
|
bool amsdu = params->amsdu;
|
|
u16 timeout = params->timeout;
|
|
|
|
@@ -2010,240 +2009,6 @@
|
|
iwl_mvm_mu_mimo_iface_iterator, notif);
|
|
}
|
|
|
|
-static u8 iwl_mvm_he_get_ppe_val(u8 *ppe, u8 ppe_pos_bit)
|
|
-{
|
|
- u8 byte_num = ppe_pos_bit / 8;
|
|
- u8 bit_num = ppe_pos_bit % 8;
|
|
- u8 residue_bits;
|
|
- u8 res;
|
|
-
|
|
- if (bit_num <= 5)
|
|
- return (ppe[byte_num] >> bit_num) &
|
|
- (BIT(IEEE80211_PPE_THRES_INFO_PPET_SIZE) - 1);
|
|
-
|
|
- /*
|
|
- * If bit_num > 5, we have to combine bits with next byte.
|
|
- * Calculate how many bits we need to take from current byte (called
|
|
- * here "residue_bits"), and add them to bits from next byte.
|
|
- */
|
|
-
|
|
- residue_bits = 8 - bit_num;
|
|
-
|
|
- res = (ppe[byte_num + 1] &
|
|
- (BIT(IEEE80211_PPE_THRES_INFO_PPET_SIZE - residue_bits) - 1)) <<
|
|
- residue_bits;
|
|
- res += (ppe[byte_num] >> bit_num) & (BIT(residue_bits) - 1);
|
|
-
|
|
- return res;
|
|
-}
|
|
-
|
|
-static void iwl_mvm_cfg_he_sta(struct iwl_mvm *mvm,
|
|
- struct ieee80211_vif *vif, u8 sta_id)
|
|
-{
|
|
- struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
|
- struct iwl_he_sta_context_cmd sta_ctxt_cmd = {
|
|
- .sta_id = sta_id,
|
|
- .tid_limit = IWL_MAX_TID_COUNT,
|
|
- .bss_color = vif->bss_conf.bss_color,
|
|
- .htc_trig_based_pkt_ext = vif->bss_conf.htc_trig_based_pkt_ext,
|
|
- .frame_time_rts_th =
|
|
- cpu_to_le16(vif->bss_conf.frame_time_rts_th),
|
|
- };
|
|
- struct ieee80211_sta *sta;
|
|
- u32 flags;
|
|
- int i;
|
|
-
|
|
- rcu_read_lock();
|
|
-
|
|
- sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_ctxt_cmd.sta_id]);
|
|
- if (IS_ERR(sta)) {
|
|
- rcu_read_unlock();
|
|
- WARN(1, "Can't find STA to configure HE\n");
|
|
- return;
|
|
- }
|
|
-
|
|
- if (!sta->he_cap.has_he) {
|
|
- rcu_read_unlock();
|
|
- return;
|
|
- }
|
|
-
|
|
- flags = 0;
|
|
-
|
|
- /* HTC flags */
|
|
- if (sta->he_cap.he_cap_elem.mac_cap_info[0] &
|
|
- IEEE80211_HE_MAC_CAP0_HTC_HE)
|
|
- sta_ctxt_cmd.htc_flags |= cpu_to_le32(IWL_HE_HTC_SUPPORT);
|
|
- if ((sta->he_cap.he_cap_elem.mac_cap_info[1] &
|
|
- IEEE80211_HE_MAC_CAP1_LINK_ADAPTATION) ||
|
|
- (sta->he_cap.he_cap_elem.mac_cap_info[2] &
|
|
- IEEE80211_HE_MAC_CAP2_LINK_ADAPTATION)) {
|
|
- u8 link_adap =
|
|
- ((sta->he_cap.he_cap_elem.mac_cap_info[2] &
|
|
- IEEE80211_HE_MAC_CAP2_LINK_ADAPTATION) << 1) +
|
|
- (sta->he_cap.he_cap_elem.mac_cap_info[1] &
|
|
- IEEE80211_HE_MAC_CAP1_LINK_ADAPTATION);
|
|
-
|
|
- if (link_adap == 2)
|
|
- sta_ctxt_cmd.htc_flags |=
|
|
- cpu_to_le32(IWL_HE_HTC_LINK_ADAP_UNSOLICITED);
|
|
- else if (link_adap == 3)
|
|
- sta_ctxt_cmd.htc_flags |=
|
|
- cpu_to_le32(IWL_HE_HTC_LINK_ADAP_BOTH);
|
|
- }
|
|
- if (sta->he_cap.he_cap_elem.mac_cap_info[2] &
|
|
- IEEE80211_HE_MAC_CAP2_UL_MU_RESP_SCHED)
|
|
- sta_ctxt_cmd.htc_flags |=
|
|
- cpu_to_le32(IWL_HE_HTC_UL_MU_RESP_SCHED);
|
|
- if (sta->he_cap.he_cap_elem.mac_cap_info[2] & IEEE80211_HE_MAC_CAP2_BSR)
|
|
- sta_ctxt_cmd.htc_flags |= cpu_to_le32(IWL_HE_HTC_BSR_SUPP);
|
|
- if (sta->he_cap.he_cap_elem.mac_cap_info[3] &
|
|
- IEEE80211_HE_MAC_CAP3_OMI_CONTROL)
|
|
- sta_ctxt_cmd.htc_flags |= cpu_to_le32(IWL_HE_HTC_OMI_SUPP);
|
|
- if (sta->he_cap.he_cap_elem.mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR)
|
|
- sta_ctxt_cmd.htc_flags |= cpu_to_le32(IWL_HE_HTC_BQR_SUPP);
|
|
-
|
|
- /*
|
|
- * Initialize the PPE thresholds to "None" (7), as described in Table
|
|
- * 9-262ac of 80211.ax/D3.0.
|
|
- */
|
|
- memset(&sta_ctxt_cmd.pkt_ext, 7, sizeof(sta_ctxt_cmd.pkt_ext));
|
|
-
|
|
- /* If PPE Thresholds exist, parse them into a FW-familiar format. */
|
|
- if (sta->he_cap.he_cap_elem.phy_cap_info[6] &
|
|
- IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
|
|
- u8 nss = (sta->he_cap.ppe_thres[0] &
|
|
- IEEE80211_PPE_THRES_NSS_MASK) + 1;
|
|
- u8 ru_index_bitmap =
|
|
- (sta->he_cap.ppe_thres[0] &
|
|
- IEEE80211_PPE_THRES_RU_INDEX_BITMASK_MASK) >>
|
|
- IEEE80211_PPE_THRES_RU_INDEX_BITMASK_POS;
|
|
- u8 *ppe = &sta->he_cap.ppe_thres[0];
|
|
- u8 ppe_pos_bit = 7; /* Starting after PPE header */
|
|
-
|
|
- /*
|
|
- * FW currently supports only nss == MAX_HE_SUPP_NSS
|
|
- *
|
|
- * If nss > MAX: we can ignore values we don't support
|
|
- * If nss < MAX: we can set zeros in other streams
|
|
- */
|
|
- if (nss > MAX_HE_SUPP_NSS) {
|
|
- IWL_INFO(mvm, "Got NSS = %d - trimming to %d\n", nss,
|
|
- MAX_HE_SUPP_NSS);
|
|
- nss = MAX_HE_SUPP_NSS;
|
|
- }
|
|
-
|
|
- for (i = 0; i < nss; i++) {
|
|
- u8 ru_index_tmp = ru_index_bitmap << 1;
|
|
- u8 bw;
|
|
-
|
|
- for (bw = 0; bw < MAX_HE_CHANNEL_BW_INDX; bw++) {
|
|
- ru_index_tmp >>= 1;
|
|
- if (!(ru_index_tmp & 1))
|
|
- continue;
|
|
-
|
|
- sta_ctxt_cmd.pkt_ext.pkt_ext_qam_th[i][bw][1] =
|
|
- iwl_mvm_he_get_ppe_val(ppe,
|
|
- ppe_pos_bit);
|
|
- ppe_pos_bit +=
|
|
- IEEE80211_PPE_THRES_INFO_PPET_SIZE;
|
|
- sta_ctxt_cmd.pkt_ext.pkt_ext_qam_th[i][bw][0] =
|
|
- iwl_mvm_he_get_ppe_val(ppe,
|
|
- ppe_pos_bit);
|
|
- ppe_pos_bit +=
|
|
- IEEE80211_PPE_THRES_INFO_PPET_SIZE;
|
|
- }
|
|
- }
|
|
-
|
|
- flags |= STA_CTXT_HE_PACKET_EXT;
|
|
- } else if ((sta->he_cap.he_cap_elem.phy_cap_info[9] &
|
|
- IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_MASK) !=
|
|
- IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_RESERVED) {
|
|
- int low_th = -1;
|
|
- int high_th = -1;
|
|
-
|
|
- /* Take the PPE thresholds from the nominal padding info */
|
|
- switch (sta->he_cap.he_cap_elem.phy_cap_info[9] &
|
|
- IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_MASK) {
|
|
- case IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_0US:
|
|
- low_th = IWL_HE_PKT_EXT_NONE;
|
|
- high_th = IWL_HE_PKT_EXT_NONE;
|
|
- break;
|
|
- case IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_8US:
|
|
- low_th = IWL_HE_PKT_EXT_BPSK;
|
|
- high_th = IWL_HE_PKT_EXT_NONE;
|
|
- break;
|
|
- case IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US:
|
|
- low_th = IWL_HE_PKT_EXT_NONE;
|
|
- high_th = IWL_HE_PKT_EXT_BPSK;
|
|
- break;
|
|
- }
|
|
-
|
|
- /* Set the PPE thresholds accordingly */
|
|
- if (low_th >= 0 && high_th >= 0) {
|
|
- u8 ***pkt_ext_qam =
|
|
- (void *)sta_ctxt_cmd.pkt_ext.pkt_ext_qam_th;
|
|
-
|
|
- for (i = 0; i < MAX_HE_SUPP_NSS; i++) {
|
|
- u8 bw;
|
|
-
|
|
- for (bw = 0; bw < MAX_HE_CHANNEL_BW_INDX;
|
|
- bw++) {
|
|
- pkt_ext_qam[i][bw][0] = low_th;
|
|
- pkt_ext_qam[i][bw][1] = high_th;
|
|
- }
|
|
- }
|
|
-
|
|
- flags |= STA_CTXT_HE_PACKET_EXT;
|
|
- }
|
|
- }
|
|
- rcu_read_unlock();
|
|
-
|
|
- /* Mark MU EDCA as enabled, unless none detected on some AC */
|
|
- flags |= STA_CTXT_HE_MU_EDCA_CW;
|
|
- for (i = 0; i < AC_NUM; i++) {
|
|
- struct ieee80211_he_mu_edca_param_ac_rec *mu_edca =
|
|
- &mvmvif->queue_params[i].mu_edca_param_rec;
|
|
-
|
|
- if (!mvmvif->queue_params[i].mu_edca) {
|
|
- flags &= ~STA_CTXT_HE_MU_EDCA_CW;
|
|
- break;
|
|
- }
|
|
-
|
|
- sta_ctxt_cmd.trig_based_txf[i].cwmin =
|
|
- cpu_to_le16(mu_edca->ecw_min_max & 0xf);
|
|
- sta_ctxt_cmd.trig_based_txf[i].cwmax =
|
|
- cpu_to_le16((mu_edca->ecw_min_max & 0xf0) >> 4);
|
|
- sta_ctxt_cmd.trig_based_txf[i].aifsn =
|
|
- cpu_to_le16(mu_edca->aifsn);
|
|
- sta_ctxt_cmd.trig_based_txf[i].mu_time =
|
|
- cpu_to_le16(mu_edca->mu_edca_timer);
|
|
- }
|
|
-
|
|
- if (vif->bss_conf.multi_sta_back_32bit)
|
|
- flags |= STA_CTXT_HE_32BIT_BA_BITMAP;
|
|
-
|
|
- if (vif->bss_conf.ack_enabled)
|
|
- flags |= STA_CTXT_HE_ACK_ENABLED;
|
|
-
|
|
- if (vif->bss_conf.uora_exists) {
|
|
- flags |= STA_CTXT_HE_TRIG_RND_ALLOC;
|
|
-
|
|
- sta_ctxt_cmd.rand_alloc_ecwmin =
|
|
- vif->bss_conf.uora_ocw_range & 0x7;
|
|
- sta_ctxt_cmd.rand_alloc_ecwmax =
|
|
- (vif->bss_conf.uora_ocw_range >> 3) & 0x7;
|
|
- }
|
|
-
|
|
- /* TODO: support Multi BSSID IE */
|
|
-
|
|
- sta_ctxt_cmd.flags = cpu_to_le32(flags);
|
|
-
|
|
- if (iwl_mvm_send_cmd_pdu(mvm, iwl_cmd_id(STA_HE_CTXT_CMD,
|
|
- DATA_PATH_GROUP, 0),
|
|
- 0, sizeof(sta_ctxt_cmd), &sta_ctxt_cmd))
|
|
- IWL_ERR(mvm, "Failed to config FW to work HE!\n");
|
|
-}
|
|
-
|
|
static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
|
|
struct ieee80211_vif *vif,
|
|
struct ieee80211_bss_conf *bss_conf,
|
|
@@ -2257,12 +2022,8 @@
|
|
* beacon interval, which was not known when the station interface was
|
|
* added.
|
|
*/
|
|
- if (changes & BSS_CHANGED_ASSOC && bss_conf->assoc) {
|
|
- if (vif->bss_conf.he_support)
|
|
- iwl_mvm_cfg_he_sta(mvm, vif, mvmvif->ap_sta_id);
|
|
-
|
|
+ if (changes & BSS_CHANGED_ASSOC && bss_conf->assoc)
|
|
iwl_mvm_mac_ctxt_recalc_tsf_id(mvm, vif);
|
|
- }
|
|
|
|
/* Update MU EDCA params */
|
|
if (changes & BSS_CHANGED_QOS && mvmvif->associated &&
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h 2019-09-06 01:25:47.817262456 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h 2019-09-06 01:26:14.207925829 +0200
|
|
@@ -696,7 +696,7 @@
|
|
struct iwl_mvm_reorder_buffer {
|
|
u16 head_sn;
|
|
u16 num_stored;
|
|
- u16 buf_size;
|
|
+ u8 buf_size;
|
|
int queue;
|
|
u16 last_amsdu;
|
|
u8 last_sub_index;
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/ops.c 2019-09-06 01:25:47.817262456 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/ops.c 2019-09-06 01:26:14.207925829 +0200
|
|
@@ -444,7 +444,6 @@
|
|
HCMD_NAME(DQA_ENABLE_CMD),
|
|
HCMD_NAME(UPDATE_MU_GROUPS_CMD),
|
|
HCMD_NAME(TRIGGER_RX_QUEUES_NOTIF_CMD),
|
|
- HCMD_NAME(STA_HE_CTXT_CMD),
|
|
HCMD_NAME(RFH_QUEUE_CONFIG_CMD),
|
|
HCMD_NAME(TLC_MNG_CONFIG_CMD),
|
|
HCMD_NAME(CHEST_COLLECTOR_FILTER_CONFIG_CMD),
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c 2019-09-06 01:25:41.121347866 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c 2019-09-06 01:26:14.208925816 +0200
|
|
@@ -204,43 +204,6 @@
|
|
}
|
|
}
|
|
|
|
-static u16 rs_fw_he_ieee80211_mcs_to_rs_mcs(u16 mcs)
|
|
-{
|
|
- switch (mcs) {
|
|
- case IEEE80211_HE_MCS_SUPPORT_0_7:
|
|
- return BIT(IWL_TLC_MNG_HT_RATE_MCS7 + 1) - 1;
|
|
- case IEEE80211_HE_MCS_SUPPORT_0_9:
|
|
- return BIT(IWL_TLC_MNG_HT_RATE_MCS9 + 1) - 1;
|
|
- case IEEE80211_HE_MCS_SUPPORT_0_11:
|
|
- return BIT(IWL_TLC_MNG_HT_RATE_MCS11 + 1) - 1;
|
|
- case IEEE80211_HE_MCS_NOT_SUPPORTED:
|
|
- return 0;
|
|
- }
|
|
-
|
|
- WARN(1, "invalid HE MCS %d\n", mcs);
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static void
|
|
-rs_fw_he_set_enabled_rates(const struct ieee80211_sta *sta,
|
|
- const struct ieee80211_sta_he_cap *he_cap,
|
|
- struct iwl_tlc_config_cmd *cmd)
|
|
-{
|
|
- u16 mcs_160 = le16_to_cpu(sta->he_cap.he_mcs_nss_supp.rx_mcs_160);
|
|
- u16 mcs_80 = le16_to_cpu(sta->he_cap.he_mcs_nss_supp.rx_mcs_80);
|
|
- int i;
|
|
-
|
|
- for (i = 0; i < sta->rx_nss && i < MAX_NSS; i++) {
|
|
- u16 _mcs_160 = (mcs_160 >> (2 * i)) & 0x3;
|
|
- u16 _mcs_80 = (mcs_80 >> (2 * i)) & 0x3;
|
|
-
|
|
- cmd->ht_rates[i][0] =
|
|
- cpu_to_le16(rs_fw_he_ieee80211_mcs_to_rs_mcs(_mcs_80));
|
|
- cmd->ht_rates[i][1] =
|
|
- cpu_to_le16(rs_fw_he_ieee80211_mcs_to_rs_mcs(_mcs_160));
|
|
- }
|
|
-}
|
|
-
|
|
static void rs_fw_set_supp_rates(struct ieee80211_sta *sta,
|
|
struct ieee80211_supported_band *sband,
|
|
struct iwl_tlc_config_cmd *cmd)
|
|
@@ -250,7 +213,6 @@
|
|
unsigned long supp; /* must be unsigned long for for_each_set_bit */
|
|
const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
|
|
const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
|
|
- const struct ieee80211_sta_he_cap *he_cap = &sta->he_cap;
|
|
|
|
/* non HT rates */
|
|
supp = 0;
|
|
@@ -261,11 +223,7 @@
|
|
cmd->non_ht_rates = cpu_to_le16(supp);
|
|
cmd->mode = IWL_TLC_MNG_MODE_NON_HT;
|
|
|
|
- /* HT/VHT rates */
|
|
- if (he_cap && he_cap->has_he) {
|
|
- cmd->mode = IWL_TLC_MNG_MODE_HE;
|
|
- rs_fw_he_set_enabled_rates(sta, he_cap, cmd);
|
|
- } else if (vht_cap && vht_cap->vht_supported) {
|
|
+ if (vht_cap && vht_cap->vht_supported) {
|
|
cmd->mode = IWL_TLC_MNG_MODE_VHT;
|
|
rs_fw_vht_set_enabled_rates(sta, vht_cap, cmd);
|
|
} else if (ht_cap && ht_cap->ht_supported) {
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/rs.c 2019-09-05 14:40:03.011478963 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/rs.c 2019-09-06 01:26:14.208925816 +0200
|
|
@@ -352,8 +352,7 @@
|
|
idx += 1;
|
|
if ((idx >= IWL_FIRST_HT_RATE) && (idx <= IWL_LAST_HT_RATE))
|
|
return idx;
|
|
- } else if (rate_n_flags & RATE_MCS_VHT_MSK ||
|
|
- rate_n_flags & RATE_MCS_HE_MSK) {
|
|
+ } else if (rate_n_flags & RATE_MCS_VHT_MSK) {
|
|
idx = rate_n_flags & RATE_VHT_MCS_RATE_CODE_MSK;
|
|
idx += IWL_RATE_MCS_0_INDEX;
|
|
|
|
@@ -362,9 +361,6 @@
|
|
idx++;
|
|
if ((idx >= IWL_FIRST_VHT_RATE) && (idx <= IWL_LAST_VHT_RATE))
|
|
return idx;
|
|
- if ((rate_n_flags & RATE_MCS_HE_MSK) &&
|
|
- (idx <= IWL_LAST_HE_RATE))
|
|
- return idx;
|
|
} else {
|
|
/* legacy rate format, search for match in table */
|
|
|
|
@@ -509,8 +505,6 @@
|
|
[LQ_HT_MIMO2] = "HT MIMO",
|
|
[LQ_VHT_SISO] = "VHT SISO",
|
|
[LQ_VHT_MIMO2] = "VHT MIMO",
|
|
- [LQ_HE_SISO] = "HE SISO",
|
|
- [LQ_HE_MIMO2] = "HE MIMO",
|
|
};
|
|
|
|
if (type < LQ_NONE || type >= LQ_MAX)
|
|
@@ -895,8 +889,7 @@
|
|
|
|
/* Legacy */
|
|
if (!(ucode_rate & RATE_MCS_HT_MSK) &&
|
|
- !(ucode_rate & RATE_MCS_VHT_MSK) &&
|
|
- !(ucode_rate & RATE_MCS_HE_MSK)) {
|
|
+ !(ucode_rate & RATE_MCS_VHT_MSK)) {
|
|
if (num_of_ant == 1) {
|
|
if (band == NL80211_BAND_5GHZ)
|
|
rate->type = LQ_LEGACY_A;
|
|
@@ -907,7 +900,7 @@
|
|
return 0;
|
|
}
|
|
|
|
- /* HT, VHT or HE */
|
|
+ /* HT or VHT */
|
|
if (ucode_rate & RATE_MCS_SGI_MSK)
|
|
rate->sgi = true;
|
|
if (ucode_rate & RATE_MCS_LDPC_MSK)
|
|
@@ -949,24 +942,10 @@
|
|
} else {
|
|
WARN_ON_ONCE(1);
|
|
}
|
|
- } else if (ucode_rate & RATE_MCS_HE_MSK) {
|
|
- nss = ((ucode_rate & RATE_VHT_MCS_NSS_MSK) >>
|
|
- RATE_VHT_MCS_NSS_POS) + 1;
|
|
-
|
|
- if (nss == 1) {
|
|
- rate->type = LQ_HE_SISO;
|
|
- WARN_ONCE(!rate->stbc && !rate->bfer && num_of_ant != 1,
|
|
- "stbc %d bfer %d", rate->stbc, rate->bfer);
|
|
- } else if (nss == 2) {
|
|
- rate->type = LQ_HE_MIMO2;
|
|
- WARN_ON_ONCE(num_of_ant != 2);
|
|
- } else {
|
|
- WARN_ON_ONCE(1);
|
|
- }
|
|
}
|
|
|
|
WARN_ON_ONCE(rate->bw == RATE_MCS_CHAN_WIDTH_80 &&
|
|
- !is_he(rate) && !is_vht(rate));
|
|
+ !is_vht(rate));
|
|
|
|
return 0;
|
|
}
|
|
@@ -3647,8 +3626,7 @@
|
|
u8 ant = (rate & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS;
|
|
|
|
if (!(rate & RATE_MCS_HT_MSK) &&
|
|
- !(rate & RATE_MCS_VHT_MSK) &&
|
|
- !(rate & RATE_MCS_HE_MSK)) {
|
|
+ !(rate & RATE_MCS_VHT_MSK)) {
|
|
int index = iwl_hwrate_to_plcp_idx(rate);
|
|
|
|
return scnprintf(buf, bufsz, "Legacy | ANT: %s Rate: %s Mbps\n",
|
|
@@ -3667,11 +3645,6 @@
|
|
mcs = rate & RATE_HT_MCS_INDEX_MSK;
|
|
nss = ((rate & RATE_HT_MCS_NSS_MSK)
|
|
>> RATE_HT_MCS_NSS_POS) + 1;
|
|
- } else if (rate & RATE_MCS_HE_MSK) {
|
|
- type = "HE";
|
|
- mcs = rate & RATE_VHT_MCS_RATE_CODE_MSK;
|
|
- nss = ((rate & RATE_VHT_MCS_NSS_MSK)
|
|
- >> RATE_VHT_MCS_NSS_POS) + 1;
|
|
} else {
|
|
type = "Unknown"; /* shouldn't happen */
|
|
}
|
|
@@ -3933,8 +3906,6 @@
|
|
[IWL_RATE_MCS_7_INDEX] = "MCS7",
|
|
[IWL_RATE_MCS_8_INDEX] = "MCS8",
|
|
[IWL_RATE_MCS_9_INDEX] = "MCS9",
|
|
- [IWL_RATE_MCS_10_INDEX] = "MCS10",
|
|
- [IWL_RATE_MCS_11_INDEX] = "MCS11",
|
|
};
|
|
|
|
char *buff, *pos, *endpos;
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/rs.h
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/rs.h 2019-09-06 01:25:47.819262431 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/rs.h 2019-09-06 01:26:14.208925816 +0200
|
|
@@ -133,13 +133,8 @@
|
|
|
|
#define LINK_QUAL_AGG_FRAME_LIMIT_DEF (63)
|
|
#define LINK_QUAL_AGG_FRAME_LIMIT_MAX (63)
|
|
-/*
|
|
- * FIXME - various places in firmware API still use u8,
|
|
- * e.g. LQ command and SCD config command.
|
|
- * This should be 256 instead.
|
|
- */
|
|
-#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_DEF (255)
|
|
-#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_MAX (255)
|
|
+#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_DEF (64)
|
|
+#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_MAX (64)
|
|
#define LINK_QUAL_AGG_FRAME_LIMIT_MIN (0)
|
|
|
|
#define LQ_SIZE 2 /* 2 mode tables: "Active" and "Search" */
|
|
@@ -156,8 +151,6 @@
|
|
LQ_HT_MIMO2,
|
|
LQ_VHT_SISO, /* VHT types */
|
|
LQ_VHT_MIMO2,
|
|
- LQ_HE_SISO, /* HE types */
|
|
- LQ_HE_MIMO2,
|
|
LQ_MAX,
|
|
};
|
|
|
|
@@ -179,16 +172,11 @@
|
|
#define is_type_ht_mimo2(type) ((type) == LQ_HT_MIMO2)
|
|
#define is_type_vht_siso(type) ((type) == LQ_VHT_SISO)
|
|
#define is_type_vht_mimo2(type) ((type) == LQ_VHT_MIMO2)
|
|
-#define is_type_he_siso(type) ((type) == LQ_HE_SISO)
|
|
-#define is_type_he_mimo2(type) ((type) == LQ_HE_MIMO2)
|
|
-#define is_type_siso(type) (is_type_ht_siso(type) || is_type_vht_siso(type) || \
|
|
- is_type_he_siso(type))
|
|
-#define is_type_mimo2(type) (is_type_ht_mimo2(type) || \
|
|
- is_type_vht_mimo2(type) || is_type_he_mimo2(type))
|
|
+#define is_type_siso(type) (is_type_ht_siso(type) || is_type_vht_siso(type))
|
|
+#define is_type_mimo2(type) (is_type_ht_mimo2(type) || is_type_vht_mimo2(type))
|
|
#define is_type_mimo(type) (is_type_mimo2(type))
|
|
#define is_type_ht(type) (is_type_ht_siso(type) || is_type_ht_mimo2(type))
|
|
#define is_type_vht(type) (is_type_vht_siso(type) || is_type_vht_mimo2(type))
|
|
-#define is_type_he(type) (is_type_he_siso(type) || is_type_he_mimo2(type))
|
|
#define is_type_a_band(type) ((type) == LQ_LEGACY_A)
|
|
#define is_type_g_band(type) ((type) == LQ_LEGACY_G)
|
|
|
|
@@ -202,7 +190,6 @@
|
|
#define is_mimo(rate) is_type_mimo((rate)->type)
|
|
#define is_ht(rate) is_type_ht((rate)->type)
|
|
#define is_vht(rate) is_type_vht((rate)->type)
|
|
-#define is_he(rate) is_type_he((rate)->type)
|
|
#define is_a_band(rate) is_type_a_band((rate)->type)
|
|
#define is_g_band(rate) is_type_g_band((rate)->type)
|
|
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c 2019-09-06 01:25:47.447267176 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c 2019-09-06 01:26:14.209925803 +0200
|
|
@@ -8,7 +8,6 @@
|
|
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
|
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
|
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
|
- * Copyright(c) 2018 Intel Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
@@ -31,7 +30,6 @@
|
|
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
|
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
|
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
|
- * Copyright(c) 2018 Intel Corporation
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
@@ -916,10 +914,6 @@
|
|
struct ieee80211_sta *sta = NULL;
|
|
struct sk_buff *skb;
|
|
u8 crypt_len = 0;
|
|
- u32 he_type = 0xffffffff;
|
|
- /* this is invalid e.g. because puncture type doesn't allow 0b11 */
|
|
-#define HE_PHY_DATA_INVAL ((u64)-1)
|
|
- u64 he_phy_data = HE_PHY_DATA_INVAL;
|
|
bool csi = false;
|
|
|
|
if (unlikely(test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)))
|
|
@@ -946,13 +940,6 @@
|
|
|
|
rx_status = IEEE80211_SKB_RXCB(skb);
|
|
|
|
- if (rate_n_flags & RATE_MCS_HE_MSK) {
|
|
- if (phy_info & IWL_RX_MPDU_PHY_TSF_OVERLOAD)
|
|
- he_phy_data =
|
|
- le64_to_cpu(desc->he_phy_data);
|
|
- he_type = rate_n_flags & RATE_MCS_HE_TYPE_MSK;
|
|
- }
|
|
-
|
|
if (iwl_mvm_rx_crypto(mvm, hdr, rx_status, phy_info, desc,
|
|
le32_to_cpu(pkt->len_n_flags), queue,
|
|
&crypt_len)) {
|
|
@@ -979,19 +966,7 @@
|
|
rx_status->mactime = le64_to_cpu(desc->tsf_on_air_rise);
|
|
/* TSF as indicated by the firmware is at INA time */
|
|
rx_status->flag |= RX_FLAG_MACTIME_PLCP_START;
|
|
- } else if (he_type == RATE_MCS_HE_TYPE_SU) {
|
|
- if (!queue && !(phy_info & IWL_RX_MPDU_PHY_AMPDU)) {
|
|
- rx_status->ampdu_reference = mvm->ampdu_ref;
|
|
- mvm->ampdu_ref++;
|
|
-
|
|
- rx_status->flag |= RX_FLAG_AMPDU_DETAILS;
|
|
- rx_status->flag |= RX_FLAG_AMPDU_EOF_BIT_KNOWN;
|
|
- if (FIELD_GET(IWL_RX_HE_PHY_DELIM_EOF,
|
|
- le64_to_cpu(desc->he_phy_data)))
|
|
- rx_status->flag |= RX_FLAG_AMPDU_EOF_BIT;
|
|
- }
|
|
}
|
|
-
|
|
rx_status->device_timestamp = le32_to_cpu(desc->gp2_on_air_rise);
|
|
rx_status->band = desc->channel > 14 ? NL80211_BAND_5GHZ :
|
|
NL80211_BAND_2GHZ;
|
|
@@ -1014,15 +989,6 @@
|
|
if (mvm->ampdu_ref == 0)
|
|
mvm->ampdu_ref++;
|
|
mvm->ampdu_toggle = toggle_bit;
|
|
-
|
|
- if (he_phy_data != HE_PHY_DATA_INVAL &&
|
|
- he_type == RATE_MCS_HE_TYPE_MU) {
|
|
- rx_status->flag |= RX_FLAG_AMPDU_EOF_BIT_KNOWN;
|
|
- if (FIELD_GET(IWL_RX_HE_PHY_DELIM_EOF,
|
|
- le64_to_cpu(desc->he_phy_data)))
|
|
- rx_status->flag |=
|
|
- RX_FLAG_AMPDU_EOF_BIT;
|
|
- }
|
|
}
|
|
rx_status->ampdu_reference = mvm->ampdu_ref;
|
|
}
|
|
@@ -1131,6 +1097,7 @@
|
|
}
|
|
}
|
|
|
|
+ /* Set up the HT phy flags */
|
|
switch (rate_n_flags & RATE_MCS_CHAN_WIDTH_MSK) {
|
|
case RATE_MCS_CHAN_WIDTH_20:
|
|
break;
|
|
@@ -1145,59 +1112,6 @@
|
|
break;
|
|
}
|
|
|
|
- if (he_type == RATE_MCS_HE_TYPE_EXT_SU &&
|
|
- rate_n_flags & RATE_MCS_HE_106T_MSK) {
|
|
- rx_status->bw = RATE_INFO_BW_HE_RU;
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_106;
|
|
- }
|
|
-
|
|
- if (rate_n_flags & RATE_MCS_HE_MSK &&
|
|
- phy_info & IWL_RX_MPDU_PHY_TSF_OVERLOAD &&
|
|
- he_type == RATE_MCS_HE_TYPE_MU) {
|
|
- /*
|
|
- * Unfortunately, we have to leave the mac80211 data
|
|
- * incorrect for the case that we receive an HE-MU
|
|
- * transmission and *don't* have the he_mu pointer,
|
|
- * i.e. we don't have the phy data (due to the bits
|
|
- * being used for TSF). This shouldn't happen though
|
|
- * as management frames where we need the TSF/timers
|
|
- * are not be transmitted in HE-MU, I think.
|
|
- */
|
|
- u8 ru = FIELD_GET(IWL_RX_HE_PHY_RU_ALLOC_MASK, he_phy_data);
|
|
- u8 offs = 0;
|
|
-
|
|
- rx_status->bw = RATE_INFO_BW_HE_RU;
|
|
-
|
|
- switch (ru) {
|
|
- case 0 ... 36:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_26;
|
|
- offs = ru;
|
|
- break;
|
|
- case 37 ... 52:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_52;
|
|
- offs = ru - 37;
|
|
- break;
|
|
- case 53 ... 60:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_106;
|
|
- offs = ru - 53;
|
|
- break;
|
|
- case 61 ... 64:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_242;
|
|
- offs = ru - 61;
|
|
- break;
|
|
- case 65 ... 66:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_484;
|
|
- offs = ru - 65;
|
|
- break;
|
|
- case 67:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_996;
|
|
- break;
|
|
- case 68:
|
|
- rx_status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_2x996;
|
|
- break;
|
|
- }
|
|
- }
|
|
-
|
|
if (!(rate_n_flags & RATE_MCS_CCK_MSK) &&
|
|
rate_n_flags & RATE_MCS_SGI_MSK)
|
|
rx_status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
|
|
@@ -1222,39 +1136,6 @@
|
|
rx_status->enc_flags |= stbc << RX_ENC_FLAG_STBC_SHIFT;
|
|
if (rate_n_flags & RATE_MCS_BF_MSK)
|
|
rx_status->enc_flags |= RX_ENC_FLAG_BF;
|
|
- } else if (rate_n_flags & RATE_MCS_HE_MSK) {
|
|
- u8 stbc = (rate_n_flags & RATE_MCS_STBC_MSK) >>
|
|
- RATE_MCS_STBC_POS;
|
|
- rx_status->nss =
|
|
- ((rate_n_flags & RATE_VHT_MCS_NSS_MSK) >>
|
|
- RATE_VHT_MCS_NSS_POS) + 1;
|
|
- rx_status->rate_idx = rate_n_flags & RATE_VHT_MCS_RATE_CODE_MSK;
|
|
- rx_status->encoding = RX_ENC_HE;
|
|
- rx_status->enc_flags |= stbc << RX_ENC_FLAG_STBC_SHIFT;
|
|
- if (rate_n_flags & RATE_MCS_BF_MSK)
|
|
- rx_status->enc_flags |= RX_ENC_FLAG_BF;
|
|
-
|
|
- rx_status->he_dcm =
|
|
- !!(rate_n_flags & RATE_HE_DUAL_CARRIER_MODE_MSK);
|
|
-
|
|
- switch ((rate_n_flags & RATE_MCS_HE_GI_LTF_MSK) >>
|
|
- RATE_MCS_HE_GI_LTF_POS) {
|
|
- case 0:
|
|
- rx_status->he_gi = NL80211_RATE_INFO_HE_GI_0_8;
|
|
- break;
|
|
- case 1:
|
|
- rx_status->he_gi = NL80211_RATE_INFO_HE_GI_0_8;
|
|
- break;
|
|
- case 2:
|
|
- rx_status->he_gi = NL80211_RATE_INFO_HE_GI_1_6;
|
|
- break;
|
|
- case 3:
|
|
- if (rate_n_flags & RATE_MCS_SGI_MSK)
|
|
- rx_status->he_gi = NL80211_RATE_INFO_HE_GI_0_8;
|
|
- else
|
|
- rx_status->he_gi = NL80211_RATE_INFO_HE_GI_3_2;
|
|
- break;
|
|
- }
|
|
} else {
|
|
int rate = iwl_mvm_legacy_rate_to_mac80211_idx(rate_n_flags,
|
|
rx_status->band);
|
|
@@ -1266,6 +1147,7 @@
|
|
goto out;
|
|
}
|
|
rx_status->rate_idx = rate;
|
|
+
|
|
}
|
|
|
|
/* management stuff on default queue */
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/sta.c 2019-09-06 01:25:47.820262418 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/sta.c 2019-09-06 01:26:14.209925803 +0200
|
|
@@ -2555,7 +2555,7 @@
|
|
|
|
static void iwl_mvm_init_reorder_buffer(struct iwl_mvm *mvm,
|
|
struct iwl_mvm_baid_data *data,
|
|
- u16 ssn, u16 buf_size)
|
|
+ u16 ssn, u8 buf_size)
|
|
{
|
|
int i;
|
|
|
|
@@ -2582,7 +2582,7 @@
|
|
}
|
|
|
|
int iwl_mvm_sta_rx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
|
|
- int tid, u16 ssn, bool start, u16 buf_size, u16 timeout)
|
|
+ int tid, u16 ssn, bool start, u8 buf_size, u16 timeout)
|
|
{
|
|
struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);
|
|
struct iwl_mvm_add_sta_cmd cmd = {};
|
|
@@ -2644,7 +2644,7 @@
|
|
if (start) {
|
|
cmd.add_immediate_ba_tid = (u8) tid;
|
|
cmd.add_immediate_ba_ssn = cpu_to_le16(ssn);
|
|
- cmd.rx_ba_window = cpu_to_le16(buf_size);
|
|
+ cmd.rx_ba_window = cpu_to_le16((u16)buf_size);
|
|
} else {
|
|
cmd.remove_immediate_ba_tid = (u8) tid;
|
|
}
|
|
@@ -2930,7 +2930,7 @@
|
|
}
|
|
|
|
int iwl_mvm_sta_tx_agg_oper(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
- struct ieee80211_sta *sta, u16 tid, u16 buf_size,
|
|
+ struct ieee80211_sta *sta, u16 tid, u8 buf_size,
|
|
bool amsdu)
|
|
{
|
|
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
|
Index: src/drivers/net/wireless/intel/iwlwifi/mvm/sta.h
|
|
===================================================================
|
|
--- src.orig/drivers/net/wireless/intel/iwlwifi/mvm/sta.h 2019-09-06 01:25:47.821262405 +0200
|
|
+++ src/drivers/net/wireless/intel/iwlwifi/mvm/sta.h 2019-09-06 01:26:14.209925803 +0200
|
|
@@ -411,7 +411,7 @@
|
|
u32 tfd_queue_msk;
|
|
u32 mac_id_n_color;
|
|
u16 tid_disable_agg;
|
|
- u16 max_agg_bufsize;
|
|
+ u8 max_agg_bufsize;
|
|
enum iwl_sta_type sta_type;
|
|
enum ieee80211_sta_state sta_state;
|
|
bool bt_reduced_txpower;
|
|
@@ -518,11 +518,11 @@
|
|
|
|
/* AMPDU */
|
|
int iwl_mvm_sta_rx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
|
|
- int tid, u16 ssn, bool start, u16 buf_size, u16 timeout);
|
|
+ int tid, u16 ssn, bool start, u8 buf_size, u16 timeout);
|
|
int iwl_mvm_sta_tx_agg_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
struct ieee80211_sta *sta, u16 tid, u16 *ssn);
|
|
int iwl_mvm_sta_tx_agg_oper(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
- struct ieee80211_sta *sta, u16 tid, u16 buf_size,
|
|
+ struct ieee80211_sta *sta, u16 tid, u8 buf_size,
|
|
bool amsdu);
|
|
int iwl_mvm_sta_tx_agg_stop(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
struct ieee80211_sta *sta, u16 tid);
|