mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
mt76: move mt76x02_tx_get_max_txpwr_adj in mt76x02_util.c
Move mt76x02_tx_get_max_txpwr_adj routine in mt76x02-lib module since now both mt76x0 and mt76x2 drivers read rate tx power gain from rate_power data structure. Moreover remove get_max_txpwr_adj function pointer from mt76_driver_ops data structure Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
1419022797
commit
d697b00b15
@ -262,8 +262,6 @@ struct mt76_driver_ops {
|
|||||||
|
|
||||||
void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta,
|
void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta,
|
||||||
bool ps);
|
bool ps);
|
||||||
s8 (*get_max_txpwr_adj)(struct mt76_dev *dev,
|
|
||||||
const struct ieee80211_tx_rate *rate);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mt76_channel_state {
|
struct mt76_channel_state {
|
||||||
|
@ -358,6 +358,47 @@ int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mt76x02_conf_tx);
|
EXPORT_SYMBOL_GPL(mt76x02_conf_tx);
|
||||||
|
|
||||||
|
s8 mt76x02_tx_get_max_txpwr_adj(struct mt76_dev *dev,
|
||||||
|
const struct ieee80211_tx_rate *rate)
|
||||||
|
{
|
||||||
|
s8 max_txpwr;
|
||||||
|
|
||||||
|
if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
|
||||||
|
u8 mcs = ieee80211_rate_get_vht_mcs(rate);
|
||||||
|
|
||||||
|
if (mcs == 8 || mcs == 9) {
|
||||||
|
max_txpwr = dev->rate_power.vht[8];
|
||||||
|
} else {
|
||||||
|
u8 nss, idx;
|
||||||
|
|
||||||
|
nss = ieee80211_rate_get_vht_nss(rate);
|
||||||
|
idx = ((nss - 1) << 3) + mcs;
|
||||||
|
max_txpwr = dev->rate_power.ht[idx & 0xf];
|
||||||
|
}
|
||||||
|
} else if (rate->flags & IEEE80211_TX_RC_MCS) {
|
||||||
|
max_txpwr = dev->rate_power.ht[rate->idx & 0xf];
|
||||||
|
} else {
|
||||||
|
enum nl80211_band band = dev->chandef.chan->band;
|
||||||
|
|
||||||
|
if (band == NL80211_BAND_2GHZ) {
|
||||||
|
const struct ieee80211_rate *r;
|
||||||
|
struct wiphy *wiphy = dev->hw->wiphy;
|
||||||
|
struct mt76_rate_power *rp = &dev->rate_power;
|
||||||
|
|
||||||
|
r = &wiphy->bands[band]->bitrates[rate->idx];
|
||||||
|
if (r->flags & IEEE80211_RATE_SHORT_PREAMBLE)
|
||||||
|
max_txpwr = rp->cck[r->hw_value & 0x3];
|
||||||
|
else
|
||||||
|
max_txpwr = rp->ofdm[r->hw_value & 0x7];
|
||||||
|
} else {
|
||||||
|
max_txpwr = dev->rate_power.ofdm[rate->idx & 0x7];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return max_txpwr;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mt76x02_tx_get_max_txpwr_adj);
|
||||||
|
|
||||||
void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
|
void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct ieee80211_sta *sta)
|
struct ieee80211_sta *sta)
|
||||||
@ -373,9 +414,7 @@ void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
|
|||||||
rate.idx = rates->rate[0].idx;
|
rate.idx = rates->rate[0].idx;
|
||||||
rate.flags = rates->rate[0].flags;
|
rate.flags = rates->rate[0].flags;
|
||||||
mt76x02_mac_wcid_set_rate(dev, &msta->wcid, &rate);
|
mt76x02_mac_wcid_set_rate(dev, &msta->wcid, &rate);
|
||||||
|
msta->wcid.max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, &rate);
|
||||||
if (dev->drv && dev->drv->get_max_txpwr_adj)
|
|
||||||
msta->wcid.max_txpwr_adj = dev->drv->get_max_txpwr_adj(dev, &rate);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update);
|
EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update);
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|||||||
void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
|
void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct ieee80211_sta *sta);
|
struct ieee80211_sta *sta);
|
||||||
|
s8 mt76x02_tx_get_max_txpwr_adj(struct mt76_dev *dev,
|
||||||
|
const struct ieee80211_tx_rate *rate);
|
||||||
int mt76x02_insert_hdr_pad(struct sk_buff *skb);
|
int mt76x02_insert_hdr_pad(struct sk_buff *skb);
|
||||||
void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len);
|
void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len);
|
||||||
void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb);
|
void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb);
|
||||||
|
@ -96,7 +96,7 @@ void mt76x2_mac_write_txwi(struct mt76x2_dev *dev, struct mt76x02_txwi *txwi,
|
|||||||
nss = wcid->tx_rate_nss;
|
nss = wcid->tx_rate_nss;
|
||||||
} else {
|
} else {
|
||||||
txwi->rate = mt76x02_mac_tx_rate_val(&dev->mt76, rate, &nss);
|
txwi->rate = mt76x02_mac_tx_rate_val(&dev->mt76, rate, &nss);
|
||||||
max_txpwr_adj = mt76x2_tx_get_max_txpwr_adj(&dev->mt76, rate);
|
max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(&dev->mt76, rate);
|
||||||
}
|
}
|
||||||
spin_unlock_bh(&dev->mt76.lock);
|
spin_unlock_bh(&dev->mt76.lock);
|
||||||
|
|
||||||
|
@ -176,8 +176,6 @@ void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
|
|||||||
|
|
||||||
void mt76x2_update_channel(struct mt76_dev *mdev);
|
void mt76x2_update_channel(struct mt76_dev *mdev);
|
||||||
|
|
||||||
s8 mt76x2_tx_get_max_txpwr_adj(struct mt76_dev *dev,
|
|
||||||
const struct ieee80211_tx_rate *rate);
|
|
||||||
s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj);
|
s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj);
|
||||||
void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr);
|
void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr);
|
||||||
|
|
||||||
|
@ -362,7 +362,6 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev)
|
|||||||
.rx_skb = mt76x2_queue_rx_skb,
|
.rx_skb = mt76x2_queue_rx_skb,
|
||||||
.rx_poll_complete = mt76x2_rx_poll_complete,
|
.rx_poll_complete = mt76x2_rx_poll_complete,
|
||||||
.sta_ps = mt76x2_sta_ps,
|
.sta_ps = mt76x2_sta_ps,
|
||||||
.get_max_txpwr_adj = mt76x2_tx_get_max_txpwr_adj,
|
|
||||||
};
|
};
|
||||||
struct mt76x2_dev *dev;
|
struct mt76x2_dev *dev;
|
||||||
struct mt76_dev *mdev;
|
struct mt76_dev *mdev;
|
||||||
|
@ -47,48 +47,6 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mt76x2_tx);
|
EXPORT_SYMBOL_GPL(mt76x2_tx);
|
||||||
|
|
||||||
s8 mt76x2_tx_get_max_txpwr_adj(struct mt76_dev *mdev,
|
|
||||||
const struct ieee80211_tx_rate *rate)
|
|
||||||
{
|
|
||||||
struct mt76x2_dev *dev = (struct mt76x2_dev *) mdev;
|
|
||||||
s8 max_txpwr;
|
|
||||||
|
|
||||||
if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
|
|
||||||
u8 mcs = ieee80211_rate_get_vht_mcs(rate);
|
|
||||||
|
|
||||||
if (mcs == 8 || mcs == 9) {
|
|
||||||
max_txpwr = mdev->rate_power.vht[8];
|
|
||||||
} else {
|
|
||||||
u8 nss, idx;
|
|
||||||
|
|
||||||
nss = ieee80211_rate_get_vht_nss(rate);
|
|
||||||
idx = ((nss - 1) << 3) + mcs;
|
|
||||||
max_txpwr = mdev->rate_power.ht[idx & 0xf];
|
|
||||||
}
|
|
||||||
} else if (rate->flags & IEEE80211_TX_RC_MCS) {
|
|
||||||
max_txpwr = mdev->rate_power.ht[rate->idx & 0xf];
|
|
||||||
} else {
|
|
||||||
enum nl80211_band band = dev->mt76.chandef.chan->band;
|
|
||||||
|
|
||||||
if (band == NL80211_BAND_2GHZ) {
|
|
||||||
const struct ieee80211_rate *r;
|
|
||||||
struct wiphy *wiphy = mt76_hw(dev)->wiphy;
|
|
||||||
struct mt76_rate_power *rp = &mdev->rate_power;
|
|
||||||
|
|
||||||
r = &wiphy->bands[band]->bitrates[rate->idx];
|
|
||||||
if (r->flags & IEEE80211_RATE_SHORT_PREAMBLE)
|
|
||||||
max_txpwr = rp->cck[r->hw_value & 0x3];
|
|
||||||
else
|
|
||||||
max_txpwr = rp->ofdm[r->hw_value & 0x7];
|
|
||||||
} else {
|
|
||||||
max_txpwr = mdev->rate_power.ofdm[rate->idx & 0x7];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return max_txpwr;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(mt76x2_tx_get_max_txpwr_adj);
|
|
||||||
|
|
||||||
s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj)
|
s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj)
|
||||||
{
|
{
|
||||||
txpwr = min_t(s8, txpwr, dev->mt76.txpower_conf);
|
txpwr = min_t(s8, txpwr, dev->mt76.txpower_conf);
|
||||||
|
Loading…
Reference in New Issue
Block a user