Răsfoiți Sursa

PATCH [2/2] Documentation/filesystems/sysfs.txt: fix descriptions of device attributes

Fix descriptions of device attributes to be consistent with the actual
implementations in include/linux/device.h

Signed-off-by: Mike Murphy <mamurph[at]cs.clemson.edu>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Mike Murphy 16 ani în urmă
părinte
comite
f8a1af6bbc
1 a modificat fișierele cu 28 adăugiri și 22 ștergeri
  1. 28 22
      Documentation/filesystems/sysfs.txt

+ 28 - 22
Documentation/filesystems/sysfs.txt

@@ -2,8 +2,10 @@
 sysfs - _The_ filesystem for exporting kernel objects. 
 sysfs - _The_ filesystem for exporting kernel objects. 
 
 
 Patrick Mochel	<mochel@osdl.org>
 Patrick Mochel	<mochel@osdl.org>
+Mike Murphy <mamurph@cs.clemson.edu>
 
 
-10 January 2003
+Revised:    22 February 2009
+Original:   10 January 2003
 
 
 
 
 What it is:
 What it is:
@@ -64,12 +66,13 @@ An attribute definition is simply:
 
 
 struct attribute {
 struct attribute {
         char                    * name;
         char                    * name;
+        struct module		*owner;
         mode_t                  mode;
         mode_t                  mode;
 };
 };
 
 
 
 
-int sysfs_create_file(struct kobject * kobj, struct attribute * attr);
-void sysfs_remove_file(struct kobject * kobj, struct attribute * attr);
+int sysfs_create_file(struct kobject * kobj, const struct attribute * attr);
+void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr);
 
 
 
 
 A bare attribute contains no means to read or write the value of the
 A bare attribute contains no means to read or write the value of the
@@ -80,9 +83,11 @@ a specific object type.
 For example, the driver model defines struct device_attribute like:
 For example, the driver model defines struct device_attribute like:
 
 
 struct device_attribute {
 struct device_attribute {
-        struct attribute        attr;
-        ssize_t (*show)(struct device * dev, char * buf);
-        ssize_t (*store)(struct device * dev, const char * buf);
+	struct attribute	attr;
+	ssize_t (*show)(struct device *dev, struct device_attribute *attr,
+			char *buf);
+	ssize_t (*store)(struct device *dev, struct device_attribute *attr,
+			 const char *buf, size_t count);
 };
 };
 
 
 int device_create_file(struct device *, struct device_attribute *);
 int device_create_file(struct device *, struct device_attribute *);
@@ -90,12 +95,8 @@ void device_remove_file(struct device *, struct device_attribute *);
 
 
 It also defines this helper for defining device attributes: 
 It also defines this helper for defining device attributes: 
 
 
-#define DEVICE_ATTR(_name, _mode, _show, _store)      \
-struct device_attribute dev_attr_##_name = {            \
-        .attr = {.name  = __stringify(_name) , .mode   = _mode },      \
-        .show   = _show,                                \
-        .store  = _store,                               \
-};
+#define DEVICE_ATTR(_name, _mode, _show, _store) \
+struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
 
 
 For example, declaring
 For example, declaring
 
 
@@ -107,9 +108,9 @@ static struct device_attribute dev_attr_foo = {
        .attr	= {
        .attr	= {
 		.name = "foo",
 		.name = "foo",
 		.mode = S_IWUSR | S_IRUGO,
 		.mode = S_IWUSR | S_IRUGO,
+		.show = show_foo,
+		.store = store_foo,
 	},
 	},
-	.show = show_foo,
-	.store = store_foo,
 };
 };
 
 
 
 
@@ -161,10 +162,12 @@ To read or write attributes, show() or store() methods must be
 specified when declaring the attribute. The method types should be as
 specified when declaring the attribute. The method types should be as
 simple as those defined for device attributes:
 simple as those defined for device attributes:
 
 
-        ssize_t (*show)(struct device * dev, char * buf);
-        ssize_t (*store)(struct device * dev, const char * buf);
+ssize_t (*show)(struct device * dev, struct device_attribute * attr,
+                char * buf);
+ssize_t (*store)(struct device * dev, struct device_attribute * attr,
+                 const char * buf);
 
 
-IOW, they should take only an object and a buffer as parameters. 
+IOW, they should take only an object, an attribute, and a buffer as parameters.
 
 
 
 
 sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the
 sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the
@@ -299,14 +302,16 @@ The following interface layers currently exist in sysfs:
 Structure:
 Structure:
 
 
 struct device_attribute {
 struct device_attribute {
-        struct attribute        attr;
-        ssize_t (*show)(struct device * dev, char * buf);
-        ssize_t (*store)(struct device * dev, const char * buf);
+	struct attribute	attr;
+	ssize_t (*show)(struct device *dev, struct device_attribute *attr,
+			char *buf);
+	ssize_t (*store)(struct device *dev, struct device_attribute *attr,
+			 const char *buf, size_t count);
 };
 };
 
 
 Declaring:
 Declaring:
 
 
-DEVICE_ATTR(_name, _str, _mode, _show, _store);
+DEVICE_ATTR(_name, _mode, _show, _store);
 
 
 Creation/Removal:
 Creation/Removal:
 
 
@@ -342,7 +347,8 @@ Structure:
 struct driver_attribute {
 struct driver_attribute {
         struct attribute        attr;
         struct attribute        attr;
         ssize_t (*show)(struct device_driver *, char * buf);
         ssize_t (*show)(struct device_driver *, char * buf);
-        ssize_t (*store)(struct device_driver *, const char * buf);
+        ssize_t (*store)(struct device_driver *, const char * buf,
+                         size_t count);
 };
 };
 
 
 Declaring:
 Declaring: