mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 00:41:17 +00:00
b133e466b0
This changes size and offset set for WiFi caldata extraction and MAC address adjustment to hexadecimal notation. This will be much clearer for the reader when numbers are big, and will also match the style used for mtd-cal-data in DTS files. Since dd cannot deal with hexadecimal notation, one has to convert back to decimal by simple $(($hexnum)). Acked-by: Alexander Couzens <lynxis@fe80.eu> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
89 lines
1.9 KiB
Bash
89 lines
1.9 KiB
Bash
#!/bin/sh
|
|
|
|
[ -e /lib/firmware/$FIRMWARE ] && exit 0
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/system.sh
|
|
|
|
ath9k_eeprom_die() {
|
|
echo "ath9k eeprom: " "$*"
|
|
exit 1
|
|
}
|
|
|
|
ath9k_eeprom_extract() {
|
|
local part=$1
|
|
local offset=$(($2))
|
|
local count=$(($3))
|
|
local mtd
|
|
|
|
mtd=$(find_mtd_chardev $part)
|
|
[ -n "$mtd" ] || \
|
|
ath9k_eeprom_die "no mtd device found for partition $part"
|
|
|
|
dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
|
|
ath9k_eeprom_die "failed to extract from $mtd"
|
|
}
|
|
|
|
ath9k_ubi_eeprom_extract() {
|
|
local part=$1
|
|
local offset=$(($2))
|
|
local count=$(($3))
|
|
local ubidev=$(nand_find_ubi $CI_UBIPART)
|
|
local ubi
|
|
|
|
ubi=$(nand_find_volume $ubidev $part)
|
|
[ -n "$ubi" ] || \
|
|
ath9k_eeprom_die "no UBI volume found for $part"
|
|
|
|
dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
|
|
ath9k_eeprom_die "failed to extract from $ubi"
|
|
}
|
|
|
|
ath9k_patch_firmware_mac() {
|
|
local mac=$1
|
|
|
|
[ -z "$mac" ] && return
|
|
|
|
macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=2 count=6
|
|
}
|
|
|
|
board=$(board_name)
|
|
|
|
case "$FIRMWARE" in
|
|
"pci_wmac0.eeprom")
|
|
case $board in
|
|
netgear,wndr4700)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x5000 0x1000
|
|
else
|
|
ath9k_eeprom_extract "wifi_data" 0x5000 0x1000
|
|
ath9k_patch_firmware_mac $(mtd_get_mac_binary wifi_data 0xc)
|
|
fi
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
"pci_wmac1.eeprom")
|
|
case $board in
|
|
netgear,wndr4700)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x1000 0x1000
|
|
else
|
|
ath9k_eeprom_extract "wifi_data" 0x1000 0x1000
|
|
ath9k_patch_firmware_mac $(mtd_get_mac_binary wifi_data 0x0)
|
|
fi
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|