1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2020 Intel Corporation 4# All rights reserved. 5# 6 7testdir=$(readlink -f "$(dirname "$0")") 8rootdir=$(readlink -f "$testdir/../../") 9source "$testdir/common.sh" 10 11dep() { modprobe --show-depends "$1"; } 12mod() { [[ $(dep "$1") == *".ko"* ]]; } 13bui() { [[ $(dep "$1") == "builtin $1" ]]; } 14is_driver() { mod "$1" || bui "$1"; } 15 16uio() { 17 is_driver uio_pci_generic 18} 19 20vfio() { 21 local iommu_grups 22 local unsafe_vfio 23 24 [[ -e /sys/module/vfio/parameters/enable_unsafe_noiommu_mode ]] \ 25 && unsafe_vfio=$(< /sys/module/vfio/parameters/enable_unsafe_noiommu_mode) 26 27 iommu_groups=(/sys/kernel/iommu_groups/*) 28 29 if ((${#iommu_groups[@]} > 0)) || [[ $unsafe_vfio == Y ]]; then 30 is_driver vfio_pci && return 0 31 fi 32 return 1 33} 34 35pick_driver() { 36 if vfio; then 37 echo "vfio-pci" 38 elif uio; then 39 echo "uio_pci_generic" 40 else 41 echo "No valid driver found" 42 fi 43} 44 45guess_driver() { 46 local driver setup_driver marker 47 local fail=0 48 49 driver=$(pick_driver) 50 51 if [[ $driver == "No valid driver found" ]]; then 52 [[ $(setup output config) == "$driver"* ]] 53 return 0 54 fi 55 56 echo "Looking for driver=$driver" 57 while read -r _ _ _ _ marker setup_driver; do 58 [[ $marker == "->" ]] || continue 59 # Allow for more open matching 60 # shellcheck disable=SC2053 61 [[ $setup_driver == $driver ]] || fail=1 62 done < <(setup output config) 63 64 ((fail == 0)) 65 setup reset 66} 67 68setup reset 69run_test "guess_driver" "guess_driver" 70