aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci.h
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2018-07-19 16:16:55 -0500
committerBjorn Helgaas <bhelgaas@google.com>2018-07-19 16:16:55 -0500
commit1e4511604dfaf6d1642603ff89effb9e93682716 (patch)
tree818e07661f0c3800ea7c05c1ce30d66bb74559a2 /drivers/pci/pci.h
parentLinux 4.18-rc1 (diff)
downloadlinux-dev-1e4511604dfaf6d1642603ff89effb9e93682716.tar.xz
linux-dev-1e4511604dfaf6d1642603ff89effb9e93682716.zip
PCI/AER: Expose internal API for obtaining AER information
Export some common AER functions and structures for other PCI core drivers to use. Since this is making the function externally visible inside the PCI core, prepend "aer_" to the function name. Signed-off-by: Keith Busch <keith.busch@intel.com> [bhelgaas: move AER declarations from linux/aer.h to drivers/pci/pci.h] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Sinan Kaya <okaya@kernel.org> Reviewed-by: Oza Pawandeep <poza@codeaurora.org>
Diffstat (limited to 'drivers/pci/pci.h')
-rw-r--r--drivers/pci/pci.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index c358e7a07f3f..4f723442f602 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -300,6 +300,34 @@ static inline bool pci_dev_is_disconnected(const struct pci_dev *dev)
return test_bit(PCI_DEV_DISCONNECTED, &dev->priv_flags);
}
+#ifdef CONFIG_PCIEAER
+#include <linux/aer.h>
+
+#define AER_MAX_MULTI_ERR_DEVICES 5 /* Not likely to have more */
+
+struct aer_err_info {
+ struct pci_dev *dev[AER_MAX_MULTI_ERR_DEVICES];
+ int error_dev_num;
+
+ unsigned int id:16;
+
+ unsigned int severity:2; /* 0:NONFATAL | 1:FATAL | 2:COR */
+ unsigned int __pad1:5;
+ unsigned int multi_error_valid:1;
+
+ unsigned int first_error:5;
+ unsigned int __pad2:2;
+ unsigned int tlp_header_valid:1;
+
+ unsigned int status; /* COR/UNCOR Error Status */
+ unsigned int mask; /* COR/UNCOR Error Mask */
+ struct aer_header_log_regs tlp; /* TLP Header */
+};
+
+int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info);
+void aer_print_error(struct pci_dev *dev, struct aer_err_info *info);
+#endif /* CONFIG_PCIEAER */
+
#ifdef CONFIG_PCI_ATS
void pci_restore_ats_state(struct pci_dev *dev);
#else