Match the device class and "protocol" while probing and skip unknow devices.
Signed-off-by: Henning Schild <[email protected]> diff --git a/inmates/demos/x86/ivshmem-demo.c b/inmates/demos/x86/ivshmem-demo.c --- a/inmates/demos/x86/ivshmem-demo.c +++ b/inmates/demos/x86/ivshmem-demo.c @@ -114,6 +114,7 @@ { int i; int bdf = 0; + unsigned int class_rev; struct ivshmem_dev_data *d; volatile char *shmem; @@ -121,14 +122,19 @@ int_init(); -again: - bdf = pci_find_device(VENDORID, DEVICEID, bdf); - if (bdf != -1) { + while ((ndevices < MAX_NDEV) && + (-1 != (bdf = pci_find_device(VENDORID, DEVICEID, bdf)))) { printk("IVSHMEM: Found %04x:%04x at %02x:%02x.%x\n", pci_read_config(bdf, PCI_CFG_VENDOR_ID, 2), pci_read_config(bdf, PCI_CFG_DEVICE_ID, 2), bdf >> 8, (bdf >> 3) & 0x1f, bdf & 0x3); - + class_rev = pci_read_config(bdf, 0x8, 4); + if (class_rev != PCI_DEV_CLASS_OTHER << 24) { + printk("IVSHMEM: class/revision %08x, not supported " + "skipping device\n", class_rev); + bdf++; + continue; + } ndevices++; d = devs + ndevices - 1; d->bdf = bdf; @@ -141,8 +147,6 @@ int_set_handler(IRQ_VECTOR + ndevices - 1, irq_handler); pci_msix_set_vector(bdf, IRQ_VECTOR + ndevices - 1, 0); bdf++; - if (ndevices < MAX_NDEV) - goto again; } if (!ndevices) { diff --git a/inmates/lib/x86/inmate.h b/inmates/lib/x86/inmate.h --- a/inmates/lib/x86/inmate.h +++ b/inmates/lib/x86/inmate.h @@ -53,6 +53,8 @@ #define PCI_ID_ANY 0xffff +#define PCI_DEV_CLASS_OTHER 0xff + #define PCI_CAP_MSI 0x05 #define PCI_CAP_MSIX 0x11 -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
