aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/edac/edac_mc_sysfs.c117
1 files changed, 1 insertions, 116 deletions
diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 7bb9c1532b90..cbe1a17e42f7 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -123,16 +123,6 @@ static const char *edac_caps[] = {
123 123
124 124
125 125
126/*
127 * /sys/devices/system/edac/mc;
128 * data structures and methods
129 */
130static ssize_t memctrl_int_show(void *ptr, char *buffer)
131{
132 int *value = (int *)ptr;
133 return sprintf(buffer, "%u\n", *value);
134}
135
136static ssize_t memctrl_int_store(void *ptr, const char *buffer, size_t count) 126static ssize_t memctrl_int_store(void *ptr, const char *buffer, size_t count)
137{ 127{
138 int *value = (int *)ptr; 128 int *value = (int *)ptr;
@@ -143,23 +133,6 @@ static ssize_t memctrl_int_store(void *ptr, const char *buffer, size_t count)
143 return count; 133 return count;
144} 134}
145 135
146/*
147 * mc poll_msec time value
148 */
149static ssize_t poll_msec_int_store(void *ptr, const char *buffer, size_t count)
150{
151 int *value = (int *)ptr;
152
153 if (isdigit(*buffer)) {
154 *value = simple_strtoul(buffer, NULL, 0);
155
156 /* notify edac_mc engine to reset the poll period */
157 edac_mc_reset_delay_period(*value);
158 }
159
160 return count;
161}
162
163 136
164/* EDAC sysfs CSROW data structures and methods 137/* EDAC sysfs CSROW data structures and methods
165 */ 138 */
@@ -669,98 +642,10 @@ static struct kobj_type ktype_mci = {
669 .default_attrs = (struct attribute **)mci_attr, 642 .default_attrs = (struct attribute **)mci_attr,
670}; 643};
671 644
672/* show/store, tables, etc for the MC kset */
673
674
675struct memctrl_dev_attribute {
676 struct attribute attr;
677 void *value;
678 ssize_t(*show) (void *, char *);
679 ssize_t(*store) (void *, const char *, size_t);
680};
681
682/* Set of show/store abstract level functions for memory control object */
683static ssize_t memctrl_dev_show(struct kobject *kobj,
684 struct attribute *attr, char *buffer)
685{
686 struct memctrl_dev_attribute *memctrl_dev;
687 memctrl_dev = (struct memctrl_dev_attribute *)attr;
688
689 if (memctrl_dev->show)
690 return memctrl_dev->show(memctrl_dev->value, buffer);
691
692 return -EIO;
693}
694
695static ssize_t memctrl_dev_store(struct kobject *kobj, struct attribute *attr,
696 const char *buffer, size_t count)
697{
698 struct memctrl_dev_attribute *memctrl_dev;
699 memctrl_dev = (struct memctrl_dev_attribute *)attr;
700
701 if (memctrl_dev->store)
702 return memctrl_dev->store(memctrl_dev->value, buffer, count);
703
704 return -EIO;
705}
706
707static struct sysfs_ops memctrlfs_ops = {
708 .show = memctrl_dev_show,
709 .store = memctrl_dev_store
710};
711
712#define MEMCTRL_ATTR(_name, _mode, _show, _store) \
713static struct memctrl_dev_attribute attr_##_name = { \
714 .attr = {.name = __stringify(_name), .mode = _mode }, \
715 .value = &_name, \
716 .show = _show, \
717 .store = _store, \
718};
719
720#define MEMCTRL_STRING_ATTR(_name, _data, _mode, _show, _store) \
721static struct memctrl_dev_attribute attr_##_name = { \
722 .attr = {.name = __stringify(_name), .mode = _mode }, \
723 .value = _data, \
724 .show = _show, \
725 .store = _store, \
726};
727
728/* csrow<id> control files */
729MEMCTRL_ATTR(edac_mc_panic_on_ue,
730 S_IRUGO | S_IWUSR, memctrl_int_show, memctrl_int_store);
731
732MEMCTRL_ATTR(edac_mc_log_ue,
733 S_IRUGO | S_IWUSR, memctrl_int_show, memctrl_int_store);
734
735MEMCTRL_ATTR(edac_mc_log_ce,
736 S_IRUGO | S_IWUSR, memctrl_int_show, memctrl_int_store);
737
738MEMCTRL_ATTR(edac_mc_poll_msec,
739 S_IRUGO | S_IWUSR, memctrl_int_show, poll_msec_int_store);
740
741/* Base Attributes of the memory ECC object */
742static struct memctrl_dev_attribute *memctrl_attr[] = {
743 &attr_edac_mc_panic_on_ue,
744 &attr_edac_mc_log_ue,
745 &attr_edac_mc_log_ce,
746 &attr_edac_mc_poll_msec,
747 NULL,
748};
749
750
751/* the ktype for the mc_kset internal kobj */
752static struct kobj_type ktype_mc_set_attribs = {
753 .sysfs_ops = &memctrlfs_ops,
754 .default_attrs = (struct attribute **)memctrl_attr,
755};
756
757/* EDAC memory controller sysfs kset: 645/* EDAC memory controller sysfs kset:
758 * /sys/devices/system/edac/mc 646 * /sys/devices/system/edac/mc
759 */ 647 */
760static struct kset mc_kset = { 648static struct kset mc_kset;
761 .kobj = {.ktype = &ktype_mc_set_attribs },
762};
763
764 649
765/* 650/*
766 * edac_mc_register_sysfs_main_kobj 651 * edac_mc_register_sysfs_main_kobj