devfs_fs_kernel.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:9k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _LINUX_DEVFS_FS_KERNEL_H
  2. #define _LINUX_DEVFS_FS_KERNEL_H
  3. #include <linux/fs.h>
  4. #include <linux/config.h>
  5. #include <linux/spinlock.h>
  6. #include <linux/kdev_t.h>
  7. #include <linux/types.h>
  8. #include <asm/semaphore.h>
  9. #define DEVFS_SUPER_MAGIC                0x1373
  10. #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); })
  17. #define DEVFS_FL_NONE           0x000 /* This helps to make code more readable
  18.        */
  19. #define DEVFS_FL_AUTO_OWNER     0x001 /* When a closed inode is opened the
  20.  ownerships are set to the opening
  21.  process and the protection is set to
  22.  that given in <<mode>>. When the inode
  23.  is closed, ownership reverts back to
  24.  <<uid>> and <<gid>> and the protection
  25.  is set to read-write for all        */
  26. #define DEVFS_FL_HIDE           0x002 /* Do not show entry in directory list */
  27. #define DEVFS_FL_AUTO_DEVNUM    0x004 /* Automatically generate device number
  28.        */
  29. #define DEVFS_FL_AOPEN_NOTIFY   0x008 /* Asynchronously notify devfsd on open
  30.        */
  31. #define DEVFS_FL_REMOVABLE      0x010 /* This is a removable media device    */
  32. #define DEVFS_FL_WAIT           0x020 /* Wait for devfsd to finish           */
  33. #define DEVFS_FL_CURRENT_OWNER  0x040 /* Set initial ownership to current    */
  34. #define DEVFS_FL_DEFAULT        DEVFS_FL_NONE
  35. #define DEVFS_SPECIAL_CHR     0
  36. #define DEVFS_SPECIAL_BLK     1
  37. typedef struct devfs_entry * devfs_handle_t;
  38. #ifdef CONFIG_DEVFS_FS
  39. struct unique_numspace
  40. {
  41.     spinlock_t init_lock;
  42.     unsigned char sem_initialised;
  43.     unsigned int num_free;          /*  Num free in bits       */
  44.     unsigned int length;            /*  Array length in bytes  */
  45.     unsigned long *bits;
  46.     struct semaphore semaphore;
  47. };
  48. #define UNIQUE_NUMBERSPACE_INITIALISER {SPIN_LOCK_UNLOCKED, 0, 0, 0, NULL}
  49. extern void devfs_put (devfs_handle_t de);
  50. extern devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
  51.       unsigned int flags,
  52.       unsigned int major, unsigned int minor,
  53.       umode_t mode, void *ops, void *info);
  54. extern void devfs_unregister (devfs_handle_t de);
  55. extern int devfs_mk_symlink (devfs_handle_t dir, const char *name,
  56.      unsigned int flags, const char *link,
  57.      devfs_handle_t *handle, void *info);
  58. extern devfs_handle_t devfs_mk_dir (devfs_handle_t dir, const char *name,
  59.     void *info);
  60. extern devfs_handle_t devfs_get_handle (devfs_handle_t dir, const char *name,
  61. unsigned int major,unsigned int minor,
  62. char type, int traverse_symlinks);
  63. extern devfs_handle_t devfs_find_handle (devfs_handle_t dir, const char *name,
  64.  unsigned int major,unsigned int minor,
  65.  char type, int traverse_symlinks);
  66. extern int devfs_get_flags (devfs_handle_t de, unsigned int *flags);
  67. extern int devfs_set_flags (devfs_handle_t de, unsigned int flags);
  68. extern int devfs_get_maj_min (devfs_handle_t de, 
  69.       unsigned int *major, unsigned int *minor);
  70. extern devfs_handle_t devfs_get_handle_from_inode (struct inode *inode);
  71. extern int devfs_generate_path (devfs_handle_t de, char *path, int buflen);
  72. extern void *devfs_get_ops (devfs_handle_t de);
  73. extern void devfs_put_ops (devfs_handle_t de);
  74. extern int devfs_set_file_size (devfs_handle_t de, unsigned long size);
  75. extern void *devfs_get_info (devfs_handle_t de);
  76. extern int devfs_set_info (devfs_handle_t de, void *info);
  77. extern devfs_handle_t devfs_get_parent (devfs_handle_t de);
  78. extern devfs_handle_t devfs_get_first_child (devfs_handle_t de);
  79. extern devfs_handle_t devfs_get_next_sibling (devfs_handle_t de);
  80. extern void devfs_auto_unregister (devfs_handle_t master,devfs_handle_t slave);
  81. extern devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master);
  82. extern const char *devfs_get_name (devfs_handle_t de, unsigned int *namelen);
  83. extern int devfs_register_chrdev (unsigned int major, const char *name,
  84.   struct file_operations *fops);
  85. extern int devfs_register_blkdev (unsigned int major, const char *name,
  86.   struct block_device_operations *bdops);
  87. extern int devfs_unregister_chrdev (unsigned int major, const char *name);
  88. extern int devfs_unregister_blkdev (unsigned int major, const char *name);
  89. extern void devfs_register_tape (devfs_handle_t de);
  90. extern void devfs_register_series (devfs_handle_t dir, const char *format,
  91.    unsigned int num_entries,
  92.    unsigned int flags, unsigned int major,
  93.    unsigned int minor_start,
  94.    umode_t mode, void *ops, void *info);
  95. extern int devfs_alloc_major (char type);
  96. extern void devfs_dealloc_major (char type, int major);
  97. extern kdev_t devfs_alloc_devnum (char type);
  98. extern void devfs_dealloc_devnum (char type, kdev_t devnum);
  99. extern int devfs_alloc_unique_number (struct unique_numspace *space);
  100. extern void devfs_dealloc_unique_number (struct unique_numspace *space,
  101.  int number);
  102. extern void mount_devfs_fs (void);
  103. #else  /*  CONFIG_DEVFS_FS  */
  104. struct unique_numspace
  105. {
  106.     char dummy;
  107. };
  108. #define UNIQUE_NUMBERSPACE_INITIALISER {0}
  109. static inline void devfs_put (devfs_handle_t de)
  110. {
  111.     return;
  112. }
  113. static inline devfs_handle_t devfs_register (devfs_handle_t dir,
  114.      const char *name,
  115.      unsigned int flags,
  116.      unsigned int major,
  117.      unsigned int minor,
  118.      umode_t mode,
  119.      void *ops, void *info)
  120. {
  121.     return NULL;
  122. }
  123. static inline void devfs_unregister (devfs_handle_t de)
  124. {
  125.     return;
  126. }
  127. static inline int devfs_mk_symlink (devfs_handle_t dir, const char *name,
  128.     unsigned int flags, const char *link,
  129.     devfs_handle_t *handle, void *info)
  130. {
  131.     return 0;
  132. }
  133. static inline devfs_handle_t devfs_mk_dir (devfs_handle_t dir,
  134.    const char *name, void *info)
  135. {
  136.     return NULL;
  137. }
  138. static inline devfs_handle_t devfs_get_handle (devfs_handle_t dir,
  139.        const char *name,
  140.        unsigned int major,
  141.        unsigned int minor,
  142.        char type,
  143.        int traverse_symlinks)
  144. {
  145.     return NULL;
  146. }
  147. static inline devfs_handle_t devfs_find_handle (devfs_handle_t dir,
  148. const char *name,
  149. unsigned int major,
  150. unsigned int minor,
  151. char type,
  152. int traverse_symlinks)
  153. {
  154.     return NULL;
  155. }
  156. static inline int devfs_get_flags (devfs_handle_t de, unsigned int *flags)
  157. {
  158.     return 0;
  159. }
  160. static inline int devfs_set_flags (devfs_handle_t de, unsigned int flags)
  161. {
  162.     return 0;
  163. }
  164. static inline int devfs_get_maj_min (devfs_handle_t de, 
  165.      unsigned int *major, unsigned int *minor)
  166. {
  167.     return 0;
  168. }
  169. static inline devfs_handle_t devfs_get_handle_from_inode (struct inode *inode)
  170. {
  171.     return NULL;
  172. }
  173. static inline int devfs_generate_path (devfs_handle_t de, char *path,
  174.        int buflen)
  175. {
  176.     return -ENOSYS;
  177. }
  178. static inline void *devfs_get_ops (devfs_handle_t de)
  179. {
  180.     return NULL;
  181. }
  182. static inline void devfs_put_ops (devfs_handle_t de)
  183. {
  184.     return;
  185. }
  186. static inline int devfs_set_file_size (devfs_handle_t de, unsigned long size)
  187. {
  188.     return -ENOSYS;
  189. }
  190. static inline void *devfs_get_info (devfs_handle_t de)
  191. {
  192.     return NULL;
  193. }
  194. static inline int devfs_set_info (devfs_handle_t de, void *info)
  195. {
  196.     return 0;
  197. }
  198. static inline devfs_handle_t devfs_get_parent (devfs_handle_t de)
  199. {
  200.     return NULL;
  201. }
  202. static inline devfs_handle_t devfs_get_first_child (devfs_handle_t de)
  203. {
  204.     return NULL;
  205. }
  206. static inline devfs_handle_t devfs_get_next_sibling (devfs_handle_t de)
  207. {
  208.     return NULL;
  209. }
  210. static inline void devfs_auto_unregister (devfs_handle_t master,
  211.   devfs_handle_t slave)
  212. {
  213.     return;
  214. }
  215. static inline devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master)
  216. {
  217.     return NULL;
  218. }
  219. static inline const char *devfs_get_name (devfs_handle_t de,
  220.   unsigned int *namelen)
  221. {
  222.     return NULL;
  223. }
  224. static inline int devfs_register_chrdev (unsigned int major, const char *name,
  225.  struct file_operations *fops)
  226. {
  227.     return register_chrdev (major, name, fops);
  228. }
  229. static inline int devfs_register_blkdev (unsigned int major, const char *name,
  230.  struct block_device_operations *bdops)
  231. {
  232.     return register_blkdev (major, name, bdops);
  233. }
  234. static inline int devfs_unregister_chrdev (unsigned int major,const char *name)
  235. {
  236.     return unregister_chrdev (major, name);
  237. }
  238. static inline int devfs_unregister_blkdev (unsigned int major,const char *name)
  239. {
  240.     return unregister_blkdev (major, name);
  241. }
  242. static inline void devfs_register_tape (devfs_handle_t de)
  243. {
  244.     return;
  245. }
  246. static inline void devfs_register_series (devfs_handle_t dir,
  247.   const char *format,
  248.   unsigned int num_entries,
  249.   unsigned int flags,
  250.   unsigned int major,
  251.   unsigned int minor_start,
  252.   umode_t mode, void *ops, void *info)
  253. {
  254.     return;
  255. }
  256. static inline int devfs_alloc_major (char type)
  257. {
  258.     return -1;
  259. }
  260. static inline void devfs_dealloc_major (char type, int major)
  261. {
  262.     return;
  263. }
  264. static inline kdev_t devfs_alloc_devnum (char type)
  265. {
  266.     return NODEV;
  267. }
  268. static inline void devfs_dealloc_devnum (char type, kdev_t devnum)
  269. {
  270.     return;
  271. }
  272. static inline int devfs_alloc_unique_number (struct unique_numspace *space)
  273. {
  274.     return -1;
  275. }
  276. static inline void devfs_dealloc_unique_number (struct unique_numspace *space,
  277. int number)
  278. {
  279.     return;
  280. }
  281. static inline void mount_devfs_fs (void)
  282. {
  283.     return;
  284. }
  285. #endif  /*  CONFIG_DEVFS_FS  */
  286. #endif  /*  _LINUX_DEVFS_FS_KERNEL_H  */