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 */ 27int edac_mc_sysfs_init(void); 28void edac_mc_sysfs_exit(void); 29extern int edac_create_sysfs_mci_device(struct mem_ctl_info *mci, 30 const struct attribute_group **groups); 31extern void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci); 32extern int edac_mc_get_log_ue(void); 33extern int edac_mc_get_log_ce(void); 34extern int edac_mc_get_panic_on_ue(void); 35extern unsigned int edac_mc_get_poll_msec(void); 36 37unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf, 38 unsigned len); 39 40 /* on edac_device.c */ 41extern int edac_device_register_sysfs_main_kobj( 42 struct edac_device_ctl_info *edac_dev); 43extern void edac_device_unregister_sysfs_main_kobj( 44 struct edac_device_ctl_info *edac_dev); 45extern int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev); 46extern void edac_device_remove_sysfs(struct edac_device_ctl_info *edac_dev); 47 48/* edac core workqueue: single CPU mode */ 49int edac_workqueue_setup(void); 50void edac_workqueue_teardown(void); 51bool edac_queue_work(struct delayed_work *work, unsigned long delay); 52bool edac_stop_work(struct delayed_work *work); 53bool edac_mod_work(struct delayed_work *work, unsigned long delay); 54 55extern void edac_device_reset_delay_period(struct edac_device_ctl_info 56 *edac_dev, unsigned long msec); 57extern 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 66void edac_debugfs_init(void); 67void edac_debugfs_exit(void); 68void edac_create_debugfs_nodes(struct mem_ctl_info *mci); 69struct dentry *edac_debugfs_create_dir(const char *dirname); 70struct dentry * 71edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent); 72struct dentry * 73edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, 74 void *data, const struct file_operations *fops); 75void edac_debugfs_create_x8(const char *name, umode_t mode, 76 struct dentry *parent, u8 *value); 77void edac_debugfs_create_x16(const char *name, umode_t mode, 78 struct dentry *parent, u16 *value); 79void edac_debugfs_create_x32(const char *name, umode_t mode, 80 struct dentry *parent, u32 *value); 81#else 82static inline void edac_debugfs_init(void) { } 83static inline void edac_debugfs_exit(void) { } 84static inline void edac_create_debugfs_nodes(struct mem_ctl_info *mci) { } 85static inline struct dentry *edac_debugfs_create_dir(const char *dirname) { return NULL; } 86static inline struct dentry * 87edac_debugfs_create_dir_at(const char *dirname, struct dentry *parent) { return NULL; } 88static inline struct dentry * 89edac_debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, 90 void *data, const struct file_operations *fops) { return NULL; } 91static inline void edac_debugfs_create_x8(const char *name, umode_t mode, 92 struct dentry *parent, u8 *value) { } 93static inline void edac_debugfs_create_x16(const char *name, umode_t mode, 94 struct dentry *parent, u16 *value) { } 95static 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 103extern void edac_pci_do_parity_check(void); 104extern void edac_pci_clear_parity_errors(void); 105extern int edac_sysfs_pci_setup(void); 106extern void edac_sysfs_pci_teardown(void); 107extern int edac_pci_get_check_errors(void); 108extern int edac_pci_get_poll_msec(void); 109extern void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci); 110extern void edac_pci_handle_pe(struct edac_pci_ctl_info *pci, const char *msg); 111extern 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