From 141c08f9c00b0f8c8dc97dbd822d2254cda67d3f Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sat, 9 Jul 2011 14:30:13 +0000 Subject: [PATCH] Implement pci_find_class(9), the function to find a pci device by its class. Sponsored by: The FreeBSD Foundation Reviewed by: jhb MFC after: 1 week --- sys/dev/pci/pci.c | 15 +++++++++++++++ sys/dev/pci/pcivar.h | 1 + 2 files changed, 16 insertions(+) diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index b346dd324da6..004190a321b0 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -347,6 +347,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 ae3fe79a29df..8fd84a725e85 100644 --- a/sys/dev/pci/pcivar.h +++ b/sys/dev/pci/pcivar.h @@ -457,6 +457,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);