xref: /kvm-unit-tests/arm/efi/run (revision 8f7758542a8eb0b8fa7261ad92f14492fe6c457c)
12607d2d6SNikos Nikoleris#!/bin/bash
22607d2d6SNikos Nikoleris
32607d2d6SNikos Nikolerisif [ $# -eq 0 ]; then
42607d2d6SNikos Nikoleris	echo "Usage $0 TEST_CASE [QEMU_ARGS]"
52607d2d6SNikos Nikoleris	exit 2
62607d2d6SNikos Nikolerisfi
72607d2d6SNikos Nikoleris
82607d2d6SNikos Nikolerisif [ ! -f config.mak ]; then
92607d2d6SNikos Nikoleris	echo "run './configure --enable-efi && make' first. See ./configure -h"
102607d2d6SNikos Nikoleris	exit 2
112607d2d6SNikos Nikolerisfi
122607d2d6SNikos Nikolerissource config.mak
132607d2d6SNikos Nikolerissource scripts/arch-run.bash
142607d2d6SNikos Nikoleris
15e920f9aeSAndrew Jonesif [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then
16e920f9aeSAndrew Jones	DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
17e920f9aeSAndrew Joneselif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
18e920f9aeSAndrew Jones	DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
19e920f9aeSAndrew Jonesfi
20e920f9aeSAndrew Jones
21fe1efa50SAndrew Jones: "${EFI_SRC:=$TEST_DIR}"
22e920f9aeSAndrew Jones: "${EFI_UEFI:=$DEFAULT_UEFI}"
232607d2d6SNikos Nikoleris: "${EFI_TEST:=efi-tests}"
242607d2d6SNikos Nikoleris: "${EFI_CASE:=$(basename $1 .efi)}"
25bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$TESTNAME}"
26bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$EFI_CASE}"
27ce9f1091SAndrew Jones: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
282e080dafSNikos Nikoleris: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
292e080dafSNikos Nikoleris
302607d2d6SNikos Nikolerisif [ ! -f "$EFI_UEFI" ]; then
31e920f9aeSAndrew Jones	echo "UEFI firmware not found."
32e920f9aeSAndrew Jones	echo "Please specify the path with the env variable EFI_UEFI"
332607d2d6SNikos Nikoleris	exit 2
342607d2d6SNikos Nikolerisfi
352607d2d6SNikos Nikoleris
362607d2d6SNikos Nikoleris# Remove the TEST_CASE from $@
372607d2d6SNikos Nikolerisshift 1
382607d2d6SNikos Nikoleris
392607d2d6SNikos Nikoleris# Fish out the arguments for the test, they should be the next string
402607d2d6SNikos Nikoleris# after the "-append" option
412607d2d6SNikos Nikolerisqemu_args=()
422607d2d6SNikos Nikoleriscmd_args=()
432607d2d6SNikos Nikoleriswhile (( "$#" )); do
442607d2d6SNikos Nikoleris	if [ "$1" = "-append" ]; then
452607d2d6SNikos Nikoleris		cmd_args=$2
462607d2d6SNikos Nikoleris		shift 2
472607d2d6SNikos Nikoleris	else
482607d2d6SNikos Nikoleris		qemu_args+=("$1")
492607d2d6SNikos Nikoleris		shift 1
502607d2d6SNikos Nikoleris	fi
512607d2d6SNikos Nikolerisdone
522607d2d6SNikos Nikoleris
532607d2d6SNikos Nikolerisif [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
5443e12000SAndrew Jones	EFI_CASE_DIR="$EFI_TEST/dummy"
5543e12000SAndrew Jones	mkdir -p "$EFI_CASE_DIR"
5643e12000SAndrew Jones	$TEST_DIR/run \
5743e12000SAndrew Jones		$EFI_CASE \
5843e12000SAndrew Jones		-bios "$EFI_UEFI" \
5943e12000SAndrew Jones		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
6043e12000SAndrew Jones		"${qemu_args[@]}"
6143e12000SAndrew Jones	exit
622607d2d6SNikos Nikolerisfi
632607d2d6SNikos Nikoleris
6463c60156SAndrew Jonesuefi_shell_run()
6563c60156SAndrew Jones{
662607d2d6SNikos Nikoleris	mkdir -p "$EFI_CASE_DIR"
67bf91e964SShaoqin Huang	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
68bf91e964SShaoqin Huang	echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
69*8f775854SAndrew Jones	if [ "$EFI_USE_ACPI" != "y" ]; then
702e080dafSNikos Nikoleris		qemu_args+=(-machine acpi=off)
712e080dafSNikos Nikoleris		FDT_BASENAME="dtb"
7263c60156SAndrew Jones		UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
73bf91e964SShaoqin Huang		echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_CASE_DIR/startup.nsh"
742e080dafSNikos Nikoleris	fi
75bf91e964SShaoqin Huang	echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"
762607d2d6SNikos Nikoleris
7763c60156SAndrew Jones	UEFI_SHELL_RUN=y $TEST_DIR/run \
782607d2d6SNikos Nikoleris		-bios "$EFI_UEFI" \
79bf91e964SShaoqin Huang		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
802607d2d6SNikos Nikoleris		"${qemu_args[@]}"
8163c60156SAndrew Jones}
8263c60156SAndrew Jones
8363c60156SAndrew Jonesuefi_shell_run
84