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