aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/fwget
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2023-05-11 20:36:50 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2023-05-20 11:16:42 +0000
commit17cec33e750fe2543ab898ba88e19b8e57ef895d (patch)
tree35b88d206546db8c1b2431bea32a53568c3d40d9 /usr.sbin/fwget
parent10aa369afd9946da18ae51b07aeadc3314fba56d (diff)
downloadsrc-17cec33e750fe2543ab898ba88e19b8e57ef895d.tar.gz
src-17cec33e750fe2543ab898ba88e19b8e57ef895d.zip
Diffstat (limited to 'usr.sbin/fwget')
-rw-r--r--usr.sbin/fwget/pci/pci51
1 files changed, 40 insertions, 11 deletions
diff --git a/usr.sbin/fwget/pci/pci b/usr.sbin/fwget/pci/pci
index b30aae4fadb8..b3514c3ab43d 100644
--- a/usr.sbin/fwget/pci/pci
+++ b/usr.sbin/fwget/pci/pci
@@ -2,6 +2,7 @@
# 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
@@ -26,11 +27,12 @@
pci_get_class()
{
- local hexclass=$(echo $1 | sed 's/.*class=\(0x[0-9a-z]*\).*/\1/')
+ local hexclass=$(echo $1 | sed 's/.*class=\(0x[0-9a-z]\{2\}\).*/\1/')
case "${hexclass}" in
- 0x030000)
- echo "video"
- ;;
+ 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
}
@@ -39,12 +41,12 @@ pci_get_vendor()
local hexvendor=$(echo $1 | sed 's/.*\ vendor=\(0x[0-9a-z]*\).*/\1/')
case "${hexvendor}" in
- 0x8086)
- echo "intel"
- ;;
- 0x1002)
- echo "amd"
- ;;
+ 0x1002) echo "amd" ;;
+ 0x10ec) echo "realtek" ;;
+ 0x14c3) echo "mediatek" ;;
+ 0x168c) echo "qca" ;; # Qualcomm Atheros
+ 0x17cb) echo "qca" ;; # Qualcomm Technologies
+ 0x8086) echo "intel" ;;
esac
}
@@ -55,6 +57,26 @@ pci_get_device()
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
@@ -74,7 +96,14 @@ pci_search_packages()
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
+ 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
+ if [ ! -f ${LIBEXEC_PATH}/pci_${class}_${vendor} ]; then
+ continue
+ fi
fi
. ${LIBEXEC_PATH}/pci_${class}_${vendor}