]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
mt76: disable ldpc coding for mt76x0 devices
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Sun, 7 Oct 2018 09:57:21 +0000 (11:57 +0200)
committerFelix Fietkau <nbd@nbd.name>
Sat, 13 Oct 2018 15:39:28 +0000 (17:39 +0200)
Disable ldpc coding for mt76x0 devices. Morover remove
mt76x02_mac_fill_txwi routine since it is used just in
mt76x02_mac_write_txwi

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76x02.h
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c

index e78708d55bafeb96f1b3fd5756da98bb463d95d2..fe731529144c1532f47741de56244a43f9ef5867 100644 (file)
@@ -161,6 +161,13 @@ void mt76x02_set_beacon_offsets(struct mt76x02_dev *dev);
 void mt76x02_set_irq_mask(struct mt76x02_dev *dev, u32 clear, u32 set);
 void mt76x02_mac_start(struct mt76x02_dev *dev);
 
+static inline bool is_mt76x2(struct mt76x02_dev *dev)
+{
+       return mt76_chip(&dev->mt76) == 0x7612 ||
+              mt76_chip(&dev->mt76) == 0x7662 ||
+              mt76_chip(&dev->mt76) == 0x7602;
+}
+
 static inline void mt76x02_irq_enable(struct mt76x02_dev *dev, u32 mask)
 {
        mt76x02_set_irq_mask(dev, 0, mask);
index 69132b971c305455aeb869ad19816c59c7b4350b..10578e4cb2691d119019ffb70d1fbab349e0b7fc 100644 (file)
@@ -156,48 +156,6 @@ void mt76x02_txq_init(struct mt76x02_dev *dev, struct ieee80211_txq *txq)
 }
 EXPORT_SYMBOL_GPL(mt76x02_txq_init);
 
-static void
-mt76x02_mac_fill_txwi(struct mt76x02_txwi *txwi, struct sk_buff *skb,
-                     struct ieee80211_sta *sta, int len, u8 nss)
-{
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       u16 txwi_flags = 0;
-
-       if (info->flags & IEEE80211_TX_CTL_LDPC)
-               txwi->rate |= cpu_to_le16(MT_RXWI_RATE_LDPC);
-       if ((info->flags & IEEE80211_TX_CTL_STBC) && nss == 1)
-               txwi->rate |= cpu_to_le16(MT_RXWI_RATE_STBC);
-       if (nss > 1 && sta && sta->smps_mode == IEEE80211_SMPS_DYNAMIC)
-               txwi_flags |= MT_TXWI_FLAGS_MMPS;
-       if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
-               txwi->ack_ctl |= MT_TXWI_ACK_CTL_REQ;
-       if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
-               txwi->ack_ctl |= MT_TXWI_ACK_CTL_NSEQ;
-       if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
-               txwi->pktid |= MT_TXWI_PKTID_PROBE;
-       if ((info->flags & IEEE80211_TX_CTL_AMPDU) && sta) {
-               u8 ba_size = IEEE80211_MIN_AMPDU_BUF;
-
-               ba_size <<= sta->ht_cap.ampdu_factor;
-               ba_size = min_t(int, 63, ba_size - 1);
-               if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
-                       ba_size = 0;
-               txwi->ack_ctl |= FIELD_PREP(MT_TXWI_ACK_CTL_BA_WINDOW, ba_size);
-
-               txwi_flags |= MT_TXWI_FLAGS_AMPDU |
-                        FIELD_PREP(MT_TXWI_FLAGS_MPDU_DENSITY,
-                                   sta->ht_cap.ampdu_density);
-       }
-
-       if (ieee80211_is_probe_resp(hdr->frame_control) ||
-           ieee80211_is_beacon(hdr->frame_control))
-               txwi_flags |= MT_TXWI_FLAGS_TS;
-
-       txwi->flags |= cpu_to_le16(txwi_flags);
-       txwi->len_ctl = cpu_to_le16(len);
-}
-
 static __le16
 mt76x02_mac_tx_rate_val(struct mt76x02_dev *dev,
                        const struct ieee80211_tx_rate *rate, u8 *nss_val)
@@ -344,10 +302,12 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
                            struct sk_buff *skb, struct mt76_wcid *wcid,
                            struct ieee80211_sta *sta, int len)
 {
+       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        struct ieee80211_tx_rate *rate = &info->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));
+       u16 txwi_flags = 0;
        u8 nss;
        s8 txpwr_adj, max_txpwr_adj;
        u8 ccmp_pn[8], nstreams = dev->mt76.chainmask & 0xf;
@@ -396,7 +356,38 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
                 !(txwi->rate & cpu_to_le16(rate_ht_mask)))
                txwi->txstream = 0x93;
 
-       mt76x02_mac_fill_txwi(txwi, skb, sta, len, nss);
+       if (is_mt76x2(dev) && (info->flags & IEEE80211_TX_CTL_LDPC))
+               txwi->rate |= cpu_to_le16(MT_RXWI_RATE_LDPC);
+       if ((info->flags & IEEE80211_TX_CTL_STBC) && nss == 1)
+               txwi->rate |= cpu_to_le16(MT_RXWI_RATE_STBC);
+       if (nss > 1 && sta && sta->smps_mode == IEEE80211_SMPS_DYNAMIC)
+               txwi_flags |= MT_TXWI_FLAGS_MMPS;
+       if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
+               txwi->ack_ctl |= MT_TXWI_ACK_CTL_REQ;
+       if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
+               txwi->ack_ctl |= MT_TXWI_ACK_CTL_NSEQ;
+       if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
+               txwi->pktid |= MT_TXWI_PKTID_PROBE;
+       if ((info->flags & IEEE80211_TX_CTL_AMPDU) && sta) {
+               u8 ba_size = IEEE80211_MIN_AMPDU_BUF;
+
+               ba_size <<= sta->ht_cap.ampdu_factor;
+               ba_size = min_t(int, 63, ba_size - 1);
+               if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
+                       ba_size = 0;
+               txwi->ack_ctl |= FIELD_PREP(MT_TXWI_ACK_CTL_BA_WINDOW, ba_size);
+
+               txwi_flags |= MT_TXWI_FLAGS_AMPDU |
+                        FIELD_PREP(MT_TXWI_FLAGS_MPDU_DENSITY,
+                                   sta->ht_cap.ampdu_density);
+       }
+
+       if (ieee80211_is_probe_resp(hdr->frame_control) ||
+           ieee80211_is_beacon(hdr->frame_control))
+               txwi_flags |= MT_TXWI_FLAGS_TS;
+
+       txwi->flags |= cpu_to_le16(txwi_flags);
+       txwi->len_ctl = cpu_to_le16(len);
 }
 EXPORT_SYMBOL_GPL(mt76x02_mac_write_txwi);