4 #include "threads/io.h"
5 #include "devices/pci.h"
8 pci_read_config (unsigned bus, unsigned dev, unsigned func, unsigned reg)
16 0x80000000 | (bus << 16) | (dev << 11) | (func << 8) | (reg << 2));
21 scan_device (int bus, int dev, int func)
24 int dev_id, vendor_id;
28 for (reg = 0; reg < 16; reg++)
29 cfg[reg] = pci_read_config (bus, dev, func, reg);
30 dev_id = cfg[0] >> 16;
31 vendor_id = cfg[0] & 0xffff;
33 if (dev_id == 0 || dev_id == 0xffff
34 || vendor_id == 0 || vendor_id == 0xffff)
37 printf ("%04x:%02x:%02x.%x PCI device %04x:%04x\n",
38 0, bus, dev, func, vendor_id, dev_id);
39 for (line = 0; line < 4; line++)
43 printf ("%02x:", line * 16);
44 for (byte = 0; byte < 16; byte++)
45 printf (" %02x", ((uint8_t *) cfg)[line * 16 + byte]);
50 return cfg[3] & 0x00800000;
58 printf ("PCI BUS: Scanning \n");
60 for (dev = 0; dev < 32; dev++)
62 if (scan_device (0, dev, 0))
66 for (func = 1; func < 8; func++)
67 scan_device (0, dev, func);
71 printf ("PCI BUS: Done \n");