From patchwork Thu Sep 28 05:50:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kang Yang X-Patchwork-Id: 728353 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBBEBCE7AFD for ; Thu, 28 Sep 2023 05:50:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229539AbjI1Fu4 (ORCPT ); Thu, 28 Sep 2023 01:50:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50456 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229758AbjI1Fuz (ORCPT ); Thu, 28 Sep 2023 01:50:55 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D08CE12A for ; Wed, 27 Sep 2023 22:50:52 -0700 (PDT) Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38S5bJKY024399; Thu, 28 Sep 2023 05:50:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=8NufhEFwfy5Wf8YL0D5qvqvQsli/DzRMizuNzlsv/ik=; b=kBl5v5dh169FwvK5gxuz6l15nt0lAVjbf8bXtKTFLRIrX3zLWzOI02qDQzsfLyCXf9ol DAidetlgkodm8xE57HE89arUFlHaJmMd7Ny1iRI/vL/0zIQfO8nA60QNAs1Ef4Pjwptp Fprb4uLTXJr2mcPZ6C8JVDXzuVShc+5Ku8SpJfzB2CGHE6BcgInStlWrf3IUb58H/o2K wZCMtJo8ObcZs33ZhNy3DGrJ0VJbuzj1DNPBxG8tru7W/GkC2pb+7xCPBZQhWNyA28b8 1eSyaz7s/8AKpMlQMUA3JeS1TIcj6WR9kQmBLrpIpB7+pyEIm5uf0r7yJWpeglRZh6Zo 9A== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3tcfp6jgtx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:46 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38S5oix0005029 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:44 GMT Received: from yk-E5440.qca.qualcomm.com (10.80.80.8) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.36; Wed, 27 Sep 2023 22:50:42 -0700 From: Kang Yang To: CC: , Subject: [PATCH 1/4] wifi: mac80211: mlme: fix verification of puncturing bitmap obtained from AP Date: Thu, 28 Sep 2023 13:50:19 +0800 Message-ID: <20230928055022.9670-2-quic_kangyang@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230928055022.9670-1-quic_kangyang@quicinc.com> References: <20230928055022.9670-1-quic_kangyang@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: fOL117nT5iUiBAdXCtcsv0j2SfH5KlP0 X-Proofpoint-GUID: fOL117nT5iUiBAdXCtcsv0j2SfH5KlP0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-09-28_03,2023-09-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 bulkscore=0 clxscore=1015 adultscore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 phishscore=0 priorityscore=1501 suspectscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2309280048 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Puncturing bitmap and bandwidth is included in beacon's EHT Operation element. After receiving beacon, mac80211 will verify if they are match. But the bandwidth used for verification is incorrect. Because bandwidth in link->conf->chandef is a negotiated bandwidth, it may be downgraded. Should use bandwidth included in beacon. Otherwise when bandwidth downgrade occurs, even if the received values match, an error may be returned. Also, checking if bitmap and bandwidth match should be done before extraction. But here extract first and then check. So fix these two issues. Fixes: aa87cd8b3573 ("wifi: mac80211: mlme: handle EHT channel puncturing") Signed-off-by: Kang Yang --- net/mac80211/mlme.c | 54 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index f93eb38ae0b8..16e15ced28a5 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -5670,11 +5670,33 @@ static bool ieee80211_rx_our_beacon(const u8 *tx_bssid, return ether_addr_equal(tx_bssid, bss->transmitted_bss->bssid); } +static enum nl80211_chan_width +ieee80211_rx_bw_to_nlwidth(enum ieee80211_sta_rx_bandwidth bw) +{ + switch (bw) { + case IEEE80211_STA_RX_BW_20: + return NL80211_CHAN_WIDTH_20; + case IEEE80211_STA_RX_BW_40: + return NL80211_CHAN_WIDTH_40; + case IEEE80211_STA_RX_BW_80: + return NL80211_CHAN_WIDTH_80; + case IEEE80211_STA_RX_BW_160: + return NL80211_CHAN_WIDTH_160; + case IEEE80211_STA_RX_BW_320: + return NL80211_CHAN_WIDTH_320; + default: + WARN_ON(1); + return NL80211_CHAN_WIDTH_20; + } +} + static bool ieee80211_config_puncturing(struct ieee80211_link_data *link, const struct ieee80211_eht_operation *eht_oper, u64 *changed) { + struct cfg80211_chan_def rx_chandef = link->conf->chandef; u16 bitmap = 0, extracted; + u8 bw = 0; if ((eht_oper->params & IEEE80211_EHT_OPER_INFO_PRESENT) && (eht_oper->params & @@ -5684,6 +5706,28 @@ static bool ieee80211_config_puncturing(struct ieee80211_link_data *link, const u8 *disable_subchannel_bitmap = info->optional; bitmap = get_unaligned_le16(disable_subchannel_bitmap); + bw = u8_get_bits(info->control, IEEE80211_EHT_OPER_CHAN_WIDTH); + rx_chandef.width = ieee80211_rx_bw_to_nlwidth(bw); + + if (rx_chandef.width == NL80211_CHAN_WIDTH_80) + rx_chandef.center_freq1 = + ieee80211_channel_to_frequency(info->ccfs0, + rx_chandef.chan->band); + else if (rx_chandef.width == NL80211_CHAN_WIDTH_160 || + rx_chandef.width == NL80211_CHAN_WIDTH_320) + rx_chandef.center_freq1 = + ieee80211_channel_to_frequency(info->ccfs1, + rx_chandef.chan->band); + } + + if (!cfg80211_valid_disable_subchannel_bitmap(&bitmap, + &rx_chandef)) { + link_info(link, + "Got an invalid disable subchannel bitmap from AP %pM: bitmap = 0x%x, bw = 0x%x. disconnect\n", + link->u.mgd.bssid, + bitmap, + rx_chandef.width); + return false; } extracted = ieee80211_extract_dis_subch_bmap(eht_oper, @@ -5695,16 +5739,6 @@ static bool ieee80211_config_puncturing(struct ieee80211_link_data *link, extracted == link->conf->eht_puncturing) return true; - if (!cfg80211_valid_disable_subchannel_bitmap(&bitmap, - &link->conf->chandef)) { - link_info(link, - "Got an invalid disable subchannel bitmap from AP %pM: bitmap = 0x%x, bw = 0x%x. disconnect\n", - link->u.mgd.bssid, - bitmap, - link->conf->chandef.width); - return false; - } - ieee80211_handle_puncturing_bitmap(link, eht_oper, bitmap, changed); return true; } From patchwork Thu Sep 28 05:50:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kang Yang X-Patchwork-Id: 727588 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A10BBCE7AFB for ; Thu, 28 Sep 2023 05:50:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229894AbjI1Fuz (ORCPT ); Thu, 28 Sep 2023 01:50:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50416 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229445AbjI1Fux (ORCPT ); Thu, 28 Sep 2023 01:50:53 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E54DBF for ; Wed, 27 Sep 2023 22:50:51 -0700 (PDT) Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38S5PfA9020430; Thu, 28 Sep 2023 05:50:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=h93u0m4Baq1x/Lrg5OXE2hHmB1BPlotWgBEozBxJ6dA=; b=fIWaJrEuuXepcZXx8bYMnz/RAa7uI8EW7nnsvj91qU5V4o8TLvGb71hEmHOI7XqPO4as ZXJv2dlx2Ru1XdlN8vLfaE2D374gNoZvL9tiTaV4DyMu03iPGs+LglGxizs7ECwQWxKw gjWbwMeDZMVcBNMmqpWAgOPC6QzMQAfubP6KpbKkCqqegp5Uxhk78dR39JmJAoDkETcJ lYOqlzgw9/6dVxVBZGWyLlj+z0xRo86qzGA16Vunebl6te7v/gtSleLoDGX7HZ8YfY9C yDp3YqC+CsJdp+x/biSUqLp5nWlxV35gGzg3JGmXJyq0ZF0RYCJiNUhePa9x6MO4sbIM JA== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3tc8v4b525-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:46 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38S5ojeP005045 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:45 GMT Received: from yk-E5440.qca.qualcomm.com (10.80.80.8) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.36; Wed, 27 Sep 2023 22:50:44 -0700 From: Kang Yang To: CC: , Subject: [PATCH 2/4] wifi: mac80211: mlme: correct the verification of extracted bitmap Date: Thu, 28 Sep 2023 13:50:20 +0800 Message-ID: <20230928055022.9670-3-quic_kangyang@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230928055022.9670-1-quic_kangyang@quicinc.com> References: <20230928055022.9670-1-quic_kangyang@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: wE_R_Wn8rbvglOW510Jpq7-CQCZisleq X-Proofpoint-ORIG-GUID: wE_R_Wn8rbvglOW510Jpq7-CQCZisleq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-09-28_03,2023-09-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 spamscore=0 malwarescore=0 mlxlogscore=732 bulkscore=0 phishscore=0 impostorscore=0 priorityscore=1501 mlxscore=0 adultscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2309280048 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Mac80211 will extract puncturing bitmap according to the negotiated bandwidth. After extraction, should check the new puncturing bitmap according to the negotiated bandwidth, but here input the original bitmap. When bandwidth downgrade occurs, this function may return an error even though negotiated bandwidth and puncturing bitmap match correctly. So correct it. Fixes: aa87cd8b3573 ("wifi: mac80211: mlme: handle EHT channel puncturing") Signed-off-by: Kang Yang --- net/mac80211/mlme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 16e15ced28a5..13fba1f1cd89 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -145,7 +145,7 @@ ieee80211_handle_puncturing_bitmap(struct ieee80211_link_data *link, ieee80211_extract_dis_subch_bmap(eht_oper, chandef, bitmap); - if (cfg80211_valid_disable_subchannel_bitmap(&bitmap, + if (cfg80211_valid_disable_subchannel_bitmap(&extracted, chandef)) break; link->u.mgd.conn_flags |= From patchwork Thu Sep 28 05:50:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kang Yang X-Patchwork-Id: 727587 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1BE90CE7AF8 for ; Thu, 28 Sep 2023 05:51:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230044AbjI1Fu7 (ORCPT ); Thu, 28 Sep 2023 01:50:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229639AbjI1Fuz (ORCPT ); Thu, 28 Sep 2023 01:50:55 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF62D122 for ; Wed, 27 Sep 2023 22:50:52 -0700 (PDT) Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38S5iE5L021954; Thu, 28 Sep 2023 05:50:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=8SKaY3foq4ZnEVvUnm+BG03YTdIles1jbzczQPA5N50=; b=HUSIq+1JMwUoih+l1gqAF+QU2hWt6E5/FxAiI3FuniWuO2ogaLYo0zHQKDakHLjoLvqH jhnQ7Y/ssMRDPWMvkEz8bBSnYReWl+LBZd57rwHD4ARhlehUd3VXu0UT2aueFMP7Q4tv ua/zLf9FtGvpBls4bN5anXN0NYVRMtpRjmuHKaS5+7MI4xNCQfvzTPuAtQQ9lJeRepOz ER3+EfEMAByMOCd88l4mIO9tCCLV+yn6TEv2KtKaQ9n8g/YZZKMw9kXs9qK16nCITmM2 sMLHCmAGcrIvT8C9nHOzJ1qyjuVgJzwQAFgpq0qVRg8e31iVt2y4xeMA9OmaxhhmUgBs ag== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3td3gg80mx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:47 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38S5olmw005063 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:47 GMT Received: from yk-E5440.qca.qualcomm.com (10.80.80.8) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.36; Wed, 27 Sep 2023 22:50:45 -0700 From: Kang Yang To: CC: , Subject: [PATCH 3/4] wifi: mac80211: mlme: enable tracking bandwidth changes for 6 GHz band Date: Thu, 28 Sep 2023 13:50:21 +0800 Message-ID: <20230928055022.9670-4-quic_kangyang@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230928055022.9670-1-quic_kangyang@quicinc.com> References: <20230928055022.9670-1-quic_kangyang@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: _8J9ba7RmGo3JYb3vLtE9G5NKDPtjfrV X-Proofpoint-ORIG-GUID: _8J9ba7RmGo3JYb3vLtE9G5NKDPtjfrV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-09-28_03,2023-09-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 priorityscore=1501 bulkscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 suspectscore=0 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2309280048 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org After connection, mac80211 will track bandwidth changes upon beacon's CRC is changed. But it will stop tracking bandwidth changes when these is no HT Operation element. According to the section 9.4.2.311 in IEEE P802.11be draft 4.0: The operation of EHT STAs in an EHT BSS is controlled by the following: -'The HT Operation element, HE Operation element, and EHT Operation element if operating in the 2.4 GHz band' -'The HT Operation element, VHT Operation element (if present), HE Operation element, and EHT Operation element if operating in the 5 GHz band' -'The HE Operation element and EHT Operation element if operating in the 6 GHz band' For 6 GHz band, beacon doesn't contain HT Operation element. Therefore, current checking code needs to be changed. Signed-off-by: Kang Yang --- net/mac80211/mlme.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 13fba1f1cd89..f55d677f9ace 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -501,9 +501,9 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link, u32 vht_cap_info = 0; int ret; - /* if HT was/is disabled, don't track any bandwidth changes */ - if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HT || !ht_oper) - return 0; + /* don't check HT if we associated as non-HT station */ + if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HT) + ht_oper = NULL; /* don't check VHT if we associated as non-VHT station */ if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_VHT) @@ -525,10 +525,12 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link, * if bss configuration changed store the new one - * this may be applicable even if channel is identical */ - ht_opmode = le16_to_cpu(ht_oper->operation_mode); - if (link->conf->ht_operation_mode != ht_opmode) { - *changed |= BSS_CHANGED_HT; - link->conf->ht_operation_mode = ht_opmode; + if (ht_oper) { + ht_opmode = le16_to_cpu(ht_oper->operation_mode); + if (link->conf->ht_operation_mode != ht_opmode) { + *changed |= BSS_CHANGED_HT; + link->conf->ht_operation_mode = ht_opmode; + } } if (vht_cap) From patchwork Thu Sep 28 05:50:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kang Yang X-Patchwork-Id: 728352 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30BA7CE7AFB for ; Thu, 28 Sep 2023 05:51:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230047AbjI1FvA (ORCPT ); Thu, 28 Sep 2023 01:51:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229691AbjI1Fuz (ORCPT ); Thu, 28 Sep 2023 01:50:55 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFD71126 for ; Wed, 27 Sep 2023 22:50:52 -0700 (PDT) Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38S5onPk003305; Thu, 28 Sep 2023 05:50:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=qcppdkim1; bh=D03hRpRX5IeSBgk0xJmW6yevmR4UCPHbT5CRQlGHwrg=; b=j3zRRSjZnDhLen2ueNBoeWE0WfWD0oG5XpEQcKrdA21IWOeh4GSwILUtUlxI0F5V+4LE Wt9YqIsYwGoefv5jh4jsUA4NuRWX02zLGWaQ3hmncgdL9VboI8MyvFSYVlbJpYh73oXM UtsDZwr2f1xhPxqCorKmyn8L0RZPpS1YLCpqiDOBVY2MEyKwQ+wbDpb/FUH+mGF6wvyn rt6Qxfc6X+Y9gzVHU9r671SPotj0qAskle9Jj7hG2+IlMkztCsL1rxt1BJamFyWUJFDt lnzH4TXeoUublCWYABY/OqER+CX+xqNAVBhYPoUk1Z+9XdlArTBiY6bc7SC55tSo+cUr 5w== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3td3gg80my-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:48 +0000 Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38S5om1e027976 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 28 Sep 2023 05:50:48 GMT Received: from yk-E5440.qca.qualcomm.com (10.80.80.8) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.36; Wed, 27 Sep 2023 22:50:47 -0700 From: Kang Yang To: CC: , Subject: [PATCH 4/4] wifi: ath12k: dynamically update puncturing bitmap Date: Thu, 28 Sep 2023 13:50:22 +0800 Message-ID: <20230928055022.9670-5-quic_kangyang@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230928055022.9670-1-quic_kangyang@quicinc.com> References: <20230928055022.9670-1-quic_kangyang@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: xgnoPzID2c9d9aO9KbTj__9nwCeihVZw X-Proofpoint-ORIG-GUID: xgnoPzID2c9d9aO9KbTj__9nwCeihVZw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-09-28_03,2023-09-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 priorityscore=1501 bulkscore=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 suspectscore=0 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2309280048 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Every time EHT Operation element changed, mac80211 will parse it and extract the valid puncturing bitmap according to the negotiated bandwidth. So add updates of bandwidth and puncturing bitmap in ath12k. Then process and send them to the firmware by WMI event. Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 Signed-off-by: Kang Yang --- drivers/net/wireless/ath/ath12k/mac.c | 50 +++++++++++++++++++++++++++ drivers/net/wireless/ath/ath12k/wmi.h | 17 +++++++++ 2 files changed, 67 insertions(+) diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c index 85602d64b607..24968ef02978 100644 --- a/drivers/net/wireless/ath/ath12k/mac.c +++ b/drivers/net/wireless/ath/ath12k/mac.c @@ -2486,6 +2486,32 @@ static int ath12k_mac_fils_discovery(struct ath12k_vif *arvif, return ret; } +static enum wmi_channel_width +ath12k_mac_nlwidth_to_wmiwidth(enum nl80211_chan_width width) +{ + switch (width) { + case NL80211_CHAN_WIDTH_20: + return WMI_CHAN_WIDTH_20; + case NL80211_CHAN_WIDTH_40: + return WMI_CHAN_WIDTH_40; + case NL80211_CHAN_WIDTH_80: + return WMI_CHAN_WIDTH_80; + case NL80211_CHAN_WIDTH_160: + return WMI_CHAN_WIDTH_160; + case NL80211_CHAN_WIDTH_80P80: + return WMI_CHAN_WIDTH_80P80; + case NL80211_CHAN_WIDTH_5: + return WMI_CHAN_WIDTH_5; + case NL80211_CHAN_WIDTH_10: + return WMI_CHAN_WIDTH_10; + case NL80211_CHAN_WIDTH_320: + return WMI_CHAN_WIDTH_320; + default: + WARN_ON(1); + return WMI_CHAN_WIDTH_20; + } +} + static void ath12k_mac_op_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_bss_conf *info, @@ -2507,6 +2533,27 @@ static void ath12k_mac_op_bss_info_changed(struct ieee80211_hw *hw, mutex_lock(&ar->conf_mutex); + if (changed & BSS_CHANGED_EHT_PUNCTURING) { + param_id = WMI_PEER_CHWIDTH_PUNCTURE_20MHZ_BITMAP; + param_value = ath12k_mac_nlwidth_to_wmiwidth(info->chandef.width) | + u32_encode_bits((~info->eht_puncturing), + WMI_PEER_PUNCTURE_BITMAP); + + ret = ath12k_wmi_set_peer_param(ar, arvif->bssid, + arvif->vdev_id, param_id, + param_value); + if (ret) + ath12k_warn(ar->ab, + "Failed to set puncturing bitmap %04x " + "and bandwidth %d for VDEV: %d\n", + info->eht_puncturing, info->chandef.width, + arvif->vdev_id); + else + ath12k_dbg(ar->ab, ATH12K_DBG_MAC, + "Set puncturing bitmap %04x and and bandwidth %d for VDEV: %d\n", + info->eht_puncturing, info->chandef.width, arvif->vdev_id); + } + if (changed & BSS_CHANGED_BEACON_INT) { arvif->beacon_interval = info->beacon_int; @@ -3725,6 +3772,9 @@ static u32 ath12k_mac_ieee80211_sta_bw_to_wmi(struct ath12k *ar, case IEEE80211_STA_RX_BW_160: bw = WMI_PEER_CHWIDTH_160MHZ; break; + case IEEE80211_STA_RX_BW_320: + bw = WMI_PEER_CHWIDTH_320MHZ; + break; default: ath12k_warn(ar->ab, "Invalid bandwidth %d in rc update for %pM\n", sta->deflink.bandwidth, sta->addr); diff --git a/drivers/net/wireless/ath/ath12k/wmi.h b/drivers/net/wireless/ath/ath12k/wmi.h index c75a6fa1f7e0..55ef3443fcc5 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.h +++ b/drivers/net/wireless/ath/ath12k/wmi.h @@ -2194,8 +2194,11 @@ enum wmi_peer_param { WMI_PEER_SET_MAX_TX_RATE = 17, WMI_PEER_SET_MIN_TX_RATE = 18, WMI_PEER_SET_DEFAULT_ROUTING = 19, + WMI_PEER_CHWIDTH_PUNCTURE_20MHZ_BITMAP = 39, }; +#define WMI_PEER_PUNCTURE_BITMAP GENMASK(23, 8) + enum wmi_slot_time { WMI_VDEV_SLOT_TIME_LONG = 1, WMI_VDEV_SLOT_TIME_SHORT = 2, @@ -2217,6 +2220,7 @@ enum wmi_peer_chwidth { WMI_PEER_CHWIDTH_40MHZ = 1, WMI_PEER_CHWIDTH_80MHZ = 2, WMI_PEER_CHWIDTH_160MHZ = 3, + WMI_PEER_CHWIDTH_320MHZ = 4, }; enum wmi_beacon_gen_mode { @@ -2265,6 +2269,19 @@ struct ath12k_wmi_hal_reg_capabilities_ext_arg { u32 high_5ghz_chan; }; +enum wmi_channel_width { + WMI_CHAN_WIDTH_20 = 0, + WMI_CHAN_WIDTH_40 = 1, + WMI_CHAN_WIDTH_80 = 2, + WMI_CHAN_WIDTH_160 = 3, + WMI_CHAN_WIDTH_80P80 = 4, + WMI_CHAN_WIDTH_5 = 5, + WMI_CHAN_WIDTH_10 = 6, + WMI_CHAN_WIDTH_165 = 7, + WMI_CHAN_WIDTH_160P160 = 8, + WMI_CHAN_WIDTH_320 = 9, +}; + #define WMI_HOST_MAX_PDEV 3 struct ath12k_wmi_host_mem_chunk_params {