Blame SOURCES/0072-Revert-iwlwifi-add-support-for-IEEE802.11ax.patch

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