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