From 48b3b74da703b2a99be1a788a045bcc8d96d0494 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Tue, 6 Aug 2013 10:31:02 +0000
Subject: [PATCH] mac80211: fold the rtlwifi patch into 300-pending_work.patch
 (upstream patch)

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 37714
---
 .../mac80211/patches/300-pending_work.patch   | 366 ++++++++++++++++
 ...i-Fix-build-errors-for-unusual-cases.patch | 408 ------------------
 2 files changed, 366 insertions(+), 408 deletions(-)
 delete mode 100644 package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch

diff --git a/package/kernel/mac80211/patches/300-pending_work.patch b/package/kernel/mac80211/patches/300-pending_work.patch
index 2fa1e1b004..0e5ceb8b92 100644
--- a/package/kernel/mac80211/patches/300-pending_work.patch
+++ b/package/kernel/mac80211/patches/300-pending_work.patch
@@ -1036,3 +1036,369 @@
  		cfg80211_stop_ap(rdev, dev);
  		break;
  	default:
+--- a/drivers/net/wireless/rtlwifi/Kconfig
++++ b/drivers/net/wireless/rtlwifi/Kconfig
+@@ -1,29 +1,22 @@
+-config RTLWIFI
+-	tristate "Realtek wireless card support"
++menuconfig RTL_CARDS
++	tristate "Realtek rtlwifi family of devices"
+ 	depends on m
+-	depends on MAC80211
+-	select BACKPORT_FW_LOADER
+-	---help---
+-	  This is common code for RTL8192CE/RTL8192CU/RTL8192SE/RTL8723AE
+-	  drivers.  This module does nothing by itself - the various front-end
+-	  drivers need to be enabled to support any desired devices.
+-
+-	  If you choose to build as a module, it'll be called rtlwifi.
+-
+-config RTLWIFI_DEBUG
+-	bool "Debugging output for rtlwifi driver family"
+-	depends on RTLWIFI
++	depends on MAC80211 && (PCI || USB)
+ 	default y
+ 	---help---
+-	To use the module option that sets the dynamic-debugging level for,
+-	the front-end driver, this parameter must be "Y". For memory-limited
+-	systems, choose "N". If in doubt, choose "Y".
++	  This option will enable support for the Realtek mac80211-based
++	  wireless drivers. Drivers rtl8192ce, rtl8192cu, rtl8192se, rtl8192de,
++	  rtl8723eu, and rtl8188eu share some common code.
++
++if RTL_CARDS
+ 
+ config RTL8192CE
+ 	tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
+ 	depends on m
+-	depends on RTLWIFI && PCI
++	depends on PCI
+ 	select RTL8192C_COMMON
++	select RTLWIFI
++	select RTLWIFI_PCI
+ 	---help---
+ 	This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe
+ 	wireless network adapters.
+@@ -33,7 +26,9 @@ config RTL8192CE
+ config RTL8192SE
+ 	tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
+ 	depends on m
+-	depends on RTLWIFI && PCI
++	depends on PCI
++	select RTLWIFI
++	select RTLWIFI_PCI
+ 	---help---
+ 	This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe
+ 	wireless network adapters.
+@@ -43,7 +38,9 @@ config RTL8192SE
+ config RTL8192DE
+ 	tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
+ 	depends on m
+-	depends on RTLWIFI && PCI
++	depends on PCI
++	select RTLWIFI
++	select RTLWIFI_PCI
+ 	---help---
+ 	This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe
+ 	wireless network adapters.
+@@ -53,7 +50,9 @@ config RTL8192DE
+ config RTL8723AE
+ 	tristate "Realtek RTL8723AE PCIe Wireless Network Adapter"
+ 	depends on m
+-	depends on RTLWIFI && PCI
++	depends on PCI
++	select RTLWIFI
++	select RTLWIFI_PCI
+ 	---help---
+ 	This is the driver for Realtek RTL8723AE 802.11n PCIe
+ 	wireless network adapters.
+@@ -63,7 +62,9 @@ config RTL8723AE
+ config RTL8188EE
+ 	tristate "Realtek RTL8188EE Wireless Network Adapter"
+ 	depends on m
+-	depends on RTLWIFI && PCI
++	depends on PCI
++	select RTLWIFI
++	select RTLWIFI_PCI
+ 	---help---
+ 	This is the driver for Realtek RTL8188EE 802.11n PCIe
+ 	wireless network adapters.
+@@ -73,7 +74,9 @@ config RTL8188EE
+ config RTL8192CU
+ 	tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
+ 	depends on m
+-	depends on RTLWIFI && USB
++	depends on USB
++	select RTLWIFI
++	select RTLWIFI_USB
+ 	select RTL8192C_COMMON
+ 	---help---
+ 	This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
+@@ -81,8 +84,32 @@ config RTL8192CU
+ 
+ 	If you choose to build it as a module, it will be called rtl8192cu
+ 
++config RTLWIFI
++	tristate "Realtek common driver part"
++	depends on m
++	select BACKPORT_FW_LOADER
++
++config RTLWIFI_PCI
++	depends on m
++	tristate
++
++config RTLWIFI_USB
++	depends on m
++	tristate
++
++config RTLWIFI_DEBUG
++	bool "Debugging output for rtlwifi driver family"
++	depends on RTLWIFI
++	default y
++	---help---
++	To use the module option that sets the dynamic-debugging level for,
++	the front-end driver, this parameter must be "Y". For memory-limited
++	systems, choose "N". If in doubt, choose "Y".
++
+ config RTL8192C_COMMON
+ 	tristate
+ 	depends on m
+ 	depends on RTL8192CE || RTL8192CU
+ 	default m
++
++endif
+--- a/drivers/net/wireless/rtlwifi/Makefile
++++ b/drivers/net/wireless/rtlwifi/Makefile
+@@ -12,13 +12,11 @@ rtlwifi-objs	:=		\
+ 
+ rtl8192c_common-objs +=		\
+ 
+-ifneq ($(CONFIG_PCI),)
+-rtlwifi-objs	+= pci.o
+-endif
++obj-$(CPTCFG_RTLWIFI_PCI)	+= rtl_pci.o
++rtl_pci-objs	:=		pci.o
+ 
+-ifneq ($(CONFIG_USB),)
+-rtlwifi-objs	+= usb.o
+-endif
++obj-$(CPTCFG_RTLWIFI_USB)	+= rtl_usb.o
++rtl_usb-objs	:=		usb.o
+ 
+ obj-$(CPTCFG_RTL8192C_COMMON)	+= rtl8192c/
+ obj-$(CPTCFG_RTL8192CE)		+= rtl8192ce/
+--- a/drivers/net/wireless/rtlwifi/base.c
++++ b/drivers/net/wireless/rtlwifi/base.c
+@@ -173,6 +173,7 @@ u8 rtl_tid_to_ac(u8 tid)
+ {
+ 	return tid_to_ac[tid];
+ }
++EXPORT_SYMBOL_GPL(rtl_tid_to_ac);
+ 
+ static void _rtl_init_hw_ht_capab(struct ieee80211_hw *hw,
+ 				  struct ieee80211_sta_ht_cap *ht_cap)
+@@ -407,6 +408,7 @@ void rtl_deinit_deferred_work(struct iee
+ 	cancel_delayed_work(&rtlpriv->works.ps_rfon_wq);
+ 	cancel_delayed_work(&rtlpriv->works.fwevt_wq);
+ }
++EXPORT_SYMBOL_GPL(rtl_deinit_deferred_work);
+ 
+ void rtl_init_rfkill(struct ieee80211_hw *hw)
+ {
+@@ -440,6 +442,7 @@ void rtl_deinit_rfkill(struct ieee80211_
+ {
+ 	wiphy_rfkill_stop_polling(hw->wiphy);
+ }
++EXPORT_SYMBOL_GPL(rtl_deinit_rfkill);
+ 
+ int rtl_init_core(struct ieee80211_hw *hw)
+ {
+@@ -490,10 +493,12 @@ int rtl_init_core(struct ieee80211_hw *h
+ 
+ 	return 0;
+ }
++EXPORT_SYMBOL_GPL(rtl_init_core);
+ 
+ void rtl_deinit_core(struct ieee80211_hw *hw)
+ {
+ }
++EXPORT_SYMBOL_GPL(rtl_deinit_core);
+ 
+ void rtl_init_rx_config(struct ieee80211_hw *hw)
+ {
+@@ -502,6 +507,7 @@ void rtl_init_rx_config(struct ieee80211
+ 
+ 	rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *) (&mac->rx_conf));
+ }
++EXPORT_SYMBOL_GPL(rtl_init_rx_config);
+ 
+ /*********************************************************
+  *
+@@ -880,6 +886,7 @@ bool rtl_tx_mgmt_proc(struct ieee80211_h
+ 
+ 	return true;
+ }
++EXPORT_SYMBOL_GPL(rtl_tx_mgmt_proc);
+ 
+ void rtl_get_tcb_desc(struct ieee80211_hw *hw,
+ 		      struct ieee80211_tx_info *info,
+@@ -1053,6 +1060,7 @@ bool rtl_action_proc(struct ieee80211_hw
+ 
+ 	return true;
+ }
++EXPORT_SYMBOL_GPL(rtl_action_proc);
+ 
+ /*should call before software enc*/
+ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
+@@ -1126,6 +1134,7 @@ u8 rtl_is_special_data(struct ieee80211_
+ 
+ 	return false;
+ }
++EXPORT_SYMBOL_GPL(rtl_is_special_data);
+ 
+ /*********************************************************
+  *
+@@ -1301,6 +1310,7 @@ void rtl_beacon_statistic(struct ieee802
+ 
+ 	rtlpriv->link_info.bcn_rx_inperiod++;
+ }
++EXPORT_SYMBOL_GPL(rtl_beacon_statistic);
+ 
+ void rtl_watchdog_wq_callback(void *data)
+ {
+@@ -1794,6 +1804,7 @@ void rtl_recognize_peer(struct ieee80211
+ 
+ 	mac->vendor = vendor;
+ }
++EXPORT_SYMBOL_GPL(rtl_recognize_peer);
+ 
+ /*********************************************************
+  *
+@@ -1850,6 +1861,7 @@ struct attribute_group rtl_attribute_gro
+ 	.name = "rtlsysfs",
+ 	.attrs = rtl_sysfs_entries,
+ };
++EXPORT_SYMBOL_GPL(rtl_attribute_group);
+ 
+ MODULE_AUTHOR("lizhaoming	<chaoming_li@realsil.com.cn>");
+ MODULE_AUTHOR("Realtek WlanFAE	<wlanfae@realtek.com>");
+@@ -1857,7 +1869,8 @@ MODULE_AUTHOR("Larry Finger	<Larry.FInge
+ MODULE_LICENSE("GPL");
+ MODULE_DESCRIPTION("Realtek 802.11n PCI wireless core");
+ 
+-struct rtl_global_var global_var = {};
++struct rtl_global_var rtl_global_var = {};
++EXPORT_SYMBOL_GPL(rtl_global_var);
+ 
+ static int __init rtl_core_module_init(void)
+ {
+@@ -1865,8 +1878,8 @@ static int __init rtl_core_module_init(v
+ 		pr_err("Unable to register rtl_rc, use default RC !!\n");
+ 
+ 	/* init some global vars */
+-	INIT_LIST_HEAD(&global_var.glb_priv_list);
+-	spin_lock_init(&global_var.glb_list_lock);
++	INIT_LIST_HEAD(&rtl_global_var.glb_priv_list);
++	spin_lock_init(&rtl_global_var.glb_list_lock);
+ 
+ 	return 0;
+ }
+--- a/drivers/net/wireless/rtlwifi/base.h
++++ b/drivers/net/wireless/rtlwifi/base.h
+@@ -147,7 +147,7 @@ void rtl_recognize_peer(struct ieee80211
+ u8 rtl_tid_to_ac(u8 tid);
+ extern struct attribute_group rtl_attribute_group;
+ void rtl_easy_concurrent_retrytimer_callback(unsigned long data);
+-extern struct rtl_global_var global_var;
++extern struct rtl_global_var rtl_global_var;
+ int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
+ 			 bool isht, u8 desc_rate, bool first_ampdu);
+ bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
+--- a/drivers/net/wireless/rtlwifi/core.c
++++ b/drivers/net/wireless/rtlwifi/core.c
+@@ -1330,3 +1330,4 @@ const struct ieee80211_ops rtl_ops = {
+ 	.rfkill_poll = rtl_op_rfkill_poll,
+ 	.flush = rtl_op_flush,
+ };
++EXPORT_SYMBOL_GPL(rtl_ops);
+--- a/drivers/net/wireless/rtlwifi/debug.c
++++ b/drivers/net/wireless/rtlwifi/debug.c
+@@ -51,3 +51,4 @@ void rtl_dbgp_flag_init(struct ieee80211
+ 
+ 	/*Init Debug flag enable condition */
+ }
++EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);
+--- a/drivers/net/wireless/rtlwifi/efuse.c
++++ b/drivers/net/wireless/rtlwifi/efuse.c
+@@ -229,6 +229,7 @@ void read_efuse_byte(struct ieee80211_hw
+ 
+ 	*pbuf = (u8) (value32 & 0xff);
+ }
++EXPORT_SYMBOL_GPL(read_efuse_byte);
+ 
+ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)
+ {
+--- a/drivers/net/wireless/rtlwifi/pci.c
++++ b/drivers/net/wireless/rtlwifi/pci.c
+@@ -35,6 +35,13 @@
+ #include "efuse.h"
+ #include <linux/export.h>
+ #include <linux/kmemleak.h>
++#include <linux/module.h>
++
++MODULE_AUTHOR("lizhaoming	<chaoming_li@realsil.com.cn>");
++MODULE_AUTHOR("Realtek WlanFAE	<wlanfae@realtek.com>");
++MODULE_AUTHOR("Larry Finger	<Larry.FInger@lwfinger.net>");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("PCI basic driver for rtlwifi");
+ 
+ static const u16 pcibridge_vendors[PCI_BRIDGE_VENDOR_MAX] = {
+ 	PCI_VENDOR_ID_INTEL,
+@@ -1899,7 +1906,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
+ 	rtlpriv->rtlhal.interface = INTF_PCI;
+ 	rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data);
+ 	rtlpriv->intf_ops = &rtl_pci_ops;
+-	rtlpriv->glb_var = &global_var;
++	rtlpriv->glb_var = &rtl_global_var;
+ 
+ 	/*
+ 	 *init dbgp flags before all
+--- a/drivers/net/wireless/rtlwifi/ps.c
++++ b/drivers/net/wireless/rtlwifi/ps.c
+@@ -269,6 +269,7 @@ void rtl_ips_nic_on(struct ieee80211_hw 
+ 
+ 	spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
+ }
++EXPORT_SYMBOL_GPL(rtl_ips_nic_on);
+ 
+ /*for FW LPS*/
+ 
+@@ -518,6 +519,7 @@ void rtl_swlps_beacon(struct ieee80211_h
+ 			 "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed);
+ 	}
+ }
++EXPORT_SYMBOL_GPL(rtl_swlps_beacon);
+ 
+ void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
+ {
+@@ -922,3 +924,4 @@ void rtl_p2p_info(struct ieee80211_hw *h
+ 	else
+ 		rtl_p2p_noa_ie(hw, data, len - FCS_LEN);
+ }
++EXPORT_SYMBOL_GPL(rtl_p2p_info);
+--- a/drivers/net/wireless/rtlwifi/usb.c
++++ b/drivers/net/wireless/rtlwifi/usb.c
+@@ -32,6 +32,13 @@
+ #include "ps.h"
+ #include "rtl8192c/fw_common.h"
+ #include <linux/export.h>
++#include <linux/module.h>
++
++MODULE_AUTHOR("lizhaoming	<chaoming_li@realsil.com.cn>");
++MODULE_AUTHOR("Realtek WlanFAE	<wlanfae@realtek.com>");
++MODULE_AUTHOR("Larry Finger	<Larry.FInger@lwfinger.net>");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("USB basic driver for rtlwifi");
+ 
+ #define	REALTEK_USB_VENQT_READ			0xC0
+ #define	REALTEK_USB_VENQT_WRITE			0x40
diff --git a/package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch b/package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch
deleted file mode 100644
index b1e943e15e..0000000000
--- a/package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch
+++ /dev/null
@@ -1,408 +0,0 @@
-From 6f334c2b3966f10cbd089bb124ec0e114d8d8c77 Mon Sep 17 00:00:00 2001
-From: Larry Finger <Larry.Finger@lwfinger.net>
-Date: Fri, 12 Jul 2013 15:32:15 -0500
-Subject: [PATCH] rtlwifi: Fix build errors for unusual cases
-
-The present build configuration for the rtlwifi family of drivers will
-fail under two known conditions:
-
-(1) If rtlwifi is selected without selecting any of the dependent drivers,
-    there are errors in the build.
-(2) If the PCI drivers are built into the kernel and the USB drivers are modules,
-    or vice versa, there are missing globals.
-
-The first condition is fixed by never building rtlwifi unless at least one
-of the device drivers is selected. The second failure is fixed by splitting
-the PCI and USB codes out of rtlwifi, and creating their own mini drivers.
-If the drivers that use them are modules, they will also be modules.
-
-Although a number of files are touched by this patch, only Makefile and Kconfig
-have undergone significant changes. The only modifications to the other files
-were to export entry points needed by the new rtl_pci and rtl_usb units, or to
-rename two variables that had names that were likely to cause namespace collisions.
-
-Reported-by: Fengguang Wu <fengguang.wu@intel.com>  [Condition 1]
-Reported-by: Ben Hutchings <bhutchings@solarflare.com> [Condition 2]
-Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
-Cc: Ben Hutchings <bhutchings@solarflare.com>
-Cc: Fengguang Wu <fengguang.wu@intel.com>
-Signed-off-by: John W. Linville <linville@tuxdriver.com>
----
- drivers/net/wireless/rtlwifi/Kconfig  | 72 +++++++++++++++++++++++------------
- drivers/net/wireless/rtlwifi/Makefile | 10 ++---
- drivers/net/wireless/rtlwifi/base.c   | 19 +++++++--
- drivers/net/wireless/rtlwifi/base.h   |  2 +-
- drivers/net/wireless/rtlwifi/core.c   |  1 +
- drivers/net/wireless/rtlwifi/debug.c  |  1 +
- drivers/net/wireless/rtlwifi/efuse.c  |  1 +
- drivers/net/wireless/rtlwifi/pci.c    |  9 ++++-
- drivers/net/wireless/rtlwifi/ps.c     |  4 ++
- drivers/net/wireless/rtlwifi/usb.c    |  7 ++++
- 10 files changed, 91 insertions(+), 35 deletions(-)
-
---- a/drivers/net/wireless/rtlwifi/Kconfig
-+++ b/drivers/net/wireless/rtlwifi/Kconfig
-@@ -1,29 +1,22 @@
--config RTLWIFI
--	tristate "Realtek wireless card support"
-+menuconfig RTL_CARDS
-+	tristate "Realtek rtlwifi family of devices"
- 	depends on m
--	depends on MAC80211
--	select BACKPORT_FW_LOADER
--	---help---
--	  This is common code for RTL8192CE/RTL8192CU/RTL8192SE/RTL8723AE
--	  drivers.  This module does nothing by itself - the various front-end
--	  drivers need to be enabled to support any desired devices.
--
--	  If you choose to build as a module, it'll be called rtlwifi.
--
--config RTLWIFI_DEBUG
--	bool "Debugging output for rtlwifi driver family"
--	depends on RTLWIFI
-+	depends on MAC80211 && (PCI || USB)
- 	default y
- 	---help---
--	To use the module option that sets the dynamic-debugging level for,
--	the front-end driver, this parameter must be "Y". For memory-limited
--	systems, choose "N". If in doubt, choose "Y".
-+	  This option will enable support for the Realtek mac80211-based
-+	  wireless drivers. Drivers rtl8192ce, rtl8192cu, rtl8192se, rtl8192de,
-+	  rtl8723eu, and rtl8188eu share some common code.
-+
-+if RTL_CARDS
- 
- config RTL8192CE
- 	tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
- 	depends on m
--	depends on RTLWIFI && PCI
-+	depends on PCI
- 	select RTL8192C_COMMON
-+	select RTLWIFI
-+	select RTLWIFI_PCI
- 	---help---
- 	This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe
- 	wireless network adapters.
-@@ -33,7 +26,9 @@ config RTL8192CE
- config RTL8192SE
- 	tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
- 	depends on m
--	depends on RTLWIFI && PCI
-+	depends on PCI
-+	select RTLWIFI
-+	select RTLWIFI_PCI
- 	---help---
- 	This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe
- 	wireless network adapters.
-@@ -43,7 +38,9 @@ config RTL8192SE
- config RTL8192DE
- 	tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
- 	depends on m
--	depends on RTLWIFI && PCI
-+	depends on PCI
-+	select RTLWIFI
-+	select RTLWIFI_PCI
- 	---help---
- 	This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe
- 	wireless network adapters.
-@@ -53,7 +50,9 @@ config RTL8192DE
- config RTL8723AE
- 	tristate "Realtek RTL8723AE PCIe Wireless Network Adapter"
- 	depends on m
--	depends on RTLWIFI && PCI
-+	depends on PCI
-+	select RTLWIFI
-+	select RTLWIFI_PCI
- 	---help---
- 	This is the driver for Realtek RTL8723AE 802.11n PCIe
- 	wireless network adapters.
-@@ -63,7 +62,9 @@ config RTL8723AE
- config RTL8188EE
- 	tristate "Realtek RTL8188EE Wireless Network Adapter"
- 	depends on m
--	depends on RTLWIFI && PCI
-+	depends on PCI
-+	select RTLWIFI
-+	select RTLWIFI_PCI
- 	---help---
- 	This is the driver for Realtek RTL8188EE 802.11n PCIe
- 	wireless network adapters.
-@@ -73,7 +74,9 @@ config RTL8188EE
- config RTL8192CU
- 	tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
- 	depends on m
--	depends on RTLWIFI && USB
-+	depends on USB
-+	select RTLWIFI
-+	select RTLWIFI_USB
- 	select RTL8192C_COMMON
- 	---help---
- 	This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
-@@ -81,8 +84,32 @@ config RTL8192CU
- 
- 	If you choose to build it as a module, it will be called rtl8192cu
- 
-+config RTLWIFI
-+	tristate "Realtek common driver part"
-+	depends on m
-+	select BACKPORT_FW_LOADER
-+
-+config RTLWIFI_PCI
-+	depends on m
-+	tristate
-+
-+config RTLWIFI_USB
-+	depends on m
-+	tristate
-+
-+config RTLWIFI_DEBUG
-+	bool "Debugging output for rtlwifi driver family"
-+	depends on RTLWIFI
-+	default y
-+	---help---
-+	To use the module option that sets the dynamic-debugging level for,
-+	the front-end driver, this parameter must be "Y". For memory-limited
-+	systems, choose "N". If in doubt, choose "Y".
-+
- config RTL8192C_COMMON
- 	tristate
- 	depends on m
- 	depends on RTL8192CE || RTL8192CU
- 	default m
-+
-+endif
---- a/drivers/net/wireless/rtlwifi/Makefile
-+++ b/drivers/net/wireless/rtlwifi/Makefile
-@@ -12,13 +12,11 @@ rtlwifi-objs	:=		\
- 
- rtl8192c_common-objs +=		\
- 
--ifneq ($(CONFIG_PCI),)
--rtlwifi-objs	+= pci.o
--endif
-+obj-$(CPTCFG_RTLWIFI_PCI)	+= rtl_pci.o
-+rtl_pci-objs	:=		pci.o
- 
--ifneq ($(CONFIG_USB),)
--rtlwifi-objs	+= usb.o
--endif
-+obj-$(CPTCFG_RTLWIFI_USB)	+= rtl_usb.o
-+rtl_usb-objs	:=		usb.o
- 
- obj-$(CPTCFG_RTL8192C_COMMON)	+= rtl8192c/
- obj-$(CPTCFG_RTL8192CE)		+= rtl8192ce/
---- a/drivers/net/wireless/rtlwifi/base.c
-+++ b/drivers/net/wireless/rtlwifi/base.c
-@@ -173,6 +173,7 @@ u8 rtl_tid_to_ac(u8 tid)
- {
- 	return tid_to_ac[tid];
- }
-+EXPORT_SYMBOL_GPL(rtl_tid_to_ac);
- 
- static void _rtl_init_hw_ht_capab(struct ieee80211_hw *hw,
- 				  struct ieee80211_sta_ht_cap *ht_cap)
-@@ -407,6 +408,7 @@ void rtl_deinit_deferred_work(struct iee
- 	cancel_delayed_work(&rtlpriv->works.ps_rfon_wq);
- 	cancel_delayed_work(&rtlpriv->works.fwevt_wq);
- }
-+EXPORT_SYMBOL_GPL(rtl_deinit_deferred_work);
- 
- void rtl_init_rfkill(struct ieee80211_hw *hw)
- {
-@@ -440,6 +442,7 @@ void rtl_deinit_rfkill(struct ieee80211_
- {
- 	wiphy_rfkill_stop_polling(hw->wiphy);
- }
-+EXPORT_SYMBOL_GPL(rtl_deinit_rfkill);
- 
- int rtl_init_core(struct ieee80211_hw *hw)
- {
-@@ -490,10 +493,12 @@ int rtl_init_core(struct ieee80211_hw *h
- 
- 	return 0;
- }
-+EXPORT_SYMBOL_GPL(rtl_init_core);
- 
- void rtl_deinit_core(struct ieee80211_hw *hw)
- {
- }
-+EXPORT_SYMBOL_GPL(rtl_deinit_core);
- 
- void rtl_init_rx_config(struct ieee80211_hw *hw)
- {
-@@ -502,6 +507,7 @@ void rtl_init_rx_config(struct ieee80211
- 
- 	rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *) (&mac->rx_conf));
- }
-+EXPORT_SYMBOL_GPL(rtl_init_rx_config);
- 
- /*********************************************************
-  *
-@@ -880,6 +886,7 @@ bool rtl_tx_mgmt_proc(struct ieee80211_h
- 
- 	return true;
- }
-+EXPORT_SYMBOL_GPL(rtl_tx_mgmt_proc);
- 
- void rtl_get_tcb_desc(struct ieee80211_hw *hw,
- 		      struct ieee80211_tx_info *info,
-@@ -1053,6 +1060,7 @@ bool rtl_action_proc(struct ieee80211_hw
- 
- 	return true;
- }
-+EXPORT_SYMBOL_GPL(rtl_action_proc);
- 
- /*should call before software enc*/
- u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
-@@ -1126,6 +1134,7 @@ u8 rtl_is_special_data(struct ieee80211_
- 
- 	return false;
- }
-+EXPORT_SYMBOL_GPL(rtl_is_special_data);
- 
- /*********************************************************
-  *
-@@ -1301,6 +1310,7 @@ void rtl_beacon_statistic(struct ieee802
- 
- 	rtlpriv->link_info.bcn_rx_inperiod++;
- }
-+EXPORT_SYMBOL_GPL(rtl_beacon_statistic);
- 
- void rtl_watchdog_wq_callback(void *data)
- {
-@@ -1794,6 +1804,7 @@ void rtl_recognize_peer(struct ieee80211
- 
- 	mac->vendor = vendor;
- }
-+EXPORT_SYMBOL_GPL(rtl_recognize_peer);
- 
- /*********************************************************
-  *
-@@ -1850,6 +1861,7 @@ struct attribute_group rtl_attribute_gro
- 	.name = "rtlsysfs",
- 	.attrs = rtl_sysfs_entries,
- };
-+EXPORT_SYMBOL_GPL(rtl_attribute_group);
- 
- MODULE_AUTHOR("lizhaoming	<chaoming_li@realsil.com.cn>");
- MODULE_AUTHOR("Realtek WlanFAE	<wlanfae@realtek.com>");
-@@ -1857,7 +1869,8 @@ MODULE_AUTHOR("Larry Finger	<Larry.FInge
- MODULE_LICENSE("GPL");
- MODULE_DESCRIPTION("Realtek 802.11n PCI wireless core");
- 
--struct rtl_global_var global_var = {};
-+struct rtl_global_var rtl_global_var = {};
-+EXPORT_SYMBOL_GPL(rtl_global_var);
- 
- static int __init rtl_core_module_init(void)
- {
-@@ -1865,8 +1878,8 @@ static int __init rtl_core_module_init(v
- 		pr_err("Unable to register rtl_rc, use default RC !!\n");
- 
- 	/* init some global vars */
--	INIT_LIST_HEAD(&global_var.glb_priv_list);
--	spin_lock_init(&global_var.glb_list_lock);
-+	INIT_LIST_HEAD(&rtl_global_var.glb_priv_list);
-+	spin_lock_init(&rtl_global_var.glb_list_lock);
- 
- 	return 0;
- }
---- a/drivers/net/wireless/rtlwifi/base.h
-+++ b/drivers/net/wireless/rtlwifi/base.h
-@@ -147,7 +147,7 @@ void rtl_recognize_peer(struct ieee80211
- u8 rtl_tid_to_ac(u8 tid);
- extern struct attribute_group rtl_attribute_group;
- void rtl_easy_concurrent_retrytimer_callback(unsigned long data);
--extern struct rtl_global_var global_var;
-+extern struct rtl_global_var rtl_global_var;
- int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
- 			 bool isht, u8 desc_rate, bool first_ampdu);
- bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
---- a/drivers/net/wireless/rtlwifi/core.c
-+++ b/drivers/net/wireless/rtlwifi/core.c
-@@ -1330,3 +1330,4 @@ const struct ieee80211_ops rtl_ops = {
- 	.rfkill_poll = rtl_op_rfkill_poll,
- 	.flush = rtl_op_flush,
- };
-+EXPORT_SYMBOL_GPL(rtl_ops);
---- a/drivers/net/wireless/rtlwifi/debug.c
-+++ b/drivers/net/wireless/rtlwifi/debug.c
-@@ -51,3 +51,4 @@ void rtl_dbgp_flag_init(struct ieee80211
- 
- 	/*Init Debug flag enable condition */
- }
-+EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);
---- a/drivers/net/wireless/rtlwifi/efuse.c
-+++ b/drivers/net/wireless/rtlwifi/efuse.c
-@@ -229,6 +229,7 @@ void read_efuse_byte(struct ieee80211_hw
- 
- 	*pbuf = (u8) (value32 & 0xff);
- }
-+EXPORT_SYMBOL_GPL(read_efuse_byte);
- 
- void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)
- {
---- a/drivers/net/wireless/rtlwifi/pci.c
-+++ b/drivers/net/wireless/rtlwifi/pci.c
-@@ -35,6 +35,13 @@
- #include "efuse.h"
- #include <linux/export.h>
- #include <linux/kmemleak.h>
-+#include <linux/module.h>
-+
-+MODULE_AUTHOR("lizhaoming	<chaoming_li@realsil.com.cn>");
-+MODULE_AUTHOR("Realtek WlanFAE	<wlanfae@realtek.com>");
-+MODULE_AUTHOR("Larry Finger	<Larry.FInger@lwfinger.net>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("PCI basic driver for rtlwifi");
- 
- static const u16 pcibridge_vendors[PCI_BRIDGE_VENDOR_MAX] = {
- 	PCI_VENDOR_ID_INTEL,
-@@ -1899,7 +1906,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
- 	rtlpriv->rtlhal.interface = INTF_PCI;
- 	rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data);
- 	rtlpriv->intf_ops = &rtl_pci_ops;
--	rtlpriv->glb_var = &global_var;
-+	rtlpriv->glb_var = &rtl_global_var;
- 
- 	/*
- 	 *init dbgp flags before all
---- a/drivers/net/wireless/rtlwifi/ps.c
-+++ b/drivers/net/wireless/rtlwifi/ps.c
-@@ -269,6 +269,7 @@ void rtl_ips_nic_on(struct ieee80211_hw
- 
- 	spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
- }
-+EXPORT_SYMBOL_GPL(rtl_ips_nic_on);
- 
- /*for FW LPS*/
- 
-@@ -518,6 +519,7 @@ void rtl_swlps_beacon(struct ieee80211_h
- 			 "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed);
- 	}
- }
-+EXPORT_SYMBOL_GPL(rtl_swlps_beacon);
- 
- void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
- {
-@@ -922,3 +925,4 @@ void rtl_p2p_info(struct ieee80211_hw *h
- 	else
- 		rtl_p2p_noa_ie(hw, data, len - FCS_LEN);
- }
-+EXPORT_SYMBOL_GPL(rtl_p2p_info);
---- a/drivers/net/wireless/rtlwifi/usb.c
-+++ b/drivers/net/wireless/rtlwifi/usb.c
-@@ -32,6 +32,13 @@
- #include "ps.h"
- #include "rtl8192c/fw_common.h"
- #include <linux/export.h>
-+#include <linux/module.h>
-+
-+MODULE_AUTHOR("lizhaoming	<chaoming_li@realsil.com.cn>");
-+MODULE_AUTHOR("Realtek WlanFAE	<wlanfae@realtek.com>");
-+MODULE_AUTHOR("Larry Finger	<Larry.FInger@lwfinger.net>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("USB basic driver for rtlwifi");
- 
- #define	REALTEK_USB_VENQT_READ			0xC0
- #define	REALTEK_USB_VENQT_WRITE			0x40
-- 
2.30.2