diff options
author | Bjoern A. Zeeb <bz@FreeBSD.org> | 2023-05-11 20:36:50 +0000 |
---|---|---|
committer | Bjoern A. Zeeb <bz@FreeBSD.org> | 2023-05-20 11:16:42 +0000 |
commit | 17cec33e750fe2543ab898ba88e19b8e57ef895d (patch) | |
tree | 35b88d206546db8c1b2431bea32a53568c3d40d9 /usr.sbin/fwget | |
parent | 10aa369afd9946da18ae51b07aeadc3314fba56d (diff) | |
download | src-17cec33e750fe2543ab898ba88e19b8e57ef895d.tar.gz src-17cec33e750fe2543ab898ba88e19b8e57ef895d.zip |
Diffstat (limited to 'usr.sbin/fwget')
-rw-r--r-- | usr.sbin/fwget/pci/pci | 51 |
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} |