[PATCH] mac80211: Remove unused initialization

2018-09-29 Thread Masashi Honma
The variable j will be initialized at trailing step.

Signed-off-by: Masashi Honma 
---
 net/mac80211/rc80211_minstrel.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
index 07fb219..fc6134c 100644
--- a/net/mac80211/rc80211_minstrel.c
+++ b/net/mac80211/rc80211_minstrel.c
@@ -632,7 +632,7 @@ minstrel_init_cck_rates(struct minstrel_priv *mp)
if (!sband)
return;
 
-   for (i = 0, j = 0; i < sband->n_bitrates; i++) {
+   for (i = 0; i < sband->n_bitrates; i++) {
struct ieee80211_rate *rate = >bitrates[i];
 
if (rate->flags & IEEE80211_RATE_ERP_G)
-- 
2.7.4



Re: Hello

2018-09-29 Thread Reem Al-Hashimy
Hello,

I Have a financial transaction i want you to handle for me. Please kindly Reply 
for more details.

Regards,

Ms. Reem Al-Hashimy
Reply To reem1...@naver.com



[RFC 2/5] mt76: move mt76x02_tx_get_max_txpwr_adj in mt76x02_util.c

2018-09-29 Thread Lorenzo Bianconi
Move mt76x02_tx_get_max_txpwr_adj routine in mt76x02-lib module
since now both mt76x2 and mt76x0 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 
---
 drivers/net/wireless/mediatek/mt76/mt76.h |  2 -
 .../net/wireless/mediatek/mt76/mt76x02_util.c | 45 +--
 .../net/wireless/mediatek/mt76/mt76x02_util.h |  2 +
 .../net/wireless/mediatek/mt76/mt76x2/mac.c   |  2 +-
 .../wireless/mediatek/mt76/mt76x2/mt76x2.h|  2 -
 .../wireless/mediatek/mt76/mt76x2/pci_init.c  |  1 -
 .../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 e9595ea9b0fb..5359273d8453 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 {
 
void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta,
   bool ps);
-   s8 (*get_max_txpwr_adj)(struct mt76_dev *dev,
-   const struct ieee80211_tx_rate *rate);
 };
 
 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,
 }
 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 = >rate_power;
+
+   r = >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,
struct ieee80211_vif *vif,
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.flags = rates->rate[0].flags;
mt76x02_mac_wcid_set_rate(dev, >wcid, );
-
-   if (dev->drv && dev->drv->get_max_txpwr_adj)
-   msta->wcid.max_txpwr_adj = dev->drv->get_max_txpwr_adj(dev, 
);
+   msta->wcid.max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, );
 }
 EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update);
 
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,
 void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
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);
 void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len);
 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

[RFC 3/5] mt76: add get_tx_txpwr_adj function pointer to mt76_driver_ops

2018-09-29 Thread Lorenzo Bianconi
Add get_tx_txpwr_adj function pointer to mt76_driver_ops data structure.
This is a preliminary patch unify txwi configuration between mt76x0 and
mt76x2 drivers since tpc is currently supported just by mt76x2 driver

Signed-off-by: Lorenzo Bianconi 
---
 drivers/net/wireless/mediatek/mt76/mt76.h| 2 ++
 drivers/net/wireless/mediatek/mt76/mt76x2/mac.c  | 2 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h   | 2 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c | 1 +
 drivers/net/wireless/mediatek/mt76/mt76x2/tx.c   | 6 --
 5 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h 
b/drivers/net/wireless/mediatek/mt76/mt76.h
index 5359273d8453..c2e7235c844d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -262,6 +262,8 @@ struct mt76_driver_ops {
 
void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta,
   bool ps);
+   s8 (*get_tx_txpwr_adj)(struct mt76_dev *dev, s8 txpwr,
+  s8 max_txpwr_adj);
 };
 
 struct mt76_channel_state {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
index a396a56dcfe0..0791fa11875c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
@@ -100,7 +100,7 @@ void mt76x2_mac_write_txwi(struct mt76x2_dev *dev, struct 
mt76x02_txwi *txwi,
}
spin_unlock_bh(>mt76.lock);
 
-   txpwr_adj = mt76x2_tx_get_txpwr_adj(dev, dev->mt76.txpower_conf,
+   txpwr_adj = mt76x2_tx_get_txpwr_adj(>mt76, dev->mt76.txpower_conf,
max_txpwr_adj);
txwi->ctl2 = FIELD_PREP(MT_TX_PWR_ADJ, txpwr_adj);
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h 
b/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
index 11cc11665564..52706900d804 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
@@ -171,7 +171,7 @@ void mt76x2_sta_ps(struct mt76_dev *dev, struct 
ieee80211_sta *sta, bool ps);
 
 void mt76x2_update_channel(struct mt76_dev *mdev);
 
-s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj);
+s8 mt76x2_tx_get_txpwr_adj(struct mt76_dev *mdev, s8 txpwr, s8 max_txpwr_adj);
 void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr);
 
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
index 58d5cad4c41d..b1d5dc2b7b81 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
@@ -362,6 +362,7 @@ struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev)
.rx_skb = mt76x2_queue_rx_skb,
.rx_poll_complete = mt76x2_rx_poll_complete,
.sta_ps = mt76x2_sta_ps,
+   .get_tx_txpwr_adj = mt76x2_tx_get_txpwr_adj,
};
struct mt76x2_dev *dev;
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 0c878c9eb33d..c8203e49560c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/tx.c
@@ -47,8 +47,10 @@ void mt76x2_tx(struct ieee80211_hw *hw, struct 
ieee80211_tx_control *control,
 }
 EXPORT_SYMBOL_GPL(mt76x2_tx);
 
