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