xref: /wlan-dirver/qca-wifi-host-cmn/umac/regulatory/core/src/reg_db.h (revision d0c05845839e5f2ba5a8dcebe0cd3e4cd4e8dfcf)
1 /*
2  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  *
6  * Permission to use, copy, modify, and/or distribute this software for
7  * any purpose with or without fee is hereby granted, provided that the
8  * above copyright notice and this permission notice appear in all
9  * copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18  * PERFORMANCE OF THIS SOFTWARE.
19  */
20 
21 /**
22  * DOC: reg_db.h
23  * This file contains regulatory component data structures
24  */
25 
26 #ifndef __REG_DB_H
27 #define __REG_DB_H
28 
29 /*
30  * If COMPILE_REGDB_6G and CONFIG_BAND_6GHZ are defined, then
31  * reg_6ghz_super_dmn_id and max_bw_6g are part of the
32  * country_code_to_reg_domain table for a country
33  * entry. If COMPILE_REGDB_6G and CONFIG_BAND_6GHZ are not defined, then they
34  * are absent.
35  *
36  * COMPILE_REGDB_6G is not defined for the Partial offload platform.
37  *
38  * CE:- country entry
39  */
40 #if defined(CONFIG_BAND_6GHZ) && defined(COMPILE_REGDB_6G)
41 #define CE(country_code, reg_dmn_pair_id, reg_6ghz_super_dmn_id,         \
42 	   alpha2, max_bw_2g, max_bw_5g, max_bw_6g, phymode_bitmap)      \
43 	{CTRY_ ## country_code, reg_dmn_pair_id, reg_6ghz_super_dmn_id,  \
44 	 #alpha2, max_bw_2g, max_bw_5g, max_bw_6g, phymode_bitmap}
45 #else
46 #define CE(country_code, reg_dmn_pair_id, reg_6ghz_super_dmn_id, alpha2, \
47 	   max_bw_2g, max_bw_5g, max_bw_6g, phymode_bitmap)              \
48 	{CTRY_ ## country_code, reg_dmn_pair_id, #alpha2, max_bw_2g,     \
49 	 max_bw_5g, phymode_bitmap}
50 #endif
51 
52 /* Alpha2 code for world reg domain */
53 #define REG_WORLD_ALPHA2 "00"
54 
55 enum reg_domain {
56 	NO_ENUMRD = 0x00,
57 	NULL1_WORLD = 0x03,
58 	NULL1_ETSIB = 0x07,
59 	NULL1_ETSIC = 0x08,
60 
61 	FCC1_FCCA = 0x10,
62 	FCC1_WORLD = 0x11,
63 	FCC2_FCCA = 0x20,
64 	FCC2_WORLD = 0x21,
65 	FCC2_ETSIC = 0x22,
66 	FCC3_FCCA = 0x3A,
67 	FCC3_WORLD = 0x3B,
68 	FCC3_ETSIC = 0x3F,
69 	FCC4_FCCA = 0x12,
70 	FCC5_FCCA = 0x13,
71 	FCC6_WORLD = 0x23,
72 	FCC6_FCCA = 0x14,
73 	FCC7_FCCA = 0x15,
74 	FCC8_FCCA = 0x16,
75 	FCC8_WORLD = 0x09,
76 	FCC9_FCCA = 0x17,
77 	FCC10_FCCA = 0x18,
78 	FCC11_WORLD = 0x19,
79 	FCC13_WORLD = 0xE4,
80 	FCC14_FCCB = 0xE6,
81 	FCC14_WORLD = 0xD1,
82 	FCC15_FCCA = 0xEA,
83 	FCC16_FCCA = 0xE8,
84 	FCC17_FCCA = 0xE9,
85 	FCC17_WORLD = 0xEB,
86 	FCC17_ETSIC = 0xEC,
87 	FCC18_ETSIC = 0xED,
88 
89 	ETSI1_WORLD = 0x37,
90 	ETSI2_WORLD = 0x35,
91 	ETSI3_WORLD = 0x36,
92 	ETSI3_ETSIA = 0x32,
93 	ETSI4_WORLD = 0x30,
94 	ETSI4_ETSIC = 0x38,
95 	ETSI5_WORLD = 0x39,
96 	ETSI6_WORLD = 0x34,
97 	ETSI7_WORLD = 0x3C,
98 	ETSI8_WORLD = 0x3D,
99 	ETSI9_WORLD = 0x3E,
100 	ETSI10_WORLD = 0x24,
101 	ETSI10_FCCA = 0x25,
102 	ETSI11_WORLD = 0x26,
103 	ETSI12_WORLD = 0x28,
104 	ETSI13_WORLD = 0x27,
105 	ETSI14_WORLD = 0x29,
106 	ETSI15_WORLD = 0x31,
107 	ETSI15_ETSIC = 0x7A,
108 	ETSI16_WORLD = 0x4A,
109 	ETSI17_WORLD = 0x4B,
110 	ETSI18_WORLD = 0x3D,
111 
112 	APL1_WORLD = 0x52,
113 	APL1_ETSIC = 0x55,
114 	APL2_WORLD = 0x45,
115 	APL2_ETSIC = 0x56,
116 	APL2_ETSID = 0x41,
117 	APL2_FCCA = 0x4D,
118 	APL4_WORLD = 0x42,
119 	APL6_WORLD = 0x5B,
120 	APL7_FCCA = 0x5C,
121 	APL8_WORLD = 0x5D,
122 	APL9_WORLD = 0x5E,
123 	APL9_MKKC  = 0x48,
124 	APL9_KRRA  = 0x43,
125 	APL10_WORLD = 0x5F,
126 	APL11_FCCA = 0x4F,
127 	APL12_WORLD = 0x51,
128 	APL13_WORLD = 0x5A,
129 	APL14_WORLD = 0x57,
130 	APL14_CHNA = 0x74,
131 	APL15_WORLD = 0x59,
132 	APL16_WORLD = 0x70,
133 	APL16_ETSIC = 0x6D,
134 	APL17_ETSIC = 0xE7,
135 	APL17_ETSID = 0xE0,
136 	APL19_ETSIC = 0x71,
137 	APL20_WORLD = 0xE5,
138 	APL23_WORLD = 0xE3,
139 	APL24_ETSIC = 0xE2,
140 	APL25_ETSIC = 0x75,
141 	APL26_ETSIC = 0x72,
142 	APL27_FCCA = 0x73,
143 
144 	WOR0_WORLD = 0x60,
145 	WOR1_WORLD = 0x61,
146 	WOR2_WORLD = 0x62,
147 	WOR3_WORLD = 0x63,
148 	WOR4_FCCA = 0x64,
149 	WOR5_ETSIC = 0x65,
150 	WOR01_WORLD = 0x66,
151 	WOR02_WORLD = 0x67,
152 	EU1_WORLD = 0x68,
153 	WOR9_WORLD = 0x69,
154 	WORA_WORLD = 0x6A,
155 	WORB_WORLD = 0x6B,
156 	WORC_WORLD = 0x6C,
157 
158 	MKK3_MKKB = 0x80,
159 	MKK3_MKKA2 = 0x81,
160 	MKK3_MKKC = 0x82,
161 	MKK4_MKKB = 0x83,
162 	MKK4_MKKA2 = 0x84,
163 	MKK4_MKKC = 0x85,
164 	MKK5_MKKA = 0x99,
165 	MKK5_FCCA = 0x9A,
166 	MKK5_MKKB = 0x86,
167 	MKK5_MKKA2 = 0x87,
168 	MKK5_MKKC = 0x88,
169 	MKK3_MKKA = 0xF0,
170 	MKK3_MKKA1 = 0xF1,
171 	MKK3_FCCA = 0xF2,
172 	MKK4_MKKA = 0xF3,
173 	MKK4_MKKA1 = 0xF4,
174 	MKK4_FCCA = 0xF5,
175 	MKK9_MKKA = 0xF6,
176 	MKK9_FCCA = 0xFC,
177 	MKK9_MKKA1 = 0xFD,
178 	MKK9_MKKC = 0xFE,
179 	MKK9_MKKA2 = 0xFF,
180 	MKK10_MKKA = 0xF7,
181 	MKK10_FCCA = 0xD0,
182 	MKK10_MKKA1 = 0xD1,
183 	MKK10_MKKC = 0xD2,
184 	MKK10_MKKA2 = 0xD3,
185 	MKK11_MKKA = 0xD4,
186 	MKK11_FCCA = 0xD5,
187 	MKK11_MKKA1 = 0xD6,
188 	MKK11_MKKC = 0xD7,
189 	MKK11_MKKA2 = 0xD8,
190 	MKK16_MKKC = 0xDF,
191 	MKK17_MKKC = 0xE1,
192 
193 	WORLD_60 = 0x60,
194 	WORLD_61 = 0x61,
195 	WORLD_62 = 0x62,
196 	WORLD_63 = 0x63,
197 	WORLD_65 = 0x65,
198 	WORLD_64 = 0x64,
199 	WORLD_66 = 0x66,
200 	WORLD_69 = 0x69,
201 	WORLD_67 = 0x67,
202 	WORLD_68 = 0x68,
203 	WORLD_6A = 0x6A,
204 	WORLD_6C = 0x6C,
205 };
206 
207 enum reg_domains_5g {
208 	NULL1,
209 
210 	FCC1,
211 	FCC2,
212 	FCC3,
213 	FCC4,
214 	FCC5,
215 	FCC6,
216 	FCC7,
217 	FCC8,
218 	FCC9,
219 	FCC10,
220 	FCC11,
221 	FCC13,
222 	FCC14,
223 	FCC15,
224 	FCC16,
225 	FCC17,
226 	FCC18,
227 
228 	ETSI1,
229 	ETSI2,
230 	ETSI3,
231 	ETSI4,
232 	ETSI5,
233 	ETSI6,
234 	ETSI8,
235 	ETSI9,
236 	ETSI10,
237 	ETSI11,
238 	ETSI12,
239 	ETSI13,
240 	ETSI14,
241 	ETSI15,
242 	ETSI16,
243 	ETSI17,
244 	ETSI18,
245 
246 	APL1,
247 	APL2,
248 	APL3,
249 	APL4,
250 	APL5,
251 	APL6,
252 	APL7,
253 	APL8,
254 	APL9,
255 	APL10,
256 	APL11,
257 	APL12,
258 	APL13,
259 	APL14,
260 	APL15,
261 	APL16,
262 	APL17,
263 	APL19,
264 	APL23,
265 	APL20,
266 	APL24,
267 	APL25,
268 	APL26,
269 	APL27,
270 
271 	MKK3,
272 	MKK5,
273 	MKK11,
274 	MKK16,
275 	MKK17,
276 	MKK4,
277 	MKK9,
278 	MKK10,
279 
280 	WORLD_5G_1,
281 	WORLD_5G_2,
282 
283 	REG_DOMAINS_5G_MAX,
284 };
285 
286 enum reg_domains_2g {
287 	FCCA,
288 	MKKA,
289 	MKKC,
290 	KRRA,
291 	CHNA,
292 	FCCB,
293 	ETSIC,
294 	WORLD,
295 	ETSID,
296 	WORLD_2G_1,
297 	WORLD_2G_2,
298 	WORLD_2G_3,
299 
300 	REG_DOMAINS_2G_MAX,
301 };
302 
303 enum country_code {
304 	CTRY_AFGHANISTAN = 4,
305 	CTRY_ALAND_ISLANDS = 248,
306 	CTRY_ALBANIA = 8,
307 	CTRY_ALGERIA = 12,
308 	CTRY_AMERICAN_SAMOA = 16,
309 	CTRY_ANDORRA = 20,
310 	CTRY_ANGUILLA = 660,
311 	CTRY_ANTIGUA_AND_BARBUDA = 28,
312 	CTRY_ARGENTINA = 32,
313 	CTRY_ARMENIA = 51,
314 	CTRY_MYANMAR = 104,
315 	CTRY_ARUBA = 533,
316 	CTRY_AUSTRALIA = 36,
317 	CTRY_AUSTRIA = 40,
318 	CTRY_AZERBAIJAN = 31,
319 	CTRY_BAHAMAS = 44,
320 	CTRY_BAHRAIN = 48,
321 	CTRY_BANGLADESH = 50,
322 	CTRY_BARBADOS = 52,
323 	CTRY_BELARUS = 112,
324 	CTRY_BELGIUM = 56,
325 	CTRY_BELIZE = 84,
326 	CTRY_BERMUDA = 60,
327 	CTRY_BHUTAN = 64,
328 	CTRY_BOLIVIA = 68,
329 	CTRY_BOSNIA_HERZ = 70,
330 	CTRY_BOTSWANA = 72,
331 	CTRY_BRAZIL = 76,
332 	CTRY_BRUNEI_DARUSSALAM = 96,
333 	CTRY_BULGARIA = 100,
334 	CTRY_BURUNDI = 108,
335 	CTRY_BURKINA_FASO = 854,
336 	CTRY_CAMBODIA = 116,
337 	CTRY_CAMEROON = 120,
338 	CTRY_CANADA = 124,
339 	CTRY_CAYMAN_ISLANDS = 136,
340 	CTRY_CENTRAL_AFRICA_REPUBLIC = 140,
341 	CTRY_CHAD = 148,
342 	CTRY_CHILE = 152,
343 	CTRY_CHINA = 156,
344 	CTRY_CHRISTMAS_ISLAND = 162,
345 	CTRY_COLOMBIA = 170,
346 	CTRY_CONGO = 178,
347 	CTRY_CONGO_DEMOCRATIC_REPUBLIC = 180,
348 	CTRY_COOK_ISLANDS = 184,
349 	CTRY_COSTA_RICA = 188,
350 	CTRY_COTE_DIVOIRE = 384,
351 	CTRY_CROATIA = 191,
352 	CTRY_CURACAO = 531,
353 	CTRY_CYPRUS = 196,
354 	CTRY_CZECH = 203,
355 	CTRY_DENMARK = 208,
356 	CTRY_DOMINICA = 212,
357 	CTRY_DOMINICAN_REPUBLIC = 214,
358 	CTRY_ECUADOR = 218,
359 	CTRY_EGYPT = 818,
360 	CTRY_EL_SALVADOR = 222,
361 	CTRY_ESTONIA = 233,
362 	CTRY_ETHIOPIA = 231,
363 	CTRY_FALKLAND_ISLANDS = 238,
364 	CTRY_FAROE_ISLANDS = 234,
365 	CTRY_FIJI = 242,
366 	CTRY_FINLAND = 246,
367 	CTRY_FRANCE = 250,
368 	CTRY_FRENCH_GUIANA = 254,
369 	CTRY_FRENCH_POLYNESIA = 258,
370 	CTRY_FRENCH_SOUTHERN_TERRITORIES = 260,
371 	CTRY_GABON = 266,
372 	CTRY_GEORGIA = 268,
373 	CTRY_GERMANY = 276,
374 	CTRY_GHANA = 288,
375 	CTRY_GIBRALTAR = 292,
376 	CTRY_GREECE = 300,
377 	CTRY_GREENLAND = 304,
378 	CTRY_GRENADA = 308,
379 	CTRY_GUADELOUPE = 312,
380 	CTRY_GUAM = 316,
381 	CTRY_GUATEMALA = 320,
382 	CTRY_GUERNSEY = 831,
383 	CTRY_GUYANA = 328,
384 	CTRY_HAITI = 332,
385 	CTRY_HEARD_ISLAND_AND_MCDONALD_ISLANDS = 334,
386 	CTRY_HOLY_SEE = 336,
387 	CTRY_HONDURAS = 340,
388 	CTRY_HONG_KONG = 344,
389 	CTRY_HUNGARY = 348,
390 	CTRY_ICELAND = 352,
391 	CTRY_INDIA = 356,
392 	CTRY_INDONESIA = 360,
393 	CTRY_IRAQ = 368,
394 	CTRY_IRELAND = 372,
395 	CTRY_ISLE_OF_MAN = 833,
396 	CTRY_ISRAEL = 376,
397 	CTRY_ITALY = 380,
398 	CTRY_JAMAICA = 388,
399 	CTRY_JAPAN = 392,
400 	CTRY_JAPAN15 = 4015,
401 	CTRY_JERSEY = 832,
402 	CTRY_JORDAN = 400,
403 	CTRY_KAZAKHSTAN = 398,
404 	CTRY_KENYA = 404,
405 	CTRY_KOREA_ROC = 410,
406 	CTRY_KUWAIT = 414,
407 	CTRY_LAO_PEOPLES_DEMOCRATIC_REPUBLIC = 418,
408 	CTRY_LATVIA = 428,
409 	CTRY_LEBANON = 422,
410 	CTRY_LESOTHO = 426,
411 	CTRY_LIBYA = 434,
412 	CTRY_LIECHTENSTEIN = 438,
413 	CTRY_LITHUANIA = 440,
414 	CTRY_LUXEMBOURG = 442,
415 	CTRY_MACAU = 446,
416 	CTRY_MACEDONIA = 807,
417 	CTRY_MALAWI = 454,
418 	CTRY_MALAYSIA = 458,
419 	CTRY_MALDIVES = 462,
420 	CTRY_MALTA = 470,
421 	CTRY_MARSHALL_ISLANDS = 584,
422 	CTRY_MARTINIQUE = 474,
423 	CTRY_MAURITANIA = 478,
424 	CTRY_MAURITIUS = 480,
425 	CTRY_MAYOTTE = 175,
426 	CTRY_MEXICO = 484,
427 	CTRY_MICRONESIA = 583,
428 	CTRY_MOLDOVA = 498,
429 	CTRY_MONACO = 492,
430 	CTRY_MONGOLIA = 496,
431 	CTRY_MONTENEGRO = 499,
432 	CTRY_MONTSERRAT = 500,
433 	CTRY_MOROCCO = 504,
434 	CTRY_NAMIBIA = 516,
435 	CTRY_NEPAL = 524,
436 	CTRY_NETHERLANDS = 528,
437 	CTRY_NETHERLANDS_ANTILLES = 530,
438 	CTRY_NEW_CALEDONIA = 540,
439 	CTRY_NEW_ZEALAND = 554,
440 	CTRY_NIGERIA = 566,
441 	CTRY_NORTHERN_MARIANA_ISLANDS = 580,
442 	CTRY_NICARAGUA = 558,
443 	CTRY_NIUE = 570,
444 	CTRY_NORFOLK_ISLAND = 574,
445 	CTRY_NORWAY = 578,
446 	CTRY_OMAN = 512,
447 	CTRY_PAKISTAN = 586,
448 	CTRY_PALAU = 585,
449 	CTRY_PANAMA = 591,
450 	CTRY_PAPUA_NEW_GUINEA = 598,
451 	CTRY_PARAGUAY = 600,
452 	CTRY_PERU = 604,
453 	CTRY_PHILIPPINES = 608,
454 	CTRY_POLAND = 616,
455 	CTRY_PORTUGAL = 620,
456 	CTRY_PUERTO_RICO = 630,
457 	CTRY_QATAR = 634,
458 	CTRY_REUNION = 638,
459 	CTRY_ROMANIA = 642,
460 	CTRY_RUSSIA = 643,
461 	CTRY_RWANDA = 646,
462 	CTRY_SAINT_BARTHELEMY = 652,
463 	CTRY_SAINT_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA = 654,
464 	CTRY_SAINT_KITTS_AND_NEVIS = 659,
465 	CTRY_SAINT_LUCIA = 662,
466 	CTRY_SAINT_MARTIN = 663,
467 	CTRY_SAINT_PIERRE_AND_MIQUELON = 666,
468 	CTRY_SAINT_VINCENT_AND_THE_GRENADIENS = 670,
469 	CTRY_SAMOA = 882,
470 	CTRY_SAN_MARINO = 674,
471 	CTRY_SAO_TOME_AND_PRINCIPE = 678,
472 	CTRY_SAUDI_ARABIA = 682,
473 	CTRY_SENEGAL = 686,
474 	CTRY_SERBIA = 688,
475 	CTRY_SINGAPORE = 702,
476 	CTRY_SINT_MAARTEN = 534,
477 	CTRY_SLOVAKIA = 703,
478 	CTRY_SLOVENIA = 705,
479 	CTRY_SOUTH_AFRICA = 710,
480 	CTRY_SPAIN = 724,
481 	CTRY_SURINAME = 740,
482 	CTRY_SRI_LANKA = 144,
483 	CTRY_SVALBARD_AND_JAN_MAYEN = 744,
484 	CTRY_SWEDEN = 752,
485 	CTRY_SWITZERLAND = 756,
486 	CTRY_TAIWAN = 158,
487 	CTRY_TANZANIA = 834,
488 	CTRY_THAILAND = 764,
489 	CTRY_TOGO = 768,
490 	CTRY_TRINIDAD_Y_TOBAGO = 780,
491 	CTRY_TUNISIA = 788,
492 	CTRY_TURKEY = 792,
493 	CTRY_TURKS_AND_CAICOS = 796,
494 	CTRY_UGANDA = 800,
495 	CTRY_UKRAINE = 804,
496 	CTRY_UAE = 784,
497 	CTRY_UNITED_KINGDOM = 826,
498 	CTRY_UNITED_STATES = 840,
499 	CTRY_UNITED_STATES_MINOR_OUTLYING_ISLANDS = 581,
500 	CTRY_URUGUAY = 858,
501 	CTRY_UZBEKISTAN = 860,
502 	CTRY_VANUATU = 548,
503 	CTRY_VENEZUELA = 862,
504 	CTRY_VIET_NAM = 704,
505 	CTRY_VIRGIN_ISLANDS = 850,
506 	CTRY_VIRGIN_ISLANDS_BRITISH = 92,
507 	CTRY_WALLIS_AND_FUTUNA = 876,
508 	CTRY_XA = 4100,   /* Used by Linux Client for legacy MKK domain */
509 	CTRY_YEMEN = 887,
510 	CTRY_ZIMBABWE = 716,
511 	CTRY_ZAMBIA = 884,
512 };
513 
514 /**
515  * struct regulatory_rule
516  * @start_freq: start frequency
517  * @end_freq: end frequency
518  * @max_bw: maximum bandwidth
519  * @reg_power: regulatory power
520  * @flags: regulatory flags
521  */
522 struct regulatory_rule {
523 	uint16_t start_freq;
524 	uint16_t end_freq;
525 	uint16_t max_bw;
526 	uint8_t reg_power;
527 	uint16_t flags;
528 };
529 
530 #if defined(CONFIG_BAND_6GHZ) && defined(COMPILE_REGDB_6G)
531 /**
532  * struct regulatory_rule_ext
533  * @start_freq: start frequency in MHz
534  * @end_freq: end frequency in MHz
535  * @max_bw: maximum bandwidth in MHz
536  * @eirp_power: EIRP power in dBm
537  * @psd_power: Max PSD power in dBm per MHz
538  * @flags: regulatory flags
539  */
540 struct regulatory_rule_ext {
541 	uint16_t start_freq;
542 	uint16_t end_freq;
543 	uint16_t max_bw;
544 	uint8_t eirp_power;
545 	int8_t psd_power;
546 	uint16_t flags;
547 };
548 #endif
549 
550 /**
551  * struct regdomain
552  * @ctl_val: CTL value
553  * @dfs_region: dfs region
554  * @min_bw: minimum bandwidth
555  * @max_bw: maximum bandwidth
556  * @num_reg_rules: number of regulatory rules
557  * @reg_rules_id: regulatory rule index
558  */
559 struct regdomain   {
560 	uint8_t ctl_val;
561 	enum dfs_reg dfs_region;
562 	uint16_t min_bw;
563 	uint16_t max_bw;
564 	uint8_t ant_gain;
565 	uint8_t num_reg_rules;
566 	uint8_t reg_rule_id[MAX_REG_RULES];
567 };
568 
569 #if defined(CONFIG_BAND_6GHZ) && defined(COMPILE_REGDB_6G)
570 #define REG_MAX_PSD (0x7F) /* 127=63.5 dBm/MHz */
571 
572 /**
573  * struct sub_6g_regdomain
574  * @min_bw: Minimum bandwidth in MHz
575  * @max_bw: Maximum bandwidth in MHz
576  * @num_reg_rules: number of regulatory rules
577  * @reg_rules_id: regulatory rule index
578  */
579 struct sub_6g_regdomain   {
580 	uint16_t min_bw;
581 	uint16_t max_bw;
582 	uint8_t num_reg_rules;
583 	uint8_t sixg_reg_rule_id[MAX_REG_RULES];
584 };
585 #endif
586 
587 /**
588  * struct country_code_to_reg_domain
589  * @country_code: country code
590  * @reg_dmn_pair_id: reg domainpair id
591  * @reg_6ghz_super_dmn_id: 6GHz super domain id
592  * @alpha2: iso-3166 alpha2
593  * @max_bw_2g: maximum 2g bandwidth in MHz
594  * @max_bw_5g: maximum 5g bandwidth in MHz
595  * @max_bw_6g: maximum 6g bandwidth in MHz
596  * @phymode_bitmap: phymodes not supported
597  */
598 struct country_code_to_reg_domain   {
599 	uint16_t country_code;
600 	uint16_t reg_dmn_pair_id;
601 #if defined(CONFIG_BAND_6GHZ) && defined(COMPILE_REGDB_6G)
602 	uint16_t reg_6ghz_super_dmn_id;
603 #endif
604 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
605 	uint16_t max_bw_2g;
606 	uint16_t max_bw_5g;
607 #if defined(CONFIG_BAND_6GHZ) && defined(COMPILE_REGDB_6G)
608 	uint16_t max_bw_6g;
609 #endif
610 	uint16_t phymode_bitmap;
611 };
612 
613 /**
614  * struct reg_domain_pair
615  * @reg_dmn_pair_id: reg domainpiar value
616  * @dmn_id_5g: 5g reg domain value
617  * @dmn_id_2g: 2g regdomain value
618  */
619 struct reg_domain_pair {
620 	uint16_t reg_dmn_pair_id;
621 	uint8_t dmn_id_5g;
622 	uint8_t dmn_id_2g;
623 };
624 
625 #if defined(CONFIG_BAND_6GHZ)
626 /**
627  * enum reg_super_domain_6g - 6G Super Domain enumeration
628  * @FCC1_6G_01: Super domain FCC1_6G_01 for US
629  * @ETSI1_6G_02: Super domain ETSI1_6G_02 for EU
630  * @ETSI2_6G_03: Super domain ETSI2_6G_03 for UK
631  * @APL1_6G_04: Super domain APL1_6G_04 for Korea
632  * @FCC1_6G_05: Super domain FCC1_6G_05 for Chile
633  * @APL2_6G_06: Super domain APL2_6G_06 for Guatemala
634  * @FCC1_6G_07: Super domain FCC1_6G_07 for Brazil
635  * @APL3_6G_08: Super domain APL3_6G_08 for UAE
636  * @FCC1_6G_09: Super domain FCC1_6G_09 for US AFC Testing
637  * @APL6_6G_0A: Super domain APL6_6G_0A for Saudi Arabia LPI STA and AP
638  * @MKK1_6G_0B: Super domain MKK1_6G_0B for Japan LPI and VLP
639  * @ETSI2_6G_0C: Super domain ETSI2_6G_0C for Australia LPI and VLP
640  * @FCC2_6G_10: Super domain FCC1_6G_10 for Canada LPI &
641 		SP(VLP to be added later)
642  * @APL4_6G_11: Super domain APL3_6G_11 for Costa Rica LPI and VLP
643  * @APL5_6G_12: Super domain APL3_6G_12 for CHILE LPI and VLP
644  */
645 enum reg_super_domain_6g {
646 	FCC1_6G_01 = 0x01,
647 	ETSI1_6G_02 = 0x02,
648 	ETSI2_6G_03 = 0x03,
649 	APL1_6G_04 = 0x04,
650 	FCC1_6G_05 = 0x05,
651 	APL2_6G_06 = 0x06,
652 	FCC1_6G_07 = 0x07,
653 	APL3_6G_08 = 0x08,
654 	FCC1_6G_09 = 0x09,
655 	APL6_6G_0A = 0x0A,
656 	MKK1_6G_0B = 0x0B,
657 	ETSI2_6G_0C = 0x0C,
658 	FCC2_6G_10 = 0x10,
659 	APL4_6G_11 = 0x11,
660 	APL5_6G_12 = 0x12,
661 };
662 
663 #if defined(COMPILE_REGDB_6G)
664 /**
665  * struct sixghz_super_to_subdomains
666  * @reg_6ghz_super_dmn_id: 6G super domain id.
667  * @reg_domain_6g_id_ap_lpi: 6G domain id for LPI AP.
668  * @reg_domain_6g_id_ap_sp: 6G domain id for SP AP.
669  * @reg_domain_6g_id_ap_vlp: 6G domain id for VLP AP.
670  * @reg_domain_6g_id_client_lpi: 6G domain id for clients of the LPI AP.
671  * @reg_domain_6g_id_client_sp: 6G domain id for clients of the SP AP.
672  * @reg_domain_6g_id_client_vlp: 6G domain id for clients of the VLP AP.
673  */
674 struct sixghz_super_to_subdomains {
675 	uint16_t reg_6ghz_super_dmn_id;
676 	uint8_t reg_domain_6g_id_ap_lpi;
677 	uint8_t reg_domain_6g_id_ap_sp;
678 	uint8_t reg_domain_6g_id_ap_vlp;
679 	uint8_t reg_domain_6g_id_client_lpi[REG_MAX_CLIENT_TYPE];
680 	uint8_t reg_domain_6g_id_client_sp[REG_MAX_CLIENT_TYPE];
681 	uint8_t reg_domain_6g_id_client_vlp[REG_MAX_CLIENT_TYPE];
682 };
683 #endif
684 #endif
685 
686 QDF_STATUS reg_get_num_countries(int *num_countries);
687 
688 QDF_STATUS reg_get_num_reg_dmn_pairs(int *num_reg_dmn);
689 
690 /**
691  * reg_etsi13_regdmn () - Checks if the reg domain is ETSI13 or not
692  * @reg_dmn: reg domain
693  *
694  * Return: true or false
695  */
696 bool reg_etsi13_regdmn(uint8_t reg_dmn);
697 
698 /**
699  * reg_fcc_regdmn () - Checks if the reg domain is FCC3/FCC8/FCC15/FCC16 or not
700  * @reg_dmn: reg domain
701  *
702  * Return: true or false
703  */
704 bool reg_fcc_regdmn(uint8_t reg_dmn);
705 
706 #ifdef WLAN_REG_PARTIAL_OFFLOAD
707 QDF_STATUS reg_get_default_country(uint16_t *default_country);
708 
709 /**
710  * reg_en302_502_regdmn() - Check if the reg domain is en302_502 applicable.
711  * @reg_dmn: Regulatory domain pair ID.
712  *
713  * Return: True if EN302_502 applicable, else false.
714  */
715 bool reg_en302_502_regdmn(uint16_t reg_dmn);
716 #endif
717 #endif
718