mac80211.c (0a57d636012edd147e553d22bfcd3f589b03e676) | mac80211.c (b3cb885e56d5f64880109da9516ef2df1e9db7b9) |
---|---|
1// SPDX-License-Identifier: ISC 2/* 3 * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name> 4 */ 5#include <linux/sched.h> 6#include <linux/of.h> 7#include "mt76.h" 8 --- 1334 unchanged lines hidden (view full) --- 1343 int delta = mt76_tx_power_nss_delta(n_chains); 1344 1345 *dbm = DIV_ROUND_UP(phy->txpower_cur + delta, 2); 1346 1347 return 0; 1348} 1349EXPORT_SYMBOL_GPL(mt76_get_txpower); 1350 | 1// SPDX-License-Identifier: ISC 2/* 3 * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name> 4 */ 5#include <linux/sched.h> 6#include <linux/of.h> 7#include "mt76.h" 8 --- 1334 unchanged lines hidden (view full) --- 1343 int delta = mt76_tx_power_nss_delta(n_chains); 1344 1345 *dbm = DIV_ROUND_UP(phy->txpower_cur + delta, 2); 1346 1347 return 0; 1348} 1349EXPORT_SYMBOL_GPL(mt76_get_txpower); 1350 |
1351int mt76_init_sar_power(struct ieee80211_hw *hw, 1352 const struct cfg80211_sar_specs *sar) 1353{ 1354 struct mt76_phy *phy = hw->priv; 1355 const struct cfg80211_sar_capa *capa = hw->wiphy->sar_capa; 1356 int i; 1357 1358 if (sar->type != NL80211_SAR_TYPE_POWER || !sar->num_sub_specs) 1359 return -EINVAL; 1360 1361 for (i = 0; i < sar->num_sub_specs; i++) { 1362 u32 index = sar->sub_specs[i].freq_range_index; 1363 /* SAR specifies power limitaton in 0.25dbm */ 1364 s32 power = sar->sub_specs[i].power >> 1; 1365 1366 if (power > 127 || power < -127) 1367 power = 127; 1368 1369 phy->frp[index].range = &capa->freq_ranges[index]; 1370 phy->frp[index].power = power; 1371 } 1372 1373 return 0; 1374} 1375EXPORT_SYMBOL_GPL(mt76_init_sar_power); 1376 1377int mt76_get_sar_power(struct mt76_phy *phy, 1378 struct ieee80211_channel *chan, 1379 int power) 1380{ 1381 const struct cfg80211_sar_capa *capa = phy->hw->wiphy->sar_capa; 1382 int freq, i; 1383 1384 if (!capa || !phy->frp) 1385 return power; 1386 1387 if (power > 127 || power < -127) 1388 power = 127; 1389 1390 freq = ieee80211_channel_to_frequency(chan->hw_value, chan->band); 1391 for (i = 0 ; i < capa->num_freq_ranges; i++) { 1392 if (phy->frp[i].range && 1393 freq >= phy->frp[i].range->start_freq && 1394 freq < phy->frp[i].range->end_freq) { 1395 power = min_t(int, phy->frp[i].power, power); 1396 break; 1397 } 1398 } 1399 1400 return power; 1401} 1402EXPORT_SYMBOL_GPL(mt76_get_sar_power); 1403 |
|
1351static void 1352__mt76_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) 1353{ 1354 if (vif->csa_active && ieee80211_beacon_cntdwn_is_complete(vif)) 1355 ieee80211_csa_finish(vif); 1356} 1357 1358void mt76_csa_finish(struct mt76_dev *dev) --- 181 unchanged lines hidden --- | 1404static void 1405__mt76_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif) 1406{ 1407 if (vif->csa_active && ieee80211_beacon_cntdwn_is_complete(vif)) 1408 ieee80211_csa_finish(vif); 1409} 1410 1411void mt76_csa_finish(struct mt76_dev *dev) --- 181 unchanged lines hidden --- |