home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / sysfs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  6.4 KB  |  266 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.  * Copyright (c) 2007 SUSE Linux Products GmbH
  7.  * Copyright (c) 2007 Tejun Heo <teheo@suse.de>
  8.  *
  9.  * Please see Documentation/filesystems/sysfs.txt for more information.
  10.  */
  11.  
  12. #ifndef _SYSFS_H_
  13. #define _SYSFS_H_
  14.  
  15. #include <linux/compiler.h>
  16. #include <linux/errno.h>
  17. #include <linux/list.h>
  18. #include <asm/atomic.h>
  19.  
  20. struct kobject;
  21. struct module;
  22.  
  23. /* FIXME
  24.  * The *owner field is no longer used.
  25.  * x86 tree has been cleaned up. The owner
  26.  * attribute is still left for other arches.
  27.  */
  28. struct attribute {
  29.     const char        *name;
  30.     struct module        *owner;
  31.     mode_t            mode;
  32. };
  33.  
  34. struct attribute_group {
  35.     const char        *name;
  36.     mode_t            (*is_visible)(struct kobject *,
  37.                           struct attribute *, int);
  38.     struct attribute    **attrs;
  39. };
  40.  
  41.  
  42.  
  43. /**
  44.  * Use these macros to make defining attributes easier. See include/linux/device.h
  45.  * for examples..
  46.  */
  47.  
  48. #define __ATTR(_name,_mode,_show,_store) { \
  49.     .attr = {.name = __stringify(_name), .mode = _mode },    \
  50.     .show    = _show,                    \
  51.     .store    = _store,                    \
  52. }
  53.  
  54. #define __ATTR_RO(_name) { \
  55.     .attr    = { .name = __stringify(_name), .mode = 0444 },    \
  56.     .show    = _name##_show,                    \
  57. }
  58.  
  59. #define __ATTR_NULL { .attr = { .name = NULL } }
  60.  
  61. #define attr_name(_attr) (_attr).attr.name
  62.  
  63. struct vm_area_struct;
  64.  
  65. struct bin_attribute {
  66.     struct attribute    attr;
  67.     size_t            size;
  68.     void            *private;
  69.     ssize_t (*read)(struct kobject *, struct bin_attribute *,
  70.             char *, loff_t, size_t);
  71.     ssize_t (*write)(struct kobject *, struct bin_attribute *,
  72.              char *, loff_t, size_t);
  73.     int (*mmap)(struct kobject *, struct bin_attribute *attr,
  74.             struct vm_area_struct *vma);
  75. };
  76.  
  77. struct sysfs_ops {
  78.     ssize_t    (*show)(struct kobject *, struct attribute *,char *);
  79.     ssize_t    (*store)(struct kobject *,struct attribute *,const char *, size_t);
  80. };
  81.  
  82. struct sysfs_dirent;
  83.  
  84. #ifdef CONFIG_SYSFS
  85.  
  86. int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
  87.                 void *data, struct module *owner);
  88.  
  89. int __must_check sysfs_create_dir(struct kobject *kobj);
  90. void sysfs_remove_dir(struct kobject *kobj);
  91. int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name);
  92. int __must_check sysfs_move_dir(struct kobject *kobj,
  93.                 struct kobject *new_parent_kobj);
  94.  
  95. int __must_check sysfs_create_file(struct kobject *kobj,
  96.                    const struct attribute *attr);
  97. int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
  98.                   mode_t mode);
  99. void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
  100.  
  101. int __must_check sysfs_create_bin_file(struct kobject *kobj,
  102.                        struct bin_attribute *attr);
  103. void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
  104.  
  105. int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
  106.                    const char *name);
  107. int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
  108.                       struct kobject *target,
  109.                       const char *name);
  110. void sysfs_remove_link(struct kobject *kobj, const char *name);
  111.  
  112. int __must_check sysfs_create_group(struct kobject *kobj,
  113.                     const struct attribute_group *grp);
  114. int sysfs_update_group(struct kobject *kobj,
  115.                const struct attribute_group *grp);
  116. void sysfs_remove_group(struct kobject *kobj,
  117.             const struct attribute_group *grp);
  118. int sysfs_add_file_to_group(struct kobject *kobj,
  119.             const struct attribute *attr, const char *group);
  120. void sysfs_remove_file_from_group(struct kobject *kobj,
  121.             const struct attribute *attr, const char *group);
  122.  
  123. void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
  124. void sysfs_notify_dirent(struct sysfs_dirent *sd);
  125. struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
  126.                       const unsigned char *name);
  127. struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd);
  128. void sysfs_put(struct sysfs_dirent *sd);
  129. void sysfs_printk_last_file(void);
  130. int __must_check sysfs_init(void);
  131.  
  132. #else /* CONFIG_SYSFS */
  133.  
  134. static inline int sysfs_schedule_callback(struct kobject *kobj,
  135.         void (*func)(void *), void *data, struct module *owner)
  136. {
  137.     return -ENOSYS;
  138. }
  139.  
  140. static inline int sysfs_create_dir(struct kobject *kobj)
  141. {
  142.     return 0;
  143. }
  144.  
  145. static inline void sysfs_remove_dir(struct kobject *kobj)
  146. {
  147. }
  148.  
  149. static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
  150. {
  151.     return 0;
  152. }
  153.  
  154. static inline int sysfs_move_dir(struct kobject *kobj,
  155.                  struct kobject *new_parent_kobj)
  156. {
  157.     return 0;
  158. }
  159.  
  160. static inline int sysfs_create_file(struct kobject *kobj,
  161.                     const struct attribute *attr)
  162. {
  163.     return 0;
  164. }
  165.  
  166. static inline int sysfs_chmod_file(struct kobject *kobj,
  167.                    struct attribute *attr, mode_t mode)
  168. {
  169.     return 0;
  170. }
  171.  
  172. static inline void sysfs_remove_file(struct kobject *kobj,
  173.                      const struct attribute *attr)
  174. {
  175. }
  176.  
  177. static inline int sysfs_create_bin_file(struct kobject *kobj,
  178.                     struct bin_attribute *attr)
  179. {
  180.     return 0;
  181. }
  182.  
  183. static inline void sysfs_remove_bin_file(struct kobject *kobj,
  184.                      struct bin_attribute *attr)
  185. {
  186. }
  187.  
  188. static inline int sysfs_create_link(struct kobject *kobj,
  189.                     struct kobject *target, const char *name)
  190. {
  191.     return 0;
  192. }
  193.  
  194. static inline int sysfs_create_link_nowarn(struct kobject *kobj,
  195.                        struct kobject *target,
  196.                        const char *name)
  197. {
  198.     return 0;
  199. }
  200.  
  201. static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
  202. {
  203. }
  204.  
  205. static inline int sysfs_create_group(struct kobject *kobj,
  206.                      const struct attribute_group *grp)
  207. {
  208.     return 0;
  209. }
  210.  
  211. static inline int sysfs_update_group(struct kobject *kobj,
  212.                 const struct attribute_group *grp)
  213. {
  214.     return 0;
  215. }
  216.  
  217. static inline void sysfs_remove_group(struct kobject *kobj,
  218.                       const struct attribute_group *grp)
  219. {
  220. }
  221.  
  222. static inline int sysfs_add_file_to_group(struct kobject *kobj,
  223.         const struct attribute *attr, const char *group)
  224. {
  225.     return 0;
  226. }
  227.  
  228. static inline void sysfs_remove_file_from_group(struct kobject *kobj,
  229.         const struct attribute *attr, const char *group)
  230. {
  231. }
  232.  
  233. static inline void sysfs_notify(struct kobject *kobj, const char *dir,
  234.                 const char *attr)
  235. {
  236. }
  237. static inline void sysfs_notify_dirent(struct sysfs_dirent *sd)
  238. {
  239. }
  240. static inline
  241. struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
  242.                       const unsigned char *name)
  243. {
  244.     return NULL;
  245. }
  246. static inline struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd)
  247. {
  248.     return NULL;
  249. }
  250. static inline void sysfs_put(struct sysfs_dirent *sd)
  251. {
  252. }
  253.  
  254. static inline int __must_check sysfs_init(void)
  255. {
  256.     return 0;
  257. }
  258.  
  259. static inline void sysfs_printk_last_file(void)
  260. {
  261. }
  262.  
  263. #endif /* CONFIG_SYSFS */
  264.  
  265. #endif /* _SYSFS_H_ */
  266.