- Stephen Rothwell: APM updates
[davej-history.git] / include / linux / devfs_fs_kernel.h
blob4db1520303757dad8138d8db80980331e4734d8a
1 #ifndef _LINUX_DEVFS_FS_KERNEL_H
2 #define _LINUX_DEVFS_FS_KERNEL_H
4 #include <linux/fs.h>
5 #include <linux/config.h>
7 #define DEVFS_SUPER_MAGIC 0x1373
9 #define IS_DEVFS_INODE(inode) (DEVFS_SUPER_MAGIC == (inode)->i_sb->s_magic)
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); })
19 #define DEVFS_FL_NONE 0x000 /* This helps to make code more readable
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
33 #define DEVFS_FL_AOPEN_NOTIFY 0x010 /* Asynchronously notify devfsd on open
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
42 #define DEVFS_SPECIAL_CHR 0
43 #define DEVFS_SPECIAL_BLK 1
45 typedef struct devfs_entry * devfs_handle_t;
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
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);
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);
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)
111 return NULL;
113 static inline void devfs_unregister (devfs_handle_t de)
115 return;
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)
121 return 0;
123 static inline devfs_handle_t devfs_mk_dir (devfs_handle_t dir,
124 const char *name, void *info)
126 return NULL;
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)
135 return NULL;
137 static inline int devfs_get_flags (devfs_handle_t de, unsigned int *flags)
139 return 0;
141 static inline int devfs_set_flags (devfs_handle_t de, unsigned int flags)
143 return 0;
145 static inline int devfs_get_maj_min (devfs_handle_t de,
146 unsigned int *major, unsigned int *minor)
148 return 0;
150 static inline devfs_handle_t devfs_get_handle_from_inode (struct inode *inode)
152 return NULL;
154 static inline int devfs_generate_path (devfs_handle_t de, char *path,
155 int buflen)
157 return -ENOSYS;
159 static inline void *devfs_get_ops (devfs_handle_t de)
161 return NULL;
163 static inline int devfs_set_file_size (devfs_handle_t de, unsigned long size)
165 return -ENOSYS;
167 static inline void *devfs_get_info (devfs_handle_t de, unsigned long size)
169 return NULL;
171 static inline int devfs_set_info (devfs_handle_t de, void *info)
173 return 0;
175 static inline devfs_handle_t devfs_get_parent (devfs_handle_t de)
177 return NULL;
179 static inline devfs_handle_t devfs_get_first_child (devfs_handle_t de)
181 return NULL;
183 static inline devfs_handle_t devfs_get_next_sibling (devfs_handle_t de)
185 return NULL;
187 static inline void devfs_auto_unregister (devfs_handle_t master,
188 devfs_handle_t slave)
190 return;
192 static inline devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master)
194 return NULL;
196 static inline const char *devfs_get_name (devfs_handle_t de,
197 unsigned int *namelen)
199 return NULL;
201 static inline int devfs_register_chrdev (unsigned int major, const char *name,
202 struct file_operations *fops)
204 return register_chrdev (major, name, fops);
206 static inline int devfs_register_blkdev (unsigned int major, const char *name,
207 struct block_device_operations *bdops)
209 return register_blkdev (major, name, bdops);
211 static inline int devfs_unregister_chrdev (unsigned int major,const char *name)
213 return unregister_chrdev (major, name);
215 static inline int devfs_unregister_blkdev (unsigned int major,const char *name)
217 return unregister_blkdev (major, name);
220 static inline void devfs_register_tape (devfs_handle_t de)
222 return;
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)
233 return;
236 static inline int init_devfs_fs (void)
238 return 0;
240 static inline void mount_devfs_fs (void)
242 return;
244 static inline void devfs_make_root (const char *name)
246 return;
248 #endif /* CONFIG_DEVFS_FS */
250 #endif /* _LINUX_DEVFS_FS_KERNEL_H */