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 value); 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