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