treewide: move calibration data extraction function to library
[openwrt/staging/wigyori.git] / target / linux / ath79 / base-files / etc / hotplug.d / firmware / 10-ath9k-eeprom
1 #!/bin/sh
2
3 [ -e /lib/firmware/$FIRMWARE ] && exit 0
4
5 . /lib/functions/caldata.sh
6
7 ath9k_patch_fw_mac() {
8 local mac=$1
9 local mac_offset=$(($2))
10 local chksum_offset=$3
11 local xor_mac
12 local xor_fw_mac
13 local xor_fw_chksum
14
15 [ -z "$mac" -o -z "$mac_offset" ] && return
16
17 [ -n "$chksum_offset" ] && {
18 xor_mac=${mac//:/}
19 xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}"
20
21 xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
22 xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}"
23
24 xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
25 xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac)
26
27 printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
28 dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$(($chksum_offset)) count=2
29 }
30
31 macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc oflag=seek_bytes bs=6 seek=$mac_offset count=1
32 }
33
34 ath9k_patch_fw_mac_crc() {
35 local mac=$1
36 local mac_offset=$2
37 local chksum_offset=$((mac_offset - 10))
38
39 ath9k_patch_fw_mac "${mac}" "${mac_offset}" "${chksum_offset}"
40 }
41
42 board=$(board_name)
43
44 case "$FIRMWARE" in
45 "ath9k-eeprom-ahb-18100000.wmac.bin")
46 case $board in
47 avm,fritz4020)
48 caldata_extract_reverse "urlader" 0x1541 0x440
49 ;;
50 dlink,dir-825-c1|\
51 dlink,dir-835-a1)
52 caldata_extract "art" 0x1000 0x440
53 ath9k_patch_fw_mac $(mtd_get_mac_text "mac" 0x4) 0x2
54 ;;
55 dlink,dir-842-c1|\
56 dlink,dir-842-c2|\
57 dlink,dir-842-c3|\
58 dlink,dir-859-a1|\
59 nec,wg1200cr|\
60 wd,mynet-n750)
61 caldata_extract "art" 0x1000 0x440
62 ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan24mac") 0x2
63 ;;
64 engenius,ecb1750)
65 caldata_extract "art" 0x1000 0x440
66 ath9k_patch_fw_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env "athaddr") +1) 0x2
67 ;;
68 engenius,epg5000|\
69 iodata,wn-ac1167dgr|\
70 iodata,wn-ac1600dgr|\
71 iodata,wn-ac1600dgr2|\
72 iodata,wn-ag300dgr)
73 caldata_extract "art" 0x1000 0x440
74 ath9k_patch_fw_mac $(mtd_get_mac_ascii u-boot-env ethaddr) 0x2
75 ;;
76 nec,wg800hp)
77 caldata_extract "art" 0x1000 0x440
78 ath9k_patch_fw_mac $(mtd_get_mac_text board_data 0x680) 0x2
79 ;;
80 qihoo,c301)
81 caldata_extract "radiocfg" 0x1000 0x440
82 ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan24mac") 0x2
83 ;;
84 *)
85 caldata_die "board $board is not supported yet"
86 ;;
87 esac
88 ;;
89 "ath9k-eeprom-pci-0000:00:00.0.bin")
90 case $board in
91 avm,fritz300e)
92 caldata_extract_reverse "urloader" 0x1541 0x440
93 ;;
94 buffalo,whr-g301n|\
95 buffalo,wzr-hp-g302h-a1a0|\
96 tplink,tl-wr841-v5|\
97 tplink,tl-wr941-v4)
98 caldata_extract "art" 0x1000 0xeb8
99 ;;
100 buffalo,wzr-hp-g450h)
101 caldata_extract "art" 0x1000 0x440
102 ;;
103 dlink,dir-825-c1|\
104 dlink,dir-835-a1)
105 caldata_extract "art" 0x5000 0x440
106 ath9k_patch_fw_mac $(macaddr_add $(mtd_get_mac_text "mac" 0x18) 1) 0x2
107 ;;
108 ocedo,raccoon|\
109 tplink,tl-wdr3500-v1|\
110 tplink,tl-wdr3600-v1|\
111 tplink,tl-wdr4300-v1|\
112 tplink,tl-wdr4900-v2|\
113 winchannel,wb2000)
114 caldata_extract "art" 0x5000 0x440
115 ;;
116 netgear,wnr612-v2|\
117 on,n150r|\
118 pcs,cap324|\
119 tplink,tl-mr3220-v1|\
120 tplink,tl-mr3420-v1|\
121 tplink,tl-wr2543-v1|\
122 tplink,tl-wr740n-v1|\
123 tplink,tl-wr740n-v3|\
124 tplink,tl-wr741-v1|\
125 tplink,tl-wr743nd-v1|\
126 tplink,tl-wr841-v7|\
127 tplink,tl-wr842n-v1|\
128 ubnt,airrouter|\
129 ubnt,bullet-m|\
130 ubnt,nano-m|\
131 ubnt,rocket-m)
132 caldata_extract "art" 0x1000 0x1000
133 ;;
134 pqi,air-pen)
135 caldata_extract "art" 0x1000 0x7d2
136 ;;
137 ubnt,unifi)
138 caldata_extract "art" 0x1000 0x800
139 ;;
140 wd,mynet-n750)
141 caldata_extract "art" 0x5000 0x440
142 ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan5mac") 0x2
143 ;;
144 wd,mynet-wifi-rangeextender)
145 caldata_extract "art" 0x1000 0x1000
146 ath9k_patch_fw_mac $(nvram get wl0_hwaddr) "$mac" 0x2
147 ;;
148 *)
149 caldata_die "board $board is not supported yet"
150 ;;
151 esac
152 ;;
153 "ath9k-eeprom-pci-0000:00:11.0.bin")
154 case $board in
155 buffalo,wzr-hp-ag300h|\
156 netgear,wndr3700|\
157 netgear,wndr3700v2|\
158 netgear,wndr3800|\
159 netgear,wndr3800ch)
160 caldata_extract "art" 0x1000 0xeb8
161 ;;
162 dlink,dir-825-b1)
163 caldata_extract "caldata" 0x1000 0xeb8
164 ath9k_patch_fw_mac_crc $(mtd_get_mac_text "caldata" 0xffa0) 0x20c
165 ;;
166 *)
167 caldata_die "board $board is not supported yet"
168 ;;
169 esac
170 ;;
171 "ath9k-eeprom-pci-0000:00:12.0.bin")
172 case $board in
173 buffalo,wzr-hp-ag300h|\
174 netgear,wndr3700|\
175 netgear,wndr3700v2|\
176 netgear,wndr3800|\
177 netgear,wndr3800ch)
178 caldata_extract "art" 0x5000 0xeb8
179 ;;
180 dlink,dir-825-b1)
181 caldata_extract "caldata" 0x5000 0xeb8
182 ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "caldata" 0xffb4) 1) 0x20c
183 ;;
184 *)
185 caldata_die "board $board is not supported yet"
186 ;;
187 esac
188 ;;
189 esac