Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 369684
b: refs/heads/master
c: a786b38
h: refs/heads/master
v: v3
  • Loading branch information
Arend van Spriel authored and John W. Linville committed Apr 23, 2013
1 parent bbea4dc commit 64a5d85
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9a83f1ec670fa574ffbfa9fb1f3fdaa9c6be5974
refs/heads/master: a786b38d542f62e19ffa8adbcbfc82065cd13a11
5 changes: 4 additions & 1 deletion trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -899,7 +899,10 @@ int brcmf_bus_start(struct device *dev)
goto fail;

drvr->fw_signals = true;
(void)brcmf_fws_init(drvr);
ret = brcmf_fws_init(drvr);
if (ret < 0)
goto fail;

brcmf_fws_add_interface(ifp);

drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev);
Expand Down
28 changes: 20 additions & 8 deletions trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1897,16 +1897,20 @@ int brcmf_fws_init(struct brcmf_pub *drvr)
BRCMF_FWS_FLAGS_CREDIT_STATUS_SIGNALS |
BRCMF_FWS_FLAGS_HOST_PROPTXSTATUS_ACTIVE;

rc = brcmf_fil_iovar_int_set(drvr->iflist[0], "tlv", tlv);
rc = brcmf_fweh_register(drvr, BRCMF_E_FIFO_CREDIT_MAP,
brcmf_fws_notify_credit_map);
if (rc < 0) {
brcmf_err("failed to set bdcv2 tlv signaling\n");
brcmf_err("register credit map handler failed\n");
goto fail;
}

if (brcmf_fweh_register(drvr, BRCMF_E_FIFO_CREDIT_MAP,
brcmf_fws_notify_credit_map)) {
brcmf_err("register credit map handler failed\n");
goto fail;
/* setting the iovar may fail if feature is unsupported
* so leave the rc as is so driver initialization can
* continue.
*/
if (brcmf_fil_iovar_int_set(drvr->iflist[0], "tlv", tlv)) {
brcmf_err("failed to set bdcv2 tlv signaling\n");
goto fail_event;
}

brcmf_fws_hanger_init(&drvr->fws->hanger);
Expand All @@ -1922,9 +1926,9 @@ int brcmf_fws_init(struct brcmf_pub *drvr)
drvr->fw_signals ? "enabled" : "disabled", tlv);
return 0;

fail_event:
brcmf_fweh_unregister(drvr, BRCMF_E_FIFO_CREDIT_MAP);
fail:
/* disable flow control entirely */
drvr->fw_signals = false;
brcmf_fws_deinit(drvr);
return rc;
}
Expand All @@ -1937,6 +1941,14 @@ void brcmf_fws_deinit(struct brcmf_pub *drvr)
if (!fws)
return;

/* disable firmware signalling entirely
* to avoid using the workqueue.
*/
drvr->fw_signals = false;

if (drvr->fws->fws_wq)
destroy_workqueue(drvr->fws->fws_wq);

/* cleanup */
brcmf_fws_lock(drvr, flags);
brcmf_fws_cleanup(fws, -1);
Expand Down

0 comments on commit 64a5d85

Please sign in to comment.