linux/include/linux/kdev_t.h
<<
>>
Prefs
   1#ifndef _LINUX_KDEV_T_H
   2#define _LINUX_KDEV_T_H
   3
   4#include <uapi/linux/kdev_t.h>
   5
   6#define MINORBITS       20
   7#define MINORMASK       ((1U << MINORBITS) - 1)
   8
   9#define MAJOR(dev)      ((unsigned int) ((dev) >> MINORBITS))
  10#define MINOR(dev)      ((unsigned int) ((dev) & MINORMASK))
  11#define MKDEV(ma,mi)    (((ma) << MINORBITS) | (mi))
  12
  13#define print_dev_t(buffer, dev)                                        \
  14        sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev))
  15
  16#define format_dev_t(buffer, dev)                                       \
  17        ({                                                              \
  18                sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev));       \
  19                buffer;                                                 \
  20        })
  21
  22/* acceptable for old filesystems */
  23static inline int old_valid_dev(dev_t dev)
  24{
  25        return MAJOR(dev) < 256 && MINOR(dev) < 256;
  26}
  27
  28static inline u16 old_encode_dev(dev_t dev)
  29{
  30        return (MAJOR(dev) << 8) | MINOR(dev);
  31}
  32
  33static inline dev_t old_decode_dev(u16 val)
  34{
  35        return MKDEV((val >> 8) & 255, val & 255);
  36}
  37
  38static inline int new_valid_dev(dev_t dev)
  39{
  40        return 1;
  41}
  42
  43static inline u32 new_encode_dev(dev_t dev)
  44{
  45        unsigned major = MAJOR(dev);
  46        unsigned minor = MINOR(dev);
  47        return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
  48}
  49
  50static inline dev_t new_decode_dev(u32 dev)
  51{
  52        unsigned major = (dev & 0xfff00) >> 8;
  53        unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00);
  54        return MKDEV(major, minor);
  55}
  56
  57static inline int huge_valid_dev(dev_t dev)
  58{
  59        return 1;
  60}
  61
  62static inline u64 huge_encode_dev(dev_t dev)
  63{
  64        return new_encode_dev(dev);
  65}
  66
  67static inline dev_t huge_decode_dev(u64 dev)
  68{
  69        return new_decode_dev(dev);
  70}
  71
  72static inline int sysv_valid_dev(dev_t dev)
  73{
  74        return MAJOR(dev) < (1<<14) && MINOR(dev) < (1<<18);
  75}
  76
  77static inline u32 sysv_encode_dev(dev_t dev)
  78{
  79        return MINOR(dev) | (MAJOR(dev) << 18);
  80}
  81
  82static inline unsigned sysv_major(u32 dev)
  83{
  84        return (dev >> 18) & 0x3fff;
  85}
  86
  87static inline unsigned sysv_minor(u32 dev)
  88{
  89        return dev & 0x3ffff;
  90}
  91
  92#endif
  93