/* @(#)device.c 1.8 01/10/29 Copyright 1996 J. Schilling */
#ifndef lint
static char sccsid[] =
"@(#)device.c 1.8 01/10/29 Copyright 1996 J. Schilling";
#endif
/*
* Handle local and remote device major/minor mappings
*
* Copyright (c) 1996 J. Schilling
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <mconfig.h>
#include <standard.h>
#include <schily.h>
#define __XDEV__ /* Needed to activate XDEV_T definitions */
#include <device.h>
#ifdef DEV_DEFAULTS
EXPORT int minorbits = 8;
EXPORT XDEV_T minormask = 0xFFLU;
#else
EXPORT int minorbits;
EXPORT XDEV_T minormask;
#endif
#ifdef __STDC__
EXPORT XDEV_T _dev_mask[] = {
0x00000000LU,
0x00000001LU,
0x00000003LU,
0x00000007LU,
0x0000000FLU,
0x0000001FLU,
0x0000003FLU,
0x0000007FLU,
0x000000FFLU,
0x000001FFLU,
0x000003FFLU,
0x000007FFLU,
0x00000FFFLU,
0x00001FFFLU,
0x00003FFFLU,
0x00007FFFLU,
0x0000FFFFLU,
0x0001FFFFLU,
0x0003FFFFLU,
0x0007FFFFLU,
0x000FFFFFLU,
0x001FFFFFLU,
0x003FFFFFLU,
0x007FFFFFLU,
0x00FFFFFFLU,
0x01FFFFFFLU,
0x03FFFFFFLU,
0x07FFFFFFLU,
0x0FFFFFFFLU,
0x1FFFFFFFLU,
0x3FFFFFFFLU,
0x7FFFFFFFLU,
0xFFFFFFFFLU,
#if SIZEOF_UNSIGNED_LONG_INT > 4
0x00000001FFFFFFFFLU,
0x00000003FFFFFFFFLU,
0x00000007FFFFFFFFLU,
0x0000000FFFFFFFFFLU,
0x0000001FFFFFFFFFLU,
0x0000003FFFFFFFFFLU,
0x0000007FFFFFFFFFLU,
0x000000FFFFFFFFFFLU,
0x000001FFFFFFFFFFLU,
0x000003FFFFFFFFFFLU,
0x000007FFFFFFFFFFLU,
0x00000FFFFFFFFFFFLU,
0x00001FFFFFFFFFFFLU,
0x00003FFFFFFFFFFFLU,
0x00007FFFFFFFFFFFLU,
0x0000FFFFFFFFFFFFLU,
0x0001FFFFFFFFFFFFLU,
0x0003FFFFFFFFFFFFLU,
0x0007FFFFFFFFFFFFLU,
0x000FFFFFFFFFFFFFLU,
0x001FFFFFFFFFFFFFLU,
0x003FFFFFFFFFFFFFLU,
0x007FFFFFFFFFFFFFLU,
0x00FFFFFFFFFFFFFFLU,
0x01FFFFFFFFFFFFFFLU,
0x03FFFFFFFFFFFFFFLU,
0x07FFFFFFFFFFFFFFLU,
0x0FFFFFFFFFFFFFFFLU,
0x1FFFFFFFFFFFFFFFLU,
0x3FFFFFFFFFFFFFFFLU,
0x7FFFFFFFFFFFFFFFLU,
0xFFFFFFFFFFFFFFFFLU,
#endif
};
#else
EXPORT XDEV_T _dev_mask[] = {
0x00000000L,
0x00000001L,
0x00000003L,
0x00000007L,
0x0000000FL,
0x0000001FL,
0x0000003FL,
0x0000007FL,
0x000000FFL,
0x000001FFL,
0x000003FFL,
0x000007FFL,
0x00000FFFL,
0x00001FFFL,
0x00003FFFL,
0x00007FFFL,
0x0000FFFFL,
0x0001FFFFL,
0x0003FFFFL,
0x0007FFFFL,
0x000FFFFFL,
0x001FFFFFL,
0x003FFFFFL,
0x007FFFFFL,
0x00FFFFFFL,
0x01FFFFFFL,
0x03FFFFFFL,
0x07FFFFFFL,
0x0FFFFFFFL,
0x1FFFFFFFL,
0x3FFFFFFFL,
0x7FFFFFFFL,
0xFFFFFFFFL,
#if SIZEOF_UNSIGNED_LONG_INT > 4
0x00000001FFFFFFFFL,
0x00000003FFFFFFFFL,
0x00000007FFFFFFFFL,
0x0000000FFFFFFFFFL,
0x0000001FFFFFFFFFL,
0x0000003FFFFFFFFFL,
0x0000007FFFFFFFFFL,
0x000000FFFFFFFFFFL,
0x000001FFFFFFFFFFL,
0x000003FFFFFFFFFFL,
0x000007FFFFFFFFFFL,
0x00000FFFFFFFFFFFL,
0x00001FFFFFFFFFFFL,
0x00003FFFFFFFFFFFL,
0x00007FFFFFFFFFFFL,
0x0000FFFFFFFFFFFFL,
0x0001FFFFFFFFFFFFL,
0x0003FFFFFFFFFFFFL,
0x0007FFFFFFFFFFFFL,
0x000FFFFFFFFFFFFFL,
0x001FFFFFFFFFFFFFL,
0x003FFFFFFFFFFFFFL,
0x007FFFFFFFFFFFFFL,
0x00FFFFFFFFFFFFFFL,
0x01FFFFFFFFFFFFFFL,
0x03FFFFFFFFFFFFFFL,
0x07FFFFFFFFFFFFFFL,
0x0FFFFFFFFFFFFFFFL,
0x1FFFFFFFFFFFFFFFL,
0x3FFFFFFFFFFFFFFFL,
0x7FFFFFFFFFFFFFFFL,
0xFFFFFFFFFFFFFFFFL,
#endif
};
#endif
EXPORT void
dev_init(debug)
BOOL debug;
{
int i;
dev_t x;
for (i=0, x=1; minor(x) == x; i++, x<<=1)
;
minorbits = i;
minormask = _dev_mask[i];
if (debug)
error("dev_minorbits: %d\n", minorbits);
}
#ifdef IS_LIBRARY
#undef dev_major
EXPORT XDEV_T
dev_major(dev)
XDEV_T dev;
{
return (dev >> minorbits);
}
#undef _dev_major
EXPORT XDEV_T
_dev_major(mbits, dev)
int mbits;
XDEV_T dev;
{
return (dev >> mbits);
}
#undef dev_minor
EXPORT XDEV_T
dev_minor(dev)
XDEV_T dev;
{
return (dev & minormask);
}
#undef _dev_minor
EXPORT XDEV_T
_dev_minor(mbits, dev)
int mbits;
XDEV_T dev;
{
return (dev & _dev_mask[mbits]);
}
#undef dev_make
EXPORT XDEV_T
dev_make(majo, mino)
XDEV_T majo;
XDEV_T mino;
{
return ((majo << minorbits) | mino);
}
#undef _dev_make
EXPORT XDEV_T
_dev_make(mbits, majo, mino)
int mbits;
XDEV_T majo;
XDEV_T mino;
{
return ((majo << mbits) | mino);
}
#endif /* IS_LIBRARY */
syntax highlighted by Code2HTML, v. 0.9.1