Skip to content

Commit dc930cf

Browse files
committed
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>
1 parent a547b41 commit dc930cf

3 files changed

Lines changed: 29 additions & 1 deletion

File tree

drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,21 @@ mt7915_mcu_rx_bcc_notify(struct mt7915_dev *dev, struct sk_buff *skb)
402402
mt7915_mcu_cca_finish, mphy->hw);
403403
}
404404

405+
static void
406+
mt7915_mcu_rx_ps_sync(struct mt7915_dev *dev, struct sk_buff *skb)
407+
{
408+
struct mt7915_mcu_ps_notify *p = (void *)skb->data;
409+
struct mt76_wcid *wcid;
410+
u16 wcid_idx;
411+
412+
wcid_idx = p->wtbl_lower | (p->wtbl_higher << 8);
413+
wcid = mt76_wcid_ptr(dev, wcid_idx);
414+
if (!wcid || !wcid_to_sta(wcid))
415+
return;
416+
417+
mt76_sta_ps_transition(&dev->mt76, wcid, !!p->ps_bit);
418+
}
419+
405420
static void
406421
mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
407422
{
@@ -424,6 +439,9 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
424439
case MCU_EXT_EVENT_BCC_NOTIFY:
425440
mt7915_mcu_rx_bcc_notify(dev, skb);
426441
break;
442+
case MCU_EXT_EVENT_PS_SYNC:
443+
mt7915_mcu_rx_ps_sync(dev, skb);
444+
break;
427445
default:
428446
break;
429447
}

drivers/net/wireless/mediatek/mt76/mt7915/mcu.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,15 @@ struct mt7915_mcu_bcc_notify {
5454
u8 rsv;
5555
} __packed;
5656

57+
struct mt7915_mcu_ps_notify {
58+
struct mt76_connac2_mcu_rxd_hdr rxd;
59+
60+
u8 wtbl_lower;
61+
u8 ps_bit;
62+
u8 wtbl_higher;
63+
u8 rsv;
64+
} __packed;
65+
5766
struct mt7915_mcu_rdd_report {
5867
struct mt76_connac2_mcu_rxd_hdr rxd;
5968

drivers/net/wireless/mediatek/mt76/mt7915/mmio.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,8 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
921921
/* txwi_size = txd size + txp size */
922922
.txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_fw_txp),
923923
.drv_flags = MT_DRV_TXWI_NO_FREE | MT_DRV_HW_MGMT_TXQ |
924-
MT_DRV_AMSDU_OFFLOAD,
924+
MT_DRV_AMSDU_OFFLOAD |
925+
MT_DRV_HW_PS_BUFFERING,
925926
.survey_flags = SURVEY_INFO_TIME_TX |
926927
SURVEY_INFO_TIME_RX |
927928
SURVEY_INFO_TIME_BSS_RX,

0 commit comments

Comments
 (0)