1 From 6f334c2b3966f10cbd089bb124ec0e114d8d8c77 Mon Sep 17 00:00:00 2001
2 From: Larry Finger <Larry.Finger@lwfinger.net>
3 Date: Fri, 12 Jul 2013 15:32:15 -0500
4 Subject: [PATCH] rtlwifi: Fix build errors for unusual cases
6 The present build configuration for the rtlwifi family of drivers will
7 fail under two known conditions:
9 (1) If rtlwifi is selected without selecting any of the dependent drivers,
10 there are errors in the build.
11 (2) If the PCI drivers are built into the kernel and the USB drivers are modules,
12 or vice versa, there are missing globals.
14 The first condition is fixed by never building rtlwifi unless at least one
15 of the device drivers is selected. The second failure is fixed by splitting
16 the PCI and USB codes out of rtlwifi, and creating their own mini drivers.
17 If the drivers that use them are modules, they will also be modules.
19 Although a number of files are touched by this patch, only Makefile and Kconfig
20 have undergone significant changes. The only modifications to the other files
21 were to export entry points needed by the new rtl_pci and rtl_usb units, or to
22 rename two variables that had names that were likely to cause namespace collisions.
24 Reported-by: Fengguang Wu <fengguang.wu@intel.com> [Condition 1]
25 Reported-by: Ben Hutchings <bhutchings@solarflare.com> [Condition 2]
26 Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
27 Cc: Ben Hutchings <bhutchings@solarflare.com>
28 Cc: Fengguang Wu <fengguang.wu@intel.com>
29 Signed-off-by: John W. Linville <linville@tuxdriver.com>
31 drivers/net/wireless/rtlwifi/Kconfig | 72 +++++++++++++++++++++++------------
32 drivers/net/wireless/rtlwifi/Makefile | 10 ++---
33 drivers/net/wireless/rtlwifi/base.c | 19 +++++++--
34 drivers/net/wireless/rtlwifi/base.h | 2 +-
35 drivers/net/wireless/rtlwifi/core.c | 1 +
36 drivers/net/wireless/rtlwifi/debug.c | 1 +
37 drivers/net/wireless/rtlwifi/efuse.c | 1 +
38 drivers/net/wireless/rtlwifi/pci.c | 9 ++++-
39 drivers/net/wireless/rtlwifi/ps.c | 4 ++
40 drivers/net/wireless/rtlwifi/usb.c | 7 ++++
41 10 files changed, 91 insertions(+), 35 deletions(-)
43 --- a/drivers/net/wireless/rtlwifi/Kconfig
44 +++ b/drivers/net/wireless/rtlwifi/Kconfig
47 - tristate "Realtek wireless card support"
49 + tristate "Realtek rtlwifi family of devices"
52 - select BACKPORT_FW_LOADER
54 - This is common code for RTL8192CE/RTL8192CU/RTL8192SE/RTL8723AE
55 - drivers. This module does nothing by itself - the various front-end
56 - drivers need to be enabled to support any desired devices.
58 - If you choose to build as a module, it'll be called rtlwifi.
61 - bool "Debugging output for rtlwifi driver family"
63 + depends on MAC80211 && (PCI || USB)
66 - To use the module option that sets the dynamic-debugging level for,
67 - the front-end driver, this parameter must be "Y". For memory-limited
68 - systems, choose "N". If in doubt, choose "Y".
69 + This option will enable support for the Realtek mac80211-based
70 + wireless drivers. Drivers rtl8192ce, rtl8192cu, rtl8192se, rtl8192de,
71 + rtl8723eu, and rtl8188eu share some common code.
76 tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
78 - depends on RTLWIFI && PCI
80 select RTL8192C_COMMON
84 This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe
85 wireless network adapters.
86 @@ -33,7 +26,9 @@ config RTL8192CE
88 tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
90 - depends on RTLWIFI && PCI
95 This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe
96 wireless network adapters.
97 @@ -43,7 +38,9 @@ config RTL8192SE
99 tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
101 - depends on RTLWIFI && PCI
106 This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe
107 wireless network adapters.
108 @@ -53,7 +50,9 @@ config RTL8192DE
110 tristate "Realtek RTL8723AE PCIe Wireless Network Adapter"
112 - depends on RTLWIFI && PCI
117 This is the driver for Realtek RTL8723AE 802.11n PCIe
118 wireless network adapters.
119 @@ -63,7 +62,9 @@ config RTL8723AE
121 tristate "Realtek RTL8188EE Wireless Network Adapter"
123 - depends on RTLWIFI && PCI
128 This is the driver for Realtek RTL8188EE 802.11n PCIe
129 wireless network adapters.
130 @@ -73,7 +74,9 @@ config RTL8188EE
132 tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
134 - depends on RTLWIFI && USB
138 select RTL8192C_COMMON
140 This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
141 @@ -81,8 +84,32 @@ config RTL8192CU
143 If you choose to build it as a module, it will be called rtl8192cu
146 + tristate "Realtek common driver part"
148 + select BACKPORT_FW_LOADER
158 +config RTLWIFI_DEBUG
159 + bool "Debugging output for rtlwifi driver family"
163 + To use the module option that sets the dynamic-debugging level for,
164 + the front-end driver, this parameter must be "Y". For memory-limited
165 + systems, choose "N". If in doubt, choose "Y".
167 config RTL8192C_COMMON
170 depends on RTL8192CE || RTL8192CU
174 --- a/drivers/net/wireless/rtlwifi/Makefile
175 +++ b/drivers/net/wireless/rtlwifi/Makefile
176 @@ -12,13 +12,11 @@ rtlwifi-objs := \
178 rtl8192c_common-objs += \
180 -ifneq ($(CONFIG_PCI),)
181 -rtlwifi-objs += pci.o
183 +obj-$(CPTCFG_RTLWIFI_PCI) += rtl_pci.o
184 +rtl_pci-objs := pci.o
186 -ifneq ($(CONFIG_USB),)
187 -rtlwifi-objs += usb.o
189 +obj-$(CPTCFG_RTLWIFI_USB) += rtl_usb.o
190 +rtl_usb-objs := usb.o
192 obj-$(CPTCFG_RTL8192C_COMMON) += rtl8192c/
193 obj-$(CPTCFG_RTL8192CE) += rtl8192ce/
194 --- a/drivers/net/wireless/rtlwifi/base.c
195 +++ b/drivers/net/wireless/rtlwifi/base.c
196 @@ -173,6 +173,7 @@ u8 rtl_tid_to_ac(u8 tid)
198 return tid_to_ac[tid];
200 +EXPORT_SYMBOL_GPL(rtl_tid_to_ac);
202 static void _rtl_init_hw_ht_capab(struct ieee80211_hw *hw,
203 struct ieee80211_sta_ht_cap *ht_cap)
204 @@ -407,6 +408,7 @@ void rtl_deinit_deferred_work(struct iee
205 cancel_delayed_work(&rtlpriv->works.ps_rfon_wq);
206 cancel_delayed_work(&rtlpriv->works.fwevt_wq);
208 +EXPORT_SYMBOL_GPL(rtl_deinit_deferred_work);
210 void rtl_init_rfkill(struct ieee80211_hw *hw)
212 @@ -440,6 +442,7 @@ void rtl_deinit_rfkill(struct ieee80211_
214 wiphy_rfkill_stop_polling(hw->wiphy);
216 +EXPORT_SYMBOL_GPL(rtl_deinit_rfkill);
218 int rtl_init_core(struct ieee80211_hw *hw)
220 @@ -490,10 +493,12 @@ int rtl_init_core(struct ieee80211_hw *h
224 +EXPORT_SYMBOL_GPL(rtl_init_core);
226 void rtl_deinit_core(struct ieee80211_hw *hw)
229 +EXPORT_SYMBOL_GPL(rtl_deinit_core);
231 void rtl_init_rx_config(struct ieee80211_hw *hw)
233 @@ -502,6 +507,7 @@ void rtl_init_rx_config(struct ieee80211
235 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *) (&mac->rx_conf));
237 +EXPORT_SYMBOL_GPL(rtl_init_rx_config);
239 /*********************************************************
241 @@ -880,6 +886,7 @@ bool rtl_tx_mgmt_proc(struct ieee80211_h
245 +EXPORT_SYMBOL_GPL(rtl_tx_mgmt_proc);
247 void rtl_get_tcb_desc(struct ieee80211_hw *hw,
248 struct ieee80211_tx_info *info,
249 @@ -1053,6 +1060,7 @@ bool rtl_action_proc(struct ieee80211_hw
253 +EXPORT_SYMBOL_GPL(rtl_action_proc);
255 /*should call before software enc*/
256 u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
257 @@ -1126,6 +1134,7 @@ u8 rtl_is_special_data(struct ieee80211_
261 +EXPORT_SYMBOL_GPL(rtl_is_special_data);
263 /*********************************************************
265 @@ -1301,6 +1310,7 @@ void rtl_beacon_statistic(struct ieee802
267 rtlpriv->link_info.bcn_rx_inperiod++;
269 +EXPORT_SYMBOL_GPL(rtl_beacon_statistic);
271 void rtl_watchdog_wq_callback(void *data)
273 @@ -1794,6 +1804,7 @@ void rtl_recognize_peer(struct ieee80211
275 mac->vendor = vendor;
277 +EXPORT_SYMBOL_GPL(rtl_recognize_peer);
279 /*********************************************************
281 @@ -1850,6 +1861,7 @@ struct attribute_group rtl_attribute_gro
283 .attrs = rtl_sysfs_entries,
285 +EXPORT_SYMBOL_GPL(rtl_attribute_group);
287 MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>");
288 MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
289 @@ -1857,7 +1869,8 @@ MODULE_AUTHOR("Larry Finger <Larry.FInge
290 MODULE_LICENSE("GPL");
291 MODULE_DESCRIPTION("Realtek 802.11n PCI wireless core");
293 -struct rtl_global_var global_var = {};
294 +struct rtl_global_var rtl_global_var = {};
295 +EXPORT_SYMBOL_GPL(rtl_global_var);
297 static int __init rtl_core_module_init(void)
299 @@ -1865,8 +1878,8 @@ static int __init rtl_core_module_init(v
300 pr_err("Unable to register rtl_rc, use default RC !!\n");
302 /* init some global vars */
303 - INIT_LIST_HEAD(&global_var.glb_priv_list);
304 - spin_lock_init(&global_var.glb_list_lock);
305 + INIT_LIST_HEAD(&rtl_global_var.glb_priv_list);
306 + spin_lock_init(&rtl_global_var.glb_list_lock);
310 --- a/drivers/net/wireless/rtlwifi/base.h
311 +++ b/drivers/net/wireless/rtlwifi/base.h
312 @@ -147,7 +147,7 @@ void rtl_recognize_peer(struct ieee80211
313 u8 rtl_tid_to_ac(u8 tid);
314 extern struct attribute_group rtl_attribute_group;
315 void rtl_easy_concurrent_retrytimer_callback(unsigned long data);
316 -extern struct rtl_global_var global_var;
317 +extern struct rtl_global_var rtl_global_var;
318 int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
319 bool isht, u8 desc_rate, bool first_ampdu);
320 bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
321 --- a/drivers/net/wireless/rtlwifi/core.c
322 +++ b/drivers/net/wireless/rtlwifi/core.c
323 @@ -1330,3 +1330,4 @@ const struct ieee80211_ops rtl_ops = {
324 .rfkill_poll = rtl_op_rfkill_poll,
325 .flush = rtl_op_flush,
327 +EXPORT_SYMBOL_GPL(rtl_ops);
328 --- a/drivers/net/wireless/rtlwifi/debug.c
329 +++ b/drivers/net/wireless/rtlwifi/debug.c
330 @@ -51,3 +51,4 @@ void rtl_dbgp_flag_init(struct ieee80211
332 /*Init Debug flag enable condition */
334 +EXPORT_SYMBOL_GPL(rtl_dbgp_flag_init);
335 --- a/drivers/net/wireless/rtlwifi/efuse.c
336 +++ b/drivers/net/wireless/rtlwifi/efuse.c
337 @@ -229,6 +229,7 @@ void read_efuse_byte(struct ieee80211_hw
339 *pbuf = (u8) (value32 & 0xff);
341 +EXPORT_SYMBOL_GPL(read_efuse_byte);
343 void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)
345 --- a/drivers/net/wireless/rtlwifi/pci.c
346 +++ b/drivers/net/wireless/rtlwifi/pci.c
349 #include <linux/export.h>
350 #include <linux/kmemleak.h>
351 +#include <linux/module.h>
353 +MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>");
354 +MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
355 +MODULE_AUTHOR("Larry Finger <Larry.FInger@lwfinger.net>");
356 +MODULE_LICENSE("GPL");
357 +MODULE_DESCRIPTION("PCI basic driver for rtlwifi");
359 static const u16 pcibridge_vendors[PCI_BRIDGE_VENDOR_MAX] = {
361 @@ -1899,7 +1906,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
362 rtlpriv->rtlhal.interface = INTF_PCI;
363 rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data);
364 rtlpriv->intf_ops = &rtl_pci_ops;
365 - rtlpriv->glb_var = &global_var;
366 + rtlpriv->glb_var = &rtl_global_var;
369 *init dbgp flags before all
370 --- a/drivers/net/wireless/rtlwifi/ps.c
371 +++ b/drivers/net/wireless/rtlwifi/ps.c
372 @@ -269,6 +269,7 @@ void rtl_ips_nic_on(struct ieee80211_hw
374 spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
376 +EXPORT_SYMBOL_GPL(rtl_ips_nic_on);
380 @@ -518,6 +519,7 @@ void rtl_swlps_beacon(struct ieee80211_h
381 "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed);
384 +EXPORT_SYMBOL_GPL(rtl_swlps_beacon);
386 void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
388 @@ -922,3 +925,4 @@ void rtl_p2p_info(struct ieee80211_hw *h
390 rtl_p2p_noa_ie(hw, data, len - FCS_LEN);
392 +EXPORT_SYMBOL_GPL(rtl_p2p_info);
393 --- a/drivers/net/wireless/rtlwifi/usb.c
394 +++ b/drivers/net/wireless/rtlwifi/usb.c
397 #include "rtl8192c/fw_common.h"
398 #include <linux/export.h>
399 +#include <linux/module.h>
401 +MODULE_AUTHOR("lizhaoming <chaoming_li@realsil.com.cn>");
402 +MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
403 +MODULE_AUTHOR("Larry Finger <Larry.FInger@lwfinger.net>");
404 +MODULE_LICENSE("GPL");
405 +MODULE_DESCRIPTION("USB basic driver for rtlwifi");
407 #define REALTEK_USB_VENQT_READ 0xC0
408 #define REALTEK_USB_VENQT_WRITE 0x40