Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp976484pxb; Mon, 25 Oct 2021 23:59:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx67XtT99Hpcc/RQn/Ya8XqSi2pOhMsLfSoad3AM/u8s+SpyWWonoHVr988RhaqPp+r6iXS X-Received: by 2002:a50:e141:: with SMTP id i1mr33802881edl.157.1635231559431; Mon, 25 Oct 2021 23:59:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635231559; cv=none; d=google.com; s=arc-20160816; b=MwrCQkf8NZCTbMk3Tu4d7OcQSMzQA3JHI8YpA2SpEyCDxLR6BdiK7TO2kk+Ajw0CQ/ ViFC89tt7Czju+7LZ5XaKCEpQZDkZDrxPJu/8T29DQOPDvvLpEXK+E/MCTPC9vptL9FQ /Sj46xgxXYdNEnDCpV9C0bzf9uVKusyARnUP5wgx+XfaDpBMjtP6JX8M+GeHRxzhk5rL 1XYTXdxeUwecnFCD97Y6cXbmiOCT0bzXQ9pYQeYQjNZSlaUyFasKgEnidf6KrbQrIjpH idrSjOtovznqsfDrcbQGimVv98mYrZvOnwm/gNVCa7FFunvAhB322z0aJD4R+ZrDhSBs ECAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=tgjIXkcJNIgcCKFxZBM8JWNb2fyc5Xq+lQuSFXBsnmA=; b=Hl2AiH2y+dq653Mjeof4UzdCIAxuJ2enLEsXkTKgouZXtPELtMYKW4XhhK0d3kLTq/ 2xQp0fl6lxVRW27lpsgRKro9Ht2+QZzzLnJ83DX7euEDqThBwk1d84HdXI5uLelJgFfi XypM6S+g3aatJ/65jwx6NhvVBObBvTOrntTsb+CFiU+JR99ggWCNkODxH+vyyinuKNHo cYuDGcaCuME1JOIOr5h6F5tbGPoqyeFRhuAPP8PRdhYj1jXB2D/ImObtocw5b/pgvQCC 4QhH/T5ZP/d6Or3dn7ZSsDpJIj9OLmV3c9bePnZ4e2Ts6vbsWMbMOJ1NbHpo0QVfNltN Swpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=tICUEALX; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j1si24715321edf.29.2021.10.25.23.59.03; Mon, 25 Oct 2021 23:59:19 -0700 (PDT) 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; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=tICUEALX; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231233AbhJZDot (ORCPT + 67 others); Mon, 25 Oct 2021 23:44:49 -0400 Received: from alexa-out.qualcomm.com ([129.46.98.28]:1740 "EHLO alexa-out.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232597AbhJZDos (ORCPT ); Mon, 25 Oct 2021 23:44:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1635219746; x=1666755746; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=tgjIXkcJNIgcCKFxZBM8JWNb2fyc5Xq+lQuSFXBsnmA=; b=tICUEALXfhzfcvr/yo3INTTmd6d/BsUly3h0YnejiEs5UenE2aCLVEFP lQ68seugNs0N5kBDf4oQbQ8vQ3mZI5qQJtOpb2QfvwpS+smsxvh2LE8KT WP1WhgzGvdnf/zitFHMQ2xRYCRy2ghkQu/3TWiikeyiyuv1AIiCPUnAzL c=; Received: from ironmsg07-lv.qualcomm.com ([10.47.202.151]) by alexa-out.qualcomm.com with ESMTP; 25 Oct 2021 20:42:26 -0700 X-QCInternal: smtphost Received: from nalasex01a.na.qualcomm.com ([10.47.209.196]) by ironmsg07-lv.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2021 20:42:25 -0700 Received: from wgong-HP3-Z230-SFF-Workstation.qca.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.7; Mon, 25 Oct 2021 20:42:23 -0700 From: Wen Gong To: CC: , Subject: [PATCH] ath11k: calculate the correct NSS of peer for HE capabilities Date: Mon, 25 Oct 2021 23:42:11 -0400 Message-ID: <20211026034211.27650-1-quic_wgong@quicinc.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org When connected to 6G mode AP, it does not have VHT/HT capabilities, so the NSS is not set, then it is 1 by default. This patch is to calculate the NSS with supported HE-MCS and NSS set of HE capabilities. Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01280-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1 Signed-off-by: Wen Gong --- drivers/net/wireless/ath/ath11k/mac.c | 40 +++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index 2fc5a1b29d34..212c73fedec4 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -1458,13 +1458,49 @@ static void ath11k_peer_assoc_h_he(struct ath11k *ar, struct peer_assoc_params *arg) { const struct ieee80211_sta_he_cap *he_cap = &sta->he_cap; - u8 ampdu_factor; - u16 v; + u8 ampdu_factor, max_nss, rx_mcs_80, rx_mcs_160; + u16 v, mcs_160_map, mcs_80_map; + int i; + bool support_160; if (!he_cap->has_he) return; arg->he_flag = true; + support_160 = !!(he_cap->he_cap_elem.phy_cap_info[0] & + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G); + + /* Supported HE-MCS and NSS Set of peer he_cap is intersection with self he_cp */ + mcs_160_map = + le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160); + mcs_80_map = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80); + + if (support_160) { + for (i = 7; i >= 0; i--) { + u8 mcs_160 = (mcs_160_map >> (2 * i)) & 3; + + if (mcs_160 != IEEE80211_VHT_MCS_NOT_SUPPORTED) { + rx_mcs_160 = i + 1; + break; + } + } + } + + for (i = 7; i >= 0; i--) { + u8 mcs_80 = (mcs_80_map >> (2 * i)) & 3; + + if (mcs_80 != IEEE80211_VHT_MCS_NOT_SUPPORTED) { + rx_mcs_80 = i + 1; + break; + } + } + + if (support_160) + max_nss = min(rx_mcs_80, rx_mcs_160); + else + max_nss = rx_mcs_80; + + arg->peer_nss = min(sta->rx_nss, max_nss); memcpy(&arg->peer_he_cap_macinfo, he_cap->he_cap_elem.mac_cap_info, sizeof(arg->peer_he_cap_macinfo)); -- 2.31.1