| # SPDX-License-Identifier: GPL-2.0-or-later | |
| set -e | |
| source $(dirname -- "${BASH_SOURCE[0]}")/lib.sh | |
| function main() { | |
| local device_bdf | |
| local device_dir | |
| local numvfs | |
| local driver | |
| if [ $# = 0 ]; then | |
| echo "usage: $0 segment:bus:device.function ..." >&2 | |
| exit 1 | |
| fi | |
| for device_bdf in "$@"; do | |
| test -d /sys/bus/pci/devices/${device_bdf} | |
| device_dir=${DEVICES_DIR}/${device_bdf} | |
| if [ -d "${device_dir}" ]; then | |
| echo "${device_bdf} has already been set up, exiting." | |
| exit 0 | |
| fi | |
| mkdir -p ${device_dir} | |
| numvfs=$(get_sriov_numvfs ${device_bdf}) | |
| if [ "${numvfs}" ]; then | |
| set_sriov_numvfs ${device_bdf} 0 | |
| echo ${numvfs} > ${device_dir}/sriov_numvfs | |
| fi | |
| driver=$(get_driver ${device_bdf}) | |
| if [ "${driver}" ]; then | |
| unbind ${device_bdf} ${driver} | |
| echo ${driver} > ${device_dir}/driver | |
| fi | |
| set_driver_override ${device_bdf} vfio-pci | |
| touch ${device_dir}/driver_override | |
| bind ${device_bdf} vfio-pci | |
| touch ${device_dir}/vfio-pci | |
| done | |
| } | |
| main "$@" |