mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 09:39:00 +00:00
14eb54938b
The MAC addresses for lan/wan are swapped compared to the vendor firmware. This adjusts to vendor configuration, which is: lan *:7b label wan *:7c label+1 2.4g *:7b label 5g *:7a label-1 Only one address is stored in <&mac 0x8>, corresponding to the label. This has been checked on revisions v1, v2 and v3. Since ar71xx calculates the ath10k MAC address based on the ethernet addresses, the number there is adjusted, too. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
196 lines
4.8 KiB
Bash
196 lines
4.8 KiB
Bash
#!/bin/sh
|
|
|
|
ath10kcal_die() {
|
|
echo "ath10cal: " "$*"
|
|
exit 1
|
|
}
|
|
|
|
ath10kcal_from_file() {
|
|
local source=$1
|
|
local offset=$(($2))
|
|
local count=$(($3))
|
|
|
|
dd if=$source of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
|
|
ath10kcal_die "failed to extract calibration data from $source"
|
|
}
|
|
|
|
ath10kcal_extract() {
|
|
local part=$1
|
|
local offset=$(($2))
|
|
local count=$(($3))
|
|
local mtd cal_size
|
|
|
|
mtd=$(find_mtd_chardev $part)
|
|
[ -n "$mtd" ] || \
|
|
ath10kcal_die "no mtd device found for partition $part"
|
|
|
|
# Check that the calibration data size in header equals the desired size
|
|
cal_size=$(dd if=$mtd bs=2 count=1 skip=$(( $offset / 2 )) conv=swab 2>/dev/null | hexdump -ve '1/2 "%d"')
|
|
|
|
[ "$count" = "$cal_size" ] || \
|
|
ath10kcal_die "no calibration data found in $part"
|
|
|
|
dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \
|
|
ath10kcal_die "failed to extract calibration data from $mtd"
|
|
}
|
|
|
|
ath10kcal_patch_mac() {
|
|
local mac=$1
|
|
|
|
[ -z "$mac" ] && return
|
|
|
|
macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc oflag=seek_bytes bs=6 seek=6 count=1
|
|
}
|
|
|
|
[ -e /lib/firmware/$FIRMWARE ] && exit 0
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/system.sh
|
|
|
|
board=$(board_name)
|
|
|
|
case "$FIRMWARE" in
|
|
"ath10k/cal-pci-0000:00:00.0.bin")
|
|
case $board in
|
|
a40|\
|
|
a60|\
|
|
mr1750|\
|
|
mr1750v2|\
|
|
om5p-acv2)
|
|
ath10kcal_extract "ART" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
|
;;
|
|
archer-c25-v1|\
|
|
tl-wdr6500-v2)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2)
|
|
;;
|
|
archer-c7-v4|\
|
|
archer-c7-v5)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1)
|
|
;;
|
|
cf-e355ac-v1|\
|
|
cf-e380ac-v1|\
|
|
cf-e380ac-v2|\
|
|
dlan-pro-1200-ac|\
|
|
e1700ac-v2|\
|
|
e600gac-v2|\
|
|
minibox-v3.2|\
|
|
oolite-v5.2|\
|
|
oolite-v5.2-dev|\
|
|
sr3200|\
|
|
xd3200)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
;;
|
|
dap-2695-a1)
|
|
ath10kcal_extract "radiocfg" 0x5000 0x844
|
|
ath10kcal_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
|
|
;;
|
|
dir-869-a1|\
|
|
qihoo-c301)
|
|
ath10kcal_extract "radiocfg" 0x5000 0x844
|
|
ath10kcal_patch_mac $(mtd_get_mac_ascii devdata wlan5mac)
|
|
;;
|
|
dw33d)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(mtd_get_mac_binary art 0x12)
|
|
;;
|
|
epg5000|\
|
|
esr1750)
|
|
ath10kcal_extract "caldata" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
|
|
;;
|
|
gl-ar750s|\
|
|
gl-ar750|\
|
|
tl-wpa8630)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
|
|
;;
|
|
koala)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0xc) +0)
|
|
;;
|
|
mc-mac1200r)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -1)
|
|
;;
|
|
r6100)
|
|
ath10kcal_extract "caldata" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) +2)
|
|
;;
|
|
rb-952ui-5ac2nd|\
|
|
rb-wapg-5hact2hnd)
|
|
ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 0x5000 0x844
|
|
;;
|
|
re355|\
|
|
re450|\
|
|
tl-wr902ac-v1)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2)
|
|
;;
|
|
unifiac-lite|\
|
|
unifiac-pro)
|
|
ath10kcal_extract "EEPROM" 0x5000 0x844
|
|
;;
|
|
wi2a-ac200i)
|
|
ath10kcal_extract "ART" 0x5000 0x844
|
|
;;
|
|
esac
|
|
;;
|
|
"ath10k/cal-pci-0000:01:00.0.bin")
|
|
case $board in
|
|
archer-c5|\
|
|
archer-c7)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -1)
|
|
;;
|
|
nbg6616|\
|
|
nbg6716)
|
|
ath10kcal_extract "RFdata" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2)
|
|
;;
|
|
om5p-ac)
|
|
ath10kcal_extract "ART" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
|
;;
|
|
rb-911g-5hpacd|\
|
|
rb-921gs-5hpacd-r2|\
|
|
rb-922uags-5hpacd|\
|
|
rb-962uigs-5hact2hnt)
|
|
ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 0x5000 0x844
|
|
;;
|
|
wlr8100)
|
|
ath10kcal_extract "art" 0x5000 0x844
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
|
|
;;
|
|
esac
|
|
;;
|
|
"ath10k/pre-cal-pci-0000:00:00.0.bin")
|
|
case $board in
|
|
archer-c58-v1|\
|
|
archer-c59-v1|\
|
|
archer-c59-v2|\
|
|
archer-c60-v1|\
|
|
cf-e355ac-v2|\
|
|
cf-e375ac)
|
|
ath10kcal_extract "art" 0x5000 0x2f20
|
|
ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
|
|
/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
|
|
;;
|
|
archer-c60-v2)
|
|
ath10kcal_extract "art" 0x5000 0x2f20
|
|
ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
|
|
/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -1)
|
|
;;
|
|
cf-e385ac)
|
|
ath10kcal_extract "art" 0x5000 0x2f20
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|