xref: /csrg-svn/sys/stand.att/dev.c (revision 44516)
133510Sbostic /*
233510Sbostic  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
333510Sbostic  * All rights reserved.
433510Sbostic  *
5*44516Sbostic  * %sccs.include.redist.c%
633510Sbostic  *
7*44516Sbostic  *	@(#)dev.c	7.8 (Berkeley) 06/28/90
833510Sbostic  */
933510Sbostic 
1040501Sroot #include "sys/param.h"
1133510Sbostic #include "saio.h"
1233510Sbostic 
1333670Sbostic /*
1440502Smckusick  * NB: the value "io->i_dev", used to offset the devsw[] array
1533670Sbostic  * in the routines below, is munged by the vaxstand Makefile to work
1633670Sbostic  * for certain boots.
1733670Sbostic  */
1833670Sbostic 
1933510Sbostic devread(io)
2033510Sbostic 	register struct iob *io;
2133510Sbostic {
2233510Sbostic 	int cc;
2333510Sbostic 
2433510Sbostic 	io->i_flgs |= F_RDDATA;
2533510Sbostic 	io->i_error = 0;
2640502Smckusick 	cc = (*devsw[io->i_dev].dv_strategy)(io, READ);
2733510Sbostic 	io->i_flgs &= ~F_TYPEMASK;
2833510Sbostic 	return (cc);
2933510Sbostic }
3033510Sbostic 
3133510Sbostic devwrite(io)
3233510Sbostic 	register struct iob *io;
3333510Sbostic {
3433510Sbostic 	int cc;
3533510Sbostic 
3633510Sbostic 	io->i_flgs |= F_WRDATA;
3733510Sbostic 	io->i_error = 0;
3840502Smckusick 	cc = (*devsw[io->i_dev].dv_strategy)(io, WRITE);
3933510Sbostic 	io->i_flgs &= ~F_TYPEMASK;
4033510Sbostic 	return (cc);
4133510Sbostic }
4233510Sbostic 
4333510Sbostic devopen(io)
4433510Sbostic 	register struct iob *io;
4533510Sbostic {
4633670Sbostic 	int ret;
4733670Sbostic 
4840502Smckusick 	if (!(ret = (*devsw[io->i_dev].dv_open)(io)))
4933670Sbostic 		return (0);
5040502Smckusick 	printf("%s(%d,%d,%d,%d): ", devsw[io->i_dev].dv_name,
5133670Sbostic 		io->i_adapt, io->i_ctlr, io->i_unit, io->i_part);
5233670Sbostic 	switch(ret) {
5334517Skarels 	case EIO:
5434517Skarels 		break;		/* already reported */
5533670Sbostic 	case EADAPT:
5634517Skarels 		printf("bad adaptor number\n");
5733670Sbostic 		break;
5833670Sbostic 	case ECTLR:
5934517Skarels 		printf("bad controller number\n");
6033670Sbostic 		break;
6133670Sbostic 	case EUNIT:
6234517Skarels 		printf("bad drive number\n");
6333670Sbostic 		break;
6433670Sbostic 	case EPART:
6533670Sbostic 		printf("bad partition\n");
6633670Sbostic 		break;
6733670Sbostic 	case ERDLAB:
6833670Sbostic 		printf("can't read disk label\n");
6933670Sbostic 		break;
7033670Sbostic 	case EUNLAB:
7133670Sbostic 		printf("unlabeled\n");
7233670Sbostic 		break;
7333670Sbostic 	case ENXIO:
7434517Skarels 		printf("bad device specification\n");
7534517Skarels 		break;
7633670Sbostic 	default:
7734517Skarels 		printf("unknown open error\n");
7834517Skarels 		break;
7933670Sbostic 	}
8033670Sbostic 	return (ret);
8133510Sbostic }
8233510Sbostic 
8333510Sbostic devclose(io)
8433510Sbostic 	register struct iob *io;
8533510Sbostic {
8640502Smckusick 	(*devsw[io->i_dev].dv_close)(io);
8733510Sbostic }
8833510Sbostic 
8933510Sbostic devioctl(io, cmd, arg)
9033510Sbostic 	register struct iob *io;
9133510Sbostic 	int cmd;
9233510Sbostic 	caddr_t arg;
9333510Sbostic {
9440502Smckusick 	return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg));
9533510Sbostic }
9633510Sbostic 
9733510Sbostic /*ARGSUSED*/
9833510Sbostic nullsys(io)
9933510Sbostic 	struct iob *io;
10033510Sbostic {}
10133510Sbostic 
10233510Sbostic /*ARGSUSED*/
10333510Sbostic nodev(io)
10433510Sbostic 	struct iob *io;
10533510Sbostic {
10633510Sbostic 	errno = EBADF;
10733510Sbostic }
10833510Sbostic 
10933510Sbostic /*ARGSUSED*/
11033510Sbostic noioctl(io, cmd, arg)
11133510Sbostic 	struct iob *io;
11233510Sbostic 	int cmd;
11333510Sbostic 	caddr_t arg;
11433510Sbostic {
11533510Sbostic 	return (ECMD);
11633510Sbostic }
117