ar71xx: remove hard-coded folder name from Mikrotik RB upgrade
[openwrt/openwrt.git] / target / linux / ar71xx / base-files / lib / upgrade / platform.sh
index 6f1a3ba1c92e1057fe4d0d1040b9143318ed367a..e33b74a64e2346a46e6ff2a38e95c26ff9739b14 100755 (executable)
@@ -6,8 +6,8 @@
 . /lib/ar71xx.sh
 
 PART_NAME=firmware
-RAMFS_COPY_DATA=/lib/ar71xx.sh
-RAMFS_COPY_BIN='nandwrite'
+RAMFS_COPY_DATA='/lib/ar71xx.sh /etc/fw_env.config /var/lock/fw_printenv.lock'
+RAMFS_COPY_BIN='nandwrite fw_printenv fw_setenv'
 
 CI_BLKSZ=65536
 CI_LDADR=0x80060000
@@ -65,7 +65,7 @@ platform_do_upgrade_combined() {
        then
                local rootfspart=$(platform_find_rootfspart "$partitions" "$kernelpart")
                local append=""
-               [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+               [ -f "$UPGRADE_BACKUP" ] && append="-j $UPGRADE_BACKUP"
 
                if [ "$PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD" -ne 1 ]; then
                    ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \
@@ -93,26 +93,37 @@ tplink_get_image_boot_size() {
        get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
 }
 
+tplink_pharos_check_support_list() {
+       local image="$1"
+       local offset="$2"
+       local model="$3"
+       local trargs="$4"
+
+       # Here $image is given to dd directly instead of using get_image;
+       # otherwise the skip will take almost a second (as dd can't seek)
+       dd if="$image" bs=1 skip=$offset count=1024 2>/dev/null | tr -d "$trargs" | (
+               while IFS= read -r line; do
+                       [ "$line" = "$model" ] && exit 0
+               done
+
+               exit 1
+       )
+}
+
 tplink_pharos_check_image() {
-       local magic_long="$(get_magic_long "$1")"
-       [ "$magic_long" != "7f454c46" ] && {
-               echo "Invalid image magic '$magic_long'"
+       local image_magic="$(get_magic_long "$1")"
+       local board_magic="$2"
+       [ "$image_magic" != "$board_magic" ] && {
+               echo "Invalid image magic '$image_magic'. Expected '$board_magic'."
                return 1
        }
 
-       local model_string="$(tplink_pharos_get_model_string)"
-       local line
-
-       # Here $1 is given to dd directly instead of get_image as otherwise the skip
-       # will take almost a second (as dd can't seek then)
-       #
-       # This will fail if the image isn't local, but that's fine: as the
-       # read loop won't be executed at all, it will return true, so the image
-       # is accepted (loading the first 1.5M of a remote image for this check seems
-       # a bit extreme)
-       dd if="$1" bs=1 skip=1511432 count=1024 2>/dev/null | while read line; do
-               [ "$line" = "$model_string" ] && break
-       done || {
+       local model_string="$3"
+       local trargs="$4"
+
+       # New images have the support list at 7802888, old ones at 1511432
+       tplink_pharos_check_support_list "$1" 7802888 "$model_string" "$trargs" || \
+       tplink_pharos_check_support_list "$1" 1511432 "$model_string" "$trargs" || {
                echo "Unsupported image (model not in support-list)"
                return 1
        }
@@ -153,7 +164,7 @@ platform_do_upgrade_compex() {
 
        if [ -n "$fw_mtd" ] &&  [ ${fw_blocks:-0} -gt 0 ]; then
                local append=""
-               [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+               [ -f "$UPGRADE_BACKUP" ] && append="-j $UPGRADE_BACKUP"
 
                sync
                dd if="$fw_file" bs=64k skip=1 count=$fw_blocks 2>/dev/null | \
@@ -201,22 +212,29 @@ platform_check_image() {
        archer-c25-v1|\
        archer-c58-v1|\
        archer-c59-v1|\
+       archer-c59-v2|\
        archer-c60-v1|\
+       archer-c60-v2|\
        archer-c7-v4|\
+       archer-c7-v5|\
        bullet-m|\
+       bullet-m-xw|\
        c-55|\
        carambola2|\
        cf-e316n-v2|\
        cf-e320n-v2|\
-       cf-e355ac|\
+       cf-e355ac-v1|\
+       cf-e355ac-v2|\
        cf-e375ac|\
        cf-e380ac-v1|\
        cf-e380ac-v2|\
+       cf-e385ac|\
        cf-e520n|\
        cf-e530n|\
        cpe505n|\
        cpe830|\
        cpe870|\
+       dap-1330-a1|\
        dgl-5500-a1|\
        dhp-1565-a1|\
        dir-505-a1|\
@@ -233,6 +251,12 @@ platform_check_image() {
        dr342|\
        dr531|\
        dragino2|\
+       e1700ac-v2|\
+       e558-v2|\
+       e600g-v2|\
+       e600gac-v2|\
+       e750a-v4|\
+       e750g-v8|\
        ebr-2310-c1|\
        ens202ext|\
        epg5000|\
@@ -245,12 +269,14 @@ platform_check_image() {
        gl-ar300m|\
        gl-ar300|\
        gl-ar750|\
+       gl-ar750s|\
        gl-domino|\
        gl-mifi|\
        gl-usb150|\
        hiwifi-hc6361|\
        hornet-ub-x2|\
        jwap230|\
+       lbe-m5|\
        lima|\
        loco-m-xw|\
        mzk-w04nu|\
@@ -271,6 +297,7 @@ platform_check_image() {
        sc300m|\
        sc450|\
        sr3200|\
+       t830|\
        tew-632brp|\
        tew-712br|\
        tew-732br|\
@@ -281,6 +308,7 @@ platform_check_image() {
        unifi-outdoor|\
        unifiac-lite|\
        unifiac-pro|\
+       wam250|\
        weio|\
        whr-g301n|\
        whr-hp-g300n|\
@@ -366,7 +394,7 @@ platform_check_image() {
                }
 
                local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null)
-               local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}"
+               local md5_chk=$(fwtool -q -t -i /dev/null "$1"; dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}"
 
                if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then
                        return 0
@@ -385,12 +413,17 @@ platform_check_image() {
        el-m150|\
        el-mini|\
        gl-inet|\
+       lan-turtle|\
        mc-mac1200r|\
        minibox-v1|\
+       minibox-v3.2|\
        omy-g1|\
        omy-x1|\
        onion-omega|\
-       oolite|\
+       oolite-v1|\
+       oolite-v5.2|\
+       oolite-v5.2-dev|\
+       packet-squirrel|\
        re355|\
        re450|\
        rut900|\
@@ -457,13 +490,16 @@ platform_check_image() {
        tl-wr842n-v3|\
        tl-wr902ac-v1|\
        tl-wr940n-v4|\
+       tl-wr940n-v6|\
        tl-wr941nd|\
        tl-wr941nd-v5|\
-       tl-wr941nd-v6)
+       tl-wr941nd-v6|\
+       ts-d084|\
+       wifi-pineapple-nano)
                local magic_ver="0100"
 
                case "$board" in
-               tl-wdr6500-v2)
+               tl-wdr3320-v2|tl-wdr6500-v2)
                        magic_ver="0200"
                        ;;
                esac
@@ -522,14 +558,17 @@ platform_check_image() {
        rb-912uag-2hpnd|\
        rb-912uag-5hpnd|\
        rb-921gs-5hpacd-r2|\
+       rb-922uags-5hpacd|\
        rb-951g-2hnd|\
        rb-951ui-2hnd|\
        rb-2011l|\
        rb-2011il|\
+       rb-2011ils|\
        rb-2011uas|\
        rb-2011uas-2hnd|\
        rb-2011uias|\
        rb-2011uias-2hnd|\
+       rb-2011uias-2hnd-r2|\
        rb-sxt2n|\
        rb-sxt5n)
                nand_do_platform_check routerboard $1
@@ -551,7 +590,16 @@ platform_check_image() {
        eap120|\
        wbs210|\
        wbs510)
-               tplink_pharos_check_image "$1" && return 0
+               tplink_pharos_check_image "$1" "7f454c46" "$(tplink_pharos_get_model_string)" '' && return 0
+               return 1
+               ;;
+       cpe210-v2|\
+       cpe210-v3)
+               tplink_pharos_check_image "$1" "01000000" "$(tplink_pharos_v2_get_model_string)" '\0\xff\r' && return 0
+               return 1
+               ;;
+       cpe510-v2)
+               tplink_pharos_check_image "$1" "7f454c46" "$(tplink_pharos_v2_get_model_string)" '\0\xff\r' && return 0
                return 1
                ;;
        a40|\
@@ -661,11 +709,15 @@ platform_check_image() {
                ;;
        # these boards use metadata images
        fritz300e|\
+       fritz4020|\
+       fritz450e|\
+       koala|\
        rb-750-r2|\
        rb-750p-pbr2|\
        rb-750up-r2|\
        rb-911-2hn|\
        rb-911-5hn|\
+       rb-931-2nd|\
        rb-941-2nd|\
        rb-951ui-2nd|\
        rb-952ui-5ac2nd|\
@@ -673,8 +725,10 @@ platform_check_image() {
        rb-lhg-5nd|\
        rb-map-2nd|\
        rb-mapl-2nd|\
+       rb-sxt-2nd-r3|\
        rb-wap-2nd|\
-       rb-wapg-5hact2hnd)
+       rb-wapg-5hact2hnd|\
+       rb-wapr-2nd)
                return 0
                ;;
        esac
@@ -692,6 +746,7 @@ platform_pre_upgrade() {
        rb-750up-r2|\
        rb-911-2hn|\
        rb-911-5hn|\
+       rb-931-2nd|\
        rb-941-2nd|\
        rb-951ui-2nd|\
        rb-952ui-5ac2nd|\
@@ -699,8 +754,10 @@ platform_pre_upgrade() {
        rb-lhg-5nd|\
        rb-map-2nd|\
        rb-mapl-2nd|\
+       rb-sxt-2nd-r3|\
        rb-wap-2nd|\
-       rb-wapg-5hact2hnd)
+       rb-wapg-5hact2hnd|\
+       rb-wapr-2nd)
                # erase firmware if booted from initramfs
                [ -z "$(rootfs_type)" ] && mtd erase firmware
                ;;
@@ -716,8 +773,13 @@ platform_nand_pre_upgrade() {
                local fw_mtd=$(find_mtd_part kernel)
                fw_mtd="${fw_mtd/block/}"
                [ -n "$fw_mtd" ] || return
+
+               local board_dir=$(tar tf "$1" | grep -m 1 '^sysupgrade-.*/$')
+               board_dir=${board_dir%/}
+               [ -n "$board_dir" ] || return
+
                mtd erase kernel
-               tar xf "$1" sysupgrade-routerboard/kernel -O | nandwrite -o "$fw_mtd" -
+               tar xf "$1" ${board_dir}/kernel -O | nandwrite -o "$fw_mtd" -
                ;;
        wi2a-ac200i)
                case "$(fw_printenv -n dualPartition)" in
@@ -744,7 +806,7 @@ platform_do_upgrade() {
 
        case "$board" in
        all0258n)
-               platform_do_upgrade_allnet "0x9f050000" "$ARGV"
+               platform_do_upgrade_allnet "0x9f050000" "$1"
                ;;
        all0305|\
        eap7660d|\
@@ -756,19 +818,19 @@ platform_do_upgrade() {
        pb44|\
        routerstation|\
        routerstation-pro)
-               platform_do_upgrade_combined "$ARGV"
+               platform_do_upgrade_combined "$1"
                ;;
        all0315n)
-               platform_do_upgrade_allnet "0x9f080000" "$ARGV"
+               platform_do_upgrade_allnet "0x9f080000" "$1"
                ;;
        cap4200ag|\
        eap300v2|\
        ens202ext)
-               platform_do_upgrade_allnet "0xbf0a0000" "$ARGV"
+               platform_do_upgrade_allnet "0xbf0a0000" "$1"
                ;;
        dir-825-b1|\
        tew-673gru)
-               platform_do_upgrade_dir825b "$ARGV"
+               platform_do_upgrade_dir825b "$1"
                ;;
        a40|\
        a60|\
@@ -790,7 +852,7 @@ platform_do_upgrade() {
        om5p-ac|\
        om5p-acv2|\
        om5p-an)
-               platform_do_upgrade_openmesh "$ARGV"
+               platform_do_upgrade_openmesh "$1"
                ;;
        c-60|\
        hiveap-121|\
@@ -815,15 +877,18 @@ platform_do_upgrade() {
        rb-911g-5hpnd|\
        rb-912uag-2hpnd|\
        rb-912uag-5hpnd|\
-       rb-921gs-5hpacd-r2
+       rb-921gs-5hpacd-r2|\
+       rb-922uags-5hpacd|\
        rb-951g-2hnd|\
        rb-951ui-2hnd|\
        rb-2011il|\
+       rb-2011ils|\
        rb-2011l|\
        rb-2011uas|\
        rb-2011uas-2hnd|\
        rb-2011uias|\
        rb-2011uias-2hnd|\
+       rb-2011uias-2hnd-r2|\
        rb-sxt2n|\
        rb-sxt5n|\
        wi2a-ac200i|\
@@ -838,14 +903,14 @@ platform_do_upgrade() {
        uap-pro|\
        unifi-outdoor-plus)
                MTD_CONFIG_ARGS="-s 0x180000"
-               default_do_upgrade "$ARGV"
+               default_do_upgrade "$1"
                ;;
        wp543|\
        wpe72)
-               platform_do_upgrade_compex "$ARGV"
+               platform_do_upgrade_compex "$1"
                ;;
        *)
-               default_do_upgrade "$ARGV"
+               default_do_upgrade "$1"
                ;;
        esac
 }