summaryrefslogtreecommitdiff
path: root/lib/mlibc/options/linux/include/sys/sysmacros.h
blob: 230858b60ca72bde0866ebfecad4ac1198de0fe1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef _SYS_SYSMACROS_H
#define _SYS_SYSMACROS_H

#ifdef __cplusplus
extern "C" {
#endif

#include <bits/inline-definition.h>

__MLIBC_INLINE_DEFINITION unsigned int __mlibc_dev_major(
		unsigned long long int __dev) {
  return ((__dev >> 8) & 0xfff) | ((unsigned int)(__dev >> 32) & ~0xfff);
}

__MLIBC_INLINE_DEFINITION unsigned int __mlibc_dev_minor(
		unsigned long long int __dev) {
  return (__dev & 0xff) | ((unsigned int)(__dev >> 12) & ~0xff);
}

__MLIBC_INLINE_DEFINITION unsigned long long int __mlibc_dev_makedev(
		unsigned int __major, unsigned int __minor) {
  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
	  | (((unsigned long long int)(__minor & ~0xff)) << 12)
	  | (((unsigned long long int)(__major & ~0xfff)) << 32));
}

#define major(dev) __mlibc_dev_major(dev)
#define minor(dev) __mlibc_dev_minor(dev)
#define makedev(major, minor) __mlibc_dev_makedev(major, minor)

#ifdef __cplusplus
}
#endif

#endif // _SYS_SYSMACROS_H