mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 09:39:00 +00:00
1bfcc1ea8a
Brings lots of driver updates and API changes needed for mt76 updates. Disable iwlwifi and ath11k on 5.15, since backport is too difficult, and the only remaining targets won't need those drivers. Signed-off-by: Felix Fietkau <nbd@nbd.name>
102 lines
3.7 KiB
Diff
102 lines
3.7 KiB
Diff
From: Sven Eckelmann <seckelmann@datto.com>
|
|
Date: Wed, 28 Nov 2018 16:16:27 +0100
|
|
Subject: ath10k: adjust tx power reduction for US regulatory domain
|
|
|
|
FCC allows maximum antenna gain of 6 dBi. 15.247(b)(4):
|
|
|
|
> (4) The conducted output power limit
|
|
> specified in paragraph (b) of this section
|
|
> is based on the use of antennas
|
|
> with directional gains that do not exceed
|
|
> 6 dBi. Except as shown in paragraph
|
|
> (c) of this section, if transmitting
|
|
> antennas of directional gain greater
|
|
> than 6 dBi are used, the conducted
|
|
> output power from the intentional radiator
|
|
> shall be reduced below the stated
|
|
> values in paragraphs (b)(1), (b)(2),
|
|
> and (b)(3) of this section, as appropriate,
|
|
> by the amount in dB that the
|
|
> directional gain of the antenna exceeds
|
|
> 6 dBi.
|
|
|
|
https://www.gpo.gov/fdsys/pkg/CFR-2013-title47-vol1/pdf/CFR-2013-title47-vol1-sec15-247.pdf
|
|
|
|
Signed-off-by: Sven Eckelmann <seckelmann@datto.com>
|
|
|
|
Forwarded: no
|
|
|
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
|
@@ -1022,6 +1022,40 @@ static inline int ath10k_vdev_setup_sync
|
|
return ar->last_wmi_vdev_start_status;
|
|
}
|
|
|
|
+static u32 ath10k_get_max_antenna_gain(struct ath10k *ar,
|
|
+ u32 ch_max_antenna_gain)
|
|
+{
|
|
+ u32 max_antenna_gain;
|
|
+
|
|
+ if (ar->dfs_detector && ar->dfs_detector->region == NL80211_DFS_FCC) {
|
|
+ /* FCC allows maximum antenna gain of 6 dBi. 15.247(b)(4):
|
|
+ *
|
|
+ * > (4) The conducted output power limit
|
|
+ * > specified in paragraph (b) of this section
|
|
+ * > is based on the use of antennas
|
|
+ * > with directional gains that do not exceed
|
|
+ * > 6 dBi. Except as shown in paragraph
|
|
+ * > (c) of this section, if transmitting
|
|
+ * > antennas of directional gain greater
|
|
+ * > than 6 dBi are used, the conducted
|
|
+ * > output power from the intentional radiator
|
|
+ * > shall be reduced below the stated
|
|
+ * > values in paragraphs (b)(1), (b)(2),
|
|
+ * > and (b)(3) of this section, as appropriate,
|
|
+ * > by the amount in dB that the
|
|
+ * > directional gain of the antenna exceeds
|
|
+ * > 6 dBi.
|
|
+ *
|
|
+ * https://www.gpo.gov/fdsys/pkg/CFR-2013-title47-vol1/pdf/CFR-2013-title47-vol1-sec15-247.pdf
|
|
+ */
|
|
+ max_antenna_gain = 6;
|
|
+ } else {
|
|
+ max_antenna_gain = 0;
|
|
+ }
|
|
+
|
|
+ return max(ch_max_antenna_gain, max_antenna_gain);
|
|
+}
|
|
+
|
|
static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
|
|
{
|
|
struct cfg80211_chan_def *chandef = NULL;
|
|
@@ -1054,7 +1088,8 @@ static int ath10k_monitor_vdev_start(str
|
|
arg.channel.min_power = 0;
|
|
arg.channel.max_power = channel->max_power * 2;
|
|
arg.channel.max_reg_power = channel->max_reg_power * 2;
|
|
- arg.channel.max_antenna_gain = channel->max_antenna_gain;
|
|
+ arg.channel.max_antenna_gain = ath10k_get_max_antenna_gain(ar,
|
|
+ channel->max_antenna_gain);
|
|
|
|
reinit_completion(&ar->vdev_setup_done);
|
|
reinit_completion(&ar->vdev_delete_done);
|
|
@@ -1500,7 +1535,8 @@ static int ath10k_vdev_start_restart(str
|
|
arg.channel.min_power = 0;
|
|
arg.channel.max_power = chandef->chan->max_power * 2;
|
|
arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
|
|
- arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain;
|
|
+ arg.channel.max_antenna_gain = ath10k_get_max_antenna_gain(ar,
|
|
+ chandef->chan->max_antenna_gain);
|
|
|
|
if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
|
|
arg.ssid = arvif->u.ap.ssid;
|
|
@@ -3431,7 +3467,8 @@ static int ath10k_update_channel_list(st
|
|
ch->min_power = 0;
|
|
ch->max_power = channel->max_power * 2;
|
|
ch->max_reg_power = channel->max_reg_power * 2;
|
|
- ch->max_antenna_gain = channel->max_antenna_gain;
|
|
+ ch->max_antenna_gain = ath10k_get_max_antenna_gain(ar,
|
|
+ channel->max_antenna_gain);
|
|
ch->reg_class_id = 0; /* FIXME */
|
|
|
|
/* FIXME: why use only legacy modes, why not any
|