(FILECREATED "27-Jul-85 22:04:29" {ERIS}<LISPCORE>SOURCES>DOVEETHER.;6 20287  

      changes to:  (VARS DOVEETHERCOMS \DoveEther.ClientConditionSize \DoveEther.IOIOCBLength)
		   (FNS \DoveEther.EnQueue \DoveEther.GetPacketStatus \DoveEther.DeQueue 
			\DoveEther.MakeSureOff \DoveEther.QueueInput \DoveEther.QueueOutput 
			\DoveEther.ByteSwapIOCB \DoveEther.SendPacket \DoveEther.TurnOn)
		   (RECORDS Dove.EtherIOCB)

      previous date: "27-Jul-85 20:45:20" {ERIS}<LISPCORE>SOURCES>DOVEETHER.;5)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT DOVEETHERCOMS)

(RPAQQ DOVEETHERCOMS ((FNS \DoveEther.ByteSwapIOCB \DoveEther.DeQueue \DoveEther.EnQueue 
			   \DoveEther.GetPacketStatus \DoveEther.MakeSureOff \DoveEther.QueueInput 
			   \DoveEther.QueueOutput \DoveEther.SendPacket \DoveEther.TurnOn)
		      (DECLARE: DONTCOPY
				(RECORDS Dove.EtherAddr Dove.EtherConfigure Dove.EtherDumpStatus 
					 Dove.EtherFCB Dove.EtherIOCB Dove.EtherMulticastAddr 
					 Dove.EtherTransmit Dove.QueueBlock Dove.RxBufferDesc 
					 Dove.RxFrameDesc Dove.TimeDomainRFL)
				(CONSTANTS \DoveEther.MulticastAddr \DoveEther.QueuePtrSize 
					   \DoveEther.ClientConditionSize \DoveEther.IOIOCBLength 
					   \DoveEther.RequestON \DoveEther.RequestOFF 
					   \DoveEther.TimeDomainRFL)
				(CONSTANTS \DoveEther.Command \DoveEther.Input 
					   \DoveEther.NotDoneNotHandledStatus \DoveEther.Output)
				(CONSTANTS (\DoveEther.OKMask 8192)
					   (\DoveEther.HandledMask 16384)
					   \DoveEther.AlnErrorMask \DoveEther.BadCRC&Alignment 
					   \DoveEther.BadCRCMask \DoveEther.DoneHandledMask 
					   \DoveEther.DoneOkayMask \DoveEther.IsDequeuedMask 
					   \DoveEther.OverrunMask \DoveEther.TooManyCollisions 
					   \DoveEther.UnderrunMask \DoveEther.FrameTooLongMask)
				(CONSTANTS \DoveEther.DoneMask \DoveEther.InputType 
					   \DoveEther.OutputType))))