-s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj)
+s8 mt76x2_tx_get_txpwr_adj(struct mt76_dev *mdev, s8 txpwr, s8 max_txpwr_adj)
 {
+   struct mt76x2_dev  *dev = container_of(mdev, struct mt76x2_dev, mt76);
+
txpwr = min_t(s8, txpwr, dev->mt76.txpower_conf);
txpwr -= (dev->target_power + dev->target_power_delta[0]);
txpwr = min_t(s8, txpwr, max_txpwr_adj);
@@ -66,7 +68,7 @@ void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 
txpwr)
 {
s8 txpwr_adj;
 
-   txpwr_adj = mt76x2_tx_get_txpwr_adj(dev, txpwr,
+   txpwr_adj = mt76x2_tx_get_txpwr_adj(>mt76, txpwr,
dev->mt76.rate_power.ofdm[4]);
mt76_rmw_field(dev, MT_PROT_AUTO_TX_CFG,
   MT_PROT_AUTO_TX_CFG_PROT_PADJ, txpwr_adj);
-- 
2.19.0



[RFC 4/5] mt76: move mt76x02_mac_write_txwi in mt76x02-lib module

2018-09-29 Thread Lorenzo Bianconi
Move mt76x02_mac_write_txwi in mt76x02_mac.c since it is shared between
mt76x0 and mt76x2 drivers. This is a preliminary patch to unify txwi
configuration between mt76x0 and mt76x2 drivers

Signed-off-by: Lorenzo Bianconi 
---
 .../net/wireless/mediatek/mt76/mt76x02_mac.c  | 63 +++
 .../net/wireless/mediatek/mt76/mt76x02_mac.h  |  3 +
 .../net/wireless/mediatek/mt76/mt76x2/mac.c   | 60 --
 .../net/wireless/mediatek/mt76/mt76x2/mac.h   |  3 -
 .../wireless/mediatek/mt76/mt76x2/pci_mac.c   |  2 +-
 .../wireless/mediatek/mt76/mt76x2/pci_tx.c|  2 +-
 .../wireless/mediatek/mt76/mt76x2/usb_core.c  |  3 +-
 7 files changed, 69 insertions(+), 67 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c 
b/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
index df4366a702c9..a246535b3980 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
@@ -18,6 +18,7 @@
 #include "mt76.h"
 #include "mt76x02_regs.h"
 #include "mt76x02_mac.h"
+#include "mt76x02_util.h"
 
 enum mt76x02_cipher_type
 mt76x02_mac_get_key_info(struct ieee80211_key_conf *key, u8 *key_data)
@@ -341,6 +342,68 @@ mt76x02_mac_process_tx_rate(struct ieee80211_tx_rate 
*txrate, u16 rate,
return 0;
 }
 
+void mt76x02_mac_write_txwi(struct mt76_dev *dev, struct mt76x02_txwi *txwi,
+   struct sk_buff *skb, struct mt76_wcid *wcid,
+   struct ieee80211_sta *sta, int len)
+{
+   struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+   struct ieee80211_tx_rate *rate = >control.rates[0];
+   struct ieee80211_key_conf *key = info->control.hw_key;
+   u16 rate_ht_mask = FIELD_PREP(MT_RXWI_RATE_PHY, BIT(1) | BIT(2));
+   u8 nss;
+   s8 txpwr_adj, max_txpwr_adj;
+   u8 ccmp_pn[8];
+
+   memset(txwi, 0, sizeof(*txwi));
+
+   if (wcid)
+   txwi->wcid = wcid->idx;
+   else
+   txwi->wcid = 0xff;
+
+   txwi->pktid = 1;
+
+   if (wcid && wcid->sw_iv && key) {
+   u64 pn = atomic64_inc_return(>tx_pn);
+   ccmp_pn[0] = pn;
+   ccmp_pn[1] = pn >> 8;
+   ccmp_pn[2] = 0;
+   ccmp_pn[3] = 0x20 | (key->keyidx << 6);
+   ccmp_pn[4] = pn >> 16;
+   ccmp_pn[5] = pn >> 24;
+   ccmp_pn[6] = pn >> 32;
+   ccmp_pn[7] = pn >> 40;
+   txwi->iv = *((__le32 *)_pn[0]);
+   txwi->eiv = *((__le32 *)_pn[1]);
+   }
+
+   spin_lock_bh(>lock);
+   if (wcid && (rate->idx < 0 || !rate->count)) {
+   txwi->rate = wcid->tx_rate;
+   max_txpwr_adj = wcid->max_txpwr_adj;
+   nss = wcid->tx_rate_nss;
+   } else {
+   txwi->rate = mt76x02_mac_tx_rate_val(dev, rate, );
+   max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, rate);
+   }
+   spin_unlock_bh(>lock);
+
+   if (dev->drv->get_tx_txpwr_adj) {
+   txpwr_adj = dev->drv->get_tx_txpwr_adj(dev, dev->txpower_conf,
+  max_txpwr_adj);
+   txwi->ctl2 = FIELD_PREP(MT_TX_PWR_ADJ, txpwr_adj);
+   }
+
+   if (is_mt76x2(dev) && mt76_rev(dev) >= MT76XX_REV_E4)
+   txwi->txstream = 0x13;
+   else if (is_mt76x2(dev) && mt76_rev(dev) >= MT76XX_REV_E3 &&
+!(txwi->rate & cpu_to_le16(rate_ht_mask)))
+   txwi->txstream = 0x93;
+
+   mt76x02_mac_fill_txwi(txwi, skb, sta, len, nss);
+}
+EXPORT_SYMBOL_GPL(mt76x02_mac_write_txwi);
+
 static void
 mt76x02_mac_fill_tx_status(struct mt76_dev *dev,
  struct ieee80211_tx_info *info,
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mac.h 
b/drivers/net/wireless/mediatek/mt76/mt76x02_mac.h
index 62072291e416..ddc8057fbbab 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_mac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mac.h
@@ -203,4 +203,7 @@ void mt76x02_send_tx_status(struct mt76_dev *dev,
 int
 mt76x02_mac_process_rate(struct mt76_rx_status *status, u16 rate);
 void mt76x02_mac_setaddr(struct mt76_dev *dev, u8 *addr);
+void mt76x02_mac_write_txwi(struct mt76_dev *dev, struct mt76x02_txwi *txwi,
+   struct sk_buff *skb, struct mt76_wcid *wcid,
+   struct ieee80211_sta *sta, int len);
 #endif
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
index 0791fa11875c..c98ce1582aec 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/mac.c
@@ -54,66 +54,6 @@ void mt76x2_mac_stop(struct mt76x2_dev *dev, bool force)
 }
 EXPORT_SYMBOL_GPL(mt76x2_mac_stop);
 
-void mt76x2_mac_write_txwi(struct mt76x2_dev *dev, struct mt76x02_txwi *txwi,
-  struct sk_buff *skb, struct mt76_wcid *wcid,
-  struct 

[RFC 5/5] mt76: usb: use mt76x02u_tx_prepare_skb to fill txwi

2018-09-29 Thread Lorenzo Bianconi
Use mt76x02u_tx_prepare_skb routine to fill txwi in mt76x2u and
mt76x0u drivers and remove duplicated code. Moreover add static
qualifier to mt76x02_mac_tx_rate_val and mt76x02_mac_fill_txwi
routines

Signed-off-by: Lorenzo Bianconi 
---
 .../wireless/mediatek/mt76/mt76x0/mt76x0.h|  5 --
 .../net/wireless/mediatek/mt76/mt76x0/tx.c| 38 --
 .../net/wireless/mediatek/mt76/mt76x0/usb.c   | 17 +-
 .../net/wireless/mediatek/mt76/mt76x02_mac.c  |  9 ++--
 .../net/wireless/mediatek/mt76/mt76x02_mac.h  |  5 --
 .../net/wireless/mediatek/mt76/mt76x02_usb.h  |  5 +-
 .../wireless/mediatek/mt76/mt76x02_usb_core.c | 38 +-
 .../wireless/mediatek/mt76/mt76x2/Makefile|  2 +-
 .../wireless/mediatek/mt76/mt76x2/mt76x2u.h   |  4 --
 .../wireless/mediatek/mt76/mt76x2/usb_core.c  | 52 ---
 .../wireless/mediatek/mt76/mt76x2/usb_init.c  |  3 +-
 11 files changed, 48 insertions(+), 130 deletions(-)
 delete mode 100644 drivers/net/wireless/mediatek/mt76/mt76x2/usb_core.c

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h 
b/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
index a37dbf944b15..e54468af6ba7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
@@ -168,11 +168,6 @@ void mt76x0_mac_set_ampdu_factor(struct mt76x0_dev *dev);
 /* TX */
 void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
struct sk_buff *skb);
-struct mt76x02_txwi *
-mt76x0_push_txwi(struct mt76x0_dev *dev, struct sk_buff *skb,
-struct ieee80211_sta *sta, struct mt76_wcid *wcid,
-int pkt_len);
-
 void mt76x0_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
 struct sk_buff *skb);
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/tx.c 
b/drivers/net/wireless/mediatek/mt76/mt76x0/tx.c
index b3c5dc2ffeb1..79c0b3ba1ccb 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/tx.c
@@ -17,44 +17,6 @@
 #include "../mt76x02_util.h"
 #include "../mt76x02_usb.h"
 
-struct mt76x02_txwi *
-mt76x0_push_txwi(struct mt76x0_dev *dev, struct sk_buff *skb,
-struct ieee80211_sta *sta, struct mt76_wcid *wcid,
-int pkt_len)
-{
-   struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-   struct ieee80211_tx_rate *rate = >control.rates[0];
-   struct mt76x02_txwi *txwi;
-   unsigned long flags;
-   u16 rate_ctl;
-   u8 nss;
-
-   txwi = (struct mt76x02_txwi *)skb_push(skb, sizeof(struct 
mt76x02_txwi));
-   memset(txwi, 0, sizeof(*txwi));
-
-   if (!wcid->tx_rate_set)
-   ieee80211_get_tx_rates(info->control.vif, sta, skb,
-  info->control.rates, 1);
-
-   spin_lock_irqsave(>mt76.lock, flags);
-   if (rate->idx < 0 || !rate->count) {
-   rate_ctl = wcid->tx_rate;
-   nss = wcid->tx_rate_nss;
-   } else {
-   rate_ctl = mt76x02_mac_tx_rate_val(>mt76, rate, );
-   }
-   spin_unlock_irqrestore(>mt76.lock, flags);
-
-   txwi->wcid = wcid->idx;
-   txwi->rate = cpu_to_le16(rate_ctl);
-   txwi->pktid = (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) ? 1 : 0;
-
-   mt76x02_mac_fill_txwi(txwi, skb, sta, pkt_len, nss);
-
-   return txwi;
-}
-EXPORT_SYMBOL_GPL(mt76x0_push_txwi);
-
 void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
   struct sk_buff *skb)
 {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c 
b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
index a76043213f55..42c996067d9e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
@@ -159,21 +159,6 @@ static const struct ieee80211_ops mt76x0u_ops = {
.wake_tx_queue = mt76_wake_tx_queue,
 };
 
-static int mt76x0u_tx_prepare_skb(struct mt76_dev *mdev, void *data,
- struct sk_buff *skb, struct mt76_queue *q,
- struct mt76_wcid *wcid, struct ieee80211_sta 
*sta,
- u32 *tx_info)
-{
-   struct mt76x0_dev *dev = container_of(mdev, struct mt76x0_dev, mt76);
-   struct mt76x02_txwi *txwi;
-   int len = skb->len;
-
-   mt76x02_insert_hdr_pad(skb);
-   txwi = mt76x0_push_txwi(dev, skb, sta, wcid, len);
-
-   return mt76x02u_set_txinfo(skb, wcid, q2ep(q->hw_idx));
-}
-
 static int mt76x0u_register_device(struct mt76x0_dev *dev)
 {
struct ieee80211_hw *hw = dev->mt76.hw;
@@ -230,7 +215,7 @@ static int mt76x0u_probe(struct usb_interface *usb_intf,
 const struct usb_device_id *id)
 {
static const struct mt76_driver_ops drv_ops = {
-   .tx_prepare_skb = mt76x0u_tx_prepare_skb,
+   .tx_prepare_skb = mt76x02u_tx_prepare_skb,
.tx_complete_skb = 

[RFC 0/5] unify txwi parsing between mt76x0 and mt76x2 drivers

2018-09-29 Thread Lorenzo Bianconi
Move mt76x02_mac_write_txwi routine in mt76x02-lib module in order to
unify txwi parsing between mt76x0 and mt76x2 drivers.
rxwi unification is currently in progress since we need to unify
mt76x2_dev and mt76x0_dev in mt76x02_dev and remove duplicated code

Lorenzo Bianconi (5):
  mt76: introduce is_mt76x2 routine
  mt76: move mt76x02_tx_get_max_txpwr_adj in mt76x02_util.c
  mt76: add get_tx_txpwr_adj function pointer to mt76_driver_ops
  mt76: move mt76x02_mac_write_txwi in mt76x02-lib module
  mt76: usb: use mt76x02u_tx_prepare_skb to fill txwi

 drivers/net/wireless/mediatek/mt76/mt76.h | 17 -
 .../wireless/mediatek/mt76/mt76x0/mt76x0.h|  5 --
 .../net/wireless/mediatek/mt76/mt76x0/tx.c| 38 --
 .../net/wireless/mediatek/mt76/mt76x0/usb.c   | 17 +
 .../net/wireless/mediatek/mt76/mt76x02_mac.c  | 72 +--
 .../net/wireless/mediatek/mt76/mt76x02_mac.h  |  8 +--
 .../net/wireless/mediatek/mt76/mt76x02_usb.h  |  5 +-
 .../wireless/mediatek/mt76/mt76x02_usb_core.c | 38 +-
 .../net/wireless/mediatek/mt76/mt76x02_util.c | 45 +++-
 .../net/wireless/mediatek/mt76/mt76x02_util.h |  2 +
 .../wireless/mediatek/mt76/mt76x2/Makefile|  2 +-
 .../net/wireless/mediatek/mt76/mt76x2/mac.c   | 60 
 .../net/wireless/mediatek/mt76/mt76x2/mac.h   |  3 -
 .../wireless/mediatek/mt76/mt76x2/mt76x2.h|  9 +--
 .../wireless/mediatek/mt76/mt76x2/mt76x2u.h   |  4 --
 .../wireless/mediatek/mt76/mt76x2/pci_init.c  |  4 +-
 .../wireless/mediatek/mt76/mt76x2/pci_mac.c   |  2 +-
 .../wireless/mediatek/mt76/mt76x2/pci_mcu.c   |  2 +-
 .../wireless/mediatek/mt76/mt76x2/pci_tx.c|  2 +-
 .../net/wireless/mediatek/mt76/mt76x2/tx.c| 46 +---
 .../wireless/mediatek/mt76/mt76x2/usb_core.c  | 53 --
 .../wireless/mediatek/mt76/mt76x2/usb_init.c  |  3 +-
 .../wireless/mediatek/mt76/mt76x2/usb_mac.c   |  2 +-
 .../wireless/mediatek/mt76/mt76x2/usb_mcu.c   |  2 +-
 24 files changed, 184 insertions(+), 257 deletions(-)
 delete mode 100644 drivers/net/wireless/mediatek/mt76/mt76x2/usb_core.c

-- 
2.19.0



[RFC 1/5] mt76: introduce is_mt76x2 routine

2018-09-29 Thread Lorenzo Bianconi
Add is_mt76x2 utility routine to check if device chip id is mt76x2.
Moreover move is_mt7612 in mt76.h. This is a preliminary patch to
share write_txwi routine between mt76x2 and mt76x0 drivers

Signed-off-by: Lorenzo Bianconi 
---
 drivers/net/wireless/mediatek/mt76/mt76.h   | 13 +
 drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h  |  5 -
 .../net/wireless/mediatek/mt76/mt76x2/pci_init.c|  2 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/pci_mcu.c |  2 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/usb_mac.c |  2 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/usb_mcu.c |  2 +-
 6 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h 
b/drivers/net/wireless/mediatek/mt76/mt76.h
index f2dd4d87e355..e9595ea9b0fb 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -516,6 +516,19 @@ static inline u16 mt76_rev(struct mt76_dev *dev)
return dev->rev & 0x;
 }
 
+static inline bool is_mt7612(struct mt76_dev *dev)
+{
+   return mt76_chip(dev) == 0x7612;
+}
+
+static inline bool is_mt76x2(struct mt76_dev *dev)
+{
+   return mt76_chip(dev) == 0x7612 ||
+  mt76_chip(dev) == 0x7602 ||
+  mt76_chip(dev) == 0x7662 ||
+  mt76_chip(dev) == 0x7632;
+}
+
 #define mt76xx_chip(dev) mt76_chip(&((dev)->mt76))
 #define mt76xx_rev(dev) mt76_rev(&((dev)->mt76))
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h 
b/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
index ecbb9e4ab888..c58aa251f0b6 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2.h
@@ -109,11 +109,6 @@ struct mt76x2_dev {
struct mt76x2_dfs_pattern_detector dfs_pd;
 };
 
-static inline bool is_mt7612(struct mt76x2_dev *dev)
-{
-   return mt76_chip(>mt76) == 0x7612;
-}
-
 static inline bool mt76x2_channel_silent(struct mt76x2_dev *dev)
 {
struct ieee80211_channel *chan = dev->mt76.chandef.chan;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
index 7036f4cbc836..56c6259cbf79 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c
@@ -108,7 +108,7 @@ static int mt76x2_mac_reset(struct mt76x2_dev *dev, bool 
hard)
   MT_MAC_SYS_CTRL_RESET_CSR |
   MT_MAC_SYS_CTRL_RESET_BBP);
 
-   if (is_mt7612(dev))
+   if (is_mt7612(>mt76))
mt76_clear(dev, MT_COEXCFG0, MT_COEXCFG0_COEX_EN);
 
mt76_set(dev, MT_EXT_CCA_CFG, 0xf000);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_mcu.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_mcu.c
index 38fa84bddf7b..ffb1301bd77d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_mcu.c
@@ -28,7 +28,7 @@ mt76pci_load_rom_patch(struct mt76x2_dev *dev)
 {
const struct firmware *fw = NULL;
struct mt76x02_patch_header *hdr;
-   bool rom_protect = !is_mt7612(dev);
+   bool rom_protect = !is_mt7612(>mt76);
int len, ret = 0;
__le32 *cur;
u32 patch_mask, patch_reg;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mac.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mac.c
index ae89461f803c..0045ff50eb35 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mac.c
@@ -103,7 +103,7 @@ int mt76x2u_mac_reset(struct mt76x2_dev *dev)
   MT_MAC_SYS_CTRL_RESET_CSR |
   MT_MAC_SYS_CTRL_RESET_BBP);
 
-   if (is_mt7612(dev))
+   if (is_mt7612(>mt76))
mt76_clear(dev, MT_COEXCFG0, MT_COEXCFG0_COEX_EN);
 
mt76_set(dev, MT_EXT_CCA_CFG, 0xf000);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mcu.c 
b/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mcu.c
index 35e157be456c..06c03e9f627d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2/usb_mcu.c
@@ -91,7 +91,7 @@ static void mt76x2u_mcu_reset_wmt(struct mt76x2_dev *dev)
 
 static int mt76x2u_mcu_load_rom_patch(struct mt76x2_dev *dev)
 {
-   bool rom_protect = !is_mt7612(dev);
+   bool rom_protect = !is_mt7612(>mt76);
struct mt76x02_patch_header *hdr;
u32 val, patch_mask, patch_reg;
const struct firmware *fw;
-- 
2.19.0



[PATCH] mt76x0: init: intrduce MT_H2M_* definitions

2018-09-29 Thread Lorenzo Bianconi
Add MT_H2M_BBP_AGENT, MT_H2M_MAILBOX_CSR and MT_H2M_INT_SRC and
remove magic numbers

Signed-off-by: Lorenzo Bianconi 
---
 drivers/net/wireless/mediatek/mt76/mt76x0/init.c  | 8 
 drivers/net/wireless/mediatek/mt76/mt76x02_regs.h | 3 +++
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c 
b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
index edfd5d94d197..4b8314844d36 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
@@ -174,10 +174,10 @@ static void mt76x0_init_mac_registers(struct mt76x0_dev 
*dev)
mt76_wr(dev, MT_WMM_CTRL, reg);
 
/* TODO: Probably not needed */
-   mt76_wr(dev, 0x7028, 0);
-   mt76_wr(dev, 0x7010, 0);
-   mt76_wr(dev, 0x7024, 0);
-   msleep(10);
+   mt76_wr(dev, MT_H2M_BBP_AGENT, 0);
+   mt76_wr(dev, MT_H2M_MAILBOX_CSR, 0);
+   mt76_wr(dev, MT_H2M_INT_SRC, 0);
+   usleep_range(1, 2);
 }
 
 static int mt76x0_init_wcid_mem(struct mt76x0_dev *dev)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h 
b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
index f8003ee03a89..217bb0ac12fd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
@@ -622,8 +622,11 @@
 
 #define MT_SRAM_BASE   0x4000
 
+#define MT_H2M_MAILBOX_CSR 0x7010
 #define MT_H2M_MAILBOX_CID 0x7014
 #define MT_H2M_MAILBOX_STATUS  0x701c
+#define MT_H2M_INT_SRC 0x7024
+#define MT_H2M_BBP_AGENT   0x7028
 
 #define MT_WCID_KEY_BASE   0x8000
 #define MT_WCID_KEY(_n)(MT_WCID_KEY_BASE + (_n) * 32)
-- 
2.19.0



[PATCH] mt76x0: pci: add mt76x0e_cleanup routine

2018-09-29 Thread Lorenzo Bianconi
Add mt76x0e_cleanup routine to tidy up the device
during netdevice removal

Signed-off-by: Lorenzo Bianconi 
---
 .../net/wireless/mediatek/mt76/mt76x0/pci.c   | 30 +++
 .../net/wireless/mediatek/mt76/mt76x02_regs.h |  3 ++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c 
b/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c
index 876291dd3c1e..8cf9cabcbe2f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/pci.c
@@ -41,13 +41,8 @@ static int mt76x0e_start(struct ieee80211_hw *hw)
return 0;
 }
 
-static void mt76x0e_stop(struct ieee80211_hw *hw)
+static void mt76x0e_stop_hw(struct mt76x0_dev *dev)
 {
-   struct mt76x0_dev *dev = hw->priv;
-
-   mutex_lock(>mt76.mutex);
-
-   clear_bit(MT76_STATE_RUNNING, >mt76.state);
cancel_delayed_work_sync(>cal_work);
cancel_delayed_work_sync(>mac_work);
 
@@ -62,7 +57,15 @@ static void mt76x0e_stop(struct ieee80211_hw *hw)
   0, 1000))
dev_warn(dev->mt76.dev, "TX DMA did not stop\n");
mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_RX_DMA_EN);
+}
+
+static void mt76x0e_stop(struct ieee80211_hw *hw)
+{
+   struct mt76x0_dev *dev = hw->priv;
 
+   mutex_lock(>mt76.mutex);
+   clear_bit(MT76_STATE_RUNNING, >mt76.state);
+   mt76x0e_stop_hw(dev);
mutex_unlock(>mt76.mutex);
 }
 
