Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/edac/edac_module.h
26278 views
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 <[email protected]>
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
127