IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (1)      49  CANCEL I/O ON CHANNEL

   (1)      83  DELETE MAILBOX

   (1)     152  FILL DIAGNOSTIC BUFFER

   (1)     187  RELEASE I/O CHANNEL

   (1)     242  REQUEST I/O CHANNEL

   (1)     300  I/O REQUEST COMPLETION PROCESSING

   (1)     349  INITIATE I/O FUNCTION ON DEVICE

   (1)     391  RELEASE BUFFERED DATAPATH

   (1)     432  REQUEST BUFFERED DATAPATH

   (1)     484  RELEASE UNIBUS MAP REGISTERS

   (1)     537  REQUEST UNIBUS MAP REGISTERS

   (1)     572  ALTER UBA MAP REGISTER BITMAP

   (1)     605  SEARCH MAP REGISTER BITMAP AND ALLOCATE MAP REG

   (1)     658  RETURN TO CALLER

   (1)     677  WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL

   (1)     711  WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNE

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   1

01                                                                                                                               (1)



                                     0000     1 	.TITLE	IOSUBNPAG - NONPAGED I/O RELATED SUBROUTINES

                                     0000     2 	.IDENT	/01/

                                     0000     3  

                                     0000     4 ;

                                     0000     5 ; COPYRIGHT (C) 1977

                                     0000     6 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

                                     0000     7 ;

                                     0000     8 ; THIS SOFTWARE IS FURNISHED UNDER  A LICENSE FOR USE ONLY  ON  A

                                     0000     9 ; SINGLE COMPUTER SYSTEM AND MAY BE  COPIED ONLY WITH  THE INCLU-

                                     0000    10 ; SION OF  THE  ABOVE  COPYRIGHT NOTICE.  THIS SOFTWARE,  OR  ANY

                                     0000    11 ; OTHER COPIES THEREOF, MAY NOT BE  PROVIDED  OR  OTHERWISE  MADE

                                     0000    12 ; AVAILABLE TO ANY OTHER PERSON EXCEPT  FOR  USE  ON  SUCH SYSTEM

                                     0000    13 ; AND TO  ONE WHO AGREES  TO  THESE LICENSE  TERMS.  TITLE TO AND

                                     0000    14 ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.

                                     0000    15 ;

                                     0000    16 ; THE INFORMATION IN THIS SOFTWARE  IS  SUBJECT TO CHANGE WITHOUT

                                     0000    17 ; NOTICE AND SHOULD NOT BE CONSTRUED  AS  A COMMITMENT BY DIGITAL

                                     0000    18 ; EQUIPMENT CORPORATION.

                                     0000    19 ;

                                     0000    20 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

                                     0000    21 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

                                     0000    22 ;

                                     0000    23 ; D. N. CUTLER 13-JUN-76

                                     0000    24 ;

                                     0000    25 ; MODIFIED BY R.HEINEN 29-SEPT-76

                                     0000    26 ;

                                     0000    27 ;	CHANGE PARAMETERS TO WAIT FOR INTERRUPTS.

                                     0000    28 ;

                                     0000    29 ; NONPAGED I/O RELATED SUBROUTINES

                                     0000    30 ;

                                     0000    31 ; MACRO LIBRARY CALLS

                                     0000    32 ;

                                     0000    33  

                                     0000    34 	$ADPDEF				;DEFINE ADP OFFSETS

                                     0000    35 	$CADEF				;DEFINE CONDITIONAL ASSEMBLY PARAMETERS

                                     0000    36 	$CRBDEF				;DEFINE CRB OFFSETS

                                     0000    37 	$DDBDEF				;DEFINE DDB OFFSETS

                                     0000    38 	$DDTDEF				;DEFINE DDT OFFSETS

                                     0000    39 	$EMBDEF				;DEFINE EMB OFFSETS

                                     0000    40 	$IDBDEF				;DEFINE IDB OFFSETS

                                     0000    41 	$IPLDEF				;DEFINE INTERRUPT PRIORITY LEVELS

                                     0000    42 	$IRPDEF				;DEFINE IRP OFFSETS

                                     0000    43 	$LOGDEF				;DEFINE LOGICAL NAME BLOCK OFFSETS

                                     0000    44 	$PCBDEF				;DEFINE PCB OFFSETS

                                     0000    45 	$PRDEF				;DEFINE PROCESSOR REGISTERS

                                     0000    46 	$UCBDEF				;DEFINE UCB OFFSETS

                                     0000    47 	$VECDEF				;DEFINE CRB VECTOR OFFSETS

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   2

01              CANCEL I/O ON CHANNEL                                                                                            (1)



                                     0000    49 	.SBTTL	CANCEL I/O ON CHANNEL

                                     0000    50 ;+

                                     0000    51 ; IOC$CANCELIO - CANCEL I/O ON CHANNEL

                                     0000    52 ;

                                     0000    53 ; THIS ROUTINE IS A DEVICE INDEPENDENT CANCEL I/O ROUTINE THAT CONDITIONALLY

                                     0000    54 ; MARKS THE UCB SUCH THAT THE CURRENT I/O REQUEST WILL BE CANCELED IF CONDITIONS

                                     0000    55 ; WARRANT SUCH A ACTION.

                                     0000    56 ;

                                     0000    57 ; INPUTS:

                                     0000    58 ;

                                     0000    59 ;	R2 = NEGATIVE OF THE CHANNEL NUMBER.

                                     0000    60 ;	R3 = CURRENT IO PACKET.

                                     0000    61 ;	R4 = PCB ADDRESS.

                                     0000    62 ;	R5 = UCB ADDRESS.

                                     0000    63 ;

                                     0000    64 ; OUTPUTS:

                                     0000    65 ;

                                     0000    66 ;	IF THE DEVICE IS BUSY, THE REQUEST IS FOR THE CURRENT PROCESS, AND

                                     0000    67 ;	THE I/O WAS ISSUED FROM THE DESIGNATED CHANNEL, THEN THE CANCEL I/O

                                     0000    68 ;	BIT IS SET IN THE CORRESPONDING UCB.

                                     0000    69 ;

                                     0000    70 ;	R2, R3, R4, AND R5 ARE PRESERVED ACROSS CALL.

                                     0000    71 ;-

                                     0000    72  

                                 00000000    73 	.PSECT	WIONONPAGED

                                     0000    74 IOC$CANCELIO::				;CANCEL I/O ON CHANNEL

         58 A5            08     E1  0000    75 	BBC	#UCB$V_BSY,UCB$W_STS(R5),10$ ;IF CLR, DEVICE NOT BUSY

                          11         0004       

         60 A4         0C A3     D1  0005    76 	CMPL	IRP$L_PID(R3),PCB$L_PID(R4) ;PROCESS ID MATCH?

                          0A     12  000A    77 	BNEQ	10$			;IF NEQ NO

         28 A3            52     B1  000C    78 	CMPW	R2,IRP$W_CHAN(R3)	;CHANNEL NUMBER MATCH

                          04     12  0010    79 	BNEQ	10$			;IF NEQ NO

         58 A5            08     A8  0012    80 	BISW	#UCB$M_CANCEL,UCB$W_STS(R5) ;SET CANCEL PENDING

                                 05  0016    81 10$:	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   3

01              DELETE MAILBOX                                                                                                   (1)



                                     0017    83 	.SBTTL	DELETE MAILBOX

                                     0017    84 ;+

                                     0017    85 ; IOC$DELMBX - DELETE MAILBOX

                                     0017    86 ;

                                     0017    87 ; THIS ROUTINE IS CALLED TO CHECK IF A DEVICE IS A MAILBOX AND WHETHER

                                     0017    88 ; IT IS MARKED FOR DELETION.

                                     0017    89 ;

                                     0017    90 ; INPUTS:

                                     0017    91 ;

                                     0017    92 ;	R4 = CURRENT PROCESS PCB ADDRESS.

                                     0017    93 ;	R5 = UCB ADDRESS OF MAILBOX TO DELETE.

                                     0017    94 ;

                                     0017    95 ;	I/O DATA BASED LOCKED AND AT AST DELIVERY LEVEL.

                                     0017    96 ;

                                     0017    97 ; OUTPUTS:

                                     0017    98 ;

                                     0017    99 ;	IF THE DEVICE IS A MAILBOX, ITS REFERENCE COUNT IS ZERO, AND IT

                                     0017   100 ;	IS MARKED FOR DELETE, THEN THE SPECIFIED UCB IS REMOVED FROM THE

                                     0017   101 ;	MAILBOX UCB LIST AND DEALLOCATED. IF A LOGICAL NAME IS ASSOCIATED

                                     0017   102 ;	WITH THE MAILBOX, THEN IT IS ALSO DELETED. THE PROCESS BUFFERED

                                     0017   103 ;	I/O QUOTA IS UPDATED.

                                     0017   104 ;-

                                     0017   105  

                                     0017   106 IOC$DELMBX::				;DELETE MAILBOX

            50         24 A5     D0  0017   107 	MOVL	UCB$L_DDB(R5),R0	;GET ADDRESS OF DDB

            50         D8 A0     9E  001B   108 	MOVAB	DDB$L_UCB-UCB$L_LINK(R0),R0 ;GET ADDRESS OF FIRST UCB LINK

         34 A5            00'    E1  001F   109 	BBC	S^#DEV$V_MBX,UCB$L_DEVCHAR(R5),70$ ;IF CLR, DEVICE NOT MAILBOX

                          78         0023       

                       50 A5     B5  0024   110 	TSTW	UCB$W_REFC(R5)		;REFERENCE COUNT ZERO?

                          73     12  0027   111 	BNEQ	70$			;IF NEQ NO

         5A A5            01     E1  0029   112 	BBC	#UCB$V_DELMBX,UCB$W_DEVSTS(R5),70$ ;IF CLR, NO DELETE

                          6E         002D       

            51            50     D0  002E   113 10$:	MOVL	R0,R1			;SAVE ADDRESS OF LAST UCB

            50         2C A1     D0  0031   114 	MOVL	UCB$L_LINK(R1),R0	;GET ADDRESS OF NEXT UCB

            55            50     D1  0035   115 	CMPL	R0,R5			;UCB ADDRESS MATCH?

                          F4     12  0038   116 	BNEQ	10$			;IF NEQ NO

         2C A1         2C A5     D0  003A   117 	MOVL	UCB$L_LINK(R5),UCB$L_LINK(R1) ;REMOVE UCB FROM UCB LIST

            52         20 A5     D0  003F   118 	MOVL	UCB$L_CRB(R5),R2	;GET ADDRESS OF CRB

                       0C A2     B7  0043   119 	DECW	CRB$W_REFC(R2)		;DECREMENT REFERENCE COUNT

            52         64 A5     D0  0046   120 	MOVL	UCB$L_LOGADR(R5),R2	;GET ADDRESS OF LOGICAL NAME ENTRY

                          15     13  004A   121 	BEQL	20$			;IF EQL NONE

            53         0B A2     9A  004C   122 	MOVZBL	LOG$B_TABLE(R2),R3	;GET LOGICAL NAME TABLE NUMBER

                          FFAD'  30  0050   123 	BSBW	LOG$LOCKW		;LOCK NAME TABLE FOR WRITE

            50            62     0F  0053   124 	REMQUE	LOG$L_LTFL(R2),R0	;REMOVE LOGICAL NAME ENTRY FROM TABLE

                          53     DD  0056   125 	PUSHL	R3			;SAVE LOGICAL NAME TABLE NUMBER

                          FFA5'  30  0058   126 	BSBW	EXE$DEAPAGED		;DEALLOCATE LOGICAL NAME BLOCK

                          53   8ED0  005B   127 	POPL	R3			;RETRIEVE LOGICAL NAME TABLE NUMBER

                          FF9F'  30  005E   128 	BSBW	LOG$UNLOCK		;UNLOCK NAME TABLE

         5A A5            00     E0  0061   129 20$:	BBS	#UCB$V_PRMMBX,UCB$W_DEVSTS(R5),40$ ;IF SET, PERMANENT MAILBOX

                          26         0065       

            51         5C A5     3C  0066   130 	MOVZWL	UCB$L_CPID(R5),R1	;GET PROCESS INDEX

                                     006A   131 	DSBINT	#IPL$_SYNCH		;SYNCHRONIZE ACCESS TO SYSTEM DATA BASE

            51   00000000'FF41   D0  0070   132 	MOVL	@SCH$GL_PCBVEC[R1],R1	;GET ADDRESS OF PROCESS PCB

         5C A5         60 A1     D1  0078   133 	CMPL	PCB$L_PID(R1),UCB$L_CPID(R5) ;PROCESS ID MATCH?

                          0A     12  007D   134 	BNEQ	30$			;IF NEQ NO

         68 A1         4A A5     A0  007F   135 	ADDW	UCB$W_CHARGE(R5),PCB$W_BYTLM(R1) ;UPDATE BYTE COUNT LIMIT

         42 A1         4A A5     A0  0084   136 	ADDW	UCB$W_CHARGE(R5),PCB$W_BYTCNT(R1) ;UPDATE BYTE COUNT QUOTA

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   4

