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