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