mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +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>
179 lines
4.1 KiB
Bash
179 lines
4.1 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_eeprom_extract_reverse() {
|
|
local part=$1
|
|
local offset=$2
|
|
local count=$(($3))
|
|
local mtd
|
|
local reversed
|
|
local caldata
|
|
|
|
mtd=$(find_mtd_chardev "$part")
|
|
reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd)
|
|
|
|
for byte in $reversed; do
|
|
caldata="\x${byte}${caldata}"
|
|
done
|
|
|
|
printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
|
|
}
|
|
|
|
ath9k_patch_firmware_mac() {
|
|
local mac=$1
|
|
|
|
[ -z "$mac" ] && return
|
|
|
|
macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc oflag=seek_bytes bs=6 seek=2 count=1
|
|
}
|
|
|
|
board=$(board_name)
|
|
|
|
case "$FIRMWARE" in
|
|
"soc_wmac.eeprom")
|
|
case $board in
|
|
c-55|\
|
|
c-60)
|
|
ath9k_eeprom_extract "art" 0x1000 0x800
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +1)
|
|
;;
|
|
fritz4020|\
|
|
fritz450e)
|
|
ath9k_eeprom_extract_reverse "urlader" 0x1541 0x440
|
|
;;
|
|
mr18)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x1000 0x800
|
|
else
|
|
ath9k_eeprom_extract "odm-caldata" 0x1000 0x800
|
|
fi
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +1)
|
|
;;
|
|
r6100 | \
|
|
wndr3700v4 | \
|
|
wndr4300)
|
|
ath9k_eeprom_extract "caldata" 0x1000 0x800
|
|
ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0x0)
|
|
;;
|
|
rambutan)
|
|
ath9k_eeprom_extract "art" 0x1000 0x800
|
|
;;
|
|
wlr8100)
|
|
ath9k_eeprom_extract "art" 0x1000 0x800
|
|
ath9k_patch_firmware_mac $(mtd_get_mac_ascii u-boot-env "ethaddr")
|
|
;;
|
|
z1)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x1000 0x800
|
|
else
|
|
ath9k_eeprom_extract "origcaldata" 0x1000 0x800
|
|
fi
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +2)
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
"pci_wmac0.eeprom")
|
|
case $board in
|
|
c-55)
|
|
ath9k_eeprom_extract "art" 0x5000 0x800
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +2)
|
|
;;
|
|
fritz300e)
|
|
ath9k_eeprom_extract_reverse "urloader" 0x1541 0x440
|
|
;;
|
|
mr18)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x5000 0x800
|
|
else
|
|
ath9k_eeprom_extract "odm-caldata" 0x5000 0x800
|
|
fi
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +2)
|
|
;;
|
|
wndr3700v4 | \
|
|
wndr4300)
|
|
ath9k_eeprom_extract "caldata" 0x5000 0x800
|
|
ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0xc)
|
|
;;
|
|
z1)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x15000 0x1000
|
|
else
|
|
ath9k_eeprom_extract "origcaldata" 0x15000 0x1000
|
|
fi
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +3)
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
"pci_wmac1.eeprom")
|
|
case $board in
|
|
mr18)
|
|
. /lib/upgrade/nand.sh
|
|
|
|
if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
|
|
ath9k_ubi_eeprom_extract "caldata" 0x9000 0x800
|
|
else
|
|
ath9k_eeprom_extract "odm-caldata" 0x9000 0x800
|
|
fi
|
|
ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +3)
|
|
;;
|
|
*)
|
|
ath9k_eeprom_die "board $board is not supported yet"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|