Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6

+73 -18
+2 -1
drivers/net/wireless/airo.c
··· 2668 2668 dev->irq = ethdev->irq; 2669 2669 dev->base_addr = ethdev->base_addr; 2670 2670 dev->wireless_data = ethdev->wireless_data; 2671 + SET_NETDEV_DEV(dev, ethdev->dev.parent); 2671 2672 memcpy(dev->dev_addr, ethdev->dev_addr, dev->addr_len); 2672 2673 err = register_netdev(dev); 2673 2674 if (err<0) { ··· 2905 2904 2906 2905 static int waitbusy (struct airo_info *ai) { 2907 2906 int delay = 0; 2908 - while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) & (delay < 10000)) { 2907 + while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { 2909 2908 udelay (10); 2910 2909 if ((++delay % 20) == 0) 2911 2910 OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY);
+4 -5
drivers/net/wireless/hostap/hostap_hw.c
··· 3276 3276 } 3277 3277 printk(KERN_INFO "%s: Registered netdevice %s\n", dev_info, dev->name); 3278 3278 3279 - #ifndef PRISM2_NO_PROCFS_DEBUG 3280 - create_proc_read_entry("registers", 0, local->proc, 3281 - prism2_registers_proc_read, local); 3282 - #endif /* PRISM2_NO_PROCFS_DEBUG */ 3283 - 3284 3279 hostap_init_data(local); 3285 3280 return dev; 3286 3281 ··· 3302 3307 netif_carrier_off(local->ddev); 3303 3308 } 3304 3309 hostap_init_proc(local); 3310 + #ifndef PRISM2_NO_PROCFS_DEBUG 3311 + create_proc_read_entry("registers", 0, local->proc, 3312 + prism2_registers_proc_read, local); 3313 + #endif /* PRISM2_NO_PROCFS_DEBUG */ 3305 3314 hostap_init_ap_proc(local); 3306 3315 return 0; 3307 3316 }
+1
drivers/net/wireless/ipw2200.c
··· 11584 11584 priv->prom_net_dev->hard_start_xmit = ipw_prom_hard_start_xmit; 11585 11585 11586 11586 priv->prom_priv->ieee->iw_mode = IW_MODE_MONITOR; 11587 + SET_NETDEV_DEV(priv->prom_net_dev, &priv->pci_dev->dev); 11587 11588 11588 11589 rc = register_netdev(priv->prom_net_dev); 11589 11590 if (rc) {
+2
drivers/net/wireless/libertas/main.c
··· 756 756 priv->nr_retries = 0; 757 757 } else { 758 758 priv->cur_cmd = NULL; 759 + priv->dnld_sent = DNLD_RES_RECEIVED; 759 760 lbs_pr_info("requeueing command %x due to timeout (#%d)\n", 760 761 le16_to_cpu(cmdnode->cmdbuf->command), priv->nr_retries); 761 762 ··· 1565 1564 rtap_dev->hard_start_xmit = lbs_rtap_hard_start_xmit; 1566 1565 rtap_dev->set_multicast_list = lbs_set_multicast_list; 1567 1566 rtap_dev->priv = priv; 1567 + SET_NETDEV_DEV(rtap_dev, priv->dev->dev.parent); 1568 1568 1569 1569 ret = register_netdev(rtap_dev); 1570 1570 if (ret) {
+23 -2
include/net/mac80211.h
··· 1594 1594 void ieee80211_scan_completed(struct ieee80211_hw *hw); 1595 1595 1596 1596 /** 1597 - * ieee80211_iterate_active_interfaces - iterate active interfaces 1597 + * ieee80211_iterate_active_interfaces- iterate active interfaces 1598 1598 * 1599 1599 * This function iterates over the interfaces associated with a given 1600 1600 * hardware that are currently active and calls the callback for them. 1601 + * This function allows the iterator function to sleep, when the iterator 1602 + * function is atomic @ieee80211_iterate_active_interfaces_atomic can 1603 + * be used. 1601 1604 * 1602 1605 * @hw: the hardware struct of which the interfaces should be iterated over 1603 - * @iterator: the iterator function to call, cannot sleep 1606 + * @iterator: the iterator function to call 1604 1607 * @data: first argument of the iterator function 1605 1608 */ 1606 1609 void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw, 1607 1610 void (*iterator)(void *data, u8 *mac, 1608 1611 struct ieee80211_vif *vif), 1609 1612 void *data); 1613 + 1614 + /** 1615 + * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces 1616 + * 1617 + * This function iterates over the interfaces associated with a given 1618 + * hardware that are currently active and calls the callback for them. 1619 + * This function requires the iterator callback function to be atomic, 1620 + * if that is not desired, use @ieee80211_iterate_active_interfaces instead. 1621 + * 1622 + * @hw: the hardware struct of which the interfaces should be iterated over 1623 + * @iterator: the iterator function to call, cannot sleep 1624 + * @data: first argument of the iterator function 1625 + */ 1626 + void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw, 1627 + void (*iterator)(void *data, 1628 + u8 *mac, 1629 + struct ieee80211_vif *vif), 1630 + void *data); 1610 1631 1611 1632 /** 1612 1633 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
+5 -9
net/mac80211/mlme.c
··· 3446 3446 struct ieee80211_sta_bss *bss, *selected = NULL; 3447 3447 int top_rssi = 0, freq; 3448 3448 3449 - if (!(ifsta->flags & (IEEE80211_STA_AUTO_SSID_SEL | 3450 - IEEE80211_STA_AUTO_BSSID_SEL | IEEE80211_STA_AUTO_CHANNEL_SEL))) { 3451 - ifsta->state = IEEE80211_AUTHENTICATE; 3452 - ieee80211_sta_reset_auth(dev, ifsta); 3453 - return 0; 3454 - } 3455 - 3456 3449 spin_lock_bh(&local->sta_bss_lock); 3457 3450 freq = local->oper_channel->center_freq; 3458 3451 list_for_each_entry(bss, &local->sta_bss_list, list) { 3459 3452 if (!(bss->capability & WLAN_CAPABILITY_ESS)) 3460 3453 continue; 3461 3454 3462 - if (!!(bss->capability & WLAN_CAPABILITY_PRIVACY) ^ 3463 - !!sdata->default_key) 3455 + if ((ifsta->flags & (IEEE80211_STA_AUTO_SSID_SEL | 3456 + IEEE80211_STA_AUTO_BSSID_SEL | 3457 + IEEE80211_STA_AUTO_CHANNEL_SEL)) && 3458 + (!!(bss->capability & WLAN_CAPABILITY_PRIVACY) ^ 3459 + !!sdata->default_key)) 3464 3460 continue; 3465 3461 3466 3462 if (!(ifsta->flags & IEEE80211_STA_AUTO_CHANNEL_SEL) &&
+36 -1
net/mac80211/util.c
··· 389 389 struct ieee80211_local *local = hw_to_local(hw); 390 390 struct ieee80211_sub_if_data *sdata; 391 391 392 + rtnl_lock(); 393 + 394 + list_for_each_entry(sdata, &local->interfaces, list) { 395 + switch (sdata->vif.type) { 396 + case IEEE80211_IF_TYPE_INVALID: 397 + case IEEE80211_IF_TYPE_MNTR: 398 + case IEEE80211_IF_TYPE_VLAN: 399 + continue; 400 + case IEEE80211_IF_TYPE_AP: 401 + case IEEE80211_IF_TYPE_STA: 402 + case IEEE80211_IF_TYPE_IBSS: 403 + case IEEE80211_IF_TYPE_WDS: 404 + case IEEE80211_IF_TYPE_MESH_POINT: 405 + break; 406 + } 407 + if (sdata->dev == local->mdev) 408 + continue; 409 + if (netif_running(sdata->dev)) 410 + iterator(data, sdata->dev->dev_addr, 411 + &sdata->vif); 412 + } 413 + 414 + rtnl_unlock(); 415 + } 416 + EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces); 417 + 418 + void ieee80211_iterate_active_interfaces_atomic( 419 + struct ieee80211_hw *hw, 420 + void (*iterator)(void *data, u8 *mac, 421 + struct ieee80211_vif *vif), 422 + void *data) 423 + { 424 + struct ieee80211_local *local = hw_to_local(hw); 425 + struct ieee80211_sub_if_data *sdata; 426 + 392 427 rcu_read_lock(); 393 428 394 429 list_for_each_entry_rcu(sdata, &local->interfaces, list) { ··· 448 413 449 414 rcu_read_unlock(); 450 415 } 451 - EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces); 416 + EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic);