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 int addr, eep_start_loc; 38 eep_data = (u16 *)eep; 39 40 - if (ah->hw_version.devid == 0x7015) 41 eep_start_loc = AR9287_HTC_EEP_START_LOC; 42 else 43 eep_start_loc = AR9287_EEP_START_LOC;
··· 37 int addr, eep_start_loc; 38 eep_data = (u16 *)eep; 39 40 + if (AR9287_HTC_DEVID(ah)) 41 eep_start_loc = AR9287_HTC_EEP_START_LOC; 42 else 43 eep_start_loc = AR9287_EEP_START_LOC;
+9
drivers/net/wireless/ath/ath9k/hif_usb.c
··· 36 { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */ 37 { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */ 38 { USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */ 39 { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ 40 { USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */ 41 { }, 42 }; 43 ··· 811 case 0x7010: 812 case 0x7015: 813 case 0x9018: 814 firm_offset = AR7010_FIRMWARE_TEXT; 815 break; 816 default: ··· 935 case 0x7010: 936 case 0x7015: 937 case 0x9018: 938 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) 939 hif_dev->fw_name = FIRMWARE_AR7010_1_1; 940 else
··· 36 { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */ 37 { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */ 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 */ 42 { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ 43 { USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */ 44 + { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ 45 + { USB_DEVICE(0x1668, 0x1200) }, /* Verizon */ 46 { }, 47 }; 48 ··· 806 case 0x7010: 807 case 0x7015: 808 case 0x9018: 809 + case 0xA704: 810 + case 0x1200: 811 firm_offset = AR7010_FIRMWARE_TEXT; 812 break; 813 default: ··· 928 case 0x7010: 929 case 0x7015: 930 case 0x9018: 931 + case 0xA704: 932 + case 0x1200: 933 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) 934 hif_dev->fw_name = FIRMWARE_AR7010_1_1; 935 else
+2
drivers/net/wireless/ath/ath9k/htc_drv_init.c
··· 249 case 0x7010: 250 case 0x7015: 251 case 0x9018: 252 priv->htc->credits = 45; 253 break; 254 default:
··· 249 case 0x7010: 250 case 0x7015: 251 case 0x9018: 252 + case 0xA704: 253 + case 0x1200: 254 priv->htc->credits = 45; 255 break; 256 default:
+1 -1
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
··· 121 tx_hdr.data_type = ATH9K_HTC_NORMAL; 122 } 123 124 - if (ieee80211_is_data(fc)) { 125 qc = ieee80211_get_qos_ctl(hdr); 126 tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK; 127 }
··· 121 tx_hdr.data_type = ATH9K_HTC_NORMAL; 122 } 123 124 + if (ieee80211_is_data_qos(fc)) { 125 qc = ieee80211_get_qos_ctl(hdr); 126 tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK; 127 }
+1 -2
drivers/net/wireless/ath/ath9k/init.c
··· 817 818 ath9k_ps_wakeup(sc); 819 820 - pm_qos_remove_request(&ath9k_pm_qos_req); 821 - 822 wiphy_rfkill_stop_polling(sc->hw->wiphy); 823 ath_deinit_leds(sc); 824 ··· 830 } 831 832 ieee80211_unregister_hw(hw); 833 ath_rx_cleanup(sc); 834 ath_tx_cleanup(sc); 835 ath9k_deinit_softc(sc);
··· 817 818 ath9k_ps_wakeup(sc); 819 820 wiphy_rfkill_stop_polling(sc->hw->wiphy); 821 ath_deinit_leds(sc); 822 ··· 832 } 833 834 ieee80211_unregister_hw(hw); 835 + pm_qos_remove_request(&ath9k_pm_qos_req); 836 ath_rx_cleanup(sc); 837 ath_tx_cleanup(sc); 838 ath9k_deinit_softc(sc);
+7 -1
drivers/net/wireless/ath/ath9k/reg.h
··· 866 #define AR_DEVID_7010(_ah) \ 867 (((_ah)->hw_version.devid == 0x7010) || \ 868 ((_ah)->hw_version.devid == 0x7015) || \ 869 - ((_ah)->hw_version.devid == 0x9018)) 870 871 #define AR_RADIO_SREV_MAJOR 0xf0 872 #define AR_RAD5133_SREV_MAJOR 0xc0
··· 866 #define AR_DEVID_7010(_ah) \ 867 (((_ah)->hw_version.devid == 0x7010) || \ 868 ((_ah)->hw_version.devid == 0x7015) || \ 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)) 876 877 #define AR_RADIO_SREV_MAJOR 0xf0 878 #define AR_RAD5133_SREV_MAJOR 0xc0
+2 -2
drivers/net/wireless/ath/carl9170/usb.c
··· 553 usb_free_urb(urb); 554 } 555 556 - ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, HZ); 557 if (ret == 0) 558 err = -ETIMEDOUT; 559 560 /* lets wait a while until the tx - queues are dried out */ 561 - ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, HZ); 562 if (ret == 0) 563 err = -ETIMEDOUT; 564
··· 553 usb_free_urb(urb); 554 } 555 556 + ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, 1000); 557 if (ret == 0) 558 err = -ETIMEDOUT; 559 560 /* lets wait a while until the tx - queues are dried out */ 561 + ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, 1000); 562 if (ret == 0) 563 err = -ETIMEDOUT; 564
+1 -1
include/net/cfg80211.h
··· 1355 WIPHY_FLAG_4ADDR_AP = BIT(5), 1356 WIPHY_FLAG_4ADDR_STATION = BIT(6), 1357 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), 1358 - WIPHY_FLAG_IBSS_RSN = BIT(7), 1359 }; 1360 1361 struct mac_address {
··· 1355 WIPHY_FLAG_4ADDR_AP = BIT(5), 1356 WIPHY_FLAG_4ADDR_STATION = BIT(6), 1357 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), 1358 + WIPHY_FLAG_IBSS_RSN = BIT(8), 1359 }; 1360 1361 struct mac_address {
+54
net/wireless/chan.c
··· 44 return chan; 45 } 46 47 int cfg80211_set_freq(struct cfg80211_registered_device *rdev, 48 struct wireless_dev *wdev, int freq, 49 enum nl80211_channel_type channel_type) ··· 99 chan = rdev_freq_to_chan(rdev, freq, channel_type); 100 if (!chan) 101 return -EINVAL; 102 103 result = rdev->ops->set_channel(&rdev->wiphy, 104 wdev ? wdev->netdev : NULL,
··· 44 return chan; 45 } 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 + 79 int cfg80211_set_freq(struct cfg80211_registered_device *rdev, 80 struct wireless_dev *wdev, int freq, 81 enum nl80211_channel_type channel_type) ··· 67 chan = rdev_freq_to_chan(rdev, freq, channel_type); 68 if (!chan) 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 + } 92 93 result = rdev->ops->set_channel(&rdev->wiphy, 94 wdev ? wdev->netdev : NULL,