|
@@ -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);
|