@@ -165,9 +165,9 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev)
165165 sta = container_of ((void * )msta , struct ieee80211_sta ,
166166 drv_priv );
167167 for (i = 0 ; i < IEEE80211_NUM_ACS ; i ++ ) {
168- u8 q = mt76_connac_lmac_mapping (i );
169- u32 tx_cur = tx_time [q ];
170- u32 rx_cur = rx_time [q ];
168+ u8 queue = mt76_connac_lmac_mapping (i );
169+ u32 tx_cur = tx_time [queue ];
170+ u32 rx_cur = rx_time [queue ];
171171 u8 tid = ac_to_tid [i ];
172172
173173 if (!tx_cur && !rx_cur )
@@ -245,8 +245,37 @@ void mt7915_mac_enable_rtscts(struct mt7915_dev *dev,
245245 mt76_clear (dev , addr , BIT (5 ));
246246}
247247
248+ static void
249+ mt7915_wed_check_ppe (struct mt7915_dev * dev , struct mt76_queue * q ,
250+ struct mt7915_sta * msta , struct sk_buff * skb ,
251+ u32 info )
252+ {
253+ struct ieee80211_vif * vif ;
254+ struct wireless_dev * wdev ;
255+
256+ if (!msta || !msta -> vif )
257+ return ;
258+
259+ if (!(q -> flags & MT_QFLAG_WED ) ||
260+ FIELD_GET (MT_QFLAG_WED_TYPE , q -> flags ) != MT76_WED_Q_RX )
261+ return ;
262+
263+ if (!(info & MT_DMA_INFO_PPE_VLD ))
264+ return ;
265+
266+ vif = container_of ((void * )msta -> vif , struct ieee80211_vif ,
267+ drv_priv );
268+ wdev = ieee80211_vif_to_wdev (vif );
269+ skb -> dev = wdev -> netdev ;
270+
271+ mtk_wed_device_ppe_check (& dev -> mt76 .mmio .wed , skb ,
272+ FIELD_GET (MT_DMA_PPE_CPU_REASON , info ),
273+ FIELD_GET (MT_DMA_PPE_ENTRY , info ));
274+ }
275+
248276static int
249- mt7915_mac_fill_rx (struct mt7915_dev * dev , struct sk_buff * skb )
277+ mt7915_mac_fill_rx (struct mt7915_dev * dev , struct sk_buff * skb ,
278+ enum mt76_rxq_id q , u32 * info )
250279{
251280 struct mt76_rx_status * status = (struct mt76_rx_status * )skb -> cb ;
252281 struct mt76_phy * mphy = & dev -> mt76 .phy ;
@@ -513,6 +542,8 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
513542 }
514543 } else {
515544 status -> flag |= RX_FLAG_8023 ;
545+ mt7915_wed_check_ppe (dev , & dev -> mt76 .q_rx [q ], msta , skb ,
546+ * info );
516547 }
517548
518549 if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status -> flag & RX_FLAG_8023 ))
@@ -1096,7 +1127,7 @@ bool mt7915_rx_check(struct mt76_dev *mdev, void *data, int len)
10961127}
10971128
10981129void mt7915_queue_rx_skb (struct mt76_dev * mdev , enum mt76_rxq_id q ,
1099- struct sk_buff * skb )
1130+ struct sk_buff * skb , u32 * info )
11001131{
11011132 struct mt7915_dev * dev = container_of (mdev , struct mt7915_dev , mt76 );
11021133 __le32 * rxd = (__le32 * )skb -> data ;
@@ -1130,7 +1161,7 @@ void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
11301161 dev_kfree_skb (skb );
11311162 break ;
11321163 case PKT_TYPE_NORMAL :
1133- if (!mt7915_mac_fill_rx (dev , skb )) {
1164+ if (!mt7915_mac_fill_rx (dev , skb , q , info )) {
11341165 mt76_rx (& dev -> mt76 , q , skb );
11351166 return ;
11361167 }
0 commit comments