01              DELETE MAILBOX                                                                                                   (1)



                                     0089   137 30$:	ENBINT				;ENABLE INTERRUPTS

                                     008C   138  

                                     008C   139 ;

                                     008C   140 ; CLEAN UP MAILBOX MESSAGES

                                     008C   141 ; THERE ARE NO OUTSTANDING I/O OPERATIONS.

                                     008C   142 ;

                                     008C   143  

            50         00 B5     0F  008C   144 40$:	REMQUE	@(R5),R0		;FETCH MESSAGE BLOCK

                          04     1D  0090   145 	BVS	50$			;IF VS THEN NONE

                          05     10  0092   146 	BSBB	60$			;DEALLOCATE MESSAGE BLOCK

                          F6     11  0094   147 	BRB	40$			;CONTINUE UNTIL EXHAUSTED

            50            55     D0  0096   148 50$:	MOVL	R5,R0			;SET ADDRESS OF BLOCK TO RELEASE

                          FF64'  30  0099   149 60$:	BSBW	EXE$DEANONPAGED		;DEALLOCATE MAILBOX UCB AND RETURN

                                 05  009C   150 70$:	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   5

01              FILL DIAGNOSTIC BUFFER                                                                                           (1)



                                     009D   152 	.SBTTL	FILL DIAGNOSTIC BUFFER

                                     009D   153 ;+

                                     009D   154 ; IOC$DIAGBUFILL - FILL DIAGNOSTIC BUFFER

                                     009D   155 ;

                                     009D   156 ; THIS ROUTINE IS CALLED AT THE END OF AN I/O OPERATION, BUT BEFORE RELEASING

                                     009D   157 ; THE I/O CHANNEL, TO FILL THE FINAL DEVICE PARAMETERS INTO AN INTERNAL DIAG-

                                     009D   158 ; NOSTIC BUFFER IF ONE IS SPECIFIED.

                                     009D   159 ;

                                     009D   160 ; INPUTS:

                                     009D   161 ;

                                     009D   162 ;	R4 = ADDRESS OF DEVICE CSR REGISTER.

                                     009D   163 ;	R5 = DEVICE UNIT UCB ADDRESS.

                                     009D   164 ;

                                     009D   165 ; OUTPUTS:

                                     009D   166 ;

                                     009D   167 ;	IF A DIAGNOSTIC BUFFER WAS SPECIFIED IN THE ORIGINAL REQUEST, THEN

                                     009D   168 ;	THE COMPLETION TIME, FINAL ERROR COUNTERS, AND DEVICE REGISTERS ARE

                                     009D   169 ;	FILLED INTO THE DIAGNOSTIC BUFFER.

                                     009D   170 ;-

                                     009D   171  

                                     009D   172 IOC$DIAGBUFILL::			;FILL DIAGNOSTIC BUFFER

            53         4C A5     D0  009D   173 	MOVL	UCB$L_IRP(R5),R3	;GET ADDRESS OF I/O PACKET

         2A A3            07     E1  00A1   174 	BBC	#IRP$V_DIAGBUF,IRP$W_STS(R3),10$ ;IF CLR, NO DIAGNOSTIC BUFFER

                          26         00A5       

            50         44 B3     D0  00A6   175 	MOVL	@IRP$L_DIAGBUF(R3),R0	;GET ADDRESS OF INTERNAL BUFFER DATA AREA

            50            08     C0  00AA   176 	ADDL	#8,R0			;POINT PAST START TIME

            80   00000000'EF     7D  00AD   177 	MOVQ	EXE$GQ_SYSTIME,(R0)+	;INSERT COMPLETION TIME

            80         70 A5     3C  00B4   178 	MOVZWL	UCB$B_ERTCNT(R5),(R0)+	;INSERT FINAL ERROR COUNTERS

            52         24 A5     D0  00B8   179 	MOVL	UCB$L_DDB(R5),R2	;GET ADDRESS OF DDB

            52         0C A2     D0  00BC   180 	MOVL	DDB$L_DDT(R2),R2	;GET ADDRESS OF DDT

            52         10 A2     C1  00C0   181 	ADDL3	DDT$L_REGDUMP(R2),R2,R1	;CALCULATE ADDRESS OF DUMP ROUTINE

                          51         00C4       

                          03     19  00C5   182 	BLSS	5$			;IF LSS SYSTEM ADDRESS

            51            52     C2  00C7   183 	SUBL	R2,R1			;SUBTRACT OUT BASE ADDRESS

                          61     16  00CA   184 5$:	JSB	(R1)			;CALL DEVICE SPECIFIC REGISTER DUMP ROUTINE

                                 05  00CC   185 10$:	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   6

01              RELEASE I/O CHANNEL                                                                                              (1)



                                     00CD   187 	.SBTTL	RELEASE I/O CHANNEL

                                     00CD   188 ;+

                                     00CD   189 ; IOC$RELCHAN - RELEASE ALL I/O CHANNELS

                                     00CD   190 ; IOC$RELSCHAN - RELEASE SECONDARY I/O CHANNEL

                                     00CD   191 ;

                                     00CD   192 ; THIS ROUTINE IS CALLED AT THE END OF AN I/O OPERATION TO RELEASE ALL

                                     00CD   193 ; CHANNELS THE I/O WAS BEING PERFORMED ON.

                                     00CD   194 ;

                                     00CD   195 ; INPUTS:

                                     00CD   196 ;

                                     00CD   197 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     00CD   198 ;

                                     00CD   199 ; OUTPUTS:

                                     00CD   200 ;

                                     00CD   201 ;	THE CHANNELS ARE RELEASED AND AN ATTEMPT IS MADE TO REMOVE THE NEXT

                                     00CD   202 ;	WAITING DRIVER PROCESS FROM EACH CHANNEL QUEUE. IF A DRIVER PROCESS

                                     00CD   203 ;	IS WAITING, THEN THE CHANNEL IS ASSIGNED TO THAT DRIVER PROCESS AND

                                     00CD   204 ;	IT IS CALLED VIA A JSB TO ITS CHANNEL WAIT RETURN ADDRESS. WHEN THE

                                     00CD   205 ;	CALLED DRIVER PROCESS RETURNS, A RETURN IS MADE TO THE DRIVER PROCESS

                                     00CD   206 ;	THAT RELEASED THE CHANNEL. IF THERE IS NO DRIVER PROCESS WAITING FOR

                                     00CD   207 ;	THE CHANNEL, THEN THE CHANNEL STATUS IS SET TO IDLE.

                                     00CD   208 ;

                                     00CD   209 ;	R3 AND R4 ARE PRESERVED ACROSS CALL.

                                     00CD   210 ;-

                                     00CD   211  

                                     00CD   212 	.ENABL	LSB

                                     00CD   213 IOC$RELSCHAN::				;RELEASE SECONDARY I/O CHANNEL

            50         20 A5     D0  00CD   214 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

            50         10 A0     D0  00D1   215 	MOVL	CRB$L_LINK(R0),R0	;GET ADDRESS OF SECONARY CRB

                          10     11  00D5   216 	BRB	20$			;

                                     00D7   217 IOC$RELCHAN::				;RELEASE I/O CHANNEL

            50         20 A5     D0  00D7   218 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

            50         10 A0     D0  00DB   219 	MOVL	CRB$L_LINK(R0),R0	;GET ADDRESS OF SECONDARY CRB

                          02     13  00DF   220 	BEQL	10$			;IF EQL NONE

                          04     10  00E1   221 	BSBB	20$			;RELEASE SECONDARY CHANNEL

            50         20 A5     D0  00E3   222 10$:	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

         0E A0            00     E1  00E7   223 20$:	BBC	#CRB$V_BSY,CRB$B_MASK(R0),30$ ;IF CLR, THEN CHANNEL NOT BUSY

                          25         00EB       

            51         1C A0     D0  00EC   224 	MOVL	CRB$L_INTD+VEC$L_IDB(R0),R1 ;GET ADDRESS OF IDB

         04 A1            55     D1  00F0   225 	CMPL	R5,IDB$L_OWNER(R1)	;DRIVER PROCESS OWN CHANNEL?

                          1B     12  00F4   226 	BNEQ	30$			;IF NEQ NO

            52         00 B0     0F  00F6   227 	REMQUE	@CRB$L_WQFL(R0),R2	;GET ADDRESS OF NEXT DRIVER FORK BLOCK

                          16     1D  00FA   228 	BVS	40$			;IF VS NO DRIVER PROCESS WAITING

                          38     BB  00FC   229 	PUSHR	#^M<R3,R4,R5>		;SAVE CONTEXT OF CURRENT DRIVER PROCESS

            55            52     D0  00FE   230 	MOVL	R2,R5			;COPY ADDRESS OF DRIVER PROCESS FORK BLOCK

            53         10 A5     D0  0101   231 	MOVL	UCB$L_FR3(R5),R3	;LOAD WAITING DRIVER PROCESS CONTEXT

            54            61     D0  0105   232 	MOVL	IDB$L_CSR(R1),R4	;SET ASSIGNED CHANNEL CSR ADDRESS

         04 A1            55     D0  0108   233 	MOVL	R5,IDB$L_OWNER(R1)	;SET ADDRESS OF OWNER PROCESS UCB

                       0C B5     16  010C   234 	JSB	@UCB$L_FPC(R5)		;CALL DRIVER AT CHANNEL WAIT RETURN ADDRESS

                          38     BA  010F   235 	POPR	#^M<R3,R4,R5>		;RESTORE PREVIOUS DRIVER PROCESS CONTEXT

                                 05  0111   236 30$:	RSB				;

                       04 A1     D4  0112   237 40$:	CLRL	IDB$L_OWNER(R1)		;CLEAR OWNER UNIT UCB ADDRESS

         0E A0            01     8A  0115   238 	BICB	#CRB$M_BSY,CRB$B_MASK(R0) ;CLEAR CHANNEL BUSY

                                 05  0119   239 	RSB				;

                                     011A   240 	.DSABL	LSB

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   7

