#!/bin/sh
#
# This script implements the old fip_create tool on top of
# the new fiptool.
#
# SPDX-License-Identifier: BSD-3-Clause
#

usage() {
    cat << EOF
This tool is used to create a Firmware Image Package.

Usage:
	fip_create [options] FIP_FILENAME

Options:
	-h,--help: Print this help message and exit
	-d,--dump: Print contents of FIP after update
	-u,--unpack: Unpack images from an existing FIP
	-f,--force: Overwrite existing files when unpacking images

Components that can be added/updated:
	--scp-fwu-cfg FILENAME		SCP Firmware Updater Configuration FWU SCP_BL2U
	--ap-fwu-cfg FILENAME		AP Firmware Updater Configuration BL2U
	--fwu FILENAME			Firmware Updater NS_BL2U
	--fwu-cert FILENAME		Non-Trusted Firmware Updater certificate
	--tb-fw FILENAME		Trusted Boot Firmware BL2
	--scp-fw FILENAME		SCP Firmware SCP_BL2
	--soc-fw FILENAME		EL3 Runtime Firmware BL31
	--tos-fw FILENAME		Secure Payload BL32 (Trusted OS)
	--tos-fw-extra1 FILENAME	Secure Payload BL32 Extra1 (Trusted OS Extra1)
	--tos-fw-extra2 FILENAME	Secure Payload BL32 Extra2 (Trusted OS Extra2)
	--nt-fw FILENAME		Non-Trusted Firmware BL33
	--rot-cert FILENAME		Root Of Trust key certificate
	--trusted-key-cert FILENAME	Trusted key certificate
	--scp-fw-key-cert FILENAME	SCP Firmware key certificate
	--soc-fw-key-cert FILENAME	SoC Firmware key certificate
	--tos-fw-key-cert FILENAME	Trusted OS Firmware key certificate
	--nt-fw-key-cert FILENAME	Non-Trusted Firmware key certificate
	--tb-fw-cert FILENAME		Trusted Boot Firmware BL2 certificate
	--scp-fw-cert FILENAME		SCP Firmware content certificate
	--soc-fw-cert FILENAME		SoC Firmware content certificate
	--tos-fw-cert FILENAME		Trusted OS Firmware content certificate
	--nt-fw-cert FILENAME		Non-Trusted Firmware content certificate
EOF
    exit
}

echo "!! The fip_create tool is deprecated.  Use the new fiptool. !!"
basedir="$(dirname $0)/../fiptool"
fiptool_args=
while :; do
    case "$1" in
	-h | --help )
	    usage
	    break ;;
	-d | --dump )
	    fiptool_args="info $fiptool_args"
	    shift ;;
	-u | --unpack )
	    fiptool_args="unpack $fiptool_args"
	    shift ;;
	-f | --force )
	    fiptool_args="$fiptool_args --force"
	    shift ;;
	--scp-fwu-cfg | \
	    --ap-fwu-cfg | \
	    --fwu | \
	    --fwu-cert | \
	    --tb-fw | \
	    --scp-fw | \
	    --soc-fw | \
	    --tos-fw | \
	    --tos-fw-extra1 | \
	    --tos-fw-extra2 | \
	    --nt-fw | \
	    --rot-cert | \
	    --trusted-key-cert | \
	    --scp-fw-key-cert | \
	    --soc-fw-key-cert | \
	    --tos-fw-key-cert | \
	    --nt-fw-key-cert | \
	    --tb-fw-cert | \
	    --scp-fw-cert | \
	    --soc-fw-cert | \
	    --tos-fw-cert | \
	    --nt-fw-cert )
	    fiptool_args="$fiptool_args $1"
	    shift
	    if test -z $1; then
		usage
	    fi
	    fiptool_args="$fiptool_args $1"
	    shift ;;
	* )
	    break ;;
    esac
done

# expect a FIP filename
if test -z $1; then
    usage
fi

is_pack_cmd=1
for arg in $fiptool_args; do
    case "$arg" in
	unpack )
	    is_pack_cmd=0
	    break ;;
	info )
	    is_pack_cmd=0
	    break ;;
	* )
    esac
done

# if --unpack and --dump were not specified
# the default action is to pack
if test "$is_pack_cmd" -eq 1; then
    fiptool_args="update $fiptool_args"
fi

# append FIP filename
fiptool_args="$fiptool_args $1"
echo "Invoking fiptool with args: $fiptool_args"
"$basedir/fiptool" $fiptool_args