aer.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2006 Intel Corp.
  4. * Tom Long Nguyen (tom.l.nguyen@intel.com)
  5. * Zhang Yanmin (yanmin.zhang@intel.com)
  6. */
  7. #ifndef _AER_H_
  8. #define _AER_H_
  9. #include <linux/errno.h>
  10. #include <linux/types.h>
  11. #define AER_NONFATAL 0
  12. #define AER_FATAL 1
  13. #define AER_CORRECTABLE 2
  14. #define DPC_FATAL 3
  15. struct pci_dev;
  16. struct aer_header_log_regs {
  17. unsigned int dw0;
  18. unsigned int dw1;
  19. unsigned int dw2;
  20. unsigned int dw3;
  21. };
  22. struct aer_capability_regs {
  23. u32 header;
  24. u32 uncor_status;
  25. u32 uncor_mask;
  26. u32 uncor_severity;
  27. u32 cor_status;
  28. u32 cor_mask;
  29. u32 cap_control;
  30. struct aer_header_log_regs header_log;
  31. u32 root_command;
  32. u32 root_status;
  33. u16 cor_err_source;
  34. u16 uncor_err_source;
  35. };
  36. #if defined(CONFIG_PCIEAER)
  37. /* PCIe port driver needs this function to enable AER */
  38. int pci_enable_pcie_error_reporting(struct pci_dev *dev);
  39. int pci_disable_pcie_error_reporting(struct pci_dev *dev);
  40. int pci_aer_clear_nonfatal_status(struct pci_dev *dev);
  41. void pci_save_aer_state(struct pci_dev *dev);
  42. void pci_restore_aer_state(struct pci_dev *dev);
  43. #else
  44. static inline int pci_enable_pcie_error_reporting(struct pci_dev *dev)
  45. {
  46. return -EINVAL;
  47. }
  48. static inline int pci_disable_pcie_error_reporting(struct pci_dev *dev)
  49. {
  50. return -EINVAL;
  51. }
  52. static inline int pci_aer_clear_nonfatal_status(struct pci_dev *dev)
  53. {
  54. return -EINVAL;
  55. }
  56. static inline void pci_save_aer_state(struct pci_dev *dev) {}
  57. static inline void pci_restore_aer_state(struct pci_dev *dev) {}
  58. #endif
  59. void cper_print_aer(struct pci_dev *dev, int aer_severity,
  60. struct aer_capability_regs *aer);
  61. int cper_severity_to_aer(int cper_severity);
  62. void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn,
  63. int severity, struct aer_capability_regs *aer_regs);
  64. #endif //_AER_H_