at v4.17-rc2 129 lines 4.7 kB view raw
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 */ 26int edac_mc_sysfs_init(void); 27void edac_mc_sysfs_exit(void); 28extern int edac_create_sysfs_mci_device(struct mem_ctl_info *mci, 29 const struct attribute_group **groups); 30extern void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci); 31void edac_unregister_sysfs(struct mem_ctl_info *mci); 32extern int edac_get_log_ue(void); 33extern int edac_get_log_ce(void); 34extern int edac_get_panic_on_ue(void); 35extern int edac_mc_get_log_ue(void); 36extern int edac_mc_get_log_ce(void); 37extern int edac_mc_get_panic_on_ue(void); 38extern int edac_get_poll_msec(void); 39extern int edac_mc_get_poll_msec(void); 40 41unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf, 42 unsigned len); 43 44 /* on edac_device.c */ 45extern int edac_device_register_sysfs_main_kobj( 46 struct edac_device_ctl_info *edac_dev); 47extern void edac_device_unregister_sysfs_main_kobj( 48 struct edac_device_ctl_info *edac_dev); 49extern int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev); 50extern void edac_device_remove_sysfs(struct edac_device_ctl_info *edac_dev); 51 52/* edac core workqueue: single CPU mode */ 53int edac_workqueue_setup(void); 54void edac_workqueue_teardown(void); 55bool edac_queue_work(struct delayed_work *work, unsigned long delay); 56bool edac_stop_work(struct delayed_work *work); 57bool edac_mod_work(struct delayed_work *work, unsigned long delay); 58 59extern void edac_device_reset_delay_period(struct edac_device_ctl_info 60 *edac_dev, unsigned long value); 61extern void edac_mc_reset_delay_period(unsigned long value); 62 63extern 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 72int edac_debugfs_init(void); 73void edac_debugfs_exit(void); 74int edac_create_debugfs_nodes(struct mem_ctl_info *mci); 75struct dentry *edac_debugfs_create_dir(const char *dirname); 76struct dentry * 77edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent); 78struct dentry * 79edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, 80 void *data, const struct file_operations *fops); 81struct dentry * 82edac_debugfs_create_x8(const char *name, umode_t mode, struct dentry *parent, u8 *value); 83struct dentry * 84edac_debugfs_create_x16(const char *name, umode_t mode, struct dentry *parent, u16 *value); 85#else 86static inline int edac_debugfs_init(void) { return -ENODEV; } 87static inline void edac_debugfs_exit(void) { } 88static inline int edac_create_debugfs_nodes(struct mem_ctl_info *mci) { return 0; } 89static inline struct dentry *edac_debugfs_create_dir(const char *dirname) { return NULL; } 90static inline struct dentry * 91edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent) { return NULL; } 92static inline struct dentry * 93edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, 94 void *data, const struct file_operations *fops) { return NULL; } 95static inline struct dentry * 96edac_debugfs_create_x8(const char *name, umode_t mode, 97 struct dentry *parent, u8 *value) { return NULL; } 98static inline struct dentry * 99edac_debugfs_create_x16(const char *name, umode_t mode, 100 struct dentry *parent, u16 *value) { return NULL; } 101#endif 102 103/* 104 * EDAC PCI functions 105 */ 106#ifdef CONFIG_PCI 107extern void edac_pci_do_parity_check(void); 108extern void edac_pci_clear_parity_errors(void); 109extern int edac_sysfs_pci_setup(void); 110extern void edac_sysfs_pci_teardown(void); 111extern int edac_pci_get_check_errors(void); 112extern int edac_pci_get_poll_msec(void); 113extern void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci); 114extern void edac_pci_handle_pe(struct edac_pci_ctl_info *pci, const char *msg); 115extern void edac_pci_handle_npe(struct edac_pci_ctl_info *pci, 116 const char *msg); 117#else /* CONFIG_PCI */ 118/* pre-process these away */ 119#define edac_pci_do_parity_check() 120#define edac_pci_clear_parity_errors() 121#define edac_sysfs_pci_setup() (0) 122#define edac_sysfs_pci_teardown() 123#define edac_pci_get_check_errors() 124#define edac_pci_get_poll_msec() 125#define edac_pci_handle_pe() 126#define edac_pci_handle_npe() 127#endif /* CONFIG_PCI */ 128 129#endif /* __EDAC_MODULE_H__ */