X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=target%2Flinux%2Fath79%2Fbase-files%2Fetc%2Fhotplug.d%2Ffirmware%2F11-ath10k-caldata;h=6f50a47271633483abb51ac4cbd290641eeb1b18;hp=2bbe5923bc35093b9855ef495586830a597db05f;hb=9ed272fe950029c88189ba24d4b3594cd52c176c;hpb=53c474abbdfef8eb3499e2d10c9ad491788b8a72 diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 2bbe5923bc..6f50a47271 100644 --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -1,5 +1,23 @@ #!/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 @@ -10,7 +28,7 @@ ath10kcal_from_file() { local offset=$2 local count=$3 - dd if=$source of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ + 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" } @@ -24,7 +42,7 @@ ath10kcal_extract() { [ -n "$mtd" ] || \ ath10kcal_die "no mtd device found for partition $part" - dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ + 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" } @@ -33,7 +51,30 @@ ath10kcal_patch_mac() { [ -z "$mac" ] && return - macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6 + 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 @@ -46,10 +87,140 @@ 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_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 ;; *)