xref: /wlan-dirver/qca-wifi-host-cmn/umac/regulatory/dispatcher/inc/wlan_reg_services_api.h (revision 8cfe6b10058a04cafb17eed051f2ddf11bee8931)
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  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: wlan_reg_services_api.h
22  * This file provides prototypes of the routines needed for the
23  * external components to utilize the services provided by the
24  * regulatory component.
25  */
26 
27 #ifndef __WLAN_REG_SERVICES_API_H
28 #define __WLAN_REG_SERVICES_API_H
29 
30 #include <reg_services_public_struct.h>
31 
32 /**
33  * wlan_reg_max_5ghz_ch_num() - Get maximum 5GHz channel number
34  *
35  * Return: Maximum 5GHz channel number
36  */
37 #define WLAN_REG_MAX_5GHZ_CH_NUM wlan_reg_max_5ghz_ch_num()
38 uint8_t wlan_reg_max_5ghz_ch_num(void);
39 
40 #ifdef CONFIG_CHAN_FREQ_API
41 /**
42  * wlan_reg_min_24ghz_chan_freq() - Get minimum 2.4GHz channel frequency
43  *
44  * Return: Minimum 2.4GHz channel frequency
45  */
46 #define WLAN_REG_MIN_24GHZ_CHAN_FREQ wlan_reg_min_24ghz_chan_freq()
47 qdf_freq_t wlan_reg_min_24ghz_chan_freq(void);
48 
49 /**
50  * wlan_reg_max_24ghz_chan_freq() - Get maximum 2.4GHz channel frequency
51  *
52  * Return: Maximum 2.4GHz channel frequency
53  */
54 #define WLAN_REG_MAX_24GHZ_CHAN_FREQ wlan_reg_max_24ghz_chan_freq()
55 qdf_freq_t wlan_reg_max_24ghz_chan_freq(void);
56 
57 /**
58  * wlan_reg_min_5ghz_chan_freq() - Get minimum 5GHz channel frequency
59  *
60  * Return: Minimum 5GHz channel frequency
61  */
62 #define WLAN_REG_MIN_5GHZ_CHAN_FREQ wlan_reg_min_5ghz_chan_freq()
63 qdf_freq_t wlan_reg_min_5ghz_chan_freq(void);
64 
65 /**
66  * wlan_reg_max_5ghz_chan_freq() - Get maximum 5GHz channel frequency
67  *
68  * Return: Maximum 5GHz channel frequency
69  */
70 #define WLAN_REG_MAX_5GHZ_CHAN_FREQ wlan_reg_max_5ghz_chan_freq()
71 qdf_freq_t wlan_reg_max_5ghz_chan_freq(void);
72 #endif /* CONFIG_CHAN_FREQ_API */
73 
74 /**
75  * wlan_reg_is_24ghz_ch_freq() - Check if the given channel frequency is 2.4GHz
76  * @freq: Channel frequency
77  *
78  * Return: true if channel frequency is 2.4GHz, else false
79  */
80 #define WLAN_REG_IS_24GHZ_CH_FREQ(freq) wlan_reg_is_24ghz_ch_freq(freq)
81 bool wlan_reg_is_24ghz_ch_freq(qdf_freq_t freq);
82 
83 /**
84  * wlan_reg_is_5ghz_ch_freq() - Check if the given channel frequency is 5GHz
85  * @freq: Channel frequency
86  *
87  * Return: true if channel frequency is 5GHz, else false
88  */
89 #define WLAN_REG_IS_5GHZ_CH_FREQ(freq) wlan_reg_is_5ghz_ch_freq(freq)
90 bool wlan_reg_is_5ghz_ch_freq(qdf_freq_t freq);
91 
92 /**
93  * wlan_reg_is_range_overlap_2g() - Check if the given low_freq and high_freq
94  * is in the 2G range.
95  *
96  * @low_freq - Low frequency.
97  * @high_freq - High frequency.
98  *
99  * Return: Return true if given low_freq and high_freq overlaps 2G range,
100  * else false.
101  */
102 bool wlan_reg_is_range_overlap_2g(qdf_freq_t low_freq, qdf_freq_t high_freq);
103 
104 /**
105  * wlan_reg_is_range_overlap_5g() - Check if the given low_freq and high_freq
106  * is in the 5G range.
107  *
108  * @low_freq - Low frequency.
109  * @high_freq - High frequency.
110  *
111  * Return: Return true if given low_freq and high_freq overlaps 5G range,
112  * else false.
113  */
114 bool wlan_reg_is_range_overlap_5g(qdf_freq_t low_freq, qdf_freq_t high_freq);
115 
116 /**
117  * wlan_reg_is_freq_indoor() - Check if a frequency is indoor.
118  * @pdev: Pointer to pdev.
119  * @freq: Channel frequency.
120  *
121  * Return: Return true if a frequency is indoor, else false.
122  */
123 bool wlan_reg_is_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq);
124 
125 /**
126  * wlan_reg_get_min_chwidth() - Return min chanwidth supported by freq.
127  * @pdev: Pointer to pdev.
128  * @freq: Channel frequency.
129  *
130  * Return: Min chwidth supported by freq as per regulatory DB.
131  */
132 uint16_t wlan_reg_get_min_chwidth(struct wlan_objmgr_pdev *pdev,
133 				  qdf_freq_t freq);
134 
135 /**
136  * wlan_reg_get_max_chwidth() - Return max chanwidth supported by freq.
137  * @pdev: Pointer to pdev.
138  * @freq: Channel frequency.
139  *
140  * Return: Max chwidth supported by freq as per regulatory DB.
141  */
142 uint16_t wlan_reg_get_max_chwidth(struct wlan_objmgr_pdev *pdev,
143 				  qdf_freq_t freq);
144 
145 /**
146  * wlan_reg_get_next_lower_bandwidth() - Get next lower bandwdith
147  * @ch_width: channel bandwdith
148  *
149  * Return: Return next lower bandwidth of input channel bandwidth
150  */
151 enum phy_ch_width
152 wlan_reg_get_next_lower_bandwidth(enum phy_ch_width ch_width);
153 
154 #ifdef CONFIG_REG_CLIENT
155 /**
156  * wlan_reg_is_freq_indoor_in_secondary_list() - Check if the input frequency is
157  * an indoor frequency in the secondary list
158  * @pdev: Pointer to pdev.
159  * @freq: Channel frequency.
160  *
161  * Return: Return true if a frequency is indoor, else false.
162  */
163 bool wlan_reg_is_freq_indoor_in_secondary_list(struct wlan_objmgr_pdev *pdev,
164 					       qdf_freq_t freq);
165 #endif
166 
167 #ifdef CONFIG_BAND_6GHZ
168 /**
169  * wlan_reg_is_6ghz_chan_freq() - Check if the given channel frequency is 6GHz
170  * @freq: Channel frequency
171  *
172  * Return: true if channel frequency is 6GHz, else false
173  */
174 #define WLAN_REG_IS_6GHZ_CHAN_FREQ(freq) wlan_reg_is_6ghz_chan_freq(freq)
175 bool wlan_reg_is_6ghz_chan_freq(uint16_t freq);
176 
177 #ifdef CONFIG_6G_FREQ_OVERLAP
178 /**
179  * wlan_reg_is_range_only6g() - Check if the given low_freq and high_freq
180  * is in the 6G range.
181  * @low_freq - Low frequency.
182  * @high_freq - High frequency.
183  *
184  * Return: Return true if given low_freq and high_freq overlaps 6G range,
185  * else false.
186  */
187 bool wlan_reg_is_range_only6g(qdf_freq_t low_freq, qdf_freq_t high_freq);
188 
189 /**
190  * wlan_reg_is_range_overlap_6g() - Check if the given low_freq and high_freq
191  * is in the 6G range.
192  *
193  * @low_freq - Low frequency.
194  * @high_freq - High frequency.
195  *
196  * Return: Return true if given low_freq and high_freq overlaps 6G range,
197  * else false.
198  */
199 bool wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq, qdf_freq_t high_freq);
200 #else
201 static inline bool wlan_reg_is_range_only6g(qdf_freq_t low_freq,
202 					    qdf_freq_t high_freq)
203 {
204 	return false;
205 }
206 
207 static inline bool wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq,
208 						qdf_freq_t high_freq)
209 {
210 	return false;
211 }
212 #endif
213 
214 /**
215  * wlan_reg_get_6g_ap_master_chan_list() - provide  the appropriate ap master
216  * channel list
217  * @pdev: pdev pointer
218  * @ap_pwr_type: The ap power type (LPI/VLP/SP)
219  * @chan_list: channel list pointer
220  *
221  * Return: QDF_STATUS
222  */
223 QDF_STATUS wlan_reg_get_6g_ap_master_chan_list(
224 					struct wlan_objmgr_pdev *pdev,
225 					enum reg_6g_ap_type ap_pwr_type,
226 					struct regulatory_channel *chan_list);
227 
228 #ifdef CONFIG_REG_CLIENT
229 /**
230  * wlan_reg_get_power_string () - wlan reg get power type string
231  * @power_type: power type enum
232  *
233  * Return: power type string
234  */
235 const char *wlan_reg_get_power_string(enum reg_6g_ap_type power_type);
236 #endif
237 
238 /**
239  * wlan_reg_is_6ghz_psc_chan_freq() - Check if the given 6GHz channel frequency
240  * is preferred scanning channel frequency.
241  * @freq: Channel frequency
242  *
243  * Return: true if given 6GHz channel frequency is preferred scanning channel
244  * frequency, else false
245  */
246 #define WLAN_REG_IS_6GHZ_PSC_CHAN_FREQ(freq) \
247 	wlan_reg_is_6ghz_psc_chan_freq(freq)
248 bool wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq);
249 
250 /**
251  * wlan_reg_min_6ghz_chan_freq() - Get minimum 6GHz channel center frequency
252  *
253  * Return: Minimum 6GHz channel center frequency
254  */
255 #define WLAN_REG_MIN_6GHZ_CHAN_FREQ wlan_reg_min_6ghz_chan_freq()
256 uint16_t wlan_reg_min_6ghz_chan_freq(void);
257 
258 /**
259  * wlan_reg_max_6ghz_chan_freq() - Get maximum 6GHz channel center frequency
260  *
261  * Return: Maximum 6GHz channel center frequency
262  */
263 #define WLAN_REG_MAX_6GHZ_CHAN_FREQ wlan_reg_max_6ghz_chan_freq()
264 uint16_t wlan_reg_max_6ghz_chan_freq(void);
265 
266 /**
267  * wlan_reg_is_6g_freq_indoor() - Check if a 6GHz frequency is indoor.
268  * @pdev: Pointer to pdev.
269  * @freq: Channel frequency.
270  *
271  * Return: Return true if a 6GHz frequency is indoor, else false.
272  */
273 #define WLAN_REG_IS_6GHZ_FREQ_INDOOR(pdev, freq) \
274 					wlan_reg_is_6g_freq_indoor(pdev, freq)
275 bool wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq);
276 
277 /**
278  * wlan_reg_get_max_txpower_for_6g_tpe() - Get max txpower for 6G TPE IE.
279  * @pdev: Pointer to pdev.
280  * @freq: Channel frequency.
281  * @bw: Channel bandwidth.
282  * @reg_ap: Regulatory 6G AP type.
283  * @reg_client: Regulatory client type.
284  * @is_psd: True if txpower is needed in PSD format, and false if needed in EIRP
285  * format.
286  * @tx_power: Pointer to tx-power.
287  *
288  * Return: Return QDF_STATUS_SUCCESS, if tx_power is filled for 6G TPE IE
289  * else return QDF_STATUS_E_FAILURE.
290  */
291 QDF_STATUS
292 wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev *pdev,
293 				    qdf_freq_t freq, uint8_t bw,
294 				    enum reg_6g_ap_type reg_ap,
295 				    enum reg_6g_client_type reg_client,
296 				    bool is_psd,
297 				    uint8_t *tx_power);
298 
299 /**
300  * wlan_reg_get_superchan_entry() - Get the address of the super channel list
301  * entry for a given input channel index.
302  *
303  * @pdev: pdev ptr
304  * @chan_enum: Channel enum
305  * @p_sup_chan_entry: Pointer to address of *p_sup_chan_entry
306  *
307  * Return: QDF_STATUS_SUCCESS if super channel entry is available for the input
308  * chan_enum else QDF_STATUS_E_FAILURE
309  */
310 QDF_STATUS wlan_reg_get_superchan_entry(
311 		struct wlan_objmgr_pdev *pdev,
312 		enum channel_enum chan_enum,
313 		const struct super_chan_info **p_sup_chan_entry);
314 #else
315 
316 #define WLAN_REG_IS_6GHZ_CHAN_FREQ(freq) (false)
317 static inline bool wlan_reg_is_6ghz_chan_freq(uint16_t freq)
318 {
319 	return false;
320 }
321 
322 static inline bool wlan_reg_is_range_only6g(qdf_freq_t low_freq,
323 					    qdf_freq_t high_freq)
324 {
325 	return false;
326 }
327 
328 #define WLAN_REG_IS_6GHZ_PSC_CHAN_FREQ(freq) (false)
329 static inline bool wlan_reg_is_6ghz_psc_chan_freq(uint16_t freq)
330 {
331 	return false;
332 }
333 
334 #define WLAN_REG_MIN_6GHZ_CHAN_FREQ (false)
335 static inline uint16_t wlan_reg_min_6ghz_chan_freq(void)
336 {
337 	return 0;
338 }
339 
340 #define WLAN_REG_MAX_6GHZ_CHAN_FREQ (false)
341 static inline uint16_t wlan_reg_max_6ghz_chan_freq(void)
342 {
343 	return 0;
344 }
345 
346 #define WLAN_REG_IS_6GHZ_FREQ_INDOOR(pdev, freq) (false)
347 static inline bool
348 wlan_reg_is_6g_freq_indoor(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
349 {
350 	return false;
351 }
352 
353 static inline bool wlan_reg_is_range_overlap_6g(qdf_freq_t low_freq,
354 						qdf_freq_t high_freq)
355 {
356 	return false;
357 }
358 
359 static inline QDF_STATUS
360 wlan_reg_get_max_txpower_for_6g_tpe(struct wlan_objmgr_pdev *pdev,
361 				    qdf_freq_t freq, uint8_t bw,
362 				    enum reg_6g_ap_type reg_ap,
363 				    enum reg_6g_client_type reg_client,
364 				    bool is_psd,
365 				    uint8_t *tx_power)
366 {
367 	return QDF_STATUS_E_FAILURE;
368 }
369 
370 static inline QDF_STATUS
371 wlan_reg_get_6g_ap_master_chan_list(struct wlan_objmgr_pdev *pdev,
372 				    enum reg_6g_ap_type ap_pwr_type,
373 				    struct regulatory_channel *chan_list)
374 {
375 	return QDF_STATUS_E_FAILURE;
376 }
377 
378 static inline
379 QDF_STATUS wlan_reg_get_superchan_entry(
380 		struct wlan_objmgr_pdev *pdev,
381 		enum channel_enum chan_enum,
382 		const struct super_chan_info **p_sup_chan_entry)
383 {
384 	*p_sup_chan_entry = NULL;
385 	return QDF_STATUS_E_NOSUPPORT;
386 }
387 
388 static inline
389 const char *wlan_reg_get_power_string(enum reg_6g_ap_type power_type)
390 {
391 	return "INVALID";
392 }
393 #endif /* CONFIG_BAND_6GHZ */
394 
395 /**
396  * wlan_reg_get_band_channel_list() - Get channel list based on the band_mask
397  * @pdev: pdev ptr
398  * @band_mask: Input bitmap with band set
399  * @channel_list: Pointer to Channel List
400  *
401  * Get the given channel list and number of channels from the current channel
402  * list based on input band bitmap.
403  *
404  * Return: Number of channels, else 0 to indicate error
405  */
406 uint16_t
407 wlan_reg_get_band_channel_list(struct wlan_objmgr_pdev *pdev,
408 			       uint8_t band_mask,
409 			       struct regulatory_channel *channel_list);
410 
411 #ifdef CONFIG_REG_6G_PWRMODE
412 /**
413  * wlan_reg_get_band_channel_list_for_pwrmode() - Get channel list based on the
414  * band_mask and input 6G power mode.
415  * @pdev: pdev ptr
416  * @band_mask: Input bitmap with band set
417  * @channel_list: Pointer to Channel List
418  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
419  *
420  * Get the given channel list and number of channels from the current channel
421  * list based on input band bitmap.
422  *
423  * Return: Number of channels, else 0 to indicate error
424  */
425 uint16_t
426 wlan_reg_get_band_channel_list_for_pwrmode(struct wlan_objmgr_pdev *pdev,
427 					   uint8_t band_mask,
428 					   struct regulatory_channel
429 					   *channel_list,
430 					   enum supported_6g_pwr_types
431 					   in_6g_pwr_type);
432 #endif
433 
434 #ifdef CONFIG_REG_CLIENT
435 /**
436  * wlan_reg_get_secondary_band_channel_list() - Get secondary channel list for
437  * SAP based on the band_mask
438  * @pdev: pdev ptr
439  * @band_mask: Input bitmap with band set
440  * @channel_list: Pointer to Channel List
441  *
442  * Get the given channel list and number of channels from the secondary current
443  * channel list based on input band bitmap.
444  *
445  * Return: Number of channels, else 0 to indicate error
446  */
447 uint16_t
448 wlan_reg_get_secondary_band_channel_list(struct wlan_objmgr_pdev *pdev,
449 					 uint8_t band_mask,
450 					 struct regulatory_channel
451 					 *channel_list);
452 #endif
453 
454 /**
455  * wlan_reg_chan_band_to_freq - Return channel frequency based on the channel
456  * number and band.
457  * @pdev: pdev ptr
458  * @chan: Channel Number
459  * @band_mask: Bitmap for bands
460  *
461  * Return: Return channel frequency or return 0, if the channel is disabled or
462  * if the input channel number or band_mask is invalid. Composite bands are
463  * supported only for 2.4Ghz and 5Ghz bands. For other bands the following
464  * priority is given: 1) 6Ghz 2) 5Ghz 3) 2.4Ghz.
465  */
466 qdf_freq_t wlan_reg_chan_band_to_freq(struct wlan_objmgr_pdev *pdev,
467 				      uint8_t chan,
468 				      uint8_t band_mask);
469 
470 #ifdef CONFIG_49GHZ_CHAN
471 /**
472  * wlan_reg_is_49ghz_freq() - Check if the given channel frequency is 4.9GHz
473  * @freq: Channel frequency
474  *
475  * Return: true if channel frequency is 4.9GHz, else false
476  */
477 #define WLAN_REG_IS_49GHZ_FREQ(freq) wlan_reg_is_49ghz_freq(freq)
478 bool wlan_reg_is_49ghz_freq(qdf_freq_t freq);
479 
480 #else
481 
482 #define WLAN_REG_IS_49GHZ_FREQ(freq) (false)
483 static inline bool wlan_reg_is_49ghz_freq(qdf_freq_t freq)
484 {
485 	return false;
486 }
487 #endif /* CONFIG_49GHZ_CHAN */
488 
489 /**
490  * wlan_reg_ch_num() - Get channel number from channel enum
491  * @ch_enum: Channel enum
492  *
493  * Return: channel number
494  */
495 #define WLAN_REG_CH_NUM(ch_enum) wlan_reg_ch_num(ch_enum)
496 uint8_t wlan_reg_ch_num(uint32_t ch_enum);
497 
498 /**
499  * wlan_reg_ch_to_freq() - Get channel frequency from channel enum
500  * @ch_enum: Channel enum
501  *
502  * Return: channel frequency
503  */
504 #define WLAN_REG_CH_TO_FREQ(ch_enum) wlan_reg_ch_to_freq(ch_enum)
505 qdf_freq_t wlan_reg_ch_to_freq(uint32_t ch_enum);
506 
507 /**
508  * wlan_reg_read_default_country() - Read the default country for the regdomain
509  * @country: pointer to the country code.
510  *
511  * Return: QDF_STATUS
512  */
513 QDF_STATUS wlan_reg_read_default_country(struct wlan_objmgr_psoc *psoc,
514 				   uint8_t *country);
515 
516 /**
517  * wlan_reg_get_ctry_idx_max_bw_from_country_code() - Get the max 5G
518  * bandwidth from country code
519  * @pdev: pdev pointer
520  * @cc: Country Code
521  * @max_bw_5g: Max 5G bandwidth supported by the country
522  *
523  * Return: QDF_STATUS
524  */
525 
526 QDF_STATUS wlan_reg_get_max_5g_bw_from_country_code(
527 					struct wlan_objmgr_pdev *pdev,
528 					uint16_t cc,
529 					uint16_t *max_bw_5g);
530 
531 /**
532  * wlan_reg_get_max_5g_bw_from_regdomain() - Get the max 5G bandwidth
533  * supported by the regdomain
534  * @pdev: pdev pointer
535  * @orig_regdmn: Regdomain Pair value
536  * @max_bw_5g: Max 5G bandwidth supported by the country
537  *
538  * Return: QDF_STATUS
539  */
540 QDF_STATUS wlan_reg_get_max_5g_bw_from_regdomain(
541 					struct wlan_objmgr_pdev *pdev,
542 					uint16_t regdmn,
543 					uint16_t *max_bw_5g);
544 
545 /**
546  * wlan_reg_get_max_bw_5G_for_fo() - get max_5g_bw for FullOffload
547  * @pdev: PDEV object
548  *
549  * API to get max_bw_5g from pdev object
550  *
551  * Return: @max_bw_5g
552  */
553 QDF_STATUS wlan_reg_get_max_bw_5G_for_fo(struct wlan_objmgr_pdev *pdev);
554 
555 /**
556  * wlan_reg_is_regdb_offloaded() - get offload_enabled
557  * @psoc: Psoc object
558  *
559  * API to get offload_enabled from psoc.
560  *
561  * Return: true if offload enabled
562  */
563 
564 bool wlan_reg_is_regdb_offloaded(struct wlan_objmgr_psoc *psoc);
565 
566 /**
567  * wlan_reg_get_fcc_constraint() - Check FCC constraint on given frequency
568  * @pdev: physical dev to get
569  * @freq: frequency to be checked
570  *
571  * Return: If FCC constraint is on applied given frequency return true
572  *	   else return false.
573  */
574 bool wlan_reg_get_fcc_constraint(struct wlan_objmgr_pdev *pdev, uint32_t freq);
575 
576 #ifdef CONFIG_REG_CLIENT
577 /**
578  * wlan_reg_read_current_country() - Read the current country for the regdomain
579  * @country: pointer to the country code.
580  *
581  * Return: QDF_STATUS
582  */
583 QDF_STATUS wlan_reg_read_current_country(struct wlan_objmgr_psoc *psoc,
584 				   uint8_t *country);
585 
586 #ifdef CONFIG_REG_CLIENT
587 /**
588  * wlan_reg_get_6g_power_type_for_ctry() - Return power type for 6G based
589  * on country IE
590  * @psoc: pointer to psoc
591  * @pdev: pointer to pdev
592  * @ap_ctry: pointer to country string in country IE
593  * @sta_ctry: pointer to sta programmed country
594  * @pwr_type_6g: pointer to 6G power type
595  * @ctry_code_match: Check for country IE and sta country code match
596  * @ap_pwr_type: AP's power type for 6G as advertised in HE ops IE
597  * Return: QDF_STATUS
598  */
599 QDF_STATUS
600 wlan_reg_get_6g_power_type_for_ctry(struct wlan_objmgr_psoc *psoc,
601 				    struct wlan_objmgr_pdev *pdev,
602 				    uint8_t *ap_ctry, uint8_t *sta_ctry,
603 				    enum reg_6g_ap_type *pwr_type_6g,
604 				    bool *ctry_code_match,
605 				    enum reg_6g_ap_type ap_pwr_type);
606 #endif
607 
608 #ifdef CONFIG_CHAN_FREQ_API
609 /**
610  * wlan_reg_is_etsi13_srd_chan_for_freq () - Checks if the ch is ETSI13 srd ch
611  * or not
612  * @pdev: pdev ptr
613  * @freq: channel center frequency
614  *
615  * Return: true or false
616  */
617 bool wlan_reg_is_etsi13_srd_chan_for_freq(struct wlan_objmgr_pdev *pdev,
618 					  qdf_freq_t freq);
619 #endif /*CONFIG_CHAN_FREQ_API*/
620 
621 /**
622  * wlan_reg_is_etsi13_regdmn() - Checks if current reg domain is ETSI13 or not
623  * @pdev: pdev ptr
624  *
625  * Return: true or false
626  */
627 bool wlan_reg_is_etsi13_regdmn(struct wlan_objmgr_pdev *pdev);
628 
629 /**
630  * wlan_reg_is_etsi13_srd_chan_allowed_master_mode() - Checks if regdmn is
631  * ETSI13 and SRD channels are allowed in master mode or not.
632  *
633  * @pdev: pdev ptr
634  *
635  * Return: true or false
636  */
637 bool wlan_reg_is_etsi13_srd_chan_allowed_master_mode(struct wlan_objmgr_pdev
638 						     *pdev);
639 #endif
640 
641 /**
642  * wlan_reg_is_world() - reg is world mode
643  * @country: The country information
644  *
645  * Return: true or false
646  */
647 bool wlan_reg_is_world(uint8_t *country);
648 
649 /**
650  * wlan_reg_get_dfs_region () - Get the current dfs region
651  * @dfs_reg: pointer to dfs region
652  *
653  * Return: Status
654  */
655 QDF_STATUS wlan_reg_get_dfs_region(struct wlan_objmgr_pdev *pdev,
656 			     enum dfs_reg *dfs_reg);
657 
658 /**
659  * wlan_reg_is_chan_disabled_and_not_nol() - In the regulatory channel list, a
660  * channel may be disabled by the regulatory/device or by radar. Radar is
661  * temporary and a radar disabled channel does not mean that the channel is
662  * permanently disabled. The API checks if the channel is disabled, but not due
663  * to radar.
664  * @chan - Regulatory channel object
665  *
666  * Return - True,  the channel is disabled, but not due to radar, else false.
667  */
668 bool wlan_reg_is_chan_disabled_and_not_nol(struct regulatory_channel *chan);
669 
670 /**
671  * wlan_reg_get_current_chan_list() - provide the pdev current channel list
672  * @pdev: pdev pointer
673  * @chan_list: channel list pointer
674  *
675  * Return: QDF_STATUS
676  */
677 QDF_STATUS wlan_reg_get_current_chan_list(struct wlan_objmgr_pdev *pdev,
678 		struct regulatory_channel *chan_list);
679 
680 /**
681  * wlan_reg_is_freq_enabled() - Checks if the given frequency is enabled on the
682  * given power mode or not. If the frequency is not a 6G frequency then the
683  * input power mode is ignored and only current channel list is searched.
684  *
685  * @pdev: pdev pointer.
686  * @freq: input frequency.
687  * @in_6g_pwr_mode: Power mode on which the freq is enabled or not is to be
688  * checked.
689  *
690  * Return: True if the frequency is present in the given power mode channel
691  * list.
692  */
693 bool wlan_reg_is_freq_enabled(struct wlan_objmgr_pdev *pdev,
694 			      qdf_freq_t freq,
695 			      enum supported_6g_pwr_types in_6g_pwr_mode);
696 
697 /**
698  * wlan_reg_is_freq_idx_enabled() - Checks if the given frequency index is
699  * enabled on the given power mode or not. If the frequency index is not a 6G
700  * frequency then the input power mode is ignored and only current channel list
701  * is searched.
702  *
703  * @pdev: pdev pointer.
704  * @freq_idx: input frequency index.
705  * @in_6g_pwr_mode: Power mode on which the frequency index is enabled or not
706  * is to be checked.
707  *
708  * Return: True if the frequency index is present in the given power mode
709  * channel list.
710  */
711 bool wlan_reg_is_freq_idx_enabled(struct wlan_objmgr_pdev *pdev,
712 				  enum channel_enum freq_idx,
713 				  enum supported_6g_pwr_types in_6g_pwr_mode);
714 
715 /**
716  * wlan_reg_get_pwrmode_chan_list() - Get the modified channel list. A modified
717  * current channel list consists of 2G and 5G portions of the current channel
718  * list and the 6G portion of the current channel list is derived from the input
719  * 6g power type.
720  * @pdev: Pointer to pdev
721  * @chan_list: Pointer to buffer which stores list of regulatory_channels.
722  * @in_6g_pwr_mode: 6GHz power type
723  *
724  * Return:
725  * QDF_STATUS_SUCCESS: Success
726  * QDF_STATUS_E_INVAL: Failed to get channel list
727  */
728 QDF_STATUS wlan_reg_get_pwrmode_chan_list(struct wlan_objmgr_pdev *pdev,
729 					  struct regulatory_channel *chan_list,
730 					  enum supported_6g_pwr_types
731 					  in_6g_pwr_mode);
732 
733 #ifdef CONFIG_REG_CLIENT
734 /**
735  * wlan_reg_get_secondary_current_chan_list() - provide the pdev secondary
736  * current channel list
737  * @pdev: pdev pointer
738  * @chan_list: channel list pointer
739  *
740  * Return: QDF_STATUS
741  */
742 QDF_STATUS wlan_reg_get_secondary_current_chan_list(
743 					struct wlan_objmgr_pdev *pdev,
744 					struct regulatory_channel *chan_list);
745 #endif
746 
747 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ)
748 /**
749  * wlan_reg_get_6g_afc_chan_list() - provide the pdev afc channel list
750  * @pdev: pdev pointer
751  * @chan_list: channel list pointer
752  *
753  * Return: QDF_STATUS
754  */
755 QDF_STATUS wlan_reg_get_6g_afc_chan_list(struct wlan_objmgr_pdev *pdev,
756 					 struct regulatory_channel *chan_list);
757 
758 /**
759  * wlan_reg_get_6g_afc_mas_chan_list() - provide the pdev afc master channel
760  * list
761  * @pdev: pdev pointer
762  * @chan_list: channel list pointer
763  *
764  * Return: QDF_STATUS
765  */
766 QDF_STATUS
767 wlan_reg_get_6g_afc_mas_chan_list(struct wlan_objmgr_pdev *pdev,
768 				  struct regulatory_channel *chan_list);
769 
770 /**
771  * wlan_reg_is_afc_power_event_received() - Checks if AFC power event is
772  * received from the FW.
773  *
774  * @pdev: pdev ptr
775  *
776  * Return: true if AFC power event is received from the FW or false otherwise
777  */
778 bool wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev *pdev);
779 
780 /**
781  * wlan_reg_is_afc_done() - Check if AFC response enables the given frequency.
782  * @pdev: pdev ptr
783  * @freq: given frequency.
784  *
785  * Return: True if frequency is enabled, false otherwise.
786  */
787 bool wlan_reg_is_afc_done(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq);
788 
789 /**
790  * wlan_reg_get_afc_req_id() - Get the AFC request ID
791  * @pdev: pdev pointer
792  * @req_id: Pointer to request id
793  *
794  * Return: QDF_STATUS
795  */
796 QDF_STATUS wlan_reg_get_afc_req_id(struct wlan_objmgr_pdev *pdev,
797 				   uint64_t *req_id);
798 
799 /**
800  * wlan_reg_is_afc_expiry_event_received() - Checks if AFC power event is
801  * received from the FW.
802  *
803  * @pdev: pdev ptr
804  *
805  * Return: true if AFC exipry event is received from the FW or false otherwise
806  */
807 bool wlan_reg_is_afc_expiry_event_received(struct wlan_objmgr_pdev *pdev);
808 
809 /**
810  * wlan_reg_is_noaction_on_afc_pwr_evt() - Checks whether driver needs to
811  * take action for AFC action or the response should be handled by the
812  * user application.
813  *
814  * @pdev: pdev ptr
815  *
816  * Return: true if driver need not take action for AFC resp, false otherwise.
817  */
818 bool
819 wlan_reg_is_noaction_on_afc_pwr_evt(struct wlan_objmgr_pdev *pdev);
820 
821 /**
822  * wlan_reg_get_afc_dev_deploy_type() - Get AFC device deployment type
823  * @pdev: pdev pointer
824  * @afc_dev_type: Pointer to afc device deployment type
825  *
826  * Return: QDF_STATUS
827  */
828 QDF_STATUS
829 wlan_reg_get_afc_dev_deploy_type(struct wlan_objmgr_pdev *pdev,
830 				 enum reg_afc_dev_deploy_type *afc_dev_type);
831 
832 /**
833  * wlan_reg_is_sta_connect_allowed() - Check if STA connection allowed
834  * @pdev: pdev pointer
835  * @root_ap_pwr_mode: power mode of the Root AP.
836  *
837  * Return : True if STA Vap connection is allowed.
838  */
839 bool
840 wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev *pdev,
841 				enum reg_6g_ap_type root_ap_pwr_mode);
842 
843 /**
844  * wlan_reg_is_6ghz_freq_txable() - Check if the given frequency is tx-able.
845  * @pdev: Pointer to pdev
846  * @freq: Frequency in MHz
847  * @in_6ghz_pwr_type: Input AP power type
848  *
849  * An SP channel is tx-able if the channel is present in the AFC response.
850  * In case of non-OUTDOOR mode a channel is always tx-able (Assuming it is
851  * enabled by regulatory).
852  *
853  * Return: True if the frequency is tx-able, else false.
854  */
855 bool
856 wlan_reg_is_6ghz_freq_txable(struct wlan_objmgr_pdev *pdev,
857 			     qdf_freq_t freq,
858 			     enum supported_6g_pwr_types in_6ghz_pwr_mode);
859 #else
860 static inline bool
861 wlan_reg_is_afc_power_event_received(struct wlan_objmgr_pdev *pdev)
862 {
863 	return false;
864 }
865 
866 static inline bool
867 wlan_reg_is_afc_done(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
868 {
869 	return true;
870 }
871 
872 static inline QDF_STATUS
873 wlan_reg_get_6g_afc_chan_list(struct wlan_objmgr_pdev *pdev,
874 			      struct regulatory_channel *chan_list)
875 {
876 	return QDF_STATUS_E_NOSUPPORT;
877 }
878 
879 static inline bool
880 wlan_reg_is_sta_connect_allowed(struct wlan_objmgr_pdev *pdev,
881 				enum reg_6g_ap_type root_ap_pwr_mode)
882 {
883 	return true;
884 }
885 
886 static inline bool
887 wlan_reg_is_6ghz_freq_txable(struct wlan_objmgr_pdev *pdev,
888 			     qdf_freq_t freq,
889 			     enum supported_6g_pwr_types in_6ghz_pwr_mode)
890 {
891 	return false;
892 }
893 #endif
894 
895 #if defined(WLAN_FEATURE_11BE) && defined(CONFIG_REG_CLIENT)
896 /**
897  * wlan_reg_get_bonded_channel_state_for_pwrmode() - Get bonded channel freq
898  * state
899  * @freq: channel frequency
900  * @bw: channel band width
901  * @sec_freq: secondary frequency
902  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
903  * @input_puncture_bitmap: input puncture bitmap
904  *
905  * Return: channel state
906  */
907 enum channel_state
908 wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev,
909 					      qdf_freq_t freq,
910 					      enum phy_ch_width bw,
911 					      qdf_freq_t sec_freq,
912 					      enum supported_6g_pwr_types
913 					      in_6g_pwr_mode);
914 #else
915 static inline enum channel_state
916 wlan_reg_get_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev,
917 					      qdf_freq_t freq,
918 					      enum phy_ch_width bw,
919 					      qdf_freq_t sec_freq,
920 					      enum supported_6g_pwr_types
921 					      in_6g_pwr_mode)
922 {
923 	return CHANNEL_STATE_INVALID;
924 }
925 #endif
926 
927 /**
928  * wlan_reg_set_dfs_region() - set the dfs region
929  * @pdev: pdev ptr
930  * @dfs_reg: dfs region
931  *
932  * Return: void
933  */
934 void wlan_reg_set_dfs_region(struct wlan_objmgr_pdev *pdev,
935 			     enum dfs_reg dfs_reg);
936 
937 /**
938  * wlan_reg_get_bw_value() - provide the channel center freq
939  * @chan_num: chennal number
940  *
941  * Return: int
942  */
943 uint16_t wlan_reg_get_bw_value(enum phy_ch_width bw);
944 
945 /**
946  * wlan_reg_get_domain_from_country_code() - provide the channel center freq
947  * @reg_domain_ptr: regulatory domain ptr
948  * @country_alpha2: country alpha2
949  * @source: alpha2 source
950  *
951  * Return: int
952  */
953 QDF_STATUS wlan_reg_get_domain_from_country_code(v_REGDOMAIN_t *reg_domain_ptr,
954 						 const uint8_t *country_alpha2,
955 						 enum country_src source);
956 
957 /**
958  * wlan_reg_dmn_get_opclass_from_channel() - provide the channel center freq
959  * @country: country alpha2
960  * @channel: channel number
961  * @offset: offset
962  *
963  * Return: int
964  */
965 uint16_t wlan_reg_dmn_get_opclass_from_channel(uint8_t *country,
966 					       uint8_t channel,
967 					       uint8_t offset);
968 
969 /**
970  * wlan_reg_get_opclass_from_freq_width() - Get operating class from frequency
971  * @country: Country code.
972  * @freq: Channel center frequency.
973  * @ch_width: Channel width.
974  * @behav_limit: Behaviour limit.
975  *
976  * Return: Error code.
977  */
978 uint8_t wlan_reg_get_opclass_from_freq_width(uint8_t *country,
979 					     qdf_freq_t freq,
980 					     uint16_t ch_width,
981 					     uint16_t behav_limit);
982 
983 /**
984  * wlan_reg_get_band_cap_from_op_class() - Return band capability bitmap
985  * @country: Pointer to Country code.
986  * @num_of_opclass: Number of Operating class.
987  * @opclass: Pointer to opclass.
988  *
989  * Return supported band bitmap based on the input operating class list
990  * provided.
991  *
992  * Return: Return supported band capability
993  */
994 uint8_t wlan_reg_get_band_cap_from_op_class(const uint8_t *country,
995 					    uint8_t num_of_opclass,
996 					    const uint8_t *opclass);
997 
998 /**
999  * wlan_reg_dmn_print_channels_in_opclass() - Print channels in op-class
1000  * @country: country alpha2
1001  * @opclass: oplcass
1002  *
1003  * Return: void
1004  */
1005 void wlan_reg_dmn_print_channels_in_opclass(uint8_t *country,
1006 					    uint8_t opclass);
1007 
1008 
1009 /**
1010  * wlan_reg_dmn_get_chanwidth_from_opclass() - get channel width from
1011  *                                             operating class
1012  * @country: country alpha2
1013  * @channel: channel number
1014  * @opclass: operating class
1015  *
1016  * Return: int
1017  */
1018 uint16_t wlan_reg_dmn_get_chanwidth_from_opclass(uint8_t *country,
1019 						 uint8_t channel,
1020 						 uint8_t opclass);
1021 
1022 /**
1023  * wlan_reg_dmn_get_chanwidth_from_opclass_auto() - get channel width from
1024  * operating class. If opclass not found then search in global opclass.
1025  * @country: country alpha2
1026  * @channel: channel number
1027  * @opclass: operating class
1028  *
1029  * Return: int
1030  */
1031 uint16_t wlan_reg_dmn_get_chanwidth_from_opclass_auto(uint8_t *country,
1032 						      uint8_t channel,
1033 						      uint8_t opclass);
1034 
1035 /**
1036  * wlan_reg_dmn_set_curr_opclasses() - set operating class
1037  * @num_classes: number of classes
1038  * @class: operating class
1039  *
1040  * Return: int
1041  */
1042 uint16_t wlan_reg_dmn_set_curr_opclasses(uint8_t num_classes,
1043 					 uint8_t *class);
1044 
1045 /**
1046  * wlan_reg_dmn_get_curr_opclasses() - get current oper classes
1047  * @num_classes: number of classes
1048  * @class: operating class
1049  *
1050  * Return: int
1051  */
1052 uint16_t wlan_reg_dmn_get_curr_opclasses(uint8_t *num_classes,
1053 					 uint8_t *class);
1054 
1055 
1056 /**
1057  * wlan_reg_get_opclass_details() - Get details about the current opclass table.
1058  * @pdev: Pointer to pdev.
1059  * @reg_ap_cap: Pointer to reg_ap_cap.
1060  * @n_opclasses: Pointer to number of opclasses.
1061  * @max_supp_op_class: Maximum number of operating classes supported.
1062  * @global_tbl_lookup: Whether to lookup global op class tbl.
1063  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1064  *
1065  * Return: QDF_STATUS_SUCCESS if success, else return QDF_STATUS_FAILURE.
1066  */
1067 QDF_STATUS
1068 wlan_reg_get_opclass_details(struct wlan_objmgr_pdev *pdev,
1069 			     struct regdmn_ap_cap_opclass_t *reg_ap_cap,
1070 			     uint8_t *n_opclasses,
1071 			     uint8_t max_supp_op_class,
1072 			     bool global_tbl_lookup,
1073 			     enum supported_6g_pwr_types in_6g_pwr_mode);
1074 
1075 /**
1076  * wlan_reg_get_opclass_for_cur_hwmode() - Get details about the
1077  * opclass table for the current hwmode.
1078  * @pdev: Pointer to pdev.
1079  * @reg_ap_cap: Pointer to reg_ap_cap.
1080  * @n_opclasses: Pointer to number of opclasses.
1081  * @max_supp_op_class: Maximum number of operating classes supported.
1082  * @global_tbl_lookup: Whether to lookup global op class tbl.
1083  * @max_chwidth: Maximum channel width supported by cur hwmode
1084  * @is_80p80_supp: Bool to indicate if 80p80 is supported.
1085  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1086  *
1087  * Return: QDF_STATUS_SUCCESS if success, else return QDF_STATUS_FAILURE.
1088  */
1089 QDF_STATUS
1090 wlan_reg_get_opclass_for_cur_hwmode(struct wlan_objmgr_pdev *pdev,
1091 				    struct regdmn_ap_cap_opclass_t *reg_ap_cap,
1092 				    uint8_t *n_opclasses,
1093 				    uint8_t max_supp_op_class,
1094 				    bool global_tbl_lookup,
1095 				    enum phy_ch_width max_chwidth,
1096 				    bool is_80p80_supp,
1097 				    enum supported_6g_pwr_types in_6g_pwr_mode);
1098 /**
1099  * wlan_reg_get_cc_and_src () - get country code and src
1100  * @psoc: psoc ptr
1101  * @alpha2: country code alpha2
1102  *
1103  * Return: country_src
1104  */
1105 enum country_src wlan_reg_get_cc_and_src(struct wlan_objmgr_psoc *psoc,
1106 					 uint8_t *alpha);
1107 
1108 /**
1109  * wlan_regulatory_init() - init regulatory component
1110  *
1111  * Return: Success or Failure
1112  */
1113 QDF_STATUS wlan_regulatory_init(void);
1114 
1115 /**
1116  * wlan_regulatory_deinit() - deinit regulatory component
1117  *
1118  * Return: Success or Failure
1119  */
1120 QDF_STATUS wlan_regulatory_deinit(void);
1121 
1122 /**
1123  * regulatory_psoc_open() - open regulatory component
1124  *
1125  * Return: Success or Failure
1126  */
1127 QDF_STATUS regulatory_psoc_open(struct wlan_objmgr_psoc *psoc);
1128 
1129 
1130 /**
1131  * regulatory_psoc_close() - close regulatory component
1132  *
1133  * Return: Success or Failure
1134  */
1135 QDF_STATUS regulatory_psoc_close(struct wlan_objmgr_psoc *psoc);
1136 
1137 /**
1138  * regulatory_pdev_open() - Open regulatory component
1139  * @pdev: Pointer to pdev structure
1140  *
1141  * Return: Success or Failure
1142  */
1143 QDF_STATUS regulatory_pdev_open(struct wlan_objmgr_pdev *pdev);
1144 
1145 /**
1146  * regulatory_pdev_close() - Close regulatory component
1147  * @pdev: Pointer to pdev structure.
1148  *
1149  * Return: Success or Failure
1150  */
1151 QDF_STATUS regulatory_pdev_close(struct wlan_objmgr_pdev *pdev);
1152 
1153 /**
1154  * wlan_reg_freq_to_chan () - convert channel freq to channel number
1155  * @pdev: The physical dev to set current country for
1156  * @freq: frequency
1157  *
1158  * Return: true or false
1159  */
1160 uint8_t wlan_reg_freq_to_chan(struct wlan_objmgr_pdev *pdev,
1161 			      qdf_freq_t freq);
1162 
1163 /**
1164  * wlan_reg_legacy_chan_to_freq () - convert chan to freq, for 2G and 5G
1165  * @chan: channel number
1166  *
1167  * Return: frequency
1168  */
1169 qdf_freq_t wlan_reg_legacy_chan_to_freq(struct wlan_objmgr_pdev *pdev,
1170 					uint8_t chan);
1171 
1172 /**
1173  * wlan_reg_is_us() - reg is us country
1174  * @country: The country information
1175  *
1176  * Return: true or false
1177  */
1178 bool wlan_reg_is_us(uint8_t *country);
1179 
1180 /**
1181  * wlan_reg_is_etsi() - reg is a country in EU
1182  * @country: The country information
1183  *
1184  * Return: true or false
1185  */
1186 bool wlan_reg_is_etsi(uint8_t *country);
1187 
1188 
1189 /**
1190  * wlan_reg_ctry_support_vlp() - Country supports VLP or not
1191  * @country: The country information
1192  *
1193  * Return: true or false
1194  */
1195 bool wlan_reg_ctry_support_vlp(uint8_t *country);
1196 
1197 /**
1198  * wlan_reg_set_country() - Set the current regulatory country
1199  * @pdev: The physical dev to set current country for
1200  * @country: The country information to configure
1201  *
1202  * Return: QDF_STATUS
1203  */
1204 QDF_STATUS wlan_reg_set_country(struct wlan_objmgr_pdev *pdev,
1205 				uint8_t *country);
1206 
1207 /**
1208  * wlan_reg_set_11d_country() - Set the 11d regulatory country
1209  * @pdev: The physical dev to set current country for
1210  * @country: The country information to configure
1211  *
1212  * Return: QDF_STATUS
1213  */
1214 QDF_STATUS wlan_reg_set_11d_country(struct wlan_objmgr_pdev *pdev,
1215 				    uint8_t *country);
1216 
1217 /**
1218  * wlan_reg_register_chan_change_callback () - add chan change cbk
1219  * @psoc: psoc ptr
1220  * @cbk: callback
1221  * @arg: argument
1222  *
1223  * Return: true or false
1224  */
1225 void wlan_reg_register_chan_change_callback(struct wlan_objmgr_psoc *psoc,
1226 					    void *cbk, void *arg);
1227 
1228 /**
1229  * wlan_reg_unregister_chan_change_callback () - remove chan change cbk
1230  * @psoc: psoc ptr
1231  * @cbk:callback
1232  *
1233  * Return: true or false
1234  */
1235 void wlan_reg_unregister_chan_change_callback(struct wlan_objmgr_psoc *psoc,
1236 					      void *cbk);
1237 
1238 /**
1239  * wlan_reg_register_ctry_change_callback () - add country change cbk
1240  * @psoc: psoc ptr
1241  * @cbk: callback
1242  *
1243  * Return: None
1244  */
1245 void wlan_reg_register_ctry_change_callback(struct wlan_objmgr_psoc *psoc,
1246 					    void *cbk);
1247 
1248 /**
1249  * wlan_reg_unregister_ctry_change_callback () - remove country change cbk
1250  * @psoc: psoc ptr
1251  * @cbk:callback
1252  *
1253  * Return: None
1254  */
1255 void wlan_reg_unregister_ctry_change_callback(struct wlan_objmgr_psoc *psoc,
1256 					      void *cbk);
1257 
1258 /**
1259  * wlan_reg_is_11d_offloaded() - 11d offloaded supported
1260  * @psoc: psoc ptr
1261  *
1262  * Return: bool
1263  */
1264 bool wlan_reg_is_11d_offloaded(struct wlan_objmgr_psoc *psoc);
1265 
1266 /**
1267  * wlan_reg_11d_enabled_on_host() - 11d enabled don host
1268  * @psoc: psoc ptr
1269  *
1270  * Return: bool
1271  */
1272 bool wlan_reg_11d_enabled_on_host(struct wlan_objmgr_psoc *psoc);
1273 
1274 /**
1275  * wlan_reg_get_chip_mode() - get supported chip mode
1276  * @pdev: pdev pointer
1277  * @chip_mode: chip mode
1278  *
1279  * Return: QDF STATUS
1280  */
1281 QDF_STATUS wlan_reg_get_chip_mode(struct wlan_objmgr_pdev *pdev,
1282 		uint64_t *chip_mode);
1283 
1284 /**
1285  * wlan_reg_is_11d_scan_inprogress() - checks 11d scan status
1286  * @psoc: psoc ptr
1287  *
1288  * Return: bool
1289  */
1290 bool wlan_reg_is_11d_scan_inprogress(struct wlan_objmgr_psoc *psoc);
1291 /**
1292  * wlan_reg_get_freq_range() - Get 2GHz and 5GHz frequency range
1293  * @pdev: pdev pointer
1294  * @low_2g: low 2GHz frequency range
1295  * @high_2g: high 2GHz frequency range
1296  * @low_5g: low 5GHz frequency range
1297  * @high_5g: high 5GHz frequency range
1298  *
1299  * Return: QDF status
1300  */
1301 QDF_STATUS wlan_reg_get_freq_range(struct wlan_objmgr_pdev *pdev,
1302 		qdf_freq_t *low_2g,
1303 		qdf_freq_t *high_2g,
1304 		qdf_freq_t *low_5g,
1305 		qdf_freq_t *high_5g);
1306 /**
1307  * wlan_reg_get_tx_ops () - get regulatory tx ops
1308  * @psoc: psoc ptr
1309  *
1310  */
1311 struct wlan_lmac_if_reg_tx_ops *
1312 wlan_reg_get_tx_ops(struct wlan_objmgr_psoc *psoc);
1313 
1314 /**
1315  * wlan_reg_get_curr_regdomain() - Get current regdomain in use
1316  * @pdev: pdev pointer
1317  * @cur_regdmn: Current regdomain info
1318  *
1319  * Return: QDF status
1320  */
1321 QDF_STATUS wlan_reg_get_curr_regdomain(struct wlan_objmgr_pdev *pdev,
1322 		struct cur_regdmn_info *cur_regdmn);
1323 
1324 #ifdef WLAN_REG_PARTIAL_OFFLOAD
1325 /**
1326  * wlan_reg_is_regdmn_en302502_applicable() - Find if ETSI EN302_502 radar
1327  * pattern is applicable in the current regulatory domain.
1328  * @pdev:    Pdev ptr.
1329  *
1330  * Return: Boolean.
1331  * True:  If EN302_502 is applicable.
1332  * False: otherwise.
1333  */
1334 bool wlan_reg_is_regdmn_en302502_applicable(struct wlan_objmgr_pdev *pdev);
1335 #endif
1336 
1337 /**
1338  * wlan_reg_modify_pdev_chan_range() - Compute current channel list for the
1339  * modified channel range in the regcap.
1340  * @pdev: pointer to wlan_objmgr_pdev.
1341  *
1342  * Return : QDF_STATUS
1343  */
1344 QDF_STATUS wlan_reg_modify_pdev_chan_range(struct wlan_objmgr_pdev *pdev);
1345 
1346 /**
1347  * wlan_reg_get_phybitmap() - Get phybitmap from regulatory pdev_priv_obj
1348  * @pdev: pdev pointer
1349  * @phybitmap: pointer to phybitmap
1350  *
1351  * Return: QDF STATUS
1352  */
1353 QDF_STATUS wlan_reg_get_phybitmap(struct wlan_objmgr_pdev *pdev,
1354 				  uint16_t *phybitmap);
1355 
1356 /**
1357  * wlan_reg_update_pdev_wireless_modes() - Update the wireless_modes in the
1358  * pdev_priv_obj with the input wireless_modes
1359  * @pdev: pointer to wlan_objmgr_pdev.
1360  * @wireless_modes: Wireless modes.
1361  *
1362  * Return : QDF_STATUS
1363  */
1364 QDF_STATUS wlan_reg_update_pdev_wireless_modes(struct wlan_objmgr_pdev *pdev,
1365 					       uint64_t wireless_modes);
1366 /**
1367  * wlan_reg_disable_chan_coex() - Disable Coexisting channels based on the input
1368  * bitmask
1369  * @pdev: pointer to wlan_objmgr_pdev.
1370  * unii_5g_bitmap: UNII 5G bitmap.
1371  *
1372  * Return : QDF_STATUS
1373  */
1374 #ifdef DISABLE_UNII_SHARED_BANDS
1375 QDF_STATUS wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev *pdev,
1376 				      uint8_t unii_5g_bitmap);
1377 #else
1378 static inline QDF_STATUS
1379 wlan_reg_disable_chan_coex(struct wlan_objmgr_pdev *pdev,
1380 			   uint8_t unii_5g_bitmap)
1381 {
1382 	return QDF_STATUS_SUCCESS;
1383 }
1384 #endif
1385 
1386 #ifdef WLAN_FEATURE_GET_USABLE_CHAN_LIST
1387 /**
1388  * wlan_reg_get_usable_channel() - Get usable channels
1389  * @pdev: Pointer to pdev
1390  * @req_msg: Request msg
1391  * @res_msg: Response msg
1392  * @count: no of usable channels
1393  *
1394  * Return: qdf status
1395  */
1396 QDF_STATUS
1397 wlan_reg_get_usable_channel(struct wlan_objmgr_pdev *pdev,
1398 			    struct get_usable_chan_req_params req_msg,
1399 			    struct get_usable_chan_res_params *res_msg,
1400 			    uint32_t *count);
1401 #endif
1402 
1403 #ifdef CONFIG_CHAN_FREQ_API
1404 /**
1405  * wlan_reg_is_same_band_freqs() - Check if two channel frequencies
1406  * have same band
1407  * @freq1: Frequency 1
1408  * @freq2: Frequency 2
1409  *
1410  * Return: true if both the channel frequency has the same band.
1411  */
1412 #define WLAN_REG_IS_SAME_BAND_FREQS(freq1, freq2) \
1413 	wlan_reg_is_same_band_freqs(freq1, freq2)
1414 bool wlan_reg_is_same_band_freqs(qdf_freq_t freq1, qdf_freq_t freq2);
1415 
1416 /**
1417  * wlan_reg_get_chan_enum_for_freq() - Get channel enum for given channel center
1418  * frequency
1419  * @freq: Channel center frequency
1420  *
1421  * Return: Channel enum
1422  */
1423 enum channel_enum wlan_reg_get_chan_enum_for_freq(qdf_freq_t freq);
1424 
1425 /**
1426  * wlan_reg_is_freq_present_in_cur_chan_list() - Check if channel is present
1427  * in the current channel list
1428  * @pdev: pdev pointer
1429  * @freq: Channel center frequency
1430  *
1431  * Return: true if channel is present in current channel list
1432  */
1433 bool wlan_reg_is_freq_present_in_cur_chan_list(struct wlan_objmgr_pdev *pdev,
1434 					       qdf_freq_t freq);
1435 
1436 /**
1437  * wlan_reg_update_nol_history_ch_for_freq() - Set nol-history flag for the
1438  * channels in the list.
1439  *
1440  * @pdev: Pdev ptr
1441  * @ch_list: Input channel list.
1442  * @num_ch: Number of channels.
1443  * @nol_history_ch: Nol history value.
1444  *
1445  * Return: void
1446  */
1447 void wlan_reg_update_nol_history_ch_for_freq(struct wlan_objmgr_pdev *pdev,
1448 					     uint16_t *ch_list,
1449 					     uint8_t num_ch,
1450 					     bool nol_history_ch);
1451 
1452 /**
1453  * wlan_reg_chan_has_dfs_attribute_for_freq() - check channel has dfs
1454  * attribute flag
1455  * @freq: channel center frequency.
1456  *
1457  * This API get chan initial dfs attribute from regdomain
1458  *
1459  * Return: true if chan is dfs, otherwise false
1460  */
1461 bool
1462 wlan_reg_chan_has_dfs_attribute_for_freq(struct wlan_objmgr_pdev *pdev,
1463 					 qdf_freq_t freq);
1464 
1465 /**
1466  * wlan_reg_get_channel_list_with_power_for_freq() - Provide the channel list
1467  * with power
1468  * @ch_list: pointer to the channel list.
1469  *
1470  * Return: QDF_STATUS
1471  */
1472 QDF_STATUS
1473 wlan_reg_get_channel_list_with_power_for_freq(struct wlan_objmgr_pdev *pdev,
1474 					      struct channel_power *ch_list,
1475 					      uint8_t *num_chan);
1476 
1477 #ifdef CONFIG_REG_6G_PWRMODE
1478 /**
1479  * wlan_reg_get_5g_bonded_channel_state_for_pwrmode() - Get 5G bonded channel
1480  * state.
1481  * @pdev: The physical dev to program country code or regdomain
1482  * @freq: channel frequency.
1483  * @ch_params: channel parameters
1484  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1485  *
1486  * Return: channel state
1487  */
1488 enum channel_state
1489 wlan_reg_get_5g_bonded_channel_state_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1490 						 qdf_freq_t freq,
1491 						 struct ch_params *ch_params,
1492 						 enum supported_6g_pwr_types
1493 						 in_6g_pwr_type);
1494 #endif
1495 
1496 /**
1497  * wlan_reg_get_2g_bonded_channel_state_for_freq() - Get 2G bonded channel state
1498  * @pdev: The physical dev to program country code or regdomain
1499  * @freq: channel center frequency.
1500  * @sec_ch_freq: Secondary channel center frequency.
1501  * @bw: channel band width
1502  *
1503  * Return: channel state
1504  */
1505 enum channel_state
1506 wlan_reg_get_2g_bonded_channel_state_for_freq(struct wlan_objmgr_pdev *pdev,
1507 					      qdf_freq_t freq,
1508 					      qdf_freq_t sec_ch_freq,
1509 					      enum phy_ch_width bw);
1510 
1511 #ifdef CONFIG_REG_6G_PWRMODE
1512 /**
1513  * wlan_reg_get_channel_state_for_pwrmode() - Get channel state from regulatory
1514  * @pdev: Pointer to pdev
1515  * @freq: channel center frequency.
1516  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1517  *
1518  * Return: channel state
1519  */
1520 enum channel_state
1521 wlan_reg_get_channel_state_for_pwrmode(
1522 				    struct wlan_objmgr_pdev *pdev,
1523 				    qdf_freq_t freq,
1524 				    enum supported_6g_pwr_types in_6g_pwr_type);
1525 #endif
1526 
1527 #ifdef CONFIG_REG_CLIENT
1528 /**
1529  * wlan_reg_get_channel_state_from_secondary_list_for_freq() - Get channel state
1530  * from secondary regulatory current channel list
1531  * @pdev: Pointer to pdev
1532  * @freq: channel center frequency.
1533  *
1534  * Return: channel state
1535  */
1536 enum channel_state wlan_reg_get_channel_state_from_secondary_list_for_freq(
1537 						struct wlan_objmgr_pdev *pdev,
1538 						qdf_freq_t freq);
1539 
1540 /**
1541  * wlan_reg_get_channel_list_with_power() - Provide channel list with tx power
1542  * @ch_list: pointer to the channel list.
1543  * @num_chan: Number of channels which has been filed in ch_list
1544  * @in_6g_pwr_type: 6G power type corresponding to which 6G channels needs to
1545  * be provided
1546  *
1547  * Return: QDF_STATUS
1548  */
1549 QDF_STATUS
1550 wlan_reg_get_channel_list_with_power(
1551 				struct wlan_objmgr_pdev *pdev,
1552 				struct channel_power *ch_list,
1553 				uint8_t *num_chan,
1554 				enum supported_6g_pwr_types in_6g_pwr_type);
1555 #endif
1556 
1557 #ifdef WLAN_FEATURE_11BE
1558 /**
1559  * wlan_reg_is_punc_bitmap_valid() - is puncture bitmap valid or not
1560  * @bw: Input channel width.
1561  * @puncture_bitmap Input puncture bitmap.
1562  *
1563  * Return: true if given puncture bitmap is valid
1564  */
1565 bool wlan_reg_is_punc_bitmap_valid(enum phy_ch_width bw,
1566 				   uint16_t puncture_bitmap);
1567 
1568 /**
1569  * wlan_reg_find_nearest_puncture_pattern() - is proposed bitmap valid or not
1570  * @bw: Input channel width.
1571  * @proposed_bitmap: Input puncture bitmap.
1572  *
1573  * Return: Radar bitmap if it is valid.
1574  */
1575 uint16_t wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw,
1576 						uint16_t proposed_bitmap);
1577 
1578 /**
1579  * wlan_reg_extract_puncture_by_bw() - generate new puncture bitmap from
1580  *                                     original puncture bitmap and bandwidth
1581  *                                     based on new bandwidth
1582  * @ori_bw: original bandwidth
1583  * @ori_puncture_bitmap: original puncture bitmap
1584  * @freq: frequency of primary channel
1585  * @cen320_freq: center frequency of 320 MHZ if channel width is 320
1586  * @new_bw new bandwidth
1587  * @new_puncture_bitmap: output of puncture bitmap
1588  *
1589  * Return: QDF_STATUS
1590  */
1591 QDF_STATUS wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw,
1592 					   uint16_t ori_puncture_bitmap,
1593 					   qdf_freq_t freq,
1594 					   qdf_freq_t cen320_freq,
1595 					   enum phy_ch_width new_bw,
1596 					   uint16_t *new_puncture_bitmap);
1597 
1598 /**
1599  * wlan_reg_set_create_punc_bitmap() - set is_create_punc_bitmap of ch_params
1600  * @ch_params: ch_params to set
1601  * @is_create_punc_bitmap: is create punc bitmap
1602  *
1603  * Return: NULL
1604  */
1605 void wlan_reg_set_create_punc_bitmap(struct ch_params *ch_params,
1606 				     bool is_create_punc_bitmap);
1607 
1608 #ifdef CONFIG_REG_CLIENT
1609 /**
1610  * wlan_reg_apply_puncture() - apply puncture to regulatory
1611  * @pdev: pdev
1612  * @puncture_bitmap: puncture bitmap
1613  * @freq: sap operation freq
1614  * @bw: band width
1615  * @cen320_freq: 320 MHz center freq
1616  *
1617  * When start ap, apply puncture to regulatory, set static puncture flag
1618  * for all 20 MHz sub channels of current bonded channel in master channel list
1619  * of pdev, and disable 20 MHz sub channel in current channel list if static
1620  * puncture flag is set.
1621  *
1622  * Return: QDF_STATUS
1623  */
1624 QDF_STATUS wlan_reg_apply_puncture(struct wlan_objmgr_pdev *pdev,
1625 				   uint16_t puncture_bitmap,
1626 				   qdf_freq_t freq,
1627 				   enum phy_ch_width bw,
1628 				   qdf_freq_t cen320_freq);
1629 
1630 /**
1631  * wlan_reg_remove_puncture() - Remove puncture from regulatory
1632  * @pdev: pdev
1633  *
1634  * When stop ap, remove puncture from regulatory, clear static puncture flag
1635  * for all 20 MHz sub channels in master channel list of pdev, and don't disable
1636  * 20 MHz sub channel in current channel list if static puncture flag is not
1637  * set.
1638  *
1639  * Return: QDF_STATUS
1640  */
1641 QDF_STATUS wlan_reg_remove_puncture(struct wlan_objmgr_pdev *pdev);
1642 #else
1643 static inline
1644 QDF_STATUS wlan_reg_apply_puncture(struct wlan_objmgr_pdev *pdev,
1645 				   uint16_t puncture_bitmap,
1646 				   qdf_freq_t freq,
1647 				   enum phy_ch_width bw,
1648 				   qdf_freq_t cen320_freq)
1649 {
1650 	return QDF_STATUS_SUCCESS;
1651 }
1652 
1653 static inline
1654 QDF_STATUS wlan_reg_remove_puncture(struct wlan_objmgr_pdev *pdev)
1655 {
1656 	return QDF_STATUS_SUCCESS;
1657 }
1658 #endif
1659 #ifdef CONFIG_REG_6G_PWRMODE
1660 /**
1661  * wlan_reg_fill_channel_list_for_pwrmode() - Fills the reg_channel_list
1662  * (list of channels)
1663  * @pdev: Pointer to struct wlan_objmgr_pdev.
1664  * @freq: Center frequency of the primary channel in MHz
1665  * @sec_ch_2g_freq: Secondary channel center frequency.
1666  * @ch_width: Channel width of type 'enum phy_ch_width'.
1667  * @band_center_320: Center frequency of 320MHZ channel.
1668  * @chan_list: Pointer to struct reg_channel_list to be filled (Output param).
1669  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1670  * @treat_nol_chan_as_disabled: bool to treat nol channel as enabled or
1671  * disabled. If set to true, nol chan is considered as disabled in chan search.
1672  *
1673  * Return: None
1674  */
1675 void wlan_reg_fill_channel_list_for_pwrmode(
1676 				struct wlan_objmgr_pdev *pdev,
1677 				qdf_freq_t freq,
1678 				qdf_freq_t sec_ch_2g_freq,
1679 				enum phy_ch_width ch_width,
1680 				qdf_freq_t band_center_320,
1681 				struct reg_channel_list *chan_list,
1682 				enum supported_6g_pwr_types in_6g_pwr_type,
1683 				bool treat_nol_chan_as_disabled);
1684 #endif
1685 #else
1686 static inline
1687 QDF_STATUS wlan_reg_extract_puncture_by_bw(enum phy_ch_width ori_bw,
1688 					   uint16_t ori_puncture_bitmap,
1689 					   qdf_freq_t freq,
1690 					   enum phy_ch_width new_bw,
1691 					   uint16_t *new_puncture_bitmap)
1692 {
1693 	return QDF_STATUS_SUCCESS;
1694 }
1695 
1696 static inline void wlan_reg_set_create_punc_bitmap(struct ch_params *ch_params,
1697 						   bool is_create_punc_bitmap)
1698 {
1699 }
1700 
1701 static inline
1702 QDF_STATUS wlan_reg_apply_puncture(struct wlan_objmgr_pdev *pdev,
1703 				   uint16_t puncture_bitmap,
1704 				   qdf_freq_t freq,
1705 				   enum phy_ch_width bw,
1706 				   qdf_freq_t cen320_freq)
1707 {
1708 	return QDF_STATUS_SUCCESS;
1709 }
1710 
1711 static inline
1712 QDF_STATUS wlan_reg_remove_puncture(struct wlan_objmgr_pdev *pdev)
1713 {
1714 	return QDF_STATUS_SUCCESS;
1715 }
1716 
1717 static inline
1718 uint16_t wlan_reg_find_nearest_puncture_pattern(enum phy_ch_width bw,
1719 						uint16_t proposed_bitmap)
1720 {
1721 	return 0;
1722 }
1723 #endif
1724 
1725 #ifdef CONFIG_REG_6G_PWRMODE
1726 /**
1727  * wlan_reg_set_channel_params_for_pwrmode() - Sets channel parameteres for
1728  * given bandwidth
1729  * @pdev: The physical dev to program country code or regdomain
1730  * @freq: channel center frequency.
1731  * @sec_ch_2g_freq: Secondary channel center frequency.
1732  * @ch_params: pointer to the channel parameters.
1733  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1734  *
1735  * Return: None
1736  */
1737 void wlan_reg_set_channel_params_for_pwrmode(struct wlan_objmgr_pdev *pdev,
1738 					     qdf_freq_t freq,
1739 					     qdf_freq_t sec_ch_2g_freq,
1740 					     struct ch_params *ch_params,
1741 					     enum supported_6g_pwr_types
1742 					     in_6g_pwr_mode);
1743 #endif
1744 
1745 /**
1746  * wlan_reg_get_channel_cfreq_reg_power_for_freq() - Provide the channel
1747  * regulatory power
1748  * @freq: channel center frequency
1749  *
1750  * Return: int
1751  */
1752 uint8_t wlan_reg_get_channel_reg_power_for_freq(struct wlan_objmgr_pdev *pdev,
1753 						qdf_freq_t freq);
1754 
1755 /**
1756  * wlan_reg_get_bonded_chan_entry() - Fetch the bonded channel pointer given a
1757  * frequency and channel width.
1758  * @freq: Input frequency in MHz.
1759  * @chwidth: Input channel width of enum phy_ch_width.
1760  * @cen320_freq: 320 MHz center frequency in MHz. In 6GHz band 320 MHz channel
1761  *               are overlapping. The exact band should be therefore identified
1762  *               by the center frequency of the 320 Mhz channel.
1763  *
1764  * Return: A valid bonded channel pointer if found, else NULL.
1765  */
1766 const struct bonded_channel_freq *
1767 wlan_reg_get_bonded_chan_entry(qdf_freq_t freq, enum phy_ch_width chwidth,
1768 			       qdf_freq_t cen320_freq);
1769 
1770 /**
1771  * wlan_reg_update_nol_ch_for_freq () - set nol channel
1772  * @pdev: pdev ptr
1773  * @chan_freq_list: channel list to be returned
1774  * @num_ch: number of channels
1775  * @nol_ch: nol flag
1776  *
1777  * Return: void
1778  */
1779 void wlan_reg_update_nol_ch_for_freq(struct wlan_objmgr_pdev *pdev,
1780 				     uint16_t *chan_freq_list,
1781 				     uint8_t num_ch,
1782 				     bool nol_ch);
1783 
1784 /**
1785  * wlan_reg_is_dfs_freq() - Checks the channel state for DFS
1786  * @freq: Channel center frequency
1787  *
1788  * Return: true or false
1789  */
1790 bool wlan_reg_is_dfs_for_freq(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq);
1791 
1792 /**
1793  * wlan_reg_is_dsrc_freq() - Checks if the channel is dsrc channel or not
1794  * @freq: Channel center frequency
1795  *
1796  * Return: true or false
1797  */
1798 bool wlan_reg_is_dsrc_freq(qdf_freq_t freq);
1799 
1800 /**
1801  * wlan_reg_is_passive_or_disable_for_pwrmode() - Checks chan state for passive
1802  * and disabled
1803  * @pdev: pdev ptr
1804  * @freq: Channel center frequency
1805  * @in_6g_pwr_mode: Input 6GHz power mode
1806  *
1807  * Return: true or false
1808  */
1809 bool wlan_reg_is_passive_or_disable_for_pwrmode(
1810 				struct wlan_objmgr_pdev *pdev,
1811 				qdf_freq_t freq,
1812 				enum supported_6g_pwr_types in_6g_pwr_mode);
1813 
1814 #ifdef CONFIG_REG_6G_PWRMODE
1815 /**
1816  * wlan_reg_is_disable_for_pwrmode() - Checks chan state for disabled
1817  * @pdev: pdev ptr
1818  * @freq: Channel center frequency
1819  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
1820  *
1821  * Return: true or false
1822  */
1823 bool wlan_reg_is_disable_for_pwrmode(
1824 				  struct wlan_objmgr_pdev *pdev,
1825 				  qdf_freq_t freq,
1826 				  enum supported_6g_pwr_types in_6g_pwr_mode);
1827 #endif
1828 
1829 #ifdef CONFIG_REG_CLIENT
1830 /**
1831  * wlan_reg_is_disable_in_secondary_list_for_freq() - Checks in the secondary
1832  * channel list to see if chan state is disabled
1833  * @pdev: pdev ptr
1834  * @freq: Channel center frequency
1835  *
1836  * Return: true or false
1837  */
1838 bool wlan_reg_is_disable_in_secondary_list_for_freq(
1839 						struct wlan_objmgr_pdev *pdev,
1840 						qdf_freq_t freq);
1841 
1842 /**
1843  * wlan_reg_is_enable_in_secondary_list_for_freq() - Checks in the secondary
1844  * channel list to see if chan state is enabled
1845  * @pdev: pdev ptr
1846  * @freq: Channel center frequency
1847  *
1848  * Return: true or false
1849  */
1850 bool wlan_reg_is_enable_in_secondary_list_for_freq(
1851 						struct wlan_objmgr_pdev *pdev,
1852 						qdf_freq_t freq);
1853 
1854 /**
1855  * wlan_reg_is_dfs_in_secondary_list_for_freq() - hecks the channel state for
1856  * DFS from the secondary channel list
1857  * @pdev: pdev ptr
1858  * @freq: Channel center frequency
1859  *
1860  * Return: true or false
1861  */
1862 bool wlan_reg_is_dfs_in_secondary_list_for_freq(struct wlan_objmgr_pdev *pdev,
1863 						qdf_freq_t freq);
1864 
1865 /**
1866  * wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq() - get channel
1867  * power attributions from secondary channel list
1868  * @pdev: pdev ptr
1869  * @freq: channel center frequency
1870  * @is_psd: pointer to retrieve value whether channel power is psd
1871  * @tx_power: pointer to retrieve value of channel eirp tx power
1872  * @psd_eirp: pointer to retrieve value of channel psd eirp power
1873  * @flags: pointer to retrieve value of channel flags
1874  *
1875  * Return: QDF STATUS
1876  */
1877 QDF_STATUS
1878 wlan_reg_get_chan_pwr_attr_from_secondary_list_for_freq(
1879 				struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
1880 				bool *is_psd, uint16_t *tx_power,
1881 				uint16_t *psd_eirp, uint32_t *flags);
1882 
1883 /**
1884  * wlan_reg_decide_6ghz_power_within_bw_for_freq() - decide minimum tx power in
1885  * bandwidth and 6 GHz power type
1886  * @pdev: pdev ptr
1887  * @freq: channel center frequency
1888  * @bw: channel bandwidth
1889  * @is_psd: pointer to retrieve value whether channel power is psd
1890  * @min_tx_power: pointer to retrieve minimum tx power in bandwidth
1891  * @min_psd_eirp: pointer to retrieve minimum psd eirp in bandwidth
1892  * @power_type: pointer to retrieve 6 GHz power type
1893  * @pwr_mode: 6g power type which decides 6G channel list lookup.
1894  * @input_punc_bitmap: Input  puncture bitmap
1895  *
1896  * Return: QDF STATUS
1897  */
1898 QDF_STATUS
1899 wlan_reg_decide_6ghz_power_within_bw_for_freq(struct wlan_objmgr_pdev *pdev,
1900 					      qdf_freq_t freq,
1901 					      enum phy_ch_width bw,
1902 					      bool *is_psd,
1903 					      uint16_t *min_tx_power,
1904 					      int16_t *min_psd_eirp,
1905 					      enum reg_6g_ap_type *power_type,
1906 					      enum supported_6g_pwr_types pwr_mode,
1907 					      uint16_t input_punc_bitmap);
1908 #endif
1909 
1910 /**
1911  * wlan_reg_is_passive_for_freq() - Check the channel flags to see if the
1912  * passive flag is set
1913  * @pdev: pdev ptr
1914  * @freq: Channel center frequency
1915  *
1916  * Return: true or false
1917  */
1918 bool wlan_reg_is_passive_for_freq(struct wlan_objmgr_pdev *pdev,
1919 				  qdf_freq_t freq);
1920 
1921 /**
1922  * wlan_reg_freq_to_band() - Get band from channel number
1923  * @freq:Channel frequency in MHz
1924  *
1925  * Return: wifi band
1926  */
1927 enum reg_wifi_band wlan_reg_freq_to_band(qdf_freq_t freq);
1928 
1929 /**
1930  * wlan_reg_min_chan_freq() - Minimum channel frequency supported
1931  *
1932  * Return: frequency
1933  */
1934 qdf_freq_t wlan_reg_min_chan_freq(void);
1935 
1936 /**
1937  * wlan_reg_max_chan_freq() - Return max. frequency
1938  *
1939  * Return: frequency
1940  */
1941 qdf_freq_t wlan_reg_max_chan_freq(void);
1942 
1943 /**
1944  * wlan_reg_freq_width_to_chan_op_class() -Get op class from freq
1945  * @pdev: pdev ptr
1946  * @freq: channel frequency
1947  * @chan_width: channel width
1948  * @global_tbl_lookup: whether to look up global table
1949  * @behav_limit: behavior limit
1950  * @op_class: operating class
1951  * @chan_num: channel number
1952  *
1953  * Return: void
1954  */
1955 void wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev *pdev,
1956 					  qdf_freq_t freq,
1957 					  uint16_t chan_width,
1958 					  bool global_tbl_lookup,
1959 					  uint16_t behav_limit,
1960 					  uint8_t *op_class,
1961 					  uint8_t *chan_num);
1962 
1963 /**
1964  * wlan_reg_freq_width_to_chan_op_class_auto() - convert frequency to
1965  * operating class,channel
1966  * @pdev: pdev pointer
1967  * @freq: channel frequency in mhz
1968  * @chan_width: channel width
1969  * @global_tbl_lookup: whether to lookup global op class tbl
1970  * @behav_limit: behavior limit
1971  * @op_class: operating class
1972  * @chan_num: channel number
1973  *
1974  * Return: Void.
1975  */
1976 void wlan_reg_freq_width_to_chan_op_class_auto(struct wlan_objmgr_pdev *pdev,
1977 					       qdf_freq_t freq,
1978 					       uint16_t chan_width,
1979 					       bool global_tbl_lookup,
1980 					       uint16_t behav_limit,
1981 					       uint8_t *op_class,
1982 					       uint8_t *chan_num);
1983 
1984 /**
1985  * wlan_reg_freq_to_chan_and_op_class() - Converts freq to oper class
1986  * @pdev: pdev ptr
1987  * @freq: channel frequency
1988  * @global_tbl_lookup: whether to look up global table
1989  * @behav_limit: behavior limit
1990  * @op_class: operating class
1991  * @chan_num: channel number
1992  *
1993  * Return: void
1994  */
1995 void wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev *pdev,
1996 				    qdf_freq_t freq,
1997 				    bool global_tbl_lookup,
1998 				    uint16_t behav_limit,
1999 				    uint8_t *op_class,
2000 				    uint8_t *chan_num);
2001 
2002 /**
2003  * wlan_reg_is_freq_in_country_opclass() - checks frequency in (ctry, op class)
2004  *                                         pair
2005  * @pdev: pdev ptr
2006  * @country: country information
2007  * @op_class: operating class
2008  * @chan_freq: channel frequency
2009  *
2010  * Return: bool
2011  */
2012 bool wlan_reg_is_freq_in_country_opclass(struct wlan_objmgr_pdev *pdev,
2013 					 const uint8_t country[3],
2014 					 uint8_t op_class,
2015 					 qdf_freq_t chan_freq);
2016 /**
2017  * wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode()- Return the channel
2018  * state for a 5G or 6G channel frequency based on the channel width and
2019  * bonded channel.
2020  * @pdev: Pointer to pdev.
2021  * @freq: Channel center frequency.
2022  * @bw Channel Width.
2023  * @bonded_chan_ptr_ptr: Pointer to bonded_channel_freq.
2024  * @in_6g_pwr_type: 6g power type which decides 6G channel list lookup.
2025  * @input_puncture_bitmap: Input puncture bitmap
2026  *
2027  * Return: Channel State
2028  */
2029 enum channel_state
2030 wlan_reg_get_5g_bonded_channel_and_state_for_pwrmode(
2031 					struct wlan_objmgr_pdev *pdev,
2032 					uint16_t freq,
2033 					enum phy_ch_width bw,
2034 					const
2035 					struct bonded_channel_freq
2036 					**bonded_chan_ptr_ptr,
2037 					enum supported_6g_pwr_types
2038 					in_6g_pwr_mode,
2039 					uint16_t input_puncture_bitmap);
2040 #endif /*CONFIG_CHAN_FREQ_API */
2041 
2042 /**
2043  * wlan_reg_get_op_class_width() - Get operating class chan width
2044  * @pdev: pdev ptr
2045  * @freq: channel frequency
2046  * @global_tbl_lookup: whether to look up global table
2047  * @op_class: operating class
2048  * @chan_num: channel number
2049  *
2050  * Return: channel width of op class
2051  */
2052 uint16_t wlan_reg_get_op_class_width(struct wlan_objmgr_pdev *pdev,
2053 				     uint8_t op_class,
2054 				     bool global_tbl_lookup);
2055 
2056 /**
2057  * wlan_reg_is_5ghz_op_class() - Check if the input opclass is a 5GHz opclass.
2058  * @country: Country code.
2059  * @op_class: Operating class.
2060  *
2061  * Return: Return true if input the opclass is a 5GHz opclass,
2062  * else return false.
2063  */
2064 bool wlan_reg_is_5ghz_op_class(const uint8_t *country, uint8_t op_class);
2065 
2066 /**
2067  * wlan_reg_is_2ghz_op_class() - Check if the input opclass is a 2.4GHz opclass.
2068  * @country: Country code.
2069  * @op_class: Operating class.
2070  *
2071  * Return: Return true if input the opclass is a 2.4GHz opclass,
2072  * else return false.
2073  */
2074 bool wlan_reg_is_2ghz_op_class(const uint8_t *country, uint8_t op_class);
2075 
2076 /**
2077  * wlan_reg_is_6ghz_op_class() - Whether 6ghz oper class
2078  * @pdev: pdev ptr
2079  * @op_class: operating class
2080  *
2081  * Return: bool
2082  */
2083 bool wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev,
2084 			       uint8_t op_class);
2085 
2086 #ifdef CONFIG_REG_CLIENT
2087 /**
2088  * wlan_reg_is_6ghz_supported() - Whether 6ghz is supported
2089  * @psoc: psoc ptr
2090  *
2091  * Return: bool
2092  */
2093 bool wlan_reg_is_6ghz_supported(struct wlan_objmgr_psoc *psoc);
2094 #endif
2095 
2096 #ifdef HOST_OPCLASS_EXT
2097 /**
2098  * wlan_reg_country_chan_opclass_to_freq() - Convert channel number to
2099  * frequency based on country code and op class
2100  * @pdev: pdev object.
2101  * @country: country code.
2102  * @chan: IEEE Channel Number.
2103  * @op_class: Opclass.
2104  * @strict: flag to find channel from matched operating class code.
2105  *
2106  * Look up (channel, operating class) pair in country operating class tables
2107  * and return the channel frequency.
2108  * If not found and "strict" flag is false, try to get frequency (Mhz) by
2109  * channel number only.
2110  *
2111  * Return: Channel center frequency else return 0.
2112  */
2113 qdf_freq_t
2114 wlan_reg_country_chan_opclass_to_freq(struct wlan_objmgr_pdev *pdev,
2115 				      const uint8_t country[3],
2116 				      uint8_t chan, uint8_t op_class,
2117 				      bool strict);
2118 #endif
2119 
2120 /**
2121  * reg_chan_opclass_to_freq() - Convert channel number and opclass to frequency
2122  * @chan: IEEE Channel Number.
2123  * @op_class: Opclass.
2124  * @global_tbl_lookup: Global table lookup.
2125  *
2126  * Return: Channel center frequency else return 0.
2127  */
2128 uint16_t wlan_reg_chan_opclass_to_freq(uint8_t chan,
2129 				       uint8_t op_class,
2130 				       bool global_tbl_lookup);
2131 
2132 /**
2133  * wlan_reg_chan_opclass_to_freq_auto() - Convert channel number and opclass to
2134  * frequency
2135  * @chan: IEEE channel number
2136  * @op_class: Operating class of channel
2137  * @global_tbl_lookup: Flag to determine if global table has to be looked up
2138  *
2139  * Return: Channel center frequency if valid, else zero
2140  */
2141 
2142 qdf_freq_t wlan_reg_chan_opclass_to_freq_auto(uint8_t chan, uint8_t op_class,
2143 					      bool global_tbl_lookup);
2144 
2145 #ifdef CHECK_REG_PHYMODE
2146 /**
2147  * wlan_reg_get_max_phymode() - Find the best possible phymode given a
2148  * phymode, a frequency, and per-country regulations
2149  * @pdev: pdev pointer
2150  * @phy_in: phymode that the user requested
2151  * @freq: current operating center frequency
2152  *
2153  * Return: maximum phymode allowed in current country that is <= phy_in
2154  */
2155 enum reg_phymode wlan_reg_get_max_phymode(struct wlan_objmgr_pdev *pdev,
2156 					  enum reg_phymode phy_in,
2157 					  qdf_freq_t freq);
2158 #else
2159 static inline enum reg_phymode
2160 wlan_reg_get_max_phymode(struct wlan_objmgr_pdev *pdev,
2161 			 enum reg_phymode phy_in,
2162 			 qdf_freq_t freq)
2163 {
2164 	return REG_PHYMODE_INVALID;
2165 }
2166 #endif /* CHECK_REG_PHYMODE */
2167 
2168 #ifdef CONFIG_REG_CLIENT
2169 /**
2170  * wlan_reg_band_bitmap_to_band_info() - Convert the band_bitmap to a
2171  *	band_info enum
2172  * @band_bitmap: bitmap on top of reg_wifi_band of bands enabled
2173  *
2174  * Return: BAND_ALL if both 2G and 5G band is enabled
2175  *	BAND_2G if 2G is enabled but 5G isn't
2176  *	BAND_5G if 5G is enabled but 2G isn't
2177  */
2178 enum band_info wlan_reg_band_bitmap_to_band_info(uint32_t band_bitmap);
2179 
2180 /**
2181  * wlan_reg_update_tx_power_on_ctry_change() - Update tx power during
2182  * country code change (without channel change) OR if fcc constraint is set
2183  * @pdev: Pointer to pdev
2184  * @vdev_id: vdev ID
2185  *
2186  * Return: QDF_STATUS
2187  */
2188 QDF_STATUS
2189 wlan_reg_update_tx_power_on_ctry_change(struct wlan_objmgr_pdev *pdev,
2190 					uint8_t vdev_id);
2191 
2192 /**
2193  * wlan_reg_modify_indoor_concurrency() - Update the indoor concurrency list
2194  * in regulatory pdev context
2195  *
2196  * @pdev: pointer to pdev
2197  * @vdev_id: vdev id
2198  * @freq: frequency
2199  * @width: channel width
2200  * @add: add or delete entry
2201  *
2202  * Return: QDF_STATUS
2203  */
2204 QDF_STATUS
2205 wlan_reg_modify_indoor_concurrency(struct wlan_objmgr_pdev *pdev,
2206 				   uint8_t vdev_id, uint32_t freq,
2207 				   enum phy_ch_width width, bool add);
2208 
2209 /**
2210  * wlan_reg_recompute_current_chan_list() - Recompute the current channel list
2211  * based on the regulatory change
2212  *
2213  * @psoc: pointer to psoc
2214  * @pdev: pointer to pdev
2215  *
2216  * Return: QDF_STATUS
2217  */
2218 QDF_STATUS
2219 wlan_reg_recompute_current_chan_list(struct wlan_objmgr_psoc *psoc,
2220 				     struct wlan_objmgr_pdev *pdev);
2221 #endif
2222 
2223 #if defined(CONFIG_BAND_6GHZ)
2224 /**
2225  * wlan_reg_get_cur_6g_ap_pwr_type() - Get the current 6G regulatory AP power
2226  * type.
2227  * @pdev: Pointer to PDEV object.
2228  * @reg_cur_6g_ap_pwr_type: The current regulatory 6G AP power type ie.
2229  * LPI/SP/VLP.
2230  *
2231  * Return: QDF_STATUS.
2232  */
2233 QDF_STATUS
2234 wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev,
2235 				enum reg_6g_ap_type *reg_cur_6g_ap_pwr_type);
2236 
2237 /**
2238  * wlan_reg_get_cur_6g_client_type() - Get the current 6G regulatory client
2239  * type.
2240  * @pdev: Pointer to PDEV object.
2241  * @reg_cur_6g_client_mobility_type: The current regulatory 6G client type ie.
2242  * default/subordinate.
2243  *
2244  * Return: QDF_STATUS.
2245  */
2246 QDF_STATUS
2247 wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev *pdev,
2248 				enum reg_6g_client_type
2249 				*reg_cur_6g_client_mobility_type);
2250 
2251 /**
2252  * wlan_reg_set_cur_6ghz_client_type() - Set the cur 6 GHz regulatory client
2253  * type to the given value.
2254  * @pdev: Pointer to PDEV object.
2255  * @in_6ghz_client_type: Input Client type to be set ie. default/subordinate.
2256  *
2257  * Return: QDF_STATUS.
2258  */
2259 QDF_STATUS
2260 wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev *pdev,
2261 				  enum reg_6g_client_type in_6ghz_client_type);
2262 
2263 /**
2264  * wlan_reg_set_6ghz_client_type_from_target() - Set the current 6 GHz
2265  * regulatory client type to the value received from target.
2266  * @pdev: Pointer to PDEV object.
2267  *
2268  * Return: QDF_STATUS.
2269  */
2270 QDF_STATUS
2271 wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev *pdev);
2272 
2273 /**
2274  * wlan_reg_get_rnr_tpe_usable() - Tells if RNR IE is applicable for current
2275  * domain.
2276  * @pdev: Pointer to PDEV object.
2277  * @reg_rnr_tpe_usable: Pointer to hold the bool value, true if RNR IE is
2278  * applicable, else false.
2279  *
2280  * Return: QDF_STATUS.
2281  */
2282 QDF_STATUS wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev *pdev,
2283 				       bool *reg_rnr_tpe_usable);
2284 
2285 /**
2286  * wlan_reg_get_unspecified_ap_usable() - Tells if AP type unspecified by 802.11
2287  * can be used or not.
2288  * @pdev: Pointer to PDEV object.
2289  * @reg_unspecified_ap_usable: Pointer to hold the bool value, true if
2290  * unspecified AP types can be used in the IE, else false.
2291  *
2292  * Return: QDF_STATUS.
2293  */
2294 QDF_STATUS wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev *pdev,
2295 					      bool *reg_unspecified_ap_usable);
2296 
2297 /**
2298  * wlan_reg_is_6g_psd_power() - Checks if given freq is PSD power
2299  *
2300  * @pdev: pdev ptr
2301  * @freq: channel frequency
2302  *
2303  * Return: true if channel is PSD power or false otherwise
2304  */
2305 bool wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev *pdev);
2306 
2307 /**
2308  * wlan_reg_get_6g_chan_ap_power() - Finds the AP TX power for the given channel
2309  *	frequency
2310  *
2311  * @pdev: pdev ptr
2312  * @chan_freq: channel frequency
2313  * @is_psd: is channel PSD or not
2314  * @tx_power: transmit power to fill for chan_freq
2315  * @eirp_psd_power: EIRP power, will only be filled if is_psd is true
2316  *
2317  * Return: QDF_STATUS
2318  */
2319 QDF_STATUS wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev *pdev,
2320 					 qdf_freq_t chan_freq, bool *is_psd,
2321 					 uint16_t *tx_power,
2322 					 uint16_t *eirp_psd_power);
2323 
2324 /**
2325  * wlan_reg_get_client_power_for_connecting_ap() - Find the channel information
2326  *	when device is operating as a client
2327  *
2328  * @pdev: pdev ptr
2329  * @ap_type: type of AP that device is connected to
2330  * @chan_freq: channel frequency
2331  * @is_psd: is channel PSD or not
2332  * @tx_power: transmit power to fill for chan_freq
2333  * @eirp_psd_power: EIRP power, will only be filled if is_psd is true
2334  *
2335  * This function is meant to be called to find the channel frequency power
2336  * information for a client when the device is operating as a client. It will
2337  * fill in the parameters tx_power and eirp_psd_power. eirp_psd_power will
2338  * only be filled if the channel is PSD.
2339  *
2340  * Return: QDF_STATUS
2341  */
2342 QDF_STATUS
2343 wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev *pdev,
2344 					    enum reg_6g_ap_type ap_type,
2345 					    qdf_freq_t chan_freq,
2346 					    bool is_psd, uint16_t *tx_power,
2347 					    uint16_t *eirp_psd_power);
2348 
2349 /**
2350  * wlan_reg_get_client_power_for_6ghz_ap() - Find the channel information when
2351  *	device is operating as a 6GHz AP
2352  *
2353  * @pdev: pdev ptr
2354  * @client_type: type of client that is connected to our AP
2355  * @chan_freq: channel frequency
2356  * @is_psd: is channel PSD or not
2357  * @tx_power: transmit power to fill for chan_freq
2358  * @eirp_psd_power: EIRP power, will only be filled if is_psd is true
2359  *
2360  * This function is meant to be called to find the channel frequency power
2361  * information for a client when the device is operating as an AP. It will fill
2362  * in the parameter is_psd, tx_power, and eirp_psd_power. eirp_psd_power will
2363  * only be filled if the channel is PSD.
2364  *
2365  * Return: QDF_STATUS
2366  */
2367 QDF_STATUS
2368 wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev *pdev,
2369 				      enum reg_6g_client_type client_type,
2370 				      qdf_freq_t chan_freq,
2371 				      bool *is_psd, uint16_t *tx_power,
2372 				      uint16_t *eirp_psd_power);
2373 
2374 /**
2375  * wlan_reg_decide_6g_ap_pwr_type() - Decide which power mode AP should operate
2376  * in
2377  *
2378  * @pdev: pdev ptr
2379  *
2380  * Return: AP power type
2381  */
2382 enum reg_6g_ap_type
2383 wlan_reg_decide_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev);
2384 
2385 /**
2386  * wlan_reg_set_ap_pwr_and_update_chan_list() - Set the AP power mode and
2387  * recompute the current channel list
2388  *
2389  * @pdev: pdev ptr
2390  * @ap_pwr_type: the AP power type to update to
2391  *
2392  * Return: QDF_STATUS
2393  */
2394 QDF_STATUS
2395 wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev *pdev,
2396 					 enum reg_6g_ap_type ap_pwr_type);
2397 
2398 /**
2399  * wlan_reg_get_best_6g_pwr_type() - Returns the best 6g power type supported
2400  * for a given frequency.
2401  * @pdev: pdev pointer
2402  * @freq: input frequency.
2403  *
2404  * Return: supported_6g_pwr_types enum.
2405  */
2406 enum supported_6g_pwr_types
2407 wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq);
2408 
2409 /**
2410  * wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types() - Converts the 6G AP
2411  * power type to 6g supported power type enum.
2412  * @ap_pwr_type: input 6G AP power type.
2413  *
2414  * Return: supported_6g_pwr_types enum.
2415  */
2416 enum supported_6g_pwr_types
2417 wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type
2418 						   ap_pwr_type);
2419 
2420 /**
2421  * wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type() - The supported 6G power
2422  * type is a combination of AP and client power types. This API return the 6G AP
2423  * power type portion of the supported 6G power type.
2424  * @in_6g_pwr_type: input 6G supported power type.
2425  *
2426  * Return: 6G AP power type.
2427  */
2428 enum reg_6g_ap_type
2429 wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types
2430 						  in_6g_pwr_type);
2431 #else /* !CONFIG_BAND_6GHZ */
2432 static inline QDF_STATUS
2433 wlan_reg_get_cur_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev,
2434 				enum reg_6g_ap_type *reg_cur_6g_ap_pwr_type)
2435 {
2436 	*reg_cur_6g_ap_pwr_type = REG_CURRENT_MAX_AP_TYPE;
2437 	return QDF_STATUS_E_NOSUPPORT;
2438 }
2439 
2440 static inline QDF_STATUS
2441 wlan_reg_get_cur_6g_client_type(struct wlan_objmgr_pdev *pdev,
2442 				enum reg_6g_client_type
2443 				*reg_cur_6g_client_mobility_type)
2444 {
2445 	*reg_cur_6g_client_mobility_type = REG_SUBORDINATE_CLIENT;
2446 	return QDF_STATUS_E_NOSUPPORT;
2447 }
2448 
2449 static inline QDF_STATUS
2450 wlan_reg_set_cur_6ghz_client_type(struct wlan_objmgr_pdev *pdev,
2451 				  enum reg_6g_client_type in_6ghz_client_type)
2452 {
2453 	return QDF_STATUS_E_NOSUPPORT;
2454 }
2455 
2456 static inline QDF_STATUS
2457 wlan_reg_set_6ghz_client_type_from_target(struct wlan_objmgr_pdev *pdev)
2458 {
2459 	return QDF_STATUS_E_NOSUPPORT;
2460 }
2461 
2462 static inline
2463 QDF_STATUS wlan_reg_get_rnr_tpe_usable(struct wlan_objmgr_pdev *pdev,
2464 				       bool *reg_rnr_tpe_usable)
2465 {
2466 	*reg_rnr_tpe_usable = false;
2467 	return QDF_STATUS_E_NOSUPPORT;
2468 }
2469 
2470 static inline
2471 QDF_STATUS wlan_reg_get_unspecified_ap_usable(struct wlan_objmgr_pdev *pdev,
2472 					      bool *reg_unspecified_ap_usable)
2473 {
2474 	*reg_unspecified_ap_usable = false;
2475 	return QDF_STATUS_E_NOSUPPORT;
2476 }
2477 
2478 static inline
2479 bool wlan_reg_is_6g_psd_power(struct wlan_objmgr_pdev *pdev)
2480 {
2481 	return false;
2482 }
2483 
2484 static inline
2485 QDF_STATUS wlan_reg_get_6g_chan_ap_power(struct wlan_objmgr_pdev *pdev,
2486 					 qdf_freq_t chan_freq, bool *is_psd,
2487 					 uint16_t *tx_power,
2488 					 uint16_t *eirp_psd_power)
2489 {
2490 	*is_psd = false;
2491 	*tx_power = 0;
2492 	*eirp_psd_power = 0;
2493 	return QDF_STATUS_E_NOSUPPORT;
2494 }
2495 
2496 static inline QDF_STATUS
2497 wlan_reg_get_client_power_for_connecting_ap(struct wlan_objmgr_pdev *pdev,
2498 					    enum reg_6g_ap_type ap_type,
2499 					    qdf_freq_t chan_freq,
2500 					    bool is_psd, uint16_t *tx_power,
2501 					    uint16_t *eirp_psd_power)
2502 {
2503 	*tx_power = 0;
2504 	*eirp_psd_power = 0;
2505 	return QDF_STATUS_E_NOSUPPORT;
2506 }
2507 
2508 static inline QDF_STATUS
2509 wlan_reg_get_client_power_for_6ghz_ap(struct wlan_objmgr_pdev *pdev,
2510 				      enum reg_6g_client_type client_type,
2511 				      qdf_freq_t chan_freq,
2512 				      bool *is_psd, uint16_t *tx_power,
2513 				      uint16_t *eirp_psd_power)
2514 {
2515 	*is_psd = false;
2516 	*tx_power = 0;
2517 	*eirp_psd_power = 0;
2518 	return QDF_STATUS_E_NOSUPPORT;
2519 }
2520 
2521 static inline enum reg_6g_ap_type
2522 wlan_reg_decide_6g_ap_pwr_type(struct wlan_objmgr_pdev *pdev)
2523 {
2524 	return REG_INDOOR_AP;
2525 }
2526 
2527 static inline QDF_STATUS
2528 wlan_reg_set_ap_pwr_and_update_chan_list(struct wlan_objmgr_pdev *pdev,
2529 					 enum reg_6g_ap_type ap_pwr_type)
2530 {
2531 	return QDF_STATUS_E_NOSUPPORT;
2532 }
2533 
2534 static inline enum supported_6g_pwr_types
2535 wlan_reg_get_best_6g_pwr_type(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq)
2536 {
2537 	return REG_INVALID_PWR_MODE;
2538 }
2539 
2540 static inline enum supported_6g_pwr_types
2541 wlan_reg_conv_6g_ap_type_to_supported_6g_pwr_types(enum reg_6g_ap_type
2542 						   ap_pwr_type)
2543 {
2544 	return REG_INVALID_PWR_MODE;
2545 }
2546 
2547 static inline enum reg_6g_ap_type
2548 wlan_reg_conv_supported_6g_pwr_type_to_ap_pwr_type(enum supported_6g_pwr_types
2549 						   in_6g_pwr_type)
2550 {
2551 	return REG_MAX_AP_TYPE;
2552 }
2553 #endif /* CONFIG_BAND_6GHZ */
2554 
2555 /**
2556  * wlan_reg_is_ext_tpc_supported() - Checks if FW supports new WMI cmd for TPC
2557  *
2558  * @psoc: psoc ptr
2559  *
2560  * Return: true if FW supports new command or false otherwise
2561  */
2562 bool wlan_reg_is_ext_tpc_supported(struct wlan_objmgr_psoc *psoc);
2563 
2564 /**
2565  * wlan_reg_is_chwidth_supported() - Check if given channel width is supported
2566  * on a given pdev
2567  * @pdev: pdev pointer
2568  * @ch_width: channel width.
2569  * @is_supported: whether the channel width is supported
2570  *
2571  * Return QDF_STATUS_SUCCESS of operation
2572  */
2573 QDF_STATUS wlan_reg_is_chwidth_supported(struct wlan_objmgr_pdev *pdev,
2574 					 enum phy_ch_width ch_width,
2575 					 bool *is_supported);
2576 
2577 #ifdef CONFIG_BAND_6GHZ
2578 /**
2579  * wlan_reg_get_thresh_priority_freq() - Get the prioritized frequency value
2580  * @pdev: pdev pointer
2581  */
2582 qdf_freq_t wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev *pdev);
2583 
2584 /**
2585  * wlan_reg_psd_2_eirp() - Calculate EIRP from PSD and bandwidth
2586  * channel list
2587  * @pdev: pdev pointer
2588  * @psd: Power Spectral Density in dBm/MHz
2589  * @ch_bw: Bandwidth of a channel in MHz (20/40/80/160/320 etc)
2590  * @eirp:  EIRP power  in dBm
2591  *
2592  * Return: QDF_STATUS
2593  */
2594 QDF_STATUS wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev *pdev,
2595 			       int16_t psd,
2596 			       uint16_t ch_bw,
2597 			       int16_t *eirp);
2598 
2599 /**
2600  * wlan_reg_eirp_2_psd() - Calculate PSD poewr from EIRP and bandwidth
2601  * @pdev: pdev pointer
2602  * @ch_bw: Bandwidth of a channel in MHz (20/40/80/160/320 etc)
2603  * @eirp:  EIRP power  in dBm
2604  * @psd: Power Spectral Density in dBm/MHz
2605  *
2606  * Return: QDF_STATUS
2607  */
2608 QDF_STATUS wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev *pdev,
2609 			       uint16_t ch_bw,
2610 			       int16_t eirp,
2611 			       int16_t *psd);
2612 
2613 /**
2614  * wlan_reg_get_best_pwr_mode() - Get the best power mode based on input freq
2615  * and bandwidth. The mode that provides the best EIRP is the best power mode.
2616  * @pdev: Pointer to pdev
2617  * @freq: Frequency in MHz
2618  * @cen320: 320 MHz band center frequency. For other BW, this param is
2619  * ignored while processing
2620  * @bw: Bandwidth in MHz
2621  * @in_punc_pattern: input puncture pattern
2622  *
2623  * Return: Best power mode
2624  */
2625 enum reg_6g_ap_type
2626 wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
2627 			   qdf_freq_t cen320, uint16_t bw,
2628 			   uint16_t in_punc_pattern);
2629 
2630 /**
2631  * wlan_reg_get_eirp_pwr() - Get eirp power based on the AP power mode
2632  * @pdev: Pointer to pdev
2633  * @freq: Frequency in MHz
2634  * @cen320: 320 MHz Band center frequency
2635  * @bw: Bandwidth in MHz
2636  * @ap_pwr_type: AP power type
2637  * @in_punc_pattern: Input puncture pattern
2638  * @is_client_list_lookup_needed: Boolean to indicate if client list lookup is
2639  * needed
2640  * @client_type: Client power type
2641  *
2642  * Return: EIRP power
2643  */
2644 uint8_t wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
2645 			      qdf_freq_t cen320, uint16_t bw,
2646 			      enum reg_6g_ap_type ap_pwr_type,
2647 			      uint16_t in_punc_pattern,
2648 			      bool is_client_list_lookup_needed,
2649 			      enum reg_6g_client_type client_type);
2650 #else
2651 static inline
2652 qdf_freq_t wlan_reg_get_thresh_priority_freq(struct wlan_objmgr_pdev *pdev)
2653 {
2654 	return 0;
2655 }
2656 
2657 static inline enum reg_6g_ap_type
2658 wlan_reg_get_best_pwr_mode(struct wlan_objmgr_pdev *pdev, qdf_freq_t freq,
2659 			   qdf_freq_t cen320,
2660 			   uint16_t bw,
2661 			   uint16_t in_punc_pattern)
2662 {
2663 	return REG_MAX_AP_TYPE;
2664 }
2665 
2666 static inline QDF_STATUS wlan_reg_psd_2_eirp(struct wlan_objmgr_pdev *pdev,
2667 					     int16_t psd,
2668 					     uint16_t ch_bw,
2669 					     int16_t *eirp)
2670 {
2671 	return QDF_STATUS_E_FAILURE;
2672 }
2673 
2674 static inline QDF_STATUS wlan_reg_eirp_2_psd(struct wlan_objmgr_pdev *pdev,
2675 					     uint16_t ch_bw,
2676 					     int16_t eirp,
2677 					     int16_t *psd)
2678 {
2679 	return QDF_STATUS_E_FAILURE;
2680 }
2681 
2682 static inline uint8_t
2683 wlan_reg_get_eirp_pwr(struct wlan_objmgr_pdev *pdev,
2684 		      qdf_freq_t freq,
2685 		      qdf_freq_t cen320, uint16_t bw,
2686 		      enum reg_6g_ap_type ap_pwr_type,
2687 		      uint16_t in_punc_pattern,
2688 		      bool is_client_list_lookup_needed,
2689 		      enum reg_6g_client_type client_type)
2690 {
2691 	return 0;
2692 }
2693 #endif /* CONFIG_BAND_6GHZ */
2694 /**
2695  * wlan_reg_find_chwidth_from_bw () - Gets channel width for given
2696  * bandwidth
2697  * @bw: Bandwidth
2698  *
2699  * Return: phy_ch_width
2700  */
2701 enum phy_ch_width wlan_reg_find_chwidth_from_bw(uint16_t bw);
2702 
2703 /**
2704  * wlan_reg_get_chan_state_for_320() - Get the channel state of a 320 MHz
2705  * bonded channel.
2706  * @pdev: Pointer to wlan_objmgr_pdev
2707  * @freq: Primary frequency
2708  * @center_320: Band center of 320 MHz
2709  * @ch_width: Channel width
2710  * @bonded_chan_ptr_ptr: Pointer to bonded channel pointer
2711  * @treat_nol_chan_as_disabled: Bool to treat nol chan as enabled/disabled
2712  * @in_pwr_type: Input 6g power type
2713  * @input_puncture_bitmap: Input puncture bitmap
2714  *
2715  * Return: Channel state
2716  */
2717 #ifdef WLAN_FEATURE_11BE
2718 enum channel_state
2719 wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev *pdev,
2720 				uint16_t freq,
2721 				qdf_freq_t center_320,
2722 				enum phy_ch_width ch_width,
2723 				const struct bonded_channel_freq
2724 				**bonded_chan_ptr_ptr,
2725 				enum supported_6g_pwr_types in_6g_pwr_type,
2726 				bool treat_nol_chan_as_disabled,
2727 				uint16_t input_puncture_bitmap);
2728 #else
2729 static inline enum channel_state
2730 wlan_reg_get_chan_state_for_320(struct wlan_objmgr_pdev *pdev,
2731 				uint16_t freq,
2732 				qdf_freq_t center_320,
2733 				enum phy_ch_width ch_width,
2734 				const struct bonded_channel_freq
2735 				**bonded_chan_ptr_ptr,
2736 				enum supported_6g_pwr_types in_6g_pwr_type,
2737 				bool treat_nol_chan_as_disabled,
2738 				uint16_t input_puncture_bitmap)
2739 {
2740 	return CHANNEL_STATE_INVALID;
2741 }
2742 #endif
2743 
2744 #ifdef CONFIG_BAND_6GHZ
2745 /**
2746  * wlan_is_sup_chan_entry_afc_done() - Checks if the super chan entry of given
2747  * channel idx and power mode has REGULATORY_CHAN_AFC_NOT_DONE flag cleared.
2748  *
2749  * @pdev: pdev pointer
2750  * @freq: input channel idx
2751  * @in_6g_pwr_mode: input power mode
2752  *
2753  * Return: True if REGULATORY_CHAN_AFC_NOT_DONE flag is clear for the super
2754  * chan entry.
2755  */
2756 bool
2757 wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
2758 				enum channel_enum chan_idx,
2759 				enum supported_6g_pwr_types in_6g_pwr_mode);
2760 
2761 /**
2762  * wlan_reg_display_super_chan_list() - Display super channel list for all modes
2763  * @pdev: Pointer to pdev
2764  *
2765  * Return: QDF_STATUS
2766  */
2767 QDF_STATUS
2768 wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev);
2769 
2770 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ)
2771 /**
2772  * wlan_reg_get_afc_freq_range_and_psd_limits() - Get freq range and psd
2773  * limits from afc server response.
2774  *
2775  * @pdev: Pointer to pdev
2776  * @num_freq_obj: Number of frequency objects
2777  * @afc_obj: Pointer to struct afc_freq_obj
2778  *
2779  * Return: QDF_STATUS
2780  */
2781 
2782 QDF_STATUS
2783 wlan_reg_get_afc_freq_range_and_psd_limits(struct wlan_objmgr_pdev *pdev,
2784 					   uint8_t num_freq_obj,
2785 					   struct afc_freq_obj *afc_obj);
2786 
2787 /**
2788  * wlan_reg_get_num_afc_freq_obj() - Get number of afc frequency objects
2789  *
2790  * @pdev: Pointer to pdev
2791  * @num_freq_obj: Number of frequency objects
2792  *
2793  * Return: QDF_STATUS
2794  */
2795 QDF_STATUS
2796 wlan_reg_get_num_afc_freq_obj(struct wlan_objmgr_pdev *pdev,
2797 			      uint8_t *num_freq_obj);
2798 
2799 /**
2800  * wlan_reg_set_afc_power_event_received() - Set power event received flag with
2801  * given val.
2802  * @pdev: pdev pointer.
2803  * @val: value to be set
2804  *
2805  * Return: QDF_STATUS
2806  */
2807 QDF_STATUS wlan_reg_set_afc_power_event_received(struct wlan_objmgr_pdev *pdev,
2808 						 bool val);
2809 #endif
2810 
2811 #else
2812 static inline bool
2813 wlan_is_sup_chan_entry_afc_done(struct wlan_objmgr_pdev *pdev,
2814 				enum channel_enum chan_idx,
2815 				enum supported_6g_pwr_types in_6g_pwr_mode)
2816 {
2817 	return false;
2818 }
2819 
2820 static inline QDF_STATUS
2821 wlan_reg_display_super_chan_list(struct wlan_objmgr_pdev *pdev)
2822 {
2823 	return QDF_STATUS_E_NOSUPPORT;
2824 }
2825 
2826 #endif
2827 
2828 /**
2829  * wlan_reg_get_num_rules_of_ap_pwr_type() - Get the number of reg rules
2830  * present for a given ap power type
2831  * @pdev: Pointer to pdev
2832  * @ap_pwr_type: AP power type
2833  *
2834  * Return: Return the number of reg rules for a given ap power type
2835  */
2836 uint8_t
2837 wlan_reg_get_num_rules_of_ap_pwr_type(struct wlan_objmgr_pdev *pdev,
2838 				      enum reg_6g_ap_type ap_pwr_type);
2839 #endif
2840