@@ -80,7 +80,7 @@ pci_generic_fill_info(struct pci_dev *d, unsigned int flags)
struct pci_access *a = d->access;
unsigned int done = 0;
- if ((flags & (PCI_FILL_BASES | PCI_FILL_ROM_BASE)) && d->hdrtype < 0)
+ if ((flags & (PCI_FILL_SUBSYS | PCI_FILL_BASES | PCI_FILL_ROM_BASE)) && d->hdrtype < 0)
d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE) & 0x7f;
if (flags & PCI_FILL_IDENT)
@@ -96,6 +96,35 @@ pci_generic_fill_info(struct pci_dev *d, unsigned int flags)
done |= PCI_FILL_CLASS;
}
+ if (flags & PCI_FILL_PROGIF)
+ {
+ d->prog_if = pci_read_byte(d, PCI_CLASS_PROG);
+ done |= PCI_FILL_PROGIF;
+ }
+
+ if (flags & PCI_FILL_REVID)
+ {
+ d->rev_id = pci_read_byte(d, PCI_REVISION_ID);
+ done |= PCI_FILL_REVID;
+ }
+
+ if (flags & PCI_FILL_SUBSYS)
+ {
+ switch (d->hdrtype)
+ {
+ case PCI_HEADER_TYPE_NORMAL:
+ d->subsys_vendor_id = pci_read_word(d, PCI_SUBSYSTEM_VENDOR_ID);
+ d->subsys_id = pci_read_word(d, PCI_SUBSYSTEM_ID);
+ done |= PCI_FILL_SUBSYS;
+ break;
+ case PCI_HEADER_TYPE_CARDBUS:
+ d->subsys_vendor_id = pci_read_word(d, PCI_CB_SUBSYSTEM_VENDOR_ID);
+ d->subsys_id = pci_read_word(d, PCI_CB_SUBSYSTEM_ID);
+ done |= PCI_FILL_SUBSYS;
+ break;
+ }
+ }
+
if (flags & PCI_FILL_IRQ)
{
d->irq = pci_read_byte(d, PCI_INTERRUPT_LINE);