xref: /original-bsd/sys/stand.att/dev.c (revision f052b07a)
1 /*
2  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  *	@(#)dev.c	7.4 (Berkeley) 06/29/88
18  */
19 
20 #include "param.h"
21 #include "inode.h"
22 #include "fs.h"
23 #include "saio.h"
24 
25 /*
26  * NB: the value "io->i_ino.i_dev", used to offset the devsw[] array
27  * in the routines below, is munged by the vaxstand Makefile to work
28  * for certain boots.
29  */
30 
31 devread(io)
32 	register struct iob *io;
33 {
34 	int cc;
35 
36 	io->i_flgs |= F_RDDATA;
37 	io->i_error = 0;
38 	cc = (*devsw[io->i_ino.i_dev].dv_strategy)(io, READ);
39 	io->i_flgs &= ~F_TYPEMASK;
40 	return (cc);
41 }
42 
43 devwrite(io)
44 	register struct iob *io;
45 {
46 	int cc;
47 
48 	io->i_flgs |= F_WRDATA;
49 	io->i_error = 0;
50 	cc = (*devsw[io->i_ino.i_dev].dv_strategy)(io, WRITE);
51 	io->i_flgs &= ~F_TYPEMASK;
52 	return (cc);
53 }
54 
55 devopen(io)
56 	register struct iob *io;
57 {
58 	int ret;
59 
60 	if (!(ret = (*devsw[io->i_ino.i_dev].dv_open)(io)))
61 		return (0);
62 	printf("%s(%d,%d,%d,%d): ", devsw[io->i_ino.i_dev].dv_name,
63 		io->i_adapt, io->i_ctlr, io->i_unit, io->i_part);
64 	switch(ret) {
65 	case EIO:
66 		break;		/* already reported */
67 	case EADAPT:
68 		printf("bad adaptor number\n");
69 		break;
70 	case ECTLR:
71 		printf("bad controller number\n");
72 		break;
73 	case EUNIT:
74 		printf("bad drive number\n");
75 		break;
76 	case EPART:
77 		printf("bad partition\n");
78 		break;
79 	case ERDLAB:
80 		printf("can't read disk label\n");
81 		break;
82 	case EUNLAB:
83 		printf("unlabeled\n");
84 		break;
85 	case ENXIO:
86 		printf("bad device specification\n");
87 		break;
88 	default:
89 		printf("unknown open error\n");
90 		break;
91 	}
92 	return (ret);
93 }
94 
95 devclose(io)
96 	register struct iob *io;
97 {
98 	(*devsw[io->i_ino.i_dev].dv_close)(io);
99 }
100 
101 devioctl(io, cmd, arg)
102 	register struct iob *io;
103 	int cmd;
104 	caddr_t arg;
105 {
106 	return ((*devsw[io->i_ino.i_dev].dv_ioctl)(io, cmd, arg));
107 }
108 
109 /*ARGSUSED*/
110 nullsys(io)
111 	struct iob *io;
112 {}
113 
114 /*ARGSUSED*/
115 nodev(io)
116 	struct iob *io;
117 {
118 	errno = EBADF;
119 }
120 
121 /*ARGSUSED*/
122 noioctl(io, cmd, arg)
123 	struct iob *io;
124 	int cmd;
125 	caddr_t arg;
126 {
127 	return (ECMD);
128 }
129