01              REQUEST I/O CHANNEL                                                                                              (1)



                                     011A   242 	.SBTTL	REQUEST I/O CHANNEL

                                     011A   243 ;+

                                     011A   244 ; IOC$REQPCHANH - REQUEST PRIMARY I/O CHANNEL HIGH PRIORITY

                                     011A   245 ; IOC$REQSCHANH - REQUEST SECONDARY I/O CHANNEL HIGH PRIORITY

                                     011A   246 ; IOC$REQPCHANL - REQUEST PRIMARY I/O CHANNEL LOW PRIORITY

                                     011A   247 ; IOC$REQSCHANL - REQUEST SECONDARY I/O CHANNEL LOW PRIORITY

                                     011A   248 ;

                                     011A   249 ; THESE ROUTINES ARE CALLED TO REQUEST AN I/O CHANNEL TO PERFORM AN I/O

                                     011A   250 ; OPERATION ON.

                                     011A   251 ;

                                     011A   252 ; INPUTS:

                                     011A   253 ;

                                     011A   254 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     011A   255 ;	04(SP) = RETURN ADDRESS OF CALLER'S CALLER.

                                     011A   256 ;

                                     011A   257 ; OUTPUTS:

                                     011A   258 ;

                                     011A   259 ;	IF THE SPECIFIED I/O CHANNEL IS IDLE, THEN IT IS IMMEDIATELY

                                     011A   260 ;	ASSIGNED TO THE CURRENT DRIVER PROCESS. ELSE THE DRIVER PROCESS

                                     011A   261 ;	CONTEXT IS SAVED IN ITS FORK BLOCK, THE FORK BLOCK IS INSERTED

                                     011A   262 ;	IN THE CHANNEL WAIT QUEUE, AND A RETURN TO THE DRIVER PROCESS'

                                     011A   263 ;	CALLER IS EXECUTED.

                                     011A   264 ;

                                     011A   265 ;	WHEN THE CHANNEL IS ASSIGNED, THE CSR ADDRESS OF THE ASSIGNED

                                     011A   266 ;	CONTROLLER IS RETURNED TO THE CALLER IN REGISTER R4.

                                     011A   267 ;

                                     011A   268 ;	R3 IS PRESERVED ACROSS CALL.

                                     011A   269 ;-

                                     011A   270  

                                     011A   271 	.ENABL	LSB

                                     011A   272 IOC$REQSCHANH::				;REQUEST SECONDARY I/O CHANNEL HIGH PRIORITY

            50         20 A5     D0  011A   273 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

            50         10 A0     D0  011E   274 	MOVL	CRB$L_LINK(R0),R0	;GET ADDRESS OF SECONDARY CRB

                          0E     11  0122   275 	BRB	10$			;

                                     0124   276 IOC$REQSCHANL::				;REQUEST SECONDARY I/O CHANNEL LOW PRIORITY

            50         20 A5     D0  0124   277 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

            50         10 A0     D0  0128   278 	MOVL	CRB$L_LINK(R0),R0	;GET ADDRESS OF SECONDARY CRB

                          0D     11  012C   279 	BRB	20$			;

                                     012E   280 IOC$REQPCHANH::				;REQUEST PRIMARY I/O CHANNEL HIGH PRIORITY

            50         20 A5     D0  012E   281 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

            52            50     D0  0132   282 10$:	MOVL	R0,R2			;SET ADDDRESS OF WAIT QUEUE LISTHEAD

                          08     11  0135   283 	BRB	30$			;

                                     0137   284 IOC$REQPCHANL::				;REQUEST PRIMARY I/O CHANNEL LOW PRIORITY

            50         20 A5     D0  0137   285 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF PRIMARY CRB

            52         04 A0     D0  013B   286 20$:	MOVL	CRB$L_WQBL(R0),R2	;GET ADDRESS OF LAST ENTRY IN QUEUE

            51         1C A0     D0  013F   287 30$:	MOVL	CRB$L_INTD+VEC$L_IDB(R0),R1 ;GET ADDRESS OF IDB

         0E A0            00     E2  0143   288 	BBSS	#CRB$V_BSY,CRB$B_MASK(R0),40$ ;IF SET, THEN CHANNEL BUSY

                          08         0147       

            54            61     D0  0148   289 	MOVL	IDB$L_CSR(R1),R4	;SET ASSIGNED CHANNEL CSR ADDRESS

         04 A1            55     D0  014B   290 	MOVL	R5,IDB$L_OWNER(R1)	;SET OWNER UCB ADDRESS

                                 05  014F   291 	RSB				;

         10 A5            53     D0  0150   292 40$:	MOVL	R3,UCB$L_FR3(R5)	;SAVE R3 IN FORK BLOCK

                       0C A5   8ED0  0154   293 	POPL	UCB$L_FPC(R5)		;SAVE CHANNEL WAIT RETURN ADDRESS

            62            65     0E  0158   294 	INSQUE	UCB$L_FQFL(R5),CRB$L_WQFL(R2) ;INSERT DRIVER PROCESS IN CHANNEL WAIT QUEUE

         04 A1            55     D1  015B   295 	CMPL	R5,IDB$L_OWNER(R1)	;CURRENT DRIVER PROCESS OWNER?

                          3F     13  015F   296 	BEQL	RELEASE			;IF EQL YES - RELEASE CHANNELS

                                 05  0161   297 	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   8

01              REQUEST I/O CHANNEL                                                                                              (1)



                                     0162   298 	.DSABL	LSB

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page   9

01              I/O REQUEST COMPLETION PROCESSING                                                                                (1)



                                     0162   300 	.SBTTL	I/O REQUEST COMPLETION PROCESSING

                                     0162   301 ;+

                                     0162   302 ; IOC$REQCOM - I/O REQUEST COMPLETE

                                     0162   303 ;

                                     0162   304 ; THIS ROUTINE IS ENTERED WHEN AN I/O OPERATION IS COMPLETED ON A

                                     0162   305 ; DEVICE UNIT. THE FINAL I/O STATUS IS STORED IN THE ASSOCIATED I/O

                                     0162   306 ; PACKET AND THE PACKET IS INSERTED IN THE I/O FINISH QUEUE FOR

                                     0162   307 ; I/O POST PROCESSING. DEVICE UNIT BUSY IS CLEARED AND AN ATTEMPT

                                     0162   308 ; IS MADE TO START ANOTHER I/O REQUEST ON THE DEVICE UNIT.

                                     0162   309 ;

                                     0162   310 ; INPUTS:

                                     0162   311 ;

                                     0162   312 ;	R0 = FIRST LONGWORD OF I/O STATUS.

                                     0162   313 ;	R1 = SECOND LONGWORD OF I/O STATUS.

                                     0162   314 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     0162   315 ;

                                     0162   316 ; OUTPUTS:

                                     0162   317 ;

                                     0162   318 ;	THE I/O PACKET IS INSERTED IN THE I/O POST PROCESSING QUEUE

                                     0162   319 ;	AND DEVICE UNIT BUSY IS CLEARED. A SOFTWARE INTERRUPT IS

                                     0162   320 ;	REQUESTED TO INITIATE I/O POST PROCESSING.

                                     0162   321 ;-

                                     0162   322  

                                     0162   323 IOC$REQCOM::				;I/O DONE PROCESSING

            53         4C A5     D0  0162   324 	MOVL	UCB$L_IRP(R5),R3	;GET ADDRESS OF I/O PACKET

         34 A3            50     7D  0166   325 	MOVQ	R0,IRP$L_MEDIA(R3)	;STORE FINAL I/O STATUS

                       60 A5     D6  016A   326 	INCL	UCB$L_OPCNT(R5)		;INCREMENT OPERATIONS COMPLETED

                                     016D   327  

                                     016D   328 	.IF DF	CA$_MEASURE_IOT

                                     016D   329  

                          FE90'  30  016D   330 	BSBW	PMS$END_IO		;INSERT END OF I/O TRANSACTION MESSAGE

                                     0170   331  

                                     0170   332 	.ENDC

                                     0170   333  

       0000'DF            63     0E  0170   334 	INSQUE	(R3),@W^IOC$GL_PSBL	;INSERT PACKET IN POST PROCESS QUEUE

                          03     12  0175   335 	BNEQ	10$			;IF NEQ NOT FIRST ENTRY IN QUEUE

                                     0177   336 	SOFTINT	#IPL$_IOPOST		;INITIATE SOFTWARE INTERRUPT

         58 A5            02     E5  017A   337 10$:	BBCC	#UCB$V_ERLOGIP,UCB$W_STS(R5),20$ ;IF CLR, ERROR LOG NOT IN PROGRESS

                          15         017E       

            52         78 A5     D0  017F   338 	MOVL	UCB$L_EMB(R5),R2	;GET ADDRESS OF ERROR MESSAGE BUFFER

         1A A2         5A A5     B0  0183   339 	MOVW	UCB$W_DEVSTS(R5),EMB$W_DV_DEVSTS(R2) ;INSERT FINAL DEVICE STATUS

         10 A2         70 A5     B0  0188   340 	MOVW	UCB$B_ERTCNT(R5),EMB$B_DV_ERTCNT(R2) ;INSERT FINAL ERROR COUNTERS

         12 A2            50     7D  018D   341 	MOVQ	R0,EMB$Q_DV_IOSB(R2)	;INSERT FINAL I/O STATUS

                          FE6C'  30  0191   342 	BSBW	ERL$RELEASEMB		;RELEASE ERROR MESSAGE BUFFER

            53         40 B5     0F  0194   343 20$:	REMQUE	@UCB$L_IOQFL(R5),R3	;REMOVE I/O PACKET FROM DEVICE UNIT QUEUE

                          09     1C  0198   344 	BVC	IOC$INITIATE		;IF VC INITIATE NEXT FUNCTION

         58 A5       0100 8F     AA  019A   345 	BICW	#UCB$M_BSY,UCB$W_STS(R5) ;CLEAR UNIT BUSY

                                     01A0   346 RELEASE:				;RELEASE ALL CHANNELS

                          FF34   31  01A0   347 	BRW	IOC$RELCHAN		;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  10

01              INITIATE I/O FUNCTION ON DEVICE                                                                                  (1)



                                     01A3   349 	.SBTTL	INITIATE I/O FUNCTION ON DEVICE

                                     01A3   350 ;+

                                     01A3   351 ; IOC$INITIATE - INITIATE NEXT FUNCTION ON DEVICE

                                     01A3   352 ;

                                     01A3   353 ; THIS ROUTINE IS CALLED TO INITIATE THE NEXT FUNCTION ON A DEVICE BY CLEARING

                                     01A3   354 ; STATUS BITS, SETTING THE OPERATION START TIME IF A DIAGNOSTIC BUFFER IS

                                     01A3   355 ; SPECIFIED, AND CALLING THE DRIVER AT ITS START I/O ENTRY POINT.

                                     01A3   356 ;

                                     01A3   357 ; INPUTS:

                                     01A3   358 ;

                                     01A3   359 ;	R3 = ADDRESS OF I/O REQUEST PACKET.

                                     01A3   360 ;	R5 = DEVICE UNIT UCB ADDRESS.

                                     01A3   361 ;

                                     01A3   362 ; OUTPUTS:

                                     01A3   363 ;

                                     01A3   364 ;	CANCEL I/O, POWERFAIL, AND TIME OUT STATUS BITS ARE CLEARED, THE

                                     01A3   365 ;	CURRENT SYSTEM TIME IS FILLED INTO THE INTERNAL DIAGNOSTIC BUFFER

                                     01A3   366 ;	IF ONE IS SPECIFIED, AND THE DRIVER IS CALLED AT ITS START I/O ENTRY

                                     01A3   367 ;	POINT.

                                     01A3   368 ;-

                                     01A3   369  

                                     01A3   370 IOC$INITIATE::				;INITIATE I/O FUNCTION

         4C A5            53     D0  01A3   371 	MOVL	R3,UCB$L_IRP(R5)	;SAVE I/O PACKET ADDRESS

                                     01A7   372  

                                     01A7   373 	.IF DF	CA$_MEASURE_IOT

                                     01A7   374  

                          FE56'  30  01A7   375 	BSBW	PMS$START_IO		;INSERT START OF I/O TRANSACTION MESSAGE

                                     01AA   376  

                                     01AA   377 	.ENDC

                                     01AA   378  

         68 A5         2C A3     7D  01AA   379 	MOVQ	IRP$L_SVAPTE(R3),UCB$L_SVAPTE(R5) ;COPY TRANSFER PARAMETERS

         58 A5       0048 8F     AA  01AF   380 	BICW	#UCB$M_CANCEL!UCB$M_TIMOUT,UCB$W_STS(R5) ;CLEAR CANCEL AND TIME OUT

         2A A3            07     E1  01B5   381 	BBC	#IRP$V_DIAGBUF,IRP$W_STS(R3),10$ ;IF CLR, NO DIAGNOSTIC BUFFER

                          0B         01B9       

            50         44 B3     D0  01BA   382 	MOVL	@IRP$L_DIAGBUF(R3),R0	;GET ADDRESS OF DIAGNOSTIC BUFFER DATA AREA

            60   00000000'EF     7D  01BE   383 	MOVQ	EXE$GQ_SYSTIME,(R0)	;INSERT I/O OPERATION START TIME

            50         24 A5     D0  01C5   384 10$:	MOVL	UCB$L_DDB(R5),R0	;GET ADDRESS OF DEVICE DATA BLOCK

            50         0C A0     D0  01C9   385 	MOVL	DDB$L_DDT(R0),R0	;GET ADDRESS OF DRIVER DISPATCH TABLE

            50            60     C1  01CD   386 	ADDL3	DDT$L_START(R0),R0,R1	;CALCULATE ADDRESS OF START ENTRY POINT

                          51         01D0       

                          03     19  01D1   387 	BLSS	20$			;IF LSS SYSTEM ADDRESS

            51            50     C2  01D3   388 	SUBL	R0,R1			;SUBTRACT OUT BASE ADDRESS

                          61     17  01D6   389 20$:	JMP	(R1)			;START I/O OPERATION

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  11

