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