xref: /csrg-svn/sys/stand.att/dev.c (revision 63370)
133510Sbostic /*
2*63370Sbostic  * Copyright (c) 1982, 1986, 1988, 1993
3*63370Sbostic  *	The Regents of the University of California.  All rights reserved.
433510Sbostic  *
544516Sbostic  * %sccs.include.redist.c%
633510Sbostic  *
7*63370Sbostic  *	@(#)dev.c	8.1 (Berkeley) 06/11/93
833510Sbostic  */
933510Sbostic 
1049169Sbostic #include <sys/param.h>
1149084Sbostic #include <setjmp.h>
1260328Smckusick #include <stand.att/saio.h>
1333510Sbostic 
1433670Sbostic /*
1549084Sbostic  * NB: the value "io->i_dev", used to offset the devsw[] array in the
1649084Sbostic  * routines below, is munged by the machine specific stand Makefiles
1749084Sbostic  * to work for certain boots.
1833670Sbostic  */
1933670Sbostic 
2049084Sbostic jmp_buf exception;
2149084Sbostic 
devread(io)2233510Sbostic devread(io)
2333510Sbostic 	register struct iob *io;
2433510Sbostic {
2533510Sbostic 	int cc;
2633510Sbostic 
2733510Sbostic 	io->i_flgs |= F_RDDATA;
2833510Sbostic 	io->i_error = 0;
2948977Sbostic 	cc = (*devsw[io->i_dev].dv_strategy)(io, F_READ);
3033510Sbostic 	io->i_flgs &= ~F_TYPEMASK;
3149178Sbostic #ifndef SMALL
3249084Sbostic 	if (scankbd())
3349109Sbostic 		_longjmp(exception, 1);
3449178Sbostic #endif
3533510Sbostic 	return (cc);
3633510Sbostic }
3733510Sbostic 
devwrite(io)3833510Sbostic devwrite(io)
3933510Sbostic 	register struct iob *io;
4033510Sbostic {
4133510Sbostic 	int cc;
4233510Sbostic 
4333510Sbostic 	io->i_flgs |= F_WRDATA;
4433510Sbostic 	io->i_error = 0;
4549084Sbostic 	cc = (*devsw[io->i_dev].dv_strategy)(io, F_WRITE);
4633510Sbostic 	io->i_flgs &= ~F_TYPEMASK;
4749178Sbostic #ifndef SMALL
4849084Sbostic 	if (scankbd())
4949109Sbostic 		_longjmp(exception, 1);
5049178Sbostic #endif
5133510Sbostic 	return (cc);
5233510Sbostic }
5333510Sbostic 
devopen(io)5433510Sbostic devopen(io)
5533510Sbostic 	register struct iob *io;
5633510Sbostic {
5733670Sbostic 	int ret;
5833670Sbostic 
5940502Smckusick 	if (!(ret = (*devsw[io->i_dev].dv_open)(io)))
6033670Sbostic 		return (0);
6149178Sbostic #ifdef SMALL
6249178Sbostic 	printf("open error\n");
6349178Sbostic #else
6440502Smckusick 	printf("%s(%d,%d,%d,%d): ", devsw[io->i_dev].dv_name,
6533670Sbostic 		io->i_adapt, io->i_ctlr, io->i_unit, io->i_part);
6633670Sbostic 	switch(ret) {
6734517Skarels 	case EIO:
6834517Skarels 		break;		/* already reported */
6933670Sbostic 	case EADAPT:
7034517Skarels 		printf("bad adaptor number\n");
7133670Sbostic 		break;
7233670Sbostic 	case ECTLR:
7334517Skarels 		printf("bad controller number\n");
7433670Sbostic 		break;
7533670Sbostic 	case EUNIT:
7634517Skarels 		printf("bad drive number\n");
7733670Sbostic 		break;
7833670Sbostic 	case EPART:
7933670Sbostic 		printf("bad partition\n");
8033670Sbostic 		break;
8133670Sbostic 	case ERDLAB:
8233670Sbostic 		printf("can't read disk label\n");
8333670Sbostic 		break;
8433670Sbostic 	case EUNLAB:
8533670Sbostic 		printf("unlabeled\n");
8633670Sbostic 		break;
8733670Sbostic 	case ENXIO:
8834517Skarels 		printf("bad device specification\n");
8934517Skarels 		break;
9033670Sbostic 	default:
9134517Skarels 		printf("unknown open error\n");
9234517Skarels 		break;
9333670Sbostic 	}
9449178Sbostic #endif
9533670Sbostic 	return (ret);
9633510Sbostic }
9733510Sbostic 
devclose(io)9833510Sbostic devclose(io)
9933510Sbostic 	register struct iob *io;
10033510Sbostic {
10140502Smckusick 	(*devsw[io->i_dev].dv_close)(io);
10233510Sbostic }
10333510Sbostic 
devioctl(io,cmd,arg)10433510Sbostic devioctl(io, cmd, arg)
10533510Sbostic 	register struct iob *io;
10633510Sbostic 	int cmd;
10733510Sbostic 	caddr_t arg;
10833510Sbostic {
10940502Smckusick 	return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg));
11033510Sbostic }
11133510Sbostic 
11249084Sbostic /* ARGSUSED */
11333510Sbostic nullsys(io)
11433510Sbostic 	struct iob *io;
11533510Sbostic {}
11633510Sbostic 
11749084Sbostic /* ARGSUSED */
11833510Sbostic nodev(io)
11933510Sbostic 	struct iob *io;
12033510Sbostic {
12133510Sbostic 	errno = EBADF;
12249169Sbostic 	return(-1);
12333510Sbostic }
12433510Sbostic 
12549084Sbostic /* ARGSUSED */
12633510Sbostic noioctl(io, cmd, arg)
12733510Sbostic 	struct iob *io;
12833510Sbostic 	int cmd;
12933510Sbostic 	caddr_t arg;
13033510Sbostic {
13133510Sbostic 	return (ECMD);
13233510Sbostic }
133