diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2011-07-16 19:38:08 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2011-07-16 19:38:08 +0000 |
| commit | d6070aa936ab56a733b15d0e6b37dffc0e41592b (patch) | |
| tree | fd9740255e2612c8d98dee81604d09c8303d01b3 /sys/dev/pci | |
| parent | f078d472e2c6c7872df3f3ac3e283ede10c08141 (diff) | |
Notes
Diffstat (limited to 'sys/dev/pci')
| -rw-r--r-- | sys/dev/pci/pci.c | 15 | ||||
| -rw-r--r-- | sys/dev/pci/pcivar.h | 1 |
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); |
