From c7976ae5f8f7dac392d01550ef8c357a0d2133c7 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sun, 4 Aug 2013 15:32:36 +0000 Subject: [PATCH] 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 --- package/kernel/mac80211/Makefile | 123 +++++- ...i-Fix-build-errors-for-unusual-cases.patch | 408 ++++++++++++++++++ 2 files changed, 530 insertions(+), 1 deletion(-) create mode 100644 package/kernel/mac80211/patches/900-rtlwifi-Fix-build-errors-for-unusual-cases.patch diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index ddf2237ebd..5bc62a988d 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -29,7 +29,9 @@ PKG_DRIVERS = \ rtl8180 rtl8187 zd1211rw mac80211-hwsim carl9170 b43 b43legacy \ ath9k-common ath9k ath9k-htc ath net-libipw net-ipw2100 net-ipw2200 \ mwl8k net-hermes net-hermes-pci net-hermes-plx net-hermes-pcmcia \ - iwl-legacy iwl3945 iwl4965 iwlagn wl12xx lib80211 + iwl-legacy iwl3945 iwl4965 iwlagn wl12xx lib80211 \ + rtlwifi rtlwifi-pci rtlwifi-usb rtl8192c-common rtl8192ce rtl8192se \ + rtl8192de rtl8192cu PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_kmod-mac80211 \ @@ -40,6 +42,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_B43_DEBUG \ CONFIG_PACKAGE_B43_PIO \ CONFIG_PACKAGE_B43_N_PHY \ + CONFIG_PACKAGE_RTLWIFI_DEBUG \ CONFIG_ATH_USER_REGD \ CARL9170_FW_VERSION:=1.9.6 @@ -349,6 +352,106 @@ $(call KernelPackage/rtl818x/Default) AUTOLOAD:=$(call AutoLoad,27,rtl8187) endef +define KernelPackage/rtlwifi/config + menu "Configuration" + depends on PACKAGE_kmod-rtlwifi + + config PACKAGE_RTLWIFI_DEBUG + bool "Realtek wireless debugging" + help + Say Y, if you want to debug realtek wireless drivers. + + endmenu +endef + +define KernelPackage/rtlwifi + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek common driver part + DEPENDS+= +kmod-mac80211 +@DRIVER_11N_SUPPORT + FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtlwifi.ko + AUTOLOAD:=$(call AutoLoad,26,rtlwifi) + MENU:=1 +endef + +define KernelPackage/rtlwifi-pci + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek common driver part (PCI support) + DEPENDS+= @PCI_SUPPORT +kmod-rtlwifi + FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl_pci.ko + AUTOLOAD:=$(call AutoLoad,27,rtl_pci) + HIDDEN:=1 +endef + +define KernelPackage/rtlwifi-usb + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek common driver part (USB support) + DEPENDS+= @USB_SUPPORT +kmod-usb-core +kmod-rtlwifi + FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl_usb.ko + AUTOLOAD:=$(call AutoLoad,27,rtl_usb) + HIDDEN:=1 +endef + +define KernelPackage/rtl8192c-common + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek RTL8192CE/RTL8192CU common support module + DEPENDS+= +kmod-rtlwifi + FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common.ko + AUTOLOAD:=$(call AutoLoad,27,rtl8192c-common) + HIDDEN:=1 +endef + +define KernelPackage/rtl8192ce + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek RTL8192CE/RTL8188CE support + DEPENDS+= +kmod-rtlwifi-pci +kmod-rtl8192c-common + FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl8192ce/rtl8192ce.ko + AUTOLOAD:=$(call AutoLoad,28,rtl8192ce) +endef + +define KernelPackage/rtl8192ce/install + $(INSTALL_DIR) $(1)/lib/firmware/rtlwifi + $(INSTALL_DATA) $(PKG_BUILD_DIR)/$(PKG_LINUX_FIRMWARE_SUBDIR)/rtlwifi/rtl8192cfw.bin $(1)/lib/firmware/rtlwifi +endef + +define KernelPackage/rtl8192se + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek RTL8192SE/RTL8191SE support + DEPENDS+= +kmod-rtlwifi-pci + FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko + AUTOLOAD:=$(call AutoLoad,28,rtl8192se) +endef + +define KernelPackage/rtl8192se/install + $(INSTALL_DIR) $(1)/lib/firmware/rtlwifi + $(INSTALL_DATA) $(PKG_BUILD_DIR)/$(PKG_LINUX_FIRMWARE_SUBDIR)/rtlwifi/rtl8192sefw.bin $(1)/lib/firmware/rtlwifi +endef + +define KernelPackage/rtl8192de + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek RTL8192DE/RTL8188DE support + DEPENDS+= +kmod-rtlwifi-pci + FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl8192de/rtl8192de.ko + AUTOLOAD:=$(call AutoLoad,28,rtl8192de) +endef + +define KernelPackage/rtl8192de/install + $(INSTALL_DIR) $(1)/lib/firmware/rtlwifi + $(INSTALL_DATA) $(PKG_BUILD_DIR)/$(PKG_LINUX_FIRMWARE_SUBDIR)/rtlwifi/rtl8192defw.bin $(1)/lib/firmware/rtlwifi +endef + +define KernelPackage/rtl8192cu + $(call KernelPackage/mac80211/Default) + TITLE:=Realtek RTL8192CU/RTL8188CU support + DEPENDS+= +kmod-rtlwifi-usb +kmod-rtl8192c-common + FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/rtlwifi/rtl8192cu/rtl8192cu.ko + AUTOLOAD:=$(call AutoLoad,28,rtl8192cu) +endef + +define KernelPackage/rtl8192cu/install + $(INSTALL_DIR) $(1)/lib/firmware/rtlwifi + $(INSTALL_DATA) $(PKG_BUILD_DIR)/$(PKG_LINUX_FIRMWARE_SUBDIR)/rtlwifi/rtl8192cufw.bin $(1)/lib/firmware/rtlwifi +endef + ZD1211FW_NAME:=zd1211-firmware ZD1211FW_VERSION:=1.4 define Download/zd1211rw @@ -1287,6 +1390,16 @@ config-$(call config_package,rtl8187) += RTL8187 config-$(call config_package,wl12xx) += WL_TI WLCORE WLCORE_SDIO WL12XX config-$(call config_package,zd1211rw) += ZD1211RW +config-$(call config_package,rtlwifi) += RTL_CARDS RTLWIFI +config-$(call config_package,rtlwifi-pci) += RTLWIFI_PCI +config-$(call config_package,rtlwifi-usb) += RTLWIFI_USB +config-$(call config_package,rtl8192c-common) += RTL8192C_COMMON +config-$(call config_package,rtl8192ce) += RTL8192CE +config-$(call config_package,rtl8192se) += RTL8192SE +config-$(call config_package,rtl8192de) += RTL8192DE +config-$(call config_package,rtl8192cu) += RTL8192CU +config-$(CONFIG_PACKAGE_RTLWIFI_DEBUG) += RTLWIFI_DEBUG + config-$(CONFIG_LEDS_TRIGGERS) += MAC80211_LEDS B43_LEDS B43LEGACY_LEDS MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \ @@ -1608,6 +1721,14 @@ $(eval $(call KernelPackage,rt2800-pci)) $(eval $(call KernelPackage,rt2800-usb)) $(eval $(call KernelPackage,rtl8180)) $(eval $(call KernelPackage,rtl8187)) +$(eval $(call KernelPackage,rtlwifi)) +$(eval $(call KernelPackage,rtlwifi-pci)) +$(eval $(call KernelPackage,rtlwifi-usb)) +$(eval $(call KernelPackage,rtl8192c-common)) +$(eval $(call KernelPackage,rtl8192ce)) +$(eval $(call KernelPackage,rtl8192se)) +$(eval $(call KernelPackage,rtl8192de)) +$(eval $(call KernelPackage,rtl8192cu)) $(eval $(call KernelPackage,zd1211rw)) $(eval $(call KernelPackage,mac80211-hwsim)) $(eval $(call KernelPackage,ath9k-common)) 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 -- 2.25.1