xref: /wlan-driver/qca-wifi-host-cmn/umac/regulatory/dispatcher/inc/reg_services_public_struct.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: reg_services_public_struct.h
22*5113495bSYour Name  * This file contains regulatory data structures
23*5113495bSYour Name  */
24*5113495bSYour Name 
25*5113495bSYour Name #ifndef __REG_SERVICES_PUBLIC_STRUCT_H_
26*5113495bSYour Name #define __REG_SERVICES_PUBLIC_STRUCT_H_
27*5113495bSYour Name 
28*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
29*5113495bSYour Name #include <wlan_reg_afc.h>
30*5113495bSYour Name #endif
31*5113495bSYour Name 
32*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
33*5113495bSYour Name #define REG_MAX_CHANNELS_PER_OPERATING_CLASS        70
34*5113495bSYour Name /*
35*5113495bSYour Name  * These tx-power macros are present till the 6G regdomains are defined to
36*5113495bSYour Name  * support tx-power values for various client types.
37*5113495bSYour Name  */
38*5113495bSYour Name #define REG_PSD_MAX_TXPOWER_FOR_DEFAULT_CLIENT      (-1) /* dBm */
39*5113495bSYour Name #define REG_PSD_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT  5    /* dBm */
40*5113495bSYour Name #define REG_EIRP_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT 24   /* dBm */
41*5113495bSYour Name #else
42*5113495bSYour Name #define REG_MAX_CHANNELS_PER_OPERATING_CLASS        28
43*5113495bSYour Name #endif
44*5113495bSYour Name 
45*5113495bSYour Name #define REG_MAX_SUPP_OPER_CLASSES 32
46*5113495bSYour Name #define REG_MAX_CHAN_CHANGE_CBKS 30
47*5113495bSYour Name #define REG_INVALID_TXPOWER 255
48*5113495bSYour Name #define MAX_STA_VDEV_CNT 4
49*5113495bSYour Name #define INVALID_VDEV_ID 0xFF
50*5113495bSYour Name #define INVALID_CHANNEL_NUM 0x0
51*5113495bSYour Name #define CH_AVOID_MAX_RANGE   (NUM_5GHZ_CHANNELS + NUM_24GHZ_CHANNELS)
52*5113495bSYour Name #define REG_ALPHA2_LEN 2
53*5113495bSYour Name #define MAX_REG_RULES 10
54*5113495bSYour Name #define MAX_6G_REG_RULES 5
55*5113495bSYour Name 
56*5113495bSYour Name #define REGULATORY_CHAN_DISABLED     BIT(0)
57*5113495bSYour Name #define REGULATORY_CHAN_NO_IR        BIT(1)
58*5113495bSYour Name #define REGULATORY_CHAN_RADAR        BIT(3)
59*5113495bSYour Name #define REGULATORY_CHAN_NO_OFDM      BIT(6)
60*5113495bSYour Name #define REGULATORY_CHAN_INDOOR_ONLY  BIT(9)
61*5113495bSYour Name #define REGULATORY_CHAN_AFC          BIT(13)
62*5113495bSYour Name #define REGULATORY_CHAN_AFC_NOT_DONE BIT(16)
63*5113495bSYour Name 
64*5113495bSYour Name #define REGULATORY_CHAN_NO_HT40      BIT(4)
65*5113495bSYour Name #define REGULATORY_CHAN_NO_80MHZ     BIT(7)
66*5113495bSYour Name #define REGULATORY_CHAN_NO_160MHZ    BIT(8)
67*5113495bSYour Name #define REGULATORY_CHAN_NO_20MHZ     BIT(11)
68*5113495bSYour Name #define REGULATORY_CHAN_NO_10MHZ     BIT(12)
69*5113495bSYour Name #define REGULATORY_CHAN_INVALID      BIT(14)
70*5113495bSYour Name 
71*5113495bSYour Name #define REGULATORY_PHYMODE_NO11A     BIT(0)
72*5113495bSYour Name #define REGULATORY_PHYMODE_NO11B     BIT(1)
73*5113495bSYour Name #define REGULATORY_PHYMODE_NO11G     BIT(2)
74*5113495bSYour Name #define REGULATORY_CHAN_NO11N        BIT(3)
75*5113495bSYour Name #define REGULATORY_PHYMODE_NO11AC    BIT(4)
76*5113495bSYour Name #define REGULATORY_PHYMODE_NO11AX    BIT(5)
77*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
78*5113495bSYour Name #define REGULATORY_PHYMODE_NO11BE    BIT(6)
79*5113495bSYour Name #endif
80*5113495bSYour Name 
81*5113495bSYour Name #define BW_5_MHZ      5
82*5113495bSYour Name #define BW_10_MHZ     10
83*5113495bSYour Name #define BW_20_MHZ     20
84*5113495bSYour Name #define BW_25_MHZ     25
85*5113495bSYour Name #define BW_40_MHZ     40
86*5113495bSYour Name #define BW_80_MHZ     80
87*5113495bSYour Name #define BW_160_MHZ    160
88*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
89*5113495bSYour Name #define BW_320_MHZ    320
90*5113495bSYour Name #endif
91*5113495bSYour Name #define BW_40_MHZ     40
92*5113495bSYour Name 
93*5113495bSYour Name #define MAX_NUM_PWR_LEVEL 16
94*5113495bSYour Name 
95*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
96*5113495bSYour Name #define MAX_NUM_FCC_RULES 2
97*5113495bSYour Name /*
98*5113495bSYour Name  * As per spec valid range is range –64 dBm to 63 dBm.
99*5113495bSYour Name  * Powers in range of 64 - 191 will be invalid.
100*5113495bSYour Name  */
101*5113495bSYour Name #define INVALID_TPE_POWER 100
102*5113495bSYour Name /* 802.11ax-2021 Table 9-276 Meaning of Local Maximum Transmit Power Count
103*5113495bSYour Name  * subfield if the Maximum Transmit Power Interpretation subfield is 0 or 2
104*5113495bSYour Name  */
105*5113495bSYour Name #define MAX_TX_PWR_COUNT_FOR_160MHZ 3
106*5113495bSYour Name /* 802.11ax-2021 Table 9-277 Meaning of Maximum Transmit Power Count subfield
107*5113495bSYour Name  * if Maximum Transmit Power Interpretation subfield is 1 or 3
108*5113495bSYour Name  */
109*5113495bSYour Name #define MAX_TX_PWR_COUNT_FOR_160MHZ_PSD 4
110*5113495bSYour Name #define MAX_NUM_TX_POWER_FOR_320MHZ 5
111*5113495bSYour Name #define PUNCTURED_CHAN_POWER 128
112*5113495bSYour Name #endif
113*5113495bSYour Name 
114*5113495bSYour Name /* no subchannels punctured */
115*5113495bSYour Name #define NO_SCHANS_PUNC 0x0000
116*5113495bSYour Name 
117*5113495bSYour Name #define REG_MIN_POWER -128
118*5113495bSYour Name 
119*5113495bSYour Name /**
120*5113495bSYour Name  * enum dfs_reg - DFS region
121*5113495bSYour Name  * @DFS_UNINIT_REGION: un-initialized region
122*5113495bSYour Name  * @DFS_FCC_REGION: FCC region
123*5113495bSYour Name  * @DFS_ETSI_REGION: ETSI region
124*5113495bSYour Name  * @DFS_MKK_REGION: MKK region
125*5113495bSYour Name  * @DFS_CN_REGION: China region
126*5113495bSYour Name  * @DFS_KR_REGION: Korea region
127*5113495bSYour Name  * @DFS_MKKN_REGION: MKKN region
128*5113495bSYour Name  * that supports updated W53 RADAR pattern
129*5113495bSYour Name  * detection.
130*5113495bSYour Name  * @DFS_UNDEF_REGION: Undefined region
131*5113495bSYour Name  */
132*5113495bSYour Name 
133*5113495bSYour Name enum dfs_reg {
134*5113495bSYour Name 	DFS_UNINIT_REGION = 0,
135*5113495bSYour Name 	DFS_FCC_REGION = 1,
136*5113495bSYour Name 	DFS_ETSI_REGION = 2,
137*5113495bSYour Name 	DFS_MKK_REGION = 3,
138*5113495bSYour Name 	DFS_CN_REGION = 4,
139*5113495bSYour Name 	DFS_KR_REGION = 5,
140*5113495bSYour Name 	DFS_MKKN_REGION = 6,
141*5113495bSYour Name 	DFS_UNDEF_REGION = 0xFFFF,
142*5113495bSYour Name };
143*5113495bSYour Name 
144*5113495bSYour Name /**
145*5113495bSYour Name  * enum op_class_table_num
146*5113495bSYour Name  * @OP_CLASS_US: Class corresponds to US
147*5113495bSYour Name  * @OP_CLASS_EU: Class corresponds to EU
148*5113495bSYour Name  * @OP_CLASS_JAPAN: Class corresponds to JAPAN
149*5113495bSYour Name  * @OP_CLASS_GLOBAL: Class corresponds to GLOBAL
150*5113495bSYour Name  * @OP_CLASS_CHINA: Class corresponds to CHINA
151*5113495bSYour Name  */
152*5113495bSYour Name enum op_class_table_num {
153*5113495bSYour Name 	OP_CLASS_US = 1,
154*5113495bSYour Name 	OP_CLASS_EU,
155*5113495bSYour Name 	OP_CLASS_JAPAN,
156*5113495bSYour Name 	OP_CLASS_GLOBAL,
157*5113495bSYour Name 	OP_CLASS_CHINA
158*5113495bSYour Name };
159*5113495bSYour Name 
160*5113495bSYour Name /*
161*5113495bSYour Name  * NB: not using kernel-doc comment marker since kernel-doc doesn't
162*5113495bSYour Name  *     properly handle the conditional compilation
163*5113495bSYour Name  * enum channel_enum - channel enumeration
164*5113495bSYour Name  * @CHAN_ENUM_2412: channel with freq 2412
165*5113495bSYour Name  * @CHAN_ENUM_2417: channel with freq 2417
166*5113495bSYour Name  * @CHAN_ENUM_2422: channel with freq 2422
167*5113495bSYour Name  * @CHAN_ENUM_2427: channel with freq 2427
168*5113495bSYour Name  * @CHAN_ENUM_2432: channel with freq 2432
169*5113495bSYour Name  * @CHAN_ENUM_2437: channel with freq 2437
170*5113495bSYour Name  * @CHAN_ENUM_2442: channel with freq 2442
171*5113495bSYour Name  * @CHAN_ENUM_2447: channel with freq 2447
172*5113495bSYour Name  * @CHAN_ENUM_2452: channel with freq 2452
173*5113495bSYour Name  * @CHAN_ENUM_2457: channel with freq 2457
174*5113495bSYour Name  * @CHAN_ENUM_2462: channel with freq 2462
175*5113495bSYour Name  * @CHAN_ENUM_2467: channel with freq 2467
176*5113495bSYour Name  * @CHAN_ENUM_2472: channel with freq 2472
177*5113495bSYour Name  * @CHAN_ENUM_2484: channel with freq 2484
178*5113495bSYour Name  * @CHAN_ENUM_4912: channel with freq 4912
179*5113495bSYour Name  * @CHAN_ENUM_4915: channel with freq 4915
180*5113495bSYour Name  * @CHAN_ENUM_4917: channel with freq 4917
181*5113495bSYour Name  * @CHAN_ENUM_4920: channel with freq 4920
182*5113495bSYour Name  * @CHAN_ENUM_4922: channel with freq 4922
183*5113495bSYour Name  * @CHAN_ENUM_4925: channel with freq 4925
184*5113495bSYour Name  * @CHAN_ENUM_4927: channel with freq 4927
185*5113495bSYour Name  * @CHAN_ENUM_4932: channel with freq 4932
186*5113495bSYour Name  * @CHAN_ENUM_4935: channel with freq 4935
187*5113495bSYour Name  * @CHAN_ENUM_4937: channel with freq 4937
188*5113495bSYour Name  * @CHAN_ENUM_4940: channel with freq 4940
189*5113495bSYour Name  * @CHAN_ENUM_4942: channel with freq 4942
190*5113495bSYour Name  * @CHAN_ENUM_4945: channel with freq 4945
191*5113495bSYour Name  * @CHAN_ENUM_4947: channel with freq 4947
192*5113495bSYour Name  * @CHAN_ENUM_4950: channel with freq 4950
193*5113495bSYour Name  * @CHAN_ENUM_4952: channel with freq 4952
194*5113495bSYour Name  * @CHAN_ENUM_4955: channel with freq 4955
195*5113495bSYour Name  * @CHAN_ENUM_4957: channel with freq 4957
196*5113495bSYour Name  * @CHAN_ENUM_4960: channel with freq 4960
197*5113495bSYour Name  * @CHAN_ENUM_4962: channel with freq 4962
198*5113495bSYour Name  * @CHAN_ENUM_4965: channel with freq 4965
199*5113495bSYour Name  * @CHAN_ENUM_4967: channel with freq 4967
200*5113495bSYour Name  * @CHAN_ENUM_4970: channel with freq 4970
201*5113495bSYour Name  * @CHAN_ENUM_4972: channel with freq 4972
202*5113495bSYour Name  * @CHAN_ENUM_4975: channel with freq 4975
203*5113495bSYour Name  * @CHAN_ENUM_4977: channel with freq 4977
204*5113495bSYour Name  * @CHAN_ENUM_4980: channel with freq 4980
205*5113495bSYour Name  * @CHAN_ENUM_4982: channel with freq 4982
206*5113495bSYour Name  * @CHAN_ENUM_4985: channel with freq 4985
207*5113495bSYour Name  * @CHAN_ENUM_4987: channel with freq 4987
208*5113495bSYour Name  * @CHAN_ENUM_5032: channel with freq 5032
209*5113495bSYour Name  * @CHAN_ENUM_5035: channel with freq 5035
210*5113495bSYour Name  * @CHAN_ENUM_5037: channel with freq 5037
211*5113495bSYour Name  * @CHAN_ENUM_5040: channel with freq 5040
212*5113495bSYour Name  * @CHAN_ENUM_5042: channel with freq 5042
213*5113495bSYour Name  * @CHAN_ENUM_5045: channel with freq 5045
214*5113495bSYour Name  * @CHAN_ENUM_5047: channel with freq 5047
215*5113495bSYour Name  * @CHAN_ENUM_5052: channel with freq 5052
216*5113495bSYour Name  * @CHAN_ENUM_5055: channel with freq 5055
217*5113495bSYour Name  * @CHAN_ENUM_5057: channel with freq 5057
218*5113495bSYour Name  * @CHAN_ENUM_5060: channel with freq 5060
219*5113495bSYour Name  * @CHAN_ENUM_5080: channel with freq 5080
220*5113495bSYour Name  * @CHAN_ENUM_5180: channel with freq 5180
221*5113495bSYour Name  * @CHAN_ENUM_5200: channel with freq 5200
222*5113495bSYour Name  * @CHAN_ENUM_5220: channel with freq 5220
223*5113495bSYour Name  * @CHAN_ENUM_5240: channel with freq 5240
224*5113495bSYour Name  * @CHAN_ENUM_5260: channel with freq 5260
225*5113495bSYour Name  * @CHAN_ENUM_5280: channel with freq 5280
226*5113495bSYour Name  * @CHAN_ENUM_5300: channel with freq 5300
227*5113495bSYour Name  * @CHAN_ENUM_5320: channel with freq 5320
228*5113495bSYour Name  * @CHAN_ENUM_5500: channel with freq 5500
229*5113495bSYour Name  * @CHAN_ENUM_5520: channel with freq 5520
230*5113495bSYour Name  * @CHAN_ENUM_5540: channel with freq 5540
231*5113495bSYour Name  * @CHAN_ENUM_5560: channel with freq 5560
232*5113495bSYour Name  * @CHAN_ENUM_5580: channel with freq 5580
233*5113495bSYour Name  * @CHAN_ENUM_5600: channel with freq 5600
234*5113495bSYour Name  * @CHAN_ENUM_5620: channel with freq 5620
235*5113495bSYour Name  * @CHAN_ENUM_5640: channel with freq 5640
236*5113495bSYour Name  * @CHAN_ENUM_5660: channel with freq 5660
237*5113495bSYour Name  * @CHAN_ENUM_5680: channel with freq 5680
238*5113495bSYour Name  * @CHAN_ENUM_5700: channel with freq 5700
239*5113495bSYour Name  * @CHAN_ENUM_5720: channel with freq 5720
240*5113495bSYour Name  * @CHAN_ENUM_5745: channel with freq 5745
241*5113495bSYour Name  * @CHAN_ENUM_5765: channel with freq 5765
242*5113495bSYour Name  * @CHAN_ENUM_5785: channel with freq 5785
243*5113495bSYour Name  * @CHAN_ENUM_5805: channel with freq 5805
244*5113495bSYour Name  * @CHAN_ENUM_5825: channel with freq 5825
245*5113495bSYour Name  * @CHAN_ENUM_5845: channel with freq 5845
246*5113495bSYour Name  * @CHAN_ENUM_5850: channel with freq 5850
247*5113495bSYour Name  * @CHAN_ENUM_5855: channel with freq 5855
248*5113495bSYour Name  * @CHAN_ENUM_5860: channel with freq 5860
249*5113495bSYour Name  * @CHAN_ENUM_5865: channel with freq 5865
250*5113495bSYour Name  * @CHAN_ENUM_5870: channel with freq 5870
251*5113495bSYour Name  * @CHAN_ENUM_5875: channel with freq 5875
252*5113495bSYour Name  * @CHAN_ENUM_5880: channel with freq 5880
253*5113495bSYour Name  * @CHAN_ENUM_5885: channel with freq 5885
254*5113495bSYour Name  * @CHAN_ENUM_5890: channel with freq 5890
255*5113495bSYour Name  * @CHAN_ENUM_5895: channel with freq 5895
256*5113495bSYour Name  * @CHAN_ENUM_5900: channel with freq 5900
257*5113495bSYour Name  * @CHAN_ENUM_5905: channel with freq 5905
258*5113495bSYour Name  * @CHAN_ENUM_5910: channel with freq 5910
259*5113495bSYour Name  * @CHAN_ENUM_5915: channel with freq 5915
260*5113495bSYour Name  * @CHAN_ENUM_5920: channel with freq 5920
261*5113495bSYour Name  * @CHAN_ENUM_5935: channel with freq 5935
262*5113495bSYour Name  * @CHAN_ENUM_5955: channel with freq 5955
263*5113495bSYour Name  * @CHAN_ENUM_5975: channel with freq 5975
264*5113495bSYour Name  * @CHAN_ENUM_5995: channel with freq 5995
265*5113495bSYour Name  * @CHAN_ENUM_6015: channel with freq 6015
266*5113495bSYour Name  * @CHAN_ENUM_6035: channel with freq 6035
267*5113495bSYour Name  * @CHAN_ENUM_6055: channel with freq 6055
268*5113495bSYour Name  * @CHAN_ENUM_6075: channel with freq 6075
269*5113495bSYour Name  * @CHAN_ENUM_6095: channel with freq 6095
270*5113495bSYour Name  * @CHAN_ENUM_6115: channel with freq 6115
271*5113495bSYour Name  * @CHAN_ENUM_6135: channel with freq 6135
272*5113495bSYour Name  * @CHAN_ENUM_6155: channel with freq 6155
273*5113495bSYour Name  * @CHAN_ENUM_6175: channel with freq 6175
274*5113495bSYour Name  * @CHAN_ENUM_6195: channel with freq 6195
275*5113495bSYour Name  * @CHAN_ENUM_6215: channel with freq 6215
276*5113495bSYour Name  * @CHAN_ENUM_6235: channel with freq 6235
277*5113495bSYour Name  * @CHAN_ENUM_6255: channel with freq 6255
278*5113495bSYour Name  * @CHAN_ENUM_6275: channel with freq 6275
279*5113495bSYour Name  * @CHAN_ENUM_6295: channel with freq 6295
280*5113495bSYour Name  * @CHAN_ENUM_6315: channel with freq 6315
281*5113495bSYour Name  * @CHAN_ENUM_6335: channel with freq 6335
282*5113495bSYour Name  * @CHAN_ENUM_6355: channel with freq 6355
283*5113495bSYour Name  * @CHAN_ENUM_6375: channel with freq 6375
284*5113495bSYour Name  * @CHAN_ENUM_6395: channel with freq 6395
285*5113495bSYour Name  * @CHAN_ENUM_6415: channel with freq 6415
286*5113495bSYour Name  * @CHAN_ENUM_6435: channel with freq 6435
287*5113495bSYour Name  * @CHAN_ENUM_6455: channel with freq 6455
288*5113495bSYour Name  * @CHAN_ENUM_6475: channel with freq 6475
289*5113495bSYour Name  * @CHAN_ENUM_6495: channel with freq 6495
290*5113495bSYour Name  * @CHAN_ENUM_6515: channel with freq 6515
291*5113495bSYour Name  * @CHAN_ENUM_6535: channel with freq 6535
292*5113495bSYour Name  * @CHAN_ENUM_6555: channel with freq 6555
293*5113495bSYour Name  * @CHAN_ENUM_6575: channel with freq 6575
294*5113495bSYour Name  * @CHAN_ENUM_6595: channel with freq 6595
295*5113495bSYour Name  * @CHAN_ENUM_6615: channel with freq 6615
296*5113495bSYour Name  * @CHAN_ENUM_6635: channel with freq 6635
297*5113495bSYour Name  * @CHAN_ENUM_6655: channel with freq 6655
298*5113495bSYour Name  * @CHAN_ENUM_6675: channel with freq 6675
299*5113495bSYour Name  * @CHAN_ENUM_6695: channel with freq 6695
300*5113495bSYour Name  * @CHAN_ENUM_6715: channel with freq 6715
301*5113495bSYour Name  * @CHAN_ENUM_6735: channel with freq 6735
302*5113495bSYour Name  * @CHAN_ENUM_6755: channel with freq 6755
303*5113495bSYour Name  * @CHAN_ENUM_6775: channel with freq 6775
304*5113495bSYour Name  * @CHAN_ENUM_6795: channel with freq 6795
305*5113495bSYour Name  * @CHAN_ENUM_6815: channel with freq 6815
306*5113495bSYour Name  * @CHAN_ENUM_6835: channel with freq 6835
307*5113495bSYour Name  * @CHAN_ENUM_6855: channel with freq 6855
308*5113495bSYour Name  * @CHAN_ENUM_6875: channel with freq 6875
309*5113495bSYour Name  * @CHAN_ENUM_6895: channel with freq 6895
310*5113495bSYour Name  * @CHAN_ENUM_6915: channel with freq 6915
311*5113495bSYour Name  * @CHAN_ENUM_6935: channel with freq 6935
312*5113495bSYour Name  * @CHAN_ENUM_6955: channel with freq 6955
313*5113495bSYour Name  * @CHAN_ENUM_6975: channel with freq 6975
314*5113495bSYour Name  * @CHAN_ENUM_6995: channel with freq 6995
315*5113495bSYour Name  * @CHAN_ENUM_7015: channel with freq 7015
316*5113495bSYour Name  * @CHAN_ENUM_7035: channel with freq 7035
317*5113495bSYour Name  * @CHAN_ENUM_7055: channel with freq 7055
318*5113495bSYour Name  * @CHAN_ENUM_7075: channel with freq 7075
319*5113495bSYour Name  * @CHAN_ENUM_7095: channel with freq 7095
320*5113495bSYour Name  * @CHAN_ENUM_7115: channel with freq 7115
321*5113495bSYour Name  */
322*5113495bSYour Name enum channel_enum {
323*5113495bSYour Name 	CHAN_ENUM_2412,
324*5113495bSYour Name 	CHAN_ENUM_2417,
325*5113495bSYour Name 	CHAN_ENUM_2422,
326*5113495bSYour Name 	CHAN_ENUM_2427,
327*5113495bSYour Name 	CHAN_ENUM_2432,
328*5113495bSYour Name 	CHAN_ENUM_2437,
329*5113495bSYour Name 	CHAN_ENUM_2442,
330*5113495bSYour Name 	CHAN_ENUM_2447,
331*5113495bSYour Name 	CHAN_ENUM_2452,
332*5113495bSYour Name 	CHAN_ENUM_2457,
333*5113495bSYour Name 	CHAN_ENUM_2462,
334*5113495bSYour Name 	CHAN_ENUM_2467,
335*5113495bSYour Name 	CHAN_ENUM_2472,
336*5113495bSYour Name 	CHAN_ENUM_2484,
337*5113495bSYour Name #ifdef CONFIG_49GHZ_CHAN
338*5113495bSYour Name 	CHAN_ENUM_4912,
339*5113495bSYour Name 	CHAN_ENUM_4915,
340*5113495bSYour Name 	CHAN_ENUM_4917,
341*5113495bSYour Name 	CHAN_ENUM_4920,
342*5113495bSYour Name 	CHAN_ENUM_4922,
343*5113495bSYour Name 	CHAN_ENUM_4925,
344*5113495bSYour Name 	CHAN_ENUM_4927,
345*5113495bSYour Name 	CHAN_ENUM_4932,
346*5113495bSYour Name 	CHAN_ENUM_4935,
347*5113495bSYour Name 	CHAN_ENUM_4937,
348*5113495bSYour Name 	CHAN_ENUM_4940,
349*5113495bSYour Name 	CHAN_ENUM_4942,
350*5113495bSYour Name 	CHAN_ENUM_4945,
351*5113495bSYour Name 	CHAN_ENUM_4947,
352*5113495bSYour Name 	CHAN_ENUM_4950,
353*5113495bSYour Name 	CHAN_ENUM_4952,
354*5113495bSYour Name 	CHAN_ENUM_4955,
355*5113495bSYour Name 	CHAN_ENUM_4957,
356*5113495bSYour Name 	CHAN_ENUM_4960,
357*5113495bSYour Name 	CHAN_ENUM_4962,
358*5113495bSYour Name 	CHAN_ENUM_4965,
359*5113495bSYour Name 	CHAN_ENUM_4967,
360*5113495bSYour Name 	CHAN_ENUM_4970,
361*5113495bSYour Name 	CHAN_ENUM_4972,
362*5113495bSYour Name 	CHAN_ENUM_4975,
363*5113495bSYour Name 	CHAN_ENUM_4977,
364*5113495bSYour Name 	CHAN_ENUM_4980,
365*5113495bSYour Name 	CHAN_ENUM_4982,
366*5113495bSYour Name 	CHAN_ENUM_4985,
367*5113495bSYour Name 	CHAN_ENUM_4987,
368*5113495bSYour Name 	CHAN_ENUM_5032,
369*5113495bSYour Name 	CHAN_ENUM_5035,
370*5113495bSYour Name 	CHAN_ENUM_5037,
371*5113495bSYour Name 	CHAN_ENUM_5040,
372*5113495bSYour Name 	CHAN_ENUM_5042,
373*5113495bSYour Name 	CHAN_ENUM_5045,
374*5113495bSYour Name 	CHAN_ENUM_5047,
375*5113495bSYour Name 	CHAN_ENUM_5052,
376*5113495bSYour Name 	CHAN_ENUM_5055,
377*5113495bSYour Name 	CHAN_ENUM_5057,
378*5113495bSYour Name 	CHAN_ENUM_5060,
379*5113495bSYour Name 	CHAN_ENUM_5080,
380*5113495bSYour Name #endif /* CONFIG_49GHZ_CHAN */
381*5113495bSYour Name 	CHAN_ENUM_5180,
382*5113495bSYour Name 	CHAN_ENUM_5200,
383*5113495bSYour Name 	CHAN_ENUM_5220,
384*5113495bSYour Name 	CHAN_ENUM_5240,
385*5113495bSYour Name 	CHAN_ENUM_5260,
386*5113495bSYour Name 	CHAN_ENUM_5280,
387*5113495bSYour Name 	CHAN_ENUM_5300,
388*5113495bSYour Name 	CHAN_ENUM_5320,
389*5113495bSYour Name 	CHAN_ENUM_5500,
390*5113495bSYour Name 	CHAN_ENUM_5520,
391*5113495bSYour Name 	CHAN_ENUM_5540,
392*5113495bSYour Name 	CHAN_ENUM_5560,
393*5113495bSYour Name 	CHAN_ENUM_5580,
394*5113495bSYour Name 	CHAN_ENUM_5600,
395*5113495bSYour Name 	CHAN_ENUM_5620,
396*5113495bSYour Name 	CHAN_ENUM_5640,
397*5113495bSYour Name 	CHAN_ENUM_5660,
398*5113495bSYour Name 	CHAN_ENUM_5680,
399*5113495bSYour Name 	CHAN_ENUM_5700,
400*5113495bSYour Name 	CHAN_ENUM_5720,
401*5113495bSYour Name 	CHAN_ENUM_5745,
402*5113495bSYour Name 	CHAN_ENUM_5765,
403*5113495bSYour Name 	CHAN_ENUM_5785,
404*5113495bSYour Name 	CHAN_ENUM_5805,
405*5113495bSYour Name 	CHAN_ENUM_5825,
406*5113495bSYour Name 	CHAN_ENUM_5845,
407*5113495bSYour Name #ifdef WLAN_FEATURE_DSRC
408*5113495bSYour Name 	CHAN_ENUM_5850,
409*5113495bSYour Name 	CHAN_ENUM_5855,
410*5113495bSYour Name 	CHAN_ENUM_5860,
411*5113495bSYour Name #endif
412*5113495bSYour Name 	CHAN_ENUM_5865,
413*5113495bSYour Name #ifdef WLAN_FEATURE_DSRC
414*5113495bSYour Name 	CHAN_ENUM_5870,
415*5113495bSYour Name 	CHAN_ENUM_5875,
416*5113495bSYour Name 	CHAN_ENUM_5880,
417*5113495bSYour Name #endif
418*5113495bSYour Name 	CHAN_ENUM_5885,
419*5113495bSYour Name #ifdef WLAN_FEATURE_DSRC
420*5113495bSYour Name 	CHAN_ENUM_5890,
421*5113495bSYour Name 	CHAN_ENUM_5895,
422*5113495bSYour Name 	CHAN_ENUM_5900,
423*5113495bSYour Name 	CHAN_ENUM_5905,
424*5113495bSYour Name 	CHAN_ENUM_5910,
425*5113495bSYour Name 	CHAN_ENUM_5915,
426*5113495bSYour Name 	CHAN_ENUM_5920,
427*5113495bSYour Name #endif /* WLAN_FEATURE_DSRC */
428*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
429*5113495bSYour Name 	CHAN_ENUM_5935,
430*5113495bSYour Name 	CHAN_ENUM_5955,
431*5113495bSYour Name 	CHAN_ENUM_5975,
432*5113495bSYour Name 	CHAN_ENUM_5995,
433*5113495bSYour Name 	CHAN_ENUM_6015,
434*5113495bSYour Name 	CHAN_ENUM_6035,
435*5113495bSYour Name 	CHAN_ENUM_6055,
436*5113495bSYour Name 	CHAN_ENUM_6075,
437*5113495bSYour Name 	CHAN_ENUM_6095,
438*5113495bSYour Name 	CHAN_ENUM_6115,
439*5113495bSYour Name 	CHAN_ENUM_6135,
440*5113495bSYour Name 	CHAN_ENUM_6155,
441*5113495bSYour Name 	CHAN_ENUM_6175,
442*5113495bSYour Name 	CHAN_ENUM_6195,
443*5113495bSYour Name 	CHAN_ENUM_6215,
444*5113495bSYour Name 	CHAN_ENUM_6235,
445*5113495bSYour Name 	CHAN_ENUM_6255,
446*5113495bSYour Name 	CHAN_ENUM_6275,
447*5113495bSYour Name 	CHAN_ENUM_6295,
448*5113495bSYour Name 	CHAN_ENUM_6315,
449*5113495bSYour Name 	CHAN_ENUM_6335,
450*5113495bSYour Name 	CHAN_ENUM_6355,
451*5113495bSYour Name 	CHAN_ENUM_6375,
452*5113495bSYour Name 	CHAN_ENUM_6395,
453*5113495bSYour Name 	CHAN_ENUM_6415,
454*5113495bSYour Name 	CHAN_ENUM_6435,
455*5113495bSYour Name 	CHAN_ENUM_6455,
456*5113495bSYour Name 	CHAN_ENUM_6475,
457*5113495bSYour Name 	CHAN_ENUM_6495,
458*5113495bSYour Name 	CHAN_ENUM_6515,
459*5113495bSYour Name 	CHAN_ENUM_6535,
460*5113495bSYour Name 	CHAN_ENUM_6555,
461*5113495bSYour Name 	CHAN_ENUM_6575,
462*5113495bSYour Name 	CHAN_ENUM_6595,
463*5113495bSYour Name 	CHAN_ENUM_6615,
464*5113495bSYour Name 	CHAN_ENUM_6635,
465*5113495bSYour Name 	CHAN_ENUM_6655,
466*5113495bSYour Name 	CHAN_ENUM_6675,
467*5113495bSYour Name 	CHAN_ENUM_6695,
468*5113495bSYour Name 	CHAN_ENUM_6715,
469*5113495bSYour Name 	CHAN_ENUM_6735,
470*5113495bSYour Name 	CHAN_ENUM_6755,
471*5113495bSYour Name 	CHAN_ENUM_6775,
472*5113495bSYour Name 	CHAN_ENUM_6795,
473*5113495bSYour Name 	CHAN_ENUM_6815,
474*5113495bSYour Name 	CHAN_ENUM_6835,
475*5113495bSYour Name 	CHAN_ENUM_6855,
476*5113495bSYour Name 	CHAN_ENUM_6875,
477*5113495bSYour Name 	CHAN_ENUM_6895,
478*5113495bSYour Name 	CHAN_ENUM_6915,
479*5113495bSYour Name 	CHAN_ENUM_6935,
480*5113495bSYour Name 	CHAN_ENUM_6955,
481*5113495bSYour Name 	CHAN_ENUM_6975,
482*5113495bSYour Name 	CHAN_ENUM_6995,
483*5113495bSYour Name 	CHAN_ENUM_7015,
484*5113495bSYour Name 	CHAN_ENUM_7035,
485*5113495bSYour Name 	CHAN_ENUM_7055,
486*5113495bSYour Name 	CHAN_ENUM_7075,
487*5113495bSYour Name 	CHAN_ENUM_7095,
488*5113495bSYour Name 	CHAN_ENUM_7115,
489*5113495bSYour Name #endif /* CONFIG_BAND_6GHZ */
490*5113495bSYour Name 
491*5113495bSYour Name 	NUM_CHANNELS,
492*5113495bSYour Name 
493*5113495bSYour Name 	MIN_CHANNEL = CHAN_ENUM_2412,
494*5113495bSYour Name 	MAX_CHANNEL = (NUM_CHANNELS - 1),
495*5113495bSYour Name 
496*5113495bSYour Name 	MIN_24GHZ_CHANNEL = CHAN_ENUM_2412,
497*5113495bSYour Name 	MAX_24GHZ_CHANNEL = CHAN_ENUM_2484,
498*5113495bSYour Name 	NUM_24GHZ_CHANNELS = (MAX_24GHZ_CHANNEL - MIN_24GHZ_CHANNEL + 1),
499*5113495bSYour Name 
500*5113495bSYour Name 	INVALID_CHANNEL = NUM_CHANNELS,
501*5113495bSYour Name 
502*5113495bSYour Name #ifdef CONFIG_49GHZ_CHAN
503*5113495bSYour Name 	MIN_49GHZ_CHANNEL = CHAN_ENUM_4912,
504*5113495bSYour Name 	MAX_49GHZ_CHANNEL = CHAN_ENUM_5080,
505*5113495bSYour Name 	NUM_49GHZ_CHANNELS = (MAX_49GHZ_CHANNEL - MIN_49GHZ_CHANNEL + 1),
506*5113495bSYour Name #else
507*5113495bSYour Name 	MIN_49GHZ_CHANNEL = INVALID_CHANNEL,
508*5113495bSYour Name 	MAX_49GHZ_CHANNEL = INVALID_CHANNEL,
509*5113495bSYour Name 	NUM_49GHZ_CHANNELS = 0,
510*5113495bSYour Name #endif /* CONFIG_49GHZ_CHAN */
511*5113495bSYour Name 
512*5113495bSYour Name 	MIN_5GHZ_CHANNEL = CHAN_ENUM_5180,
513*5113495bSYour Name #ifdef WLAN_FEATURE_DSRC
514*5113495bSYour Name 	MAX_5GHZ_CHANNEL = CHAN_ENUM_5920,
515*5113495bSYour Name #else
516*5113495bSYour Name 	MAX_5GHZ_CHANNEL = CHAN_ENUM_5885,
517*5113495bSYour Name #endif
518*5113495bSYour Name 	NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1),
519*5113495bSYour Name 
520*5113495bSYour Name #ifdef WLAN_FEATURE_DSRC
521*5113495bSYour Name 	MIN_DSRC_CHANNEL = CHAN_ENUM_5850,
522*5113495bSYour Name 	MAX_DSRC_CHANNEL = CHAN_ENUM_5920,
523*5113495bSYour Name 	NUM_DSRC_CHANNELS = (MAX_DSRC_CHANNEL - MIN_DSRC_CHANNEL + 1),
524*5113495bSYour Name #endif
525*5113495bSYour Name 
526*5113495bSYour Name 	MIN_5DOT9_CHANNEL = CHAN_ENUM_5845,
527*5113495bSYour Name 	MAX_5DOT9_CHANNEL = CHAN_ENUM_5885,
528*5113495bSYour Name 	NUM_5DOT9_CHANNELS = (MAX_5DOT9_CHANNEL - MIN_5DOT9_CHANNEL + 1),
529*5113495bSYour Name 
530*5113495bSYour Name #ifdef CONFIG_49GHZ_CHAN
531*5113495bSYour Name #define BAND_5GHZ_START_CHANNEL MIN_49GHZ_CHANNEL
532*5113495bSYour Name #else
533*5113495bSYour Name #define BAND_5GHZ_START_CHANNEL MIN_5GHZ_CHANNEL
534*5113495bSYour Name #endif /* CONFIG_49GHZ_CHAN */
535*5113495bSYour Name 
536*5113495bSYour Name #ifdef DISABLE_UNII_SHARED_BANDS
537*5113495bSYour Name 	MIN_UNII_1_BAND_CHANNEL = CHAN_ENUM_5180,
538*5113495bSYour Name 	MAX_UNII_1_BAND_CHANNEL = CHAN_ENUM_5240,
539*5113495bSYour Name 	NUM_UNII_1_BAND_CHANNELS = (MAX_UNII_1_BAND_CHANNEL -
540*5113495bSYour Name 				    MIN_UNII_1_BAND_CHANNEL + 1),
541*5113495bSYour Name 
542*5113495bSYour Name 	MIN_UNII_2A_BAND_CHANNEL = CHAN_ENUM_5260,
543*5113495bSYour Name 	MAX_UNII_2A_BAND_CHANNEL = CHAN_ENUM_5320,
544*5113495bSYour Name 	NUM_UNII_2A_BAND_CHANNELS = (MAX_UNII_2A_BAND_CHANNEL -
545*5113495bSYour Name 				     MIN_UNII_2A_BAND_CHANNEL + 1),
546*5113495bSYour Name #endif
547*5113495bSYour Name 
548*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
549*5113495bSYour Name 	MIN_6GHZ_CHANNEL = CHAN_ENUM_5935,
550*5113495bSYour Name 	MAX_6GHZ_CHANNEL = CHAN_ENUM_7115,
551*5113495bSYour Name 	NUM_6GHZ_CHANNELS = (MAX_6GHZ_CHANNEL - MIN_6GHZ_CHANNEL + 1),
552*5113495bSYour Name 	MIN_6GHZ_NON_ORPHAN_CHANNEL = CHAN_ENUM_5955,
553*5113495bSYour Name #else
554*5113495bSYour Name 	MIN_6GHZ_CHANNEL = INVALID_CHANNEL,
555*5113495bSYour Name 	MAX_6GHZ_CHANNEL = INVALID_CHANNEL,
556*5113495bSYour Name 	NUM_6GHZ_CHANNELS = 0,
557*5113495bSYour Name 	MIN_6GHZ_NON_ORPHAN_CHANNEL = INVALID_CHANNEL,
558*5113495bSYour Name #endif /* CONFIG_BAND_6GHZ */
559*5113495bSYour Name };
560*5113495bSYour Name 
561*5113495bSYour Name /**
562*5113495bSYour Name  * enum channel_state - channel state
563*5113495bSYour Name  * @CHANNEL_STATE_DISABLE: disabled state
564*5113495bSYour Name  * @CHANNEL_STATE_PASSIVE: passive state
565*5113495bSYour Name  * @CHANNEL_STATE_DFS: dfs state
566*5113495bSYour Name  * @CHANNEL_STATE_ENABLE: enabled state
567*5113495bSYour Name  * @CHANNEL_STATE_INVALID: invalid state
568*5113495bSYour Name  */
569*5113495bSYour Name enum channel_state {
570*5113495bSYour Name 	CHANNEL_STATE_DISABLE,
571*5113495bSYour Name 	CHANNEL_STATE_PASSIVE,
572*5113495bSYour Name 	CHANNEL_STATE_DFS,
573*5113495bSYour Name 	CHANNEL_STATE_ENABLE,
574*5113495bSYour Name 	CHANNEL_STATE_INVALID,
575*5113495bSYour Name };
576*5113495bSYour Name 
577*5113495bSYour Name /**
578*5113495bSYour Name  * enum reg_6g_ap_type - Regulatory AP type for regulatory info subfield.
579*5113495bSYour Name  * @REG_INDOOR_AP: Indoor AP
580*5113495bSYour Name  * @REG_STANDARD_POWER_AP: Standard Power AP
581*5113495bSYour Name  * @REG_VERY_LOW_POWER_AP: Very low power AP
582*5113495bSYour Name  * @REG_CURRENT_MAX_AP_TYPE: current maximum, used to determine array size
583*5113495bSYour Name  * @REG_MAX_SUPP_AP_TYPE: Current maximum AP power typer supported in the IEEE
584*5113495bSYour Name  * standard.
585*5113495bSYour Name  * @REG_MAX_AP_TYPE: Maximum value possible for (3 bits) regulatory info
586*5113495bSYour Name  * sub-field in the 6G HE Operation IE
587*5113495bSYour Name  */
588*5113495bSYour Name enum reg_6g_ap_type {
589*5113495bSYour Name 	REG_INDOOR_AP = 0,
590*5113495bSYour Name 	REG_STANDARD_POWER_AP = 1,
591*5113495bSYour Name 	REG_VERY_LOW_POWER_AP = 2,
592*5113495bSYour Name 	REG_CURRENT_MAX_AP_TYPE,
593*5113495bSYour Name 	REG_MAX_SUPP_AP_TYPE = REG_VERY_LOW_POWER_AP,
594*5113495bSYour Name 	REG_MAX_AP_TYPE = 7,
595*5113495bSYour Name };
596*5113495bSYour Name 
597*5113495bSYour Name /**
598*5113495bSYour Name  * enum reg_6g_client_type - Regulatory client type for max tx-power category
599*5113495bSYour Name  * @REG_DEFAULT_CLIENT: Default client
600*5113495bSYour Name  * @REG_SUBORDINATE_CLIENT: Subordinate client
601*5113495bSYour Name  * @REG_MAX_CLIENT_TYPE: Maximum value possible for max tx-power category
602*5113495bSYour Name  * (2 bits) sub-field in the TPE (Transmit Power Envelope) IE
603*5113495bSYour Name  * @REG_INVALID_CLIENT_TYPE: Invalid client type
604*5113495bSYour Name  */
605*5113495bSYour Name enum reg_6g_client_type {
606*5113495bSYour Name 	REG_DEFAULT_CLIENT = 0,
607*5113495bSYour Name 	REG_SUBORDINATE_CLIENT = 1,
608*5113495bSYour Name 	REG_MAX_CLIENT_TYPE = 2,
609*5113495bSYour Name 	REG_INVALID_CLIENT_TYPE = REG_MAX_CLIENT_TYPE,
610*5113495bSYour Name };
611*5113495bSYour Name 
612*5113495bSYour Name /**
613*5113495bSYour Name  * enum v_REGDOMAIN_t: reg domain
614*5113495bSYour Name  * @REGDOMAIN_FCC: FCC domain
615*5113495bSYour Name  * @REGDOMAIN_ETSI: ETSI domain
616*5113495bSYour Name  * @REGDOMAIN_JAPAN: JAPAN domain
617*5113495bSYour Name  * @REGDOMAIN_WORLD: WORLD domain
618*5113495bSYour Name  * @REGDOMAIN_COUNT: Max domain
619*5113495bSYour Name  */
620*5113495bSYour Name typedef enum {
621*5113495bSYour Name 	REGDOMAIN_FCC,
622*5113495bSYour Name 	REGDOMAIN_ETSI,
623*5113495bSYour Name 	REGDOMAIN_JAPAN,
624*5113495bSYour Name 	REGDOMAIN_WORLD,
625*5113495bSYour Name 	REGDOMAIN_COUNT
626*5113495bSYour Name } v_REGDOMAIN_t;
627*5113495bSYour Name 
628*5113495bSYour Name /**
629*5113495bSYour Name  * enum ctl_value - CTL value
630*5113495bSYour Name  * @CTL_FCC: CTL FCC
631*5113495bSYour Name  * @CTL_MKK: CTL MKK
632*5113495bSYour Name  * @CTL_ETSI: CTL ETSI
633*5113495bSYour Name  * @CTL_KOR: CTL KOR
634*5113495bSYour Name  * @CTL_CHN: CTL CHINA
635*5113495bSYour Name  * @CTL_USER_DEF: CTL USER_DEF
636*5113495bSYour Name  * @CTL_NONE: CTL NONE
637*5113495bSYour Name  */
638*5113495bSYour Name enum ctl_value {
639*5113495bSYour Name 	CTL_FCC = 0x10,
640*5113495bSYour Name 	CTL_ETSI = 0x30,
641*5113495bSYour Name 	CTL_MKK = 0x40,
642*5113495bSYour Name 	CTL_KOR = 0x50,
643*5113495bSYour Name 	CTL_CHN = 0x60,
644*5113495bSYour Name 	CTL_USER_DEF = 0x70,
645*5113495bSYour Name 	CTL_NONE = 0xff
646*5113495bSYour Name };
647*5113495bSYour Name 
648*5113495bSYour Name /**
649*5113495bSYour Name  * struct freq_range: The range/band of frequencies, indicated by left and right
650*5113495bSYour Name  * edge frequencies.
651*5113495bSYour Name  * @left: Left edge frequency(inclusive)
652*5113495bSYour Name  * @right: Right edge frequency(inclusive)
653*5113495bSYour Name  */
654*5113495bSYour Name struct freq_range {
655*5113495bSYour Name 	qdf_freq_t left;
656*5113495bSYour Name 	qdf_freq_t right;
657*5113495bSYour Name };
658*5113495bSYour Name 
659*5113495bSYour Name /**
660*5113495bSYour Name  * struct ch_params
661*5113495bSYour Name  * @ch_width: channel width
662*5113495bSYour Name  * @sec_ch_offset: secondary channel offset
663*5113495bSYour Name  * @center_freq_seg0: channel number for segment 0
664*5113495bSYour Name  * @center_freq_seg1: channel number segment 1
665*5113495bSYour Name  * @mhz_freq_seg0: Center frequency for segment 0
666*5113495bSYour Name  * @mhz_freq_seg1: Center frequency for segment 1
667*5113495bSYour Name  * @reg_punc_bitmap: Output puncturing bitmap
668*5113495bSYour Name  * @is_create_punc_bitmap: Whether puncturing bitmap is to be created or not
669*5113495bSYour Name  *                         Parameter 'reg_punc_bitmap' is valid only if
670*5113495bSYour Name  *                         is_create_punc_bitmap is true
671*5113495bSYour Name  * @input_punc_bitmap: Input puncture bitmap. The channels which are indicated
672*5113495bSYour Name  *                     as punctured by this bitmap are not validated by the
673*5113495bSYour Name  *                     regulatory.
674*5113495bSYour Name  */
675*5113495bSYour Name struct ch_params {
676*5113495bSYour Name 	enum phy_ch_width ch_width;
677*5113495bSYour Name 	uint8_t sec_ch_offset;
678*5113495bSYour Name 	uint8_t center_freq_seg0;
679*5113495bSYour Name 	uint8_t center_freq_seg1;
680*5113495bSYour Name 	qdf_freq_t mhz_freq_seg0;
681*5113495bSYour Name 	qdf_freq_t mhz_freq_seg1;
682*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
683*5113495bSYour Name 	uint16_t reg_punc_bitmap;
684*5113495bSYour Name 	bool is_create_punc_bitmap;
685*5113495bSYour Name 	uint16_t input_punc_bitmap;
686*5113495bSYour Name #endif
687*5113495bSYour Name };
688*5113495bSYour Name 
689*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
690*5113495bSYour Name #define MAX_NUM_CHAN_PARAM 2
691*5113495bSYour Name 
692*5113495bSYour Name /**
693*5113495bSYour Name  * struct reg_channel_list
694*5113495bSYour Name  * @num_ch_params: Number of chan_param elements
695*5113495bSYour Name  * @chan_param: Object of type struct ch_params to hold channel params
696*5113495bSYour Name  * Currently chan_param is an array of 2 because maximum possible 320
697*5113495bSYour Name  * channels for a given primary channel is 2. This may be dynamically
698*5113495bSYour Name  * allocated in the future by the caller if num_ch_params is greater than 2.
699*5113495bSYour Name  *
700*5113495bSYour Name  */
701*5113495bSYour Name struct reg_channel_list {
702*5113495bSYour Name 	uint8_t num_ch_params;
703*5113495bSYour Name 	struct ch_params chan_param[MAX_NUM_CHAN_PARAM];
704*5113495bSYour Name };
705*5113495bSYour Name #endif
706*5113495bSYour Name 
707*5113495bSYour Name /**
708*5113495bSYour Name  * struct channel_power
709*5113495bSYour Name  * @center_freq: Channel Center Frequency
710*5113495bSYour Name  * @chan_num: channel number
711*5113495bSYour Name  * @tx_power: TX power
712*5113495bSYour Name  */
713*5113495bSYour Name struct channel_power {
714*5113495bSYour Name 	qdf_freq_t center_freq;
715*5113495bSYour Name 	uint8_t chan_num;
716*5113495bSYour Name 	uint32_t tx_power;
717*5113495bSYour Name };
718*5113495bSYour Name 
719*5113495bSYour Name /**
720*5113495bSYour Name  * enum offset_t: channel offset
721*5113495bSYour Name  * @BW20: 20 mhz channel
722*5113495bSYour Name  * @BW40_LOW_PRIMARY: lower channel in 40 mhz
723*5113495bSYour Name  * @BW40_HIGH_PRIMARY: higher channel in 40 mhz
724*5113495bSYour Name  * @BW80: 80 mhz channel
725*5113495bSYour Name  * @BWALL: unknown bandwidth
726*5113495bSYour Name  * @BW_INVALID: invalid bandwidth
727*5113495bSYour Name  */
728*5113495bSYour Name enum offset_t {
729*5113495bSYour Name 	BW20 = 0,
730*5113495bSYour Name 	BW40_LOW_PRIMARY = 1,
731*5113495bSYour Name 	BW40_HIGH_PRIMARY = 3,
732*5113495bSYour Name 	BW80,
733*5113495bSYour Name 	BWALL,
734*5113495bSYour Name 	BW_INVALID = 0xFF
735*5113495bSYour Name };
736*5113495bSYour Name 
737*5113495bSYour Name /**
738*5113495bSYour Name  * enum behav_limit - behavior limit
739*5113495bSYour Name  * @BEHAV_NONE: none
740*5113495bSYour Name  * @BEHAV_BW40_LOW_PRIMARY: BW40 low primary
741*5113495bSYour Name  * @BEHAV_BW40_HIGH_PRIMARY: BW40 high primary
742*5113495bSYour Name  * @BEHAV_BW80_PLUS: BW 80 plus
743*5113495bSYour Name  * @BEHAV_INVALID: invalid behavior
744*5113495bSYour Name  */
745*5113495bSYour Name enum behav_limit {
746*5113495bSYour Name 	BEHAV_NONE,
747*5113495bSYour Name 	BEHAV_BW40_LOW_PRIMARY,
748*5113495bSYour Name 	BEHAV_BW40_HIGH_PRIMARY,
749*5113495bSYour Name 	BEHAV_BW80_PLUS,
750*5113495bSYour Name 	BEHAV_INVALID = 0xFF
751*5113495bSYour Name };
752*5113495bSYour Name 
753*5113495bSYour Name /**
754*5113495bSYour Name  * struct c_freq_lst: The list data structure for the center frequencies
755*5113495bSYour Name  * @num_cfis: Number of center frequencies
756*5113495bSYour Name  * @p_cfis_arr: Start address of the array of center frequency indices. Center
757*5113495bSYour Name  *              for 40/80/160/320MHz band channel opclasses. For 20MHz the list
758*5113495bSYour Name  *              is empty as it is already available in @channels variable.
759*5113495bSYour Name  */
760*5113495bSYour Name struct c_freq_lst {
761*5113495bSYour Name 	uint8_t num_cfis;
762*5113495bSYour Name 	const uint8_t *p_cfis_arr;
763*5113495bSYour Name };
764*5113495bSYour Name 
765*5113495bSYour Name /**
766*5113495bSYour Name  * struct reg_dmn_op_class_map_t: operating class
767*5113495bSYour Name  * @op_class: operating class number
768*5113495bSYour Name  * @chan_spacing: channel spacing
769*5113495bSYour Name  * @offset: offset
770*5113495bSYour Name  * @behav_limit: OR of bitmaps of enum behav_limit
771*5113495bSYour Name  * @start_freq: starting frequency
772*5113495bSYour Name  * @channels: channel set
773*5113495bSYour Name  * @p_cfi_lst_obj: Pointer to center frequency indices list
774*5113495bSYour Name  */
775*5113495bSYour Name struct reg_dmn_op_class_map_t {
776*5113495bSYour Name 	uint8_t op_class;
777*5113495bSYour Name 	uint16_t chan_spacing;
778*5113495bSYour Name 	enum offset_t offset;
779*5113495bSYour Name 	uint16_t behav_limit;
780*5113495bSYour Name 	qdf_freq_t start_freq;
781*5113495bSYour Name 	uint8_t channels[REG_MAX_CHANNELS_PER_OPERATING_CLASS];
782*5113495bSYour Name 	const struct c_freq_lst *p_cfi_lst_obj;
783*5113495bSYour Name };
784*5113495bSYour Name 
785*5113495bSYour Name /**
786*5113495bSYour Name  * enum opclass_config: Opclass configuration
787*5113495bSYour Name  * @OPCLASSES_SUPPORTED_BY_CUR_HWMODE: Retrieve opclasses that is supported
788*5113495bSYour Name  * by the current hw mode.
789*5113495bSYour Name  * @OPCLASSES_NOT_SUPPORTED_BY_CUR_HWMODE: Retrieve opclasses that are not
790*5113495bSYour Name  * supported by the current hw mode.
791*5113495bSYour Name  * @OPCLASSES_SUPPORTED_BY_DOMAIN: Populate the opclass supported by the radio
792*5113495bSYour Name  * without considering the capability of current hwmode.
793*5113495bSYour Name  */
794*5113495bSYour Name enum opclass_config {
795*5113495bSYour Name 	OPCLASSES_SUPPORTED_BY_CUR_HWMODE = 1,
796*5113495bSYour Name 	OPCLASSES_NOT_SUPPORTED_BY_CUR_HWMODE = 2,
797*5113495bSYour Name 	OPCLASSES_SUPPORTED_BY_DOMAIN = 3
798*5113495bSYour Name };
799*5113495bSYour Name 
800*5113495bSYour Name /**
801*5113495bSYour Name  * struct regdmn_ap_cap_opclass_t: AP Cap operation class table
802*5113495bSYour Name  * @op_class: operating class number
803*5113495bSYour Name  * @ch_width: channel width in MHz
804*5113495bSYour Name  * @start_freq: Starting Frequency in MHz
805*5113495bSYour Name  * @behav_limit: OR of bitmaps of enum behav_limit
806*5113495bSYour Name  * @max_tx_pwr_dbm: Maximum tx power in dbm
807*5113495bSYour Name  * @num_supported_chan: Number of supported channels
808*5113495bSYour Name  * @num_non_supported_chan: Number of non-supported channels
809*5113495bSYour Name  * @sup_chan_list: Array of supported channel numbers
810*5113495bSYour Name  * @non_sup_chan_list: Array of non supported channel numbers
811*5113495bSYour Name  */
812*5113495bSYour Name struct regdmn_ap_cap_opclass_t {
813*5113495bSYour Name 	uint8_t op_class;
814*5113495bSYour Name 	uint16_t ch_width;
815*5113495bSYour Name 	qdf_freq_t start_freq;
816*5113495bSYour Name 	uint16_t behav_limit;
817*5113495bSYour Name 	uint8_t max_tx_pwr_dbm;
818*5113495bSYour Name 	uint8_t num_supported_chan;
819*5113495bSYour Name 	uint8_t num_non_supported_chan;
820*5113495bSYour Name 	uint8_t sup_chan_list[REG_MAX_CHANNELS_PER_OPERATING_CLASS];
821*5113495bSYour Name 	uint8_t non_sup_chan_list[REG_MAX_CHANNELS_PER_OPERATING_CLASS];
822*5113495bSYour Name };
823*5113495bSYour Name 
824*5113495bSYour Name /**
825*5113495bSYour Name  * struct reg_dmn_supp_op_classes: operating classes
826*5113495bSYour Name  * @num_classes: number of classes
827*5113495bSYour Name  * @classes: classes
828*5113495bSYour Name  */
829*5113495bSYour Name struct reg_dmn_supp_op_classes {
830*5113495bSYour Name 	uint8_t num_classes;
831*5113495bSYour Name 	uint8_t classes[REG_MAX_SUPP_OPER_CLASSES];
832*5113495bSYour Name };
833*5113495bSYour Name 
834*5113495bSYour Name /**
835*5113495bSYour Name  * struct reg_start_11d_scan_req: start 11d scan request
836*5113495bSYour Name  * @vdev_id: vdev id
837*5113495bSYour Name  * @scan_period_msec: scan duration in milli-seconds
838*5113495bSYour Name  * @start_interval_msec: offset duration to start the scan in milli-seconds
839*5113495bSYour Name  */
840*5113495bSYour Name struct reg_start_11d_scan_req {
841*5113495bSYour Name 	uint8_t vdev_id;
842*5113495bSYour Name 	uint32_t scan_period_msec;
843*5113495bSYour Name 	uint32_t start_interval_msec;
844*5113495bSYour Name };
845*5113495bSYour Name 
846*5113495bSYour Name /**
847*5113495bSYour Name  * struct reg_11d_scan_msg: 11d scan message structure
848*5113495bSYour Name  * @psoc: pointer to psoc object
849*5113495bSYour Name  * @enable_11d_supp: enable 11d scan or disable 11d scan
850*5113495bSYour Name  */
851*5113495bSYour Name struct reg_11d_scan_msg {
852*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
853*5113495bSYour Name 	bool enable_11d_supp;
854*5113495bSYour Name };
855*5113495bSYour Name /**
856*5113495bSYour Name  * struct reg_stop_11d_scan_req: stop 11d scan request
857*5113495bSYour Name  * @vdev_id: vdev id
858*5113495bSYour Name  */
859*5113495bSYour Name struct reg_stop_11d_scan_req {
860*5113495bSYour Name 	uint8_t vdev_id;
861*5113495bSYour Name };
862*5113495bSYour Name 
863*5113495bSYour Name /**
864*5113495bSYour Name  * struct reg_11d_new_country: regulatory 11d new coutry code
865*5113495bSYour Name  * @alpha2: new 11d alpha2
866*5113495bSYour Name  */
867*5113495bSYour Name struct reg_11d_new_country {
868*5113495bSYour Name 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
869*5113495bSYour Name };
870*5113495bSYour Name 
871*5113495bSYour Name /**
872*5113495bSYour Name  * enum country_src: country source
873*5113495bSYour Name  * @SOURCE_UNKNOWN: source unknown
874*5113495bSYour Name  * @SOURCE_QUERY: source query
875*5113495bSYour Name  * @SOURCE_CORE: source regulatory core
876*5113495bSYour Name  * @SOURCE_DRIVER: source driver
877*5113495bSYour Name  * @SOURCE_USERSPACE: source userspace
878*5113495bSYour Name  * @SOURCE_11D: source 11D
879*5113495bSYour Name  */
880*5113495bSYour Name enum country_src {
881*5113495bSYour Name 	SOURCE_UNKNOWN,
882*5113495bSYour Name 	SOURCE_QUERY,
883*5113495bSYour Name 	SOURCE_CORE,
884*5113495bSYour Name 	SOURCE_DRIVER,
885*5113495bSYour Name 	SOURCE_USERSPACE,
886*5113495bSYour Name 	SOURCE_11D
887*5113495bSYour Name };
888*5113495bSYour Name 
889*5113495bSYour Name #ifdef WLAN_FEATURE_GET_USABLE_CHAN_LIST
890*5113495bSYour Name /**
891*5113495bSYour Name  * enum iftype - (virtual) interface types
892*5113495bSYour Name  *
893*5113495bSYour Name  * @IFTYPE_UNSPECIFIED: unspecified type, driver decides
894*5113495bSYour Name  * @IFTYPE_ADHOC: independent BSS member
895*5113495bSYour Name  * @IFTYPE_STATION: managed BSS member
896*5113495bSYour Name  * @IFTYPE_AP: access point
897*5113495bSYour Name  * @IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces
898*5113495bSYour Name  *      are a bit special in that they must always be tied to a pre-existing
899*5113495bSYour Name  *      AP type interface.
900*5113495bSYour Name  * @IFTYPE_WDS: wireless distribution interface
901*5113495bSYour Name  * @IFTYPE_MONITOR: monitor interface receiving all frames
902*5113495bSYour Name  * @IFTYPE_MESH_POINT: mesh point
903*5113495bSYour Name  * @IFTYPE_P2P_CLIENT: P2P client
904*5113495bSYour Name  * @IFTYPE_P2P_GO: P2P group owner
905*5113495bSYour Name  * @IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev
906*5113495bSYour Name  *      and therefore can't be created in the normal ways, use the
907*5113495bSYour Name  *      %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE
908*5113495bSYour Name  *      commands to create and destroy one
909*5113495bSYour Name  * @IFTYPE_OCB: Outside Context of a BSS
910*5113495bSYour Name  *      This mode corresponds to the MIB variable dot11OCBActivated=true
911*5113495bSYour Name  * @IFTYPE_NAN: NAN mode
912*5113495bSYour Name  * @IFTYPE_MAX: highest interface type number currently defined
913*5113495bSYour Name  * @NUM_IFTYPES: number of defined interface types
914*5113495bSYour Name  *
915*5113495bSYour Name  * These values are used with the %NL80211_ATTR_IFTYPE
916*5113495bSYour Name  * to set the type of an interface.
917*5113495bSYour Name  *
918*5113495bSYour Name  */
919*5113495bSYour Name enum iftype {
920*5113495bSYour Name 	IFTYPE_UNSPECIFIED,
921*5113495bSYour Name 	IFTYPE_ADHOC,
922*5113495bSYour Name 	IFTYPE_STATION,
923*5113495bSYour Name 	IFTYPE_AP,
924*5113495bSYour Name 	IFTYPE_AP_VLAN,
925*5113495bSYour Name 	IFTYPE_WDS,
926*5113495bSYour Name 	IFTYPE_MONITOR,
927*5113495bSYour Name 	IFTYPE_MESH_POINT,
928*5113495bSYour Name 	IFTYPE_P2P_CLIENT,
929*5113495bSYour Name 	IFTYPE_P2P_GO,
930*5113495bSYour Name 	IFTYPE_P2P_DEVICE,
931*5113495bSYour Name 	IFTYPE_OCB,
932*5113495bSYour Name 	IFTYPE_NAN,
933*5113495bSYour Name 
934*5113495bSYour Name 	/* keep last */
935*5113495bSYour Name 	NUM_IFTYPES,
936*5113495bSYour Name 	IFTYPE_MAX = NUM_IFTYPES - 1
937*5113495bSYour Name };
938*5113495bSYour Name 
939*5113495bSYour Name /**
940*5113495bSYour Name  * enum usable_channels_filter - Filters to get usable channels
941*5113495bSYour Name  * @FILTER_CELLULAR_COEX: Avoid lte coex channels
942*5113495bSYour Name  * @FILTER_WLAN_CONCURRENCY: Avoid con channels
943*5113495bSYour Name  **/
944*5113495bSYour Name enum usable_channels_filter {
945*5113495bSYour Name 	FILTER_CELLULAR_COEX = 0,
946*5113495bSYour Name 	FILTER_WLAN_CONCURRENCY = 1,
947*5113495bSYour Name };
948*5113495bSYour Name 
949*5113495bSYour Name /**
950*5113495bSYour Name  * struct get_usable_chan_res_params - Usable channels resp params
951*5113495bSYour Name  * @freq : center freq
952*5113495bSYour Name  * @seg0_freq : seg0 freq
953*5113495bSYour Name  * @seg1_freq: seg1 freq
954*5113495bSYour Name  * @bw : bandwidth
955*5113495bSYour Name  * @state: channel state
956*5113495bSYour Name  * @iface_mode_mask: interface mode mask
957*5113495bSYour Name  **/
958*5113495bSYour Name struct get_usable_chan_res_params {
959*5113495bSYour Name 	qdf_freq_t freq;
960*5113495bSYour Name 	uint32_t seg0_freq;
961*5113495bSYour Name 	uint32_t seg1_freq;
962*5113495bSYour Name 	enum phy_ch_width bw;
963*5113495bSYour Name 	uint32_t iface_mode_mask;
964*5113495bSYour Name 	enum channel_state state;
965*5113495bSYour Name };
966*5113495bSYour Name 
967*5113495bSYour Name /**
968*5113495bSYour Name  * struct get_usable_chan_req_params - Usable channels req params
969*5113495bSYour Name  * @band_mask: band mask
970*5113495bSYour Name  * @iface_mode_mask: interface mode mask
971*5113495bSYour Name  * @filter_mask: filter mask
972*5113495bSYour Name  **/
973*5113495bSYour Name struct get_usable_chan_req_params {
974*5113495bSYour Name 	uint32_t band_mask;
975*5113495bSYour Name 	uint32_t iface_mode_mask;
976*5113495bSYour Name 	uint32_t filter_mask;
977*5113495bSYour Name };
978*5113495bSYour Name #endif
979*5113495bSYour Name 
980*5113495bSYour Name /**
981*5113495bSYour Name  * struct regulatory_channel
982*5113495bSYour Name  * @center_freq: center frequency
983*5113495bSYour Name  * @chan_num: channel number
984*5113495bSYour Name  * @state: channel state
985*5113495bSYour Name  * @chan_flags: channel flags
986*5113495bSYour Name  * @tx_power: TX powers
987*5113495bSYour Name  * @min_bw: min bandwidth
988*5113495bSYour Name  * @max_bw: max bandwidth
989*5113495bSYour Name  * @ant_gain: antenna gain
990*5113495bSYour Name  * @nol_chan: whether channel is nol
991*5113495bSYour Name  * @nol_history: Set NOL-History when STA vap detects RADAR.
992*5113495bSYour Name  * @is_chan_hop_blocked: Whether channel is blocked for ACS hopping.
993*5113495bSYour Name  * @ht40intol_flags: Contains Flags to indicate whether the 40PLUS/40MINUS
994*5113495bSYour Name  *                   version of the channel is blocked by ACS due to
995*5113495bSYour Name  *                   intolerance.
996*5113495bSYour Name  * @psd_flag: is PSD channel or not
997*5113495bSYour Name  * @psd_eirp: PSD power level
998*5113495bSYour Name  * @is_static_punctured: is static punctured
999*5113495bSYour Name  * @opclass_chan_disable: Whether the channel is disabled/enabled by a user
1000*5113495bSYour Name  *                        command. The command provides an opclass and a
1001*5113495bSYour Name  *                        subset of the channels belonging to that opclass
1002*5113495bSYour Name  *                        as inputs and expects the driver to disable/enable
1003*5113495bSYour Name  *                        the channels in the subset.
1004*5113495bSYour Name  * @power_type: channel power type
1005*5113495bSYour Name  */
1006*5113495bSYour Name struct regulatory_channel {
1007*5113495bSYour Name 	qdf_freq_t center_freq;
1008*5113495bSYour Name 	uint8_t chan_num;
1009*5113495bSYour Name 	enum channel_state state;
1010*5113495bSYour Name 	uint32_t chan_flags;
1011*5113495bSYour Name 	int32_t tx_power;
1012*5113495bSYour Name 	uint16_t min_bw;
1013*5113495bSYour Name 	uint16_t max_bw;
1014*5113495bSYour Name 	uint8_t ant_gain;
1015*5113495bSYour Name 	bool nol_chan;
1016*5113495bSYour Name 	bool nol_history;
1017*5113495bSYour Name #ifdef CONFIG_HOST_FIND_CHAN
1018*5113495bSYour Name 	bool is_chan_hop_blocked;
1019*5113495bSYour Name 	uint8_t ht40intol_flags;
1020*5113495bSYour Name #endif
1021*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
1022*5113495bSYour Name 	bool psd_flag;
1023*5113495bSYour Name 	uint16_t psd_eirp;
1024*5113495bSYour Name #endif
1025*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
1026*5113495bSYour Name 	uint8_t is_static_punctured;
1027*5113495bSYour Name 	enum reg_6g_ap_type power_type;
1028*5113495bSYour Name #endif
1029*5113495bSYour Name #ifndef CONFIG_REG_CLIENT
1030*5113495bSYour Name 	bool opclass_chan_disable;
1031*5113495bSYour Name #endif
1032*5113495bSYour Name };
1033*5113495bSYour Name 
1034*5113495bSYour Name /**
1035*5113495bSYour Name  * struct ap_cli_pwr_mode_info: AP and client power mode information
1036*5113495bSYour Name  * @is_mode_ap: Is it AP or CLIENT
1037*5113495bSYour Name  * @cli_type:  Is the client a default or subordinate
1038*5113495bSYour Name  * @ap_pwr_mode: LPI, SP or VLP
1039*5113495bSYour Name  */
1040*5113495bSYour Name struct ap_cli_pwr_mode_info {
1041*5113495bSYour Name 	bool is_mode_ap;
1042*5113495bSYour Name 	enum reg_6g_client_type cli_type;
1043*5113495bSYour Name 	enum reg_6g_ap_type ap_pwr_mode;
1044*5113495bSYour Name };
1045*5113495bSYour Name 
1046*5113495bSYour Name /**
1047*5113495bSYour Name  * enum supported_6g_pwr_types: 6G supported AP and Client power types
1048*5113495bSYour Name  * @REG_BEST_PWR_MODE: Best power mode
1049*5113495bSYour Name  * @REG_CURRENT_PWR_MODE: Current power mode
1050*5113495bSYour Name  * @REG_AP_LPI: LPI AP power mode
1051*5113495bSYour Name  * @REG_AP_SP: SP AP power mode
1052*5113495bSYour Name  * @REG_AP_VLP: VLP AP power mode
1053*5113495bSYour Name  * @REG_CLI_DEF_LPI: LPI default client mode
1054*5113495bSYour Name  * @REG_CLI_DEF_SP: SP default client mode
1055*5113495bSYour Name  * @REG_CLI_DEF_VLP: VLP default client mode
1056*5113495bSYour Name  * @REG_CLI_SUB_LPI: LPI subordinate client mode
1057*5113495bSYour Name  * @REG_CLI_SUB_SP: SP subordinate client mode
1058*5113495bSYour Name  * @REG_CLI_SUB_VLP: VLP subordinate client mode
1059*5113495bSYour Name  * @REG_INVALID_PWR_MODE: Invalid power mode
1060*5113495bSYour Name  */
1061*5113495bSYour Name enum supported_6g_pwr_types {
1062*5113495bSYour Name 	REG_BEST_PWR_MODE    = -1,
1063*5113495bSYour Name 	REG_CURRENT_PWR_MODE = 0,
1064*5113495bSYour Name 	REG_AP_LPI           = 1,
1065*5113495bSYour Name 	REG_AP_SP            = 2,
1066*5113495bSYour Name 	REG_AP_VLP           = 3,
1067*5113495bSYour Name 	REG_CLI_DEF_LPI      = 4,
1068*5113495bSYour Name 	REG_CLI_DEF_SP       = 5,
1069*5113495bSYour Name 	REG_CLI_DEF_VLP      = 6,
1070*5113495bSYour Name 	REG_CLI_SUB_LPI      = 7,
1071*5113495bSYour Name 	REG_CLI_SUB_SP       = 8,
1072*5113495bSYour Name 	REG_CLI_SUB_VLP      = 9,
1073*5113495bSYour Name 	REG_INVALID_PWR_MODE = 10,
1074*5113495bSYour Name };
1075*5113495bSYour Name 
1076*5113495bSYour Name #define MAX_PWR_TYPES 10
1077*5113495bSYour Name /**
1078*5113495bSYour Name  * struct psd_val: Regulatory power information
1079*5113495bSYour Name  * @psd_flag: Boolean to indicate if PSD is supported or not
1080*5113495bSYour Name  * @psd_eirp: PSD power
1081*5113495bSYour Name  * @tx_power: Maximum EIRP
1082*5113495bSYour Name  */
1083*5113495bSYour Name struct psd_val {
1084*5113495bSYour Name 	bool psd_flag;
1085*5113495bSYour Name 	uint16_t psd_eirp;
1086*5113495bSYour Name 	uint32_t tx_power;
1087*5113495bSYour Name };
1088*5113495bSYour Name 
1089*5113495bSYour Name /**
1090*5113495bSYour Name  * struct super_chan_info: Information of a 6G channel for every power
1091*5113495bSYour Name  * mode
1092*5113495bSYour Name  * @power_types: Bitmap whose bit positions indicate the power modes supported
1093*5113495bSYour Name  * by a channel
1094*5113495bSYour Name  * @best_power_mode: Best power mode of a channel
1095*5113495bSYour Name  * @min_bw: Array of minimum bandwidths per power mode
1096*5113495bSYour Name  * @max_bw: Array of maximum bandwidths per power mode
1097*5113495bSYour Name  * @chan_flags_arr: Array of channel flags
1098*5113495bSYour Name  * @reg_chan_pwr: Array of powers
1099*5113495bSYour Name  * @state_arr: Array of states
1100*5113495bSYour Name  */
1101*5113495bSYour Name struct super_chan_info {
1102*5113495bSYour Name 	uint16_t power_types;
1103*5113495bSYour Name 	enum supported_6g_pwr_types best_power_mode;
1104*5113495bSYour Name 	uint16_t min_bw[MAX_PWR_TYPES];
1105*5113495bSYour Name 	uint16_t max_bw[MAX_PWR_TYPES];
1106*5113495bSYour Name 	uint32_t chan_flags_arr[MAX_PWR_TYPES];
1107*5113495bSYour Name 	struct psd_val reg_chan_pwr[MAX_PWR_TYPES];
1108*5113495bSYour Name 	enum channel_state state_arr[MAX_PWR_TYPES];
1109*5113495bSYour Name };
1110*5113495bSYour Name 
1111*5113495bSYour Name /**
1112*5113495bSYour Name  * struct regulatory: regulatory information
1113*5113495bSYour Name  * @reg_domain: regulatory domain pair
1114*5113495bSYour Name  * @eeprom_rd_ext: eeprom value
1115*5113495bSYour Name  * @country_code: current country in integer
1116*5113495bSYour Name  * @alpha2: current alpha2
1117*5113495bSYour Name  * @def_country: default country alpha2
1118*5113495bSYour Name  * @def_region: DFS region
1119*5113495bSYour Name  * @ctl_2g: 2G CTL value
1120*5113495bSYour Name  * @ctl_5g: 5G CTL value
1121*5113495bSYour Name  * @regpair: pointer to regulatory pair
1122*5113495bSYour Name  * @cc_src: country code src
1123*5113495bSYour Name  * @reg_flags: kernel regulatory flags
1124*5113495bSYour Name  */
1125*5113495bSYour Name struct regulatory {
1126*5113495bSYour Name 	uint32_t reg_domain;
1127*5113495bSYour Name 	uint32_t eeprom_rd_ext;
1128*5113495bSYour Name 	uint16_t country_code;
1129*5113495bSYour Name 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
1130*5113495bSYour Name 	uint8_t ctl_2g;
1131*5113495bSYour Name 	uint8_t ctl_5g;
1132*5113495bSYour Name 	const void *regpair;
1133*5113495bSYour Name 	enum country_src cc_src;
1134*5113495bSYour Name 	uint32_t reg_flags;
1135*5113495bSYour Name };
1136*5113495bSYour Name 
1137*5113495bSYour Name /**
1138*5113495bSYour Name  * struct chan_map
1139*5113495bSYour Name  * @center_freq: center freq in mhz
1140*5113495bSYour Name  * @chan_num: channel number
1141*5113495bSYour Name  * @min_bw: min bw
1142*5113495bSYour Name  * @max_bw: max bw
1143*5113495bSYour Name  */
1144*5113495bSYour Name struct chan_map {
1145*5113495bSYour Name 	qdf_freq_t center_freq;
1146*5113495bSYour Name 	uint8_t chan_num;
1147*5113495bSYour Name 	uint16_t min_bw;
1148*5113495bSYour Name 	uint16_t max_bw;
1149*5113495bSYour Name };
1150*5113495bSYour Name 
1151*5113495bSYour Name /**
1152*5113495bSYour Name  * struct bonded_channel
1153*5113495bSYour Name  * @start_ch: start channel
1154*5113495bSYour Name  * @end_ch: end channel
1155*5113495bSYour Name  */
1156*5113495bSYour Name struct bonded_channel {
1157*5113495bSYour Name 	uint8_t start_ch;
1158*5113495bSYour Name 	uint8_t end_ch;
1159*5113495bSYour Name };
1160*5113495bSYour Name 
1161*5113495bSYour Name /**
1162*5113495bSYour Name  * struct bonded_channel_freq
1163*5113495bSYour Name  * @start_freq: start channel frequency
1164*5113495bSYour Name  * @end_freq: end channel frequency
1165*5113495bSYour Name  */
1166*5113495bSYour Name struct bonded_channel_freq {
1167*5113495bSYour Name 	uint16_t start_freq;
1168*5113495bSYour Name 	uint16_t end_freq;
1169*5113495bSYour Name };
1170*5113495bSYour Name 
1171*5113495bSYour Name struct set_country {
1172*5113495bSYour Name 	uint8_t country[REG_ALPHA2_LEN + 1];
1173*5113495bSYour Name 	uint8_t pdev_id;
1174*5113495bSYour Name };
1175*5113495bSYour Name /**
1176*5113495bSYour Name  * enum ht_sec_ch_offset
1177*5113495bSYour Name  * @NO_SEC_CH: no secondary
1178*5113495bSYour Name  * @LOW_PRIMARY_CH: low primary
1179*5113495bSYour Name  * @HIGH_PRIMARY_CH: high primary
1180*5113495bSYour Name  */
1181*5113495bSYour Name enum ht_sec_ch_offset {
1182*5113495bSYour Name 	NO_SEC_CH = 0,
1183*5113495bSYour Name 	LOW_PRIMARY_CH = 1,
1184*5113495bSYour Name 	HIGH_PRIMARY_CH = 3,
1185*5113495bSYour Name };
1186*5113495bSYour Name 
1187*5113495bSYour Name enum cc_setting_code {
1188*5113495bSYour Name 	REG_SET_CC_STATUS_PASS = 0,
1189*5113495bSYour Name 	REG_CURRENT_ALPHA2_NOT_FOUND = 1,
1190*5113495bSYour Name 	REG_INIT_ALPHA2_NOT_FOUND = 2,
1191*5113495bSYour Name 	REG_SET_CC_CHANGE_NOT_ALLOWED = 3,
1192*5113495bSYour Name 	REG_SET_CC_STATUS_NO_MEMORY = 4,
1193*5113495bSYour Name 	REG_SET_CC_STATUS_FAIL = 5,
1194*5113495bSYour Name };
1195*5113495bSYour Name 
1196*5113495bSYour Name /**
1197*5113495bSYour Name  * struct cur_reg_rule
1198*5113495bSYour Name  * @start_freq: start frequency
1199*5113495bSYour Name  * @end_freq: end frequency
1200*5113495bSYour Name  * @max_bw: maximum bandwidth
1201*5113495bSYour Name  * @reg_power: regulatory power
1202*5113495bSYour Name  * @ant_gain: antenna gain
1203*5113495bSYour Name  * @flags: regulatory flags
1204*5113495bSYour Name  * @psd_flag: is PSD power used
1205*5113495bSYour Name  * @psd_eirp: maximum PSD EIRP value
1206*5113495bSYour Name  */
1207*5113495bSYour Name struct cur_reg_rule {
1208*5113495bSYour Name 	uint16_t start_freq;
1209*5113495bSYour Name 	uint16_t end_freq;
1210*5113495bSYour Name 	uint16_t max_bw;
1211*5113495bSYour Name 	uint8_t reg_power;
1212*5113495bSYour Name 	uint8_t ant_gain;
1213*5113495bSYour Name 	uint16_t flags;
1214*5113495bSYour Name 	bool psd_flag;
1215*5113495bSYour Name 	uint16_t psd_eirp;
1216*5113495bSYour Name };
1217*5113495bSYour Name 
1218*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
1219*5113495bSYour Name /**
1220*5113495bSYour Name  * struct cur_fcc_rule
1221*5113495bSYour Name  * @center_freq: center frequency
1222*5113495bSYour Name  * @tx_power: transmission power
1223*5113495bSYour Name  */
1224*5113495bSYour Name struct cur_fcc_rule {
1225*5113495bSYour Name 	uint16_t center_freq;
1226*5113495bSYour Name 	uint8_t tx_power;
1227*5113495bSYour Name };
1228*5113495bSYour Name #endif
1229*5113495bSYour Name 
1230*5113495bSYour Name /**
1231*5113495bSYour Name  * struct cur_regulatory_info
1232*5113495bSYour Name  * @psoc: psoc ptr
1233*5113495bSYour Name  * @status_code: status value
1234*5113495bSYour Name  * @num_phy: number of phy
1235*5113495bSYour Name  * @phy_id: phy id
1236*5113495bSYour Name  * @reg_dmn_pair: reg domain pair
1237*5113495bSYour Name  * @ctry_code: country code
1238*5113495bSYour Name  * @alpha2: country alpha2
1239*5113495bSYour Name  * @offload_enabled: offload enabled
1240*5113495bSYour Name  * @dfs_region: dfs region
1241*5113495bSYour Name  * @phybitmap: phy bit map
1242*5113495bSYour Name  * @min_bw_2g: minimum 2G bw
1243*5113495bSYour Name  * @max_bw_2g: maximum 2G bw
1244*5113495bSYour Name  * @min_bw_5g: minimum 5G bw
1245*5113495bSYour Name  * @max_bw_5g: maximum 5G bw
1246*5113495bSYour Name  * @num_2g_reg_rules: number 2G reg rules
1247*5113495bSYour Name  * @num_5g_reg_rules: number 5G  and 6G reg rules
1248*5113495bSYour Name  * @reg_6g_thresh_priority_freq: All frequencies greater or equal will be given
1249*5113495bSYour Name  * priority during channel selection by upper layer
1250*5113495bSYour Name  * @reg_rules_2g_ptr: ptr to 2G reg rules
1251*5113495bSYour Name  * @reg_rules_5g_ptr: ptr to 5G reg rules
1252*5113495bSYour Name  * @client_type: type of client
1253*5113495bSYour Name  * @rnr_tpe_usable: if RNR TPE octet is usable for country
1254*5113495bSYour Name  * @unspecified_ap_usable: if not set, AP usable for country
1255*5113495bSYour Name  * @domain_code_6g_ap: domain code for 6G AP
1256*5113495bSYour Name  * @domain_code_6g_client: domain code for 6G client in SP mode
1257*5113495bSYour Name  * @domain_code_6g_super_id: 6G super domain ID
1258*5113495bSYour Name  * @min_bw_6g_ap: minimum 6G bw for AP
1259*5113495bSYour Name  * @max_bw_6g_ap: maximum 6G bw for AP
1260*5113495bSYour Name  * @min_bw_6g_client: list of minimum 6G bw for clients
1261*5113495bSYour Name  * @max_bw_6g_client: list of maximum 6G bw for clients
1262*5113495bSYour Name  * @num_6g_reg_rules_ap: number of 6G reg rules for AP
1263*5113495bSYour Name  * @num_6g_reg_rules_client: list of number of 6G reg rules for client
1264*5113495bSYour Name  * @reg_rules_6g_ap_ptr: ptr to 6G AP reg rules
1265*5113495bSYour Name  * @reg_rules_6g_client_ptr: list of ptr to 6G client reg rules
1266*5113495bSYour Name  * @fcc_rules_ptr: ptr to fcc rules
1267*5113495bSYour Name  * @num_fcc_rules: Number of fcc rules sent by firmware
1268*5113495bSYour Name  */
1269*5113495bSYour Name struct cur_regulatory_info {
1270*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
1271*5113495bSYour Name 	enum cc_setting_code status_code;
1272*5113495bSYour Name 	uint8_t num_phy;
1273*5113495bSYour Name 	uint8_t phy_id;
1274*5113495bSYour Name 	uint16_t reg_dmn_pair;
1275*5113495bSYour Name 	uint16_t ctry_code;
1276*5113495bSYour Name 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
1277*5113495bSYour Name 	bool offload_enabled;
1278*5113495bSYour Name 	enum dfs_reg dfs_region;
1279*5113495bSYour Name 	uint32_t phybitmap;
1280*5113495bSYour Name 	uint32_t min_bw_2g;
1281*5113495bSYour Name 	uint32_t max_bw_2g;
1282*5113495bSYour Name 	uint32_t min_bw_5g;
1283*5113495bSYour Name 	uint32_t max_bw_5g;
1284*5113495bSYour Name 	uint32_t num_2g_reg_rules;
1285*5113495bSYour Name 	uint32_t num_5g_reg_rules;
1286*5113495bSYour Name 	qdf_freq_t reg_6g_thresh_priority_freq;
1287*5113495bSYour Name 	struct cur_reg_rule *reg_rules_2g_ptr;
1288*5113495bSYour Name 	struct cur_reg_rule *reg_rules_5g_ptr;
1289*5113495bSYour Name 	enum reg_6g_client_type client_type;
1290*5113495bSYour Name 	bool rnr_tpe_usable;
1291*5113495bSYour Name 	bool unspecified_ap_usable;
1292*5113495bSYour Name 	uint8_t domain_code_6g_ap[REG_CURRENT_MAX_AP_TYPE];
1293*5113495bSYour Name 	uint8_t domain_code_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE];
1294*5113495bSYour Name 	uint32_t domain_code_6g_super_id;
1295*5113495bSYour Name 	uint32_t min_bw_6g_ap[REG_CURRENT_MAX_AP_TYPE];
1296*5113495bSYour Name 	uint32_t max_bw_6g_ap[REG_CURRENT_MAX_AP_TYPE];
1297*5113495bSYour Name 	uint32_t min_bw_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE];
1298*5113495bSYour Name 	uint32_t max_bw_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE];
1299*5113495bSYour Name 	uint32_t num_6g_reg_rules_ap[REG_CURRENT_MAX_AP_TYPE];
1300*5113495bSYour Name 	uint32_t num_6g_reg_rules_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE];
1301*5113495bSYour Name 	struct cur_reg_rule *reg_rules_6g_ap_ptr[REG_CURRENT_MAX_AP_TYPE];
1302*5113495bSYour Name 	struct cur_reg_rule *reg_rules_6g_client_ptr[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE];
1303*5113495bSYour Name #ifdef CONFIG_REG_CLIENT
1304*5113495bSYour Name 	struct cur_fcc_rule *fcc_rules_ptr;
1305*5113495bSYour Name 	uint32_t num_fcc_rules;
1306*5113495bSYour Name #endif
1307*5113495bSYour Name };
1308*5113495bSYour Name 
1309*5113495bSYour Name #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ)
1310*5113495bSYour Name 
1311*5113495bSYour Name /**
1312*5113495bSYour Name  * enum reg_afc_event_type - indicates the type of AFC event from FW to host.
1313*5113495bSYour Name  * @REG_AFC_EVENT_POWER_INFO:
1314*5113495bSYour Name  * 1. For sending Power Info REG_AFC_EVENT_POWER_INFO event is used.
1315*5113495bSYour Name  * @REG_AFC_EVENT_TIMER_EXPIRY:
1316*5113495bSYour Name  * 2. For sending AFC expiry use REG_AFC_EVENT_TIMER_EXPIRY
1317*5113495bSYour Name  *
1318*5113495bSYour Name  * This type can be expanded in future as per requirements.
1319*5113495bSYour Name  */
1320*5113495bSYour Name enum reg_afc_event_type {
1321*5113495bSYour Name 	REG_AFC_EVENT_POWER_INFO = 1,
1322*5113495bSYour Name 	REG_AFC_EVENT_TIMER_EXPIRY = 2,
1323*5113495bSYour Name };
1324*5113495bSYour Name 
1325*5113495bSYour Name /**
1326*5113495bSYour Name  * enum reg_afc_expiry_event_subtype - indicates the AFC expiry subtype.
1327*5113495bSYour Name  * @REG_AFC_EXPIRY_EVENT_START:
1328*5113495bSYour Name  * 1. At boot up AFC expiry will contain AFC start.
1329*5113495bSYour Name  * @REG_AFC_EXPIRY_EVENT_RENEW:
1330*5113495bSYour Name  * 2. If AFC timer expires AFC_RENEW status code will be sent to host
1331*5113495bSYour Name  *    with expiry event.
1332*5113495bSYour Name  * @REG_AFC_EXPIRY_EVENT_SWITCH_TO_LPI:
1333*5113495bSYour Name  * 3. If AFC server is not responding to FW in specified time, FW will
1334*5113495bSYour Name  *    indicate host to switch to LPI.
1335*5113495bSYour Name  * @REG_AFC_EXPIRY_EVENT_STOP_TX:
1336*5113495bSYour Name  */
1337*5113495bSYour Name enum reg_afc_expiry_event_subtype {
1338*5113495bSYour Name 	REG_AFC_EXPIRY_EVENT_START = 1,
1339*5113495bSYour Name 	REG_AFC_EXPIRY_EVENT_RENEW = 2,
1340*5113495bSYour Name 	REG_AFC_EXPIRY_EVENT_SWITCH_TO_LPI = 3,
1341*5113495bSYour Name 	REG_AFC_EXPIRY_EVENT_STOP_TX = 4,
1342*5113495bSYour Name };
1343*5113495bSYour Name 
1344*5113495bSYour Name /**
1345*5113495bSYour Name  * enum reg_fw_afc_power_event_status_code
1346*5113495bSYour Name  * @REG_FW_AFC_POWER_EVENT_SUCCESS:
1347*5113495bSYour Name  * 0. AFC power event is success.
1348*5113495bSYour Name  * @REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED:
1349*5113495bSYour Name  * 1. If Host does not indicate AFC indication cmd within certain time
1350*5113495bSYour Name  *    of AFC expiry, REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED will be used.
1351*5113495bSYour Name  * @REG_FW_AFC_POWER_EVENT_RESP_PARSING_FAILURE:
1352*5113495bSYour Name  * 2. If FW is not able to parse afc_info, parsing_failure will be
1353*5113495bSYour Name  *    indicated using REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED.
1354*5113495bSYour Name  * @REG_FW_AFC_POWER_EVENT_FAILURE:
1355*5113495bSYour Name  * 3. If due to some local reason AFC event is failed, AFC event failure
1356*5113495bSYour Name  *    is indicated using REG_FW_AFC_POWER_EVENT_FAILURE.
1357*5113495bSYour Name  *
1358*5113495bSYour Name  * Firmware AFC power event status codes
1359*5113495bSYour Name  */
1360*5113495bSYour Name enum reg_fw_afc_power_event_status_code {
1361*5113495bSYour Name 	REG_FW_AFC_POWER_EVENT_SUCCESS = 0,
1362*5113495bSYour Name 	REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED = 1,
1363*5113495bSYour Name 	REG_FW_AFC_POWER_EVENT_RESP_PARSING_FAILURE = 2,
1364*5113495bSYour Name 	REG_FW_AFC_POWER_EVENT_FAILURE = 3,
1365*5113495bSYour Name };
1366*5113495bSYour Name 
1367*5113495bSYour Name /**
1368*5113495bSYour Name  * enum reg_afc_serv_resp_code - AFC server response codes
1369*5113495bSYour Name  * @REG_AFC_SERV_RESP_GENERAL_FAILURE:
1370*5113495bSYour Name  * @REG_AFC_SERV_RESP_SUCCESS:
1371*5113495bSYour Name  * @REG_AFC_SERV_RESP_VERSION_NOT_SUPPORTED:
1372*5113495bSYour Name  * @REG_AFC_SERV_RESP_DEVICE_UNALLOWED:
1373*5113495bSYour Name  * @REG_AFC_SERV_RESP_MISSING_PARAM:
1374*5113495bSYour Name  * @REG_AFC_SERV_RESP_INVALID_VALUE:
1375*5113495bSYour Name  * @REG_AFC_SERV_RESP_UNEXPECTED_PARAM:
1376*5113495bSYour Name  * @REG_AFC_SERV_RESP_UNSUPPORTED_SPECTRUM:
1377*5113495bSYour Name  *
1378*5113495bSYour Name  * The following reg_afc_server_resp_code is mutually exclusive.
1379*5113495bSYour Name  * This response code will be indicated to AFC server.
1380*5113495bSYour Name  * These codes are defined in WIFI spec doc for AFC as follows
1381*5113495bSYour Name  * -1: General Failure
1382*5113495bSYour Name  * 0:  Success
1383*5113495bSYour Name  * 100 - 199: General errors related to the protocol
1384*5113495bSYour Name  * 300 - 399: Error events specific to message exchange for the
1385*5113495bSYour Name  *            Available Spectrum Inquiry
1386*5113495bSYour Name  */
1387*5113495bSYour Name enum reg_afc_serv_resp_code {
1388*5113495bSYour Name 	REG_AFC_SERV_RESP_GENERAL_FAILURE = -1,
1389*5113495bSYour Name 	REG_AFC_SERV_RESP_SUCCESS = 0,
1390*5113495bSYour Name 	REG_AFC_SERV_RESP_VERSION_NOT_SUPPORTED = 100,
1391*5113495bSYour Name 	REG_AFC_SERV_RESP_DEVICE_UNALLOWED = 101,
1392*5113495bSYour Name 	REG_AFC_SERV_RESP_MISSING_PARAM = 102,
1393*5113495bSYour Name 	REG_AFC_SERV_RESP_INVALID_VALUE = 103,
1394*5113495bSYour Name 	REG_AFC_SERV_RESP_UNEXPECTED_PARAM = 106,
1395*5113495bSYour Name 	REG_AFC_SERV_RESP_UNSUPPORTED_SPECTRUM = 300,
1396*5113495bSYour Name };
1397*5113495bSYour Name 
1398*5113495bSYour Name /**
1399*5113495bSYour Name  * struct afc_freq_obj
1400*5113495bSYour Name  * @low_freq: Lower edge frequency
1401*5113495bSYour Name  * @high_freq: Upper edge frequency
1402*5113495bSYour Name  * @max_psd: Max PSD in 0.01 dBm/MHz units
1403*5113495bSYour Name  */
1404*5113495bSYour Name struct afc_freq_obj {
1405*5113495bSYour Name 	qdf_freq_t low_freq;
1406*5113495bSYour Name 	qdf_freq_t high_freq;
1407*5113495bSYour Name 	int16_t max_psd;
1408*5113495bSYour Name };
1409*5113495bSYour Name 
1410*5113495bSYour Name /**
1411*5113495bSYour Name  * struct chan_eirp_obj
1412*5113495bSYour Name  * @cfi: Channel frequency index
1413*5113495bSYour Name  * @eirp_power: Max EIRP power in 0.01 dBm units
1414*5113495bSYour Name  */
1415*5113495bSYour Name struct chan_eirp_obj {
1416*5113495bSYour Name 	uint8_t cfi;
1417*5113495bSYour Name 	int16_t eirp_power;
1418*5113495bSYour Name };
1419*5113495bSYour Name 
1420*5113495bSYour Name /**
1421*5113495bSYour Name  * struct afc_chan_obj
1422*5113495bSYour Name  * @global_opclass: Global Operating class
1423*5113495bSYour Name  * @num_chans: Number of channels
1424*5113495bSYour Name  * @chan_eirp_info: Pointer to afc channel EIRP object
1425*5113495bSYour Name  */
1426*5113495bSYour Name struct afc_chan_obj {
1427*5113495bSYour Name 	uint8_t global_opclass;
1428*5113495bSYour Name 	uint8_t num_chans;
1429*5113495bSYour Name 	struct chan_eirp_obj *chan_eirp_info;
1430*5113495bSYour Name };
1431*5113495bSYour Name 
1432*5113495bSYour Name /**
1433*5113495bSYour Name  * struct reg_afc_expiry_event
1434*5113495bSYour Name  * @request_id: AFC request id generated by the firmware
1435*5113495bSYour Name  * @event_subtype: AFC expiry event subtype
1436*5113495bSYour Name  */
1437*5113495bSYour Name struct reg_afc_expiry_event {
1438*5113495bSYour Name 	uint32_t request_id;
1439*5113495bSYour Name 	enum reg_afc_expiry_event_subtype event_subtype;
1440*5113495bSYour Name };
1441*5113495bSYour Name 
1442*5113495bSYour Name /**
1443*5113495bSYour Name  * struct reg_fw_afc_power_event
1444*5113495bSYour Name  * @resp_id: AFC server response id
1445*5113495bSYour Name  * @fw_status_code: firmware status code
1446*5113495bSYour Name  * @serv_resp_code: AFC server response code
1447*5113495bSYour Name  * @afc_wfa_version: AFC version
1448*5113495bSYour Name  * @avail_exp_time_d: Expiry date of the AFC power info
1449*5113495bSYour Name  * @avail_exp_time_t: Time left for expiry of the AFC power info
1450*5113495bSYour Name  * @num_freq_objs: Number of freq objects
1451*5113495bSYour Name  * @num_chan_objs: Number of channel objects
1452*5113495bSYour Name  * @afc_freq_info: Pointer to AFC freq object
1453*5113495bSYour Name  * @afc_chan_info: Pointer to AFC channel object
1454*5113495bSYour Name  */
1455*5113495bSYour Name struct reg_fw_afc_power_event {
1456*5113495bSYour Name 	uint32_t resp_id;
1457*5113495bSYour Name 	enum reg_fw_afc_power_event_status_code fw_status_code;
1458*5113495bSYour Name 	enum reg_afc_serv_resp_code serv_resp_code;
1459*5113495bSYour Name 	uint32_t afc_wfa_version;
1460*5113495bSYour Name 	uint32_t avail_exp_time_d;
1461*5113495bSYour Name 	uint32_t avail_exp_time_t;
1462*5113495bSYour Name 	uint8_t num_freq_objs;
1463*5113495bSYour Name 	uint8_t num_chan_objs;
1464*5113495bSYour Name 	struct afc_freq_obj *afc_freq_info;
1465*5113495bSYour Name 	struct afc_chan_obj *afc_chan_info;
1466*5113495bSYour Name };
1467*5113495bSYour Name 
1468*5113495bSYour Name /**
1469*5113495bSYour Name  * struct afc_regulatory_info
1470*5113495bSYour Name  * @psoc: psoc ptr
1471*5113495bSYour Name  * @phy_id: phy id
1472*5113495bSYour Name  * @event_type: AFC event type
1473*5113495bSYour Name  * @expiry_info: pointer to information present in the AFC expiry event
1474*5113495bSYour Name  * @power_info: pointer to information present in the AFC power event
1475*5113495bSYour Name  */
1476*5113495bSYour Name struct afc_regulatory_info {
1477*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
1478*5113495bSYour Name 	uint8_t phy_id;
1479*5113495bSYour Name 	enum reg_afc_event_type event_type;
1480*5113495bSYour Name 	union {
1481*5113495bSYour Name 		struct reg_afc_expiry_event *expiry_info;
1482*5113495bSYour Name 		struct reg_fw_afc_power_event *power_info;
1483*5113495bSYour Name 	};
1484*5113495bSYour Name };
1485*5113495bSYour Name #endif
1486*5113495bSYour Name 
1487*5113495bSYour Name /**
1488*5113495bSYour Name  * struct reg_rule_info
1489*5113495bSYour Name  * @alpha2: alpha2 of reg rules
1490*5113495bSYour Name  * @dfs_region: dfs region
1491*5113495bSYour Name  * @num_of_reg_rules: number of reg rules
1492*5113495bSYour Name  * @reg_rules: regulatory rules array
1493*5113495bSYour Name  * @num_of_6g_ap_reg_rules: number of 6g AP reg rules
1494*5113495bSYour Name  * @reg_rules_6g_ap: reg rules for all 6g AP
1495*5113495bSYour Name  * @num_of_6g_client_reg_rules: number of 6g client reg rules
1496*5113495bSYour Name  * @reg_rules_6g_client: reg rules for all 6g clients
1497*5113495bSYour Name  */
1498*5113495bSYour Name struct reg_rule_info {
1499*5113495bSYour Name 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
1500*5113495bSYour Name 	enum dfs_reg dfs_region;
1501*5113495bSYour Name 	uint8_t num_of_reg_rules;
1502*5113495bSYour Name 	struct cur_reg_rule reg_rules[MAX_REG_RULES];
1503*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
1504*5113495bSYour Name 	uint8_t num_of_6g_ap_reg_rules[REG_CURRENT_MAX_AP_TYPE];
1505*5113495bSYour Name 	struct cur_reg_rule reg_rules_6g_ap[REG_CURRENT_MAX_AP_TYPE][MAX_6G_REG_RULES];
1506*5113495bSYour Name 	uint8_t num_of_6g_client_reg_rules[REG_CURRENT_MAX_AP_TYPE];
1507*5113495bSYour Name 	struct cur_reg_rule reg_rules_6g_client[REG_CURRENT_MAX_AP_TYPE][MAX_6G_REG_RULES];
1508*5113495bSYour Name #endif
1509*5113495bSYour Name };
1510*5113495bSYour Name 
1511*5113495bSYour Name /**
1512*5113495bSYour Name  * enum reg_wifi_band
1513*5113495bSYour Name  * @REG_BAND_2G: 2G band
1514*5113495bSYour Name  * @REG_BAND_5G: 5G band
1515*5113495bSYour Name  * @REG_BAND_6G: 6G band
1516*5113495bSYour Name  * @REG_BAND_UNKNOWN: Unsupported band
1517*5113495bSYour Name  */
1518*5113495bSYour Name enum reg_wifi_band {
1519*5113495bSYour Name 	REG_BAND_2G,
1520*5113495bSYour Name 	REG_BAND_5G,
1521*5113495bSYour Name 	REG_BAND_6G,
1522*5113495bSYour Name 	REG_BAND_UNKNOWN
1523*5113495bSYour Name };
1524*5113495bSYour Name 
1525*5113495bSYour Name #ifdef DISABLE_UNII_SHARED_BANDS
1526*5113495bSYour Name /**
1527*5113495bSYour Name  * enum reg_unii_band
1528*5113495bSYour Name  * @REG_UNII_BAND_1: Disable UNII-1 band channels
1529*5113495bSYour Name  * @REG_UNII_BAND_2A: Disable UNII-2A band channels
1530*5113495bSYour Name  */
1531*5113495bSYour Name enum reg_unii_band {
1532*5113495bSYour Name 	REG_UNII_BAND_1 = 0x0,
1533*5113495bSYour Name 	REG_UNII_BAND_2A = 0x1,
1534*5113495bSYour Name };
1535*5113495bSYour Name #endif
1536*5113495bSYour Name 
1537*5113495bSYour Name #define REG_BAND_MASK_ALL (BIT(REG_BAND_2G) | BIT(REG_BAND_5G) \
1538*5113495bSYour Name 			  | BIT(REG_BAND_6G))
1539*5113495bSYour Name 
1540*5113495bSYour Name /* Avoid the use of band_info as it does not support 6GHz band. Use
1541*5113495bSYour Name  * reg_wifi_band, as it supports the 6GHz band
1542*5113495bSYour Name  */
1543*5113495bSYour Name /**
1544*5113495bSYour Name  * enum band_info
1545*5113495bSYour Name  * @BAND_ALL:all bands
1546*5113495bSYour Name  * @BAND_2G: 2G band
1547*5113495bSYour Name  * @BAND_5G: 5G band
1548*5113495bSYour Name  * @BAND_UNKNOWN: Unsupported band
1549*5113495bSYour Name  */
1550*5113495bSYour Name enum band_info {
1551*5113495bSYour Name 	BAND_ALL,
1552*5113495bSYour Name 	BAND_2G,
1553*5113495bSYour Name 	BAND_5G,
1554*5113495bSYour Name 	BAND_UNKNOWN
1555*5113495bSYour Name };
1556*5113495bSYour Name 
1557*5113495bSYour Name /**
1558*5113495bSYour Name  * enum restart_beaconing_on_ch_avoid_rule: control the beaconing entity to
1559*5113495bSYour Name  * move away from active LTE channels
1560*5113495bSYour Name  * @CH_AVOID_RULE_DO_NOT_RESTART: Do not move from active LTE
1561*5113495bSYour Name  *                              channels
1562*5113495bSYour Name  * @CH_AVOID_RULE_RESTART: Move from active LTE channels
1563*5113495bSYour Name  * @CH_AVOID_RULE_RESTART_24G_ONLY: move from 2.4G active LTE
1564*5113495bSYour Name  *                                channels only
1565*5113495bSYour Name  */
1566*5113495bSYour Name enum restart_beaconing_on_ch_avoid_rule {
1567*5113495bSYour Name 	CH_AVOID_RULE_DO_NOT_RESTART,
1568*5113495bSYour Name 	CH_AVOID_RULE_RESTART,
1569*5113495bSYour Name 	CH_AVOID_RULE_RESTART_24G_ONLY,
1570*5113495bSYour Name };
1571*5113495bSYour Name 
1572*5113495bSYour Name /**
1573*5113495bSYour Name  * struct reg_config_vars
1574*5113495bSYour Name  * @enable_11d_support: enable 11d support
1575*5113495bSYour Name  * @scan_11d_interval: 11d scan interval in ms
1576*5113495bSYour Name  * @userspace_ctry_priority: user priority
1577*5113495bSYour Name  * @band_capability: band capability
1578*5113495bSYour Name  * @dfs_enabled: dfs enabled
1579*5113495bSYour Name  * @indoor_chan_enabled: indoor channel support
1580*5113495bSYour Name  * @force_ssc_disable_indoor_channel: Disable indoor channel on sap start
1581*5113495bSYour Name  * @restart_beaconing: control the beaconing entity to move
1582*5113495bSYour Name  * away from active LTE channels
1583*5113495bSYour Name  * @enable_srd_chan_in_master_mode: SRD channel support in master mode
1584*5113495bSYour Name  * @enable_11d_in_world_mode: enable 11d in world mode
1585*5113495bSYour Name  * @enable_5dot9_ghz_chan_in_master_mode: 5.9 GHz channel support in
1586*5113495bSYour Name  * master mode
1587*5113495bSYour Name  * @retain_nol_across_regdmn_update: Retain the NOL list across the regdomain.
1588*5113495bSYour Name  * @coex_unsafe_chan_nb_user_prefer: Honor coex unsafe chan cmd from firmware or
1589*5113495bSYour Name  * userspace
1590*5113495bSYour Name  * @coex_unsafe_chan_reg_disable: To disable reg channels for received coex
1591*5113495bSYour Name  * unsafe channels list
1592*5113495bSYour Name  * @enable_6ghz_sp_pwrmode_supp: Enable target 6 GHz Standard Power mode support
1593*5113495bSYour Name  * @afc_disable_timer_check: Disable target AFC timer check
1594*5113495bSYour Name  * @afc_disable_request_id_check: Disable target AFC request id check
1595*5113495bSYour Name  * @is_afc_reg_noaction: Whether no action to AFC power event
1596*5113495bSYour Name  * @sta_sap_scc_on_indoor_channel: Value of sap+sta scc on indoor support
1597*5113495bSYour Name  * @p2p_indoor_ch_support: Allow P2P GO in indoor channels
1598*5113495bSYour Name  */
1599*5113495bSYour Name struct reg_config_vars {
1600*5113495bSYour Name 	uint32_t enable_11d_support;
1601*5113495bSYour Name 	uint32_t scan_11d_interval;
1602*5113495bSYour Name 	uint32_t userspace_ctry_priority;
1603*5113495bSYour Name 	uint32_t band_capability;
1604*5113495bSYour Name 	uint32_t dfs_enabled;
1605*5113495bSYour Name 	uint32_t indoor_chan_enabled;
1606*5113495bSYour Name 	uint32_t force_ssc_disable_indoor_channel;
1607*5113495bSYour Name 	enum restart_beaconing_on_ch_avoid_rule restart_beaconing;
1608*5113495bSYour Name 	uint8_t enable_srd_chan_in_master_mode;
1609*5113495bSYour Name 	bool enable_11d_in_world_mode;
1610*5113495bSYour Name 	bool enable_5dot9_ghz_chan_in_master_mode;
1611*5113495bSYour Name 	bool retain_nol_across_regdmn_update;
1612*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID_EXT
1613*5113495bSYour Name 	bool coex_unsafe_chan_nb_user_prefer;
1614*5113495bSYour Name 	bool coex_unsafe_chan_reg_disable;
1615*5113495bSYour Name #endif
1616*5113495bSYour Name #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ)
1617*5113495bSYour Name 	bool enable_6ghz_sp_pwrmode_supp;
1618*5113495bSYour Name 	bool afc_disable_timer_check;
1619*5113495bSYour Name 	bool afc_disable_request_id_check;
1620*5113495bSYour Name 	bool is_afc_reg_noaction;
1621*5113495bSYour Name #endif
1622*5113495bSYour Name 	bool sta_sap_scc_on_indoor_channel;
1623*5113495bSYour Name 	bool p2p_indoor_ch_support;
1624*5113495bSYour Name };
1625*5113495bSYour Name 
1626*5113495bSYour Name /**
1627*5113495bSYour Name  * struct reg_freq_range
1628*5113495bSYour Name  * @low_freq: low frequency
1629*5113495bSYour Name  * @high_freq: high frequency
1630*5113495bSYour Name  */
1631*5113495bSYour Name struct reg_freq_range {
1632*5113495bSYour Name 	uint32_t low_freq;
1633*5113495bSYour Name 	uint32_t high_freq;
1634*5113495bSYour Name };
1635*5113495bSYour Name 
1636*5113495bSYour Name /**
1637*5113495bSYour Name  * enum direction
1638*5113495bSYour Name  * @NORTHBOUND: northbound
1639*5113495bSYour Name  * @SOUTHBOUND: southbound
1640*5113495bSYour Name  */
1641*5113495bSYour Name enum direction {
1642*5113495bSYour Name 	NORTHBOUND,
1643*5113495bSYour Name 	SOUTHBOUND,
1644*5113495bSYour Name };
1645*5113495bSYour Name 
1646*5113495bSYour Name /**
1647*5113495bSYour Name  * struct mas_chan_params
1648*5113495bSYour Name  * @dfs_region: dfs region
1649*5113495bSYour Name  * @phybitmap: phybitmap
1650*5113495bSYour Name  * @mas_chan_list: master chan list for 2GHz and 5GHz channels
1651*5113495bSYour Name  * @is_6g_channel_list_populated: indicates the channel lists are populated
1652*5113495bSYour Name  * @mas_chan_list_6g_ap: master chan list for 6GHz AP channels
1653*5113495bSYour Name  * @mas_chan_list_6g_client: master chan list for 6GHz client
1654*5113495bSYour Name  * @is_6g_afc_power_event_received: indicates if the AFC event is received.
1655*5113495bSYour Name  * @mas_chan_list_6g_afc: master chan list for 6GHz AFC
1656*5113495bSYour Name  * @default_country: default country
1657*5113495bSYour Name  * @current_country: current country
1658*5113495bSYour Name  * @def_region_domain: default reg domain
1659*5113495bSYour Name  * @def_country_code: default country code
1660*5113495bSYour Name  * @reg_dmn_pair: reg domain pair
1661*5113495bSYour Name  * @reg_6g_superid: 6G super domain ID
1662*5113495bSYour Name  * @ctry_code: country code
1663*5113495bSYour Name  * @reg_rules: regulatory rules
1664*5113495bSYour Name  * @ap_pwr_type: type of AP
1665*5113495bSYour Name  * @client_type: type of client
1666*5113495bSYour Name  * @rnr_tpe_usable: if RNR TPE octet is usable for country
1667*5113495bSYour Name  * @unspecified_ap_usable: if not set, AP usable for country
1668*5113495bSYour Name  * @reg_6g_thresh_priority_freq: All frequencies greater or equal will be given
1669*5113495bSYour Name  * priority during channel selection by upper layer
1670*5113495bSYour Name  * @max_bw_5g: Maximum 5g Bandwidth
1671*5113495bSYour Name  */
1672*5113495bSYour Name struct mas_chan_params {
1673*5113495bSYour Name 	enum dfs_reg dfs_region;
1674*5113495bSYour Name 	uint32_t phybitmap;
1675*5113495bSYour Name 	struct regulatory_channel mas_chan_list[NUM_CHANNELS];
1676*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
1677*5113495bSYour Name 	bool is_6g_channel_list_populated;
1678*5113495bSYour Name 	struct regulatory_channel mas_chan_list_6g_ap[REG_CURRENT_MAX_AP_TYPE][NUM_6GHZ_CHANNELS];
1679*5113495bSYour Name 	struct regulatory_channel mas_chan_list_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE][NUM_6GHZ_CHANNELS];
1680*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
1681*5113495bSYour Name 	bool is_6g_afc_power_event_received;
1682*5113495bSYour Name 	struct regulatory_channel mas_chan_list_6g_afc[NUM_6GHZ_CHANNELS];
1683*5113495bSYour Name #endif
1684*5113495bSYour Name #endif
1685*5113495bSYour Name 	char default_country[REG_ALPHA2_LEN + 1];
1686*5113495bSYour Name 	char current_country[REG_ALPHA2_LEN + 1];
1687*5113495bSYour Name 	uint16_t def_region_domain;
1688*5113495bSYour Name 	uint16_t def_country_code;
1689*5113495bSYour Name 	uint32_t reg_dmn_pair;
1690*5113495bSYour Name 	uint16_t reg_6g_superid;
1691*5113495bSYour Name 	uint16_t ctry_code;
1692*5113495bSYour Name 	struct reg_rule_info reg_rules;
1693*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
1694*5113495bSYour Name 	enum reg_6g_ap_type ap_pwr_type;
1695*5113495bSYour Name 	enum reg_6g_client_type client_type;
1696*5113495bSYour Name 	bool rnr_tpe_usable;
1697*5113495bSYour Name 	bool unspecified_ap_usable;
1698*5113495bSYour Name 	qdf_freq_t reg_6g_thresh_priority_freq;
1699*5113495bSYour Name #endif
1700*5113495bSYour Name 	uint16_t max_bw_5g;
1701*5113495bSYour Name };
1702*5113495bSYour Name 
1703*5113495bSYour Name /**
1704*5113495bSYour Name  * enum cc_regdmn_flag: Regdomain flags
1705*5113495bSYour Name  * @INVALID_CC:    Invalid flag
1706*5113495bSYour Name  * @CC_IS_SET:     Country code is set
1707*5113495bSYour Name  * @REGDMN_IS_SET: Regdomain ID is set
1708*5113495bSYour Name  * @ALPHA_IS_SET:  Country ISO is set
1709*5113495bSYour Name  */
1710*5113495bSYour Name enum cc_regdmn_flag {
1711*5113495bSYour Name 	INVALID_CC,
1712*5113495bSYour Name 	CC_IS_SET,
1713*5113495bSYour Name 	REGDMN_IS_SET,
1714*5113495bSYour Name 	ALPHA_IS_SET,
1715*5113495bSYour Name };
1716*5113495bSYour Name 
1717*5113495bSYour Name /**
1718*5113495bSYour Name  * struct cc_regdmn_s: User country code or regdomain
1719*5113495bSYour Name  * @cc: Union of country code/regulatory domain
1720*5113495bSYour Name  * @cc.country_code: Country code
1721*5113495bSYour Name  * @cc.regdmn: Regulatory domain
1722*5113495bSYour Name  * @cc.regdmn.reg_2g_5g_pair_id:  Regdomain pair ID (2Ghz + 5Ghz domain pair)
1723*5113495bSYour Name  * @cc.regdmn.sixg_superdmn_id: 6Ghz super domain id
1724*5113495bSYour Name  * @cc.alpha: Country ISO
1725*5113495bSYour Name  * @flags: Regdomain flags (see enum cc_regdmn_flag)
1726*5113495bSYour Name  */
1727*5113495bSYour Name struct cc_regdmn_s {
1728*5113495bSYour Name 	union {
1729*5113495bSYour Name 		uint16_t country_code;
1730*5113495bSYour Name 		struct {
1731*5113495bSYour Name 			uint16_t reg_2g_5g_pair_id;
1732*5113495bSYour Name 			uint16_t sixg_superdmn_id;
1733*5113495bSYour Name 		} regdmn;
1734*5113495bSYour Name 		uint8_t alpha[REG_ALPHA2_LEN + 1];
1735*5113495bSYour Name 	} cc;
1736*5113495bSYour Name 	uint8_t flags;
1737*5113495bSYour Name };
1738*5113495bSYour Name 
1739*5113495bSYour Name /**
1740*5113495bSYour Name  * struct cur_regdmn_info: Current regulatory info
1741*5113495bSYour Name  * @regdmn_pair_id: Current regdomain pair ID
1742*5113495bSYour Name  * @dmn_id_2g: 2GHz regdomain ID
1743*5113495bSYour Name  * @dmn_id_5g: 5GHz regdomain ID
1744*5113495bSYour Name  * @ctl_2g: 2GHz CTL value
1745*5113495bSYour Name  * @ctl_5g: 5GHzCTL value
1746*5113495bSYour Name  * @dfs_region: dfs region
1747*5113495bSYour Name  */
1748*5113495bSYour Name struct cur_regdmn_info {
1749*5113495bSYour Name 	uint16_t regdmn_pair_id;
1750*5113495bSYour Name 	uint16_t dmn_id_2g;
1751*5113495bSYour Name 	uint16_t dmn_id_5g;
1752*5113495bSYour Name 	uint8_t ctl_2g;
1753*5113495bSYour Name 	uint8_t ctl_5g;
1754*5113495bSYour Name 	uint8_t dfs_region;
1755*5113495bSYour Name };
1756*5113495bSYour Name 
1757*5113495bSYour Name /**
1758*5113495bSYour Name  * struct ch_avoid_freq_type
1759*5113495bSYour Name  * @start_freq: start freq
1760*5113495bSYour Name  * @end_freq: end freq
1761*5113495bSYour Name  * @txpower: txpower
1762*5113495bSYour Name  * @is_valid_txpower: Is @txpower valid
1763*5113495bSYour Name  */
1764*5113495bSYour Name struct ch_avoid_freq_type {
1765*5113495bSYour Name 	qdf_freq_t start_freq;
1766*5113495bSYour Name 	qdf_freq_t end_freq;
1767*5113495bSYour Name 	int32_t txpower;
1768*5113495bSYour Name 	bool is_valid_txpower;
1769*5113495bSYour Name };
1770*5113495bSYour Name 
1771*5113495bSYour Name /**
1772*5113495bSYour Name  * struct ch_avoid_ind_type
1773*5113495bSYour Name  * @ch_avoid_range_cnt: count
1774*5113495bSYour Name  * @avoid_freq_range: avoid freq range array
1775*5113495bSYour Name  * @restriction_mask: restriction mask to apply txpower
1776*5113495bSYour Name  */
1777*5113495bSYour Name struct ch_avoid_ind_type {
1778*5113495bSYour Name 	uint32_t ch_avoid_range_cnt;
1779*5113495bSYour Name 	struct ch_avoid_freq_type avoid_freq_range[CH_AVOID_MAX_RANGE];
1780*5113495bSYour Name 	uint32_t restriction_mask;
1781*5113495bSYour Name };
1782*5113495bSYour Name 
1783*5113495bSYour Name /**
1784*5113495bSYour Name  * struct unsafe_ch_list
1785*5113495bSYour Name  * @chan_cnt: no.of channels
1786*5113495bSYour Name  * @chan_freq_list: channel frequency list
1787*5113495bSYour Name  * @txpower: Tx power per channel
1788*5113495bSYour Name  * @is_valid_txpower: Is @txpower valid per channel
1789*5113495bSYour Name  */
1790*5113495bSYour Name struct unsafe_ch_list {
1791*5113495bSYour Name 	uint16_t chan_cnt;
1792*5113495bSYour Name 	uint16_t chan_freq_list[NUM_CHANNELS];
1793*5113495bSYour Name 	int32_t txpower[NUM_CHANNELS];
1794*5113495bSYour Name 	bool is_valid_txpower[NUM_CHANNELS];
1795*5113495bSYour Name };
1796*5113495bSYour Name 
1797*5113495bSYour Name /**
1798*5113495bSYour Name  * struct avoid_freq_ind_data
1799*5113495bSYour Name  * @freq_list: frequency list
1800*5113495bSYour Name  * @chan_list: channel list
1801*5113495bSYour Name  */
1802*5113495bSYour Name struct avoid_freq_ind_data {
1803*5113495bSYour Name 	struct ch_avoid_ind_type freq_list;
1804*5113495bSYour Name 	struct unsafe_ch_list chan_list;
1805*5113495bSYour Name };
1806*5113495bSYour Name 
1807*5113495bSYour Name /**
1808*5113495bSYour Name  * struct reg_sched_payload
1809*5113495bSYour Name  * @psoc: psoc ptr
1810*5113495bSYour Name  * @pdev: pdev ptr
1811*5113495bSYour Name  * @ch_avoid_ind: if avoidance event indicated
1812*5113495bSYour Name  * @avoid_info: chan avoid info if @ch_avoid_ind is true
1813*5113495bSYour Name  */
1814*5113495bSYour Name struct reg_sched_payload {
1815*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
1816*5113495bSYour Name 	struct wlan_objmgr_pdev *pdev;
1817*5113495bSYour Name 	bool ch_avoid_ind;
1818*5113495bSYour Name 	struct avoid_freq_ind_data avoid_info;
1819*5113495bSYour Name };
1820*5113495bSYour Name 
1821*5113495bSYour Name #define FIVEG_STARTING_FREQ        5000
1822*5113495bSYour Name #define TWOG_STARTING_FREQ         2407
1823*5113495bSYour Name #define TWOG_CHAN_14_IN_MHZ        2484
1824*5113495bSYour Name #define TWOG_CHAN_1_IN_MHZ         2412
1825*5113495bSYour Name #define TWOG_CHAN_5_IN_MHZ         2432
1826*5113495bSYour Name #define TWOG_CHAN_6_IN_MHZ         2437
1827*5113495bSYour Name #define TWOG_CHAN_9_IN_MHZ         2452
1828*5113495bSYour Name #define TWOG_CHAN_13_IN_MHZ        2472
1829*5113495bSYour Name #define FIVEG_CHAN_36_IN_MHZ       5180
1830*5113495bSYour Name #define FIVEG_CHAN_177_IN_MHZ      5885
1831*5113495bSYour Name #define SIXG_CHAN_2_IN_MHZ         5935
1832*5113495bSYour Name #define SIXG_CHAN_1_IN_MHZ         5955
1833*5113495bSYour Name #define SIXG_CHAN_233_IN_MHZ       7115
1834*5113495bSYour Name 
1835*5113495bSYour Name #define HT40_SEC_OFFSET              20
1836*5113495bSYour Name 
1837*5113495bSYour Name #define IEEE_2GHZ_CH1                 1
1838*5113495bSYour Name #define IEEE_2GHZ_CH14               14
1839*5113495bSYour Name #define IEEE_5GHZ_CH36               36
1840*5113495bSYour Name #define IEEE_6GHZ_CH1                 1
1841*5113495bSYour Name #define IEEE_6GHZ_CH2                 2
1842*5113495bSYour Name #define IEEE_CH_SEP                   5
1843*5113495bSYour Name 
1844*5113495bSYour Name /**
1845*5113495bSYour Name  * struct reg_ctl_params - reg ctl and regd info
1846*5113495bSYour Name  * @regd: regdomain pair
1847*5113495bSYour Name  * @regd_2g: 2g sub domain code
1848*5113495bSYour Name  * @regd_5g: 5g sub domain code
1849*5113495bSYour Name  * @ctl_2g: 2g ctl info
1850*5113495bSYour Name  * @ctl_5g: 5g ctl info
1851*5113495bSYour Name  */
1852*5113495bSYour Name struct reg_ctl_params {
1853*5113495bSYour Name 	uint32_t regd;
1854*5113495bSYour Name 	uint16_t regd_2g;
1855*5113495bSYour Name 	uint16_t regd_5g;
1856*5113495bSYour Name 	uint8_t ctl_2g;
1857*5113495bSYour Name 	uint8_t ctl_5g;
1858*5113495bSYour Name };
1859*5113495bSYour Name 
1860*5113495bSYour Name /**
1861*5113495bSYour Name  * enum reg_phymode - Regulatory phymode
1862*5113495bSYour Name  * @REG_PHYMODE_INVALID: Invalid phymode
1863*5113495bSYour Name  * @REG_PHYMODE_11B: 802.11b phymode
1864*5113495bSYour Name  * @REG_PHYMODE_11G: 802.11g phymode
1865*5113495bSYour Name  * @REG_PHYMODE_11A: 802.11a phymode
1866*5113495bSYour Name  * @REG_PHYMODE_11N: 802.11n phymode
1867*5113495bSYour Name  * @REG_PHYMODE_11AC: 802.11ac phymode
1868*5113495bSYour Name  * @REG_PHYMODE_11AX: 802.11ax phymode
1869*5113495bSYour Name  * @REG_PHYMODE_11BE: 802.11be phymode
1870*5113495bSYour Name  * @REG_PHYMODE_MAX: placeholder for future phymodes
1871*5113495bSYour Name  */
1872*5113495bSYour Name enum reg_phymode {
1873*5113495bSYour Name 	REG_PHYMODE_INVALID,
1874*5113495bSYour Name 	REG_PHYMODE_11B,
1875*5113495bSYour Name 	REG_PHYMODE_11G,
1876*5113495bSYour Name 	REG_PHYMODE_11A,
1877*5113495bSYour Name 	REG_PHYMODE_11N,
1878*5113495bSYour Name 	REG_PHYMODE_11AC,
1879*5113495bSYour Name 	REG_PHYMODE_11AX,
1880*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
1881*5113495bSYour Name 	REG_PHYMODE_11BE,
1882*5113495bSYour Name #endif
1883*5113495bSYour Name 	REG_PHYMODE_MAX,
1884*5113495bSYour Name };
1885*5113495bSYour Name 
1886*5113495bSYour Name /**
1887*5113495bSYour Name  * struct chan_power_info - TPE containing power info per channel chunk
1888*5113495bSYour Name  * @chan_cfreq: channel center freq (MHz)
1889*5113495bSYour Name  * @tx_power: transmit power (dBm)
1890*5113495bSYour Name  */
1891*5113495bSYour Name struct chan_power_info {
1892*5113495bSYour Name 	qdf_freq_t chan_cfreq;
1893*5113495bSYour Name 	int8_t tx_power;
1894*5113495bSYour Name };
1895*5113495bSYour Name 
1896*5113495bSYour Name /**
1897*5113495bSYour Name  * struct reg_tpc_power_info - regulatory TPC power info
1898*5113495bSYour Name  * @is_psd_power: is PSD power or not
1899*5113495bSYour Name  * @eirp_power: Maximum EIRP power (dBm), valid only if power is PSD
1900*5113495bSYour Name  * @power_type_6g: type of power (SP/LPI/VLP)
1901*5113495bSYour Name  * @num_pwr_levels: number of power levels
1902*5113495bSYour Name  * @reg_max: Array of maximum TX power (dBm) per PSD value
1903*5113495bSYour Name  * @ap_constraint_power: AP constraint power (dBm)
1904*5113495bSYour Name  * @frequency: Array of operating frequency
1905*5113495bSYour Name  * @tpe: TPE values processed from TPE IE
1906*5113495bSYour Name  * @chan_power_info: power info to send to FW
1907*5113495bSYour Name  * @is_power_constraint_abs: is power constraint absolute or not
1908*5113495bSYour Name  */
1909*5113495bSYour Name struct reg_tpc_power_info {
1910*5113495bSYour Name 	bool is_psd_power;
1911*5113495bSYour Name 	int8_t eirp_power;
1912*5113495bSYour Name 	uint8_t power_type_6g;
1913*5113495bSYour Name 	uint8_t num_pwr_levels;
1914*5113495bSYour Name 	uint8_t reg_max[MAX_NUM_PWR_LEVEL];
1915*5113495bSYour Name 	uint8_t ap_constraint_power;
1916*5113495bSYour Name 	qdf_freq_t frequency[MAX_NUM_PWR_LEVEL];
1917*5113495bSYour Name 	uint8_t tpe[MAX_NUM_PWR_LEVEL];
1918*5113495bSYour Name 	struct chan_power_info chan_power_info[MAX_NUM_PWR_LEVEL];
1919*5113495bSYour Name 	bool is_power_constraint_abs;
1920*5113495bSYour Name };
1921*5113495bSYour Name 
1922*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID_EXT
1923*5113495bSYour Name typedef struct unsafe_ch_list avoid_ch_ext_list;
1924*5113495bSYour Name /**
1925*5113495bSYour Name  * struct chan_5g_center_freq
1926*5113495bSYour Name  * @center_freq_20: center frequency of max 200Mhz
1927*5113495bSYour Name  * @center_freq_40: center frequency of max 40Mhz
1928*5113495bSYour Name  * @center_freq_80: center frequency of max 80Mhz
1929*5113495bSYour Name  * @center_freq_160: center frequency of max 160Mhz
1930*5113495bSYour Name  */
1931*5113495bSYour Name struct chan_5g_center_freq {
1932*5113495bSYour Name 	qdf_freq_t center_freq_20;
1933*5113495bSYour Name 	qdf_freq_t center_freq_40;
1934*5113495bSYour Name 	qdf_freq_t center_freq_80;
1935*5113495bSYour Name 	qdf_freq_t center_freq_160;
1936*5113495bSYour Name };
1937*5113495bSYour Name 
1938*5113495bSYour Name #define INVALID_CENTER_FREQ 0
1939*5113495bSYour Name /*MAX 5g channel numbers, not include dsrc*/
1940*5113495bSYour Name #define MAX_5G_CHAN_NUM 28
1941*5113495bSYour Name 
1942*5113495bSYour Name #endif
1943*5113495bSYour Name 
1944*5113495bSYour Name /**
1945*5113495bSYour Name  * enum HOST_REGDMN_MODE:
1946*5113495bSYour Name  * @HOST_REGDMN_MODE_11A: 11a channels
1947*5113495bSYour Name  * @HOST_REGDMN_MODE_TURBO: 11a turbo-only channels
1948*5113495bSYour Name  * @HOST_REGDMN_MODE_11B: 11b channels
1949*5113495bSYour Name  * @HOST_REGDMN_MODE_PUREG: 11g channels (OFDM only)
1950*5113495bSYour Name  * @HOST_REGDMN_MODE_11G: historical
1951*5113495bSYour Name  * @HOST_REGDMN_MODE_108G: 11g+Turbo channels
1952*5113495bSYour Name  * @HOST_REGDMN_MODE_108A: 11a+Turbo channels
1953*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT20_2G: 2GHz, VHT20
1954*5113495bSYour Name  * @HOST_REGDMN_MODE_XR: XR channels
1955*5113495bSYour Name  * @HOST_REGDMN_MODE_11A_HALF_RATE: 11a half rate channels
1956*5113495bSYour Name  * @HOST_REGDMN_MODE_11A_QUARTER_RATE: 11a quarter rate channels
1957*5113495bSYour Name  * @HOST_REGDMN_MODE_11NG_HT20: 11ng HT20 channels
1958*5113495bSYour Name  * @HOST_REGDMN_MODE_11NA_HT20: 11na HT20 channels
1959*5113495bSYour Name  * @HOST_REGDMN_MODE_11NG_HT40PLUS: 11ng HT40+ channels
1960*5113495bSYour Name  * @HOST_REGDMN_MODE_11NG_HT40MINUS: 11ng HT40- channels
1961*5113495bSYour Name  * @HOST_REGDMN_MODE_11NA_HT40PLUS: 11na HT40+ channels
1962*5113495bSYour Name  * @HOST_REGDMN_MODE_11NA_HT40MINUS: 11na HT40- channels
1963*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT20: 5GHz, VHT20
1964*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT40PLUS: 5GHz, VHT40+ channels
1965*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT40MINUS: 5GHz, VHT40- channels
1966*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT80: 5GHz, VHT80 channels
1967*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT160: 5GHz, VHT160 channels
1968*5113495bSYour Name  * @HOST_REGDMN_MODE_11AC_VHT80_80: 5GHz, VHT80+80 channels
1969*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXG_HE20: 11ax 2.4GHz, HE20 channels
1970*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXA_HE20: 11ax 5GHz, HE20 channels
1971*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXG_HE40PLUS: 11ax 2.4GHz, HE40+ channels
1972*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXG_HE40MINUS: 11ax 2.4GHz, HE40- channels
1973*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXA_HE40PLUS: 11ax 5GHz, HE40+ channels
1974*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXA_HE40MINUS: 11ax 5GHz, HE40- channels
1975*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXA_HE80: 11ax 5GHz, HE80 channels
1976*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXA_HE160: 11ax 5GHz, HE160 channels
1977*5113495bSYour Name  * @HOST_REGDMN_MODE_11AXA_HE80_80: 11ax 5GHz, HE80+80 channels
1978*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEG_EHT20: 11be 2.4GHz, EHT20 channels
1979*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEA_EHT20: 11be 5GHz, EHT20 channels
1980*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEG_EHT40PLUS: 11be 2.4GHz, EHT40+ channels
1981*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEG_EHT40MINUS: 11be 2.4GHz, EHT40- channels
1982*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEA_EHT40PLUS: 11be 5GHz, EHT40+ channels
1983*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEA_EHT40MINUS: 11be 5GHz, EHT40- channels
1984*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEA_EHT80: 11be 5GHz, EHT80 channels
1985*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEA_EHT160: 11be 5GHz, EHT160 channels
1986*5113495bSYour Name  * @HOST_REGDMN_MODE_11BEA_EHT320: 11be 5GHz, EHT320 channels
1987*5113495bSYour Name  * @HOST_REGDMN_MODE_ALL: All modes selected
1988*5113495bSYour Name  */
1989*5113495bSYour Name enum HOST_REGDMN_MODE {
1990*5113495bSYour Name 	HOST_REGDMN_MODE_11A = 0x00000001,
1991*5113495bSYour Name 	HOST_REGDMN_MODE_TURBO = 0x00000002,
1992*5113495bSYour Name 	HOST_REGDMN_MODE_11B = 0x00000004,
1993*5113495bSYour Name 	HOST_REGDMN_MODE_PUREG = 0x00000008,
1994*5113495bSYour Name 	HOST_REGDMN_MODE_11G = 0x00000008,
1995*5113495bSYour Name 	HOST_REGDMN_MODE_108G = 0x00000020,
1996*5113495bSYour Name 	HOST_REGDMN_MODE_108A = 0x00000040,
1997*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT20_2G = 0x00000080,
1998*5113495bSYour Name 	HOST_REGDMN_MODE_XR = 0x00000100,
1999*5113495bSYour Name 	HOST_REGDMN_MODE_11A_HALF_RATE = 0x00000200,
2000*5113495bSYour Name 	HOST_REGDMN_MODE_11A_QUARTER_RATE = 0x00000400,
2001*5113495bSYour Name 	HOST_REGDMN_MODE_11NG_HT20 = 0x00000800,
2002*5113495bSYour Name 	HOST_REGDMN_MODE_11NA_HT20 = 0x00001000,
2003*5113495bSYour Name 	HOST_REGDMN_MODE_11NG_HT40PLUS = 0x00002000,
2004*5113495bSYour Name 	HOST_REGDMN_MODE_11NG_HT40MINUS = 0x00004000,
2005*5113495bSYour Name 	HOST_REGDMN_MODE_11NA_HT40PLUS = 0x00008000,
2006*5113495bSYour Name 	HOST_REGDMN_MODE_11NA_HT40MINUS = 0x00010000,
2007*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT20 = 0x00020000,
2008*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT40PLUS = 0x00040000,
2009*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT40MINUS = 0x00080000,
2010*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT80 = 0x00100000,
2011*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT160 = 0x00200000,
2012*5113495bSYour Name 	HOST_REGDMN_MODE_11AC_VHT80_80 = 0x00400000,
2013*5113495bSYour Name 	HOST_REGDMN_MODE_11AXG_HE20 = 0x00800000,
2014*5113495bSYour Name 	HOST_REGDMN_MODE_11AXA_HE20 = 0x01000000,
2015*5113495bSYour Name 	HOST_REGDMN_MODE_11AXG_HE40PLUS = 0x02000000,
2016*5113495bSYour Name 	HOST_REGDMN_MODE_11AXG_HE40MINUS = 0x04000000,
2017*5113495bSYour Name 	HOST_REGDMN_MODE_11AXA_HE40PLUS = 0x08000000,
2018*5113495bSYour Name 	HOST_REGDMN_MODE_11AXA_HE40MINUS = 0x10000000,
2019*5113495bSYour Name 	HOST_REGDMN_MODE_11AXA_HE80 = 0x20000000,
2020*5113495bSYour Name 	HOST_REGDMN_MODE_11AXA_HE160 = 0x40000000,
2021*5113495bSYour Name 	HOST_REGDMN_MODE_11AXA_HE80_80 = 0x80000000,
2022*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2023*5113495bSYour Name 	HOST_REGDMN_MODE_11BEG_EHT20 = 0x0000000100000000,
2024*5113495bSYour Name 	HOST_REGDMN_MODE_11BEA_EHT20 = 0x0000000200000000,
2025*5113495bSYour Name 	HOST_REGDMN_MODE_11BEG_EHT40PLUS = 0x0000000400000000,
2026*5113495bSYour Name 	HOST_REGDMN_MODE_11BEG_EHT40MINUS = 0x0000000800000000,
2027*5113495bSYour Name 	HOST_REGDMN_MODE_11BEA_EHT40PLUS = 0x0000001000000000,
2028*5113495bSYour Name 	HOST_REGDMN_MODE_11BEA_EHT40MINUS = 0x0000002000000000,
2029*5113495bSYour Name 	HOST_REGDMN_MODE_11BEA_EHT80 = 0x0000004000000000,
2030*5113495bSYour Name 	HOST_REGDMN_MODE_11BEA_EHT160 = 0x0000008000000000,
2031*5113495bSYour Name 	HOST_REGDMN_MODE_11BEA_EHT320 = 0x0000010000000000,
2032*5113495bSYour Name #endif
2033*5113495bSYour Name 	HOST_REGDMN_MODE_ALL = 0xffffffffffffffff
2034*5113495bSYour Name };
2035*5113495bSYour Name 
2036*5113495bSYour Name #define WIRELESS_11AX_MODES  (HOST_REGDMN_MODE_11AXG_HE20 \
2037*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE40PLUS \
2038*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE40MINUS \
2039*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE20 \
2040*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2041*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE40MINUS \
2042*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE80 \
2043*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE160 \
2044*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE80_80)
2045*5113495bSYour Name 
2046*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2047*5113495bSYour Name #define WIRELESS_11BE_MODES  (HOST_REGDMN_MODE_11BEG_EHT20 \
2048*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT20 \
2049*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEG_EHT40PLUS \
2050*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEG_EHT40MINUS \
2051*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT40PLUS \
2052*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT40MINUS \
2053*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT80 \
2054*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT160 \
2055*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT320)
2056*5113495bSYour Name #endif
2057*5113495bSYour Name 
2058*5113495bSYour Name #define WIRELESS_11AC_MODES  (HOST_REGDMN_MODE_11AC_VHT20 \
2059*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT40PLUS \
2060*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT40MINUS \
2061*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT80 \
2062*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT160 \
2063*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT80_80)
2064*5113495bSYour Name 
2065*5113495bSYour Name #define WIRELESS_11N_MODES   (HOST_REGDMN_MODE_11NG_HT20 \
2066*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT20 \
2067*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NG_HT40PLUS \
2068*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NG_HT40MINUS \
2069*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT40PLUS \
2070*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT40MINUS)
2071*5113495bSYour Name 
2072*5113495bSYour Name #define WIRELESS_11G_MODES   (HOST_REGDMN_MODE_PUREG \
2073*5113495bSYour Name 			      | HOST_REGDMN_MODE_11G \
2074*5113495bSYour Name 			      | HOST_REGDMN_MODE_108G)
2075*5113495bSYour Name 
2076*5113495bSYour Name #define WIRELESS_11B_MODES   (HOST_REGDMN_MODE_11B)
2077*5113495bSYour Name 
2078*5113495bSYour Name #define WIRELESS_11A_MODES   (HOST_REGDMN_MODE_11A \
2079*5113495bSYour Name 			      | HOST_REGDMN_MODE_TURBO \
2080*5113495bSYour Name 			      | HOST_REGDMN_MODE_108A \
2081*5113495bSYour Name 			      | HOST_REGDMN_MODE_11A_HALF_RATE \
2082*5113495bSYour Name 			      | HOST_REGDMN_MODE_11A_QUARTER_RATE)
2083*5113495bSYour Name 
2084*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2085*5113495bSYour Name #define WIRELESS_20_MODES    (HOST_REGDMN_MODE_11A \
2086*5113495bSYour Name 			      | HOST_REGDMN_MODE_TURBO \
2087*5113495bSYour Name 			      | HOST_REGDMN_MODE_11B \
2088*5113495bSYour Name 			      | HOST_REGDMN_MODE_PUREG \
2089*5113495bSYour Name 			      | HOST_REGDMN_MODE_11G \
2090*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT20_2G \
2091*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NG_HT20 \
2092*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT20 \
2093*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT20 \
2094*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE20 \
2095*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE20 \
2096*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT20 \
2097*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEG_EHT20)
2098*5113495bSYour Name #else
2099*5113495bSYour Name #define WIRELESS_20_MODES    (HOST_REGDMN_MODE_11A \
2100*5113495bSYour Name 			      | HOST_REGDMN_MODE_TURBO \
2101*5113495bSYour Name 			      | HOST_REGDMN_MODE_11B \
2102*5113495bSYour Name 			      | HOST_REGDMN_MODE_PUREG \
2103*5113495bSYour Name 			      | HOST_REGDMN_MODE_11G \
2104*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT20_2G \
2105*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NG_HT20 \
2106*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT20 \
2107*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT20 \
2108*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE20 \
2109*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE20)
2110*5113495bSYour Name #endif
2111*5113495bSYour Name 
2112*5113495bSYour Name #define WIRELESS_10_MODES   (HOST_REGDMN_MODE_11A_HALF_RATE)
2113*5113495bSYour Name #define WIRELESS_5_MODES    (HOST_REGDMN_MODE_11A_QUARTER_RATE)
2114*5113495bSYour Name 
2115*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2116*5113495bSYour Name #define WIRELESS_40_MODES    (HOST_REGDMN_MODE_11NG_HT40PLUS \
2117*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NG_HT40MINUS \
2118*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT40PLUS \
2119*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT40MINUS \
2120*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT40PLUS \
2121*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT40MINUS \
2122*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE40PLUS \
2123*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE40MINUS \
2124*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2125*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE40MINUS \
2126*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT40PLUS \
2127*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT40MINUS \
2128*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEG_EHT40PLUS \
2129*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEG_EHT40MINUS)
2130*5113495bSYour Name #else
2131*5113495bSYour Name #define WIRELESS_40_MODES    (HOST_REGDMN_MODE_11NG_HT40PLUS \
2132*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NG_HT40MINUS \
2133*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT40PLUS \
2134*5113495bSYour Name 			      | HOST_REGDMN_MODE_11NA_HT40MINUS \
2135*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT40PLUS \
2136*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AC_VHT40MINUS \
2137*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE40PLUS \
2138*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXG_HE40MINUS \
2139*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2140*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE40MINUS)
2141*5113495bSYour Name #endif
2142*5113495bSYour Name 
2143*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2144*5113495bSYour Name #define WIRELESS_80_MODES    (HOST_REGDMN_MODE_11AC_VHT80 \
2145*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE80 \
2146*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT80)
2147*5113495bSYour Name #else
2148*5113495bSYour Name #define WIRELESS_80_MODES    (HOST_REGDMN_MODE_11AC_VHT80 \
2149*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE80)
2150*5113495bSYour Name #endif
2151*5113495bSYour Name 
2152*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2153*5113495bSYour Name #define WIRELESS_160_MODES   (HOST_REGDMN_MODE_11AC_VHT160 \
2154*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE160 \
2155*5113495bSYour Name 			      | HOST_REGDMN_MODE_11BEA_EHT160)
2156*5113495bSYour Name #else
2157*5113495bSYour Name #define WIRELESS_160_MODES   (HOST_REGDMN_MODE_11AC_VHT160 \
2158*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE160)
2159*5113495bSYour Name #endif
2160*5113495bSYour Name 
2161*5113495bSYour Name #define WIRELESS_80P80_MODES (HOST_REGDMN_MODE_11AC_VHT80_80 \
2162*5113495bSYour Name 			      | HOST_REGDMN_MODE_11AXA_HE80_80)
2163*5113495bSYour Name 
2164*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2165*5113495bSYour Name #define WIRELESS_320_MODES (HOST_REGDMN_MODE_11BEA_EHT320)
2166*5113495bSYour Name #endif
2167*5113495bSYour Name 
2168*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2169*5113495bSYour Name #define WIRELESS_6G_MODES_11BE (HOST_REGDMN_MODE_11BEA_EHT20 \
2170*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT40PLUS \
2171*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT40MINUS \
2172*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT80 \
2173*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT160 \
2174*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT320)
2175*5113495bSYour Name #else
2176*5113495bSYour Name #define WIRELESS_6G_MODES_11BE 0
2177*5113495bSYour Name #endif /* WLAN_FEATURE_11BE*/
2178*5113495bSYour Name 
2179*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2180*5113495bSYour Name #define WIRELESS_6G_MODES (HOST_REGDMN_MODE_11AXA_HE20 \
2181*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2182*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40MINUS \
2183*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80 \
2184*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE160 \
2185*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80_80 \
2186*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT20 \
2187*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT40PLUS \
2188*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT40MINUS \
2189*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT80 \
2190*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT160 \
2191*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT320)
2192*5113495bSYour Name #else
2193*5113495bSYour Name #define WIRELESS_6G_MODES (HOST_REGDMN_MODE_11AXA_HE20 \
2194*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2195*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40MINUS \
2196*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80 \
2197*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE160 \
2198*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80_80)
2199*5113495bSYour Name #endif
2200*5113495bSYour Name 
2201*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2202*5113495bSYour Name #define WIRELESS_5G_MODES_11BE (HOST_REGDMN_MODE_11BEA_EHT20 \
2203*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT40PLUS \
2204*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT40MINUS \
2205*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT80 \
2206*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT160 \
2207*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEA_EHT320)
2208*5113495bSYour Name #else
2209*5113495bSYour Name #define WIRELESS_5G_MODES_11BE 0
2210*5113495bSYour Name #endif /* WLAN_FEATURE_11BE*/
2211*5113495bSYour Name 
2212*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2213*5113495bSYour Name #define WIRELESS_5G_MODES (HOST_REGDMN_MODE_11BEA_EHT20 \
2214*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT40PLUS \
2215*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT40MINUS \
2216*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT80 \
2217*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT160 \
2218*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEA_EHT320 \
2219*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE20 \
2220*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2221*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40MINUS \
2222*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80 \
2223*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE160 \
2224*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80_80 \
2225*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT20 \
2226*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT40PLUS \
2227*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT40MINUS \
2228*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT80 \
2229*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT160 \
2230*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT80_80 \
2231*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NA_HT20 \
2232*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NA_HT40PLUS \
2233*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NA_HT40MINUS \
2234*5113495bSYour Name 			   | HOST_REGDMN_MODE_11A \
2235*5113495bSYour Name 			   | HOST_REGDMN_MODE_TURBO \
2236*5113495bSYour Name 			   | HOST_REGDMN_MODE_108A \
2237*5113495bSYour Name 			   | HOST_REGDMN_MODE_11A_HALF_RATE \
2238*5113495bSYour Name 			   | HOST_REGDMN_MODE_11A_QUARTER_RATE)
2239*5113495bSYour Name #else
2240*5113495bSYour Name #define WIRELESS_5G_MODES (HOST_REGDMN_MODE_11AXA_HE20 \
2241*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40PLUS \
2242*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE40MINUS \
2243*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80 \
2244*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE160 \
2245*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXA_HE80_80 \
2246*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT20 \
2247*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT40PLUS \
2248*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT40MINUS \
2249*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT80 \
2250*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT160 \
2251*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AC_VHT80_80 \
2252*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NA_HT20 \
2253*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NA_HT40PLUS \
2254*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NA_HT40MINUS \
2255*5113495bSYour Name 			   | HOST_REGDMN_MODE_11A \
2256*5113495bSYour Name 			   | HOST_REGDMN_MODE_TURBO \
2257*5113495bSYour Name 			   | HOST_REGDMN_MODE_108A \
2258*5113495bSYour Name 			   | HOST_REGDMN_MODE_11A_HALF_RATE \
2259*5113495bSYour Name 			   | HOST_REGDMN_MODE_11A_QUARTER_RATE)
2260*5113495bSYour Name #endif
2261*5113495bSYour Name 
2262*5113495bSYour Name #define WIRELESS_49G_MODES (HOST_REGDMN_MODE_11A \
2263*5113495bSYour Name 			    | HOST_REGDMN_MODE_11A_HALF_RATE \
2264*5113495bSYour Name 			    | HOST_REGDMN_MODE_11A_QUARTER_RATE)
2265*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2266*5113495bSYour Name #define WIRELESS_2G_MODES_11BE (HOST_REGDMN_MODE_11BEG_EHT20 \
2267*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEG_EHT40PLUS \
2268*5113495bSYour Name 				| HOST_REGDMN_MODE_11BEG_EHT40MINUS)
2269*5113495bSYour Name #else
2270*5113495bSYour Name #define WIRELESS_2G_MODES_11BE 0
2271*5113495bSYour Name #endif /* WLAN_FEATURE_11BE*/
2272*5113495bSYour Name 
2273*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
2274*5113495bSYour Name #define WIRELESS_2G_MODES (HOST_REGDMN_MODE_11BEG_EHT20 \
2275*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEG_EHT40PLUS \
2276*5113495bSYour Name 			   | HOST_REGDMN_MODE_11BEG_EHT40MINUS \
2277*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXG_HE20 \
2278*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXG_HE40PLUS \
2279*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXG_HE40MINUS \
2280*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NG_HT20 \
2281*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NG_HT40PLUS \
2282*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NG_HT40MINUS \
2283*5113495bSYour Name 			   | HOST_REGDMN_MODE_PUREG \
2284*5113495bSYour Name 			   | HOST_REGDMN_MODE_11G \
2285*5113495bSYour Name 			   | HOST_REGDMN_MODE_108G \
2286*5113495bSYour Name 			   | HOST_REGDMN_MODE_11B)
2287*5113495bSYour Name #else
2288*5113495bSYour Name #define WIRELESS_2G_MODES (HOST_REGDMN_MODE_11AXG_HE20 \
2289*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXG_HE40PLUS \
2290*5113495bSYour Name 			   | HOST_REGDMN_MODE_11AXG_HE40MINUS \
2291*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NG_HT20 \
2292*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NG_HT40PLUS \
2293*5113495bSYour Name 			   | HOST_REGDMN_MODE_11NG_HT40MINUS \
2294*5113495bSYour Name 			   | HOST_REGDMN_MODE_PUREG \
2295*5113495bSYour Name 			   | HOST_REGDMN_MODE_11G \
2296*5113495bSYour Name 			   | HOST_REGDMN_MODE_108G \
2297*5113495bSYour Name 			   | HOST_REGDMN_MODE_11B)
2298*5113495bSYour Name #endif
2299*5113495bSYour Name 
2300*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
2301*5113495bSYour Name /**
2302*5113495bSYour Name  * enum reg_afc_cmd_type - Type of AFC command sent to FW
2303*5113495bSYour Name  * @REG_AFC_CMD_SERV_RESP_READY: Server response is ready
2304*5113495bSYour Name  * @REG_AFC_CMD_RESET_AFC: Ask the target to send an AFC expiry event
2305*5113495bSYour Name  * @REG_AFC_CMD_CLEAR_AFC_PAYLOAD: Ask the target to clear AFC Payload.
2306*5113495bSYour Name  * The target in response sends REG_AFC_EXPIRY_EVENT_STOP_TX to host.
2307*5113495bSYour Name  */
2308*5113495bSYour Name enum reg_afc_cmd_type {
2309*5113495bSYour Name 	REG_AFC_CMD_SERV_RESP_READY = 1,
2310*5113495bSYour Name 	REG_AFC_CMD_RESET_AFC = 2,
2311*5113495bSYour Name 	REG_AFC_CMD_CLEAR_AFC_PAYLOAD = 3,
2312*5113495bSYour Name };
2313*5113495bSYour Name 
2314*5113495bSYour Name /**
2315*5113495bSYour Name  * enum reg_afc_serv_resp_format - Indicate the format in which afc_serv_format
2316*5113495bSYour Name  *                                 is written in FW memory
2317*5113495bSYour Name  * @REG_AFC_SERV_RESP_FORMAT_JSON: Server response in JSON format
2318*5113495bSYour Name  * @REG_AFC_SERV_RESP_FORMAT_BINARY: Server response in BINARY format
2319*5113495bSYour Name  */
2320*5113495bSYour Name enum reg_afc_serv_resp_format {
2321*5113495bSYour Name 	REG_AFC_SERV_RESP_FORMAT_JSON = 0,
2322*5113495bSYour Name 	REG_AFC_SERV_RESP_FORMAT_BINARY = 1,
2323*5113495bSYour Name };
2324*5113495bSYour Name 
2325*5113495bSYour Name /**
2326*5113495bSYour Name  * struct reg_afc_resp_rx_ind_info - regulatory AFC indication info
2327*5113495bSYour Name  * @cmd_type: Type of AFC command send to FW
2328*5113495bSYour Name  * @serv_resp_format: AFC server response format
2329*5113495bSYour Name  */
2330*5113495bSYour Name struct reg_afc_resp_rx_ind_info {
2331*5113495bSYour Name 	enum reg_afc_cmd_type cmd_type;
2332*5113495bSYour Name 	enum reg_afc_serv_resp_format serv_resp_format;
2333*5113495bSYour Name };
2334*5113495bSYour Name 
2335*5113495bSYour Name /**
2336*5113495bSYour Name  * typedef afc_req_rx_evt_handler() - Function prototype of AFC request
2337*5113495bSYour Name  *                                    received event handler
2338*5113495bSYour Name  * @pdev: Pointer to pdev
2339*5113495bSYour Name  * @afc_req: Pointer to AFC request
2340*5113495bSYour Name  * @arg: Pointer to void (opaque) argument object
2341*5113495bSYour Name  *
2342*5113495bSYour Name  * Return: void
2343*5113495bSYour Name  */
2344*5113495bSYour Name typedef void (*afc_req_rx_evt_handler)(struct wlan_objmgr_pdev *pdev,
2345*5113495bSYour Name 				       struct wlan_afc_host_request *afc_req,
2346*5113495bSYour Name 				       void *arg);
2347*5113495bSYour Name 
2348*5113495bSYour Name /**
2349*5113495bSYour Name  * typedef afc_power_tx_evt_handler() - Function prototype of AFC power event
2350*5113495bSYour Name  *                                      sent handler
2351*5113495bSYour Name  * @pdev: Pointer to pdev
2352*5113495bSYour Name  * @power_info: Pointer to AFC power event data
2353*5113495bSYour Name  * @arg: Pointer to void (opaque) argument object
2354*5113495bSYour Name  *
2355*5113495bSYour Name  * Return: void
2356*5113495bSYour Name  */
2357*5113495bSYour Name typedef void
2358*5113495bSYour Name (*afc_power_tx_evt_handler)(struct wlan_objmgr_pdev *pdev,
2359*5113495bSYour Name 			    struct reg_fw_afc_power_event *power_info,
2360*5113495bSYour Name 			    void *arg);
2361*5113495bSYour Name 
2362*5113495bSYour Name /**
2363*5113495bSYour Name  * typedef afc_payload_reset_tx_evt_handler() - Function prototype of AFC
2364*5113495bSYour Name  * payload reset event sent handler
2365*5113495bSYour Name  * @pdev: Pointer to pdev
2366*5113495bSYour Name  * @arg: Pointer to void (opaque) argument object
2367*5113495bSYour Name  *
2368*5113495bSYour Name  * Return: void
2369*5113495bSYour Name  */
2370*5113495bSYour Name typedef void
2371*5113495bSYour Name (*afc_payload_reset_tx_evt_handler)(struct wlan_objmgr_pdev *pdev,
2372*5113495bSYour Name 				    void *arg);
2373*5113495bSYour Name #endif
2374*5113495bSYour Name 
2375*5113495bSYour Name /**
2376*5113495bSYour Name  * reg_is_chan_enum_invalid() - Checks if the channel enum is invalid or not.
2377*5113495bSYour Name  * @chan_enum: Input channel enum.
2378*5113495bSYour Name  *
2379*5113495bSYour Name  * Return: true if channel enum is invalid else false.
2380*5113495bSYour Name  */
reg_is_chan_enum_invalid(enum channel_enum chan_enum)2381*5113495bSYour Name static inline bool reg_is_chan_enum_invalid(enum channel_enum chan_enum)
2382*5113495bSYour Name {
2383*5113495bSYour Name 	return chan_enum >= INVALID_CHANNEL;
2384*5113495bSYour Name }
2385*5113495bSYour Name 
2386*5113495bSYour Name /**
2387*5113495bSYour Name  * struct r2p_table_update_status_obj
2388*5113495bSYour Name  * @pdev_id: pdev id from target
2389*5113495bSYour Name  * @status: rate2power update status
2390*5113495bSYour Name  */
2391*5113495bSYour Name struct r2p_table_update_status_obj {
2392*5113495bSYour Name 	uint32_t pdev_id;
2393*5113495bSYour Name 	uint32_t status;
2394*5113495bSYour Name };
2395*5113495bSYour Name #endif
2396