DIRECTORY BasicTime USING [GMT], Disk USING [Channel, Label, PageCount, PageNumber, Status], Rope USING [ROPE]; FormatDisk: DEFINITIONS = BEGIN Operation: TYPE = {format, write, read, verify}; BadPage: SIGNAL [page: Disk.PageNumber, correctable: BOOLEAN]; Error: ERROR [page: Disk.PageNumber, status: Disk.Status]; Sweep: PROC [channel: Disk.Channel, operation: Operation, firstPage: Disk.PageNumber, pageCount: Disk.PageCount, label: LONG POINTER TO Disk.Label, data: LONG POINTER]; FailureType: TYPE = {emptyFile, firstPageBad, flakeyPageFound, microcodeTooBig, other}; MicrocodeInstallFailure: ERROR [why: FailureType]; InstallInitialMicrocode: PROC [channel: Disk.Channel, getPage: PROC [ptr: LONG POINTER] RETURNS [ok: BOOLEAN]]; IdentifyInitialMicrocode: PROC [channel: Disk.Channel] RETURNS [microcodeInstalled: BOOLEAN, time: BasicTime.GMT, name: Rope.ROPE]; hardUCodeStart: Disk.PageNumber; -- first page reserved for initial microcode hardUCodeSize: Disk.PageCount; -- number of pages reserved for initial microcode altoRegionJargon: Rope.ROPE; -- human-sensible name for reservable Alto disk areas altoRegionsMax: INT; -- largest possible number of Alto regions altoRegionsStart: Disk.PageNumber; -- first page usable for Alto regions altoRegionsSize: Disk.PageCount; -- size of each Alto region altoRegionsBottomUp: BOOL; -- whether preferred layout for Alto starts at beginning of disk Start: PROC; -- call before accessing exported variables END. ÜFormatDisk.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Taft, December 14, 1983 10:14 am Interface to device-dependent disk formatting and initialization. This interface is similar to a "face", with machine- and device-dependent implementations; but it exists at a higher logical level in the system (specifically, above the Disk interface). Synchronization with other disk activity is taken care of by the implementation; but of course the client is responsible for higher-level consistency issues such as arise when formatting the system volume. Disk formatting and checking Raw disk formatting and scanning are implemented in terms of the single primitive Sweep. The reason Sweep is special (rather than constructed from ordinary Disk operations) is that certain aspects of it are machine dependent, particularly the writing of headers and recovery from errors. The intended applications are: Formatting and surface testing: perform one format, one verify, and then any number of passes of a write followed by a verify. Non-destructive scanning: any number of passes of read operations. Sweeps pageCount pages starting at the specified virtual disk address, applying the specified operation to each. Format means write headers, labels, and data (which may require multiple passes in some implementations). Write means verify headers and write labels and data. Read means verify headers and read labels and data. Verify means verify headers, labels, and data. The label argument points to a client-provided label record and the data argument points to a one-page page-aligned buffer; both must be resident. The operations format, write, and verify use the contents of these buffers as arguments, while read clobbers them. Note that the operations have their normal side-effects on labels, meaning that during all operations except read the page number is incremented for each page, and during all operations except format the boot chain link is read from the disk label. Raises the resumable signal BadPage for each page at which a disk error (hard or soft) occurred. The correctable argument indicates whether the error was correctable when the normal retry algorithm was applied. Raises Error if the disk goes offline or an uncorrectable error occurs that is not related to imperfections of the disk surface. ?? Something needs to be said here about formatting extents ?? Initial microcode Initial microcode installation is special because the exact conventions for the format of the initial microcode file are machine-dependent. In particular, in some implementations the initial microcode is not a well-formed file, but is optimized for easy readability by boot microcode. Installs microcode on reserved Initial region of the disk, and verifies that it is readable. Repeatedly calls getPage until FALSE is returned. The getPage procedure should either copy the next page of data into the supplied (one-page) buffer and return TRUE, or it should return FALSE to indicate end-of-file. Reserved disk areas Note: initial microcode may overlap with an Alto region Initialization This is needed because of difficulties specifying the appropriate control list for Nucleus start-up, because the implementation of this interface is by a machine-dependent module name. Ê– "cedar" style˜headšœ™Icodešœ Ïmœ1™Nšœžœ.˜:šÏnœžœmžœžœžœžœžœ˜¨Nšœó™óNšœþ™þNšœÒ™ÒN™€N™>——™M™œNšœ žœF˜WNšœžœ˜2šŸœžœ"žœžœžœžœžœ˜oNšœ|žœ|žœžœ™µ—Nš Ÿœžœžœžœžœ žœ˜ƒ—šœ™Mšœ7™7Nšœ!Ïc,˜MNšœ 2˜QNšœžœ 5˜RNšœžœ *˜?Nšœ# %˜HNšœ! ˜