xref: /kvm-unit-tests/arm/efi/run (revision 2e080dafec2a4724f92f6973609680ab4f5ecbb8)
12607d2d6SNikos Nikoleris#!/bin/bash
22607d2d6SNikos Nikoleris
32607d2d6SNikos Nikolerisset -e
42607d2d6SNikos Nikoleris
52607d2d6SNikos Nikolerisif [ $# -eq 0 ]; then
62607d2d6SNikos Nikoleris	echo "Usage $0 TEST_CASE [QEMU_ARGS]"
72607d2d6SNikos Nikoleris	exit 2
82607d2d6SNikos Nikolerisfi
92607d2d6SNikos Nikoleris
102607d2d6SNikos Nikolerisif [ ! -f config.mak ]; then
112607d2d6SNikos Nikoleris	echo "run './configure --enable-efi && make' first. See ./configure -h"
122607d2d6SNikos Nikoleris	exit 2
132607d2d6SNikos Nikolerisfi
142607d2d6SNikos Nikolerissource config.mak
152607d2d6SNikos Nikolerissource scripts/arch-run.bash
162607d2d6SNikos Nikolerissource scripts/common.bash
172607d2d6SNikos Nikoleris
182607d2d6SNikos Nikoleris: "${EFI_SRC:=$(realpath "$(dirname "$0")/../")}"
192607d2d6SNikos Nikoleris: "${EFI_UEFI:=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd}"
202607d2d6SNikos Nikoleris: "${EFI_TEST:=efi-tests}"
212607d2d6SNikos Nikoleris: "${EFI_CASE:=$(basename $1 .efi)}"
22*2e080dafSNikos Nikoleris: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
23*2e080dafSNikos Nikoleris
24*2e080dafSNikos Nikoleris[ "$EFI_USE_ACPI" = "y" ] || EFI_USE_DTB=y
252607d2d6SNikos Nikoleris
262607d2d6SNikos Nikolerisif [ ! -f "$EFI_UEFI" ]; then
272607d2d6SNikos Nikoleris	echo "UEFI firmware not found: $EFI_UEFI"
282607d2d6SNikos Nikoleris	echo "Please install the UEFI firmware to this path"
292607d2d6SNikos Nikoleris	echo "Or specify the correct path with the env variable EFI_UEFI"
302607d2d6SNikos Nikoleris	exit 2
312607d2d6SNikos Nikolerisfi
322607d2d6SNikos Nikoleris
332607d2d6SNikos Nikoleris# Remove the TEST_CASE from $@
342607d2d6SNikos Nikolerisshift 1
352607d2d6SNikos Nikoleris
362607d2d6SNikos Nikoleris# Fish out the arguments for the test, they should be the next string
372607d2d6SNikos Nikoleris# after the "-append" option
382607d2d6SNikos Nikolerisqemu_args=()
392607d2d6SNikos Nikoleriscmd_args=()
402607d2d6SNikos Nikoleriswhile (( "$#" )); do
412607d2d6SNikos Nikoleris	if [ "$1" = "-append" ]; then
422607d2d6SNikos Nikoleris		cmd_args=$2
432607d2d6SNikos Nikoleris		shift 2
442607d2d6SNikos Nikoleris	else
452607d2d6SNikos Nikoleris		qemu_args+=("$1")
462607d2d6SNikos Nikoleris		shift 1
472607d2d6SNikos Nikoleris	fi
482607d2d6SNikos Nikolerisdone
492607d2d6SNikos Nikoleris
502607d2d6SNikos Nikolerisif [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
512607d2d6SNikos Nikoleris	EFI_CASE=dummy
522607d2d6SNikos Nikolerisfi
532607d2d6SNikos Nikoleris
542607d2d6SNikos Nikoleris: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_CASE"}"
552607d2d6SNikos Nikolerismkdir -p "$EFI_CASE_DIR"
562607d2d6SNikos Nikoleris
572607d2d6SNikos Nikoleriscp "$EFI_SRC/$EFI_CASE.efi" "$EFI_TEST/$EFI_CASE/"
582607d2d6SNikos Nikolerisecho "@echo -off" > "$EFI_TEST/$EFI_CASE/startup.nsh"
59*2e080dafSNikos Nikolerisif [ "$EFI_USE_DTB" = "y" ]; then
60*2e080dafSNikos Nikoleris	qemu_args+=(-machine acpi=off)
61*2e080dafSNikos Nikoleris	FDT_BASENAME="dtb"
62*2e080dafSNikos Nikoleris	$(EFI_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_TEST/$EFI_CASE/$FDT_BASENAME" "${qemu_args[@]}")
63*2e080dafSNikos Nikoleris	echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_TEST/$EFI_CASE/startup.nsh"
64*2e080dafSNikos Nikolerisfi
652607d2d6SNikos Nikolerisecho "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_TEST/$EFI_CASE/startup.nsh"
662607d2d6SNikos Nikoleris
672607d2d6SNikos NikolerisEFI_RUN=y $TEST_DIR/run \
682607d2d6SNikos Nikoleris       -bios "$EFI_UEFI" \
692607d2d6SNikos Nikoleris       -drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
702607d2d6SNikos Nikoleris       "${qemu_args[@]}"
71