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 into for-davem

+195 -113
+1 -1
drivers/net/wireless/ath/ath5k/mac80211-ops.c
··· 325 325 struct netdev_hw_addr *ha; 326 326 327 327 mfilt[0] = 0; 328 - mfilt[1] = 1; 328 + mfilt[1] = 0; 329 329 330 330 netdev_hw_addr_list_for_each(ha, mc_list) { 331 331 /* calculate XOR of eight 6-bit values */
+9 -1
drivers/net/wireless/ath/ath9k/ar5008_phy.c
··· 610 610 REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT)); 611 611 612 612 if (AR_SREV_9280_20_OR_LATER(ah)) { 613 - val = REG_READ(ah, AR_PCU_MISC_MODE2); 613 + /* 614 + * For AR9280 and above, there is a new feature that allows 615 + * Multicast search based on both MAC Address and Key ID. 616 + * By default, this feature is enabled. But since the driver 617 + * is not using this feature, we switch it off; otherwise 618 + * multicast search based on MAC addr only will fail. 619 + */ 620 + val = REG_READ(ah, AR_PCU_MISC_MODE2) & 621 + (~AR_ADHOC_MCAST_KEYID_ENABLE); 614 622 615 623 if (!AR_SREV_9271(ah)) 616 624 val &= ~AR_PCU_MISC_MODE2_HWWAR1;
+6 -3
drivers/net/wireless/ath/ath9k/hif_usb.c
··· 1082 1082 struct device *dev = &hif_dev->udev->dev; 1083 1083 struct device *parent = dev->parent; 1084 1084 1085 - complete(&hif_dev->fw_done); 1085 + complete_all(&hif_dev->fw_done); 1086 1086 1087 1087 if (parent) 1088 1088 device_lock(parent); ··· 1131 1131 1132 1132 release_firmware(fw); 1133 1133 hif_dev->flags |= HIF_USB_READY; 1134 - complete(&hif_dev->fw_done); 1134 + complete_all(&hif_dev->fw_done); 1135 1135 1136 1136 return; 1137 1137 ··· 1316 1316 if (!(hif_dev->flags & HIF_USB_START)) 1317 1317 ath9k_htc_suspend(hif_dev->htc_handle); 1318 1318 1319 - ath9k_hif_usb_dealloc_urbs(hif_dev); 1319 + wait_for_completion(&hif_dev->fw_done); 1320 + 1321 + if (hif_dev->flags & HIF_USB_READY) 1322 + ath9k_hif_usb_dealloc_urbs(hif_dev); 1320 1323 1321 1324 return 0; 1322 1325 }
+28 -16
drivers/net/wireless/ath/ath9k/xmit.c
··· 146 146 ARRAY_SIZE(bf->rates)); 147 147 } 148 148 149 + static void ath_txq_skb_done(struct ath_softc *sc, struct ath_txq *txq, 150 + struct sk_buff *skb) 151 + { 152 + int q; 153 + 154 + q = skb_get_queue_mapping(skb); 155 + if (txq == sc->tx.uapsdq) 156 + txq = sc->tx.txq_map[q]; 157 + 158 + if (txq != sc->tx.txq_map[q]) 159 + return; 160 + 161 + if (WARN_ON(--txq->pending_frames < 0)) 162 + txq->pending_frames = 0; 163 + 164 + if (txq->stopped && 165 + txq->pending_frames < sc->tx.txq_max_pending[q]) { 166 + ieee80211_wake_queue(sc->hw, q); 167 + txq->stopped = false; 168 + } 169 + } 170 + 149 171 static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) 150 172 { 151 173 struct ath_txq *txq = tid->ac->txq; ··· 189 167 if (!bf) { 190 168 bf = ath_tx_setup_buffer(sc, txq, tid, skb); 191 169 if (!bf) { 170 + ath_txq_skb_done(sc, txq, skb); 192 171 ieee80211_free_txskb(sc->hw, skb); 193 172 continue; 194 173 } ··· 834 811 835 812 if (!bf) { 836 813 __skb_unlink(skb, &tid->buf_q); 814 + ath_txq_skb_done(sc, txq, skb); 837 815 ieee80211_free_txskb(sc->hw, skb); 838 816 continue; 839 817 } ··· 1848 1824 1849 1825 bf = ath_tx_setup_buffer(sc, txq, tid, skb); 1850 1826 if (!bf) { 1827 + ath_txq_skb_done(sc, txq, skb); 1851 1828 ieee80211_free_txskb(sc->hw, skb); 1852 1829 return; 1853 1830 } ··· 2115 2090 2116 2091 bf = ath_tx_setup_buffer(sc, txq, tid, skb); 2117 2092 if (!bf) { 2093 + ath_txq_skb_done(sc, txq, skb); 2118 2094 if (txctl->paprd) 2119 2095 dev_kfree_skb_any(skb); 2120 2096 else ··· 2215 2189 struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 2216 2190 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 2217 2191 struct ieee80211_hdr * hdr = (struct ieee80211_hdr *)skb->data; 2218 - int q, padpos, padsize; 2192 + int padpos, padsize; 2219 2193 unsigned long flags; 2220 2194 2221 2195 ath_dbg(common, XMIT, "TX complete: skb: %p\n", skb); ··· 2251 2225 spin_unlock_irqrestore(&sc->sc_pm_lock, flags); 2252 2226 2253 2227 __skb_queue_tail(&txq->complete_q, skb); 2254 - 2255 - q = skb_get_queue_mapping(skb); 2256 - if (txq == sc->tx.uapsdq) 2257 - txq = sc->tx.txq_map[q]; 2258 - 2259 - if (txq == sc->tx.txq_map[q]) { 2260 - if (WARN_ON(--txq->pending_frames < 0)) 2261 - txq->pending_frames = 0; 2262 - 2263 - if (txq->stopped && 2264 - txq->pending_frames < sc->tx.txq_max_pending[q]) { 2265 - ieee80211_wake_queue(sc->hw, q); 2266 - txq->stopped = false; 2267 - } 2268 - } 2228 + ath_txq_skb_done(sc, txq, skb); 2269 2229 } 2270 2230 2271 2231 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
+1 -1
drivers/net/wireless/rt2x00/Kconfig
··· 1 1 menuconfig RT2X00 2 2 tristate "Ralink driver support" 3 - depends on MAC80211 3 + depends on MAC80211 && HAS_DMA 4 4 ---help--- 5 5 This will enable the support for the Ralink drivers, 6 6 developed in the rt2x00 project <http://rt2x00.serialmonkey.com>.
+89 -65
drivers/net/wireless/rtlwifi/Kconfig
··· 1 - config RTLWIFI 2 - tristate "Realtek wireless card support" 3 - depends on MAC80211 4 - select FW_LOADER 1 + menuconfig RTL_CARDS 2 + tristate "Realtek rtlwifi family of devices" 3 + depends on MAC80211 && (PCI || USB) 4 + default y 5 5 ---help--- 6 - This is common code for RTL8192CE/RTL8192CU/RTL8192SE/RTL8723AE 7 - drivers. This module does nothing by itself - the various front-end 8 - drivers need to be enabled to support any desired devices. 6 + This option will enable support for the Realtek mac80211-based 7 + wireless drivers. Drivers rtl8192ce, rtl8192cu, rtl8192se, rtl8192de, 8 + rtl8723eu, and rtl8188eu share some common code. 9 9 10 - If you choose to build as a module, it'll be called rtlwifi. 10 + if RTL_CARDS 11 + 12 + config RTL8192CE 13 + tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter" 14 + depends on PCI 15 + select RTL8192C_COMMON 16 + select RTLWIFI 17 + select RTLWIFI_PCI 18 + ---help--- 19 + This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe 20 + wireless network adapters. 21 + 22 + If you choose to build it as a module, it will be called rtl8192ce 23 + 24 + config RTL8192SE 25 + tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter" 26 + depends on PCI 27 + select RTLWIFI 28 + select RTLWIFI_PCI 29 + ---help--- 30 + This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe 31 + wireless network adapters. 32 + 33 + If you choose to build it as a module, it will be called rtl8192se 34 + 35 + config RTL8192DE 36 + tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter" 37 + depends on PCI 38 + select RTLWIFI 39 + select RTLWIFI_PCI 40 + ---help--- 41 + This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe 42 + wireless network adapters. 43 + 44 + If you choose to build it as a module, it will be called rtl8192de 45 + 46 + config RTL8723AE 47 + tristate "Realtek RTL8723AE PCIe Wireless Network Adapter" 48 + depends on PCI 49 + select RTLWIFI 50 + select RTLWIFI_PCI 51 + ---help--- 52 + This is the driver for Realtek RTL8723AE 802.11n PCIe 53 + wireless network adapters. 54 + 55 + If you choose to build it as a module, it will be called rtl8723ae 56 + 57 + config RTL8188EE 58 + tristate "Realtek RTL8188EE Wireless Network Adapter" 59 + depends on PCI 60 + select RTLWIFI 61 + select RTLWIFI_PCI 62 + ---help--- 63 + This is the driver for Realtek RTL8188EE 802.11n PCIe 64 + wireless network adapters. 65 + 66 + If you choose to build it as a module, it will be called rtl8188ee 67 + 68 + config RTL8192CU 69 + tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter" 70 + depends on USB 71 + select RTLWIFI 72 + select RTLWIFI_USB 73 + select RTL8192C_COMMON 74 + ---help--- 75 + This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB 76 + wireless network adapters. 77 + 78 + If you choose to build it as a module, it will be called rtl8192cu 79 + 80 + config RTLWIFI 81 + tristate 82 + select FW_LOADER 83 + 84 + config RTLWIFI_PCI 85 + tristate 86 + 87 + config RTLWIFI_USB 88 + tristate 11 89 12 90 config RTLWIFI_DEBUG 13 91 bool "Debugging output for rtlwifi driver family" ··· 96 18 the front-end driver, this parameter must be "Y". For memory-limited 97 19 systems, choose "N". If in doubt, choose "Y". 98 20 99 - config RTL8192CE 100 - tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter" 101 - depends on RTLWIFI && PCI 102 - select RTL8192C_COMMON 103 - ---help--- 104 - This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe 105 - wireless network adapters. 106 - 107 - If you choose to build it as a module, it will be called rtl8192ce 108 - 109 - config RTL8192SE 110 - tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter" 111 - depends on RTLWIFI && PCI 112 - ---help--- 113 - This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe 114 - wireless network adapters. 115 - 116 - If you choose to build it as a module, it will be called rtl8192se 117 - 118 - config RTL8192DE 119 - tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter" 120 - depends on RTLWIFI && PCI 121 - ---help--- 122 - This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe 123 - wireless network adapters. 124 - 125 - If you choose to build it as a module, it will be called rtl8192de 126 - 127 - config RTL8723AE 128 - tristate "Realtek RTL8723AE PCIe Wireless Network Adapter" 129 - depends on RTLWIFI && PCI 130 - ---help--- 131 - This is the driver for Realtek RTL8723AE 802.11n PCIe 132 - wireless network adapters. 133 - 134 - If you choose to build it as a module, it will be called rtl8723ae 135 - 136 - config RTL8188EE 137 - tristate "Realtek RTL8188EE Wireless Network Adapter" 138 - depends on RTLWIFI && PCI 139 - ---help--- 140 - This is the driver for Realtek RTL8188EE 802.11n PCIe 141 - wireless network adapters. 142 - 143 - If you choose to build it as a module, it will be called rtl8188ee 144 - 145 - config RTL8192CU 146 - tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter" 147 - depends on RTLWIFI && USB 148 - select RTL8192C_COMMON 149 - ---help--- 150 - This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB 151 - wireless network adapters. 152 - 153 - If you choose to build it as a module, it will be called rtl8192cu 154 - 155 21 config RTL8192C_COMMON 156 22 tristate 157 23 depends on RTL8192CE || RTL8192CU 158 - default m 24 + default y 25 + 26 + endif
+4 -6
drivers/net/wireless/rtlwifi/Makefile
··· 12 12 13 13 rtl8192c_common-objs += \ 14 14 15 - ifneq ($(CONFIG_PCI),) 16 - rtlwifi-objs += pci.o 17 - endif 15 + obj-$(CONFIG_RTLWIFI_PCI) += rtl_pci.o 16 + rtl_pci-objs := pci.o 18 17 19 - ifneq ($(CONFIG_USB),) 20 - rtlwifi-objs += usb.o 21 - endif 18 + obj-$(CONFIG_RTLWIFI_USB) += rtl_usb.o 19 + rtl_usb-objs := usb.o 22 20 23 21 obj-$(CONFIG_RTL8192C_COMMON) += rtl8192c/ 24 22 obj-$(CONFIG_RTL8192CE) += rtl8192ce/
+16 -3
drivers/net/wireless/rtlwifi/base.c
··· 172 172 { 173 173 return tid_to_ac[tid]; 174 174 } 175 + EXPORT_SYMBOL_GPL(rtl_tid_to_ac); 175 176 176 177 static void _rtl_init_hw_ht_capab(struct ieee80211_hw *hw, 177 178 struct ieee80211_sta_ht_cap *ht_cap) ··· 407 406 cancel_delayed_work(&rtlpriv->works.ps_rfon_wq); 408 407 cancel_delayed_work(&rtlpriv->works.fwevt_wq); 409 408 } 409 + EXPORT_SYMBOL_GPL(rtl_deinit_deferred_work); 410 410 411 411 void rtl_init_rfkill(struct ieee80211_hw *hw) 412 412 { ··· 441 439 { 442 440 wiphy_rfkill_stop_polling(hw->wiphy); 443 441 } 442 + EXPORT_SYMBOL_GPL(rtl_deinit_rfkill); 444 443 445 444 int rtl_init_core(struct ieee80211_hw *hw) 446 445 { ··· 492 489 493 490 return 0; 494 491 } 492 + EXPORT_SYMBOL_GPL(rtl_init_core); 495 493 496 494 void rtl_deinit_core(struct ieee80211_hw *hw) 497 495 { 498 496 } 497 + EXPORT_SYMBOL_GPL(rtl_deinit_core); 499 498 500 499 void rtl_init_rx_config(struct ieee80211_hw *hw) 501 500 { ··· 506 501 507 502 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *) (&mac->rx_conf)); 508 503 } 504 + EXPORT_SYMBOL_GPL(rtl_init_rx_config); 509 505 510 506 /********************************************************* 511 507 * ··· 885 879 886 880 return true; 887 881 } 882 + EXPORT_SYMBOL_GPL(rtl_tx_mgmt_proc); 888 883 889 884 void rtl_get_tcb_desc(struct ieee80211_hw *hw, 890 885 struct ieee80211_tx_info *info, ··· 1059 1052 1060 1053 return true; 1061 1054 } 1055 + EXPORT_SYMBOL_GPL(rtl_action_proc); 1062 1056 1063 1057 /*should call before software enc*/ 1064 1058 u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx) ··· 1133 1125 1134 1126 return false; 1135 1127 } 1128 + EXPORT_SYMBOL_GPL(rtl_is_special_data); 1136 1129 1137 1130 /********************************************************* 1138 1131 * ··· 1309 1300 1310 1301 rtlpriv->link_info.bcn_rx_inperiod++; 1311 1302 } 1303 + EXPORT_SYMBOL_GPL(rtl_beacon_statistic); 1312 1304 1313 1305 void rtl_watchdog_wq_callback(void *data) 1314 1306 { ··· 1803 1793 1804 1794 mac->vendor = vendor; 1805 1795 } 1796 + EXPORT_SYMBOL_GPL(rtl_recognize_peer); 1806 1797 1807 1798 /********************************************************* 1808 1799 * ··· 1860 1849 .name = "rtlsysfs", 1861 1850 .attrs = rtl_sysfs_entries, 1862 1851 }; 1852 + EXPORT_SYMBOL_GPL(rtl_attribute_group); 1863 1853 1864 1854 MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>"); 1865 1855 MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>"); ··· 1868 1856 MODULE_LICENSE("GPL"); 1869 1857 MODULE_DESCRIPTION("Realtek 802.11n PCI wireless core"); 1870 1858 1871 - struct rtl_global_var global_var = {}; 1859 + struct rtl_global_var rtl_global_var = {}; 1860 + EXPORT_SYMBOL_GPL(rtl_global_var); 1872 1861 1873 1862 static int __init rtl_core_module_init(void) 1874 1863 { ··· 1877 1864 pr_err("Unable to register rtl_rc, use default RC !!\n"); 1878 1865 1879 1866 /* init some global vars */ 1880 - INIT_LIST_HEAD(&global_var.glb_priv_list); 1881 - spin_lock_init(&global_var.glb_list_lock); 1867 + INIT_LIST_HEAD(&rtl_global_var.glb_priv_list); 1868 + spin_lock_init(&rtl_global_var.glb_list_lock); 1882 1869 1883 1870 return 0; 1884 1871 }
+1 -1
drivers/net/wireless/rtlwifi/base.h
··· 147 147 u8 rtl_tid_to_ac(u8 tid); 148 148 extern struct attribute_group rtl_attribute_group; 149 149 void rtl_easy_concurrent_retrytimer_callback(unsigned long data); 150 - extern struct rtl_global_var global_var; 150 + extern struct rtl_global_var rtl_global_var; 151 151 int rtlwifi_rate_mapping(struct ieee80211_hw *hw, 152 152 bool isht, u8 desc_rate, bool first_ampdu); 153 153 bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
+1
drivers/net/wireless/rtlwifi/core.c
··· 1330 1330 .rfkill_poll = rtl_op_rfkill_poll, 1331 1331 .flush = rtl_op_flush, 1332 1332 }; 1333 + EXPORT_SYMBOL_GPL(rtl_ops);
+1
drivers/net/wireless/rtlwifi/debug.c
··· 51 51 52 52 /*Init Debug flag enable condition */ 53 53 } 54 + EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);
+1
drivers/net/wireless/rtlwifi/efuse.c
··· 229 229 230 230 *pbuf = (u8) (value32 & 0xff); 231 231 } 232 + EXPORT_SYMBOL_GPL(read_efuse_byte); 232 233 233 234 void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf) 234 235 {
+8 -14
drivers/net/wireless/rtlwifi/pci.c
··· 35 35 #include "efuse.h" 36 36 #include <linux/export.h> 37 37 #include <linux/kmemleak.h> 38 + #include <linux/module.h> 39 + 40 + MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>"); 41 + MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>"); 42 + MODULE_AUTHOR("Larry Finger <Larry.FInger@lwfinger.net>"); 43 + MODULE_LICENSE("GPL"); 44 + MODULE_DESCRIPTION("PCI basic driver for rtlwifi"); 38 45 39 46 static const u16 pcibridge_vendors[PCI_BRIDGE_VENDOR_MAX] = { 40 47 PCI_VENDOR_ID_INTEL, ··· 1015 1008 return; 1016 1009 } 1017 1010 1018 - static void rtl_lps_change_work_callback(struct work_struct *work) 1019 - { 1020 - struct rtl_works *rtlworks = 1021 - container_of(work, struct rtl_works, lps_change_work); 1022 - struct ieee80211_hw *hw = rtlworks->hw; 1023 - struct rtl_priv *rtlpriv = rtl_priv(hw); 1024 - 1025 - if (rtlpriv->enter_ps) 1026 - rtl_lps_enter(hw); 1027 - else 1028 - rtl_lps_leave(hw); 1029 - } 1030 - 1031 1011 static void _rtl_pci_init_trx_var(struct ieee80211_hw *hw) 1032 1012 { 1033 1013 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); ··· 1893 1899 rtlpriv->rtlhal.interface = INTF_PCI; 1894 1900 rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data); 1895 1901 rtlpriv->intf_ops = &rtl_pci_ops; 1896 - rtlpriv->glb_var = &global_var; 1902 + rtlpriv->glb_var = &rtl_global_var; 1897 1903 1898 1904 /* 1899 1905 *init dbgp flags before all
+16
drivers/net/wireless/rtlwifi/ps.c
··· 269 269 270 270 spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags); 271 271 } 272 + EXPORT_SYMBOL_GPL(rtl_ips_nic_on); 272 273 273 274 /*for FW LPS*/ 274 275 ··· 519 518 "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed); 520 519 } 521 520 } 521 + EXPORT_SYMBOL_GPL(rtl_swlps_beacon); 522 522 523 523 void rtl_swlps_rf_awake(struct ieee80211_hw *hw) 524 524 { ··· 613 611 MSECS(sleep_intv * mac->vif->bss_conf.beacon_int - 40)); 614 612 } 615 613 614 + void rtl_lps_change_work_callback(struct work_struct *work) 615 + { 616 + struct rtl_works *rtlworks = 617 + container_of(work, struct rtl_works, lps_change_work); 618 + struct ieee80211_hw *hw = rtlworks->hw; 619 + struct rtl_priv *rtlpriv = rtl_priv(hw); 620 + 621 + if (rtlpriv->enter_ps) 622 + rtl_lps_enter(hw); 623 + else 624 + rtl_lps_leave(hw); 625 + } 626 + EXPORT_SYMBOL_GPL(rtl_lps_change_work_callback); 616 627 617 628 void rtl_swlps_wq_callback(void *data) 618 629 { ··· 937 922 else 938 923 rtl_p2p_noa_ie(hw, data, len - FCS_LEN); 939 924 } 925 + EXPORT_SYMBOL_GPL(rtl_p2p_info);
+1
drivers/net/wireless/rtlwifi/ps.h
··· 49 49 void rtl_swlps_rf_sleep(struct ieee80211_hw *hw); 50 50 void rtl_p2p_ps_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state); 51 51 void rtl_p2p_info(struct ieee80211_hw *hw, void *data, unsigned int len); 52 + void rtl_lps_change_work_callback(struct work_struct *work); 52 53 53 54 #endif
+9
drivers/net/wireless/rtlwifi/usb.c
··· 32 32 #include "ps.h" 33 33 #include "rtl8192c/fw_common.h" 34 34 #include <linux/export.h> 35 + #include <linux/module.h> 36 + 37 + MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>"); 38 + MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>"); 39 + MODULE_AUTHOR("Larry Finger <Larry.FInger@lwfinger.net>"); 40 + MODULE_LICENSE("GPL"); 41 + MODULE_DESCRIPTION("USB basic driver for rtlwifi"); 35 42 36 43 #define REALTEK_USB_VENQT_READ 0xC0 37 44 #define REALTEK_USB_VENQT_WRITE 0x40 ··· 1077 1070 spin_lock_init(&rtlpriv->locks.usb_lock); 1078 1071 INIT_WORK(&rtlpriv->works.fill_h2c_cmd, 1079 1072 rtl_fill_h2c_cmd_work_callback); 1073 + INIT_WORK(&rtlpriv->works.lps_change_work, 1074 + rtl_lps_change_work_callback); 1080 1075 1081 1076 rtlpriv->usb_data_index = 0; 1082 1077 init_completion(&rtlpriv->firmware_loading_complete);
+3 -2
include/linux/mod_devicetable.h
··· 361 361 __u16 vendor; 362 362 __u16 coreid; 363 363 __u8 revision; 364 - }; 364 + __u8 __pad; 365 + } __attribute__((packed, aligned(2))); 365 366 #define SSB_DEVICE(_vendor, _coreid, _revision) \ 366 367 { .vendor = _vendor, .coreid = _coreid, .revision = _revision, } 367 368 #define SSB_DEVTABLE_END \ ··· 378 377 __u16 id; 379 378 __u8 rev; 380 379 __u8 class; 381 - }; 380 + } __attribute__((packed,aligned(2))); 382 381 #define BCMA_CORE(_manuf, _id, _rev, _class) \ 383 382 { .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, } 384 383 #define BCMA_CORETABLE_END \