157081Sakito /*
257081Sakito * Copyright (c) 1992 OMRON Corporation.
3*63199Sbostic * Copyright (c) 1992, 1993
4*63199Sbostic * The Regents of the University of California. All rights reserved.
557081Sakito *
657081Sakito * This code is derived from software contributed to Berkeley by
757081Sakito * OMRON Corporation.
857081Sakito *
957081Sakito * %sccs.include.redist.c%
1057081Sakito *
11*63199Sbostic * @(#)conf.c 8.1 (Berkeley) 06/10/93
1257081Sakito */
1357081Sakito
1457081Sakito #include <luna68k/stand/saio.h>
1557081Sakito
devread(io)1657081Sakito devread(io)
1757081Sakito register struct iob *io;
1857081Sakito {
1957081Sakito int cc;
2057081Sakito
2157081Sakito io->i_flgs |= F_RDDATA;
2257081Sakito io->i_error = 0;
2357081Sakito cc = (*devsw[io->i_dev].dv_strategy)(io, READ);
2457081Sakito io->i_flgs &= ~F_TYPEMASK;
2557081Sakito return (cc);
2657081Sakito }
2757081Sakito
devwrite(io)2857081Sakito devwrite(io)
2957081Sakito register struct iob *io;
3057081Sakito {
3157081Sakito int cc;
3257081Sakito
3357081Sakito io->i_flgs |= F_WRDATA;
3457081Sakito io->i_error = 0;
3557081Sakito cc = (*devsw[io->i_dev].dv_strategy)(io, WRITE);
3657081Sakito io->i_flgs &= ~F_TYPEMASK;
3757081Sakito return (cc);
3857081Sakito }
3957081Sakito
devopen(io)4057081Sakito devopen(io)
4157081Sakito register struct iob *io;
4257081Sakito {
4357081Sakito
4457081Sakito (*devsw[io->i_dev].dv_open)(io);
4557081Sakito }
4657081Sakito
devclose(io)4757081Sakito devclose(io)
4857081Sakito register struct iob *io;
4957081Sakito {
5057081Sakito
5157081Sakito (*devsw[io->i_dev].dv_close)(io);
5257081Sakito }
5357081Sakito
devioctl(io,cmd,arg)5457081Sakito devioctl(io, cmd, arg)
5557081Sakito register struct iob *io;
5657081Sakito int cmd;
5757081Sakito caddr_t arg;
5857081Sakito {
5957081Sakito
6057081Sakito return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg));
6157081Sakito }
6257081Sakito
6357081Sakito /*ARGSUSED*/
6457081Sakito nullsys(io)
6557081Sakito struct iob *io;
6657081Sakito {
6757081Sakito
6857081Sakito ;
6957081Sakito }
7057081Sakito
7157081Sakito /*ARGSUSED*/
7257081Sakito nullioctl(io, cmd, arg)
7357081Sakito struct iob *io;
7457081Sakito int cmd;
7557081Sakito caddr_t arg;
7657081Sakito {
7757081Sakito
7857081Sakito return (ECMD);
7957081Sakito }
8057081Sakito
8157081Sakito int nullsys(), nullioctl();
8257081Sakito int sdstrategy(), sdopen(), sdioctl();
8357081Sakito
8457081Sakito struct devsw devsw[] = {
8557081Sakito { "sd", sdstrategy, sdopen, nullsys, nullioctl },
8657081Sakito { 0, 0, 0, 0, 0 },
8757081Sakito };
8857081Sakito
8957081Sakito dev_t
make_device(str)9057081Sakito make_device(str)
9157081Sakito char *str;
9257081Sakito {
9357081Sakito char *cp;
9457081Sakito struct devsw *dp;
9557081Sakito int major, unit, part;
9657081Sakito
9757081Sakito /*
9857081Sakito * parse path strings
9957081Sakito */
10057081Sakito /* find end of dev type name */
10157081Sakito for (cp = str; *cp && *cp != '('; cp++)
10257081Sakito ;
10357081Sakito if (*cp != '(') {
10457081Sakito return (-1);
10557081Sakito }
10657081Sakito /* compare dev type name */
10757081Sakito *cp = '\0';
10857081Sakito for (dp = devsw; dp->dv_name; dp++)
10957081Sakito if (!strcmp(str, dp->dv_name))
11057081Sakito break;
11157081Sakito *cp++ = '(';
11257081Sakito if (dp->dv_name == NULL) {
11357081Sakito return (-1);
11457081Sakito }
11557081Sakito major = dp - devsw;
11657081Sakito /* get unit number */
11757081Sakito unit = *cp++ - '0';
11857081Sakito if (*cp >= '0' && *cp <= '9')
11957081Sakito unit = unit * 10 + *cp++ - '0';
12057081Sakito if (unit < 0 || unit > 63) {
12157081Sakito return (-1);
12257081Sakito }
12357081Sakito /* get partition offset */
12457081Sakito if (*cp++ != ',') {
12557081Sakito return (-1);
12657081Sakito }
12757081Sakito part = *cp - '0';
12857081Sakito /* check out end of dev spec */
12957081Sakito for (;;) {
13057081Sakito if (*cp == ')')
13157081Sakito break;
13257081Sakito if (*cp++)
13357081Sakito continue;
13457081Sakito return (-1);
13557081Sakito }
13657081Sakito
13757081Sakito return(major << 8 | unit << 3 | part);
13857081Sakito }
139