#! /bin/sh
URLADER_VERSION=97.adam2
################################################################################
# proceed Urlader & Memorylayout handling
#
# (!!! this block must not be run more than once !!!)
#
################################################################################

echo "proceed 4MB Urlader & Memorylayout handling..."

# pruefen ob Fritz Box FON oder Fritz Box 4MB
/var/flash_tffs -d /dev/mtdblock/5 -C /var/tmp/tffs.config -o /dev/null
HWRevision=`grep HWRevision /var/tmp/tffs.config`
HWRevision=${HWRevision##HWRevision }

if [ -z "${HWRevision}" ] ; then
    echo "ACHTUNG konnte HWRevision nicht ermitteln"
    exit $INSTALL_OTHER_ERROR
fi
if [ "${HWRevision}" = "D" ] ; then	# bugfix fr alte 'FRITZ!Box' (~ .70)
    echo "ACHTUNG HWRevision wird auf G umgesetzt !"
    HWRevision=G
    grep -v HWRevision /var/tmp/tffs.config >/var/tmp/tffs.config.tmp
    rm /var/tmp/tffs.config 
    mv /var/tmp/tffs.config.tmp /var/tmp/tffs.config 
    echo "HWRevision G" >>/var/tmp/tffs.config 
fi
echo "HWRevision=${HWRevision}"
case ${HWRevision} in
    *G)
        PRODUKT=Fritz_Box_4MB
        ;;
    *58)
        PRODUKT=Fritz_Box_FON
        ;;
    *)
        echo "unbekannte HWRevision !"
        exit $INSTALL_WRONG_HARDWARE
        ;;
esac

################################################################################
# are all files to be processed ok?
if ! /var/chksum /var/tmp/filesystem.image ; then
    echo "chksum for file /var/tmp/filesystem.image failed."
    exit $INSTALL_FILESYSTEM_CHECKSUM
fi
if [ ! -e /var/tmp/urlader.${PRODUKT}.${URLADER_VERSION}.image ] ; then
    echo "missing file /var/tmp/urlader.${PRODUKT}.${URLADER_VERSION}.image"
    exit $INSTALL_URLADER_CHECKSUM # no checksum checked, but resultvalue is ok to be used!
fi


################################################################################
#
# mtd0 0x900C0000,0x90370000  filesystem 0x2B * 64 KByte
# mtd1 0x90010000,0x900C0000  kernel     0x0B * 64 KByte
# mtd2 0x90000000,0x90010000  urlader    0x01 * 64 KByte
# mtd3 0x90370000,0x903F0000  jffs2      0x08 * 64 KByte
# mtd4 0x903FE000,0x90400000  reserved   8 KBytes
# mtd5 0x903F0000,0x903FE000  tffs 1.0   56 KBytes
#
#    MTD        Alt     Groesse         Neu     Groesse
################################################################################
#     0     filesystem   43*64K       filesystem 48*64K
#     1       kernel     11*64K       kernel     11*64K
#     2      urlader      1*64K       urlader     1*64K
#     3        jffs2      8*64K       tffs-2.0    2*64K
#     4      reserved      8K         tffs-2.0    2*64K
#     5      tffs 1.0     56K         ------- 
#
################################################################################

################################################################################
# save some userconfiguration data - will be restored when Changes are done
if [ -f /var/flash/ar7.cfg ] ; then
    INPUT_OPTION="-i /var/flash/ar7.cfg 113"
else
    INPUT_OPTION=
fi
if [ -f /var/flash/voip.cfg ] ; then
    INPUT_OPTION="${INPUT_OPTION} -i /var/flash/voip.cfg 114"
fi

################################################################################
# tffs 2.0 Image erzeugen
echo "/var/flash_tffs -c /var/tmp/tffs.config -s 0x20000 $INPUT_OPTION -o /var/tmp/tffs.image"
/var/flash_tffs -c /var/tmp/tffs.config -s 0x20000 $INPUT_OPTION -o /var/tmp/tffs.image || exit $INSTALL_OTHER_ERROR

