aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/edac_device_sysfs.c107
1 files changed, 0 insertions, 107 deletions
diff --git a/drivers/edac/edac_device_sysfs.c b/drivers/edac/edac_device_sysfs.c
index 69305e637810..849d569dd2ce 100644
--- a/drivers/edac/edac_device_sysfs.c
+++ b/drivers/edac/edac_device_sysfs.c
@@ -21,113 +21,6 @@
21#define to_edacdev(k) container_of(k, struct edac_device_ctl_info, kobj) 21#define to_edacdev(k) container_of(k, struct edac_device_ctl_info, kobj)
22#define to_edacdev_attr(a) container_of(a, struct edacdev_attribute, attr) 22#define to_edacdev_attr(a) container_of(a, struct edacdev_attribute, attr)
23 23
24#ifdef DKT
25
26static ssize_t edac_dev_ue_count_show(struct edac_device_ctl_info *edac_dev,
27 char *data)
28{
29 return sprintf(data, "%d\n", edac_dev->ue_count);
30}
31
32static ssize_t edac_dev_ce_count_show(struct edac_device_ctl_info *edac_dev,
33 char *data)
34{
35 return sprintf(data, "%d\n", edac_dev->ce_count);
36}
37
38static ssize_t edac_dev_seconds_show(struct edac_device_ctl_info *edac_dev,
39 char *data)
40{
41 return sprintf(data, "%ld\n", (jiffies - edac_dev->start_time) / HZ);
42}
43
44static ssize_t edac_dev_ctl_name_show(struct edac_device_ctl_info *edac_dev,
45 char *data)
46{
47 return sprintf(data, "%s\n", edac_dev->ctl_name);
48}
49
50struct edacdev_attribute {
51 struct attribute attr;
52 ssize_t(*show) (struct edac_device_ctl_info *, char *);
53 ssize_t(*store) (struct edac_device_ctl_info *, const char *, size_t);
54};
55
56/* EDAC DEVICE show/store functions for top most object */
57static ssize_t edacdev_show(struct kobject *kobj, struct attribute *attr,
58 char *buffer)
59{
60 struct edac_device_ctl_info *edac_dev = to_edacdev(kobj);
61 struct edacdev_attribute *edacdev_attr = to_edacdev_attr(attr);
62
63 if (edacdev_attr->show)
64 return edacdev_attr->show(edac_dev, buffer);
65
66 return -EIO;
67}
68
69static ssize_t edacdev_store(struct kobject *kobj, struct attribute *attr,
70 const char *buffer, size_t count)
71{
72 struct edac_device_ctl_info *edac_dev = to_edacdev(kobj);
73 struct edacdev_attribute *edacdev_attr = to_edacdev_attr(attr);
74
75 if (edacdev_attr->store)
76 return edacdev_attr->store(edac_dev, buffer, count);
77
78 return -EIO;
79}
80
81static struct sysfs_ops edac_dev_ops = {
82 .show = edacdev_show,
83 .store = edacdev_store
84};
85
86#define EDACDEV_ATTR(_name,_mode,_show,_store) \
87static struct edacdev_attribute edac_dev_attr_##_name = { \
88 .attr = {.name = __stringify(_name), .mode = _mode }, \
89 .show = _show, \
90 .store = _store, \
91};
92
93/* default Control file */
94EDACDEV_ATTR(reset_counters, S_IWUSR, NULL, edac_dev_reset_counters_store);
95
96/* default Attribute files */
97EDACDEV_ATTR(mc_name, S_IRUGO, edac_dev_ctl_name_show, NULL);
98EDACDEV_ATTR(seconds_since_reset, S_IRUGO, edac_dev_seconds_show, NULL);
99EDACDEV_ATTR(ue_count, S_IRUGO, edac_dev_ue_count_show, NULL);
100EDACDEV_ATTR(ce_count, S_IRUGO, edac_dev_ce_count_show, NULL);
101
102static struct edacdev_attribute *edacdev_attr[] = {
103 &edacdev_attr_reset_counters,
104 &edacdev_attr_mc_name,
105 &edacdev_attr_seconds_since_reset,
106 &edacdev_attr_ue_count,
107 &edacdev_attr_ce_count,
108 NULL
109};
110
111/*
112 * Release of a Edac Device controlling instance
113 */
114static void edac_dev_instance_release(struct kobject *kobj)
115{
116 struct edac_device_ctl_info *edac_dev;
117
118 edac_dev = to_edacdev(kobj);
119 debugf0("%s() idx=%d\n", __func__, edac_dev->dev_idx);
120 complete(&edac_dev->kobj_complete);
121}
122
123static struct kobj_type ktype_device = {
124 .release = edac_dev_instance_release,
125 .sysfs_ops = &edacdev_ops,
126 .default_attrs = (struct attribute **)edacdev_attr,
127};
128
129#endif
130
131/************************** edac_device sysfs code and data **************/ 24/************************** edac_device sysfs code and data **************/
132 25
133/* 26/*