1#!/bin/sh 2 3# Copyright (c) 2018 M. Warner Losh <imp@FreeBSD.org> 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24# SUCH DAMAGE. 25# 26# $FreeBSD$ 27# 28# PROVIDE: devmatch 29# REQUIRE: kldxref 30# KEYWORD: nojail 31 32. /etc/rc.subr 33 34name="devmatch" 35desc="Use devmatch(8) to load kernel modules" 36rcvar="${name}_enable" 37 38start_cmd="${name}_start" 39stop_cmd=':' 40one_nomatch="$2" 41 42devmatch_start() 43{ 44 local x m list 45 46 if [ -n "$one_nomatch" ]; then 47 list=$(devmatch -p "${one_nomatch}" | sort -u) 48 else 49 list=$(devmatch | sort -u) 50 fi 51 52 [ -n "$list" ] || return 53 54 # While kldload can accept multiple modules 55 # on the line at once, we loop here in case 56 # there's some weird error with one of them. 57 # We also optimize against the false positives 58 # or drivers that have symbolic links that 59 # confuse devmatch by running it -n. 60 # Finally, we filter out all items in the 61 # devmactch_blacklist. 62 devctl freeze 63 x=$(echo ${devmatch_blacklist} | tr ' ' '#') 64 for m in ${list}; do 65 case "#${x}#" in 66 *"#${m}#"*) continue ;; 67 esac 68 echo "Autoloading module: ${m}" 69 kldload -n ${m} 70 done 71 devctl thaw 72} 73 74load_rc_config $name 75run_rc_command "$1" 76