|
|
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.