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

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

+199 -57
+5
drivers/bluetooth/btusb.c
··· 68 68 /* Apple MacBookPro6,2 */ 69 69 { USB_DEVICE(0x05ac, 0x8218) }, 70 70 71 + /* Apple MacBookAir3,1, MacBookAir3,2 */ 72 + { USB_DEVICE(0x05ac, 0x821b) }, 73 + 71 74 /* AVM BlueFRITZ! USB v2.0 */ 72 75 { USB_DEVICE(0x057c, 0x3800) }, 73 76 ··· 1031 1028 } 1032 1029 1033 1030 usb_set_intfdata(intf, data); 1031 + 1032 + usb_enable_autosuspend(interface_to_usbdev(intf)); 1034 1033 1035 1034 return 0; 1036 1035 }
+3
drivers/net/wireless/ath/ath9k/ar9002_hw.c
··· 410 410 val &= ~(AR_WA_BIT6 | AR_WA_BIT7); 411 411 } 412 412 413 + if (AR_SREV_9280(ah)) 414 + val |= AR_WA_BIT22; 415 + 413 416 if (AR_SREV_9285E_20(ah)) 414 417 val |= AR_WA_BIT23; 415 418
+1
drivers/net/wireless/ath/ath9k/ath9k.h
··· 657 657 } 658 658 659 659 extern struct ieee80211_ops ath9k_ops; 660 + extern struct pm_qos_request_list ath9k_pm_qos_req; 660 661 extern int modparam_nohwcrypt; 661 662 extern int led_blink; 662 663
+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;
+24 -16
drivers/net/wireless/ath/ath9k/hif_usb.c
··· 35 35 { USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */ 36 36 { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */ 37 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 */ 38 42 { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ 39 43 { USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */ 44 + { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ 45 + { USB_DEVICE(0x1668, 0x1200) }, /* Verizon */ 40 46 { }, 41 47 }; 42 48 ··· 546 540 return; 547 541 } 548 542 549 - usb_fill_int_urb(urb, hif_dev->udev, 543 + usb_fill_bulk_urb(urb, hif_dev->udev, 550 544 usb_rcvbulkpipe(hif_dev->udev, 551 545 USB_REG_IN_PIPE), 552 546 nskb->data, MAX_REG_IN_BUF_SIZE, 553 - ath9k_hif_usb_reg_in_cb, nskb, 1); 547 + ath9k_hif_usb_reg_in_cb, nskb); 554 548 555 549 ret = usb_submit_urb(urb, GFP_ATOMIC); 556 550 if (ret) { ··· 726 720 if (!skb) 727 721 goto err; 728 722 729 - usb_fill_int_urb(hif_dev->reg_in_urb, hif_dev->udev, 723 + usb_fill_bulk_urb(hif_dev->reg_in_urb, hif_dev->udev, 730 724 usb_rcvbulkpipe(hif_dev->udev, 731 725 USB_REG_IN_PIPE), 732 726 skb->data, MAX_REG_IN_BUF_SIZE, 733 - ath9k_hif_usb_reg_in_cb, skb, 1); 727 + ath9k_hif_usb_reg_in_cb, skb); 734 728 735 729 if (usb_submit_urb(hif_dev->reg_in_urb, GFP_KERNEL) != 0) 736 730 goto err; ··· 811 805 case 0x7010: 812 806 case 0x7015: 813 807 case 0x9018: 808 + case 0xA704: 809 + case 0x1200: 814 810 firm_offset = AR7010_FIRMWARE_TEXT; 815 811 break; 816 812 default: ··· 851 843 goto err_fw_req; 852 844 } 853 845 854 - /* Alloc URBs */ 855 - ret = ath9k_hif_usb_alloc_urbs(hif_dev); 856 - if (ret) { 857 - dev_err(&hif_dev->udev->dev, 858 - "ath9k_htc: Unable to allocate URBs\n"); 859 - goto err_urb; 860 - } 861 - 862 846 /* Download firmware */ 863 847 ret = ath9k_hif_usb_download_fw(hif_dev); 864 848 if (ret) { ··· 866 866 */ 867 867 for (idx = 0; idx < alt->desc.bNumEndpoints; idx++) { 868 868 endp = &alt->endpoint[idx].desc; 869 - if (((endp->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK) 870 - == 0x04) && 871 - ((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) 872 - == USB_ENDPOINT_XFER_INT)) { 869 + if ((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) 870 + == USB_ENDPOINT_XFER_INT) { 873 871 endp->bmAttributes &= ~USB_ENDPOINT_XFERTYPE_MASK; 874 872 endp->bmAttributes |= USB_ENDPOINT_XFER_BULK; 875 873 endp->bInterval = 0; 876 874 } 875 + } 876 + 877 + /* Alloc URBs */ 878 + ret = ath9k_hif_usb_alloc_urbs(hif_dev); 879 + if (ret) { 880 + dev_err(&hif_dev->udev->dev, 881 + "ath9k_htc: Unable to allocate URBs\n"); 882 + goto err_urb; 877 883 } 878 884 879 885 return 0; ··· 935 929 case 0x7010: 936 930 case 0x7015: 937 931 case 0x9018: 932 + case 0xA704: 933 + case 0x1200: 938 934 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) 939 935 hif_dev->fw_name = FIRMWARE_AR7010_1_1; 940 936 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
··· 128 128 tx_hdr.data_type = ATH9K_HTC_NORMAL; 129 129 } 130 130 131 - if (ieee80211_is_data(fc)) { 131 + if (ieee80211_is_data_qos(fc)) { 132 132 qc = ieee80211_get_qos_ctl(hdr); 133 133 tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK; 134 134 }
+13 -2
drivers/net/wireless/ath/ath9k/hw.c
··· 479 479 ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL, 480 480 "Failed allocating banks for " 481 481 "external radio\n"); 482 + ath9k_hw_rf_free_ext_banks(ah); 482 483 return ecode; 483 484 } 484 485 ··· 948 947 REG_SET_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION); 949 948 break; 950 949 case NL80211_IFTYPE_STATION: 951 - case NL80211_IFTYPE_MONITOR: 952 950 REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE); 951 + break; 952 + default: 953 + if (ah->is_monitoring) 954 + REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE); 953 955 break; 954 956 } 955 957 } ··· 1633 1629 1634 1630 switch (ah->opmode) { 1635 1631 case NL80211_IFTYPE_STATION: 1636 - case NL80211_IFTYPE_MONITOR: 1637 1632 REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon)); 1638 1633 REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, 0xffff); 1639 1634 REG_WRITE(ah, AR_NEXT_SWBA, 0x7ffff); ··· 1661 1658 AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN; 1662 1659 break; 1663 1660 default: 1661 + if (ah->is_monitoring) { 1662 + REG_WRITE(ah, AR_NEXT_TBTT_TIMER, 1663 + TU_TO_USEC(next_beacon)); 1664 + REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, 0xffff); 1665 + REG_WRITE(ah, AR_NEXT_SWBA, 0x7ffff); 1666 + flags |= AR_TBTT_TIMER_EN; 1667 + break; 1668 + } 1664 1669 ath_print(ath9k_hw_common(ah), ATH_DBG_BEACON, 1665 1670 "%s: unsupported opmode: %d\n", 1666 1671 __func__, ah->opmode);
+1
drivers/net/wireless/ath/ath9k/hw.h
··· 665 665 666 666 bool sw_mgmt_crypto; 667 667 bool is_pciexpress; 668 + bool is_monitoring; 668 669 bool need_an_top2_fixup; 669 670 u16 tx_trig_level; 670 671
+7
drivers/net/wireless/ath/ath9k/init.c
··· 15 15 */ 16 16 17 17 #include <linux/slab.h> 18 + #include <linux/pm_qos_params.h> 18 19 19 20 #include "ath9k.h" 20 21 ··· 179 178 .read = ath9k_ioread32, 180 179 .write = ath9k_iowrite32, 181 180 }; 181 + 182 + struct pm_qos_request_list ath9k_pm_qos_req; 182 183 183 184 /**************************/ 184 185 /* Initialization */ ··· 756 753 ath_init_leds(sc); 757 754 ath_start_rfkill_poll(sc); 758 755 756 + pm_qos_add_request(&ath9k_pm_qos_req, PM_QOS_CPU_DMA_LATENCY, 757 + PM_QOS_DEFAULT_VALUE); 758 + 759 759 return 0; 760 760 761 761 error_world: ··· 827 821 } 828 822 829 823 ieee80211_unregister_hw(hw); 824 + pm_qos_remove_request(&ath9k_pm_qos_req); 830 825 ath_rx_cleanup(sc); 831 826 ath_tx_cleanup(sc); 832 827 ath9k_deinit_softc(sc);
+21 -8
drivers/net/wireless/ath/ath9k/main.c
··· 15 15 */ 16 16 17 17 #include <linux/nl80211.h> 18 + #include <linux/pm_qos_params.h> 18 19 #include "ath9k.h" 19 20 #include "btcoex.h" 20 21 ··· 94 93 { 95 94 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 96 95 unsigned long flags; 96 + enum ath9k_power_mode power_mode; 97 97 98 98 spin_lock_irqsave(&sc->sc_pm_lock, flags); 99 99 if (++sc->ps_usecount != 1) 100 100 goto unlock; 101 101 102 + power_mode = sc->sc_ah->power_mode; 102 103 ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); 103 104 104 105 /* ··· 108 105 * useful data. Better clear them now so that they don't mess up 109 106 * survey data results. 110 107 */ 111 - spin_lock(&common->cc_lock); 112 - ath_hw_cycle_counters_update(common); 113 - memset(&common->cc_survey, 0, sizeof(common->cc_survey)); 114 - spin_unlock(&common->cc_lock); 108 + if (power_mode != ATH9K_PM_AWAKE) { 109 + spin_lock(&common->cc_lock); 110 + ath_hw_cycle_counters_update(common); 111 + memset(&common->cc_survey, 0, sizeof(common->cc_survey)); 112 + spin_unlock(&common->cc_lock); 113 + } 115 114 116 115 unlock: 117 116 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); ··· 1162 1157 ah->imask |= ATH9K_INT_CST; 1163 1158 1164 1159 sc->sc_flags &= ~SC_OP_INVALID; 1160 + sc->sc_ah->is_monitoring = false; 1165 1161 1166 1162 /* Disable BMISS interrupt when we're not associated */ 1167 1163 ah->imask &= ~(ATH9K_INT_SWBA | ATH9K_INT_BMISS); ··· 1183 1177 if (ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE) 1184 1178 ath9k_btcoex_timer_resume(sc); 1185 1179 } 1180 + 1181 + pm_qos_update_request(&ath9k_pm_qos_req, 55); 1186 1182 1187 1183 mutex_unlock: 1188 1184 mutex_unlock(&sc->mutex); ··· 1339 1331 1340 1332 sc->sc_flags |= SC_OP_INVALID; 1341 1333 1334 + pm_qos_update_request(&ath9k_pm_qos_req, PM_QOS_DEFAULT_VALUE); 1335 + 1342 1336 mutex_unlock(&sc->mutex); 1343 1337 1344 1338 ath_print(common, ATH_DBG_CONFIG, "Driver halt\n"); ··· 1419 1409 ath9k_hw_set_interrupts(ah, ah->imask); 1420 1410 1421 1411 if (vif->type == NL80211_IFTYPE_AP || 1422 - vif->type == NL80211_IFTYPE_ADHOC || 1423 - vif->type == NL80211_IFTYPE_MONITOR) { 1412 + vif->type == NL80211_IFTYPE_ADHOC) { 1424 1413 sc->sc_flags |= SC_OP_ANI_RUN; 1425 1414 ath_start_ani(common); 1426 1415 } ··· 1569 1560 if (changed & IEEE80211_CONF_CHANGE_MONITOR) { 1570 1561 if (conf->flags & IEEE80211_CONF_MONITOR) { 1571 1562 ath_print(common, ATH_DBG_CONFIG, 1572 - "HW opmode set to Monitor mode\n"); 1573 - sc->sc_ah->opmode = NL80211_IFTYPE_MONITOR; 1563 + "Monitor mode is enabled\n"); 1564 + sc->sc_ah->is_monitoring = true; 1565 + } else { 1566 + ath_print(common, ATH_DBG_CONFIG, 1567 + "Monitor mode is disabled\n"); 1568 + sc->sc_ah->is_monitoring = false; 1574 1569 } 1575 1570 } 1576 1571
+3 -3
drivers/net/wireless/ath/ath9k/recv.c
··· 441 441 */ 442 442 if (((sc->sc_ah->opmode != NL80211_IFTYPE_AP) && 443 443 (sc->rx.rxfilter & FIF_PROMISC_IN_BSS)) || 444 - (sc->sc_ah->opmode == NL80211_IFTYPE_MONITOR)) 444 + (sc->sc_ah->is_monitoring)) 445 445 rfilt |= ATH9K_RX_FILTER_PROM; 446 446 447 447 if (sc->rx.rxfilter & FIF_CONTROL) ··· 518 518 bool stopped; 519 519 520 520 spin_lock_bh(&sc->rx.rxbuflock); 521 - ath9k_hw_stoppcurecv(ah); 521 + ath9k_hw_abortpcurecv(ah); 522 522 ath9k_hw_setrxfilter(ah, 0); 523 523 stopped = ath9k_hw_stopdmarecv(ah); 524 524 ··· 899 899 * decryption and MIC failures. For monitor mode, 900 900 * we also ignore the CRC error. 901 901 */ 902 - if (ah->opmode == NL80211_IFTYPE_MONITOR) { 902 + if (ah->is_monitoring) { 903 903 if (rx_stats->rs_status & 904 904 ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC | 905 905 ATH9K_RXERR_CRC))
+8 -1
drivers/net/wireless/ath/ath9k/reg.h
··· 703 703 #define AR_WA_RESET_EN (1 << 18) /* Sw Control to enable PCI-Reset to POR (bit 15) */ 704 704 #define AR_WA_ANALOG_SHIFT (1 << 20) 705 705 #define AR_WA_POR_SHORT (1 << 21) /* PCI-E Phy reset control */ 706 + #define AR_WA_BIT22 (1 << 22) 706 707 #define AR9285_WA_DEFAULT 0x004a050b 707 708 #define AR9280_WA_DEFAULT 0x0040073b 708 709 #define AR_WA_DEFAULT 0x0000073f ··· 866 865 #define AR_DEVID_7010(_ah) \ 867 866 (((_ah)->hw_version.devid == 0x7010) || \ 868 867 ((_ah)->hw_version.devid == 0x7015) || \ 869 - ((_ah)->hw_version.devid == 0x9018)) 868 + ((_ah)->hw_version.devid == 0x9018) || \ 869 + ((_ah)->hw_version.devid == 0xA704) || \ 870 + ((_ah)->hw_version.devid == 0x1200)) 871 + 872 + #define AR9287_HTC_DEVID(_ah) \ 873 + (((_ah)->hw_version.devid == 0x7015) || \ 874 + ((_ah)->hw_version.devid == 0x1200)) 870 875 871 876 #define AR_RADIO_SREV_MAJOR 0xf0 872 877 #define AR_RAD5133_SREV_MAJOR 0xc0
+1 -1
drivers/net/wireless/ath/carl9170/main.c
··· 663 663 } 664 664 665 665 unlock: 666 - if (err && (vif_id != -1)) { 666 + if (err && (vif_id >= 0)) { 667 667 vif_priv->active = false; 668 668 bitmap_release_region(&ar->vif_bitmap, vif_id, 0); 669 669 ar->vifs--;
+5 -3
drivers/net/wireless/ath/carl9170/usb.c
··· 82 82 { USB_DEVICE(0x07d1, 0x3c10) }, 83 83 /* D-Link DWA 160 A2 */ 84 84 { USB_DEVICE(0x07d1, 0x3a09) }, 85 + /* D-Link DWA 130 D */ 86 + { USB_DEVICE(0x07d1, 0x3a0f) }, 85 87 /* Netgear WNA1000 */ 86 88 { USB_DEVICE(0x0846, 0x9040) }, 87 - /* Netgear WNDA3100 */ 89 + /* Netgear WNDA3100 (v1) */ 88 90 { USB_DEVICE(0x0846, 0x9010) }, 89 91 /* Netgear WN111 v2 */ 90 92 { USB_DEVICE(0x0846, 0x9001), .driver_info = CARL9170_ONE_LED }, ··· 553 551 usb_free_urb(urb); 554 552 } 555 553 556 - ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, HZ); 554 + ret = usb_wait_anchor_empty_timeout(&ar->tx_cmd, 1000); 557 555 if (ret == 0) 558 556 err = -ETIMEDOUT; 559 557 560 558 /* lets wait a while until the tx - queues are dried out */ 561 - ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, HZ); 559 + ret = usb_wait_anchor_empty_timeout(&ar->tx_anch, 1000); 562 560 if (ret == 0) 563 561 err = -ETIMEDOUT; 564 562
+1
drivers/net/wireless/b43/sdio.c
··· 163 163 err_free_ssb: 164 164 kfree(sdio); 165 165 err_disable_func: 166 + sdio_claim_host(func); 166 167 sdio_disable_func(func); 167 168 err_release_host: 168 169 sdio_release_host(func);
+5 -4
drivers/net/wireless/ipw2x00/libipw_module.c
··· 54 54 55 55 #define DRV_DESCRIPTION "802.11 data/management/control stack" 56 56 #define DRV_NAME "libipw" 57 + #define DRV_PROCNAME "ieee80211" 57 58 #define DRV_VERSION LIBIPW_VERSION 58 59 #define DRV_COPYRIGHT "Copyright (C) 2004-2005 Intel Corporation <jketreno@linux.intel.com>" 59 60 ··· 294 293 struct proc_dir_entry *e; 295 294 296 295 libipw_debug_level = debug; 297 - libipw_proc = proc_mkdir("ieee80211", init_net.proc_net); 296 + libipw_proc = proc_mkdir(DRV_PROCNAME, init_net.proc_net); 298 297 if (libipw_proc == NULL) { 299 - LIBIPW_ERROR("Unable to create " DRV_NAME 298 + LIBIPW_ERROR("Unable to create " DRV_PROCNAME 300 299 " proc directory\n"); 301 300 return -EIO; 302 301 } 303 302 e = proc_create("debug_level", S_IRUGO | S_IWUSR, libipw_proc, 304 303 &debug_level_proc_fops); 305 304 if (!e) { 306 - remove_proc_entry(DRV_NAME, init_net.proc_net); 305 + remove_proc_entry(DRV_PROCNAME, init_net.proc_net); 307 306 libipw_proc = NULL; 308 307 return -EIO; 309 308 } ··· 320 319 #ifdef CONFIG_LIBIPW_DEBUG 321 320 if (libipw_proc) { 322 321 remove_proc_entry("debug_level", libipw_proc); 323 - remove_proc_entry(DRV_NAME, init_net.proc_net); 322 + remove_proc_entry(DRV_PROCNAME, init_net.proc_net); 324 323 libipw_proc = NULL; 325 324 } 326 325 #endif /* CONFIG_LIBIPW_DEBUG */
+2 -1
drivers/net/wireless/iwlwifi/iwl3945-base.c
··· 3997 3997 * "the hard way", rather than using device's scan. 3998 3998 */ 3999 3999 if (iwl3945_mod_params.disable_hw_scan) { 4000 - IWL_ERR(priv, "sw scan support is deprecated\n"); 4000 + dev_printk(KERN_DEBUG, &(pdev->dev), 4001 + "sw scan support is deprecated\n"); 4001 4002 iwl3945_hw_ops.hw_scan = NULL; 4002 4003 } 4003 4004
+3 -2
drivers/net/wireless/libertas/cfg.c
··· 698 698 699 699 if (priv->scan_channel < priv->scan_req->n_channels) { 700 700 cancel_delayed_work(&priv->scan_work); 701 - queue_delayed_work(priv->work_thread, &priv->scan_work, 702 - msecs_to_jiffies(300)); 701 + if (!priv->stopping) 702 + queue_delayed_work(priv->work_thread, &priv->scan_work, 703 + msecs_to_jiffies(300)); 703 704 } 704 705 705 706 /* This is the final data we are about to send */
+1
drivers/net/wireless/libertas/dev.h
··· 36 36 /* CFG80211 */ 37 37 struct wireless_dev *wdev; 38 38 bool wiphy_registered; 39 + bool stopping; 39 40 struct cfg80211_scan_request *scan_req; 40 41 u8 assoc_bss[ETH_ALEN]; 41 42 u8 disassoc_reason;
+7
drivers/net/wireless/libertas/main.c
··· 104 104 lbs_deb_enter(LBS_DEB_NET); 105 105 106 106 spin_lock_irq(&priv->driver_lock); 107 + priv->stopping = false; 107 108 108 109 if (priv->connect_status == LBS_CONNECTED) 109 110 netif_carrier_on(dev); ··· 132 131 lbs_deb_enter(LBS_DEB_NET); 133 132 134 133 spin_lock_irq(&priv->driver_lock); 134 + priv->stopping = true; 135 135 netif_stop_queue(dev); 136 136 spin_unlock_irq(&priv->driver_lock); 137 137 138 138 schedule_work(&priv->mcast_work); 139 + cancel_delayed_work_sync(&priv->scan_work); 140 + if (priv->scan_req) { 141 + cfg80211_scan_done(priv->scan_req, false); 142 + priv->scan_req = NULL; 143 + } 139 144 140 145 lbs_deb_leave(LBS_DEB_NET); 141 146 return 0;
+1
drivers/ssb/b43_pci_bridge.c
··· 24 24 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4312) }, 25 25 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4315) }, 26 26 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4318) }, 27 + { PCI_DEVICE(PCI_VENDOR_ID_BCM_GVC, 0x4318) }, 27 28 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4319) }, 28 29 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4320) }, 29 30 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4321) },
+1
include/linux/pci_ids.h
··· 2047 2047 #define PCI_DEVICE_ID_AFAVLAB_P030 0x2182 2048 2048 #define PCI_SUBDEVICE_ID_AFAVLAB_P061 0x2150 2049 2049 2050 + #define PCI_VENDOR_ID_BCM_GVC 0x14a4 2050 2051 #define PCI_VENDOR_ID_BROADCOM 0x14e4 2051 2052 #define PCI_DEVICE_ID_TIGON3_5752 0x1600 2052 2053 #define PCI_DEVICE_ID_TIGON3_5752M 0x1601
+1 -1
include/net/cfg80211.h
··· 1361 1361 WIPHY_FLAG_4ADDR_AP = BIT(5), 1362 1362 WIPHY_FLAG_4ADDR_STATION = BIT(6), 1363 1363 WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), 1364 - WIPHY_FLAG_IBSS_RSN = BIT(7), 1364 + WIPHY_FLAG_IBSS_RSN = BIT(8), 1365 1365 }; 1366 1366 1367 1367 struct mac_address {
+1
include/net/dst_ops.h
··· 2 2 #define _NET_DST_OPS_H 3 3 #include <linux/types.h> 4 4 #include <linux/percpu_counter.h> 5 + #include <linux/cache.h> 5 6 6 7 struct dst_entry; 7 8 struct kmem_cachep;
+6
net/bluetooth/hci_event.c
··· 1175 1175 hci_send_cmd(hdev, 1176 1176 HCI_OP_READ_REMOTE_EXT_FEATURES, 1177 1177 sizeof(cp), &cp); 1178 + } else if (!ev->status && conn->out && 1179 + conn->sec_level == BT_SECURITY_HIGH) { 1180 + struct hci_cp_auth_requested cp; 1181 + cp.handle = ev->handle; 1182 + hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, 1183 + sizeof(cp), &cp); 1178 1184 } else { 1179 1185 conn->state = BT_CONNECTED; 1180 1186 hci_proto_connect_cfm(conn, ev->status);
+1 -1
net/bluetooth/hidp/Kconfig
··· 1 1 config BT_HIDP 2 2 tristate "HIDP protocol support" 3 - depends on BT && BT_L2CAP && INPUT 3 + depends on BT && BT_L2CAP && INPUT && HID_SUPPORT 4 4 select HID 5 5 help 6 6 HIDP (Human Interface Device Protocol) is a transport layer
+4 -4
net/bluetooth/l2cap.c
··· 2421 2421 break; 2422 2422 2423 2423 case 2: 2424 - *val = __le16_to_cpu(*((__le16 *) opt->val)); 2424 + *val = get_unaligned_le16(opt->val); 2425 2425 break; 2426 2426 2427 2427 case 4: 2428 - *val = __le32_to_cpu(*((__le32 *) opt->val)); 2428 + *val = get_unaligned_le32(opt->val); 2429 2429 break; 2430 2430 2431 2431 default: ··· 2452 2452 break; 2453 2453 2454 2454 case 2: 2455 - *((__le16 *) opt->val) = cpu_to_le16(val); 2455 + put_unaligned_le16(val, opt->val); 2456 2456 break; 2457 2457 2458 2458 case 4: 2459 - *((__le32 *) opt->val) = cpu_to_le32(val); 2459 + put_unaligned_le32(val, opt->val); 2460 2460 break; 2461 2461 2462 2462 default:
+10 -3
net/bluetooth/rfcomm/core.c
··· 79 79 80 80 static void rfcomm_process_connect(struct rfcomm_session *s); 81 81 82 - static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err); 82 + static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, 83 + bdaddr_t *dst, 84 + u8 sec_level, 85 + int *err); 83 86 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst); 84 87 static void rfcomm_session_del(struct rfcomm_session *s); 85 88 ··· 404 401 405 402 s = rfcomm_session_get(src, dst); 406 403 if (!s) { 407 - s = rfcomm_session_create(src, dst, &err); 404 + s = rfcomm_session_create(src, dst, d->sec_level, &err); 408 405 if (!s) 409 406 return err; 410 407 } ··· 682 679 rfcomm_session_put(s); 683 680 } 684 681 685 - static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err) 682 + static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, 683 + bdaddr_t *dst, 684 + u8 sec_level, 685 + int *err) 686 686 { 687 687 struct rfcomm_session *s = NULL; 688 688 struct sockaddr_l2 addr; ··· 710 704 sk = sock->sk; 711 705 lock_sock(sk); 712 706 l2cap_pi(sk)->imtu = l2cap_mtu; 707 + l2cap_pi(sk)->sec_level = sec_level; 713 708 if (l2cap_ertm) 714 709 l2cap_pi(sk)->mode = L2CAP_MODE_ERTM; 715 710 release_sock(sk);
+3 -3
net/mac80211/iface.c
··· 391 391 u32 hw_reconf_flags = 0; 392 392 int i; 393 393 394 + if (local->scan_sdata == sdata) 395 + ieee80211_scan_cancel(local); 396 + 394 397 clear_bit(SDATA_STATE_RUNNING, &sdata->state); 395 398 396 399 /* ··· 525 522 */ 526 523 synchronize_rcu(); 527 524 skb_queue_purge(&sdata->skb_queue); 528 - 529 - if (local->scan_sdata == sdata) 530 - ieee80211_scan_cancel(local); 531 525 532 526 /* 533 527 * Disable beaconing here for mesh only, AP and IBSS
+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,
+2 -2
net/wireless/nl80211.c
··· 230 230 } 231 231 232 232 *rdev = cfg80211_get_dev_from_ifindex(sock_net(skb->sk), ifidx); 233 - if (IS_ERR(dev)) { 234 - err = PTR_ERR(dev); 233 + if (IS_ERR(*rdev)) { 234 + err = PTR_ERR(*rdev); 235 235 goto out_rtnl; 236 236 } 237 237