ipq40xx: dynamically build board-2.bin for Mikrotik
[openwrt/staging/chunkeey.git] / target / linux / ipq40xx / base-files / etc / hotplug.d / firmware / 11-ath10k-caldata
1 #!/bin/sh
2
3 [ -e /lib/firmware/$FIRMWARE ] && exit 0
4
5 . /lib/functions/caldata.sh
6
7 board=$(board_name)
8
9 board2_add_entry()
10 {
11 local file="$1"
12 local offset="$(($2))"
13 local size="$(($3))"
14
15 local id=$(dd iflag=skip_bytes if="$file" bs=1 count=1 skip=$((offset+32)) | hexdump -e '1/1 "%02d"')
16
17 # Qualcomm IDs are in the range of 16 to 30 it seems - taken from the board-2.bin
18 # This is there to skip the missing 2G on the SXTSQ 5 AC
19 [ "$id" -ge 16 -a "$id" -le 30 ] || return 0
20
21 printf "\x00\x00\x00\x00\x58\x2f\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00"
22 printf "bus=ahb,bmi-chip-id=0,bmi-board-id=${id}\x00\x00\x00"
23 printf "\x01\x00\x00\x00\x20\x2f\x00\x00"
24
25 dd iflag=skip_bytes,fullblock if="$file" bs="$size" count=1 skip="$offset" >> "/lib/firmware/$FIRMWARE"
26 }
27
28 board2_create_for_mikrotik()
29 {
30 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
31
32 [ -f "$wlan_data" ] && {
33 (
34 printf "QCA-ATH10K-BOARD\x00\x00\x00\x00"
35 board2_add_entry "$wlan_data" 0x2f20 0x2f20
36 board2_add_entry "$wlan_data" 0xaf20 0x2f20
37 ) >> "/lib/firmware/$FIRMWARE"
38 } || true
39
40 [ -d "$wlan_data" ] && {
41 (
42 printf "QCA-ATH10K-BOARD\x00\x00\x00\x00"
43 board2_add_entry "$wlan_data/data_0" 0x2f20 0x2f20
44 board2_add_entry "$wlan_data/data_2" 0x2f20 0x2f20
45 ) >> "/lib/firmware/$FIRMWARE"
46 } || true
47 }
48
49 case "$FIRMWARE" in
50 "ath10k/cal-pci-0000:01:00.0.bin")
51 case "$board" in
52 meraki,mr33)
53 caldata_extract_ubi "ART" 0x9000 0x844
54 caldata_valid "4408" || caldata_extract "ART" 0x9000 0x844
55 ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) 1)
56 ;;
57 esac
58 ;;
59 "ath10k/pre-cal-pci-0000:01:00.0.bin")
60 case "$board" in
61 asus,map-ac2200)
62 caldata_extract_ubi "Factory" 0x9000 0x2f20
63 ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
64 /lib/firmware/ath10k/QCA9888/hw2.0/board.bin
65 ;;
66 asus,rt-ac42u)
67 caldata_extract_ubi "Factory" 0x9000 0x2f20
68 ;;
69 avm,fritzrepeater-3000)
70 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
71 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
72 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
73 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
74 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
75 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
76 ;;
77 openmesh,a62 |\
78 plasmacloud,pa2200)
79 caldata_extract "0:ART" 0x9000 0x2f20
80 ;;
81 linksys,ea8300 |\
82 linksys,mr8300)
83 caldata_extract "ART" 0x9000 0x2f20
84 # OEM assigns 4 sequential MACs
85 ath10k_patch_mac $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
86 ;;
87 netgear,rbr50|\
88 netgear,rbs50|\
89 netgear,srr60|\
90 netgear,srs60)
91 caldata_extract_mmc "0:ART" 0x9000 0x2f20
92 ath10k_patch_mac $(mmc_get_mac_binary ARTMTD 0x12)
93 ;;
94 esac
95 ;;
96 "ath10k/pre-cal-ahb-a000000.wifi.bin")
97 case "$board" in
98 qcom,ap-dk01.1-c1)
99 caldata_extract "ART" 0x1000 0x2f20
100 ;;
101 asus,map-ac2200|\
102 asus,rt-ac42u|\
103 asus,rt-ac58u)
104 caldata_extract_ubi "Factory" 0x1000 0x2f20
105 ;;
106 avm,fritzbox-4040)
107 /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
108 ;;
109 avm,fritzbox-7530 |\
110 avm,fritzrepeater-1200 |\
111 avm,fritzrepeater-3000)
112 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
113 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
114 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
115 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
116 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
117 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
118 ;;
119 cellc,rtl30vw |\
120 openmesh,a42 |\
121 openmesh,a62 |\
122 plasmacloud,pa1200 |\
123 plasmacloud,pa2200)
124 caldata_extract "0:ART" 0x1000 0x2f20
125 ;;
126 devolo,magic-2-wifi-next)
127 caldata_extract "ART" 0x1000 0x2f20
128 ath10k_patch_mac $(mtd_get_mac_ascii APPSBLENV WiFiMacAddress0)
129 ;;
130 dlink,dap-2610)
131 caldata_extract "ART" 0x1000 0x2f20
132 ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac)
133 ;;
134 engenius,emd1)
135 caldata_extract "0:ART" 0x1000 0x2f20
136 ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr)
137 ;;
138 engenius,emr3500)
139 caldata_extract "0:ART" 0x1000 0x2f20
140 ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV ethaddr)
141 ;;
142 engenius,ens620ext)
143 caldata_extract "ART" 0x1000 0x2f20
144 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) 2)
145 ;;
146 linksys,ea8300 |\
147 linksys,mr8300)
148 caldata_extract "ART" 0x1000 0x2f20
149 ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2)
150 ;;
151 meraki,mr33)
152 caldata_extract_ubi "ART" 0x1000 0x2f20
153 caldata_valid "202f" || caldata_extract "ART" 0x1000 0x2f20
154 ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) 2)
155 ;;
156 mikrotik,cap-ac |\
157 mikrotik,hap-ac2 |\
158 mikrotik,hap-ac3)
159 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
160 ( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x0 0x2f20 ) || \
161 ( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x0 0x2f20 )
162 ;;
163 netgear,rbr50|\
164 netgear,rbs50|\
165 netgear,srr60|\
166 netgear,srs60)
167 caldata_extract_mmc "0:ART" 0x1000 0x2f20
168 ath10k_patch_mac $(mmc_get_mac_binary ARTMTD 0x0)
169 ;;
170 zyxel,nbg6617 |\
171 zyxel,wre6606)
172 caldata_extract "ART" 0x1000 0x2f20
173 ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2)
174 ;;
175 esac
176 ;;
177 "ath10k/pre-cal-ahb-a800000.wifi.bin")
178 case "$board" in
179 qcom,ap-dk01.1-c1)
180 caldata_extract "ART" 0x5000 0x2f20
181 ;;
182 asus,map-ac2200|\
183 asus,rt-ac58u)
184 caldata_extract_ubi "Factory" 0x5000 0x2f20
185 ;;
186 avm,fritzbox-4040)
187 /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
188 ;;
189 avm,fritzbox-7530 |\
190 avm,fritzrepeater-1200 |\
191 avm,fritzrepeater-3000)
192 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
193 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
194 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
195 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
196 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
197 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
198 ;;
199 cellc,rtl30vw |\
200 openmesh,a42 |\
201 openmesh,a62 |\
202 plasmacloud,pa1200 |\
203 plasmacloud,pa2200)
204 caldata_extract "0:ART" 0x5000 0x2f20
205 ;;
206 devolo,magic-2-wifi-next)
207 caldata_extract "ART" 0x5000 0x2f20
208 ath10k_patch_mac $(mtd_get_mac_ascii APPSBLENV WiFiMacAddress1)
209 ;;
210 dlink,dap-2610)
211 caldata_extract "ART" 0x5000 0x2f20
212 ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
213 ;;
214 engenius,emd1)
215 caldata_extract "0:ART" 0x5000 0x2f20
216 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) 1)
217 ;;
218 engenius,emr3500)
219 caldata_extract "0:ART" 0x5000 0x2f20
220 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) 1)
221 ;;
222 engenius,ens620ext)
223 caldata_extract "ART" 0x5000 0x2f20
224 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) 3)
225 ;;
226 linksys,ea8300 |\
227 linksys,mr8300)
228 caldata_extract "ART" 0x5000 0x2f20
229 ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 3)
230 ;;
231 meraki,mr33)
232 caldata_extract_ubi "ART" 0x5000 0x2f20
233 caldata_valid "202f" || caldata_extract "ART" 0x5000 0x2f20
234 ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) 3)
235 ;;
236 mikrotik,cap-ac |\
237 mikrotik,hap-ac2 |\
238 mikrotik,hap-ac3 |\
239 mikrotik,sxtsq-5-ac)
240 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
241 ( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
242 ( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
243 ;;
244 netgear,rbr50|\
245 netgear,rbs50|\
246 netgear,srr60|\
247 netgear,srs60)
248 caldata_extract_mmc "0:ART" 0x5000 0x2f20
249 ath10k_patch_mac $(mmc_get_mac_binary ARTMTD 0xc)
250 ;;
251 zyxel,nbg6617 |\
252 zyxel,wre6606)
253 caldata_extract "ART" 0x5000 0x2f20
254 ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1)
255 ;;
256 esac
257 ;;
258 "ath10k/QCA4019/hw1.0/board-ahb-a000000.wifi.bin")
259 case "$board" in
260 mikrotik,cap-ac |\
261 mikrotik,hap-ac2 |\
262 mikrotik,hap-ac3)
263 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
264 ( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x2f20 0x2f20 ) || \
265 ( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x2f20 0x2f20 )
266 ;;
267 esac
268 ;;
269 "ath10k/QCA4019/hw1.0/board-ahb-a800000.wifi.bin")
270 case "$board" in
271 mikrotik,cap-ac |\
272 mikrotik,hap-ac2 |\
273 mikrotik,hap-ac3 |\
274 mikrotik,sxtsq-5-ac)
275 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
276 ( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0xaf20 0x2f20 ) || \
277 ( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x2f20 0x2f20 )
278 ;;
279 esac
280 ;;
281 "ath10k/QCA4019/hw1.0/board-2.bin")
282 case "$board" in
283 mikrotik,cap-ac |\
284 mikrotik,hap-ac2 |\
285 mikrotik,hap-ac3 |\
286 mikrotik,sxtsq-5-ac)
287 board2_create_for_mikrotik
288 ;;
289 esac
290 ;;
291 *)
292 exit 1
293 ;;
294 esac