From 2727be57d2917c6fe0876023e33f7f45554a900f Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Tue, 11 Apr 2006 10:17:30 +0000
Subject: [PATCH] Macro for SysFS attribute definition

---
 master/domain.c  |  6 +-----
 master/globals.h |  8 ++++++++
 master/master.c  |  6 +-----
 master/module.c  |  4 +---
 master/slave.c   | 24 +++++-------------------
 5 files changed, 16 insertions(+), 32 deletions(-)

diff --git a/master/domain.c b/master/domain.c
index f361e2fb..cf3f5cef 100644
--- a/master/domain.c
+++ b/master/domain.c
@@ -19,11 +19,7 @@ ssize_t ec_show_domain_attribute(struct kobject *, struct attribute *, char *);
 
 /*****************************************************************************/
 
-static struct attribute attr_data_size = {
-    .name = "data_size",
-    .owner = THIS_MODULE,
-    .mode = S_IRUGO
-};
+EC_SYSFS_READ_ATTR(data_size);
 
 static struct attribute *def_attrs[] = {
     &attr_data_size,
diff --git a/master/globals.h b/master/globals.h
index 08807e9e..d8f93e10 100644
--- a/master/globals.h
+++ b/master/globals.h
@@ -43,6 +43,14 @@
 #define EC_DBG(fmt, args...) \
     printk(KERN_DEBUG "EtherCAT DEBUG: " fmt, ##args)
 
+#define EC_LIT(X) #X
+#define EC_STR(X) EC_LIT(X)
+
+#define EC_SYSFS_READ_ATTR(NAME) \
+    static struct attribute attr_##NAME = { \
+        .name = EC_STR(NAME), .owner = THIS_MODULE, .mode = S_IRUGO \
+    }
+
 /*****************************************************************************/
 
 extern void ec_print_data(const uint8_t *, size_t);
diff --git a/master/master.c b/master/master.c
index 80ffd769..347628c5 100644
--- a/master/master.c
+++ b/master/master.c
@@ -29,11 +29,7 @@ ssize_t ec_show_master_attribute(struct kobject *, struct attribute *, char *);
 
 /*****************************************************************************/
 
-static struct attribute attr_slave_count = {
-    .name = "slave_count",
-    .owner = THIS_MODULE,
-    .mode = S_IRUGO
-};
+EC_SYSFS_READ_ATTR(slave_count);
 
 static struct attribute *ec_def_attrs[] = {
     &attr_slave_count,
diff --git a/master/module.c b/master/module.c
index b4496e4e..ab1a3717 100644
--- a/master/module.c
+++ b/master/module.c
@@ -22,6 +22,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 
+#include "globals.h"
 #include "master.h"
 #include "device.h"
 
@@ -32,9 +33,6 @@ void __exit ec_cleanup_module(void);
 
 /*****************************************************************************/
 
-#define EC_LIT(X) #X
-#define EC_STR(X) EC_LIT(X)
-
 #define COMPILE_INFO "Revision " EC_STR(SVNREV) \
                      ", compiled by " EC_STR(USER) \
                      " at " __DATE__ " " __TIME__
diff --git a/master/slave.c b/master/slave.c
index afd30aed..82a56a81 100644
--- a/master/slave.c
+++ b/master/slave.c
@@ -28,25 +28,11 @@ ssize_t ec_show_slave_attribute(struct kobject *, struct attribute *, char *);
 
 /*****************************************************************************/
 
-static struct attribute attr_ring_position = {
-    .name = "ring_position", .owner = THIS_MODULE, .mode = S_IRUGO
-};
-
-static struct attribute attr_station_address = {
-    .name = "station_address", .owner = THIS_MODULE, .mode = S_IRUGO
-};
-
-static struct attribute attr_vendor_name = {
-    .name = "vendor_name", .owner = THIS_MODULE, .mode = S_IRUGO
-};
-
-static struct attribute attr_product_name = {
-    .name = "product_name", .owner = THIS_MODULE, .mode = S_IRUGO
-};
-
-static struct attribute attr_product_desc = {
-    .name = "product_description", .owner = THIS_MODULE, .mode = S_IRUGO
-};
+EC_SYSFS_READ_ATTR(ring_position);
+EC_SYSFS_READ_ATTR(station_address);
+EC_SYSFS_READ_ATTR(vendor_name);
+EC_SYSFS_READ_ATTR(product_name);
+EC_SYSFS_READ_ATTR(product_desc);
 
 static struct attribute *def_attrs[] = {
     &attr_ring_position,
-- 
GitLab