#!/bin/bash

if [ $# -eq 0 ]; then
	echo "Usage $0 TEST_CASE [QEMU_ARGS]"
	exit 2
fi

if [ ! -f config.mak ]; then
	echo "run './configure --enable-efi && make' first. See ./configure -h"
	exit 2
fi
source config.mak
source scripts/arch-run.bash

if [ -f RISCV_VIRT_CODE.fd ]; then
	DEFAULT_UEFI=RISCV_VIRT_CODE.fd
fi

KERNEL_NAME=$1

: "${EFI_SRC:=$TEST_DIR}"
: "${EFI_UEFI:=$DEFAULT_UEFI}"
: "${EFI_TEST:=efi-tests}"
: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
: "${EFI_TESTNAME:=$TESTNAME}"
: "${EFI_TESTNAME:=$EFI_CASE}"
: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"

if [ ! -f "$EFI_UEFI" ]; then
	echo "UEFI firmware not found."
	echo "Please specify the path with the env variable EFI_UEFI"
	exit 2
fi

if [ "$EFI_USE_ACPI" = "y" ]; then
	echo "ACPI not available"
	exit 2
fi

# Remove the TEST_CASE from $@
shift 1

# Fish out the arguments for the test, they should be the next string
# after the "-append" option
qemu_args=()
cmd_args=()
while (( "$#" )); do
	if [ "$1" = "-append" ]; then
		cmd_args=("$2")
		shift 2
	else
		qemu_args+=("$1")
		shift 1
	fi
done

if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
	EFI_CASE_DIR="$EFI_TEST/dummy"
	mkdir -p "$EFI_CASE_DIR"
	$TEST_DIR/run \
		$EFI_CASE \
		-machine pflash0=pflash0 \
		-blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \
		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
		"${qemu_args[@]}"
	exit
fi

uefi_shell_run()
{
	mkdir -p "$EFI_CASE_DIR"
	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
	echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
	if [ "$EFI_USE_ACPI" != "y" ]; then
		qemu_args+=(-machine acpi=off)
		FDT_BASENAME="dtb"
		UEFI_SHELL_RUN=y $TEST_DIR/run \
			-machine pflash0=pflash0 \
			-blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \
			-machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" \
			"${qemu_args[@]}"
		echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_CASE_DIR/startup.nsh"
	fi
	echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"

	UEFI_SHELL_RUN=y $TEST_DIR/run \
		-machine pflash0=pflash0 \
		-blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \
		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
		"${qemu_args[@]}"
}

if [ "$EFI_DIRECT" = "y" ]; then
	if [ "$EFI_USE_ACPI" != "y" ]; then
		qemu_args+=(-machine acpi=off)
	fi
	$TEST_DIR/run \
		$KERNEL_NAME \
		-append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \
		-machine pflash0=pflash0 \
		-blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \
		"${qemu_args[@]}"
else
	uefi_shell_run
fi
