-- File: DriverDefs.Mesa, -- Last Edit: HGM January 6, 1981 9:21 PM -- Last Edit: BLyon January 16, 1981 2:48 PM DIRECTORY StatsDefs USING [StatCounterIndex], BufferDefs USING [ Buffer, BufferAccessHandle, BufferFunction, BufferType, OisBuffer, PupBuffer, Queue, systemAccessHandle], PupTypes USING [PupHostID, PupErrorCode], DriverTypes USING [DeviceType], SpecialSystem USING [HostNumber, NetworkNumber]; DriverDefs: DEFINITIONS IMPORTS BufferDefs = BEGIN OPEN BufferDefs; -- Interface from device drivers to Dispatcher and QueuePackage PutOnGlobalInputQueue: PROCEDURE [Buffer]; PutOnGlobalDoneQueue: PROCEDURE [Buffer]; GetInputBuffer: PROCEDURE [tryToWaitForBuffer: BOOLEAN ← FALSE] RETURNS [Buffer]; -- b.length (words) includes encap ReturnFreeBuffer: PROCEDURE [Buffer]; -- These will return the last buffer. They never wait. Be careful. NIL if its empty. MaybeGetFreePupBuffer: PROCEDURE RETURNS [PupBuffer] = INLINE { RETURN[ LOOPHOLE[MaybeGetFreeBuffer[ pup, BufferDefs.systemAccessHandle, systemUse]]]}; MaybeGetFreeOisBuffer: PROCEDURE RETURNS [OisBuffer] = INLINE { RETURN[ LOOPHOLE[MaybeGetFreeBuffer[ ois, BufferDefs.systemAccessHandle, systemUse]]]}; MaybeGetFreeBuffer: PROCEDURE [ bufType: BufferType ← raw, aH: BufferAccessHandle ← BufferDefs.systemAccessHandle, bufFunc: BufferFunction ← systemUse] RETURNS [Buffer]; -- Interface to Routers Router: TYPE = LONG POINTER TO RouterObject; RouterObject: TYPE = RECORD [ input: PROCEDURE [Buffer], broadcast: PROCEDURE [Buffer], addNetwork: PROCEDURE [Network], removeNetwork: PROCEDURE [Network], stateChanged: PROCEDURE [Network]]; -- Interface to Device Drivers nilNetwork: Network = NIL; Network: TYPE = LONG POINTER TO NetworkObject; NetworkObject: TYPE = RECORD [ next: Network, decapsulateBuffer: PROCEDURE [Buffer] RETURNS [BufferDefs.BufferType], encapsulatePup: PROCEDURE [PupBuffer, PupTypes.PupHostID], encapsulateOis: PROCEDURE [OisBuffer, SpecialSystem.HostNumber], sendBuffer: PROCEDURE [Buffer], forwardBuffer: PROCEDURE [Buffer] RETURNS [PupTypes.PupErrorCode], activateDriver: PROCEDURE, deactivateDriver: PROCEDURE, deleteDriver: PROCEDURE, interrupt: PROCEDURE, -- to lock things in memory changeNumberOfInputBuffers: PROCEDURE [ --increaseBuffers--BOOLEAN] ← NIL, index: [0..400B), -- assigned by AddDeviceToChain (starts at 1) device: DriverTypes.DeviceType, -- 4 bits alive: BOOLEAN, speed: CARDINAL, -- KiloBits/Sec buffers: [0..256), spare: [0..256), netNumber: SpecialSystem.NetworkNumber, hostNumber: CARDINAL, -- This is the Pup host number pupStats: PROCEDURE [PupBuffer, Network] RETURNS [BOOLEAN], stats: LONG POINTER]; -- and debugging -- ON/OFF CommPackageGo: PROCEDURE; CommPackageOff: PROCEDURE; GetUseCount: PROCEDURE RETURNS [CARDINAL]; SetPupRouter, SetOisRouter: PROCEDURE [Router]; -- NIL to Deactivate GetPupRouter, GetOisRouter: PROCEDURE RETURNS [Router]; StateChanged: PROCEDURE [Network]; -- Device Things AddDeviceToChain: PROCEDURE [network: Network, iocbSize: CARDINAL]; RemoveDeviceFromChain: PROCEDURE [Network]; GetDeviceChain: PROCEDURE RETURNS [Network]; SmashDeviceChain: PROCEDURE; -- only used by LoopBackPlug (to forget Ethernet) ChangeNumberOfInputBuffers: PROCEDURE [increaseTheBuffers: BOOLEAN]; -- affects all drivers on the chain -- Setting up individual device drivers CreateDefaultEthernetOneDrivers: PROCEDURE RETURNS [BOOLEAN]; CreateDefaultEthernetDrivers: PROCEDURE RETURNS [BOOLEAN]; CreateLoopBackDriver: PROCEDURE RETURNS [BOOLEAN]; CreateEthernetDriver: PROCEDURE [netNumber: CARDINAL, deviceNumber: [0..3)] RETURNS [BOOLEAN]; CreateChainedEthernetDriver: PROCEDURE [ netNumber: CARDINAL, deviceNumber: [0..3)] RETURNS [BOOLEAN]; CreateEIADriver: PROCEDURE [host, net, lines: CARDINAL] RETURNS [BOOLEAN]; CreateCommProcDriver: PROCEDURE [host, net, lines: CARDINAL] RETURNS [BOOLEAN]; AssignPassword: PROCEDURE [line: CARDINAL, password: STRING]; CreatePacketRadioDriver: PROCEDURE [host, net: CARDINAL] RETURNS [BOOLEAN]; AdjustLengthOfEthernetInputQueue: PROCEDURE [CARDINAL]; AdjustLengthOfEthernetIIInputQueue: PROCEDURE [CARDINAL]; -- Stats linkage EthernetStats: PROCEDURE [PupBuffer, Network] RETURNS [BOOLEAN]; SlaStats: PROCEDURE [PupBuffer, Network] RETURNS [BOOLEAN]; PacketRadioStats: PROCEDURE [PupBuffer, Network] RETURNS [BOOLEAN]; -- Internal routines DispatcherOn: PROCEDURE; DispatcherOff: PROCEDURE; -- Larry and Yogen DriverXmitStatus: TYPE = { pending, goodCompletion, aborted, noRouteToNetwork, hardwareProblem, invalidDestAddr, crateTooSmall, -- the following apply to circuit-like media only and mostly to the first packet sent noAnswerOrBusy, -- auto-dial case only noTranslationForDestination, -- no phone number for this destination circuitInUse, -- being used to talk to another destination circuitNotReady, -- dial the phone or connect modems (non-auto-dial case) noDialingHardware, dialerHardwareProblem}; -- General catchall for things that shouldn't happen Glitch: PROCEDURE [ERROR]; -- interface to SystemBufferPool GetWordsPerIocb: PROCEDURE RETURNS [CARDINAL]; SetWordsPerIocb: PROCEDURE [CARDINAL]; -- For getting things STARTed Boss, DispatcherImpl, BufferMgr: PROGRAM; -- Beware MakeImage does not preserve debugPointer. GetGiantVector: PROCEDURE RETURNS [POINTER TO GiantVector]; GiantVector: TYPE = RECORD [ firstNetwork: Network, firstBuffer: Buffer, bufferPoolSize: CARDINAL, wordsPerBuffer: CARDINAL, pupRoutingTable: DESCRIPTOR FOR ARRAY OF UNSPECIFIED, firstPupSocket: LONG POINTER, freeQueue, globalInputQueue, globalOutputQueue: Queue, firstBufferAccessHandle: BufferDefs.BufferAccessHandle, -- hacks until we get more drivers ethernetOutputQueue: Queue, currentInputBuffer, nextInputBuffer, currentOutputBuffer: POINTER TO Buffer, statCounters: LONG POINTER TO ARRAY StatsDefs.StatCounterIndex OF LONG CARDINAL, statStrings: LONG POINTER TO ARRAY StatsDefs.StatCounterIndex OF STRING, slaThings: LONG POINTER, prThings: LONG POINTER, spare: LONG POINTER]; END. LOG August 1, 1980 3:38 PM by BLyon, Action: modified netNumber in NetworkObject. August 6, 1980 10:17 AM By: Garlick Action: Added several DriverXmitStatus's for circuit-oriented network errors. August 1, 1980 3:38 PM by HGM, Action: added buffers, stateChanged, and such. Time: October 10, 1980 4:50 PM By: Garlick Action: Added DriverXmitStatus noAnswerOrBusy. Time: November 25, 1980 6:31 PM By: BLyon Action: turned off doStats