treewide: use the generic board_name function
[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 z1)
98 . /lib/upgrade/nand.sh
99
100 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
101 ath9k_ubi_eeprom_extract "caldata" 4096 2048
102 else
103 ath9k_eeprom_extract "origcaldata" 4096 2048
104 fi
105 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2)
106 ;;
107 *)
108 ath9k_eeprom_die "board $board is not supported yet"
109 ;;
110 esac
111 ;;
112
113 "pci_wmac0.eeprom")
114 case $board in
115 c-55)
116 ath9k_eeprom_extract "art" 20480 2048
117 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2)
118 ;;
119 fritz300e)
120 ath9k_eeprom_extract_reverse "urloader" 5441 1088
121 ;;
122 mr18)
123 . /lib/upgrade/nand.sh
124
125 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
126 ath9k_ubi_eeprom_extract "caldata" 20480 2048
127 else
128 ath9k_eeprom_extract "odm-caldata" 20480 2048
129 fi
130 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2)
131 ;;
132 wndr3700v4 | \
133 wndr4300)
134 ath9k_eeprom_extract "caldata" 20480 2048
135 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 12)
136 ;;
137 z1)
138 . /lib/upgrade/nand.sh
139
140 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
141 ath9k_ubi_eeprom_extract "caldata" 86016 4096
142 else
143 ath9k_eeprom_extract "origcaldata" 86016 4096
144 fi
145 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3)
146 ;;
147 *)
148 ath9k_eeprom_die "board $board is not supported yet"
149 ;;
150 esac
151 ;;
152
153 "pci_wmac1.eeprom")
154 case $board in
155 mr18)
156 . /lib/upgrade/nand.sh
157
158 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
159 ath9k_ubi_eeprom_extract "caldata" 36864 2048
160 else
161 ath9k_eeprom_extract "odm-caldata" 36864 2048
162 fi
163 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3)
164 ;;
165 *)
166 ath9k_eeprom_die "board $board is not supported yet"
167 ;;
168 esac
169 ;;
170 esac