#!/bin/bash

vmname="windows7vm"

# Cette fonction sert à définir le module vfio-pci, le module utilisé pour la virualisation pci, comme driver de la CG
vfiobind()
{
  dev="$1"
  vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  device=$(cat /sys/bus/pci/devices/$dev/device)
  if [ -e /sys/bus/pci/devices/$dev/driver ]
  then
    echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  fi
  echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
}

# On charge le module et on l'attribue à la carte graphique et à la carte son HDMI associée
modprobe vfio-pci
vfiobind 0000:01:00.0
vfiobind 0000:01:00.1

# Juste pour être sûr…
if ps -A | grep -q $vmname; then
  echo "$vmname is already running." &
  exit 1
fi

# Les options de sorties, on garde un -vga std, histoire de passer facilement les contrôles à la VM
# Cependant, cette carte doit être désactivée dans le gestionnaire de périphériques de Windows
OPT_OUTPUT="-vga std -device vfio-pci,host=01:00.0,multifunction=on -device vfio-pci,host=01:00.1"

# Copie des variables de l'UEFI
cp /usr/share/OVMF/OVMF_VARS.fd /tmp/my_vars.fd

# Utilisation de alsa ou de pulseaudio, suivant config de l'ordi…
#export QEMU_AUDIO_DRV=alsa QEMU_AUDIO_TIMER_PERIOD=0
export QEMU_AUDIO_DRV=pa QEMU_PA_SAMPLES=4096 QEMU_PA_SERVER=127.0.0.1

qemu-system-x86_64 \
  -name $vmname,process=$vmname \
  -machine type=q35,accel=kvm \
  -cpu host,kvm=off \
  -smp 3,sockets=1,cores=3,threads=1 \
  -enable-kvm \
  -m 8G \
  -mem-path /dev/hugepages/kvm \
  -mem-prealloc \
  -balloon none \
  -rtc clock=host,base=localtime \
  -serial none \
  -parallel none \
  $OPT_OUTPUT \
  -drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
  -drive if=pflash,format=raw,file=/tmp/my_vars.fd \
  -device virtio-scsi-pci,id=scsi \
  -drive id=disk0,if=virtio,cache=none,format=qcow2,file=/srv/vms/win7-systeme.img \
  -drive id=disk1,if=virtio,cache=none,format=qcow2,file=/srv/vms/win7-jeux.img \
  -netdev type=tap,id=net0,ifname=tap0,vhost=on \
  -device virtio-net-pci,netdev=net0,mac=00:16:3e:00:01:01 \
  -drive file=/srv/data/images_cd/virtio-win.iso,id=virtiocd,format=raw,if=none \
  -device ide-cd,bus=ide.1,drive=virtiocd \
  -soundhw ac97

exit 0