module_param(ieee80211_regdom, charp, 0444);
MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain code");
-static void reset_regdomains(bool full_reset)
+static void reset_regdomains(bool full_reset,
+ const struct ieee80211_regdomain *new_regdom)
{
assert_cfg80211_lock();
assert_reg_lock();
kfree(cfg80211_world_regdom);
cfg80211_world_regdom = &world_regdom;
- cfg80211_regdomain = NULL;
+ cfg80211_regdomain = new_regdom;
if (!full_reset)
return;
assert_cfg80211_lock();
assert_reg_lock();
- reset_regdomains(false);
+ reset_regdomains(false, rd);
cfg80211_world_regdom = rd;
- cfg80211_regdomain = rd;
}
bool is_world_regdom(const char *alpha2)
mutex_lock(&cfg80211_mutex);
mutex_lock(®_mutex);
- reset_regdomains(true);
+ reset_regdomains(true, cfg80211_world_regdom);
restore_alpha2(alpha2, reset_user);
/*
}
/* First restore to the basic regulatory settings */
- cfg80211_regdomain = cfg80211_world_regdom;
- world_alpha2[0] = cfg80211_regdomain->alpha2[0];
- world_alpha2[1] = cfg80211_regdomain->alpha2[1];
+ world_alpha2[0] = cfg80211_world_regdom->alpha2[0];
+ world_alpha2[1] = cfg80211_world_regdom->alpha2[1];
list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
if (rdev->wiphy.flags & WIPHY_FLAG_CUSTOM_REGULATORY)
if (!last_request->intersect) {
if (last_request->initiator != NL80211_REGDOM_SET_BY_DRIVER) {
- reset_regdomains(false);
- cfg80211_regdomain = rd;
+ reset_regdomains(false, rd);
return 0;
}
return PTR_ERR(regd);
request_wiphy->regd = regd;
- reset_regdomains(false);
- cfg80211_regdomain = rd;
+ reset_regdomains(false, rd);
return 0;
}
rd = NULL;
- reset_regdomains(false);
- cfg80211_regdomain = intersected_rd;
+ reset_regdomains(false, intersected_rd);
return 0;
}
/* Lock to suppress warnings */
mutex_lock(&cfg80211_mutex);
mutex_lock(®_mutex);
- reset_regdomains(true);
+ reset_regdomains(true, NULL);
mutex_unlock(&cfg80211_mutex);
mutex_unlock(®_mutex);