3 # xor multiple hex values of the same length
16 printf "%0${retlen}x" "$ret"
20 echo "ath10cal: " "$*"
24 ath10kcal_from_file
() {
29 dd if=$source of
=/lib
/firmware
/$FIRMWARE bs
=1 skip
=$offset count
=$count 2>/dev
/null || \
30 ath10kcal_die
"failed to extract calibration data from $source"
39 mtd
=$
(find_mtd_chardev
$part)
41 ath10kcal_die
"no mtd device found for partition $part"
43 dd if=$mtd of
=/lib
/firmware
/$FIRMWARE bs
=1 skip
=$offset count
=$count 2>/dev
/null || \
44 ath10kcal_die
"failed to extract calibration data from $mtd"
47 ath10kcal_patch_mac_crc
() {
55 [ -z "$mac" ] && return
57 xor_fw_mac
=$
(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib
/firmware
/$FIRMWARE)
58 xor_fw_mac
="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}"
60 macaddr_2bin
$mac |
dd of
=/lib
/firmware
/$FIRMWARE conv
=notrunc bs
=1 seek
=6 count
=6
63 xor_mac
="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}"
65 xor_fw_chksum
=$
(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib
/firmware
/$FIRMWARE)
66 xor_fw_chksum
=$
(xor
$xor_fw_chksum $xor_fw_mac $xor_mac)
68 printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
69 dd of
=/lib
/firmware
/$FIRMWARE conv
=notrunc bs
=1 seek
=$chksum_offset count
=2
72 [ -e /lib
/firmware
/$FIRMWARE ] && exit 0
75 .
/lib
/functions
/system.sh
80 "ath10k/pre-cal-pci-0000:01:00.0.bin")
83 ath10kcal_extract
"ART" 4096 12064
84 ath10kcal_patch_mac_crc $
(mtd_get_mac_binary ART
0x1e)
87 ath10kcal_extract
"art" 4096 12064
88 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_ascii devinfo hw_mac_addr
) +1)
91 ath10kcal_extract
"ART" 4096 12064
92 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_binary PRODUCTDATA
0xc) +1)
97 ath10kcal_extract
"art" 4096 12064
98 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_binary art
0x6) +1)
101 ath10kcal_extract
"radio" 4096 12064
102 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_binary default-mac
0x8) -1)
105 ath10kcal_extract
"ART" 4096 12064
106 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_binary default-mac
0x0) -1)
109 ath10kcal_extract
"0:ART" 4096 12064
110 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_ascii
0:APPSBLENV ethaddr
) +1)
114 "ath10k/pre-cal-pci-0001:01:00.0.bin")
117 ath10kcal_extract
"ART" 20480 12064
118 ath10kcal_patch_mac_crc $
(mtd_get_mac_binary ART
0x18)
121 ath10kcal_extract
"art" 20480 12064
122 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_ascii devinfo hw_mac_addr
) +2)
125 ath10kcal_extract
"ART" 20480 12064
126 ath10kcal_patch_mac_crc $
(mtd_get_mac_binary PRODUCTDATA
0xc)
131 ath10kcal_extract
"art" 20480 12064
132 ath10kcal_patch_mac_crc $
(macaddr_add $
(mtd_get_mac_binary art
0x6) +2)
135 ath10kcal_extract
"radio" 20480 12064
136 ath10kcal_patch_mac_crc $
(mtd_get_mac_binary default-mac
0x8)
139 ath10kcal_extract
"ART" 20480 12064
140 ath10kcal_patch_mac_crc $
(mtd_get_mac_binary default-mac
0x0)
143 ath10kcal_extract
"0:ART" 20480 12064
144 ath10kcal_patch_mac_crc $
(mtd_get_mac_ascii
0:APPSBLENV ethaddr
)