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 openmesh,a42 |\
120 openmesh,a62 |\
121 plasmacloud,pa1200 |\
122 plasmacloud,pa2200)
123 caldata_extract "0:ART" 0x1000 0x2f20
124 ;;
125 devolo,magic-2-wifi-next)
126 caldata_extract "ART" 0x1000 0x2f20
127 ath10k_patch_mac $(mtd_get_mac_ascii APPSBLENV WiFiMacAddress0)
128 ;;
129 dlink,dap-2610)
130 caldata_extract "ART" 0x1000 0x2f20
131 ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac)
132 ;;
133 engenius,emd1)
134 caldata_extract "0:ART" 0x1000 0x2f20
135 ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr)
136 ;;
137 engenius,emr3500)
138 caldata_extract "0:ART" 0x1000 0x2f20
139 ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV ethaddr)
140 ;;
141 engenius,ens620ext)
142 caldata_extract "ART" 0x1000 0x2f20
143 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) 2)
144 ;;
145 linksys,ea8300 |\
146 linksys,mr8300)
147 caldata_extract "ART" 0x1000 0x2f20
148 ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2)
149 ;;
150 meraki,mr33)
151 caldata_extract_ubi "ART" 0x1000 0x2f20
152 caldata_valid "202f" || caldata_extract "ART" 0x1000 0x2f20
153 ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) 2)
154 ;;
155 mikrotik,cap-ac |\
156 mikrotik,hap-ac2 |\
157 mikrotik,hap-ac3)
158 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
159 ( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x0 0x2f20 ) || \
160 ( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_0" 0x0 0x2f20 )
161 ;;
162 netgear,rbr50|\
163 netgear,rbs50|\
164 netgear,srr60|\
165 netgear,srs60)
166 caldata_extract_mmc "0:ART" 0x1000 0x2f20
167 ath10k_patch_mac $(mmc_get_mac_binary ARTMTD 0x0)
168 ;;
169 zyxel,nbg6617 |\
170 zyxel,wre6606)
171 caldata_extract "ART" 0x1000 0x2f20
172 ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2)
173 ;;
174 esac
175 ;;
176 "ath10k/pre-cal-ahb-a800000.wifi.bin")
177 case "$board" in
178 qcom,ap-dk01.1-c1)
179 caldata_extract "ART" 0x5000 0x2f20
180 ;;
181 asus,map-ac2200|\
182 asus,rt-ac58u)
183 caldata_extract_ubi "Factory" 0x5000 0x2f20
184 ;;
185 avm,fritzbox-4040)
186 /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
187 ;;
188 avm,fritzbox-7530 |\
189 avm,fritzrepeater-1200 |\
190 avm,fritzrepeater-3000)
191 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
192 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
193 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
194 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
195 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
196 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
197 ;;
198 openmesh,a42 |\
199 openmesh,a62 |\
200 plasmacloud,pa1200 |\
201 plasmacloud,pa2200)
202 caldata_extract "0:ART" 0x5000 0x2f20
203 ;;
204 devolo,magic-2-wifi-next)
205 caldata_extract "ART" 0x5000 0x2f20
206 ath10k_patch_mac $(mtd_get_mac_ascii APPSBLENV WiFiMacAddress1)
207 ;;
208 dlink,dap-2610)
209 caldata_extract "ART" 0x5000 0x2f20
210 ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
211 ;;
212 engenius,emd1)
213 caldata_extract "0:ART" 0x5000 0x2f20
214 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) 1)
215 ;;
216 engenius,emr3500)
217 caldata_extract "0:ART" 0x5000 0x2f20
218 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) 1)
219 ;;
220 engenius,ens620ext)
221 caldata_extract "ART" 0x5000 0x2f20
222 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) 3)
223 ;;
224 linksys,ea8300 |\
225 linksys,mr8300)
226 caldata_extract "ART" 0x5000 0x2f20
227 ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 3)
228 ;;
229 meraki,mr33)
230 caldata_extract_ubi "ART" 0x5000 0x2f20
231 caldata_valid "202f" || caldata_extract "ART" 0x5000 0x2f20
232 ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) 3)
233 ;;
234 mikrotik,cap-ac |\
235 mikrotik,hap-ac2 |\
236 mikrotik,hap-ac3 |\
237 mikrotik,sxtsq-5-ac)
238 wlan_data="/sys/firmware/mikrotik/hard_config/wlan_data"
239 ( [ -f "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data" 0x8000 0x2f20 ) || \
240 ( [ -d "$wlan_data" ] && caldata_sysfsload_from_file "$wlan_data/data_2" 0x0 0x2f20 )
241 ;;
242 netgear,rbr50|\
243 netgear,rbs50|\
244 netgear,srr60|\
245 netgear,srs60)
246 caldata_extract_mmc "0:ART" 0x5000 0x2f20
247 ath10k_patch_mac $(mmc_get_mac_binary ARTMTD 0xc)
248 ;;
249 zyxel,nbg6617 |\
250 zyxel,wre6606)
251 caldata_extract "ART" 0x5000 0x2f20
252 ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1)
253 ;;
254 esac
255 ;;
256 "ath10k/QCA4019/hw1.0/board-2.bin")
257 case "$board" in
258 mikrotik,cap-ac |\
259 mikrotik,hap-ac2 |\
260 mikrotik,hap-ac3 |\
261 mikrotik,sxtsq-5-ac)
262 board2_create_for_mikrotik
263 ;;
264 esac
265 ;;
266 *)
267 exit 1
268 ;;
269 esac