#!/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 bs=1 skip=$offset count=$count 2>/dev/null || \ ath9k_eeprom_die "failed to extract from $mtd" } 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 } board=$(board_name) case "$FIRMWARE" in "ath9k-eeprom-pci-0000:00:00.0.bin") case $board in avm,fritz300e) ath9k_eeprom_extract_reverse "urloader" 5441 1088 ;; ocedo,raccoon|\ tplink,tl-wdr3600|\ tplink,tl-wdr4300|\ tplink,tl-wdr4900-v2) ath9k_eeprom_extract "art" 20480 1088 ;; netgear,wnr612-v2|\ on,n150r|\ pcs,cap324|\ tplink,tl-mr3220-v1|\ tplink,tl-mr3420-v1|\ tplink,tl-wr2543-v1|\ tplink,tl-wr740n-v1|\ tplink,tl-wr740n-v3|\ tplink,tl-wr741-v1|\ tplink,tl-wr743nd-v1|\ tplink,tl-wr841-v7|\ ubnt,unifi) ath9k_eeprom_extract "art" 4096 2048 ;; tplink,tl-wr841-v5|\ tplink,tl-wr941-v4) ath9k_eeprom_extract "art" 4096 3768 ;; *) ath9k_eeprom_die "board $board is not supported yet" ;; esac ;; esac