diff options
author | Andrey Smolnikov <asmolnik@broadcom.com> | 2012-04-02 10:19:30 -0700 |
---|---|---|
committer | Om Prakash Singh <omp@nvidia.com> | 2012-06-15 14:15:16 +0530 |
commit | fd034e3fa30b0dbe6b4904097d10627a8b7c7f91 (patch) | |
tree | ce99c9035631385733d73e8d15ddf703e39a79e1 /drivers | |
parent | a9c881fe07e44f5bd7aaec9b8ef56b39739b6b04 (diff) |
net: wireless: bcmdhd: Fix frame sequence lag issue
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/bcmdhd/dhd_sdio.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/net/wireless/bcmdhd/dhd_sdio.c b/drivers/net/wireless/bcmdhd/dhd_sdio.c index a5f30518c5b2..49deee10fe11 100644 --- a/drivers/net/wireless/bcmdhd/dhd_sdio.c +++ b/drivers/net/wireless/bcmdhd/dhd_sdio.c @@ -21,7 +21,7 @@ * software in any way with any other Broadcom software provided under a license * other than the GPL, without Broadcom's express prior written consent. * - * $Id: dhd_sdio.c 315747 2012-02-18 00:16:06Z $ + * $Id: dhd_sdio.c 324417 2012-03-29 03:15:15Z $ */ #include <typedefs.h> @@ -754,7 +754,8 @@ dhdsdio_clkctl(dhd_bus_t *bus, uint target, bool pendok) uint oldstate = bus->clkstate; #endif /* DHD_DEBUG */ - DHD_TRACE(("%s: Enter\n", __FUNCTION__)); + DHD_TRACE(("%s: Enter bus->clkstate %u target %u\n", __FUNCTION__, + bus->clkstate, target)); /* Early exit if we're already there */ if (bus->clkstate == target) { @@ -4597,6 +4598,15 @@ clkwait: if (TXCTLOK(bus) && bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL)) { int ret, i; + uint8* frame_seq = bus->ctrl_frame_buf + SDPCM_FRAMETAG_LEN; + + if (((bus->sih->chip == BCM4329_CHIP_ID) || /* limit to 4329 & 4330 for now */ + (bus->sih->chip == BCM4330_CHIP_ID)) && (*frame_seq != bus->tx_seq)) { + DHD_ERROR(("%s IOCTL frame seq lag detected!" + " frm_seq:%d != bus->tx_seq:%d, corrected\n", + __FUNCTION__, *frame_seq, bus->tx_seq)); + *frame_seq = bus->tx_seq; + } ret = dhd_bcmsdh_send_buf(bus, bcmsdh_cur_sbwad(sdh), SDIO_FUNC_2, F2SYNC, (uint8 *)bus->ctrl_frame_buf, (uint32)bus->ctrl_frame_len, @@ -6303,11 +6313,12 @@ dhd_bus_devreset(dhd_pub_t *dhdp, uint8 flag) return bcmerror; } +/* Get Chip ID version */ uint dhd_bus_chip_id(dhd_pub_t *dhdp) { dhd_bus_t *bus = dhdp->bus; - return bus->sih->chip; + return bus->sih->chip; } int |