mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 03:27:30 -04:00
Merge tag 'wireless-next-2026-06-10' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next
Johannes Berg says: ==================== Quite a few last updates, notably: - b43: new support for an 11n device - mt76: - mt792x broken usb transport detection - mt7921 regd improvements - mt7927 support - iwlwifi: - more kunit tests - FW version updates - ath12k: WDS support - rtw89: - RTL8922AU support - USB 3 mode switch for performance - better monitor radiotap support - RTL8922DE preparations - cfg80211/mac80211: - update UHR to D1.4, UHR DBE support - finally remove 5/10 MHz support - S1G rate reporting - multicast encapsulation offload * tag 'wireless-next-2026-06-10' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next: (285 commits) b43: add RF power offset for N-PHY r8 + radio 2057 r8 b43: add channel info table for N-PHY r8 + radio 2057 r8 b43: add IPA TX gain table for N-PHY r8 + radio 2057 r8 b43: support radio 2057 rev 8 b43: route d11 corerev 22 to 24-bit indirect radio access b43: add d11 core revision 0x16 to id table b43: add firmware mappings for rev22 rfkill: Replace strcpy() with memcpy() wifi: brcmfmac: flowring: simplify flow allocation wifi: brcm80211: change current_bss to value wifi: ath12k: enable IEEE80211_VHT_EXT_NSS_BW_CAPABLE when NSS ratio is reported wifi: ath12k: fix EAPOL TX failure caused by stale tcl_metadata bits wifi: ath: Update copyright in testmode_i.h wifi: ath10k: Update Qualcomm copyrights wifi: ath11k: Update Qualcomm copyrights wifi: ath12k: Update Qualcomm copyrights wifi: mt76: Drop unneeded mt76_register_debugfs_fops() return checks wifi: mt76: mt7921: assert sniffer on chanctx change wifi: mt76: mt7996: fix potential tx_retries underflow wifi: mt76: mt7925: fix potential tx_retries underflow ... ==================== Link: https://patch.msgid.link/20260610103637.179340-3-johannes@sipsolutions.net Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
24
Documentation/ABI/testing/sysfs-class-ieee80211-rtw89
Normal file
24
Documentation/ABI/testing/sysfs-class-ieee80211-rtw89
Normal file
@@ -0,0 +1,24 @@
|
||||
What: /sys/class/ieee80211/phyX/rtw89_usb/serial_number
|
||||
Date: May 2026
|
||||
Contact: Johnson Tsai <wenjie.tsai@realtek.com>, linux-wireless@vger.kernel.org
|
||||
Description: (Read) Serial number burned into EFUSE of the RTL8852CU-based
|
||||
USB Wi-Fi adapter. Only present on devices that set the
|
||||
RTW89_QUIRK_HW_INFO_SYSFS quirk (currently VID 0x28de /
|
||||
PID 0x2432).
|
||||
|
||||
Format: %10phN (5 raw bytes printed as 10 lowercase hex
|
||||
digits, no separators).
|
||||
|
||||
Example: 3642000123
|
||||
|
||||
What: /sys/class/ieee80211/phyX/rtw89_usb/uuid
|
||||
Date: May 2026
|
||||
Contact: Johnson Tsai <wenjie.tsai@realtek.com>, linux-wireless@vger.kernel.org
|
||||
Description: (Read) UUID burned into EFUSE of the RTL8852CU-based USB Wi-Fi
|
||||
adapter. Only present on devices that set the
|
||||
RTW89_QUIRK_HW_INFO_SYSFS quirk (currently VID 0x28de /
|
||||
PID 0x2432).
|
||||
|
||||
Format: %pUb (RFC 4122 UUID in lowercase with hyphens).
|
||||
|
||||
Example: aaec2b7c-0a55-4727-8de0-b30febccbbaa
|
||||
@@ -2,7 +2,6 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2014,2016-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: ISC */
|
||||
/*
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _COREDUMP_H_
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021, 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _HTT_H_
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2014-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _HW_H_
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _PCI_H_
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/soc/qcom/qmi.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: ISC */
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef WCN3990_QMI_SVC_V01_H
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _RX_DESC_H_
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2004-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2012,2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2016-2017 Erik Stromdahl <erik.stromdahl@gmail.com>
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2014-2015 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2004-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2012 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2016-2017 Erik Stromdahl <erik.stromdahl@gmail.com>
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _USB_H_
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef _WMI_TLV_H
|
||||
#define _WMI_TLV_H
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "mac.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef ATH11K_AHB_H
|
||||
#define ATH11K_AHB_H
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_CE_H
|
||||
|
||||
@@ -267,7 +267,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||
.coldboot_cal_ftm = false,
|
||||
.cbcal_restart_fw = false,
|
||||
.fw_mem_mode = 0,
|
||||
.num_vdevs = 2 + 1,
|
||||
.num_vdevs = 4,
|
||||
.num_peers = 512,
|
||||
.supports_suspend = true,
|
||||
.hal_desc_sz = sizeof(struct hal_rx_desc_ipq8074),
|
||||
@@ -445,7 +445,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||
.coldboot_cal_ftm = false,
|
||||
.cbcal_restart_fw = false,
|
||||
.fw_mem_mode = 0,
|
||||
.num_vdevs = 2 + 1,
|
||||
.num_vdevs = 4,
|
||||
.num_peers = 512,
|
||||
.supports_suspend = true,
|
||||
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
|
||||
@@ -535,7 +535,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||
.coldboot_cal_ftm = false,
|
||||
.cbcal_restart_fw = false,
|
||||
.fw_mem_mode = 0,
|
||||
.num_vdevs = 2 + 1,
|
||||
.num_vdevs = 4,
|
||||
.num_peers = 512,
|
||||
.supports_suspend = true,
|
||||
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
|
||||
@@ -797,7 +797,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||
.coldboot_cal_ftm = false,
|
||||
.cbcal_restart_fw = false,
|
||||
.fw_mem_mode = 0,
|
||||
.num_vdevs = 2 + 1,
|
||||
.num_vdevs = 4,
|
||||
.num_peers = 512,
|
||||
.supports_suspend = true,
|
||||
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
|
||||
@@ -886,7 +886,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||
.coldboot_cal_ftm = false,
|
||||
.cbcal_restart_fw = false,
|
||||
.fw_mem_mode = 0,
|
||||
.num_vdevs = 2 + 1,
|
||||
.num_vdevs = 4,
|
||||
.num_peers = 512,
|
||||
.supports_suspend = true,
|
||||
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#include <linux/devcoredump.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef _ATH11K_COREDUMP_H_
|
||||
#define _ATH11K_COREDUMP_H_
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022, 2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_DEBUGFS_H_
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef DEBUG_HTT_STATS_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_DEBUGFS_STA_H_
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023, 2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_DP_H
|
||||
|
||||
@@ -2503,6 +2503,29 @@ static void ath11k_dp_rx_deliver_msdu(struct ath11k *ar, struct napi_struct *nap
|
||||
ieee80211_rx_napi(ar->hw, pubsta, msdu, napi);
|
||||
}
|
||||
|
||||
static bool ath11k_dp_rx_check_nwifi_hdr_len_valid(struct ath11k_base *ab,
|
||||
struct hal_rx_desc *rx_desc,
|
||||
struct sk_buff *msdu)
|
||||
{
|
||||
struct ieee80211_hdr *hdr;
|
||||
u8 decap_type;
|
||||
u32 hdr_len;
|
||||
|
||||
decap_type = ath11k_dp_rx_h_msdu_start_decap_type(ab, rx_desc);
|
||||
if (decap_type != DP_RX_DECAP_TYPE_NATIVE_WIFI)
|
||||
return true;
|
||||
|
||||
hdr = (struct ieee80211_hdr *)msdu->data;
|
||||
hdr_len = ieee80211_hdrlen(hdr->frame_control);
|
||||
|
||||
if (likely(hdr_len <= DP_MAX_NWIFI_HDR_LEN))
|
||||
return true;
|
||||
|
||||
ab->soc_stats.invalid_rbm++;
|
||||
WARN_ON_ONCE(1);
|
||||
return false;
|
||||
}
|
||||
|
||||
static int ath11k_dp_rx_process_msdu(struct ath11k *ar,
|
||||
struct sk_buff *msdu,
|
||||
struct sk_buff_head *msdu_list,
|
||||
@@ -2573,6 +2596,11 @@ static int ath11k_dp_rx_process_msdu(struct ath11k *ar,
|
||||
}
|
||||
}
|
||||
|
||||
if (unlikely(!ath11k_dp_rx_check_nwifi_hdr_len_valid(ab, rx_desc, msdu))) {
|
||||
ret = -EINVAL;
|
||||
goto free_out;
|
||||
}
|
||||
|
||||
ath11k_dp_rx_h_ppdu(ar, rx_desc, rx_status);
|
||||
ath11k_dp_rx_h_mpdu(ar, msdu, rx_desc, rx_status);
|
||||
|
||||
@@ -3262,6 +3290,12 @@ static int ath11k_dp_rx_h_verify_tkip_mic(struct ath11k *ar, struct ath11k_peer
|
||||
RX_FLAG_IV_STRIPPED | RX_FLAG_DECRYPTED;
|
||||
skb_pull(msdu, hal_rx_desc_sz);
|
||||
|
||||
if (unlikely(!ath11k_dp_rx_check_nwifi_hdr_len_valid(ar->ab, rx_desc,
|
||||
msdu))) {
|
||||
dev_kfree_skb_any(msdu);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ath11k_dp_rx_h_ppdu(ar, rx_desc, rxs);
|
||||
ath11k_dp_rx_h_undecap(ar, msdu, rx_desc,
|
||||
HAL_ENCRYPT_TYPE_TKIP_MIC, rxs, true);
|
||||
@@ -3954,6 +3988,10 @@ static int ath11k_dp_rx_h_null_q_desc(struct ath11k *ar, struct sk_buff *msdu,
|
||||
skb_put(msdu, hal_rx_desc_sz + l3pad_bytes + msdu_len);
|
||||
skb_pull(msdu, hal_rx_desc_sz + l3pad_bytes);
|
||||
}
|
||||
|
||||
if (unlikely(!ath11k_dp_rx_check_nwifi_hdr_len_valid(ar->ab, desc, msdu)))
|
||||
return -EINVAL;
|
||||
|
||||
ath11k_dp_rx_h_ppdu(ar, desc, status);
|
||||
|
||||
ath11k_dp_rx_h_mpdu(ar, msdu, desc, status);
|
||||
@@ -3998,7 +4036,7 @@ static bool ath11k_dp_rx_h_reo_err(struct ath11k *ar, struct sk_buff *msdu,
|
||||
return drop;
|
||||
}
|
||||
|
||||
static void ath11k_dp_rx_h_tkip_mic_err(struct ath11k *ar, struct sk_buff *msdu,
|
||||
static bool ath11k_dp_rx_h_tkip_mic_err(struct ath11k *ar, struct sk_buff *msdu,
|
||||
struct ieee80211_rx_status *status)
|
||||
{
|
||||
u16 msdu_len;
|
||||
@@ -4006,15 +4044,28 @@ static void ath11k_dp_rx_h_tkip_mic_err(struct ath11k *ar, struct sk_buff *msdu,
|
||||
u8 l3pad_bytes;
|
||||
struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
|
||||
u32 hal_rx_desc_sz = ar->ab->hw_params.hal_desc_sz;
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
|
||||
rxcb->is_first_msdu = ath11k_dp_rx_h_msdu_end_first_msdu(ar->ab, desc);
|
||||
rxcb->is_last_msdu = ath11k_dp_rx_h_msdu_end_last_msdu(ar->ab, desc);
|
||||
|
||||
l3pad_bytes = ath11k_dp_rx_h_msdu_end_l3pad(ar->ab, desc);
|
||||
msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(ar->ab, desc);
|
||||
|
||||
if (unlikely(hal_rx_desc_sz + l3pad_bytes + msdu_len > DP_RX_BUFFER_SIZE)) {
|
||||
ath11k_dbg(ab, ATH11K_DBG_DATA,
|
||||
"invalid msdu len in tkip mic err %u\n", msdu_len);
|
||||
ath11k_dbg_dump(ab, ATH11K_DBG_DATA, NULL, "", desc,
|
||||
sizeof(*desc));
|
||||
return true;
|
||||
}
|
||||
|
||||
skb_put(msdu, hal_rx_desc_sz + l3pad_bytes + msdu_len);
|
||||
skb_pull(msdu, hal_rx_desc_sz + l3pad_bytes);
|
||||
|
||||
if (unlikely(!ath11k_dp_rx_check_nwifi_hdr_len_valid(ab, desc, msdu)))
|
||||
return true;
|
||||
|
||||
ath11k_dp_rx_h_ppdu(ar, desc, status);
|
||||
|
||||
status->flag |= (RX_FLAG_MMIC_STRIPPED | RX_FLAG_MMIC_ERROR |
|
||||
@@ -4022,19 +4073,21 @@ static void ath11k_dp_rx_h_tkip_mic_err(struct ath11k *ar, struct sk_buff *msdu,
|
||||
|
||||
ath11k_dp_rx_h_undecap(ar, msdu, desc,
|
||||
HAL_ENCRYPT_TYPE_TKIP_MIC, status, false);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool ath11k_dp_rx_h_rxdma_err(struct ath11k *ar, struct sk_buff *msdu,
|
||||
struct ieee80211_rx_status *status)
|
||||
{
|
||||
struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu);
|
||||
bool drop = false;
|
||||
bool drop;
|
||||
|
||||
ar->ab->soc_stats.rxdma_error[rxcb->err_code]++;
|
||||
|
||||
switch (rxcb->err_code) {
|
||||
case HAL_REO_ENTR_RING_RXDMA_ECODE_TKIP_MIC_ERR:
|
||||
ath11k_dp_rx_h_tkip_mic_err(ar, msdu, status);
|
||||
drop = ath11k_dp_rx_h_tkip_mic_err(ar, msdu, status);
|
||||
break;
|
||||
default:
|
||||
/* TODO: Review other rxdma error code to check if anything is
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef ATH11K_DP_RX_H
|
||||
#define ATH11K_DP_RX_H
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021, 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_DP_TX_H
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_FW_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#include "core.h"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HAL_RX_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "hal_desc.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HAL_TX_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _HIF_H_
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HTC_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -4227,13 +4227,14 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
arg = kzalloc_obj(*arg);
|
||||
arg = kzalloc_flex(*arg, chan_list, req->n_channels);
|
||||
|
||||
if (!arg) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
arg->num_chan = req->n_channels;
|
||||
ath11k_wmi_start_scan_init(ar, arg);
|
||||
arg->vdev_id = arvif->vdev_id;
|
||||
arg->scan_id = ATH11K_SCAN_ID;
|
||||
@@ -4261,38 +4262,27 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
|
||||
arg->scan_f_passive = 1;
|
||||
}
|
||||
|
||||
if (req->n_channels) {
|
||||
arg->num_chan = req->n_channels;
|
||||
arg->chan_list = kcalloc(arg->num_chan, sizeof(*arg->chan_list),
|
||||
GFP_KERNEL);
|
||||
for (i = 0; i < arg->num_chan; i++) {
|
||||
if (test_bit(WMI_TLV_SERVICE_SCAN_CONFIG_PER_CHANNEL,
|
||||
ar->ab->wmi_ab.svc_map)) {
|
||||
arg->chan_list[i] =
|
||||
u32_encode_bits(req->channels[i]->center_freq,
|
||||
WMI_SCAN_CONFIG_PER_CHANNEL_MASK);
|
||||
|
||||
if (!arg->chan_list) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
for (i = 0; i < arg->num_chan; i++) {
|
||||
if (test_bit(WMI_TLV_SERVICE_SCAN_CONFIG_PER_CHANNEL,
|
||||
ar->ab->wmi_ab.svc_map)) {
|
||||
arg->chan_list[i] =
|
||||
u32_encode_bits(req->channels[i]->center_freq,
|
||||
WMI_SCAN_CONFIG_PER_CHANNEL_MASK);
|
||||
|
||||
/* If NL80211_SCAN_FLAG_COLOCATED_6GHZ is set in scan
|
||||
* flags, then scan all PSC channels in 6 GHz band and
|
||||
* those non-PSC channels where RNR IE is found during
|
||||
* the legacy 2.4/5 GHz scan.
|
||||
* If NL80211_SCAN_FLAG_COLOCATED_6GHZ is not set,
|
||||
* then all channels in 6 GHz will be scanned.
|
||||
*/
|
||||
if (req->channels[i]->band == NL80211_BAND_6GHZ &&
|
||||
req->flags & NL80211_SCAN_FLAG_COLOCATED_6GHZ &&
|
||||
!cfg80211_channel_is_psc(req->channels[i]))
|
||||
arg->chan_list[i] |=
|
||||
WMI_SCAN_CH_FLAG_SCAN_ONLY_IF_RNR_FOUND;
|
||||
} else {
|
||||
arg->chan_list[i] = req->channels[i]->center_freq;
|
||||
}
|
||||
/* If NL80211_SCAN_FLAG_COLOCATED_6GHZ is set in scan
|
||||
* flags, then scan all PSC channels in 6 GHz band and
|
||||
* those non-PSC channels where RNR IE is found during
|
||||
* the legacy 2.4/5 GHz scan.
|
||||
* If NL80211_SCAN_FLAG_COLOCATED_6GHZ is not set,
|
||||
* then all channels in 6 GHz will be scanned.
|
||||
*/
|
||||
if (req->channels[i]->band == NL80211_BAND_6GHZ &&
|
||||
req->flags & NL80211_SCAN_FLAG_COLOCATED_6GHZ &&
|
||||
!cfg80211_channel_is_psc(req->channels[i]))
|
||||
arg->chan_list[i] |=
|
||||
WMI_SCAN_CH_FLAG_SCAN_ONLY_IF_RNR_FOUND;
|
||||
} else {
|
||||
arg->chan_list[i] = req->channels[i]->center_freq;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4335,7 +4325,6 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
|
||||
|
||||
exit:
|
||||
if (arg) {
|
||||
kfree(arg->chan_list);
|
||||
kfree(arg->extraie.ptr);
|
||||
kfree(arg);
|
||||
}
|
||||
@@ -9735,19 +9724,14 @@ static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
|
||||
|
||||
scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
|
||||
|
||||
arg = kzalloc_obj(*arg);
|
||||
arg = kzalloc_flex(*arg, chan_list, 1);
|
||||
if (!arg) {
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
ath11k_wmi_start_scan_init(ar, arg);
|
||||
|
||||
arg->num_chan = 1;
|
||||
arg->chan_list = kcalloc(arg->num_chan, sizeof(*arg->chan_list),
|
||||
GFP_KERNEL);
|
||||
if (!arg->chan_list) {
|
||||
ret = -ENOMEM;
|
||||
goto free_arg;
|
||||
}
|
||||
ath11k_wmi_start_scan_init(ar, arg);
|
||||
|
||||
arg->vdev_id = arvif->vdev_id;
|
||||
arg->scan_id = ATH11K_SCAN_ID;
|
||||
@@ -9768,7 +9752,7 @@ static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
ar->scan.state = ATH11K_SCAN_IDLE;
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
goto free_chan_list;
|
||||
goto free_arg;
|
||||
}
|
||||
|
||||
ret = wait_for_completion_timeout(&ar->scan.on_channel, 3 * HZ);
|
||||
@@ -9778,7 +9762,7 @@ static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
|
||||
if (ret)
|
||||
ath11k_warn(ar->ab, "failed to stop scan: %d\n", ret);
|
||||
ret = -ETIMEDOUT;
|
||||
goto free_chan_list;
|
||||
goto free_arg;
|
||||
}
|
||||
|
||||
ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
|
||||
@@ -9786,8 +9770,6 @@ static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
|
||||
|
||||
ret = 0;
|
||||
|
||||
free_chan_list:
|
||||
kfree(arg->chan_list);
|
||||
free_arg:
|
||||
kfree(arg);
|
||||
exit:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023, 2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_MAC_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef _ATH11K_MHI_H
|
||||
#define _ATH11K_MHI_H
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_P2P_H
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_PCI_CMN_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_PEER_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_QMI_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_REG_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef ATH11K_RX_DESC_H
|
||||
#define ATH11K_RX_DESC_H
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_SPECTRAL_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "testmode.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_THERMAL_
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
|
||||
|
||||
@@ -3423,7 +3423,6 @@ struct scan_req_params {
|
||||
u32 num_bssid;
|
||||
u32 num_ssids;
|
||||
u32 n_probes;
|
||||
u32 *chan_list;
|
||||
u32 notify_scan_events;
|
||||
struct wlan_ssid ssid[WLAN_SCAN_PARAMS_MAX_SSID];
|
||||
struct wmi_mac_addr bssid_list[WLAN_SCAN_PARAMS_MAX_BSSID];
|
||||
@@ -3436,6 +3435,7 @@ struct scan_req_params {
|
||||
struct hint_bssid hint_bssid[WLAN_SCAN_MAX_HINT_BSSID];
|
||||
struct wmi_mac_addr mac_addr;
|
||||
struct wmi_mac_addr mac_mask;
|
||||
u32 chan_list[] __counted_by(num_chan);
|
||||
};
|
||||
|
||||
struct wmi_ssid_arg {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _WOW_H_
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef ATH12K_ACPI_H
|
||||
#define ATH12K_ACPI_H
|
||||
|
||||
@@ -353,6 +353,9 @@ struct ath12k_link_vif {
|
||||
u16 num_stations;
|
||||
bool is_csa_in_progress;
|
||||
struct wiphy_work bcn_tx_work;
|
||||
|
||||
bool set_wds_vdev_param;
|
||||
bool nawds_enabled;
|
||||
};
|
||||
|
||||
struct ath12k_vif {
|
||||
@@ -492,6 +495,10 @@ struct ath12k_link_sta {
|
||||
/* link address similar to ieee80211_link_sta */
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
u16 tcl_metadata;
|
||||
u16 ast_hash;
|
||||
u16 ast_idx;
|
||||
|
||||
/* the following are protected by ar->data_lock */
|
||||
u32 changed; /* IEEE80211_RC_* */
|
||||
u32 bw;
|
||||
@@ -527,6 +534,8 @@ struct ath12k_sta {
|
||||
u16 free_logical_link_idx_map;
|
||||
|
||||
enum ieee80211_sta_state state;
|
||||
|
||||
bool enable_4addr;
|
||||
};
|
||||
|
||||
#define ATH12K_HALF_20MHZ_BW 10
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#include <linux/devcoredump.h>
|
||||
#include "hif.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#ifndef _ATH12K_COREDUMP_H_
|
||||
#define _ATH12K_COREDUMP_H_
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_DBRING_H
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH12K_DEBUG_H_
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH12K_DEBUGFS_H_
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef _ATH12K_DEBUGFS_STA_H_
|
||||
|
||||
@@ -943,11 +943,11 @@ void ath12k_dp_vdev_tx_attach(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
|
||||
dp_link_vif = ath12k_dp_vif_to_dp_link_vif(&ahvif->dp_vif, link_id);
|
||||
|
||||
dp_link_vif->tcl_metadata |= u32_encode_bits(1, HTT_TCL_META_DATA_TYPE) |
|
||||
u32_encode_bits(arvif->vdev_id,
|
||||
HTT_TCL_META_DATA_VDEV_ID) |
|
||||
u32_encode_bits(ar->pdev->pdev_id,
|
||||
HTT_TCL_META_DATA_PDEV_ID);
|
||||
dp_link_vif->tcl_metadata = u32_encode_bits(1, HTT_TCL_META_DATA_TYPE) |
|
||||
u32_encode_bits(arvif->vdev_id,
|
||||
HTT_TCL_META_DATA_VDEV_ID) |
|
||||
u32_encode_bits(ar->pdev->pdev_id,
|
||||
HTT_TCL_META_DATA_PDEV_ID);
|
||||
|
||||
/* set HTT extension valid bit to 0 by default */
|
||||
dp_link_vif->tcl_metadata &= ~HTT_TCL_META_DATA_VALID_HTT;
|
||||
|
||||
@@ -115,13 +115,14 @@ ath12k_dp_mon_fill_rx_rate(struct ath12k_pdev_dp *dp_pdev,
|
||||
bool is_cck;
|
||||
|
||||
pkt_type = ppdu_info->preamble_type;
|
||||
rate_mcs = ppdu_info->rate;
|
||||
rate_mcs = ppdu_info->mcs;
|
||||
nss = ppdu_info->nss;
|
||||
sgi = ppdu_info->gi;
|
||||
|
||||
switch (pkt_type) {
|
||||
case RX_MSDU_START_PKT_TYPE_11A:
|
||||
case RX_MSDU_START_PKT_TYPE_11B:
|
||||
rate_mcs = ppdu_info->rate;
|
||||
is_cck = (pkt_type == RX_MSDU_START_PKT_TYPE_11B);
|
||||
if (rx_status->band < NUM_NL80211_BANDS) {
|
||||
struct ath12k *ar = ath12k_pdev_dp_to_ar(dp_pdev);
|
||||
@@ -471,13 +472,10 @@ void ath12k_dp_mon_update_radiotap(struct ath12k_pdev_dp *dp_pdev,
|
||||
rxs->encoding = RX_ENC_HE;
|
||||
ptr = skb_push(mon_skb, sizeof(struct ieee80211_radiotap_he));
|
||||
ath12k_dp_mon_rx_update_radiotap_he(ppduinfo, ptr);
|
||||
rxs->rate_idx = ppduinfo->rate;
|
||||
} else if (ppduinfo->vht_flags) {
|
||||
rxs->encoding = RX_ENC_VHT;
|
||||
rxs->rate_idx = ppduinfo->rate;
|
||||
} else if (ppduinfo->ht_flags) {
|
||||
rxs->encoding = RX_ENC_HT;
|
||||
rxs->rate_idx = ppduinfo->rate;
|
||||
} else {
|
||||
struct ath12k *ar;
|
||||
|
||||
|
||||
@@ -419,7 +419,7 @@ struct ath12k_dp_peer *ath12k_dp_peer_find_by_peerid(struct ath12k_pdev_dp *dp_p
|
||||
RCU_LOCKDEP_WARN(!rcu_read_lock_held(),
|
||||
"ath12k dp peer find by peerid index called without rcu lock");
|
||||
|
||||
if (!peer_id || peer_id >= ATH12K_DP_PEER_ID_INVALID)
|
||||
if (peer_id >= ATH12K_DP_PEER_ID_INVALID)
|
||||
return NULL;
|
||||
|
||||
index = ath12k_dp_peer_get_peerid_index(dp, peer_id);
|
||||
|
||||
@@ -143,6 +143,8 @@ struct ath12k_dp_peer {
|
||||
struct ath12k_dp_link_peer __rcu *link_peers[ATH12K_NUM_MAX_LINKS];
|
||||
struct ath12k_reoq_buf reoq_bufs[IEEE80211_NUM_TIDS + 1];
|
||||
struct ath12k_dp_rx_tid rx_tid[IEEE80211_NUM_TIDS + 1];
|
||||
|
||||
bool use_4addr;
|
||||
};
|
||||
|
||||
struct ath12k_dp_link_peer *
|
||||
|
||||
@@ -1142,7 +1142,8 @@ static void ath12k_dp_rx_h_undecap_eth(struct ath12k_pdev_dp *dp_pdev,
|
||||
void ath12k_dp_rx_h_undecap(struct ath12k_pdev_dp *dp_pdev, struct sk_buff *msdu,
|
||||
enum hal_encrypt_type enctype,
|
||||
bool decrypted,
|
||||
struct hal_rx_desc_data *rx_info)
|
||||
struct hal_rx_desc_data *rx_info,
|
||||
struct ath12k_dp_peer *peer)
|
||||
{
|
||||
enum ath12k_dp_rx_decap_type decap_type = rx_info->decap_type;
|
||||
struct ethhdr *ehdr;
|
||||
@@ -1166,6 +1167,13 @@ void ath12k_dp_rx_h_undecap(struct ath12k_pdev_dp *dp_pdev, struct sk_buff *msdu
|
||||
break;
|
||||
}
|
||||
|
||||
if (peer && !peer->use_4addr &&
|
||||
rx_info->is_from_ds && rx_info->is_to_ds) {
|
||||
ath12k_dp_rx_h_undecap_eth(dp_pdev, msdu, enctype, rx_info,
|
||||
decap_type);
|
||||
break;
|
||||
}
|
||||
|
||||
/* PN for mcast packets will be validated in mac80211;
|
||||
* remove eth header and add 802.11 header.
|
||||
*/
|
||||
@@ -1202,8 +1210,7 @@ ath12k_dp_rx_h_find_link_peer(struct ath12k_pdev_dp *dp_pdev, struct sk_buff *ms
|
||||
|
||||
lockdep_assert_held(&dp->dp_lock);
|
||||
|
||||
if (rxcb->peer_id)
|
||||
peer = ath12k_dp_link_peer_find_by_peerid(dp_pdev, rxcb->peer_id);
|
||||
peer = ath12k_dp_link_peer_find_by_peerid(dp_pdev, rxcb->peer_id);
|
||||
|
||||
if (peer)
|
||||
return peer;
|
||||
|
||||
@@ -190,7 +190,8 @@ void ath12k_dp_extract_rx_desc_data(struct ath12k_hal *hal,
|
||||
void ath12k_dp_rx_h_undecap(struct ath12k_pdev_dp *dp_pdev, struct sk_buff *msdu,
|
||||
enum hal_encrypt_type enctype,
|
||||
bool decrypted,
|
||||
struct hal_rx_desc_data *rx_info);
|
||||
struct hal_rx_desc_data *rx_info,
|
||||
struct ath12k_dp_peer *peer);
|
||||
void ath12k_dp_rx_deliver_msdu(struct ath12k_pdev_dp *dp_pdev, struct napi_struct *napi,
|
||||
struct sk_buff *msdu,
|
||||
struct hal_rx_desc_data *rx_info);
|
||||
|
||||
@@ -738,7 +738,9 @@ struct hal_rx_desc_data {
|
||||
addr2_present:1,
|
||||
is_mcbc:1,
|
||||
seq_ctl_valid:1,
|
||||
fc_valid:1;
|
||||
fc_valid:1,
|
||||
is_to_ds:1,
|
||||
is_from_ds:1;
|
||||
u16 msdu_len;
|
||||
u16 peer_id;
|
||||
u16 seq_no;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_HIF_H
|
||||
|
||||
@@ -19,14 +19,28 @@
|
||||
#define TARGET_NUM_VDEVS(ab) ((ab)->profile_param->num_vdevs)
|
||||
|
||||
/* Max num of stations for Single Radio mode */
|
||||
#define TARGET_NUM_STATIONS_SINGLE(ab) ((ab)->profile_param->max_client_single)
|
||||
#define TARGET_NUM_STATIONS_SINGLE(ab) \
|
||||
({ \
|
||||
typeof(ab) _ab = (ab); \
|
||||
min_not_zero(_ab->hw_params->client.max_client_single, \
|
||||
_ab->profile_param->max_client_single); \
|
||||
})
|
||||
|
||||
/* Max num of stations for DBS */
|
||||
#define TARGET_NUM_STATIONS_DBS(ab) ((ab)->profile_param->max_client_dbs)
|
||||
#define TARGET_NUM_STATIONS_DBS(ab) \
|
||||
({ \
|
||||
typeof(ab) _ab = (ab); \
|
||||
min_not_zero(_ab->hw_params->client.max_client_dbs, \
|
||||
_ab->profile_param->max_client_dbs); \
|
||||
})
|
||||
|
||||
/* Max num of stations for DBS_SBS */
|
||||
#define TARGET_NUM_STATIONS_DBS_SBS(ab) \
|
||||
((ab)->profile_param->max_client_dbs_sbs)
|
||||
({ \
|
||||
typeof(ab) _ab = (ab); \
|
||||
min_not_zero(_ab->hw_params->client.max_client_dbs_sbs, \
|
||||
_ab->profile_param->max_client_dbs_sbs); \
|
||||
})
|
||||
|
||||
#define TARGET_NUM_STATIONS(ab, x) TARGET_NUM_STATIONS_##x(ab)
|
||||
|
||||
@@ -213,6 +227,11 @@ struct ath12k_hw_params {
|
||||
|
||||
/* setup REO queue, frag etc only for primary link peer */
|
||||
bool dp_primary_link_only:1;
|
||||
struct {
|
||||
u32 max_client_single;
|
||||
u32 max_client_dbs;
|
||||
u32 max_client_dbs_sbs;
|
||||
} client;
|
||||
};
|
||||
|
||||
struct ath12k_hw_ops {
|
||||
|
||||
@@ -6571,6 +6571,79 @@ static int ath12k_mac_station_disassoc(struct ath12k *ar,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath12k_mac_sta_set_4addr(struct wiphy *wiphy, struct ath12k_sta *ahsta)
|
||||
{
|
||||
struct ath12k_dp_link_peer *peer;
|
||||
struct ath12k_link_vif *arvif;
|
||||
struct ath12k_link_sta *arsta;
|
||||
struct ath12k_vif *ahvif;
|
||||
struct ath12k_dp *dp;
|
||||
unsigned long links;
|
||||
struct ath12k *ar;
|
||||
u8 link_id;
|
||||
int ret;
|
||||
|
||||
links = ahsta->links_map;
|
||||
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
|
||||
arsta = wiphy_dereference(wiphy, ahsta->link[link_id]);
|
||||
if (!arsta)
|
||||
continue;
|
||||
|
||||
arvif = arsta->arvif;
|
||||
ahvif = arvif->ahvif;
|
||||
ar = arvif->ar;
|
||||
|
||||
if (arvif->set_wds_vdev_param)
|
||||
goto skip_nawds;
|
||||
|
||||
ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
|
||||
"setting USE_4ADDR for peer %pM\n", arsta->addr);
|
||||
|
||||
ret = ath12k_wmi_set_peer_param(ar, arsta->addr,
|
||||
arvif->vdev_id,
|
||||
WMI_PEER_USE_4ADDR,
|
||||
WMI_PEER_4ADDR_ALLOW_EAPOL_DATA_FRAME);
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to set peer %pM 4addr capability: %d\n",
|
||||
arsta->addr, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (ahvif->dp_vif.tx_encap_type != ATH12K_HW_TXRX_ETHERNET)
|
||||
goto skip_nawds;
|
||||
|
||||
ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
WMI_VDEV_PARAM_AP_ENABLE_NAWDS,
|
||||
WDS_EXT_ENABLE);
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to set vdev %d nawds parameter: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
arvif->nawds_enabled = true;
|
||||
|
||||
skip_nawds:
|
||||
dp = ath12k_ab_to_dp(ar->ab);
|
||||
spin_lock_bh(&dp->dp_lock);
|
||||
peer = ath12k_dp_link_peer_find_by_vdev_and_addr(dp, arvif->vdev_id,
|
||||
arsta->addr);
|
||||
if (peer && peer->dp_peer) {
|
||||
peer->dp_peer->ucast_ra_only = true;
|
||||
peer->dp_peer->use_4addr = true;
|
||||
} else {
|
||||
spin_unlock_bh(&dp->dp_lock);
|
||||
ath12k_warn(ar->ab, "failed to find DP peer for %pM\n",
|
||||
arsta->addr);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
spin_unlock_bh(&dp->dp_lock);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *wk)
|
||||
{
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
@@ -7865,6 +7938,28 @@ int ath12k_mac_op_sta_set_txpwr(struct ieee80211_hw *hw,
|
||||
}
|
||||
EXPORT_SYMBOL(ath12k_mac_op_sta_set_txpwr);
|
||||
|
||||
void ath12k_mac_op_sta_set_4addr(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, bool enabled)
|
||||
{
|
||||
struct ath12k_sta *ahsta = ath12k_sta_to_ahsta(sta);
|
||||
|
||||
lockdep_assert_wiphy(hw->wiphy);
|
||||
|
||||
/*
|
||||
* 4-address mode disabled option is available only for station
|
||||
* interface from mac80211, and we have wds_vdev_param for station
|
||||
* interface and target will not allow to disable the wds_vdev_param
|
||||
* during run time. So, add support only for enable case, for
|
||||
* disable case station interface needs to be reconnect.
|
||||
*/
|
||||
if (enabled && !ahsta->enable_4addr) {
|
||||
if (!ath12k_mac_sta_set_4addr(hw->wiphy, ahsta))
|
||||
ahsta->enable_4addr = true;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ath12k_mac_op_sta_set_4addr);
|
||||
|
||||
void ath12k_mac_op_link_sta_rc_update(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_link_sta *link_sta,
|
||||
@@ -8049,16 +8144,16 @@ int ath12k_mac_op_change_sta_links(struct ieee80211_hw *hw,
|
||||
continue;
|
||||
|
||||
arvif = wiphy_dereference(hw->wiphy, ahvif->link[link_id]);
|
||||
arsta = ath12k_mac_alloc_assign_link_sta(ah, ahsta, ahvif, link_id);
|
||||
if (!arvif || !arvif->is_created)
|
||||
continue;
|
||||
|
||||
if (!arvif || !arsta) {
|
||||
arsta = ath12k_mac_alloc_assign_link_sta(ah, ahsta, ahvif, link_id);
|
||||
if (!arsta) {
|
||||
ath12k_hw_warn(ah, "Failed to alloc/assign link sta");
|
||||
continue;
|
||||
}
|
||||
|
||||
ar = arvif->ar;
|
||||
if (!ar)
|
||||
continue;
|
||||
|
||||
ret = ath12k_mac_station_add(ar, arvif, arsta);
|
||||
if (ret) {
|
||||
@@ -8394,6 +8489,10 @@ ath12k_create_vht_cap(struct ath12k *ar, u32 rate_cap_tx_chainmask,
|
||||
vht_cap.vht_supported = 1;
|
||||
vht_cap.cap = ar->pdev->cap.vht_cap;
|
||||
|
||||
if (ar->pdev->cap.nss_ratio_enabled)
|
||||
vht_cap.vht_mcs.tx_highest |=
|
||||
cpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE);
|
||||
|
||||
ath12k_set_vht_txbf_cap(ar, &vht_cap.cap);
|
||||
|
||||
/* 80P80 is not supported */
|
||||
@@ -10020,12 +10119,14 @@ static void ath12k_mac_update_vif_offload(struct ath12k_link_vif *arvif)
|
||||
vif->offload_flags &= ~(IEEE80211_OFFLOAD_ENCAP_ENABLED |
|
||||
IEEE80211_OFFLOAD_DECAP_ENABLED);
|
||||
|
||||
if (vif->offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED)
|
||||
if (vif->offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED) {
|
||||
ahvif->dp_vif.tx_encap_type = ATH12K_HW_TXRX_ETHERNET;
|
||||
else if (test_bit(ATH12K_FLAG_RAW_MODE, &ab->dev_flags))
|
||||
vif->offload_flags |= IEEE80211_OFFLOAD_ENCAP_4ADDR;
|
||||
} else if (test_bit(ATH12K_FLAG_RAW_MODE, &ab->dev_flags)) {
|
||||
ahvif->dp_vif.tx_encap_type = ATH12K_HW_TXRX_RAW;
|
||||
else
|
||||
} else {
|
||||
ahvif->dp_vif.tx_encap_type = ATH12K_HW_TXRX_NATIVE_WIFI;
|
||||
}
|
||||
|
||||
ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
param_id, ahvif->dp_vif.tx_encap_type);
|
||||
@@ -10235,6 +10336,7 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
struct ieee80211_hw *hw = ah->hw;
|
||||
struct ath12k_vif *ahvif = arvif->ahvif;
|
||||
struct ieee80211_vif *vif = ath12k_ahvif_to_vif(ahvif);
|
||||
struct wireless_dev *wdev = ieee80211_vif_to_wdev(vif);
|
||||
struct ath12k_wmi_vdev_create_arg vdev_arg = {};
|
||||
struct ath12k_wmi_peer_create_arg peer_param = {};
|
||||
struct ieee80211_bss_conf *link_conf = NULL;
|
||||
@@ -10302,7 +10404,7 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
if (ret) {
|
||||
ath12k_warn(ab, "failed to create WMI vdev %d: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
return ret;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ar->num_created_vdevs++;
|
||||
@@ -10403,6 +10505,26 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
goto err_peer_del;
|
||||
}
|
||||
|
||||
/*
|
||||
* There could be race condition in firmware for the station
|
||||
* interface between enabling 4-address peer WMI param and
|
||||
* sending 4-address frame (NULL or EAPOL via TCL).
|
||||
* Make the station as WDS while bringup itself
|
||||
* to avoid the race condition
|
||||
*/
|
||||
if (vif->type == NL80211_IFTYPE_STATION &&
|
||||
(wdev && wdev->use_4addr)) {
|
||||
ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
WMI_VDEV_PARAM_WDS,
|
||||
1);
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to set WDS vdev param: %d\n",
|
||||
ret);
|
||||
goto err_peer_del;
|
||||
}
|
||||
arvif->set_wds_vdev_param = true;
|
||||
}
|
||||
|
||||
if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ab->wmi_ab.svc_map) &&
|
||||
ahvif->vdev_type == WMI_VDEV_TYPE_STA &&
|
||||
ahvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE) {
|
||||
@@ -10449,13 +10571,13 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
|
||||
arvif->vdev_id, arvif->bssid);
|
||||
goto err;
|
||||
goto err_dp_peer_del;
|
||||
}
|
||||
|
||||
ret = ath12k_wait_for_peer_delete_done(ar, arvif->vdev_id,
|
||||
arvif->bssid);
|
||||
if (ret)
|
||||
goto err_vdev_del;
|
||||
goto err_dp_peer_del;
|
||||
|
||||
ar->num_peers--;
|
||||
}
|
||||
@@ -10472,8 +10594,6 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
|
||||
ath12k_wmi_vdev_delete(ar, arvif->vdev_id);
|
||||
ar->num_created_vdevs--;
|
||||
arvif->is_created = false;
|
||||
arvif->ar = NULL;
|
||||
ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
|
||||
ab->free_vdev_map |= 1LL << arvif->vdev_id;
|
||||
ab->free_vdev_stats_id_map &= ~(1LL << arvif->vdev_stats_id);
|
||||
@@ -10482,6 +10602,7 @@ int ath12k_mac_vdev_create(struct ath12k *ar, struct ath12k_link_vif *arvif)
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
|
||||
err:
|
||||
arvif->is_created = false;
|
||||
arvif->ar = NULL;
|
||||
return ret;
|
||||
}
|
||||
@@ -11480,6 +11601,9 @@ ath12k_mac_update_vif_chan(struct ath12k *ar,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (WARN_ON(!arvif))
|
||||
continue;
|
||||
|
||||
ath12k_dbg(ab, ATH12K_DBG_MAC,
|
||||
"mac chanctx switch vdev_id %i freq %u->%u width %d->%d\n",
|
||||
arvif->vdev_id,
|
||||
@@ -12271,23 +12395,85 @@ ath12k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
|
||||
int n_vifs,
|
||||
enum ieee80211_chanctx_switch_mode mode)
|
||||
{
|
||||
struct ath12k *ar;
|
||||
struct ath12k *curr_ar, *new_ar, *group_ar;
|
||||
struct ieee80211_vif_chanctx_switch *v;
|
||||
int i, j, count = 0;
|
||||
|
||||
lockdep_assert_wiphy(hw->wiphy);
|
||||
|
||||
ar = ath12k_get_ar_by_ctx(hw, vifs->old_ctx);
|
||||
if (!ar)
|
||||
return -EINVAL;
|
||||
if (n_vifs == 0)
|
||||
return 0;
|
||||
|
||||
/* Switching channels across radio is not allowed */
|
||||
if (ar != ath12k_get_ar_by_ctx(hw, vifs->new_ctx))
|
||||
return -EINVAL;
|
||||
struct ath12k **ar_map __free(kfree) = kzalloc_objs(*ar_map, n_vifs);
|
||||
|
||||
ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
|
||||
"mac chanctx switch n_vifs %d mode %d\n",
|
||||
n_vifs, mode);
|
||||
ath12k_mac_update_vif_chan(ar, vifs, n_vifs);
|
||||
if (!ar_map)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < n_vifs; i++) {
|
||||
v = &vifs[i];
|
||||
|
||||
if (v->old_ctx->def.chan->band != v->new_ctx->def.chan->band) {
|
||||
ath12k_generic_dbg(ATH12K_DBG_MAC,
|
||||
"mac chanctx switch band change not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
curr_ar = ath12k_get_ar_by_ctx(hw, v->old_ctx);
|
||||
new_ar = ath12k_get_ar_by_ctx(hw, v->new_ctx);
|
||||
|
||||
if (!curr_ar || !new_ar) {
|
||||
ath12k_generic_dbg(ATH12K_DBG_MAC,
|
||||
"unable to determine device for the passed channel ctx\n");
|
||||
ath12k_generic_dbg(ATH12K_DBG_MAC,
|
||||
"Old freq %d MHz (device %s) to new freq %d MHz (device %s)\n",
|
||||
v->old_ctx->def.chan->center_freq,
|
||||
curr_ar ? "valid" : "invalid",
|
||||
v->new_ctx->def.chan->center_freq,
|
||||
new_ar ? "valid" : "invalid");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Switching a vif between two radios is not allowed */
|
||||
if (curr_ar != new_ar) {
|
||||
ath12k_dbg(curr_ar->ab, ATH12K_DBG_MAC,
|
||||
"mac chanctx switch to another radio not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
ar_map[i] = curr_ar;
|
||||
}
|
||||
|
||||
/* Group vifs by radio (ar) and process each group independently. */
|
||||
bool *processed __free(kfree) = kzalloc_objs(*processed, n_vifs);
|
||||
|
||||
if (!processed)
|
||||
return -ENOMEM;
|
||||
|
||||
struct ieee80211_vif_chanctx_switch *group_vifs __free(kfree) =
|
||||
kzalloc_objs(*group_vifs, n_vifs);
|
||||
|
||||
if (!group_vifs)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < n_vifs; i++) {
|
||||
if (processed[i])
|
||||
continue;
|
||||
|
||||
group_ar = ar_map[i];
|
||||
|
||||
count = 0;
|
||||
for (j = 0; j < n_vifs; j++) {
|
||||
if (!processed[j] && ar_map[j] == group_ar) {
|
||||
group_vifs[count++] = vifs[j];
|
||||
processed[j] = true;
|
||||
}
|
||||
}
|
||||
|
||||
ath12k_dbg(group_ar->ab, ATH12K_DBG_MAC,
|
||||
"mac chanctx switch n_vifs %d mode %d\n",
|
||||
count, mode);
|
||||
ath12k_mac_update_vif_chan(group_ar, group_vifs, count);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(ath12k_mac_op_switch_vif_chanctx);
|
||||
|
||||
@@ -255,6 +255,9 @@ int ath12k_mac_op_sta_state(struct ieee80211_hw *hw,
|
||||
int ath12k_mac_op_sta_set_txpwr(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
void ath12k_mac_op_sta_set_4addr(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, bool enabled);
|
||||
void ath12k_mac_op_link_sta_rc_update(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_link_sta *link_sta,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved..
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_P2P_H
|
||||
|
||||
@@ -218,7 +218,13 @@ int ath12k_peer_create(struct ath12k *ar, struct ath12k_link_vif *arvif,
|
||||
ahsta = ath12k_sta_to_ahsta(sta);
|
||||
arsta = wiphy_dereference(ath12k_ar_to_hw(ar)->wiphy,
|
||||
ahsta->link[link_id]);
|
||||
|
||||
/* TODO: Split DP related field usage to DP peer structure */
|
||||
arsta->tcl_metadata = u16_encode_bits(0, HTT_TCL_META_DATA_TYPE) |
|
||||
u16_encode_bits(peer->peer_id,
|
||||
HTT_TCL_META_DATA_PEER_ID) |
|
||||
u16_encode_bits(0, HTT_TCL_META_DATA_VALID_HTT);
|
||||
arsta->ast_hash = peer->ast_hash;
|
||||
arsta->ast_idx = peer->hw_peer_id;
|
||||
peer->link_id = arsta->link_id;
|
||||
|
||||
/* Fill ML info into created peer */
|
||||
@@ -249,6 +255,9 @@ int ath12k_peer_create(struct ath12k *ar, struct ath12k_link_vif *arvif,
|
||||
ar->hw_link_id);
|
||||
}
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_AP && peer->dp_peer)
|
||||
peer->dp_peer->ucast_ra_only = true;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
||||
*/
|
||||
#include <linux/rtnetlink.h>
|
||||
#include "core.h"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user