@@ -160,12 +163,27 @@ mt76x0e_probe(struct pci_dev *pdev, const struct 
pci_device_id *id)
return ret;
 }
 
+static void mt76x0e_cleanup(struct mt76x0_dev *dev)
+{
+   clear_bit(MT76_STATE_INITIALIZED, >mt76.state);
+   mt76x0_chip_onoff(dev, false, false);
+   mt76x0e_stop_hw(dev);
+
+   mt76_wr(dev, MT_H2M_MAILBOX_CID, ~0);
+   mt76_wr(dev, MT_H2M_MAILBOX_STATUS, ~0);
+
+   mt76_dma_cleanup(>mt76);
+   mt76x02_mcu_cleanup(>mt76);
+}
+
 static void
 mt76x0e_remove(struct pci_dev *pdev)
 {
struct mt76_dev *mdev = pci_get_drvdata(pdev);
+   struct mt76x0_dev *dev = container_of(mdev, struct mt76x0_dev, mt76);
 
mt76_unregister_device(mdev);
+   mt76x0e_cleanup(dev);
ieee80211_free_hw(mdev->hw);
 }
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h 
b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
index 24d1e6d747dd..f8003ee03a89 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
@@ -622,6 +622,9 @@
 
 #define MT_SRAM_BASE   0x4000
 
