diff options
Diffstat (limited to 'include/acpi/ghes.h')
-rw-r--r-- | include/acpi/ghes.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/include/acpi/ghes.h b/include/acpi/ghes.h new file mode 100644 index 000000000000..720446cb243e --- /dev/null +++ b/include/acpi/ghes.h | |||
@@ -0,0 +1,72 @@ | |||
1 | #include <acpi/apei.h> | ||
2 | #include <acpi/hed.h> | ||
3 | |||
4 | /* | ||
5 | * One struct ghes is created for each generic hardware error source. | ||
6 | * It provides the context for APEI hardware error timer/IRQ/SCI/NMI | ||
7 | * handler. | ||
8 | * | ||
9 | * estatus: memory buffer for error status block, allocated during | ||
10 | * HEST parsing. | ||
11 | */ | ||
12 | #define GHES_TO_CLEAR 0x0001 | ||
13 | #define GHES_EXITING 0x0002 | ||
14 | |||
15 | struct ghes { | ||
16 | struct acpi_hest_generic *generic; | ||
17 | struct acpi_hest_generic_status *estatus; | ||
18 | u64 buffer_paddr; | ||
19 | unsigned long flags; | ||
20 | union { | ||
21 | struct list_head list; | ||
22 | struct timer_list timer; | ||
23 | unsigned int irq; | ||
24 | }; | ||
25 | }; | ||
26 | |||
27 | struct ghes_estatus_node { | ||
28 | struct llist_node llnode; | ||
29 | struct acpi_hest_generic *generic; | ||
30 | struct ghes *ghes; | ||
31 | }; | ||
32 | |||
33 | struct ghes_estatus_cache { | ||
34 | u32 estatus_len; | ||
35 | atomic_t count; | ||
36 | struct acpi_hest_generic *generic; | ||
37 | unsigned long long time_in; | ||
38 | struct rcu_head rcu; | ||
39 | }; | ||
40 | |||
41 | enum { | ||
42 | GHES_SEV_NO = 0x0, | ||
43 | GHES_SEV_CORRECTED = 0x1, | ||
44 | GHES_SEV_RECOVERABLE = 0x2, | ||
45 | GHES_SEV_PANIC = 0x3, | ||
46 | }; | ||
47 | |||
48 | /* From drivers/edac/ghes_edac.c */ | ||
49 | |||
50 | #ifdef CONFIG_EDAC_GHES | ||
51 | void ghes_edac_report_mem_error(struct ghes *ghes, int sev, | ||
52 | struct cper_sec_mem_err *mem_err); | ||
53 | |||
54 | int ghes_edac_register(struct ghes *ghes, struct device *dev); | ||
55 | |||
56 | void ghes_edac_unregister(struct ghes *ghes); | ||
57 | |||
58 | #else | ||
59 | static inline void ghes_edac_report_mem_error(struct ghes *ghes, int sev, | ||
60 | struct cper_sec_mem_err *mem_err) | ||
61 | { | ||
62 | } | ||
63 | |||
64 | static inline int ghes_edac_register(struct ghes *ghes, struct device *dev) | ||
65 | { | ||
66 | return 0; | ||
67 | } | ||
68 | |||
69 | static inline void ghes_edac_unregister(struct ghes *ghes) | ||
70 | { | ||
71 | } | ||
72 | #endif | ||