]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mt76: mt7615: select the correct tx queue for frames sent to the second phy
authorFelix Fietkau <nbd@nbd.name>
Tue, 5 Nov 2019 11:55:18 +0000 (12:55 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 14 Feb 2020 09:05:59 +0000 (10:05 +0100)
Beacons and management frames need to explicitly select the alternate tx
queues in order to be sent out on the right phy

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mac.c
drivers/net/wireless/mediatek/mt76/mt7615/mac.h

index 886c54a912524aaca3de4095cd83d142989863a5..4d528aa725fda3a14fd7d4abe16447ded4dfa985 100644 (file)
@@ -382,6 +382,7 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
        bool multicast = is_multicast_ether_addr(hdr->addr1);
        struct ieee80211_vif *vif = info->control.vif;
        struct mt76_phy *mphy = &dev->mphy;
+       bool ext_phy = info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY;
        int tx_count = 8;
        u8 fc_type, fc_stype, p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
        __le16 fc = hdr->frame_control;
@@ -401,7 +402,7 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
                tx_count = msta->rate_count;
        }
 
-       if ((info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY) && dev->mt76.phy2)
+       if (ext_phy && dev->mt76.phy2)
                mphy = dev->mt76.phy2;
 
        fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
@@ -412,10 +413,16 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
                        skb_get_queue_mapping(skb);
                p_fmt = MT_TX_TYPE_CT;
        } else if (ieee80211_is_beacon(fc)) {
-               q_idx = MT_LMAC_BCN0;
+               if (ext_phy)
+                       q_idx = MT_LMAC_BCN1;
+               else
+                       q_idx = MT_LMAC_BCN0;
                p_fmt = MT_TX_TYPE_FW;
        } else {
-               q_idx = MT_LMAC_ALTX0;
+               if (ext_phy)
+                       q_idx = MT_LMAC_ALTX1;
+               else
+                       q_idx = MT_LMAC_ALTX0;
                p_fmt = MT_TX_TYPE_CT;
        }
 
index 38695d4f92e2e7174c38498d1c6fa1b423168c0a..8579b829778d48b68c4a2a711a8c9277980be2cb 100644 (file)
@@ -126,6 +126,10 @@ enum tx_pkt_queue_idx {
        MT_LMAC_BMC0,
        MT_LMAC_BCN0,
        MT_LMAC_PSMP0,
+       MT_LMAC_ALTX1,
+       MT_LMAC_BMC1,
+       MT_LMAC_BCN1,
+       MT_LMAC_PSMP1,
 };
 
 enum tx_port_idx {