BSD 4_4 release
[unix-history] / usr / src / sys / luna68k / stand / conf.c
/*
* Copyright (c) 1992 OMRON Corporation.
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* OMRON Corporation.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)conf.c 8.1 (Berkeley) 6/10/93
*/
#include <luna68k/stand/saio.h>
devread(io)
register struct iob *io;
{
int cc;
io->i_flgs |= F_RDDATA;
io->i_error = 0;
cc = (*devsw[io->i_dev].dv_strategy)(io, READ);
io->i_flgs &= ~F_TYPEMASK;
return (cc);
}
devwrite(io)
register struct iob *io;
{
int cc;
io->i_flgs |= F_WRDATA;
io->i_error = 0;
cc = (*devsw[io->i_dev].dv_strategy)(io, WRITE);
io->i_flgs &= ~F_TYPEMASK;
return (cc);
}
devopen(io)
register struct iob *io;
{
(*devsw[io->i_dev].dv_open)(io);
}
devclose(io)
register struct iob *io;
{
(*devsw[io->i_dev].dv_close)(io);
}
devioctl(io, cmd, arg)
register struct iob *io;
int cmd;
caddr_t arg;
{
return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg));
}
/*ARGSUSED*/
nullsys(io)
struct iob *io;
{
;
}
/*ARGSUSED*/
nullioctl(io, cmd, arg)
struct iob *io;
int cmd;
caddr_t arg;
{
return (ECMD);
}
int nullsys(), nullioctl();
int sdstrategy(), sdopen(), sdioctl();
struct devsw devsw[] = {
{ "sd", sdstrategy, sdopen, nullsys, nullioctl },
{ 0, 0, 0, 0, 0 },
};
dev_t
make_device(str)
char *str;
{
char *cp;
struct devsw *dp;
int major, unit, part;
/*
* parse path strings
*/
/* find end of dev type name */
for (cp = str; *cp && *cp != '('; cp++)
;
if (*cp != '(') {
return (-1);
}
/* compare dev type name */
*cp = '\0';
for (dp = devsw; dp->dv_name; dp++)
if (!strcmp(str, dp->dv_name))
break;
*cp++ = '(';
if (dp->dv_name == NULL) {
return (-1);
}
major = dp - devsw;
/* get unit number */
unit = *cp++ - '0';
if (*cp >= '0' && *cp <= '9')
unit = unit * 10 + *cp++ - '0';
if (unit < 0 || unit > 63) {
return (-1);
}
/* get partition offset */
if (*cp++ != ',') {
return (-1);
}
part = *cp - '0';
/* check out end of dev spec */
for (;;) {
if (*cp == ')')
break;
if (*cp++)
continue;
return (-1);
}
return(major << 8 | unit << 3 | part);
}