From bfd22208df0cb11fa5f8041ca79a5d7e9d29cfa0 Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 11 Nov 2005 14:49:55 +0000
Subject: [PATCH] add linksys nvram fixup to S05nvram (fixes #32)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@2417 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 .../files/brcm-2.4/etc/init.d/S05nvram        | 145 ++++++++++++------
 1 file changed, 100 insertions(+), 45 deletions(-)

diff --git a/target/linux/package/base-files/files/brcm-2.4/etc/init.d/S05nvram b/target/linux/package/base-files/files/brcm-2.4/etc/init.d/S05nvram
index 0d1300b96..b3b4997fc 100755
--- a/target/linux/package/base-files/files/brcm-2.4/etc/init.d/S05nvram
+++ b/target/linux/package/base-files/files/brcm-2.4/etc/init.d/S05nvram
@@ -1,3 +1,4 @@
+#!/bin/sh
 # NVRAM setup
 #
 # This file handles the NVRAM quirks of various hardware.
@@ -6,80 +7,134 @@
 alias debug=${DEBUG:-:}
 
 remap () {
-  for type in lan wifi wan pppoe
-  do
-    for s in '' s
-    do
-      eval nvram set ${type}_ifname$s=\"$(nvram get ${type}_ifname$s|sed s/$1/$2/g)\" 
-    done
-  done
+	for type in lan wifi wan pppoe
+	do
+		for s in '' s
+		do
+			eval nvram set ${type}_ifname$s=\"$(nvram get ${type}_ifname$s|sed s/$1/$2/g)\" 
+		done
+	done
 }
 
 nvram_default() {
-  [ -z "$(nvram get $1)" ] && nvram set "$1=$2"
+	[ -z "$(nvram get $1)" ] && nvram set "$1=$2"
 }
 
+nvram_set() { # for the linksys fixup part
+	[ "$(nvram get "$1")" = "$2" ] || {
+		COMMIT=1
+		nvram set "$1=$2"
+	}
+}
+
+# work around braindead CFE defaults in linksys routers
+boardtype=$(nvram get boardtype)
+boardflags=$(($(nvram get boardflags)))
+[ "$boardtype" = "bcm4710dev" ] && boardtype="0xdeadbeef"
+adm_switch="$(( ($boardflags & 0x80) >> 7 ))"
+case "$(( $boardtype ))" in
+	"$((0x708))")
+		if [ "$adm_switch" = 0 ]; then
+			nvram_set sdram_init 0x010b
+			[ "$COMMIT" = 1 ] && {
+				nvram_set sdram_config 0x0062
+				nvram_set clkfreq 216
+				nvram_set sdram_ncdl 0x0
+				nvram_set pa0itssit 62
+				nvram_set pa0b0 0x15eb
+				nvram_set pa0b1 0xfa82
+				nvram_set pa0b2 0xfe66
+				nvram_set pa0maxpwr 0x4e
+			}
+		fi
+	;;
+	"$((0x467))")
+		nvram_set sdram_init 0x010c
+		[ "$COMMIT" = 1 ] && {
+			nvram_set sdram_config 0x0062
+			nvram_set sdram_ncdl 0x0
+			nvram_set pa0itssit 62
+			nvram_set pa0b0 0x168b
+			nvram_set pa0b1 0xfabf
+			nvram_set pa0b2 0xfeaf
+			nvram_set pa0maxpwr 0x4e
+		}
+	;;
+esac
+[ "$COMMIT" = "1" ] && nvram commit
+
+
 # linksys bug; remove when not using static configuration for lan
 nvram set lan_proto="static"
 
 # hacks for wrt54g 1.x hardware
 [  "$(nvram get boardnum)"  = "42" \
 -a "$(nvram get boardtype)" = "bcm94710dev" ] && {
-  debug "### wrt54g 1.x hack ###"
-  nvram set vlan1hwname="et0"
-  nvram set vlan2hwname="et0"
-  remap eth0 vlan2
-  remap eth1 vlan1
+	debug "### wrt54g 1.x hack ###"
+	nvram set vlan1hwname="et0"
+	nvram set vlan2hwname="et0"
+	remap eth0 vlan2
+	remap eth1 vlan1
 }
 
 # hacks for asus wl-500g deluxe
 [  "$(nvram get boardtype)" = "bcm95365r" \
 -a "$(nvram get boardnum)" = "45" ] && {
-  debug "### wl-500g deluxe hacks ###"
-  nvram set vlan0hwname="et0"
-  nvram set vlan1hwname="et0"
-  remap eth0.1 vlan0
-  remap eth0 vlan1
-
-  # set up the vlan*ports variables for the asus wl-500g deluxe
-  # if they don't already exist 
-  nvram_default vlan0ports "1 2 3 4 5*"
-  nvram_default vlan1ports "0 5"
+	debug "### wl-500g deluxe hacks ###"
+	nvram set vlan0hwname="et0"
+	nvram set vlan1hwname="et0"
+	remap eth0.1 vlan0
+	remap eth0 vlan1
+
+	# set up the vlan*ports variables for the asus wl-500g deluxe
+	# if they don't already exist 
+	nvram_default vlan0ports "1 2 3 4 5*"
+	nvram_default vlan1ports "0 5"
 }
 