# 8 KByte fr mtd4 (oberstes Stck von tffs.image) erzeugen
echo "/var/split_firmware -i /var/tmp/tffs.image -1 /var/tmp/tffs.tmp -s 0x1E000 -2 /var/tmp/reserved.image -S 0x2000"
/var/split_firmware -i /var/tmp/tffs.image -1 /var/tmp/tffs.tmp -s 0x1E000 -2 /var/tmp/reserved.image -S 0x2000 || exit $INSTALL_OTHER_ERROR

# 56 KByte fr mtd5 (mittleres Stck von tffs.image) erzeugen
echo "/var/split_firmware -i /var/tmp/tffs.tmp -1 /var/tmp/tffs_lower.tmp -s 0x10000 -2 /var/tmp/old_tffs.image -S 0xE000"
/var/split_firmware -i /var/tmp/tffs.tmp -1 /var/tmp/tffs_lower.tmp -s 0x10000 -2 /var/tmp/old_tffs.image -S 0xE000 || exit $INSTALL_OTHER_ERROR
rm /var/tmp/tffs.tmp

# filesystem image in zwei Stuecke unterteilen
# 1. 2B*64KByte = mtd0 (filesystem)
# 2.  5*64KByte
echo "/var/split_firmware -i /var/tmp/filesystem.image -1 /var/tmp/filesystem_lower.tmp -s 0x2B0000 -2 /var/tmp/filesystem_upper.tmp -S 0x50000"
/var/split_firmware -i /var/tmp/filesystem.image -1 /var/tmp/filesystem_lower.tmp -s 0x2B0000 -2 /var/tmp/filesystem_upper.tmp -S 0x50000 || exit $INSTALL_OTHER_ERROR
rm /var/tmp/filesystem.image
mv /var/tmp/filesystem_lower.tmp /var/tmp/filesystem.new.image || exit $INSTALL_OTHER_ERROR

# jffs image file aus folgenden stcke kreieren
# 1.  5*64 KByte (reset des neuen Filesystems)
# 2.  2*64 KByte (tffs.image)
# 3   1*64 KByte (erste Hlfte des tffs images)
echo "setzte jffs2 image zusammen"
mv /var/tmp/filesystem_upper.tmp /var/tmp/jffs2.image || exit $INSTALL_OTHER_ERROR
cat /var/tmp/tffs.image >>/var/tmp/jffs2.image || exit $INSTALL_OTHER_ERROR
rm /var/tmp/tffs.image
cat /var/tmp/tffs_lower.tmp >>/var/tmp/jffs2.image || exit $INSTALL_OTHER_ERROR
rm /var/tmp/tffs_lower.tmp 


################################################################################
rm -f /var/post_install_urlader

echo "install: /var/tmp/urlader.${PRODUKT}.${URLADER_VERSION}.image to mtd2"
echo "/var/copy_firmware -u -c -f 0x10000 -i /var/tmp/urlader.${PRODUKT}.${URLADER_VERSION}.image  -o /dev/mtdblock/2" >/var/post_install_urlader

echo "install: /var/tmp/jffs.image to mtd3"
echo "/var/copy_firmware -u -c -f 0x80000 -i /var/tmp/jffs2.image  -o /dev/mtdblock/3" >>/var/post_install_urlader

echo "install: /var/tmp/reserved.image to mtd4"
echo "/var/copy_firmware -u -c -f 0x2000 -i /var/tmp/reserved.image  -o /dev/mtdblock/4" >>/var/post_install_urlader

echo "install: /var/tmp/old_tffs.image to mtd5"
echo "/var/copy_firmware -u -c -f 0xE000 -i /var/tmp/old_tffs.image  -o /dev/mtdblock/5" >>/var/post_install_urlader

echo "install: /var/tmp/filesystem.new.image to mtd0"
echo "/var/copy_firmware -u -c -f 0x2B0000 -i /var/tmp/filesystem.new.image  -o /dev/mtdblock/0" >>/var/post_install_urlader

################################################################################
exit 0
################################################################################
