OpenWrt – Diff between revs 2 and 3
?pathlinks?
Rev 2 | Rev 3 | |||
---|---|---|---|---|
1 | #!/bin/sh |
1 | #!/bin/sh |
|
2 | |
- | ||
3 | # xor multiple hex values of the same length |
- | ||
4 | xor() { |
- | ||
5 | local val |
- | ||
6 | local ret="0x$1" |
- | ||
7 | local retlen=${#1} |
- | ||
8 | |
- | ||
9 | shift |
- | ||
10 | while [ -n "$1" ]; do |
- | ||
11 | val="0x$1" |
- | ||
12 | ret=$((ret ^ val)) |
- | ||
13 | shift |
- | ||
14 | done |
- | ||
15 | |
- | ||
16 | printf "%0${retlen}x" "$ret" |
- | ||
17 | } |
- | ||
18 | |
2 | |
|
19 | ath10kcal_die() { |
3 | ath10kcal_die() { |
|
20 | echo "ath10cal: " "$*" |
4 | echo "ath10cal: " "$*" |
|
21 | exit 1 |
5 | exit 1 |
|
22 | } |
6 | } |
|
23 | |
7 | |
|
24 | ath10kcal_from_file() { |
8 | ath10kcal_from_file() { |
|
25 | local source=$1 |
9 | local source=$1 |
|
26 | local offset=$2 |
10 | local offset=$2 |
|
27 | local count=$3 |
11 | local count=$3 |
|
28 | |
12 | |
|
29 | dd if=$source of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ |
13 | 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" |
14 | ath10kcal_die "failed to extract calibration data from $source" |
|
31 | } |
15 | } |
|
32 | |
16 | |
|
33 | ath10kcal_extract() { |
17 | ath10kcal_extract() { |
|
34 | local part=$1 |
18 | local part=$1 |
|
35 | local offset=$2 |
19 | local offset=$2 |
|
36 | local count=$3 |
20 | local count=$3 |
|
37 | local mtd |
21 | local mtd |
|
38 | |
22 | |
|
39 | mtd=$(find_mtd_chardev $part) |
23 | mtd=$(find_mtd_chardev $part) |
|
40 | [ -n "$mtd" ] || \ |
24 | [ -n "$mtd" ] || \ |
|
41 | ath10kcal_die "no mtd device found for partition $part" |
25 | ath10kcal_die "no mtd device found for partition $part" |
|
42 | |
26 | |
|
43 | dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ |
27 | 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" |
28 | ath10kcal_die "failed to extract calibration data from $mtd" |
|
45 | } |
29 | } |
|
46 | |
30 | |
|
47 | ath10kcal_patch_mac_crc() { |
31 | ath10kcal_patch_mac() { |
|
48 | local mac=$1 |
- | ||
49 | local mac_offset=6 |
- | ||
50 | local chksum_offset=2 |
- | ||
51 | local xor_mac |
- | ||
52 | local xor_fw_mac |
- | ||
53 | local xor_fw_chksum |
32 | local mac=$1 |
|
54 | |
33 | |
|
55 | [ -z "$mac" ] && return |
34 | [ -z "$mac" ] && return |
|
56 | |
- | ||
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}" |
- | ||
59 | |
35 | |
|
60 | macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6 |
- | ||
61 | |
- | ||
62 | xor_mac=${mac//:/} |
- | ||
63 | xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" |
- | ||
64 | |
- | ||
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) |
- | ||
67 | |
- | ||
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 |
36 | macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6 |
|
70 | } |
37 | } |
|
71 | |
38 | |
|
72 | [ -e /lib/firmware/$FIRMWARE ] && exit 0 |
39 | [ -e /lib/firmware/$FIRMWARE ] && exit 0 |
|
73 | |
40 | |
|
74 | . /lib/functions.sh |
41 | . /lib/functions.sh |
|
75 | . /lib/functions/system.sh |
42 | . /lib/functions/system.sh |
|
76 | |
43 | |
|
77 | board=$(board_name) |
44 | board=$(board_name) |
|
- | 45 | |
||
78 | |
46 | |
|
79 | case "$FIRMWARE" in |
47 | case "$FIRMWARE" in |
|
80 | "ath10k/pre-cal-pci-0000:01:00.0.bin") |
48 | "ath10k/pre-cal-pci-0000:01:00.0.bin") |
|
81 | case $board in |
49 | case $board in |
|
82 | buffalo,wxr-2533dhp) |
- | ||
83 | ath10kcal_extract "ART" 4096 12064 |
- | ||
84 | ath10kcal_patch_mac_crc $(mtd_get_mac_binary ART 30) |
- | ||
85 | ;; |
- | ||
86 | linksys,ea8500) |
50 | linksys,ea8500) |
|
- | 51 | hw_mac_addr=$(mtd_get_mac_ascii devinfo hw_mac_addr) |
||
87 | ath10kcal_extract "art" 4096 12064 |
52 | ath10kcal_extract "art" 4096 12064 |
|
88 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) +1) |
- | ||
89 | ;; |
- | ||
90 | nec,wg2600hp) |
- | ||
91 | ath10kcal_extract "ART" 4096 12064 |
- | ||
92 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary PRODUCTDATA 12) +1) |
- | ||
93 | ;; |
53 | ;; |
|
94 | netgear,d7800 |\ |
54 | netgear,d7800 |\ |
|
95 | netgear,r7500v2 |\ |
55 | netgear,r7500v2 |\ |
|
96 | netgear,r7800) |
56 | netgear,r7800) |
|
97 | ath10kcal_extract "art" 4096 12064 |
57 | ath10kcal_extract "art" 4096 12064 |
|
98 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary art 6) +1) |
- | ||
99 | ;; |
58 | ;; |
|
100 | tplink,c2600) |
59 | tplink,c2600) |
|
101 | ath10kcal_extract "radio" 4096 12064 |
60 | ath10kcal_extract "radio" 4096 12064 |
|
102 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary default-mac 8) -1) |
61 | # ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary default-mac 8) -1) |
|
103 | ;; |
62 | ;; |
|
- | 63 | nec,wg2600hp |\ |
||
104 | tplink,vr2600v) |
64 | tplink,vr2600v) |
|
105 | ath10kcal_extract "ART" 4096 12064 |
65 | ath10kcal_extract "ART" 4096 12064 |
|
106 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary default-mac 0) -1) |
- | ||
107 | ;; |
66 | ;; |
|
108 | zyxel,nbg6817) |
67 | zyxel,nbg6817) |
|
109 | ath10kcal_extract "0:ART" 4096 12064 |
68 | ath10kcal_extract "0:ART" 4096 12064 |
|
110 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) +1) |
- | ||
111 | ;; |
69 | ;; |
|
112 | esac |
70 | esac |
|
113 | ;; |
71 | ;; |
|
114 | "ath10k/pre-cal-pci-0001:01:00.0.bin") |
72 | "ath10k/pre-cal-pci-0001:01:00.0.bin") |
|
115 | case $board in |
73 | case $board in |
|
116 | buffalo,wxr-2533dhp) |
- | ||
117 | ath10kcal_extract "ART" 20480 12064 |
- | ||
118 | ath10kcal_patch_mac_crc $(mtd_get_mac_binary ART 24) |
- | ||
119 | ;; |
- | ||
120 | linksys,ea8500) |
74 | linksys,ea8500) |
|
- | 75 | hw_mac_addr=$(mtd_get_mac_ascii devinfo hw_mac_addr) |
||
121 | ath10kcal_extract "art" 20480 12064 |
76 | ath10kcal_extract "art" 20480 12064 |
|
122 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) +2) |
- | ||
123 | ;; |
- | ||
124 | nec,wg2600hp) |
- | ||
125 | ath10kcal_extract "ART" 20480 12064 |
- | ||
126 | ath10kcal_patch_mac_crc $(mtd_get_mac_binary PRODUCTDATA 12) |
- | ||
127 | ;; |
77 | ;; |
|
128 | netgear,d7800 |\ |
78 | netgear,d7800 |\ |
|
129 | netgear,r7500v2 |\ |
79 | netgear,r7500v2 |\ |
|
130 | netgear,r7800) |
80 | netgear,r7800) |
|
131 | ath10kcal_extract "art" 20480 12064 |
81 | ath10kcal_extract "art" 20480 12064 |
|
132 | ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary art 6) +2) |
- | ||
133 | ;; |
82 | ;; |
|
134 | tplink,c2600) |
83 | tplink,c2600) |
|
135 | ath10kcal_extract "radio" 20480 12064 |
84 | ath10kcal_extract "radio" 20480 12064 |
|
136 | ath10kcal_patch_mac_crc $(mtd_get_mac_binary default-mac 8) |
85 | # ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary default-mac 8) -2) |
|
137 | ;; |
86 | ;; |
|
- | 87 | nec,wg2600hp |\ |
||
138 | tplink,vr2600v) |
88 | tplink,vr2600v) |
|
139 | ath10kcal_extract "ART" 20480 12064 |
89 | ath10kcal_extract "ART" 20480 12064 |
|
140 | ath10kcal_patch_mac_crc $(mtd_get_mac_binary default-mac 0) |
- | ||
141 | ;; |
90 | ;; |
|
142 | zyxel,nbg6817) |
91 | zyxel,nbg6817) |
|
143 | ath10kcal_extract "0:ART" 20480 12064 |
92 | ath10kcal_extract "0:ART" 20480 12064 |
|
144 | ath10kcal_patch_mac_crc $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) |
- | ||
145 | ;; |
93 | ;; |
|
146 | esac |
94 | esac |
|
147 | ;; |
95 | ;; |
|
148 | *) |
96 | *) |
|
149 | exit 1 |
97 | exit 1 |
|
150 | ;; |
98 | ;; |
|
151 | esac |
99 | esac |
|
152 | |
100 | |