01              RELEASE BUFFERED DATAPATH                                                                                        (1)



                                     01D8   391 	.SBTTL	RELEASE BUFFERED DATAPATH

                                     01D8   392 ;+

                                     01D8   393 ; IOC$RELDATAP - RELEASE BUFFERED DATAPATH

                                     01D8   394 ;

                                     01D8   395 ; THIS ROUTINE IS CALLED AT THE END OF AN I/O OPERATION TO RELEASE A UNIBUS

                                     01D8   396 ; ADAPTER BUFFERED DATAPATH.

                                     01D8   397 ;

                                     01D8   398 ; INPUTS:

                                     01D8   399 ;

                                     01D8   400 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     01D8   401 ;

                                     01D8   402 ; OUTPUTS:

                                     01D8   403 ;

                                     01D8   404 ;	IF THE BUFFERED DATAPATH IS PERMANENTLY ASSIGNED TO THE ASSOCIATED

                                     01D8   405 ;	I/O CHANNEL, THEN CONTROL IS IMMEDIATELY RETURNED TO THE CALLER.

                                     01D8   406 ;	ELSE THE BUFFERED DATAPATH IS RELEASED AND AN ATTEMPT IS MADE TO

                                     01D8   407 ;	REMOVE THE NEXT WAITING DRIVER PROCESS FROM THE DATAPATH WAIT QUEUE.

                                     01D8   408 ;	IF A DRIVER PROCESS IS WAITING, THEN THE BUFFERED DATAPATH IS

                                     01D8   409 ;	ASSIGNED TO THE ASSOCIATED I/O CHANNEL AND THE DRIVER IS CALLED

                                     01D8   410 ;	VIA A JSB TO ITS BUFFERED DATAPATH WAIT RETURN ADDRESS.

                                     01D8   411 ;-

                                     01D8   412  

                                     01D8   413 IOC$RELDATAP::				;RELEASE BUFFERED DATAPATH

            50         20 A5     D0  01D8   414 	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF CRB

            51         28 A0     D0  01DC   415 	MOVL	CRB$L_INTD+VEC$L_ADP(R0),R1 ;GET ADDRESS OF ADP

            52         27 A0     98  01E0   416 	CVTBL	CRB$L_INTD+VEC$B_DATAPATH(R0),R2 ;GET DATAPATH NUMBER

                          1C     19  01E4   417 	BLSS	10$			;IF LSS PERMANENT ASSIGNMENT

            50         14 B1     0F  01E6   418 	REMQUE	@ADP$L_DPQFL(R1),R0	;GET ADDRESS OF NEXT DRIVER FORK BLOCK

                          17     1D  01EA   419 	BVS	20$			;IF VS NO DRIVER PROCESS WAITING

                          38     BB  01EC   420 	PUSHR	#^M<R3,R4,R5>		;SAVE CONTEXT OF CURRENT DRIVER PROCESS

            55            50     D0  01EE   421 	MOVL	R0,R5			;COPY ADDRESS OF DRIVER PROCESS FORK BLOCK

            51         20 A5     D0  01F1   422 	MOVL	UCB$L_CRB(R5),R1	;GET ADDRESS OF CRB

         27 A1            52     90  01F5   423 	MOVB	R2,CRB$L_INTD+VEC$B_DATAPATH(R1) ;SET DATAPATH NUMBER

            53         10 A5     7D  01F9   424 	MOVQ	UCB$L_FR3(R5),R3	;RESTORE DRIVER PROCESS CONTEXT

                       0C B5     16  01FD   425 	JSB	@UCB$L_FPC(R5)		;CALL DRIVER AT DATAPATH WAIT RETURN ADDRESS

                          38     BA  0200   426 	POPR	#^M<R3,R4,R5>		;RESTORE PREVIOUS DRIVER PROCESS CONTEXT

                                 05  0202   427 10$:	RSB				;

         24 A1            52     E3  0203   428 20$:	BBCS	R2,ADP$W_DPBITMAP(R1),10$ ;SET DATAPATH BIT AND EXIT

                          FA         0207       

                                     0208   429 	BUG_CHECK INCONSTATE		;INCONSISTENT STATE

                                 05  020C   430 	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  12

01              REQUEST BUFFERED DATAPATH                                                                                        (1)



                                     020D   432 	.SBTTL	REQUEST BUFFERED DATAPATH

                                     020D   433 ;+

                                     020D   434 ; IOC$REQDATAP - REQUEST BUFFERED DATAPATH (WAIT)

                                     020D   435 ; IOC$REQDATAPNW - REQUEST BUFFERED DATAPATH (NO WAIT)

                                     020D   436 ;

                                     020D   437 ; THIS ROUTINE IS CALLED TO REQUEST A UNIBUS ADAPTER BUFFERED DATAPATH TO

                                     020D   438 ; PERFORM AN I/O OPERATION ON.

                                     020D   439 ;

                                     020D   440 ; INPUTS:

                                     020D   441 ;

                                     020D   442 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     020D   443 ;	04(SP) = RETURN ADDRESS OF CALLER'S CALLER.

                                     020D   444 ;

                                     020D   445 ;	IT IS ASSUMED THAT THE CALLER OWNS THE I/O CHANNEL ON WHICH THE

                                     020D   446 ;	TRANSFER IS TO OCCUR.

                                     020D   447 ;

                                     020D   448 ; OUTPUTS:

                                     020D   449 ;

                                     020D   450 ;	IF A BUFFERED DATAPATH HAS BEEN PERMANENTLY ASSIGNED TO THE ASSOCIATED

                                     020D   451 ;	I/O CHANNEL, THEN CONTROL IS IMMEDIATELY RETURNED TO THE CALLER.

                                     020D   452 ;	ELSE AN ATTEMPT IS MADE TO FIND A FREE BUFFERED DATAPATH. IF A FREE

                                     020D   453 ;	BUFFERED DATAPATH IS FOUND, THEN ITS NUMBER IS STORED IN THE ASSO-

                                     020D   454 ;	CIATED CHANNEL REQUEST BLOCK AND CONTROL IS RETURNED TO THE CALLER.

                                     020D   455 ;	ELSE IF NO WAIT IS SPECIFIED, THEN A FAILURE INDICATION IS RETURNED

                                     020D   456 ;	TO THE CALLER. ELSE THE DRIVER PROCESS CONTEXT IS SAVED IN ITS FORK

                                     020D   457 ;	BLOCK, THE FORK BLOCK IS INSERTED IN THE BUFFERED DATAPATH WAIT QUEUE,

                                     020D   458 ;	AND A RETURN TO THE DRIVER PROCESS' CALLER IS EXECUTED.

                                     020D   459 ;-

                                     020D   460  

                                     020D   461 	.ENABL	LSB

                                     020D   462 IOC$REQDATAPNW::			;REQUEST BUFFERED DATAPATH NO WAIT

                          00     DD  020D   463 	PUSHL	#0			;SET NO WAIT INDICATOR

                          02     11  020F   464 	BRB	5$			;

                                     0211   465 IOC$REQDATAP::				;REQUEST BUFFERED DATAPATH WAIT

                          01     DD  0211   466 	PUSHL	#1			;SET WAIT INDICATOR

            50         20 A5     D0  0213   467 5$:	MOVL	UCB$L_CRB(R5),R0	;GET ADDRESS OF CRB

         27 A0            07     E0  0217   468 	BBS	#VEC$V_PATHLOCK,CRB$L_INTD+VEC$B_DATAPATH(R0),20$ ;IF SET, PERMANENT

                          26         021B       

            51         28 A0     D0  021C   469 	MOVL	CRB$L_INTD+VEC$L_ADP(R0),R1 ;GET ADDRESS OF ADP

            10            00     EA  0220   470 	FFS	#0,#ADP$C_NUMDATAP,ADP$W_DPBITMAP(R1),R2 ;SEARCH FOR FREE DATAPATH

            52         24 A1         0223       

                          09     13  0226   471 	BEQL	10$			;IF EQL NONE FOUND

         27 A0            52     90  0228   472 	MOVB	R2,CRB$L_INTD+VEC$B_DATAPATH(R0) ;STORE ASSIGNED DATAPATH NUMBER

         24 A1            52     E4  022C   473 	BBSC	R2,ADP$W_DPBITMAP(R1),20$ ;CLEAR DATAPATH BIT AND EXIT

                          11         0230       

            13            8E     E9  0231   474 10$:	BLBC	(SP)+,30$		;IF LBC NO WAIT SPECIFIED

         10 A5            53     7D  0234   475 	MOVQ	R3,UCB$L_FR3(R5)	;SAVE DRIVER PROCESS CONTEXT

                       0C A5   8ED0  0238   476 	POPL	UCB$L_FPC(R5)		;SAVE DATAPATH WAIT RETURN ADDRESS

         18 B1            65     0E  023C   477 	INSQUE	UCB$L_FQFL(R5),@ADP$L_DPQBL(R1) ;INSERT DRIVER PROCESS IN DATAPATH WAIT QUEU

                          7E     D5  0240   478 	TSTL	-(SP)			;PUSH DUMMY INDICATOR ON STACK

            50            00'    9A  0242   479 20$:	MOVZBL	S^#SS$_NORMAL,R0	;SET SUCCESS INDICATOR

                          8E     D5  0245   480 	TSTL	(SP)+			;REMOVE WAIT INDICATOR FROM STACK

                                 05  0247   481 30$:	RSB				;

                                     0248   482 	.DSABL	LSB

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  13

