@@ -165,9 +165,9 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev)
165
165
sta = container_of ((void * )msta , struct ieee80211_sta ,
166
166
drv_priv );
167
167
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 ];
171
171
u8 tid = ac_to_tid [i ];
172
172
173
173
if (!tx_cur && !rx_cur )
@@ -245,8 +245,37 @@ void mt7915_mac_enable_rtscts(struct mt7915_dev *dev,
245
245
mt76_clear (dev , addr , BIT (5 ));
246
246
}
247
247
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
+
248
276
static 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 )
250
279
{
251
280
struct mt76_rx_status * status = (struct mt76_rx_status * )skb -> cb ;
252
281
struct mt76_phy * mphy = & dev -> mt76 .phy ;
@@ -513,6 +542,8 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
513
542
}
514
543
} else {
515
544
status -> flag |= RX_FLAG_8023 ;
545
+ mt7915_wed_check_ppe (dev , & dev -> mt76 .q_rx [q ], msta , skb ,
546
+ * info );
516
547
}
517
548
518
549
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)
1096
1127
}
1097
1128
1098
1129
void 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 )
1100
1131
{
1101
1132
struct mt7915_dev * dev = container_of (mdev , struct mt7915_dev , mt76 );
1102
1133
__le32 * rxd = (__le32 * )skb -> data ;
@@ -1130,7 +1161,7 @@ void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
1130
1161
dev_kfree_skb (skb );
1131
1162
break ;
1132
1163
case PKT_TYPE_NORMAL :
1133
- if (!mt7915_mac_fill_rx (dev , skb )) {
1164
+ if (!mt7915_mac_fill_rx (dev , skb , q , info )) {
1134
1165
mt76_rx (& dev -> mt76 , q , skb );
1135
1166
return ;
1136
1167
}
0 commit comments