+#define MT_H2M_MAILBOX_CID 0x7014
+#define MT_H2M_MAILBOX_STATUS  0x701c
+
 #define MT_WCID_KEY_BASE   0x8000
 #define MT_WCID_KEY(_n)(MT_WCID_KEY_BASE + (_n) * 32)
 
-- 
2.19.0



[PATCH] mac80211: fix setting IEEE80211_KEY_FLAG_RX_MGMT for AP mode keys

2018-09-29 Thread Felix Fietkau
key->sta is only valid after ieee80211_key_link, which is called later
in this function. Because of that, the IEEE80211_KEY_FLAG_RX_MGMT is
never set when management frame protection is enabled.

Fixes: e548c49e6dc6b ("mac80211: add key flag for management keys")
Cc: sta...@vger.kernel.org
Signed-off-by: Felix Fietkau 
---
 net/mac80211/cfg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 504627e2117f..914aef7e7afd 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -425,7 +425,7 @@ static int ieee80211_add_key(struct wiphy *wiphy, struct 
net_device *dev,
case NL80211_IFTYPE_AP:
case NL80211_IFTYPE_AP_VLAN:
/* Keys without a station are used for TX only */
-   if (key->sta && test_sta_flag(key->sta, WLAN_STA_MFP))
+   if (sta && test_sta_flag(sta, WLAN_STA_MFP))
key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
break;
case NL80211_IFTYPE_ADHOC:
-- 
2.17.0



[PATCH 2/2] mt76: check aggregation sequence number for frames sent via drv_tx

2018-09-29 Thread Felix Fietkau
ps-poll response frames can be sent via drv_tx. Store the frame sequence number
for such frames, in case a BlockAckReq needs to be sent

Signed-off-by: Felix Fietkau 
---
 drivers/net/wireless/mediatek/mt76/tx.c | 36 +
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/tx.c 
b/drivers/net/wireless/mediatek/mt76/tx.c
index cf79b8c67b52..bf0e9e666bc4 100644
--- a/drivers/net/wireless/mediatek/mt76/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/tx.c
@@ -91,11 +91,23 @@ mt76_txq_get_qid(struct ieee80211_txq *txq)
return txq->ac;
 }
 
