• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DEVICE   0x0010
85  #define SYSFS_KOBJ_LINK 	0x0020
86  #define SYSFS_NOT_PINNED	(SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR | SYSFS_KOBJ_DEVICE | SYSFS_KOBJ_LINK)
87  
88  #ifdef CONFIG_SYSFS
89  
90  extern int
91  sysfs_create_dir(struct kobject *);
92  
93  extern void
94  sysfs_remove_dir(struct kobject *);
95  
96  extern int
97  sysfs_rename_dir(struct kobject *, const char *new_name);
98  
99  extern int
100  sysfs_create_file(struct kobject *, const struct attribute *);
101  
102  extern int
103  sysfs_update_file(struct kobject *, const struct attribute *);
104  
105  extern int
106  sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode);
107  
108  extern void
109  sysfs_remove_file(struct kobject *, const struct attribute *);
110  
111  extern int
112  sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name);
113  
114  extern void
115  sysfs_remove_link(struct kobject *, const char * name);
116  
117  int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr);
118  int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr);
119  
120  int sysfs_create_group(struct kobject *, const struct attribute_group *);
121  void sysfs_remove_group(struct kobject *, const struct attribute_group *);
122  void sysfs_notify(struct kobject * k, char *dir, char *attr);
123  
124  void sysfs_create_device(struct kobject *, dev_t dev, mode_t mode);
125  
126  #else /* CONFIG_SYSFS */
127  
sysfs_create_dir(struct kobject * k)128  static inline int sysfs_create_dir(struct kobject * k)
129  {
130  	return 0;
131  }
132  
sysfs_remove_dir(struct kobject * k)133  static inline void sysfs_remove_dir(struct kobject * k)
134  {
135  	;
136  }
137  
sysfs_rename_dir(struct kobject * k,const char * new_name)138  static inline int sysfs_rename_dir(struct kobject * k, const char *new_name)
139  {
140  	return 0;
141  }
142  
sysfs_create_file(struct kobject * k,const struct attribute * a)143  static inline int sysfs_create_file(struct kobject * k, const struct attribute * a)
144  {
145  	return 0;
146  }
147  
sysfs_update_file(struct kobject * k,const struct attribute * a)148  static inline int sysfs_update_file(struct kobject * k, const struct attribute * a)
149  {
150  	return 0;
151  }
sysfs_chmod_file(struct kobject * kobj,struct attribute * attr,mode_t mode)152  static inline int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode)
153  {
154  	return 0;
155  }
156  
sysfs_remove_file(struct kobject * k,const struct attribute * a)157  static inline void sysfs_remove_file(struct kobject * k, const struct attribute * a)
158  {
159  	;
160  }
161  
sysfs_create_link(struct kobject * k,struct kobject * t,const char * n)162  static inline int sysfs_create_link(struct kobject * k, struct kobject * t, const char * n)
163  {
164  	return 0;
165  }
166  
sysfs_remove_link(struct kobject * k,const char * name)167  static inline void sysfs_remove_link(struct kobject * k, const char * name)
168  {
169  	;
170  }
171  
172  
sysfs_create_bin_file(struct kobject * k,struct bin_attribute * a)173  static inline int sysfs_create_bin_file(struct kobject * k, struct bin_attribute * a)
174  {
175  	return 0;
176  }
177  
sysfs_remove_bin_file(struct kobject * k,struct bin_attribute * a)178  static inline int sysfs_remove_bin_file(struct kobject * k, struct bin_attribute * a)
179  {
180  	return 0;
181  }
182  
sysfs_create_group(struct kobject * k,const struct attribute_group * g)183  static inline int sysfs_create_group(struct kobject * k, const struct attribute_group *g)
184  {
185  	return 0;
186  }
187  
sysfs_remove_group(struct kobject * k,const struct attribute_group * g)188  static inline void sysfs_remove_group(struct kobject * k, const struct attribute_group * g)
189  {
190  	;
191  }
192  
sysfs_notify(struct kobject * k,char * dir,char * attr)193  static inline void sysfs_notify(struct kobject * k, char *dir, char *attr)
194  {
195  }
196  
sysfs_create_device(struct kobject * k,dev_t d,mode_t m)197  static inline void sysfs_create_device(struct kobject * k, dev_t d, mode_t m)
198  {
199  	;
200  }
201  
202  #endif /* CONFIG_SYSFS */
203  
204  #endif /* _SYSFS_H_ */
205