Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=98798f4875b7149db4eb7d0a126fc6dcd9637821
Commit:     98798f4875b7149db4eb7d0a126fc6dcd9637821
Parent:     d20c678a450a25c1c12925f60c1b4cc040acc17d
Author:     Michael Wu <[EMAIL PROTECTED]>
AuthorDate: Wed Oct 10 17:28:59 2007 -0400
Committer:  John W. Linville <[EMAIL PROTECTED]>
CommitDate: Thu Oct 18 15:38:24 2007 -0400

    [PATCH] rtl8187: Fix more frag bit checking, rts duration calc
    
    The wrong pointer is passed to ieee80211_get_morefrag. Fix this.
    
    While we're at it, reorder things so they look better and the rts duration
    calculation is done with the right length.
    
    Thanks to Christoph Hellwig for finding the ieee80211_get_morefrag issue.
    
    Signed-off-by: Michael Wu <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/rtl8187_dev.c |   31 ++++++++++++++++---------------
 1 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/rtl8187_dev.c 
b/drivers/net/wireless/rtl8187_dev.c
index 0ef887d..805b2af 100644
--- a/drivers/net/wireless/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl8187_dev.c
@@ -131,7 +131,8 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct 
sk_buff *skb,
        struct rtl8187_tx_hdr *hdr;
        struct rtl8187_tx_info *info;
        struct urb *urb;
-       u32 tmp;
+       __le16 rts_dur = 0;
+       u32 flags;
 
        urb = usb_alloc_urb(0, GFP_ATOMIC);
        if (!urb) {
@@ -139,24 +140,24 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct 
sk_buff *skb,
                return 0;
        }
 
-       hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
-       tmp = skb->len - sizeof(*hdr);
-       tmp |= RTL8187_TX_FLAG_NO_ENCRYPT;
-       tmp |= control->rts_cts_rate << 19;
-       tmp |= control->tx_rate << 24;
-       if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb))
-               tmp |= RTL8187_TX_FLAG_MORE_FRAG;
+       flags = skb->len;
+       flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
+       flags |= control->rts_cts_rate << 19;
+       flags |= control->tx_rate << 24;
+       if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data))
+               flags |= RTL8187_TX_FLAG_MORE_FRAG;
        if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
-               tmp |= RTL8187_TX_FLAG_RTS;
-               hdr->rts_duration =
-                       ieee80211_rts_duration(dev, priv->if_id, skb->len, 
control);
+               flags |= RTL8187_TX_FLAG_RTS;
+               rts_dur = ieee80211_rts_duration(dev, priv->if_id, skb->len, 
control);
        }
        if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
-               tmp |= RTL8187_TX_FLAG_CTS;
-       hdr->flags = cpu_to_le32(tmp);
+               flags |= RTL8187_TX_FLAG_CTS;
+
+       hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
+       hdr->flags = cpu_to_le32(flags);
        hdr->len = 0;
-       tmp = control->retry_limit << 8;
-       hdr->retry = cpu_to_le32(tmp);
+       hdr->rts_duration = rts_dur;
+       hdr->retry = cpu_to_le32(control->retry_limit << 8);
 
        info = (struct rtl8187_tx_info *)skb->cb;
        info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to