#!/bin/sh
set -e

source ./vmconfig.sh

echo "Starting ${VMNAME} on ${VMNUMBER}"

if [ ! -d ${VMPASSTHRU} ] ; then
echo "Cannot find passthrough directory" >&2
exit 1
fi

if [ ! -f "${VMIMAGENAME}" ] ; then
echo "Cannot find base image, create like this:" >&2
echo "qemu-img create -f ${VMIMAGEFORMAT} ${VMIMAGENAME} 128G"
exit 1
fi

if [ ! -f OVMF_VARS.fd ] ; then
echo "Cannot find OVMF_VARS.fd (probably located /usr/share/OVMF/OVMF_VARS.fd)" >&2
exit 1
fi

exec qemu-system-x86_64 -name ${VMNAME} \
	-accel kvm \
	-machine q35 \
	-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time \
	-smp 2 \
	-m ${VMRAMMB} \
	-nodefaults \
	-rtc base=localtime \
	-nographic \
	-vga none \
	-usb \
	-device usb-host,vendorid=0x0461,productid=0x4e87,id=mouse \
	-device usb-host,vendorid=0x413c,productid=0x2110,id=keyboard \
	-monitor tcp:127.0.0.1:$((${VMNUMBER}+6000)),server,nowait \
	-device pcie-root-port,id=pcie.1,bus=pcie.0,addr=1c.0,slot=1,chassis=1,multifunction=on \
	-device vfio-pci,host=05:00.0,bus=pcie.1,addr=00.0,multifunction=on \
	-device vfio-pci,host=05:00.1,bus=pcie.1,addr=00.1 \
	-drive if=pflash,format=raw,unit=0,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \
	-drive if=pflash,format=raw,unit=1,file=OVMF_VARS.fd \
	-drive file=${VMIMAGENAME},format=${VMIMAGEFORMAT},discard=on,if=virtio \
	-drive file=alpine-standard-3.19.0-x86_64.iso,index=0,media=cdrom \
	-fsdev local,id=exp1,path=${VMPASSTHRU},security_model=passthrough \
	-device virtio-9p-pci,fsdev=exp1,mount_tag=host${VMNAME} \
	-device virtio-net-pci,netdev=nwif0,mac=${VMMACADDR0} \
	-netdev tap,id=nwif0,ifname=${VMTAPDEV0},script=no

