Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 369144
b: refs/heads/master
c: 0f8b5cc
h: refs/heads/master
v: v3
  • Loading branch information
Arend van Spriel authored and John W. Linville committed Apr 3, 2013
1 parent e7aba41 commit d559d87
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 15 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: 3edc1cff02a40a76ad6a5e2b9cb00a29584f33ad
refs/heads/master: 0f8b5cc5214b0c8c772d9ba0a41f5b1f07aff274
12 changes: 7 additions & 5 deletions trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,11 +388,13 @@ void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success)
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
struct brcmf_pub *drvr = bus_if->drvr;

/* await txstatus signal for firmware is active */
if (success && brcmf_fws_fc_active(drvr->fws))
return;

brcmf_txfinalize(drvr, txp, success);
/* await txstatus signal for firmware if active */
if (brcmf_fws_fc_active(drvr->fws)) {
if (!success)
brcmf_fws_bustxfail(drvr->fws, txp);
} else {
brcmf_txfinalize(drvr, txp, success);
}
}

static struct net_device_stats *brcmf_netdev_get_stats(struct net_device *ndev)
Expand Down
34 changes: 25 additions & 9 deletions trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
Original file line number Diff line number Diff line change
Expand Up @@ -810,20 +810,12 @@ int brcmf_fws_macdesc_indicate(struct brcmf_fws_info *fws, u8 type, u8 *data)
}

static int
brcmf_fws_txstatus_indicate(struct brcmf_fws_info *fws, u8 *data)
brcmf_fws_txstatus_process(struct brcmf_fws_info *fws, u8 flags, u32 hslot)
{
u8 flags;
u32 status;
u32 hslot;
int ret;
struct sk_buff *skb;
struct brcmf_fws_mac_descriptor *entry = NULL;

status = le32_to_cpu(*(__le32 *)data);
flags = brcmf_txstatus_get_field(status, FLAGS);
hslot = brcmf_txstatus_get_field(status, HSLOT);
fws->stats.txs_indicate++;

brcmf_dbg(TRACE, "status: flags=0x%X, hslot=%d\n",
flags, hslot);

Expand Down Expand Up @@ -854,6 +846,20 @@ brcmf_fws_txstatus_indicate(struct brcmf_fws_info *fws, u8 *data)
return ret;
}

static int brcmf_fws_txstatus_indicate(struct brcmf_fws_info *fws, u8 *data)
{
u32 status;
u32 hslot;
u8 flags;

fws->stats.txs_indicate++;
status = le32_to_cpu(*(__le32 *)data);
flags = brcmf_txstatus_get_field(status, FLAGS);
hslot = brcmf_txstatus_get_field(status, HSLOT);

return brcmf_fws_txstatus_process(fws, flags, hslot);
}

static int brcmf_fws_dbg_seqnum_check(struct brcmf_fws_info *fws, u8 *data)
{
__le32 timestamp;
Expand Down Expand Up @@ -1289,3 +1295,13 @@ bool brcmf_fws_fc_active(struct brcmf_fws_info *fws)
brcmf_dbg(TRACE, "enter: mode=%d\n", fws->fcmode);
return fws->fcmode != BRCMF_FWS_FCMODE_NONE;
}

void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb)
{
ulong flags;

brcmf_fws_lock(fws->drvr, flags);
brcmf_fws_txstatus_process(fws, BRCMF_FWS_TXSTATUS_FW_TOSSED,
brcmf_skb_htod_tag_get_field(skb, HSLOT));
brcmf_fws_unlock(fws->drvr, flags);
}
1 change: 1 addition & 0 deletions trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb);
void brcmf_fws_reset_interface(struct brcmf_if *ifp);
void brcmf_fws_add_interface(struct brcmf_if *ifp);
void brcmf_fws_del_interface(struct brcmf_if *ifp);
void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb);

#endif /* FWSIGNAL_H_ */

0 comments on commit d559d87

Please sign in to comment.