54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
|
From: Felix Fietkau <nbd@nbd.name>
|
||
|
Date: Fri, 23 Feb 2018 10:01:53 +0100
|
||
|
Subject: [PATCH] mac80211: support fast-rx with incompatible PS
|
||
|
capabilities when PS is disabled
|
||
|
|
||
|
When powersave is disabled for the interface, we can do fast-rx anyway.
|
||
|
|
||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||
|
---
|
||
|
|
||
|
--- a/net/mac80211/cfg.c
|
||
|
+++ b/net/mac80211/cfg.c
|
||
|
@@ -2658,6 +2658,7 @@ static int ieee80211_set_power_mgmt(stru
|
||
|
|
||
|
ieee80211_recalc_ps(local);
|
||
|
ieee80211_recalc_ps_vif(sdata);
|
||
|
+ ieee80211_check_fast_rx_iface(sdata);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
--- a/net/mac80211/rx.c
|
||
|
+++ b/net/mac80211/rx.c
|
||
|
@@ -3741,12 +3741,7 @@ void ieee80211_check_fast_rx(struct sta_
|
||
|
/* 4-addr is harder to deal with, later maybe */
|
||
|
if (sdata->u.mgd.use_4addr)
|
||
|
goto clear;
|
||
|
- /* software powersave is a huge mess, avoid all of it */
|
||
|
- if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
|
||
|
- goto clear;
|
||
|
- if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
|
||
|
- !ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
|
||
|
- goto clear;
|
||
|
+
|
||
|
if (sta->sta.tdls) {
|
||
|
fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
|
||
|
fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
|
||
|
@@ -3758,6 +3753,16 @@ void ieee80211_check_fast_rx(struct sta_
|
||
|
fastrx.expected_ds_bits =
|
||
|
cpu_to_le16(IEEE80211_FCTL_FROMDS);
|
||
|
}
|
||
|
+
|
||
|
+ if (!sdata->u.mgd.powersave)
|
||
|
+ break;
|
||
|
+
|
||
|
+ /* software powersave is a huge mess, avoid all of it */
|
||
|
+ if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
|
||
|
+ goto clear;
|
||
|
+ if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
|
||
|
+ !ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
|
||
|
+ goto clear;
|
||
|
break;
|
||
|
case NL80211_IFTYPE_AP_VLAN:
|
||
|
case NL80211_IFTYPE_AP:
|