PCI: cache PCIe capability offset
There are a lot of codes that searches PCI express capability offset in the PCI configuration space using pci_find_capability(). Caching it in the struct pci_dev will reduce unncecessary search. This patch adds an additional 'pcie_cap' fields into struct pci_dev, which is initialized at pci device scan time (in set_pcie_port_type()). Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
1e5ad96790
commit
0efea00063
|
@ -692,6 +692,7 @@ static void set_pcie_port_type(struct pci_dev *pdev)
|
||||||
if (!pos)
|
if (!pos)
|
||||||
return;
|
return;
|
||||||
pdev->is_pcie = 1;
|
pdev->is_pcie = 1;
|
||||||
|
pdev->pcie_cap = pos;
|
||||||
pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, ®16);
|
pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, ®16);
|
||||||
pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
|
pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,6 +218,7 @@ struct pci_dev {
|
||||||
unsigned int class; /* 3 bytes: (base,sub,prog-if) */
|
unsigned int class; /* 3 bytes: (base,sub,prog-if) */
|
||||||
u8 revision; /* PCI revision, low byte of class word */
|
u8 revision; /* PCI revision, low byte of class word */
|
||||||
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
|
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
|
||||||
|
u8 pcie_cap; /* PCI-E capability offset */
|
||||||
u8 pcie_type; /* PCI-E device/port type */
|
u8 pcie_type; /* PCI-E device/port type */
|
||||||
u8 rom_base_reg; /* which config register controls the ROM */
|
u8 rom_base_reg; /* which config register controls the ROM */
|
||||||
u8 pin; /* which interrupt pin this device uses */
|
u8 pin; /* which interrupt pin this device uses */
|
||||||
|
|
Loading…
Reference in New Issue