diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2013-06-06 14:10:47 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-06-06 16:33:27 -0400 |
commit | a6bd73cdc93ec03781ff99beb5b465fd6ea3a784 (patch) | |
tree | 86adb5f0cd269bcb0273b3611f8e323ec5c7fd78 /drivers/pci/pcie | |
parent | 8b8d2b658f2cb7092672a56c72b41121ce786d93 (diff) |
PCI/AER: Factor out HEST device type matching
This factors out the matching of HEST structure type and PCIe device type
to improve readability. No functional change.
Tested-by: Betty Dall <betty.dall@hp.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/pcie')
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv_acpi.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/drivers/pci/pcie/aer/aerdrv_acpi.c b/drivers/pci/pcie/aer/aerdrv_acpi.c index 4f798ab629c8..e7ea5735a61f 100644 --- a/drivers/pci/pcie/aer/aerdrv_acpi.c +++ b/drivers/pci/pcie/aer/aerdrv_acpi.c | |||
@@ -29,6 +29,22 @@ static inline int hest_match_pci(struct acpi_hest_aer_common *p, | |||
29 | p->function == PCI_FUNC(pci->devfn)); | 29 | p->function == PCI_FUNC(pci->devfn)); |
30 | } | 30 | } |
31 | 31 | ||
32 | static inline bool hest_match_type(struct acpi_hest_header *hest_hdr, | ||
33 | struct pci_dev *dev) | ||
34 | { | ||
35 | u16 hest_type = hest_hdr->type; | ||
36 | u8 pcie_type = pci_pcie_type(dev); | ||
37 | |||
38 | if ((hest_type == ACPI_HEST_TYPE_AER_ROOT_PORT && | ||
39 | pcie_type == PCI_EXP_TYPE_ROOT_PORT) || | ||
40 | (hest_type == ACPI_HEST_TYPE_AER_ENDPOINT && | ||
41 | pcie_type == PCI_EXP_TYPE_ENDPOINT) || | ||
42 | (hest_type == ACPI_HEST_TYPE_AER_BRIDGE && | ||
43 | (dev->class >> 16) == PCI_BASE_CLASS_BRIDGE)) | ||
44 | return true; | ||
45 | return false; | ||
46 | } | ||
47 | |||
32 | struct aer_hest_parse_info { | 48 | struct aer_hest_parse_info { |
33 | struct pci_dev *pci_dev; | 49 | struct pci_dev *pci_dev; |
34 | int firmware_first; | 50 | int firmware_first; |
@@ -38,28 +54,11 @@ static int aer_hest_parse(struct acpi_hest_header *hest_hdr, void *data) | |||
38 | { | 54 | { |
39 | struct aer_hest_parse_info *info = data; | 55 | struct aer_hest_parse_info *info = data; |
40 | struct acpi_hest_aer_common *p; | 56 | struct acpi_hest_aer_common *p; |
41 | u8 pcie_type = 0; | ||
42 | u8 bridge = 0; | ||
43 | int ff = 0; | 57 | int ff = 0; |
44 | 58 | ||
45 | switch (hest_hdr->type) { | ||
46 | case ACPI_HEST_TYPE_AER_ROOT_PORT: | ||
47 | pcie_type = PCI_EXP_TYPE_ROOT_PORT; | ||
48 | break; | ||
49 | case ACPI_HEST_TYPE_AER_ENDPOINT: | ||
50 | pcie_type = PCI_EXP_TYPE_ENDPOINT; | ||
51 | break; | ||
52 | case ACPI_HEST_TYPE_AER_BRIDGE: | ||
53 | if ((info->pci_dev->class >> 16) == PCI_BASE_CLASS_BRIDGE) | ||
54 | bridge = 1; | ||
55 | break; | ||
56 | default: | ||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | p = (struct acpi_hest_aer_common *)(hest_hdr + 1); | 59 | p = (struct acpi_hest_aer_common *)(hest_hdr + 1); |
61 | if (p->flags & ACPI_HEST_GLOBAL) { | 60 | if (p->flags & ACPI_HEST_GLOBAL) { |
62 | if ((pci_pcie_type(info->pci_dev) == pcie_type) || bridge) | 61 | if (hest_match_type(hest_hdr, info->pci_dev)) |
63 | ff = !!(p->flags & ACPI_HEST_FIRMWARE_FIRST); | 62 | ff = !!(p->flags & ACPI_HEST_FIRMWARE_FIRST); |
64 | } else | 63 | } else |
65 | if (hest_match_pci(p, info->pci_dev)) | 64 | if (hest_match_pci(p, info->pci_dev)) |