#! /bin/sh

# Copyright (C) 2013 Ivo van Poorten
# All rights reserved
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

MAJOR=5
MINOR=2

test "$#" -eq 3 || { cat << __EOF__

rkparameters v$MAJOR.$MINOR

usage:    rkparameters model fw_version partitionsfile > outfile

e.g. rkparameters arnova7g2 1.2.3 mtdparts.txt > params

mtdparts.txt:
    first line is the command line; the following lines
    contain the name of the partition and its size.
    the parameters partition is skipped

__EOF__
exit
}

vars="FW_VERSION \
      FIRMWARE_VER \
      MACHINE_MODEL \
      MACHINE_ID \
      MANUFACTURER \
      MAGIC \
      ATAG \
      MACHINE \
      CHECK_MASK \
      KERNEL_IMG \
      COMBINATION_KEY \
      CMDLINE"

for i in $vars ; do
    eval $i=
done

MAGIC=0x5041524B
ATAG=0x60000800
CHECK_MASK=0x80
KERNEL_IMG=0x60008000

case $1 in

    arnova10g1)
        FW_VERSION=$2
        MACHINE=1616
        COMBINATION_KEY=F,0,1
        ;;

    arnova7g2|*)
        FIRMWARE_VER=$2
        MACHINE_MODEL=AN7G2
        MACHINE_ID=007
        MANUFACTURER=RK29SDK
        MACHINE=2929
        KERNEL_IMG=0x60408000
        ;;

esac

for i in $vars ; do
    eval j=$i
    eval k=\$$j
    test -n "$k" && echo "$j: $k"
done

cat "$3" | {
    read CMDLINE
    echo -n "$CMDLINE"
    POS=0x00002000              # skip parameter block
    read NAME SIZE
    while test "$SIZE" != "-" ; do
        printf "0x%08x@0x%08x($NAME)," $SIZE $POS
        POS=$(($POS+$SIZE))
        read NAME SIZE
    done
    printf -- "-@0x%08x($NAME)\n" $POS
}
