10-ath9k-eeprom 3.8 KB

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