01              RELEASE UNIBUS MAP REGISTERS                                                                                     (1)



                                     0248   484 	.SBTTL	RELEASE UNIBUS MAP REGISTERS

                                     0248   485 ;+

                                     0248   486 ; IOC$RELMAPREG - RELEASE UNIBUS MAP REGISTERS

                                     0248   487 ;

                                     0248   488 ; THIS ROUTINE IS CALLED TO RELEASE UNIBUS MAP REGISTERS THAT WERE PREVIOUSLY

                                     0248   489 ; ASSIGNED FOR AN I/O TRANSFER.

                                     0248   490 ;

                                     0248   491 ; INPUTS:

                                     0248   492 ;

                                     0248   493 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     0248   494 ;

                                     0248   495 ;	IT IS ASSUMED THAT THE CALLER STILL OWNS THE I/O CHANNEL ON WHICH

                                     0248   496 ;	THE TRANSFER TOOK PLACE.

                                     0248   497 ;

                                     0248   498 ; OUTPUTS:

                                     0248   499 ;

                                     0248   500 ;	IF THE MAPPING REGISTERS HAVE BEEN PERMANENTLY ASSIGNED TO THE ASSO-

                                     0248   501 ;	CIATED I/O CHANNEL, THEN CONTROL IS IMMEDIATELY RETURNED TO THE CALLER.

                                     0248   502 ;	ELSE THE MAPPING REGISTERS ARE RELEASED AND AN ATTEMPT IS MADE TO

                                     0248   503 ;	REMOVE THE NEXT DRIVER PROCESS FROM THE MAP REGISTER WAIT QUEUE. IF

                                     0248   504 ;	A DRIVER PROCESS IS WAITING, THEN IT IS REMOVED FROM THE MAP REGISTER

                                     0248   505 ;	WAIT QUEUE AND AN ATTEMPT IS MADE TO ASSIGN THE REQUESTED NUMBER OF

                                     0248   506 ;	CONTIGUOUS MAP REGISTERS TO THE TRANSFER. IF THE ALLOCATION IS SUCCESS-

                                     0248   507 ;	FUL, THEN THE DRIVER IS CALLED VIA A JSB TO ITS MAP REGISTER WAIT

                                     0248   508 ;	RETURN ADDRESS. WHEN THE DRIVER RETURNS ANOTHER ATTEMPT WILL BE MADE

                                     0248   509 ;	TO ALLOCATE MAP REGISTERS TO THE NEXT DRIVER PROCESS IN THE MAP REGISTER

                                     0248   510 ;	WAIT QUEUE. THE PROCESS OF ATTEMPTING TO ALLOCATE REGISTERS TO WAIT-

                                     0248   511 ;	ING DRIVER PROCESSES IS CONTINUED UNTIL EITHER THERE ARE NO DRIVER

                                     0248   512 ;	PROCESSES WAITING OR AN ALLOCATION FAILURE OCCURS. IN THE CASE OF

                                     0248   513 ;	AN ALLOCATION FAILURE THE DRIVER PROCESS IS REINSERTED AT THE FRONT

                                     0248   514 ;	OF THE MAP REGISTER WAIT QUEUE.

                                     0248   515 ;-

                                     0248   516  

                                     0248   517 IOC$RELMAPREG::				;RELEASE UNIBUS MAP REGISTERS

            51         20 A5     D0  0248   518 	MOVL	UCB$L_CRB(R5),R1	;GET ADDRESS OF CRB

         24 A1            0F     E0  024C   519 	BBS	#VEC$V_MAPLOCK,CRB$L_INTD+VEC$W_MAPREG(R1),40$ ;IF SET, PERMANENT

                          30         0250       

                     0078 8F     BB  0251   520 	PUSHR	#^M<R3,R4,R5,R6>	;SAVE REGISTERS

            52         28 A1     D0  0255   521 	MOVL	CRB$L_INTD+VEC$L_ADP(R1),R2 ;GET ADDRESS OF ADP

            56            52     D0  0259   522 	MOVL	R2,R6			;SAVE ADDRESS OF ADP

            54         24 A1     3C  025C   523 	MOVZWL	CRB$L_INTD+VEC$W_MAPREG(R1),R4 ;GET STARTING MAP REGISTER NUMBER

            50            00     D2  0260   524 	MCOML	#0,R0			;SET ALTER PATTERN

                          2F     10  0263   525 	BSBB	IOC$ALTUBAMAP		;ALTER MAP REGISTER BITMAP

            55         1C B6     0F  0265   526 10$:	REMQUE	@ADP$L_MRQFL(R6),R5	;GET ADDRESS OF NEXT DRIVER FORK BLOCK

                          12     1D  0269   527 	BVS	30$			;IF VS NO DRIVER PROCESS WAITING

                          49     10  026B   528 	BSBB	IOC$ALOUBAMAP		;SEARCH MAP REGISTER BITMAP AND ALLOCATE

            09            50     E9  026D   529 	BLBC	R0,20$			;IF LBC ALLOCATION FAILURE

            53         10 A5     7D  0270   530 	MOVQ	UCB$L_FR3(R5),R3	;RESTORE DRIVE PROCESS CONTEXT

                       0C B5     16  0274   531 	JSB	@UCB$L_FPC(R5)		;CALL DRIVER AT MAP REGISTER WAIT RETURN ADDRESS

                          EC     11  0277   532 	BRB	10$			;

         1C A6            65     0E  0279   533 20$:	INSQUE	UCB$L_FQFL(R5),ADP$L_MRQFL(R6) ;REINSERT DRIVER PROCESS AT FRONT OF QUEU

                     0078 8F     BA  027D   534 30$:	POPR	#^M<R3,R4,R5,R6>	;RESTORE REGISTERS

                                 05  0281   535 40$:	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  14

01              REQUEST UNIBUS MAP REGISTERS                                                                                     (1)



                                     0282   537 	.SBTTL	REQUEST UNIBUS MAP REGISTERS

                                     0282   538 ;+

                                     0282   539 ; IOC$REQMAPREG - REQUEST UNIBUS MAP REGISTERS

                                     0282   540 ;

                                     0282   541 ; THIS ROUTINE IS CALLED TO REQUEST UNIBUS MAP REGISTERS TO PERFORM AN

                                     0282   542 ; I/O TRANSFER.

                                     0282   543 ;

                                     0282   544 ; INPUTS:

                                     0282   545 ;

                                     0282   546 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     0282   547 ;	04(SP) = RETURN ADDRESS OF CALLER'S CALLER.

                                     0282   548 ;

                                     0282   549 ;	IT IS ASSUMED THAT THE CALLER OWNS THE I/O CHANNEL ON WHICH THE

                                     0282   550 ;	TRANSFER IS TO OCCUR ON.

                                     0282   551 ;

                                     0282   552 ; OUTPUTS:

                                     0282   553 ;

                                     0282   554 ;	IF MAP REGISTERS HAVE BEEN PERMANENTLY ASSIGNED TO THE ASSOCIATED

                                     0282   555 ;	I/O CHANNEL, THEN CONTROL IS IMMEDIATELY RETURNED TO THE CALLER.

                                     0282   556 ;	ELSE AN ATTEMPT IS MADE TO ALLOCATE THE REQUESTED NUMBER OF MAP REG-

                                     0282   557 ;	ISTERS. IF SUFFICIENT CONTIGUOUS MAP REGISTERS ARE FOUND, THEN THEY

                                     0282   558 ;	ARE ASSIGNED TO THE ASSOCIATED I/O CHANNEL AND CONTROL IS RETURNED

                                     0282   559 ;	TO THE CALLER. ELSE THE DRIVER PROCESS CONTEXT IS SAVED IN ITS FORK

                                     0282   560 ;	BLOCK, THE FORK BLOCK IS INSERTED IN THE MAP REGISTER WAIT QUEUE,

                                     0282   561 ;	AND A RETURN TO THE DRIVER PROCESS' CALLER IS EXECUTED.

                                     0282   562 ;-

                                     0282   563  

                                     0282   564 IOC$REQMAPREG::				;REQUEST UNIBUS MAP REGISTERS

                          32     10  0282   565 	BSBB	IOC$ALOUBAMAP		; ALLOCATE UBA MAP REGISTER

            0C            50     E8  0284   566 	BLBS	R0,10$			;IF LBS SUCCESSFUL ALLOCATION

         10 A5            53     7D  0287   567 	MOVQ	R3,UCB$L_FR3(R5)	;SAVE DRIVER PROCESS CONTEXT

                       0C A5   8ED0  028B   568 	POPL	UCB$L_FPC(R5)		;SAVE MAP REGISTER WAIT RETURN ADDRESS

         20 B2            65     0E  028F   569 	INSQUE	UCB$L_FQFL(R5),@ADP$L_MRQBL(R2) ;INSERT PROCESS IN MAP REGISTER WAIT QUEUE

                                 05  0293   570 10$:	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  15

01              ALTER UBA MAP REGISTER BITMAP                                                                                    (1)



                                     0294   572 	.SBTTL	ALTER UBA MAP REGISTER BITMAP

                                     0294   573 ;+

                                     0294   574 ; IOC$ALTUBAMAP - ALTER UBA MAP REGISTER BIT MAP

                                     0294   575 ;

                                     0294   576 ; THIS ROUTINE IS CALLED TO EITHER CLEAR OF SET A FIELD OF BITS IN THE UBA MAP

                                     0294   577 ; REGISTER ALLOCATION BITMAP.

                                     0294   578 ;

                                     0294   579 ; INPUTS:

                                     0294   580 ;

                                     0294   581 ;	R0 = ALTERATION BIT MASK.

                                     0294   582 ;	R1 = ADDRESS OF CRB.

                                     0294   583 ;	R2 = ADDRESS OF ADP.

                                     0294   584 ;	R4 = STARTING MAP REGISTER NUMBER.

                                     0294   585 ;

                                     0294   586 ; OUTPUTS:

                                     0294   587 ;

                                     0294   588 ;	THE SPECIFIED BIT FIELD IN THE UBA MAP ALLOCATION BIT MAP IS EITHER SET

                                     0294   589 ;	OR CLEARED DEPENDING ON THE STATE OF THE ALTERATION MASK.

                                     0294   590 ;

                                     0294   591 ;	R3 AND R4 ARE DESTROYED.

                                     0294   592 ;-

                                     0294   593  

                                     0294   594 IOC$ALTUBAMAP::				;ALTER MAP REGISTER BIT MAP

            53         26 A1     9A  0294   595 	MOVZBL	CRB$L_INTD+VEC$B_NUMREG(R1),R3 ;GET NUMBER OF BITS TO ALTER

            53            20     D1  0298   596 10$:	CMPL	#32,R3			;MORE THAN LONGWORD LEFT?

                          0E     18  029B   597 	BGEQ	20$			;IF GEQ NO

            54            50     F0  029D   598 	INSV	R0,R4,#32,ADP$W_MRBITMAP(R2) ;ALTER BITMAP WITH SUPPLIED PATTERN

         26 A2            20         02A0       

            54            20     C0  02A3   599 	ADDL	#32,R4			;UPDATE STARTING BIT POSITION

            53            20     C2  02A6   600 	SUBL	#32,R3			;REDUCE NUMBER OF BITS TO ALTER

                          ED     11  02A9   601 	BRB	10$			;

            54            50     F0  02AB   602 20$:	INSV	R0,R4,R3,ADP$W_MRBITMAP(R2) ;ALTER BITMAP WITH SUPPLIED PATTERN

         26 A2            53         02AE       

                                 05  02B1   603 	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  16

