Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1386556pxb; Wed, 10 Feb 2021 07:18:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJyiy0ing5zexpKCl9zH8AsrhMM9xE1pFp0wx9/LCsFck8wMpH25BMs2Zx90HdCXZKb9zT1Z X-Received: by 2002:a50:c88d:: with SMTP id d13mr3631703edh.206.1612970311246; Wed, 10 Feb 2021 07:18:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612970311; cv=none; d=google.com; s=arc-20160816; b=bja2aj4DZ7Or2sEtA8HOdt/34liBn6u/lwQdRCDPep3QWUDXkeTJMYdQa7HYyPDl/G b6aCUaRwM9ElBzUH6NSb0ayPK3rT+hVigRMqaCeIH2nWi2Dh1U9NPq3HnNjKVZF3ekhO P+UQnCCeh/BkU1x41njGEUlnIJuojZ7oGNKAJhVhydM76teCz1bBFIurfjtfvqwK02b+ HzcMWCJnHFhUhorX5i4jZDykDSygSSuGWNzVcuk6x2QwxzTpsWj3hjfIIpQLEIPXJPCn DwPgAXIvPdIEoJzSFrlDbCUqO6pQvtyw9bzRbly3cqq+5Eqgp+GxREhv+kRVG8v1EBZV HEcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:cc:to:from; bh=KSYewUHg2eDJ5UPa8oGCemNqofOHwXh9wopuvJjJesY=; b=GrfGLHDVx4SiG895J9JLUhb0xH54MPfQ6jXmkwbkkL/DfM4mEcMGRUzl7OfkR2adte M9rfRfRn5K45ixE/nbAbQohYpTD2NGSPS4LVLl440gfIpVAQqTxAdPDp/rskciv0vqfJ m/zdSweWSXg++D4N1UHRs8zXFQzYS58W0nINkjiWmE8iMF38AcL13RvoLfr9bKuAk109 T1AhJl77WnS6SDmTpc/Ff35Ct1weAYJdcYXzZCrO0WaPvPRdvVVKn4yUJT0NJE3Vjcji 0+Gpy1Dfjgx8PvnCjNjx08swvD81YgG19ZAPCMDkXMcpWsGwXmiGlX/WvLvX7kyii/EJ kYgg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b8si1567364ejb.312.2021.02.10.07.18.07; Wed, 10 Feb 2021 07:18:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231876AbhBJPQT (ORCPT + 99 others); Wed, 10 Feb 2021 10:16:19 -0500 Received: from paleale.coelho.fi ([176.9.41.70]:45288 "EHLO farmhouse.coelho.fi" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S231810AbhBJPQL (ORCPT ); Wed, 10 Feb 2021 10:16:11 -0500 Received: from 91-156-6-193.elisa-laajakaista.fi ([91.156.6.193] helo=redipa.ger.corp.intel.com) by farmhouse.coelho.fi with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1l9rD9-0049kS-9b; Wed, 10 Feb 2021 17:15:23 +0200 From: Luca Coelho To: kvalo@codeaurora.org Cc: linux-wireless@vger.kernel.org Date: Wed, 10 Feb 2021 17:15:13 +0200 Message-Id: X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210210151514.416221-1-luca@coelho.fi> References: <20210210151514.416221-1-luca@coelho.fi> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on farmhouse.coelho.fi X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, TVD_RCVD_IP autolearn=ham autolearn_force=no version=3.4.4 Subject: [PATCH 11/12] iwlmvm: set properly NIC_NOT_ACK_ENABLED flag Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Shaul Triebitz The STA_CTXT_HE_NIC_NOT_ACK_ENABLED flag tells the firmware whether *we* support ack-enabled. So what should be checked is our *own* capability and not the *peer's* capability. Signed-off-by: Shaul Triebitz Signed-off-by: Johannes Berg Signed-off-by: Luca Coelho --- drivers/net/wireless/intel/iwlwifi/fw/api/mac.h | 5 +++++ .../net/wireless/intel/iwlwifi/iwl-nvm-parse.h | 1 + .../net/wireless/intel/iwlwifi/mvm/mac80211.c | 16 ++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h b/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h index 2d03d7bb5da5..93084bbad534 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h @@ -452,6 +452,10 @@ struct iwl_he_pkt_ext { * enabled AGG, i.e. both BACK and non-BACK frames in a single AGG * @STA_CTXT_HE_MU_EDCA_CW: indicates that there is an element of MU EDCA * parameter set, i.e. the backoff counters for trig-based ACs + * @STA_CTXT_HE_NIC_NOT_ACK_ENABLED: mark that the NIC doesn't support receiving + * ACK-enabled AGG, (i.e. both BACK and non-BACK frames in single AGG). + * If the NIC is not ACK_ENABLED it may use the EOF-bit in first non-0 + * len delim to determine if AGG or single. * @STA_CTXT_HE_RU_2MHZ_BLOCK: indicates that 26-tone RU OFDMA transmission are * not allowed (as there are OBSS that might classify such transmissions as * radar pulses). @@ -466,6 +470,7 @@ enum iwl_he_sta_ctxt_flags { STA_CTXT_HE_CONST_TRIG_RND_ALLOC = BIT(10), STA_CTXT_HE_ACK_ENABLED = BIT(11), STA_CTXT_HE_MU_EDCA_CW = BIT(12), + STA_CTXT_HE_NIC_NOT_ACK_ENABLED = BIT(13), STA_CTXT_HE_RU_2MHZ_BLOCK = BIT(14), }; diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h index aca1ccdd1aa4..e1f5a9741850 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h @@ -80,4 +80,5 @@ void iwl_nvm_fixups(u32 hw_id, unsigned int section, u8 *data, */ struct iwl_nvm_data *iwl_get_nvm(struct iwl_trans *trans, const struct iwl_fw *fw); + #endif /* __iwl_nvm_parse_h__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index 6704ad0895cb..baf7404c137d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c @@ -2007,9 +2007,21 @@ static void iwl_mvm_cfg_he_sta(struct iwl_mvm *mvm, struct ieee80211_sta *sta; u32 flags; int i; + const struct ieee80211_sta_he_cap *own_he_cap = NULL; + struct ieee80211_chanctx_conf *chanctx_conf; + const struct ieee80211_supported_band *sband; rcu_read_lock(); + chanctx_conf = rcu_dereference(vif->chanctx_conf); + if (WARN_ON(!chanctx_conf)) { + rcu_read_unlock(); + return; + } + + sband = mvm->hw->wiphy->bands[chanctx_conf->def.chan->band]; + own_he_cap = ieee80211_get_he_iftype_cap(sband, vif->type); + sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_ctxt_cmd.sta_id]); if (IS_ERR_OR_NULL(sta)) { rcu_read_unlock(); @@ -2196,6 +2208,10 @@ static void iwl_mvm_cfg_he_sta(struct iwl_mvm *mvm, (vif->bss_conf.uora_ocw_range >> 3) & 0x7; } + if (own_he_cap && !(own_he_cap->he_cap_elem.mac_cap_info[2] & + IEEE80211_HE_MAC_CAP2_ACK_EN)) + flags |= STA_CTXT_HE_NIC_NOT_ACK_ENABLED; + if (vif->bss_conf.nontransmitted) { flags |= STA_CTXT_HE_REF_BSSID_VALID; ether_addr_copy(sta_ctxt_cmd.ref_bssid_addr, -- 2.30.0