|
@@ -756,6 +756,9 @@ static int reg_rules_intersect(const struct ieee80211_regdomain *rd1,
|
|
|
power_rule->max_antenna_gain = min(power_rule1->max_antenna_gain,
|
|
|
power_rule2->max_antenna_gain);
|
|
|
|
|
|
+ intersected_rule->dfs_cac_ms = max(rule1->dfs_cac_ms,
|
|
|
+ rule2->dfs_cac_ms);
|
|
|
+
|
|
|
if (!is_valid_reg_rule(intersected_rule))
|
|
|
return -EINVAL;
|
|
|
|
|
@@ -1078,6 +1081,14 @@ static void handle_channel(struct wiphy *wiphy,
|
|
|
min_t(int, chan->orig_mag,
|
|
|
MBI_TO_DBI(power_rule->max_antenna_gain));
|
|
|
chan->max_reg_power = (int) MBM_TO_DBM(power_rule->max_eirp);
|
|
|
+
|
|
|
+ if (chan->flags & IEEE80211_CHAN_RADAR) {
|
|
|
+ if (reg_rule->dfs_cac_ms)
|
|
|
+ chan->dfs_cac_ms = reg_rule->dfs_cac_ms;
|
|
|
+ else
|
|
|
+ chan->dfs_cac_ms = IEEE80211_DFS_MIN_CAC_TIME_MS;
|
|
|
+ }
|
|
|
+
|
|
|
if (chan->orig_mpwr) {
|
|
|
/*
|
|
|
* Devices that use REGULATORY_COUNTRY_IE_FOLLOW_POWER
|
|
@@ -2256,9 +2267,9 @@ static void print_rd_rules(const struct ieee80211_regdomain *rd)
|
|
|
const struct ieee80211_reg_rule *reg_rule = NULL;
|
|
|
const struct ieee80211_freq_range *freq_range = NULL;
|
|
|
const struct ieee80211_power_rule *power_rule = NULL;
|
|
|
- char bw[32];
|
|
|
+ char bw[32], cac_time[32];
|
|
|
|
|
|
- pr_info(" (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)\n");
|
|
|
+ pr_info(" (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)\n");
|
|
|
|
|
|
for (i = 0; i < rd->n_reg_rules; i++) {
|
|
|
reg_rule = &rd->reg_rules[i];
|
|
@@ -2273,23 +2284,32 @@ static void print_rd_rules(const struct ieee80211_regdomain *rd)
|
|
|
snprintf(bw, sizeof(bw), "%d KHz",
|
|
|
freq_range->max_bandwidth_khz);
|
|
|
|
|
|
+ if (reg_rule->flags & NL80211_RRF_DFS)
|
|
|
+ scnprintf(cac_time, sizeof(cac_time), "%u s",
|
|
|
+ reg_rule->dfs_cac_ms/1000);
|
|
|
+ else
|
|
|
+ scnprintf(cac_time, sizeof(cac_time), "N/A");
|
|
|
+
|
|
|
+
|
|
|
/*
|
|
|
* There may not be documentation for max antenna gain
|
|
|
* in certain regions
|
|
|
*/
|
|
|
if (power_rule->max_antenna_gain)
|
|
|
- pr_info(" (%d KHz - %d KHz @ %s), (%d mBi, %d mBm)\n",
|
|
|
+ pr_info(" (%d KHz - %d KHz @ %s), (%d mBi, %d mBm), (%s)\n",
|
|
|
freq_range->start_freq_khz,
|
|
|
freq_range->end_freq_khz,
|
|
|
bw,
|
|
|
power_rule->max_antenna_gain,
|
|
|
- power_rule->max_eirp);
|
|
|
+ power_rule->max_eirp,
|
|
|
+ cac_time);
|
|
|
else
|
|
|
- pr_info(" (%d KHz - %d KHz @ %s), (N/A, %d mBm)\n",
|
|
|
+ pr_info(" (%d KHz - %d KHz @ %s), (N/A, %d mBm), (%s)\n",
|
|
|
freq_range->start_freq_khz,
|
|
|
freq_range->end_freq_khz,
|
|
|
bw,
|
|
|
- power_rule->max_eirp);
|
|
|
+ power_rule->max_eirp,
|
|
|
+ cac_time);
|
|
|
}
|
|
|
}
|
|
|
|