Adds PCI config dump helper
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 23 Jan 2015 20:42:08 +0000 (15:42 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sun, 1 Mar 2015 14:35:59 +0000 (09:35 -0500)
You can probably do this from userspace too, via devarch's PIO hooks.

kern/arch/x86/pci.c
kern/arch/x86/pci.h

index 6847516..1aa5435 100644 (file)
@@ -552,3 +552,13 @@ uint16_t pci_get_subdevice(struct pci_device *pcidev)
        }
        return -1;
 }
+
+void pci_dump_config(struct pci_device *pcidev, size_t len)
+{
+       if (len > 256)
+               printk("FYI, printing more than 256 bytes of PCI space\n");
+       printk("PCI Config space for %02x:%02x:%02x\n---------------------\n",
+              pcidev->bus, pcidev->dev, pcidev->func);
+       for (int i = 0; i < len; i += 4)
+               printk("0x%03x | %08x\n", i, pcidev_read32(pcidev, i));
+}
index de88646..ded9b0b 100644 (file)
@@ -411,6 +411,7 @@ uint16_t pci_get_vendor(struct pci_device *pcidev);
 uint16_t pci_get_device(struct pci_device *pcidev);
 uint16_t pci_get_subvendor(struct pci_device *pcidev);
 uint16_t pci_get_subdevice(struct pci_device *pcidev);
+void pci_dump_config(struct pci_device *pcidev, size_t len);
 
 /* MSI functions, msi.c */
 int pci_msi_enable(struct pci_device *p, uint64_t vec);