From edab966e45dc53325de169b25d12dcaef6f64e10 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 12 Jan 2014 18:56:15 +0000
Subject: [PATCH] brcm47xx: fix network failsafe indication

Remove the code used on the old switch driver.
The Ethernet drive is loaded as a module and needs some time to get up
therefor we added some wait function.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>

SVN-Revision: 39254
---
 .../lib/preinit/05_init_interfaces_brcm       | 35 ++++------------
 .../lib/preinit/05_set_failsafe_switch_brcm   | 18 ---------
 .../lib/preinit/15_set_preinit_interface_brcm | 40 +++++--------------
 3 files changed, 18 insertions(+), 75 deletions(-)
 delete mode 100644 target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm

diff --git a/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm b/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm
index 76382e5cee..4b0d0eb674 100644
--- a/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm
+++ b/target/linux/brcm47xx/base-files/lib/preinit/05_init_interfaces_brcm
@@ -1,37 +1,16 @@
 #!/bin/sh
 
-set_preinit_iface() {
+preinit_iface() {
 	ifname=eth0
 
 	# hardware specific overrides
-	case "$(cat /proc/diag/model)" in
-		"Linksys WAP54G V1") ifname=eth1;;
-		"ASUS WL-HDD") ifname=eth1;;
-		"ASUS WL-300g") ifname=eth1;;
-		"ASUS (unknown, BCM4702)") ifname=eth1;;
-		"Sitecom WL-105b") ifname=eth1;;
+	case "$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)" in
+		"Asus WLHDD") ifname=eth1;;
+		"Asus WL300G") ifname=eth1;;
 	esac
 
-	# The interface has to be up to configure the switch
-	ifconfig $ifname 0.0.0.0 up
-	[ -f /lib/modules/`uname -r`/switch-robo.ko ] && {
-		rmmod switch-robo
-		insmod switch-robo
-	}
-	[ -f /lib/modules/`uname -r`/switch-adm.ko ] && {
-		rmmod switch-adm
-		insmod switch-adm
-	}
+	local try=0;
+	while [ $((try++)) -le 5 ] && [ ! -f /sys/class/net/$ifname/operstate ]; do sleep 1; done
 }
 
-init_iface() {
-	[ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && {
-		case "$(cat /proc/switch/eth0/cpuport)" in
-			"5") cpu_port="5u*";;
-			"8") cpu_port="8u*";;
-		esac
-	}
-}
-
-boot_hook_add preinit_main set_preinit_iface
-boot_hook_add preinit_main init_iface
+boot_hook_add preinit_main preinit_iface
diff --git a/target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm b/target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm
deleted file mode 100644
index 7e030acfff..0000000000
--- a/target/linux/brcm47xx/base-files/lib/preinit/05_set_failsafe_switch_brcm
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-failsafe_ip() {
-	[ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && {
-		# The switch will connect all ports, The switch will leak
-		# packages from wan to lan and vice versa in failsafe mode
-		echo 1 > /proc/switch/eth0/reset
-		echo 1 > /proc/switch/eth0/enable
-		echo 0 > /proc/switch/eth0/enable_vlan
-		echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/1/ports
-	}
-
-	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
-		ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
-	}
-}
-
-boot_hook_add failsafe failsafe_ip
diff --git a/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm b/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm
index bc749398f5..aab50bf1a9 100644
--- a/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm
+++ b/target/linux/brcm47xx/base-files/lib/preinit/15_set_preinit_interface_brcm
@@ -1,34 +1,16 @@
 #!/bin/sh
 
-preinit_net_echo_send() {
-	preinit_ip
+preinit_ip() {
+	# if the preinit interface isn't specified and ifname is set in
+	# preinit.arch use that interface
+	if [ -z "$pi_ifname" ]; then
+		pi_ifname=$ifname
+	fi
 
-	[ -d /proc/switch/eth0 ] && [ "$pi_ifname" = "eth0" ] && {
-
-		echo 1 > /proc/switch/eth0/reset
-		echo 1 > /proc/switch/eth0/enable
-		echo 1 > /proc/switch/eth0/enable_vlan
-
-		# this would be easier if we blasted the message across all ports
-		# but we don't want packets leaking across interfaces
-		for port in $(seq 0 4); do {
-
-			echo "$port ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/1/ports
-			sleep 1
-
-			netmsg $pi_broadcast "$1"
-		}; done
-
-	} || netmsg $pi_broadcast "$1"
-}
-
-preinit_net_echo() {
 	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
-		{ 
-			[ "$pi_preinit_net_messages" = "y" ] || {
-    		     		[ "$pi_failsafe_net_message"  = "true" ] && 
-    		         	    [ "$pi_preinit_no_failsafe_netmsg" != "y" ] 
-    		         }
-		} && preinit_net_echo_send $1
-    	}
+		ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
+
+		local try=0;
+		while [ $((try++)) -le 5 ] && [ ! $(cat /sys/class/net/$pi_ifname/operstate) == "up" ]; do sleep 1; done
+	}
 }