mac80211: add rtlwifi drivers
[15.05/openwrt.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