aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>2018-10-01 12:58:17 -0400
committerFelix Fietkau <nbd@nbd.name>2018-10-05 14:05:44 -0400
commitd697b00b15f44e23080bca916294e61638e0b62d (patch)
tree495ed04f579e676e8a76b2683ec3651f6003f0f3 /drivers/net/wireless
parent14190227978e569254798c51e8802231285f4d81 (diff)
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>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76.h2
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x02_util.c45
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x02_util.h2
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x2/mac.c2
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h2
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c1
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x2/tx.c42
7 files changed, 45 insertions, 51 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index f2dd4d87e355..c47ad67ce2ff 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -262,8 +262,6 @@ struct mt76_driver_ops {
262 262
263 void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta, 263 void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta,
264 bool ps); 264 bool ps);
265 s8 (*get_max_txpwr_adj)(struct mt76_dev *dev,
266 const struct ieee80211_tx_rate *rate);
267}; 265};
268 266
269struct mt76_channel_state { 267struct mt76_channel_state {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
index ec422c3980e8..b12db0a108d3 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
@@ -358,6 +358,47 @@ int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
358} 358}
359EXPORT_SYMBOL_GPL(mt76x02_conf_tx); 359EXPORT_SYMBOL_GPL(mt76x02_conf_tx);
360 360
361s8 mt76x02_tx_get_max_txpwr_adj(struct mt76_dev *dev,
362 const struct ieee80211_tx_rate *rate)
363{
364 s8 max_txpwr;
365
366 if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
367 u8 mcs = ieee80211_rate_get_vht_mcs(rate);
368
369 if (mcs == 8 || mcs == 9) {
370 max_txpwr = dev->rate_power.vht[8];
371 } else {
372 u8 nss, idx;
373
374 nss = ieee80211_rate_get_vht_nss(rate);
375 idx = ((nss - 1) << 3) + mcs;
376 max_txpwr = dev->rate_power.ht[idx & 0xf];
377 }
378 } else if (rate->flags & IEEE80211_TX_RC_MCS) {
379 max_txpwr = dev->rate_power.ht[rate->idx & 0xf];
380 } else {
381 enum nl80211_band band = dev->chandef.chan->band;
382
383 if (band == NL80211_BAND_2GHZ) {
384 const struct ieee80211_rate *r;
385 struct wiphy *wiphy = dev->hw->wiphy;
386 struct mt76_rate_power *rp = &dev->rate_power;
387
388 r = &wiphy->bands[band]->bitrates[rate->idx];
389 if (r->flags & IEEE80211_RATE_SHORT_PREAMBLE)
390 max_txpwr = rp->cck[r->hw_value & 0x3];
391 else
392 max_txpwr = rp->ofdm[r->hw_value & 0x7];
393 } else {
394 max_txpwr = dev->rate_power.ofdm[rate->idx & 0x7];
395 }
396 }
397
398 return max_txpwr;
399}
400EXPORT_SYMBOL_GPL(mt76x02_tx_get_max_txpwr_adj);
401
361void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw, 402void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
362 struct ieee80211_vif *vif, 403 struct ieee80211_vif *vif,
363 struct ieee80211_sta *sta) 404 struct ieee80211_sta *sta)
@@ -373,9 +414,7 @@ void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
373 rate.idx = rates->rate[0].idx; 414 rate.idx = rates->rate[0].idx;
374 rate.flags = rates->rate[0].flags; 415 rate.flags = rates->rate[0].flags;
375 mt76x02_mac_wcid_set_rate(dev, &msta->wcid, &rate); 416 mt76x02_mac_wcid_set_rate(dev, &msta->wcid, &rate);
376 417 msta->wcid.max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, &rate);
377 if (dev->drv && dev->drv->get_max_txpwr_adj)
378 msta->wcid.max_txpwr_adj = dev->drv->get_max_txpwr_adj(dev, &rate);
379} 418}
380EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update); 419EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update);
381 420
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_util.h b/drivers/net/wireless/mediatek/mt76/mt76x02_util.h
index ff4cab5ca038..54cec0cbf645 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_util.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_util.h
@@ -45,6 +45,8 @@ int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
45void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw, 45void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
46 struct ieee80211_vif *vif, 46 struct ieee80211_vif *vif,
47 struct ieee80211_sta *sta); 47 struct ieee80211_sta *sta);
48s8 mt76x02_tx_get_max_txpwr_adj(struct mt76_dev *dev,
49 const struct ieee80211_tx_rate *rate);
48int mt76x02_insert_hdr_pad(struct sk_buff *skb); 50int mt76x02_insert_hdr_pad(struct sk_buff *skb);
49void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len); 51void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len);
50void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb); 52void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c b/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
index 568bac76097c..a396a56dcfe0 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
@@ -96,7 +96,7 @@ void mt76x2_mac_write_txwi(struct mt76x2_dev *dev, struct mt76x02_txwi *txwi,
96 nss = wcid->tx_rate_nss; 96 nss = wcid->tx_rate_nss;
97 } else { 97 } else {
98 txwi->rate = mt76x02_mac_tx_rate_val(&dev->mt76, rate, &nss); 98 txwi->rate = mt76x02_mac_tx_rate_val(&dev->mt76, rate, &nss);
99 max_txpwr_adj = mt76x2_tx_get_max_txpwr_adj(&dev->mt76, rate); 99 max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(&dev->mt76, rate);
100 } 100 }
101 spin_unlock_bh(&dev->mt76.lock); 101 spin_unlock_bh(&dev->mt76.lock);
102 102
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h b/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
index ecbb9e4ab888..50490c75a1e2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
@@ -176,8 +176,6 @@ void mt76x2_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
176 176
177void mt76x2_update_channel(struct mt76_dev *mdev); 177void mt76x2_update_channel(struct mt76_dev *mdev);
178 178
179s8 mt76x2_tx_get_max_txpwr_adj(struct mt76_dev *dev,
180 const struct ieee80211_tx_rate *rate);
181s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj); 179s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj);
182void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr); 180void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr);
183 181
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
index 7036f4cbc836..d9fb06e34dbf 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
@@ -362,7 +362,6 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev)
362 .rx_skb = mt76x2_queue_rx_skb, 362 .rx_skb = mt76x2_queue_rx_skb,
363 .rx_poll_complete = mt76x2_rx_poll_complete, 363 .rx_poll_complete = mt76x2_rx_poll_complete,
364 .sta_ps = mt76x2_sta_ps, 364 .sta_ps = mt76x2_sta_ps,
365 .get_max_txpwr_adj = mt76x2_tx_get_max_txpwr_adj,
366 }; 365 };
367 struct mt76x2_dev *dev; 366 struct mt76x2_dev *dev;
368 struct mt76_dev *mdev; 367 struct mt76_dev *mdev;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/tx.c b/drivers/net/wireless/mediatek/mt76/mt76x2/tx.c
index aea142600042..0c878c9eb33d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/tx.c
@@ -47,48 +47,6 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
47} 47}
48EXPORT_SYMBOL_GPL(mt76x2_tx); 48EXPORT_SYMBOL_GPL(mt76x2_tx);
49 49
50s8 mt76x2_tx_get_max_txpwr_adj(struct mt76_dev *mdev,
51 const struct ieee80211_tx_rate *rate)
52{
53 struct mt76x2_dev *dev = (struct mt76x2_dev *) mdev;
54 s8 max_txpwr;
55
56 if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
57 u8 mcs = ieee80211_rate_get_vht_mcs(rate);
58
59 if (mcs == 8 || mcs == 9) {
60 max_txpwr = mdev->rate_power.vht[8];
61 } else {
62 u8 nss, idx;
63
64 nss = ieee80211_rate_get_vht_nss(rate);
65 idx = ((nss - 1) << 3) + mcs;
66 max_txpwr = mdev->rate_power.ht[idx & 0xf];
67 }
68 } else if (rate->flags & IEEE80211_TX_RC_MCS) {
69 max_txpwr = mdev->rate_power.ht[rate->idx & 0xf];
70 } else {
71 enum nl80211_band band = dev->mt76.chandef.chan->band;
72
73 if (band == NL80211_BAND_2GHZ) {
74 const struct ieee80211_rate *r;
75 struct wiphy *wiphy = mt76_hw(dev)->wiphy;
76 struct mt76_rate_power *rp = &mdev->rate_power;
77
78 r = &wiphy->bands[band]->bitrates[rate->idx];
79 if (r->flags & IEEE80211_RATE_SHORT_PREAMBLE)
80 max_txpwr = rp->cck[r->hw_value & 0x3];
81 else
82 max_txpwr = rp->ofdm[r->hw_value & 0x7];
83 } else {
84 max_txpwr = mdev->rate_power.ofdm[rate->idx & 0x7];
85 }
86 }
87
88 return max_txpwr;
89}
90EXPORT_SYMBOL_GPL(mt76x2_tx_get_max_txpwr_adj);
91
92s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj) 50s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj)
93{ 51{
94 txpwr = min_t(s8, txpwr, dev->mt76.txpower_conf); 52 txpwr = min_t(s8, txpwr, dev->mt76.txpower_conf);