From 716ca530e1c4515d8683c9d5be3d56b301758b66 Mon Sep 17 00:00:00 2001 From: James <> Date: Wed, 4 Nov 2015 11:49:21 +0000 Subject: trunk-47381 --- package/kernel/broadcom-wl/Makefile | 177 +++ .../files/etc/hotplug.d/net/20-broadcom_wds | 61 + .../kernel/broadcom-wl/files/etc/init.d/wlunbind | 29 + .../kernel/broadcom-wl/files/lib/wifi/broadcom.sh | 477 ++++++++ .../broadcom-wl/patches/003-compat-2.6.35.patch | 39 + .../broadcom-wl/patches/004-remove-pcmcia.patch | 22 + .../patches/005-fix-mem-leak-on-unload.patch | 31 + .../broadcom-wl/patches/006-generic-dma-api.patch | 88 ++ .../broadcom-wl/patches/007-use-glue-driver.patch | 188 ++++ .../patches/008-fix_virtual_interfaces.patch | 132 +++ .../broadcom-wl/patches/009-fix_compile_3_2.patch | 27 + .../patches/010-remove_irqf_samble_random.patch | 11 + .../broadcom-wl/patches/011-fix_compile_3_4.patch | 12 + .../broadcom-wl/patches/012-compat-3.10.patch | 47 + .../broadcom-wl/patches/013-interface-name.patch | 11 + .../patches/014-fix-band-reporting.patch | 41 + .../015-support-probe-of-wds-interfaces.patch | 11 + .../broadcom-wl/patches/020-musl-fixes.patch | 75 ++ .../patches/030-remove_devinit_devexit.patch | 74 ++ .../patches/100-fix_nvram_two_devices.patch | 32 + .../patches/110-add_number_to_dev_name.patch | 11 + .../patches/120-fixup-mac-addresses.patch | 92 ++ .../patches/200-add_bcm_a8xx_support.patch | 12 + .../broadcom-wl/patches/910-fallback-sprom.patch | 78 ++ .../patches/912-pci-bus-nvram-hack.patch | 11 + .../913-avoid-dbe-on-ifs_ctl-readw-hack.patch | 12 + .../patches/914-eliminate-date-time-error.patch | 21 + package/kernel/broadcom-wl/src/glue/Makefile | 17 + package/kernel/broadcom-wl/src/glue/wl_glue.c | 315 ++++++ package/kernel/broadcom-wl/src/glue/wl_glue.h | 22 + package/kernel/broadcom-wl/src/wlc.c | 1181 ++++++++++++++++++++ 31 files changed, 3357 insertions(+) create mode 100644 package/kernel/broadcom-wl/Makefile create mode 100644 package/kernel/broadcom-wl/files/etc/hotplug.d/net/20-broadcom_wds create mode 100755 package/kernel/broadcom-wl/files/etc/init.d/wlunbind create mode 100644 package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh create mode 100644 package/kernel/broadcom-wl/patches/003-compat-2.6.35.patch create mode 100644 package/kernel/broadcom-wl/patches/004-remove-pcmcia.patch create mode 100644 package/kernel/broadcom-wl/patches/005-fix-mem-leak-on-unload.patch create mode 100644 package/kernel/broadcom-wl/patches/006-generic-dma-api.patch create mode 100644 package/kernel/broadcom-wl/patches/007-use-glue-driver.patch create mode 100644 package/kernel/broadcom-wl/patches/008-fix_virtual_interfaces.patch create mode 100644 package/kernel/broadcom-wl/patches/009-fix_compile_3_2.patch create mode 100644 package/kernel/broadcom-wl/patches/010-remove_irqf_samble_random.patch create mode 100644 package/kernel/broadcom-wl/patches/011-fix_compile_3_4.patch create mode 100644 package/kernel/broadcom-wl/patches/012-compat-3.10.patch create mode 100644 package/kernel/broadcom-wl/patches/013-interface-name.patch create mode 100644 package/kernel/broadcom-wl/patches/014-fix-band-reporting.patch create mode 100644 package/kernel/broadcom-wl/patches/015-support-probe-of-wds-interfaces.patch create mode 100644 package/kernel/broadcom-wl/patches/020-musl-fixes.patch create mode 100644 package/kernel/broadcom-wl/patches/030-remove_devinit_devexit.patch create mode 100644 package/kernel/broadcom-wl/patches/100-fix_nvram_two_devices.patch create mode 100644 package/kernel/broadcom-wl/patches/110-add_number_to_dev_name.patch create mode 100644 package/kernel/broadcom-wl/patches/120-fixup-mac-addresses.patch create mode 100644 package/kernel/broadcom-wl/patches/200-add_bcm_a8xx_support.patch create mode 100644 package/kernel/broadcom-wl/patches/910-fallback-sprom.patch create mode 100644 package/kernel/broadcom-wl/patches/912-pci-bus-nvram-hack.patch create mode 100644 package/kernel/broadcom-wl/patches/913-avoid-dbe-on-ifs_ctl-readw-hack.patch create mode 100644 package/kernel/broadcom-wl/patches/914-eliminate-date-time-error.patch create mode 100644 package/kernel/broadcom-wl/src/glue/Makefile create mode 100644 package/kernel/broadcom-wl/src/glue/wl_glue.c create mode 100644 package/kernel/broadcom-wl/src/glue/wl_glue.h create mode 100644 package/kernel/broadcom-wl/src/wlc.c (limited to 'package/kernel/broadcom-wl') diff --git a/package/kernel/broadcom-wl/Makefile b/package/kernel/broadcom-wl/Makefile new file mode 100644 index 0000000..003986c --- /dev/null +++ b/package/kernel/broadcom-wl/Makefile @@ -0,0 +1,177 @@ +# +# Copyright (C) 2006-2014 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=broadcom-wl +PKG_VERSION:=5.10.56.27.3 +PKG_RELEASE:=8 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(ARCH).tar.bz2 +PKG_SOURCE_URL:=http://downloads.openwrt.org/sources + +PKG_MD5SUM.mipsel:=3363e3a6b3d9d73c49dea870c7834eac +PKG_MD5SUM.mips:=f8de63debc75333d6b4e28193eb051ff +PKG_MD5SUM:=$(PKG_MD5SUM.$(ARCH)) + +PKG_USE_MIPS16:=0 + +include $(INCLUDE_DIR)/package.mk + +define Package/broadcom-wl/Default + SECTION:=kernel + CATEGORY:=Kernel modules + DEPENDS:=@PACKAGE_kmod-brcm-wl||PACKAGE_kmod-brcm-wl-mini + SUBMENU:=Proprietary BCM43xx WiFi driver + SUBMENUDEP:=@TARGET_brcm47xx||TARGET_brcm63xx +endef + +define KernelPackage/brcm-wl/Default + $(call Package/broadcom-wl/Default) + SECTION:=kernel + DEPENDS:=@TARGET_brcm47xx||TARGET_brcm63xx +wireless-tools + TITLE:=Kernel driver for BCM43xx chipsets + FILES:=$(PKG_BUILD_DIR)/driver$(1)/wl.ko $(PKG_BUILD_DIR)/glue/wl_glue.ko + AUTOLOAD:=$(call AutoLoad,30,wl_glue wl) +endef + +define KernelPackage/brcm-wl/Default/description + This package contains the proprietary wireless driver for the Broadcom + BCM43xx chipset. +endef + +define KernelPackage/brcm-wl +$(call KernelPackage/brcm-wl/Default,) + TITLE+= (normal version) +endef + +define KernelPackage/brcm-wl/description +$(call KernelPackage/brcm-wl/Default/description) +endef + +define KernelPackage/brcm-wl-mini +$(call KernelPackage/brcm-wl/Default,-mini) + TITLE+= (Legacy version) +endef + +define KernelPackage/brcm-wl-mini/description +$(call KernelPackage/brcm-wl/Default/description) +endef + +define Package/wlc +$(call Package/broadcom-wl/Default) + TITLE:=wl driver setup utility +endef + +define Package/wlc/description + This package contains an utility for initializing the proprietary Broadcom + wl driver. +endef + +define Package/wl +$(call Package/broadcom-wl/Default) + TITLE:=Proprietary Broadcom wl driver config utility +endef + +define Package/wl/description + This package contains the proprietary utility (wl) for configuring the + proprietary Broadcom wl driver. +endef + +define Package/nas +$(call Package/broadcom-wl/Default) + TITLE:=Proprietary Broadcom WPA/WPA2 authenticator +endef + +define Package/nas/description + This package contains the proprietary WPA/WPA2 authenticator (nas) for the + proprietary Broadcom wl driver. +endef + +MAKE_KMOD := $(MAKE) -C "$(LINUX_DIR)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH="$(LINUX_KARCH)" \ + PATH="$(TARGET_PATH)" \ + SUBDIRS="$(PKG_BUILD_DIR)/kmod" \ + +define Build/Prepare + $(call Build/Prepare/Default) + $(CP) $(PKG_BUILD_DIR)/driver $(PKG_BUILD_DIR)/driver-mini + $(CP) ./src/glue $(PKG_BUILD_DIR)/glue +endef + +define Build/Compile + # Compile the kernel part + $(MAKE_KMOD) \ + SUBDIRS="$(PKG_BUILD_DIR)/driver" \ + MODFLAGS="-DMODULE -mlong-calls" \ + modules + + $(MAKE_KMOD) \ + SUBDIRS="$(PKG_BUILD_DIR)/driver-mini" \ + MODFLAGS="-DMODULE -mlong-calls" \ + BUILD_TYPE="wl_apsta_mini" \ + modules + + # Compile glue driver + $(MAKE_KMOD) -C "$(LINUX_DIR)" \ + SUBDIRS="$(PKG_BUILD_DIR)/glue" \ + modules + + # Compile libshared + $(MAKE) -C $(PKG_BUILD_DIR)/shared \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) -I. -I$(PKG_BUILD_DIR)/driver/include" \ + all + + $(TARGET_CC) -o $(PKG_BUILD_DIR)/wlc \ + -I$(PKG_BUILD_DIR)/shared -I$(PKG_BUILD_DIR)/driver/include \ + ./src/wlc.c $(PKG_BUILD_DIR)/shared/libshared.a + + $(TARGET_CC) -o $(PKG_BUILD_DIR)/nas \ + $(PKG_BUILD_DIR)/nas_exe.o \ + $(PKG_BUILD_DIR)/shared/libshared.a + + $(TARGET_CC) -o $(PKG_BUILD_DIR)/wl \ + $(PKG_BUILD_DIR)/wl_exe.o \ + $(PKG_BUILD_DIR)/shared/libshared.a +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_BUILD_DIR)/shared/libshared.a $(1)/usr/lib/ +endef + +define Package/wlc/install + $(CP) ./files/* $(1)/ + $(INSTALL_DIR) $(1)/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/wlc $(1)/sbin/ +endef + +define Package/wlc/postinst +#!/bin/sh +[ -n "$${IPKG_INSTROOT}" ] || /etc/init.d/wlunbind enable || true +endef + +define Package/wl/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/wl $(1)/usr/sbin/ +endef + +define Package/nas/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/nas $(1)/usr/sbin/ + $(LN) nas $(1)/usr/sbin/nas4not + $(LN) nas $(1)/usr/sbin/nas4wds +endef + +$(eval $(call KernelPackage,brcm-wl)) +$(eval $(call KernelPackage,brcm-wl-mini)) +$(eval $(call BuildPackage,wlc)) +$(eval $(call BuildPackage,wl)) +$(eval $(call BuildPackage,nas)) diff --git a/package/kernel/broadcom-wl/files/etc/hotplug.d/net/20-broadcom_wds b/package/kernel/broadcom-wl/files/etc/hotplug.d/net/20-broadcom_wds new file mode 100644 index 0000000..35c4218 --- /dev/null +++ b/package/kernel/broadcom-wl/files/etc/hotplug.d/net/20-broadcom_wds @@ -0,0 +1,61 @@ +include /lib/wifi + +setup_broadcom_wds() { + local iface="$1" + local remote="$(wlc ifname "$iface" wdsmac)" + + [ -z "$remote" ] && return + + config_cb() { + [ -z "$CONFIG_SECTION" ] && return + + config_get type "$CONFIG_SECTION" TYPE + [ "$type" = "wifi-iface" ] || return + + config_get network "$CONFIG_SECTION" network + [ -z "$network" ] && return + + config_get addr "$CONFIG_SECTION" bssid + addr=$(echo "$addr" | tr 'A-F' 'a-f') + [ "$addr" = "$remote" ] && { + local cfg="$CONFIG_SECTION" + + include /lib/network + scan_interfaces + + for network in $network; do + setup_interface "$iface" "$network" + done + + config_get encryption "$cfg" encryption + config_get key "$cfg" key + config_get ssid "$cfg" ssid + + [ "$encryption" != "none" ] && { + sleep 5 + case "$encryption" in + psk|PSK) + nas4not "$network" "$iface" up auto tkip psk "$key" "$ssid" + ;; + psk2|PSK2) + nas4not "$network" "$iface" up auto aes psk "$key" "$ssid" + ;; + psk+psk2|psk2+psk|PSK+PSK2|PSK2+PSK) + nas4not "$network" "$iface" up auto aes+tkip psk "$key" "$ssid" + ;; + *) + nas4not lan "$iface" up auto aes "$encryption" "$key" "$ssid" + ;; + esac + } + } + } + + config_load wireless +} + +case "$ACTION" in + add|register) + [ "${INTERFACE%%[0-1]-*}" = wds ] && setup_broadcom_wds "$INTERFACE" + ;; +esac diff --git a/package/kernel/broadcom-wl/files/etc/init.d/wlunbind b/package/kernel/broadcom-wl/files/etc/init.d/wlunbind new file mode 100755 index 0000000..0a29db5 --- /dev/null +++ b/package/kernel/broadcom-wl/files/etc/init.d/wlunbind @@ -0,0 +1,29 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2010-2011 OpenWrt.org + +START=09 + +unbind_driver() { + local driver="$1" + local sysfs="/sys/bus/pci/drivers/$driver" + if [ -d "$sysfs" ]; then + local lnk + for lnk in $sysfs/*; do + [ -h "$lnk" ] || continue + case "${lnk##*/}" in + *:*:*.*) + logger "Unbinding WL PCI device ${lnk##*/} from $driver" + echo -n "${lnk##*/}" > "$sysfs/unbind" + ;; + esac + done + fi +} + +boot() { + unbind_driver b43-pci-bridge + unbind_driver bcma-pci-bridge +} + +start() { :; } +stop() { :; } diff --git a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh new file mode 100644 index 0000000..a9c4de2 --- /dev/null +++ b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh @@ -0,0 +1,477 @@ +append DRIVERS "broadcom" + +scan_broadcom() { + local device="$1" + local vif vifs wds + local adhoc sta apmode mon disabled + local adhoc_if sta_if ap_if mon_if + + config_get vifs "$device" vifs + for vif in $vifs; do + config_get_bool disabled "$vif" disabled 0 + [ $disabled -eq 0 ] || continue + + local mode + config_get mode "$vif" mode + case "$mode" in + adhoc) + adhoc=1 + adhoc_if="$vif" + ;; + sta) + sta=1 + sta_if="$vif" + ;; + ap) + apmode=1 + ap_if="${ap_if:+$ap_if }$vif" + ;; + wds) + local addr + config_get addr "$vif" bssid + [ -z "$addr" ] || { + addr=$(echo "$addr" | tr 'A-F' 'a-f') + append wds "$addr" + } + ;; + monitor) + mon=1 + mon_if="$vif" + ;; + *) echo "$device($vif): Invalid mode";; + esac + done + config_set "$device" wds "$wds" + + local _c= + for vif in ${adhoc_if:-$sta_if $ap_if $mon_if}; do + config_set "$vif" ifname "${device}${_c:+-$_c}" + _c=$((${_c:-0} + 1)) + done + config_set "$device" vifs "${adhoc_if:-$sta_if $ap_if $mon_if}" + + ap=1 + infra=1 + if [ "$_c" -gt 1 ]; then + mssid=1 + else + mssid= + fi + apsta=0 + radio=1 + monitor=0 + case "$adhoc:$sta:$apmode:$mon" in + 1*) + ap=0 + mssid= + infra=0 + ;; + :1:1:) + apsta=1 + wet=1 + ;; + :1::) + wet=1 + ap=0 + mssid= + ;; + :::1) + wet=1 + ap=0 + mssid= + monitor=1 + ;; + ::) + radio=0 + ;; + esac +} + +disable_broadcom() { + local device="$1" + set_wifi_down "$device" + ( + include /lib/network + + local pid_file=/var/run/nas.$device.pid + [ -e $pid_file ] && start-stop-daemon -K -q -s SIGKILL -p $pid_file && rm $pid_file + + # make sure the interfaces are down and removed from all bridges + local dev ifname + for dev in /sys/class/net/wds${device##wl}-* /sys/class/net/${device}-* /sys/class/net/${device}; do + if [ -e "$dev" ]; then + ifname=${dev##/sys/class/net/} + ip link set dev "$ifname" down + unbridge "$ifname" + fi + done + + # make sure all of the devices are disabled in the driver + local ifdown= + local bssmax=$(wlc ifname "$device" bssmax) + local vif=$((${bssmax:-4} - 1)) + append ifdown "down" "$N" + append ifdown "wds none" "$N" + while [ $vif -ge 0 ]; do + append ifdown "vif $vif" "$N" + append ifdown "enabled 0" "$N" + vif=$(($vif - 1)) + done + + wlc ifname "$device" stdin <