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.

Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Felix Fietkau
2026-05-07 08:39:05 +00:00
parent 9a46d8d21d
commit 9e613fb007
3 changed files with 29 additions and 1 deletions
+18
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); 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 static void
mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb) 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: case MCU_EXT_EVENT_BCC_NOTIFY:
mt7915_mcu_rx_bcc_notify(dev, skb); mt7915_mcu_rx_bcc_notify(dev, skb);
break; break;
case MCU_EXT_EVENT_PS_SYNC:
mt7915_mcu_rx_ps_sync(dev, skb);
break;
default: default:
break; break;
} }
+9
View File
@@ -54,6 +54,15 @@ struct mt7915_mcu_bcc_notify {
u8 rsv; u8 rsv;
} __packed; } __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 mt7915_mcu_rdd_report {
struct mt76_connac2_mcu_rxd_hdr rxd; struct mt76_connac2_mcu_rxd_hdr rxd;
+2 -1
View File
@@ -921,7 +921,8 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
/* txwi_size = txd size + txp size */ /* txwi_size = txd size + txp size */
.txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_fw_txp), .txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_fw_txp),
.drv_flags = MT_DRV_TXWI_NO_FREE | MT_DRV_HW_MGMT_TXQ | .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_flags = SURVEY_INFO_TIME_TX |
SURVEY_INFO_TIME_RX | SURVEY_INFO_TIME_RX |
SURVEY_INFO_TIME_BSS_RX, SURVEY_INFO_TIME_BSS_RX,