ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect b/package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect
new file mode 100644
index 0000000..a63d6bc
--- /dev/null
+++ b/package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ "${ACTION}" = "add" ] && [ "${INTERFACE%%[0-9]}" = "wl" ] && {
+	/sbin/wifi config
+}
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() { :; }