1#!/bin/sh 2 3[ -e /lib/firmware/$FIRMWARE ] && exit 0 4 5. /lib/ar71xx.sh 6. /lib/functions.sh 7. /lib/functions/system.sh 8 9ath9k_eeprom_die() { 10 echo "ath9k eeprom: " "$*" 11 exit 1 12} 13 14ath9k_eeprom_extract() { 15 local part=$1 16 local offset=$2 17 local count=$3 18 local mtd 19 20 mtd=$(find_mtd_chardev $part) 21 [ -n "$mtd" ] || \ 22 ath9k_eeprom_die "no mtd device found for partition $part" 23 24 dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ 25 ath9k_eeprom_die "failed to extract from $mtd" 26} 27 28ath9k_ubi_eeprom_extract() { 29 local part=$1 30 local offset=$2 31 local count=$3 32 local ubidev=$(nand_find_ubi $CI_UBIPART) 33 local ubi 34 35 ubi=$(nand_find_volume $ubidev $part) 36 [ -n "$ubi" ] || \ 37 ath9k_eeprom_die "no UBI volume found for $part" 38 39 dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ 40 ath9k_eeprom_die "failed to extract from $ubi" 41} 42 43ath9k_patch_firmware_mac() { 44 local mac=$1 45 46 [ -z "$mac" ] && return 47 48 macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=2 count=6 49} 50 51board=$(ar71xx_board_name) 52 53case "$FIRMWARE" in 54"soc_wmac.eeprom") 55 case $board in 56 c-55) 57 ath9k_eeprom_extract "art" 4096 2048 58 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1) 59 ;; 60 mr18) 61 . /lib/upgrade/nand.sh 62 63 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then 64 ath9k_ubi_eeprom_extract "caldata" 4096 2048 65 else 66 ath9k_eeprom_extract "odm-caldata" 4096 2048 67 fi 68 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +1) 69 ;; 70 r6100 | \ 71 wndr3700v4 | \ 72 wndr4300) 73 ath9k_eeprom_extract "caldata" 4096 2048 74 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0) 75 ;; 76 *) 77 ath9k_eeprom_die "board $board is not supported yet" 78 ;; 79 esac 80 ;; 81 82"pci_wmac0.eeprom") 83 case $board in 84 c-55) 85 ath9k_eeprom_extract "art" 20480 2048 86 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2) 87 ;; 88 mr18) 89 . /lib/upgrade/nand.sh 90 91 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then 92 ath9k_ubi_eeprom_extract "caldata" 20480 2048 93 else 94 ath9k_eeprom_extract "odm-caldata" 20480 2048 95 fi 96 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2) 97 ;; 98 wndr3700v4 | \ 99 wndr4300) 100 ath9k_eeprom_extract "caldata" 20480 2048 101 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 12) 102 ;; 103 *) 104 ath9k_eeprom_die "board $board is not supported yet" 105 ;; 106 esac 107 ;; 108 109"pci_wmac1.eeprom") 110 case $board in 111 mr18) 112 . /lib/upgrade/nand.sh 113 114 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then 115 ath9k_ubi_eeprom_extract "caldata" 36864 2048 116 else 117 ath9k_eeprom_extract "odm-caldata" 36864 2048 118 fi 119 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3) 120 ;; 121 *) 122 ath9k_eeprom_die "board $board is not supported yet" 123 ;; 124 esac 125 ;; 126esac 127