41ab43f7cb55fbf85c26601f3d67fca9dee03e44
[openwrt/openwrt.git] / target / linux / ar71xx / base-files / etc / hotplug.d / firmware / 10-ath9k-eeprom
1 #!/bin/sh
2
3 [ -e /lib/firmware/$FIRMWARE ] && exit 0
4
5 . /lib/functions.sh
6 . /lib/functions/system.sh
7
8 ath9k_eeprom_die() {
9 echo "ath9k eeprom: " "$*"
10 exit 1
11 }
12
13 ath9k_eeprom_extract() {
14 local part=$1
15 local offset=$2
16 local count=$3
17 local mtd
18
19 mtd=$(find_mtd_chardev $part)
20 [ -n "$mtd" ] || \
21 ath9k_eeprom_die "no mtd device found for partition $part"
22
23 dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
24 ath9k_eeprom_die "failed to extract from $mtd"
25 }
26
27 ath9k_ubi_eeprom_extract() {
28 local part=$1
29 local offset=$2
30 local count=$3
31 local ubidev=$(nand_find_ubi $CI_UBIPART)
32 local ubi
33
34 ubi=$(nand_find_volume $ubidev $part)
35 [ -n "$ubi" ] || \
36 ath9k_eeprom_die "no UBI volume found for $part"
37
38 dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
39 ath9k_eeprom_die "failed to extract from $ubi"
40 }
41
42 ath9k_eeprom_extract_reverse() {
43 local part=$1
44 local offset=$2
45 local count=$3
46 local mtd
47 local reversed
48 local caldata
49
50 mtd=$(find_mtd_chardev "$part")
51 reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd)
52
53 for byte in $reversed; do
54 caldata="\x${byte}${caldata}"
55 done
56
57 printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
58 }
59
60 ath9k_patch_firmware_mac() {
61 local mac=$1
62
63 [ -z "$mac" ] && return
64
65 macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=2 count=6
66 }
67
68 board=$(board_name)
69
70 case "$FIRMWARE" in
71 "soc_wmac.eeprom")
72 case $board in
73 c-55|\
74 c-60)
75 ath9k_eeprom_extract "art" 4096 2048
76 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1)
77 ;;
78 mr18)
79 . /lib/upgrade/nand.sh
80
81 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
82 ath9k_ubi_eeprom_extract "caldata" 4096 2048
83 else
84 ath9k_eeprom_extract "odm-caldata" 4096 2048
85 fi
86 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +1)
87 ;;
88 r6100 | \
89 wndr3700v4 | \
90 wndr4300)
91 ath9k_eeprom_extract "caldata" 4096 2048
92 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0)
93 ;;
94 rambutan)
95 ath9k_eeprom_extract "art" 4096 2048
96 ;;
97 wlr8100)
98 ath9k_eeprom_extract "art" 4096 2048
99 ath9k_patch_firmware_mac $(mtd_get_mac_ascii u-boot-env "ethaddr")
100 ;;
101 z1)
102 . /lib/upgrade/nand.sh
103
104 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
105 ath9k_ubi_eeprom_extract "caldata" 4096 2048
106 else
107 ath9k_eeprom_extract "origcaldata" 4096 2048
108 fi
109 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2)
110 ;;
111 *)
112 ath9k_eeprom_die "board $board is not supported yet"
113 ;;
114 esac
115 ;;
116
117 "pci_wmac0.eeprom")
118 case $board in
119 c-55)
120 ath9k_eeprom_extract "art" 20480 2048
121 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2)
122 ;;
123 fritz300e)
124 ath9k_eeprom_extract_reverse "urloader" 5441 1088
125 ;;
126 mr18)
127 . /lib/upgrade/nand.sh
128
129 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
130 ath9k_ubi_eeprom_extract "caldata" 20480 2048
131 else
132 ath9k_eeprom_extract "odm-caldata" 20480 2048
133 fi
134 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2)
135 ;;
136 wndr3700v4 | \
137 wndr4300)
138 ath9k_eeprom_extract "caldata" 20480 2048
139 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 12)
140 ;;
141 z1)
142 . /lib/upgrade/nand.sh
143
144 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
145 ath9k_ubi_eeprom_extract "caldata" 86016 4096
146 else
147 ath9k_eeprom_extract "origcaldata" 86016 4096
148 fi
149 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3)
150 ;;
151 *)
152 ath9k_eeprom_die "board $board is not supported yet"
153 ;;
154 esac
155 ;;
156
157 "pci_wmac1.eeprom")
158 case $board in
159 mr18)
160 . /lib/upgrade/nand.sh
161
162 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
163 ath9k_ubi_eeprom_extract "caldata" 36864 2048
164 else
165 ath9k_eeprom_extract "odm-caldata" 36864 2048
166 fi
167 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3)
168 ;;
169 *)
170 ath9k_eeprom_die "board $board is not supported yet"
171 ;;
172 esac
173 ;;
174 esac