xref: /kvm-unit-tests/arm/efi/run (revision 61ff990187ed8d2f29b648609f1b4e5791366600)
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
149fcec1dbSAlexandru Eliseisource scripts/vmm.bash
159fcec1dbSAlexandru Elisei
169fcec1dbSAlexandru Eliseivmm_check_supported
172607d2d6SNikos Nikoleris
18*463cd0ffSAlexandru Eliseiif [[ $(vmm_get_target) == "kvmtool" ]]; then
19*463cd0ffSAlexandru Elisei	echo "kvmtool does not support EFI tests."
20*463cd0ffSAlexandru Elisei	exit 2
21*463cd0ffSAlexandru Eliseifi
22*463cd0ffSAlexandru Elisei
23e920f9aeSAndrew Jonesif [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then
24e920f9aeSAndrew Jones	DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
25e920f9aeSAndrew Joneselif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
26e920f9aeSAndrew Jones	DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
27e920f9aeSAndrew Jonesfi
28e920f9aeSAndrew Jones
295ded2989SAndrew JonesKERNEL_NAME=$1
305ded2989SAndrew Jones
31fe1efa50SAndrew Jones: "${EFI_SRC:=$TEST_DIR}"
32e920f9aeSAndrew Jones: "${EFI_UEFI:=$DEFAULT_UEFI}"
332607d2d6SNikos Nikoleris: "${EFI_TEST:=efi-tests}"
345ded2989SAndrew Jones: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
35bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$TESTNAME}"
36bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$EFI_CASE}"
37ce9f1091SAndrew Jones: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
382e080dafSNikos Nikoleris: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
392e080dafSNikos Nikoleris
402607d2d6SNikos Nikolerisif [ ! -f "$EFI_UEFI" ]; then
41e920f9aeSAndrew Jones	echo "UEFI firmware not found."
42e920f9aeSAndrew Jones	echo "Please specify the path with the env variable EFI_UEFI"
432607d2d6SNikos Nikoleris	exit 2
442607d2d6SNikos Nikolerisfi
452607d2d6SNikos Nikoleris
462607d2d6SNikos Nikoleris# Remove the TEST_CASE from $@
472607d2d6SNikos Nikolerisshift 1
482607d2d6SNikos Nikoleris
492607d2d6SNikos Nikoleris# Fish out the arguments for the test, they should be the next string
502607d2d6SNikos Nikoleris# after the "-append" option
512607d2d6SNikos Nikolerisqemu_args=()
522607d2d6SNikos Nikoleriscmd_args=()
532607d2d6SNikos Nikoleriswhile (( "$#" )); do
542607d2d6SNikos Nikoleris	if [ "$1" = "-append" ]; then
550ebc1af6SNicholas Piggin		cmd_args=("$2")
562607d2d6SNikos Nikoleris		shift 2
572607d2d6SNikos Nikoleris	else
582607d2d6SNikos Nikoleris		qemu_args+=("$1")
592607d2d6SNikos Nikoleris		shift 1
602607d2d6SNikos Nikoleris	fi
612607d2d6SNikos Nikolerisdone
625ded2989SAndrew Jonesif [ "$EFI_USE_ACPI" != "y" ]; then
635ded2989SAndrew Jones	qemu_args+=(-machine acpi=off)
645ded2989SAndrew Jonesfi
652607d2d6SNikos Nikoleris
662607d2d6SNikos Nikolerisif [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
6743e12000SAndrew Jones	EFI_CASE_DIR="$EFI_TEST/dummy"
6843e12000SAndrew Jones	mkdir -p "$EFI_CASE_DIR"
6943e12000SAndrew Jones	$TEST_DIR/run \
7043e12000SAndrew Jones		$EFI_CASE \
7143e12000SAndrew Jones		-bios "$EFI_UEFI" \
7243e12000SAndrew Jones		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
7343e12000SAndrew Jones		"${qemu_args[@]}"
7443e12000SAndrew Jones	exit
752607d2d6SNikos Nikolerisfi
762607d2d6SNikos Nikoleris
7763c60156SAndrew Jonesuefi_shell_run()
7863c60156SAndrew Jones{
792607d2d6SNikos Nikoleris	mkdir -p "$EFI_CASE_DIR"
80bf91e964SShaoqin Huang	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
81bf91e964SShaoqin Huang	echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
828f775854SAndrew Jones	if [ "$EFI_USE_ACPI" != "y" ]; then
832e080dafSNikos Nikoleris		FDT_BASENAME="dtb"
8463c60156SAndrew Jones		UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
85bf91e964SShaoqin Huang		echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_CASE_DIR/startup.nsh"
862e080dafSNikos Nikoleris	fi
87bf91e964SShaoqin Huang	echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"
882607d2d6SNikos Nikoleris
8963c60156SAndrew Jones	UEFI_SHELL_RUN=y $TEST_DIR/run \
902607d2d6SNikos Nikoleris		-bios "$EFI_UEFI" \
91bf91e964SShaoqin Huang		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
922607d2d6SNikos Nikoleris		"${qemu_args[@]}"
9363c60156SAndrew Jones}
9463c60156SAndrew Jones
955ded2989SAndrew Jonesif [ "$EFI_DIRECT" = "y" ]; then
965ded2989SAndrew Jones	$TEST_DIR/run \
975ded2989SAndrew Jones		$KERNEL_NAME \
987f01fa71SNicholas Piggin		-append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \
995ded2989SAndrew Jones		-bios "$EFI_UEFI" \
1005ded2989SAndrew Jones		"${qemu_args[@]}"
1015ded2989SAndrew Joneselse
10263c60156SAndrew Jones	uefi_shell_run
1035ded2989SAndrew Jonesfi
104