Page MenuHomeFreeBSD

D39825.id121280.diff
No OneTemporary

D39825.id121280.diff

diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist
--- a/etc/mtree/BSD.usr.dist
+++ b/etc/mtree/BSD.usr.dist
@@ -152,6 +152,8 @@
..
dwatch
..
+ fwget
+ ..
hyperv
..
lpr
diff --git a/release/packages/Makefile.package b/release/packages/Makefile.package
--- a/release/packages/Makefile.package
+++ b/release/packages/Makefile.package
@@ -64,6 +64,8 @@
ftp_DESC= FTP Utilities
ftpd_COMMENT= FTP Daemon
ftpd_DESC= FTP Daemon
+fwget_COMMENT= FWGET Utility
+fwget_DESC= FWGET Utility
games_COMMENT= Games
games_DESC= Games
gdb_COMMENT= GDB Utilities
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -28,6 +28,7 @@
fifolog \
fstyp \
fwcontrol \
+ fwget \
getfmac \
getpmac \
gstat \
diff --git a/usr.sbin/fwget/Makefile b/usr.sbin/fwget/Makefile
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/Makefile
@@ -0,0 +1,7 @@
+PACKAGE= fwget
+
+SCRIPTS= fwget
+MAN= fwget.8
+SUBDIR= pci
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/fwget/fwget.8 b/usr.sbin/fwget/fwget.8
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/fwget.8
@@ -0,0 +1,64 @@
+.\" 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 Apr 26, 2023
+.Dt FWGET 8
+.Os
+.Sh NAME
+.Nm fwget
+.Nd Install firmwares for the running system
+.Sh SYNOPSIS
+.Nm
+.Op Fl v
+.Op Fl n
+.Ar subsystem
+.Sh DESCRIPTION
+The
+.Nm
+utility can be used to install firmwares packaged needed for the running
+system
+.Pp
+If not specified the
+.Ar subsystem
+argument will default to pci cards.
+.Pp
+The options are as follows:
+.Bl -tag -width
+.It Fl n
+Dry run, only show needed packages
+.It Fl v
+Be more verbose
+.El
+.Sh SEE ALSO
+.Xr firmware 9
+.Sh HISTORY
+The
+.Nm
+utility 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 .
diff --git a/usr.sbin/fwget/fwget.sh b/usr.sbin/fwget/fwget.sh
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/fwget.sh
@@ -0,0 +1,110 @@
+#!/bin/sh
+
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# 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.
+
+: ${LIBEXEC_PATH:="/usr/libexec/fwget"}
+
+usage()
+{
+ cat <<EOF
+Usage: `basename $0` [options] [subsystem]
+
+Supported subsystems
+ pci
+
+Options:
+ -n -- Do not install package, only print the results
+ -v -- More verbose
+EOF
+ exit 1
+}
+
+log_start()
+{
+ exec 3>&1 4>&2
+}
+
+log()
+{
+ echo $@ 1>&3
+}
+
+log_verbose()
+{
+ if [ "${VERBOSE}" = "n" ]; then
+ return
+ fi
+
+ echo $@ 1>&3
+}
+
+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
+ package=$(${subsystem}_search_packages)
+
+ packages="${packages} ${package}"
+done
+
+echo "Needed packages: ${packages}"
+if [ "${DRY_RUN}" = "y" ]; then
+ exit 0
+fi
+
+pkg install -q ${package}
diff --git a/usr.sbin/fwget/pci/Makefile b/usr.sbin/fwget/pci/Makefile
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/pci/Makefile
@@ -0,0 +1,11 @@
+PACKAGE= fwget
+
+SCRIPTS=pci \
+ pci_video_amd \
+ pci_video_intel
+
+BINDIR= ${LIBEXECDIR}/fwget
+
+MAN=
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/fwget/pci/pci b/usr.sbin/fwget/pci/pci
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci
@@ -0,0 +1,84 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# 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_get_class()
+{
+ local hexclass=$(echo $1 | sed 's/.*class=\(0x[0-9a-z]*\).*/\1/')
+ case "${hexclass}" in
+ 0x030000)
+ echo "video"
+ ;;
+ esac
+}
+
+pci_get_vendor()
+{
+ local hexvendor=$(echo $1 | sed 's/.*\ vendor=\(0x[0-9a-z]*\).*/\1/')
+
+ case "${hexvendor}" in
+ 0x8086)
+ echo "intel"
+ ;;
+ 0x1002)
+ echo "amd"
+ ;;
+ esac
+}
+
+pci_get_device()
+{
+ local hexdevice=$(echo $1 | sed 's/.*\ device=\(0x[0-9a-z]*\).*/\1/')
+
+ echo ${hexdevice}
+}
+
+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
+ if [ ! -f ${LIBEXEC_PATH}/pci_${class}_${vendor} ]; then
+ continue
+ fi
+ . ${LIBEXEC_PATH}/pci_${class}_${vendor}
+
+ pci_${class}_${vendor} ${device}
+ done
+ IFS=${oldifs}
+}
diff --git a/usr.sbin/fwget/pci/pci_video_amd b/usr.sbin/fwget/pci/pci_video_amd
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_video_amd
@@ -0,0 +1,139 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# 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()
+{
+ case "$1" in
+ 0x678*|0x679*)
+ echo "gpu-firmware-amd-kmod-tahiti"
+ ;;
+ 0x680*|0x681*)
+ echo "gpu-firmware-amd-kmod-pitcairn"
+ ;;
+ 0x660*|0x661*|0x662*|0x663*)
+ echo "gpu-firmware-amd-kmod-oland"
+ ;;
+ 0x682*|0x683*)
+ echo "gpu-firmware-amd-kmod-verde gpu-firmware-amd-kmod-si58"
+ ;;
+ 0x666*)
+ echo "gpu-firmware-amd-kmod-hainan"
+ ;;
+ 0x13*)
+ echo "gpu-firmware-amd-kmod-kaveri"
+ ;;
+ 0x664*|0x664*)
+ echo "gpu-firmware-amd-kmod-bonaire"
+ ;;
+ 0x67a*|0x67b*)
+ echo "gpu-firmware-amd-kmod-hawaii"
+ ;;
+ 0x983*)
+ echo "gpu-firmware-amd-kmod-kabini"
+ ;;
+ 0x985*)
+ echo "gpu-firmware-amd-kmod-mullins"
+ ;;
+ 0x690*)
+ echo "gpu-firmware-amd-kmod-topaz"
+ ;;
+ 0x692*|0x693*)
+ echo "gpu-firmware-amd-kmod-tonga"
+ ;;
+ 0x730*)
+ echo "gpu-firmware-amd-kmod-fiji"
+ ;;
+ 0x987*)
+ echo "gpu-firmware-amd-kmod-carrizo"
+ ;;
+ 0x98e4*)
+ echo "gpu-firmware-amd-kmod-stoney"
+ ;;
+ 0x67e*|0x67ff)
+ echo "gpu-firmware-amd-kmod-polaris11"
+ ;;
+ 0x67c*|0x67d*|0x6fdf)
+ echo "gpu-firmware-amd-kmod-polaris10"
+ ;;
+ 0x698*|0x699*)
+ echo "gpu-firmware-amd-kmod-polaris12"
+ ;;
+ 0x694*)
+ echo "gpu-firmware-amd-kmod-vegam"
+ ;;
+ 0x686*|0x687*)
+ echo "gpu-firmware-amd-kmod-vega10"
+ ;;
+ 0x69a*)
+ echo "gpu-firmware-amd-kmod-vega12"
+ ;;
+ 0x66a*)
+ echo "gpu-firmware-amd-kmod-vega20"
+ ;;
+ 0x15d*)
+ echo "gpu-firmware-amd-kmod-raven"
+ ;;
+ 0x738*|0x739*)
+ echo "gpu-firmware-amd-kmod-arcturus"
+ ;;
+ 0x731*)
+ echo "gpu-firmware-amd-kmod-navi10"
+ ;;
+ 0x734*)
+ echo "gpu-firmware-amd-kmod-navi14"
+ ;;
+ 0x15e7|0x1636|0x1638|0x164c)
+ echo "gpu-firmware-amd-kmod-renoir"
+ ;;
+ 0x736*)
+ echo "gpu-firmware-amd-kmod-navi12"
+ ;;
+ 0x73a*|0x73b*)
+ echo "gpu-firmware-amd-kmod-sienna-cichlid"
+ ;;
+ 0x163f)
+ echo "gpu-firmware-amd-kmod-vangogh"
+ ;;
+ 0x164d|0x1681)
+ echo "gpu-firmware-amd-kmod-yellow-carp"
+ ;;
+ 0x73c*|0x73d*)
+ echo "gpu-firmware-amd-kmod-navy-flounder"
+ ;;
+ 0x73e*|0x73f*)
+ echo "gpu-firmware-amd-kmod-dimgrey-cavefish"
+ ;;
+ 0x740*|0x741*)
+ echo "gpu-firmware-amd-kmod-aldebaran"
+ ;;
+ 0x13fe)
+ echo "gpu-firmware-amd-kmod-cyan-skillfish2"
+ ;;
+ 0x742*|0x743*)
+ echo "gpu-firmware-amd-kmod-beige-goby"
+ ;;
+ esac
+}
diff --git a/usr.sbin/fwget/pci/pci_video_intel b/usr.sbin/fwget/pci/pci_video_intel
new file mode 100644
--- /dev/null
+++ b/usr.sbin/fwget/pci/pci_video_intel
@@ -0,0 +1,78 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# 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*)
+ echo "gpu-firmware-intel-kmod-skylake"
+ ;;
+ # Broxton
+ 0x0a*|0x1a*|0x5a84|0x5a85)
+ echo "gpu-firmware-intel-kmod-broxton"
+ ;;
+ # Geminilake
+ 0x318*)
+ echo "gpu-firmware-intel-kmod-geminilake"
+ ;;
+ # Kabylake, Coffeelake and Cometlake
+ 0x59*|0x87*|0x9b*|0x3e*)
+ echo "gpu-firmware-intel-kmod-kabylake"
+ ;;
+ # Cannonlake
+ 0x5a*)
+ echo "gpu-firmware-intel-cannonlake"
+ ;;
+ # Icelake
+ 0x8a*)
+ echo "gpu-firmware-intel-icelake"
+ ;;
+ # Elkhartlake/Jasperlake
+ 0x45*|0x4e*)
+ echo "gpu-firmware-intel-elkhartlake"
+ ;;
+ # Tigerlake
+ 0x9a*)
+ echo "gpu-firmware-intel-tigerlake"
+ ;;
+ # Rocketlake (Uses tigerlake GuC/HuC firmware)
+ 0x4c*)
+ echo "gpu-firmware-intel-rocketlake gpu-firmware-intel-tigerlake"
+ ;;
+ # DG1
+ 0x49*)
+ echo "gpu-firmware-intel-dg1"
+ ;;
+ # Alderlake (Uses tigerlake GuC/HuC firmware)
+ 0x46*)
+ echo "gpu-firmware-intel-alderlake gpu-firmware-intel-tigerlake"
+ ;;
+ *)
+ log "No package found for device $1"
+ ;;
+ esac
+}

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 19, 5:40 AM (11 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29949690
Default Alt Text
D39825.id121280.diff (15 KB)

Event Timeline