mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 01:59:02 +00:00
9ed272fe95
This is a dual band 11a/11n router with 1x wan and 4x gig lan ports. There are two versions of this router which can be identified through the factory web interface, v1 has 128mb ram and a uboot size of 128k, v2 has 256mb ram and a uboot size of 256k, the remaining hardware and PCB markings are the same. Short specification: SoC: Qualcomm Atheros QCA9558 - 720 MHz Switch: Atheros AR8327 Second radio : Qualcomm Atheros QCA9880 802.11ac 4 LAN/1 WAN 1000Mps Ethernet 256 MB of RAM (DDR2) 16 MB of FLASH 3x2.4 GHz, 3x5GHz antennas Steps to install : Option A : Use vendor UI Option B (if A is not working) : (a) Download 'backup' from vendor UI and rename it backup.tar.gz (b) Open the archive, and update the root password in /etc/shadow by '$1$9wX3HGfB$X5Sb3kqzzBLdKRUR2kfFd0' (c) 'Restore' from the archive using the vendor UI. Root password is now 'aaa' (d) Scp the firwmware to the device: $ scp <openwrt-sysupgrade>.bin root@192.168.1.1:/ (d) ssh to the device and flash the firmware: $ cd / $ mtd -e firmware -r write <openwrt-sysupgrade>.bin firmware Signed-off-by: Gareth Parker <gareth41@orcon.net.nz> Signed-off-by: Ding Tengfei <dtf@comfast.cn> Signed-off-by: Joan Moreau <jom@grosjo.net> [reformatted commit message] Signed-off-by: David Bauer <mail@david-bauer.net>
230 lines
5.8 KiB
Bash
230 lines
5.8 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions/k2t.sh
|
|
|
|
# xor multiple hex values of the same length
|
|
xor() {
|
|
local val
|
|
local ret="0x$1"
|
|
local retlen=${#1}
|
|
|
|
shift
|
|
while [ -n "$1" ]; do
|
|
val="0x$1"
|
|
ret=$((ret ^ val))
|
|
shift
|
|
done
|
|
|
|
printf "%0${retlen}x" "$ret"
|
|
}
|
|
|
|
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
|
|
|
|
mtd=$(find_mtd_chardev $part)
|
|
[ -n "$mtd" ] || \
|
|
ath10kcal_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 || \
|
|
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
|
|
}
|
|
|
|
ath10kcal_patch_mac_crc() {
|
|
local mac=$1
|
|
local mac_offset=6
|
|
local chksum_offset=2
|
|
local xor_mac
|
|
local xor_fw_mac
|
|
local xor_fw_chksum
|
|
|
|
xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
|
|
xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}"
|
|
|
|
ath10kcal_patch_mac "$mac" && {
|
|
xor_mac=${mac//:/}
|
|
xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}"
|
|
|
|
xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
|
|
xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac)
|
|
|
|
printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
|
|
dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2
|
|
}
|
|
}
|
|
|
|
[ -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
|
|
comfast,cf-wr650ac-v1|\
|
|
comfast,cf-wr650ac-v2|\
|
|
yuncore,a770)
|
|
ath10kcal_extract "art" 20480 2116
|
|
;;
|
|
devolo,dvl1200e|\
|
|
devolo,dvl1200i|\
|
|
devolo,dvl1750c|\
|
|
devolo,dvl1750e|\
|
|
devolo,dvl1750i|\
|
|
devolo,dvl1750x)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary art 0) -1)
|
|
;;
|
|
dlink,dir-859-a1)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(mtd_get_mac_ascii devdata "wlan5mac")
|
|
;;
|
|
elecom,wrc-1750ghbk2-i)
|
|
ath10kcal_extract "art" 20480 2116
|
|
;;
|
|
engenius,ecb1750)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(mtd_get_mac_ascii u-boot-env athaddr)
|
|
;;
|
|
engenius,epg5000|\
|
|
iodata,wn-ac1167dgr|\
|
|
iodata,wn-ac1600dgr2)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
|
|
;;
|
|
engenius,ews511ap)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
|
|
;;
|
|
glinet,gl-ar750s)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1)
|
|
;;
|
|
glinet,gl-x750)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2)
|
|
;;
|
|
nec,wg800hp)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac_crc $(mtd_get_mac_text board_data 2176)
|
|
;;
|
|
ocedo,koala|\
|
|
ocedo,ursus)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(mtd_get_mac_binary art 12)
|
|
;;
|
|
openmesh,om5p-ac-v2)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
|
|
;;
|
|
qihoo,c301)
|
|
ath10kcal_extract "radiocfg" 20480 2116
|
|
ath10kcal_patch_mac_crc $(mtd_get_mac_ascii devdata wlan5mac)
|
|
;;
|
|
tplink,archer-a7-v5|\
|
|
tplink,archer-c2-v3|\
|
|
tplink,archer-c7-v4|\
|
|
tplink,archer-c7-v5|\
|
|
tplink,archer-c25-v1)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary info 8) -1)
|
|
;;
|
|
tplink,archer-c5-v1|\
|
|
tplink,archer-c7-v2)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary u-boot 0x1fc00) -1)
|
|
;;
|
|
tplink,archer-d50-v1)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary romfile 0xf100) +2)
|
|
;;
|
|
tplink,re350k-v1)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary config 0x10008) +2)
|
|
;;
|
|
tplink,re355-v1|\
|
|
tplink,re450-v1)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2)
|
|
;;
|
|
tplink,re450-v2)
|
|
ath10kcal_extract "art" 20480 2116
|
|
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary info 8) +1)
|
|
;;
|
|
ubnt,unifiac-lite|\
|
|
ubnt,unifiac-mesh|\
|
|
ubnt,unifiac-mesh-pro|\
|
|
ubnt,lap-120|\
|
|
ubnt,nanobeam-ac|\
|
|
ubnt,nanostation-ac|\
|
|
ubnt,nanostation-ac-loco|\
|
|
ubnt,unifiac-pro)
|
|
ath10kcal_extract "EEPROM" 20480 2116
|
|
;;
|
|
esac
|
|
;;
|
|
"ath10k/pre-cal-pci-0000:00:00.0.bin")
|
|
case $board in
|
|
dlink,dir-842-c1|\
|
|
dlink,dir-842-c2|\
|
|
dlink,dir-842-c3|\
|
|
nec,wg1200cr)
|
|
ath10kcal_extract "art" 20480 12064
|
|
ath10kcal_patch_mac_crc $(mtd_get_mac_ascii devdata wlan5mac)
|
|
ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
|
|
/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
|
|
;;
|
|
netgear,ex6400|\
|
|
netgear,ex7300)
|
|
ath10kcal_extract "caldata" 20480 12064
|
|
ath10kcal_patch_mac $(mtd_get_mac_binary caldata 12)
|
|
;;
|
|
phicomm,k2t)
|
|
ath10kcal_extract "art" 20480 12064
|
|
ath10kcal_patch_mac_crc $(k2t_get_mac "5g_mac")
|
|
ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
|
|
/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
|
|
;;
|
|
tplink,archer-c58-v1|\
|
|
tplink,archer-c59-v1|\
|
|
tplink,archer-c60-v1|\
|
|
tplink,archer-c60-v2|\
|
|
tplink,archer-c6-v2)
|
|
ath10kcal_extract "art" 20480 12064
|
|
ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary mac 8) -1)
|
|
ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
|
|
/lib/firmware/ath10k/QCA9888/hw2.0/board.bin
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|