|
@@ -185,7 +185,13 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
|
|
ifevent->action, ifevent->ifidx, ifevent->bssidx,
|
|
ifevent->action, ifevent->ifidx, ifevent->bssidx,
|
|
ifevent->flags, ifevent->role);
|
|
ifevent->flags, ifevent->role);
|
|
|
|
|
|
- if (ifevent->flags & BRCMF_E_IF_FLAG_NOIF) {
|
|
|
|
|
|
+ /* The P2P Device interface event must not be ignored
|
|
|
|
+ * contrary to what firmware tells us. The only way to
|
|
|
|
+ * distinguish the P2P Device is by looking at the ifidx
|
|
|
|
+ * and bssidx received.
|
|
|
|
+ */
|
|
|
|
+ if (!(ifevent->ifidx == 0 && ifevent->bssidx == 1) &&
|
|
|
|
+ (ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) {
|
|
brcmf_dbg(EVENT, "event can be ignored\n");
|
|
brcmf_dbg(EVENT, "event can be ignored\n");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -210,12 +216,12 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- if (ifevent->action == BRCMF_E_IF_CHANGE)
|
|
|
|
|
|
+ if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
|
|
brcmf_fws_reset_interface(ifp);
|
|
brcmf_fws_reset_interface(ifp);
|
|
|
|
|
|
err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
|
|
err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
|
|
|
|
|
|
- if (ifevent->action == BRCMF_E_IF_DEL) {
|
|
|
|
|
|
+ if (ifp && ifevent->action == BRCMF_E_IF_DEL) {
|
|
brcmf_fws_del_interface(ifp);
|
|
brcmf_fws_del_interface(ifp);
|
|
brcmf_del_if(drvr, ifevent->bssidx);
|
|
brcmf_del_if(drvr, ifevent->bssidx);
|
|
}
|
|
}
|