(Patch also available as an attachment in case Gmail decides to linewrap it.) Currently we always wait for an ACK even if IEEE80211_TX_CTL_NO_ACK is set. This is just the opposite of what other drivers do. Change both RTL8187L and RTL8187B to skip waiting for an ACK when no ACK was requested. Signed-off-by: Gábor Stefanik <netrolller.3d@xxxxxxxxx> --- drivers/net/wireless/rtl818x/rtl8187_dev.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c index 9fd23b5..7f12d9f 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c @@ -230,7 +230,10 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb) hdr->flags = cpu_to_le32(flags); hdr->len = 0; hdr->rts_duration = rts_dur; - hdr->retry = cpu_to_le32(info->control.rates[0].count << 8); + if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) + hdr->retry = cpu_to_le32(info->control.rates[0].count << 8); + else + hdr->retry = 0; buf = hdr; ep = 2; @@ -248,7 +251,10 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb) memset(hdr, 0, sizeof(*hdr)); hdr->flags = cpu_to_le32(flags); hdr->rts_duration = rts_dur; - hdr->retry = cpu_to_le32(info->control.rates[0].count << 8); + if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) + hdr->retry = cpu_to_le32(info->control.rates[0].count << 8); + else + hdr->retry = 0; hdr->tx_duration = ieee80211_generic_frame_duration(dev, priv->vif, skb->len, txrate); -- 1.5.4.5
Attachment:
0001-rtl8187-Do-not-wait-for-an-ACK-when-IEEE80211_TX_CT.patch
Description: Binary data