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

Merge branch 'master' of ssh://infradead/~/public_git/wireless into for-davem

+98 -59
+6
drivers/bluetooth/btusb.c
··· 72 72 /* Apple MacBookAir3,1, MacBookAir3,2 */ 73 73 { USB_DEVICE(0x05ac, 0x821b) }, 74 74 75 + /* Apple MacBookAir4,1 */ 76 + { USB_DEVICE(0x05ac, 0x821f) }, 77 + 75 78 /* Apple MacBookPro8,2 */ 76 79 { USB_DEVICE(0x05ac, 0x821a) }, 80 + 81 + /* Apple MacMini5,1 */ 82 + { USB_DEVICE(0x05ac, 0x8281) }, 77 83 78 84 /* AVM BlueFRITZ! USB v2.0 */ 79 85 { USB_DEVICE(0x057c, 0x3800) },
+8 -8
drivers/bluetooth/btwilink.c
··· 125 125 /* protocol structure registered with shared transport */ 126 126 static struct st_proto_s ti_st_proto[MAX_BT_CHNL_IDS] = { 127 127 { 128 + .chnl_id = HCI_EVENT_PKT, /* HCI Events */ 129 + .hdr_len = sizeof(struct hci_event_hdr), 130 + .offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), 131 + .len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ 132 + .reserve = 8, 133 + }, 134 + { 128 135 .chnl_id = HCI_ACLDATA_PKT, /* ACL */ 129 136 .hdr_len = sizeof(struct hci_acl_hdr), 130 137 .offset_len_in_hdr = offsetof(struct hci_acl_hdr, dlen), ··· 143 136 .hdr_len = sizeof(struct hci_sco_hdr), 144 137 .offset_len_in_hdr = offsetof(struct hci_sco_hdr, dlen), 145 138 .len_size = 1, /* sizeof(dlen) in struct hci_sco_hdr */ 146 - .reserve = 8, 147 - }, 148 - { 149 - .chnl_id = HCI_EVENT_PKT, /* HCI Events */ 150 - .hdr_len = sizeof(struct hci_event_hdr), 151 - .offset_len_in_hdr = offsetof(struct hci_event_hdr, plen), 152 - .len_size = 1, /* sizeof(plen) in struct hci_event_hdr */ 153 139 .reserve = 8, 154 140 }, 155 141 }; ··· 240 240 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) 241 241 return 0; 242 242 243 - for (i = 0; i < MAX_BT_CHNL_IDS; i++) { 243 + for (i = MAX_BT_CHNL_IDS-1; i >= 0; i--) { 244 244 err = st_unregister(&ti_st_proto[i]); 245 245 if (err) 246 246 BT_ERR("st_unregister(%d) failed with error %d",
+2 -1
drivers/net/wireless/b43/main.c
··· 1632 1632 u32 cmd, beacon0_valid, beacon1_valid; 1633 1633 1634 1634 if (!b43_is_mode(wl, NL80211_IFTYPE_AP) && 1635 - !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT)) 1635 + !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT) && 1636 + !b43_is_mode(wl, NL80211_IFTYPE_ADHOC)) 1636 1637 return; 1637 1638 1638 1639 /* This is the bottom half of the asynchronous beacon update. */
+14 -7
drivers/net/wireless/ipw2x00/ipw2100.c
··· 1903 1903 static int ipw2100_net_init(struct net_device *dev) 1904 1904 { 1905 1905 struct ipw2100_priv *priv = libipw_priv(dev); 1906 + 1907 + return ipw2100_up(priv, 1); 1908 + } 1909 + 1910 + static int ipw2100_wdev_init(struct net_device *dev) 1911 + { 1912 + struct ipw2100_priv *priv = libipw_priv(dev); 1906 1913 const struct libipw_geo *geo = libipw_get_geo(priv->ieee); 1907 1914 struct wireless_dev *wdev = &priv->ieee->wdev; 1908 - int ret; 1909 1915 int i; 1910 - 1911 - ret = ipw2100_up(priv, 1); 1912 - if (ret) 1913 - return ret; 1914 1916 1915 1917 memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); 1916 1918 ··· 6352 6350 "Error calling register_netdev.\n"); 6353 6351 goto fail; 6354 6352 } 6353 + registered = 1; 6354 + 6355 + err = ipw2100_wdev_init(dev); 6356 + if (err) 6357 + goto fail; 6355 6358 6356 6359 mutex_lock(&priv->action_mutex); 6357 - registered = 1; 6358 6360 6359 6361 IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); 6360 6362 ··· 6395 6389 6396 6390 fail_unlock: 6397 6391 mutex_unlock(&priv->action_mutex); 6398 - 6392 + wiphy_unregister(priv->ieee->wdev.wiphy); 6393 + kfree(priv->ieee->bg_band.channels); 6399 6394 fail: 6400 6395 if (dev) { 6401 6396 if (registered)
+26 -13
drivers/net/wireless/ipw2x00/ipw2200.c
··· 11425 11425 /* Called by register_netdev() */ 11426 11426 static int ipw_net_init(struct net_device *dev) 11427 11427 { 11428 + int rc = 0; 11429 + struct ipw_priv *priv = libipw_priv(dev); 11430 + 11431 + mutex_lock(&priv->mutex); 11432 + if (ipw_up(priv)) 11433 + rc = -EIO; 11434 + mutex_unlock(&priv->mutex); 11435 + 11436 + return rc; 11437 + } 11438 + 11439 + static int ipw_wdev_init(struct net_device *dev) 11440 + { 11428 11441 int i, rc = 0; 11429 11442 struct ipw_priv *priv = libipw_priv(dev); 11430 11443 const struct libipw_geo *geo = libipw_get_geo(priv->ieee); 11431 11444 struct wireless_dev *wdev = &priv->ieee->wdev; 11432 - mutex_lock(&priv->mutex); 11433 - 11434 - if (ipw_up(priv)) { 11435 - rc = -EIO; 11436 - goto out; 11437 - } 11438 11445 11439 11446 memcpy(wdev->wiphy->perm_addr, priv->mac_addr, ETH_ALEN); 11440 11447 ··· 11526 11519 set_wiphy_dev(wdev->wiphy, &priv->pci_dev->dev); 11527 11520 11528 11521 /* With that information in place, we can now register the wiphy... */ 11529 - if (wiphy_register(wdev->wiphy)) { 11522 + if (wiphy_register(wdev->wiphy)) 11530 11523 rc = -EIO; 11531 - goto out; 11532 - } 11533 - 11534 11524 out: 11535 - mutex_unlock(&priv->mutex); 11536 11525 return rc; 11537 11526 } 11538 11527 ··· 11835 11832 goto out_remove_sysfs; 11836 11833 } 11837 11834 11835 + err = ipw_wdev_init(net_dev); 11836 + if (err) { 11837 + IPW_ERROR("failed to register wireless device\n"); 11838 + goto out_unregister_netdev; 11839 + } 11840 + 11838 11841 #ifdef CONFIG_IPW2200_PROMISCUOUS 11839 11842 if (rtap_iface) { 11840 11843 err = ipw_prom_alloc(priv); 11841 11844 if (err) { 11842 11845 IPW_ERROR("Failed to register promiscuous network " 11843 11846 "device (error %d).\n", err); 11844 - unregister_netdev(priv->net_dev); 11845 - goto out_remove_sysfs; 11847 + wiphy_unregister(priv->ieee->wdev.wiphy); 11848 + kfree(priv->ieee->a_band.channels); 11849 + kfree(priv->ieee->bg_band.channels); 11850 + goto out_unregister_netdev; 11846 11851 } 11847 11852 } 11848 11853 #endif ··· 11862 11851 11863 11852 return 0; 11864 11853 11854 + out_unregister_netdev: 11855 + unregister_netdev(priv->net_dev); 11865 11856 out_remove_sysfs: 11866 11857 sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group); 11867 11858 out_release_irq:
+5
drivers/net/wireless/iwlwifi/iwl-agn.c
··· 2140 2140 IEEE80211_HW_SPECTRUM_MGMT | 2141 2141 IEEE80211_HW_REPORTS_TX_ACK_STATUS; 2142 2142 2143 + /* 2144 + * Including the following line will crash some AP's. This 2145 + * workaround removes the stimulus which causes the crash until 2146 + * the AP software can be fixed. 2143 2147 hw->max_tx_aggregation_subframes = LINK_QUAL_AGG_FRAME_LIMIT_DEF; 2148 + */ 2144 2149 2145 2150 hw->flags |= IEEE80211_HW_SUPPORTS_PS | 2146 2151 IEEE80211_HW_SUPPORTS_DYNAMIC_PS;
+26 -21
drivers/net/wireless/rt2x00/rt2800lib.c
··· 3697 3697 rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, &reg); 3698 3698 3699 3699 /* Apparently the data is read from end to start */ 3700 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, 3701 - (u32 *)&rt2x00dev->eeprom[i]); 3702 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, 3703 - (u32 *)&rt2x00dev->eeprom[i + 2]); 3704 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, 3705 - (u32 *)&rt2x00dev->eeprom[i + 4]); 3706 - rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, 3707 - (u32 *)&rt2x00dev->eeprom[i + 6]); 3700 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, &reg); 3701 + /* The returned value is in CPU order, but eeprom is le */ 3702 + rt2x00dev->eeprom[i] = cpu_to_le32(reg); 3703 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, &reg); 3704 + *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg); 3705 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, &reg); 3706 + *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg); 3707 + rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, &reg); 3708 + *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg); 3708 3709 3709 3710 mutex_unlock(&rt2x00dev->csr_mutex); 3710 3711 } ··· 3871 3870 return -ENODEV; 3872 3871 } 3873 3872 3874 - if (!rt2x00_rf(rt2x00dev, RF2820) && 3875 - !rt2x00_rf(rt2x00dev, RF2850) && 3876 - !rt2x00_rf(rt2x00dev, RF2720) && 3877 - !rt2x00_rf(rt2x00dev, RF2750) && 3878 - !rt2x00_rf(rt2x00dev, RF3020) && 3879 - !rt2x00_rf(rt2x00dev, RF2020) && 3880 - !rt2x00_rf(rt2x00dev, RF3021) && 3881 - !rt2x00_rf(rt2x00dev, RF3022) && 3882 - !rt2x00_rf(rt2x00dev, RF3052) && 3883 - !rt2x00_rf(rt2x00dev, RF3320) && 3884 - !rt2x00_rf(rt2x00dev, RF5370) && 3885 - !rt2x00_rf(rt2x00dev, RF5390)) { 3886 - ERROR(rt2x00dev, "Invalid RF chipset detected.\n"); 3873 + switch (rt2x00dev->chip.rf) { 3874 + case RF2820: 3875 + case RF2850: 3876 + case RF2720: 3877 + case RF2750: 3878 + case RF3020: 3879 + case RF2020: 3880 + case RF3021: 3881 + case RF3022: 3882 + case RF3052: 3883 + case RF3320: 3884 + case RF5370: 3885 + case RF5390: 3886 + break; 3887 + default: 3888 + ERROR(rt2x00dev, "Invalid RF chipset 0x%x detected.\n", 3889 + rt2x00dev->chip.rf); 3887 3890 return -ENODEV; 3888 3891 } 3889 3892
+8 -9
net/bluetooth/hci_event.c
··· 58 58 if (status) 59 59 return; 60 60 61 - if (test_bit(HCI_MGMT, &hdev->flags) && 62 - test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) 61 + if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && 62 + test_bit(HCI_MGMT, &hdev->flags)) 63 63 mgmt_discovering(hdev->id, 0); 64 64 65 65 hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status); ··· 76 76 if (status) 77 77 return; 78 78 79 - if (test_bit(HCI_MGMT, &hdev->flags) && 80 - test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) 79 + if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && 80 + test_bit(HCI_MGMT, &hdev->flags)) 81 81 mgmt_discovering(hdev->id, 0); 82 82 83 83 hci_conn_check_pending(hdev); ··· 959 959 return; 960 960 } 961 961 962 - if (test_bit(HCI_MGMT, &hdev->flags) && 963 - !test_and_set_bit(HCI_INQUIRY, 964 - &hdev->flags)) 962 + if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags) && 963 + test_bit(HCI_MGMT, &hdev->flags)) 965 964 mgmt_discovering(hdev->id, 1); 966 965 } 967 966 ··· 1339 1340 1340 1341 BT_DBG("%s status %d", hdev->name, status); 1341 1342 1342 - if (test_bit(HCI_MGMT, &hdev->flags) && 1343 - test_and_clear_bit(HCI_INQUIRY, &hdev->flags)) 1343 + if (test_and_clear_bit(HCI_INQUIRY, &hdev->flags) && 1344 + test_bit(HCI_MGMT, &hdev->flags)) 1344 1345 mgmt_discovering(hdev->id, 0); 1345 1346 1346 1347 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
+1
net/wireless/reg.c
··· 852 852 return; 853 853 } 854 854 855 + chan->beacon_found = false; 855 856 chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); 856 857 chan->max_antenna_gain = min(chan->orig_mag, 857 858 (int) MBI_TO_DBI(power_rule->max_antenna_gain));
+2
net/wireless/sme.c
··· 118 118 i++, j++) 119 119 request->channels[i] = 120 120 &wdev->wiphy->bands[band]->channels[j]; 121 + request->rates[band] = 122 + (1 << wdev->wiphy->bands[band]->n_bitrates) - 1; 121 123 } 122 124 } 123 125 request->n_channels = n_channels;