(DEFINEQ

(\DoveEther.ByteSwapIOCB
  (LAMBDA (IOCB)                                             (* ejs: "26-Jul-85 22:17")

          (* * Kludgery for Opie lives here)


    (DECLARE (CONSTANTS \DoveEther.OutputType \DoveEther.InputType))
    (replace (Dove.EtherIOCB i586Status) of IOCB with (\DoveIO.ByteSwap (fetch (Dove.EtherIOCB 
										       i586Status)
									   of IOCB)))
    (COND
      ((OR (EQ (fetch (Dove.EtherIOCB IOCBType) of IOCB)
	       \DoveEther.InputType)
	   (EQ (fetch (Dove.EtherIOCB IOCBType) of IOCB)
	       \DoveEther.OutputType))
	(replace (Dove.EtherIOCB LengthInBytes) of IOCB with (\DoveIO.ByteSwap (fetch (Dove.EtherIOCB
											LengthInBytes)
										  of IOCB)))
	(replace (Dove.EtherIOCB Count) of IOCB with (\DoveIO.ByteSwap (fetch (Dove.EtherIOCB Count)
									  of IOCB))))
      (T (SELECTC (fetch (Dove.EtherIOCB Action) of IOCB)
		  (\DoveEther.TimeDomainRFL (replace (Dove.EtherIOCB Select) of IOCB
					       with (\DoveIO.ByteSwap (fetch (Dove.EtherIOCB Select)
									 of IOCB))))
		  (\DoveEther.MulticastAddr (replace (Dove.EtherMulticastAddr ByteCount)
					       of (LOCF (fetch (Dove.EtherIOCB Select) of IOCB))
					       with (\DoveIO.ByteSwap
						      (fetch (Dove.EtherMulticastAddr ByteCount)
							 of (LOCF (fetch (Dove.EtherIOCB Select)
								     of IOCB))))))
		  (PROGN NIL))))))

(\DoveEther.DeQueue
  (LAMBDA (QUEUEPTR IOCB)                                    (* ejs: "27-Jul-85 03:38")
    (COND
      ((EQ (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.QueueBlock QueueHead) of QUEUEPTR)))
	   IOCB)
	(\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.QueueBlock QueueHead) of QUEUEPTR))
				 (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.EtherIOCB 
											 NextIOCB)
									  of IOCB))))
	(COND
	  ((\DoveIO.EQOpieAddrs (LOCF (fetch (Dove.QueueBlock QueueTail) of QUEUEPTR))
				IOCB)
	    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.QueueBlock QueueTail) of QUEUEPTR))
				     NIL))))
      (T (PROG ((Chase (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.QueueBlock QueueHead)
								of QUEUEPTR)))))
	       (while Chase
		  do (COND
		       ((EQ IOCB (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.QueueBlock 
											QueueNext)
									  of Chase))))
			 (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.QueueBlock QueueNext)
							   of Chase))
						  (\DoveIO.PointerFromOpieAddress
						    (LOCF (fetch (Dove.EtherIOCB NextIOCB)
							     of IOCB))))
			 (COND
			   ((EQ (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.QueueBlock 
											QueueTail)
									 of QUEUEPTR)))
				IOCB)
			     (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.QueueBlock QueueTail)
							       of QUEUEPTR))
						      Chase)))
			 (RETURN)))
		     (SETQ Chase (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.QueueBlock 
											QueueNext)
									  of Chase))))))))))

(\DoveEther.EnQueue
  (LAMBDA (QUEUEPTR IOCB)                                    (* ejs: "27-Jul-85 18:25")

          (* * Enqueues IOCB on IOP Queueblock at QUEUEPTR)


    (COND
      ((\DoveIO.NilOpieAddress (LOCF (fetch (Dove.QueueBlock QueueHead) of QUEUEPTR)))
	(\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.QueueBlock QueueHead) of QUEUEPTR))
				 IOCB))
      (T (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB NextIOCB)
					   of (\DoveIO.PointerFromOpieAddress
						(LOCF (fetch (Dove.QueueBlock QueueTail)
							 of QUEUEPTR)))))
				  IOCB)))
    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB NextIOCB) of IOCB))
			     NIL)
    (\DoveIO.LockMem \DoveIO.OVERWRITEIFNIL (\DoveIO.IORegionOffset (LOCF (fetch (Dove.QueueBlock
										   QueueNext)
									     of QUEUEPTR)))
		     (\DoveIO.ByteSwap (\LOLOC IOCB))
		     (fetch (Dove.EtherFCB EtherLockMask) of (\DoveFCBAt \Dove.EthernetFCBOffset)))
    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.QueueBlock QueueTail) of QUEUEPTR))
			     IOCB)))

