ath9k: add some more fixes for the tx queueing rework
[openwrt/staging/lynxis/omap.git] / package / kernel / mac80211 / patches / 900-rtlwifi-Fix-build-errors-for-unusual-cases.patch
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
5
6 The present build configuration for the rtlwifi family of drivers will
7 fail under two known conditions:
8
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.
13
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.
18
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.
23
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>
30 ---
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(-)
42
43 --- a/drivers/net/wireless/rtlwifi/Kconfig
44 +++ b/drivers/net/wireless/rtlwifi/Kconfig
45 @@ -1,29 +1,22 @@
46 -config RTLWIFI
47 - tristate "Realtek wireless card support"
48 +menuconfig RTL_CARDS
49 + tristate "Realtek rtlwifi family of devices"
50 depends on m
51 - depends on MAC80211
52 - select BACKPORT_FW_LOADER
53 - ---help---
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.
57 -
58 - If you choose to build as a module, it'll be called rtlwifi.
59 -
60 -config RTLWIFI_DEBUG
61 - bool "Debugging output for rtlwifi driver family"
62 - depends on RTLWIFI
63 + depends on MAC80211 && (PCI || USB)
64 default y
65 ---help---
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.
72 +
73 +if RTL_CARDS
74
75 config RTL8192CE
76 tristate "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
77 depends on m
78 - depends on RTLWIFI && PCI
79 + depends on PCI
80 select RTL8192C_COMMON
81 + select RTLWIFI
82 + select RTLWIFI_PCI
83 ---help---
84 This is the driver for Realtek RTL8192CE/RTL8188CE 802.11n PCIe
85 wireless network adapters.
86 @@ -33,7 +26,9 @@ config RTL8192CE
87 config RTL8192SE
88 tristate "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
89 depends on m
90 - depends on RTLWIFI && PCI
91 + depends on PCI
92 + select RTLWIFI
93 + select RTLWIFI_PCI
94 ---help---
95 This is the driver for Realtek RTL8192SE/RTL8191SE 802.11n PCIe
96 wireless network adapters.
97 @@ -43,7 +38,9 @@ config RTL8192SE
98 config RTL8192DE
99 tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
100 depends on m
101 - depends on RTLWIFI && PCI
102 + depends on PCI
103 + select RTLWIFI
104 + select RTLWIFI_PCI
105 ---help---
106 This is the driver for Realtek RTL8192DE/RTL8188DE 802.11n PCIe
107 wireless network adapters.
108 @@ -53,7 +50,9 @@ config RTL8192DE
109 config RTL8723AE
110 tristate "Realtek RTL8723AE PCIe Wireless Network Adapter"
111 depends on m
112 - depends on RTLWIFI && PCI
113 + depends on PCI
114 + select RTLWIFI
115 + select RTLWIFI_PCI
116 ---help---
117 This is the driver for Realtek RTL8723AE 802.11n PCIe
118 wireless network adapters.
119 @@ -63,7 +62,9 @@ config RTL8723AE
120 config RTL8188EE
121 tristate "Realtek RTL8188EE Wireless Network Adapter"
122 depends on m
123 - depends on RTLWIFI && PCI
124 + depends on PCI
125 + select RTLWIFI
126 + select RTLWIFI_PCI
127 ---help---
128 This is the driver for Realtek RTL8188EE 802.11n PCIe
129 wireless network adapters.
130 @@ -73,7 +74,9 @@ config RTL8188EE
131 config RTL8192CU
132 tristate "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
133 depends on m
134 - depends on RTLWIFI && USB
135 + depends on USB
136 + select RTLWIFI
137 + select RTLWIFI_USB
138 select RTL8192C_COMMON
139 ---help---
140 This is the driver for Realtek RTL8192CU/RTL8188CU 802.11n USB
141 @@ -81,8 +84,32 @@ config RTL8192CU
142
143 If you choose to build it as a module, it will be called rtl8192cu
144
145 +config RTLWIFI
146 + tristate "Realtek common driver part"
147 + depends on m
148 + select BACKPORT_FW_LOADER
149 +
150 +config RTLWIFI_PCI
151 + depends on m
152 + tristate
153 +
154 +config RTLWIFI_USB
155 + depends on m
156 + tristate
157 +
158 +config RTLWIFI_DEBUG
159 + bool "Debugging output for rtlwifi driver family"
160 + depends on RTLWIFI
161 + default y
162 + ---help---
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".
166 +
167 config RTL8192C_COMMON
168 tristate
169 depends on m
170 depends on RTL8192CE || RTL8192CU
171 default m
172 +
173 +endif
174 --- a/drivers/net/wireless/rtlwifi/Makefile
175 +++ b/drivers/net/wireless/rtlwifi/Makefile
176 @@ -12,13 +12,11 @@ rtlwifi-objs := \
177
178 rtl8192c_common-objs += \
179
180 -ifneq ($(CONFIG_PCI),)
181 -rtlwifi-objs += pci.o
182 -endif
183 +obj-$(CPTCFG_RTLWIFI_PCI) += rtl_pci.o
184 +rtl_pci-objs := pci.o
185
186 -ifneq ($(CONFIG_USB),)
187 -rtlwifi-objs += usb.o
188 -endif
189 +obj-$(CPTCFG_RTLWIFI_USB) += rtl_usb.o
190 +rtl_usb-objs := usb.o
191
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)
197 {
198 return tid_to_ac[tid];
199 }
200 +EXPORT_SYMBOL_GPL(rtl_tid_to_ac);
201
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);
207 }
208 +EXPORT_SYMBOL_GPL(rtl_deinit_deferred_work);
209
210 void rtl_init_rfkill(struct ieee80211_hw *hw)
211 {
212 @@ -440,6 +442,7 @@ void rtl_deinit_rfkill(struct ieee80211_
213 {
214 wiphy_rfkill_stop_polling(hw->wiphy);
215 }
216 +EXPORT_SYMBOL_GPL(rtl_deinit_rfkill);
217
218 int rtl_init_core(struct ieee80211_hw *hw)
219 {
220 @@ -490,10 +493,12 @@ int rtl_init_core(struct ieee80211_hw *h
221
222 return 0;
223 }
224 +EXPORT_SYMBOL_GPL(rtl_init_core);
225
226 void rtl_deinit_core(struct ieee80211_hw *hw)
227 {
228 }
229 +EXPORT_SYMBOL_GPL(rtl_deinit_core);
230
231 void rtl_init_rx_config(struct ieee80211_hw *hw)
232 {
233 @@ -502,6 +507,7 @@ void rtl_init_rx_config(struct ieee80211
234
235 rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RCR, (u8 *) (&mac->rx_conf));
236 }
237 +EXPORT_SYMBOL_GPL(rtl_init_rx_config);
238
239 /*********************************************************
240 *
241 @@ -880,6 +886,7 @@ bool rtl_tx_mgmt_proc(struct ieee80211_h
242
243 return true;
244 }
245 +EXPORT_SYMBOL_GPL(rtl_tx_mgmt_proc);
246
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
250
251 return true;
252 }
253 +EXPORT_SYMBOL_GPL(rtl_action_proc);
254
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_
258
259 return false;
260 }
261 +EXPORT_SYMBOL_GPL(rtl_is_special_data);
262
263 /*********************************************************
264 *
265 @@ -1301,6 +1310,7 @@ void rtl_beacon_statistic(struct ieee802
266
267 rtlpriv->link_info.bcn_rx_inperiod++;
268 }
269 +EXPORT_SYMBOL_GPL(rtl_beacon_statistic);
270
271 void rtl_watchdog_wq_callback(void *data)
272 {
273 @@ -1794,6 +1804,7 @@ void rtl_recognize_peer(struct ieee80211
274
275 mac->vendor = vendor;
276 }
277 +EXPORT_SYMBOL_GPL(rtl_recognize_peer);
278
279 /*********************************************************
280 *
281 @@ -1850,6 +1861,7 @@ struct attribute_group rtl_attribute_gro
282 .name = "rtlsysfs",
283 .attrs = rtl_sysfs_entries,
284 };
285 +EXPORT_SYMBOL_GPL(rtl_attribute_group);
286
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");
292
293 -struct rtl_global_var global_var = {};
294 +struct rtl_global_var rtl_global_var = {};
295 +EXPORT_SYMBOL_GPL(rtl_global_var);
296
297 static int __init rtl_core_module_init(void)
298 {
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");
301
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);
307
308 return 0;
309 }
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,
326 };
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
331
332 /*Init Debug flag enable condition */
333 }
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
338
339 *pbuf = (u8) (value32 & 0xff);
340 }
341 +EXPORT_SYMBOL_GPL(read_efuse_byte);
342
343 void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)
344 {
345 --- a/drivers/net/wireless/rtlwifi/pci.c
346 +++ b/drivers/net/wireless/rtlwifi/pci.c
347 @@ -35,6 +35,13 @@
348 #include "efuse.h"
349 #include <linux/export.h>
350 #include <linux/kmemleak.h>
351 +#include <linux/module.h>
352 +
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");
358
359 static const u16 pcibridge_vendors[PCI_BRIDGE_VENDOR_MAX] = {
360 PCI_VENDOR_ID_INTEL,
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;
367
368 /*
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
373
374 spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
375 }
376 +EXPORT_SYMBOL_GPL(rtl_ips_nic_on);
377
378 /*for FW LPS*/
379
380 @@ -518,6 +519,7 @@ void rtl_swlps_beacon(struct ieee80211_h
381 "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed);
382 }
383 }
384 +EXPORT_SYMBOL_GPL(rtl_swlps_beacon);
385
386 void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
387 {
388 @@ -922,3 +925,4 @@ void rtl_p2p_info(struct ieee80211_hw *h
389 else
390 rtl_p2p_noa_ie(hw, data, len - FCS_LEN);
391 }
392 +EXPORT_SYMBOL_GPL(rtl_p2p_info);
393 --- a/drivers/net/wireless/rtlwifi/usb.c
394 +++ b/drivers/net/wireless/rtlwifi/usb.c
395 @@ -32,6 +32,13 @@
396 #include "ps.h"
397 #include "rtl8192c/fw_common.h"
398 #include <linux/export.h>
399 +#include <linux/module.h>
400 +
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");
406
407 #define REALTEK_USB_VENQT_READ 0xC0
408 #define REALTEK_USB_VENQT_WRITE 0x40