Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c2845d01 authored by Shanyu Zhao's avatar Shanyu Zhao Committed by Reinette Chatre
Browse files

iwlwifi: set correct AC to swq_id for aggregation



When starting an aggregation session, the swq_id is generated in function
iwl_virtual_agg_queue_num() where the first parameter is supposed to be
the Access Class, but it used the tx fifo ID instead. This means the AC
value stored in swq_id is incorrect. To test this, look at the tx_queue
file in debugfs while transmitting Best Effort flow (ac=2), it shows:
hwq 10: read=0 write=0 stop=0 swq_id=0xa9 (ac 1/hwq 10)
After this fix, it will show:
hwq 10: read=0 write=0 stop=0 swq_id=0xaa (ac 2/hwq 10)

Signed-off-by: default avatarShanyu Zhao <shanyu.zhao@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
parent cd398c31
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -83,6 +83,15 @@ static inline int get_fifo_from_ac(u8 ac)
	return ac_to_fifo[ac];
	return ac_to_fifo[ac];
}
}


static inline int get_ac_from_tid(u16 tid)
{
	if (likely(tid < ARRAY_SIZE(tid_to_ac)))
		return tid_to_ac[tid];

	/* no support for TIDs 8-15 yet */
	return -EINVAL;
}

static inline int get_fifo_from_tid(u16 tid)
static inline int get_fifo_from_tid(u16 tid)
{
{
	if (likely(tid < ARRAY_SIZE(tid_to_ac)))
	if (likely(tid < ARRAY_SIZE(tid_to_ac)))
@@ -991,7 +1000,7 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn)
	tid_data = &priv->stations[sta_id].tid[tid];
	tid_data = &priv->stations[sta_id].tid[tid];
	*ssn = SEQ_TO_SN(tid_data->seq_number);
	*ssn = SEQ_TO_SN(tid_data->seq_number);
	tid_data->agg.txq_id = txq_id;
	tid_data->agg.txq_id = txq_id;
	priv->txq[txq_id].swq_id = iwl_virtual_agg_queue_num(tx_fifo, txq_id);
	priv->txq[txq_id].swq_id = iwl_virtual_agg_queue_num(get_ac_from_tid(tid), txq_id);
	spin_unlock_irqrestore(&priv->sta_lock, flags);
	spin_unlock_irqrestore(&priv->sta_lock, flags);


	ret = priv->cfg->ops->lib->txq_agg_enable(priv, txq_id, tx_fifo,
	ret = priv->cfg->ops->lib->txq_agg_enable(priv, txq_id, tx_fifo,