.TITLE VPDRV - VP: DEVICE DRIVER .IDENT /V01.00/ ; ; COPYRIGHT (C) 1979, 1980 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; ; ; MODULE DESCRIPTION: ; ; VPDRV - VIRUAL LINE PRINTER DRIVER ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 31-JAN-80 ; L. AUGUSTUS ; J. A. SCHRIESHEIM ; .SBTTL DEFINITIONS ; ; MACRO LIBRARY CALLS (EXEMC.MLB) ; .MCALL PKTDF$,UCBDF$ PKTDF$ ; DEFINE THE I/O PACKET OFFSETS UCBDF$ ; DEFINE UCB OFFSETS AND FLAGS ; ; LOCAL SYMBOL DEFINITIONS ; .IF DF,M$$MUP U.VDV = U.DCB-4 ; TCB ADDRESS OF FRONT END U.USR = U.DCB-6 ; TCB ADDRESS OF REQUESTOR U.AST = U.DCB-10 ; CANCEL I/O AST ADDRESS .IFF U.VDV = U.CNT-2 ; TCB ADDRESS OF FRONT END U.USR = U.CNT-4 ; TCB ADDRESS OF REQUESTOR U.AST = U.CNT-6 ; CANCEL I/O AST ADDRESS .ENDC .SBTTL DRIVER DISPATCH TABLE ;+ ; ; THE SYSTEM USES THIS TABLE TO DISPATCH INTO THE DRIVER. ; THE INITIATOR ENTRY POINT IS USED TO GET I/O PACKETS, ; PLACE THEM IN THE VIRTUAL DEVICE FRONT END RECEIVE QUEUE, ; AND START UP THE FRONT END. ; ;- $VPTBL::.WORD VPINI ; INITIATOR ENTRY POINT .WORD VPCAN ; CANCEL I/O ENTRY POINT .WORD 10$ ; TIMEOUT ENTRY POINT .WORD 10$ ; POWERFAIL ENTRY POINT .IF DF R$$MPL .WORD 0,0,0,0 ; RECONFIGURATION ENTRY POINTS .ENDC ; DF R$$MPL ; ; THESE ENTRY POINTS ARE NOT USED ; 10$: RETURN .SBTTL INITIATOR ENTRY POINT ;+ ; ; VPINI - INITIATOR ENTRY POINT ; ; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE. THE I/O ; PACKET IS PLACED IN THE VIRTUAL DEVICE FRONT END'S QUEUE AND THE ; FRONT END IS UNSTOPPED. ; ; INPUTS: ; ; R5 = UCB ADDRESS ; ; OUTPUTS: ; ; THE I/O PACKET IS PLACED ON THE VIRTUAL DEVICE FRONT END'S RECEIVE QUEUE ; ;- VPINI: CALL $GTPKT ; GET AN I/O PACKET BCS 20$ ; BR IF NO PACKET OR CONTROLLER BUSY MOV U.VDV(R5),R0 ; GET TCB ADDRESS OF FRONT END BEQ 10$ ; IF EQ, UNIT NOT ALLOCATED TO FRONT END MOV U.SCB(R5),R2 ; GET SCB ADDRESS BICB #US.BSY,U.STS(R5) ; UNBUSY UNIT CLRB S.STS(R2) ; ... CALL $EXRQP ; INSERT IN QUEUE AND START FRONT END BR VPINI ; AND LOOK FOR MORE ; ; ERRORS ; 10$: MOV #IE.OFL&377,R0 ; DEVICE OFF-LINE MOV R1,R3 ; GET ADDRESS OF I/O PACKET CALL $IODON ; FINISH I/O BR VPINI ; AND LOOK FOR MORE 20$: RETURN .SBTTL CANCEL I/O ENTRY POINT ;+ ; ; VPCAN - CANCEL I/O ENTRY POINT ; ; THIS ROUTINE IS ENTERED FROM THE QUEUE I/O DIRECTIVE. AN AST IS ; QUEUED FOR THE FRONT END. ; ; INPUTS: ; ; R5 = UCB ADDRESS ; ; OUTPUTS: ; ; AN AST IS QUEUED FOR THE FRONT END. ; ;- VPCAN: TST U.VDV(R5) ; DO WE HAVE A FRONT END ? BEQ 10$ ; IF EQ, NO - JUST RETURN TST U.AST(R5) ; DO WE HAVE AN AST ADDRESS ? BEQ 10$ ; IF EQ, NO - JUST RETURN MOV #6*2,R1 ; ELSE, SET AST BLOCK LENGTH CALL $ALOCB ; ALLOCATE SOME POOL BCS 10$ ; IF CS, NO POOL, FORGET IT MOV R0,R2 ; COPY ADDRESS OF BLOCK ALLOCATED TST (R0)+ ; BUMP OVER LINK WORD MOV R1,(R0)+ ; SET LENGTH OF BLOCK (FOR DEALLOCATION) MOV #10*2,(R0)+ ; SET STACK SPACE TO RESERVE FOR TASK MOV U.AST(R5),(R0)+ ; SET AST VIRTUAL ADDRESS FOR TASK MOV #1,(R0)+ ; SET PARAMETER COUNT MOV $TKTCB,(R0) ; SET PARAMETER (TCB ADDRESS) MOV U.VDV(R5),R0 ; POINT TO FRONT END TCB MOV R2,R1 ; POINT TO AST BLOCK CALL $QASTT ; QUEUE THE AST TO THE FRONT END 10$: RETURN .END