Search Linux Wireless

Re: Compat-wireless-3.2-rc6-3 is broken for rt2860 device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Tue, Jan 10, 2012 at 2:01 PM, Andreas Hartmann
<andihartmann@xxxxxxxxxxxxxxx> wrote:
> Helmut Schaa schrieb:
> [...]
>> So this looks good to me although the broken tx status for BAR frames
>> is for sure a rt2800pci problem (or even a hw issue).
>
> Sorry - What do you mean with "hw issue"? Is my hw broken?

Hehe, no :)

> Or is it a specific "behavior" of exactly this device:

I think most rt2800pci will behave the same and just interpret a
BlockAck as response to a BAR in a different manner as a BlockAck
in response to a Data frame.

When we send the BAR we tell the hw that the frame needs to be
acknowledged and according to the spec the hw will only count
a normal ACK as successful transmission, the peer will however
answer with a BlockAck as long as a BA session is active.

It might be possible to advise the hw to allow the BAR to be acked
by a BlockAck by specifying AMDPU=1 in the TXWI. Not sure
if that breaks anything else.

However, a BAR seems to be "ack-able" by both an ACK and a
BlockAck according to 802.11-2007. If the recipient answers with
an ACK the BA session might already be terminated and we would
stop the BA session as soon as 3 BARs failed with the previous
patch. This should be fine I guess.

So you might just give the following a try (also fully untested and
maybe with some of your debugging output enabled).

Signed-off-by: Helmut Schaa <helmut.schaa@xxxxxxxxxxxxxx>
---

diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c
b/drivers/net/wireless/rt2x00/rt2x00queue.c
index e4641da..5d0a3d3 100644
--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
@@ -393,6 +393,9 @@ static void
rt2x00queue_create_tx_descriptor_ht(struct rt2x00_dev *rt2x00dev,
 		txdesc->u.ht.txop = TXOP_SIFS;
 	else
 		txdesc->u.ht.txop = TXOP_HTTXOP;
+
+	if (ieee80211_is_back_req(hdr->frame_control))
+		__set_bit(ENTRY_TXD_HT_AMPDU, &txdesc->flags);
 }

 static void rt2x00queue_create_tx_descriptor(struct rt2x00_dev *rt2x00dev,
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux