From ec225f4af5881fee15ea268a21f09dc8c3d1e730 Mon Sep 17 00:00:00 2001 From: Arend van Spriel Date: Fri, 5 Apr 2013 10:57:41 +0200 Subject: [PATCH] --- yaml --- r: 369167 b: refs/heads/master c: 5f38b6836083b96613ebe8a0a43cde3400dd4a1b h: refs/heads/master i: 369165: 09edb9dc4261748bfad6c27a148bc54e92e5c059 369163: d496df1b3ed138b18fb90502e1231cdd7b82483c 369159: 09c42ed1bd7baecefd4b53d7a5beed25e4e99df2 369151: c277d6e5a2ba76c26fc67f382f84e44055fafef8 v: v3 --- [refs] | 2 +- .../net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 2 ++ .../wireless/brcm80211/brcmfmac/fwsignal.c | 29 +++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 2195bb0cf1f9..e7cda96ef8b9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 33753d47d390624f09ee57dbb2bc611b15a10e8f +refs/heads/master: 5f38b6836083b96613ebe8a0a43cde3400dd4a1b diff --git a/trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h b/trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h index e1058892dccc..d259ae5d2237 100644 --- a/trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +++ b/trunk/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h @@ -146,6 +146,8 @@ struct brcmf_fws_stats { u32 mac_update_failed; u32 mac_ps_update_failed; u32 if_update_failed; + u32 packet_request_failed; + u32 credit_request_failed; u32 rollback_success; u32 rollback_failed; u32 delayq_full_error; diff --git a/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c index 57cbfb661d58..619fff34c218 100644 --- a/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c +++ b/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c @@ -959,6 +959,29 @@ static int brcmf_fws_interface_state_indicate(struct brcmf_fws_info *fws, return ret; } +static int brcmf_fws_request_indicate(struct brcmf_fws_info *fws, u8 type, + u8 *data) +{ + struct brcmf_fws_mac_descriptor *entry; + + entry = &fws->desc.nodes[data[1] & 0x1F]; + if (!entry->occupied) { + if (type == BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT) + fws->stats.credit_request_failed++; + else + fws->stats.packet_request_failed++; + return -ESRCH; + } + + if (type == BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT) + entry->requested_credit = data[0]; + else + entry->requested_packet = data[0]; + + entry->ac_bitmap = data[2]; + return 0; +} + static void brcmf_fws_return_credits(struct brcmf_fws_info *fws, u8 fifo, u8 credits) { @@ -1366,8 +1389,6 @@ int brcmf_fws_hdrpull(struct brcmf_pub *drvr, int ifidx, s16 signal_len, break; switch (type) { - case BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT: - case BRCMF_FWS_TYPE_MAC_REQUEST_PACKET: case BRCMF_FWS_TYPE_HOST_REORDER_RXPKTS: case BRCMF_FWS_TYPE_COMP_TXSTATUS: break; @@ -1383,6 +1404,10 @@ int brcmf_fws_hdrpull(struct brcmf_pub *drvr, int ifidx, s16 signal_len, case BRCMF_FWS_TYPE_INTERFACE_CLOSE: brcmf_fws_interface_state_indicate(fws, type, data); break; + case BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT: + case BRCMF_FWS_TYPE_MAC_REQUEST_PACKET: + brcmf_fws_request_indicate(fws, type, data); + break; case BRCMF_FWS_TYPE_TXSTATUS: brcmf_fws_txstatus_indicate(fws, data); break;