aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hardinfo/pci_util.c12
-rw-r--r--includes/pci_util.h2
2 files changed, 14 insertions, 0 deletions
diff --git a/hardinfo/pci_util.c b/hardinfo/pci_util.c
index 71fa1fe9..728e6356 100644
--- a/hardinfo/pci_util.c
+++ b/hardinfo/pci_util.c
@@ -322,6 +322,18 @@ static gboolean pci_get_device_lspci(uint32_t dom, uint32_t bus, uint32_t dev, u
return FALSE;
}
+pcid *pci_get_device_str(const char *addy) {
+ uint32_t dom, bus, dev, func, cls;
+ int ec;
+ if (addy) {
+ ec = sscanf(addy, "%x:%x:%x.%x", &dom, &bus, &dev, &func);
+ if (ec == 4) {
+ return pci_get_device(dom, bus, dev, func);
+ }
+ }
+ return NULL;
+}
+
pcid *pci_get_device(uint32_t dom, uint32_t bus, uint32_t dev, uint32_t func) {
pcid *s = pcid_new();
gboolean ok = FALSE;
diff --git a/includes/pci_util.h b/includes/pci_util.h
index 732f63bc..476c3212 100644
--- a/includes/pci_util.h
+++ b/includes/pci_util.h
@@ -67,6 +67,8 @@ int pcid_list_count(pcid *);
void pcid_list_free(pcid *);
pcid *pci_get_device(uint32_t dom, uint32_t bus, uint32_t dev, uint32_t func);
+pcid *pci_get_device_str(const char *addy);
+
void pcid_free(pcid *);
char *pci_lookup_ids_vendor_str(uint32_t id);