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