Path: blob/main/sys/contrib/dev/athk/ath12k/reg.h
106294 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.3* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.4*/56#ifndef ATH12K_REG_H7#define ATH12K_REG_H89#include <linux/kernel.h>10#include <net/regulatory.h>1112struct ath12k_base;13struct ath12k;1415/* DFS regdomains supported by Firmware */16enum ath12k_dfs_region {17ATH12K_DFS_REG_UNSET,18ATH12K_DFS_REG_FCC,19ATH12K_DFS_REG_ETSI,20ATH12K_DFS_REG_MKK,21ATH12K_DFS_REG_CN,22ATH12K_DFS_REG_KR,23ATH12K_DFS_REG_MKK_N,24ATH12K_DFS_REG_UNDEF,25};2627enum ath12k_reg_cc_code {28REG_SET_CC_STATUS_PASS = 0,29REG_CURRENT_ALPHA2_NOT_FOUND = 1,30REG_INIT_ALPHA2_NOT_FOUND = 2,31REG_SET_CC_CHANGE_NOT_ALLOWED = 3,32REG_SET_CC_STATUS_NO_MEMORY = 4,33REG_SET_CC_STATUS_FAIL = 5,34};3536struct ath12k_reg_rule {37u16 start_freq;38u16 end_freq;39u16 max_bw;40u8 reg_power;41u8 ant_gain;42u16 flags;43bool psd_flag;44u16 psd_eirp;45};4647struct ath12k_reg_info {48enum ath12k_reg_cc_code status_code;49u8 num_phy;50u8 phy_id;51u16 reg_dmn_pair;52u16 ctry_code;53u8 alpha2[REG_ALPHA2_LEN + 1];54u32 dfs_region;55u32 phybitmap;56bool is_ext_reg_event;57u32 min_bw_2g;58u32 max_bw_2g;59u32 min_bw_5g;60u32 max_bw_5g;61u32 num_2g_reg_rules;62u32 num_5g_reg_rules;63struct ath12k_reg_rule *reg_rules_2g_ptr;64struct ath12k_reg_rule *reg_rules_5g_ptr;65enum wmi_reg_6g_client_type client_type;66bool rnr_tpe_usable;67bool unspecified_ap_usable;68/* TODO: All 6G related info can be stored only for required69* combination instead of all types, to optimize memory usage.70*/71u8 domain_code_6g_ap[WMI_REG_CURRENT_MAX_AP_TYPE];72u8 domain_code_6g_client[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];73u32 domain_code_6g_super_id;74u32 min_bw_6g_ap[WMI_REG_CURRENT_MAX_AP_TYPE];75u32 max_bw_6g_ap[WMI_REG_CURRENT_MAX_AP_TYPE];76u32 min_bw_6g_client[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];77u32 max_bw_6g_client[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];78u32 num_6g_reg_rules_ap[WMI_REG_CURRENT_MAX_AP_TYPE];79u32 num_6g_reg_rules_cl[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];80struct ath12k_reg_rule *reg_rules_6g_ap_ptr[WMI_REG_CURRENT_MAX_AP_TYPE];81struct ath12k_reg_rule *reg_rules_6g_client_ptr82[WMI_REG_CURRENT_MAX_AP_TYPE][WMI_REG_MAX_CLIENT_TYPE];83};8485void ath12k_reg_init(struct ath12k *ar);86void ath12k_reg_free(struct ath12k_base *ab);87void ath12k_regd_update_work(struct work_struct *work);88struct ieee80211_regdomain *ath12k_reg_build_regd(struct ath12k_base *ab,89struct ath12k_reg_info *reg_info,90bool intersect);91int ath12k_regd_update(struct ath12k *ar, bool init);92int ath12k_reg_update_chan_list(struct ath12k *ar);9394#endif959697