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