From c7976ae5f8f7dac392d01550ef8c357a0d2133c7 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sun, 4 Aug 2013 15:32:36 +0000 Subject: mac80211: add rtlwifi drivers Signed-off-by: Viktar Palstsiuk [jogo@openwrt.org: add missing DRIVER_11N_SUPPORT select, add missing usb dependencies, backport upstream fixes for Kconfig issues] Signed-off-by: Jonas Gorski SVN-Revision: 37687 --- ...tlwifi-Fix-build-errors-for-unusual-cases.patch | 408 +++++++++++++++++++++ 1 file changed, 408 insertions(+) create mode 100644 package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch (limited to 'package/kernel/mac80211/patches') 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 new file mode 100644 index 0000000000..b1e943e15e --- /dev/null +++ b/package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch @@ -0,0 +1,408 @@ +From 6f334c2b3966f10cbd089bb124ec0e114d8d8c77 Mon Sep 17 00:00:00 2001 +From: Larry Finger +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 [Condition 1] +Reported-by: Ben Hutchings [Condition 2] +Signed-off-by: Larry Finger +Cc: Ben Hutchings +Cc: Fengguang Wu +Signed-off-by: John W. Linville +--- + 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 "); + MODULE_AUTHOR("Realtek WlanFAE "); +@@ -1857,7 +1869,8 @@ MODULE_AUTHOR("Larry Finger + #include ++#include ++ ++MODULE_AUTHOR("lizhaoming "); ++MODULE_AUTHOR("Realtek WlanFAE "); ++MODULE_AUTHOR("Larry Finger "); ++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 ++#include ++ ++MODULE_AUTHOR("lizhaoming "); ++MODULE_AUTHOR("Realtek WlanFAE "); ++MODULE_AUTHOR("Larry Finger "); ++MODULE_LICENSE("GPL"); ++MODULE_DESCRIPTION("USB basic driver for rtlwifi"); + + #define REALTEK_USB_VENQT_READ 0xC0 + #define REALTEK_USB_VENQT_WRITE 0x40 -- cgit v1.2.3