Commit 9ce2f7fa authored by Felix Fietkau's avatar Felix Fietkau
Browse files

mt76: mt7615: select the correct tx queue for frames sent to the second phy



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: default avatarFelix Fietkau <nbd@nbd.name>
parent b0b5426e
Loading
Loading
Loading
Loading
+10 −3
Original line number Original line Diff line number Diff line
@@ -382,6 +382,7 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
	bool multicast = is_multicast_ether_addr(hdr->addr1);
	bool multicast = is_multicast_ether_addr(hdr->addr1);
	struct ieee80211_vif *vif = info->control.vif;
	struct ieee80211_vif *vif = info->control.vif;
	struct mt76_phy *mphy = &dev->mphy;
	struct mt76_phy *mphy = &dev->mphy;
	bool ext_phy = info->hw_queue & MT_TX_HW_QUEUE_EXT_PHY;
	int tx_count = 8;
	int tx_count = 8;
	u8 fc_type, fc_stype, p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
	u8 fc_type, fc_stype, p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
	__le16 fc = hdr->frame_control;
	__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;
		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;
		mphy = dev->mt76.phy2;


	fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
	fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
@@ -412,9 +413,15 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
			skb_get_queue_mapping(skb);
			skb_get_queue_mapping(skb);
		p_fmt = MT_TX_TYPE_CT;
		p_fmt = MT_TX_TYPE_CT;
	} else if (ieee80211_is_beacon(fc)) {
	} else if (ieee80211_is_beacon(fc)) {
		if (ext_phy)
			q_idx = MT_LMAC_BCN1;
		else
			q_idx = MT_LMAC_BCN0;
			q_idx = MT_LMAC_BCN0;
		p_fmt = MT_TX_TYPE_FW;
		p_fmt = MT_TX_TYPE_FW;
	} else {
	} else {
		if (ext_phy)
			q_idx = MT_LMAC_ALTX1;
		else
			q_idx = MT_LMAC_ALTX0;
			q_idx = MT_LMAC_ALTX0;
		p_fmt = MT_TX_TYPE_CT;
		p_fmt = MT_TX_TYPE_CT;
	}
	}
+4 −0
Original line number Original line Diff line number Diff line
@@ -126,6 +126,10 @@ enum tx_pkt_queue_idx {
	MT_LMAC_BMC0,
	MT_LMAC_BMC0,
	MT_LMAC_BCN0,
	MT_LMAC_BCN0,
	MT_LMAC_PSMP0,
	MT_LMAC_PSMP0,
	MT_LMAC_ALTX1,
	MT_LMAC_BMC1,
	MT_LMAC_BCN1,
	MT_LMAC_PSMP1,
};
};


enum tx_port_idx {
enum tx_port_idx {