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