diff options
author | Jo-Philipp Wich <jo@mein.io> | 2022-12-15 20:45:20 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2022-12-15 21:14:57 +0100 |
commit | 14f864eb72f55da55cb6d0672dad07b54bca3185 (patch) | |
tree | cd587317e19bf0a9517f56db35bb093714cd450b | |
parent | a5a75fd661da3cb029bf71fab5e27eebc14cdd1b (diff) | |
download | iwinfo-14f864eb72f55da55cb6d0672dad07b54bca3185.tar.gz |
nl80211: add ability to describe USB devices
Treat USB vendor and product IDs like PCI subsystem vendor and device IDs
respectively to allow describing USB devices as `0000 0000 $vid $pid` in
the hardware database.
As a side effect, this also skips potentially expensive MTD lookups on
embedded devices with plugged in USB radios.
With a 5.15 kernel, such MTD lookups even spam dmesg with:
mtdblock: MTD device 'factory' is NAND, please consider using UBI block devices instead.
This fix speeds up iwinfo considerably on affected systems:
Before:
sys 0m 3.56s
After:
sys 0m 0.09s
Suggested-by: Andre Heider <a.heider@gmail.com>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | iwinfo_nl80211.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c index c1e53d7..50b1ab4 100644 --- a/iwinfo_nl80211.c +++ b/iwinfo_nl80211.c @@ -3468,7 +3468,9 @@ static int nl80211_get_hardware_id(const char *ifname, char *buf) { "vendor", &id->vendor_id }, { "device", &id->device_id }, { "subsystem_vendor", &id->subsystem_vendor_id }, - { "subsystem_device", &id->subsystem_device_id } + { "subsystem_device", &id->subsystem_device_id }, + { "../idVendor", &id->subsystem_vendor_id }, + { "../idProduct", &id->subsystem_device_id } }; memset(id, 0, sizeof(*id)); @@ -3487,12 +3489,14 @@ static int nl80211_get_hardware_id(const char *ifname, char *buf) } /* Failed to obtain hardware IDs, try FDT */ - if (id->vendor_id == 0 || id->device_id == 0) + if (id->vendor_id == 0 && id->device_id == 0 && + id->subsystem_vendor_id == 0 && id->subsystem_device_id == 0) if (!nl80211_hardware_id_from_fdt(id, ifname)) return 0; /* Failed to obtain hardware IDs, search board config */ - if (id->vendor_id == 0 || id->device_id == 0) + if (id->vendor_id == 0 && id->device_id == 0 && + id->subsystem_vendor_id == 0 && id->subsystem_device_id == 0) return iwinfo_hardware_id_from_mtd(id); return 0; |