diff options
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index 3ba9e1049f3b..05c8840392e5 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -363,21 +363,20 @@ void brcmf_rx_frames(struct device *dev, struct sk_buff_head *skb_list) | |||
363 | } | 363 | } |
364 | } | 364 | } |
365 | 365 | ||
366 | void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success) | 366 | void brcmf_txfinalize(struct brcmf_pub *drvr, struct sk_buff *txp, |
367 | bool success) | ||
367 | { | 368 | { |
368 | u8 ifidx; | 369 | struct brcmf_if *ifp; |
369 | struct ethhdr *eh; | 370 | struct ethhdr *eh; |
371 | u8 ifidx; | ||
370 | u16 type; | 372 | u16 type; |
371 | struct brcmf_bus *bus_if = dev_get_drvdata(dev); | ||
372 | struct brcmf_pub *drvr = bus_if->drvr; | ||
373 | struct brcmf_if *ifp; | ||
374 | int res; | 373 | int res; |
375 | 374 | ||
376 | res = brcmf_proto_hdrpull(drvr, false, &ifidx, txp); | 375 | res = brcmf_proto_hdrpull(drvr, false, &ifidx, txp); |
377 | 376 | ||
378 | ifp = drvr->iflist[ifidx]; | 377 | ifp = drvr->iflist[ifidx]; |
379 | if (!ifp) | 378 | if (!ifp) |
380 | goto done; | 379 | return; |
381 | 380 | ||
382 | if (res == 0) { | 381 | if (res == 0) { |
383 | eh = (struct ethhdr *)(txp->data); | 382 | eh = (struct ethhdr *)(txp->data); |
@@ -391,8 +390,18 @@ void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success) | |||
391 | } | 390 | } |
392 | if (!success) | 391 | if (!success) |
393 | ifp->stats.tx_errors++; | 392 | ifp->stats.tx_errors++; |
393 | } | ||
394 | 394 | ||
395 | done: | 395 | void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success) |
396 | { | ||
397 | struct brcmf_bus *bus_if = dev_get_drvdata(dev); | ||
398 | struct brcmf_pub *drvr = bus_if->drvr; | ||
399 | |||
400 | /* await txstatus signal for firmware is active */ | ||
401 | if (success && brcmf_fws_fc_active(drvr->fws)) | ||
402 | return; | ||
403 | |||
404 | brcmf_txfinalize(drvr, txp, success); | ||
396 | brcmu_pkt_buf_free_skb(txp); | 405 | brcmu_pkt_buf_free_skb(txp); |
397 | } | 406 | } |
398 | 407 | ||