-# hacks for asus wl-300g
-[ "$(nvram get productid)" = "WL300g" ] && {
-  debug "### wl-300g hacks ###"
-  nvram set lan_ifnames="eth0 eth2"
-  nvram set wan_ifname="none"
-}
-
-# hacks for asus wl-hdd
-[ "$(nvram get productid)" = "WLHDD" ] && {
-  debug "### wl-hdd hacks ###"
-  nvram set lan_ifnames="eth1 eth2"
-  nvram set wan_ifname="none"
-}
+# hacks for asus
+case "$(nvram get productid)" in 
+	WL300g)
+		debug "### wl-300g hacks ###"
+		nvram set lan_ifnames="eth0 eth2"
+		nvram set wan_ifname="none"
+	;;
+	WLHDD)
+		debug "### wl-hdd hacks ###"
+		nvram set lan_ifnames="eth1 eth2"
+		nvram set wan_ifname="none"
+	;;
+esac
 
 # hacks for wap54g hardware
 [  "$(nvram get boardnum)" = "2" \
 -o "$(nvram get boardnum)" = "1024" ] && {
-  debug "### wap54g hack ###"
-  nvram set wan_ifname="none"
+	debug "### wap54g hack ###"
+	nvram set wan_ifname="none"
 }
 
 # hacks for buffalo wla2-g54l
 [  "$(nvram get boardnum)" = "00" \
 -a "$(nvram get product_name)" = "Product_name" \
 -o "$(nvram get product_name)" = "WLA2-G54L" ] && {
-  debug "### wla2-g54l hacks ###"
-  nvram set wan_ifname="none"
-  nvram set lan_ifnames="vlan0"
+	debug "### wla2-g54l hacks ###"
+	nvram set wan_ifname="none"
+	nvram set lan_ifnames="vlan0"
 }
 
 # needed at least for wrt54gs v1.1 and wrt54g v2.0, v2.2
 [ \! -z "$(nvram get boardrev)" ] && {
-  nvram set wl0id=0x4320
+	nvram_default wl0id 0x4320
+}
+
+WAN_PROTO="$(nvram get wan_proto)"
+[  "$WAN_PROTO" = "pptp" \
+-o "$WAN_PROTO" = "pppoe" ] && {
+	WAN_IFNAME="$(nvram get wan_ifname)"
+	[ "${WAN_IFNAME%%[0-9]*}" = "ppp" ] || {
+		nvram set wan_ifname=ppp0
+		nvram set ${WAN_PROTO}_ifname="$WAN_IFNAME"
+	}
 }
 
 # defaults
@@ -95,8 +150,8 @@ nvram_default wl0_infra 1
 nvram_default wl0_radio 1
 
 [ "$(nvram get il0macaddr)" = "00:90:4c:5f:00:2a" ] && {
-  # if default wifi mac, set two higher than the lan mac
-  nvram set il0macaddr=$(nvram get et0macaddr|
-  awk '{OFS=FS=":";for(x=7,y=2;--x;){$x=sprintf("%02x",(y+="0x"$x)%256);y/=256}print}')
+	# if default wifi mac, set two higher than the lan mac
+	nvram set il0macaddr=$(nvram get et0macaddr|
+	awk '{OFS=FS=":";for(x=7,y=2;--x;){$x=sprintf("%02x",(y+="0x"$x)%256);y/=256}print}')
 }
 
-- 
2.20.1