|
|
1.1 root 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, with or without
6: * modification, are permitted provided that the following conditions
7: * are met:
8: * 1. Redistributions of source code must retain the above copyright
9: * notice, this list of conditions and the following disclaimer.
10: * 2. Redistributions in binary form must reproduce the above copyright
11: * notice, this list of conditions and the following disclaimer in the
12: * documentation and/or other materials provided with the distribution.
13: * 3. All advertising materials mentioning features or use of this software
14: * must display the following acknowledgement:
15: * This product includes software developed by the University of
16: * California, Berkeley and its contributors.
17: * 4. Neither the name of the University nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: *
33: * @(#)dev.c 7.14 (Berkeley) 5/5/91
34: */
35:
36: #include <sys/param.h>
37: #include <setjmp.h>
38: #include "saio.h"
39:
40: /*
41: * NB: the value "io->i_dev", used to offset the devsw[] array in the
42: * routines below, is munged by the machine specific stand Makefiles
43: * to work for certain boots.
44: */
45:
46: jmp_buf exception;
47:
48: devread(io)
49: register struct iob *io;
50: {
51: int cc;
52:
53: io->i_flgs |= F_RDDATA;
54: io->i_error = 0;
55: cc = (*devsw[io->i_dev].dv_strategy)(io, F_READ);
56: io->i_flgs &= ~F_TYPEMASK;
57: #ifndef SMALL
58: if (scankbd())
59: _longjmp(exception, 1);
60: #endif
61: return (cc);
62: }
63:
64: devwrite(io)
65: register struct iob *io;
66: {
67: int cc;
68:
69: io->i_flgs |= F_WRDATA;
70: io->i_error = 0;
71: cc = (*devsw[io->i_dev].dv_strategy)(io, F_WRITE);
72: io->i_flgs &= ~F_TYPEMASK;
73: #ifndef SMALL
74: if (scankbd())
75: _longjmp(exception, 1);
76: #endif
77: return (cc);
78: }
79:
80: devopen(io)
81: register struct iob *io;
82: {
83: int ret;
84:
85: if (!(ret = (*devsw[io->i_dev].dv_open)(io)))
86: return (0);
87: #ifdef SMALL
88: printf("open error\n");
89: #else
90: printf("%s(%d,%d,%d,%d): ", devsw[io->i_dev].dv_name,
91: io->i_adapt, io->i_ctlr, io->i_unit, io->i_part);
92: switch(ret) {
93: case EIO:
94: break; /* already reported */
95: case EADAPT:
96: printf("bad adaptor number\n");
97: break;
98: case ECTLR:
99: printf("bad controller number\n");
100: break;
101: case EUNIT:
102: printf("bad drive number\n");
103: break;
104: case EPART:
105: printf("bad partition\n");
106: break;
107: case ERDLAB:
108: printf("can't read disk label\n");
109: break;
110: case EUNLAB:
111: printf("unlabeled\n");
112: break;
113: case ENXIO:
114: printf("bad device specification\n");
115: break;
116: default:
117: printf("unknown open error\n");
118: break;
119: }
120: #endif
121: return (ret);
122: }
123:
124: devclose(io)
125: register struct iob *io;
126: {
127: (*devsw[io->i_dev].dv_close)(io);
128: }
129:
130: devioctl(io, cmd, arg)
131: register struct iob *io;
132: int cmd;
133: caddr_t arg;
134: {
135: return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg));
136: }
137:
138: /* ARGSUSED */
139: nullsys(io)
140: struct iob *io;
141: {}
142:
143: /* ARGSUSED */
144: nodev(io)
145: struct iob *io;
146: {
147: errno = EBADF;
148: return(-1);
149: }
150:
151: /* ARGSUSED */
152: noioctl(io, cmd, arg)
153: struct iob *io;
154: int cmd;
155: caddr_t arg;
156: {
157: return (ECMD);
158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.