File: /Users/paulross/dev/linux/linux-3.13/include/linux/kdev_t.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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 */
      23: static inline int old_valid_dev(dev_t dev)
      24: {
      25:     return MAJOR(dev) < 256 && MINOR(dev) < 256;
      26: }
      27: 
      28: static inline u16 old_encode_dev(dev_t dev)
      29: {
      30:     return (MAJOR(dev) << 8) | MINOR(dev);
      31: }
      32: 
      33: static inline dev_t old_decode_dev(u16 val)
      34: {
      35:     return MKDEV((val >> 8) & 255, val & 255);
      36: }
      37: 
      38: static inline int new_valid_dev(dev_t dev)
      39: {
      40:     return 1;
      41: }
      42: 
      43: static 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: 
      50: static 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: 
      57: static inline int huge_valid_dev(dev_t dev)
      58: {
      59:     return 1;
      60: }
      61: 
      62: static inline u64 huge_encode_dev(dev_t dev)
      63: {
      64:     return new_encode_dev(dev);
      65: }
      66: 
      67: static inline dev_t huge_decode_dev(u64 dev)
      68: {
      69:     return new_decode_dev(dev);
      70: }
      71: 
      72: static inline int sysv_valid_dev(dev_t dev)
      73: {
      74:     return MAJOR(dev) < (1<<14) && MINOR(dev) < (1<<18);
      75: }
      76: 
      77: static inline u32 sysv_encode_dev(dev_t dev)
      78: {
      79:     return MINOR(dev) | (MAJOR(dev) << 18);
      80: }
      81: 
      82: static inline unsigned sysv_major(u32 dev)
      83: {
      84:     return (dev >> 18) & 0x3fff;
      85: }
      86: 
      87: static inline unsigned sysv_minor(u32 dev)
      88: {
      89:     return dev & 0x3ffff;
      90: }
      91: 
      92: #endif
      93: