wifi: mt76: mt7915: handle MCU PS sync events

Enable MT_DRV_HW_PS_BUFFERING and handle MCU_EXT_EVENT_PS_SYNC to
track station power-save state via firmware notifications.

Link: https://patch.msgid.link/20260801145334.1166751-2-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau
2026-08-01 14:53:26 +00:00
parent a547b414bf
commit dc930cf883
3 changed files with 29 additions and 1 deletions

View File

@@ -402,6 +402,21 @@ mt7915_mcu_rx_bcc_notify(struct mt7915_dev *dev, struct sk_buff *skb)
mt7915_mcu_cca_finish, mphy->hw);
}
static void
mt7915_mcu_rx_ps_sync(struct mt7915_dev *dev, struct sk_buff *skb)
{
struct mt7915_mcu_ps_notify *p = (void *)skb->data;
struct mt76_wcid *wcid;
u16 wcid_idx;
wcid_idx = p->wtbl_lower | (p->wtbl_higher << 8);
wcid = mt76_wcid_ptr(dev, wcid_idx);
if (!wcid || !wcid_to_sta(wcid))
return;
mt76_sta_ps_transition(&dev->mt76, wcid, !!p->ps_bit);
}
static void
mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
{
@@ -424,6 +439,9 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
case MCU_EXT_EVENT_BCC_NOTIFY:
mt7915_mcu_rx_bcc_notify(dev, skb);
break;
case MCU_EXT_EVENT_PS_SYNC:
mt7915_mcu_rx_ps_sync(dev, skb);
break;
default:
break;
}

View File

@@ -54,6 +54,15 @@ struct mt7915_mcu_bcc_notify {
u8 rsv;
} __packed;
struct mt7915_mcu_ps_notify {
struct mt76_connac2_mcu_rxd_hdr rxd;
u8 wtbl_lower;
u8 ps_bit;
u8 wtbl_higher;
u8 rsv;
} __packed;
struct mt7915_mcu_rdd_report {
struct mt76_connac2_mcu_rxd_hdr rxd;

View File

@@ -921,7 +921,8 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
/* txwi_size = txd size + txp size */
.txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_fw_txp),
.drv_flags = MT_DRV_TXWI_NO_FREE | MT_DRV_HW_MGMT_TXQ |
MT_DRV_AMSDU_OFFLOAD,
MT_DRV_AMSDU_OFFLOAD |
MT_DRV_HW_PS_BUFFERING,
.survey_flags = SURVEY_INFO_TIME_TX |
SURVEY_INFO_TIME_RX |
SURVEY_INFO_TIME_BSS_RX,