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