01              SEARCH MAP REGISTER BITMAP AND ALLOCATE MAP REG                                                                  (1)



                                     02B2   605 	.SBTTL	SEARCH MAP REGISTER BITMAP AND ALLOCATE MAP REGISTERS

                                     02B2   606 ;+

                                     02B2   607 ; IOC$ALOUBAMAP - ALLOCATE UBA MAP REGISTERS (CRB DATABASE SPECIFIED)

                                     02B2   608 ; IOC$ALOUBAMAPN - ALLOCATE UBA MAP REGISTERS (ARGUMENT SPECIFIED)

                                     02B2   609 ;

                                     02B2   610 ; THIS ROUTINE IS CALLED TO ALLOCATE UBA MAP REGISTERS AND TO MARK THE ALLOCATION

                                     02B2   611 ; IN THE UBA MAP REGISTER ALLOCATION BITMAP.

                                     02B2   612 ;

                                     02B2   613 ; INPUTS:

                                     02B2   614 ;

                                     02B2   615 ;	R3 = NUMBER OF MAP REGISTERS TO ALLOCATE (ARGUMENT SPECIFIED ENTRY).

                                     02B2   616 ;	R5 = DEVICE UNIT UCB ADDRESS.

                                     02B2   617 ;

                                     02B2   618 ; OUTPUTS:

                                     02B2   619 ;

                                     02B2   620 ;	R0 = SUCCESS INDICATION.

                                     02B2   621 ;-

                                     02B2   622  

                                     02B2   623 	.ENABL	LSB

                                     02B2   624 IOC$ALOUBAMAPN::			;ALLOCATE UBA MAP REGISTERS ARGUMENT SPECIFIED

                          38     BB  02B2   625 	PUSHR	#^M<R3,R4,R5>		;SAVE REGISTERS

                          15     11  02B4   626 	BRB	5$			;

                                     02B6   627 IOC$ALOUBAMAP::				;ALLOCATE UBA MAP REGISTERS CRB SPECIFIED

                          38     BB  02B6   628 	PUSHR	#^M<R3,R4,R5>		;SAVE REGISTERS

            53         6E A5     3C  02B8   629 	MOVZWL	UCB$W_BCNT(R5),R3	;GET TRANSFER BYTE COUNT

            54         6C A5     3C  02BC   630 	MOVZWL	UCB$W_BOFF(R5),R4	;GET BYTE OFFSET IN PAGE

            53       03FF C344   9E  02C0   631 	MOVAB	^X3FF(R3)[R4],R3	;CALCULATE HIGHEST RELATIVE BYTE AND ROUND

            53         F7 8F     78  02C6   632 	ASHL	#-9,R3,R3		;CALCULATE NUMBER OF MAP REGISTERS REQUIRED

                          53         02CA       

                          50     D4  02CB   633 5$:	CLRL	R0			;ASSUME ALLOCATION FAILURE

            51         20 A5     D0  02CD   634 	MOVL	UCB$L_CRB(R5),R1	;GET ADDRESS OF CRB

            52         28 A1     D0  02D1   635 	MOVL	CRB$L_INTD+VEC$L_ADP(R1),R2 ;GET ADDRESS OF ADP

         24 A1            0F     E0  02D5   636 	BBS	#VEC$V_MAPLOCK,CRB$L_INTD+VEC$W_MAPREG(R1),40$ ;IF SET, PERMANENT

                          39         02D9       

         26 A1            53     90  02DA   637 	MOVB	R3,CRB$L_INTD+VEC$B_NUMREG(R1) ;SET NUMBER OF MAP REGISTERS ALLOCATED

                          54     D4  02DE   638 	CLRL	R4			;CLEAR STARTING BIT POSITION

            54            53     C1  02E0   639 10$:	ADDL3	R3,R4,R5		;CALCULATE HIGHEST BIT IN REQUIRED SCAN

                          55         02E3       

       01F0 8F            55     B1  02E4   640 	CMPW	R5,#496			;BEYOND END OF ALLOCATION BITMAP?

                          2A     14  02E9   641 	BGTR	50$			;IF GTR YES

            20            54     EA  02EB   642 	FFS	R4,#32,ADP$W_MRBITMAP(R2),R4 ;FIND A SET BIT

            54         26 A2         02EE       

                          ED     13  02F1   643 	BEQL	10$			;IF EQL BIT NOT FOUND

            54            53     C1  02F3   644 	ADDL3	R3,R4,R5		;CALCULATE HIGH BIT FOR SUCCESSFUL ALLOCATION

                          55         02F6       

         24 A1            54     B0  02F7   645 	MOVW	R4,CRB$L_INTD+VEC$W_MAPREG(R1) ;SAVE STARTING BIT NUMBER

            20            54     EB  02FB   646 20$:	FFC	R4,#32,ADP$W_MRBITMAP(R2),R4 ;FIND A CLEAR BIT

            54         26 A2         02FE       

            55            54     D1  0301   647 	CMPL	R4,R5			;ENOUGH SET BITS SCANNED OVER?

                          07     18  0304   648 	BGEQ	30$			;IF GEQ YES

         26 A2            54     E0  0306   649 	BBS	R4,ADP$W_MRBITMAP(R2),20$ ;IF SET, CONTINUE SCAN

                          F0         030A       

                          D3     11  030B   650 	BRB	10$			;

            54         24 A1     3C  030D   651 30$:	MOVZWL	CRB$L_INTD+VEC$W_MAPREG(R1),R4 ;RETRIEVE STARTING MAP REGISTER

                          81     10  0311   652 	BSBB	IOC$ALTUBAMAP		;ALTER MAP REGISTER BITMAP

                          50     D6  0313   653 40$:	INCL	R0			;SET SUCCESS INDICATOR

                          38     BA  0315   654 50$:	POPR	#^M<R3,R4,R5>		;RESTORE REGISTERS

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  17

01              SEARCH MAP REGISTER BITMAP AND ALLOCATE MAP REG                                                                  (1)



                                 05  0317   655 	RSB				;

                                     0318   656 	.DSABL	LSB

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  18

01              RETURN TO CALLER                                                                                                 (1)



                                     0318   658 	.SBTTL	RETURN TO CALLER

                                     0318   659 ;+

                                     0318   660 ; IOC$RETURN - RETURN TO CALLER

                                     0318   661 ;

                                     0318   662 ; THIS ROUTINE IS CALLED AS A RESULT OF A DDT DISPATCH TO A NULL ENTRY. ITS

                                     0318   663 ; FUNCTION IS MERELY TO RETURN TO ITS CALLER.

                                     0318   664 ;

                                     0318   665 ; INPUTS:

                                     0318   666 ;

                                     0318   667 ;	NONE.

                                     0318   668 ;

                                     0318   669 ; OUTPUTS:

                                     0318   670 ;

                                     0318   671 ;	NONE.

                                     0318   672 ;-

                                     0318   673  

                                     0318   674 IOC$RETURN::				;RETURN TO CALLER

                                 05  0318   675 	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  19

01              WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL                                                                    (1)



                                     0319   677 	.SBTTL	WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL

                                     0319   678 ;+

                                     0319   679 ; IOC$WFIKPCH - WAITFOR INTERRUPT OR TIMEOUT AND KEEP CHANNEL

                                     0319   680 ;

                                     0319   681 ; THIS ROUTINE IS CALLED TO SOFTWARE ENABLE INTERRUPTS AND TIMEOUT ON

                                     0319   682 ; A DEVICE UNIT AND TO KEEP THE CHANNEL. THIS ROUTINE CAN BE CALLED AT 

                                     0319   683 ; EITHER FORK OR DEVICE INTERRUPT LEVEL.

                                     0319   684 ;

                                     0319   685 ; INPUTS:

                                     0319   686 ;

                                     0319   687 ;	00(SP) = RETURN ADDRESS OF CALLER.

                                     0319   688 ;	04(SP) = TIMEOUT VALUE IN SECONDS.

                                     0319   689 ;	08(SP) = IPL TO LOWER TO AFTER SETTING WAIT.

                                     0319   690 ;	12(SP) = RETURN ADDRESS OF CALLER'S CALLER.

                                     0319   691 ;

                                     0319   692 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     0319   693 ;

                                     0319   694 ; OUTPUTS:

                                     0319   695 ;

                                     0319   696 ;	THE TIMEOUT VALUE IS COMPUTED AND STORED IN DUE TIME, REGISTERS R3 AND

                                     0319   697 ;	R4 ALONG WITH THE RETURN PC ARE SAVED IN THE FORK BLOCK, INTERRUPTS AND

                                     0319   698 ;	TIMEOUT ARE ENABLED, AND A RETURN TO THE CALLER'S CALLER IS EXECUTED.

                                     0319   699 ;-

                                     0319   700  

                                     0319   701 IOC$WFIKPCH::				;WAITFOR INTERRUPT/TIMEOUT AND KEEP CHANNEL

            6E            02     C0  0319   702 	ADDL	#2,(SP)			;CALCULATE OFFSET TO NORMAL RETURN

         10 A5            53     7D  031C   703 	MOVQ	R3,UCB$L_FR3(R5)	;SAVE REGISTERS R3 AND R4

                       0C A5   8ED0  0320   704 	POPL	UCB$L_FPC(R5)		;SAVE INTERRUPT RETURN ADDRESS

         58 A5            03     A8  0324   705 	BISW	#UCB$M_INT!UCB$M_TIM,UCB$W_STS(R5) ;ENABLE INTERRUPT AND TIMEOUT

       0000'CF            8E     C1  0328   706 	ADDL3	(SP)+,W^EXE$GL_ABSTIM,UCB$L_DUETIM(R5) ;SET TIMEOUT TIME

                       5C A5         032D       

         58 A5       0040 8F     AA  032F   707 	BICW	#UCB$M_TIMOUT,UCB$W_STS(R5) ;CLEAR UNIT TIMED OUT

                                     0335   708 	ENBINT				;ENABLE INTERRUPTS

                                 05  0338   709 	RSB				;

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  20

01              WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNE                                                                  (1)



                                     0339   711 	.SBTTL	WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNEL

                                     0339   712 ;+

                                     0339   713 ; IOC$WFIRLCH - WAITFOR INTERRUPT OR TIMEOUT AND RELEASE CHANNEL

                                     0339   714 ;

                                     0339   715 ; THIS ROUTINE IS CALLED TO SOFTWARE ENABLE INTERRUPTS AND TIMEOUT ON A DEVICE

                                     0339   716 ; UNIT AND TO RELEASE THE CHANNEL. THIS ROUTINE CAN ONLY BE CALLED AT FORK LEVEL.

                                     0339   717 ;

                                     0339   718 ; INPUTS:

                                     0339   719 ;

                                     0339   720 ;	00(SP) = RETURN ADDRESS OF CALLER.

                                     0339   721 ;	04(SP) = TIMEOUT VALUE IN SECONDS.

                                     0339   722 ;	08(SP) = IPL TO LOWER TO AFTER SETTING WAIT.

                                     0339   723 ;	12(SP) = RETURN ADDRESS OF CALLER'S CALLER.

                                     0339   724 ;

                                     0339   725 ;	R5 = UCB ADDRESS OF DEVICE UNIT.

                                     0339   726 ;

                                     0339   727 ; OUTPUTS:

                                     0339   728 ;

                                     0339   729 ;	THE TIMEOUT VALUE IS COMPUTED AND STORED IN DUE TIME, REGISTERS R3 AND

                                     0339   730 ;	R4 ALONG WITH THE RETURN PC ARE SAVED IN THE FORK BLOCK, INTERRUPTS AND

                                     0339   731 ;	TIMEOUT ARE ENABLED, THE CHANNEL IS RELEASED, AND A RETURN TO THE CALLER'S

                                     0339   732 ;	CALLER IS EXECUTED.

                                     0339   733 ;-

                                     0339   734  

                                     0339   735 IOC$WFIRLCH::				;WAITFOR INTERRUPT/TIMEOUT AND RELEASE CHANNEL

            6E            02     C0  0339   736 	ADDL	#2,(SP)			;CALCULATE OFFSET TO NORMAL RETURN

         10 A5            53     7D  033C   737 	MOVQ	R3,UCB$L_FR3(R5)	;SAVE REGISTERS R3 AND R4

                       0C A5   8ED0  0340   738 	POPL	UCB$L_FPC(R5)		;SAVE INTERRUPT RETURN ADDRESS

         58 A5            03     A8  0344   739 	BISW	#UCB$M_INT!UCB$M_TIM,UCB$W_STS(R5) ;ENABLE INTERRUPT AND TIMEOUT

       0000'CF            8E     C1  0348   740 	ADDL3	(SP)+,W^EXE$GL_ABSTIM,UCB$L_DUETIM(R5) ;SET TIMEOUT TIME

                       5C A5         034D       

         58 A5       0040 8F     AA  034F   741 	BICW	#UCB$M_TIMOUT,UCB$W_STS(R5) ;CLEAR UNIT TIMED OUT

                                     0355   742 	ENBINT				;ENABLE INTERRUPTS

                          FD7C   31  0358   743 	BRW	IOC$RELCHAN		;RELEASE ALL CHANNELS AND RETURN TO CALLER

                                     035B   744  

                                     035B   745 	.END

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  21

SYMBOL TABLE                                                                                                                     (1)



ADP$B_NUMBER     0000000B            DDT$L_START      00000000            EMB$K_VD       = 00000041            

ADP$B_TYPE       0000000A            DDT$L_UNSOLINT   00000004            EMB$K_VM       = 00000040            

ADP$C_MBAADPLEN  00000014            DDT$W_DIAGBUF    00000014            EMB$K_WS       = 00000024            

ADP$C_NUMDATAP = 00000010            DDT$W_ERRORBUF   00000016            EMB$L_DV_CHAR    00000036            

ADP$C_UBAADPLEN  00000070            DEV$V_MBX        ********   X   03   EMB$L_DV_MEDIA   00000026            

