Commit b490b1df authored by Stanislaw Gruszka's avatar Stanislaw Gruszka Committed by Felix Fietkau
Browse files

mt76: unify load_tx_status



Unify load/fetch tx status from mt76x0 and mt76x2

Signed-off-by: default avatarStanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 5944cd02
Loading
Loading
Loading
Loading
+0 −21
Original line number Diff line number Diff line
@@ -116,27 +116,6 @@ mt76_mac_fill_tx_status(struct mt76x0_dev *dev, struct ieee80211_tx_info *info,
		info->flags |= IEEE80211_TX_STAT_ACK;
}

struct mt76x02_tx_status mt76x0_mac_fetch_tx_status(struct mt76x0_dev *dev)
{
	struct mt76x02_tx_status stat = {};
	u32 stat2, stat1;

	stat2 = mt76_rr(dev, MT_TX_STAT_FIFO_EXT);
	stat1 = mt76_rr(dev, MT_TX_STAT_FIFO);

	stat.valid = !!(stat1 & MT_TX_STAT_FIFO_VALID);
	stat.success = !!(stat1 & MT_TX_STAT_FIFO_SUCCESS);
	stat.aggr = !!(stat1 & MT_TX_STAT_FIFO_AGGR);
	stat.ack_req = !!(stat1 & MT_TX_STAT_FIFO_ACKREQ);
	stat.wcid = FIELD_GET(MT_TX_STAT_FIFO_WCID, stat1);
	stat.rate = FIELD_GET(MT_TX_STAT_FIFO_RATE, stat1);

	stat.retry = FIELD_GET(MT_TX_STAT_FIFO_EXT_RETRY, stat2);
	stat.pktid = FIELD_GET(MT_TX_STAT_FIFO_EXT_PKTID, stat2);

	return stat;
}

void mt76x0_send_tx_status(struct mt76x0_dev *dev, struct mt76x02_tx_status *stat, u8 *update)
{
	struct ieee80211_tx_info info = {};
+1 −2
Original line number Diff line number Diff line
@@ -190,8 +190,7 @@ void mt76x0_tx_stat(struct work_struct *work)
	u8 update = 1;

	while (!test_bit(MT76_REMOVED, &dev->mt76.state)) {
		stat = mt76x0_mac_fetch_tx_status(dev);
		if (!stat.valid)
		if (!mt76x02_mac_load_tx_status(&dev->mt76, &stat))
			break;

		mt76x0_send_tx_status(dev, &stat, &update);
+25 −0
Original line number Diff line number Diff line
@@ -216,3 +216,28 @@ void mt76x02_mac_wcid_set_rate(struct mt76_dev *dev, struct mt76_wcid *wcid,
	wcid->tx_rate_set = true;
	spin_unlock_bh(&dev->lock);
}

bool mt76x02_mac_load_tx_status(struct mt76_dev *dev,
			       struct mt76x02_tx_status *stat)
{
	u32 stat1, stat2;

	stat2 = __mt76_rr(dev, MT_TX_STAT_FIFO_EXT);
	stat1 = __mt76_rr(dev, MT_TX_STAT_FIFO);

	stat->valid = !!(stat1 & MT_TX_STAT_FIFO_VALID);
	if (!stat->valid)
		return false;

	stat->success = !!(stat1 & MT_TX_STAT_FIFO_SUCCESS);
	stat->aggr = !!(stat1 & MT_TX_STAT_FIFO_AGGR);
	stat->ack_req = !!(stat1 & MT_TX_STAT_FIFO_ACKREQ);
	stat->wcid = FIELD_GET(MT_TX_STAT_FIFO_WCID, stat1);
	stat->rate = FIELD_GET(MT_TX_STAT_FIFO_RATE, stat1);

	stat->retry = FIELD_GET(MT_TX_STAT_FIFO_EXT_RETRY, stat2);
	stat->pktid = FIELD_GET(MT_TX_STAT_FIFO_EXT_PKTID, stat2);

	return true;
}
EXPORT_SYMBOL_GPL(mt76x02_mac_load_tx_status);
+2 −0
Original line number Diff line number Diff line
@@ -195,4 +195,6 @@ void mt76x02_mac_wcid_set_rate(struct mt76_dev *dev, struct mt76_wcid *wcid,
__le16
mt76x02_mac_tx_rate_val(struct mt76_dev *dev,
		       const struct ieee80211_tx_rate *rate, u8 *nss_val);
bool mt76x02_mac_load_tx_status(struct mt76_dev *dev,
			       struct mt76x02_tx_status *stat);
#endif
+0 −2
Original line number Diff line number Diff line
@@ -241,8 +241,6 @@ void mt76x2_tx_set_txpwr_auto(struct mt76x2_dev *dev, s8 txpwr);

int mt76x2_insert_hdr_pad(struct sk_buff *skb);

bool mt76x2_mac_load_tx_status(struct mt76x2_dev *dev,
			       struct mt76x02_tx_status *stat);
void mt76x2_send_tx_status(struct mt76x2_dev *dev,
			   struct mt76x02_tx_status *stat, u8 *update);
void mt76x2_reset_wlan(struct mt76x2_dev *dev, bool enable);
Loading