+static void
+mt76_check_agg_ssn(struct mt76_txq *mtxq, struct sk_buff *skb)
+{
+   struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
+
+   if (!ieee80211_is_data_qos(hdr->frame_control))
+   return;
+
+   mtxq->agg_ssn = le16_to_cpu(hdr->seq_ctrl) + 0x10;
+}
+
 void
 mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta,
struct mt76_wcid *wcid, struct sk_buff *skb)
 {
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+   struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
struct mt76_queue *q;
int qid = skb_get_queue_mapping(skb);
 
@@ -108,6 +120,19 @@ mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta,
ieee80211_get_tx_rates(info->control.vif, sta, skb,
   info->control.rates, 1);
 
+   if (sta && ieee80211_is_data_qos(hdr->frame_control)) {
+   struct ieee80211_txq *txq;
+   struct mt76_txq *mtxq;
+   u8 tid;
+
+   tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
+   txq = sta->txq[tid];
+   mtxq = (struct mt76_txq *) txq->drv_priv;
+
+   if (mtxq->aggr)
+   mt76_check_agg_ssn(mtxq, skb);
+   }
+
q = >q_tx[qid];
 
spin_lock_bh(>lock);
@@ -143,17 +168,6 @@ mt76_txq_dequeue(struct mt76_dev *dev, struct mt76_txq 
*mtxq, bool ps)
return skb;
 }
 
