1#!/bin/sh
2
3rt2x00_eeprom_die() {
4	echo "rt2x00 eeprom: " "$*"
5	exit 1
6}
7
8rt2x00_eeprom_extract() {
9	local part=$1
10	local offset=$2
11	local count=$3
12	local mtd
13
14	. /etc/functions.sh
15
16	mtd=$(find_mtd_part $part)
17	[ -n "$mtd" ] || \
18		rt2x00_eeprom_die "no mtd device found for partition $part"
19
20	dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
21		rt2x00_eeprom_die "failed to extract from $mtd"
22}
23
24[ -e /lib/firmware/$FIRMWARE ] && exit 0
25
26. /lib/ramips.sh
27
28board=$(ramips_board_name)
29
30case "$FIRMWARE" in
31"RT288X.eeprom" | \
32"RT305X.eeprom" | \
33"RT3883.eeprom")
34	case $board in
35	dir-300-b1 | \
36	dir-600-b1 | \
37	dir-600-b2 | \
38	dir-615-d)
39		rt2x00_eeprom_extract "devdata" 16384 272
40		;;
41
42	dap-1350)
43		rt2x00_eeprom_extract "devdata" 0 272
44		;;
45
46	rt-n10-plus | \
47	rt-g32-b1)
48		rt2x00_eeprom_extract "devconf" 0 272
49		;;
50
51	f5d8235-v1 | \
52	f5d8235-v2)
53		rt2x00_eeprom_extract "u-boot" 262144 272
54		;;
55
56	3g-6200n | \
57	all0239-3g | \
58	all0256n | \
59	all5002 | \
60	argus-atp52b | \
61	bc2 | \
62	carambola | \
63	dir-615-h1 | \
64	dir-620-a1 | \
65	esr-9753 | \
66	fonera20n | \
67	freestation5 | \
68	hw550-3g | \
69	mofi3500-3gn | \
70	pwh2004 | \
71	nbg-419n | \
72	nw718 | \
73	omni-emb | \
74	psr-680w | \
75	rt-n15 | \
76	rt-n56u | \
77	sl-r7205 | \
78	v11st-fe | \
79	v22rw-2x2 | \
80	w306r-v20 | \
81	w502u | \
82	wcr-150gn | \
83	whr-g300n | \
84	wl-330n | \
85	wl-330n3g | \
86	wl-351 | \
87	wli-tx4-ag300n | \
88	wr512-3gn | \
89	wr6202 | \
90	ur-336un | \
91	xdxrn502j)
92		rt2x00_eeprom_extract "factory" 0 272
93		;;
94
95	wl341v3)
96		rt2x00_eeprom_extract "board-nvram" 64880 272
97		;;
98
99	*)
100		rt2x00_eeprom_die "board $board is not supported yet"
101		;;
102	esac
103	;;
104
105"rt2x00pci_1_0.eeprom")
106	case $board in
107	rt-n56u)
108		rt2x00_eeprom_extract "factory" 32768 272
109		;;
110	esac
111	;;
112esac
113