mt76: connac: add support for limiting to maximum regulatory Tx power
Consider .max_reg_power in struct ieee80211_channel to limit the maximum power the wireless device allowed to transmit on the corresponding channel according to the regulatory domain. Co-developed-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: YN Chen <YN.Chen@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
781f62960c
commit
f3f1c04536
|
@ -1773,6 +1773,43 @@ static s8 mt76_connac_get_sar_power(struct mt76_phy *phy,
|
|||
return target_power;
|
||||
}
|
||||
|
||||
static s8 mt76_connac_get_ch_power(struct mt76_phy *phy,
|
||||
struct ieee80211_channel *chan,
|
||||
s8 target_power)
|
||||
{
|
||||
struct mt76_dev *dev = phy->dev;
|
||||
struct ieee80211_supported_band *sband;
|
||||
int i;
|
||||
|
||||
switch (chan->band) {
|
||||
case NL80211_BAND_2GHZ:
|
||||
sband = &phy->sband_2g.sband;
|
||||
break;
|
||||
case NL80211_BAND_5GHZ:
|
||||
sband = &phy->sband_5g.sband;
|
||||
break;
|
||||
default:
|
||||
return target_power;
|
||||
}
|
||||
|
||||
for (i = 0; i < sband->n_channels; i++) {
|
||||
struct ieee80211_channel *ch = &sband->channels[i];
|
||||
|
||||
if (ch->hw_value == chan->hw_value) {
|
||||
if (!(ch->flags & IEEE80211_CHAN_DISABLED)) {
|
||||
int power = 2 * ch->max_reg_power;
|
||||
|
||||
if (is_mt7663(dev) && (power > 63 || power < -64))
|
||||
power = 63;
|
||||
target_power = min_t(s8, power, target_power);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return target_power;
|
||||
}
|
||||
|
||||
static int
|
||||
mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
|
||||
enum nl80211_band band)
|
||||
|
@ -1840,10 +1877,12 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
|
|||
.hw_value = ch_list[idx],
|
||||
.band = band,
|
||||
};
|
||||
s8 sar_power;
|
||||
s8 reg_power, sar_power;
|
||||
|
||||
reg_power = mt76_connac_get_ch_power(phy, &chan,
|
||||
tx_power);
|
||||
sar_power = mt76_connac_get_sar_power(phy, &chan,
|
||||
tx_power);
|
||||
reg_power);
|
||||
|
||||
mt76_get_rate_power_limits(phy, &chan, &limits,
|
||||
sar_power);
|
||||
|
|
Loading…
Reference in New Issue