1#!/bin/sh 2# 3# Copyright (c) 2013 The Linux Foundation. All rights reserved. 4# Copyright (C) 2009-2011 OpenWrt.org 5# 6 7AR71XX_BOARD_NAME= 8AR71XX_MODEL= 9 10ar71xx_get_mtd_offset_size_format() { 11 local mtd="$1" 12 local offset="$2" 13 local size="$3" 14 local format="$4" 15 local dev 16 17 dev=$(find_mtd_part $mtd) 18 [ -z "$dev" ] && return 19 20 dd if=$dev bs=1 skip=$offset count=$size 2>/dev/null | hexdump -v -e "1/1 \"$format\"" 21} 22 23ar71xx_get_mtd_part_magic() { 24 local mtd="$1" 25 ar71xx_get_mtd_offset_size_format "$mtd" 0 4 %02x 26} 27 28wndr3700_board_detect() { 29 local machine="$1" 30 local magic 31 local name 32 33 name="wndr3700" 34 35 magic="$(ar71xx_get_mtd_part_magic firmware)" 36 case $magic in 37 "33373030") 38 machine="NETGEAR WNDR3700" 39 ;; 40 "33373031") 41 local model 42 model=$(ar71xx_get_mtd_offset_size_format art 56 10 %c) 43 if [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' ]; then 44 machine="NETGEAR WNDR3700v2" 45 elif [ -z "$model" ] || [ "$model" = $'\xff\xff\xff\xff\xff\xff\xff\xff\xffN' ]; then 46 machine="NETGEAR WNDRMAC" 47 else 48 machine="NETGEAR $model" 49 fi 50 ;; 51 esac 52 53 AR71XX_BOARD_NAME="$name" 54 AR71XX_MODEL="$machine" 55} 56 57tplink_get_hwid() { 58 local part 59 60 part=$(find_mtd_part firmware) 61 [ -z "$part" ] && return 1 62 63 dd if=$part bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"' 64} 65 66tplink_board_detect() { 67 local model="$1" 68 local hwid 69 local hwver 70 71 hwid=$(tplink_get_hwid) 72 hwver=${hwid:6:2} 73 hwver="v${hwver#0}" 74 75 case "$hwid" in 76 "070300"*) 77 model="TP-Link TL-WR703N" 78 ;; 79 "070100"*) 80 model="TP-Link TL-WA701N/ND" 81 ;; 82 "074000"*) 83 model="TP-Link TL-WR740N/ND" 84 ;; 85 "074100"*) 86 model="TP-Link TL-WR741N/ND" 87 ;; 88 "074300"*) 89 model="TP-Link TL-WR743N/ND" 90 ;; 91 "084100"*) 92 model="TP-Link TL-WR841N/ND" 93 ;; 94 "084200"*) 95 model="TP-Link TL-WR842N/ND" 96 ;; 97 "090100"*) 98 model="TP-Link TL-WA901N/ND" 99 ;; 100 "094100"*) 101 model="TP-Link TL-WR941N/ND" 102 ;; 103 "104100"*) 104 model="TP-Link TL-WR1041N/ND" 105 ;; 106 "104300"*) 107 model="TP-Link TL-WR1043N/ND" 108 ;; 109 "254300"*) 110 model="TP-Link TL-WR2543N/ND" 111 ;; 112 "110101"*) 113 model="TP-Link TL-MR11U" 114 ;; 115 "302000"*) 116 model="TP-Link TL-MR3020" 117 ;; 118 "304000"*) 119 model="TP-Link TL-MR3040" 120 ;; 121 "322000"*) 122 model="TP-Link TL-MR3220" 123 ;; 124 "342000"*) 125 model="TP-Link TL-MR3420" 126 ;; 127 "360000"*) 128 model="TP-Link TL-WDR3600" 129 ;; 130 "430000"*) 131 model="TP-Link TL-WDR4300" 132 ;; 133 "431000"*) 134 model="TP-Link TL-WDR4310" 135 ;; 136 *) 137 hwver="" 138 ;; 139 esac 140 141 AR71XX_MODEL="$model $hwver" 142} 143 144ar71xx_board_detect() { 145 local machine 146 local name 147 148 machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo) 149 150 case "$machine" in 151 *"AirRouter") 152 name="airrouter" 153 ;; 154 *"ALFA Network AP96") 155 name="alfa-ap96" 156 ;; 157 *"ALFA Network N2/N5") 158 name="alfa-nx" 159 ;; 160 *ALL0258N) 161 name="all0258n" 162 ;; 163 *ALL0305) 164 name="all0305" 165 ;; 166 *ALL0315N) 167 name="all0315n" 168 ;; 169 *AP113) 170 name="ap113" 171 ;; 172 *AP121) 173 name="ap121" 174 ;; 175 *AP121-MINI) 176 name="ap121-mini" 177 ;; 178 *"AP135 reference board") 179 name="ap135" 180 ;; 181 *"AP135 Dual flash reference board") 182 name="ap135-dual" 183 ;; 184 *"AP136 reference board") 185 name="ap136" 186 ;; 187 *AP81) 188 name="ap81" 189 ;; 190 *AP83) 191 name="ap83" 192 ;; 193 *"Atheros AP96") 194 name="ap96" 195 ;; 196 *AW-NR580) 197 name="aw-nr580" 198 ;; 199 *CAP4200AG) 200 name="cap4200ag" 201 ;; 202 *"CUS227") 203 name="cus227" 204 ;; 205 *"DB120 reference board") 206 name="db120" 207 ;; 208 *"DB120 reference board with TB388 extension") 209 name="db120tb388" 210 ;; 211 *"DIR-600 rev. A1") 212 name="dir-600-a1" 213 ;; 214 *"DIR-615 rev. E4") 215 name="dir-615-e4" 216 ;; 217 *"DIR-825 rev. B1") 218 name="dir-825-b1" 219 ;; 220 *EAP7660D) 221 name="eap7660d" 222 ;; 223 *JA76PF) 224 name="ja76pf" 225 ;; 226 *JA76PF2) 227 name="ja76pf2" 228 ;; 229 *"Bullet M") 230 name="bullet-m" 231 ;; 232 *"Nanostation M") 233 name="nanostation-m" 234 ;; 235 *JWAP003) 236 name="jwap003" 237 ;; 238 *"Hornet-UB") 239 name="hornet-ub" 240 ;; 241 *LS-SR71) 242 name="ls-sr71" 243 ;; 244 *MR600) 245 name="mr600" 246 ;; 247 *MZK-W04NU) 248 name="mzk-w04nu" 249 ;; 250 *MZK-W300NH) 251 name="mzk-w300nh" 252 ;; 253 *"NBG460N/550N/550NH") 254 name="nbg460n_550n_550nh" 255 ;; 256 *OM2P) 257 name="om2p" 258 ;; 259 *"OM2P HS") 260 name="om2p-hs" 261 ;; 262 *"OM2P LC") 263 name="om2p-lc" 264 ;; 265 *PB42) 266 name="pb42" 267 ;; 268 *"PB44 reference board") 269 name="pb44" 270 ;; 271 *PB92) 272 name="pb92" 273 ;; 274 *"RouterBOARD 411/A/AH") 275 name="rb-411" 276 ;; 277 *"RouterBOARD 411U") 278 name="rb-411u" 279 ;; 280 *"RouterBOARD 433/AH") 281 name="rb-433" 282 ;; 283 *"RouterBOARD 433UAH") 284 name="rb-433u" 285 ;; 286 *"RouterBOARD 435G") 287 name="rb-435g" 288 ;; 289 *"RouterBOARD 450") 290 name="rb-450" 291 ;; 292 *"RouterBOARD 450G") 293 name="rb-450g" 294 ;; 295 *"RouterBOARD 493/AH") 296 name="rb-493" 297 ;; 298 *"RouterBOARD 493G") 299 name="rb-493g" 300 ;; 301 *"RouterBOARD 750") 302 name="rb-750" 303 ;; 304 *"RouterBOARD 750GL") 305 name="rb-750gl" 306 ;; 307 *"RouterBOARD 751") 308 name="rb-751" 309 ;; 310 *"RouterBOARD 751G") 311 name="rb-751g" 312 ;; 313 *"RouterBOARD 2011L") 314 name="rb-2011l" 315 ;; 316 *"RouterBOARD 2011UAS-2HnD") 317 name="rb-2011uas-2hnd" 318 ;; 319 *"Rocket M") 320 name="rocket-m" 321 ;; 322 *RouterStation) 323 name="routerstation" 324 ;; 325 *"RouterStation Pro") 326 name="routerstation-pro" 327 ;; 328 *RW2458N) 329 name="rw2458n" 330 ;; 331 *TEW-632BRP) 332 name="tew-632brp" 333 ;; 334 *TEW-673GRU) 335 name="tew-673gru" 336 ;; 337 *TEW-712BR) 338 name="tew-712br" 339 ;; 340 *"TL-WR1041N v2") 341 name="tl-wr1041n-v2" 342 ;; 343 *TL-WR1043ND) 344 name="tl-wr1043nd" 345 ;; 346 *TL-WR2543N*) 347 name="tl-wr2543n" 348 ;; 349 *"DIR-615 rev. C1") 350 name="dir-615-c1" 351 ;; 352 *TL-MR3020) 353 name="tl-mr3020" 354 ;; 355 *TL-MR3040) 356 name="tl-mr3040" 357 ;; 358 *TL-MR3220) 359 name="tl-mr3220" 360 ;; 361 *TL-MR3420) 362 name="tl-mr3420" 363 ;; 364 *TL-WA7510N) 365 name="tl-wa7510n" 366 ;; 367 *TL-WA901ND) 368 name="tl-wa901nd" 369 ;; 370 *"TL-WA901ND v2") 371 name="tl-wa901nd-v2" 372 ;; 373 *"TL-WDR3600/4300/4310") 374 name="tl-wdr4300" 375 ;; 376 *TL-WR741ND) 377 name="tl-wr741nd" 378 ;; 379 *"TL-WR741ND v4") 380 name="tl-wr741nd-v4" 381 ;; 382 *"TL-WR841N v1") 383 name="tl-wr841n-v1" 384 ;; 385 *"TL-WR841N/ND v7") 386 name="tl-wr841n-v7" 387 ;; 388 *"TL-WR841N/ND v8") 389 name="tl-wr841n-v8" 390 ;; 391 *TL-WR941ND) 392 name="tl-wr941nd" 393 ;; 394 *"TL-WR703N v1") 395 name="tl-wr703n" 396 ;; 397 *"TL-MR11U") 398 name="tl-mr11u" 399 ;; 400 *UniFi) 401 name="unifi" 402 ;; 403 *WHR-G301N) 404 name="whr-g301n" 405 ;; 406 *WHR-HP-GN) 407 name="whr-hp-gn" 408 ;; 409 *WLAE-AG300N) 410 name="wlae-ag300n" 411 ;; 412 *"UniFiAP Outdoor") 413 name="unifi-outdoor" 414 ;; 415 *WP543) 416 name="wp543" 417 ;; 418 *WPE72) 419 name="wpe72" 420 ;; 421 *"WNDR3700/WNDR3800/WNDRMAC") 422 wndr3700_board_detect "$machine" 423 ;; 424 *WNR2000) 425 name="wnr2000" 426 ;; 427 *WRT160NL) 428 name="wrt160nl" 429 ;; 430 *WRT400N) 431 name="wrt400n" 432 ;; 433 *WZR-HP-AG300H) 434 name="wzr-hp-ag300h" 435 ;; 436 *WZR-HP-G300NH) 437 name="wzr-hp-g300nh" 438 ;; 439 *WZR-HP-G450H) 440 name="wzr-hp-g450h" 441 ;; 442 *WZR-HP-G300NH2) 443 name="wzr-hp-g300nh2" 444 ;; 445 *WHR-HP-G300N) 446 name="whr-hp-g300n" 447 ;; 448 *ZCN-1523H-2) 449 name="zcn-1523h-2" 450 ;; 451 *ZCN-1523H-5) 452 name="zcn-1523h-5" 453 ;; 454 *EmbWir-Dorin) 455 name="ew-dorin" 456 ;; 457 *EmbWir-Dorin-Router) 458 name="ew-dorin-router" 459 ;; 460 esac 461 462 case "$machine" in 463 *TL-WR* | *TL-WA* | *TL-MR*) 464 tplink_board_detect "$machine" 465 ;; 466 esac 467 468 if [ "$machine" = "Qualcomm GENERIC-DT reference board" ]; then 469 name=`cat /proc/device-tree/compatible |cut -f 2 -d ","` 470 fi 471 472 [ -z "$name" ] && name="unknown" 473 474 [ -z "$AR71XX_BOARD_NAME" ] && AR71XX_BOARD_NAME="$name" 475 [ -z "$AR71XX_MODEL" ] && AR71XX_MODEL="$machine" 476 477 [ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/" 478 479 echo "$AR71XX_BOARD_NAME" > /tmp/sysinfo/board_name 480 echo "$AR71XX_MODEL" > /tmp/sysinfo/model 481} 482 483ar71xx_board_name() { 484 local name 485 486 [ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name) 487 [ -z "$name" ] && name="unknown" 488 489 echo "$name" 490} 491