diff --git a/usr.sbin/fwget/fwget.sh b/usr.sbin/fwget/fwget.sh index 5e50569c3991..89177d936107 100644 --- a/usr.sbin/fwget/fwget.sh +++ b/usr.sbin/fwget/fwget.sh @@ -1,132 +1,125 @@ #!/bin/sh #- # SPDX-License-Identifier: BSD-2-Clause # # Copyright 2023 Beckhoff Automation GmbH & Co. KG # Copyright 2023 Bjoern A. Zeeb # # Redistribution and use in source and binary forms, with or without # modification, are permitted providing that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. : ${LIBEXEC_PATH:="/usr/libexec/fwget"} usage() { cat <&1 4>&2 -} - log() { - echo $@ 1>&3 + echo $@ } log_verbose() { if [ "${VERBOSE}" = "n" ]; then return fi - echo $@ 1>&3 + echo $@ } addpkg() { local _p _p=$1 case "${packages}" in "") packages="${_p}" ;; *) # Avoid duplicates. case " ${packages} " in *\ ${_p}\ *) ;; # duplicate *) packages="${packages} ${_p}" ;; esac esac } DRY_RUN=n VERBOSE=n -log_start - while [ $# -gt 0 ]; do case $1 in -n) DRY_RUN=y ;; -v) VERBOSE=y ;; *) subsystems="${subsystems} $1" ;; esac shift done # Default searching PCI subsystem if [ -z "${subsystems}" ]; then subsystems="pci" fi # Fail early on unsupported subsystem for subsystem in ${subsystems}; do if [ ! -f ${LIBEXEC_PATH}/${subsystem} ]; then usage fi . ${LIBEXEC_PATH}/${subsystem} done packages="" for subsystem in ${subsystems}; do ${subsystem}_search_packages done case "${packages}" in ""|^[[:space:]]*$) echo "No firmware packages to install." exit 0 ;; esac echo "Needed firmware packages: '${packages}'" if [ "${DRY_RUN}" = "y" ]; then exit 0 fi pkg install -q ${packages} diff --git a/usr.sbin/fwget/pci/pci b/usr.sbin/fwget/pci/pci index b3514c3ab43d..6a66049842e2 100644 --- a/usr.sbin/fwget/pci/pci +++ b/usr.sbin/fwget/pci/pci @@ -1,113 +1,113 @@ #- # SPDX-License-Identifier: BSD-2-Clause # # Copyright 2023 Beckhoff Automation GmbH & Co. KG # Copyright 2023 Bjoern A. Zeeb # # Redistribution and use in source and binary forms, with or without # modification, are permitted providing that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. pci_get_class() { local hexclass=$(echo $1 | sed 's/.*class=\(0x[0-9a-z]\{2\}\).*/\1/') case "${hexclass}" in 0x00) echo "old" ;; # built before class codes were finalized 0x02) echo "network" ;; 0x03) echo "video" ;; 0xff) echo "misc" ;; # does not fit in other defined classes esac } pci_get_vendor() { local hexvendor=$(echo $1 | sed 's/.*\ vendor=\(0x[0-9a-z]*\).*/\1/') case "${hexvendor}" in 0x1002) echo "amd" ;; 0x10ec) echo "realtek" ;; 0x14c3) echo "mediatek" ;; 0x168c) echo "qca" ;; # Qualcomm Atheros 0x17cb) echo "qca" ;; # Qualcomm Technologies 0x8086) echo "intel" ;; esac } pci_get_device() { local hexdevice=$(echo $1 | sed 's/.*\ device=\(0x[0-9a-z]*\).*/\1/') echo ${hexdevice} } pci_fixup_class() { local _c _v _c=$1 _v=$2 case ${_c} in "old") case ${_v} in "mediatek") echo "network" ;; esac ;; "misc") case ${_v} in "qca") echo "network" ;; esac ;; esac } pci_search_packages() { local IFS oldifs=$IFS IFS=$'\n' for fulldevice in $(pciconf -l); do class=$(pci_get_class "${fulldevice}") if [ -z "${class}" ]; then continue fi vendor=$(pci_get_vendor "${fulldevice}") if [ -z "${vendor}" ]; then continue fi device=$(pci_get_device "${fulldevice}") - log_verbose "Trying to match device ${device} in class ${class} and vendor ${vendor} with pci_${class}_${vendor}" 1>&3 + log_verbose "Trying to match device ${device} in class ${class} and vendor ${vendor} with pci_${class}_${vendor}" if [ ! -f ${LIBEXEC_PATH}/pci_${class}_${vendor} ]; then class=$(pci_fixup_class ${class} ${vendor}) if [ -z "${class}" ]; then continue fi - log_verbose "Trying to match device ${device} in fixed up class ${class} and vendor ${vendor} with pci_${class}_${vendor}" 1>&3 + log_verbose "Trying to match device ${device} in fixed up class ${class} and vendor ${vendor} with pci_${class}_${vendor}" if [ ! -f ${LIBEXEC_PATH}/pci_${class}_${vendor} ]; then continue fi fi . ${LIBEXEC_PATH}/pci_${class}_${vendor} pci_${class}_${vendor} ${device} done IFS=${oldifs} }