Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
f403ede705
21 changed files with 135 additions and 81 deletions
|
@ -2474,6 +2474,8 @@ static void gelic_wl_free(struct gelic_wl_info *wl)
|
|||
|
||||
pr_debug("%s: <-\n", __func__);
|
||||
|
||||
free_page((unsigned long)wl->buf);
|
||||
|
||||
pr_debug("%s: destroy queues\n", __func__);
|
||||
destroy_workqueue(wl->eurus_cmd_queue);
|
||||
destroy_workqueue(wl->event_queue);
|
||||
|
|
|
@ -666,7 +666,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,
|
|||
rx_status.flag = 0;
|
||||
rx_status.mactime = le64_to_cpu(rx_end->timestamp);
|
||||
rx_status.freq =
|
||||
ieee80211_frequency_to_channel(le16_to_cpu(rx_hdr->channel));
|
||||
ieee80211_channel_to_frequency(le16_to_cpu(rx_hdr->channel));
|
||||
rx_status.band = (rx_hdr->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ?
|
||||
IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
|
||||
|
||||
|
|
|
@ -163,8 +163,8 @@ struct iwl4965_lq_sta {
|
|||
struct dentry *rs_sta_dbgfs_tx_agg_tid_en_file;
|
||||
#endif
|
||||
struct iwl4965_rate dbg_fixed;
|
||||
struct iwl_priv *drv;
|
||||
#endif
|
||||
struct iwl_priv *drv;
|
||||
};
|
||||
|
||||
static void rs_rate_scale_perform(struct iwl_priv *priv,
|
||||
|
|
|
@ -3978,7 +3978,7 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
|
|||
|
||||
rx_status.mactime = le64_to_cpu(rx_start->timestamp);
|
||||
rx_status.freq =
|
||||
ieee80211_frequency_to_channel(le16_to_cpu(rx_start->channel));
|
||||
ieee80211_channel_to_frequency(le16_to_cpu(rx_start->channel));
|
||||
rx_status.band = (rx_start->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ?
|
||||
IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
|
||||
rx_status.rate_idx =
|
||||
|
|
|
@ -388,8 +388,15 @@ islpci_open(struct net_device *ndev)
|
|||
|
||||
netif_start_queue(ndev);
|
||||
|
||||
/* Turn off carrier unless we know we have associated */
|
||||
netif_carrier_off(ndev);
|
||||
/* Turn off carrier if in STA or Ad-hoc mode. It will be turned on
|
||||
* once the firmware receives a trap of being associated
|
||||
* (GEN_OID_LINKSTATE). In other modes (AP or WDS or monitor) we
|
||||
* should just leave the carrier on as its expected the firmware
|
||||
* won't send us a trigger. */
|
||||
if (priv->iw_mode == IW_MODE_INFRA || priv->iw_mode == IW_MODE_ADHOC)
|
||||
netif_carrier_off(ndev);
|
||||
else
|
||||
netif_carrier_on(ndev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
|
|||
* Initialize the device.
|
||||
*/
|
||||
status = rt2x00dev->ops->lib->initialize(rt2x00dev);
|
||||
if (status)
|
||||
goto exit;
|
||||
if (status) {
|
||||
rt2x00queue_uninitialize(rt2x00dev);
|
||||
return status;
|
||||
}
|
||||
|
||||
__set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags);
|
||||
|
||||
|
@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
|
|||
rt2x00rfkill_register(rt2x00dev);
|
||||
|
||||
return 0;
|
||||
|
||||
exit:
|
||||
rt2x00lib_uninitialize(rt2x00dev);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
|
||||
|
|
|
@ -314,13 +314,14 @@ int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev)
|
|||
if (status) {
|
||||
ERROR(rt2x00dev, "IRQ %d allocation failed (error %d).\n",
|
||||
pci_dev->irq, status);
|
||||
return status;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
exit:
|
||||
rt2x00pci_uninitialize(rt2x00dev);
|
||||
queue_for_each(rt2x00dev, queue)
|
||||
rt2x00pci_free_queue_dma(rt2x00dev, queue);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -2366,6 +2366,7 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|||
{
|
||||
struct rt2x00_dev *rt2x00dev = hw->priv;
|
||||
struct rt2x00_intf *intf = vif_to_intf(control->vif);
|
||||
struct queue_entry_priv_pci_tx *priv_tx;
|
||||
struct skb_frame_desc *skbdesc;
|
||||
unsigned int beacon_base;
|
||||
u32 reg;
|
||||
|
@ -2373,21 +2374,8 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|||
if (unlikely(!intf->beacon))
|
||||
return -ENOBUFS;
|
||||
|
||||
/*
|
||||
* We need to append the descriptor in front of the
|
||||
* beacon frame.
|
||||
*/
|
||||
if (skb_headroom(skb) < intf->beacon->queue->desc_size) {
|
||||
if (pskb_expand_head(skb, intf->beacon->queue->desc_size,
|
||||
0, GFP_ATOMIC))
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the descriptor in front of the skb.
|
||||
*/
|
||||
skb_push(skb, intf->beacon->queue->desc_size);
|
||||
memset(skb->data, 0, intf->beacon->queue->desc_size);
|
||||
priv_tx = intf->beacon->priv_data;
|
||||
memset(priv_tx->desc, 0, intf->beacon->queue->desc_size);
|
||||
|
||||
/*
|
||||
* Fill in skb descriptor
|
||||
|
@ -2395,9 +2383,9 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|||
skbdesc = get_skb_frame_desc(skb);
|
||||
memset(skbdesc, 0, sizeof(*skbdesc));
|
||||
skbdesc->flags |= FRAME_DESC_DRIVER_GENERATED;
|
||||
skbdesc->data = skb->data + intf->beacon->queue->desc_size;
|
||||
skbdesc->data_len = skb->len - intf->beacon->queue->desc_size;
|
||||
skbdesc->desc = skb->data;
|
||||
skbdesc->data = skb->data;
|
||||
skbdesc->data_len = skb->len;
|
||||
skbdesc->desc = priv_tx->desc;
|
||||
skbdesc->desc_len = intf->beacon->queue->desc_size;
|
||||
skbdesc->entry = intf->beacon;
|
||||
|
||||
|
@ -2425,7 +2413,10 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|||
*/
|
||||
beacon_base = HW_BEACON_OFFSET(intf->beacon->entry_idx);
|
||||
rt2x00pci_register_multiwrite(rt2x00dev, beacon_base,
|
||||
skb->data, skb->len);
|
||||
skbdesc->desc, skbdesc->desc_len);
|
||||
rt2x00pci_register_multiwrite(rt2x00dev,
|
||||
beacon_base + skbdesc->desc_len,
|
||||
skbdesc->data, skbdesc->data_len);
|
||||
rt61pci_kick_tx_queue(rt2x00dev, control->queue);
|
||||
|
||||
return 0;
|
||||
|
@ -2490,7 +2481,7 @@ static const struct data_queue_desc rt61pci_queue_tx = {
|
|||
|
||||
static const struct data_queue_desc rt61pci_queue_bcn = {
|
||||
.entry_num = 4 * BEACON_ENTRIES,
|
||||
.data_size = MGMT_FRAME_SIZE,
|
||||
.data_size = 0, /* No DMA required for beacons */
|
||||
.desc_size = TXINFO_SIZE,
|
||||
.priv_size = sizeof(struct queue_entry_priv_pci_tx),
|
||||
};
|
||||
|
|
|
@ -908,9 +908,9 @@ static void wv_psa_show(psa_t * p)
|
|||
p->psa_call_code[3], p->psa_call_code[4], p->psa_call_code[5],
|
||||
p->psa_call_code[6], p->psa_call_code[7]);
|
||||
#ifdef DEBUG_SHOW_UNUSED
|
||||
printk(KERN_DEBUG "psa_reserved[]: %02X:%02X:%02X:%02X\n",
|
||||
printk(KERN_DEBUG "psa_reserved[]: %02X:%02X\n",
|
||||
p->psa_reserved[0],
|
||||
p->psa_reserved[1], p->psa_reserved[2], p->psa_reserved[3]);
|
||||
p->psa_reserved[1]);
|
||||
#endif /* DEBUG_SHOW_UNUSED */
|
||||
printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status);
|
||||
printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]);
|
||||
|
|
|
@ -1074,11 +1074,9 @@ wv_psa_show(psa_t * p)
|
|||
p->psa_call_code[6],
|
||||
p->psa_call_code[7]);
|
||||
#ifdef DEBUG_SHOW_UNUSED
|
||||
printk(KERN_DEBUG "psa_reserved[]: %02X:%02X:%02X:%02X\n",
|
||||
printk(KERN_DEBUG "psa_reserved[]: %02X:%02X\n",
|
||||
p->psa_reserved[0],
|
||||
p->psa_reserved[1],
|
||||
p->psa_reserved[2],
|
||||
p->psa_reserved[3]);
|
||||
p->psa_reserved[1]);
|
||||
#endif /* DEBUG_SHOW_UNUSED */
|
||||
printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status);
|
||||
printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]);
|
||||
|
|
|
@ -889,9 +889,13 @@ static void tx_urb_complete(struct urb *urb)
|
|||
}
|
||||
free_urb:
|
||||
skb = (struct sk_buff *)urb->context;
|
||||
zd_mac_tx_to_dev(skb, urb->status);
|
||||
/*
|
||||
* grab 'usb' pointer before handing off the skb (since
|
||||
* it might be freed by zd_mac_tx_to_dev or mac80211)
|
||||
*/
|
||||
cb = (struct zd_tx_skb_control_block *)skb->cb;
|
||||
usb = &zd_hw_mac(cb->hw)->chip.usb;
|
||||
zd_mac_tx_to_dev(skb, urb->status);
|
||||
free_tx_urb(usb, urb);
|
||||
tx_dec_submitted_urbs(usb);
|
||||
return;
|
||||
|
|
|
@ -255,14 +255,23 @@ void ieee80211_debugfs_key_remove(struct ieee80211_key *key)
|
|||
void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
char buf[50];
|
||||
struct ieee80211_key *key;
|
||||
|
||||
if (!sdata->debugfsdir)
|
||||
return;
|
||||
|
||||
sprintf(buf, "../keys/%d", sdata->default_key->debugfs.cnt);
|
||||
sdata->debugfs.default_key =
|
||||
debugfs_create_symlink("default_key", sdata->debugfsdir, buf);
|
||||
/* this is running under the key lock */
|
||||
|
||||
key = sdata->default_key;
|
||||
if (key) {
|
||||
sprintf(buf, "../keys/%d", key->debugfs.cnt);
|
||||
sdata->debugfs.default_key =
|
||||
debugfs_create_symlink("default_key",
|
||||
sdata->debugfsdir, buf);
|
||||
} else
|
||||
ieee80211_debugfs_key_remove_default(sdata);
|
||||
}
|
||||
|
||||
void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
if (!sdata)
|
||||
|
|
|
@ -397,7 +397,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr,
|
|||
put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum);
|
||||
sdata->u.sta.mesh_seqnum++;
|
||||
|
||||
return 5;
|
||||
return 6;
|
||||
}
|
||||
|
||||
void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
|
||||
|
|
|
@ -120,7 +120,7 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags,
|
|||
*pos++ = WLAN_EID_PREP;
|
||||
break;
|
||||
default:
|
||||
kfree(skb);
|
||||
kfree_skb(skb);
|
||||
return -ENOTSUPP;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -158,19 +158,25 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
|
|||
if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0)
|
||||
return -ENOSPC;
|
||||
|
||||
read_lock(&pathtbl_resize_lock);
|
||||
|
||||
new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL);
|
||||
if (!new_mpath) {
|
||||
atomic_dec(&sdata->u.sta.mpaths);
|
||||
err = -ENOMEM;
|
||||
goto endadd2;
|
||||
}
|
||||
new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL);
|
||||
if (!new_node) {
|
||||
kfree(new_mpath);
|
||||
atomic_dec(&sdata->u.sta.mpaths);
|
||||
err = -ENOMEM;
|
||||
goto endadd2;
|
||||
}
|
||||
|
||||
read_lock(&pathtbl_resize_lock);
|
||||
memcpy(new_mpath->dst, dst, ETH_ALEN);
|
||||
new_mpath->dev = dev;
|
||||
new_mpath->flags = 0;
|
||||
skb_queue_head_init(&new_mpath->frame_queue);
|
||||
new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL);
|
||||
new_node->mpath = new_mpath;
|
||||
new_mpath->timer.data = (unsigned long) new_mpath;
|
||||
new_mpath->timer.function = mesh_path_timer;
|
||||
|
@ -202,7 +208,6 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
|
|||
|
||||
endadd:
|
||||
spin_unlock(&mesh_paths->hashwlock[hash_idx]);
|
||||
endadd2:
|
||||
read_unlock(&pathtbl_resize_lock);
|
||||
if (!err && grow) {
|
||||
struct mesh_table *oldtbl, *newtbl;
|
||||
|
@ -215,10 +220,12 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
rcu_assign_pointer(mesh_paths, newtbl);
|
||||
write_unlock(&pathtbl_resize_lock);
|
||||
|
||||
synchronize_rcu();
|
||||
mesh_table_free(oldtbl, false);
|
||||
write_unlock(&pathtbl_resize_lock);
|
||||
}
|
||||
endadd2:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -665,6 +665,26 @@ static void ieee80211_authenticate(struct net_device *dev,
|
|||
mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT);
|
||||
}
|
||||
|
||||
static int ieee80211_compatible_rates(struct ieee80211_sta_bss *bss,
|
||||
struct ieee80211_supported_band *sband,
|
||||
u64 *rates)
|
||||
{
|
||||
int i, j, count;
|
||||
*rates = 0;
|
||||
count = 0;
|
||||
for (i = 0; i < bss->supp_rates_len; i++) {
|
||||
int rate = (bss->supp_rates[i] & 0x7F) * 5;
|
||||
|
||||
for (j = 0; j < sband->n_bitrates; j++)
|
||||
if (sband->bitrates[j].bitrate == rate) {
|
||||
*rates |= BIT(j);
|
||||
count++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static void ieee80211_send_assoc(struct net_device *dev,
|
||||
struct ieee80211_if_sta *ifsta)
|
||||
|
@ -673,11 +693,12 @@ static void ieee80211_send_assoc(struct net_device *dev,
|
|||
struct sk_buff *skb;
|
||||
struct ieee80211_mgmt *mgmt;
|
||||
u8 *pos, *ies;
|
||||
int i, len;
|
||||
int i, len, count, rates_len, supp_rates_len;
|
||||
u16 capab;
|
||||
struct ieee80211_sta_bss *bss;
|
||||
int wmm = 0;
|
||||
struct ieee80211_supported_band *sband;
|
||||
u64 rates = 0;
|
||||
|
||||
skb = dev_alloc_skb(local->hw.extra_tx_headroom +
|
||||
sizeof(*mgmt) + 200 + ifsta->extra_ie_len +
|
||||
|
@ -740,24 +761,39 @@ static void ieee80211_send_assoc(struct net_device *dev,
|
|||
*pos++ = ifsta->ssid_len;
|
||||
memcpy(pos, ifsta->ssid, ifsta->ssid_len);
|
||||
|
||||
len = sband->n_bitrates;
|
||||
if (len > 8)
|
||||
len = 8;
|
||||
pos = skb_put(skb, len + 2);
|
||||
*pos++ = WLAN_EID_SUPP_RATES;
|
||||
*pos++ = len;
|
||||
for (i = 0; i < len; i++) {
|
||||
int rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
}
|
||||
/* all supported rates should be added here but some APs
|
||||
* (e.g. D-Link DAP 1353 in b-only mode) don't like that
|
||||
* Therefore only add rates the AP supports */
|
||||
rates_len = ieee80211_compatible_rates(bss, sband, &rates);
|
||||
supp_rates_len = rates_len;
|
||||
if (supp_rates_len > 8)
|
||||
supp_rates_len = 8;
|
||||
|
||||
if (sband->n_bitrates > len) {
|
||||
pos = skb_put(skb, sband->n_bitrates - len + 2);
|
||||
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
||||
*pos++ = sband->n_bitrates - len;
|
||||
for (i = len; i < sband->n_bitrates; i++) {
|
||||
len = sband->n_bitrates;
|
||||
pos = skb_put(skb, supp_rates_len + 2);
|
||||
*pos++ = WLAN_EID_SUPP_RATES;
|
||||
*pos++ = supp_rates_len;
|
||||
|
||||
count = 0;
|
||||
for (i = 0; i < sband->n_bitrates; i++) {
|
||||
if (BIT(i) & rates) {
|
||||
int rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
if (++count == 8)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == 8) {
|
||||
pos = skb_put(skb, rates_len - count + 2);
|
||||
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
||||
*pos++ = rates_len - count;
|
||||
|
||||
for (i++; i < sband->n_bitrates; i++) {
|
||||
if (BIT(i) & rates) {
|
||||
int rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ static int rate_control_pid_events_open(struct inode *inode, struct file *file)
|
|||
struct rc_pid_sta_info *sinfo = inode->i_private;
|
||||
struct rc_pid_event_buffer *events = &sinfo->events;
|
||||
struct rc_pid_events_file_info *file_info;
|
||||
unsigned int status;
|
||||
unsigned long status;
|
||||
|
||||
/* Allocate a state struct */
|
||||
file_info = kmalloc(sizeof(*file_info), GFP_KERNEL);
|
||||
|
@ -135,7 +135,7 @@ static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf,
|
|||
char pb[RC_PID_PRINT_BUF_SIZE];
|
||||
int ret;
|
||||
int p;
|
||||
unsigned int status;
|
||||
unsigned long status;
|
||||
|
||||
/* Check if there is something to read. */
|
||||
if (events->next_entry == file_info->next_entry) {
|
||||
|
|
|
@ -1305,11 +1305,11 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
|
|||
if (is_multicast_ether_addr(skb->data)) {
|
||||
if (*mesh_ttl > 0) {
|
||||
xmit_skb = skb_copy(skb, GFP_ATOMIC);
|
||||
if (!xmit_skb && net_ratelimit())
|
||||
if (xmit_skb)
|
||||
xmit_skb->pkt_type = PACKET_OTHERHOST;
|
||||
else if (net_ratelimit())
|
||||
printk(KERN_DEBUG "%s: failed to clone "
|
||||
"multicast frame\n", dev->name);
|
||||
else
|
||||
xmit_skb->pkt_type = PACKET_OTHERHOST;
|
||||
} else
|
||||
IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta,
|
||||
dropped_frames_ttl);
|
||||
|
@ -1395,7 +1395,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
|
|||
padding = ((4 - subframe_len) & 0x3);
|
||||
/* the last MSDU has no padding */
|
||||
if (subframe_len > remaining) {
|
||||
printk(KERN_DEBUG "%s: wrong buffer size", dev->name);
|
||||
printk(KERN_DEBUG "%s: wrong buffer size\n", dev->name);
|
||||
return RX_DROP_UNUSABLE;
|
||||
}
|
||||
|
||||
|
@ -1418,7 +1418,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
|
|||
eth = (struct ethhdr *) skb_pull(skb, ntohs(len) +
|
||||
padding);
|
||||
if (!eth) {
|
||||
printk(KERN_DEBUG "%s: wrong buffer size ",
|
||||
printk(KERN_DEBUG "%s: wrong buffer size\n",
|
||||
dev->name);
|
||||
dev_kfree_skb(frame);
|
||||
return RX_DROP_UNUSABLE;
|
||||
|
@ -1952,7 +1952,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
|||
if (!skb_new) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_DEBUG "%s: failed to copy "
|
||||
"multicast frame for %s",
|
||||
"multicast frame for %s\n",
|
||||
wiphy_name(local->hw.wiphy),
|
||||
prev->dev->name);
|
||||
continue;
|
||||
|
|
|
@ -1898,6 +1898,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
|||
control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE;
|
||||
control->antenna_sel_tx = local->hw.conf.antenna_sel_tx;
|
||||
control->flags |= IEEE80211_TXCTL_NO_ACK;
|
||||
control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
|
||||
control->retry_limit = 1;
|
||||
control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT;
|
||||
}
|
||||
|
|
|
@ -153,15 +153,15 @@ int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr)
|
|||
/* 7.1.3.5a.2 */
|
||||
switch (ae) {
|
||||
case 0:
|
||||
return 5;
|
||||
return 6;
|
||||
case 1:
|
||||
return 11;
|
||||
return 12;
|
||||
case 2:
|
||||
return 17;
|
||||
return 18;
|
||||
case 3:
|
||||
return 23;
|
||||
return 24;
|
||||
default:
|
||||
return 5;
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -394,7 +394,8 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
|
|||
qd->handle);
|
||||
if (!q->queues[i]) {
|
||||
q->queues[i] = &noop_qdisc;
|
||||
printk(KERN_ERR "%s child qdisc %i creation failed", dev->name, i);
|
||||
printk(KERN_ERR "%s child qdisc %i creation failed\n",
|
||||
dev->name, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue