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 21fe1efa50SAndrew Jones: "${EFI_SRC:=$TEST_DIR}" 22e920f9aeSAndrew Jones: "${EFI_UEFI:=$DEFAULT_UEFI}" 232607d2d6SNikos Nikoleris: "${EFI_TEST:=efi-tests}" 242607d2d6SNikos Nikoleris: "${EFI_CASE:=$(basename $1 .efi)}" 25bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$TESTNAME}" 26bf91e964SShaoqin Huang: "${EFI_TESTNAME:=$EFI_CASE}" 27ce9f1091SAndrew Jones: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" 282e080dafSNikos Nikoleris: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" 292e080dafSNikos Nikoleris 302607d2d6SNikos Nikolerisif [ ! -f "$EFI_UEFI" ]; then 31e920f9aeSAndrew Jones echo "UEFI firmware not found." 32e920f9aeSAndrew Jones echo "Please specify the path with the env variable EFI_UEFI" 332607d2d6SNikos Nikoleris exit 2 342607d2d6SNikos Nikolerisfi 352607d2d6SNikos Nikoleris 362607d2d6SNikos Nikoleris# Remove the TEST_CASE from $@ 372607d2d6SNikos Nikolerisshift 1 382607d2d6SNikos Nikoleris 392607d2d6SNikos Nikoleris# Fish out the arguments for the test, they should be the next string 402607d2d6SNikos Nikoleris# after the "-append" option 412607d2d6SNikos Nikolerisqemu_args=() 422607d2d6SNikos Nikoleriscmd_args=() 432607d2d6SNikos Nikoleriswhile (( "$#" )); do 442607d2d6SNikos Nikoleris if [ "$1" = "-append" ]; then 452607d2d6SNikos Nikoleris cmd_args=$2 462607d2d6SNikos Nikoleris shift 2 472607d2d6SNikos Nikoleris else 482607d2d6SNikos Nikoleris qemu_args+=("$1") 492607d2d6SNikos Nikoleris shift 1 502607d2d6SNikos Nikoleris fi 512607d2d6SNikos Nikolerisdone 522607d2d6SNikos Nikoleris 532607d2d6SNikos Nikolerisif [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then 5443e12000SAndrew Jones EFI_CASE_DIR="$EFI_TEST/dummy" 5543e12000SAndrew Jones mkdir -p "$EFI_CASE_DIR" 5643e12000SAndrew Jones $TEST_DIR/run \ 5743e12000SAndrew Jones $EFI_CASE \ 5843e12000SAndrew Jones -bios "$EFI_UEFI" \ 5943e12000SAndrew Jones -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 6043e12000SAndrew Jones "${qemu_args[@]}" 6143e12000SAndrew Jones exit 622607d2d6SNikos Nikolerisfi 632607d2d6SNikos Nikoleris 6463c60156SAndrew Jonesuefi_shell_run() 6563c60156SAndrew Jones{ 662607d2d6SNikos Nikoleris mkdir -p "$EFI_CASE_DIR" 67bf91e964SShaoqin Huang cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" 68bf91e964SShaoqin Huang echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" 69*8f775854SAndrew Jones if [ "$EFI_USE_ACPI" != "y" ]; then 702e080dafSNikos Nikoleris qemu_args+=(-machine acpi=off) 712e080dafSNikos Nikoleris FDT_BASENAME="dtb" 7263c60156SAndrew Jones UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" 73bf91e964SShaoqin Huang echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" 742e080dafSNikos Nikoleris fi 75bf91e964SShaoqin Huang echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" 762607d2d6SNikos Nikoleris 7763c60156SAndrew Jones UEFI_SHELL_RUN=y $TEST_DIR/run \ 782607d2d6SNikos Nikoleris -bios "$EFI_UEFI" \ 79bf91e964SShaoqin Huang -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 802607d2d6SNikos Nikoleris "${qemu_args[@]}" 8163c60156SAndrew Jones} 8263c60156SAndrew Jones 8363c60156SAndrew Jonesuefi_shell_run 84