diff options
author | Lorenzo Bianconi <lorenzo.bianconi@redhat.com> | 2018-10-01 12:58:17 -0400 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2018-10-05 14:05:44 -0400 |
commit | d697b00b15f44e23080bca916294e61638e0b62d (patch) | |
tree | 495ed04f579e676e8a76b2683ec3651f6003f0f3 /drivers/net/wireless | |
parent | 14190227978e569254798c51e8802231285f4d81 (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.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x02_util.c | 45 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x02_util.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x2/mac.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt76x2/tx.c | 42 |
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 | ||
269 | struct mt76_channel_state { | 267 | struct 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 | } |
359 | EXPORT_SYMBOL_GPL(mt76x02_conf_tx); | 359 | EXPORT_SYMBOL_GPL(mt76x02_conf_tx); |
360 | 360 | ||
361 | s8 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 | } | ||
400 | EXPORT_SYMBOL_GPL(mt76x02_tx_get_max_txpwr_adj); | ||
401 | |||
361 | void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw, | 402 | void 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 | } |
380 | EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update); | 419 | EXPORT_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, | |||
45 | void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw, | 45 | void 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); |
48 | s8 mt76x02_tx_get_max_txpwr_adj(struct mt76_dev *dev, | ||
49 | const struct ieee80211_tx_rate *rate); | ||
48 | int mt76x02_insert_hdr_pad(struct sk_buff *skb); | 50 | int mt76x02_insert_hdr_pad(struct sk_buff *skb); |
49 | void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len); | 51 | void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len); |
50 | void mt76x02_tx_complete(struct mt76_dev *dev, struct sk_buff *skb); | 52 | void 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 | ||
177 | void mt76x2_update_channel(struct mt76_dev *mdev); | 177 | void mt76x2_update_channel(struct mt76_dev *mdev); |
178 | 178 | ||
179 | s8 mt76x2_tx_get_max_txpwr_adj(struct mt76_dev *dev, | ||
180 | const struct ieee80211_tx_rate *rate); | ||
181 | s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj); | 179 | s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj); |
182 | void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr); | 180 | void 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 | } |
48 | EXPORT_SYMBOL_GPL(mt76x2_tx); | 48 | EXPORT_SYMBOL_GPL(mt76x2_tx); |
49 | 49 | ||
50 | s8 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 | } | ||
90 | EXPORT_SYMBOL_GPL(mt76x2_tx_get_max_txpwr_adj); | ||
91 | |||
92 | s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj) | 50 | s8 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); |