ADP$K_MBAADPLEN  00000014            EMB$B_BUFIND     00000002            EMB$L_DV_OPCNT   0000002E            

ADP$K_UBAADPLEN  00000070            EMB$B_DEVCLS     00000005            EMB$L_DV_OWNUIC  00000032            

ADP$L_CRB        00000010            EMB$B_DEVTYP     00000004            EMB$L_DV_REGSAV  0000004E            

ADP$L_CSR        00000000            EMB$B_DV_CLASS   0000001C            EMB$L_DV_RQPID   0000001E            

ADP$L_DPQBL      00000018            EMB$B_DV_ERTCNT  00000010            EMB$Q_DV_IOSB    00000012            

ADP$L_DPQFL      00000014            EMB$B_DV_ERTMAX  00000011            EMB$Q_DV_TIME    00000006            

ADP$L_INTD       00000064            EMB$B_DV_SLAVE   0000003A            EMB$Q_HD_TIME    00000006            

ADP$L_LINK       00000004            EMB$B_DV_TYPE    0000001D            EMB$Q_TS_TIME    00000006            

ADP$L_MRQBL      00000020            EMB$B_VALID      00000003            EMB$T_DV_NAME    0000003E            

ADP$L_MRQFL      0000001C            EMB$C_AW       = 00000007            EMB$W_DV_BCNT    00000024            

ADP$L_VECTOR     00000010            EMB$C_BE       = 00000004            EMB$W_DV_BOFF    00000022            

ADP$W_ADPTYPE    0000000E            EMB$C_CR       = 00000025            EMB$W_DV_DEVSTS  0000001A            

ADP$W_DPBITMAP   00000024            EMB$C_CS       = 00000020            EMB$W_DV_ENTRY   00000004            

ADP$W_MRBITMAP   00000026            EMB$C_DE       = 00000001            EMB$W_DV_ERRCNT  0000002C            

ADP$W_SIZE       00000008            EMB$C_DT       = 00000060            EMB$W_DV_ERRSEQ  0000000E            

ADP$W_TR         0000000C            EMB$C_HE       = 00000008            EMB$W_DV_FUNC    0000003C            

BIT...         = 00000008            EMB$C_LENGTH     00000004            EMB$W_DV_UNIT    0000002A            

BUG$_INCONSTATE  ********   X   03   EMB$C_MC       = 00000002            EMB$W_HD_ENTRY   00000004            

CA$_MEASURE    = 00000002            EMB$C_NF       = 00000023            EMB$W_HD_ERRSEQ  0000000E            

CA$_MEASURE_IOT= 00000004            EMB$C_NM       = 0000002A            EMB$W_SIZE       00000000            

CA$_SIMULATOR  = 00000001            EMB$C_OM       = 00000029            EMB$W_TS_ENTRY   00000004            

CRB$B_MASK       0000000E            EMB$C_SA       = 00000005            EMB$W_TS_ERRSEQ  0000000E            

CRB$B_TT_ATTN    00000004            EMB$C_SBC      = 00000028            ERL$RELEASEMB    ********   X   03   

CRB$B_TT_EXPEC   00000005            EMB$C_SE       = 00000006            EXE$DEANONPAGED  ********   X   03   

CRB$B_TYPE       0000000A            EMB$C_SS       = 00000027            EXE$DEAPAGED     ********   X   03   

CRB$C_LENGTH     00000038            EMB$C_TS       = 00000026            EXE$GL_ABSTIM    ********   X   03   

CRB$K_LENGTH     00000038            EMB$C_TS_LENGTH  00000010            EXE$GQ_SYSTIME   ********   X   03   

CRB$L_INTD       00000014            EMB$C_UBC      = 00000070            GBL...         = 00000000            

CRB$L_INTD2      00000038            EMB$C_UI       = 00000061            IDB$B_TYPE       0000000A            

CRB$L_LINK       00000010            EMB$C_VD       = 00000041            IDB$B_UNITS      0000000B            

CRB$L_TT_DIAL    00000000            EMB$C_VM       = 00000040            IDB$C_LENGTH     00000030            

CRB$L_WQBL       00000004            EMB$C_WS       = 00000024            IDB$K_LENGTH     00000030            

CRB$L_WQFL       00000000            EMB$K_AW       = 00000007            IDB$L_ADP        0000000C            

CRB$M_BSY      = 00000001            EMB$K_BE       = 00000004            IDB$L_CSR        00000000            

CRB$V_BSY      = 00000000            EMB$K_CR       = 00000025            IDB$L_OWNER      00000004            

CRB$W_REFC       0000000C            EMB$K_CS       = 00000020            IDB$L_UCBLST     00000010            

CRB$W_SIZE       00000008            EMB$K_DE       = 00000001            IDB$W_SIZE       00000008            

DDB$B_ACPCLASS   00000013            EMB$K_DT       = 00000060            IOC$ALOUBAMAP    000002B6 RG    03   

DDB$B_TYPE       0000000A            EMB$K_HE       = 00000008            IOC$ALOUBAMAPN   000002B2 RG    03   

DDB$C_LENGTH     00000034            EMB$K_LENGTH     00000004            IOC$ALTUBAMAP    00000294 RG    03   

DDB$K_LENGTH     00000034            EMB$K_MC       = 00000002            IOC$CANCELIO     00000000 RG    03   

DDB$L_ACPD       00000010            EMB$K_NF       = 00000023            IOC$DELMBX       00000017 RG    03   

DDB$L_DDT        0000000C            EMB$K_NM       = 0000002A            IOC$DIAGBUFILL   0000009D RG    03   

DDB$L_LINK       00000000            EMB$K_OM       = 00000029            IOC$GL_PSBL      ********   X   03   

DDB$L_UCB        00000004            EMB$K_SA       = 00000005            IOC$INITIATE     000001A3 RG    03   

DDB$T_DRVNAME    00000024            EMB$K_SBC      = 00000028            IOC$RELCHAN      000000D7 RG    03   

DDB$T_NAME       00000014            EMB$K_SE       = 00000006            IOC$RELDATAP     000001D8 RG    03   

DDB$W_SIZE       00000008            EMB$K_SS       = 00000027            IOC$RELMAPREG    00000248 RG    03   

DDT$L_CANCEL     0000000C            EMB$K_TS       = 00000026            IOC$RELSCHAN     000000CD RG    03   

DDT$L_FDT        00000008            EMB$K_TS_LENGTH  00000010            IOC$REQCOM       00000162 RG    03   

DDT$L_INIT       00000018            EMB$K_UBC      = 00000070            IOC$REQDATAP     00000211 RG    03   

DDT$L_REGDUMP    00000010            EMB$K_UI       = 00000061            IOC$REQDATAPNW   0000020D RG    03   

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  22

SYMBOL TABLE                                                                                                                     (1)



IOC$REQMAPREG    00000282 RG    03   IRP$V_COMPLX   = 00000003            PCB$L_PQB        0000004C            

IOC$REQPCHANH    0000012E RG    03   IRP$V_DIAGBUF  = 00000007            PCB$L_SQBL       00000004            

IOC$REQPCHANL    00000137 RG    03   IRP$V_FCODE    = 00000000            PCB$L_SQFL       00000000            

IOC$REQSCHANH    0000011A RG    03   IRP$V_FMOD     = 00000006            PCB$L_STS        00000028            

IOC$REQSCHANL    00000124 RG    03   IRP$V_FUNC     = 00000001            PCB$L_UIC        00000020            

IOC$RETURN       00000318 RG    03   IRP$V_MBXIO    = 0000000A            PCB$L_WSSWP      00000024            

IOC$WFIKPCH      00000319 RG    03   IRP$V_MODE     = 00000000            PCB$L_WTIME      0000002C            

IOC$WFIRLCH      00000339 RG    03   IRP$V_PAGIO    = 00000002            PCB$T_LNAME      0000006C            

IPL$_ASTDEL    = 00000002            IRP$V_PHYSIO   = 00000008            PCB$V_ASTPEN   = 00000011            

IPL$_HWCLK     = 00000018            IRP$V_PRIVIO   = 00000009            PCB$V_BATCH    = 0000000E            

IPL$_IOPOST    = 00000004            IRP$V_SWAPIO   = 00000006            PCB$V_DELPEN   = 00000001            

IPL$_MAILBOX   = 0000000B            IRP$V_VIRTUAL  = 00000004            PCB$V_FORCPEN  = 00000002            

IPL$_POWER     = 0000001F            IRP$W_ABCNT      0000003C            PCB$V_HIBER    = 00000013            

IPL$_QUEUEAST  = 00000006            IRP$W_BCNT       00000032            PCB$V_INQUAN   = 00000003            

IPL$_SCHED     = 00000003            IRP$W_BOFF       00000030            PCB$V_LOGIN    = 00000014            

IPL$_SYNCH     = 00000007            IRP$W_CHAN       00000028            PCB$V_NETWRK   = 00000015            

IPL$_TIMER     = 00000007            IRP$W_FUNC       00000020            PCB$V_NOACNT   = 0000000F            

IRP$B_CARCON     00000038            IRP$W_OBCNT      0000003E            PCB$V_NODELET  = 00000017            

IRP$B_EFN        00000022            IRP$W_SIZE       00000008            PCB$V_PHDRES   = 00000012            

IRP$B_PRI        00000023            IRP$W_STS        0000002A            PCB$V_PSWAPM   = 00000004            

IRP$B_RMOD       0000000B            IRP$W_TT_PRMPT   0000003C            PCB$V_PWRAST   = 00000016            

IRP$B_TYPE       0000000A            LOG$B_AMOD       0000000E            PCB$V_RES      = 00000000            

IRP$C_LENGTH     0000004C            LOG$B_TABLE      0000000B            PCB$V_RESPEN   = 00000005            

IRP$K_LENGTH     0000004C            LOG$B_TYPE       0000000A            PCB$V_SSFEXC   = 00000006            

IRP$L_AST        00000010            LOG$C_GROUP    = 00000001            PCB$V_SSFEXCE  = 00000007            

IRP$L_ASTPRM     00000014            LOG$C_LENGTH     00000014            PCB$V_SSFEXCS  = 00000008            

IRP$L_DIAGBUF    00000044            LOG$C_NAMLENGTH= 00000040            PCB$V_SSFEXCU  = 00000009            

IRP$L_IOQBL      00000004            LOG$C_PROCESS  = 00000002            PCB$V_SSRWAIT  = 0000000A            

IRP$L_IOQFL      00000000            LOG$C_SYSTEM   = 00000000            PCB$V_SUSPEN   = 0000000B            

IRP$L_IOSB       00000024            LOG$K_LENGTH     00000014            PCB$V_SWPVBN   = 00000010            

IRP$L_IOST1      00000034            LOG$LOCKW        ********   X   03   PCB$V_WAKEPEN  = 0000000C            

IRP$L_IOST2      00000038            LOG$L_LTBL       00000004            PCB$V_WALL     = 0000000D            

IRP$L_MEDIA      00000034            LOG$L_LTFL       00000000            PCB$W_APTCNT     00000034            

IRP$L_PID        0000000C            LOG$L_MBXUCB     00000010            PCB$W_ASTCNT     0000003C            

IRP$L_SEGVBN     00000040            LOG$T_NAME       00000014            PCB$W_BIOCNT     0000003E            

IRP$L_SEQNUM     00000048            LOG$UNLOCK       ********   X   03   PCB$W_BIOLM      00000040            

IRP$L_SVAPTE     0000002C            LOG$W_GROUP      0000000C            PCB$W_BYTCNT     00000042            

IRP$L_TT_TERM    00000038            LOG$W_SIZE       00000008            PCB$W_BYTLM      00000068            

IRP$L_UCB        0000001C            PCB$B_ASTACT     0000000C            PCB$W_DIOCNT     00000044            

IRP$L_WIND       00000018            PCB$B_ASTEN      0000000D            PCB$W_DIOLM      00000046            

IRP$M_BUFIO    = 00000001            PCB$B_PRI        0000000B            PCB$W_FILCNT     00000048            

IRP$M_CHAINED  = 00000020            PCB$B_PRIB       00000033            PCB$W_GPGCNT     00000038            

IRP$M_COMPLX   = 00000008            PCB$B_TYPE       0000000A            PCB$W_GRP        00000022            

IRP$M_DIAGBUF  = 00000080            PCB$B_WEFC       00000032            PCB$W_MEM        00000020            

IRP$M_FUNC     = 00000002            PCB$C_LENGTH     0000007C            PCB$W_MTXCNT     0000000E            

IRP$M_MBXIO    = 00000400            PCB$K_LENGTH     0000007C            PCB$W_PPGCNT     0000003A            

IRP$M_PAGIO    = 00000004            PCB$L_ASTQBL     00000014            PCB$W_PRCCNT     0000006A            

IRP$M_PHYSIO   = 00000100            PCB$L_ASTQFL     00000010            PCB$W_SIZE       00000008            

IRP$M_PRIVIO   = 00000200            PCB$L_EFC2P      00000058            PCB$W_STATE      00000030            

IRP$M_SWAPIO   = 00000040            PCB$L_EFC3P      0000005C            PCB$W_TMBU       00000036            

IRP$M_VIRTUAL  = 00000010            PCB$L_EFCS       00000050            PCB$W_TQCNT      0000004A            

IRP$Q_NT_PRVMSK  0000003C            PCB$L_EFCU       00000054            PMS$END_IO       ********   X   03   

IRP$S_FCODE    = 00000006            PCB$L_EFWM       0000004C            PMS$START_IO     ********   X   03   

IRP$S_FMOD     = 0000000A            PCB$L_OWNER      0000001C            PR$_ACCR       = 00000029            

IRP$S_MODE     = 00000002            PCB$L_PHD        00000064            PR$_ACCS       = 00000028            

IRP$V_BUFIO    = 00000000            PCB$L_PHYPCB     00000018            PR$_ASTLVL     = 00000013            

IRP$V_CHAINED  = 00000005            PCB$L_PID        00000060            PR$_ESP        = 00000001            

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  23

SYMBOL TABLE                                                                                                                     (1)



PR$_ICCS       = 00000018            UCB$B_SECTORS    0000003C            UCB$M_INT      = 00000002            

PR$_ICR        = 0000001A            UCB$B_SLAVE      00000074            UCB$M_INTTYPE  = 00000080            

PR$_IPL        = 00000012            UCB$B_SPR        00000075            UCB$M_JOB      = 00000001            

PR$_ISP        = 00000004            UCB$B_STATE      00000052            UCB$M_MOUNTING = 00000200            

PR$_KSP        = 00000000            UCB$B_TRACKS     0000003D            UCB$M_NOCNVRT  = 00000004            

PR$_MAPEN      = 00000038            UCB$B_TYPE       0000000A            UCB$M_NT_BFROVF= 00000004            

PR$_NICR       = 00000019            UCB$B_VERTSZ     0000003F            UCB$M_NT_BREAK = 00000020            

PR$_P0BR       = 00000008            UCB$C_LENGTH     00000074            UCB$M_NT_NAME  = 00000010            

PR$_P0LR       = 00000009            UCB$C_LOGLNK   = 00000001            UCB$M_ONLINE   = 00000010            

PR$_P1BR       = 0000000A            UCB$K_LENGTH     00000074            UCB$M_POWER    = 00000020            

PR$_P1LR       = 0000000B            UCB$L_AMB        00000054            UCB$M_PRMMBX   = 00000001            

PR$_PCBB       = 00000010            UCB$L_ASTQBL     00000010            UCB$M_TIM      = 00000001            

PR$_PME        = 0000003D            UCB$L_ASTQFL     0000000C            UCB$M_TIMOUT   = 00000040            

PR$_RXCS       = 00000020            UCB$L_CPID       0000005C            UCB$M_TT_NOTIF = 00000004            

PR$_RXDB       = 00000021            UCB$L_CRB        00000020            UCB$M_TT_TIMO  = 00000002            

PR$_SBIER      = 00000034            UCB$L_DDB        00000024            UCB$M_UNLOAD   = 00001000            

PR$_SBIFS      = 00000030            UCB$L_DEVCHAR    00000034            UCB$M_VALID    = 00000800            

PR$_SBIMT      = 00000033            UCB$L_DEVDEPEND  0000003C            UCB$S_LNKPRI   = 00000002            

PR$_SBIQC      = 00000036            UCB$L_DPC        00000080            UCB$S_LTYPE    = 00000002            

PR$_SBIS       = 00000031            UCB$L_DUETIM     0000005C            UCB$T_PARTNER    0000000C            

PR$_SBISC      = 00000032            UCB$L_DX_BFPNT   0000009C            UCB$V_BACKP    = 00000005            

PR$_SBITA      = 00000035            UCB$L_DX_BUF     00000098            UCB$V_BSY      = 00000008            

PR$_SBR        = 0000000C            UCB$L_DX_RXDB    000000A0            UCB$V_CANCEL   = 00000003            

PR$_SCBB       = 00000011            UCB$L_EMB        00000078            UCB$V_DEADMO   = 0000000A            

PR$_SID        = 0000003E            UCB$L_FIRST      00000014            UCB$V_DELMBX   = 00000001            

PR$_SIRR       = 00000014            UCB$L_FPC        0000000C            UCB$V_DIAGBUF  = 00000001            

PR$_SISR       = 00000015            UCB$L_FQBL       00000004            UCB$V_DX_WRITE = 00000003            

PR$_SLR        = 0000000D            UCB$L_FQFL       00000000            UCB$V_ECC      = 00000000            

PR$_SSP        = 00000002            UCB$L_FR3        00000010            UCB$V_ERLOGIP  = 00000002            

PR$_TBIA       = 00000039            UCB$L_FR4        00000014            UCB$V_INT      = 00000001            

PR$_TBIS       = 0000003A            UCB$L_IOQBL      00000044            UCB$V_INTTYPE  = 00000007            

PR$_TODR       = 0000001B            UCB$L_IOQFL      00000040            UCB$V_JOB      = 00000000            

PR$_TXCS       = 00000022            UCB$L_IRP        0000004C            UCB$V_LNKPRI   = 00000006            

PR$_TXDB       = 00000023            UCB$L_LINK       0000002C            UCB$V_LTYPE    = 00000000            

PR$_USP        = 00000003            UCB$L_LOGADR     00000064            UCB$V_MOUNTING = 00000009            

PR$_WCSA       = 0000002C            UCB$L_MAXBLOCK   00000084            UCB$V_MSGACK   = 00000004            

PR$_WCSD       = 0000002D            UCB$L_MEDIA      0000008C            UCB$V_MSGFLO   = 00000003            

RELEASE          000001A0 R     03   UCB$L_NT_DATSSB  00000074            UCB$V_NOCNVRT  = 00000002            

SCH$GL_PCBVEC    ********   X   03   UCB$L_NT_INTSSB  00000078            UCB$V_NT_BFROVF= 00000002            

SS$_NORMAL       ********   X   03   UCB$L_OPCNT      00000060            UCB$V_NT_BREAK = 00000005            

UCB$B_AMOD       00000053            UCB$L_OWNUIC     0000001C            UCB$V_NT_NAME  = 00000004            

UCB$B_CEX        00000077            UCB$L_PID        00000028            UCB$V_ONLINE   = 00000004            

UCB$B_CM1        0000004A            UCB$L_RQBL       00000004            UCB$V_POWER    = 00000005            

UCB$B_CM2        0000004B            UCB$L_RQFL       00000000            UCB$V_PRMMBX   = 00000000            

UCB$B_DEVCLASS   00000038            UCB$L_SVAPTE     00000068            UCB$V_SEGFLO   = 00000002            

UCB$B_DEVTYPE    00000039            UCB$L_SVPN       00000064            UCB$V_TIM      = 00000000            

UCB$B_DIPL       00000052            UCB$L_TTCHAR     0000003C            UCB$V_TIMOUT   = 00000006            

UCB$B_DX_SCTCNT  000000A6            UCB$L_VCB        00000030            UCB$V_TT_NOTIF = 00000002            

UCB$B_ERTCNT     00000070            UCB$M_BACKP    = 00000020            UCB$V_TT_TIMO  = 00000001            

UCB$B_ERTMAX     00000071            UCB$M_BSY      = 00000100            UCB$V_UNLOAD   = 0000000C            

UCB$B_ESCAPE     0000004B            UCB$M_CANCEL   = 00000008            UCB$V_VALID    = 0000000B            

UCB$B_FEX        00000076            UCB$M_DEADMO   = 00000400            UCB$W_BCNT       0000006E            

UCB$B_FIPL       0000000B            UCB$M_DELMBX   = 00000002            UCB$W_BCR        00000096            

UCB$B_LOCSRV     0000003C            UCB$M_DIAGBUF  = 00000002            UCB$W_BOFF       0000006C            

UCB$B_OFFNDX     00000094            UCB$M_DX_WRITE = 00000008            UCB$W_BUFQUO     00000018            

UCB$B_OFFRTC     00000095            UCB$M_ECC      = 00000001            UCB$W_BYTESTOGO  0000003E            

UCB$B_REMSRV     0000003D            UCB$M_ERLOGIP  = 00000004            UCB$W_CHARGE     0000004A            

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  24

SYMBOL TABLE                                                                                                                     (1)



UCB$W_CYLINDERS  0000003E            

UCB$W_DA         0000008C            

UCB$W_DC         0000008E            

UCB$W_DEVBUFSIZ  0000003A            

UCB$W_DEVSTS     0000005A            

UCB$W_DIRSEQ     00000088            

UCB$W_DSTADDR    00000018            

UCB$W_DX_BCR     000000A4            

UCB$W_EC1        00000090            

UCB$W_EC2        00000092            

UCB$W_ERRCNT     00000072            

UCB$W_FUNC       0000007E            

UCB$W_MB_SEED    FFFFFFFC            

UCB$W_MSGCNT     00000016            

UCB$W_MSGMAX     00000014            

UCB$W_NT_CHAN    0000007C            

UCB$W_OFFSET     0000008A            

UCB$W_REFC       00000050            

UCB$W_SIZE       00000008            

UCB$W_SRCADDR    0000001A            

UCB$W_STS        00000058            

UCB$W_UNIT       00000048            

UCB$W_VPROT      0000001A            

VEC$B_DATAPATH   00000013            

VEC$B_NUMREG     00000012            

VEC$C_LENGTH     00000024            

VEC$K_LENGTH     00000024            

VEC$L_ADP        00000014            

VEC$L_IDB        00000008            

VEC$L_INITIAL    0000000C            

VEC$L_START      0000001C            

VEC$L_UNITDISC   00000020            

VEC$L_UNITINIT   00000018            

VEC$M_MAPLOCK  = 00008000            

VEC$M_PATHLOCK = 00000080            

VEC$Q_DISPATCH   00000000            

VEC$S_DATAPATH = 00000007            

VEC$S_MAPREG   = 0000000F            

VEC$V_DATAPATH = 00000000            

VEC$V_MAPLOCK  = 0000000F            

VEC$V_MAPREG   = 00000000            

VEC$V_PATHLOCK = 00000007            

VEC$W_MAPREG     00000010            





PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$ABS$            FFFFFFFE      02     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

WIONONPAGED      0000035B      03     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  





THERE WERE NO ERRORS OR WARNINGS.

10460. BYTES LEFT IN FREE MEMORY POOL.

2622. BYTES OF RECLAIMED MEMORY.

OBJ$:IOSUBNPAG,LIS$:IOSUBNPAG/-SP=EXECML$/ML,SRC$:IOSUBNPAG

IOSUBNPAG       - NONPAGED I/O RELATED SUBROUTINES               21-AUG-1978 19:54:36   VAX-11 MACRO X0.3-11               Page  25

PROGRAM SECTION SYNOPSIS                                                                                                         (1)



11 MLB DIR RDS - 962 GETS TO DEFINE 31 MACROS. 60 INTER. FILE WRITES. 

