mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 14:34:13 -04:00
Merge tag 'ath-next-20231215' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath
ath.git patches for v6.8. We have new features only for ath12k but lots of small cleanup for ath10k, ath11k and ath12k. And of course smaller fixes to several drivers. Major changes: ath12k * support one MSI vector * WCN7850: support AP mode
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "bmi.h"
|
||||
|
||||
@@ -3,6 +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.
|
||||
*/
|
||||
|
||||
#include "hif.h"
|
||||
|
||||
@@ -3,6 +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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@@ -100,6 +101,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA988X_HW_2_0_VERSION,
|
||||
@@ -140,6 +142,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9887_HW_1_0_VERSION,
|
||||
@@ -181,6 +184,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_2_VERSION,
|
||||
@@ -217,6 +221,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_2_1_VERSION,
|
||||
@@ -257,6 +262,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_2_1_VERSION,
|
||||
@@ -297,6 +303,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_0_VERSION,
|
||||
@@ -337,6 +344,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_2_VERSION,
|
||||
@@ -381,6 +389,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = true,
|
||||
},
|
||||
{
|
||||
.id = QCA99X0_HW_2_0_DEV_VERSION,
|
||||
@@ -427,6 +436,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9984_HW_1_0_DEV_VERSION,
|
||||
@@ -480,6 +490,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9888_HW_2_0_DEV_VERSION,
|
||||
@@ -530,6 +541,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_0_DEV_VERSION,
|
||||
@@ -570,6 +582,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_1_DEV_VERSION,
|
||||
@@ -612,6 +625,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_1_DEV_VERSION,
|
||||
@@ -645,6 +659,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = QCA4019_HW_1_0_DEV_VERSION,
|
||||
@@ -692,6 +707,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = false,
|
||||
.use_fw_tx_credits = true,
|
||||
.delay_unmap_buffer = false,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
{
|
||||
.id = WCN3990_HW_1_0_DEV_VERSION,
|
||||
@@ -725,6 +741,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.hw_restart_disconnect = true,
|
||||
.use_fw_tx_credits = false,
|
||||
.delay_unmap_buffer = true,
|
||||
.mcast_frame_registration = false,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -3,6 +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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _CORE_H_
|
||||
@@ -607,7 +608,7 @@ struct ath10k_vif {
|
||||
u8 tim_bitmap[64];
|
||||
u8 tim_len;
|
||||
u32 ssid_len;
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN] __nonstring;
|
||||
bool hidden_ssid;
|
||||
/* P2P_IE with NoA attribute for P2P_GO case */
|
||||
u32 noa_len;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "coredump.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* SPDX-License-Identifier: ISC */
|
||||
/*
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _COREDUMP_H_
|
||||
|
||||
@@ -3,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -2,6 +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.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -246,26 +246,12 @@ struct ath10k_htc_lookahead_bundle {
|
||||
struct ath10k_htc_record {
|
||||
struct ath10k_ath10k_htc_record_hdr hdr;
|
||||
union {
|
||||
struct ath10k_htc_credit_report credit_report[0];
|
||||
struct ath10k_htc_lookahead_report lookahead_report[0];
|
||||
struct ath10k_htc_lookahead_bundle lookahead_bundle[0];
|
||||
u8 pauload[0];
|
||||
DECLARE_FLEX_ARRAY(struct ath10k_htc_credit_report, credit_report);
|
||||
DECLARE_FLEX_ARRAY(struct ath10k_htc_lookahead_report, lookahead_report);
|
||||
DECLARE_FLEX_ARRAY(struct ath10k_htc_lookahead_bundle, lookahead_bundle);
|
||||
};
|
||||
} __packed __aligned(4);
|
||||
|
||||
/*
|
||||
* note: the trailer offset is dynamic depending
|
||||
* on payload length. this is only a struct layout draft
|
||||
*/
|
||||
struct ath10k_htc_frame {
|
||||
struct ath10k_htc_hdr hdr;
|
||||
union {
|
||||
struct ath10k_htc_msg msg;
|
||||
u8 payload[0];
|
||||
};
|
||||
struct ath10k_htc_record trailer[0];
|
||||
} __packed __aligned(4);
|
||||
|
||||
/*******************/
|
||||
/* Host-side stuff */
|
||||
/*******************/
|
||||
|
||||
@@ -3,6 +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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _HTT_H_
|
||||
|
||||
@@ -3,6 +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.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -2,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/etherdevice.h>
|
||||
@@ -40,7 +41,6 @@ static void __ath10k_htt_tx_txq_recalc(struct ieee80211_hw *hw,
|
||||
struct ath10k *ar = hw->priv;
|
||||
struct ath10k_sta *arsta;
|
||||
struct ath10k_vif *arvif = (void *)txq->vif->drv_priv;
|
||||
unsigned long frame_cnt;
|
||||
unsigned long byte_cnt;
|
||||
int idx;
|
||||
u32 bit;
|
||||
@@ -67,7 +67,7 @@ static void __ath10k_htt_tx_txq_recalc(struct ieee80211_hw *hw,
|
||||
bit = BIT(peer_id % 32);
|
||||
idx = peer_id / 32;
|
||||
|
||||
ieee80211_txq_get_depth(txq, &frame_cnt, &byte_cnt);
|
||||
ieee80211_txq_get_depth(txq, NULL, &byte_cnt);
|
||||
count = ath10k_htt_tx_txq_calc_size(byte_cnt);
|
||||
|
||||
if (unlikely(peer_id >= ar->htt.tx_q_state.num_peers) ||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2014-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -3,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _HW_H_
|
||||
@@ -639,6 +640,9 @@ struct ath10k_hw_params {
|
||||
bool use_fw_tx_credits;
|
||||
|
||||
bool delay_unmap_buffer;
|
||||
|
||||
/* The hardware support multicast frame registrations */
|
||||
bool mcast_frame_registration;
|
||||
};
|
||||
|
||||
struct htt_resp;
|
||||
|
||||
@@ -3,6 +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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "mac.h"
|
||||
@@ -1242,7 +1243,7 @@ static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
|
||||
return ar->monitor ||
|
||||
(!test_bit(ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST,
|
||||
ar->running_fw->fw_file.fw_features) &&
|
||||
(ar->filter_flags & FIF_OTHER_BSS)) ||
|
||||
(ar->filter_flags & (FIF_OTHER_BSS | FIF_MCAST_ACTION))) ||
|
||||
test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
|
||||
}
|
||||
|
||||
@@ -6025,10 +6026,15 @@ static void ath10k_configure_filter(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct ath10k *ar = hw->priv;
|
||||
int ret;
|
||||
unsigned int supported = SUPPORTED_FILTERS;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
*total_flags &= SUPPORTED_FILTERS;
|
||||
if (ar->hw_params.mcast_frame_registration)
|
||||
supported |= FIF_MCAST_ACTION;
|
||||
|
||||
*total_flags &= supported;
|
||||
|
||||
ar->filter_flags = *total_flags;
|
||||
|
||||
ret = ath10k_monitor_recalc(ar);
|
||||
@@ -6121,9 +6127,8 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
|
||||
|
||||
if (ieee80211_vif_is_mesh(vif)) {
|
||||
/* mesh doesn't use SSID but firmware needs it */
|
||||
strncpy(arvif->u.ap.ssid, "mesh",
|
||||
sizeof(arvif->u.ap.ssid));
|
||||
arvif->u.ap.ssid_len = 4;
|
||||
memcpy(arvif->u.ap.ssid, "mesh", arvif->u.ap.ssid_len);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10118,6 +10123,10 @@ int ath10k_mac_register(struct ath10k *ar)
|
||||
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_AQL);
|
||||
|
||||
if (ar->hw_params.mcast_frame_registration)
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS);
|
||||
|
||||
if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map) ||
|
||||
test_bit(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, ar->wmi.svc_map))
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005-2011 Atheros Communications Inc.
|
||||
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/pci.h>
|
||||
|
||||
@@ -2,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _PCI_H_
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/completion.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/soc/qcom/qmi.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef WCN3990_QMI_SVC_V01_H
|
||||
|
||||
@@ -2,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _RX_DESC_H_
|
||||
|
||||
@@ -3,6 +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-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2014-2015 Qualcomm Atheros, Inc.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
@@ -3,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _USB_H_
|
||||
|
||||
@@ -3,6 +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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#ifndef _WMI_TLV_H
|
||||
#define _WMI_TLV_H
|
||||
|
||||
@@ -3,6 +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) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
@@ -3,6 +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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _WMI_H_
|
||||
|
||||
@@ -2,6 +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.
|
||||
*/
|
||||
|
||||
#include "mac.h"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
config ATH11K
|
||||
tristate "Qualcomm Technologies 802.11ax chipset support"
|
||||
depends on MAC80211 && HAS_DMA
|
||||
depends on CRYPTO_MICHAEL_MIC
|
||||
select CRYPTO_MICHAEL_MIC
|
||||
select ATH_COMMON
|
||||
select QCOM_QMI_HELPERS
|
||||
help
|
||||
|
||||
@@ -803,8 +803,8 @@ static int ath11k_core_get_rproc(struct ath11k_base *ab)
|
||||
|
||||
prproc = rproc_get_by_phandle(rproc_phandle);
|
||||
if (!prproc) {
|
||||
ath11k_err(ab, "failed to get rproc\n");
|
||||
return -EINVAL;
|
||||
ath11k_dbg(ab, ATH11K_DBG_AHB, "failed to get rproc, deferring\n");
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
ab_ahb->tgt_rproc = prproc;
|
||||
|
||||
@@ -1251,7 +1251,7 @@ static void ath11k_ahb_free_resources(struct ath11k_base *ab)
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
}
|
||||
|
||||
static int ath11k_ahb_remove(struct platform_device *pdev)
|
||||
static void ath11k_ahb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ath11k_base *ab = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1267,8 +1267,6 @@ static int ath11k_ahb_remove(struct platform_device *pdev)
|
||||
|
||||
qmi_fail:
|
||||
ath11k_ahb_free_resources(ab);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ath11k_ahb_shutdown(struct platform_device *pdev)
|
||||
@@ -1296,7 +1294,7 @@ static struct platform_driver ath11k_ahb_driver = {
|
||||
.of_match_table = ath11k_ahb_of_match,
|
||||
},
|
||||
.probe = ath11k_ahb_probe,
|
||||
.remove = ath11k_ahb_remove,
|
||||
.remove_new = ath11k_ahb_remove,
|
||||
.shutdown = ath11k_ahb_shutdown,
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "dp_rx.h"
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_CE_H
|
||||
|
||||
@@ -599,7 +599,6 @@ struct ath11k {
|
||||
struct ath11k_base *ab;
|
||||
struct ath11k_pdev *pdev;
|
||||
struct ieee80211_hw *hw;
|
||||
struct ieee80211_ops *ops;
|
||||
struct ath11k_pdev_wmi *wmi;
|
||||
struct ath11k_pdev_dp dp;
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_DBRING_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/vmalloc.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) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_DEBUG_H_
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_DEBUGFS_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) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/vmalloc.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) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef DEBUG_HTT_STATS_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_DEBUGFS_STA_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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <crypto/hash.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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_DP_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/ieee80211.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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_DP_TX_H
|
||||
|
||||
@@ -133,7 +133,7 @@ static int ath11k_fw_request_firmware_api_n(struct ath11k_base *ab,
|
||||
|
||||
len -= ie_len;
|
||||
data += ie_len;
|
||||
};
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
#include "hal_tx.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) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HAL_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
#include "core.h"
|
||||
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HAL_RX_H
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _HIF_H_
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HTC_H
|
||||
@@ -150,10 +151,7 @@ struct ath11k_htc_credit_report {
|
||||
|
||||
struct ath11k_htc_record {
|
||||
struct ath11k_htc_record_hdr hdr;
|
||||
union {
|
||||
struct ath11k_htc_credit_report credit_report[0];
|
||||
u8 pauload[0];
|
||||
};
|
||||
struct ath11k_htc_credit_report credit_report[];
|
||||
} __packed __aligned(4);
|
||||
|
||||
enum ath11k_htc_svc_gid {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_HW_H
|
||||
|
||||
@@ -4654,6 +4654,14 @@ static int ath11k_station_disassoc(struct ath11k *ar,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 ath11k_mac_max_nss(const u8 *ht_mcs_mask, const u16 *vht_mcs_mask,
|
||||
const u16 *he_mcs_mask)
|
||||
{
|
||||
return max3(ath11k_mac_max_ht_nss(ht_mcs_mask),
|
||||
ath11k_mac_max_vht_nss(vht_mcs_mask),
|
||||
ath11k_mac_max_he_nss(he_mcs_mask));
|
||||
}
|
||||
|
||||
static void ath11k_sta_rc_update_wk(struct work_struct *wk)
|
||||
{
|
||||
struct ath11k *ar;
|
||||
@@ -4699,9 +4707,7 @@ static void ath11k_sta_rc_update_wk(struct work_struct *wk)
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
nss = max_t(u32, 1, nss);
|
||||
nss = min(nss, max(max(ath11k_mac_max_ht_nss(ht_mcs_mask),
|
||||
ath11k_mac_max_vht_nss(vht_mcs_mask)),
|
||||
ath11k_mac_max_he_nss(he_mcs_mask)));
|
||||
nss = min(nss, ath11k_mac_max_nss(ht_mcs_mask, vht_mcs_mask, he_mcs_mask));
|
||||
|
||||
if (changed & IEEE80211_RC_BW_CHANGED) {
|
||||
/* Get the peer phymode */
|
||||
@@ -8391,9 +8397,7 @@ ath11k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
|
||||
ath11k_warn(ar->ab,
|
||||
"could not update fixed rate settings to all peers due to mcs/nss incompatibility\n");
|
||||
nss = min_t(u32, ar->num_tx_chains,
|
||||
max(max(ath11k_mac_max_ht_nss(ht_mcs_mask),
|
||||
ath11k_mac_max_vht_nss(vht_mcs_mask)),
|
||||
ath11k_mac_max_he_nss(he_mcs_mask)));
|
||||
ath11k_mac_max_nss(ht_mcs_mask, vht_mcs_mask, he_mcs_mask));
|
||||
|
||||
/* If multiple rates across different preambles are given
|
||||
* we can reconfigure this info with all peers using PEER_ASSOC
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#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) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/msi.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
#ifndef _ATH11K_MHI_H
|
||||
#define _ATH11K_MHI_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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
@@ -460,8 +460,6 @@ void ath11k_pcic_ext_irq_enable(struct ath11k_base *ab)
|
||||
{
|
||||
int i;
|
||||
|
||||
set_bit(ATH11K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags);
|
||||
|
||||
for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) {
|
||||
struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];
|
||||
|
||||
@@ -471,6 +469,8 @@ void ath11k_pcic_ext_irq_enable(struct ath11k_base *ab)
|
||||
}
|
||||
ath11k_pcic_ext_grp_enable(irq_grp);
|
||||
}
|
||||
|
||||
set_bit(ATH11K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags);
|
||||
}
|
||||
EXPORT_SYMBOL(ath11k_pcic_ext_irq_enable);
|
||||
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#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-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#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) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/elf.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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_QMI_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
#include <linux/rtnetlink.h>
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_REG_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
#ifndef ATH11K_RX_DESC_H
|
||||
#define ATH11K_RX_DESC_H
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// 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.
|
||||
*/
|
||||
|
||||
#include <linux/relay.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_SPECTRAL_H
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#include <linux/device.h>
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _ATH11K_THERMAL_
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH11K_WMI_H
|
||||
@@ -1096,25 +1096,27 @@ enum wmi_tlv_vdev_param {
|
||||
};
|
||||
|
||||
enum wmi_tlv_peer_flags {
|
||||
WMI_TLV_PEER_AUTH = 0x00000001,
|
||||
WMI_TLV_PEER_QOS = 0x00000002,
|
||||
WMI_TLV_PEER_NEED_PTK_4_WAY = 0x00000004,
|
||||
WMI_TLV_PEER_NEED_GTK_2_WAY = 0x00000010,
|
||||
WMI_TLV_PEER_APSD = 0x00000800,
|
||||
WMI_TLV_PEER_HT = 0x00001000,
|
||||
WMI_TLV_PEER_40MHZ = 0x00002000,
|
||||
WMI_TLV_PEER_STBC = 0x00008000,
|
||||
WMI_TLV_PEER_LDPC = 0x00010000,
|
||||
WMI_TLV_PEER_DYN_MIMOPS = 0x00020000,
|
||||
WMI_TLV_PEER_STATIC_MIMOPS = 0x00040000,
|
||||
WMI_TLV_PEER_SPATIAL_MUX = 0x00200000,
|
||||
WMI_TLV_PEER_VHT = 0x02000000,
|
||||
WMI_TLV_PEER_80MHZ = 0x04000000,
|
||||
WMI_TLV_PEER_PMF = 0x08000000,
|
||||
WMI_PEER_AUTH = 0x00000001,
|
||||
WMI_PEER_QOS = 0x00000002,
|
||||
WMI_PEER_NEED_PTK_4_WAY = 0x00000004,
|
||||
WMI_PEER_NEED_GTK_2_WAY = 0x00000010,
|
||||
WMI_PEER_HE = 0x00000400,
|
||||
WMI_PEER_APSD = 0x00000800,
|
||||
WMI_PEER_HT = 0x00001000,
|
||||
WMI_PEER_40MHZ = 0x00002000,
|
||||
WMI_PEER_STBC = 0x00008000,
|
||||
WMI_PEER_LDPC = 0x00010000,
|
||||
WMI_PEER_DYN_MIMOPS = 0x00020000,
|
||||
WMI_PEER_STATIC_MIMOPS = 0x00040000,
|
||||
WMI_PEER_SPATIAL_MUX = 0x00200000,
|
||||
WMI_PEER_TWT_REQ = 0x00400000,
|
||||
WMI_PEER_TWT_RESP = 0x00800000,
|
||||
WMI_PEER_VHT = 0x02000000,
|
||||
WMI_PEER_80MHZ = 0x04000000,
|
||||
WMI_PEER_PMF = 0x08000000,
|
||||
WMI_PEER_IS_P2P_CAPABLE = 0x20000000,
|
||||
WMI_PEER_160MHZ = 0x40000000,
|
||||
WMI_PEER_SAFEMODE_EN = 0x80000000,
|
||||
|
||||
};
|
||||
|
||||
/** Enum list of TLV Tags for each parameter structure type. */
|
||||
@@ -2580,7 +2582,6 @@ struct wmi_service_available_event {
|
||||
struct ath11k_pdev_wmi {
|
||||
struct ath11k_wmi_base *wmi_ab;
|
||||
enum ath11k_htc_ep_id eid;
|
||||
const struct wmi_peer_flags_map *peer_flags;
|
||||
u32 rx_decap_mode;
|
||||
wait_queue_head_t tx_ce_desc_wq;
|
||||
};
|
||||
@@ -4062,31 +4063,6 @@ struct wmi_unit_test_cmd {
|
||||
|
||||
#define MAX_SUPPORTED_RATES 128
|
||||
|
||||
#define WMI_PEER_AUTH 0x00000001
|
||||
#define WMI_PEER_QOS 0x00000002
|
||||
#define WMI_PEER_NEED_PTK_4_WAY 0x00000004
|
||||
#define WMI_PEER_NEED_GTK_2_WAY 0x00000010
|
||||
#define WMI_PEER_HE 0x00000400
|
||||
#define WMI_PEER_APSD 0x00000800
|
||||
#define WMI_PEER_HT 0x00001000
|
||||
#define WMI_PEER_40MHZ 0x00002000
|
||||
#define WMI_PEER_STBC 0x00008000
|
||||
#define WMI_PEER_LDPC 0x00010000
|
||||
#define WMI_PEER_DYN_MIMOPS 0x00020000
|
||||
#define WMI_PEER_STATIC_MIMOPS 0x00040000
|
||||
#define WMI_PEER_SPATIAL_MUX 0x00200000
|
||||
#define WMI_PEER_TWT_REQ 0x00400000
|
||||
#define WMI_PEER_TWT_RESP 0x00800000
|
||||
#define WMI_PEER_VHT 0x02000000
|
||||
#define WMI_PEER_80MHZ 0x04000000
|
||||
#define WMI_PEER_PMF 0x08000000
|
||||
/* TODO: Place holder for WLAN_PEER_F_PS_PRESEND_REQUIRED = 0x10000000.
|
||||
* Need to be cleaned up
|
||||
*/
|
||||
#define WMI_PEER_IS_P2P_CAPABLE 0x20000000
|
||||
#define WMI_PEER_160MHZ 0x40000000
|
||||
#define WMI_PEER_SAFEMODE_EN 0x80000000
|
||||
|
||||
struct beacon_tmpl_params {
|
||||
u8 vdev_id;
|
||||
u32 tim_ie_offset;
|
||||
@@ -5754,7 +5730,6 @@ struct ath11k_wmi_base {
|
||||
struct completion unified_ready;
|
||||
DECLARE_BITMAP(svc_map, WMI_MAX_EXT2_SERVICE);
|
||||
wait_queue_head_t tx_credits_wq;
|
||||
const struct wmi_peer_flags_map *peer_flags;
|
||||
u32 num_mem_chunks;
|
||||
u32 rx_decap_mode;
|
||||
struct wmi_host_mem_chunk mem_chunks[WMI_MAX_MEM_REQS];
|
||||
|
||||
@@ -1,6 +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.
|
||||
*/
|
||||
|
||||
#ifndef _WOW_H_
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
config ATH12K
|
||||
tristate "Qualcomm Technologies Wi-Fi 7 support (ath12k)"
|
||||
depends on MAC80211 && HAS_DMA && PCI
|
||||
depends on CRYPTO_MICHAEL_MIC
|
||||
select CRYPTO_MICHAEL_MIC
|
||||
select QCOM_QMI_HELPERS
|
||||
select MHI_BUS
|
||||
select QRTR
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@@ -698,13 +698,15 @@ int ath12k_core_qmi_firmware_ready(struct ath12k_base *ab)
|
||||
ret = ath12k_core_rfkill_config(ab);
|
||||
if (ret && ret != -EOPNOTSUPP) {
|
||||
ath12k_err(ab, "failed to config rfkill: %d\n", ret);
|
||||
goto err_core_stop;
|
||||
goto err_core_pdev_destroy;
|
||||
}
|
||||
|
||||
mutex_unlock(&ab->core_lock);
|
||||
|
||||
return 0;
|
||||
|
||||
err_core_pdev_destroy:
|
||||
ath12k_core_pdev_destroy(ab);
|
||||
err_core_stop:
|
||||
ath12k_core_stop(ab);
|
||||
ath12k_mac_destroy(ab);
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_CORE_H
|
||||
@@ -199,6 +199,8 @@ enum ath12k_dev_flags {
|
||||
ATH12K_FLAG_REGISTERED,
|
||||
ATH12K_FLAG_QMI_FAIL,
|
||||
ATH12K_FLAG_HTC_SUSPEND_COMPLETE,
|
||||
ATH12K_FLAG_CE_IRQ_ENABLED,
|
||||
ATH12K_FLAG_EXT_IRQ_ENABLED,
|
||||
};
|
||||
|
||||
enum ath12k_monitor_flags {
|
||||
@@ -467,7 +469,6 @@ struct ath12k {
|
||||
struct ath12k_base *ab;
|
||||
struct ath12k_pdev *pdev;
|
||||
struct ieee80211_hw *hw;
|
||||
struct ieee80211_ops *ops;
|
||||
struct ath12k_wmi_pdev *wmi;
|
||||
struct ath12k_pdev_dp dp;
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#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-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/vmalloc.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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <crypto/hash.h>
|
||||
@@ -961,9 +961,7 @@ int ath12k_dp_service_srng(struct ath12k_base *ab,
|
||||
struct ath12k_dp *dp = &ab->dp;
|
||||
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
|
||||
|
||||
ath12k_dp_rx_bufs_replenish(ab, 0, rx_ring, 0,
|
||||
ab->hw_params->hal_params->rx_buf_rbm,
|
||||
true);
|
||||
ath12k_dp_rx_bufs_replenish(ab, rx_ring, 0);
|
||||
}
|
||||
|
||||
/* TODO: Implement handler for other interrupts */
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_DP_H
|
||||
@@ -31,7 +31,7 @@ struct dp_srng {
|
||||
u32 ring_id;
|
||||
};
|
||||
|
||||
struct dp_rxdma_ring {
|
||||
struct dp_rxdma_mon_ring {
|
||||
struct dp_srng refill_buf_ring;
|
||||
struct idr bufs_idr;
|
||||
/* Protects bufs_idr */
|
||||
@@ -39,6 +39,11 @@ struct dp_rxdma_ring {
|
||||
int bufs_max;
|
||||
};
|
||||
|
||||
struct dp_rxdma_ring {
|
||||
struct dp_srng refill_buf_ring;
|
||||
int bufs_max;
|
||||
};
|
||||
|
||||
#define ATH12K_TX_COMPL_NEXT(x) (((x) + 1) % DP_TX_COMP_RING_SIZE)
|
||||
|
||||
struct dp_tx_ring {
|
||||
@@ -353,8 +358,8 @@ struct ath12k_dp {
|
||||
struct dp_rxdma_ring rx_refill_buf_ring;
|
||||
struct dp_srng rx_mac_buf_ring[MAX_RXDMA_PER_PDEV];
|
||||
struct dp_srng rxdma_err_dst_ring[MAX_RXDMA_PER_PDEV];
|
||||
struct dp_rxdma_ring rxdma_mon_buf_ring;
|
||||
struct dp_rxdma_ring tx_mon_buf_ring;
|
||||
struct dp_rxdma_mon_ring rxdma_mon_buf_ring;
|
||||
struct dp_rxdma_mon_ring tx_mon_buf_ring;
|
||||
struct ath12k_reo_q_addr_lut reoq_lut;
|
||||
};
|
||||
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "dp_mon.h"
|
||||
@@ -797,7 +797,7 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k_base *ab,
|
||||
/* TODO: add msdu start parsing logic */
|
||||
break;
|
||||
case HAL_MON_BUF_ADDR: {
|
||||
struct dp_rxdma_ring *buf_ring = &ab->dp.rxdma_mon_buf_ring;
|
||||
struct dp_rxdma_mon_ring *buf_ring = &ab->dp.rxdma_mon_buf_ring;
|
||||
struct dp_mon_packet_info *packet_info =
|
||||
(struct dp_mon_packet_info *)tlv_data;
|
||||
int buf_id = u32_get_bits(packet_info->cookie,
|
||||
@@ -1091,7 +1091,7 @@ static void ath12k_dp_mon_rx_deliver_msdu(struct ath12k *ar, struct napi_struct
|
||||
spin_unlock_bh(&ar->ab->base_lock);
|
||||
|
||||
ath12k_dbg(ar->ab, ATH12K_DBG_DATA,
|
||||
"rx skb %pK len %u peer %pM %u %s %s%s%s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
|
||||
"rx skb %pK len %u peer %pM %u %s %s%s%s%s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
|
||||
msdu,
|
||||
msdu->len,
|
||||
peer ? peer->addr : NULL,
|
||||
@@ -1104,6 +1104,7 @@ static void ath12k_dp_mon_rx_deliver_msdu(struct ath12k *ar, struct napi_struct
|
||||
(status->bw == RATE_INFO_BW_40) ? "40" : "",
|
||||
(status->bw == RATE_INFO_BW_80) ? "80" : "",
|
||||
(status->bw == RATE_INFO_BW_160) ? "160" : "",
|
||||
(status->bw == RATE_INFO_BW_320) ? "320" : "",
|
||||
status->enc_flags & RX_ENC_FLAG_SHORT_GI ? "sgi " : "",
|
||||
status->rate_idx,
|
||||
status->nss,
|
||||
@@ -1259,7 +1260,7 @@ ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
|
||||
}
|
||||
|
||||
int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *buf_ring,
|
||||
struct dp_rxdma_mon_ring *buf_ring,
|
||||
int req_entries)
|
||||
{
|
||||
struct hal_mon_buf_ring *mon_buf;
|
||||
@@ -1902,7 +1903,7 @@ ath12k_dp_mon_tx_parse_status_tlv(struct ath12k_base *ab,
|
||||
}
|
||||
|
||||
case HAL_MON_BUF_ADDR: {
|
||||
struct dp_rxdma_ring *buf_ring = &ab->dp.tx_mon_buf_ring;
|
||||
struct dp_rxdma_mon_ring *buf_ring = &ab->dp.tx_mon_buf_ring;
|
||||
struct dp_mon_packet_info *packet_info =
|
||||
(struct dp_mon_packet_info *)tlv_data;
|
||||
int buf_id = u32_get_bits(packet_info->cookie,
|
||||
@@ -2067,7 +2068,7 @@ int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id, int *budget,
|
||||
struct ath12k_skb_rxcb *rxcb;
|
||||
struct dp_srng *mon_dst_ring;
|
||||
struct hal_srng *srng;
|
||||
struct dp_rxdma_ring *buf_ring;
|
||||
struct dp_rxdma_mon_ring *buf_ring;
|
||||
u64 cookie;
|
||||
u32 ppdu_id;
|
||||
int num_buffs_reaped = 0, srng_id, buf_id;
|
||||
@@ -2480,7 +2481,7 @@ int ath12k_dp_mon_rx_process_stats(struct ath12k *ar, int mac_id,
|
||||
struct ath12k_skb_rxcb *rxcb;
|
||||
struct dp_srng *mon_dst_ring;
|
||||
struct hal_srng *srng;
|
||||
struct dp_rxdma_ring *buf_ring;
|
||||
struct dp_rxdma_mon_ring *buf_ring;
|
||||
struct ath12k_sta *arsta = NULL;
|
||||
struct ath12k_peer *peer;
|
||||
u64 cookie;
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_DP_MON_H
|
||||
@@ -80,7 +80,7 @@ ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
|
||||
int mac_id, struct sk_buff *skb,
|
||||
struct napi_struct *napi);
|
||||
int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *buf_ring,
|
||||
struct dp_rxdma_mon_ring *buf_ring,
|
||||
int req_entries);
|
||||
int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id,
|
||||
int *budget, enum dp_monitor_mode monitor_mode,
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/ieee80211.h>
|
||||
@@ -256,22 +256,20 @@ static int ath12k_dp_purge_mon_ring(struct ath12k_base *ab)
|
||||
}
|
||||
|
||||
/* Returns number of Rx buffers replenished */
|
||||
int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab, int mac_id,
|
||||
int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *rx_ring,
|
||||
int req_entries,
|
||||
enum hal_rx_buf_return_buf_manager mgr,
|
||||
bool hw_cc)
|
||||
int req_entries)
|
||||
{
|
||||
struct ath12k_buffer_addr *desc;
|
||||
struct hal_srng *srng;
|
||||
struct sk_buff *skb;
|
||||
int num_free;
|
||||
int num_remain;
|
||||
int buf_id;
|
||||
u32 cookie;
|
||||
dma_addr_t paddr;
|
||||
struct ath12k_dp *dp = &ab->dp;
|
||||
struct ath12k_rx_desc_info *rx_desc;
|
||||
enum hal_rx_buf_return_buf_manager mgr = ab->hw_params->hal_params->rx_buf_rbm;
|
||||
|
||||
req_entries = min(req_entries, rx_ring->bufs_max);
|
||||
|
||||
@@ -307,42 +305,29 @@ int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab, int mac_id,
|
||||
if (dma_mapping_error(ab->dev, paddr))
|
||||
goto fail_free_skb;
|
||||
|
||||
if (hw_cc) {
|
||||
spin_lock_bh(&dp->rx_desc_lock);
|
||||
|
||||
/* Get desc from free list and store in used list
|
||||
* for cleanup purposes
|
||||
*
|
||||
* TODO: pass the removed descs rather than
|
||||
* add/read to optimize
|
||||
*/
|
||||
rx_desc = list_first_entry_or_null(&dp->rx_desc_free_list,
|
||||
struct ath12k_rx_desc_info,
|
||||
list);
|
||||
if (!rx_desc) {
|
||||
spin_unlock_bh(&dp->rx_desc_lock);
|
||||
goto fail_dma_unmap;
|
||||
}
|
||||
|
||||
rx_desc->skb = skb;
|
||||
cookie = rx_desc->cookie;
|
||||
list_del(&rx_desc->list);
|
||||
list_add_tail(&rx_desc->list, &dp->rx_desc_used_list);
|
||||
spin_lock_bh(&dp->rx_desc_lock);
|
||||
|
||||
/* Get desc from free list and store in used list
|
||||
* for cleanup purposes
|
||||
*
|
||||
* TODO: pass the removed descs rather than
|
||||
* add/read to optimize
|
||||
*/
|
||||
rx_desc = list_first_entry_or_null(&dp->rx_desc_free_list,
|
||||
struct ath12k_rx_desc_info,
|
||||
list);
|
||||
if (!rx_desc) {
|
||||
spin_unlock_bh(&dp->rx_desc_lock);
|
||||
} else {
|
||||
spin_lock_bh(&rx_ring->idr_lock);
|
||||
buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 0,
|
||||
rx_ring->bufs_max * 3, GFP_ATOMIC);
|
||||
spin_unlock_bh(&rx_ring->idr_lock);
|
||||
if (buf_id < 0)
|
||||
goto fail_dma_unmap;
|
||||
cookie = u32_encode_bits(mac_id,
|
||||
DP_RXDMA_BUF_COOKIE_PDEV_ID) |
|
||||
u32_encode_bits(buf_id,
|
||||
DP_RXDMA_BUF_COOKIE_BUF_ID);
|
||||
goto fail_dma_unmap;
|
||||
}
|
||||
|
||||
rx_desc->skb = skb;
|
||||
cookie = rx_desc->cookie;
|
||||
list_del(&rx_desc->list);
|
||||
list_add_tail(&rx_desc->list, &dp->rx_desc_used_list);
|
||||
|
||||
spin_unlock_bh(&dp->rx_desc_lock);
|
||||
|
||||
desc = ath12k_hal_srng_src_get_next_entry(ab, srng);
|
||||
if (!desc)
|
||||
goto fail_buf_unassign;
|
||||
@@ -361,17 +346,11 @@ int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab, int mac_id,
|
||||
return req_entries - num_remain;
|
||||
|
||||
fail_buf_unassign:
|
||||
if (hw_cc) {
|
||||
spin_lock_bh(&dp->rx_desc_lock);
|
||||
list_del(&rx_desc->list);
|
||||
list_add_tail(&rx_desc->list, &dp->rx_desc_free_list);
|
||||
rx_desc->skb = NULL;
|
||||
spin_unlock_bh(&dp->rx_desc_lock);
|
||||
} else {
|
||||
spin_lock_bh(&rx_ring->idr_lock);
|
||||
idr_remove(&rx_ring->bufs_idr, buf_id);
|
||||
spin_unlock_bh(&rx_ring->idr_lock);
|
||||
}
|
||||
spin_lock_bh(&dp->rx_desc_lock);
|
||||
list_del(&rx_desc->list);
|
||||
list_add_tail(&rx_desc->list, &dp->rx_desc_free_list);
|
||||
rx_desc->skb = NULL;
|
||||
spin_unlock_bh(&dp->rx_desc_lock);
|
||||
fail_dma_unmap:
|
||||
dma_unmap_single(ab->dev, paddr, skb->len + skb_tailroom(skb),
|
||||
DMA_FROM_DEVICE);
|
||||
@@ -385,8 +364,8 @@ int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab, int mac_id,
|
||||
return req_entries - num_remain;
|
||||
}
|
||||
|
||||
static int ath12k_dp_rxdma_buf_ring_free(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *rx_ring)
|
||||
static int ath12k_dp_rxdma_mon_buf_ring_free(struct ath12k_base *ab,
|
||||
struct dp_rxdma_mon_ring *rx_ring)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
int buf_id;
|
||||
@@ -411,22 +390,17 @@ static int ath12k_dp_rxdma_buf_ring_free(struct ath12k_base *ab,
|
||||
static int ath12k_dp_rxdma_buf_free(struct ath12k_base *ab)
|
||||
{
|
||||
struct ath12k_dp *dp = &ab->dp;
|
||||
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
|
||||
|
||||
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
|
||||
ath12k_dp_rxdma_mon_buf_ring_free(ab, &dp->rxdma_mon_buf_ring);
|
||||
|
||||
rx_ring = &dp->rxdma_mon_buf_ring;
|
||||
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
|
||||
|
||||
rx_ring = &dp->tx_mon_buf_ring;
|
||||
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
|
||||
ath12k_dp_rxdma_mon_buf_ring_free(ab, &dp->tx_mon_buf_ring);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath12k_dp_rxdma_ring_buf_setup(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *rx_ring,
|
||||
u32 ringtype)
|
||||
static int ath12k_dp_rxdma_mon_ring_buf_setup(struct ath12k_base *ab,
|
||||
struct dp_rxdma_mon_ring *rx_ring,
|
||||
u32 ringtype)
|
||||
{
|
||||
int num_entries;
|
||||
|
||||
@@ -434,23 +408,31 @@ static int ath12k_dp_rxdma_ring_buf_setup(struct ath12k_base *ab,
|
||||
ath12k_hal_srng_get_entrysize(ab, ringtype);
|
||||
|
||||
rx_ring->bufs_max = num_entries;
|
||||
if ((ringtype == HAL_RXDMA_MONITOR_BUF) || (ringtype == HAL_TX_MONITOR_BUF))
|
||||
ath12k_dp_mon_buf_replenish(ab, rx_ring, num_entries);
|
||||
else
|
||||
ath12k_dp_rx_bufs_replenish(ab, 0, rx_ring, num_entries,
|
||||
ab->hw_params->hal_params->rx_buf_rbm,
|
||||
ringtype == HAL_RXDMA_BUF);
|
||||
ath12k_dp_mon_buf_replenish(ab, rx_ring, num_entries);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath12k_dp_rxdma_ring_buf_setup(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *rx_ring)
|
||||
{
|
||||
int num_entries;
|
||||
|
||||
num_entries = rx_ring->refill_buf_ring.size /
|
||||
ath12k_hal_srng_get_entrysize(ab, HAL_RXDMA_BUF);
|
||||
|
||||
rx_ring->bufs_max = num_entries;
|
||||
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_entries);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath12k_dp_rxdma_buf_setup(struct ath12k_base *ab)
|
||||
{
|
||||
struct ath12k_dp *dp = &ab->dp;
|
||||
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
|
||||
int ret;
|
||||
|
||||
ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
|
||||
HAL_RXDMA_BUF);
|
||||
ret = ath12k_dp_rxdma_ring_buf_setup(ab, &dp->rx_refill_buf_ring);
|
||||
if (ret) {
|
||||
ath12k_warn(ab,
|
||||
"failed to setup HAL_RXDMA_BUF\n");
|
||||
@@ -458,18 +440,18 @@ static int ath12k_dp_rxdma_buf_setup(struct ath12k_base *ab)
|
||||
}
|
||||
|
||||
if (ab->hw_params->rxdma1_enable) {
|
||||
rx_ring = &dp->rxdma_mon_buf_ring;
|
||||
ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
|
||||
HAL_RXDMA_MONITOR_BUF);
|
||||
ret = ath12k_dp_rxdma_mon_ring_buf_setup(ab,
|
||||
&dp->rxdma_mon_buf_ring,
|
||||
HAL_RXDMA_MONITOR_BUF);
|
||||
if (ret) {
|
||||
ath12k_warn(ab,
|
||||
"failed to setup HAL_RXDMA_MONITOR_BUF\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
rx_ring = &dp->tx_mon_buf_ring;
|
||||
ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
|
||||
HAL_TX_MONITOR_BUF);
|
||||
ret = ath12k_dp_rxdma_mon_ring_buf_setup(ab,
|
||||
&dp->tx_mon_buf_ring,
|
||||
HAL_TX_MONITOR_BUF);
|
||||
if (ret) {
|
||||
ath12k_warn(ab,
|
||||
"failed to setup HAL_TX_MONITOR_BUF\n");
|
||||
@@ -1339,9 +1321,6 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
|
||||
u8 tid = HTT_PPDU_STATS_NON_QOS_TID;
|
||||
bool is_ampdu = false;
|
||||
|
||||
if (!usr_stats)
|
||||
return;
|
||||
|
||||
if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
|
||||
return;
|
||||
|
||||
@@ -2438,7 +2417,7 @@ static void ath12k_dp_rx_deliver_msdu(struct ath12k *ar, struct napi_struct *nap
|
||||
spin_unlock_bh(&ab->base_lock);
|
||||
|
||||
ath12k_dbg(ab, ATH12K_DBG_DATA,
|
||||
"rx skb %pK len %u peer %pM %d %s sn %u %s%s%s%s%s%s%s%s rate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
|
||||
"rx skb %pK len %u peer %pM %d %s sn %u %s%s%s%s%s%s%s%s%s rate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
|
||||
msdu,
|
||||
msdu->len,
|
||||
peer ? peer->addr : NULL,
|
||||
@@ -2452,6 +2431,7 @@ static void ath12k_dp_rx_deliver_msdu(struct ath12k *ar, struct napi_struct *nap
|
||||
(status->bw == RATE_INFO_BW_40) ? "40" : "",
|
||||
(status->bw == RATE_INFO_BW_80) ? "80" : "",
|
||||
(status->bw == RATE_INFO_BW_160) ? "160" : "",
|
||||
(status->bw == RATE_INFO_BW_320) ? "320" : "",
|
||||
status->enc_flags & RX_ENC_FLAG_SHORT_GI ? "sgi " : "",
|
||||
status->rate_idx,
|
||||
status->nss,
|
||||
@@ -2714,9 +2694,7 @@ int ath12k_dp_rx_process(struct ath12k_base *ab, int ring_id,
|
||||
if (!total_msdu_reaped)
|
||||
goto exit;
|
||||
|
||||
/* TODO: Move to implicit BM? */
|
||||
ath12k_dp_rx_bufs_replenish(ab, 0, rx_ring, num_buffs_reaped,
|
||||
ab->hw_params->hal_params->rx_buf_rbm, true);
|
||||
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_buffs_reaped);
|
||||
|
||||
ath12k_dp_rx_process_received_packets(ab, napi, &msdu_list,
|
||||
ring_id);
|
||||
@@ -3494,8 +3472,7 @@ int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi,
|
||||
|
||||
rx_ring = &dp->rx_refill_buf_ring;
|
||||
|
||||
ath12k_dp_rx_bufs_replenish(ab, 0, rx_ring, tot_n_bufs_reaped,
|
||||
ab->hw_params->hal_params->rx_buf_rbm, true);
|
||||
ath12k_dp_rx_bufs_replenish(ab, rx_ring, tot_n_bufs_reaped);
|
||||
|
||||
return tot_n_bufs_reaped;
|
||||
}
|
||||
@@ -3808,8 +3785,7 @@ int ath12k_dp_rx_process_wbm_err(struct ath12k_base *ab,
|
||||
if (!num_buffs_reaped)
|
||||
goto done;
|
||||
|
||||
ath12k_dp_rx_bufs_replenish(ab, 0, rx_ring, num_buffs_reaped,
|
||||
ab->hw_params->hal_params->rx_buf_rbm, true);
|
||||
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_buffs_reaped);
|
||||
|
||||
rcu_read_lock();
|
||||
for (i = 0; i < ab->num_radios; i++) {
|
||||
@@ -4090,9 +4066,6 @@ int ath12k_dp_rx_alloc(struct ath12k_base *ab)
|
||||
struct ath12k_dp *dp = &ab->dp;
|
||||
int i, ret;
|
||||
|
||||
idr_init(&dp->rx_refill_buf_ring.bufs_idr);
|
||||
spin_lock_init(&dp->rx_refill_buf_ring.idr_lock);
|
||||
|
||||
idr_init(&dp->rxdma_mon_buf_ring.bufs_idr);
|
||||
spin_lock_init(&dp->rxdma_mon_buf_ring.idr_lock);
|
||||
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#ifndef ATH12K_DP_RX_H
|
||||
#define ATH12K_DP_RX_H
|
||||
@@ -116,11 +116,9 @@ int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi,
|
||||
int ath12k_dp_rx_process(struct ath12k_base *ab, int mac_id,
|
||||
struct napi_struct *napi,
|
||||
int budget);
|
||||
int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab, int mac_id,
|
||||
int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
|
||||
struct dp_rxdma_ring *rx_ring,
|
||||
int req_entries,
|
||||
enum hal_rx_buf_return_buf_manager mgr,
|
||||
bool hw_cc);
|
||||
int req_entries);
|
||||
int ath12k_dp_rx_pdev_mon_attach(struct ath12k *ar);
|
||||
int ath12k_dp_rx_peer_frag_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_id);
|
||||
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#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-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
#include "hal_tx.h"
|
||||
@@ -889,8 +889,8 @@ static u8 *ath12k_hw_wcn7850_rx_desc_mpdu_start_addr2(struct hal_rx_desc *desc)
|
||||
|
||||
static bool ath12k_hw_wcn7850_rx_desc_is_da_mcbc(struct hal_rx_desc *desc)
|
||||
{
|
||||
return __le16_to_cpu(desc->u.wcn7850.msdu_end.info5) &
|
||||
RX_MSDU_END_INFO5_DA_IS_MCBC;
|
||||
return __le32_to_cpu(desc->u.wcn7850.msdu_end.info13) &
|
||||
RX_MSDU_END_INFO13_MCAST_BCAST;
|
||||
}
|
||||
|
||||
static void ath12k_hw_wcn7850_rx_desc_get_dot11_hdr(struct hal_rx_desc *desc,
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_HAL_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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "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-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_HAL_RX_H
|
||||
@@ -61,6 +61,7 @@ enum hal_rx_bw {
|
||||
HAL_RX_BW_40MHZ,
|
||||
HAL_RX_BW_80MHZ,
|
||||
HAL_RX_BW_160MHZ,
|
||||
HAL_RX_BW_320MHZ,
|
||||
HAL_RX_BW_MAX,
|
||||
};
|
||||
|
||||
|
||||
@@ -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) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_HIF_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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
@@ -949,7 +949,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = {
|
||||
.rx_mac_buf_ring = true,
|
||||
.vdev_start_delay = true,
|
||||
|
||||
.interface_modes = BIT(NL80211_IFTYPE_STATION),
|
||||
.interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_AP),
|
||||
.supports_monitor = false,
|
||||
|
||||
.idle_ps = true,
|
||||
|
||||
@@ -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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef ATH12K_HW_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 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <net/mac80211.h>
|
||||
@@ -343,6 +343,9 @@ ath12k_mac_bw_to_mac80211_bw(enum ath12k_supported_bw bw)
|
||||
case ATH12K_BW_160:
|
||||
ret = RATE_INFO_BW_160;
|
||||
break;
|
||||
case ATH12K_BW_320:
|
||||
ret = RATE_INFO_BW_320;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -359,6 +362,8 @@ enum ath12k_supported_bw ath12k_mac_mac80211_bw_to_ath12k_bw(enum rate_info_bw b
|
||||
return ATH12K_BW_80;
|
||||
case RATE_INFO_BW_160:
|
||||
return ATH12K_BW_160;
|
||||
case RATE_INFO_BW_320:
|
||||
return ATH12K_BW_320;
|
||||
default:
|
||||
return ATH12K_BW_20;
|
||||
}
|
||||
@@ -3726,6 +3731,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);
|
||||
@@ -4987,7 +4995,7 @@ static void ath12k_mac_op_tx(struct ieee80211_hw *hw,
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to queue management frame %d\n",
|
||||
ret);
|
||||
ieee80211_free_txskb(ar->hw, skb);
|
||||
ieee80211_free_txskb(hw, skb);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -4995,7 +5003,7 @@ static void ath12k_mac_op_tx(struct ieee80211_hw *hw,
|
||||
ret = ath12k_dp_tx(ar, arvif, skb);
|
||||
if (ret) {
|
||||
ath12k_warn(ar->ab, "failed to transmit frame %d\n", ret);
|
||||
ieee80211_free_txskb(ar->hw, skb);
|
||||
ieee80211_free_txskb(hw, skb);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5596,7 +5604,7 @@ static int ath12k_mac_op_add_interface(struct ieee80211_hw *hw,
|
||||
goto err_peer_del;
|
||||
|
||||
param_id = WMI_VDEV_PARAM_RTS_THRESHOLD;
|
||||
param_value = ar->hw->wiphy->rts_threshold;
|
||||
param_value = hw->wiphy->rts_threshold;
|
||||
ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
|
||||
param_id, param_value);
|
||||
if (ret) {
|
||||
@@ -6258,10 +6266,11 @@ ath12k_mac_update_active_vif_chan(struct ath12k *ar,
|
||||
struct ieee80211_chanctx_conf *ctx)
|
||||
{
|
||||
struct ath12k_mac_change_chanctx_arg arg = { .ctx = ctx };
|
||||
struct ieee80211_hw *hw = ar->hw;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
ieee80211_iterate_active_interfaces_atomic(ar->hw,
|
||||
ieee80211_iterate_active_interfaces_atomic(hw,
|
||||
IEEE80211_IFACE_ITER_NORMAL,
|
||||
ath12k_mac_change_chanctx_cnt_iter,
|
||||
&arg);
|
||||
@@ -6272,7 +6281,7 @@ ath12k_mac_update_active_vif_chan(struct ath12k *ar,
|
||||
if (!arg.vifs)
|
||||
return;
|
||||
|
||||
ieee80211_iterate_active_interfaces_atomic(ar->hw,
|
||||
ieee80211_iterate_active_interfaces_atomic(hw,
|
||||
IEEE80211_IFACE_ITER_NORMAL,
|
||||
ath12k_mac_change_chanctx_fill_iter,
|
||||
&arg);
|
||||
@@ -6380,8 +6389,8 @@ ath12k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
|
||||
}
|
||||
|
||||
if (ab->hw_params->vdev_start_delay &&
|
||||
(arvif->vdev_type == WMI_VDEV_TYPE_AP ||
|
||||
arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)) {
|
||||
arvif->vdev_type != WMI_VDEV_TYPE_AP &&
|
||||
arvif->vdev_type != WMI_VDEV_TYPE_MONITOR) {
|
||||
param.vdev_id = arvif->vdev_id;
|
||||
param.peer_type = WMI_PEER_TYPE_DEFAULT;
|
||||
param.peer_addr = ar->mac_addr;
|
||||
@@ -6836,7 +6845,7 @@ ath12k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
|
||||
arvif->vdev_id, ret);
|
||||
return ret;
|
||||
}
|
||||
ieee80211_iterate_stations_atomic(ar->hw,
|
||||
ieee80211_iterate_stations_atomic(hw,
|
||||
ath12k_mac_disable_peer_fixed_rate,
|
||||
arvif);
|
||||
} else if (ath12k_mac_bitrate_mask_get_single_nss(ar, band, mask,
|
||||
@@ -6882,14 +6891,14 @@ ath12k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ieee80211_iterate_stations_atomic(ar->hw,
|
||||
ieee80211_iterate_stations_atomic(hw,
|
||||
ath12k_mac_disable_peer_fixed_rate,
|
||||
arvif);
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
arvif->bitrate_mask = *mask;
|
||||
ieee80211_iterate_stations_atomic(ar->hw,
|
||||
ieee80211_iterate_stations_atomic(hw,
|
||||
ath12k_mac_set_bitrate_mask_iter,
|
||||
arvif);
|
||||
|
||||
@@ -6927,7 +6936,7 @@ ath12k_mac_op_reconfig_complete(struct ieee80211_hw *hw,
|
||||
ath12k_warn(ar->ab, "pdev %d successfully recovered\n",
|
||||
ar->pdev->pdev_id);
|
||||
ar->state = ATH12K_STATE_ON;
|
||||
ieee80211_wake_queues(ar->hw);
|
||||
ieee80211_wake_queues(hw);
|
||||
|
||||
if (ab->is_reset) {
|
||||
recovery_count = atomic_inc_return(&ab->recovery_count);
|
||||
@@ -7151,6 +7160,7 @@ static u32 ath12k_get_phy_id(struct ath12k *ar, u32 band)
|
||||
static int ath12k_mac_setup_channels_rates(struct ath12k *ar,
|
||||
u32 supported_bands)
|
||||
{
|
||||
struct ieee80211_hw *hw = ar->hw;
|
||||
struct ieee80211_supported_band *band;
|
||||
struct ath12k_wmi_hal_reg_capabilities_ext_arg *reg_cap;
|
||||
void *channels;
|
||||
@@ -7176,7 +7186,7 @@ static int ath12k_mac_setup_channels_rates(struct ath12k *ar,
|
||||
band->channels = channels;
|
||||
band->n_bitrates = ath12k_g_rates_size;
|
||||
band->bitrates = ath12k_g_rates;
|
||||
ar->hw->wiphy->bands[NL80211_BAND_2GHZ] = band;
|
||||
hw->wiphy->bands[NL80211_BAND_2GHZ] = band;
|
||||
|
||||
if (ar->ab->hw_params->single_pdev_only) {
|
||||
phy_id = ath12k_get_phy_id(ar, WMI_HOST_WLAN_2G_CAP);
|
||||
@@ -7203,7 +7213,7 @@ static int ath12k_mac_setup_channels_rates(struct ath12k *ar,
|
||||
band->channels = channels;
|
||||
band->n_bitrates = ath12k_a_rates_size;
|
||||
band->bitrates = ath12k_a_rates;
|
||||
ar->hw->wiphy->bands[NL80211_BAND_6GHZ] = band;
|
||||
hw->wiphy->bands[NL80211_BAND_6GHZ] = band;
|
||||
ath12k_mac_update_ch_list(ar, band,
|
||||
reg_cap->low_5ghz_chan,
|
||||
reg_cap->high_5ghz_chan);
|
||||
@@ -7225,7 +7235,7 @@ static int ath12k_mac_setup_channels_rates(struct ath12k *ar,
|
||||
band->channels = channels;
|
||||
band->n_bitrates = ath12k_a_rates_size;
|
||||
band->bitrates = ath12k_a_rates;
|
||||
ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band;
|
||||
hw->wiphy->bands[NL80211_BAND_5GHZ] = band;
|
||||
|
||||
if (ar->ab->hw_params->single_pdev_only) {
|
||||
phy_id = ath12k_get_phy_id(ar, WMI_HOST_WLAN_5G_CAP);
|
||||
@@ -7244,6 +7254,8 @@ static int ath12k_mac_setup_channels_rates(struct ath12k *ar,
|
||||
static int ath12k_mac_setup_iface_combinations(struct ath12k *ar)
|
||||
{
|
||||
struct ath12k_base *ab = ar->ab;
|
||||
struct ieee80211_hw *hw = ar->hw;
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
struct ieee80211_iface_combination *combinations;
|
||||
struct ieee80211_iface_limit *limits;
|
||||
int n_limits, max_interfaces;
|
||||
@@ -7294,8 +7306,8 @@ static int ath12k_mac_setup_iface_combinations(struct ath12k *ar)
|
||||
BIT(NL80211_CHAN_WIDTH_40) |
|
||||
BIT(NL80211_CHAN_WIDTH_80);
|
||||
|
||||
ar->hw->wiphy->iface_combinations = combinations;
|
||||
ar->hw->wiphy->n_iface_combinations = 1;
|
||||
wiphy->iface_combinations = combinations;
|
||||
wiphy->n_iface_combinations = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -7339,9 +7351,12 @@ static const struct wiphy_iftype_ext_capab ath12k_iftypes_ext_capa[] = {
|
||||
|
||||
static void __ath12k_mac_unregister(struct ath12k *ar)
|
||||
{
|
||||
struct ieee80211_hw *hw = ar->hw;
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
|
||||
cancel_work_sync(&ar->regd_update_work);
|
||||
|
||||
ieee80211_unregister_hw(ar->hw);
|
||||
ieee80211_unregister_hw(hw);
|
||||
|
||||
idr_for_each(&ar->txmgmt_idr, ath12k_mac_tx_mgmt_pending_free, ar);
|
||||
idr_destroy(&ar->txmgmt_idr);
|
||||
@@ -7350,10 +7365,10 @@ static void __ath12k_mac_unregister(struct ath12k *ar)
|
||||
kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels);
|
||||
kfree(ar->mac.sbands[NL80211_BAND_6GHZ].channels);
|
||||
|
||||
kfree(ar->hw->wiphy->iface_combinations[0].limits);
|
||||
kfree(ar->hw->wiphy->iface_combinations);
|
||||
kfree(wiphy->iface_combinations[0].limits);
|
||||
kfree(wiphy->iface_combinations);
|
||||
|
||||
SET_IEEE80211_DEV(ar->hw, NULL);
|
||||
SET_IEEE80211_DEV(hw, NULL);
|
||||
}
|
||||
|
||||
void ath12k_mac_unregister(struct ath12k_base *ab)
|
||||
@@ -7375,6 +7390,8 @@ void ath12k_mac_unregister(struct ath12k_base *ab)
|
||||
static int __ath12k_mac_register(struct ath12k *ar)
|
||||
{
|
||||
struct ath12k_base *ab = ar->ab;
|
||||
struct ieee80211_hw *hw = ar->hw;
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
struct ath12k_pdev_cap *cap = &ar->pdev->cap;
|
||||
static const u32 cipher_suites[] = {
|
||||
WLAN_CIPHER_SUITE_TKIP,
|
||||
@@ -7392,9 +7409,9 @@ static int __ath12k_mac_register(struct ath12k *ar)
|
||||
|
||||
ath12k_pdev_caps_update(ar);
|
||||
|
||||
SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
|
||||
SET_IEEE80211_PERM_ADDR(hw, ar->mac_addr);
|
||||
|
||||
SET_IEEE80211_DEV(ar->hw, ab->dev);
|
||||
SET_IEEE80211_DEV(hw, ab->dev);
|
||||
|
||||
ret = ath12k_mac_setup_channels_rates(ar,
|
||||
cap->supported_bands);
|
||||
@@ -7410,103 +7427,102 @@ static int __ath12k_mac_register(struct ath12k *ar)
|
||||
goto err_free_channels;
|
||||
}
|
||||
|
||||
ar->hw->wiphy->available_antennas_rx = cap->rx_chain_mask;
|
||||
ar->hw->wiphy->available_antennas_tx = cap->tx_chain_mask;
|
||||
wiphy->available_antennas_rx = cap->rx_chain_mask;
|
||||
wiphy->available_antennas_tx = cap->tx_chain_mask;
|
||||
|
||||
ar->hw->wiphy->interface_modes = ab->hw_params->interface_modes;
|
||||
wiphy->interface_modes = ab->hw_params->interface_modes;
|
||||
|
||||
if (ar->hw->wiphy->bands[NL80211_BAND_2GHZ] &&
|
||||
ar->hw->wiphy->bands[NL80211_BAND_5GHZ] &&
|
||||
ar->hw->wiphy->bands[NL80211_BAND_6GHZ])
|
||||
ieee80211_hw_set(ar->hw, SINGLE_SCAN_ON_ALL_BANDS);
|
||||
if (wiphy->bands[NL80211_BAND_2GHZ] &&
|
||||
wiphy->bands[NL80211_BAND_5GHZ] &&
|
||||
wiphy->bands[NL80211_BAND_6GHZ])
|
||||
ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
|
||||
|
||||
ieee80211_hw_set(ar->hw, SIGNAL_DBM);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_PS);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
|
||||
ieee80211_hw_set(ar->hw, MFP_CAPABLE);
|
||||
ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
|
||||
ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
|
||||
ieee80211_hw_set(ar->hw, AP_LINK_PS);
|
||||
ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
|
||||
ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
|
||||
ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
|
||||
ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
|
||||
ieee80211_hw_set(ar->hw, REPORTS_LOW_ACK);
|
||||
ieee80211_hw_set(hw, SIGNAL_DBM);
|
||||
ieee80211_hw_set(hw, SUPPORTS_PS);
|
||||
ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
|
||||
ieee80211_hw_set(hw, MFP_CAPABLE);
|
||||
ieee80211_hw_set(hw, REPORTS_TX_ACK_STATUS);
|
||||
ieee80211_hw_set(hw, HAS_RATE_CONTROL);
|
||||
ieee80211_hw_set(hw, AP_LINK_PS);
|
||||
ieee80211_hw_set(hw, SPECTRUM_MGMT);
|
||||
ieee80211_hw_set(hw, CONNECTION_MONITOR);
|
||||
ieee80211_hw_set(hw, SUPPORTS_PER_STA_GTK);
|
||||
ieee80211_hw_set(hw, CHANCTX_STA_CSA);
|
||||
ieee80211_hw_set(hw, QUEUE_CONTROL);
|
||||
ieee80211_hw_set(hw, SUPPORTS_TX_FRAG);
|
||||
ieee80211_hw_set(hw, REPORTS_LOW_ACK);
|
||||
|
||||
if (ht_cap & WMI_HT_CAP_ENABLED) {
|
||||
ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
|
||||
ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_REORDERING_BUFFER);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_AMSDU_IN_AMPDU);
|
||||
ieee80211_hw_set(ar->hw, USES_RSS);
|
||||
ieee80211_hw_set(hw, AMPDU_AGGREGATION);
|
||||
ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW);
|
||||
ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
|
||||
ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU);
|
||||
ieee80211_hw_set(hw, USES_RSS);
|
||||
}
|
||||
|
||||
ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
|
||||
ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
|
||||
wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
|
||||
wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
|
||||
|
||||
/* TODO: Check if HT capability advertised from firmware is different
|
||||
* for each band for a dual band capable radio. It will be tricky to
|
||||
* handle it when the ht capability different for each band.
|
||||
*/
|
||||
if (ht_cap & WMI_HT_CAP_DYNAMIC_SMPS)
|
||||
ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
|
||||
wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
|
||||
|
||||
ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
|
||||
ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
|
||||
wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
|
||||
wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
|
||||
|
||||
ar->hw->max_listen_interval = ATH12K_MAX_HW_LISTEN_INTERVAL;
|
||||
hw->max_listen_interval = ATH12K_MAX_HW_LISTEN_INTERVAL;
|
||||
|
||||
ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
|
||||
ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
|
||||
ar->hw->wiphy->max_remain_on_channel_duration = 5000;
|
||||
wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
|
||||
wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
|
||||
wiphy->max_remain_on_channel_duration = 5000;
|
||||
|
||||
ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
|
||||
ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE |
|
||||
wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
|
||||
wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE |
|
||||
NL80211_FEATURE_AP_SCAN;
|
||||
|
||||
ar->max_num_stations = TARGET_NUM_STATIONS;
|
||||
ar->max_num_peers = TARGET_NUM_PEERS_PDEV;
|
||||
|
||||
ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
|
||||
wiphy->max_ap_assoc_sta = ar->max_num_stations;
|
||||
|
||||
ar->hw->queues = ATH12K_HW_MAX_QUEUES;
|
||||
ar->hw->wiphy->tx_queue_len = ATH12K_QUEUE_LEN;
|
||||
ar->hw->offchannel_tx_hw_queue = ATH12K_HW_MAX_QUEUES - 1;
|
||||
ar->hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE;
|
||||
hw->queues = ATH12K_HW_MAX_QUEUES;
|
||||
wiphy->tx_queue_len = ATH12K_QUEUE_LEN;
|
||||
hw->offchannel_tx_hw_queue = ATH12K_HW_MAX_QUEUES - 1;
|
||||
hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE;
|
||||
|
||||
ar->hw->vif_data_size = sizeof(struct ath12k_vif);
|
||||
ar->hw->sta_data_size = sizeof(struct ath12k_sta);
|
||||
hw->vif_data_size = sizeof(struct ath12k_vif);
|
||||
hw->sta_data_size = sizeof(struct ath12k_sta);
|
||||
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_STA_TX_PWR);
|
||||
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
||||
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_STA_TX_PWR);
|
||||
|
||||
ar->hw->wiphy->cipher_suites = cipher_suites;
|
||||
ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
||||
wiphy->cipher_suites = cipher_suites;
|
||||
wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
||||
|
||||
ar->hw->wiphy->iftype_ext_capab = ath12k_iftypes_ext_capa;
|
||||
ar->hw->wiphy->num_iftype_ext_capab =
|
||||
ARRAY_SIZE(ath12k_iftypes_ext_capa);
|
||||
wiphy->iftype_ext_capab = ath12k_iftypes_ext_capa;
|
||||
wiphy->num_iftype_ext_capab = ARRAY_SIZE(ath12k_iftypes_ext_capa);
|
||||
|
||||
if (ar->supports_6ghz) {
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
wiphy_ext_feature_set(wiphy,
|
||||
NL80211_EXT_FEATURE_FILS_DISCOVERY);
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
wiphy_ext_feature_set(wiphy,
|
||||
NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
|
||||
}
|
||||
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_PUNCT);
|
||||
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_PUNCT);
|
||||
|
||||
ath12k_reg_init(ar);
|
||||
ath12k_reg_init(hw);
|
||||
|
||||
if (!test_bit(ATH12K_FLAG_RAW_MODE, &ab->dev_flags)) {
|
||||
ar->hw->netdev_features = NETIF_F_HW_CSUM;
|
||||
ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
|
||||
ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
|
||||
hw->netdev_features = NETIF_F_HW_CSUM;
|
||||
ieee80211_hw_set(hw, SW_CRYPTO_CONTROL);
|
||||
ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
|
||||
}
|
||||
|
||||
ret = ieee80211_register_hw(ar->hw);
|
||||
ret = ieee80211_register_hw(hw);
|
||||
if (ret) {
|
||||
ath12k_err(ar->ab, "ieee80211 registration failed: %d\n", ret);
|
||||
goto err_free_if_combs;
|
||||
@@ -7518,7 +7534,7 @@ static int __ath12k_mac_register(struct ath12k *ar)
|
||||
* while. But that time is so short and in practise it make
|
||||
* a difference in real life.
|
||||
*/
|
||||
ar->hw->wiphy->interface_modes &= ~BIT(NL80211_IFTYPE_MONITOR);
|
||||
wiphy->interface_modes &= ~BIT(NL80211_IFTYPE_MONITOR);
|
||||
|
||||
/* Apply the regd received during initialization */
|
||||
ret = ath12k_regd_update(ar, true);
|
||||
@@ -7530,11 +7546,11 @@ static int __ath12k_mac_register(struct ath12k *ar)
|
||||
return 0;
|
||||
|
||||
err_unregister_hw:
|
||||
ieee80211_unregister_hw(ar->hw);
|
||||
ieee80211_unregister_hw(hw);
|
||||
|
||||
err_free_if_combs:
|
||||
kfree(ar->hw->wiphy->iface_combinations[0].limits);
|
||||
kfree(ar->hw->wiphy->iface_combinations);
|
||||
kfree(wiphy->iface_combinations[0].limits);
|
||||
kfree(wiphy->iface_combinations);
|
||||
|
||||
err_free_channels:
|
||||
kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels);
|
||||
@@ -7542,7 +7558,7 @@ static int __ath12k_mac_register(struct ath12k *ar)
|
||||
kfree(ar->mac.sbands[NL80211_BAND_6GHZ].channels);
|
||||
|
||||
err:
|
||||
SET_IEEE80211_DEV(ar->hw, NULL);
|
||||
SET_IEEE80211_DEV(hw, NULL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user