1 #ifndef _LINUX_DEVFS_FS_KERNEL_H
2 #define _LINUX_DEVFS_FS_KERNEL_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 */ \
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
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)
51 # define ROOT_DEVICE_NAME root_device_name
55 #ifdef CONFIG_DEVFS_FS
56 extern devfs_handle_t
devfs_register (devfs_handle_t dir
, const char *name
,
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
,
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
,
109 void *ops
, void *info
)
113 static inline void devfs_unregister (devfs_handle_t de
)
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
)
123 static inline devfs_handle_t
devfs_mk_dir (devfs_handle_t dir
,
124 const char *name
, void *info
)
128 static inline devfs_handle_t
devfs_find_handle (devfs_handle_t dir
,
133 int traverse_symlinks
)
137 static inline int devfs_get_flags (devfs_handle_t de
, unsigned int *flags
)
141 static inline int devfs_set_flags (devfs_handle_t de
, unsigned int flags
)
145 static inline int devfs_get_maj_min (devfs_handle_t de
,
146 unsigned int *major
, unsigned int *minor
)
150 static inline devfs_handle_t
devfs_get_handle_from_inode (struct inode
*inode
)
154 static inline int devfs_generate_path (devfs_handle_t de
, char *path
,
159 static inline void *devfs_get_ops (devfs_handle_t de
)
163 static inline int devfs_set_file_size (devfs_handle_t de
, unsigned long size
)
167 static inline void *devfs_get_info (devfs_handle_t de
, unsigned long size
)
171 static inline int devfs_set_info (devfs_handle_t de
, void *info
)
175 static inline devfs_handle_t
devfs_get_parent (devfs_handle_t de
)
179 static inline devfs_handle_t
devfs_get_first_child (devfs_handle_t de
)
183 static inline devfs_handle_t
devfs_get_next_sibling (devfs_handle_t de
)
187 static inline void devfs_auto_unregister (devfs_handle_t master
,
188 devfs_handle_t slave
)
192 static inline devfs_handle_t
devfs_get_unregister_slave (devfs_handle_t master
)
196 static inline const char *devfs_get_name (devfs_handle_t de
,
197 unsigned int *namelen
)
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
)
225 static inline void devfs_register_series (devfs_handle_t dir
,
227 unsigned int num_entries
,
230 unsigned int minor_start
,
231 umode_t mode
, void *ops
, void *info
)
236 static inline int init_devfs_fs (void)
240 static inline void mount_devfs_fs (void)
244 static inline void devfs_make_root (const char *name
)
248 #endif /* CONFIG_DEVFS_FS */
250 #endif /* _LINUX_DEVFS_FS_KERNEL_H */