1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | |
3 | /* |
4 | * edac_module.h |
5 | * |
6 | * For defining functions/data for within the EDAC_CORE module only |
7 | * |
8 | * written by doug thompson <norsk5@xmission.h> |
9 | */ |
10 | |
11 | #ifndef __EDAC_MODULE_H__ |
12 | #define __EDAC_MODULE_H__ |
13 | |
14 | #include <acpi/ghes.h> |
15 | #include "edac_mc.h" |
16 | #include "edac_pci.h" |
17 | #include "edac_device.h" |
18 | |
19 | /* |
20 | * INTERNAL EDAC MODULE: |
21 | * EDAC memory controller sysfs create/remove functions |
22 | * and setup/teardown functions |
23 | * |
24 | * edac_mc objects |
25 | */ |
26 | /* on edac_mc_sysfs.c */ |
27 | int edac_mc_sysfs_init(void); |
28 | void edac_mc_sysfs_exit(void); |
29 | extern int edac_create_sysfs_mci_device(struct mem_ctl_info *mci, |
30 | const struct attribute_group **groups); |
31 | extern void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci); |
32 | extern int edac_mc_get_log_ue(void); |
33 | extern int edac_mc_get_log_ce(void); |
34 | extern int edac_mc_get_panic_on_ue(void); |
35 | extern unsigned int edac_mc_get_poll_msec(void); |
36 | |
37 | unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf, |
38 | unsigned len); |
39 | |
40 | /* on edac_device.c */ |
41 | extern int edac_device_register_sysfs_main_kobj( |
42 | struct edac_device_ctl_info *edac_dev); |
43 | extern void edac_device_unregister_sysfs_main_kobj( |
44 | struct edac_device_ctl_info *edac_dev); |
45 | extern int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev); |
46 | extern void edac_device_remove_sysfs(struct edac_device_ctl_info *edac_dev); |
47 | |
48 | /* edac core workqueue: single CPU mode */ |
49 | int edac_workqueue_setup(void); |
50 | void edac_workqueue_teardown(void); |
51 | bool edac_queue_work(struct delayed_work *work, unsigned long delay); |
52 | bool edac_stop_work(struct delayed_work *work); |
53 | bool edac_mod_work(struct delayed_work *work, unsigned long delay); |
54 | |
55 | extern void edac_device_reset_delay_period(struct edac_device_ctl_info |
56 | *edac_dev, unsigned long msec); |
57 | extern void edac_mc_reset_delay_period(unsigned long value); |
58 | |
59 | /* |
60 | * EDAC debugfs functions |
61 | */ |
62 | |
63 | #define edac_debugfs_remove_recursive debugfs_remove_recursive |
64 | #define edac_debugfs_remove debugfs_remove |
65 | #ifdef CONFIG_EDAC_DEBUG |
66 | void edac_debugfs_init(void); |
67 | void edac_debugfs_exit(void); |
68 | void edac_create_debugfs_nodes(struct mem_ctl_info *mci); |
69 | struct dentry *edac_debugfs_create_dir(const char *dirname); |
70 | struct dentry * |
71 | edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent); |
72 | struct dentry * |
73 | edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, |
74 | void *data, const struct file_operations *fops); |
75 | void edac_debugfs_create_x8(const char *name, umode_t mode, |
76 | struct dentry *parent, u8 *value); |
77 | void edac_debugfs_create_x16(const char *name, umode_t mode, |
78 | struct dentry *parent, u16 *value); |
79 | void edac_debugfs_create_x32(const char *name, umode_t mode, |
80 | struct dentry *parent, u32 *value); |
81 | #else |
82 | static inline void edac_debugfs_init(void) { } |
83 | static inline void edac_debugfs_exit(void) { } |
84 | static inline void edac_create_debugfs_nodes(struct mem_ctl_info *mci) { } |
85 | static inline struct dentry *edac_debugfs_create_dir(const char *dirname) { return NULL; } |
86 | static inline struct dentry * |
87 | edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent) { return NULL; } |
88 | static inline struct dentry * |
89 | edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, |
90 | void *data, const struct file_operations *fops) { return NULL; } |
91 | static inline void edac_debugfs_create_x8(const char *name, umode_t mode, |
92 | struct dentry *parent, u8 *value) { } |
93 | static inline void edac_debugfs_create_x16(const char *name, umode_t mode, |
94 | struct dentry *parent, u16 *value) { } |
95 | static inline void edac_debugfs_create_x32(const char *name, umode_t mode, |
96 | struct dentry *parent, u32 *value) { } |
97 | #endif |
98 | |
99 | /* |
100 | * EDAC PCI functions |
101 | */ |
102 | #ifdef CONFIG_PCI |
103 | extern void edac_pci_do_parity_check(void); |
104 | extern void edac_pci_clear_parity_errors(void); |
105 | extern int edac_sysfs_pci_setup(void); |
106 | extern void edac_sysfs_pci_teardown(void); |
107 | extern int edac_pci_get_check_errors(void); |
108 | extern int edac_pci_get_poll_msec(void); |
109 | extern void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci); |
110 | extern void edac_pci_handle_pe(struct edac_pci_ctl_info *pci, const char *msg); |
111 | extern void edac_pci_handle_npe(struct edac_pci_ctl_info *pci, |
112 | const char *msg); |
113 | #else /* CONFIG_PCI */ |
114 | /* pre-process these away */ |
115 | #define edac_pci_do_parity_check() |
116 | #define edac_pci_clear_parity_errors() |
117 | #define edac_sysfs_pci_setup() (0) |
118 | #define edac_sysfs_pci_teardown() |
119 | #define edac_pci_get_check_errors() |
120 | #define edac_pci_get_poll_msec() |
121 | #define edac_pci_handle_pe() |
122 | #define edac_pci_handle_npe() |
123 | #endif /* CONFIG_PCI */ |
124 | |
125 | #endif /* __EDAC_MODULE_H__ */ |
126 | |