61597ea6690b8a85cee733f8b7c9042db895476b
[openwrt/openwrt.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 ath10kcal_patch_mac_crc() {
8 local mac=$1
9 local mac_offset=6
10 local chksum_offset=2
11 local xor_mac
12 local xor_fw_mac
13 local xor_fw_chksum
14
15 [ -z "$mac" ] && return
16
17 xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
18 xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}"
19
20 macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6
21
22 xor_mac=${mac//:/}
23 xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}"
24
25 xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
26 xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac)
27
28 printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
29 dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2
30 }
31
32 board=$(board_name)
33
34 case "$FIRMWARE" in
35 "ath10k/cal-pci-0000:01:00.0.bin")
36 case "$board" in
37 meraki,mr33)
38 caldata_extract_ubi "ART" 0x9000 0x844
39 caldata_valid "4408" || caldata_extract "ART" 0x9000 0x844
40 ath10kcal_patch_mac_crc $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +1)
41 ;;
42 esac
43 ;;
44 "ath10k/pre-cal-pci-0000:01:00.0.bin")
45 case "$board" in
46 asus,map-ac2200)
47 caldata_extract_ubi "Factory" 0x9000 0x2f20
48 ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
49 /lib/firmware/ath10k/QCA9888/hw2.0/board.bin
50 ;;
51 avm,fritzrepeater-3000)
52 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
53 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
54 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
55 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
56 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
57 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
58 ;;
59 linksys,ea8300)
60 caldata_extract "ART" 0x9000 0x2f20
61 # OEM assigns 4 sequential MACs
62 ath10kcal_patch_mac_crc $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
63 ;;
64 openmesh,a62)
65 caldata_extract "0:ART" 0x9000 0x2f20
66 ;;
67 esac
68 ;;
69 "ath10k/pre-cal-ahb-a000000.wifi.bin")
70 case "$board" in
71 8dev,jalapeno |\
72 alfa-network,ap120c-ac |\
73 glinet,gl-b1300 |\
74 linksys,ea6350v3 |\
75 qcom,ap-dk01.1-c1)
76 caldata_extract "ART" 0x1000 0x2f20
77 ;;
78 asus,map-ac2200)
79 caldata_extract_ubi "Factory" 0x1000 0x2f20
80 ;;
81 asus,rt-ac58u)
82 CI_UBIPART=UBI_DEV
83 caldata_extract_ubi "Factory" 0x1000 0x2f20
84 ;;
85 avm,fritzbox-4040)
86 /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
87 ;;
88 avm,fritzbox-7530 |\
89 avm,fritzrepeater-3000)
90 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
91 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
92 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
93 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
94 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
95 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
96 ;;
97 compex,wpj428 |\
98 engenius,eap1300 |\
99 openmesh,a42 |\
100 openmesh,a62 |\
101 qxwlan,e2600ac-c1 |\
102 qxwlan,e2600ac-c2)
103 caldata_extract "0:ART" 0x1000 0x2f20
104 ;;
105 engenius,ens620ext)
106 caldata_extract "ART" 0x1000 0x2f20
107 ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +2)
108 ;;
109 linksys,ea8300)
110 caldata_extract "ART" 0x1000 0x2f20
111 ath10kcal_patch_mac_crc $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2)
112 ;;
113 meraki,mr33)
114 caldata_extract_ubi "ART" 0x1000 0x2f20
115 caldata_valid "202f" || caldata_extract "ART" 0x1000 0x2f20
116 ath10kcal_patch_mac_crc $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +2)
117 ;;
118 netgear,ex6100v2 |\
119 netgear,ex6150v2)
120 caldata_extract "ART" 0x1000 0x2f20
121 ath10kcal_patch_mac_crc $(mtd_get_mac_binary dnidata 0x0)
122 ;;
123 zyxel,nbg6617 |\
124 zyxel,wre6606)
125 caldata_extract "ART" 0x1000 0x2f20
126 ath10kcal_patch_mac_crc $(macaddr_add $(cat /sys/class/net/eth0/address) -2)
127 ;;
128 esac
129 ;;
130 "ath10k/pre-cal-ahb-a800000.wifi.bin")
131 case "$board" in
132 8dev,jalapeno |\
133 alfa-network,ap120c-ac |\
134 glinet,gl-b1300 |\
135 linksys,ea6350v3 |\
136 qcom,ap-dk01.1-c1)
137 caldata_extract "ART" 0x5000 0x2f20
138 ;;
139 asus,map-ac2200)
140 caldata_extract_ubi "Factory" 0x5000 0x2f20
141 ;;
142 asus,rt-ac58u)
143 CI_UBIPART=UBI_DEV
144 caldata_extract_ubi "Factory" 0x5000 0x2f20
145 ;;
146 avm,fritzbox-4040)
147 /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
148 ;;
149 avm,fritzbox-7530 |\
150 avm,fritzrepeater-3000)
151 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
152 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
153 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
154 /usr/bin/fritz_cal_extract -i 1 -s 0x3C800 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
155 /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1") || \
156 /usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
157 ;;
158 compex,wpj428 |\
159 engenius,eap1300 |\
160 openmesh,a42 |\
161 openmesh,a62 |\
162 qxwlan,e2600ac-c1 |\
163 qxwlan,e2600ac-c2)
164 caldata_extract "0:ART" 0x5000 0x2f20
165 ;;
166 engenius,ens620ext)
167 caldata_extract "ART" 0x5000 0x2f20
168 ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +3)
169 ;;
170 linksys,ea8300)
171 caldata_extract "ART" 0x5000 0x2f20
172 ath10kcal_patch_mac_crc $(macaddr_add "$(cat /sys/class/net/eth0/address)" 3)
173 ;;
174 meraki,mr33)
175 caldata_extract_ubi "ART" 0x5000 0x2f20
176 caldata_valid "202f" || caldata_extract "ART" 0x5000 0x2f20
177 ath10kcal_patch_mac_crc $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +3)
178 ;;
179 netgear,ex6100v2 |\
180 netgear,ex6150v2)
181 caldata_extract "ART" 0x5000 0x2f20
182 ath10kcal_patch_mac_crc $(mtd_get_mac_binary dnidata 0xc)
183 ;;
184 zyxel,nbg6617 |\
185 zyxel,wre6606)
186 caldata_extract "ART" 0x5000 0x2f20
187 ath10kcal_patch_mac_crc $(macaddr_add $(cat /sys/class/net/eth0/address) -1)
188 ;;
189 esac
190 ;;
191 *)
192 exit 1
193 ;;
194 esac