diff -Nuar a/src/linux/linux/drivers/mtd/devices/sflash.c b/src/linux/linux/drivers/mtd/devices/sflash.c
--- a/src/linux/linux/drivers/mtd/devices/sflash.c 2010-06-28 05:23:56.000000000 +0200
+++ b/src/linux/linux/drivers/mtd/devices/sflash.c 2009-11-30 18:26:46.000000000 +0100
@@ -81,6 +81,7 @@
struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
int bytes, ret = 0;
+ if(retlen) *retlen = 0;
/* Check address range */
if (!len)
return 0;
@@ -89,7 +90,6 @@
down(&sflash->lock);
- *retlen = 0;
while (len) {
if ((bytes = sflash_read(sflash->sbh, sflash->cc, (uint) from, len, buf)) < 0) {
ret = bytes;
@@ -98,7 +98,7 @@
from += (loff_t) bytes;
len -= bytes;
buf += bytes;
- *retlen += bytes;
+ if(retlen) *retlen += bytes;
}
up(&sflash->lock);
@@ -112,6 +112,7 @@
struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
int bytes, ret = 0;
+ if(retlen) *retlen = 0;
/* Check address range */
if (!len)
return 0;
@@ -120,7 +121,6 @@
down(&sflash->lock);
- *retlen = 0;
while (len) {
if ((bytes = sflash_write(sflash->sbh, sflash->cc, (uint) to, len, buf)) < 0) {
ret = bytes;
@@ -131,7 +131,7 @@
to += (loff_t) bytes;
len -= bytes;
buf += bytes;
- *retlen += bytes;
+ if(retlen) *retlen += bytes;
}
up(&sflash->lock);
diff -Nuar a/src/router/rc/buttons.c b/src/router/rc/buttons.c
--- a/src/router/rc/buttons.c 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/rc/buttons.c 2009-11-30 18:26:46.000000000 +0100
@@ -75,6 +75,13 @@
ses_mask = 1 << 4;
ses_led = LED_DMZ;
break;
+
+ case MODEL_WL1600GL:
+ reset_mask = 1 << 3;
+ ses_mask = 1 << 4;
+ ses_led = LED_AOSS;
+ break;
+
/*
case MODEL_WRH54G:
reset_mask = 1 << 6;
diff -Nuar a/src/router/rc/init.c b/src/router/rc/init.c
--- a/src/router/rc/init.c 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/rc/init.c 2009-11-30 18:26:46.000000000 +0100
@@ -637,14 +637,34 @@
#error WL_BSS_INFO_VERSION
#endif
#if WL_BSS_INFO_VERSION >= 108
-/*
- case MODEL_WRH54G:
- mfr = "Linksys";
- name = "WRH54G";
- nvram_set("opo", "12");
+ case MODEL_WL1600GL:
+ mfr = "Ovislink";
+ name = "WL1600GL";
+ nvram_set("vlan0ports", "0 1 2 3 5*");
+ nvram_set("vlan1ports", "4 5");
+ nvram_set("manual_boot_nv", "1");
+ features = SUP_SES;
+ if(nvram_match( "et0macaddr", "00:90:4c:c0:00:08" ) )
+ {
+ //fix mac
+ unsigned char mac[6];
+ FILE *in = fopen( "/dev/mtd/0ro", "rb" );
+ if( in != NULL ) //special sercom mac address handling
+ {
+ fseek( in, 0x1ffa0, SEEK_SET );
+ fread( mac, 6, 1, in );
+ fclose( in );
+ char macstr[32];
+ sprintf( macstr, "%02X:%02X:%02X:%02X:%02X:%02X",
+ ( int )mac[0] & 0xff, ( int )mac[1] & 0xff,
+ ( int )mac[2] & 0xff, ( int )mac[3] & 0xff,
+ ( int )mac[4] & 0xff, ( int )mac[5] & 0xff );
+ nvram_set( "et0macaddr", macstr );
+ eval( "ifconfig", "eth0", "hw", "ether", macstr );
+ }
+ }
break;
-*/
case MODEL_WHRG125:
mfr = "Buffalo";
name = "WHR-G125";
diff -Nuar a/src/router/shared/id.c b/src/router/shared/id.c
--- a/src/router/shared/id.c 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/shared/id.c 2009-11-30 18:26:46.000000000 +0100
@@ -82,7 +82,7 @@
TrueMobile 2300 bcm94710ap 44 "ModelId=WX-5565", Rev A00
-
+WL1600GL BCM5354G 0x048E 8 0x11
* not supported/not tested
@@ -188,13 +188,13 @@
if (hw == HW_UNKNOWN) return MODEL_UNKNOWN;
-/*
+
if (hw == HW_BCM5354G) {
if (nvram_match("boardrev", "0x11")) {
- return MODEL_WRH54G;
+ return MODEL_WL1600GL;
}
}
-*/
+
switch (strtoul(nvram_safe_get("boardnum"), NULL, 0)) {
case 42:
diff -Nuar a/src/router/shared/led.c b/src/router/shared/led.c
--- a/src/router/shared/led.c 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/shared/led.c 2009-11-30 18:26:46.000000000 +0100
@@ -93,6 +93,7 @@
static int wr850g1[] = { 7, 3, 255, 255, 255, 255, 255, 255 };
static int wr850g2[] = { 0, 1, 255, 255, 255, 255, 255, 255 };
static int wtr54gs[] = { 1, -1, 255, 255, 255, 255, 255, 255 };
+ static int wl1600gl[] = { 1, -5, 0, 255, 255, 2, 255, 255 };
char s[16];
int n;
int b;
@@ -143,6 +144,9 @@
case MODEL_WZRG108:
b = wzrg54[which];
break;
+ case MODEL_WL1600GL:
+ b = wl1600gl[which];
+ break;
/*
case MODEL_WHR2A54G54:
if (which != LED_DIAG) return 0;
@@ -194,7 +198,7 @@
}
if (b < 0) {
- if (b == -99) b = 1; // -0 substitute
+ if (b == -99) b = 0; // -0 substitute
else b = -b;
}
else if (mode != LED_PROBE) {
diff -Nuar a/src/router/shared/misc.c b/src/router/shared/misc.c
--- a/src/router/shared/misc.c 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/shared/misc.c 2009-11-30 18:26:46.000000000 +0100
@@ -98,7 +98,11 @@
struct ifreq ifr;
proto = get_wan_proto();
- if (proto == WP_DISABLED) return 0;
+ if (proto == WP_DISABLED)
+ {
+ led(LED_WHITE,LED_OFF);
+ return 0;
+ }
if ((proto == WP_PPTP) || (proto == WP_L2TP) || (proto == WP_PPPOE)) {
if (f_read_string("/tmp/ppp/link", buf1, sizeof(buf1)) > 0) {
@@ -144,7 +148,7 @@
_x_dprintf("%s: !IFF_UP\n", __FUNCTION__);
}
}
-
+ led(LED_WHITE,up);
return up;
}
diff -Nuar a/src/router/shared/shared.h b/src/router/shared/shared.h
--- a/src/router/shared/shared.h 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/shared/shared.h 2009-11-30 18:26:46.000000000 +0100
@@ -99,7 +99,8 @@
MODEL_WTR54GS,
MODEL_WR100,
MODEL_WLA2G54L,
- MODEL_TM2300
+ MODEL_TM2300,
+ MODEL_WL1600GL
#if TOMATO_N
,
diff -Nuar a/src/router/www/advanced-wireless.asp b/src/router/www/advanced-wireless.asp
--- a/src/router/www/advanced-wireless.asp 2010-06-28 05:23:57.000000000 +0200
+++ b/src/router/www/advanced-wireless.asp 2009-11-30 18:26:46.000000000 +0100
@@ -34,7 +34,7 @@
if (!v_range('_wl_dtim', quiet, 1, 255)) return 0;
if (!v_range('_wl_frag', quiet, 256, 2346)) return 0;
if (!v_range('_wl_rts', quiet, 0, 2347)) return 0;
- if (!v_range(E('_wl_txpwr'), quiet, 1, 251)) return 0;
+ if (!v_range(E('_wl_txpwr'), quiet, 1, 100)) return 0;
E('_wl_wme_no_ack').disabled = E('_wl_wme').selectedIndex != 1;
return 1;
@@ -137,7 +137,7 @@
{ title: 'Transmit Power', name: 'wl_txpwr', type: 'text', maxlen: 3, size: 5,
suffix: hp ?
' mW (before amplification) (range: 1 - 251; default: 10)' :
- ' mW (range: 1 - 251; default: 42)',
+ ' mW (range: 1 - 100; default: 42)',
value: nvram.wl_txpwr },
{ title: 'Transmission Rate', name: 'wl_rate', type: 'select',
options: [['0','Auto *'],['1000000','1 Mbps'],['2000000','2 Mbps'],['5500000','5.5 Mbps'],['6000000','6 Mbps'],['9000000','9 Mbps'],['11000000','11 Mbps'],['12000000','12 Mbps'],['18000000','18 Mbps'],['24000000','24 Mbps'],['36000000','36 Mbps'],['48000000','48 Mbps'],['54000000','54 Mbps']],
diff -Nuar a/src/router/httpd/tomato.c b/src/router/httpd/tomato.c
--- a/src/router/httpd/tomato.c>2010-06-28 05:23:56.000000000 +0200
+++ b/src/router/httpd/tomato.c>2009-11-30 18:26:46.000000000 +0100
@@ -756,6 +756,7 @@
if (write) {
if (!nvram_match((char *)v->name, p)) {
if (v->vtype != VT_TEMP) dirty = 1;
+ if(l==0 && !strcmp(v->name,"wl_radio")) set_radio(0);
nvram_set(v->name, p);
}
}