(\DoveEther.GetPacketStatus
  [LAMBDA (IOCB)                                             (* ejs: "27-Jul-85 19:12")
    (DECLARE (CONSTANTS \DoveEther.OKMask \DoveEther.HandledMask))
    (PROG (i586Status Status RetStatus PTR I)

          (* * This field is very messed up in the mesa code, so we've got to subvert the record pkg here)



          (* * Pick the hardware status out of the IOCB)


          (SETQ i586Status (\DoveIO.ByteSwap (fetch (Dove.EtherIOCB i586Status) of IOCB)))

          (* * Pick the software?? status out of the IOCB as a WORD, even though the mesa and interlisp declarations say it's 
	  a byte. However, this is the way the mesa folk loophole the data out of the field. I think it's to line the data up 
	  with the i586status above)


          (SETQ Status (\GETBASE (LOCF (fetch (Dove.EtherIOCB Status) of IOCB))
				 0))
          (COND
	    ((EQ (LOGAND Status \DoveEther.DoneMask)
		 0)
	      (RETURN \ES.PENDING)))
          (\DoveEther.DeQueue [COND
				[(EQ (fetch (Dove.EtherIOCB IOCBType) of IOCB)
				     \DoveEther.InputType)
				  (LOCF (fetch (Dove.EtherFCB MesaInQueue) of (\DoveFCBAt 
									  \Dove.EthernetFCBOffset]
				(T (LOCF (fetch (Dove.EtherFCB MesaOutQueue) of (\DoveFCBAt 
									  \Dove.EthernetFCBOffset]
			      IOCB)

          (* * Un byteswap it)


          (\DoveEther.ByteSwapIOCB IOCB)
          (replace (Dove.EtherIOCB Status) of IOCB with (LOGOR (LRSH Status BITSPERBYTE)
							       \DoveEther.IsDequeuedMask))
          (SETQ RetStatus (COND
	      ((BITTEST Status \DoveEther.OKMask)
		\ES.GOOD.PACKET)
	      ((BITTEST Status \DoveEther.HandledMask)
		\ES.PENDING)
	      ((BITTEST Status \DoveEther.FrameTooLongMask)
		\ES.PACKET.TOO.LONG)
	      ((BITTEST Status \DoveEther.BadCRC&Alignment)
		\ES.BAD.CRC&ALIGNMENT)
	      ((BITTEST i586Status \DoveEther.AlnErrorMask)
		\ES.BAD.ALIGNMENT)
	      ((BITTEST i586Status \DoveEther.BadCRCMask)
		\ES.BAD.CRC)
	      ((BITTEST i586Status \DoveEther.OverrunMask)
		\ES.OVERRUN)
	      ((BITTEST i586Status \DoveEther.UnderrunMask)
		\ES.UNDERRUN)
	      ((BITTEST i586Status \DoveEther.TooManyCollisions)
		\ES.TOO.MANY.COLLISIONS)
	      (T \ES.OTHER.ERROR)))
          [SETQ PTR (\DoveIO.PointerFromOpieAddress (LOCF (fetch (Dove.EtherIOCB Address)
							     of IOCB]
          (SETQ I (FOLDHI (fetch (Dove.EtherIOCB LengthInBytes) of IOCB)
			  BYTESPERWORD))

          (* * Mark pages dirty)


          (while (IGREATERP I WORDSPERPAGE)
	     do (\PUTBASE PTR I (\GETBASE PTR I))
		(SETQ I (IDIFFERENCE I WORDSPERPAGE)))
          (RETURN RetStatus])

(\DoveEther.MakeSureOff
  (LAMBDA NIL                                                (* ejs: "27-Jul-85 01:08")

          (* * This fn makes sure the ethernet is OFF)


    (replace (Dove.EtherFCB MesaClientStateRequest) of (\DoveFCBAt \Dove.EthernetFCBOffset)
       with \DoveEther.RequestOFF)
    (\DoveIO.NotifyIOP (fetch (Dove.EtherFCB EtherInWorkMask) of (\DoveFCBAt \Dove.EthernetFCBOffset))
		       )
    (\DoveIO.NotifyIOP (fetch (Dove.EtherFCB EtherOutWorkMask) of (\DoveFCBAt \Dove.EthernetFCBOffset)
			      ))
    (until (EQ (fetch (Dove.EtherFCB MesaOutClientState) of (\DoveFCBAt \Dove.EthernetFCBOffset))
	       \DoveEther.RequestOFF)
       do (BLOCK))))

(\DoveEther.QueueInput
  (LAMBDA (IOCB BUF LEN)                                     (* ejs: "27-Jul-85 01:08")

          (* * Queues a packet NIL associated IOCB on the input queue)



          (* * Fill in the IOCB)


    (\CLEARWORDS (LOCF (fetch (Dove.EtherIOCB ClientCondition) of IOCB))
		 \DoveEther.ClientConditionSize)
    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB Address) of IOCB))
			     BUF)
    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB NextIOCB) of IOCB))
			     NIL)
    (with Dove.EtherIOCB IOCB (SETQ Status \DoveEther.NotDoneNotHandledStatus)
	  (SETQ LengthInBytes (UNFOLD LEN BYTESPERWORD))
	  (SETQ IOCBType \DoveEther.Input))

          (* * Byte swap for Opie)


    (\DoveEther.ByteSwapIOCB IOCB)

          (* * Put it on queue for output)


    (\DoveEther.EnQueue (LOCF (fetch (Dove.EtherFCB MesaInQueue) of (\DoveFCBAt 
									  \Dove.EthernetFCBOffset)))
			IOCB)

          (* * Tell the IOP there's something there)


    (\DoveIO.NotifyIOP (fetch (Dove.EtherFCB EtherInWorkMask) of (\DoveFCBAt \Dove.EthernetFCBOffset))
		       )))

(\DoveEther.QueueOutput
  (LAMBDA (IOCB BUF LEN)                                     (* ejs: "27-Jul-85 01:11")

          (* * Queues a packet NIL associated IOCB on the output queue)



          (* * Must mark it referenced)


    (\GETBASE BUF 0)
    (COND
      ((IGREATERP LEN WORDSPERPAGE)
	(\GETBASE BUF WORDSPERPAGE)))

          (* * Fill in the IOCB)


    (\CLEARWORDS (LOCF (fetch (Dove.EtherIOCB ClientCondition) of IOCB))
		 \DoveEther.ClientConditionSize)
    (with Dove.EtherIOCB IOCB (SETQ Status \DoveEther.NotDoneNotHandledStatus)
	  (SETQ LengthInBytes (UNFOLD LEN BYTESPERWORD))
	  (SETQ IOCBType \DoveEther.Output))
    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB Address) of IOCB))
			     BUF)
    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB NextIOCB) of IOCB))
			     NIL)

          (* * Byte Swap for Opie)


    (\DoveEther.ByteSwapIOCB IOCB)

          (* * Put it on queue for output)


    (\DoveEther.EnQueue (LOCF (fetch (Dove.EtherFCB MesaOutQueue) of (\DoveFCBAt 
									  \Dove.EthernetFCBOffset)))
			IOCB)

          (* * Tell the IOP there's something there)


    (\DoveIO.NotifyIOP (fetch (Dove.EtherFCB EtherOutWorkMask) of (\DoveFCBAt \Dove.EthernetFCBOffset)
			      ))))

