#!/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 bs=1 skip=$offset count=$count 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 bs=1 skip=$offset count=$count 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 bs=1 seek=6 count=6 } [ -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" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16) ;; archer-c25-v1|\ tl-wdr6500-v2) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) ;; archer-c7-v4|\ archer-c7-v5) ath10kcal_extract "art" 20480 2116 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" 20480 2116 ;; dap-2695-a1) ath10kcal_extract "radiocfg" 20480 2116 ath10kcal_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a) ;; dir-869-a1|\ qihoo-c301) ath10kcal_extract "radiocfg" 20480 2116 ath10kcal_patch_mac $(mtd_get_mac_ascii devdata wlan5mac) ;; dw33d) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(mtd_get_mac_binary art 18) ;; epg5000|\ esr1750) ath10kcal_extract "caldata" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; gl-ar750s|\ gl-ar750|\ tl-wpa8630) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; koala) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 12) +0) ;; mc-mac1200r) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -1) ;; r6100) ath10kcal_extract "caldata" 20480 2116 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" 20480 2116 ;; re355|\ re450|\ tl-wr902ac-v1) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) ;; unifiac-lite|\ unifiac-pro) ath10kcal_extract "EEPROM" 20480 2116 ;; wi2a-ac200i) ath10kcal_extract "ART" 20480 2116 ;; esac ;; "ath10k/cal-pci-0000:01:00.0.bin") case $board in archer-c5|\ archer-c7) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) ;; nbg6616|\ nbg6716) ath10kcal_extract "RFdata" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) ;; om5p-ac) ath10kcal_extract "ART" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16) ;; rb-911g-5hpacd|\ rb-921gs-5hpacd-r2|\ rb-962uigs-5hact2hnt) ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116 ;; wlr8100) ath10kcal_extract "art" 20480 2116 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|\ archer-c60-v2|\ cf-e355ac-v2|\ cf-e375ac) ath10kcal_extract "art" 20480 12064 ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ /lib/firmware/ath10k/QCA9888/hw2.0/board.bin ;; cf-e385ac) ath10kcal_extract "art" 20480 12064 ;; esac ;; *) exit 1 ;; esac