1 /* 2 * Copyright 2002-2005, Instant802 Networks, Inc. 3 * Copyright 2005-2006, Devicescape Software, Inc. 4 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> 5 * Copyright 2008-2011 Luis R. Rodriguez <mcgrof@qca.qualcomm.com> 6 * 7 * Permission to use, copy, modify, and/or distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 21 /** 22 * DOC: Wireless regulatory infrastructure 23 * 24 * The usual implementation is for a driver to read a device EEPROM to 25 * determine which regulatory domain it should be operating under, then 26 * looking up the allowable channels in a driver-local table and finally 27 * registering those channels in the wiphy structure. 28 * 29 * Another set of compliance enforcement is for drivers to use their 30 * own compliance limits which can be stored on the EEPROM. The host 31 * driver or firmware may ensure these are used. 32 * 33 * In addition to all this we provide an extra layer of regulatory 34 * conformance. For drivers which do not have any regulatory 35 * information CRDA provides the complete regulatory solution. 36 * For others it provides a community effort on further restrictions 37 * to enhance compliance. 38 * 39 * Note: When number of rules --> infinity we will not be able to 40 * index on alpha2 any more, instead we'll probably have to 41 * rely on some SHA1 checksum of the regdomain for example. 42 * 43 */ 44 45 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 46 47 #include <linux/kernel.h> 48 #include <linux/export.h> 49 #include <linux/slab.h> 50 #include <linux/list.h> 51 #include <linux/random.h> 52 #include <linux/ctype.h> 53 #include <linux/nl80211.h> 54 #include <linux/platform_device.h> 55 #include <linux/moduleparam.h> 56 #include <net/cfg80211.h> 57 #include "core.h" 58 #include "reg.h" 59 #include "regdb.h" 60 #include "nl80211.h" 61 62 #ifdef CONFIG_CFG80211_REG_DEBUG 63 #define REG_DBG_PRINT(format, args...) \ 64 printk(KERN_DEBUG pr_fmt(format), ##args) 65 #else 66 #define REG_DBG_PRINT(args...) 67 #endif 68 69 static struct regulatory_request core_request_world = { 70 .initiator = NL80211_REGDOM_SET_BY_CORE, 71 .alpha2[0] = '0', 72 .alpha2[1] = '0', 73 .intersect = false, 74 .processed = true, 75 .country_ie_env = ENVIRON_ANY, 76 }; 77 78 /* Receipt of information from last regulatory request */ 79 static struct regulatory_request *last_request = &core_request_world; 80 81 /* To trigger userspace events */ 82 static struct platform_device *reg_pdev; 83 84 static struct device_type reg_device_type = { 85 .uevent = reg_device_uevent, 86 }; 87 88 /* 89 * Central wireless core regulatory domains, we only need two, 90 * the current one and a world regulatory domain in case we have no 91 * information to give us an alpha2 92 */ 93 const struct ieee80211_regdomain *cfg80211_regdomain; 94 95 /* 96 * Protects static reg.c components: 97 * - cfg80211_world_regdom 98 * - cfg80211_regdom 99 * - last_request 100 * - reg_num_devs_support_basehint 101 */ 102 static DEFINE_MUTEX(reg_mutex); 103 104 /* 105 * Number of devices that registered to the core 106 * that support cellular base station regulatory hints 107 */ 108 static int reg_num_devs_support_basehint; 109 110 static inline void assert_reg_lock(void) 111 { 112 lockdep_assert_held(®_mutex); 113 } 114 115 /* Used to queue up regulatory hints */ 116 static LIST_HEAD(reg_requests_list); 117 static spinlock_t reg_requests_lock; 118 119 /* Used to queue up beacon hints for review */ 120 static LIST_HEAD(reg_pending_beacons); 121 static spinlock_t reg_pending_beacons_lock; 122 123 /* Used to keep track of processed beacon hints */ 124 static LIST_HEAD(reg_beacon_list); 125 126 struct reg_beacon { 127 struct list_head list; 128 struct ieee80211_channel chan; 129 }; 130 131 static void reg_todo(struct work_struct *work); 132 static DECLARE_WORK(reg_work, reg_todo); 133 134 static void reg_timeout_work(struct work_struct *work); 135 static DECLARE_DELAYED_WORK(reg_timeout, reg_timeout_work); 136 137 /* We keep a static world regulatory domain in case of the absence of CRDA */ 138 static const struct ieee80211_regdomain world_regdom = { 139 .n_reg_rules = 6, 140 .alpha2 = "00", 141 .reg_rules = { 142 /* IEEE 802.11b/g, channels 1..11 */ 143 REG_RULE(2412-10, 2462+10, 40, 6, 20, 0), 144 /* IEEE 802.11b/g, channels 12..13. No HT40 145 * channel fits here. */ 146 REG_RULE(2467-10, 2472+10, 20, 6, 20, 147 NL80211_RRF_PASSIVE_SCAN | 148 NL80211_RRF_NO_IBSS), 149 /* IEEE 802.11 channel 14 - Only JP enables 150 * this and for 802.11b only */ 151 REG_RULE(2484-10, 2484+10, 20, 6, 20, 152 NL80211_RRF_PASSIVE_SCAN | 153 NL80211_RRF_NO_IBSS | 154 NL80211_RRF_NO_OFDM), 155 /* IEEE 802.11a, channel 36..48 */ 156 REG_RULE(5180-10, 5240+10, 40, 6, 20, 157 NL80211_RRF_PASSIVE_SCAN | 158 NL80211_RRF_NO_IBSS), 159 160 /* NB: 5260 MHz - 5700 MHz requies DFS */ 161 162 /* IEEE 802.11a, channel 149..165 */ 163 REG_RULE(5745-10, 5825+10, 40, 6, 20, 164 NL80211_RRF_PASSIVE_SCAN | 165 NL80211_RRF_NO_IBSS), 166 167 /* IEEE 802.11ad (60gHz), channels 1..3 */ 168 REG_RULE(56160+2160*1-1080, 56160+2160*3+1080, 2160, 0, 0, 0), 169 } 170 }; 171 172 static const struct ieee80211_regdomain *cfg80211_world_regdom = 173 &world_regdom; 174 175 static char *ieee80211_regdom = "00"; 176 static char user_alpha2[2]; 177 178 module_param(ieee80211_regdom, charp, 0444); 179 MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain code"); 180 181 static void reset_regdomains(bool full_reset) 182 { 183 /* avoid freeing static information or freeing something twice */ 184 if (cfg80211_regdomain == cfg80211_world_regdom) 185 cfg80211_regdomain = NULL; 186 if (cfg80211_world_regdom == &world_regdom) 187 cfg80211_world_regdom = NULL; 188 if (cfg80211_regdomain == &world_regdom) 189 cfg80211_regdomain = NULL; 190 191 kfree(cfg80211_regdomain); 192 kfree(cfg80211_world_regdom); 193 194 cfg80211_world_regdom = &world_regdom; 195 cfg80211_regdomain = NULL; 196 197 if (!full_reset) 198 return; 199 200 if (last_request != &core_request_world) 201 kfree(last_request); 202 last_request = &core_request_world; 203 } 204 205 /* 206 * Dynamic world regulatory domain requested by the wireless 207 * core upon initialization 208 */ 209 static void update_world_regdomain(const struct ieee80211_regdomain *rd) 210 { 211 BUG_ON(!last_request); 212 213 reset_regdomains(false); 214 215 cfg80211_world_regdom = rd; 216 cfg80211_regdomain = rd; 217 } 218 219 bool is_world_regdom(const char *alpha2) 220 { 221 if (!alpha2) 222 return false; 223 if (alpha2[0] == '0' && alpha2[1] == '0') 224 return true; 225 return false; 226 } 227 228 static bool is_alpha2_set(const char *alpha2) 229 { 230 if (!alpha2) 231 return false; 232 if (alpha2[0] != 0 && alpha2[1] != 0) 233 return true; 234 return false; 235 } 236 237 static bool is_unknown_alpha2(const char *alpha2) 238 { 239 if (!alpha2) 240 return false; 241 /* 242 * Special case where regulatory domain was built by driver 243 * but a specific alpha2 cannot be determined 244 */ 245 if (alpha2[0] == '9' && alpha2[1] == '9') 246 return true; 247 return false; 248 } 249 250 static bool is_intersected_alpha2(const char *alpha2) 251 { 252 if (!alpha2) 253 return false; 254 /* 255 * Special case where regulatory domain is the 256 * result of an intersection between two regulatory domain 257 * structures 258 */ 259 if (alpha2[0] == '9' && alpha2[1] == '8') 260 return true; 261 return false; 262 } 263 264 static bool is_an_alpha2(const char *alpha2) 265 { 266 if (!alpha2) 267 return false; 268 if (isalpha(alpha2[0]) && isalpha(alpha2[1])) 269 return true; 270 return false; 271 } 272 273 static bool alpha2_equal(const char *alpha2_x, const char *alpha2_y) 274 { 275 if (!alpha2_x || !alpha2_y) 276 return false; 277 if (alpha2_x[0] == alpha2_y[0] && 278 alpha2_x[1] == alpha2_y[1]) 279 return true; 280 return false; 281 } 282 283 static bool regdom_changes(const char *alpha2) 284 { 285 assert_cfg80211_lock(); 286 287 if (!cfg80211_regdomain) 288 return true; 289 if (alpha2_equal(cfg80211_regdomain->alpha2, alpha2)) 290 return false; 291 return true; 292 } 293 294 /* 295 * The NL80211_REGDOM_SET_BY_USER regdom alpha2 is cached, this lets 296 * you know if a valid regulatory hint with NL80211_REGDOM_SET_BY_USER 297 * has ever been issued. 298 */ 299 static bool is_user_regdom_saved(void) 300 { 301 if (user_alpha2[0] == '9' && user_alpha2[1] == '7') 302 return false; 303 304 /* This would indicate a mistake on the design */ 305 if (WARN((!is_world_regdom(user_alpha2) && 306 !is_an_alpha2(user_alpha2)), 307 "Unexpected user alpha2: %c%c\n", 308 user_alpha2[0], 309 user_alpha2[1])) 310 return false; 311 312 return true; 313 } 314 315 static int reg_copy_regd(const struct ieee80211_regdomain **dst_regd, 316 const struct ieee80211_regdomain *src_regd) 317 { 318 struct ieee80211_regdomain *regd; 319 int size_of_regd = 0; 320 unsigned int i; 321 322 size_of_regd = sizeof(struct ieee80211_regdomain) + 323 ((src_regd->n_reg_rules + 1) * sizeof(struct ieee80211_reg_rule)); 324 325 regd = kzalloc(size_of_regd, GFP_KERNEL); 326 if (!regd) 327 return -ENOMEM; 328 329 memcpy(regd, src_regd, sizeof(struct ieee80211_regdomain)); 330 331 for (i = 0; i < src_regd->n_reg_rules; i++) 332 memcpy(®d->reg_rules[i], &src_regd->reg_rules[i], 333 sizeof(struct ieee80211_reg_rule)); 334 335 *dst_regd = regd; 336 return 0; 337 } 338 339 #ifdef CONFIG_CFG80211_INTERNAL_REGDB 340 struct reg_regdb_search_request { 341 char alpha2[2]; 342 struct list_head list; 343 }; 344 345 static LIST_HEAD(reg_regdb_search_list); 346 static DEFINE_MUTEX(reg_regdb_search_mutex); 347 348 static void reg_regdb_search(struct work_struct *work) 349 { 350 struct reg_regdb_search_request *request; 351 const struct ieee80211_regdomain *curdom, *regdom; 352 int i, r; 353 bool set_reg = false; 354 355 mutex_lock(&cfg80211_mutex); 356 357 mutex_lock(®_regdb_search_mutex); 358 while (!list_empty(®_regdb_search_list)) { 359 request = list_first_entry(®_regdb_search_list, 360 struct reg_regdb_search_request, 361 list); 362 list_del(&request->list); 363 364 for (i=0; i<reg_regdb_size; i++) { 365 curdom = reg_regdb[i]; 366 367 if (!memcmp(request->alpha2, curdom->alpha2, 2)) { 368 r = reg_copy_regd(®dom, curdom); 369 if (r) 370 break; 371 set_reg = true; 372 break; 373 } 374 } 375 376 kfree(request); 377 } 378 mutex_unlock(®_regdb_search_mutex); 379 380 if (set_reg) 381 set_regdom(regdom); 382 383 mutex_unlock(&cfg80211_mutex); 384 } 385 386 static DECLARE_WORK(reg_regdb_work, reg_regdb_search); 387 388 static void reg_regdb_query(const char *alpha2) 389 { 390 struct reg_regdb_search_request *request; 391 392 if (!alpha2) 393 return; 394 395 request = kzalloc(sizeof(struct reg_regdb_search_request), GFP_KERNEL); 396 if (!request) 397 return; 398 399 memcpy(request->alpha2, alpha2, 2); 400 401 mutex_lock(®_regdb_search_mutex); 402 list_add_tail(&request->list, ®_regdb_search_list); 403 mutex_unlock(®_regdb_search_mutex); 404 405 schedule_work(®_regdb_work); 406 } 407 408 /* Feel free to add any other sanity checks here */ 409 static void reg_regdb_size_check(void) 410 { 411 /* We should ideally BUILD_BUG_ON() but then random builds would fail */ 412 WARN_ONCE(!reg_regdb_size, "db.txt is empty, you should update it..."); 413 } 414 #else 415 static inline void reg_regdb_size_check(void) {} 416 static inline void reg_regdb_query(const char *alpha2) {} 417 #endif /* CONFIG_CFG80211_INTERNAL_REGDB */ 418 419 /* 420 * This lets us keep regulatory code which is updated on a regulatory 421 * basis in userspace. Country information is filled in by 422 * reg_device_uevent 423 */ 424 static int call_crda(const char *alpha2) 425 { 426 if (!is_world_regdom((char *) alpha2)) 427 pr_info("Calling CRDA for country: %c%c\n", 428 alpha2[0], alpha2[1]); 429 else 430 pr_info("Calling CRDA to update world regulatory domain\n"); 431 432 /* query internal regulatory database (if it exists) */ 433 reg_regdb_query(alpha2); 434 435 return kobject_uevent(®_pdev->dev.kobj, KOBJ_CHANGE); 436 } 437 438 /* Used by nl80211 before kmalloc'ing our regulatory domain */ 439 bool reg_is_valid_request(const char *alpha2) 440 { 441 assert_cfg80211_lock(); 442 443 if (!last_request) 444 return false; 445 446 return alpha2_equal(last_request->alpha2, alpha2); 447 } 448 449 /* Sanity check on a regulatory rule */ 450 static bool is_valid_reg_rule(const struct ieee80211_reg_rule *rule) 451 { 452 const struct ieee80211_freq_range *freq_range = &rule->freq_range; 453 u32 freq_diff; 454 455 if (freq_range->start_freq_khz <= 0 || freq_range->end_freq_khz <= 0) 456 return false; 457 458 if (freq_range->start_freq_khz > freq_range->end_freq_khz) 459 return false; 460 461 freq_diff = freq_range->end_freq_khz - freq_range->start_freq_khz; 462 463 if (freq_range->end_freq_khz <= freq_range->start_freq_khz || 464 freq_range->max_bandwidth_khz > freq_diff) 465 return false; 466 467 return true; 468 } 469 470 static bool is_valid_rd(const struct ieee80211_regdomain *rd) 471 { 472 const struct ieee80211_reg_rule *reg_rule = NULL; 473 unsigned int i; 474 475 if (!rd->n_reg_rules) 476 return false; 477 478 if (WARN_ON(rd->n_reg_rules > NL80211_MAX_SUPP_REG_RULES)) 479 return false; 480 481 for (i = 0; i < rd->n_reg_rules; i++) { 482 reg_rule = &rd->reg_rules[i]; 483 if (!is_valid_reg_rule(reg_rule)) 484 return false; 485 } 486 487 return true; 488 } 489 490 static bool reg_does_bw_fit(const struct ieee80211_freq_range *freq_range, 491 u32 center_freq_khz, 492 u32 bw_khz) 493 { 494 u32 start_freq_khz, end_freq_khz; 495 496 start_freq_khz = center_freq_khz - (bw_khz/2); 497 end_freq_khz = center_freq_khz + (bw_khz/2); 498 499 if (start_freq_khz >= freq_range->start_freq_khz && 500 end_freq_khz <= freq_range->end_freq_khz) 501 return true; 502 503 return false; 504 } 505 506 /** 507 * freq_in_rule_band - tells us if a frequency is in a frequency band 508 * @freq_range: frequency rule we want to query 509 * @freq_khz: frequency we are inquiring about 510 * 511 * This lets us know if a specific frequency rule is or is not relevant to 512 * a specific frequency's band. Bands are device specific and artificial 513 * definitions (the "2.4 GHz band", the "5 GHz band" and the "60GHz band"), 514 * however it is safe for now to assume that a frequency rule should not be 515 * part of a frequency's band if the start freq or end freq are off by more 516 * than 2 GHz for the 2.4 and 5 GHz bands, and by more than 10 GHz for the 517 * 60 GHz band. 518 * This resolution can be lowered and should be considered as we add 519 * regulatory rule support for other "bands". 520 **/ 521 static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range, 522 u32 freq_khz) 523 { 524 #define ONE_GHZ_IN_KHZ 1000000 525 /* 526 * From 802.11ad: directional multi-gigabit (DMG): 527 * Pertaining to operation in a frequency band containing a channel 528 * with the Channel starting frequency above 45 GHz. 529 */ 530 u32 limit = freq_khz > 45 * ONE_GHZ_IN_KHZ ? 531 10 * ONE_GHZ_IN_KHZ : 2 * ONE_GHZ_IN_KHZ; 532 if (abs(freq_khz - freq_range->start_freq_khz) <= limit) 533 return true; 534 if (abs(freq_khz - freq_range->end_freq_khz) <= limit) 535 return true; 536 return false; 537 #undef ONE_GHZ_IN_KHZ 538 } 539 540 /* 541 * Helper for regdom_intersect(), this does the real 542 * mathematical intersection fun 543 */ 544 static int reg_rules_intersect( 545 const struct ieee80211_reg_rule *rule1, 546 const struct ieee80211_reg_rule *rule2, 547 struct ieee80211_reg_rule *intersected_rule) 548 { 549 const struct ieee80211_freq_range *freq_range1, *freq_range2; 550 struct ieee80211_freq_range *freq_range; 551 const struct ieee80211_power_rule *power_rule1, *power_rule2; 552 struct ieee80211_power_rule *power_rule; 553 u32 freq_diff; 554 555 freq_range1 = &rule1->freq_range; 556 freq_range2 = &rule2->freq_range; 557 freq_range = &intersected_rule->freq_range; 558 559 power_rule1 = &rule1->power_rule; 560 power_rule2 = &rule2->power_rule; 561 power_rule = &intersected_rule->power_rule; 562 563 freq_range->start_freq_khz = max(freq_range1->start_freq_khz, 564 freq_range2->start_freq_khz); 565 freq_range->end_freq_khz = min(freq_range1->end_freq_khz, 566 freq_range2->end_freq_khz); 567 freq_range->max_bandwidth_khz = min(freq_range1->max_bandwidth_khz, 568 freq_range2->max_bandwidth_khz); 569 570 freq_diff = freq_range->end_freq_khz - freq_range->start_freq_khz; 571 if (freq_range->max_bandwidth_khz > freq_diff) 572 freq_range->max_bandwidth_khz = freq_diff; 573 574 power_rule->max_eirp = min(power_rule1->max_eirp, 575 power_rule2->max_eirp); 576 power_rule->max_antenna_gain = min(power_rule1->max_antenna_gain, 577 power_rule2->max_antenna_gain); 578 579 intersected_rule->flags = (rule1->flags | rule2->flags); 580 581 if (!is_valid_reg_rule(intersected_rule)) 582 return -EINVAL; 583 584 return 0; 585 } 586 587 /** 588 * regdom_intersect - do the intersection between two regulatory domains 589 * @rd1: first regulatory domain 590 * @rd2: second regulatory domain 591 * 592 * Use this function to get the intersection between two regulatory domains. 593 * Once completed we will mark the alpha2 for the rd as intersected, "98", 594 * as no one single alpha2 can represent this regulatory domain. 595 * 596 * Returns a pointer to the regulatory domain structure which will hold the 597 * resulting intersection of rules between rd1 and rd2. We will 598 * kzalloc() this structure for you. 599 */ 600 static struct ieee80211_regdomain *regdom_intersect( 601 const struct ieee80211_regdomain *rd1, 602 const struct ieee80211_regdomain *rd2) 603 { 604 int r, size_of_regd; 605 unsigned int x, y; 606 unsigned int num_rules = 0, rule_idx = 0; 607 const struct ieee80211_reg_rule *rule1, *rule2; 608 struct ieee80211_reg_rule *intersected_rule; 609 struct ieee80211_regdomain *rd; 610 /* This is just a dummy holder to help us count */ 611 struct ieee80211_reg_rule irule; 612 613 /* Uses the stack temporarily for counter arithmetic */ 614 intersected_rule = &irule; 615 616 memset(intersected_rule, 0, sizeof(struct ieee80211_reg_rule)); 617 618 if (!rd1 || !rd2) 619 return NULL; 620 621 /* 622 * First we get a count of the rules we'll need, then we actually 623 * build them. This is to so we can malloc() and free() a 624 * regdomain once. The reason we use reg_rules_intersect() here 625 * is it will return -EINVAL if the rule computed makes no sense. 626 * All rules that do check out OK are valid. 627 */ 628 629 for (x = 0; x < rd1->n_reg_rules; x++) { 630 rule1 = &rd1->reg_rules[x]; 631 for (y = 0; y < rd2->n_reg_rules; y++) { 632 rule2 = &rd2->reg_rules[y]; 633 if (!reg_rules_intersect(rule1, rule2, 634 intersected_rule)) 635 num_rules++; 636 memset(intersected_rule, 0, 637 sizeof(struct ieee80211_reg_rule)); 638 } 639 } 640 641 if (!num_rules) 642 return NULL; 643 644 size_of_regd = sizeof(struct ieee80211_regdomain) + 645 ((num_rules + 1) * sizeof(struct ieee80211_reg_rule)); 646 647 rd = kzalloc(size_of_regd, GFP_KERNEL); 648 if (!rd) 649 return NULL; 650 651 for (x = 0; x < rd1->n_reg_rules; x++) { 652 rule1 = &rd1->reg_rules[x]; 653 for (y = 0; y < rd2->n_reg_rules; y++) { 654 rule2 = &rd2->reg_rules[y]; 655 /* 656 * This time around instead of using the stack lets 657 * write to the target rule directly saving ourselves 658 * a memcpy() 659 */ 660 intersected_rule = &rd->reg_rules[rule_idx]; 661 r = reg_rules_intersect(rule1, rule2, 662 intersected_rule); 663 /* 664 * No need to memset here the intersected rule here as 665 * we're not using the stack anymore 666 */ 667 if (r) 668 continue; 669 rule_idx++; 670 } 671 } 672 673 if (rule_idx != num_rules) { 674 kfree(rd); 675 return NULL; 676 } 677 678 rd->n_reg_rules = num_rules; 679 rd->alpha2[0] = '9'; 680 rd->alpha2[1] = '8'; 681 682 return rd; 683 } 684 685 /* 686 * XXX: add support for the rest of enum nl80211_reg_rule_flags, we may 687 * want to just have the channel structure use these 688 */ 689 static u32 map_regdom_flags(u32 rd_flags) 690 { 691 u32 channel_flags = 0; 692 if (rd_flags & NL80211_RRF_PASSIVE_SCAN) 693 channel_flags |= IEEE80211_CHAN_PASSIVE_SCAN; 694 if (rd_flags & NL80211_RRF_NO_IBSS) 695 channel_flags |= IEEE80211_CHAN_NO_IBSS; 696 if (rd_flags & NL80211_RRF_DFS) 697 channel_flags |= IEEE80211_CHAN_RADAR; 698 if (rd_flags & NL80211_RRF_NO_OFDM) 699 channel_flags |= IEEE80211_CHAN_NO_OFDM; 700 return channel_flags; 701 } 702 703 static int freq_reg_info_regd(struct wiphy *wiphy, 704 u32 center_freq, 705 u32 desired_bw_khz, 706 const struct ieee80211_reg_rule **reg_rule, 707 const struct ieee80211_regdomain *custom_regd) 708 { 709 int i; 710 bool band_rule_found = false; 711 const struct ieee80211_regdomain *regd; 712 bool bw_fits = false; 713 714 if (!desired_bw_khz) 715 desired_bw_khz = MHZ_TO_KHZ(20); 716 717 regd = custom_regd ? custom_regd : cfg80211_regdomain; 718 719 /* 720 * Follow the driver's regulatory domain, if present, unless a country 721 * IE has been processed or a user wants to help complaince further 722 */ 723 if (!custom_regd && 724 last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE && 725 last_request->initiator != NL80211_REGDOM_SET_BY_USER && 726 wiphy->regd) 727 regd = wiphy->regd; 728 729 if (!regd) 730 return -EINVAL; 731 732 for (i = 0; i < regd->n_reg_rules; i++) { 733 const struct ieee80211_reg_rule *rr; 734 const struct ieee80211_freq_range *fr = NULL; 735 736 rr = ®d->reg_rules[i]; 737 fr = &rr->freq_range; 738 739 /* 740 * We only need to know if one frequency rule was 741 * was in center_freq's band, that's enough, so lets 742 * not overwrite it once found 743 */ 744 if (!band_rule_found) 745 band_rule_found = freq_in_rule_band(fr, center_freq); 746 747 bw_fits = reg_does_bw_fit(fr, 748 center_freq, 749 desired_bw_khz); 750 751 if (band_rule_found && bw_fits) { 752 *reg_rule = rr; 753 return 0; 754 } 755 } 756 757 if (!band_rule_found) 758 return -ERANGE; 759 760 return -EINVAL; 761 } 762 763 int freq_reg_info(struct wiphy *wiphy, 764 u32 center_freq, 765 u32 desired_bw_khz, 766 const struct ieee80211_reg_rule **reg_rule) 767 { 768 assert_cfg80211_lock(); 769 return freq_reg_info_regd(wiphy, 770 center_freq, 771 desired_bw_khz, 772 reg_rule, 773 NULL); 774 } 775 EXPORT_SYMBOL(freq_reg_info); 776 777 #ifdef CONFIG_CFG80211_REG_DEBUG 778 static const char *reg_initiator_name(enum nl80211_reg_initiator initiator) 779 { 780 switch (initiator) { 781 case NL80211_REGDOM_SET_BY_CORE: 782 return "Set by core"; 783 case NL80211_REGDOM_SET_BY_USER: 784 return "Set by user"; 785 case NL80211_REGDOM_SET_BY_DRIVER: 786 return "Set by driver"; 787 case NL80211_REGDOM_SET_BY_COUNTRY_IE: 788 return "Set by country IE"; 789 default: 790 WARN_ON(1); 791 return "Set by bug"; 792 } 793 } 794 795 static void chan_reg_rule_print_dbg(struct ieee80211_channel *chan, 796 u32 desired_bw_khz, 797 const struct ieee80211_reg_rule *reg_rule) 798 { 799 const struct ieee80211_power_rule *power_rule; 800 const struct ieee80211_freq_range *freq_range; 801 char max_antenna_gain[32]; 802 803 power_rule = ®_rule->power_rule; 804 freq_range = ®_rule->freq_range; 805 806 if (!power_rule->max_antenna_gain) 807 snprintf(max_antenna_gain, 32, "N/A"); 808 else 809 snprintf(max_antenna_gain, 32, "%d", power_rule->max_antenna_gain); 810 811 REG_DBG_PRINT("Updating information on frequency %d MHz " 812 "for a %d MHz width channel with regulatory rule:\n", 813 chan->center_freq, 814 KHZ_TO_MHZ(desired_bw_khz)); 815 816 REG_DBG_PRINT("%d KHz - %d KHz @ %d KHz), (%s mBi, %d mBm)\n", 817 freq_range->start_freq_khz, 818 freq_range->end_freq_khz, 819 freq_range->max_bandwidth_khz, 820 max_antenna_gain, 821 power_rule->max_eirp); 822 } 823 #else 824 static void chan_reg_rule_print_dbg(struct ieee80211_channel *chan, 825 u32 desired_bw_khz, 826 const struct ieee80211_reg_rule *reg_rule) 827 { 828 return; 829 } 830 #endif 831 832 /* 833 * Note that right now we assume the desired channel bandwidth 834 * is always 20 MHz for each individual channel (HT40 uses 20 MHz 835 * per channel, the primary and the extension channel). To support 836 * smaller custom bandwidths such as 5 MHz or 10 MHz we'll need a 837 * new ieee80211_channel.target_bw and re run the regulatory check 838 * on the wiphy with the target_bw specified. Then we can simply use 839 * that below for the desired_bw_khz below. 840 */ 841 static void handle_channel(struct wiphy *wiphy, 842 enum nl80211_reg_initiator initiator, 843 enum ieee80211_band band, 844 unsigned int chan_idx) 845 { 846 int r; 847 u32 flags, bw_flags = 0; 848 u32 desired_bw_khz = MHZ_TO_KHZ(20); 849 const struct ieee80211_reg_rule *reg_rule = NULL; 850 const struct ieee80211_power_rule *power_rule = NULL; 851 const struct ieee80211_freq_range *freq_range = NULL; 852 struct ieee80211_supported_band *sband; 853 struct ieee80211_channel *chan; 854 struct wiphy *request_wiphy = NULL; 855 856 assert_cfg80211_lock(); 857 858 request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); 859 860 sband = wiphy->bands[band]; 861 BUG_ON(chan_idx >= sband->n_channels); 862 chan = &sband->channels[chan_idx]; 863 864 flags = chan->orig_flags; 865 866 r = freq_reg_info(wiphy, 867 MHZ_TO_KHZ(chan->center_freq), 868 desired_bw_khz, 869 ®_rule); 870 871 if (r) { 872 /* 873 * We will disable all channels that do not match our 874 * received regulatory rule unless the hint is coming 875 * from a Country IE and the Country IE had no information 876 * about a band. The IEEE 802.11 spec allows for an AP 877 * to send only a subset of the regulatory rules allowed, 878 * so an AP in the US that only supports 2.4 GHz may only send 879 * a country IE with information for the 2.4 GHz band 880 * while 5 GHz is still supported. 881 */ 882 if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE && 883 r == -ERANGE) 884 return; 885 886 REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq); 887 chan->flags = IEEE80211_CHAN_DISABLED; 888 return; 889 } 890 891 chan_reg_rule_print_dbg(chan, desired_bw_khz, reg_rule); 892 893 power_rule = ®_rule->power_rule; 894 freq_range = ®_rule->freq_range; 895 896 if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40)) 897 bw_flags = IEEE80211_CHAN_NO_HT40; 898 899 if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER && 900 request_wiphy && request_wiphy == wiphy && 901 request_wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) { 902 /* 903 * This guarantees the driver's requested regulatory domain 904 * will always be used as a base for further regulatory 905 * settings 906 */ 907 chan->flags = chan->orig_flags = 908 map_regdom_flags(reg_rule->flags) | bw_flags; 909 chan->max_antenna_gain = chan->orig_mag = 910 (int) MBI_TO_DBI(power_rule->max_antenna_gain); 911 chan->max_reg_power = chan->max_power = chan->orig_mpwr = 912 (int) MBM_TO_DBM(power_rule->max_eirp); 913 return; 914 } 915 916 chan->beacon_found = false; 917 chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); 918 chan->max_antenna_gain = min(chan->orig_mag, 919 (int) MBI_TO_DBI(power_rule->max_antenna_gain)); 920 chan->max_reg_power = (int) MBM_TO_DBM(power_rule->max_eirp); 921 if (chan->orig_mpwr) { 922 /* 923 * Devices that have their own custom regulatory domain 924 * but also use WIPHY_FLAG_STRICT_REGULATORY will follow the 925 * passed country IE power settings. 926 */ 927 if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE && 928 wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY && 929 wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) 930 chan->max_power = chan->max_reg_power; 931 else 932 chan->max_power = min(chan->orig_mpwr, 933 chan->max_reg_power); 934 } else 935 chan->max_power = chan->max_reg_power; 936 } 937 938 static void handle_band(struct wiphy *wiphy, 939 enum ieee80211_band band, 940 enum nl80211_reg_initiator initiator) 941 { 942 unsigned int i; 943 struct ieee80211_supported_band *sband; 944 945 BUG_ON(!wiphy->bands[band]); 946 sband = wiphy->bands[band]; 947 948 for (i = 0; i < sband->n_channels; i++) 949 handle_channel(wiphy, initiator, band, i); 950 } 951 952 static bool reg_request_cell_base(struct regulatory_request *request) 953 { 954 if (request->initiator != NL80211_REGDOM_SET_BY_USER) 955 return false; 956 if (request->user_reg_hint_type != NL80211_USER_REG_HINT_CELL_BASE) 957 return false; 958 return true; 959 } 960 961 bool reg_last_request_cell_base(void) 962 { 963 bool val; 964 assert_cfg80211_lock(); 965 966 mutex_lock(®_mutex); 967 val = reg_request_cell_base(last_request); 968 mutex_unlock(®_mutex); 969 return val; 970 } 971 972 #ifdef CONFIG_CFG80211_CERTIFICATION_ONUS 973 974 /* Core specific check */ 975 static int reg_ignore_cell_hint(struct regulatory_request *pending_request) 976 { 977 if (!reg_num_devs_support_basehint) 978 return -EOPNOTSUPP; 979 980 if (reg_request_cell_base(last_request)) { 981 if (!regdom_changes(pending_request->alpha2)) 982 return -EALREADY; 983 return 0; 984 } 985 return 0; 986 } 987 988 /* Device specific check */ 989 static bool reg_dev_ignore_cell_hint(struct wiphy *wiphy) 990 { 991 if (!(wiphy->features & NL80211_FEATURE_CELL_BASE_REG_HINTS)) 992 return true; 993 return false; 994 } 995 #else 996 static int reg_ignore_cell_hint(struct regulatory_request *pending_request) 997 { 998 return -EOPNOTSUPP; 999 } 1000 static int reg_dev_ignore_cell_hint(struct wiphy *wiphy) 1001 { 1002 return true; 1003 } 1004 #endif 1005 1006 1007 static bool ignore_reg_update(struct wiphy *wiphy, 1008 enum nl80211_reg_initiator initiator) 1009 { 1010 if (!last_request) { 1011 REG_DBG_PRINT("Ignoring regulatory request %s since " 1012 "last_request is not set\n", 1013 reg_initiator_name(initiator)); 1014 return true; 1015 } 1016 1017 if (initiator == NL80211_REGDOM_SET_BY_CORE && 1018 wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY) { 1019 REG_DBG_PRINT("Ignoring regulatory request %s " 1020 "since the driver uses its own custom " 1021 "regulatory domain\n", 1022 reg_initiator_name(initiator)); 1023 return true; 1024 } 1025 1026 /* 1027 * wiphy->regd will be set once the device has its own 1028 * desired regulatory domain set 1029 */ 1030 if (wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY && !wiphy->regd && 1031 initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE && 1032 !is_world_regdom(last_request->alpha2)) { 1033 REG_DBG_PRINT("Ignoring regulatory request %s " 1034 "since the driver requires its own regulatory " 1035 "domain to be set first\n", 1036 reg_initiator_name(initiator)); 1037 return true; 1038 } 1039 1040 if (reg_request_cell_base(last_request)) 1041 return reg_dev_ignore_cell_hint(wiphy); 1042 1043 return false; 1044 } 1045 1046 static void handle_reg_beacon(struct wiphy *wiphy, 1047 unsigned int chan_idx, 1048 struct reg_beacon *reg_beacon) 1049 { 1050 struct ieee80211_supported_band *sband; 1051 struct ieee80211_channel *chan; 1052 bool channel_changed = false; 1053 struct ieee80211_channel chan_before; 1054 1055 assert_cfg80211_lock(); 1056 1057 sband = wiphy->bands[reg_beacon->chan.band]; 1058 chan = &sband->channels[chan_idx]; 1059 1060 if (likely(chan->center_freq != reg_beacon->chan.center_freq)) 1061 return; 1062 1063 if (chan->beacon_found) 1064 return; 1065 1066 chan->beacon_found = true; 1067 1068 if (wiphy->flags & WIPHY_FLAG_DISABLE_BEACON_HINTS) 1069 return; 1070 1071 chan_before.center_freq = chan->center_freq; 1072 chan_before.flags = chan->flags; 1073 1074 if (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN) { 1075 chan->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; 1076 channel_changed = true; 1077 } 1078 1079 if (chan->flags & IEEE80211_CHAN_NO_IBSS) { 1080 chan->flags &= ~IEEE80211_CHAN_NO_IBSS; 1081 channel_changed = true; 1082 } 1083 1084 if (channel_changed) 1085 nl80211_send_beacon_hint_event(wiphy, &chan_before, chan); 1086 } 1087 1088 /* 1089 * Called when a scan on a wiphy finds a beacon on 1090 * new channel 1091 */ 1092 static void wiphy_update_new_beacon(struct wiphy *wiphy, 1093 struct reg_beacon *reg_beacon) 1094 { 1095 unsigned int i; 1096 struct ieee80211_supported_band *sband; 1097 1098 assert_cfg80211_lock(); 1099 1100 if (!wiphy->bands[reg_beacon->chan.band]) 1101 return; 1102 1103 sband = wiphy->bands[reg_beacon->chan.band]; 1104 1105 for (i = 0; i < sband->n_channels; i++) 1106 handle_reg_beacon(wiphy, i, reg_beacon); 1107 } 1108 1109 /* 1110 * Called upon reg changes or a new wiphy is added 1111 */ 1112 static void wiphy_update_beacon_reg(struct wiphy *wiphy) 1113 { 1114 unsigned int i; 1115 struct ieee80211_supported_band *sband; 1116 struct reg_beacon *reg_beacon; 1117 1118 assert_cfg80211_lock(); 1119 1120 if (list_empty(®_beacon_list)) 1121 return; 1122 1123 list_for_each_entry(reg_beacon, ®_beacon_list, list) { 1124 if (!wiphy->bands[reg_beacon->chan.band]) 1125 continue; 1126 sband = wiphy->bands[reg_beacon->chan.band]; 1127 for (i = 0; i < sband->n_channels; i++) 1128 handle_reg_beacon(wiphy, i, reg_beacon); 1129 } 1130 } 1131 1132 static bool reg_is_world_roaming(struct wiphy *wiphy) 1133 { 1134 if (is_world_regdom(cfg80211_regdomain->alpha2) || 1135 (wiphy->regd && is_world_regdom(wiphy->regd->alpha2))) 1136 return true; 1137 if (last_request && 1138 last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE && 1139 wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY) 1140 return true; 1141 return false; 1142 } 1143 1144 /* Reap the advantages of previously found beacons */ 1145 static void reg_process_beacons(struct wiphy *wiphy) 1146 { 1147 /* 1148 * Means we are just firing up cfg80211, so no beacons would 1149 * have been processed yet. 1150 */ 1151 if (!last_request) 1152 return; 1153 if (!reg_is_world_roaming(wiphy)) 1154 return; 1155 wiphy_update_beacon_reg(wiphy); 1156 } 1157 1158 static bool is_ht40_not_allowed(struct ieee80211_channel *chan) 1159 { 1160 if (!chan) 1161 return true; 1162 if (chan->flags & IEEE80211_CHAN_DISABLED) 1163 return true; 1164 /* This would happen when regulatory rules disallow HT40 completely */ 1165 if (IEEE80211_CHAN_NO_HT40 == (chan->flags & (IEEE80211_CHAN_NO_HT40))) 1166 return true; 1167 return false; 1168 } 1169 1170 static void reg_process_ht_flags_channel(struct wiphy *wiphy, 1171 enum ieee80211_band band, 1172 unsigned int chan_idx) 1173 { 1174 struct ieee80211_supported_band *sband; 1175 struct ieee80211_channel *channel; 1176 struct ieee80211_channel *channel_before = NULL, *channel_after = NULL; 1177 unsigned int i; 1178 1179 assert_cfg80211_lock(); 1180 1181 sband = wiphy->bands[band]; 1182 BUG_ON(chan_idx >= sband->n_channels); 1183 channel = &sband->channels[chan_idx]; 1184 1185 if (is_ht40_not_allowed(channel)) { 1186 channel->flags |= IEEE80211_CHAN_NO_HT40; 1187 return; 1188 } 1189 1190 /* 1191 * We need to ensure the extension channels exist to 1192 * be able to use HT40- or HT40+, this finds them (or not) 1193 */ 1194 for (i = 0; i < sband->n_channels; i++) { 1195 struct ieee80211_channel *c = &sband->channels[i]; 1196 if (c->center_freq == (channel->center_freq - 20)) 1197 channel_before = c; 1198 if (c->center_freq == (channel->center_freq + 20)) 1199 channel_after = c; 1200 } 1201 1202 /* 1203 * Please note that this assumes target bandwidth is 20 MHz, 1204 * if that ever changes we also need to change the below logic 1205 * to include that as well. 1206 */ 1207 if (is_ht40_not_allowed(channel_before)) 1208 channel->flags |= IEEE80211_CHAN_NO_HT40MINUS; 1209 else 1210 channel->flags &= ~IEEE80211_CHAN_NO_HT40MINUS; 1211 1212 if (is_ht40_not_allowed(channel_after)) 1213 channel->flags |= IEEE80211_CHAN_NO_HT40PLUS; 1214 else 1215 channel->flags &= ~IEEE80211_CHAN_NO_HT40PLUS; 1216 } 1217 1218 static void reg_process_ht_flags_band(struct wiphy *wiphy, 1219 enum ieee80211_band band) 1220 { 1221 unsigned int i; 1222 struct ieee80211_supported_band *sband; 1223 1224 BUG_ON(!wiphy->bands[band]); 1225 sband = wiphy->bands[band]; 1226 1227 for (i = 0; i < sband->n_channels; i++) 1228 reg_process_ht_flags_channel(wiphy, band, i); 1229 } 1230 1231 static void reg_process_ht_flags(struct wiphy *wiphy) 1232 { 1233 enum ieee80211_band band; 1234 1235 if (!wiphy) 1236 return; 1237 1238 for (band = 0; band < IEEE80211_NUM_BANDS; band++) { 1239 if (wiphy->bands[band]) 1240 reg_process_ht_flags_band(wiphy, band); 1241 } 1242 1243 } 1244 1245 static void wiphy_update_regulatory(struct wiphy *wiphy, 1246 enum nl80211_reg_initiator initiator) 1247 { 1248 enum ieee80211_band band; 1249 1250 assert_reg_lock(); 1251 1252 if (ignore_reg_update(wiphy, initiator)) 1253 return; 1254 1255 last_request->dfs_region = cfg80211_regdomain->dfs_region; 1256 1257 for (band = 0; band < IEEE80211_NUM_BANDS; band++) { 1258 if (wiphy->bands[band]) 1259 handle_band(wiphy, band, initiator); 1260 } 1261 1262 reg_process_beacons(wiphy); 1263 reg_process_ht_flags(wiphy); 1264 if (wiphy->reg_notifier) 1265 wiphy->reg_notifier(wiphy, last_request); 1266 } 1267 1268 static void update_all_wiphy_regulatory(enum nl80211_reg_initiator initiator) 1269 { 1270 struct cfg80211_registered_device *rdev; 1271 struct wiphy *wiphy; 1272 1273 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { 1274 wiphy = &rdev->wiphy; 1275 wiphy_update_regulatory(wiphy, initiator); 1276 /* 1277 * Regulatory updates set by CORE are ignored for custom 1278 * regulatory cards. Let us notify the changes to the driver, 1279 * as some drivers used this to restore its orig_* reg domain. 1280 */ 1281 if (initiator == NL80211_REGDOM_SET_BY_CORE && 1282 wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY && 1283 wiphy->reg_notifier) 1284 wiphy->reg_notifier(wiphy, last_request); 1285 } 1286 } 1287 1288 static void handle_channel_custom(struct wiphy *wiphy, 1289 enum ieee80211_band band, 1290 unsigned int chan_idx, 1291 const struct ieee80211_regdomain *regd) 1292 { 1293 int r; 1294 u32 desired_bw_khz = MHZ_TO_KHZ(20); 1295 u32 bw_flags = 0; 1296 const struct ieee80211_reg_rule *reg_rule = NULL; 1297 const struct ieee80211_power_rule *power_rule = NULL; 1298 const struct ieee80211_freq_range *freq_range = NULL; 1299 struct ieee80211_supported_band *sband; 1300 struct ieee80211_channel *chan; 1301 1302 assert_reg_lock(); 1303 1304 sband = wiphy->bands[band]; 1305 BUG_ON(chan_idx >= sband->n_channels); 1306 chan = &sband->channels[chan_idx]; 1307 1308 r = freq_reg_info_regd(wiphy, 1309 MHZ_TO_KHZ(chan->center_freq), 1310 desired_bw_khz, 1311 ®_rule, 1312 regd); 1313 1314 if (r) { 1315 REG_DBG_PRINT("Disabling freq %d MHz as custom " 1316 "regd has no rule that fits a %d MHz " 1317 "wide channel\n", 1318 chan->center_freq, 1319 KHZ_TO_MHZ(desired_bw_khz)); 1320 chan->flags = IEEE80211_CHAN_DISABLED; 1321 return; 1322 } 1323 1324 chan_reg_rule_print_dbg(chan, desired_bw_khz, reg_rule); 1325 1326 power_rule = ®_rule->power_rule; 1327 freq_range = ®_rule->freq_range; 1328 1329 if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40)) 1330 bw_flags = IEEE80211_CHAN_NO_HT40; 1331 1332 chan->flags |= map_regdom_flags(reg_rule->flags) | bw_flags; 1333 chan->max_antenna_gain = (int) MBI_TO_DBI(power_rule->max_antenna_gain); 1334 chan->max_reg_power = chan->max_power = 1335 (int) MBM_TO_DBM(power_rule->max_eirp); 1336 } 1337 1338 static void handle_band_custom(struct wiphy *wiphy, enum ieee80211_band band, 1339 const struct ieee80211_regdomain *regd) 1340 { 1341 unsigned int i; 1342 struct ieee80211_supported_band *sband; 1343 1344 BUG_ON(!wiphy->bands[band]); 1345 sband = wiphy->bands[band]; 1346 1347 for (i = 0; i < sband->n_channels; i++) 1348 handle_channel_custom(wiphy, band, i, regd); 1349 } 1350 1351 /* Used by drivers prior to wiphy registration */ 1352 void wiphy_apply_custom_regulatory(struct wiphy *wiphy, 1353 const struct ieee80211_regdomain *regd) 1354 { 1355 enum ieee80211_band band; 1356 unsigned int bands_set = 0; 1357 1358 mutex_lock(®_mutex); 1359 for (band = 0; band < IEEE80211_NUM_BANDS; band++) { 1360 if (!wiphy->bands[band]) 1361 continue; 1362 handle_band_custom(wiphy, band, regd); 1363 bands_set++; 1364 } 1365 mutex_unlock(®_mutex); 1366 1367 /* 1368 * no point in calling this if it won't have any effect 1369 * on your device's supportd bands. 1370 */ 1371 WARN_ON(!bands_set); 1372 } 1373 EXPORT_SYMBOL(wiphy_apply_custom_regulatory); 1374 1375 /* 1376 * Return value which can be used by ignore_request() to indicate 1377 * it has been determined we should intersect two regulatory domains 1378 */ 1379 #define REG_INTERSECT 1 1380 1381 /* This has the logic which determines when a new request 1382 * should be ignored. */ 1383 static int ignore_request(struct wiphy *wiphy, 1384 struct regulatory_request *pending_request) 1385 { 1386 struct wiphy *last_wiphy = NULL; 1387 1388 assert_cfg80211_lock(); 1389 1390 /* All initial requests are respected */ 1391 if (!last_request) 1392 return 0; 1393 1394 switch (pending_request->initiator) { 1395 case NL80211_REGDOM_SET_BY_CORE: 1396 return 0; 1397 case NL80211_REGDOM_SET_BY_COUNTRY_IE: 1398 1399 if (reg_request_cell_base(last_request)) { 1400 /* Trust a Cell base station over the AP's country IE */ 1401 if (regdom_changes(pending_request->alpha2)) 1402 return -EOPNOTSUPP; 1403 return -EALREADY; 1404 } 1405 1406 last_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); 1407 1408 if (unlikely(!is_an_alpha2(pending_request->alpha2))) 1409 return -EINVAL; 1410 if (last_request->initiator == 1411 NL80211_REGDOM_SET_BY_COUNTRY_IE) { 1412 if (last_wiphy != wiphy) { 1413 /* 1414 * Two cards with two APs claiming different 1415 * Country IE alpha2s. We could 1416 * intersect them, but that seems unlikely 1417 * to be correct. Reject second one for now. 1418 */ 1419 if (regdom_changes(pending_request->alpha2)) 1420 return -EOPNOTSUPP; 1421 return -EALREADY; 1422 } 1423 /* 1424 * Two consecutive Country IE hints on the same wiphy. 1425 * This should be picked up early by the driver/stack 1426 */ 1427 if (WARN_ON(regdom_changes(pending_request->alpha2))) 1428 return 0; 1429 return -EALREADY; 1430 } 1431 return 0; 1432 case NL80211_REGDOM_SET_BY_DRIVER: 1433 if (last_request->initiator == NL80211_REGDOM_SET_BY_CORE) { 1434 if (regdom_changes(pending_request->alpha2)) 1435 return 0; 1436 return -EALREADY; 1437 } 1438 1439 /* 1440 * This would happen if you unplug and plug your card 1441 * back in or if you add a new device for which the previously 1442 * loaded card also agrees on the regulatory domain. 1443 */ 1444 if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER && 1445 !regdom_changes(pending_request->alpha2)) 1446 return -EALREADY; 1447 1448 return REG_INTERSECT; 1449 case NL80211_REGDOM_SET_BY_USER: 1450 if (reg_request_cell_base(pending_request)) 1451 return reg_ignore_cell_hint(pending_request); 1452 1453 if (reg_request_cell_base(last_request)) 1454 return -EOPNOTSUPP; 1455 1456 if (last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) 1457 return REG_INTERSECT; 1458 /* 1459 * If the user knows better the user should set the regdom 1460 * to their country before the IE is picked up 1461 */ 1462 if (last_request->initiator == NL80211_REGDOM_SET_BY_USER && 1463 last_request->intersect) 1464 return -EOPNOTSUPP; 1465 /* 1466 * Process user requests only after previous user/driver/core 1467 * requests have been processed 1468 */ 1469 if (last_request->initiator == NL80211_REGDOM_SET_BY_CORE || 1470 last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER || 1471 last_request->initiator == NL80211_REGDOM_SET_BY_USER) { 1472 if (regdom_changes(last_request->alpha2)) 1473 return -EAGAIN; 1474 } 1475 1476 if (!regdom_changes(pending_request->alpha2)) 1477 return -EALREADY; 1478 1479 return 0; 1480 } 1481 1482 return -EINVAL; 1483 } 1484 1485 static void reg_set_request_processed(void) 1486 { 1487 bool need_more_processing = false; 1488 1489 last_request->processed = true; 1490 1491 spin_lock(®_requests_lock); 1492 if (!list_empty(®_requests_list)) 1493 need_more_processing = true; 1494 spin_unlock(®_requests_lock); 1495 1496 if (last_request->initiator == NL80211_REGDOM_SET_BY_USER) 1497 cancel_delayed_work(®_timeout); 1498 1499 if (need_more_processing) 1500 schedule_work(®_work); 1501 } 1502 1503 /** 1504 * __regulatory_hint - hint to the wireless core a regulatory domain 1505 * @wiphy: if the hint comes from country information from an AP, this 1506 * is required to be set to the wiphy that received the information 1507 * @pending_request: the regulatory request currently being processed 1508 * 1509 * The Wireless subsystem can use this function to hint to the wireless core 1510 * what it believes should be the current regulatory domain. 1511 * 1512 * Returns zero if all went fine, %-EALREADY if a regulatory domain had 1513 * already been set or other standard error codes. 1514 * 1515 * Caller must hold &cfg80211_mutex and ®_mutex 1516 */ 1517 static int __regulatory_hint(struct wiphy *wiphy, 1518 struct regulatory_request *pending_request) 1519 { 1520 bool intersect = false; 1521 int r = 0; 1522 1523 assert_cfg80211_lock(); 1524 1525 r = ignore_request(wiphy, pending_request); 1526 1527 if (r == REG_INTERSECT) { 1528 if (pending_request->initiator == 1529 NL80211_REGDOM_SET_BY_DRIVER) { 1530 r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain); 1531 if (r) { 1532 kfree(pending_request); 1533 return r; 1534 } 1535 } 1536 intersect = true; 1537 } else if (r) { 1538 /* 1539 * If the regulatory domain being requested by the 1540 * driver has already been set just copy it to the 1541 * wiphy 1542 */ 1543 if (r == -EALREADY && 1544 pending_request->initiator == 1545 NL80211_REGDOM_SET_BY_DRIVER) { 1546 r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain); 1547 if (r) { 1548 kfree(pending_request); 1549 return r; 1550 } 1551 r = -EALREADY; 1552 goto new_request; 1553 } 1554 kfree(pending_request); 1555 return r; 1556 } 1557 1558 new_request: 1559 if (last_request != &core_request_world) 1560 kfree(last_request); 1561 1562 last_request = pending_request; 1563 last_request->intersect = intersect; 1564 1565 pending_request = NULL; 1566 1567 if (last_request->initiator == NL80211_REGDOM_SET_BY_USER) { 1568 user_alpha2[0] = last_request->alpha2[0]; 1569 user_alpha2[1] = last_request->alpha2[1]; 1570 } 1571 1572 /* When r == REG_INTERSECT we do need to call CRDA */ 1573 if (r < 0) { 1574 /* 1575 * Since CRDA will not be called in this case as we already 1576 * have applied the requested regulatory domain before we just 1577 * inform userspace we have processed the request 1578 */ 1579 if (r == -EALREADY) { 1580 nl80211_send_reg_change_event(last_request); 1581 reg_set_request_processed(); 1582 } 1583 return r; 1584 } 1585 1586 return call_crda(last_request->alpha2); 1587 } 1588 1589 /* This processes *all* regulatory hints */ 1590 static void reg_process_hint(struct regulatory_request *reg_request, 1591 enum nl80211_reg_initiator reg_initiator) 1592 { 1593 int r = 0; 1594 struct wiphy *wiphy = NULL; 1595 1596 BUG_ON(!reg_request->alpha2); 1597 1598 if (wiphy_idx_valid(reg_request->wiphy_idx)) 1599 wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx); 1600 1601 if (reg_initiator == NL80211_REGDOM_SET_BY_DRIVER && 1602 !wiphy) { 1603 kfree(reg_request); 1604 return; 1605 } 1606 1607 r = __regulatory_hint(wiphy, reg_request); 1608 /* This is required so that the orig_* parameters are saved */ 1609 if (r == -EALREADY && wiphy && 1610 wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) { 1611 wiphy_update_regulatory(wiphy, reg_initiator); 1612 return; 1613 } 1614 1615 /* 1616 * We only time out user hints, given that they should be the only 1617 * source of bogus requests. 1618 */ 1619 if (r != -EALREADY && 1620 reg_initiator == NL80211_REGDOM_SET_BY_USER) 1621 schedule_delayed_work(®_timeout, msecs_to_jiffies(3142)); 1622 } 1623 1624 /* 1625 * Processes regulatory hints, this is all the NL80211_REGDOM_SET_BY_* 1626 * Regulatory hints come on a first come first serve basis and we 1627 * must process each one atomically. 1628 */ 1629 static void reg_process_pending_hints(void) 1630 { 1631 struct regulatory_request *reg_request; 1632 1633 mutex_lock(&cfg80211_mutex); 1634 mutex_lock(®_mutex); 1635 1636 /* When last_request->processed becomes true this will be rescheduled */ 1637 if (last_request && !last_request->processed) { 1638 REG_DBG_PRINT("Pending regulatory request, waiting " 1639 "for it to be processed...\n"); 1640 goto out; 1641 } 1642 1643 spin_lock(®_requests_lock); 1644 1645 if (list_empty(®_requests_list)) { 1646 spin_unlock(®_requests_lock); 1647 goto out; 1648 } 1649 1650 reg_request = list_first_entry(®_requests_list, 1651 struct regulatory_request, 1652 list); 1653 list_del_init(®_request->list); 1654 1655 spin_unlock(®_requests_lock); 1656 1657 reg_process_hint(reg_request, reg_request->initiator); 1658 1659 out: 1660 mutex_unlock(®_mutex); 1661 mutex_unlock(&cfg80211_mutex); 1662 } 1663 1664 /* Processes beacon hints -- this has nothing to do with country IEs */ 1665 static void reg_process_pending_beacon_hints(void) 1666 { 1667 struct cfg80211_registered_device *rdev; 1668 struct reg_beacon *pending_beacon, *tmp; 1669 1670 /* 1671 * No need to hold the reg_mutex here as we just touch wiphys 1672 * and do not read or access regulatory variables. 1673 */ 1674 mutex_lock(&cfg80211_mutex); 1675 1676 /* This goes through the _pending_ beacon list */ 1677 spin_lock_bh(®_pending_beacons_lock); 1678 1679 if (list_empty(®_pending_beacons)) { 1680 spin_unlock_bh(®_pending_beacons_lock); 1681 goto out; 1682 } 1683 1684 list_for_each_entry_safe(pending_beacon, tmp, 1685 ®_pending_beacons, list) { 1686 1687 list_del_init(&pending_beacon->list); 1688 1689 /* Applies the beacon hint to current wiphys */ 1690 list_for_each_entry(rdev, &cfg80211_rdev_list, list) 1691 wiphy_update_new_beacon(&rdev->wiphy, pending_beacon); 1692 1693 /* Remembers the beacon hint for new wiphys or reg changes */ 1694 list_add_tail(&pending_beacon->list, ®_beacon_list); 1695 } 1696 1697 spin_unlock_bh(®_pending_beacons_lock); 1698 out: 1699 mutex_unlock(&cfg80211_mutex); 1700 } 1701 1702 static void reg_todo(struct work_struct *work) 1703 { 1704 reg_process_pending_hints(); 1705 reg_process_pending_beacon_hints(); 1706 } 1707 1708 static void queue_regulatory_request(struct regulatory_request *request) 1709 { 1710 if (isalpha(request->alpha2[0])) 1711 request->alpha2[0] = toupper(request->alpha2[0]); 1712 if (isalpha(request->alpha2[1])) 1713 request->alpha2[1] = toupper(request->alpha2[1]); 1714 1715 spin_lock(®_requests_lock); 1716 list_add_tail(&request->list, ®_requests_list); 1717 spin_unlock(®_requests_lock); 1718 1719 schedule_work(®_work); 1720 } 1721 1722 /* 1723 * Core regulatory hint -- happens during cfg80211_init() 1724 * and when we restore regulatory settings. 1725 */ 1726 static int regulatory_hint_core(const char *alpha2) 1727 { 1728 struct regulatory_request *request; 1729 1730 request = kzalloc(sizeof(struct regulatory_request), 1731 GFP_KERNEL); 1732 if (!request) 1733 return -ENOMEM; 1734 1735 request->alpha2[0] = alpha2[0]; 1736 request->alpha2[1] = alpha2[1]; 1737 request->initiator = NL80211_REGDOM_SET_BY_CORE; 1738 1739 queue_regulatory_request(request); 1740 1741 return 0; 1742 } 1743 1744 /* User hints */ 1745 int regulatory_hint_user(const char *alpha2, 1746 enum nl80211_user_reg_hint_type user_reg_hint_type) 1747 { 1748 struct regulatory_request *request; 1749 1750 BUG_ON(!alpha2); 1751 1752 request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); 1753 if (!request) 1754 return -ENOMEM; 1755 1756 request->wiphy_idx = WIPHY_IDX_STALE; 1757 request->alpha2[0] = alpha2[0]; 1758 request->alpha2[1] = alpha2[1]; 1759 request->initiator = NL80211_REGDOM_SET_BY_USER; 1760 request->user_reg_hint_type = user_reg_hint_type; 1761 1762 queue_regulatory_request(request); 1763 1764 return 0; 1765 } 1766 1767 /* Driver hints */ 1768 int regulatory_hint(struct wiphy *wiphy, const char *alpha2) 1769 { 1770 struct regulatory_request *request; 1771 1772 BUG_ON(!alpha2); 1773 BUG_ON(!wiphy); 1774 1775 request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); 1776 if (!request) 1777 return -ENOMEM; 1778 1779 request->wiphy_idx = get_wiphy_idx(wiphy); 1780 1781 /* Must have registered wiphy first */ 1782 BUG_ON(!wiphy_idx_valid(request->wiphy_idx)); 1783 1784 request->alpha2[0] = alpha2[0]; 1785 request->alpha2[1] = alpha2[1]; 1786 request->initiator = NL80211_REGDOM_SET_BY_DRIVER; 1787 1788 queue_regulatory_request(request); 1789 1790 return 0; 1791 } 1792 EXPORT_SYMBOL(regulatory_hint); 1793 1794 /* 1795 * We hold wdev_lock() here so we cannot hold cfg80211_mutex() and 1796 * therefore cannot iterate over the rdev list here. 1797 */ 1798 void regulatory_hint_11d(struct wiphy *wiphy, 1799 enum ieee80211_band band, 1800 u8 *country_ie, 1801 u8 country_ie_len) 1802 { 1803 char alpha2[2]; 1804 enum environment_cap env = ENVIRON_ANY; 1805 struct regulatory_request *request; 1806 1807 mutex_lock(®_mutex); 1808 1809 if (unlikely(!last_request)) 1810 goto out; 1811 1812 /* IE len must be evenly divisible by 2 */ 1813 if (country_ie_len & 0x01) 1814 goto out; 1815 1816 if (country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN) 1817 goto out; 1818 1819 alpha2[0] = country_ie[0]; 1820 alpha2[1] = country_ie[1]; 1821 1822 if (country_ie[2] == 'I') 1823 env = ENVIRON_INDOOR; 1824 else if (country_ie[2] == 'O') 1825 env = ENVIRON_OUTDOOR; 1826 1827 /* 1828 * We will run this only upon a successful connection on cfg80211. 1829 * We leave conflict resolution to the workqueue, where can hold 1830 * cfg80211_mutex. 1831 */ 1832 if (likely(last_request->initiator == 1833 NL80211_REGDOM_SET_BY_COUNTRY_IE && 1834 wiphy_idx_valid(last_request->wiphy_idx))) 1835 goto out; 1836 1837 request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); 1838 if (!request) 1839 goto out; 1840 1841 request->wiphy_idx = get_wiphy_idx(wiphy); 1842 request->alpha2[0] = alpha2[0]; 1843 request->alpha2[1] = alpha2[1]; 1844 request->initiator = NL80211_REGDOM_SET_BY_COUNTRY_IE; 1845 request->country_ie_env = env; 1846 1847 mutex_unlock(®_mutex); 1848 1849 queue_regulatory_request(request); 1850 1851 return; 1852 1853 out: 1854 mutex_unlock(®_mutex); 1855 } 1856 1857 static void restore_alpha2(char *alpha2, bool reset_user) 1858 { 1859 /* indicates there is no alpha2 to consider for restoration */ 1860 alpha2[0] = '9'; 1861 alpha2[1] = '7'; 1862 1863 /* The user setting has precedence over the module parameter */ 1864 if (is_user_regdom_saved()) { 1865 /* Unless we're asked to ignore it and reset it */ 1866 if (reset_user) { 1867 REG_DBG_PRINT("Restoring regulatory settings " 1868 "including user preference\n"); 1869 user_alpha2[0] = '9'; 1870 user_alpha2[1] = '7'; 1871 1872 /* 1873 * If we're ignoring user settings, we still need to 1874 * check the module parameter to ensure we put things 1875 * back as they were for a full restore. 1876 */ 1877 if (!is_world_regdom(ieee80211_regdom)) { 1878 REG_DBG_PRINT("Keeping preference on " 1879 "module parameter ieee80211_regdom: %c%c\n", 1880 ieee80211_regdom[0], 1881 ieee80211_regdom[1]); 1882 alpha2[0] = ieee80211_regdom[0]; 1883 alpha2[1] = ieee80211_regdom[1]; 1884 } 1885 } else { 1886 REG_DBG_PRINT("Restoring regulatory settings " 1887 "while preserving user preference for: %c%c\n", 1888 user_alpha2[0], 1889 user_alpha2[1]); 1890 alpha2[0] = user_alpha2[0]; 1891 alpha2[1] = user_alpha2[1]; 1892 } 1893 } else if (!is_world_regdom(ieee80211_regdom)) { 1894 REG_DBG_PRINT("Keeping preference on " 1895 "module parameter ieee80211_regdom: %c%c\n", 1896 ieee80211_regdom[0], 1897 ieee80211_regdom[1]); 1898 alpha2[0] = ieee80211_regdom[0]; 1899 alpha2[1] = ieee80211_regdom[1]; 1900 } else 1901 REG_DBG_PRINT("Restoring regulatory settings\n"); 1902 } 1903 1904 static void restore_custom_reg_settings(struct wiphy *wiphy) 1905 { 1906 struct ieee80211_supported_band *sband; 1907 enum ieee80211_band band; 1908 struct ieee80211_channel *chan; 1909 int i; 1910 1911 for (band = 0; band < IEEE80211_NUM_BANDS; band++) { 1912 sband = wiphy->bands[band]; 1913 if (!sband) 1914 continue; 1915 for (i = 0; i < sband->n_channels; i++) { 1916 chan = &sband->channels[i]; 1917 chan->flags = chan->orig_flags; 1918 chan->max_antenna_gain = chan->orig_mag; 1919 chan->max_power = chan->orig_mpwr; 1920 chan->beacon_found = false; 1921 } 1922 } 1923 } 1924 1925 /* 1926 * Restoring regulatory settings involves ingoring any 1927 * possibly stale country IE information and user regulatory 1928 * settings if so desired, this includes any beacon hints 1929 * learned as we could have traveled outside to another country 1930 * after disconnection. To restore regulatory settings we do 1931 * exactly what we did at bootup: 1932 * 1933 * - send a core regulatory hint 1934 * - send a user regulatory hint if applicable 1935 * 1936 * Device drivers that send a regulatory hint for a specific country 1937 * keep their own regulatory domain on wiphy->regd so that does does 1938 * not need to be remembered. 1939 */ 1940 static void restore_regulatory_settings(bool reset_user) 1941 { 1942 char alpha2[2]; 1943 char world_alpha2[2]; 1944 struct reg_beacon *reg_beacon, *btmp; 1945 struct regulatory_request *reg_request, *tmp; 1946 LIST_HEAD(tmp_reg_req_list); 1947 struct cfg80211_registered_device *rdev; 1948 1949 mutex_lock(&cfg80211_mutex); 1950 mutex_lock(®_mutex); 1951 1952 reset_regdomains(true); 1953 restore_alpha2(alpha2, reset_user); 1954 1955 /* 1956 * If there's any pending requests we simply 1957 * stash them to a temporary pending queue and 1958 * add then after we've restored regulatory 1959 * settings. 1960 */ 1961 spin_lock(®_requests_lock); 1962 if (!list_empty(®_requests_list)) { 1963 list_for_each_entry_safe(reg_request, tmp, 1964 ®_requests_list, list) { 1965 if (reg_request->initiator != 1966 NL80211_REGDOM_SET_BY_USER) 1967 continue; 1968 list_move_tail(®_request->list, &tmp_reg_req_list); 1969 } 1970 } 1971 spin_unlock(®_requests_lock); 1972 1973 /* Clear beacon hints */ 1974 spin_lock_bh(®_pending_beacons_lock); 1975 if (!list_empty(®_pending_beacons)) { 1976 list_for_each_entry_safe(reg_beacon, btmp, 1977 ®_pending_beacons, list) { 1978 list_del(®_beacon->list); 1979 kfree(reg_beacon); 1980 } 1981 } 1982 spin_unlock_bh(®_pending_beacons_lock); 1983 1984 if (!list_empty(®_beacon_list)) { 1985 list_for_each_entry_safe(reg_beacon, btmp, 1986 ®_beacon_list, list) { 1987 list_del(®_beacon->list); 1988 kfree(reg_beacon); 1989 } 1990 } 1991 1992 /* First restore to the basic regulatory settings */ 1993 cfg80211_regdomain = cfg80211_world_regdom; 1994 world_alpha2[0] = cfg80211_regdomain->alpha2[0]; 1995 world_alpha2[1] = cfg80211_regdomain->alpha2[1]; 1996 1997 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { 1998 if (rdev->wiphy.flags & WIPHY_FLAG_CUSTOM_REGULATORY) 1999 restore_custom_reg_settings(&rdev->wiphy); 2000 } 2001 2002 mutex_unlock(®_mutex); 2003 mutex_unlock(&cfg80211_mutex); 2004 2005 regulatory_hint_core(world_alpha2); 2006 2007 /* 2008 * This restores the ieee80211_regdom module parameter 2009 * preference or the last user requested regulatory 2010 * settings, user regulatory settings takes precedence. 2011 */ 2012 if (is_an_alpha2(alpha2)) 2013 regulatory_hint_user(user_alpha2, NL80211_USER_REG_HINT_USER); 2014 2015 if (list_empty(&tmp_reg_req_list)) 2016 return; 2017 2018 mutex_lock(&cfg80211_mutex); 2019 mutex_lock(®_mutex); 2020 2021 spin_lock(®_requests_lock); 2022 list_for_each_entry_safe(reg_request, tmp, &tmp_reg_req_list, list) { 2023 REG_DBG_PRINT("Adding request for country %c%c back " 2024 "into the queue\n", 2025 reg_request->alpha2[0], 2026 reg_request->alpha2[1]); 2027 list_move_tail(®_request->list, ®_requests_list); 2028 } 2029 spin_unlock(®_requests_lock); 2030 2031 mutex_unlock(®_mutex); 2032 mutex_unlock(&cfg80211_mutex); 2033 2034 REG_DBG_PRINT("Kicking the queue\n"); 2035 2036 schedule_work(®_work); 2037 } 2038 2039 void regulatory_hint_disconnect(void) 2040 { 2041 REG_DBG_PRINT("All devices are disconnected, going to " 2042 "restore regulatory settings\n"); 2043 restore_regulatory_settings(false); 2044 } 2045 2046 static bool freq_is_chan_12_13_14(u16 freq) 2047 { 2048 if (freq == ieee80211_channel_to_frequency(12, IEEE80211_BAND_2GHZ) || 2049 freq == ieee80211_channel_to_frequency(13, IEEE80211_BAND_2GHZ) || 2050 freq == ieee80211_channel_to_frequency(14, IEEE80211_BAND_2GHZ)) 2051 return true; 2052 return false; 2053 } 2054 2055 int regulatory_hint_found_beacon(struct wiphy *wiphy, 2056 struct ieee80211_channel *beacon_chan, 2057 gfp_t gfp) 2058 { 2059 struct reg_beacon *reg_beacon; 2060 2061 if (likely((beacon_chan->beacon_found || 2062 (beacon_chan->flags & IEEE80211_CHAN_RADAR) || 2063 (beacon_chan->band == IEEE80211_BAND_2GHZ && 2064 !freq_is_chan_12_13_14(beacon_chan->center_freq))))) 2065 return 0; 2066 2067 reg_beacon = kzalloc(sizeof(struct reg_beacon), gfp); 2068 if (!reg_beacon) 2069 return -ENOMEM; 2070 2071 REG_DBG_PRINT("Found new beacon on " 2072 "frequency: %d MHz (Ch %d) on %s\n", 2073 beacon_chan->center_freq, 2074 ieee80211_frequency_to_channel(beacon_chan->center_freq), 2075 wiphy_name(wiphy)); 2076 2077 memcpy(®_beacon->chan, beacon_chan, 2078 sizeof(struct ieee80211_channel)); 2079 2080 2081 /* 2082 * Since we can be called from BH or and non-BH context 2083 * we must use spin_lock_bh() 2084 */ 2085 spin_lock_bh(®_pending_beacons_lock); 2086 list_add_tail(®_beacon->list, ®_pending_beacons); 2087 spin_unlock_bh(®_pending_beacons_lock); 2088 2089 schedule_work(®_work); 2090 2091 return 0; 2092 } 2093 2094 static void print_rd_rules(const struct ieee80211_regdomain *rd) 2095 { 2096 unsigned int i; 2097 const struct ieee80211_reg_rule *reg_rule = NULL; 2098 const struct ieee80211_freq_range *freq_range = NULL; 2099 const struct ieee80211_power_rule *power_rule = NULL; 2100 2101 pr_info(" (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)\n"); 2102 2103 for (i = 0; i < rd->n_reg_rules; i++) { 2104 reg_rule = &rd->reg_rules[i]; 2105 freq_range = ®_rule->freq_range; 2106 power_rule = ®_rule->power_rule; 2107 2108 /* 2109 * There may not be documentation for max antenna gain 2110 * in certain regions 2111 */ 2112 if (power_rule->max_antenna_gain) 2113 pr_info(" (%d KHz - %d KHz @ %d KHz), (%d mBi, %d mBm)\n", 2114 freq_range->start_freq_khz, 2115 freq_range->end_freq_khz, 2116 freq_range->max_bandwidth_khz, 2117 power_rule->max_antenna_gain, 2118 power_rule->max_eirp); 2119 else 2120 pr_info(" (%d KHz - %d KHz @ %d KHz), (N/A, %d mBm)\n", 2121 freq_range->start_freq_khz, 2122 freq_range->end_freq_khz, 2123 freq_range->max_bandwidth_khz, 2124 power_rule->max_eirp); 2125 } 2126 } 2127 2128 bool reg_supported_dfs_region(u8 dfs_region) 2129 { 2130 switch (dfs_region) { 2131 case NL80211_DFS_UNSET: 2132 case NL80211_DFS_FCC: 2133 case NL80211_DFS_ETSI: 2134 case NL80211_DFS_JP: 2135 return true; 2136 default: 2137 REG_DBG_PRINT("Ignoring uknown DFS master region: %d\n", 2138 dfs_region); 2139 return false; 2140 } 2141 } 2142 2143 static void print_dfs_region(u8 dfs_region) 2144 { 2145 if (!dfs_region) 2146 return; 2147 2148 switch (dfs_region) { 2149 case NL80211_DFS_FCC: 2150 pr_info(" DFS Master region FCC"); 2151 break; 2152 case NL80211_DFS_ETSI: 2153 pr_info(" DFS Master region ETSI"); 2154 break; 2155 case NL80211_DFS_JP: 2156 pr_info(" DFS Master region JP"); 2157 break; 2158 default: 2159 pr_info(" DFS Master region Uknown"); 2160 break; 2161 } 2162 } 2163 2164 static void print_regdomain(const struct ieee80211_regdomain *rd) 2165 { 2166 2167 if (is_intersected_alpha2(rd->alpha2)) { 2168 2169 if (last_request->initiator == 2170 NL80211_REGDOM_SET_BY_COUNTRY_IE) { 2171 struct cfg80211_registered_device *rdev; 2172 rdev = cfg80211_rdev_by_wiphy_idx( 2173 last_request->wiphy_idx); 2174 if (rdev) { 2175 pr_info("Current regulatory domain updated by AP to: %c%c\n", 2176 rdev->country_ie_alpha2[0], 2177 rdev->country_ie_alpha2[1]); 2178 } else 2179 pr_info("Current regulatory domain intersected:\n"); 2180 } else 2181 pr_info("Current regulatory domain intersected:\n"); 2182 } else if (is_world_regdom(rd->alpha2)) 2183 pr_info("World regulatory domain updated:\n"); 2184 else { 2185 if (is_unknown_alpha2(rd->alpha2)) 2186 pr_info("Regulatory domain changed to driver built-in settings (unknown country)\n"); 2187 else { 2188 if (reg_request_cell_base(last_request)) 2189 pr_info("Regulatory domain changed " 2190 "to country: %c%c by Cell Station\n", 2191 rd->alpha2[0], rd->alpha2[1]); 2192 else 2193 pr_info("Regulatory domain changed " 2194 "to country: %c%c\n", 2195 rd->alpha2[0], rd->alpha2[1]); 2196 } 2197 } 2198 print_dfs_region(rd->dfs_region); 2199 print_rd_rules(rd); 2200 } 2201 2202 static void print_regdomain_info(const struct ieee80211_regdomain *rd) 2203 { 2204 pr_info("Regulatory domain: %c%c\n", rd->alpha2[0], rd->alpha2[1]); 2205 print_rd_rules(rd); 2206 } 2207 2208 /* Takes ownership of rd only if it doesn't fail */ 2209 static int __set_regdom(const struct ieee80211_regdomain *rd) 2210 { 2211 const struct ieee80211_regdomain *intersected_rd = NULL; 2212 struct wiphy *request_wiphy; 2213 /* Some basic sanity checks first */ 2214 2215 if (is_world_regdom(rd->alpha2)) { 2216 if (WARN_ON(!reg_is_valid_request(rd->alpha2))) 2217 return -EINVAL; 2218 update_world_regdomain(rd); 2219 return 0; 2220 } 2221 2222 if (!is_alpha2_set(rd->alpha2) && !is_an_alpha2(rd->alpha2) && 2223 !is_unknown_alpha2(rd->alpha2)) 2224 return -EINVAL; 2225 2226 if (!last_request) 2227 return -EINVAL; 2228 2229 /* 2230 * Lets only bother proceeding on the same alpha2 if the current 2231 * rd is non static (it means CRDA was present and was used last) 2232 * and the pending request came in from a country IE 2233 */ 2234 if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) { 2235 /* 2236 * If someone else asked us to change the rd lets only bother 2237 * checking if the alpha2 changes if CRDA was already called 2238 */ 2239 if (!regdom_changes(rd->alpha2)) 2240 return -EALREADY; 2241 } 2242 2243 /* 2244 * Now lets set the regulatory domain, update all driver channels 2245 * and finally inform them of what we have done, in case they want 2246 * to review or adjust their own settings based on their own 2247 * internal EEPROM data 2248 */ 2249 2250 if (WARN_ON(!reg_is_valid_request(rd->alpha2))) 2251 return -EINVAL; 2252 2253 if (!is_valid_rd(rd)) { 2254 pr_err("Invalid regulatory domain detected:\n"); 2255 print_regdomain_info(rd); 2256 return -EINVAL; 2257 } 2258 2259 request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); 2260 if (!request_wiphy && 2261 (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER || 2262 last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE)) { 2263 schedule_delayed_work(®_timeout, 0); 2264 return -ENODEV; 2265 } 2266 2267 if (!last_request->intersect) { 2268 int r; 2269 2270 if (last_request->initiator != NL80211_REGDOM_SET_BY_DRIVER) { 2271 reset_regdomains(false); 2272 cfg80211_regdomain = rd; 2273 return 0; 2274 } 2275 2276 /* 2277 * For a driver hint, lets copy the regulatory domain the 2278 * driver wanted to the wiphy to deal with conflicts 2279 */ 2280 2281 /* 2282 * Userspace could have sent two replies with only 2283 * one kernel request. 2284 */ 2285 if (request_wiphy->regd) 2286 return -EALREADY; 2287 2288 r = reg_copy_regd(&request_wiphy->regd, rd); 2289 if (r) 2290 return r; 2291 2292 reset_regdomains(false); 2293 cfg80211_regdomain = rd; 2294 return 0; 2295 } 2296 2297 /* Intersection requires a bit more work */ 2298 2299 if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) { 2300 2301 intersected_rd = regdom_intersect(rd, cfg80211_regdomain); 2302 if (!intersected_rd) 2303 return -EINVAL; 2304 2305 /* 2306 * We can trash what CRDA provided now. 2307 * However if a driver requested this specific regulatory 2308 * domain we keep it for its private use 2309 */ 2310 if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER) 2311 request_wiphy->regd = rd; 2312 else 2313 kfree(rd); 2314 2315 rd = NULL; 2316 2317 reset_regdomains(false); 2318 cfg80211_regdomain = intersected_rd; 2319 2320 return 0; 2321 } 2322 2323 return -EINVAL; 2324 } 2325 2326 2327 /* 2328 * Use this call to set the current regulatory domain. Conflicts with 2329 * multiple drivers can be ironed out later. Caller must've already 2330 * kmalloc'd the rd structure. Caller must hold cfg80211_mutex 2331 */ 2332 int set_regdom(const struct ieee80211_regdomain *rd) 2333 { 2334 int r; 2335 2336 assert_cfg80211_lock(); 2337 2338 mutex_lock(®_mutex); 2339 2340 /* Note that this doesn't update the wiphys, this is done below */ 2341 r = __set_regdom(rd); 2342 if (r) { 2343 if (r == -EALREADY) 2344 reg_set_request_processed(); 2345 2346 kfree(rd); 2347 mutex_unlock(®_mutex); 2348 return r; 2349 } 2350 2351 /* This would make this whole thing pointless */ 2352 if (!last_request->intersect) 2353 BUG_ON(rd != cfg80211_regdomain); 2354 2355 /* update all wiphys now with the new established regulatory domain */ 2356 update_all_wiphy_regulatory(last_request->initiator); 2357 2358 print_regdomain(cfg80211_regdomain); 2359 2360 nl80211_send_reg_change_event(last_request); 2361 2362 reg_set_request_processed(); 2363 2364 mutex_unlock(®_mutex); 2365 2366 return r; 2367 } 2368 2369 #ifdef CONFIG_HOTPLUG 2370 int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env) 2371 { 2372 if (last_request && !last_request->processed) { 2373 if (add_uevent_var(env, "COUNTRY=%c%c", 2374 last_request->alpha2[0], 2375 last_request->alpha2[1])) 2376 return -ENOMEM; 2377 } 2378 2379 return 0; 2380 } 2381 #else 2382 int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env) 2383 { 2384 return -ENODEV; 2385 } 2386 #endif /* CONFIG_HOTPLUG */ 2387 2388 void wiphy_regulatory_register(struct wiphy *wiphy) 2389 { 2390 assert_cfg80211_lock(); 2391 2392 mutex_lock(®_mutex); 2393 2394 if (!reg_dev_ignore_cell_hint(wiphy)) 2395 reg_num_devs_support_basehint++; 2396 2397 wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE); 2398 2399 mutex_unlock(®_mutex); 2400 } 2401 2402 /* Caller must hold cfg80211_mutex */ 2403 void wiphy_regulatory_deregister(struct wiphy *wiphy) 2404 { 2405 struct wiphy *request_wiphy = NULL; 2406 2407 assert_cfg80211_lock(); 2408 2409 mutex_lock(®_mutex); 2410 2411 if (!reg_dev_ignore_cell_hint(wiphy)) 2412 reg_num_devs_support_basehint--; 2413 2414 kfree(wiphy->regd); 2415 2416 if (last_request) 2417 request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); 2418 2419 if (!request_wiphy || request_wiphy != wiphy) 2420 goto out; 2421 2422 last_request->wiphy_idx = WIPHY_IDX_STALE; 2423 last_request->country_ie_env = ENVIRON_ANY; 2424 out: 2425 mutex_unlock(®_mutex); 2426 } 2427 2428 static void reg_timeout_work(struct work_struct *work) 2429 { 2430 REG_DBG_PRINT("Timeout while waiting for CRDA to reply, " 2431 "restoring regulatory settings\n"); 2432 restore_regulatory_settings(true); 2433 } 2434 2435 int __init regulatory_init(void) 2436 { 2437 int err = 0; 2438 2439 reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0); 2440 if (IS_ERR(reg_pdev)) 2441 return PTR_ERR(reg_pdev); 2442 2443 reg_pdev->dev.type = ®_device_type; 2444 2445 spin_lock_init(®_requests_lock); 2446 spin_lock_init(®_pending_beacons_lock); 2447 2448 reg_regdb_size_check(); 2449 2450 cfg80211_regdomain = cfg80211_world_regdom; 2451 2452 user_alpha2[0] = '9'; 2453 user_alpha2[1] = '7'; 2454 2455 /* We always try to get an update for the static regdomain */ 2456 err = regulatory_hint_core(cfg80211_regdomain->alpha2); 2457 if (err) { 2458 if (err == -ENOMEM) 2459 return err; 2460 /* 2461 * N.B. kobject_uevent_env() can fail mainly for when we're out 2462 * memory which is handled and propagated appropriately above 2463 * but it can also fail during a netlink_broadcast() or during 2464 * early boot for call_usermodehelper(). For now treat these 2465 * errors as non-fatal. 2466 */ 2467 pr_err("kobject_uevent_env() was unable to call CRDA during init\n"); 2468 #ifdef CONFIG_CFG80211_REG_DEBUG 2469 /* We want to find out exactly why when debugging */ 2470 WARN_ON(err); 2471 #endif 2472 } 2473 2474 /* 2475 * Finally, if the user set the module parameter treat it 2476 * as a user hint. 2477 */ 2478 if (!is_world_regdom(ieee80211_regdom)) 2479 regulatory_hint_user(ieee80211_regdom, 2480 NL80211_USER_REG_HINT_USER); 2481 2482 return 0; 2483 } 2484 2485 void /* __init_or_exit */ regulatory_exit(void) 2486 { 2487 struct regulatory_request *reg_request, *tmp; 2488 struct reg_beacon *reg_beacon, *btmp; 2489 2490 cancel_work_sync(®_work); 2491 cancel_delayed_work_sync(®_timeout); 2492 2493 mutex_lock(&cfg80211_mutex); 2494 mutex_lock(®_mutex); 2495 2496 reset_regdomains(true); 2497 2498 dev_set_uevent_suppress(®_pdev->dev, true); 2499 2500 platform_device_unregister(reg_pdev); 2501 2502 spin_lock_bh(®_pending_beacons_lock); 2503 if (!list_empty(®_pending_beacons)) { 2504 list_for_each_entry_safe(reg_beacon, btmp, 2505 ®_pending_beacons, list) { 2506 list_del(®_beacon->list); 2507 kfree(reg_beacon); 2508 } 2509 } 2510 spin_unlock_bh(®_pending_beacons_lock); 2511 2512 if (!list_empty(®_beacon_list)) { 2513 list_for_each_entry_safe(reg_beacon, btmp, 2514 ®_beacon_list, list) { 2515 list_del(®_beacon->list); 2516 kfree(reg_beacon); 2517 } 2518 } 2519 2520 spin_lock(®_requests_lock); 2521 if (!list_empty(®_requests_list)) { 2522 list_for_each_entry_safe(reg_request, tmp, 2523 ®_requests_list, list) { 2524 list_del(®_request->list); 2525 kfree(reg_request); 2526 } 2527 } 2528 spin_unlock(®_requests_lock); 2529 2530 mutex_unlock(®_mutex); 2531 mutex_unlock(&cfg80211_mutex); 2532 } 2533