diff options
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index a08db02537fc..3ba9e1049f3b 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -248,9 +248,27 @@ done: | |||
248 | return NETDEV_TX_OK; | 248 | return NETDEV_TX_OK; |
249 | } | 249 | } |
250 | 250 | ||
251 | void brcmf_txflowblock_if(struct brcmf_if *ifp, | ||
252 | enum brcmf_netif_stop_reason reason, bool state) | ||
253 | { | ||
254 | if (!ifp) | ||
255 | return; | ||
256 | |||
257 | brcmf_dbg(TRACE, "enter: idx=%d stop=0x%X reason=%d state=%d\n", | ||
258 | ifp->bssidx, ifp->netif_stop, reason, state); | ||
259 | if (state) { | ||
260 | if (!ifp->netif_stop) | ||
261 | netif_stop_queue(ifp->ndev); | ||
262 | ifp->netif_stop |= reason; | ||
263 | } else { | ||
264 | ifp->netif_stop &= ~reason; | ||
265 | if (!ifp->netif_stop) | ||
266 | netif_wake_queue(ifp->ndev); | ||
267 | } | ||
268 | } | ||
269 | |||
251 | void brcmf_txflowblock(struct device *dev, bool state) | 270 | void brcmf_txflowblock(struct device *dev, bool state) |
252 | { | 271 | { |
253 | struct net_device *ndev; | ||
254 | struct brcmf_bus *bus_if = dev_get_drvdata(dev); | 272 | struct brcmf_bus *bus_if = dev_get_drvdata(dev); |
255 | struct brcmf_pub *drvr = bus_if->drvr; | 273 | struct brcmf_pub *drvr = bus_if->drvr; |
256 | int i; | 274 | int i; |
@@ -258,13 +276,8 @@ void brcmf_txflowblock(struct device *dev, bool state) | |||
258 | brcmf_dbg(TRACE, "Enter\n"); | 276 | brcmf_dbg(TRACE, "Enter\n"); |
259 | 277 | ||
260 | for (i = 0; i < BRCMF_MAX_IFS; i++) | 278 | for (i = 0; i < BRCMF_MAX_IFS; i++) |
261 | if (drvr->iflist[i]) { | 279 | brcmf_txflowblock_if(drvr->iflist[i], |
262 | ndev = drvr->iflist[i]->ndev; | 280 | BRCMF_NETIF_STOP_REASON_BLOCK_BUS, state); |
263 | if (state) | ||
264 | netif_stop_queue(ndev); | ||
265 | else | ||
266 | netif_wake_queue(ndev); | ||
267 | } | ||
268 | } | 281 | } |
269 | 282 | ||
270 | void brcmf_rx_frames(struct device *dev, struct sk_buff_head *skb_list) | 283 | void brcmf_rx_frames(struct device *dev, struct sk_buff_head *skb_list) |