xref: /kvm-unit-tests/arm/efi/run (revision 61ff990187ed8d2f29b648609f1b4e5791366600)
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
14source scripts/vmm.bash
15
16vmm_check_supported
17
18if [[ $(vmm_get_target) == "kvmtool" ]]; then
19	echo "kvmtool does not support EFI tests."
20	exit 2
21fi
22
23if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then
24	DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
25elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
26	DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
27fi
28
29KERNEL_NAME=$1
30
31: "${EFI_SRC:=$TEST_DIR}"
32: "${EFI_UEFI:=$DEFAULT_UEFI}"
33: "${EFI_TEST:=efi-tests}"
34: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
35: "${EFI_TESTNAME:=$TESTNAME}"
36: "${EFI_TESTNAME:=$EFI_CASE}"
37: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
38: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
39
40if [ ! -f "$EFI_UEFI" ]; then
41	echo "UEFI firmware not found."
42	echo "Please specify the path with the env variable EFI_UEFI"
43	exit 2
44fi
45
46# Remove the TEST_CASE from $@
47shift 1
48
49# Fish out the arguments for the test, they should be the next string
50# after the "-append" option
51qemu_args=()
52cmd_args=()
53while (( "$#" )); do
54	if [ "$1" = "-append" ]; then
55		cmd_args=("$2")
56		shift 2
57	else
58		qemu_args+=("$1")
59		shift 1
60	fi
61done
62if [ "$EFI_USE_ACPI" != "y" ]; then
63	qemu_args+=(-machine acpi=off)
64fi
65
66if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
67	EFI_CASE_DIR="$EFI_TEST/dummy"
68	mkdir -p "$EFI_CASE_DIR"
69	$TEST_DIR/run \
70		$EFI_CASE \
71		-bios "$EFI_UEFI" \
72		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
73		"${qemu_args[@]}"
74	exit
75fi
76
77uefi_shell_run()
78{
79	mkdir -p "$EFI_CASE_DIR"
80	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
81	echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
82	if [ "$EFI_USE_ACPI" != "y" ]; then
83		FDT_BASENAME="dtb"
84		UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
85		echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_CASE_DIR/startup.nsh"
86	fi
87	echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"
88
89	UEFI_SHELL_RUN=y $TEST_DIR/run \
90		-bios "$EFI_UEFI" \
91		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
92		"${qemu_args[@]}"
93}
94
95if [ "$EFI_DIRECT" = "y" ]; then
96	$TEST_DIR/run \
97		$KERNEL_NAME \
98		-append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \
99		-bios "$EFI_UEFI" \
100		"${qemu_args[@]}"
101else
102	uefi_shell_run
103fi
104