-static void
-mt76_check_agg_ssn(struct mt76_txq *mtxq, struct sk_buff *skb)
-{
-   struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-
-   if (!ieee80211_is_data_qos(hdr->frame_control))
-   return;
-
-   mtxq->agg_ssn = le16_to_cpu(hdr->seq_ctrl) + 0x10;
-}
-
 static void
 mt76_queue_ps_skb(struct mt76_dev *dev, struct ieee80211_sta *sta,
  struct sk_buff *skb, bool last)
-- 
2.17.0



[PATCH 1/2] mt76: fix handling ps-poll frames

2018-09-29 Thread Felix Fietkau
Hardware station lookup for pspoll frames can fail, which makes the driver
ignore ps-poll frames. Fix the resulting powersave issues by looking up
the station for pspoll frames in software

Signed-off-by: Felix Fietkau 
---
 drivers/net/wireless/mediatek/mt76/mac80211.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c 
b/drivers/net/wireless/mediatek/mt76/mac80211.c
index 639cbafc1d50..2a699e8b79bf 100644
--- a/drivers/net/wireless/mediatek/mt76/mac80211.c
+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
@@ -550,6 +550,12 @@ mt76_check_ps(struct mt76_dev *dev, struct sk_buff *skb)
struct mt76_wcid *wcid = status->wcid;
bool ps;
 
