mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-04 18:49:41 +00:00

With previous patch "wifi: ath11k: move update channel list from update reg worker to reg notifier", ath11k_reg_update_chan_list() will be called during reg_process_self_managed_hint(). reg_process_self_managed_hint() will hold rtnl_lock all the time. But ath11k_reg_update_chan_list() may increase the occupation time of rtnl_lock, because when wait flag is set, wait_for_completion_timeout() will be called during 11d/hw scan. Should minimize the occupation time of rtnl_lock as much as possible to avoid interfering with rest of the system. So move the update channel list operation to a new worker, so that wait_for_completion_timeout() won't be called and will not increase the occupation time of rtnl_lock. Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3 Signed-off-by: Wen Gong <quic_wgong@quicinc.com> Co-developed-by: Kang Yang <quic_kangyang@quicinc.com> Signed-off-by: Kang Yang <quic_kangyang@quicinc.com> Reviewed-by: Aditya Kumar Singh <quic_adisi@quicinc.com> Link: https://patch.msgid.link/20250117061737.1921-3-quic_kangyang@quicinc.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
51 lines
1.5 KiB
C
51 lines
1.5 KiB
C
/* 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.
|
|
*/
|
|
|
|
#ifndef ATH11K_REG_H
|
|
#define ATH11K_REG_H
|
|
|
|
#include <linux/kernel.h>
|
|
#include <net/regulatory.h>
|
|
|
|
struct ath11k_base;
|
|
struct ath11k;
|
|
|
|
/* DFS regdomains supported by Firmware */
|
|
enum ath11k_dfs_region {
|
|
ATH11K_DFS_REG_UNSET,
|
|
ATH11K_DFS_REG_FCC,
|
|
ATH11K_DFS_REG_ETSI,
|
|
ATH11K_DFS_REG_MKK,
|
|
ATH11K_DFS_REG_CN,
|
|
ATH11K_DFS_REG_KR,
|
|
ATH11K_DFS_REG_MKK_N,
|
|
ATH11K_DFS_REG_UNDEF,
|
|
};
|
|
|
|
/* Phy bitmaps */
|
|
#define ATH11K_REG_PHY_BITMAP_NO11AX BIT(5)
|
|
|
|
/* ATH11K Regulatory API's */
|
|
void ath11k_reg_init(struct ath11k *ar);
|
|
void ath11k_reg_reset_info(struct cur_regulatory_info *reg_info);
|
|
void ath11k_reg_free(struct ath11k_base *ab);
|
|
void ath11k_regd_update_work(struct work_struct *work);
|
|
void ath11k_regd_update_chan_list_work(struct work_struct *work);
|
|
struct ieee80211_regdomain *
|
|
ath11k_reg_build_regd(struct ath11k_base *ab,
|
|
struct cur_regulatory_info *reg_info, bool intersect,
|
|
enum wmi_vdev_type vdev_type,
|
|
enum ieee80211_ap_reg_power power_type);
|
|
int ath11k_regd_update(struct ath11k *ar);
|
|
int ath11k_reg_update_chan_list(struct ath11k *ar, bool wait);
|
|
enum wmi_reg_6ghz_ap_type
|
|
ath11k_reg_ap_pwr_convert(enum ieee80211_ap_reg_power power_type);
|
|
int ath11k_reg_handle_chan_list(struct ath11k_base *ab,
|
|
struct cur_regulatory_info *reg_info,
|
|
enum ieee80211_ap_reg_power power_type);
|
|
int ath11k_reg_set_cc(struct ath11k *ar);
|
|
#endif
|