mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user