home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / sysfs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.3 KB  |  197 lines

  1. /*
  2.  * sysfs.h - definitions for the device driver filesystem
  3.  *
  4.  * Copyright (c) 2001,2002 Patrick Mochel
  5.  * Copyright (c) 2004 Silicon Graphics, Inc.
  6.  *
  7.  * Please see Documentation/filesystems/sysfs.txt for more information.
  8.  */
  9.  
  10. #ifndef _SYSFS_H_
  11. #define _SYSFS_H_
  12.  
  13. #include <asm/atomic.h>
  14.  
  15. struct kobject;
  16. struct module;
  17.  
  18. struct attribute {
  19.     const char        * name;
  20.     struct module         * owner;
  21.     mode_t            mode;
  22. };
  23.  
  24. struct attribute_group {
  25.     const char        * name;
  26.     struct attribute    ** attrs;
  27. };
  28.  
  29.  
  30.  
  31. /**
  32.  * Use these macros to make defining attributes easier. See include/linux/device.h
  33.  * for examples..
  34.  */
  35.  
  36. #define __ATTR(_name,_mode,_show,_store) { \
  37.     .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE },    \
  38.     .show    = _show,                    \
  39.     .store    = _store,                    \
  40. }
  41.  
  42. #define __ATTR_RO(_name) { \
  43.     .attr    = { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE },    \
  44.     .show    = _name##_show,    \
  45. }
  46.  
  47. #define __ATTR_NULL { .attr = { .name = NULL } }
  48.  
  49. #define attr_name(_attr) (_attr).attr.name
  50.  
  51. struct vm_area_struct;
  52.  
  53. struct bin_attribute {
  54.     struct attribute    attr;
  55.     size_t            size;
  56.     void            *private;
  57.     ssize_t (*read)(struct kobject *, char *, loff_t, size_t);
  58.     ssize_t (*write)(struct kobject *, char *, loff_t, size_t);
  59.     int (*mmap)(struct kobject *, struct bin_attribute *attr,
  60.             struct vm_area_struct *vma);
  61. };
  62.  
  63. struct sysfs_ops {
  64.     ssize_t    (*show)(struct kobject *, struct attribute *,char *);
  65.     ssize_t    (*store)(struct kobject *,struct attribute *,const char *, size_t);
  66. };
  67.  
  68. struct sysfs_dirent {
  69.     atomic_t        s_count;
  70.     struct list_head    s_sibling;
  71.     struct list_head    s_children;
  72.     void             * s_element;
  73.     int            s_type;
  74.     umode_t            s_mode;
  75.     struct dentry        * s_dentry;
  76.     struct iattr        * s_iattr;
  77.     atomic_t        s_event;
  78. };
  79.  
  80. #define SYSFS_ROOT        0x0001
  81. #define SYSFS_DIR        0x0002
  82. #define SYSFS_KOBJ_ATTR     0x0004
  83. #define SYSFS_KOBJ_BIN_ATTR    0x0008
  84. #define SYSFS_KOBJ_LINK     0x0020
  85. #define SYSFS_NOT_PINNED    (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR | SYSFS_KOBJ_LINK)
  86.  
  87. #ifdef CONFIG_SYSFS
  88.  
  89. extern int
  90. sysfs_create_dir(struct kobject *);
  91.  
  92. extern void
  93. sysfs_remove_dir(struct kobject *);
  94.  
  95. extern int
  96. sysfs_rename_dir(struct kobject *, const char *new_name);
  97.  
  98. extern int
  99. sysfs_create_file(struct kobject *, const struct attribute *);
  100.  
  101. extern int
  102. sysfs_update_file(struct kobject *, const struct attribute *);
  103.  
  104. extern int
  105. sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode);
  106.  
  107. extern void
  108. sysfs_remove_file(struct kobject *, const struct attribute *);
  109.  
  110. extern int
  111. sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name);
  112.  
  113. extern void
  114. sysfs_remove_link(struct kobject *, const char * name);
  115.  
  116. int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr);
  117. int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr);
  118.  
  119. int sysfs_create_group(struct kobject *, const struct attribute_group *);
  120. void sysfs_remove_group(struct kobject *, const struct attribute_group *);
  121. void sysfs_notify(struct kobject * k, char *dir, char *attr);
  122.  
  123. #else /* CONFIG_SYSFS */
  124.  
  125. static inline int sysfs_create_dir(struct kobject * k)
  126. {
  127.     return 0;
  128. }
  129.  
  130. static inline void sysfs_remove_dir(struct kobject * k)
  131. {
  132.     ;
  133. }
  134.  
  135. static inline int sysfs_rename_dir(struct kobject * k, const char *new_name)
  136. {
  137.     return 0;
  138. }
  139.  
  140. static inline int sysfs_create_file(struct kobject * k, const struct attribute * a)
  141. {
  142.     return 0;
  143. }
  144.  
  145. static inline int sysfs_update_file(struct kobject * k, const struct attribute * a)
  146. {
  147.     return 0;
  148. }
  149. static inline int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode)
  150. {
  151.     return 0;
  152. }
  153.  
  154. static inline void sysfs_remove_file(struct kobject * k, const struct attribute * a)
  155. {
  156.     ;
  157. }
  158.  
  159. static inline int sysfs_create_link(struct kobject * k, struct kobject * t, const char * n)
  160. {
  161.     return 0;
  162. }
  163.  
  164. static inline void sysfs_remove_link(struct kobject * k, const char * name)
  165. {
  166.     ;
  167. }
  168.  
  169.  
  170. static inline int sysfs_create_bin_file(struct kobject * k, struct bin_attribute * a)
  171. {
  172.     return 0;
  173. }
  174.  
  175. static inline int sysfs_remove_bin_file(struct kobject * k, struct bin_attribute * a)
  176. {
  177.     return 0;
  178. }
  179.  
  180. static inline int sysfs_create_group(struct kobject * k, const struct attribute_group *g)
  181. {
  182.     return 0;
  183. }
  184.  
  185. static inline void sysfs_remove_group(struct kobject * k, const struct attribute_group * g)
  186. {
  187.     ;
  188. }
  189.  
  190. static inline void sysfs_notify(struct kobject * k, char *dir, char *attr)
  191. {
  192. }
  193.  
  194. #endif /* CONFIG_SYSFS */
  195.  
  196. #endif /* _SYSFS_H_ */
  197.