提交 b522dd80 编写于 作者: A Arend van Spriel 提交者: John W. Linville

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: NPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: NHante Meuleman <meuleman@broadcom.com>
Signed-off-by: NArend van Spriel <arend@broadcom.com>
Signed-off-by: NFranky Lin <frankyl@broadcom.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 b6f06f6e
...@@ -696,12 +696,17 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, int ifidx, s32 bssidx, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册