xref: /kvm-unit-tests/arm/efi/run (revision 9632ce446b8f2e8362c3877359663bb99dba70c1)
1#!/bin/bash
2
3if [ $# -eq 0 ]; then
4	echo "Usage $0 TEST_CASE [QEMU_ARGS]"
5	exit 2
6fi
7
8if [ ! -f config.mak ]; then
9	echo "run './configure --enable-efi && make' first. See ./configure -h"
10	exit 2
11fi
12source config.mak
13source scripts/arch-run.bash
14
15if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then
16	DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
17elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
18	DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
19fi
20
21: "${EFI_SRC:=$TEST_DIR}"
22: "${EFI_UEFI:=$DEFAULT_UEFI}"
23: "${EFI_TEST:=efi-tests}"
24: "${EFI_CASE:=$(basename $1 .efi)}"
25: "${EFI_TESTNAME:=$TESTNAME}"
26: "${EFI_TESTNAME:=$EFI_CASE}"
27: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
28: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
29
30if [ ! -f "$EFI_UEFI" ]; then
31	echo "UEFI firmware not found."
32	echo "Please specify the path with the env variable EFI_UEFI"
33	exit 2
34fi
35
36# Remove the TEST_CASE from $@
37shift 1
38
39# Fish out the arguments for the test, they should be the next string
40# after the "-append" option
41qemu_args=()
42cmd_args=()
43while (( "$#" )); do
44	if [ "$1" = "-append" ]; then
45		cmd_args=$2
46		shift 2
47	else
48		qemu_args+=("$1")
49		shift 1
50	fi
51done
52
53if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
54	EFI_CASE_DIR="$EFI_TEST/dummy"
55	mkdir -p "$EFI_CASE_DIR"
56	$TEST_DIR/run \
57		$EFI_CASE \
58		-bios "$EFI_UEFI" \
59		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
60		"${qemu_args[@]}"
61	exit
62fi
63
64uefi_shell_run()
65{
66	mkdir -p "$EFI_CASE_DIR"
67	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
68	echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
69	if [ "$EFI_USE_ACPI" != "y" ]; then
70		qemu_args+=(-machine acpi=off)
71		FDT_BASENAME="dtb"
72		UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
73		echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_CASE_DIR/startup.nsh"
74	fi
75	echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"
76
77	UEFI_SHELL_RUN=y $TEST_DIR/run \
78		-bios "$EFI_UEFI" \
79		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
80		"${qemu_args[@]}"
81}
82
83uefi_shell_run
84