1: /*
2: * Copyright (c) 1986 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)rk.c 2.2 (2.11BSD) 1996/3/8
7: */
8:
9: /*
10: * RK disk driver
11: */
12:
13: #include "../h/param.h"
14: #include "../pdpuba/rkreg.h"
15: #include "saio.h"
16:
17: #define NRK 2
18:
19: struct rkdevice *RKcsr[NRK + 1] =
20: {
21: (struct rkdevice *)0177400,
22: (struct rkdevice *)0,
23: (struct rkdevice *)-1
24: };
25:
26: rkstrategy(io, func)
27: register struct iob *io;
28: {
29: register com;
30: register struct rkdevice *rkaddr;
31: daddr_t bn;
32: int dn, cn, sn, bae, lo16;
33:
34: bn = io->i_bn;
35: dn = io->i_unit;
36: cn = bn/12;
37: sn = bn%12;
38: iomapadr(io->i_ma, &bae, &lo16);
39: rkaddr = RKcsr[io->i_ctlr];
40: rkaddr->rkda = (dn<<13) | (cn<<4) | sn;
41: rkaddr->rkba = (caddr_t)lo16;
42: rkaddr->rkwc = -(io->i_cc>>1);
43: com = (bae<<4)|RKCS_GO;
44: if (func == READ)
45: com |= RKCS_RCOM;
46: else
47: com |= RKCS_WCOM;
48: rkaddr->rkcs = com;
49: while ((rkaddr->rkcs & RKCS_RDY) == 0)
50: continue;
51: if (rkaddr->rkcs<0) { /* error bit */
52: printf("%s err cy=%d sc=%d, er=%o, ds=%o\n",
53: devname(io), cn, sn, rkaddr->rker, rkaddr->rkds);
54: return(-1);
55: }
56: return(io->i_cc);
57: }
58:
59: rkopen(io)
60: struct iob *io;
61: {
62: return(genopen(NRK, io));
63: }
Defined functions
Defined variables
RKcsr
defined in line
19; used 2 times
Defined macros
NRK
defined in line
17; used 2 times