devfs_fs_kernel.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:10k
源码类别:

嵌入式Linux

开发平台:

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/locks.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_BLK_DEV_INITRD
  39. #  define ROOT_DEVICE_NAME ((real_root_dev ==ROOT_DEV) ? root_device_name:NULL)
  40. #else
  41. #  define ROOT_DEVICE_NAME root_device_name
  42. #endif
  43. #ifdef CONFIG_DEVFS_FS
  44. struct unique_numspace
  45. {
  46.     spinlock_t init_lock;
  47.     unsigned char sem_initialised;
  48.     unsigned int num_free;          /*  Num free in bits       */
  49.     unsigned int length;            /*  Array length in bytes  */
  50.     __u32 *bits;
  51.     struct semaphore semaphore;
  52. };
  53. #define UNIQUE_NUMBERSPACE_INITIALISER {SPIN_LOCK_UNLOCKED, 0, 0, 0, NULL}
  54. extern void devfs_put (devfs_handle_t de);
  55. extern devfs_handle_t devfs_register (devfs_handle_t dir, const char *name,
  56.       unsigned int flags,
  57.       unsigned int major, unsigned int minor,
  58.       umode_t mode, void *ops, void *info);
  59. extern void devfs_unregister (devfs_handle_t de);
  60. extern int devfs_mk_symlink (devfs_handle_t dir, const char *name,
  61.      unsigned int flags, const char *link,
  62.      devfs_handle_t *handle, void *info);
  63. extern devfs_handle_t devfs_mk_dir (devfs_handle_t dir, const char *name,
  64.     void *info);
  65. extern devfs_handle_t devfs_get_handle (devfs_handle_t dir, const char *name,
  66. unsigned int major,unsigned int minor,
  67. char type, int traverse_symlinks);
  68. extern devfs_handle_t devfs_find_handle (devfs_handle_t dir, const char *name,
  69.  unsigned int major,unsigned int minor,
  70.  char type, int traverse_symlinks);
  71. extern int devfs_get_flags (devfs_handle_t de, unsigned int *flags);
  72. extern int devfs_set_flags (devfs_handle_t de, unsigned int flags);
  73. extern int devfs_get_maj_min (devfs_handle_t de, 
  74.       unsigned int *major, unsigned int *minor);
  75. extern devfs_handle_t devfs_get_handle_from_inode (struct inode *inode);
  76. extern int devfs_generate_path (devfs_handle_t de, char *path, int buflen);
  77. extern void *devfs_get_ops (devfs_handle_t de);
  78. extern void devfs_put_ops (devfs_handle_t de);
  79. extern int devfs_set_file_size (devfs_handle_t de, unsigned long size);
  80. extern void *devfs_get_info (devfs_handle_t de);
  81. extern int devfs_set_info (devfs_handle_t de, void *info);
  82. extern devfs_handle_t devfs_get_parent (devfs_handle_t de);
  83. extern devfs_handle_t devfs_get_first_child (devfs_handle_t de);
  84. extern devfs_handle_t devfs_get_next_sibling (devfs_handle_t de);
  85. extern void devfs_auto_unregister (devfs_handle_t master,devfs_handle_t slave);
  86. extern devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master);
  87. extern const char *devfs_get_name (devfs_handle_t de, unsigned int *namelen);
  88. extern int devfs_register_chrdev (unsigned int major, const char *name,
  89.   struct file_operations *fops);
  90. extern int devfs_register_blkdev (unsigned int major, const char *name,
  91.   struct block_device_operations *bdops);
  92. extern int devfs_unregister_chrdev (unsigned int major, const char *name);
  93. extern int devfs_unregister_blkdev (unsigned int major, const char *name);
  94. extern void devfs_register_tape (devfs_handle_t de);
  95. extern void devfs_register_series (devfs_handle_t dir, const char *format,
  96.    unsigned int num_entries,
  97.    unsigned int flags, unsigned int major,
  98.    unsigned int minor_start,
  99.    umode_t mode, void *ops, void *info);
  100. extern int devfs_alloc_major (char type);
  101. extern void devfs_dealloc_major (char type, int major);
  102. extern kdev_t devfs_alloc_devnum (char type);
  103. extern void devfs_dealloc_devnum (char type, kdev_t devnum);
  104. extern int devfs_alloc_unique_number (struct unique_numspace *space);
  105. extern void devfs_dealloc_unique_number (struct unique_numspace *space,
  106.  int number);
  107. extern void mount_devfs_fs (void);
  108. extern void devfs_make_root (const char *name);
  109. #else  /*  CONFIG_DEVFS_FS  */
  110. struct unique_numspace
  111. {
  112.     char dummy;
  113. };
  114. #define UNIQUE_NUMBERSPACE_INITIALISER {0}
  115. static inline void devfs_put (devfs_handle_t de)
  116. {
  117.     return;
  118. }
  119. static inline devfs_handle_t devfs_register (devfs_handle_t dir,
  120.      const char *name,
  121.      unsigned int flags,
  122.      unsigned int major,
  123.      unsigned int minor,
  124.      umode_t mode,
  125.      void *ops, void *info)
  126. {
  127.     return NULL;
  128. }
  129. static inline void devfs_unregister (devfs_handle_t de)
  130. {
  131.     return;
  132. }
  133. static inline int devfs_mk_symlink (devfs_handle_t dir, const char *name,
  134.     unsigned int flags, const char *link,
  135.     devfs_handle_t *handle, void *info)
  136. {
  137.     return 0;
  138. }
  139. static inline devfs_handle_t devfs_mk_dir (devfs_handle_t dir,
  140.    const char *name, void *info)
  141. {
  142.     return NULL;
  143. }
  144. static inline devfs_handle_t devfs_get_handle (devfs_handle_t dir,
  145.        const char *name,
  146.        unsigned int major,
  147.        unsigned int minor,
  148.        char type,
  149.        int traverse_symlinks)
  150. {
  151.     return NULL;
  152. }
  153. static inline devfs_handle_t devfs_find_handle (devfs_handle_t dir,
  154. const char *name,
  155. unsigned int major,
  156. unsigned int minor,
  157. char type,
  158. int traverse_symlinks)
  159. {
  160.     return NULL;
  161. }
  162. static inline int devfs_get_flags (devfs_handle_t de, unsigned int *flags)
  163. {
  164.     return 0;
  165. }
  166. static inline int devfs_set_flags (devfs_handle_t de, unsigned int flags)
  167. {
  168.     return 0;
  169. }
  170. static inline int devfs_get_maj_min (devfs_handle_t de, 
  171.      unsigned int *major, unsigned int *minor)
  172. {
  173.     return 0;
  174. }
  175. static inline devfs_handle_t devfs_get_handle_from_inode (struct inode *inode)
  176. {
  177.     return NULL;
  178. }
  179. static inline int devfs_generate_path (devfs_handle_t de, char *path,
  180.        int buflen)
  181. {
  182.     return -ENOSYS;
  183. }
  184. static inline void *devfs_get_ops (devfs_handle_t de)
  185. {
  186.     return NULL;
  187. }
  188. static inline void devfs_put_ops (devfs_handle_t de)
  189. {
  190.     return;
  191. }
  192. static inline int devfs_set_file_size (devfs_handle_t de, unsigned long size)
  193. {
  194.     return -ENOSYS;
  195. }
  196. static inline void *devfs_get_info (devfs_handle_t de)
  197. {
  198.     return NULL;
  199. }
  200. static inline int devfs_set_info (devfs_handle_t de, void *info)
  201. {
  202.     return 0;
  203. }
  204. static inline devfs_handle_t devfs_get_parent (devfs_handle_t de)
  205. {
  206.     return NULL;
  207. }
  208. static inline devfs_handle_t devfs_get_first_child (devfs_handle_t de)
  209. {
  210.     return NULL;
  211. }
  212. static inline devfs_handle_t devfs_get_next_sibling (devfs_handle_t de)
  213. {
  214.     return NULL;
  215. }
  216. static inline void devfs_auto_unregister (devfs_handle_t master,
  217.   devfs_handle_t slave)
  218. {
  219.     return;
  220. }
  221. static inline devfs_handle_t devfs_get_unregister_slave (devfs_handle_t master)
  222. {
  223.     return NULL;
  224. }
  225. static inline const char *devfs_get_name (devfs_handle_t de,
  226.   unsigned int *namelen)
  227. {
  228.     return NULL;
  229. }
  230. static inline int devfs_register_chrdev (unsigned int major, const char *name,
  231.  struct file_operations *fops)
  232. {
  233.     return register_chrdev (major, name, fops);
  234. }
  235. static inline int devfs_register_blkdev (unsigned int major, const char *name,
  236.  struct block_device_operations *bdops)
  237. {
  238.     return register_blkdev (major, name, bdops);
  239. }
  240. static inline int devfs_unregister_chrdev (unsigned int major,const char *name)
  241. {
  242.     return unregister_chrdev (major, name);
  243. }
  244. static inline int devfs_unregister_blkdev (unsigned int major,const char *name)
  245. {
  246.     return unregister_blkdev (major, name);
  247. }
  248. static inline void devfs_register_tape (devfs_handle_t de)
  249. {
  250.     return;
  251. }
  252. static inline void devfs_register_series (devfs_handle_t dir,
  253.   const char *format,
  254.   unsigned int num_entries,
  255.   unsigned int flags,
  256.   unsigned int major,
  257.   unsigned int minor_start,
  258.   umode_t mode, void *ops, void *info)
  259. {
  260.     return;
  261. }
  262. static inline int devfs_alloc_major (char type)
  263. {
  264.     return -1;
  265. }
  266. static inline void devfs_dealloc_major (char type, int major)
  267. {
  268.     return;
  269. }
  270. static inline kdev_t devfs_alloc_devnum (char type)
  271. {
  272.     return NODEV;
  273. }
  274. static inline void devfs_dealloc_devnum (char type, kdev_t devnum)
  275. {
  276.     return;
  277. }
  278. static inline int devfs_alloc_unique_number (struct unique_numspace *space)
  279. {
  280.     return -1;
  281. }
  282. static inline void devfs_dealloc_unique_number (struct unique_numspace *space,
  283. int number)
  284. {
  285.     return;
  286. }
  287. static inline void mount_devfs_fs (void)
  288. {
  289.     return;
  290. }
  291. static inline void devfs_make_root (const char *name)
  292. {
  293.     return;
  294. }
  295. #endif  /*  CONFIG_DEVFS_FS  */
  296. #endif  /*  _LINUX_DEVFS_FS_KERNEL_H  */