wcn36xx: Treat repeated BMPS entry fail as connection loss
On an open AP when you pull the plug on the AP, if we are not already in BMPS mode then the firmware will not generate a disconnection event. Instead we need to monitor for failure to enter BMPS and treat a string of failures as connection loss. Secure AP connections don't appear to demonstrate this behavior so the work-around is limited to open APs only. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20211022140447.2846248-2-bryan.odonoghue@linaro.org
This commit is contained in:
parent
a224b47ab3
commit
2f1ae32f73
2 changed files with 10 additions and 0 deletions
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
#include "wcn36xx.h"
|
||||
|
||||
#define WCN36XX_BMPS_FAIL_THREHOLD 3
|
||||
|
||||
int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
|
|
@ -31,6 +33,7 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
|
|||
if (!ret) {
|
||||
wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n");
|
||||
vif_priv->pw_state = WCN36XX_BMPS;
|
||||
vif_priv->bmps_fail_ct = 0;
|
||||
vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
|
||||
} else {
|
||||
/*
|
||||
|
|
@ -39,6 +42,11 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
|
|||
* received just after auth complete
|
||||
*/
|
||||
wcn36xx_err("Can not enter BMPS!\n");
|
||||
|
||||
if (vif_priv->bmps_fail_ct++ == WCN36XX_BMPS_FAIL_THREHOLD) {
|
||||
ieee80211_connection_loss(vif);
|
||||
vif_priv->bmps_fail_ct = 0;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -151,6 +151,8 @@ struct wcn36xx_vif {
|
|||
} rekey_data;
|
||||
|
||||
struct list_head sta_list;
|
||||
|
||||
int bmps_fail_ct;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue