Add some more macros to sys/param.h and sys/sysmacros.h
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / sys / sysmacros.h
1 /* Definitions of macros to access `dev_t' values.
2    Copyright (C) 2008 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _SYS_SYSMACROS_H
21 #define _SYS_SYSMACROS_H
22
23 #include <sys/isa_defs.h>
24 #include <sys/param.h>
25
26 /* Number of major/minor device bits.  */
27 #define O_BITSMAJOR     7
28 #define O_BITSMINOR     8
29 #ifdef _LP64
30 # define L_BITSMAJOR    32
31 # define L_BITSMINOR    32
32 #else
33 # define L_BITSMAJOR    14
34 # define L_BITSMINOR    18
35 #endif
36
37 /* Maximum major/minor values.  */
38 #define O_MAXMAJ        0x7F
39 #define O_MAXMIN        0xFF
40 #ifdef _LP64
41 # define L_MAXMAJ       0xFFFFFFFF
42 # define L_MAXMIN       0xFFFFFFFF
43 #else
44 # define L_MAXMAJ       0x3FFF
45 # define L_MAXMIN       0x3FFFF
46 #endif
47
48 /* Macros to get minor/major numbers.  */
49 #define major(x)        ((((unsigned)(x)) >> O_BITSMINOR) & O_MAXMAJ)
50 #define minor(x)        ((x) & O_MAXMIN)
51
52 /* Make dev.  */
53 #define makedev(x, y)   (unsigned short)(((x) << O_BITSMINOR) | \
54         ((y) & O_MAXMIN))
55
56 /* Convert new dev to old dev.  */
57 #define cmpdev(x)       ((((x) >> L_BITSMAJOR) > O_MAXMAJ) || \
58         (((x) & L_MAXMAJ) > O_MAXMAJ) ? NODEV : ((((x) >> L_BITSMAJOR) << \
59         O_BITSMINOR) | (x) & O_MAXMIN))
60
61 /* Convert old dev to new dev.  */
62 #define expdev(x)       ((((x) >> O_BITSMINOR) << L_BITSMINOR) | \
63         ((x) & O_MAXMIN))
64
65 /* Round up assuming y is power-of-2 aligned.  */
66 #define P2ROUNDUP(x, y)         (-(-(x) & -(y)))
67
68 #endif /* _SYS_SYSMACROS_H */