(\DoveEther.SendPacket
  (LAMBDA (IOCB)                                             (* ejs: "26-Jul-85 22:18")

          (* * Queues a packet to the Opie ether handler)


    (DECLARE (GLOBALVARS \DoveIORegion)
	     (CONSTANTS \Dove.EthernetFCBOffset \DoveEther.NotDoneNotHandledStatus))

          (* * Make it the last packet on the chain)


    (\DoveIO.MakeOpieAddress (LOCF (fetch (Dove.EtherIOCB NextIOCB) of IOCB))
			     NIL)

          (* * Mark packet not sent)


    (replace (Dove.EtherIOCB Status) of IOCB with \DoveEther.NotDoneNotHandledStatus)

          (* * Erase the client condition)


    (\CLEARWORDS (LOCF (fetch (Dove.EtherIOCB ClientCondition) of IOCB))
		 \DoveEther.ClientConditionSize)
    (\DoveEther.ByteSwapIOCB IOCB)
    (\DoveEther.EnQueue (LOCF (fetch (Dove.EtherFCB MesaOutQueue) of (\DoveFCBAt 
									  \Dove.EthernetFCBOffset)))
			IOCB)
    (\DoveIO.NotifyIOP (fetch (Dove.EtherFCB EtherOutWorkMask) of (\DoveFCBAt \Dove.EthernetFCBOffset)
			      ))))

