mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
mt76: mt7615: fix hw queue mapping
mt7622/mt7663 chipsets rely on a fixed reverse queue map order respect to mac80211 one: - q(0): IEEE80211_AC_BK - q(1): IEEE80211_AC_BE - q(2): IEEE80211_AC_VI - q(3): IEEE80211_AC_VO Fixes:cdad487405
("mt76: mt7615: add dma and tx queue initialization for MT7622") Fixes:f40ac0f3d3
("mt76: mt7615: introduce mt7663e support") Co-developed-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Sean Wang <sean.wang@mediatek.com> Co-developed-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
d941f47caa
commit
a07292ee14
@ -36,10 +36,10 @@ static int
|
|||||||
mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
|
mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
|
||||||
{
|
{
|
||||||
static const u8 wmm_queue_map[] = {
|
static const u8 wmm_queue_map[] = {
|
||||||
MT7622_TXQ_AC0,
|
[IEEE80211_AC_BK] = MT7622_TXQ_AC0,
|
||||||
MT7622_TXQ_AC1,
|
[IEEE80211_AC_BE] = MT7622_TXQ_AC1,
|
||||||
MT7622_TXQ_AC2,
|
[IEEE80211_AC_VI] = MT7622_TXQ_AC2,
|
||||||
MT7622_TXQ_AC3,
|
[IEEE80211_AC_VO] = MT7622_TXQ_AC3,
|
||||||
};
|
};
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
@ -528,7 +528,7 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
|
|||||||
|
|
||||||
if (ieee80211_is_data(fc) || ieee80211_is_bufferable_mmpdu(fc)) {
|
if (ieee80211_is_data(fc) || ieee80211_is_bufferable_mmpdu(fc)) {
|
||||||
q_idx = wmm_idx * MT7615_MAX_WMM_SETS +
|
q_idx = wmm_idx * MT7615_MAX_WMM_SETS +
|
||||||
skb_get_queue_mapping(skb);
|
mt7615_lmac_mapping(dev, skb_get_queue_mapping(skb));
|
||||||
p_fmt = is_usb ? MT_TX_TYPE_SF : MT_TX_TYPE_CT;
|
p_fmt = is_usb ? MT_TX_TYPE_SF : MT_TX_TYPE_CT;
|
||||||
} else if (beacon) {
|
} else if (beacon) {
|
||||||
if (ext_phy)
|
if (ext_phy)
|
||||||
|
@ -124,21 +124,6 @@ enum tx_pkt_type {
|
|||||||
MT_TX_TYPE_FW,
|
MT_TX_TYPE_FW,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum tx_pkt_queue_idx {
|
|
||||||
MT_LMAC_AC00,
|
|
||||||
MT_LMAC_AC01,
|
|
||||||
MT_LMAC_AC02,
|
|
||||||
MT_LMAC_AC03,
|
|
||||||
MT_LMAC_ALTX0 = 0x10,
|
|
||||||
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 {
|
enum tx_port_idx {
|
||||||
MT_TX_PORT_IDX_LMAC,
|
MT_TX_PORT_IDX_LMAC,
|
||||||
MT_TX_PORT_IDX_MCU
|
MT_TX_PORT_IDX_MCU
|
||||||
|
@ -397,6 +397,7 @@ mt7615_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
|
|||||||
struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
|
struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
|
||||||
struct mt7615_dev *dev = mt7615_hw_dev(hw);
|
struct mt7615_dev *dev = mt7615_hw_dev(hw);
|
||||||
|
|
||||||
|
queue = mt7615_lmac_mapping(dev, queue);
|
||||||
queue += mvif->wmm_idx * MT7615_MAX_WMM_SETS;
|
queue += mvif->wmm_idx * MT7615_MAX_WMM_SETS;
|
||||||
|
|
||||||
return mt7615_mcu_set_wmm(dev, queue, params);
|
return mt7615_mcu_set_wmm(dev, queue, params);
|
||||||
|
@ -282,6 +282,21 @@ struct mt7615_dev {
|
|||||||
struct list_head wd_head;
|
struct list_head wd_head;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum tx_pkt_queue_idx {
|
||||||
|
MT_LMAC_AC00,
|
||||||
|
MT_LMAC_AC01,
|
||||||
|
MT_LMAC_AC02,
|
||||||
|
MT_LMAC_AC03,
|
||||||
|
MT_LMAC_ALTX0 = 0x10,
|
||||||
|
MT_LMAC_BMC0,
|
||||||
|
MT_LMAC_BCN0,
|
||||||
|
MT_LMAC_PSMP0,
|
||||||
|
MT_LMAC_ALTX1,
|
||||||
|
MT_LMAC_BMC1,
|
||||||
|
MT_LMAC_BCN1,
|
||||||
|
MT_LMAC_PSMP1,
|
||||||
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
HW_BSSID_0 = 0x0,
|
HW_BSSID_0 = 0x0,
|
||||||
HW_BSSID_1,
|
HW_BSSID_1,
|
||||||
@ -447,6 +462,21 @@ static inline u16 mt7615_wtbl_size(struct mt7615_dev *dev)
|
|||||||
return MT7615_WTBL_SIZE;
|
return MT7615_WTBL_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline u8 mt7615_lmac_mapping(struct mt7615_dev *dev, u8 ac)
|
||||||
|
{
|
||||||
|
static const u8 lmac_queue_map[] = {
|
||||||
|
[IEEE80211_AC_BK] = MT_LMAC_AC00,
|
||||||
|
[IEEE80211_AC_BE] = MT_LMAC_AC01,
|
||||||
|
[IEEE80211_AC_VI] = MT_LMAC_AC02,
|
||||||
|
[IEEE80211_AC_VO] = MT_LMAC_AC03,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (WARN_ON_ONCE(ac >= ARRAY_SIZE(lmac_queue_map)))
|
||||||
|
return MT_LMAC_AC01; /* BE */
|
||||||
|
|
||||||
|
return lmac_queue_map[ac];
|
||||||
|
}
|
||||||
|
|
||||||
void mt7615_dma_reset(struct mt7615_dev *dev);
|
void mt7615_dma_reset(struct mt7615_dev *dev);
|
||||||
void mt7615_scan_work(struct work_struct *work);
|
void mt7615_scan_work(struct work_struct *work);
|
||||||
void mt7615_roc_work(struct work_struct *work);
|
void mt7615_roc_work(struct work_struct *work);
|
||||||
|
@ -1010,17 +1010,18 @@ static void mt76u_tx_kick(struct mt76_dev *dev, struct mt76_queue *q)
|
|||||||
static u8 mt76u_ac_to_hwq(struct mt76_dev *dev, u8 ac)
|
static u8 mt76u_ac_to_hwq(struct mt76_dev *dev, u8 ac)
|
||||||
{
|
{
|
||||||
if (mt76_chip(dev) == 0x7663) {
|
if (mt76_chip(dev) == 0x7663) {
|
||||||
static const u8 wmm_queue_map[] = {
|
static const u8 lmac_queue_map[] = {
|
||||||
[IEEE80211_AC_VO] = 0,
|
/* ac to lmac mapping */
|
||||||
[IEEE80211_AC_VI] = 1,
|
[IEEE80211_AC_BK] = 0,
|
||||||
[IEEE80211_AC_BE] = 2,
|
[IEEE80211_AC_BE] = 1,
|
||||||
[IEEE80211_AC_BK] = 4,
|
[IEEE80211_AC_VI] = 2,
|
||||||
|
[IEEE80211_AC_VO] = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (WARN_ON(ac >= ARRAY_SIZE(wmm_queue_map)))
|
if (WARN_ON(ac >= ARRAY_SIZE(lmac_queue_map)))
|
||||||
return 2; /* BE */
|
return 1; /* BE */
|
||||||
|
|
||||||
return wmm_queue_map[ac];
|
return lmac_queue_map[ac];
|
||||||
}
|
}
|
||||||
|
|
||||||
return mt76_ac_to_hwq(ac);
|
return mt76_ac_to_hwq(ac);
|
||||||
|
Loading…
Reference in New Issue
Block a user