brcmfmac: ignore IF event if it is a add for ifidx 0
Firmware fires IF event to add the primary interface but that is already created in the driver. Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
b6f06f6e31
commit
b522dd8071
@@ -696,12 +696,17 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, int ifidx, s32 bssidx,
|
|||||||
* in case we missed the BRCMF_E_IF_DEL event.
|
* in case we missed the BRCMF_E_IF_DEL event.
|
||||||
*/
|
*/
|
||||||
if (ifp) {
|
if (ifp) {
|
||||||
brcmf_dbg(ERROR, "ERROR: netdev:%s already exists, try free & unregister\n",
|
brcmf_dbg(ERROR, "ERROR: netdev:%s already exists\n",
|
||||||
ifp->ndev->name);
|
ifp->ndev->name);
|
||||||
netif_stop_queue(ifp->ndev);
|
if (ifidx) {
|
||||||
unregister_netdev(ifp->ndev);
|
netif_stop_queue(ifp->ndev);
|
||||||
free_netdev(ifp->ndev);
|
unregister_netdev(ifp->ndev);
|
||||||
drvr->iflist[ifidx] = NULL;
|
free_netdev(ifp->ndev);
|
||||||
|
drvr->iflist[ifidx] = NULL;
|
||||||
|
} else {
|
||||||
|
brcmf_dbg(ERROR, "ignore IF event\n");
|
||||||
|
return ERR_PTR(-EINVAL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate netdev, including space for private structure */
|
/* Allocate netdev, including space for private structure */
|
||||||
|
|||||||
@@ -402,7 +402,8 @@ int brcmf_fweh_register(struct brcmf_pub *drvr, enum brcmf_fweh_event_code code,
|
|||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
}
|
}
|
||||||
drvr->fweh.evt_handler[code] = handler;
|
drvr->fweh.evt_handler[code] = handler;
|
||||||
brcmf_dbg(TRACE, "event handler registered for code %d\n", code);
|
brcmf_dbg(TRACE, "event handler registered for %s\n",
|
||||||
|
brcmf_fweh_event_name(code));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,7 +416,8 @@ int brcmf_fweh_register(struct brcmf_pub *drvr, enum brcmf_fweh_event_code code,
|
|||||||
void brcmf_fweh_unregister(struct brcmf_pub *drvr,
|
void brcmf_fweh_unregister(struct brcmf_pub *drvr,
|
||||||
enum brcmf_fweh_event_code code)
|
enum brcmf_fweh_event_code code)
|
||||||
{
|
{
|
||||||
brcmf_dbg(TRACE, "event handler cleared for code %d\n", code);
|
brcmf_dbg(TRACE, "event handler cleared for %s\n",
|
||||||
|
brcmf_fweh_event_name(code));
|
||||||
drvr->fweh.evt_handler[code] = NULL;
|
drvr->fweh.evt_handler[code] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,6 +440,7 @@ int brcmf_fweh_activate_events(struct brcmf_if *ifp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* want to handle IF event as well */
|
/* want to handle IF event as well */
|
||||||
|
brcmf_dbg(EVENT, "enable event IF\n");
|
||||||
setbit(eventmask, BRCMF_E_IF);
|
setbit(eventmask, BRCMF_E_IF);
|
||||||
|
|
||||||
err = brcmf_fil_iovar_data_set(ifp, "event_msgs",
|
err = brcmf_fil_iovar_data_set(ifp, "event_msgs",
|
||||||
|
|||||||
Reference in New Issue
Block a user