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