|
@@ -504,9 +504,11 @@ static bool reg_does_bw_fit(const struct ieee80211_freq_range *freq_range,
|
|
|
*
|
|
|
* This lets us know if a specific frequency rule is or is not relevant to
|
|
|
* a specific frequency's band. Bands are device specific and artificial
|
|
|
- * definitions (the "2.4 GHz band" and the "5 GHz band"), however it is
|
|
|
- * safe for now to assume that a frequency rule should not be part of a
|
|
|
- * frequency's band if the start freq or end freq are off by more than 2 GHz.
|
|
|
+ * definitions (the "2.4 GHz band", the "5 GHz band" and the "60GHz band"),
|
|
|
+ * however it is safe for now to assume that a frequency rule should not be
|
|
|
+ * part of a frequency's band if the start freq or end freq are off by more
|
|
|
+ * than 2 GHz for the 2.4 and 5 GHz bands, and by more than 10 GHz for the
|
|
|
+ * 60 GHz band.
|
|
|
* This resolution can be lowered and should be considered as we add
|
|
|
* regulatory rule support for other "bands".
|
|
|
**/
|
|
@@ -514,9 +516,16 @@ static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range,
|
|
|
u32 freq_khz)
|
|
|
{
|
|
|
#define ONE_GHZ_IN_KHZ 1000000
|
|
|
- if (abs(freq_khz - freq_range->start_freq_khz) <= (2 * ONE_GHZ_IN_KHZ))
|
|
|
+ /*
|
|
|
+ * From 802.11ad: directional multi-gigabit (DMG):
|
|
|
+ * Pertaining to operation in a frequency band containing a channel
|
|
|
+ * with the Channel starting frequency above 45 GHz.
|
|
|
+ */
|
|
|
+ u32 limit = freq_khz > 45 * ONE_GHZ_IN_KHZ ?
|
|
|
+ 10 * ONE_GHZ_IN_KHZ : 2 * ONE_GHZ_IN_KHZ;
|
|
|
+ if (abs(freq_khz - freq_range->start_freq_khz) <= limit)
|
|
|
return true;
|
|
|
- if (abs(freq_khz - freq_range->end_freq_khz) <= (2 * ONE_GHZ_IN_KHZ))
|
|
|
+ if (abs(freq_khz - freq_range->end_freq_khz) <= limit)
|
|
|
return true;
|
|
|
return false;
|
|
|
#undef ONE_GHZ_IN_KHZ
|
|
@@ -2193,7 +2202,6 @@ static void print_regdomain_info(const struct ieee80211_regdomain *rd)
|
|
|
static int __set_regdom(const struct ieee80211_regdomain *rd)
|
|
|
{
|
|
|
const struct ieee80211_regdomain *intersected_rd = NULL;
|
|
|
- struct cfg80211_registered_device *rdev = NULL;
|
|
|
struct wiphy *request_wiphy;
|
|
|
/* Some basic sanity checks first */
|
|
|
|
|
@@ -2305,24 +2313,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- if (!intersected_rd)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- rdev = wiphy_to_dev(request_wiphy);
|
|
|
-
|
|
|
- rdev->country_ie_alpha2[0] = rd->alpha2[0];
|
|
|
- rdev->country_ie_alpha2[1] = rd->alpha2[1];
|
|
|
- rdev->env = last_request->country_ie_env;
|
|
|
-
|
|
|
- BUG_ON(intersected_rd == rd);
|
|
|
-
|
|
|
- kfree(rd);
|
|
|
- rd = NULL;
|
|
|
-
|
|
|
- reset_regdomains(false);
|
|
|
- cfg80211_regdomain = intersected_rd;
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
|