File: /usr/include/linux/devfs_fs_kernel.h
1 #ifndef _LINUX_DEVFS_FS_KERNEL_H
2 #define _LINUX_DEVFS_FS_KERNEL_H
3
4 #include <linux/fs.h>
5 #include <linux/config.h>
6
7 #define DEVFS_SUPER_MAGIC 0x1373
8
9 #define IS_DEVFS_INODE(inode) (DEVFS_SUPER_MAGIC == (inode)->i_sb->s_magic)
10
11 #define DEVFS_MINOR(inode) \
12 ({unsigned int m; /* evil GCC trickery */ \
13 ((inode)->i_sb && \
14 ((inode)->i_sb->s_magic==DEVFS_SUPER_MAGIC) && \
15 (devfs_get_maj_min(devfs_get_handle_from_inode((inode)),NULL,&m)==0) \
16 ) ? m : MINOR((inode)->r_dev); })
17
18
19 #define DEVFS_FL_NONE 0x000 /* This helps to make code more readable
20 */
21 #define DEVFS_FL_AUTO_OWNER 0x001 /* When a closed inode is opened the
22 ownerships are set to the opening
23 process and the protection is set to
24 that given in <<mode>>. When the inode
25 is closed, ownership reverts back to
26 <<uid>> and <<gid>> and the protection
27 is set to read-write for all */
28 #define DEVFS_FL_SHOW_UNREG 0x002 /* Show unregistered entries in
29 directory listings */
30 #define DEVFS_FL_HIDE 0x004 /* Do not show entry in directory list */
31 #define DEVFS_FL_AUTO_DEVNUM 0x008 /* Automatically generate device number
32 */
33 #define DEVFS_FL_AOPEN_NOTIFY 0x010 /* Asynchronously notify devfsd on open
34 */
35 #define DEVFS_FL_REMOVABLE 0x020 /* This is a removable media device */
36 #define DEVFS_FL_WAIT 0x040 /* Wait for devfsd to finish */
37 #define DEVFS_FL_NO_PERSISTENCE 0x080 /* Forget changes after unregister */
38 #define DEVFS_FL_CURRENT_OWNER 0x100 /* Set initial ownership to current */
39 #define DEVFS_FL_DEFAULT DEVFS_FL_NONE
40
41
42 #define DEVFS_SPECIAL_CHR 0
43 #define DEVFS_SPECIAL_BLK 1
44
45 typedef struct devfs_entry * devfs_handle_t;
46
47
48 #ifdef CONFIG_BLK_DEV_INITRD
49 # define ROOT_DEVICE_NAME ((real_root_dev ==ROOT_DEV) ? root_device_name:NULL)
50 #else
51 # define ROOT_DEVICE_NAME root_device_name
52 #endif
53
54
55 #ifdef CONFIG_DEVFS_FS
56 extern devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
57 unsigned int flags,
58 unsigned int major, unsigned int minor,
59 umode_t mode, void *ops, void *info);
60 extern void devfs_unregister (devfs_handle_t de);
61 extern int devfs_mk_symlink (devfs_handle_t dir, const char *name,
62 unsigned int flags, const char *link,
63 devfs_handle_t *handle, void *info);
64 extern devfs_handle_t devfs_mk_dir (devfs_handle_t dir, const char *name,
65 void *info);
66 extern devfs_handle_t devfs_find_handle (devfs_handle_t dir, const char *name,
67 unsigned int major,unsigned int minor,
68 char type, int traverse_symlinks);
69 extern int devfs_get_flags (devfs_handle_t de, unsigned int *flags);
70 extern int devfs_set_flags (devfs_handle_t de, unsigned int flags);
71 extern int devfs_get_maj_min (devfs_handle_t de,
72 unsigned int *major, unsigned int *minor);
73 extern devfs_handle_t devfs_get_handle_from_inode (struct inode *inode);
74 extern int devfs_generate_path (devfs_handle_t de, char *path, int buflen);
75 extern void *devfs_get_ops (devfs_handle_t de);
76 extern int devfs_set_file_size (devfs_handle_t de, unsigned long size);
77 extern void *devfs_get_info (devfs_handle_t de);
78 extern int devfs_set_info (devfs_handle_t de, void *info);
79 extern devfs_handle_t devfs_get_parent (devfs_handle_t de);
80 extern devfs_handle_t devfs_get_first_child (devfs_handle_t de);
81 extern devfs_handle_t devfs_get_next_sibling (devfs_handle_t de);
82 extern void devfs_auto_unregister (devfs_handle_t master,devfs_handle_t slave);
83 extern devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master);
84 extern const char *devfs_get_name (devfs_handle_t de, unsigned int *namelen);
85 extern int devfs_register_chrdev (unsigned int major, const char *name,
86 struct file_operations *fops);
87 extern int devfs_register_blkdev (unsigned int major, const char *name,
88 struct block_device_operations *bdops);
89 extern int devfs_unregister_chrdev (unsigned int major, const char *name);
90 extern int devfs_unregister_blkdev (unsigned int major, const char *name);
91
92 extern void devfs_register_tape (devfs_handle_t de);
93 extern void devfs_register_series (devfs_handle_t dir, const char *format,
94 unsigned int num_entries,
95 unsigned int flags, unsigned int major,
96 unsigned int minor_start,
97 umode_t mode, void *ops, void *info);
98
99 extern int init_devfs_fs (void);
100 extern void mount_devfs_fs (void);
101 extern void devfs_make_root (const char *name);
102 #else /* CONFIG_DEVFS_FS */
103 static inline devfs_handle_t devfs_register (devfs_handle_t dir,
104 const char *name,
105 unsigned int flags,
106 unsigned int major,
107 unsigned int minor,
108 umode_t mode,
109 void *ops, void *info)
110 {
111 return NULL;
112 }
113 static inline void devfs_unregister (devfs_handle_t de)
114 {
115 return;
116 }
117 static inline int devfs_mk_symlink (devfs_handle_t dir, const char *name,
118 unsigned int flags, const char *link,
119 devfs_handle_t *handle, void *info)
120 {
121 return 0;
122 }
123 static inline devfs_handle_t devfs_mk_dir (devfs_handle_t dir,
124 const char *name, void *info)
125 {
126 return NULL;
127 }
128 static inline devfs_handle_t devfs_find_handle (devfs_handle_t dir,
129 const char *name,
130 unsigned int major,
131 unsigned int minor,
132 char type,
133 int traverse_symlinks)
134 {
135 return NULL;
136 }
137 static inline int devfs_get_flags (devfs_handle_t de, unsigned int *flags)
138 {
139 return 0;
140 }
141 static inline int devfs_set_flags (devfs_handle_t de, unsigned int flags)
142 {
143 return 0;
144 }
145 static inline int devfs_get_maj_min (devfs_handle_t de,
146 unsigned int *major, unsigned int *minor)
147 {
148 return 0;
149 }
150 static inline devfs_handle_t devfs_get_handle_from_inode (struct inode *inode)
151 {
152 return NULL;
153 }
154 static inline int devfs_generate_path (devfs_handle_t de, char *path,
155 int buflen)
156 {
157 return -ENOSYS;
158 }
159 static inline void *devfs_get_ops (devfs_handle_t de)
160 {
161 return NULL;
162 }
163 static inline int devfs_set_file_size (devfs_handle_t de, unsigned long size)
164 {
165 return -ENOSYS;
166 }
167 static inline void *devfs_get_info (devfs_handle_t de, unsigned long size)
168 {
169 return NULL;
170 }
171 static inline int devfs_set_info (devfs_handle_t de, void *info)
172 {
173 return 0;
174 }
175 static inline devfs_handle_t devfs_get_parent (devfs_handle_t de)
176 {
177 return NULL;
178 }
179 static inline devfs_handle_t devfs_get_first_child (devfs_handle_t de)
180 {
181 return NULL;
182 }
183 static inline devfs_handle_t devfs_get_next_sibling (devfs_handle_t de)
184 {
185 return NULL;
186 }
187 static inline void devfs_auto_unregister (devfs_handle_t master,
188 devfs_handle_t slave)
189 {
190 return;
191 }
192 static inline devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master)
193 {
194 return NULL;
195 }
196 static inline const char *devfs_get_name (devfs_handle_t de,
197 unsigned int *namelen)
198 {
199 return NULL;
200 }
201 static inline int devfs_register_chrdev (unsigned int major, const char *name,
202 struct file_operations *fops)
203 {
204 return register_chrdev (major, name, fops);
205 }
206 static inline int devfs_register_blkdev (unsigned int major, const char *name,
207 struct block_device_operations *bdops)
208 {
209 return register_blkdev (major, name, bdops);
210 }
211 static inline int devfs_unregister_chrdev (unsigned int major,const char *name)
212 {
213 return unregister_chrdev (major, name);
214 }
215 static inline int devfs_unregister_blkdev (unsigned int major,const char *name)
216 {
217 return unregister_blkdev (major, name);
218 }
219
220 static inline void devfs_register_tape (devfs_handle_t de)
221 {
222 return;
223 }
224
225 static inline void devfs_register_series (devfs_handle_t dir,
226 const char *format,
227 unsigned int num_entries,
228 unsigned int flags,
229 unsigned int major,
230 unsigned int minor_start,
231 umode_t mode, void *ops, void *info)
232 {
233 return;
234 }
235
236 static inline int init_devfs_fs (void)
237 {
238 return 0;
239 }
240 static inline void mount_devfs_fs (void)
241 {
242 return;
243 }
244 static inline void devfs_make_root (const char *name)
245 {
246 return;
247 }
248 #endif /* CONFIG_DEVFS_FS */
249
250 #endif /* _LINUX_DEVFS_FS_KERNEL_H */
251