xref: /wlan-driver/qca-wifi-host-cmn/umac/regulatory/dispatcher/src/wlan_reg_services_api.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  *
6*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
7*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
8*5113495bSYour Name  * above copyright notice and this permission notice appear in all
9*5113495bSYour Name  * copies.
10*5113495bSYour Name  *
11*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
19*5113495bSYour Name  */
20*5113495bSYour Name 
21*5113495bSYour Name /**
22*5113495bSYour Name  * DOC: wlan_reg_services_api.c
23*5113495bSYour Name  *      contains regulatory service functions
24*5113495bSYour Name  */
25*5113495bSYour Name 
26*5113495bSYour Name #include <qdf_status.h>
27*5113495bSYour Name #include <qdf_types.h>
28*5113495bSYour Name #include <qdf_module.h>
29*5113495bSYour Name #include <wlan_cmn.h>
30*5113495bSYour Name #include <reg_services_public_struct.h>
31*5113495bSYour Name #include <wlan_reg_services_api.h>
32*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
33*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
34*5113495bSYour Name #include "../../core/src/reg_priv_objs.h"
35*5113495bSYour Name #include "../../core/src/reg_utils.h"
36*5113495bSYour Name #include "../../core/src/reg_services_common.h"
37*5113495bSYour Name #include "../../core/src/reg_db.h"
38*5113495bSYour Name #include "../../core/src/reg_db_parser.h"
39*5113495bSYour Name #include <../../core/src/reg_build_chan_list.h>
40*5113495bSYour Name #include <../../core/src/reg_opclass.h>
41*5113495bSYour Name #include <../../core/src/reg_callbacks.h>
42*5113495bSYour Name #include <../../core/src/reg_offload_11d_scan.h>
43*5113495bSYour Name #include <wlan_objmgr_global_obj.h>
44*5113495bSYour Name 
wlan_reg_read_default_country(struct wlan_objmgr_psoc * psoc,uint8_t * country)45*5113495bSYour Name QDF_STATUS wlan_reg_read_default_country(struct wlan_objmgr_psoc *psoc,
46*5113495bSYour Name 					 uint8_t *country)
47*5113495bSYour Name {
48*5113495bSYour Name 	/*
49*5113495bSYour Name 	 * Get the default country information
50*5113495bSYour Name 	 */
51*5113495bSYour Name 	return reg_read_default_country(psoc, country);
52*5113495bSYour Name }
53*5113495bSYour Name 
wlan_get_next_lower_bandwidth(enum phy_ch_width ch_width)54*5113495bSYour Name enum phy_ch_width wlan_get_next_lower_bandwidth(enum phy_ch_width ch_width)
55*5113495bSYour Name {
56*5113495bSYour Name 	return get_next_lower_bandwidth(ch_width);
57*5113495bSYour Name }
58*5113495bSYour Name 
wlan_reg_read_current_country(struct wlan_objmgr_psoc * psoc,uint8_t * country)59*5113495bSYour Name QDF_STATUS wlan_reg_read_current_country(struct wlan_objmgr_psoc *psoc,
60*5113495bSYour Name 					 uint8_t *country)
61*5113495bSYour Name {
62*5113495bSYour Name 	/*
63*5113495bSYour Name 	 * Get the current country information
64*5113495bSYour Name 	 */
65*5113495bSYour Name 	return reg_read_current_country(psoc, country);
66*5113495bSYour Name }
67*5113495bSYour Name 
wlan_reg_get_max_5g_bw_from_country_code(struct wlan_objmgr_pdev * pdev,uint16_t cc,uint16_t * max_bw_5g)68*5113495bSYour Name QDF_STATUS wlan_reg_get_max_5g_bw_from_country_code(
69*5113495bSYour Name 					struct wlan_objmgr_pdev *pdev,
70*5113495bSYour Name 					uint16_t cc,
71*5113495bSYour Name 					uint16_t *max_bw_5g)
72*5113495bSYour Name {
73*5113495bSYour Name 	/*
74*5113495bSYour Name 	 * Get the max 5G bandwidth from country code
75*5113495bSYour Name 	 */
76*5113495bSYour Name 	return reg_get_max_5g_bw_from_country_code(pdev, cc, max_bw_5g);
77*5113495bSYour Name }
78*5113495bSYour Name 
wlan_reg_get_max_5g_bw_from_regdomain(struct wlan_objmgr_pdev * pdev,uint16_t regdmn,uint16_t * max_bw_5g)79*5113495bSYour Name QDF_STATUS wlan_reg_get_max_5g_bw_from_regdomain(
80*5113495bSYour Name 					struct wlan_objmgr_pdev *pdev,
81*5113495bSYour Name 					uint16_t regdmn,
82*5113495bSYour Name 					uint16_t *max_bw_5g)
83*5113495bSYour Name {
84*5113495bSYour Name 	/*
85*5113495bSYour Name 	 * Get the max 5G bandwidth from regdomain pair value
86*5113495bSYour Name 	 */
87*5113495bSYour Name 	return reg_get_max_5g_bw_from_regdomain(pdev, regdmn, max_bw_5g);
88*5113495bSYour Name }
89*5113495bSYour Name 
wlan_reg_get_max_bw_5G_for_fo(struct wlan_objmgr_pdev * pdev)90*5113495bSYour Name QDF_STATUS wlan_reg_get_max_bw_5G_for_fo(struct wlan_objmgr_pdev *pdev)
91*5113495bSYour Name {
92*5113495bSYour Name 	return reg_get_max_bw_5G_for_fo(pdev);
93*5113495bSYour Name }
94*5113495bSYour Name 
wlan_reg_is_regdb_offloaded(struct wlan_objmgr_psoc * psoc)95*5113495bSYour Name bool wlan_reg_is_regdb_offloaded(struct wlan_objmgr_psoc *psoc)
96*5113495bSYour Name {
97*5113495bSYour Name 	return reg_is_regdb_offloaded(psoc);
98*5113495bSYour Name }
99*5113495bSYour Name 
wlan_reg_get_pwrmode_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list,enum supported_6g_pwr_types in_6g_pwr_mode)100*5113495bSYour Name QDF_STATUS wlan_reg_get_pwrmode_chan_list(struct wlan_objmgr_pdev *pdev,
101*5113495bSYour Name 					  struct regulatory_channel *chan_list,
102*5113495bSYour Name 					  enum supported_6g_pwr_types
103*5113495bSYour Name 					  in_6g_pwr_mode)
104*5113495bSYour Name {
105*5113495bSYour Name 	return reg_get_pwrmode_chan_list(pdev, chan_list, in_6g_pwr_mode);
106*5113495bSYour Name }
107*5113495bSYour Name 
108*5113495bSYour Name qdf_export_symbol(wlan_reg_get_pwrmode_chan_list);
109*5113495bSYour Name 
110*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
111*5113495bSYour Name QDF_STATUS
wlan_reg_get_best_6g_power_type(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type * pwr_type_6g,enum reg_6g_ap_type ap_pwr_type,uint32_t chan_freq)112*5113495bSYour Name wlan_reg_get_best_6g_power_type(struct wlan_objmgr_psoc *psoc,
113*5113495bSYour Name 				struct wlan_objmgr_pdev *pdev,
114*5113495bSYour Name 				enum reg_6g_ap_type *pwr_type_6g,
115*5113495bSYour Name 				enum reg_6g_ap_type ap_pwr_type,
116*5113495bSYour Name 				uint32_t chan_freq)
117*5113495bSYour Name {
118*5113495bSYour Name 	return reg_get_best_6g_power_type(psoc, pdev, pwr_type_6g,
119*5113495bSYour Name 					  ap_pwr_type, chan_freq);
120*5113495bSYour Name }
121*5113495bSYour Name #endif
122*5113495bSYour Name 
wlan_reg_get_dfs_region(struct wlan_objmgr_pdev * pdev,enum dfs_reg * dfs_reg)123*5113495bSYour Name QDF_STATUS wlan_reg_get_dfs_region(struct wlan_objmgr_pdev *pdev,
124*5113495bSYour Name 			     enum dfs_reg *dfs_reg)
125*5113495bSYour Name {
126*5113495bSYour Name 	/*
127*5113495bSYour Name 	 * Get the current dfs region
128*5113495bSYour Name 	 */
129*5113495bSYour Name 	reg_get_current_dfs_region(pdev, dfs_reg);
130*5113495bSYour Name 
131*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
132*5113495bSYour Name }
133*5113495bSYour Name 
wlan_reg_is_chan_disabled_and_not_nol(struct regulatory_channel * chan)134*5113495bSYour Name bool wlan_reg_is_chan_disabled_and_not_nol(struct regulatory_channel *chan)
135*5113495bSYour Name {
136*5113495bSYour Name 	return reg_is_chan_disabled_and_not_nol(chan);
137*5113495bSYour Name }
138*5113495bSYour Name 
wlan_reg_get_current_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)139*5113495bSYour Name QDF_STATUS wlan_reg_get_current_chan_list(struct wlan_objmgr_pdev *pdev,
140*5113495bSYour Name 		struct regulatory_channel *chan_list)
141*5113495bSYour Name {
142*5113495bSYour Name 	return reg_get_current_chan_list(pdev, chan_list);
143*5113495bSYour Name }
144*5113495bSYour Name 
145*5113495bSYour Name qdf_export_symbol(wlan_reg_get_current_chan_list);
146*5113495bSYour Name 
wlan_reg_is_freq_enabled(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_mode)147*5113495bSYour Name bool wlan_reg_is_freq_enabled(struct wlan_objmgr_pdev *pdev,
148*5113495bSYour Name 			      qdf_freq_t freq,
149*5113495bSYour Name 			      enum supported_6g_pwr_types in_6g_pwr_mode)
150*5113495bSYour Name {
151*5113495bSYour Name 	return reg_is_freq_enabled(pdev, freq, in_6g_pwr_mode);
152*5113495bSYour Name }
153*5113495bSYour Name 
wlan_reg_is_freq_idx_enabled(struct wlan_objmgr_pdev * pdev,enum channel_enum freq_idx,enum supported_6g_pwr_types in_6g_pwr_mode)154*5113495bSYour Name bool wlan_reg_is_freq_idx_enabled(struct wlan_objmgr_pdev *pdev,
155*5113495bSYour Name 				  enum channel_enum freq_idx,
156*5113495bSYour Name 				  enum supported_6g_pwr_types in_6g_pwr_mode)
157*5113495bSYour Name {
158*5113495bSYour Name 	return reg_is_freq_idx_enabled(pdev, freq_idx, in_6g_pwr_mode);
159*5113495bSYour Name }
160*5113495bSYour Name 
161*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_get_secondary_current_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)162*5113495bSYour Name QDF_STATUS wlan_reg_get_secondary_current_chan_list(
163*5113495bSYour Name 					struct wlan_objmgr_pdev *pdev,
164*5113495bSYour Name 					struct regulatory_channel *chan_list)
165*5113495bSYour Name {
166*5113495bSYour Name 	return reg_get_secondary_current_chan_list(pdev, chan_list);
167*5113495bSYour Name }
168*5113495bSYour Name #endif
169*5113495bSYour Name 
170*5113495bSYour Name #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ)
wlan_reg_get_6g_afc_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)171*5113495bSYour Name QDF_STATUS wlan_reg_get_6g_afc_chan_list(struct wlan_objmgr_pdev *pdev,
172*5113495bSYour Name 					 struct regulatory_channel *chan_list)
173*5113495bSYour Name {
174*5113495bSYour Name 	return reg_get_6g_afc_chan_list(pdev, chan_list);
175*5113495bSYour Name }
176*5113495bSYour Name 
177*5113495bSYour Name qdf_export_symbol(wlan_reg_get_6g_afc_chan_list);
178*5113495bSYour Name 
179*5113495bSYour Name QDF_STATUS
wlan_reg_get_6g_afc_mas_chan_list(struct wlan_objmgr_pdev * pdev,struct regulatory_channel * chan_list)180*5113495bSYour Name wlan_reg_get_6g_afc_mas_chan_list(struct wlan_objmgr_pdev *pdev,
181*5113495bSYour Name 				  struct regulatory_channel *chan_list)
182*5113495bSYour Name {
183*5113495bSYour Name 	return reg_get_6g_afc_mas_chan_list(pdev, chan_list);
184*5113495bSYour Name }
185*5113495bSYour Name 
186*5113495bSYour Name qdf_export_symbol(wlan_reg_get_6g_afc_mas_chan_list);
187*5113495bSYour Name #endif
188*5113495bSYour Name 
wlan_reg_get_bw_value(enum phy_ch_width bw)189*5113495bSYour Name uint16_t wlan_reg_get_bw_value(enum phy_ch_width bw)
190*5113495bSYour Name {
191*5113495bSYour Name 	return reg_get_bw_value(bw);
192*5113495bSYour Name }
193*5113495bSYour Name 
194*5113495bSYour Name qdf_export_symbol(wlan_reg_get_bw_value);
195*5113495bSYour Name 
wlan_reg_set_dfs_region(struct wlan_objmgr_pdev * pdev,enum dfs_reg dfs_reg)196*5113495bSYour Name void wlan_reg_set_dfs_region(struct wlan_objmgr_pdev *pdev,
197*5113495bSYour Name 			     enum dfs_reg dfs_reg)
198*5113495bSYour Name {
199*5113495bSYour Name 	reg_set_dfs_region(pdev, dfs_reg);
200*5113495bSYour Name }
201*5113495bSYour Name 
wlan_reg_get_domain_from_country_code(v_REGDOMAIN_t * reg_domain_ptr,const uint8_t * country_alpha2,enum country_src source)202*5113495bSYour Name QDF_STATUS wlan_reg_get_domain_from_country_code(v_REGDOMAIN_t *reg_domain_ptr,
203*5113495bSYour Name 		const uint8_t *country_alpha2, enum country_src source)
204*5113495bSYour Name {
205*5113495bSYour Name 
206*5113495bSYour Name 	return reg_get_domain_from_country_code(reg_domain_ptr,
207*5113495bSYour Name 			country_alpha2, source);
208*5113495bSYour Name }
209*5113495bSYour Name 
210*5113495bSYour Name 
wlan_reg_dmn_get_opclass_from_channel(uint8_t * country,uint8_t channel,uint8_t offset)211*5113495bSYour Name uint16_t wlan_reg_dmn_get_opclass_from_channel(uint8_t *country,
212*5113495bSYour Name 					       uint8_t channel,
213*5113495bSYour Name 					       uint8_t offset)
214*5113495bSYour Name {
215*5113495bSYour Name 	return reg_dmn_get_opclass_from_channel(country, channel,
216*5113495bSYour Name 						offset);
217*5113495bSYour Name }
218*5113495bSYour Name 
wlan_reg_get_band_cap_from_op_class(const uint8_t * country,uint8_t num_of_opclass,const uint8_t * opclass)219*5113495bSYour Name uint8_t wlan_reg_get_band_cap_from_op_class(const uint8_t *country,
220*5113495bSYour Name 					    uint8_t num_of_opclass,
221*5113495bSYour Name 					    const uint8_t *opclass)
222*5113495bSYour Name {
223*5113495bSYour Name 	return reg_get_band_cap_from_op_class(country,
224*5113495bSYour Name 					      num_of_opclass, opclass);
225*5113495bSYour Name }
226*5113495bSYour Name 
wlan_reg_get_opclass_from_freq_width(uint8_t * country,qdf_freq_t freq,uint16_t ch_width,uint16_t behav_limit)227*5113495bSYour Name uint8_t wlan_reg_get_opclass_from_freq_width(uint8_t *country,
228*5113495bSYour Name 					     qdf_freq_t freq,
229*5113495bSYour Name 					     uint16_t ch_width,
230*5113495bSYour Name 					     uint16_t behav_limit)
231*5113495bSYour Name {
232*5113495bSYour Name 	return reg_dmn_get_opclass_from_freq_width(country, freq, ch_width,
233*5113495bSYour Name 						   behav_limit);
234*5113495bSYour Name }
235*5113495bSYour Name 
wlan_reg_dmn_print_channels_in_opclass(uint8_t * country,uint8_t opclass)236*5113495bSYour Name void wlan_reg_dmn_print_channels_in_opclass(uint8_t *country,
237*5113495bSYour Name 					    uint8_t opclass)
238*5113495bSYour Name {
239*5113495bSYour Name 	reg_dmn_print_channels_in_opclass(country, opclass);
240*5113495bSYour Name }
241*5113495bSYour Name 
wlan_reg_dmn_get_chanwidth_from_opclass(uint8_t * country,uint8_t channel,uint8_t opclass)242*5113495bSYour Name uint16_t wlan_reg_dmn_get_chanwidth_from_opclass(uint8_t *country,
243*5113495bSYour Name 						 uint8_t channel,
244*5113495bSYour Name 						 uint8_t opclass)
245*5113495bSYour Name {
246*5113495bSYour Name 	return reg_dmn_get_chanwidth_from_opclass(country, channel,
247*5113495bSYour Name 						  opclass);
248*5113495bSYour Name }
249*5113495bSYour Name 
wlan_reg_dmn_get_chanwidth_from_opclass_auto(uint8_t * country,uint8_t channel,uint8_t opclass)250*5113495bSYour Name uint16_t wlan_reg_dmn_get_chanwidth_from_opclass_auto(uint8_t *country,
251*5113495bSYour Name 						      uint8_t channel,
252*5113495bSYour Name 						      uint8_t opclass)
253*5113495bSYour Name {
254*5113495bSYour Name 	return reg_dmn_get_chanwidth_from_opclass_auto(country, channel,
255*5113495bSYour Name 						       opclass);
256*5113495bSYour Name }
257*5113495bSYour Name 
wlan_reg_dmn_set_curr_opclasses(uint8_t num_classes,uint8_t * class)258*5113495bSYour Name uint16_t wlan_reg_dmn_set_curr_opclasses(uint8_t num_classes,
259*5113495bSYour Name 					 uint8_t *class)
260*5113495bSYour Name {
261*5113495bSYour Name 	return reg_dmn_set_curr_opclasses(num_classes, class);
262*5113495bSYour Name }
263*5113495bSYour Name 
wlan_reg_dmn_get_curr_opclasses(uint8_t * num_classes,uint8_t * class)264*5113495bSYour Name uint16_t wlan_reg_dmn_get_curr_opclasses(uint8_t *num_classes,
265*5113495bSYour Name 					 uint8_t *class)
266*5113495bSYour Name {
267*5113495bSYour Name 	return reg_dmn_get_curr_opclasses(num_classes, class);
268*5113495bSYour Name }
269*5113495bSYour Name 
270*5113495bSYour Name QDF_STATUS
wlan_reg_get_opclass_details(struct wlan_objmgr_pdev * pdev,struct regdmn_ap_cap_opclass_t * reg_ap_cap,uint8_t * n_opclasses,uint8_t max_supp_op_class,bool global_tbl_lookup,enum supported_6g_pwr_types in_6g_pwr_mode)271*5113495bSYour Name wlan_reg_get_opclass_details(struct wlan_objmgr_pdev *pdev,
272*5113495bSYour Name 			     struct regdmn_ap_cap_opclass_t *reg_ap_cap,
273*5113495bSYour Name 			     uint8_t *n_opclasses,
274*5113495bSYour Name 			     uint8_t max_supp_op_class,
275*5113495bSYour Name 			     bool global_tbl_lookup,
276*5113495bSYour Name 			     enum supported_6g_pwr_types in_6g_pwr_mode)
277*5113495bSYour Name {
278*5113495bSYour Name 	return reg_get_opclass_details(pdev, reg_ap_cap, n_opclasses,
279*5113495bSYour Name 				       max_supp_op_class,
280*5113495bSYour Name 				       global_tbl_lookup,
281*5113495bSYour Name 				       in_6g_pwr_mode);
282*5113495bSYour Name }
283*5113495bSYour Name 
284*5113495bSYour Name QDF_STATUS
wlan_reg_get_opclass_for_cur_hwmode(struct wlan_objmgr_pdev * pdev,struct regdmn_ap_cap_opclass_t * reg_ap_cap,uint8_t * n_opclasses,uint8_t max_supp_op_class,bool global_tbl_lookup,enum phy_ch_width max_chwidth,bool is_80p80_supp,enum supported_6g_pwr_types in_6g_pwr_mode)285*5113495bSYour Name wlan_reg_get_opclass_for_cur_hwmode(struct wlan_objmgr_pdev *pdev,
286*5113495bSYour Name 				    struct regdmn_ap_cap_opclass_t *reg_ap_cap,
287*5113495bSYour Name 				    uint8_t *n_opclasses,
288*5113495bSYour Name 				    uint8_t max_supp_op_class,
289*5113495bSYour Name 				    bool global_tbl_lookup,
290*5113495bSYour Name 				    enum phy_ch_width max_chwidth,
291*5113495bSYour Name 				    bool is_80p80_supp,
292*5113495bSYour Name 				    enum supported_6g_pwr_types in_6g_pwr_mode)
293*5113495bSYour Name {
294*5113495bSYour Name 	return reg_get_opclass_for_cur_hwmode(pdev, reg_ap_cap, n_opclasses,
295*5113495bSYour Name 					      max_supp_op_class,
296*5113495bSYour Name 					      global_tbl_lookup,
297*5113495bSYour Name 					      max_chwidth,
298*5113495bSYour Name 					      is_80p80_supp,
299*5113495bSYour Name 					      in_6g_pwr_mode);
300*5113495bSYour Name }
301*5113495bSYour Name 
wlan_reg_get_cc_and_src(struct wlan_objmgr_psoc * psoc,uint8_t * alpha)302*5113495bSYour Name enum country_src wlan_reg_get_cc_and_src(struct wlan_objmgr_psoc *psoc,
303*5113495bSYour Name 					 uint8_t *alpha)
304*5113495bSYour Name {
305*5113495bSYour Name 	return reg_get_cc_and_src(psoc, alpha);
306*5113495bSYour Name }
307*5113495bSYour Name 
wlan_regulatory_init(void)308*5113495bSYour Name QDF_STATUS wlan_regulatory_init(void)
309*5113495bSYour Name {
310*5113495bSYour Name 	QDF_STATUS status;
311*5113495bSYour Name 
312*5113495bSYour Name 	status = wlan_objmgr_register_psoc_create_handler(
313*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
314*5113495bSYour Name 		wlan_regulatory_psoc_obj_created_notification, NULL);
315*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
316*5113495bSYour Name 		reg_err("failed to register reg psoc obj create handler");
317*5113495bSYour Name 		return status;
318*5113495bSYour Name 	}
319*5113495bSYour Name 
320*5113495bSYour Name 	status = wlan_objmgr_register_psoc_destroy_handler(
321*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
322*5113495bSYour Name 		wlan_regulatory_psoc_obj_destroyed_notification, NULL);
323*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
324*5113495bSYour Name 		reg_err("failed to register reg psoc obj create handler");
325*5113495bSYour Name 		goto unreg_psoc_create;
326*5113495bSYour Name 	}
327*5113495bSYour Name 
328*5113495bSYour Name 	status = wlan_objmgr_register_pdev_create_handler(
329*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
330*5113495bSYour Name 		wlan_regulatory_pdev_obj_created_notification, NULL);
331*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
332*5113495bSYour Name 		reg_err("failed to register reg psoc obj create handler");
333*5113495bSYour Name 		goto unreg_psoc_destroy;
334*5113495bSYour Name 	}
335*5113495bSYour Name 
336*5113495bSYour Name 	status = wlan_objmgr_register_pdev_destroy_handler(
337*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
338*5113495bSYour Name 		wlan_regulatory_pdev_obj_destroyed_notification, NULL);
339*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
340*5113495bSYour Name 		reg_err("failed to register reg psoc obj create handler");
341*5113495bSYour Name 		goto unreg_pdev_create;
342*5113495bSYour Name 	}
343*5113495bSYour Name 	channel_map = channel_map_global;
344*5113495bSYour Name 	reg_debug("regulatory handlers registered with obj mgr");
345*5113495bSYour Name 
346*5113495bSYour Name 	return status;
347*5113495bSYour Name 
348*5113495bSYour Name unreg_pdev_create:
349*5113495bSYour Name 	status = wlan_objmgr_unregister_pdev_create_handler(
350*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
351*5113495bSYour Name 		wlan_regulatory_pdev_obj_created_notification,
352*5113495bSYour Name 		NULL);
353*5113495bSYour Name 
354*5113495bSYour Name unreg_psoc_destroy:
355*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_destroy_handler(
356*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
357*5113495bSYour Name 		wlan_regulatory_psoc_obj_destroyed_notification,
358*5113495bSYour Name 		NULL);
359*5113495bSYour Name 
360*5113495bSYour Name unreg_psoc_create:
361*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_create_handler(
362*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
363*5113495bSYour Name 		wlan_regulatory_psoc_obj_created_notification,
364*5113495bSYour Name 		NULL);
365*5113495bSYour Name 
366*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
367*5113495bSYour Name }
368*5113495bSYour Name 
wlan_regulatory_deinit(void)369*5113495bSYour Name QDF_STATUS wlan_regulatory_deinit(void)
370*5113495bSYour Name {
371*5113495bSYour Name 	QDF_STATUS status, ret_status = QDF_STATUS_SUCCESS;
372*5113495bSYour Name 
373*5113495bSYour Name 	status = wlan_objmgr_unregister_pdev_destroy_handler(
374*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
375*5113495bSYour Name 		wlan_regulatory_pdev_obj_destroyed_notification, NULL);
376*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
377*5113495bSYour Name 		reg_err("failed to unregister reg pdev obj destroy handler");
378*5113495bSYour Name 		ret_status = status;
379*5113495bSYour Name 	}
380*5113495bSYour Name 
381*5113495bSYour Name 	status = wlan_objmgr_unregister_pdev_create_handler(
382*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
383*5113495bSYour Name 		wlan_regulatory_pdev_obj_created_notification, NULL);
384*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
385*5113495bSYour Name 		reg_err("failed to unregister reg pdev obj create handler");
386*5113495bSYour Name 		ret_status = status;
387*5113495bSYour Name 	}
388*5113495bSYour Name 
389*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_destroy_handler(
390*5113495bSYour Name 		WLAN_UMAC_COMP_REGULATORY,
391*5113495bSYour Name 		wlan_regulatory_psoc_obj_destroyed_notification, NULL);
392*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
393*5113495bSYour Name 		reg_err("failed to unregister reg psoc obj destroy handler");
394*5113495bSYour Name 		ret_status = status;
395*5113495bSYour Name 	}
396*5113495bSYour Name 
397*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_create_handler(
398*5113495bSYour Name 			WLAN_UMAC_COMP_REGULATORY,
399*5113495bSYour Name 			wlan_regulatory_psoc_obj_created_notification, NULL);
400*5113495bSYour Name 	if (status != QDF_STATUS_SUCCESS) {
401*5113495bSYour Name 		reg_err("failed to unregister reg psoc obj create handler");
402*5113495bSYour Name 		ret_status = status;
403*5113495bSYour Name 	}
404*5113495bSYour Name 
405*5113495bSYour Name 	reg_debug("deregistered callbacks with obj mgr");
406*5113495bSYour Name 
407*5113495bSYour Name 	return ret_status;
408*5113495bSYour Name }
409*5113495bSYour Name 
410*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
411*5113495bSYour Name static void
regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)412*5113495bSYour Name regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc *psoc,
413*5113495bSYour Name 					struct wlan_lmac_if_reg_tx_ops *tx_ops)
414*5113495bSYour Name {
415*5113495bSYour Name 	if (tx_ops->register_master_ext_handler)
416*5113495bSYour Name 		tx_ops->register_master_ext_handler(psoc, NULL);
417*5113495bSYour Name }
418*5113495bSYour Name 
419*5113495bSYour Name static void
regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)420*5113495bSYour Name regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc *psoc,
421*5113495bSYour Name 					struct wlan_lmac_if_reg_tx_ops *tx_ops)
422*5113495bSYour Name {
423*5113495bSYour Name 	if (tx_ops->unregister_master_ext_handler)
424*5113495bSYour Name 		tx_ops->unregister_master_ext_handler(psoc, NULL);
425*5113495bSYour Name }
426*5113495bSYour Name 
wlan_reg_get_6g_ap_master_chan_list(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_pwr_type,struct regulatory_channel * chan_list)427*5113495bSYour Name QDF_STATUS wlan_reg_get_6g_ap_master_chan_list(
428*5113495bSYour Name 					struct wlan_objmgr_pdev *pdev,
429*5113495bSYour Name 					enum reg_6g_ap_type ap_pwr_type,
430*5113495bSYour Name 					struct regulatory_channel *chan_list)
431*5113495bSYour Name {
432*5113495bSYour Name 	return  reg_get_6g_ap_master_chan_list(pdev, ap_pwr_type, chan_list);
433*5113495bSYour Name }
434*5113495bSYour Name 
435*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_get_power_string(enum reg_6g_ap_type power_type)436*5113495bSYour Name const char *wlan_reg_get_power_string(enum reg_6g_ap_type power_type)
437*5113495bSYour Name {
438*5113495bSYour Name 	return reg_get_power_string(power_type);
439*5113495bSYour Name }
440*5113495bSYour Name #endif
441*5113495bSYour Name 
442*5113495bSYour Name qdf_export_symbol(wlan_reg_get_6g_ap_master_chan_list);
443*5113495bSYour Name 
444*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)445*5113495bSYour Name static void regulatory_assign_register_afc_event_handler(
446*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
447*5113495bSYour Name 		struct wlan_lmac_if_reg_tx_ops *tx_ops)
448*5113495bSYour Name {
449*5113495bSYour Name 	if (tx_ops->register_afc_event_handler)
450*5113495bSYour Name 		tx_ops->register_afc_event_handler(psoc, NULL);
451*5113495bSYour Name }
452*5113495bSYour Name 
regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)453*5113495bSYour Name static void regulatory_assign_unregister_afc_event_handler(
454*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
455*5113495bSYour Name 		struct wlan_lmac_if_reg_tx_ops *tx_ops)
456*5113495bSYour Name {
457*5113495bSYour Name 	if (tx_ops->unregister_afc_event_handler)
458*5113495bSYour Name 		tx_ops->unregister_afc_event_handler(psoc, NULL);
459*5113495bSYour Name }
460*5113495bSYour Name #else
regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)461*5113495bSYour Name static void regulatory_assign_register_afc_event_handler(
462*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
463*5113495bSYour Name 		struct wlan_lmac_if_reg_tx_ops *tx_ops)
464*5113495bSYour Name {
465*5113495bSYour Name }
466*5113495bSYour Name 
regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)467*5113495bSYour Name static void regulatory_assign_unregister_afc_event_handler(
468*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
469*5113495bSYour Name 		struct wlan_lmac_if_reg_tx_ops *tx_ops)
470*5113495bSYour Name {
471*5113495bSYour Name }
472*5113495bSYour Name #endif
473*5113495bSYour Name #else
474*5113495bSYour Name static inline void
regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)475*5113495bSYour Name regulatory_assign_register_master_ext_handler(struct wlan_objmgr_psoc *psoc,
476*5113495bSYour Name 					      struct wlan_lmac_if_reg_tx_ops *tx_ops)
477*5113495bSYour Name {
478*5113495bSYour Name }
479*5113495bSYour Name 
480*5113495bSYour Name static inline void
regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)481*5113495bSYour Name regulatory_assign_unregister_master_ext_handler(struct wlan_objmgr_psoc *psoc,
482*5113495bSYour Name 						struct wlan_lmac_if_reg_tx_ops *tx_ops)
483*5113495bSYour Name {
484*5113495bSYour Name }
485*5113495bSYour Name 
486*5113495bSYour Name static void
regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)487*5113495bSYour Name regulatory_assign_register_afc_event_handler(struct wlan_objmgr_psoc *psoc,
488*5113495bSYour Name 					     struct wlan_lmac_if_reg_tx_ops *tx_ops)
489*5113495bSYour Name {
490*5113495bSYour Name }
491*5113495bSYour Name 
492*5113495bSYour Name static void
regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_reg_tx_ops * tx_ops)493*5113495bSYour Name regulatory_assign_unregister_afc_event_handler(struct wlan_objmgr_psoc *psoc,
494*5113495bSYour Name 					       struct wlan_lmac_if_reg_tx_ops *tx_ops)
495*5113495bSYour Name {
496*5113495bSYour Name }
497*5113495bSYour Name #endif
498*5113495bSYour Name 
regulatory_psoc_open(struct wlan_objmgr_psoc * psoc)499*5113495bSYour Name QDF_STATUS regulatory_psoc_open(struct wlan_objmgr_psoc *psoc)
500*5113495bSYour Name {
501*5113495bSYour Name 	struct wlan_lmac_if_reg_tx_ops *tx_ops;
502*5113495bSYour Name 
503*5113495bSYour Name 	tx_ops = reg_get_psoc_tx_ops(psoc);
504*5113495bSYour Name 	if (tx_ops->register_master_handler)
505*5113495bSYour Name 		tx_ops->register_master_handler(psoc, NULL);
506*5113495bSYour Name 	regulatory_assign_register_master_ext_handler(psoc, tx_ops);
507*5113495bSYour Name 	regulatory_assign_register_afc_event_handler(psoc, tx_ops);
508*5113495bSYour Name 	if (tx_ops->register_11d_new_cc_handler)
509*5113495bSYour Name 		tx_ops->register_11d_new_cc_handler(psoc, NULL);
510*5113495bSYour Name 	if (tx_ops->register_ch_avoid_event_handler)
511*5113495bSYour Name 		tx_ops->register_ch_avoid_event_handler(psoc, NULL);
512*5113495bSYour Name 	if (tx_ops->register_rate2power_table_update_event_handler)
513*5113495bSYour Name 		tx_ops->register_rate2power_table_update_event_handler(psoc,
514*5113495bSYour Name 								       NULL);
515*5113495bSYour Name 
516*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
517*5113495bSYour Name }
518*5113495bSYour Name 
regulatory_psoc_close(struct wlan_objmgr_psoc * psoc)519*5113495bSYour Name QDF_STATUS regulatory_psoc_close(struct wlan_objmgr_psoc *psoc)
520*5113495bSYour Name {
521*5113495bSYour Name 	struct wlan_lmac_if_reg_tx_ops *tx_ops;
522*5113495bSYour Name 
523*5113495bSYour Name 	tx_ops = reg_get_psoc_tx_ops(psoc);
524*5113495bSYour Name 	if (tx_ops->unregister_11d_new_cc_handler)
525*5113495bSYour Name 		tx_ops->unregister_11d_new_cc_handler(psoc, NULL);
526*5113495bSYour Name 	if (tx_ops->unregister_master_handler)
527*5113495bSYour Name 		tx_ops->unregister_master_handler(psoc, NULL);
528*5113495bSYour Name 	regulatory_assign_unregister_master_ext_handler(psoc, tx_ops);
529*5113495bSYour Name 	regulatory_assign_unregister_afc_event_handler(psoc, tx_ops);
530*5113495bSYour Name 	if (tx_ops->unregister_ch_avoid_event_handler)
531*5113495bSYour Name 		tx_ops->unregister_ch_avoid_event_handler(psoc, NULL);
532*5113495bSYour Name 	if (tx_ops->unregister_rate2power_table_update_event_handler)
533*5113495bSYour Name 		tx_ops->unregister_rate2power_table_update_event_handler(psoc,
534*5113495bSYour Name 									 NULL);
535*5113495bSYour Name 
536*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
537*5113495bSYour Name }
538*5113495bSYour Name 
539*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
540*5113495bSYour Name /**
541*5113495bSYour Name  * reg_is_cntry_set_pending() - Check if country set is pending
542*5113495bSYour Name  * @pdev: Pointer to pdev object.
543*5113495bSYour Name  * @psoc: Pointer to psoc object.
544*5113495bSYour Name  */
reg_is_cntry_set_pending(struct wlan_objmgr_pdev * pdev,struct wlan_objmgr_psoc * psoc)545*5113495bSYour Name static bool reg_is_cntry_set_pending(struct wlan_objmgr_pdev *pdev,
546*5113495bSYour Name 				     struct wlan_objmgr_psoc *psoc)
547*5113495bSYour Name {
548*5113495bSYour Name 	struct wlan_regulatory_psoc_priv_obj *soc_reg;
549*5113495bSYour Name 	struct wlan_lmac_if_reg_tx_ops *tx_ops;
550*5113495bSYour Name 	uint8_t phy_id;
551*5113495bSYour Name 
552*5113495bSYour Name 	soc_reg = reg_get_psoc_obj(psoc);
553*5113495bSYour Name 
554*5113495bSYour Name 	if (!IS_VALID_PSOC_REG_OBJ(soc_reg)) {
555*5113495bSYour Name 		reg_err("psoc reg component is NULL");
556*5113495bSYour Name 		return false;
557*5113495bSYour Name 	}
558*5113495bSYour Name 
559*5113495bSYour Name 	tx_ops = reg_get_psoc_tx_ops(psoc);
560*5113495bSYour Name 
561*5113495bSYour Name 	if (tx_ops->get_phy_id_from_pdev_id)
562*5113495bSYour Name 		tx_ops->get_phy_id_from_pdev_id(
563*5113495bSYour Name 					psoc,
564*5113495bSYour Name 					wlan_objmgr_pdev_get_pdev_id(pdev),
565*5113495bSYour Name 					&phy_id);
566*5113495bSYour Name 	else
567*5113495bSYour Name 		phy_id = wlan_objmgr_pdev_get_pdev_id(pdev);
568*5113495bSYour Name 
569*5113495bSYour Name 	return (soc_reg->new_user_ctry_pending[phy_id] ||
570*5113495bSYour Name 		soc_reg->new_init_ctry_pending[phy_id] ||
571*5113495bSYour Name 		soc_reg->new_11d_ctry_pending[phy_id] ||
572*5113495bSYour Name 		soc_reg->world_country_pending[phy_id]);
573*5113495bSYour Name }
574*5113495bSYour Name #else
reg_is_cntry_set_pending(struct wlan_objmgr_pdev * pdev,struct wlan_objmgr_psoc * psoc)575*5113495bSYour Name static inline bool reg_is_cntry_set_pending(struct wlan_objmgr_pdev *pdev,
576*5113495bSYour Name 					    struct wlan_objmgr_psoc *psoc)
577*5113495bSYour Name {
578*5113495bSYour Name 	return false;
579*5113495bSYour Name }
580*5113495bSYour Name #endif
581*5113495bSYour Name 
regulatory_pdev_open(struct wlan_objmgr_pdev * pdev)582*5113495bSYour Name QDF_STATUS regulatory_pdev_open(struct wlan_objmgr_pdev *pdev)
583*5113495bSYour Name {
584*5113495bSYour Name 	struct wlan_objmgr_psoc *parent_psoc;
585*5113495bSYour Name 	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
586*5113495bSYour Name 
587*5113495bSYour Name 	pdev_priv_obj = reg_get_pdev_obj(pdev);
588*5113495bSYour Name 
589*5113495bSYour Name 	if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
590*5113495bSYour Name 		reg_err("reg pdev private obj is NULL");
591*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
592*5113495bSYour Name 	}
593*5113495bSYour Name 
594*5113495bSYour Name 	pdev_priv_obj->pdev_opened = true;
595*5113495bSYour Name 
596*5113495bSYour Name 	parent_psoc = wlan_pdev_get_psoc(pdev);
597*5113495bSYour Name 
598*5113495bSYour Name 	if (reg_is_cntry_set_pending(pdev, parent_psoc))
599*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
600*5113495bSYour Name 
601*5113495bSYour Name 	reg_send_scheduler_msg_nb(parent_psoc, pdev);
602*5113495bSYour Name 
603*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
604*5113495bSYour Name }
605*5113495bSYour Name 
regulatory_pdev_close(struct wlan_objmgr_pdev * pdev)606*5113495bSYour Name QDF_STATUS regulatory_pdev_close(struct wlan_objmgr_pdev *pdev)
607*5113495bSYour Name {
608*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
609*5113495bSYour Name 	struct wlan_regulatory_psoc_priv_obj *soc_reg;
610*5113495bSYour Name 	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
611*5113495bSYour Name 
612*5113495bSYour Name 	pdev_priv_obj = reg_get_pdev_obj(pdev);
613*5113495bSYour Name 	if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
614*5113495bSYour Name 		reg_err("reg pdev private obj is NULL");
615*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
616*5113495bSYour Name 	}
617*5113495bSYour Name 
618*5113495bSYour Name 	pdev_priv_obj->pdev_opened = false;
619*5113495bSYour Name 
620*5113495bSYour Name 	psoc = wlan_pdev_get_psoc(pdev);
621*5113495bSYour Name 	soc_reg = reg_get_psoc_obj(psoc);
622*5113495bSYour Name 	if (!soc_reg) {
623*5113495bSYour Name 		reg_err("reg psoc private obj is NULL");
624*5113495bSYour Name 		return QDF_STATUS_E_FAULT;
625*5113495bSYour Name 	}
626*5113495bSYour Name 
627*5113495bSYour Name 	reg_reset_ctry_pending_hints(soc_reg);
628*5113495bSYour Name 
629*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
630*5113495bSYour Name }
631*5113495bSYour Name 
wlan_reg_freq_to_chan(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)632*5113495bSYour Name uint8_t wlan_reg_freq_to_chan(struct wlan_objmgr_pdev *pdev,
633*5113495bSYour Name 			      qdf_freq_t freq)
634*5113495bSYour Name {
635*5113495bSYour Name 	return reg_freq_to_chan(pdev, freq);
636*5113495bSYour Name }
637*5113495bSYour Name 
638*5113495bSYour Name qdf_export_symbol(wlan_reg_freq_to_chan);
639*5113495bSYour Name 
wlan_reg_legacy_chan_to_freq(struct wlan_objmgr_pdev * pdev,uint8_t chan_num)640*5113495bSYour Name qdf_freq_t wlan_reg_legacy_chan_to_freq(struct wlan_objmgr_pdev *pdev,
641*5113495bSYour Name 					uint8_t chan_num)
642*5113495bSYour Name {
643*5113495bSYour Name 	return reg_legacy_chan_to_freq(pdev, chan_num);
644*5113495bSYour Name }
645*5113495bSYour Name 
646*5113495bSYour Name qdf_export_symbol(wlan_reg_legacy_chan_to_freq);
647*5113495bSYour Name 
wlan_reg_set_country(struct wlan_objmgr_pdev * pdev,uint8_t * country)648*5113495bSYour Name QDF_STATUS wlan_reg_set_country(struct wlan_objmgr_pdev *pdev,
649*5113495bSYour Name 				       uint8_t *country)
650*5113495bSYour Name {
651*5113495bSYour Name 	return reg_set_country(pdev, country);
652*5113495bSYour Name }
653*5113495bSYour Name 
wlan_reg_set_11d_country(struct wlan_objmgr_pdev * pdev,uint8_t * country)654*5113495bSYour Name QDF_STATUS wlan_reg_set_11d_country(struct wlan_objmgr_pdev *pdev,
655*5113495bSYour Name 				    uint8_t *country)
656*5113495bSYour Name {
657*5113495bSYour Name 	return reg_set_11d_country(pdev, country);
658*5113495bSYour Name }
659*5113495bSYour Name 
wlan_reg_is_world(uint8_t * country)660*5113495bSYour Name bool wlan_reg_is_world(uint8_t *country)
661*5113495bSYour Name {
662*5113495bSYour Name 	return reg_is_world_alpha2(country);
663*5113495bSYour Name }
664*5113495bSYour Name 
wlan_reg_is_us(uint8_t * country)665*5113495bSYour Name bool wlan_reg_is_us(uint8_t *country)
666*5113495bSYour Name {
667*5113495bSYour Name 	return reg_is_us_alpha2(country);
668*5113495bSYour Name }
669*5113495bSYour Name 
wlan_reg_is_etsi(uint8_t * country)670*5113495bSYour Name bool wlan_reg_is_etsi(uint8_t *country)
671*5113495bSYour Name {
672*5113495bSYour Name 	return reg_is_etsi_alpha2(country);
673*5113495bSYour Name }
674*5113495bSYour Name 
wlan_reg_ctry_support_vlp(uint8_t * country)675*5113495bSYour Name bool wlan_reg_ctry_support_vlp(uint8_t *country)
676*5113495bSYour Name {
677*5113495bSYour Name 	return reg_ctry_support_vlp(country);
678*5113495bSYour Name }
679*5113495bSYour Name 
wlan_reg_register_chan_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk,void * arg)680*5113495bSYour Name void wlan_reg_register_chan_change_callback(struct wlan_objmgr_psoc *psoc,
681*5113495bSYour Name 					    void *cbk, void *arg)
682*5113495bSYour Name {
683*5113495bSYour Name 	reg_register_chan_change_callback(psoc, (reg_chan_change_callback)cbk,
684*5113495bSYour Name 					  arg);
685*5113495bSYour Name 
686*5113495bSYour Name }
687*5113495bSYour Name 
wlan_reg_unregister_chan_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk)688*5113495bSYour Name void wlan_reg_unregister_chan_change_callback(struct wlan_objmgr_psoc *psoc,
689*5113495bSYour Name 					      void *cbk)
690*5113495bSYour Name {
691*5113495bSYour Name 	reg_unregister_chan_change_callback(psoc,
692*5113495bSYour Name 					    (reg_chan_change_callback)cbk);
693*5113495bSYour Name }
694*5113495bSYour Name 
wlan_reg_register_ctry_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk)695*5113495bSYour Name void wlan_reg_register_ctry_change_callback(struct wlan_objmgr_psoc *psoc,
696*5113495bSYour Name 					    void *cbk)
697*5113495bSYour Name {
698*5113495bSYour Name 	reg_register_ctry_change_callback(psoc, (reg_ctry_change_callback)cbk);
699*5113495bSYour Name }
700*5113495bSYour Name 
wlan_reg_unregister_ctry_change_callback(struct wlan_objmgr_psoc * psoc,void * cbk)701*5113495bSYour Name void wlan_reg_unregister_ctry_change_callback(struct wlan_objmgr_psoc *psoc,
702*5113495bSYour Name 					      void *cbk)
703*5113495bSYour Name {
704*5113495bSYour Name 	reg_unregister_ctry_change_callback(psoc,
705*5113495bSYour Name 					    (reg_ctry_change_callback)cbk);
706*5113495bSYour Name }
707*5113495bSYour Name 
wlan_reg_is_11d_offloaded(struct wlan_objmgr_psoc * psoc)708*5113495bSYour Name bool wlan_reg_is_11d_offloaded(struct wlan_objmgr_psoc *psoc)
709*5113495bSYour Name {
710*5113495bSYour Name 	return reg_is_11d_offloaded(psoc);
711*5113495bSYour Name }
712*5113495bSYour Name 
wlan_reg_11d_enabled_on_host(struct wlan_objmgr_psoc * psoc)713*5113495bSYour Name bool wlan_reg_11d_enabled_on_host(struct wlan_objmgr_psoc *psoc)
714*5113495bSYour Name {
715*5113495bSYour Name 	return reg_11d_enabled_on_host(psoc);
716*5113495bSYour Name }
717*5113495bSYour Name 
wlan_reg_is_etsi_regdmn(struct wlan_objmgr_pdev * pdev)718*5113495bSYour Name bool wlan_reg_is_etsi_regdmn(struct wlan_objmgr_pdev *pdev)
719*5113495bSYour Name {
720*5113495bSYour Name 	return reg_is_etsi_regdmn(pdev);
721*5113495bSYour Name }
722*5113495bSYour Name 
wlan_reg_is_etsi_srd_chan_allowed_master_mode(struct wlan_objmgr_pdev * pdev)723*5113495bSYour Name bool wlan_reg_is_etsi_srd_chan_allowed_master_mode(struct wlan_objmgr_pdev
724*5113495bSYour Name 						     *pdev)
725*5113495bSYour Name {
726*5113495bSYour Name 	return reg_is_etsi_srd_chan_allowed_master_mode(pdev);
727*5113495bSYour Name }
728*5113495bSYour Name 
wlan_reg_is_6ghz_band_set(struct wlan_objmgr_pdev * pdev)729*5113495bSYour Name bool wlan_reg_is_6ghz_band_set(struct wlan_objmgr_pdev *pdev)
730*5113495bSYour Name {
731*5113495bSYour Name 	return reg_is_6ghz_band_set(pdev);
732*5113495bSYour Name }
733*5113495bSYour Name 
wlan_reg_get_keep_6ghz_sta_cli_connection(struct wlan_objmgr_pdev * pdev)734*5113495bSYour Name bool wlan_reg_get_keep_6ghz_sta_cli_connection(struct wlan_objmgr_pdev *pdev)
735*5113495bSYour Name {
736*5113495bSYour Name 	return reg_get_keep_6ghz_sta_cli_connection(pdev);
737*5113495bSYour Name }
wlan_reg_get_fcc_constraint(struct wlan_objmgr_pdev * pdev,uint32_t freq)738*5113495bSYour Name bool wlan_reg_get_fcc_constraint(struct wlan_objmgr_pdev *pdev, uint32_t freq)
739*5113495bSYour Name {
740*5113495bSYour Name 	return reg_get_fcc_constraint(pdev, freq);
741*5113495bSYour Name }
742*5113495bSYour Name 
wlan_reg_get_country_max_allowed_bw(struct wlan_objmgr_pdev * pdev)743*5113495bSYour Name uint32_t wlan_reg_get_country_max_allowed_bw(struct wlan_objmgr_pdev *pdev)
744*5113495bSYour Name {
745*5113495bSYour Name 	return reg_get_country_max_allowed_bw(pdev);
746*5113495bSYour Name }
747*5113495bSYour Name 
wlan_reg_get_chip_mode(struct wlan_objmgr_pdev * pdev,uint64_t * chip_mode)748*5113495bSYour Name QDF_STATUS wlan_reg_get_chip_mode(struct wlan_objmgr_pdev *pdev,
749*5113495bSYour Name 		uint64_t *chip_mode)
750*5113495bSYour Name {
751*5113495bSYour Name 	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
752*5113495bSYour Name 
753*5113495bSYour Name 	pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(pdev,
754*5113495bSYour Name 			WLAN_UMAC_COMP_REGULATORY);
755*5113495bSYour Name 
756*5113495bSYour Name 	if (!pdev_priv_obj) {
757*5113495bSYour Name 		reg_err("reg pdev private obj is NULL");
758*5113495bSYour Name 		return QDF_STATUS_E_FAULT;
759*5113495bSYour Name 	}
760*5113495bSYour Name 
761*5113495bSYour Name 	*chip_mode = pdev_priv_obj->wireless_modes;
762*5113495bSYour Name 
763*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
764*5113495bSYour Name }
765*5113495bSYour Name 
wlan_reg_get_phybitmap(struct wlan_objmgr_pdev * pdev,uint16_t * phybitmap)766*5113495bSYour Name QDF_STATUS wlan_reg_get_phybitmap(struct wlan_objmgr_pdev *pdev,
767*5113495bSYour Name 				  uint16_t *phybitmap)
768*5113495bSYour Name {
769*5113495bSYour Name 	return reg_get_phybitmap(pdev, phybitmap);
770*5113495bSYour Name }
771*5113495bSYour Name 
772*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
wlan_reg_phybitmap_support_11be(struct wlan_objmgr_pdev * pdev)773*5113495bSYour Name bool wlan_reg_phybitmap_support_11be(struct wlan_objmgr_pdev *pdev)
774*5113495bSYour Name {
775*5113495bSYour Name 	enum reg_phymode cur_max_phymode;
776*5113495bSYour Name 
777*5113495bSYour Name 	cur_max_phymode = reg_get_max_phymode(pdev, REG_PHYMODE_MAX - 1, 0);
778*5113495bSYour Name 	return (cur_max_phymode == REG_PHYMODE_11BE);
779*5113495bSYour Name }
780*5113495bSYour Name #endif
781*5113495bSYour Name 
wlan_reg_is_11d_scan_inprogress(struct wlan_objmgr_psoc * psoc)782*5113495bSYour Name bool wlan_reg_is_11d_scan_inprogress(struct wlan_objmgr_psoc *psoc)
783*5113495bSYour Name {
784*5113495bSYour Name 	return reg_is_11d_scan_inprogress(psoc);
785*5113495bSYour Name }
786*5113495bSYour Name 
wlan_reg_get_freq_range(struct wlan_objmgr_pdev * pdev,qdf_freq_t * low_2g,qdf_freq_t * high_2g,qdf_freq_t * low_5g,qdf_freq_t * high_5g)787*5113495bSYour Name QDF_STATUS wlan_reg_get_freq_range(struct wlan_objmgr_pdev *pdev,
788*5113495bSYour Name 		qdf_freq_t *low_2g,
789*5113495bSYour Name 		qdf_freq_t *high_2g,
790*5113495bSYour Name 		qdf_freq_t *low_5g,
791*5113495bSYour Name 		qdf_freq_t *high_5g)
792*5113495bSYour Name {
793*5113495bSYour Name 	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
794*5113495bSYour Name 
795*5113495bSYour Name 	pdev_priv_obj = wlan_objmgr_pdev_get_comp_private_obj(pdev,
796*5113495bSYour Name 			WLAN_UMAC_COMP_REGULATORY);
797*5113495bSYour Name 
798*5113495bSYour Name 	if (!pdev_priv_obj) {
799*5113495bSYour Name 		reg_err("reg pdev private obj is NULL");
800*5113495bSYour Name 		return QDF_STATUS_E_FAULT;
801*5113495bSYour Name 	}
802*5113495bSYour Name 
803*5113495bSYour Name 	if (low_2g)
804*5113495bSYour Name 		*low_2g = pdev_priv_obj->range_2g_low;
805*5113495bSYour Name 
806*5113495bSYour Name 	if (high_2g)
807*5113495bSYour Name 		*high_2g = pdev_priv_obj->range_2g_high;
808*5113495bSYour Name 
809*5113495bSYour Name 	if (low_5g)
810*5113495bSYour Name 		*low_5g = pdev_priv_obj->range_5g_low;
811*5113495bSYour Name 
812*5113495bSYour Name 	if (high_5g)
813*5113495bSYour Name 		*high_5g = pdev_priv_obj->range_5g_high;
814*5113495bSYour Name 
815*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
816*5113495bSYour Name }
817*5113495bSYour Name 
818*5113495bSYour Name qdf_export_symbol(wlan_reg_get_freq_range);
819*5113495bSYour Name 
820*5113495bSYour Name struct wlan_lmac_if_reg_tx_ops *
wlan_reg_get_tx_ops(struct wlan_objmgr_psoc * psoc)821*5113495bSYour Name wlan_reg_get_tx_ops(struct wlan_objmgr_psoc *psoc)
822*5113495bSYour Name {
823*5113495bSYour Name 	return reg_get_psoc_tx_ops(psoc);
824*5113495bSYour Name }
825*5113495bSYour Name 
826*5113495bSYour Name qdf_export_symbol(wlan_reg_get_tx_ops);
827*5113495bSYour Name 
wlan_reg_get_curr_regdomain(struct wlan_objmgr_pdev * pdev,struct cur_regdmn_info * cur_regdmn)828*5113495bSYour Name QDF_STATUS wlan_reg_get_curr_regdomain(struct wlan_objmgr_pdev *pdev,
829*5113495bSYour Name 		struct cur_regdmn_info *cur_regdmn)
830*5113495bSYour Name {
831*5113495bSYour Name 	return reg_get_curr_regdomain(pdev, cur_regdmn);
832*5113495bSYour Name }
833*5113495bSYour Name 
wlan_reg_max_5ghz_ch_num(void)834*5113495bSYour Name uint8_t wlan_reg_max_5ghz_ch_num(void)
835*5113495bSYour Name {
836*5113495bSYour Name 	return reg_max_5ghz_ch_num();
837*5113495bSYour Name }
838*5113495bSYour Name 
839*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
wlan_reg_min_24ghz_chan_freq(void)840*5113495bSYour Name qdf_freq_t wlan_reg_min_24ghz_chan_freq(void)
841*5113495bSYour Name {
842*5113495bSYour Name 	return reg_min_24ghz_chan_freq();
843*5113495bSYour Name }
844*5113495bSYour Name 
wlan_reg_max_24ghz_chan_freq(void)845*5113495bSYour Name qdf_freq_t wlan_reg_max_24ghz_chan_freq(void)
846*5113495bSYour Name {
847*5113495bSYour Name 	return reg_max_24ghz_chan_freq();
848*5113495bSYour Name }
849*5113495bSYour Name 
wlan_reg_min_5ghz_chan_freq(void)850*5113495bSYour Name qdf_freq_t wlan_reg_min_5ghz_chan_freq(void)
851*5113495bSYour Name {
852*5113495bSYour Name 	return reg_min_5ghz_chan_freq();
853*5113495bSYour Name }
854*5113495bSYour Name 
wlan_reg_max_5ghz_chan_freq(void)855*5113495bSYour Name qdf_freq_t wlan_reg_max_5ghz_chan_freq(void)
856*5113495bSYour Name {
857*5113495bSYour Name 	return reg_max_5ghz_chan_freq();
858*5113495bSYour Name }
859*5113495bSYour Name #endif /* CONFIG_CHAN_FREQ_API */
860*5113495bSYour Name 
wlan_reg_is_24ghz_ch_freq(qdf_freq_t freq)861*5113495bSYour Name bool wlan_reg_is_24ghz_ch_freq(qdf_freq_t freq)
862*5113495bSYour Name {
863*5113495bSYour Name 	return reg_is_24ghz_ch_freq(freq);
864*5113495bSYour Name }
865*5113495bSYour Name 
wlan_reg_is_5ghz_ch_freq(qdf_freq_t freq)866*5113495bSYour Name bool wlan_reg_is_5ghz_ch_freq(qdf_freq_t freq)
867*5113495bSYour Name {
868*5113495bSYour Name 	return reg_is_5ghz_ch_freq(freq);
869*5113495bSYour Name }
870*5113495bSYour Name 
wlan_reg_is_range_overlap_2g(qdf_freq_t low_freq,qdf_freq_t high_freq)871*5113495bSYour Name bool wlan_reg_is_range_overlap_2g(qdf_freq_t low_freq, qdf_freq_t high_freq)
872*5113495bSYour Name {
873*5113495bSYour Name 	return reg_is_range_overlap_2g(low_freq, high_freq);
874*5113495bSYour Name }
875*5113495bSYour Name 
wlan_reg_is_range_overlap_5g(qdf_freq_t low_freq,qdf_freq_t high_freq)876*5113495bSYour Name bool wlan_reg_is_range_overlap_5g(qdf_freq_t low_freq, qdf_freq_t high_freq)
877*5113495bSYour Name {
878*5113495bSYour Name 	return reg_is_range_overlap_5g(low_freq, high_freq);
879*5113495bSYour Name }
880*5113495bSYour Name 
wlan_reg_is_freq_indoor(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)881*5113495bSYour Name bool wlan_reg_is_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
882*5113495bSYour Name {
883*5113495bSYour Name 	return reg_is_freq_indoor(pdev, freq);
884*5113495bSYour Name }
885*5113495bSYour Name 
wlan_reg_get_min_chwidth(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)886*5113495bSYour Name uint16_t wlan_reg_get_min_chwidth(struct wlan_objmgr_pdev *pdev,
887*5113495bSYour Name 				  qdf_freq_t freq)
888*5113495bSYour Name {
889*5113495bSYour Name 	return reg_get_min_chwidth(pdev, freq);
890*5113495bSYour Name }
891*5113495bSYour Name 
wlan_reg_get_max_chwidth(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)892*5113495bSYour Name uint16_t wlan_reg_get_max_chwidth(struct wlan_objmgr_pdev *pdev,
893*5113495bSYour Name 				  qdf_freq_t freq)
894*5113495bSYour Name {
895*5113495bSYour Name 	return reg_get_max_chwidth(pdev, freq);
896*5113495bSYour Name }
897*5113495bSYour Name 
898*5113495bSYour Name enum phy_ch_width
wlan_reg_get_next_lower_bandwidth(enum phy_ch_width ch_width)899*5113495bSYour Name wlan_reg_get_next_lower_bandwidth(enum phy_ch_width ch_width)
900*5113495bSYour Name {
901*5113495bSYour Name 	return get_next_lower_bandwidth(ch_width);
902*5113495bSYour Name }
903*5113495bSYour Name 
904*5113495bSYour Name enum phy_ch_width
wlan_reg_get_next_higher_bandwidth(enum phy_ch_width ch_width)905*5113495bSYour Name wlan_reg_get_next_higher_bandwidth(enum phy_ch_width ch_width)
906*5113495bSYour Name {
907*5113495bSYour Name 	return reg_get_next_higher_bandwidth(ch_width);
908*5113495bSYour Name }
909*5113495bSYour Name 
910*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_is_freq_indoor_in_secondary_list(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)911*5113495bSYour Name bool wlan_reg_is_freq_indoor_in_secondary_list(struct wlan_objmgr_pdev *pdev,
912*5113495bSYour Name 					       qdf_freq_t freq)
913*5113495bSYour Name {
914*5113495bSYour Name 	return reg_is_freq_indoor_in_secondary_list(pdev, freq);
915*5113495bSYour Name }
916*5113495bSYour Name #endif
917*5113495bSYour Name 
918*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
wlan_reg_is_6ghz_chan_freq(uint16_t freq)919*5113495bSYour Name bool wlan_reg_is_6ghz_chan_freq(uint16_t freq)
920*5113495bSYour Name {
921*5113495bSYour Name 	return reg_is_6ghz_chan_freq(freq);
922*5113495bSYour Name }
923*5113495bSYour Name 
924*5113495bSYour Name #ifdef CONFIG_6G_FREQ_OVERLAP
wlan_reg_is_range_only6g(qdf_freq_t low_freq,qdf_freq_t high_freq)925*5113495bSYour Name bool wlan_reg_is_range_only6g(qdf_freq_t low_freq, qdf_freq_t high_freq)
926*5113495bSYour Name {
927*5113495bSYour Name 	return reg_is_range_only6g(low_freq, high_freq);
928*5113495bSYour Name }
929*5113495bSYour Name 
wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq,qdf_freq_t high_freq)930*5113495bSYour Name bool wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq, qdf_freq_t high_freq)
931*5113495bSYour Name {
932*5113495bSYour Name 	return reg_is_range_overlap_6g(low_freq, high_freq);
933*5113495bSYour Name }
934*5113495bSYour Name 
935*5113495bSYour Name qdf_export_symbol(wlan_reg_is_range_overlap_6g);
936*5113495bSYour Name #endif
937*5113495bSYour Name 
wlan_reg_min_6ghz_chan_freq(void)938*5113495bSYour Name uint16_t wlan_reg_min_6ghz_chan_freq(void)
939*5113495bSYour Name {
940*5113495bSYour Name 	return reg_min_6ghz_chan_freq();
941*5113495bSYour Name }
942*5113495bSYour Name 
wlan_reg_max_6ghz_chan_freq(void)943*5113495bSYour Name uint16_t wlan_reg_max_6ghz_chan_freq(void)
944*5113495bSYour Name {
945*5113495bSYour Name 	return reg_max_6ghz_chan_freq();
946*5113495bSYour Name }
947*5113495bSYour Name 
wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq)948*5113495bSYour Name bool wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq)
949*5113495bSYour Name {
950*5113495bSYour Name 	return reg_is_6ghz_psc_chan_freq(freq);
951*5113495bSYour Name }
952*5113495bSYour Name 
wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)953*5113495bSYour Name bool wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
954*5113495bSYour Name {
955*5113495bSYour Name 	return reg_is_6g_freq_indoor(pdev, freq);
956*5113495bSYour Name }
957*5113495bSYour Name 
958*5113495bSYour Name QDF_STATUS
wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,uint8_t bw,enum reg_6g_ap_type reg_ap,enum reg_6g_client_type reg_client,bool is_psd,uint8_t * tx_power)959*5113495bSYour Name wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev *pdev,
960*5113495bSYour Name 				    qdf_freq_t freq, uint8_t bw,
961*5113495bSYour Name 				    enum reg_6g_ap_type reg_ap,
962*5113495bSYour Name 				    enum reg_6g_client_type reg_client,
963*5113495bSYour Name 				    bool is_psd,
964*5113495bSYour Name 				    uint8_t *tx_power)
965*5113495bSYour Name {
966*5113495bSYour Name 	return reg_get_max_txpower_for_6g_tpe(pdev, freq, bw,
967*5113495bSYour Name 					      reg_ap,
968*5113495bSYour Name 					      reg_client, is_psd,
969*5113495bSYour Name 					      tx_power);
970*5113495bSYour Name }
971*5113495bSYour Name 
wlan_reg_is_6ghz_unii5_chan_freq(qdf_freq_t freq)972*5113495bSYour Name bool wlan_reg_is_6ghz_unii5_chan_freq(qdf_freq_t freq)
973*5113495bSYour Name {
974*5113495bSYour Name 	return reg_is_6ghz_unii5_chan_freq(freq);
975*5113495bSYour Name }
976*5113495bSYour Name #endif /* CONFIG_BAND_6GHZ */
977*5113495bSYour Name 
978*5113495bSYour Name uint16_t
wlan_reg_get_band_channel_list(struct wlan_objmgr_pdev * pdev,uint8_t band_mask,struct regulatory_channel * channel_list)979*5113495bSYour Name wlan_reg_get_band_channel_list(struct wlan_objmgr_pdev *pdev,
980*5113495bSYour Name 			       uint8_t band_mask,
981*5113495bSYour Name 			       struct regulatory_channel *channel_list)
982*5113495bSYour Name {
983*5113495bSYour Name 	if (!pdev) {
984*5113495bSYour Name 		reg_err("pdev object is NULL");
985*5113495bSYour Name 		return 0;
986*5113495bSYour Name 	}
987*5113495bSYour Name 
988*5113495bSYour Name 	return reg_get_band_channel_list(pdev, band_mask, channel_list);
989*5113495bSYour Name }
990*5113495bSYour Name 
991*5113495bSYour Name #ifdef CONFIG_REG_6G_PWRMODE
992*5113495bSYour Name uint16_t
wlan_reg_get_band_channel_list_for_pwrmode(struct wlan_objmgr_pdev * pdev,uint8_t band_mask,struct regulatory_channel * channel_list,enum supported_6g_pwr_types in_6g_pwr_type)993*5113495bSYour Name wlan_reg_get_band_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev,
994*5113495bSYour Name 					   uint8_t band_mask,
995*5113495bSYour Name 					   struct regulatory_channel
996*5113495bSYour Name 					   *channel_list,
997*5113495bSYour Name 					   enum supported_6g_pwr_types
998*5113495bSYour Name 					   in_6g_pwr_type)
999*5113495bSYour Name {
1000*5113495bSYour Name 	if (!pdev) {
1001*5113495bSYour Name 		reg_err("pdev object is NULL");
1002*5113495bSYour Name 		return 0;
1003*5113495bSYour Name 	}
1004*5113495bSYour Name 
1005*5113495bSYour Name 	return reg_get_band_channel_list_for_pwrmode(pdev, band_mask,
1006*5113495bSYour Name 						     channel_list,
1007*5113495bSYour Name 						     in_6g_pwr_type);
1008*5113495bSYour Name }
1009*5113495bSYour Name #endif
1010*5113495bSYour Name 
1011*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
1012*5113495bSYour Name uint16_t
wlan_reg_get_secondary_band_channel_list(struct wlan_objmgr_pdev * pdev,uint8_t band_mask,struct regulatory_channel * channel_list)1013*5113495bSYour Name wlan_reg_get_secondary_band_channel_list(struct wlan_objmgr_pdev *pdev,
1014*5113495bSYour Name 					 uint8_t band_mask,
1015*5113495bSYour Name 					 struct regulatory_channel
1016*5113495bSYour Name 					 *channel_list)
1017*5113495bSYour Name {
1018*5113495bSYour Name 	if (!pdev) {
1019*5113495bSYour Name 		reg_err("pdev object is NULL");
1020*5113495bSYour Name 		return 0;
1021*5113495bSYour Name 	}
1022*5113495bSYour Name 
1023*5113495bSYour Name 	return reg_get_secondary_band_channel_list(pdev, band_mask,
1024*5113495bSYour Name 						   channel_list);
1025*5113495bSYour Name }
1026*5113495bSYour Name #endif
1027*5113495bSYour Name 
wlan_reg_chan_band_to_freq(struct wlan_objmgr_pdev * pdev,uint8_t chan,uint8_t band_mask)1028*5113495bSYour Name qdf_freq_t wlan_reg_chan_band_to_freq(struct wlan_objmgr_pdev *pdev,
1029*5113495bSYour Name 				      uint8_t chan, uint8_t band_mask)
1030*5113495bSYour Name {
1031*5113495bSYour Name 	return reg_chan_band_to_freq(pdev, chan, band_mask);
1032*5113495bSYour Name }
1033*5113495bSYour Name 
1034*5113495bSYour Name qdf_export_symbol(wlan_reg_chan_band_to_freq);
1035*5113495bSYour Name 
1036*5113495bSYour Name #ifdef CONFIG_49GHZ_CHAN
wlan_reg_is_49ghz_freq(qdf_freq_t freq)1037*5113495bSYour Name bool wlan_reg_is_49ghz_freq(qdf_freq_t freq)
1038*5113495bSYour Name {
1039*5113495bSYour Name 	return reg_is_49ghz_freq(freq);
1040*5113495bSYour Name }
1041*5113495bSYour Name #endif /* CONFIG_49GHZ_CHAN */
1042*5113495bSYour Name 
wlan_reg_ch_num(uint32_t ch_enum)1043*5113495bSYour Name uint8_t wlan_reg_ch_num(uint32_t ch_enum)
1044*5113495bSYour Name {
1045*5113495bSYour Name 	return reg_ch_num(ch_enum);
1046*5113495bSYour Name }
1047*5113495bSYour Name 
wlan_reg_ch_to_freq(uint32_t ch_enum)1048*5113495bSYour Name qdf_freq_t wlan_reg_ch_to_freq(uint32_t ch_enum)
1049*5113495bSYour Name {
1050*5113495bSYour Name 	return reg_ch_to_freq(ch_enum);
1051*5113495bSYour Name }
1052*5113495bSYour Name 
1053*5113495bSYour Name #ifdef WLAN_REG_PARTIAL_OFFLOAD
wlan_reg_is_regdmn_en302502_applicable(struct wlan_objmgr_pdev * pdev)1054*5113495bSYour Name bool wlan_reg_is_regdmn_en302502_applicable(struct wlan_objmgr_pdev *pdev)
1055*5113495bSYour Name {
1056*5113495bSYour Name 	return reg_is_regdmn_en302502_applicable(pdev);
1057*5113495bSYour Name }
1058*5113495bSYour Name #endif
1059*5113495bSYour Name 
wlan_reg_modify_pdev_chan_range(struct wlan_objmgr_pdev * pdev)1060*5113495bSYour Name QDF_STATUS wlan_reg_modify_pdev_chan_range(struct wlan_objmgr_pdev *pdev)
1061*5113495bSYour Name {
1062*5113495bSYour Name 	return reg_modify_pdev_chan_range(pdev);
1063*5113495bSYour Name }
1064*5113495bSYour Name 
wlan_reg_update_pdev_wireless_modes(struct wlan_objmgr_pdev * pdev,uint64_t wireless_modes)1065*5113495bSYour Name QDF_STATUS wlan_reg_update_pdev_wireless_modes(struct wlan_objmgr_pdev *pdev,
1066*5113495bSYour Name 					       uint64_t wireless_modes)
1067*5113495bSYour Name {
1068*5113495bSYour Name 	return reg_update_pdev_wireless_modes(pdev, wireless_modes);
1069*5113495bSYour Name }
1070*5113495bSYour Name #ifdef DISABLE_UNII_SHARED_BANDS
wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev * pdev,uint8_t unii_5g_bitmap)1071*5113495bSYour Name QDF_STATUS wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev *pdev,
1072*5113495bSYour Name 				      uint8_t unii_5g_bitmap)
1073*5113495bSYour Name {
1074*5113495bSYour Name 	return reg_disable_chan_coex(pdev, unii_5g_bitmap);
1075*5113495bSYour Name }
1076*5113495bSYour Name #endif
1077*5113495bSYour Name 
1078*5113495bSYour Name #ifdef CONFIG_CHAN_FREQ_API
wlan_reg_is_same_band_freqs(qdf_freq_t freq1,qdf_freq_t freq2)1079*5113495bSYour Name bool wlan_reg_is_same_band_freqs(qdf_freq_t freq1, qdf_freq_t freq2)
1080*5113495bSYour Name {
1081*5113495bSYour Name 	return reg_is_same_band_freqs(freq1, freq2);
1082*5113495bSYour Name }
1083*5113495bSYour Name 
wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq)1084*5113495bSYour Name enum channel_enum wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq)
1085*5113495bSYour Name {
1086*5113495bSYour Name 	return reg_get_chan_enum_for_freq(freq);
1087*5113495bSYour Name }
1088*5113495bSYour Name 
1089*5113495bSYour Name QDF_STATUS
wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev * pdev,enum channel_enum chan_idx,uint16_t * min_bw,uint16_t * max_bw)1090*5113495bSYour Name wlan_reg_get_min_max_bw_for_chan_index(struct wlan_objmgr_pdev *pdev,
1091*5113495bSYour Name 				       enum channel_enum chan_idx,
1092*5113495bSYour Name 				       uint16_t *min_bw, uint16_t *max_bw)
1093*5113495bSYour Name {
1094*5113495bSYour Name 	return reg_get_min_max_bw_on_cur_chan_list(pdev,
1095*5113495bSYour Name 						   chan_idx, min_bw, max_bw);
1096*5113495bSYour Name }
1097*5113495bSYour Name 
wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1098*5113495bSYour Name bool wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev *pdev,
1099*5113495bSYour Name 					       qdf_freq_t freq)
1100*5113495bSYour Name {
1101*5113495bSYour Name 	return reg_is_freq_present_in_cur_chan_list(pdev, freq);
1102*5113495bSYour Name }
1103*5113495bSYour Name 
wlan_reg_is_etsi_srd_chan_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1104*5113495bSYour Name bool wlan_reg_is_etsi_srd_chan_for_freq(struct wlan_objmgr_pdev *pdev,
1105*5113495bSYour Name 					qdf_freq_t freq)
1106*5113495bSYour Name {
1107*5113495bSYour Name 	return reg_is_etsi_srd_chan_for_freq(pdev, freq);
1108*5113495bSYour Name }
1109*5113495bSYour Name 
wlan_reg_is_dsrc_freq(qdf_freq_t freq)1110*5113495bSYour Name bool wlan_reg_is_dsrc_freq(qdf_freq_t freq)
1111*5113495bSYour Name {
1112*5113495bSYour Name 	return reg_is_dsrc_freq(freq);
1113*5113495bSYour Name }
1114*5113495bSYour Name 
wlan_reg_update_nol_ch_for_freq(struct wlan_objmgr_pdev * pdev,uint16_t * chan_freq_list,uint8_t num_ch,bool nol_ch)1115*5113495bSYour Name void wlan_reg_update_nol_ch_for_freq(struct wlan_objmgr_pdev *pdev,
1116*5113495bSYour Name 				     uint16_t *chan_freq_list,
1117*5113495bSYour Name 				     uint8_t num_ch,
1118*5113495bSYour Name 				     bool nol_ch)
1119*5113495bSYour Name {
1120*5113495bSYour Name 	reg_update_nol_ch_for_freq(pdev, chan_freq_list, num_ch, nol_ch);
1121*5113495bSYour Name }
1122*5113495bSYour Name 
wlan_reg_update_nol_history_ch_for_freq(struct wlan_objmgr_pdev * pdev,uint16_t * ch_list,uint8_t num_ch,bool nol_history_ch)1123*5113495bSYour Name void wlan_reg_update_nol_history_ch_for_freq(struct wlan_objmgr_pdev *pdev,
1124*5113495bSYour Name 					     uint16_t *ch_list,
1125*5113495bSYour Name 					     uint8_t num_ch,
1126*5113495bSYour Name 					     bool nol_history_ch)
1127*5113495bSYour Name {
1128*5113495bSYour Name 	reg_update_nol_history_ch_for_freq(pdev,
1129*5113495bSYour Name 					   ch_list,
1130*5113495bSYour Name 					   num_ch,
1131*5113495bSYour Name 					   nol_history_ch);
1132*5113495bSYour Name }
1133*5113495bSYour Name 
wlan_reg_is_dfs_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1134*5113495bSYour Name bool wlan_reg_is_dfs_for_freq(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
1135*5113495bSYour Name {
1136*5113495bSYour Name 	return reg_is_dfs_for_freq(pdev, freq);
1137*5113495bSYour Name }
1138*5113495bSYour Name 
wlan_reg_is_passive_or_disable_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_mode)1139*5113495bSYour Name bool wlan_reg_is_passive_or_disable_for_pwrmode(
1140*5113495bSYour Name 				struct wlan_objmgr_pdev *pdev,
1141*5113495bSYour Name 				qdf_freq_t freq,
1142*5113495bSYour Name 				enum supported_6g_pwr_types in_6g_pwr_mode)
1143*5113495bSYour Name {
1144*5113495bSYour Name 	return reg_is_passive_or_disable_for_pwrmode(pdev, freq,
1145*5113495bSYour Name 						     in_6g_pwr_mode);
1146*5113495bSYour Name }
1147*5113495bSYour Name 
1148*5113495bSYour Name #ifdef CONFIG_REG_6G_PWRMODE
wlan_reg_is_disable_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_mode)1149*5113495bSYour Name bool wlan_reg_is_disable_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1150*5113495bSYour Name 				     qdf_freq_t freq,
1151*5113495bSYour Name 				     enum supported_6g_pwr_types in_6g_pwr_mode)
1152*5113495bSYour Name {
1153*5113495bSYour Name 	return reg_is_disable_for_pwrmode(pdev, freq, in_6g_pwr_mode);
1154*5113495bSYour Name }
1155*5113495bSYour Name #endif
1156*5113495bSYour Name 
1157*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_is_disable_in_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1158*5113495bSYour Name bool wlan_reg_is_disable_in_secondary_list_for_freq(
1159*5113495bSYour Name 						struct wlan_objmgr_pdev *pdev,
1160*5113495bSYour Name 						qdf_freq_t freq)
1161*5113495bSYour Name {
1162*5113495bSYour Name 	return reg_is_disable_in_secondary_list_for_freq(pdev, freq);
1163*5113495bSYour Name }
1164*5113495bSYour Name 
wlan_reg_is_enable_in_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1165*5113495bSYour Name bool wlan_reg_is_enable_in_secondary_list_for_freq(
1166*5113495bSYour Name 						struct wlan_objmgr_pdev *pdev,
1167*5113495bSYour Name 						qdf_freq_t freq)
1168*5113495bSYour Name {
1169*5113495bSYour Name 	return reg_is_enable_in_secondary_list_for_freq(pdev, freq);
1170*5113495bSYour Name }
1171*5113495bSYour Name 
wlan_reg_is_dfs_in_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1172*5113495bSYour Name bool wlan_reg_is_dfs_in_secondary_list_for_freq(struct wlan_objmgr_pdev *pdev,
1173*5113495bSYour Name 						qdf_freq_t freq)
1174*5113495bSYour Name {
1175*5113495bSYour Name 	return reg_is_dfs_in_secondary_list_for_freq(pdev, freq);
1176*5113495bSYour Name }
1177*5113495bSYour Name 
1178*5113495bSYour Name QDF_STATUS
wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,bool * is_psd,uint16_t * tx_power,uint16_t * psd_eirp,uint32_t * flags)1179*5113495bSYour Name wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq(
1180*5113495bSYour Name 				struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
1181*5113495bSYour Name 				bool *is_psd, uint16_t *tx_power,
1182*5113495bSYour Name 				uint16_t *psd_eirp, uint32_t *flags)
1183*5113495bSYour Name {
1184*5113495bSYour Name 	return reg_get_channel_power_attr_from_secondary_list_for_freq(
1185*5113495bSYour Name 			pdev, freq, is_psd, tx_power, psd_eirp, flags);
1186*5113495bSYour Name }
1187*5113495bSYour Name 
1188*5113495bSYour Name QDF_STATUS
wlan_reg_decide_6ghz_power_within_bw_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum phy_ch_width bw,bool * is_psd,uint16_t * min_tx_power,int16_t * min_psd_eirp,enum reg_6g_ap_type * power_type,enum supported_6g_pwr_types pwr_mode,uint16_t input_punc_bitmap)1189*5113495bSYour Name wlan_reg_decide_6ghz_power_within_bw_for_freq(struct wlan_objmgr_pdev *pdev,
1190*5113495bSYour Name 					      qdf_freq_t freq,
1191*5113495bSYour Name 					      enum phy_ch_width bw,
1192*5113495bSYour Name 					      bool *is_psd,
1193*5113495bSYour Name 					      uint16_t *min_tx_power,
1194*5113495bSYour Name 					      int16_t *min_psd_eirp,
1195*5113495bSYour Name 					      enum reg_6g_ap_type *power_type,
1196*5113495bSYour Name 					      enum supported_6g_pwr_types pwr_mode,
1197*5113495bSYour Name 					      uint16_t input_punc_bitmap)
1198*5113495bSYour Name {
1199*5113495bSYour Name 	return reg_decide_6ghz_power_within_bw_for_freq(pdev,
1200*5113495bSYour Name 							freq,
1201*5113495bSYour Name 							bw,
1202*5113495bSYour Name 							is_psd,
1203*5113495bSYour Name 							min_tx_power,
1204*5113495bSYour Name 							min_psd_eirp,
1205*5113495bSYour Name 							power_type,
1206*5113495bSYour Name 							pwr_mode,
1207*5113495bSYour Name 							input_punc_bitmap);
1208*5113495bSYour Name }
1209*5113495bSYour Name #endif
1210*5113495bSYour Name 
wlan_reg_is_passive_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1211*5113495bSYour Name bool wlan_reg_is_passive_for_freq(struct wlan_objmgr_pdev *pdev,
1212*5113495bSYour Name 				  qdf_freq_t freq)
1213*5113495bSYour Name {
1214*5113495bSYour Name 	return reg_is_passive_for_freq(pdev, freq);
1215*5113495bSYour Name }
1216*5113495bSYour Name 
1217*5113495bSYour Name QDF_STATUS
wlan_reg_get_channel_list_with_power_for_freq(struct wlan_objmgr_pdev * pdev,struct channel_power * ch_list,uint8_t * num_chan)1218*5113495bSYour Name wlan_reg_get_channel_list_with_power_for_freq(struct wlan_objmgr_pdev *pdev,
1219*5113495bSYour Name 					      struct channel_power *ch_list,
1220*5113495bSYour Name 					      uint8_t *num_chan)
1221*5113495bSYour Name {
1222*5113495bSYour Name 	return reg_get_channel_list_with_power_for_freq(pdev,
1223*5113495bSYour Name 							ch_list,
1224*5113495bSYour Name 							num_chan);
1225*5113495bSYour Name }
1226*5113495bSYour Name 
1227*5113495bSYour Name bool
wlan_reg_chan_has_dfs_attribute_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1228*5113495bSYour Name wlan_reg_chan_has_dfs_attribute_for_freq(struct wlan_objmgr_pdev *pdev,
1229*5113495bSYour Name 					 qdf_freq_t freq)
1230*5113495bSYour Name {
1231*5113495bSYour Name 	return reg_chan_has_dfs_attribute_for_freq(pdev, freq);
1232*5113495bSYour Name }
1233*5113495bSYour Name 
1234*5113495bSYour Name enum channel_state
wlan_reg_get_5g_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,struct ch_params * ch_params,enum supported_6g_pwr_types in_6g_pwr_type)1235*5113495bSYour Name wlan_reg_get_5g_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1236*5113495bSYour Name 						 qdf_freq_t freq,
1237*5113495bSYour Name 						 struct ch_params *ch_params,
1238*5113495bSYour Name 						 enum supported_6g_pwr_types
1239*5113495bSYour Name 						 in_6g_pwr_type)
1240*5113495bSYour Name {
1241*5113495bSYour Name 	enum phy_ch_width bw;
1242*5113495bSYour Name 
1243*5113495bSYour Name 	if (!ch_params) {
1244*5113495bSYour Name 		reg_err_rl("Invalid ch_params");
1245*5113495bSYour Name 		return CHANNEL_STATE_INVALID;
1246*5113495bSYour Name 	}
1247*5113495bSYour Name 	bw = ch_params->ch_width;
1248*5113495bSYour Name 
1249*5113495bSYour Name 	if (reg_is_ch_width_320(bw)) {
1250*5113495bSYour Name 		const struct bonded_channel_freq *bonded_ch_ptr_ptr = NULL;
1251*5113495bSYour Name 		uint16_t in_punc_bitmap = reg_fetch_punc_bitmap(ch_params);
1252*5113495bSYour Name 
1253*5113495bSYour Name 		return reg_get_5g_bonded_channel_for_pwrmode(pdev, freq, bw,
1254*5113495bSYour Name 							     &bonded_ch_ptr_ptr,
1255*5113495bSYour Name 							     in_6g_pwr_type,
1256*5113495bSYour Name 							     in_punc_bitmap);
1257*5113495bSYour Name 	}
1258*5113495bSYour Name 
1259*5113495bSYour Name 	return reg_get_5g_bonded_channel_state_for_pwrmode(pdev, freq,
1260*5113495bSYour Name 							   ch_params,
1261*5113495bSYour Name 							   in_6g_pwr_type);
1262*5113495bSYour Name }
1263*5113495bSYour Name 
1264*5113495bSYour Name qdf_export_symbol(wlan_reg_get_5g_bonded_channel_state_for_pwrmode);
1265*5113495bSYour Name 
1266*5113495bSYour Name enum channel_state
wlan_reg_get_2g_bonded_channel_state_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t sec_ch_freq,enum phy_ch_width bw)1267*5113495bSYour Name wlan_reg_get_2g_bonded_channel_state_for_freq(struct wlan_objmgr_pdev *pdev,
1268*5113495bSYour Name 					      qdf_freq_t freq,
1269*5113495bSYour Name 					      qdf_freq_t sec_ch_freq,
1270*5113495bSYour Name 					      enum phy_ch_width bw)
1271*5113495bSYour Name {
1272*5113495bSYour Name 	return reg_get_2g_bonded_channel_state_for_freq(pdev,
1273*5113495bSYour Name 							freq,
1274*5113495bSYour Name 							sec_ch_freq,
1275*5113495bSYour Name 							bw);
1276*5113495bSYour Name }
1277*5113495bSYour Name 
1278*5113495bSYour Name #ifdef CONFIG_REG_6G_PWRMODE
wlan_reg_set_channel_params_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t sec_ch_2g_freq,struct ch_params * ch_params,enum supported_6g_pwr_types in_6g_pwr_mode)1279*5113495bSYour Name void wlan_reg_set_channel_params_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1280*5113495bSYour Name 					     qdf_freq_t freq,
1281*5113495bSYour Name 					     qdf_freq_t sec_ch_2g_freq,
1282*5113495bSYour Name 					     struct ch_params *ch_params,
1283*5113495bSYour Name 					     enum supported_6g_pwr_types
1284*5113495bSYour Name 					     in_6g_pwr_mode)
1285*5113495bSYour Name {
1286*5113495bSYour Name 	reg_set_channel_params_for_pwrmode(pdev, freq, sec_ch_2g_freq,
1287*5113495bSYour Name 					   ch_params,
1288*5113495bSYour Name 					   in_6g_pwr_mode, true);
1289*5113495bSYour Name }
1290*5113495bSYour Name 
1291*5113495bSYour Name qdf_export_symbol(wlan_reg_set_channel_params_for_pwrmode);
1292*5113495bSYour Name #endif
1293*5113495bSYour Name 
1294*5113495bSYour Name const struct bonded_channel_freq *
wlan_reg_get_bonded_chan_entry(qdf_freq_t freq,enum phy_ch_width chwidth,qdf_freq_t cen320_freq)1295*5113495bSYour Name wlan_reg_get_bonded_chan_entry(qdf_freq_t freq, enum phy_ch_width chwidth,
1296*5113495bSYour Name 			       qdf_freq_t cen320_freq)
1297*5113495bSYour Name {
1298*5113495bSYour Name 	return reg_get_bonded_chan_entry(freq, chwidth, cen320_freq);
1299*5113495bSYour Name }
1300*5113495bSYour Name 
1301*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
1302*5113495bSYour Name #ifdef CONFIG_REG_6G_PWRMODE
1303*5113495bSYour Name void
wlan_reg_fill_channel_list_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t sec_ch_2g_freq,enum phy_ch_width ch_width,qdf_freq_t band_center_320,struct reg_channel_list * chan_list,enum supported_6g_pwr_types in_6g_pwr_type,bool treat_nol_chan_as_disabled)1304*5113495bSYour Name wlan_reg_fill_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1305*5113495bSYour Name 				       qdf_freq_t freq,
1306*5113495bSYour Name 				       qdf_freq_t sec_ch_2g_freq,
1307*5113495bSYour Name 				       enum phy_ch_width ch_width,
1308*5113495bSYour Name 				       qdf_freq_t band_center_320,
1309*5113495bSYour Name 				       struct reg_channel_list *chan_list,
1310*5113495bSYour Name 				       enum supported_6g_pwr_types
1311*5113495bSYour Name 				       in_6g_pwr_type,
1312*5113495bSYour Name 				       bool treat_nol_chan_as_disabled)
1313*5113495bSYour Name {
1314*5113495bSYour Name 	reg_fill_channel_list_for_pwrmode(pdev, freq, sec_ch_2g_freq, ch_width,
1315*5113495bSYour Name 					  band_center_320, chan_list,
1316*5113495bSYour Name 					  in_6g_pwr_type,
1317*5113495bSYour Name 					  treat_nol_chan_as_disabled);
1318*5113495bSYour Name }
1319*5113495bSYour Name #endif /* CONFIG_REG_6G_PWRMODE */
1320*5113495bSYour Name 
wlan_reg_is_punc_bitmap_valid(enum phy_ch_width bw,uint16_t puncture_bitmap)1321*5113495bSYour Name bool wlan_reg_is_punc_bitmap_valid(enum phy_ch_width bw,
1322*5113495bSYour Name 				   uint16_t puncture_bitmap)
1323*5113495bSYour Name {
1324*5113495bSYour Name 	return reg_is_punc_bitmap_valid(bw, puncture_bitmap);
1325*5113495bSYour Name }
1326*5113495bSYour Name 
wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw,uint16_t proposed_bitmap)1327*5113495bSYour Name uint16_t wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw,
1328*5113495bSYour Name 						uint16_t proposed_bitmap)
1329*5113495bSYour Name {
1330*5113495bSYour Name 	return reg_find_nearest_puncture_pattern(bw, proposed_bitmap);
1331*5113495bSYour Name }
1332*5113495bSYour Name 
wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw,uint16_t ori_puncture_bitmap,qdf_freq_t freq,qdf_freq_t cen320_freq,enum phy_ch_width new_bw,uint16_t * new_puncture_bitmap)1333*5113495bSYour Name QDF_STATUS wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw,
1334*5113495bSYour Name 					   uint16_t ori_puncture_bitmap,
1335*5113495bSYour Name 					   qdf_freq_t freq,
1336*5113495bSYour Name 					   qdf_freq_t cen320_freq,
1337*5113495bSYour Name 					   enum phy_ch_width new_bw,
1338*5113495bSYour Name 					   uint16_t *new_puncture_bitmap)
1339*5113495bSYour Name {
1340*5113495bSYour Name 	return reg_extract_puncture_by_bw(ori_bw, ori_puncture_bitmap, freq,
1341*5113495bSYour Name 					  cen320_freq, new_bw,
1342*5113495bSYour Name 					  new_puncture_bitmap);
1343*5113495bSYour Name }
1344*5113495bSYour Name 
wlan_reg_set_create_punc_bitmap(struct ch_params * ch_params,bool is_create_punc_bitmap)1345*5113495bSYour Name void wlan_reg_set_create_punc_bitmap(struct ch_params *ch_params,
1346*5113495bSYour Name 				     bool is_create_punc_bitmap)
1347*5113495bSYour Name {
1348*5113495bSYour Name 	reg_set_create_punc_bitmap(ch_params, is_create_punc_bitmap);
1349*5113495bSYour Name }
1350*5113495bSYour Name 
1351*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_apply_puncture(struct wlan_objmgr_pdev * pdev,uint16_t puncture_bitmap,qdf_freq_t freq,enum phy_ch_width bw,qdf_freq_t cen320_freq)1352*5113495bSYour Name QDF_STATUS wlan_reg_apply_puncture(struct wlan_objmgr_pdev *pdev,
1353*5113495bSYour Name 				   uint16_t puncture_bitmap,
1354*5113495bSYour Name 				   qdf_freq_t freq,
1355*5113495bSYour Name 				   enum phy_ch_width bw,
1356*5113495bSYour Name 				   qdf_freq_t cen320_freq)
1357*5113495bSYour Name {
1358*5113495bSYour Name 	return reg_apply_puncture(pdev, puncture_bitmap, freq, bw,
1359*5113495bSYour Name 				  cen320_freq);
1360*5113495bSYour Name }
1361*5113495bSYour Name 
wlan_reg_remove_puncture(struct wlan_objmgr_pdev * pdev)1362*5113495bSYour Name QDF_STATUS wlan_reg_remove_puncture(struct wlan_objmgr_pdev *pdev)
1363*5113495bSYour Name {
1364*5113495bSYour Name 	return reg_remove_puncture(pdev);
1365*5113495bSYour Name }
1366*5113495bSYour Name #endif
1367*5113495bSYour Name #endif /* WLAN_FEATURE_11BE */
1368*5113495bSYour Name 
1369*5113495bSYour Name #ifdef CONFIG_REG_6G_PWRMODE
1370*5113495bSYour Name enum channel_state
wlan_reg_get_channel_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum supported_6g_pwr_types in_6g_pwr_type)1371*5113495bSYour Name wlan_reg_get_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1372*5113495bSYour Name 				       qdf_freq_t freq,
1373*5113495bSYour Name 				       enum supported_6g_pwr_types
1374*5113495bSYour Name 				       in_6g_pwr_type)
1375*5113495bSYour Name {
1376*5113495bSYour Name 	return reg_get_channel_state_for_pwrmode(pdev, freq, in_6g_pwr_type);
1377*5113495bSYour Name }
1378*5113495bSYour Name #endif
1379*5113495bSYour Name 
1380*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_get_channel_state_from_secondary_list_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1381*5113495bSYour Name enum channel_state wlan_reg_get_channel_state_from_secondary_list_for_freq(
1382*5113495bSYour Name 						struct wlan_objmgr_pdev *pdev,
1383*5113495bSYour Name 						qdf_freq_t freq)
1384*5113495bSYour Name {
1385*5113495bSYour Name 	return reg_get_channel_state_from_secondary_list_for_freq(pdev, freq);
1386*5113495bSYour Name }
1387*5113495bSYour Name 
1388*5113495bSYour Name QDF_STATUS
wlan_reg_get_channel_list_with_power(struct wlan_objmgr_pdev * pdev,struct channel_power * ch_list,uint8_t * num_chan,enum supported_6g_pwr_types in_6g_pwr_type)1389*5113495bSYour Name wlan_reg_get_channel_list_with_power(struct wlan_objmgr_pdev *pdev,
1390*5113495bSYour Name 				     struct channel_power *ch_list,
1391*5113495bSYour Name 				     uint8_t *num_chan,
1392*5113495bSYour Name 				     enum supported_6g_pwr_types in_6g_pwr_type)
1393*5113495bSYour Name {
1394*5113495bSYour Name 	return reg_get_channel_list_with_power(pdev, ch_list, num_chan,
1395*5113495bSYour Name 					       in_6g_pwr_type);
1396*5113495bSYour Name }
1397*5113495bSYour Name #endif
1398*5113495bSYour Name 
wlan_reg_get_channel_reg_power_for_freq(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1399*5113495bSYour Name uint8_t wlan_reg_get_channel_reg_power_for_freq(struct wlan_objmgr_pdev *pdev,
1400*5113495bSYour Name 						qdf_freq_t freq)
1401*5113495bSYour Name {
1402*5113495bSYour Name 	return reg_get_channel_reg_power_for_freq(pdev, freq);
1403*5113495bSYour Name }
1404*5113495bSYour Name 
wlan_reg_freq_to_band(qdf_freq_t freq)1405*5113495bSYour Name enum reg_wifi_band wlan_reg_freq_to_band(qdf_freq_t freq)
1406*5113495bSYour Name {
1407*5113495bSYour Name 	return reg_freq_to_band(freq);
1408*5113495bSYour Name }
1409*5113495bSYour Name qdf_export_symbol(wlan_reg_freq_to_band);
1410*5113495bSYour Name 
wlan_reg_min_chan_freq(void)1411*5113495bSYour Name qdf_freq_t wlan_reg_min_chan_freq(void)
1412*5113495bSYour Name {
1413*5113495bSYour Name 	return reg_min_chan_freq();
1414*5113495bSYour Name }
1415*5113495bSYour Name 
wlan_reg_max_chan_freq(void)1416*5113495bSYour Name qdf_freq_t wlan_reg_max_chan_freq(void)
1417*5113495bSYour Name {
1418*5113495bSYour Name 	return reg_max_chan_freq();
1419*5113495bSYour Name }
1420*5113495bSYour Name 
wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,uint16_t chan_width,bool global_tbl_lookup,uint16_t behav_limit,uint8_t * op_class,uint8_t * chan_num)1421*5113495bSYour Name void wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev *pdev,
1422*5113495bSYour Name 					  qdf_freq_t freq,
1423*5113495bSYour Name 					  uint16_t chan_width,
1424*5113495bSYour Name 					  bool global_tbl_lookup,
1425*5113495bSYour Name 					  uint16_t behav_limit,
1426*5113495bSYour Name 					  uint8_t *op_class,
1427*5113495bSYour Name 					  uint8_t *chan_num)
1428*5113495bSYour Name {
1429*5113495bSYour Name 	return reg_freq_width_to_chan_op_class(pdev, freq, chan_width,
1430*5113495bSYour Name 					       global_tbl_lookup,
1431*5113495bSYour Name 					       behav_limit,
1432*5113495bSYour Name 					       op_class,
1433*5113495bSYour Name 					       chan_num);
1434*5113495bSYour Name }
1435*5113495bSYour Name 
1436*5113495bSYour Name qdf_export_symbol(wlan_reg_freq_width_to_chan_op_class);
1437*5113495bSYour Name 
wlan_reg_freq_width_to_chan_op_class_auto(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,uint16_t chan_width,bool global_tbl_lookup,uint16_t behav_limit,uint8_t * op_class,uint8_t * chan_num)1438*5113495bSYour Name void wlan_reg_freq_width_to_chan_op_class_auto(struct wlan_objmgr_pdev *pdev,
1439*5113495bSYour Name 					       qdf_freq_t freq,
1440*5113495bSYour Name 					       uint16_t chan_width,
1441*5113495bSYour Name 					       bool global_tbl_lookup,
1442*5113495bSYour Name 					       uint16_t behav_limit,
1443*5113495bSYour Name 					       uint8_t *op_class,
1444*5113495bSYour Name 					       uint8_t *chan_num)
1445*5113495bSYour Name {
1446*5113495bSYour Name 	reg_freq_width_to_chan_op_class_auto(pdev, freq, chan_width,
1447*5113495bSYour Name 					     global_tbl_lookup,
1448*5113495bSYour Name 					     behav_limit,
1449*5113495bSYour Name 					     op_class,
1450*5113495bSYour Name 					     chan_num);
1451*5113495bSYour Name }
1452*5113495bSYour Name 
1453*5113495bSYour Name qdf_export_symbol(wlan_reg_freq_width_to_chan_op_class_auto);
1454*5113495bSYour Name 
wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,bool global_tbl_lookup,uint16_t behav_limit,uint8_t * op_class,uint8_t * chan_num)1455*5113495bSYour Name void wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev *pdev,
1456*5113495bSYour Name 				    qdf_freq_t freq,
1457*5113495bSYour Name 				    bool global_tbl_lookup,
1458*5113495bSYour Name 				    uint16_t behav_limit,
1459*5113495bSYour Name 				    uint8_t *op_class,
1460*5113495bSYour Name 				    uint8_t *chan_num)
1461*5113495bSYour Name {
1462*5113495bSYour Name 	return reg_freq_to_chan_op_class(pdev, freq,
1463*5113495bSYour Name 					 global_tbl_lookup,
1464*5113495bSYour Name 					 behav_limit,
1465*5113495bSYour Name 					 op_class,
1466*5113495bSYour Name 					 chan_num);
1467*5113495bSYour Name }
1468*5113495bSYour Name 
wlan_reg_is_freq_in_country_opclass(struct wlan_objmgr_pdev * pdev,const uint8_t country[3],uint8_t op_class,qdf_freq_t chan_freq)1469*5113495bSYour Name bool wlan_reg_is_freq_in_country_opclass(struct wlan_objmgr_pdev *pdev,
1470*5113495bSYour Name 					 const uint8_t country[3],
1471*5113495bSYour Name 					 uint8_t op_class,
1472*5113495bSYour Name 					 qdf_freq_t chan_freq)
1473*5113495bSYour Name {
1474*5113495bSYour Name 	return reg_is_freq_in_country_opclass(pdev, country,
1475*5113495bSYour Name 					      op_class, chan_freq);
1476*5113495bSYour Name }
1477*5113495bSYour Name 
1478*5113495bSYour Name enum channel_state
wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,uint16_t freq,enum phy_ch_width bw,const struct bonded_channel_freq ** bonded_chan_ptr_ptr,enum supported_6g_pwr_types in_6g_pwr_mode,uint16_t input_puncture_bitmap)1479*5113495bSYour Name wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode(
1480*5113495bSYour Name 					struct wlan_objmgr_pdev *pdev,
1481*5113495bSYour Name 					uint16_t freq,
1482*5113495bSYour Name 					enum phy_ch_width bw,
1483*5113495bSYour Name 					const
1484*5113495bSYour Name 					struct bonded_channel_freq
1485*5113495bSYour Name 					**bonded_chan_ptr_ptr,
1486*5113495bSYour Name 					enum supported_6g_pwr_types
1487*5113495bSYour Name 					in_6g_pwr_mode,
1488*5113495bSYour Name 					uint16_t input_puncture_bitmap)
1489*5113495bSYour Name {
1490*5113495bSYour Name 	/*
1491*5113495bSYour Name 	 * Get channel frequencies and state from regulatory
1492*5113495bSYour Name 	 */
1493*5113495bSYour Name 	return reg_get_5g_bonded_channel_for_pwrmode(pdev, freq, bw,
1494*5113495bSYour Name 						     bonded_chan_ptr_ptr,
1495*5113495bSYour Name 						     in_6g_pwr_mode,
1496*5113495bSYour Name 						     input_puncture_bitmap);
1497*5113495bSYour Name }
1498*5113495bSYour Name 
1499*5113495bSYour Name qdf_export_symbol(wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode);
1500*5113495bSYour Name 
1501*5113495bSYour Name #if defined(CONFIG_REG_CLIENT)
1502*5113495bSYour Name enum channel_state
wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,enum phy_ch_width bw,qdf_freq_t sec_freq,enum supported_6g_pwr_types in_6g_pwr_mode)1503*5113495bSYour Name wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1504*5113495bSYour Name 					      qdf_freq_t freq,
1505*5113495bSYour Name 					      enum phy_ch_width bw,
1506*5113495bSYour Name 					      qdf_freq_t sec_freq,
1507*5113495bSYour Name 					      enum supported_6g_pwr_types
1508*5113495bSYour Name 					      in_6g_pwr_mode)
1509*5113495bSYour Name {
1510*5113495bSYour Name 	if (WLAN_REG_IS_24GHZ_CH_FREQ(freq))
1511*5113495bSYour Name 		return reg_get_2g_bonded_channel_state_for_freq(pdev, freq,
1512*5113495bSYour Name 						       sec_freq, bw);
1513*5113495bSYour Name 	if (bw == CH_WIDTH_320MHZ) {
1514*5113495bSYour Name 		const struct bonded_channel_freq *bonded_chan_ptr_ptr = NULL;
1515*5113495bSYour Name 
1516*5113495bSYour Name 		return reg_get_chan_state_for_320(pdev, freq, 0,
1517*5113495bSYour Name 						  bw,
1518*5113495bSYour Name 						  &bonded_chan_ptr_ptr,
1519*5113495bSYour Name 						  in_6g_pwr_mode, true,
1520*5113495bSYour Name 						  NO_SCHANS_PUNC);
1521*5113495bSYour Name 	} else {
1522*5113495bSYour Name 		struct ch_params params = {0};
1523*5113495bSYour Name 
1524*5113495bSYour Name 		params.ch_width = bw;
1525*5113495bSYour Name 
1526*5113495bSYour Name 		return reg_get_5g_bonded_channel_state_for_pwrmode(
1527*5113495bSYour Name 						pdev, freq,
1528*5113495bSYour Name 						&params, in_6g_pwr_mode);
1529*5113495bSYour Name 	}
1530*5113495bSYour Name }
1531*5113495bSYour Name 
1532*5113495bSYour Name qdf_export_symbol(wlan_reg_get_bonded_channel_state_for_pwrmode);
1533*5113495bSYour Name #endif
1534*5113495bSYour Name #endif /* CONFIG CHAN FREQ API */
1535*5113495bSYour Name 
wlan_reg_get_op_class_width(struct wlan_objmgr_pdev * pdev,uint8_t op_class,bool global_tbl_lookup)1536*5113495bSYour Name uint16_t wlan_reg_get_op_class_width(struct wlan_objmgr_pdev *pdev,
1537*5113495bSYour Name 				     uint8_t op_class,
1538*5113495bSYour Name 				     bool global_tbl_lookup)
1539*5113495bSYour Name {
1540*5113495bSYour Name 	return reg_get_op_class_width(pdev, op_class,
1541*5113495bSYour Name 				      global_tbl_lookup);
1542*5113495bSYour Name }
1543*5113495bSYour Name 
wlan_reg_is_5ghz_op_class(const uint8_t * country,uint8_t op_class)1544*5113495bSYour Name bool wlan_reg_is_5ghz_op_class(const uint8_t *country, uint8_t op_class)
1545*5113495bSYour Name {
1546*5113495bSYour Name 	return reg_is_5ghz_op_class(country, op_class);
1547*5113495bSYour Name }
1548*5113495bSYour Name 
wlan_reg_is_2ghz_op_class(const uint8_t * country,uint8_t op_class)1549*5113495bSYour Name bool wlan_reg_is_2ghz_op_class(const uint8_t *country, uint8_t op_class)
1550*5113495bSYour Name {
1551*5113495bSYour Name 	return reg_is_2ghz_op_class(country, op_class);
1552*5113495bSYour Name }
1553*5113495bSYour Name 
1554*5113495bSYour Name qdf_export_symbol(wlan_reg_is_2ghz_op_class);
1555*5113495bSYour Name 
wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev * pdev,uint8_t op_class)1556*5113495bSYour Name bool wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev,
1557*5113495bSYour Name 			       uint8_t op_class)
1558*5113495bSYour Name {
1559*5113495bSYour Name 	return reg_is_6ghz_op_class(pdev, op_class);
1560*5113495bSYour Name }
1561*5113495bSYour Name 
1562*5113495bSYour Name qdf_export_symbol(wlan_reg_is_6ghz_op_class);
1563*5113495bSYour Name 
1564*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_is_6ghz_supported(struct wlan_objmgr_psoc * psoc)1565*5113495bSYour Name bool wlan_reg_is_6ghz_supported(struct wlan_objmgr_psoc *psoc)
1566*5113495bSYour Name {
1567*5113495bSYour Name 	return reg_is_6ghz_supported(psoc);
1568*5113495bSYour Name }
1569*5113495bSYour Name #endif
1570*5113495bSYour Name 
1571*5113495bSYour Name #ifdef HOST_OPCLASS_EXT
1572*5113495bSYour Name qdf_freq_t
wlan_reg_country_chan_opclass_to_freq(struct wlan_objmgr_pdev * pdev,const uint8_t country[3],uint8_t chan,uint8_t op_class,bool strict)1573*5113495bSYour Name wlan_reg_country_chan_opclass_to_freq(struct wlan_objmgr_pdev *pdev,
1574*5113495bSYour Name 				      const uint8_t country[3],
1575*5113495bSYour Name 				      uint8_t chan, uint8_t op_class,
1576*5113495bSYour Name 				      bool strict)
1577*5113495bSYour Name {
1578*5113495bSYour Name 	return reg_country_chan_opclass_to_freq(pdev, country, chan, op_class,
1579*5113495bSYour Name 						strict);
1580*5113495bSYour Name }
1581*5113495bSYour Name #endif
1582*5113495bSYour Name 
wlan_reg_chan_opclass_to_freq(uint8_t chan,uint8_t op_class,bool global_tbl_lookup)1583*5113495bSYour Name uint16_t wlan_reg_chan_opclass_to_freq(uint8_t chan,
1584*5113495bSYour Name 				       uint8_t op_class,
1585*5113495bSYour Name 				       bool global_tbl_lookup)
1586*5113495bSYour Name {
1587*5113495bSYour Name 	if (!chan || !op_class)
1588*5113495bSYour Name 		return 0;
1589*5113495bSYour Name 
1590*5113495bSYour Name 	return reg_chan_opclass_to_freq(chan, op_class, global_tbl_lookup);
1591*5113495bSYour Name }
1592*5113495bSYour Name 
wlan_reg_compute_6g_center_freq_from_cfi(uint8_t ieee_6g_cfi)1593*5113495bSYour Name qdf_freq_t wlan_reg_compute_6g_center_freq_from_cfi(uint8_t ieee_6g_cfi)
1594*5113495bSYour Name {
1595*5113495bSYour Name 	if (!ieee_6g_cfi)
1596*5113495bSYour Name 		return 0;
1597*5113495bSYour Name 
1598*5113495bSYour Name 	return reg_compute_6g_center_freq_from_cfi(ieee_6g_cfi);
1599*5113495bSYour Name }
1600*5113495bSYour Name 
wlan_reg_chan_opclass_to_freq_auto(uint8_t chan,uint8_t op_class,bool global_tbl_lookup)1601*5113495bSYour Name qdf_freq_t wlan_reg_chan_opclass_to_freq_auto(uint8_t chan, uint8_t op_class,
1602*5113495bSYour Name 					      bool global_tbl_lookup)
1603*5113495bSYour Name {
1604*5113495bSYour Name 	if (!chan || !op_class)
1605*5113495bSYour Name 		return 0;
1606*5113495bSYour Name 
1607*5113495bSYour Name 	return reg_chan_opclass_to_freq_auto(chan, op_class, global_tbl_lookup);
1608*5113495bSYour Name }
1609*5113495bSYour Name 
1610*5113495bSYour Name #ifdef CHECK_REG_PHYMODE
wlan_reg_get_max_phymode(struct wlan_objmgr_pdev * pdev,enum reg_phymode phy_in,qdf_freq_t freq)1611*5113495bSYour Name enum reg_phymode wlan_reg_get_max_phymode(struct wlan_objmgr_pdev *pdev,
1612*5113495bSYour Name 					  enum reg_phymode phy_in,
1613*5113495bSYour Name 					  qdf_freq_t freq)
1614*5113495bSYour Name {
1615*5113495bSYour Name 	return reg_get_max_phymode(pdev, phy_in, freq);
1616*5113495bSYour Name }
1617*5113495bSYour Name #endif /* CHECK_REG_PHYMODE */
1618*5113495bSYour Name 
1619*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
wlan_reg_band_bitmap_to_band_info(uint32_t band_bitmap)1620*5113495bSYour Name enum band_info wlan_reg_band_bitmap_to_band_info(uint32_t band_bitmap)
1621*5113495bSYour Name {
1622*5113495bSYour Name 	return reg_band_bitmap_to_band_info(band_bitmap);
1623*5113495bSYour Name }
1624*5113495bSYour Name 
1625*5113495bSYour Name QDF_STATUS
wlan_reg_update_tx_power_on_ctry_change(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id)1626*5113495bSYour Name wlan_reg_update_tx_power_on_ctry_change(struct wlan_objmgr_pdev *pdev,
1627*5113495bSYour Name 					uint8_t vdev_id)
1628*5113495bSYour Name {
1629*5113495bSYour Name 	return reg_update_tx_power_on_ctry_change(pdev, vdev_id);
1630*5113495bSYour Name }
1631*5113495bSYour Name #endif
1632*5113495bSYour Name 
1633*5113495bSYour Name #if defined(CONFIG_BAND_6GHZ)
wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev * pdev,bool * reg_rnr_tpe_usable)1634*5113495bSYour Name QDF_STATUS wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev *pdev,
1635*5113495bSYour Name 				       bool *reg_rnr_tpe_usable)
1636*5113495bSYour Name {
1637*5113495bSYour Name 	return reg_get_rnr_tpe_usable(pdev, reg_rnr_tpe_usable);
1638*5113495bSYour Name }
1639*5113495bSYour Name 
wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev * pdev,bool * reg_unspecified_ap_usable)1640*5113495bSYour Name QDF_STATUS wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev *pdev,
1641*5113495bSYour Name 					      bool *reg_unspecified_ap_usable)
1642*5113495bSYour Name {
1643*5113495bSYour Name 	return reg_get_unspecified_ap_usable(pdev, reg_unspecified_ap_usable);
1644*5113495bSYour Name }
1645*5113495bSYour Name 
1646*5113495bSYour Name QDF_STATUS
wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type * reg_cur_6g_ap_pwr_type)1647*5113495bSYour Name wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev,
1648*5113495bSYour Name 				enum reg_6g_ap_type *reg_cur_6g_ap_pwr_type)
1649*5113495bSYour Name {
1650*5113495bSYour Name 	return reg_get_cur_6g_ap_pwr_type(pdev, reg_cur_6g_ap_pwr_type);
1651*5113495bSYour Name }
1652*5113495bSYour Name 
1653*5113495bSYour Name qdf_export_symbol(wlan_reg_get_cur_6g_ap_pwr_type);
1654*5113495bSYour Name 
1655*5113495bSYour Name QDF_STATUS
wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_client_type * reg_cur_6g_client_mobility_type)1656*5113495bSYour Name wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev *pdev,
1657*5113495bSYour Name 				enum reg_6g_client_type
1658*5113495bSYour Name 				*reg_cur_6g_client_mobility_type)
1659*5113495bSYour Name {
1660*5113495bSYour Name 	return reg_get_cur_6g_client_type(pdev,
1661*5113495bSYour Name 					  reg_cur_6g_client_mobility_type);
1662*5113495bSYour Name }
1663*5113495bSYour Name 
1664*5113495bSYour Name qdf_export_symbol(wlan_reg_get_cur_6g_client_type);
1665*5113495bSYour Name 
1666*5113495bSYour Name QDF_STATUS
wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_client_type in_6ghz_client_type)1667*5113495bSYour Name wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev *pdev,
1668*5113495bSYour Name 				  enum reg_6g_client_type in_6ghz_client_type)
1669*5113495bSYour Name {
1670*5113495bSYour Name 	return reg_set_cur_6ghz_client_type(pdev, in_6ghz_client_type);
1671*5113495bSYour Name }
1672*5113495bSYour Name 
1673*5113495bSYour Name QDF_STATUS
wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev * pdev)1674*5113495bSYour Name wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev *pdev)
1675*5113495bSYour Name {
1676*5113495bSYour Name 	return reg_set_6ghz_client_type_from_target(pdev);
1677*5113495bSYour Name }
1678*5113495bSYour Name 
wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev * pdev)1679*5113495bSYour Name bool wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev *pdev)
1680*5113495bSYour Name {
1681*5113495bSYour Name 	return reg_is_6g_psd_power(pdev);
1682*5113495bSYour Name }
1683*5113495bSYour Name 
wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev * pdev,qdf_freq_t chan_freq,bool * is_psd,uint16_t * tx_power,uint16_t * eirp_psd_power)1684*5113495bSYour Name QDF_STATUS wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev *pdev,
1685*5113495bSYour Name 					 qdf_freq_t chan_freq, bool *is_psd,
1686*5113495bSYour Name 					 uint16_t *tx_power,
1687*5113495bSYour Name 					 uint16_t *eirp_psd_power)
1688*5113495bSYour Name {
1689*5113495bSYour Name 	return reg_get_6g_chan_ap_power(pdev, chan_freq, is_psd,
1690*5113495bSYour Name 					tx_power, eirp_psd_power);
1691*5113495bSYour Name }
1692*5113495bSYour Name 
1693*5113495bSYour Name qdf_export_symbol(wlan_reg_get_6g_chan_ap_power);
1694*5113495bSYour Name 
1695*5113495bSYour Name QDF_STATUS
wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_type,qdf_freq_t chan_freq,bool is_psd,uint16_t * tx_power,uint16_t * eirp_psd_power)1696*5113495bSYour Name wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev *pdev,
1697*5113495bSYour Name 					    enum reg_6g_ap_type ap_type,
1698*5113495bSYour Name 					    qdf_freq_t chan_freq,
1699*5113495bSYour Name 					    bool is_psd, uint16_t *tx_power,
1700*5113495bSYour Name 					    uint16_t *eirp_psd_power)
1701*5113495bSYour Name {
1702*5113495bSYour Name 	return reg_get_client_power_for_connecting_ap(pdev, ap_type, chan_freq,
1703*5113495bSYour Name 						      is_psd, tx_power,
1704*5113495bSYour Name 						      eirp_psd_power);
1705*5113495bSYour Name }
1706*5113495bSYour Name 
1707*5113495bSYour Name QDF_STATUS
wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev * pdev,enum reg_6g_client_type client_type,qdf_freq_t chan_freq,bool * is_psd,uint16_t * tx_power,uint16_t * eirp_psd_power)1708*5113495bSYour Name wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev *pdev,
1709*5113495bSYour Name 				      enum reg_6g_client_type client_type,
1710*5113495bSYour Name 				      qdf_freq_t chan_freq,
1711*5113495bSYour Name 				      bool *is_psd, uint16_t *tx_power,
1712*5113495bSYour Name 				      uint16_t *eirp_psd_power)
1713*5113495bSYour Name {
1714*5113495bSYour Name 	return reg_get_client_power_for_6ghz_ap(pdev, client_type, chan_freq,
1715*5113495bSYour Name 						is_psd, tx_power,
1716*5113495bSYour Name 						eirp_psd_power);
1717*5113495bSYour Name }
1718*5113495bSYour Name 
1719*5113495bSYour Name QDF_STATUS
wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_pwr_type)1720*5113495bSYour Name wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev *pdev,
1721*5113495bSYour Name 					 enum reg_6g_ap_type ap_pwr_type)
1722*5113495bSYour Name {
1723*5113495bSYour Name 	return reg_set_ap_pwr_and_update_chan_list(pdev, ap_pwr_type);
1724*5113495bSYour Name }
1725*5113495bSYour Name 
1726*5113495bSYour Name qdf_export_symbol(wlan_reg_set_ap_pwr_and_update_chan_list);
1727*5113495bSYour Name 
1728*5113495bSYour Name uint8_t
wlan_reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type ap_pwr_type)1729*5113495bSYour Name wlan_reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev *pdev,
1730*5113495bSYour Name 				      enum reg_6g_ap_type ap_pwr_type)
1731*5113495bSYour Name {
1732*5113495bSYour Name 	return reg_get_num_rules_of_ap_pwr_type(pdev, ap_pwr_type);
1733*5113495bSYour Name }
1734*5113495bSYour Name 
1735*5113495bSYour Name qdf_export_symbol(wlan_reg_get_num_rules_of_ap_pwr_type);
1736*5113495bSYour Name 
wlan_reg_get_superchan_entry(struct wlan_objmgr_pdev * pdev,enum channel_enum chan_enum,const struct super_chan_info ** p_sup_chan_entry)1737*5113495bSYour Name QDF_STATUS wlan_reg_get_superchan_entry(
1738*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev,
1739*5113495bSYour Name 		enum channel_enum chan_enum,
1740*5113495bSYour Name 		const struct super_chan_info **p_sup_chan_entry)
1741*5113495bSYour Name {
1742*5113495bSYour Name 	return reg_get_superchan_entry(pdev, chan_enum, p_sup_chan_entry);
1743*5113495bSYour Name }
1744*5113495bSYour Name 
1745*5113495bSYour Name enum supported_6g_pwr_types
wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type ap_pwr_type)1746*5113495bSYour Name wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type
1747*5113495bSYour Name 						   ap_pwr_type)
1748*5113495bSYour Name {
1749*5113495bSYour Name 	return reg_conv_6g_ap_type_to_supported_6g_pwr_types(ap_pwr_type);
1750*5113495bSYour Name }
1751*5113495bSYour Name 
1752*5113495bSYour Name enum supported_6g_pwr_types
wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1753*5113495bSYour Name wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
1754*5113495bSYour Name {
1755*5113495bSYour Name 	return reg_get_best_6g_pwr_type(pdev, freq);
1756*5113495bSYour Name }
1757*5113495bSYour Name 
1758*5113495bSYour Name enum reg_6g_ap_type
wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types in_6g_pwr_type)1759*5113495bSYour Name wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types
1760*5113495bSYour Name 						  in_6g_pwr_type)
1761*5113495bSYour Name {
1762*5113495bSYour Name 	return reg_convert_supported_6g_pwr_type_to_ap_pwr_type(in_6g_pwr_type);
1763*5113495bSYour Name }
1764*5113495bSYour Name #endif /* CONFIG_BAND_6GHZ */
1765*5113495bSYour Name 
wlan_reg_is_ext_tpc_supported(struct wlan_objmgr_psoc * psoc)1766*5113495bSYour Name bool wlan_reg_is_ext_tpc_supported(struct wlan_objmgr_psoc *psoc)
1767*5113495bSYour Name {
1768*5113495bSYour Name 	return reg_is_ext_tpc_supported(psoc);
1769*5113495bSYour Name }
1770*5113495bSYour Name 
1771*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev * pdev)1772*5113495bSYour Name bool wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev *pdev)
1773*5113495bSYour Name {
1774*5113495bSYour Name 	return reg_is_afc_power_event_received(pdev);
1775*5113495bSYour Name }
1776*5113495bSYour Name 
1777*5113495bSYour Name qdf_export_symbol(wlan_reg_is_afc_power_event_received);
1778*5113495bSYour Name 
wlan_reg_is_afc_done(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq)1779*5113495bSYour Name bool wlan_reg_is_afc_done(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
1780*5113495bSYour Name {
1781*5113495bSYour Name 	return reg_is_afc_done(pdev, freq);
1782*5113495bSYour Name }
1783*5113495bSYour Name 
1784*5113495bSYour Name qdf_export_symbol(wlan_reg_is_afc_done);
1785*5113495bSYour Name 
wlan_reg_get_afc_req_id(struct wlan_objmgr_pdev * pdev,uint64_t * req_id)1786*5113495bSYour Name QDF_STATUS wlan_reg_get_afc_req_id(struct wlan_objmgr_pdev *pdev,
1787*5113495bSYour Name 				   uint64_t *req_id)
1788*5113495bSYour Name {
1789*5113495bSYour Name 	return reg_get_afc_req_id(pdev, req_id);
1790*5113495bSYour Name }
1791*5113495bSYour Name 
1792*5113495bSYour Name qdf_export_symbol(wlan_reg_get_afc_req_id);
1793*5113495bSYour Name 
wlan_reg_is_afc_expiry_event_received(struct wlan_objmgr_pdev * pdev)1794*5113495bSYour Name bool wlan_reg_is_afc_expiry_event_received(struct wlan_objmgr_pdev *pdev)
1795*5113495bSYour Name {
1796*5113495bSYour Name 	return reg_is_afc_expiry_event_received(pdev);
1797*5113495bSYour Name }
1798*5113495bSYour Name 
1799*5113495bSYour Name qdf_export_symbol(wlan_reg_is_afc_expiry_event_received);
1800*5113495bSYour Name 
wlan_reg_is_noaction_on_afc_pwr_evt(struct wlan_objmgr_pdev * pdev)1801*5113495bSYour Name bool wlan_reg_is_noaction_on_afc_pwr_evt(struct wlan_objmgr_pdev *pdev)
1802*5113495bSYour Name {
1803*5113495bSYour Name 	return reg_is_noaction_on_afc_pwr_evt(pdev);
1804*5113495bSYour Name }
1805*5113495bSYour Name 
1806*5113495bSYour Name QDF_STATUS
wlan_reg_get_afc_dev_deploy_type(struct wlan_objmgr_pdev * pdev,enum reg_afc_dev_deploy_type * afc_dev_type)1807*5113495bSYour Name wlan_reg_get_afc_dev_deploy_type(struct wlan_objmgr_pdev *pdev,
1808*5113495bSYour Name 				 enum reg_afc_dev_deploy_type *afc_dev_type)
1809*5113495bSYour Name {
1810*5113495bSYour Name 	return reg_get_afc_dev_deploy_type(pdev, afc_dev_type);
1811*5113495bSYour Name }
1812*5113495bSYour Name 
1813*5113495bSYour Name qdf_export_symbol(wlan_reg_get_afc_dev_deploy_type);
1814*5113495bSYour Name 
1815*5113495bSYour Name bool
wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev * pdev,enum reg_6g_ap_type root_ap_pwr_mode)1816*5113495bSYour Name wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev *pdev,
1817*5113495bSYour Name 				enum reg_6g_ap_type root_ap_pwr_mode)
1818*5113495bSYour Name {
1819*5113495bSYour Name 	return reg_is_sta_connect_allowed(pdev, root_ap_pwr_mode);
1820*5113495bSYour Name }
1821*5113495bSYour Name 
1822*5113495bSYour Name qdf_export_symbol(wlan_reg_is_sta_connect_allowed);
1823*5113495bSYour Name #endif /* CONFIG_AFC_SUPPORT */
1824*5113495bSYour Name 
wlan_reg_is_chwidth_supported(struct wlan_objmgr_pdev * pdev,enum phy_ch_width ch_width,bool * is_supported)1825*5113495bSYour Name QDF_STATUS wlan_reg_is_chwidth_supported(struct wlan_objmgr_pdev *pdev,
1826*5113495bSYour Name 					 enum phy_ch_width ch_width,
1827*5113495bSYour Name 					 bool *is_supported)
1828*5113495bSYour Name {
1829*5113495bSYour Name 	return reg_is_chwidth_supported(pdev, ch_width, is_supported);
1830*5113495bSYour Name }
1831*5113495bSYour Name 
1832*5113495bSYour Name qdf_export_symbol(wlan_reg_is_chwidth_supported);
1833*5113495bSYour Name 
1834*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev * pdev)1835*5113495bSYour Name qdf_freq_t wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev *pdev)
1836*5113495bSYour Name {
1837*5113495bSYour Name 	return reg_get_thresh_priority_freq(pdev);
1838*5113495bSYour Name }
1839*5113495bSYour Name 
wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev * pdev,int16_t psd,uint16_t ch_bw,int16_t * eirp)1840*5113495bSYour Name QDF_STATUS wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev *pdev,
1841*5113495bSYour Name 			       int16_t psd,
1842*5113495bSYour Name 			       uint16_t ch_bw,
1843*5113495bSYour Name 			       int16_t *eirp)
1844*5113495bSYour Name {
1845*5113495bSYour Name 	return reg_psd_2_eirp(pdev, psd, ch_bw, eirp);
1846*5113495bSYour Name }
1847*5113495bSYour Name 
1848*5113495bSYour Name qdf_export_symbol(wlan_reg_psd_2_eirp);
1849*5113495bSYour Name 
wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev * pdev,uint16_t ch_bw,int16_t eirp,int16_t * psd)1850*5113495bSYour Name QDF_STATUS wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev *pdev, uint16_t ch_bw,
1851*5113495bSYour Name 			       int16_t eirp, int16_t *psd)
1852*5113495bSYour Name {
1853*5113495bSYour Name 	return reg_eirp_2_psd(pdev, ch_bw, eirp, psd);
1854*5113495bSYour Name }
1855*5113495bSYour Name 
1856*5113495bSYour Name enum reg_6g_ap_type
wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t cen320,uint16_t bw,uint16_t in_punc_pattern)1857*5113495bSYour Name wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
1858*5113495bSYour Name 			   qdf_freq_t cen320,
1859*5113495bSYour Name 			   uint16_t bw, uint16_t in_punc_pattern)
1860*5113495bSYour Name {
1861*5113495bSYour Name 	return reg_get_best_pwr_mode(pdev, freq, cen320, bw, in_punc_pattern);
1862*5113495bSYour Name }
1863*5113495bSYour Name 
1864*5113495bSYour Name qdf_export_symbol(wlan_reg_get_best_pwr_mode);
1865*5113495bSYour Name 
wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev * pdev,qdf_freq_t freq,qdf_freq_t cen320,uint16_t bw,enum reg_6g_ap_type ap_pwr_type,uint16_t in_punc_pattern,bool is_client_list_lookup_needed,enum reg_6g_client_type client_type)1866*5113495bSYour Name int8_t wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
1867*5113495bSYour Name 			     qdf_freq_t cen320, uint16_t bw,
1868*5113495bSYour Name 			     enum reg_6g_ap_type ap_pwr_type,
1869*5113495bSYour Name 			     uint16_t in_punc_pattern,
1870*5113495bSYour Name 			     bool is_client_list_lookup_needed,
1871*5113495bSYour Name 			     enum reg_6g_client_type client_type)
1872*5113495bSYour Name {
1873*5113495bSYour Name 	return reg_get_eirp_pwr(pdev, freq, cen320, bw, ap_pwr_type,
1874*5113495bSYour Name 				in_punc_pattern, is_client_list_lookup_needed,
1875*5113495bSYour Name 				client_type);
1876*5113495bSYour Name }
1877*5113495bSYour Name 
1878*5113495bSYour Name qdf_export_symbol(wlan_reg_get_eirp_pwr);
1879*5113495bSYour Name 
1880*5113495bSYour Name #endif /* CONFIG_BAND_6GHZ */
1881*5113495bSYour Name 
wlan_reg_find_chwidth_from_bw(uint16_t bw)1882*5113495bSYour Name enum phy_ch_width wlan_reg_find_chwidth_from_bw(uint16_t bw)
1883*5113495bSYour Name {
1884*5113495bSYour Name 	return reg_find_chwidth_from_bw(bw);
1885*5113495bSYour Name }
1886*5113495bSYour Name 
1887*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
1888*5113495bSYour Name enum channel_state
wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev * pdev,uint16_t freq,qdf_freq_t center_320,enum phy_ch_width ch_width,const struct bonded_channel_freq ** bonded_chan_ptr_ptr,enum supported_6g_pwr_types in_6g_pwr_type,bool treat_nol_chan_as_disabled,uint16_t input_puncture_bitmap)1889*5113495bSYour Name wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev *pdev,
1890*5113495bSYour Name 				uint16_t freq,
1891*5113495bSYour Name 				qdf_freq_t center_320,
1892*5113495bSYour Name 				enum phy_ch_width ch_width,
1893*5113495bSYour Name 				const struct bonded_channel_freq
1894*5113495bSYour Name 				**bonded_chan_ptr_ptr,
1895*5113495bSYour Name 				enum supported_6g_pwr_types in_6g_pwr_type,
1896*5113495bSYour Name 				bool treat_nol_chan_as_disabled,
1897*5113495bSYour Name 				uint16_t input_puncture_bitmap)
1898*5113495bSYour Name {
1899*5113495bSYour Name 	return reg_get_chan_state_for_320(pdev, freq, center_320,
1900*5113495bSYour Name 					  ch_width, bonded_chan_ptr_ptr,
1901*5113495bSYour Name 					  in_6g_pwr_type,
1902*5113495bSYour Name 					  treat_nol_chan_as_disabled,
1903*5113495bSYour Name 					  input_puncture_bitmap);
1904*5113495bSYour Name }
1905*5113495bSYour Name #endif
1906*5113495bSYour Name 
1907*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev * pdev,enum channel_enum chan_idx,enum supported_6g_pwr_types in_6g_pwr_mode)1908*5113495bSYour Name bool wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
1909*5113495bSYour Name 				     enum channel_enum chan_idx,
1910*5113495bSYour Name 				     enum supported_6g_pwr_types in_6g_pwr_mode)
1911*5113495bSYour Name {
1912*5113495bSYour Name 	return reg_is_sup_chan_entry_afc_done(pdev, chan_idx, in_6g_pwr_mode);
1913*5113495bSYour Name }
1914*5113495bSYour Name 
1915*5113495bSYour Name qdf_export_symbol(wlan_is_sup_chan_entry_afc_done);
1916*5113495bSYour Name 
1917*5113495bSYour Name QDF_STATUS
wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev * pdev)1918*5113495bSYour Name wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev)
1919*5113495bSYour Name {
1920*5113495bSYour Name 	return reg_display_super_chan_list(pdev);
1921*5113495bSYour Name }
1922*5113495bSYour Name 
1923*5113495bSYour Name #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ)
1924*5113495bSYour Name QDF_STATUS
wlan_reg_get_afc_freq_range_and_psd_limits(struct wlan_objmgr_pdev * pdev,uint8_t num_freq_obj,struct afc_freq_obj * afc_obj)1925*5113495bSYour Name wlan_reg_get_afc_freq_range_and_psd_limits(struct wlan_objmgr_pdev *pdev,
1926*5113495bSYour Name 					   uint8_t num_freq_obj,
1927*5113495bSYour Name 					   struct afc_freq_obj *afc_obj)
1928*5113495bSYour Name {
1929*5113495bSYour Name 	return reg_get_afc_freq_range_and_psd_limits(pdev, num_freq_obj,
1930*5113495bSYour Name 						     afc_obj);
1931*5113495bSYour Name }
1932*5113495bSYour Name 
1933*5113495bSYour Name QDF_STATUS
wlan_reg_get_num_afc_freq_obj(struct wlan_objmgr_pdev * pdev,uint8_t * num_freq_obj)1934*5113495bSYour Name wlan_reg_get_num_afc_freq_obj(struct wlan_objmgr_pdev *pdev,
1935*5113495bSYour Name 			      uint8_t *num_freq_obj)
1936*5113495bSYour Name {
1937*5113495bSYour Name 	return reg_get_num_afc_freq_obj(pdev, num_freq_obj);
1938*5113495bSYour Name }
1939*5113495bSYour Name 
wlan_reg_set_afc_power_event_received(struct wlan_objmgr_pdev * pdev,bool val)1940*5113495bSYour Name QDF_STATUS wlan_reg_set_afc_power_event_received(struct wlan_objmgr_pdev *pdev,
1941*5113495bSYour Name 						 bool val)
1942*5113495bSYour Name {
1943*5113495bSYour Name 	return reg_set_afc_power_event_received(pdev, val);
1944*5113495bSYour Name }
1945*5113495bSYour Name #endif
1946*5113495bSYour Name 
1947*5113495bSYour Name #endif
1948*5113495bSYour Name 
1949*5113495bSYour Name QDF_STATUS
wlan_reg_recompute_current_chan_list(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev)1950*5113495bSYour Name wlan_reg_recompute_current_chan_list(struct wlan_objmgr_psoc *psoc,
1951*5113495bSYour Name 				     struct wlan_objmgr_pdev *pdev)
1952*5113495bSYour Name {
1953*5113495bSYour Name 	struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
1954*5113495bSYour Name 
1955*5113495bSYour Name 	pdev_priv_obj = reg_get_pdev_obj(pdev);
1956*5113495bSYour Name 	if (!IS_VALID_PDEV_REG_OBJ(pdev_priv_obj)) {
1957*5113495bSYour Name 		reg_err("reg pdev priv obj is NULL");
1958*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1959*5113495bSYour Name 	}
1960*5113495bSYour Name 
1961*5113495bSYour Name 	reg_debug("Recomputing the current channel list");
1962*5113495bSYour Name 	reg_compute_pdev_current_chan_list(pdev_priv_obj);
1963*5113495bSYour Name 	return reg_send_scheduler_msg_nb(psoc, pdev);
1964*5113495bSYour Name }
1965*5113495bSYour Name 
1966*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
1967*5113495bSYour Name QDF_STATUS
wlan_reg_modify_indoor_concurrency(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,uint32_t freq,enum phy_ch_width width,bool add)1968*5113495bSYour Name wlan_reg_modify_indoor_concurrency(struct wlan_objmgr_pdev *pdev,
1969*5113495bSYour Name 				   uint8_t vdev_id, uint32_t freq,
1970*5113495bSYour Name 				   enum phy_ch_width width, bool add)
1971*5113495bSYour Name {
1972*5113495bSYour Name 	if (add)
1973*5113495bSYour Name 		return reg_add_indoor_concurrency(pdev, vdev_id, freq, width);
1974*5113495bSYour Name 	else
1975*5113495bSYour Name 		return reg_remove_indoor_concurrency(pdev, vdev_id, freq);
1976*5113495bSYour Name }
1977*5113495bSYour Name #endif
1978*5113495bSYour Name 
1979*5113495bSYour Name void
wlan_reg_register_is_chan_connected_callback(struct wlan_objmgr_psoc * psoc,void * cbk)1980*5113495bSYour Name wlan_reg_register_is_chan_connected_callback(struct wlan_objmgr_psoc *psoc,
1981*5113495bSYour Name 					     void *cbk)
1982*5113495bSYour Name {
1983*5113495bSYour Name 	reg_register_is_chan_connected_callback(psoc,
1984*5113495bSYour Name 				(reg_get_connected_chan_for_mode_callback)cbk);
1985*5113495bSYour Name }
1986*5113495bSYour Name 
1987*5113495bSYour Name void
wlan_reg_unregister_is_chan_connected_callback(struct wlan_objmgr_psoc * psoc,void * cbk)1988*5113495bSYour Name wlan_reg_unregister_is_chan_connected_callback(struct wlan_objmgr_psoc *psoc,
1989*5113495bSYour Name 					       void *cbk)
1990*5113495bSYour Name {
1991*5113495bSYour Name 	reg_unregister_is_chan_connected_callback(psoc,
1992*5113495bSYour Name 				(reg_get_connected_chan_for_mode_callback)cbk);
1993*5113495bSYour Name }
1994*5113495bSYour Name 
1995*5113495bSYour Name qdf_freq_t
wlan_reg_get_endchan_cen_from_bandstart(qdf_freq_t band_start,uint16_t bw)1996*5113495bSYour Name wlan_reg_get_endchan_cen_from_bandstart(qdf_freq_t band_start,
1997*5113495bSYour Name 					uint16_t bw)
1998*5113495bSYour Name {
1999*5113495bSYour Name 	return reg_get_endchan_cen_from_bandstart(band_start, bw);
2000*5113495bSYour Name }
2001*5113495bSYour Name 
2002*5113495bSYour Name QDF_STATUS
wlan_reg_get_opclass_from_map(const struct reg_dmn_op_class_map_t ** map,bool is_global_op_table_needed)2003*5113495bSYour Name wlan_reg_get_opclass_from_map(const struct reg_dmn_op_class_map_t **map,
2004*5113495bSYour Name 			      bool is_global_op_table_needed)
2005*5113495bSYour Name {
2006*5113495bSYour Name 	return reg_get_opclass_from_map(map, is_global_op_table_needed);
2007*5113495bSYour Name }
2008