forked from Minki/linux
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
71be7a3602
@ -638,12 +638,16 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta,
|
||||
s8 scale_action = 0;
|
||||
unsigned long flags;
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||
u16 fc, rate_mask;
|
||||
u16 fc;
|
||||
u16 rate_mask = 0;
|
||||
struct iwl3945_priv *priv = (struct iwl3945_priv *)priv_r;
|
||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||
|
||||
IWL_DEBUG_RATE("enter\n");
|
||||
|
||||
if (sta)
|
||||
rate_mask = sta->supp_rates[sband->band];
|
||||
|
||||
/* Send management frames and broadcast/multicast data using lowest
|
||||
* rate. */
|
||||
fc = le16_to_cpu(hdr->frame_control);
|
||||
@ -651,11 +655,15 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta,
|
||||
is_multicast_ether_addr(hdr->addr1) ||
|
||||
!sta || !priv_sta) {
|
||||
IWL_DEBUG_RATE("leave: No STA priv data to update!\n");
|
||||
info->control.rates[0].idx = rate_lowest_index(sband, sta);
|
||||
if (!rate_mask)
|
||||
info->control.rates[0].idx =
|
||||
rate_lowest_index(sband, NULL);
|
||||
else
|
||||
info->control.rates[0].idx =
|
||||
rate_lowest_index(sband, sta);
|
||||
return;
|
||||
}
|
||||
|
||||
rate_mask = sta->supp_rates[sband->band];
|
||||
index = min(rs_sta->last_txrate_idx & 0xffff, IWL_RATE_COUNT - 1);
|
||||
|
||||
if (sband->band == IEEE80211_BAND_5GHZ)
|
||||
|
@ -944,7 +944,8 @@ static void rs_tx_status(void *priv_r, struct ieee80211_supported_band *sband,
|
||||
}
|
||||
|
||||
/* See if there's a better rate or modulation mode to try. */
|
||||
rs_rate_scale_perform(priv, hdr, sta, lq_sta);
|
||||
if (sta && sta->supp_rates[sband->band])
|
||||
rs_rate_scale_perform(priv, hdr, sta, lq_sta);
|
||||
out:
|
||||
return;
|
||||
}
|
||||
@ -2101,14 +2102,23 @@ static void rs_get_rate(void *priv_r, struct ieee80211_sta *sta, void *priv_sta,
|
||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||
struct iwl_lq_sta *lq_sta = priv_sta;
|
||||
int rate_idx;
|
||||
u64 mask_bit = 0;
|
||||
|
||||
IWL_DEBUG_RATE_LIMIT("rate scale calculate new rate for skb\n");
|
||||
|
||||
if (sta)
|
||||
mask_bit = sta->supp_rates[sband->band];
|
||||
|
||||
/* Send management frames and broadcast/multicast data using lowest
|
||||
* rate. */
|
||||
if (!ieee80211_is_data(hdr->frame_control) ||
|
||||
is_multicast_ether_addr(hdr->addr1) || !sta || !lq_sta) {
|
||||
info->control.rates[0].idx = rate_lowest_index(sband, sta);
|
||||
if (!mask_bit)
|
||||
info->control.rates[0].idx =
|
||||
rate_lowest_index(sband, NULL);
|
||||
else
|
||||
info->control.rates[0].idx =
|
||||
rate_lowest_index(sband, sta);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -229,6 +229,8 @@ static void p54u_tx_3887(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
usb_sndbulkpipe(priv->udev, P54U_PIPE_DATA),
|
||||
skb->data, skb->len, FREE_AFTER_TX(skb) ?
|
||||
p54u_tx_cb : p54u_tx_dummy_cb, skb);
|
||||
addr_urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
data_urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
|
||||
usb_anchor_urb(addr_urb, &priv->submitted);
|
||||
err = usb_submit_urb(addr_urb, GFP_ATOMIC);
|
||||
@ -237,7 +239,7 @@ static void p54u_tx_3887(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
goto out;
|
||||
}
|
||||
|
||||
usb_anchor_urb(addr_urb, &priv->submitted);
|
||||
usb_anchor_urb(data_urb, &priv->submitted);
|
||||
err = usb_submit_urb(data_urb, GFP_ATOMIC);
|
||||
if (err)
|
||||
usb_unanchor_urb(data_urb);
|
||||
@ -332,12 +334,13 @@ static void p54u_tx_net2280(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
* free what's inside the transfer_buffer after the callback routine
|
||||
* has completed.
|
||||
*/
|
||||
int_urb->transfer_flags |= URB_FREE_BUFFER;
|
||||
int_urb->transfer_flags |= URB_FREE_BUFFER | URB_ZERO_PACKET;
|
||||
|
||||
usb_fill_bulk_urb(data_urb, priv->udev,
|
||||
usb_sndbulkpipe(priv->udev, P54U_PIPE_DATA),
|
||||
hdr, skb->len + sizeof(*hdr), FREE_AFTER_TX(skb) ?
|
||||
p54u_tx_cb : p54u_tx_dummy_cb, skb);
|
||||
data_urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
|
||||
usb_anchor_urb(int_urb, &priv->submitted);
|
||||
err = usb_submit_urb(int_urb, GFP_ATOMIC);
|
||||
|
@ -273,6 +273,7 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
|
||||
usb_fill_bulk_urb(urb, priv->udev, usb_sndbulkpipe(priv->udev, ep),
|
||||
buf, skb->len, rtl8187_tx_cb, skb);
|
||||
urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
usb_anchor_urb(urb, &priv->anchored);
|
||||
rc = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (rc < 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user