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