Skip to content

Commit

Permalink
PCI: Read capability list as dwords, not bytes
Browse files Browse the repository at this point in the history
Reading both the capability ID and "next" pointer at the same time lets us
parse the list with half the number of config reads.

Signed-off-by: Sean O. Stalley <sean.stalley@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
  • Loading branch information
Sean O. Stalley authored and Bjorn Helgaas committed Apr 9, 2015
1 parent 387d375 commit 55db320
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions drivers/pci/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,19 +145,22 @@ static int __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn,
u8 pos, int cap, int *ttl)
{
u8 id;
u16 ent;

pci_bus_read_config_byte(bus, devfn, pos, &pos);

while ((*ttl)--) {
pci_bus_read_config_byte(bus, devfn, pos, &pos);
if (pos < 0x40)
break;
pos &= ~3;
pci_bus_read_config_byte(bus, devfn, pos + PCI_CAP_LIST_ID,
&id);
pci_bus_read_config_word(bus, devfn, pos, &ent);

id = ent & 0xff;
if (id == 0xff)
break;
if (id == cap)
return pos;
pos += PCI_CAP_LIST_NEXT;
pos = (ent >> 8);
}
return 0;
}
Expand Down

0 comments on commit 55db320

Please sign in to comment.