PCI: properly read the BARs
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 29 Mar 2014 00:52:07 +0000 (17:52 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 29 Mar 2014 01:17:06 +0000 (18:17 -0700)
Was not stripping the MF bit, so multi-func BARs were coming back 0.

kern/arch/x86/pci.c

index fa4fda7..2cda26b 100644 (file)
@@ -234,6 +234,7 @@ uint32_t pci_getbar(struct pci_device *pcidev, unsigned int bar)
        if (bar >= MAX_PCI_BAR)
                panic("Nonexistant bar requested!");
        type = pcidev_read8(pcidev, PCI_HEADER_REG);
+       type &= ~0x80;  /* drop the MF bit */
        /* Only types 0 and 1 have BARS */
        if ((type != 0x00) && (type != 0x01))
                return 0;