+   if (ieee80211_is_pspoll(hdr->frame_control) && !wcid) {
+   sta = ieee80211_find_sta_by_ifaddr(dev->hw, hdr->addr2, NULL);
+   if (sta)
+   wcid = status->wcid = (struct mt76_wcid *) 
sta->drv_priv;
+   }
+
if (!wcid || !wcid->sta)
return;
 
-- 
2.17.0



[RFC] mt76x2: move mt76x2 source files to mt76x2 folder

2018-09-29 Thread Lorenzo Bianconi
Move mt76x2 and mt76x2u drivers to mt76x2 subfolder and
leave just shared code in mt76 root folder

Signed-off-by: Lorenzo Bianconi 
---
 drivers/net/wireless/mediatek/mt76/Kconfig| 43 +--
 drivers/net/wireless/mediatek/mt76/Makefile   | 22 +-
 .../net/wireless/mediatek/mt76/mt76x0/Kconfig | 20 +
 .../net/wireless/mediatek/mt76/mt76x2/Kconfig | 20 +
 .../wireless/mediatek/mt76/mt76x2/Makefile| 18 
 .../mt76/{mt76x2_common.c => mt76x2/common.c} |  2 +-
 .../{mt76x2_debugfs.c => mt76x2/debugfs.c}|  0
 .../mt76/{mt76x2_dfs.h => mt76x2/dfs.h}   |  0
 .../mt76/{mt76x2_eeprom.c => mt76x2/eeprom.c} |  2 +-
 .../mt76/{mt76x2_eeprom.h => mt76x2/eeprom.h} |  2 +-
 .../{mt76x2_init_common.c => mt76x2/init.c}   |  4 +-
 .../{mt76x2_mac_common.c => mt76x2/mac.c} |  2 +-
 .../mt76/{mt76x2_mac.h => mt76x2/mac.h}   |  4 +-
 .../{mt76x2_mcu_common.c => mt76x2/mcu.c} |  6 +--
 .../mt76/{mt76x2_mcu.h => mt76x2/mcu.h}   |  2 +-
 .../mediatek/mt76/{ => mt76x2}/mt76x2.h   |  8 ++--
 .../mediatek/mt76/{ => mt76x2}/mt76x2u.h  |  4 +-
 .../mt76/{mt76x2_pci.c => mt76x2/pci.c}   |  2 +-
 .../mt76/{mt76x2_core.c => mt76x2/pci_core.c} |  4 +-
 .../mt76/{mt76x2_dfs.c => mt76x2/pci_dfs.c}   |  2 +-
 .../mt76/{mt76x2_dma.c => mt76x2/pci_dma.c}   |  4 +-
 .../mt76/{mt76x2_init.c => mt76x2/pci_init.c} |  8 ++--
 .../mt76/{mt76x2_mac.c => mt76x2/pci_mac.c}   |  8 ++--
 .../mt76/{mt76x2_main.c => mt76x2/pci_main.c} |  2 +-
 .../mt76/{mt76x2_mcu.c => mt76x2/pci_mcu.c}   |  6 +--
 .../mt76/{mt76x2_phy.c => mt76x2/pci_phy.c}   |  4 +-
 .../{mt76x2_trace.c => mt76x2/pci_trace.c}|  2 +-
 .../mt76/{mt76x2_tx.c => mt76x2/pci_tx.c} |  4 +-
 .../{mt76x2_phy_common.c => mt76x2/phy.c} |  6 +--
 .../mt76/{mt76x2_trace.h => mt76x2/trace.h}   |  2 +-
 .../mt76/{mt76x2_tx_common.c => mt76x2/tx.c}  |  2 +-
 .../mt76/{mt76x2_usb.c => mt76x2/usb.c}   |  2 +-
 .../{mt76x2u_core.c => mt76x2/usb_core.c} |  6 +--
 .../{mt76x2u_init.c => mt76x2/usb_init.c} |  6 +--
 .../mt76/{mt76x2u_mac.c => mt76x2/usb_mac.c}  |  2 +-
 .../{mt76x2u_main.c => mt76x2/usb_main.c} |  2 +-
 .../mt76/{mt76x2u_mcu.c => mt76x2/usb_mcu.c}  |  4 +-
 .../mt76/{mt76x2u_phy.c => mt76x2/usb_phy.c}  |  2 +-
 38 files changed, 120 insertions(+), 119 deletions(-)
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt76x0/Kconfig
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt76x2/Kconfig
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt76x2/Makefile
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_common.c => mt76x2/common.c} 
(98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_debugfs.c => 
mt76x2/debugfs.c} (100%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_dfs.h => mt76x2/dfs.h} (100%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_eeprom.c => mt76x2/eeprom.c} 
(99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_eeprom.h => mt76x2/eeprom.h} 
(98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_init_common.c => 
mt76x2/init.c} (99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_mac_common.c => 
mt76x2/mac.c} (99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_mac.h => mt76x2/mac.h} (97%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_mcu_common.c => 
mt76x2/mcu.c} (97%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_mcu.h => mt76x2/mcu.h} (99%)
 rename drivers/net/wireless/mediatek/mt76/{ => mt76x2}/mt76x2.h (98%)
 rename drivers/net/wireless/mediatek/mt76/{ => mt76x2}/mt76x2u.h (98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_pci.c => mt76x2/pci.c} (99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_core.c => mt76x2/pci_core.c} 
