aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/pci
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2011-07-16 19:38:08 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2011-07-16 19:38:08 +0000
commitd6070aa936ab56a733b15d0e6b37dffc0e41592b (patch)
treefd9740255e2612c8d98dee81604d09c8303d01b3 /sys/dev/pci
parentf078d472e2c6c7872df3f3ac3e283ede10c08141 (diff)
Notes
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/pci.c15
-rw-r--r--sys/dev/pci/pcivar.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 72497e772f54..9b09db4562b8 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -341,6 +341,21 @@ pci_find_device(uint16_t vendor, uint16_t device)
return (NULL);
}
+device_t
+pci_find_class(uint8_t class, uint8_t subclass)
+{
+ struct pci_devinfo *dinfo;
+
+ STAILQ_FOREACH(dinfo, &pci_devq, pci_links) {
+ if (dinfo->cfg.baseclass == class &&
+ dinfo->cfg.subclass == subclass) {
+ return (dinfo->cfg.dev);
+ }
+ }
+
+ return (NULL);
+}
+
static int
pci_printf(pcicfgregs *cfg, const char *fmt, ...)
{
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index 2d89de9d3b61..eff3f5fe5f36 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -450,6 +450,7 @@ pci_msix_count(device_t dev)
device_t pci_find_bsf(uint8_t, uint8_t, uint8_t);
device_t pci_find_dbsf(uint32_t, uint8_t, uint8_t, uint8_t);
device_t pci_find_device(uint16_t, uint16_t);
+device_t pci_find_class(uint8_t class, uint8_t subclass);
/* Can be used by drivers to manage the MSI-X table. */
int pci_pending_msix(device_t dev, u_int index);