@@ -114,9 +114,23 @@ prepare_testsuite()
114114 esac
115115}
116116
117+ get_ovmf_file ()
118+ {
119+ local ret=" $1 " ; shift
120+ while [ " $# " -gt 0 ]; do
121+ if [ -e " $1 " ]; then
122+ eval " $ret =\"\$ 1\" "
123+ return
124+ fi
125+ shift
126+ done
127+ fatal " $ret not found"
128+ }
129+
117130qemu_setup_cpu ()
118131{
119132 :> " $workdir /qemu-cpu"
133+ :> " $workdir /qemu-efi"
120134
121135 if [ ! -c /dev/kvm ]; then
122136 local ncpu
@@ -131,23 +145,31 @@ qemu_setup_cpu()
131145 >> " $workdir /qemu-cpu"
132146 fi
133147
148+ local ovmf_vars=" " ovmf_code=" " machine=" pc"
149+
134150 case " ${BOOT_BIOS:- pc} " in
135151 efi)
136- [ -f " $top_workdir " /efivars.bin ] ||
137- cp -vTLf /usr/share/OVMF/OVMF_VARS_4M.fd " $top_workdir " /efivars.bin
152+ get_ovmf_file ovmf_vars \
153+ /usr/share/OVMF/OVMF_VARS_4M.fd \
154+ /usr/share/OVMF/OVMF_VARS.fd
155+
156+ get_ovmf_file ovmf_code \
157+ /usr/share/OVMF/OVMF_CODE_4M.fd \
158+ /usr/share/OVMF/OVMF_CODE.fd
159+
160+ cp -vTLf -- " $ovmf_vars " " $top_workdir " /efivars.bin
138161
139162 qemu_args \
140- -machine q35 \
141- -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \
163+ -drive if=pflash,format=raw,readonly=on,file=" $ovmf_code " \
142164 -drive if=pflash,format=raw,file=" $top_workdir /efivars.bin" \
143- >> " $workdir /qemu-cpu"
144- ;;
145- pc)
146- qemu_args \
147- -machine pc \
148- >> " $workdir /qemu-cpu"
165+ >> " $workdir /qemu-efi"
166+
167+ machine=q35
149168 ;;
150169 esac
170+
171+ qemu_args -machine " $machine " \
172+ >> " $workdir /qemu-cpu"
151173}
152174
153175create_qemu_wrapper ()
@@ -169,6 +191,7 @@ create_qemu_wrapper()
169191 qemu_args+=( -mon chardev=stdio,mode=readline )
170192 qemu_args+=( -pidfile "$top_workdir /qemu.pid" )
171193 . "$top_workdir /qemu-cpu"
194+ . "$top_workdir /qemu-efi"
172195 . "$top_workdir /qemu-disks"
173196 set -x
174197 exec qemu-system-$ARCH "\$ {qemu_args[@]}"
0 commit comments