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