#!/bin/bash

set -euo pipefail

BASE_PATH=/sys/bus/pci/

# sanitize variables
if [[ "${BASE_PATH: -1}" = '/' ]]; then
    BASE_PATH="${BASE_PATH::${#BASE_PATH}-1}"
fi

_="${SUDO:=sudo}"

vfio_override_device() {
    local pci_id
    pci_id="$1"
    if [[ -e "$BASE_PATH/devices/$pci_id" ]]; then
            echo "vfio-pci" | $SUDO tee \
                "$BASE_PATH/devices/$pci_id/driver_override" > /dev/null
    fi
}
vfio_rebind_device() {
    local pci_id
    pci_id="$1"
    if [[ -e "$BASE_PATH/devices/$pci_id" ]]; then
        [[ -e "$BASE_PATH/devices/$pci_id/driver/unbind" ]] \
            && echo "$pci_id" | $SUDO tee \
                "$BASE_PATH/devices/$pci_id/driver/unbind" >/dev/null
        echo "$pci_id" | $SUDO tee \
            "$BASE_PATH/drivers/vfio-pci/bind" > /dev/null
    fi
}

"$@"