@@ -18,10 +18,12 @@ elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
fi
+KERNEL_NAME=$1
+
: "${EFI_SRC:=$TEST_DIR}"
: "${EFI_UEFI:=$DEFAULT_UEFI}"
: "${EFI_TEST:=efi-tests}"
-: "${EFI_CASE:=$(basename $1 .efi)}"
+: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
: "${EFI_TESTNAME:=$TESTNAME}"
: "${EFI_TESTNAME:=$EFI_CASE}"
: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
@@ -49,6 +51,9 @@ while (( "$#" )); do
shift 1
fi
done
+if [ "$EFI_USE_ACPI" != "y" ]; then
+ qemu_args+=(-machine acpi=off)
+fi
if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
EFI_CASE_DIR="$EFI_TEST/dummy"
@@ -67,7 +72,6 @@ uefi_shell_run()
cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
if [ "$EFI_USE_ACPI" != "y" ]; then
- qemu_args+=(-machine acpi=off)
FDT_BASENAME="dtb"
UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh"
@@ -80,4 +84,12 @@ uefi_shell_run()
"${qemu_args[@]}"
}
-uefi_shell_run
+if [ "$EFI_DIRECT" = "y" ]; then
+ $TEST_DIR/run \
+ $KERNEL_NAME \
+ -append "$(basename $KERNEL_NAME) ${cmd_args[@]}" \
+ -bios "$EFI_UEFI" \
+ "${qemu_args[@]}"
+else
+ uefi_shell_run
+fi
@@ -60,7 +60,7 @@ if ! $qemu $M -chardev '?' | grep -q testdev; then
exit 2
fi
-if [ "$UEFI_SHELL_RUN" != "y" ]; then
+if [ "$UEFI_SHELL_RUN" != "y" ] && [ "$EFI_USE_ACPI" != "y" ]; then
chr_testdev='-device virtio-serial-device'
chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd'
fi
@@ -77,6 +77,8 @@ command="$(migration_cmd) $(timeout_cmd) $command"
if [ "$UEFI_SHELL_RUN" = "y" ]; then
ENVIRON_DEFAULT=n run_qemu_status $command "$@"
+elif [ "$EFI_USE_ACPI" = "y" ]; then
+ run_qemu_status $command -kernel "$@"
else
run_qemu $command -kernel "$@"
fi
@@ -32,6 +32,7 @@ enable_dump=no
page_size=
earlycon=
efi=
+efi_direct=
# Enable -Werror by default for git repositories only (i.e. developer builds)
if [ -e "$srcdir"/.git ]; then
@@ -90,6 +91,11 @@ usage() {
--[enable|disable]-efi Boot and run from UEFI (disabled by default, x86_64 and arm64 only)
--[enable|disable]-werror
Select whether to compile with the -Werror compiler flag
+ --[enable|disable]-efi-direct
+ Select whether to run EFI tests directly with QEMU's -kernel
+ option. When not enabled, tests will be placed in an EFI file
+ system and run from the UEFI shell. Ignored when efi isn't enabled.
+ (arm64 only)
EOF
exit 1
}
@@ -169,6 +175,12 @@ while [[ "$1" = -* ]]; do
--disable-efi)
efi=n
;;
+ --enable-efi-direct)
+ efi_direct=y
+ ;;
+ --disable-efi-direct)
+ efi_direct=n
+ ;;
--enable-werror)
werror=-Werror
;;
@@ -186,6 +198,10 @@ while [[ "$1" = -* ]]; do
esac
done
+if [ -z "$efi" ] || [ "$efi" = "n" ]; then
+ [ "$efi_direct" = "y" ] && efi_direct=
+fi
+
if [ -n "$host_key_document" ] && [ ! -f "$host_key_document" ]; then
echo "Host key document doesn't exist at the specified location."
exit 1
@@ -428,6 +444,7 @@ GENPROTIMG=${GENPROTIMG-genprotimg}
HOST_KEY_DOCUMENT=$host_key_document
CONFIG_DUMP=$enable_dump
CONFIG_EFI=$efi
+EFI_DIRECT=$efi_direct
CONFIG_WERROR=$werror
GEN_SE_HEADER=$gen_se_header
EOF