(97%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_dfs.c => mt76x2/pci_dfs.c} 
(99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_dma.c => mt76x2/pci_dma.c} 
(95%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_init.c => mt76x2/pci_init.c} 
(99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_mac.c => mt76x2/pci_mac.c} 
(98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_main.c => mt76x2/pci_main.c} 
(99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_mcu.c => mt76x2/pci_mcu.c} 
(98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_phy.c => mt76x2/pci_phy.c} 
(99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_trace.c => 
mt76x2/pci_trace.c} (97%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_tx.c => mt76x2/pci_tx.c} 
(98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_phy_common.c => 
mt76x2/phy.c} (99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_trace.h => mt76x2/trace.h} 
(98%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_tx_common.c => mt76x2/tx.c} 
(99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2_usb.c => mt76x2/usb.c} (99%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2u_core.c => 
mt76x2/usb_core.c} (95%)
 rename drivers/net/wireless/mediatek/mt76/{mt76x2u_init.c => 
mt76x2/usb_init.c} (99%)
 

Re: [PATCH 1/5] rt2x00: set registers based on current band

2018-09-29 Thread Tom Psyborg
On 19/09/2018, Stanislaw Gruszka  wrote:
> On Wed, Sep 19, 2018 at 02:47:18PM +0200, Stanislaw Gruszka wrote:
>> > Can you show us how will the problem trigger on dual band devices?
>>
>> When you switch from some 2.4GHz channel to 5GHz channel (or vice versa)
>> ->curr_band will point to old band not the new one. To fix that you
>> have to move curr_band assignemt before ->config() in
>> rt2x00lib_config() i.e:
>>
>> rt2x00dev->curr_band = conf->chandef.chan->band;
>> rt2x00dev->ops->lib->config(rt2x00dev, , ieee80211_flags);
>>
>> However I do not see the point of replacyng rf->channel check
>> to ->curr_band check. What you can do is oposite thing, replace
>> wrong usage of ->curr_band in very few places in rt2800_config()
>> subroutines to rf->channel check.
>
> Actually ->curr_band is used in rt2800_config_ant() subroutines
> not in rt2800_config() subroutines so things looks ok.
>
> Stanislaw
>

Things should be ok, still if you have some of these cards, it'd be
better to verify that.
At least my MS150N usb card would panic when I did the very same
change in rf53xx channel config, probably because of the way the
btcoex idx value has been set.
Luckily I figured that chipset is single-band only and the patch3 was
enough to handle that:
https://www.spinics.net/lists/linux-wireless/msg177430.html