(\DoveEther.TurnOn
  (LAMBDA NIL                                                (* ejs: "26-Jul-85 22:21")

          (* * Turns on dove ether driver)


    (\DoveEther.MakeSureOff)
    (\CLEARWORDS (LOCF (fetch (Dove.EtherFCB MesaInQueue) of (\DoveFCBAt \Dove.EthernetFCBOffset)))
		 \DoveEther.QueuePtrSize)
    (\CLEARWORDS (LOCF (fetch (Dove.EtherFCB MesaOutQueue) of (\DoveFCBAt \Dove.EthernetFCBOffset)))
		 \DoveEther.QueuePtrSize)
    (replace (Dove.EtherFCB MesaClientStateRequest) of (\DoveFCBAt \Dove.EthernetFCBOffset)
       with \DoveEther.RequestON)))
)
(DECLARE: DONTCOPY 
[DECLARE: EVAL@COMPILE 

(BLOCKRECORD Dove.EtherAddr ((id 3 WORD)))

(BLOCKRECORD Dove.EtherConfigure ((NIL BITS 4)
				  (ByteCount BITS 4)
				  (NIL BITS 4)
				  (FifoLimit BITS 4)
				  (SaveBadFrames FLAG)
				  (SyncReady FLAG)
				  (NIL BITS 6)
				  (ExternalLoopBack FLAG)
				  (InternalLoopBack FLAG)
				  (PreambleLength BITS 2)
				  (AddrTypeLoc BITS 1)
				  (AddrLength BITS 3)
				  (ExpBackoffMethod BITS 1)
				  (AccContRes BITS 3)
				  (NIL BITS 1)
				  (LinearPolarity BITS 3)
				  (InterframeSpacing BYTE)
				  (SlotTimeLow BYTE)
				  (RetryNumber BITS 4)
				  (NIL BITS 1)
				  (SlotTimeHigh BITS 3)
				  (Padding FLAG)
				  (BitStuffing FLAG)
				  (CRC16 FLAG)
				  (NoCRCInsertion FLAG)
				  (TxNoCRS FLAG)
				  (NRZEncoding FLAG)
				  (BroadcastDisable FLAG)
				  (PromiscuousMode FLAG)
				  (InternalCDT FLAG)
				  (CDTFilter BITS 3)
				  (InternalCRS FLAG)
				  (CRSFilter BITS 3)
				  (MinFrameLength BYTE)
				  (NIL BYTE)))

(BLOCKRECORD Dove.EtherDumpStatus ((Buffer WORD)))

(BLOCKRECORD Dove.EtherFCB ((EthernetTCB 15 WORD)
			    (SCB 8 WORD)
			    (EtherLockMask WORD)
			    (MesaClientStateRequest WORD)
			    (MesaInClientState WORD)
			    (MesaOutClientState WORD)
			    (EtherCNATask 15 WORD)
			    (EtherCmdAvail WORD)
			    (EtherOutWorkMask WORD)
			    (MesaOutQueue 6 WORD)
			    (IOPOutQueue 6 WORD)
			    (CommandBlock 10 WORD)
			    (TxBufferDescriptor1 4 WORD)
			    (TxBufferDescriptor2 4 WORD)
			    (i586Dump 85 WORD)
			    (MesaInQueue 6 WORD)
			    (IOPInQueue 6 WORD)
			    (BindweedInQueue 6 WORD)
			    (SetFFLPtr WORD)
			    (EndRDL WORD)
			    (EndFBL WORD)
			    (RFDSpace 66 WORD)
			    (RBDSpace 40 WORD)
			    (RxBuffer 296 BYTE)
			    (NIL 1036 WORD)
			    (BufferCopyTask 15 WORD)
			    (BufferCopyWork WORD)
			    (InBufferAvail WORD)
			    (EtherInWorkMask WORD)
			    (ClientBufLength WORD)
			    (ClientBufPtr 2 WORD)
			    (ClientIOCBStatus WORD)
			    (RBDToProcess WORD)
			    (DebugInfo 6 WORD)))

(BLOCKRECORD Dove.EtherIOCB ((NextIOCB 2 WORD)               (* Next IOCB in IO queue)
			     (ClientCondition 3 WORD)        (* Gets notifed in Mesaland when IO is complete)
			     (i586Status WORD)               (* Status from the Dove ethernet coprocessor)
			     (Status BYTE)                   (* IO status?)
			     (IOCBType BITS 5)               (* What type of IO operation is this?)
			     )
			    (BLOCKRECORD Dove.EtherIOCB ((NIL 6 WORD)
                                                             (* This is the command variant)
					  (NIL BYTE)
					  (NIL BITS 5)
					  (Action BITS 3)
					  (Select 7 WORD)    (* The start of a block)
					  ))
			    (BLOCKRECORD Dove.EtherIOCB ((NIL 6 WORD)
                                                             (* This is the input/output variant)
					  (NIL BYTE)
					  (NIL BITS 5)
					  (NIL BITS 3)
					  (Address 2 WORD)   (* An Opie address)
					  (LengthInBytes WORD)
                                                             (* Length of buffer to be sent/received)
					  (Count WORD)       (* Meaningful only for input)
					  )))

(BLOCKRECORD Dove.EtherMulticastAddr ((ByteCount WORD)
				      (MulticastID1 3 WORD)
				      (MulticastID2 3 WORD)))

(BLOCKRECORD Dove.EtherTransmit ((BdPtr WORD)
				 (DestAddr 3 WORD)
				 (Type WORD)))

(BLOCKRECORD Dove.QueueBlock ((QueueHead 2 WORD)
			      (QueueTail 2 WORD)
			      (QueueNext 2 WORD)))

(BLOCKRECORD Dove.RxBufferDesc ((EndOfFrame FLAG)
				(Filled FLAG)
				(ActualCount BITS 14)
				(Next WORD)
				(BufAddrIOPReal WORD)
				(EndOfList FLAG)
				(Unused FLAG)
				(Size BITS 14)))

(BLOCKRECORD Dove.RxFrameDesc ((Status WORD)
			       (EndOfList FLAG)
			       (Suspend FLAG)
			       (NIL BITS 14)
			       (Link WORD)
			       (BDPtr WORD)
			       (DestAddr 3 WORD)
			       (SourceAddr 3 WORD)
			       (Type WORD)))

(BLOCKRECORD Dove.TimeDomainRFL ((LinkOK FLAG)
				 (XcvrProblem FLAG)
				 (Open FLAG)
				 (Short FLAG)
				 (NIL FLAG)
				 (Time BITS 11)))
]

(DECLARE: EVAL@COMPILE 

(RPAQQ \DoveEther.MulticastAddr 3)

(RPAQQ \DoveEther.QueuePtrSize 6)

(RPAQQ \DoveEther.ClientConditionSize 3)

(RPAQQ \DoveEther.IOIOCBLength 11)

(RPAQQ \DoveEther.RequestON 1)

(RPAQQ \DoveEther.RequestOFF 0)

(RPAQQ \DoveEther.TimeDomainRFL 5)

(CONSTANTS \DoveEther.MulticastAddr \DoveEther.QueuePtrSize \DoveEther.ClientConditionSize 
	   \DoveEther.IOIOCBLength \DoveEther.RequestON \DoveEther.RequestOFF 
	   \DoveEther.TimeDomainRFL)
)

(DECLARE: EVAL@COMPILE 

(RPAQQ \DoveEther.Command 0)

(RPAQQ \DoveEther.Input 2)

(RPAQQ \DoveEther.NotDoneNotHandledStatus 0)

(RPAQQ \DoveEther.Output 1)

(CONSTANTS \DoveEther.Command \DoveEther.Input \DoveEther.NotDoneNotHandledStatus \DoveEther.Output)
)

(DECLARE: EVAL@COMPILE 

(RPAQQ \DoveEther.OKMask 8192)

(RPAQQ \DoveEther.HandledMask 16384)

(RPAQQ \DoveEther.AlnErrorMask 1024)

(RPAQQ \DoveEther.BadCRC&Alignment 3072)

(RPAQQ \DoveEther.BadCRCMask 2048)

(RPAQQ \DoveEther.DoneHandledMask 192)

(RPAQQ \DoveEther.DoneOkayMask 160)

(RPAQQ \DoveEther.IsDequeuedMask 1)

(RPAQQ \DoveEther.OverrunMask 256)

(RPAQQ \DoveEther.TooManyCollisions 32)

(RPAQQ \DoveEther.UnderrunMask 256)

(RPAQQ \DoveEther.FrameTooLongMask 4096)

(CONSTANTS (\DoveEther.OKMask 8192)
	   (\DoveEther.HandledMask 16384)
	   \DoveEther.AlnErrorMask \DoveEther.BadCRC&Alignment \DoveEther.BadCRCMask 
	   \DoveEther.DoneHandledMask \DoveEther.DoneOkayMask \DoveEther.IsDequeuedMask 
	   \DoveEther.OverrunMask \DoveEther.TooManyCollisions \DoveEther.UnderrunMask 
	   \DoveEther.FrameTooLongMask)
)

(DECLARE: EVAL@COMPILE 

(RPAQQ \DoveEther.DoneMask 32768)

(RPAQQ \DoveEther.InputType 2)

(RPAQQ \DoveEther.OutputType 1)

(CONSTANTS \DoveEther.DoneMask \DoveEther.InputType \DoveEther.OutputType)
)
)
(PUTPROPS DOVEETHER COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1911 14162 (\DoveEther.ByteSwapIOCB 1921 . 3462) (\DoveEther.DeQueue 3464 . 5182) (
\DoveEther.EnQueue 5184 . 6322) (\DoveEther.GetPacketStatus 6324 . 9138) (\DoveEther.MakeSureOff 9140
 . 9879) (\DoveEther.QueueInput 9881 . 11079) (\DoveEther.QueueOutput 11081 . 12445) (
\DoveEther.SendPacket 12447 . 13540) (\DoveEther.TurnOn 13542 . 14160)))))
STOP