-- File: DispatcherLockedFast.mesa, Last Edit: HGM April 7, 1979 2:59 PM -- Copyright Xerox Corporation 1979, 1980 -- Need to add DispatcherLockedFast to PupInnerDefs DIRECTORY -- PupInnerDefs: FROM "PupInnerDefs",-- -- EXPORTS DriverDefs: FROM "DriverDefs" USING [ dispatcherLock, dispatcherReady, globalInputQueue, globalOutputQueue, ReturnFreeBuffer], BufferDefs: FROM "BufferDefs" USING [Buffer, Enqueue]; DispatcherLockedFast: MONITOR LOCKS DriverDefs.dispatcherLock IMPORTS DriverDefs, BufferDefs EXPORTS --PupInnerDefs, --DriverDefs SHARES BufferDefs = BEGIN -- These are called from interrupt routines, on the Alto, they must be locked in memory PutOnGlobalInputQueue: PUBLIC ENTRY PROCEDURE [b: BufferDefs.Buffer] = BEGIN BufferDefs.Enqueue[@DriverDefs.globalInputQueue,b]; NOTIFY DriverDefs.dispatcherReady; END; PutOnGlobalDoneQueue: PUBLIC PROCEDURE [b: BufferDefs.Buffer] = BEGIN IF ~b.allNets AND b.requeueProcedure=DriverDefs.ReturnFreeBuffer THEN DriverDefs.ReturnFreeBuffer[b] ELSE PutOnGlobalDoneQueueLocked[b]; END; PutOnGlobalDoneQueueLocked: ENTRY PROCEDURE [b: BufferDefs.Buffer] = INLINE BEGIN BufferDefs.Enqueue[@DriverDefs.globalOutputQueue,b]; NOTIFY DriverDefs.dispatcherReady; END; END. -- DispatcherLockedFast(2048)\77b52B11b53B300b18B129b21B157b20B205b26B