4 Copyright (C) 2006-2009 Jonathan Zarate
18 HW_* boardtype boardnum boardrev boardflags others
19 --------------------- ------------ --------- --------- ----------- ---------------
20 WRT54G 1.x BCM4702 bcm94710dev 42
21 WRT54G 2.0 BCM4712 0x0101 42 0x10 0x0188
22 WRT54G 2.2, 3.x BCM5325E 0x0708 42 0x10 0x0118
23 WRT54G 4.0 BCM5352E 0x0467 42 0x10 0x2558
24 WRT54GL 1.0, 1.1 BCM5352E 0x0467 42 0x10 0x2558
25 WRT54GS 1.0 BCM4712 0x0101 42 0x10 0x0388
26 WRT54GS 1.1, 2.x BCM5325E 0x0708 42 0x10 0x0318
27 WRT54GS 3.0, 4.0 BCM5352E 0x0467 42 0x10 0x2758
28 WRT300N 1.0 BCM4704_BCM5325F_EWC 0x0472 42 0x10 0x10
29 WRTSL54GS BCM4704_BCM5325F 0x042f 42 0x10 0x0018
30 WTR54GS v1, v2 BCM5350 0x456 56 0x10 0xb18 (source: BaoWeiQuan)
32 WHR-G54S BCM5352E 0x467 00 0x13 0x2758 melco_id=30182
33 WHR-HP-G54S BCM5352E 0x467 00 0x13 0x2758 melco_id=30189
34 WZR-G300N BCM4704_BCM5325F_EWC 0x0472 ? 0x10 0x10 melco_id=31120
35 WZR-G54 BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=29115 melco_id=30061 (source: piggy)
36 WBR-G54 bcm94710ap 42 melco_id=ca020906
37 WHR2-A54G54 BCM4704_BCM5325F 0x042f 42 0x10 0x0210 melco_id=290441dd
38 WBR2-G54 BCM4712 0x0101 00 0x10 0x0188 buffalo_id=29bb0332
39 WZR-G108 BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=30153 melco_id=31095 (source: BaoWeiQuan)
41 WHR-G125 BCM5354G 0x048E 00 0x11 0x750 melco_id=32093
43 SE505 BCM4712 0x0101 0x10 0x0388
45 WR850G v1 BCM4702 bcm94710dev 2 GemtekPmonVer=9
46 WR850G v2 (& v3?) BCM4712 0x0101 44 0x0188 CFEver=MotoWRv203
47 WR850G ? BCM4712 0x0101 44 0x10 0x0188 CFEver=MotoWRv207
48 WR850G v3 BCM4712 0x0101 44 0x10 0x0188 CFEver=MotoWRv301
50 *WL-500G Deluxe bcm95365r 45 0x10 hardware_version=WL500gd-01-04-01-50 regulation_domain=0x30DE sdram_init=0x2008
51 WL-500G Premium BCM4704_BCM5325F 0x042f 45 0x10 0x0110 hardware_version=WL500gp-01-02-00-00 regulation_domain=0X10US sdram_init=0x0009
52 WL-500G Premium BCM4704_BCM5325F 0x042f 45 0x10 0x0110 hardware_version=WL500gH-01-00-00-00 regulation_domain=0X30DE sdram_init=0x000b
54 WL-500G Premium v2 HW_BCM5354G 0x48E 45 0x10 0x0750
55 WL-520GU HW_BCM5354G 0x48E 45 0x10 0x0750 hardware_version=WL520GU-01-07-02-00
58 WL-550gE BCM5352E 0x0467 45 0x10 0x0758 hardware_version=WL550gE-01-05-01-00 sdram_init=0x2000
60 *WL-700gE BCM4704_BCM5325F 0x042f 44 0x10 0x0110 hardware_version=WL700g-01-10-01-00 regulation_domain=0X30DE
61 *WL-700gE BCM4704_BCM5325F 0x042f 44 0x10 0x0110 hardware_version=WL700g-01-08-01-00 regulation_domain=0X30DE
63 WX-6615GT BCM4712 0x0101 44 0x10 0x0188 CFEver=GW_WR110G_v100
65 MN-700 bcm94710ap mn700 hardware_version=WL500-02-02-01-00 regulation_domain=0X30DE
68 WZR-HP-G54 BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=30026
69 WZR-RS-G54 BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=30083
70 WZR-RS-G54HP BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=30103
71 WVR-G54-NF BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=28100
72 WHR2-A54-G54 BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=290441dd
73 WHR3-AG54 BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=29130
74 ? WZR SERIES BCM4704_BCM5325F 0x042f 42 0x10 0x10 melco_id=29115
75 RT390W generic BCM4702 bcm94710r4 100 clkfreq=264
76 WR850G v1 BCM4702 bcm94710r4 100
78 *WRH54G BCM5354G 0x048E ? 0x10 ?
80 Viewsonic WR100 BCM4712 0x0101 44 0x10 0x0188 CFEver=SparkLanv100
82 * not supported/not tested
91 int check_hw_type(void)
96 bf
= strtoul(nvram_safe_get("boardflags"), NULL
, 0);
97 s
= nvram_safe_get("boardtype");
98 switch (strtoul(s
, NULL
, 0)) {
102 return ((bf
& BFL_ENETADM
) == 0) ? HW_BCM4712_BCM5325E
: HW_BCM4712
;
104 return ((bf
& BFL_ENETADM
) == 0) ? HW_BCM5325E
: HW_UNKNOWN
;
106 return ((bf
& BFL_ENETADM
) == 0) ? HW_BCM4704_BCM5325F
: HW_UNKNOWN
;
108 return ((bf
& BFL_ENETADM
) == 0) ? HW_BCM4704_BCM5325F_EWC
: HW_UNKNOWN
;
110 return HW_BCM4705L_BCM5325E_EWC
;
117 // WR850G may have "bcm94710dev " (extra space)
118 if ((strncmp(s
, "bcm94710dev", 11) == 0) || (strcmp(s
, "bcm94710r4") == 0)) {
130 hw
= check_hw_type();
132 switch (strtoul(nvram_safe_get("melco_id"), NULL
, 16)) {
137 return MODEL_WHRG54S
;
139 return MODEL_WHRHPG54
;
143 return MODEL_WZRHPG54
;
145 return MODEL_WZRRSG54
;
147 return MODEL_WZRRSG54HP
;
149 return MODEL_WVRG54NF
;
151 return MODEL_WHR3AG54
;
153 return MODEL_WHR2A54G54
;
155 return MODEL_WHRG125
;
158 return MODEL_WZRG108
;
161 return MODEL_WZRG300N
;
166 return MODEL_UNKNOWN
;
169 switch (strtoul(nvram_safe_get("buffalo_id"), NULL
, 16)) {
171 return MODEL_WBR2G54
;
175 return MODEL_UNKNOWN
;
178 if (nvram_match("boardnum", "mn700")) {
182 if (hw
== HW_UNKNOWN
) return MODEL_UNKNOWN
;
185 if (hw == HW_BCM5354G) {
186 if (nvram_match("boardrev", "0x11")) {
192 switch (strtoul(nvram_safe_get("boardnum"), NULL
, 0)) {
195 case HW_BCM4704_BCM5325F
:
196 return MODEL_WRTSL54GS
;
198 case HW_BCM4704_BCM5325F_EWC
:
199 return MODEL_WRT300N
;
205 case HW_BCM4704_BCM5325F
:
206 return MODEL_WL500GP
;
208 return MODEL_WL500GE
;
210 if (strncmp(nvram_safe_get("hardware_version"), "WL520GU", 7) == 0) return MODEL_WL520GU
;
211 return MODEL_WL500GPv2
;
215 if (nvram_match("GemtekPmonVer", "9")) return MODEL_WR850GV1
;
218 c
= nvram_safe_get("CFEver");
219 if (strncmp(c
, "MotoWRv", 7) == 0) return MODEL_WR850GV2
;
220 if (strncmp(c
, "GW_WR110G", 9) == 0) return MODEL_WX6615GT
;
221 if (strcmp(c
, "SparkLanv100") == 0) return MODEL_WR100
;
224 if (strcmp(nvram_safe_get("clkfreq"), "264") == 0) return MODEL_RT390W
;
227 if (hw
== HW_BCM5350
) return MODEL_WTR54GS
;
231 return MODEL_UNKNOWN
;
234 int supports(unsigned long attr
)
236 return (strtoul(nvram_safe_get("t_features"), NULL
, 0) & attr
) != 0;