aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/fwget
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/fwget')
-rw-r--r--usr.sbin/fwget/Makefile7
-rw-r--r--usr.sbin/fwget/Makefile.depend10
-rw-r--r--usr.sbin/fwget/fwget.875
-rwxr-xr-xusr.sbin/fwget/fwget.sh141
-rw-r--r--usr.sbin/fwget/pci/Makefile15
-rw-r--r--usr.sbin/fwget/pci/Makefile.depend10
-rw-r--r--usr.sbin/fwget/pci/pci113
-rw-r--r--usr.sbin/fwget/pci/pci_network_intel468
-rw-r--r--usr.sbin/fwget/pci/pci_network_mediatek73
-rw-r--r--usr.sbin/fwget/pci/pci_network_qca101
-rw-r--r--usr.sbin/fwget/pci/pci_network_realtek87
-rw-r--r--usr.sbin/fwget/pci/pci_video_amd177
-rw-r--r--usr.sbin/fwget/pci/pci_video_intel78
-rw-r--r--usr.sbin/fwget/usb/Makefile10
-rwxr-xr-xusr.sbin/fwget/usb/usb43
-rwxr-xr-xusr.sbin/fwget/usb/usb_ralink12
16 files changed, 1420 insertions, 0 deletions
diff --git a/usr.sbin/fwget/Makefile b/usr.sbin/fwget/Makefile
new file mode 100644
index 000000000000..4c934aee3413
--- /dev/null
+++ b/usr.sbin/fwget/Makefile
@@ -0,0 +1,7 @@
+PACKAGE= fwget
+
+SCRIPTS= fwget
+MAN= fwget.8
+SUBDIR= pci usb
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/fwget/Makefile.depend b/usr.sbin/fwget/Makefile.depend
new file mode 100644
index 000000000000..11aba52f82cf
--- /dev/null
+++ b/usr.sbin/fwget/Makefile.depend
@@ -0,0 +1,10 @@
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/fwget/fwget.8 b/usr.sbin/fwget/fwget.8
new file mode 100644
index 000000000000..86e304775e2d
--- /dev/null
+++ b/usr.sbin/fwget/fwget.8
@@ -0,0 +1,75 @@
+.\"-
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2023 Beckhoff Automation GmbH & Co. KG
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided 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 DEVELOPERS ``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 DEVELOPERS 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.
+.\"
+.Dd July 7, 2025
+.Dt FWGET 8
+.Os
+.Sh NAME
+.Nm fwget
+.Nd install firmware packages for the running system
+.Sh SYNOPSIS
+.Nm
+.Op Fl n
+.Op Fl v
+.Op Ar subsystem
+.Sh DESCRIPTION
+The
+.Nm
+utility can be used to detect and install firmware packages
+for devices present on a running system.
+.Pp
+The options are as follows:
+.Bl -tag -width Fl
+.It Fl n
+Dry run, only show needed packages
+.It Fl v
+Be more verbose
+.It Ar subsystem
+Hardware subsystem(s), default is all supported subsystems.
+Space separated hardware subsystems, accepts
+.Cm pci
+and
+.Cm usb
+.El
+.Sh SEE ALSO
+.Xr firmware 9
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Fx 14.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+utility and this manual page were written by
+.An Emmanuel Vadot Aq Mt manu@FreeBSD.org
+for Beckhoff Automation GmbH & Co\. KG.
+.Sh CAVEATS
+This utility currently only supports the
+.Xr pci 4
+and
+.Xr usb 4
+subsystems.
diff --git a/usr.sbin/fwget/fwget.sh b/usr.sbin/fwget/fwget.sh
new file mode 100755
index 000000000000..de1e6fa51f0f
--- /dev/null
+++ b/usr.sbin/fwget/fwget.sh
@@ -0,0 +1,141 @@
+#!/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 <<EOF
+Usage: $(basename "$0") [options] [subsystem]
+
+Supported subsystems
+ pci, usb
+
+Options:
+ -n -- Do not install packages, only print the results
+ -q -- Quiet mode. If used with -n only prints a package a line
+ -v -- More verbose
+EOF
+ exit 1
+}
+
+log()
+{
+ if [ "${QUIET}" != "y" ]; then
+ echo "$@"
+ fi
+}
+
+log_verbose()
+{
+ if [ "${VERBOSE}" = "n" ]; then
+ return
+ fi
+
+ 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
+QUIET=n
+VERBOSE=n
+
+while getopts ":nqv" _arg; do
+ case ${_arg} in
+ n)
+ DRY_RUN=y
+ ;;
+ q)
+ QUIET=y
+ ;;
+ v)
+ VERBOSE=y
+ ;;
+ ?)
+ usage
+ ;;
+ esac
+done
+shift $(($OPTIND - 1))
+subsystems="$@"
+
+# Default searching PCI and USB subsystem
+if [ -z "${subsystems}" ]; then
+ subsystems="pci usb"
+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:]]*$)
+ log "No firmware packages to install."
+ exit 0
+ ;;
+esac
+
+log "Needed firmware packages: '${packages}'"
+if [ "${DRY_RUN}" = "y" ]; then
+ if [ "${QUIET}" = "y" ]; then
+ for pkg in ${packages}; do
+ case "${pkg}" in
+ ""|^[[:space:]]*$) continue ;;
+ esac
+ echo "${pkg}"
+ done
+ fi
+ exit 0
+fi
+
+pkg install -qy ${packages}
diff --git a/usr.sbin/fwget/pci/Makefile b/usr.sbin/fwget/pci/Makefile
new file mode 100644
index 000000000000..6c500dae6df6
--- /dev/null
+++ b/usr.sbin/fwget/pci/Makefile
@@ -0,0 +1,15 @@
+PACKAGE= fwget
+
+SCRIPTS=pci \
+ pci_network_intel \
+ pci_network_mediatek \
+ pci_network_qca \
+ pci_network_realtek \
+ pci_video_amd \
+ pci_video_intel
+
+BINDIR= ${LIBEXECDIR}/fwget
+
+MAN=
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/fwget/pci/Makefile.depend b/usr.sbin/fwget/pci/Makefile.depend
new file mode 100644
index 000000000000..11aba52f82cf
--- /dev/null
+++ b/usr.sbin/fwget/pci/Makefile.depend
@@ -0,0 +1,10 @@
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/fwget/pci/pci b/usr.sbin/fwget/pci/pci
new file mode 100644
index 000000000000..de8b7c8bb2b3
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci
@@ -0,0 +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-f]\{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-f]*\).*/\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-f]*\).*/\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}"
+ 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}"
+ if [ ! -f ${LIBEXEC_PATH}/pci_${class}_${vendor} ]; then
+ continue
+ fi
+ fi
+ . ${LIBEXEC_PATH}/pci_${class}_${vendor}
+
+ pci_${class}_${vendor} ${device} "${fulldevice}"
+ done
+ IFS=${oldifs}
+}
diff --git a/usr.sbin/fwget/pci/pci_network_intel b/usr.sbin/fwget/pci/pci_network_intel
new file mode 100644
index 000000000000..02d842a2d075
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_network_intel
@@ -0,0 +1,468 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2024 The FreeBSD Foundation
+#
+# This software was developed by Björn Zeeb
+# under sponsorship from the FreeBSD Foundation.
+#
+
+# Some iwlwifi chipsets are detected by other means and we cannot replicate
+# the full logic here.
+# Currently we also filter out all those which do have a wildcard device ID
+# as well as all for those which exists no firmware (yet).
+
+# iwlwifi (dynamic)
+pci_network_intel_iwlwifi()
+{
+
+ local idstr=$(echo $2 | sed 's,.*\ device=\(0x[0-9a-z]*\) subvendor=\(0x[0-9a-z]*\) subdevice=\(0x[0-9a-z]*\),\1/\2/\3,')
+
+ case "${idstr}" in
+
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/iwlwifi/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ # 7000
+ 0x08b1/*/0x4a6c) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4a6e) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4a70) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4c60) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4c70) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x402a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x406a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x446a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x486e) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4020) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4060) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4062) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4072) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4160) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4162) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4170) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4420) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4460) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4462) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4470) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4472) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4560) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4570) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x4870) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x5070) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x5072) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x5170) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0x5770) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc02a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc06a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc020) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc060) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc062) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc070) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc072) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc160) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc162) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc170) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc360) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc420) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc460) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc462) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc470) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc472) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc560) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc570) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc760) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xc770) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xcc60) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b1/*/0xcc70) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x426a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4220) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4260) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4262) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4270) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4272) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4360) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0x4370) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc26a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc220) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc260) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc262) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc270) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc272) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b2/*/0xc370) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0060) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0062) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0072) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0170) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0172) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0470) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x0472) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x1070) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x1170) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8060) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8062) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8070) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8072) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8170) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8172) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8470) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b3/*/0x8570) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b4/*/0x0270) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b4/*/0x0272) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b4/*/0x0370) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b4/*/0x8270) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b4/*/0x8272) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x08b4/*/0x8370) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x24fb/*/0x0000) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x24fb/*/0x2010) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x24fb/*/0x2050) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x24fb/*/0x2110) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x24fb/*/0x2150) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5c10) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5f10) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9e10) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x500a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x502a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x900a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x1010) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5000) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5002) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5010) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5012) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5020) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5090) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5100) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5102) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5110) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5190) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5400) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5410) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5412) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5420) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5490) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5510) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x5590) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9000) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9010) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9012) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9110) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9112) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9400) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9410) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095a/*/0x9510) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x520a) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5200) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5202) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5210) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5212) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5290) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5302) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x5310) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x9200) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x9210) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x095b/*/0x9310) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x4010) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x4012) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x4110) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x4410) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x4510) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x8010) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3165/*/0x8110) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3166/*/0x4210) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3166/*/0x4212) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+ 0x3166/*/0x4310) addpkg "wifi-firmware-iwlwifi-kmod-7000"; return 1 ;;
+
+ # 8000
+ 0x24f3/*/0x0000) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x01f0) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0004) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x10b0) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0012) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0044) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0132) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0150) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0250) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0810) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0850) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0910) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0930) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x0950) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1012) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1132) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x1150) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x4010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x8010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x8050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x8110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x8130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x8132) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x8150) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x9010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x9050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x9110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x9130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x9132) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0x9150) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xb0b0) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xc010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xc050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xc110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xd0b0) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xd010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f3/*/0xd050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f4/*/0x0030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f4/*/0x1030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f4/*/0x8030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f4/*/0x9030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f4/*/0xc030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f4/*/0xd030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f5/*/0x0010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24f6/*/0x0030) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x3e01) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x3e02) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x10d0) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0012) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0014) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0150) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0810) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0850) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0910) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0930) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x0950) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x1010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x1012) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x1014) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x1110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x1130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x8010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x8050) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x8110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x8130) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x9010) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x9074) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+ 0x24fd/*/0x9110) addpkg "wifi-firmware-iwlwifi-kmod-8000"; return 1 ;;
+
+ # 9000
+ 0x9df0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+ 0x30dc/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+ 0x31dc/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+ 0x271b/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+ 0x271c/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+ 0x2526/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+ 0xa370/*/*) addpkg "wifi-firmware-iwlwifi-kmod-9000"; return 1 ;;
+
+ # 22000
+ 0x02f0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/0x6074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x02f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x3df0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/0x6074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x4df0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x06f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x34f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x43f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x2723/*/0x1653) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x2723/*/0x1654) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0x2723/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x0a10) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x007c) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x0070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x0074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x0078) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x1651) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x1652) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x2074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x4070) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/0x6074) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+ 0xa0f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-22000"; return 1 ;;
+
+ # ax210
+ 0x7a70/*/0x0a10) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x00b0) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x0090) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x0098) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x0510) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x1691) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/0x1692) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7a70/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x0a10) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x00b0) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x0090) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x0098) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x0510) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x1691) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/0x1692) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7af0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7e40/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7e40/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7e40/*/0x1691) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7e40/*/0x1692) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7e40/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7f70/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7f70/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x7f70/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f0/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f0/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f0/*/0x1691) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f0/*/0x1692) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f1/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f1/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f1/*/0x1692) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x51f1/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x54f0/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x54f0/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x54f0/*/0x1691) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x54f0/*/0x1692) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x54f0/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x0a10) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x0020) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x0024) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x0090) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x0510) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x1673) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x1674) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x2020) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x4020) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x6020) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0x6024) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0xe020) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/0xe024) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2725/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2726/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2726/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+ 0x2729/*/*) addpkg "wifi-firmware-iwlwifi-kmod-ax210"; return 1 ;;
+
+ # bz
+ 0x4d40/*/*) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0x272b/*/*) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0x272d/*/*) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0x2727/*/*) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0x7740/*/*) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0000) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0a10) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x00c0) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x00c4) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x00e0) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x00e4) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x00e8) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x00ec) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x009c) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x011c) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x40c4) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x40e0) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0090) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0094) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0098) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0100) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0110) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0114) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0118) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0310) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0314) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x0510) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x1671) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x1672) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x1771) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x1772) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x1791) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x1792) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x4090) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x4110) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+ 0xa840/*/0x4314) addpkg "wifi-firmware-iwlwifi-kmod-bz"; return 1 ;;
+
+ # sc
+ 0x6e70/*/*) addpkg "wifi-firmware-iwlwifi-kmod-sc"; return 1 ;;
+ 0xd340/*/*) addpkg "wifi-firmware-iwlwifi-kmod-sc"; return 1 ;;
+ 0xe340/*/*) addpkg "wifi-firmware-iwlwifi-kmod-sc"; return 1 ;;
+ 0xe440/*/*) addpkg "wifi-firmware-iwlwifi-kmod-sc"; return 1 ;;
+
+ ### <<<
+
+ esac
+}
+
+pci_network_intel()
+{
+
+ for _drv in iwlwifi; do
+ pci_network_intel_${_drv} "$1" "$2"
+ case $? in
+ 1) break ;;
+ esac
+ done
+}
diff --git a/usr.sbin/fwget/pci/pci_network_mediatek b/usr.sbin/fwget/pci/pci_network_mediatek
new file mode 100644
index 000000000000..e1e15dcfa2e5
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_network_mediatek
@@ -0,0 +1,73 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright 2023 Bjoern A. Zeeb
+# Copyright (c) 2024-2025 The FreeBSD Foundation
+#
+# Portions of this software were developed by Björn Zeeb
+# under sponsorship from the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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_network_mediatek_mt76()
+{
+
+ case "$1" in
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/mediatek/mt76/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ 0x0608) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x0616) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x0717) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x7611) addpkg "wifi-firmware-mt76-kmod-mt7615"; return 1 ;;
+ 0x7615) addpkg "wifi-firmware-mt76-kmod-mt7615"; return 1 ;;
+ 0x7663) addpkg "wifi-firmware-mt76-kmod-mt7615"; return 1 ;;
+ 0x7906) addpkg "wifi-firmware-mt76-kmod-mt7915"; return 1 ;;
+ 0x790a) addpkg "wifi-firmware-mt76-kmod-mt7915"; return 1 ;;
+ 0x7915) addpkg "wifi-firmware-mt76-kmod-mt7915"; return 1 ;;
+ 0x7916) addpkg "wifi-firmware-mt76-kmod-mt7915"; return 1 ;;
+ 0x7920) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x7922) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x7925) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x7961) addpkg "wifi-firmware-mt76-kmod-mt792x"; return 1 ;;
+ 0x7990) addpkg "wifi-firmware-mt76-kmod-mt7996"; return 1 ;;
+ 0x7991) addpkg "wifi-firmware-mt76-kmod-mt7996"; return 1 ;;
+ 0x7992) addpkg "wifi-firmware-mt76-kmod-mt7996"; return 1 ;;
+ 0x799a) addpkg "wifi-firmware-mt76-kmod-mt7996"; return 1 ;;
+
+ ### <<<
+ esac
+}
+
+pci_network_mediatek()
+{
+
+ for _drv in mt76; do
+ pci_network_mediatek_${_drv} "$1"
+ case $? in
+ 1) break ;;
+ esac
+ done
+}
diff --git a/usr.sbin/fwget/pci/pci_network_qca b/usr.sbin/fwget/pci/pci_network_qca
new file mode 100644
index 000000000000..a97d29ef1135
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_network_qca
@@ -0,0 +1,101 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright 2023 Bjoern A. Zeeb
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+#
+
+# ath10k
+pci_network_qca_ath10k()
+{
+
+ case "$1" in
+
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/athk/ath10k/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ 0x003c) addpkg "wifi-firmware-ath10k-kmod-qca988x_hw20"; return 1 ;;
+ 0x003e) addpkg "wifi-firmware-ath10k-kmod-qca6174_hw21"
+ addpkg "wifi-firmware-ath10k-kmod-qca6174_hw30"
+ return 1 ;;
+ 0x0040) addpkg "wifi-firmware-ath10k-kmod-qca99x0_hw20"; return 1 ;;
+ 0x0041) addpkg "wifi-firmware-ath10k-kmod-qca6174_hw21"; return 1 ;;
+ 0x0042) addpkg "wifi-firmware-ath10k-kmod-qca6174_hw30"
+ addpkg "wifi-firmware-ath10k-kmod-qca9377_hw10"
+ return 1 ;;
+ 0x0046) addpkg "wifi-firmware-ath10k-kmod-qca9984_hw10"; return 1 ;;
+ 0x0050) addpkg "wifi-firmware-ath10k-kmod-qca9887_hw10"; return 1 ;;
+ 0x0056) addpkg "wifi-firmware-ath10k-kmod-qca9888_hw20"; return 1 ;;
+
+ ### <<<
+ esac
+}
+
+# ath11k
+pci_network_qca_ath11k()
+{
+
+ case "$1" in
+
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/athk/ath11k/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ 0x1101) addpkg "wifi-firmware-ath11k-kmod-qca6390_hw20"; return 1 ;;
+ 0x1103) addpkg "wifi-firmware-ath11k-kmod-wcn6855_hw20"; return 1 ;;
+ 0x1104) addpkg "wifi-firmware-ath11k-kmod-qcn9074_hw10"; return 1 ;;
+
+ ### <<<
+ esac
+}
+
+# ath12k
+pci_network_qca_ath12k()
+{
+
+ case "$1" in
+
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/athk/ath12k/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ 0x1107) addpkg "wifi-firmware-ath12k-kmod-wcn7850_hw20"; return 1 ;;
+
+ ### <<<
+ esac
+}
+
+pci_network_qca()
+{
+
+ for _drv in ath10k ath11k ath12k; do
+ pci_network_qca_${_drv} "$1"
+ case $? in
+ 1) break ;;
+ esac
+ done
+}
diff --git a/usr.sbin/fwget/pci/pci_network_realtek b/usr.sbin/fwget/pci/pci_network_realtek
new file mode 100644
index 000000000000..d70470b65244
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_network_realtek
@@ -0,0 +1,87 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright 2023 Bjoern A. Zeeb
+# Copyright (c) 2024 The FreeBSD Foundation
+#
+# Portions of this software were developed by Björn Zeeb
+# under sponsorship from the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+#
+
+# rtw88
+pci_network_realtek_rtw88()
+{
+
+ case "$1" in
+
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/rtw88/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ 0xd723) addpkg "wifi-firmware-rtw88-kmod-rtw8723d"; return 1 ;;
+ 0xb821) addpkg "wifi-firmware-rtw88-kmod-rtw8821c"; return 1 ;;
+ 0xc821) addpkg "wifi-firmware-rtw88-kmod-rtw8821c"; return 1 ;;
+ 0xb822) addpkg "wifi-firmware-rtw88-kmod-rtw8822b"; return 1 ;;
+ 0xc822) addpkg "wifi-firmware-rtw88-kmod-rtw8822c"; return 1 ;;
+ 0xc82f) addpkg "wifi-firmware-rtw88-kmod-rtw8822c"; return 1 ;;
+
+ ### <<<
+ esac
+}
+
+# rtw89
+pci_network_realtek_rtw89()
+{
+
+ case "$1" in
+
+ # The case pattern table below is generated by a script also helping
+ # to generate the flavor/firmware Makefile definitions for ports.
+ # { sys/contrib/dev/rtw89/zzz_fw_ports_fwget.sh }
+ ### >>>
+
+ 0xb851) addpkg "wifi-firmware-rtw89-kmod-rtw8851b"; return 1 ;;
+ 0x8852) addpkg "wifi-firmware-rtw89-kmod-rtw8852a"; return 1 ;;
+ 0xa85a) addpkg "wifi-firmware-rtw89-kmod-rtw8852a"; return 1 ;;
+ 0xb852) addpkg "wifi-firmware-rtw89-kmod-rtw8852b"; return 1 ;;
+ 0xb85b) addpkg "wifi-firmware-rtw89-kmod-rtw8852b"; return 1 ;;
+ 0xc852) addpkg "wifi-firmware-rtw89-kmod-rtw8852c"; return 1 ;;
+ 0x8922) addpkg "wifi-firmware-rtw89-kmod-rtw8922a"; return 1 ;;
+
+ ### <<<
+ esac
+}
+
+
+pci_network_realtek()
+{
+
+ for _drv in rtw88 rtw89; do
+ pci_network_realtek_${_drv} "$1"
+ case $? in
+ 1) break ;;
+ esac
+ done
+}
diff --git a/usr.sbin/fwget/pci/pci_video_amd b/usr.sbin/fwget/pci/pci_video_amd
new file mode 100644
index 000000000000..7e50454d3944
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_video_amd
@@ -0,0 +1,177 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright 2023 Beckhoff Automation GmbH & Co. KG
+#
+# 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_video_amd()
+{
+ # A table listing the required firmware versions for each GPU series
+ # is available at https://docs.kernel.org/gpu/amdgpu/driver-misc.html
+
+ case "$1" in
+ 0x678*|0x679*)
+ addpkg "gpu-firmware-amd-kmod-tahiti"
+ ;;
+ 0x680*|0x681*)
+ addpkg "gpu-firmware-amd-kmod-pitcairn"
+ ;;
+ 0x660*|0x661*|0x662*|0x663*)
+ addpkg "gpu-firmware-amd-kmod-oland"
+ ;;
+ 0x682*|0x683*)
+ addpkg "gpu-firmware-amd-kmod-verde gpu-firmware-amd-kmod-si58"
+ ;;
+ 0x666*)
+ addpkg "gpu-firmware-amd-kmod-hainan"
+ ;;
+ 0x13*)
+ addpkg "gpu-firmware-amd-kmod-kaveri"
+ ;;
+ 0x664*|0x665*)
+ addpkg "gpu-firmware-amd-kmod-bonaire"
+ ;;
+ 0x67a*|0x67b*)
+ addpkg "gpu-firmware-amd-kmod-hawaii"
+ ;;
+ 0x983*)
+ addpkg "gpu-firmware-amd-kmod-kabini"
+ ;;
+ 0x985*)
+ addpkg "gpu-firmware-amd-kmod-mullins"
+ ;;
+ 0x690*)
+ addpkg "gpu-firmware-amd-kmod-topaz"
+ ;;
+ 0x692*|0x693*)
+ addpkg "gpu-firmware-amd-kmod-tonga"
+ ;;
+ 0x730*)
+ addpkg "gpu-firmware-amd-kmod-fiji"
+ ;;
+ 0x987*)
+ addpkg "gpu-firmware-amd-kmod-carrizo"
+ ;;
+ 0x98e4)
+ addpkg "gpu-firmware-amd-kmod-stoney"
+ ;;
+ 0x67e*|0x67ff)
+ addpkg "gpu-firmware-amd-kmod-polaris11"
+ ;;
+ 0x67c*|0x67d*|0x6fdf)
+ addpkg "gpu-firmware-amd-kmod-polaris10"
+ ;;
+ 0x698*|0x699*)
+ addpkg "gpu-firmware-amd-kmod-polaris12"
+ ;;
+ 0x694*)
+ addpkg "gpu-firmware-amd-kmod-vegam"
+ ;;
+ 0x686*|0x687*)
+ addpkg "gpu-firmware-amd-kmod-vega10"
+ ;;
+ 0x69a*)
+ addpkg "gpu-firmware-amd-kmod-vega12"
+ ;;
+ 0x66a*)
+ addpkg "gpu-firmware-amd-kmod-vega20"
+ ;;
+ 0x15d8)
+ addpkg "gpu-firmware-amd-kmod-picasso"
+ ;;
+ 0x15d*)
+ addpkg "gpu-firmware-amd-kmod-raven"
+ ;;
+ 0x738*|0x739*)
+ addpkg "gpu-firmware-amd-kmod-arcturus"
+ ;;
+ 0x731*)
+ addpkg "gpu-firmware-amd-kmod-navi10"
+ ;;
+ 0x734*)
+ addpkg "gpu-firmware-amd-kmod-navi14"
+ ;;
+ 0x15e7|0x1638)
+ addpkg "gpu-firmware-amd-kmod-renoir gpu-firmware-amd-kmod-green-sardine"
+ ;;
+ 0x1636|0x164c)
+ addpkg "gpu-firmware-amd-kmod-renoir"
+ ;;
+ 0x736*)
+ addpkg "gpu-firmware-amd-kmod-navi12"
+ ;;
+ 0x73a*|0x73b*)
+ addpkg "gpu-firmware-amd-kmod-sienna-cichlid"
+ ;;
+ 0x163f)
+ addpkg "gpu-firmware-amd-kmod-vangogh"
+ ;;
+ 0x164d|0x1681)
+ addpkg "gpu-firmware-amd-kmod-yellow-carp"
+ ;;
+ 0x73c*|0x73d*)
+ addpkg "gpu-firmware-amd-kmod-navy-flounder"
+ ;;
+ 0x73e*|0x73f*)
+ addpkg "gpu-firmware-amd-kmod-dimgrey-cavefish"
+ ;;
+ 0x740*|0x741*)
+ addpkg "gpu-firmware-amd-kmod-aldebaran"
+ ;;
+ 0x13fe|0x143f)
+ addpkg "gpu-firmware-amd-kmod-cyan-skillfish2"
+ ;;
+ 0x742*|0x743*)
+ addpkg "gpu-firmware-amd-kmod-beige-goby"
+ ;;
+ 0x744c)
+ addpkg "gpu-firmware-amd-kmod-dcn-3-2-0"
+ addpkg "gpu-firmware-amd-kmod-gc-11-0-0"
+ addpkg "gpu-firmware-amd-kmod-psp-13-0-0"
+ addpkg "gpu-firmware-amd-kmod-sdma-6-0-0"
+ addpkg "gpu-firmware-amd-kmod-smu-13-0-0"
+ addpkg "gpu-firmware-amd-kmod-vcn-4-0-0"
+ ;;
+ 0x15bf)
+ addpkg "gpu-firmware-amd-kmod-gc-11-0-1"
+ addpkg "gpu-firmware-amd-kmod-psp-13-0-4"
+ addpkg "gpu-firmware-amd-kmod-dcn-3-1-4"
+ addpkg "gpu-firmware-amd-kmod-sdma-6-0-1"
+ addpkg "gpu-firmware-amd-kmod-vcn-4-0-2"
+ ;;
+ 0x15c8)
+ addpkg "gpu-firmware-amd-kmod-dcn-3-1-4"
+ addpkg "gpu-firmware-amd-kmod-gc-11-0-4"
+ addpkg "gpu-firmware-amd-kmod-psp-13-0-11"
+ addpkg "gpu-firmware-amd-kmod-sdma-6-0-1"
+ addpkg "gpu-firmware-amd-kmod-vcn-4-0-2"
+ ;;
+ 0x164e)
+ addpkg "gpu-firmware-amd-kmod-gc-10-3-6"
+ addpkg "gpu-firmware-amd-kmod-psp-13-0-5"
+ addpkg "gpu-firmware-amd-kmod-dcn-3-1-5"
+ addpkg "gpu-firmware-amd-kmod-sdma-5-2-6"
+ addpkg "gpu-firmware-amd-kmod-vcn-3-1-2"
+ ;;
+ esac
+}
diff --git a/usr.sbin/fwget/pci/pci_video_intel b/usr.sbin/fwget/pci/pci_video_intel
new file mode 100644
index 000000000000..2f9012ed1f52
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_video_intel
@@ -0,0 +1,78 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright 2023 Beckhoff Automation GmbH & Co. KG
+#
+# 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_video_intel()
+{
+ case "$1" in
+ # Skylake
+ 0x19*)
+ addpkg "gpu-firmware-intel-kmod-skylake"
+ ;;
+ # Broxton
+ 0x0a*|0x1a*|0x5a84|0x5a85)
+ addpkg "gpu-firmware-intel-kmod-broxton"
+ ;;
+ # Geminilake
+ 0x318*)
+ addpkg "gpu-firmware-intel-kmod-geminilake"
+ ;;
+ # Kabylake, Coffeelake and Cometlake
+ 0x59*|0x87*|0x9b*|0x3e*)
+ addpkg "gpu-firmware-intel-kmod-kabylake"
+ ;;
+ # Cannonlake
+ 0x5a*)
+ addpkg "gpu-firmware-intel-kmod-cannonlake"
+ ;;
+ # Icelake
+ 0x8a*)
+ addpkg "gpu-firmware-intel-kmod-icelake"
+ ;;
+ # Elkhartlake/Jasperlake
+ 0x45*|0x4e*)
+ addpkg "gpu-firmware-intel-kmod-elkhartlake"
+ ;;
+ # Tigerlake
+ 0x9a*)
+ addpkg "gpu-firmware-intel-kmod-tigerlake"
+ ;;
+ # Rocketlake (Uses tigerlake GuC/HuC firmware)
+ 0x4c*)
+ addpkg "gpu-firmware-intel-kmod-rocketlake gpu-firmware-intel-kmod-tigerlake"
+ ;;
+ # DG1
+ 0x49*)
+ addpkg "gpu-firmware-intel-kmod-dg1"
+ ;;
+ # Alderlake (Uses tigerlake GuC/HuC firmware)
+ 0x46*)
+ addpkg "gpu-firmware-intel-kmod-alderlake gpu-firmware-intel-kmod-tigerlake"
+ ;;
+ *)
+ log_verbose "No package found for device $1"
+ ;;
+ esac
+}
diff --git a/usr.sbin/fwget/usb/Makefile b/usr.sbin/fwget/usb/Makefile
new file mode 100644
index 000000000000..315e9c743cc8
--- /dev/null
+++ b/usr.sbin/fwget/usb/Makefile
@@ -0,0 +1,10 @@
+PACKAGE= fwget
+
+SCRIPTS=usb \
+ usb_ralink
+
+BINDIR= ${LIBEXECDIR}/fwget
+
+MAN=
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/fwget/usb/usb b/usr.sbin/fwget/usb/usb
new file mode 100755
index 000000000000..fef6bc76ba89
--- /dev/null
+++ b/usr.sbin/fwget/usb/usb
@@ -0,0 +1,43 @@
+#
+# Copyright 2023 Beckhoff Automation GmbH & Co. KG
+# Copyright 2023 Bjoern A. Zeeb
+# Copyright 2025 Jesper Schmitz Mouridsen
+
+# SPDX-License-Identifier: BSD-2-Clause
+
+
+usb_get_vendor()
+{
+ local hexvendor=$(echo $1 | sed 's/.*idVendor=\(0x[0-9a-z]*\).*/\1/')
+ case "${hexvendor}" in
+ 0x148f) echo "ralink" ;;
+ esac
+}
+
+usb_get_device()
+{
+ local hexdevice=$(echo $1 | sed 's/.*idProduct=\(0x[0-9a-z]*\).*/\1/')
+ echo "${hexdevice}"
+
+}
+
+usb_search_packages()
+{
+ local IFS
+
+ oldifs=$IFS
+ IFS=$'\n'
+ for fulldevice in $(usbconfig -l dump_device_desc); do
+ vendor=$(usb_get_vendor "${fulldevice}")
+ if [ -z "${vendor}" ]; then
+ continue
+ fi
+ device=$(usb_get_device "${fulldevice}")
+ log_verbose "Trying to match device ${device} and vendor ${vendor} with usb_${vendor}"
+ if [ -f ${LIBEXEC_PATH}/usb_${vendor} ]; then
+ . ${LIBEXEC_PATH}/usb_${vendor}
+ usb_${vendor} ${device}
+ fi
+ done
+ IFS=${oldifs}
+}
diff --git a/usr.sbin/fwget/usb/usb_ralink b/usr.sbin/fwget/usb/usb_ralink
new file mode 100755
index 000000000000..8d3135063011
--- /dev/null
+++ b/usr.sbin/fwget/usb/usb_ralink
@@ -0,0 +1,12 @@
+#
+# Copyright (c) 2025 Jesper Schmitz Mouridsen
+#
+# SPDX-License-Identifier: BSD-2-Clause
+
+usb_ralink()
+{
+
+ case "$1" in
+ 0x7601) addpkg "wifi-firmware-mt7601u-kmod"; return 1 ;;
+ esac
+}