-- CedarSnapshotPrivate.mesa
-- last edited by Levin:  November 12, 1982 9:48 am

DIRECTORY
  Boot USING [Location],
  CedarSnapshot USING [CheckpointProc, RollbackProc],
  File USING [Capability, ID, nullID, PageCount, PageNumber],
  Space USING [PageCount],
  Volume USING [ID];

CedarSnapshotPrivate: DEFINITIONS =

BEGIN

-- Performance Parameters --

initialSnapshotSize: File.PageCount = 500;

initialVMScriptPages: Space.PageCount = 3;
initialClientScriptPages: Space.PageCount = 1;
initialLinkScriptPages: Space.PageCount = 4;

maxReasonableSwapUnit: Space.PageCount = 128;


-- Procedure Registry

EnumerateCheckpointProcs: PROC [PROC [CedarSnapshot.CheckpointProc]];

EnumerateRollbackProcs: PROC [PROC [CedarSnapshot.RollbackProc]];

-- Feedback

Phase: TYPE = [0..37B];
Direction: TYPE = {checkpoint, rollback};

InitializeFeedback: PROC;
FinalizeFeedback: PROC;

SetPhase: PROC [phase: Phase, direction: Direction];

Twiddle: PROC;

-- File Management

FilePoint: TYPE = RECORD [fID: File.ID, firstPage: File.PageNumber];
nullFilePoint: FilePoint = [fID: File.nullID, firstPage: 0];

SnapshotFile: TYPE = LONG POINTER TO SnapshotFileDescriptor;
SnapshotFileDescriptor: TYPE = RECORD [
  volume: Volume.ID,
  cap: File.Capability,
  firstFree: File.PageNumber];

PointAction: TYPE = {keep, clear};

InitializeSnapshotFile: PROC [volume: Volume.ID] RETURNS [SnapshotFile];

FinalizeSnapshotFile: PROC [snapshot: SnapshotFile, action: PointAction];

EnsureSnapshotFileSize: PROC [snapshot: SnapshotFile, size: File.PageCount];

PrepareForOutload: PROC [snapshot: SnapshotFile] RETURNS [disk Boot.Location];

InstallSnapshotFile: PROC [snapshot: SnapshotFile, location: disk Boot.Location];

GetSnapshotPoint: PROC [volume: Volume.ID, action: PointAction]
  RETURNS [filePoint: FilePoint, valid: BOOL];

ValidateSnapshot: PROC [volume: Volume.ID] RETURNS [BOOL];  -- should be in CedarSnapshot.mesa

-- Synchronization

CorkHandle: TYPE = LONG POINTER TO CorkObject;
CorkObject: TYPE;

CorkRestOfWorld: PROC RETURNS [CorkHandle];
UncorkRestOfWorld: PROC [CorkHandle];

snapshotLock: MONITORLOCK;  -- in CedarSnapshotRollback

END.