xref: /kvm-unit-tests/arm/efi/run (revision 0ebc1af663da6e7bb2c34ff8cb83f8436aaabd8c)
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
215ded2989SAndrew JonesKERNEL_NAME=$1
225ded2989SAndrew Jones
23fe1efa50SAndrew Jones: "${EFI_SRC:=$TEST_DIR}"
24e920f9aeSAndrew Jones: "${EFI_UEFI:=$DEFAULT_UEFI}"
252607d2d6SNikos Nikoleris: "${EFI_TEST:=efi-tests}"
265ded2989SAndrew Jones: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
27bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$TESTNAME}"
28bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$EFI_CASE}"
29ce9f1091SAndrew Jones: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
302e080dafSNikos Nikoleris: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
312e080dafSNikos Nikoleris
322607d2d6SNikos Nikolerisif [ ! -f "$EFI_UEFI" ]; then
33e920f9aeSAndrew Jones	echo "UEFI firmware not found."
34e920f9aeSAndrew Jones	echo "Please specify the path with the env variable EFI_UEFI"
352607d2d6SNikos Nikoleris	exit 2
362607d2d6SNikos Nikolerisfi
372607d2d6SNikos Nikoleris
382607d2d6SNikos Nikoleris# Remove the TEST_CASE from $@
392607d2d6SNikos Nikolerisshift 1
402607d2d6SNikos Nikoleris
412607d2d6SNikos Nikoleris# Fish out the arguments for the test, they should be the next string
422607d2d6SNikos Nikoleris# after the "-append" option
432607d2d6SNikos Nikolerisqemu_args=()
442607d2d6SNikos Nikoleriscmd_args=()
452607d2d6SNikos Nikoleriswhile (( "$#" )); do
462607d2d6SNikos Nikoleris	if [ "$1" = "-append" ]; then
47*0ebc1af6SNicholas Piggin		cmd_args=("$2")
482607d2d6SNikos Nikoleris		shift 2
492607d2d6SNikos Nikoleris	else
502607d2d6SNikos Nikoleris		qemu_args+=("$1")
512607d2d6SNikos Nikoleris		shift 1
522607d2d6SNikos Nikoleris	fi
532607d2d6SNikos Nikolerisdone
545ded2989SAndrew Jonesif [ "$EFI_USE_ACPI" != "y" ]; then
555ded2989SAndrew Jones	qemu_args+=(-machine acpi=off)
565ded2989SAndrew Jonesfi
572607d2d6SNikos Nikoleris
582607d2d6SNikos Nikolerisif [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
5943e12000SAndrew Jones	EFI_CASE_DIR="$EFI_TEST/dummy"
6043e12000SAndrew Jones	mkdir -p "$EFI_CASE_DIR"
6143e12000SAndrew Jones	$TEST_DIR/run \
6243e12000SAndrew Jones		$EFI_CASE \
6343e12000SAndrew Jones		-bios "$EFI_UEFI" \
6443e12000SAndrew Jones		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
6543e12000SAndrew Jones		"${qemu_args[@]}"
6643e12000SAndrew Jones	exit
672607d2d6SNikos Nikolerisfi
682607d2d6SNikos Nikoleris
6963c60156SAndrew Jonesuefi_shell_run()
7063c60156SAndrew Jones{
712607d2d6SNikos Nikoleris	mkdir -p "$EFI_CASE_DIR"
72bf91e964SShaoqin Huang	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
73bf91e964SShaoqin Huang	echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
748f775854SAndrew Jones	if [ "$EFI_USE_ACPI" != "y" ]; then
752e080dafSNikos Nikoleris		FDT_BASENAME="dtb"
7663c60156SAndrew Jones		UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
77bf91e964SShaoqin Huang		echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\""  >> "$EFI_CASE_DIR/startup.nsh"
782e080dafSNikos Nikoleris	fi
79bf91e964SShaoqin Huang	echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"
802607d2d6SNikos Nikoleris
8163c60156SAndrew Jones	UEFI_SHELL_RUN=y $TEST_DIR/run \
822607d2d6SNikos Nikoleris		-bios "$EFI_UEFI" \
83bf91e964SShaoqin Huang		-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
842607d2d6SNikos Nikoleris		"${qemu_args[@]}"
8563c60156SAndrew Jones}
8663c60156SAndrew Jones
875ded2989SAndrew Jonesif [ "$EFI_DIRECT" = "y" ]; then
885ded2989SAndrew Jones	$TEST_DIR/run \
895ded2989SAndrew Jones		$KERNEL_NAME \
907f01fa71SNicholas Piggin		-append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \
915ded2989SAndrew Jones		-bios "$EFI_UEFI" \
925ded2989SAndrew Jones		"${qemu_args[@]}"
935ded2989SAndrew Joneselse
9463c60156SAndrew Jones	uefi_shell_run
955ded2989SAndrew Jonesfi
96