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

+78 -8
+1 -1
drivers/net/wireless/ath/ath9k/eeprom_9287.c
··· 37 37 int addr, eep_start_loc; 38 38 eep_data = (u16 *)eep; 39 39 40 - if (ah->hw_version.devid == 0x7015) 40 + if (AR9287_HTC_DEVID(ah)) 41 41 eep_start_loc = AR9287_HTC_EEP_START_LOC; 42 42 else 43 43 eep_start_loc = AR9287_EEP_START_LOC;
+9
drivers/net/wireless/ath/ath9k/hif_usb.c
··· 36 36 { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */ 37 37 { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */ 38 38 { USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */ 39 + { USB_DEVICE(0x13D3, 0x3348) }, /* Azurewave */ 40 + { USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */ 41 + { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */ 39 42 { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ 40 43 { USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */ 44 + { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ 45 + { USB_DEVICE(0x1668, 0x1200) }, /* Verizon */ 41 46 { }, 42 47 }; 43 48 ··· 811 806 case 0x7010: 812 807 case 0x7015: 813 808 case 0x9018: 809 + case 0xA704: 810 + case 0x1200: 814 811 firm_offset = AR7010_FIRMWARE_TEXT; 815 812 break; 816 813 default: ··· 935 928 case 0x7010: 936 929 case 0x7015: 937 930 case 0x9018: 931 + case 0xA704: 932 + case 0x1200: 938 933 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) 939 934 hif_dev->fw_name = FIRMWARE_AR7010_1_1; 940 935 else
+2
drivers/net/wireless/ath/ath9k/htc_drv_init.c
··· 249 249 case 0x7010: 250 250 case 0x7015: 251 251 case 0x9018: 252 + case 0xA704: 253 + case 0x1200: 252 254 priv->htc->credits = 45; 253 255 break; 254 256 default:
+1 -1
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
··· 121 121 tx_hdr.data_type = ATH9K_HTC_NORMAL; 122 122 } 123 123 124 - if (ieee80211_is_data(fc)) { 124 + if (ieee80211_is_data_qos(fc)) { 125 125 qc = ieee80211_get_qos_ctl(hdr); 126 126 tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK; 127 127 }
+1 -2
drivers/net/wireless/ath/ath9k/init.c
··· 817 817 818 818 ath9k_ps_wakeup(sc); 819 819 820 - pm_qos_remove_request(&ath9k_pm_qos_req); 821 - 822 820 wiphy_rfkill_stop_polling(sc->hw->wiphy); 823 821 ath_deinit_leds(sc); 824 822 ··· 830 832 } 831 833 832 834 ieee80211_unregister_hw(hw); 835 + pm_qos_remove_request(&ath9k_pm_qos_req); 833 836 ath_rx_cleanup(sc); 834 837 ath_tx_cleanup(sc); 835 838 ath9k_deinit_softc(sc);
+7 -1
drivers/net/wireless/ath/ath9k/reg.h
··· 866 866 #define AR_DEVID_7010(_ah) \ 867 867 (((_ah)->hw_version.devid == 0x7010) || \ 868 868 ((_ah)->hw_version.devid == 0x7015) || \ 869 - ((_ah)->hw_version.devid == 0x9018)) 869 + ((_ah)->hw_version.devid == 0x9018) || \ 870 + ((_ah)->hw_version.devid == 0xA704) || \ 871 + ((_ah)->hw_version.devid == 0x1200)) 872 + 873 + #define AR9287_HTC_DEVID(_ah) \ 874 + (((_ah)->hw_version.devid == 0x7015) || \ 875 + ((_ah)->hw_version.devid == 0x1200)) 870 876 871 877 #define AR_RADIO_SREV_MAJOR 0xf0 872 878 #define AR_RAD5133_SREV_MAJOR 0xc0
+2 -2
drivers/net/wireless/ath/carl9170/usb.c
··· 553 553 usb_free_urb(urb); 554 554 } 555 555 556 - ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, HZ); 556 + ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, 1000); 557 557 if (ret == 0) 558 558 err = -ETIMEDOUT; 559 559 560 560 /* lets wait a while until the tx - queues are dried out */ 561 - ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, HZ); 561 + ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, 1000); 562 562 if (ret == 0) 563 563 err = -ETIMEDOUT; 564 564
+1 -1
include/net/cfg80211.h
··· 1355 1355 WIPHY_FLAG_4ADDR_AP = BIT(5), 1356 1356 WIPHY_FLAG_4ADDR_STATION = BIT(6), 1357 1357 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), 1358 - WIPHY_FLAG_IBSS_RSN = BIT(7), 1358 + WIPHY_FLAG_IBSS_RSN = BIT(8), 1359 1359 }; 1360 1360 1361 1361 struct mac_address {
+54
net/wireless/chan.c
··· 44 44 return chan; 45 45 } 46 46 47 + static bool can_beacon_sec_chan(struct wiphy *wiphy, 48 + struct ieee80211_channel *chan, 49 + enum nl80211_channel_type channel_type) 50 + { 51 + struct ieee80211_channel *sec_chan; 52 + int diff; 53 + 54 + switch (channel_type) { 55 + case NL80211_CHAN_HT40PLUS: 56 + diff = 20; 57 + break; 58 + case NL80211_CHAN_HT40MINUS: 59 + diff = -20; 60 + break; 61 + default: 62 + return false; 63 + } 64 + 65 + sec_chan = ieee80211_get_channel(wiphy, chan->center_freq + diff); 66 + if (!sec_chan) 67 + return false; 68 + 69 + /* we'll need a DFS capability later */ 70 + if (sec_chan->flags & (IEEE80211_CHAN_DISABLED | 71 + IEEE80211_CHAN_PASSIVE_SCAN | 72 + IEEE80211_CHAN_NO_IBSS | 73 + IEEE80211_CHAN_RADAR)) 74 + return false; 75 + 76 + return true; 77 + } 78 + 47 79 int cfg80211_set_freq(struct cfg80211_registered_device *rdev, 48 80 struct wireless_dev *wdev, int freq, 49 81 enum nl80211_channel_type channel_type) ··· 99 67 chan = rdev_freq_to_chan(rdev, freq, channel_type); 100 68 if (!chan) 101 69 return -EINVAL; 70 + 71 + /* Both channels should be able to initiate communication */ 72 + if (wdev && (wdev->iftype == NL80211_IFTYPE_ADHOC || 73 + wdev->iftype == NL80211_IFTYPE_AP || 74 + wdev->iftype == NL80211_IFTYPE_AP_VLAN || 75 + wdev->iftype == NL80211_IFTYPE_MESH_POINT || 76 + wdev->iftype == NL80211_IFTYPE_P2P_GO)) { 77 + switch (channel_type) { 78 + case NL80211_CHAN_HT40PLUS: 79 + case NL80211_CHAN_HT40MINUS: 80 + if (!can_beacon_sec_chan(&rdev->wiphy, chan, 81 + channel_type)) { 82 + printk(KERN_DEBUG 83 + "cfg80211: Secondary channel not " 84 + "allowed to initiate communication\n"); 85 + return -EINVAL; 86 + } 87 + break; 88 + default: 89 + break; 90 + } 91 + } 102 92 103 93 result = rdev->ops->set_channel(&rdev->wiphy, 104 94 wdev ? wdev->netdev : NULL,