Commit 8efe387c authored by Shayne Chen's avatar Shayne Chen Committed by Felix Fietkau
Browse files

mt76: mt7915: clean hw queue before starting new testmode tx



Add a testmode mcu command to clean up hw tx queue before a new
testmode tx starts.

Signed-off-by: default avatarShayne Chen <shayne.chen@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent c46df37f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ enum {
	MCU_ATE_SET_TRX = 0x1,
	MCU_ATE_SET_FREQ_OFFSET = 0xa,
	MCU_ATE_SET_SLOT_TIME = 0x13,
	MCU_ATE_CLEAN_TXQUEUE = 0x1c,
};

struct mt7915_mcu_rxd {
+16 −0
Original line number Diff line number Diff line
@@ -132,6 +132,21 @@ mt7915_tm_set_trx(struct mt7915_phy *phy, int type, bool en)
				 sizeof(req), false);
}

static int
mt7915_tm_clean_hwq(struct mt7915_phy *phy, u8 wcid)
{
	struct mt7915_dev *dev = phy->dev;
	struct mt7915_tm_cmd req = {
		.testmode_en = 1,
		.param_idx = MCU_ATE_CLEAN_TXQUEUE,
		.param.clean.wcid = wcid,
		.param.clean.band = phy != &dev->phy,
	};

	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_ATE_CTRL, &req,
				 sizeof(req), false);
}

static int
mt7915_tm_set_slot_time(struct mt7915_phy *phy, u8 slot_time, u8 sifs)
{
@@ -408,6 +423,7 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
	u32 ipg = td->tx_ipg;

	mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, false);
	mt7915_tm_clean_hwq(phy, dev->mt76.global_wcid.idx);

	if (en) {
		mutex_unlock(&dev->mt76.mutex);
+8 −0
Original line number Diff line number Diff line
@@ -26,6 +26,13 @@ struct mt7915_tm_slot_time {
	u8 _rsv1[5];
};

struct mt7915_tm_clean_txq {
	bool sta_pause;
	u8 wcid;	/* 256 sta */
	u8 band;
	u8 rsv;
};

struct mt7915_tm_cmd {
	u8 testmode_en;
	u8 param_idx;
@@ -35,6 +42,7 @@ struct mt7915_tm_cmd {
		struct mt7915_tm_trx trx;
		struct mt7915_tm_freq_offset freq;
		struct mt7915_tm_slot_time slot;
		struct mt7915_tm_clean_txq clean;
		u8 test[72];
	} param;
} __packed;