-- DiskDriversPack.pack
-- Last edit by:
-- Yokota  March 20, 1981  10:20 AM  MakeLP & MakeRP are moved from Resident to ResidentCool.
-- Gobbel  January 31, 1981  11:33 AM  Moved frame packs into PilotKernelFrames.pack.
-- Gobbel  January 19, 1981  3:41 PM  Discard AltoFileInterlock, move SA4000Impl.Start to initialization
-- Levin  28-Apr-82 11:54:30  Flush AltoFileInterlock; move its contents to ResidentCool.

DiskDrivers: SEGMENT =
BEGIN

Resident: CODE PACK =
  BEGIN
  -- The only resident driver code is that for the system volume (to prevent
  -- monitor deadlocks caused by a page fault while in that monitor lock) and
  -- the code is callable from the page fault path (i.e., the Filer) - the
  -- driver procs getPageAddress, requestIO.  WARNING: this packaging ASSUMES
  -- that the SA4000 is the system volume!
  DiskChannelImpl EXCEPT Initialization, ResidentCool;
  DiskDriverSharedImpl EXCEPT Initialization;
  SA4000Impl EXCEPT Initialization, ResidentCool;
  END;

ResidentCool: CODE PACK = -- goes in display memory on Dandelion
  BEGIN
  DiskChannelImpl [ErrorHalt, AwaitStateChange, GetDriveAttributes,
    GetDriveTag, GetNextDrive, GetPageNumber, SetDriveState, SetDriveTag,
    Create, Delete, GetAttributes, GetPageAddress, CreateCompletionObject,
    RegisterDrive, MakeLP, MakeRP, Idle, Restart, Suspend];
  SA4000Impl [ErrorHalt, GetPageNumber, ChangeState];
  SA800Impl [GetNextRequest, GetPageAddress, RequestIO];
  END;

SwappableDiskDrivers: CODE PACK =
  BEGIN
  FloppyChannelImpl EXCEPT Initialization;
  SA800Impl EXCEPT Initialization, ResidentCool;
  END;

Initialization: CODE PACK =
  BEGIN
  DiskChannelImpl [MAIN];
  DiskDriverSharedImpl [MAIN];
  FloppyChannelImpl [MAIN, RegisterDrives];
  SA4000Impl [InitGlobals, MAIN, RegisterDrives, Start];
  SA800Impl [MAIN, RegisterDriverProcs];
  DiskDrivers.StartChainPlug;
  END;

END;