Skip to content

Commit

Permalink
wifi: mt76: mt7603: set edca params after slot time change event
Browse files Browse the repository at this point in the history
  • Loading branch information
morse-sophronia committed Dec 19, 2024
1 parent c246fa5 commit 086b306
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 33 deletions.
82 changes: 49 additions & 33 deletions mt7603/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -281,12 +281,54 @@ mt7603_configure_filter(struct ieee80211_hw *hw, unsigned int changed_flags,
mt76_wr(dev, MT_WF_RFCR, dev->rxfilter);
}

static int mt7603_conf_edca_params(struct ieee80211_hw *hw,
u16 queue, const struct ieee80211_tx_queue_params *params)
{
struct mt7603_dev *dev = hw->priv;
u16 cw_min = (1 << 5) - 1;
u16 cw_max = (1 << 10) - 1;
u32 val;

queue = dev->mphy.q_tx[queue]->hw_idx;

if (params->cw_min)
cw_min = params->cw_min;
if (params->cw_max)
cw_max = params->cw_max;

mt7603_mac_stop(dev);

val = mt76_rr(dev, MT_WMM_TXOP(queue));
val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(queue));
val |= params->txop << MT_WMM_TXOP_SHIFT(queue);
mt76_wr(dev, MT_WMM_TXOP(queue), val);

val = mt76_rr(dev, MT_WMM_AIFSN);
val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(queue));
val |= params->aifs << MT_WMM_AIFSN_SHIFT(queue);
mt76_wr(dev, MT_WMM_AIFSN, val);

val = mt76_rr(dev, MT_WMM_CWMIN);
val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(queue));
val |= cw_min << MT_WMM_CWMIN_SHIFT(queue);
mt76_wr(dev, MT_WMM_CWMIN, val);

val = mt76_rr(dev, MT_WMM_CWMAX(queue));
val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(queue));
val |= cw_max << MT_WMM_CWMAX_SHIFT(queue);
mt76_wr(dev, MT_WMM_CWMAX(queue), val);

mt7603_mac_start(dev);
return 0;
}

static void
mt7603_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info, u64 changed)
{
struct mt7603_dev *dev = hw->priv;
struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
u16 ac;

mutex_lock(&dev->mt76.mutex);

Expand All @@ -310,6 +352,10 @@ mt7603_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
dev->slottime = slottime;
mt7603_mac_set_timing(dev);
}

for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
mt7603_conf_edca_params(hw, ac, &mvif->tx_params[ac]);
}
}

if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON_INT)) {
Expand Down Expand Up @@ -526,41 +572,11 @@ mt7603_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
const struct ieee80211_tx_queue_params *params)
{
struct mt7603_dev *dev = hw->priv;
u16 cw_min = (1 << 5) - 1;
u16 cw_max = (1 << 10) - 1;
u32 val;

queue = dev->mphy.q_tx[queue]->hw_idx;

if (params->cw_min)
cw_min = params->cw_min;
if (params->cw_max)
cw_max = params->cw_max;
struct mt7603_vif *mvif = (struct mt7603_vif*)vif->drv_priv;
mvif->tx_params[queue] = *params;

mutex_lock(&dev->mt76.mutex);
mt7603_mac_stop(dev);

val = mt76_rr(dev, MT_WMM_TXOP(queue));
val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(queue));
val |= params->txop << MT_WMM_TXOP_SHIFT(queue);
mt76_wr(dev, MT_WMM_TXOP(queue), val);

val = mt76_rr(dev, MT_WMM_AIFSN);
val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(queue));
val |= params->aifs << MT_WMM_AIFSN_SHIFT(queue);
mt76_wr(dev, MT_WMM_AIFSN, val);

val = mt76_rr(dev, MT_WMM_CWMIN);
val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(queue));
val |= cw_min << MT_WMM_CWMIN_SHIFT(queue);
mt76_wr(dev, MT_WMM_CWMIN, val);

val = mt76_rr(dev, MT_WMM_CWMAX(queue));
val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(queue));
val |= cw_max << MT_WMM_CWMAX_SHIFT(queue);
mt76_wr(dev, MT_WMM_CWMAX(queue), val);

mt7603_mac_start(dev);
mt7603_conf_edca_params(hw, queue, params);
mutex_unlock(&dev->mt76.mutex);

return 0;
Expand Down
1 change: 1 addition & 0 deletions mt7603/mt7603.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ struct mt7603_vif {
struct mt7603_sta sta; /* must be first */

u8 idx;
struct ieee80211_tx_queue_params tx_params[IEEE80211_NUM_ACS];
};

enum mt7603_reset_cause {
Expand Down

0 comments on commit 086b306

Please sign in to comment.