summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-12-15 20:45:20 +0100
committerJo-Philipp Wich <jo@mein.io>2022-12-15 21:14:57 +0100
commit14f864eb72f55da55cb6d0672dad07b54bca3185 (patch)
treecd587317e19bf0a9517f56db35bb093714cd450b
parenta5a75fd661da3cb029bf71fab5e27eebc14cdd1b (diff)
downloadiwinfo-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.c10
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;