1*fa246a1dSDavid Matlack# SPDX-License-Identifier: GPL-2.0-or-later 2*fa246a1dSDavid Matlackset -e 3*fa246a1dSDavid Matlack 4*fa246a1dSDavid Matlacksource $(dirname -- "${BASH_SOURCE[0]}")/lib.sh 5*fa246a1dSDavid Matlack 6*fa246a1dSDavid Matlackfunction main() { 7*fa246a1dSDavid Matlack local device_bdf 8*fa246a1dSDavid Matlack local device_dir 9*fa246a1dSDavid Matlack local numvfs 10*fa246a1dSDavid Matlack local driver 11*fa246a1dSDavid Matlack 12*fa246a1dSDavid Matlack if [ $# = 0 ]; then 13*fa246a1dSDavid Matlack echo "usage: $0 segment:bus:device.function ..." >&2 14*fa246a1dSDavid Matlack exit 1 15*fa246a1dSDavid Matlack fi 16*fa246a1dSDavid Matlack 17*fa246a1dSDavid Matlack for device_bdf in "$@"; do 18*fa246a1dSDavid Matlack test -d /sys/bus/pci/devices/${device_bdf} 19*fa246a1dSDavid Matlack 20*fa246a1dSDavid Matlack device_dir=${DEVICES_DIR}/${device_bdf} 21*fa246a1dSDavid Matlack if [ -d "${device_dir}" ]; then 22*fa246a1dSDavid Matlack echo "${device_bdf} has already been set up, exiting." 23*fa246a1dSDavid Matlack exit 0 24*fa246a1dSDavid Matlack fi 25*fa246a1dSDavid Matlack 26*fa246a1dSDavid Matlack mkdir -p ${device_dir} 27*fa246a1dSDavid Matlack 28*fa246a1dSDavid Matlack numvfs=$(get_sriov_numvfs ${device_bdf}) 29*fa246a1dSDavid Matlack if [ "${numvfs}" ]; then 30*fa246a1dSDavid Matlack set_sriov_numvfs ${device_bdf} 0 31*fa246a1dSDavid Matlack echo ${numvfs} > ${device_dir}/sriov_numvfs 32*fa246a1dSDavid Matlack fi 33*fa246a1dSDavid Matlack 34*fa246a1dSDavid Matlack driver=$(get_driver ${device_bdf}) 35*fa246a1dSDavid Matlack if [ "${driver}" ]; then 36*fa246a1dSDavid Matlack unbind ${device_bdf} ${driver} 37*fa246a1dSDavid Matlack echo ${driver} > ${device_dir}/driver 38*fa246a1dSDavid Matlack fi 39*fa246a1dSDavid Matlack 40*fa246a1dSDavid Matlack set_driver_override ${device_bdf} vfio-pci 41*fa246a1dSDavid Matlack touch ${device_dir}/driver_override 42*fa246a1dSDavid Matlack 43*fa246a1dSDavid Matlack bind ${device_bdf} vfio-pci 44*fa246a1dSDavid Matlack touch ${device_dir}/vfio-pci 45*fa246a1dSDavid Matlack done 46*fa246a1dSDavid Matlack} 47*fa246a1dSDavid Matlack 48*fa246a1dSDavid Matlackmain "$@" 49