|
|
1.1 root 1: .\" Copyright (c) 1986 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)vaxmba.t 1.6 (Berkeley) 4/11/86
6: .\"
7: .NH
8: VAX MASSBUS device drivers
9: .PP
10: This section documents the modifications in the drivers for devices
11: on the VAX MASSBUS, with sources in \fI/sys/vaxmba\fP,
12: as well as general changes made to all disk and tape drivers.
13: .NH 2
14: General changes in disk drivers
15: .PP
16: Most of the disk drivers' strategy routines were changed to report
17: an end-of-file when attempting to read the first block after the end
18: of a partition.
19: Distinct errors are returned for nonexistent drives,
20: blocks out of range, and hard I/O errors.
21: The \fIdkblock\fP and \fIdkunit\fP macros once used to support
22: disk interleaving were removed, as interleaving makes no sense
23: with the current file system organization.
24: Messages for recoverable errors, such as soft ECC's,
25: are now handled by \fIlog\fP instead of \fIprintf\fP.
26: .NH 2
27: General changes in tape drivers
28: .PP
29: The open functions in the tape drivers now return sensible errors
30: if a drive is in use.
31: They save a pointer to the user's terminal when opened,
32: so that error messages from interrupt level may be printed
33: on the user's terminal using \fItprintf\fP.
34: .NH 2
35: Modifications to individual MASSBUS device drivers
36: .XP hp.c
37: Error recovery in the MASSBUS disk driver is considerably better now
38: than it was.
39: The driver deals with multiple errors in the same transfer
40: much more gracefully.
41: Earlier versions could go into an endless loop correcting one error,
42: then retrying the transfer from the beginning when a second error
43: was encountered.
44: The driver now restarts with the first sector not yet successfully
45: transferred.
46: ECC correction is now possible on bad-sector replacements.
47: The correct sector number is now printed in most error messages.
48: The code to decide whether to initiate a data transfer or
49: whether to do a search was corrected, and the \fIsdist/rdist\fP parameters
50: were split into three parameters for each drive: the minimum and maximum
51: rotational distances from the desired sector between which to start
52: a transfer, and the number of sectors to allow after a search before
53: the desired sector.
54: The values chosen for these parameters are probably still not optimal.
55: .XP
56: There were races when doing a retry on one drive that continued with
57: a repositioning command (recal or seek) and when then beginning a data transfer
58: on another drive.
59: These were corrected by using a distinguished
60: return value, MBD_REPOSITION, from \fIhpdtint\fP to change the controller
61: state when reverting to positioning operations during a recovery.
62: The remaining steps in the recovery are then managed by \fIhpustart\fP.
63: Offset commands were previously done under interrupt control,
64: but only on the same retries as recals (every eighth retry starting
65: with the fourth).
66: They are now done on each read retry after the 16th and are done
67: by busy-waiting to avoid the race described above.
68: The tests in the error decoding section of the interrupt
69: handler were rearranged for clarity and to simplify the tests
70: for special conditions such as format operations.
71: The \fIhpdtint\fP times out if the drive does not become ready
72: after an interrupt rather than hanging at high priority.
73: When forwarding bad sectors, \fIhpecc\fP correctly handles partial-sector
74: transfers; prior versions would transfer a full sector, then continue
75: with a negative byte count, encountering an invalid map register immediately
76: thereafter.
77: Partial-sector transfers are requested by the virtual memory system
78: when swapping page tables.
79: .XP mba.c
80: The top level MASSBUS driver supports the new return code from data-transfer
81: interrupts that indicate a return to positioning commands before restarting
82: a data transfer.
83: It is capable of restarting a transfer after partial completion and
84: adjusting the starting address and byte count according to the amount
85: remaining.
86: It has also been modified to support data transfers in reverse,
87: required for proper error recovery on the TU78.
88: \fIMbustart\fP does not check drives to see that they are present,
89: as dual-ported disks may appear to have a type of zero
90: if the other port is using the disk;
91: in this case, the disk unit start will return MBU_BUSY.
92: .XP mt.c
93: The TU78 driver has been extensively modified and tested
94: to do better error recovery and to support additional operations.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.