X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fath79%2Fbase-files%2Fetc%2Fhotplug.d%2Ffirmware%2F10-ath9k-eeprom;h=68943b4eb010afa1cfd7e1ad18e562543582df2c;hb=3c3eaa57d9806dccae9f130cf608079f67097bed;hp=c2d87f58de987e283c1ab95d67ee0082ef2f1e28;hpb=75ed56a08a4ce978323259a59a8f45ceed511584;p=openwrt%2Fstaging%2Fwigyori.git diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index c2d87f58de..68943b4eb0 100644 --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -42,17 +42,158 @@ ath9k_eeprom_extract_reverse() { printf "%b" "$caldata" > /lib/firmware/$FIRMWARE } +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" +} + +ath9k_patch_fw_mac() { + local mac=$1 + local mac_offset=$2 + local chksum_offset=$3 + local xor_mac + local xor_fw_mac + local xor_fw_chksum + + [ -z "$mac" -o -z "$mac_offset" ] && return + + [ -n "$chksum_offset" ] && { + xor_mac=${mac//:/} + xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" + + 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}" + + 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 + } + + macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$mac_offset count=6 +} + +ath9k_patch_fw_mac_crc() { + local mac=$1 + local mac_offset=$2 + local chksum_offset=$((mac_offset - 10)) + + ath9k_patch_fw_mac "${mac}" "${mac_offset}" "${chksum_offset}" +} + board=$(board_name) case "$FIRMWARE" in +"ath9k-eeprom-ahb-18100000.wmac.bin") + case $board in + avm,fritz4020) + ath9k_eeprom_extract_reverse "urlader" 5441 1088 + ;; + iodata,wn-ac1167dgr|\ + iodata,wn-ac1600dgr2|\ + iodata,wn-ag300dgr) + ath9k_eeprom_extract "art" 4096 1088 + ath9k_patch_fw_mac $(mtd_get_mac_ascii u-boot-env ethaddr) 2 + ;; + *) + ath9k_eeprom_die "board $board is not supported yet" + ;; + esac + ;; "ath9k-eeprom-pci-0000:00:00.0.bin") case $board in - "avm,fritz300e") + avm,fritz300e) ath9k_eeprom_extract_reverse "urloader" 5441 1088 ;; - "ubnt,unifi") + buffalo,whr-g301n|\ + buffalo,wzr-hp-g302h-a1a0|\ + tplink,tl-wr841-v5|\ + tplink,tl-wr941-v4) + ath9k_eeprom_extract "art" 4096 3768 + ;; + buffalo,wzr-hp-g450h) + ath9k_eeprom_extract "ART" 4096 1088 + ;; + ocedo,raccoon|\ + tplink,tl-wdr3600|\ + tplink,tl-wdr4300|\ + tplink,tl-wdr4900-v2|\ + winchannel,wb2000) + 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|\ + tplink,tl-wr842n-v1|\ + ubnt,airrouter|\ + ubnt,bullet-m|\ + ubnt,nano-m|\ + ubnt,rocket-m) + ath9k_eeprom_extract "art" 4096 4096 + ;; + pqi,air-pen) + ath9k_eeprom_extract "art" 4096 2002 + ;; + ubnt,unifi) ath9k_eeprom_extract "art" 4096 2048 ;; + wd,mynet-wifi-rangeextender) + ath9k_eeprom_extract "art" 4096 4096 + ath9k_patch_fw_mac_crc $(nvram get wl0_hwaddr) "$mac" 2 + ;; + *) + ath9k_eeprom_die "board $board is not supported yet" + ;; + esac + ;; +"ath9k-eeprom-pci-0000:00:11.0.bin") + case $board in + buffalo,wzr-hp-ag300h|\ + netgear,wndr3700|\ + netgear,wndr3700v2|\ + netgear,wndr3800) + ath9k_eeprom_extract "art" 4096 3768 + ;; + dlink,dir-825-b1) + ath9k_eeprom_extract "caldata" 4096 3768 + ath9k_patch_fw_mac_crc $(mtd_get_mac_text "caldata" 65440) 524 + ;; + *) + ath9k_eeprom_die "board $board is not supported yet" + ;; + esac + ;; +"ath9k-eeprom-pci-0000:00:12.0.bin") + case $board in + buffalo,wzr-hp-ag300h|\ + netgear,wndr3700|\ + netgear,wndr3700v2|\ + netgear,wndr3800) + ath9k_eeprom_extract "art" 20480 3768 + ;; + dlink,dir-825-b1) + ath9k_eeprom_extract "caldata" 20480 3768 + ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "caldata" 65460) 1) 524 + ;; *) ath9k_eeprom_die "board $board is not supported yet" ;;