Imported Upstream version 1.1.11
[platform/upstream/cdrkit.git] / include / device.h
1 /*
2  * This file has been modified for the cdrkit suite.
3  *
4  * The behaviour and appearence of the program code below can differ to a major
5  * extent from the version distributed by the original author(s).
6  *
7  * For details, see Changelog file distributed with the cdrkit package. If you
8  * received this file from another source then ask the distributing person for
9  * a log of modifications.
10  *
11  */
12
13 /* @(#)device.h 1.13 05/01/24 Copyright 1995 J. Schilling */
14 /*
15  *      Generic header for users of major(), minor() and makedev()
16  *
17  *      Copyright (c) 1995 J. Schilling
18  */
19 /*
20  * This program is free software; you can redistribute it and/or modify
21  * it under the terms of the GNU General Public License version 2
22  * as published by the Free Software Foundation.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License along with
30  * this program; see the file COPYING.  If not, write to the Free Software
31  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32  */
33
34 #ifndef _DEVICE_H
35 #define _DEVICE_H
36
37 #ifndef _MCONFIG_H
38 #include <mconfig.h>
39 #endif
40 #ifndef _PROTOTYP_H
41 #include <prototyp.h>
42 #endif
43
44 /*
45  * On generic SVR4, major is a function (defined in sys/mkdev.h).
46  * On Solaris it is defined ...
47  * As we cannot just test if major is #define'd, we have to
48  * define _FOUND_MAJOR_ instead.
49  *
50  * WARNING: Do never include <sys/sysmacros.h> in SVR4, it contains
51  * an old definition for major()/minor() defining 8 minorbits.
52  * Use <sys/mkdev.h> instead.
53  */
54 #ifndef _INCL_SYS_TYPES_H
55 #include <sys/types.h>
56 #define _INCL_SYS_TYPES_H
57 #endif
58 /*
59  * Some systems define major in <sys/types.h>.
60  * We are ready...
61  */
62 #ifdef major
63 #       define _FOUND_MAJOR_
64 #endif
65
66 #ifdef MAJOR_IN_MKDEV
67 #       ifndef  _INCL_SYS_MKDEV_H
68 #       include <sys/mkdev.h>
69 #       define  _INCL_SYS_MKDEV_H
70 #       endif
71         /*
72          * Interix doesn't use makedev(); it uses mkdev()
73          */
74 #       if !defined(makedev) && defined(mkdev)
75 #               define makedev(a,b)     mkdev((a),(b))
76 #       endif
77 #       define _FOUND_MAJOR_
78 #endif
79
80 #ifndef _FOUND_MAJOR_
81 #       ifdef MAJOR_IN_SYSMACROS
82 #               ifndef  _INCL_SYS_SYSMACROS_H
83 #               include <sys/sysmacros.h>
84 #               define  _INCL_SYS_SYSMACROS_H
85 #               endif
86 #               define _FOUND_MAJOR_
87 #       endif
88 #endif
89
90 /*
91  * If we are on HP/UX before HP/UX 8,
92  * major/minor are not in <sys/sysmacros.h>.
93  */
94 #ifndef _FOUND_MAJOR_
95 #       if defined(hpux) || defined(__hpux__) || defined(__hpux)
96 #               ifndef  _INCL_SYS_MKOD_H
97 #               include <sys/mknod.h>
98 #               define  _INCL_SYS_MKOD_H
99 #               endif
100 #               define _FOUND_MAJOR_
101 #       endif
102 #endif
103
104 #ifdef  __cplusplus
105 extern "C" {
106 #endif
107
108 /*
109  * For all other systems define major()/minor() here.
110  * XXX Check if this definition will be usefull for ms dos too.
111  */
112 #ifndef _FOUND_MAJOR_
113 #       define major(dev)               (((dev) >> 8) & 0xFF)
114 #       define minor(dev)               ((dev) & 0xFF)
115 #       define makedev(majo, mino)      (((majo) << 8) | (mino))
116 #endif
117
118 /*
119  * Don't pollute namespace...
120  */
121 #undef _FOUND_MAJOR_
122
123 #ifdef  __XDEV__
124 /*
125  * The following defines are currently only needed for 'star'.
126  * We make it conditional code to avoid to pollute the namespace.
127  */
128 #define XDEV_T  unsigned long
129
130 extern  int     minorbits;
131 extern  XDEV_T  minormask;
132 extern  XDEV_T  _dev_mask[];
133
134 #define dev_major(dev)                  (((XDEV_T)(dev)) >> minorbits)
135 #define _dev_major(mbits, dev)          (((XDEV_T)(dev)) >> (mbits))
136
137 #define dev_minor(dev)                  (((XDEV_T)(dev)) & minormask)
138 #define _dev_minor(mbits, dev)          (((XDEV_T)(dev)) & _dev_mask[(mbits)])
139
140
141 #define dev_make(majo, mino)            ((((XDEV_T)(majo)) << minorbits) | \
142                                                         ((XDEV_T)(mino)))
143 #define _dev_make(mbits, majo, mino)    ((((XDEV_T)(majo)) << (mbits) | \
144                                                         ((XDEV_T)(mino)))
145
146 extern  void    dev_init(BOOL debug);
147 #ifndef dev_major
148 extern  XDEV_T  dev_major(XDEV_T dev);
149 extern  XDEV_T  _dev_major(int mbits, XDEV_T dev);
150 extern  XDEV_T  dev_minor(XDEV_T dev);
151 extern  XDEV_T  _dev_minor(int mbits, XDEV_T dev);
152 extern  XDEV_T  dev_make(XDEV_T majo, XDEV_T mino);
153 extern  XDEV_T  _dev_make(int mbits, XDEV_T majo, XDEV_T mino);
154 #endif
155
156 #endif  /* __XDEV__ */
157
158 #ifdef  __cplusplus
159 }
160 #endif
161
162 #endif  /* _DEVICE_H */