From: Christian Lamparter Date: Fri, 6 Jul 2012 23:39:08 +0000 (+0200) Subject: Merge branch 'master' of git://github.com/chunkeey/carl9170fw X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=c60bb8671d9721896036d980595940864e8e758c;hp=4290b7d13fa17d5aa3325e2aef4702f9aa250f8a;p=carl9170fw.git Merge branch 'master' of git://github.com/chunkeey/carl9170fw --- diff --git a/carlfw/src/wlan.c b/carlfw/src/wlan.c index 50c48f9..e581fa8 100644 --- a/carlfw/src/wlan.c +++ b/carlfw/src/wlan.c @@ -345,6 +345,16 @@ static bool wlan_tx_status(struct dma_queue *queue, /* update hangcheck */ fw.wlan.last_super_num[qidx] = 0; + /* + * Note: + * There could be a corner case when the TXFAIL is set + * even though the frame was properly ACKed by the peer: + * a BlockAckReq with the immediate policy will cause + * the receiving peer to produce a BlockACK unfortunately + * the MAC in this chip seems to be expecting a legacy + * ACK and marks the BAR as failed! + */ + if (!!(desc->ctrl & AR9170_CTRL_FAIL)) { txfail = !!(desc->ctrl & AR9170_CTRL_TXFAIL); @@ -554,7 +564,7 @@ static void wlan_send_buffered_ba(void) baf->f.hdr.phy.mcs = AR9170_TXRX_PHY_RATE_OFDM_6M; /* format outgoing BA */ - ba->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_NULLFUNC); + ba->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_BACK); ba->duration = cpu_to_le16(0); memcpy(ba->ta, ctx->ta, 6); memcpy(ba->ra, ctx->ra, 6); @@ -566,11 +576,7 @@ static void wlan_send_buffered_ba(void) */ memset(ba->bitmap, 0x0, sizeof(ba->bitmap)); - /* - * NB: - * not entirely sure if this is 100% correct?! - */ - ba->control = ctx->control | cpu_to_le16(1); + ba->control = ctx->control; ba->start_seq_num = ctx->start_seq_num; wlan_tx_fw(&baf->s, NULL); } @@ -625,13 +631,7 @@ static void handle_bar(struct dma_desc *desc __unused, struct ieee80211_hdr *hdr /* Brilliant! The BAR provides all necessary MACs! */ memcpy(ctx->ra, bar->ta, 6); memcpy(ctx->ta, bar->ra, 6); - - /* - * NB: - * not entirely sure if this is 100% correct to force the - * imm ack bit or not... - */ - ctx->control = bar->control | cpu_to_le16(1); + ctx->control = bar->control; ctx->start_seq_num = bar->start_seq_num; } diff --git a/toolchain/Makefile b/toolchain/Makefile index 75cebb9..23843a7 100644 --- a/toolchain/Makefile +++ b/toolchain/Makefile @@ -6,9 +6,9 @@ NEWLIB_VER=1.20.0 NEWLIB_URL=ftp://sources.redhat.com/pub/newlib/newlib-$(NEWLIB_VER).tar.gz NEWLIB_TAR=newlib-$(NEWLIB_VER).tar.gz -GCC_VER=4.6.3 -GCC_URL=http://mirrors.kernel.org/gnu/gcc/gcc-$(GCC_VER)/gcc-core-$(GCC_VER).tar.bz2 -GCC_TAR=gcc-core-$(GCC_VER).tar.bz2 +GCC_VER=4.7.1 +GCC_URL=http://mirrors.kernel.org/gnu/gcc/gcc-$(GCC_VER)/gcc-$(GCC_VER).tar.bz2 +GCC_TAR=gcc-$(GCC_VER).tar.bz2 BASEDIR=$(shell pwd)