SSU TITLE 'DMKSSU (CP) VM/370 - RELEASE 6' 00001000 * 00002000 * MODULE NAME - 00003000 * 00004000 * DMKSSU 00005000 * 00006000 * FUNCTION - 00007000 * 00008000 * THIS IS A COMMON MSS SERVICE ROUTINE. IT HANDLES 00009000 * MSS SERVICE REQUESTS FROM OTHER CONTROL PROGRAM 00010000 * MODULES. THIS ROUTINE RECEIVES CONTROL AT DIFFERENT 00011000 * ENTRY POINTS, DEPENDING ON THE TYPE OF SERVICE 00012000 * REQUESTED. THE SERVICE PROVIDED BY EACH ENTRY POINT 00013000 * IS DESCRIBED BY THE PROLOGUE TO THAT ENTRY POINT. 00014000 * 00015000 * ATTRIBUTES - 00016000 * 00017000 * REENTRANT, RESIDENT, ENTERED VIA A CALL OR BRANCH TO THE 00018000 * APPROPRIATE ENTRY POINT 00019000 * 00020000 * ENTRY POINTS - 00021000 * 00022000 * DMKSSUI1 - FROM DMKIOT: AN ATTENTION INTERRUPT HAS 00023000 * BEEN RECEIVED ON A 3330V 00024000 * 00025000 * DMKSSUI2 - FROM DMKIOT: AN CYLINDER FAULT HAS BEEN 00026000 * DETECTED ON A 3330V 00027000 * 00028000 * DMKSSUCF - FROM DMKCFP: RESET A VIRTUAL DEVICE DEFINED 00029000 * ON A 3330V 00030000 * 00031000 * ENTRY CONDITIONS - 00032000 * 00033000 * DEFINED FOR EACH ENTRY POINT IN THE PROLOGUE TO THAT 00034000 * ENTRY POINT 00035000 * 00036000 * EXIT CONDITIONS - 00037000 * 00038000 * EXIT IS THROUGH THE STANDARD RETURN TO THE CALLING 00039000 * MODULE. A RETURN CODE IS PASSED IN GPR 15 00040000 * 00041000 * GPR 15 = 0 MEANS FUNCTION COMPLETE, NO ERRORS 00042000 * GPR 15 = 4 MEANS AN MSS VOLUME MOUNT HAS BEEN 00043000 * SCHEDULED, BUT IS NOT YET COMPLETE. 00044000 * AN MSSCOM BLOCK HAS BEEN CREATED AND 00045000 * QUEUED PENDING MOUNT COMPLETE. A MESSAGE 00046000 * HAS BEEN SENT TO THE USER STATING THAT 00047000 * A MOUNT IS IN PROCESS 00048000 * GPR 15 = 8 MEANS A SERIOUS ERROR OCCURRED. THE 00049000 * REQUESTED FUNCTION WAS NOT PERFORMED 00050000 * AND NO FURTHER ACTION WILL BE TAKEN ON 00051000 * THE REQUEST 00052000 * 00053000 * OTHER EXIT CONDITIONS, UNIQUE TO A PARTICULAR SERVICE, 00054000 * ARE DEFINED IN THE PROLOGUE TO THAT ENTRY POINT 00055000 * 00056000 * CALLS TO OTHER ROUTINES - 00057000 * 00058000 * SEE THE PROLOGUE FOR A PARTICULAR ENTRY POINT 00059000 * 00060000 * EXTERNAL REFERENCES - 00061000 * 00062000 * NONE 00063000 * 00064000 * 00065000 * TABLES/WORKAREAS - 00066000 * 00067000 * MSSCOM 00068000 * RDEVBLOK 00069000 * VDEVBLOK 00070000 * UDEVBLOK 00071000 * IOBLOK 00072000 * VMBLOK 00073000 * UDEVBLOK 00074000 * TRQBLOK 00075000 * CPEXBLOK 00076000 * SAVEAREA 00077000 * PSA 00078000 * 00079000 * REGISTER USAGE - 00080000 * 00081000 * GPR 11 = VMBLOK BASE 00082000 * GPR 12 = DMKSSU BASE 00083000 * GPR 13 = SAVEAREA BASE 00084000 * GPR 15 = RETURN CODE 00085000 * 00086000 * THE USAGE OF THE OTHER REGISTERS DEPENDS UPON THE ENTRY 00087000 * POINT. SEE THE PROLOGUE FOR THE SPECIFIC ENTRY 00088000 * 00089000 EJECT 00090000 COPY OPTIONS @V60B6B8 00091000 COPY LOCAL @V60B6B8 00092000 EJECT 00093000 DMKSSU CSECT @V60B6B8 00094000 DC CL8'DMKSSU' @V60B6B8 00095000 SPACE 3 00096000 USING PSA,R0 MAP FOR LOW CORE @V60B6B8 00097000 USING VMBLOK,R11 PRIME VM CONTROL BLOCK @V60B6B8 00098000 USING SAVEAREA,R13 REG SAVE AREA AND WORK AREA @V60B6B8 00099000 ENTRY DMKSSUI1,DMKSSUI2 @V60B6B8 00100000 EXTRN DMKSCHST,DMKSCHRT 00101000 EXTRN DMKCVTBH 00102000 EXTRN DMKERMSG 00103000 EXTRN DMKSCNVD 00104000 EXTRN DMKSTKIO,DMKSTKCP 00105000 EJECT 00106000 * 00107000 * 00108000 * 00109000 * 00110000 * ENTRY POINT DMKSSUI1 00111000 * 00112000 * 00113000 * ENTRY CONDITIONS - 00114000 * 00115000 * ENTRY IS VIA A 'BALR R14,R15' FROM DMKIOT. AN ATTN 00116000 * INTERRUPT HAS BEEN RECEIVED ON A 3330V. AT ENTRY, 00117000 * THE PERTINENT REGISTERS ARE: 00118000 * GPR 15 = ENTRY POINT ADDR 00119000 * GPR 14 = DMKIOT RETURN ADDR 00120000 * GPR 13 = DMKIOT SAVEAREA ADDR 00121000 * GPR 11 = VMBLOK BASE REG 00122000 * GPR 8 = RDEVBLOK ADDR 00123000 * 00124000 * EXIT CONDITIONS - 00125000 * 00126000 * EXIT IS VIA 'BR R14' BACK TO DMKIOT. THE ATTN 00127000 * INTERRUPT HAS BEEN PROCESSED. 00128000 * 00129000 * CALLS TO EXTERNAL ROUTINES - 00130000 * 00131000 * NONE 00132000 * 00133000 * OPERATION - 00134000 * 00135000 * 1) FIND THE TIMER TRQBLOK WHICH PERTAINS TO THE 00136000 * CYLINDER FAULT WHICH HAS NOW BEEN SATISFIED. 00137000 * CALL DMKSCH TO REMOVE THE TRQBLOK, SINCE THE 00138000 * ATTENTION HAS BEEN RECEIVED BEFORE THE TIMER 00139000 * EXPIRED. 00140000 * 00141000 * 2) MAKE THE QUEUED IOBLOK DISPATCHABLE AND PLACE 00142000 * IT BACK IN THE DISPATCH QUEUE. 00143000 * 00144000 * NOTE: IF THE REAL DEVICE IS DEDICATED TO A VIRTUAL 00145000 * MACHINE AS A VIRTUAL 3330V, THEN THIS CODE WILL NOT 00146000 * BE ENTERED. THE ORIGINAL CYLINDER FAULT WILL HAVE 00147000 * BEEN REFLECTED TO THE VIRTUAL MACHINE BY DMKIOT, 00148000 * AND THIS ATTN INTERRUPT WILL BE PASSED TO THE 00149000 * VIRTUAL MACHINE RATHER THAN TO DMKSSU. 00150000 * 00151000 * 00152000 DMKSSUI1 DS 0H PROCESS UNSOLICITED ATTENTION @V60B6B8 00153000 USING *,R15 ENTRY VIA BALR 14,15 FROM DMKIOT @V60B6B8 00154000 * MUST USE TEMPSAVE SINCE IOS MAY NOT HAVE SAVE AREA IN R13 00155000 ST R12,TEMPR12 SAVE DMKIOT BASE REGISTER @VA09298 00156000 LR R12,R15 SET UP STANDARD PGM BASE REG @V60B6B8 00157000 SL R12,SSUI1OFF BACK TO MODULE START @V60B6B8 00158000 DROP R15 @V60B6B8 00159000 USING DMKSSU,R12 COMMON MODULE START @V60B6B8 00160000 USING RDEVBLOK,R8 GPR 8 SET BY DMKIOT @V60B6B8 00161000 ST R14,TEMPR14 SAVE DMKIOT RETURN ADDRESS @VA09298 00162000 L R2,RDEVFIOB PTR TO FIRST QUEUED IOBLOK @VA09298 00163000 USING IOBLOK,R2 ASSEMBLER ADDRESSABILITY @VA09298 00164000 TESTFIOB EQU * CHECK FOR CYL FAULT @V60B6B8 00165000 CR R2,R8 DOES IOBLOK POINT TO RDEVBLOK @VA09298 00166000 BE TIMPROC YES, END OF THE QUEUE @V60B6B8 00167000 TM IOBSTAT,IOBFLT CYL FAULT ON THIS IOBLOK @V60B6B8 00168000 BZ NXTIOBLK NO, NO TIMER Q ENTRY @V60B6B8 00169000 L R1,IOBCTRQ PTR TO QUEUED TRQBLOK @VA09957 00170000 * 00171000 * NOTE: WHEN THE CYLINDER FAULT INDICATION WAS 00172000 * FIRST RECEIVED, AND THE IOBLOK QUEUED AND THE 00173000 * TIMER Q ENTRY CREATED, THE ADDRESS OF THE 00174000 * TRQBLOK WAS PLACED IN THE FIELD IOBMISC2 BY 00175000 * ROUTINE DMKSSUI2. 00176000 * 00177000 L R15,SCHRTAD ADDR OF TIMER Q MAINT ROUTINE @V60B6B8 00178000 BALR R14,R15 REMOVE THE TRQBLOK @V60B6B8 00179000 L R1,IOBCTRQ TRQBLOCK ADDRESS @VA11445 00180000 LA R0,TRQBSIZE+8 SIZE OF TRQBLOK + WORKAREA @VA11445 00181000 CALL DMKFRET RETURN THE GOTTEN STORAGE @VA11445 00182000 XC IOBCTRQ,IOBCTRQ CLEAR THIS POINTER @VA12882 00182500 NI IOBSTAT,FULL-IOBFLT TURN OFF CYL FAULT FLAG @V60B6B8 00183000 NXTIOBLK EQU * GET NEXT IOBLOK @V60B6B8 00184000 L R2,IOBFPNT NEXT BLOCK POINTER @VA09298 00185000 B TESTFIOB SEE IF THERE IS ONE @V60B6B8 00186000 TIMPROC EQU * TIMER Q HAS BEEN PROCESSED @V60B6B8 00187000 L R14,TEMPR14 RESTORE DMKIOT RETURN ADDRESS @VA09298 00188000 L R12,TEMPR12 RESTORE DMKIOT BASE REGISTER @VA09298 00189000 BR R14 AND RETURN @V60B6B8 00190000 DROP R2 @VA09298 00191000 EJECT 00192000 * 00193000 * 00194000 * ENTRY POINT DMKSSUI2 00195000 * 00196000 * 00197000 * ENTRY CONDITIONS - 00198000 * 00199000 * ENTRY IS VIA A 'BALR R14,R15' FROM DMKIOT. THE 00200000 * PERTINENT REGISTERS ARE: 00201000 * GPR 15 = DMKSSUI2 ADDRESS 00202000 * GPR 14 = DMKIOT RETURN ADDRESS 00203000 * GPR 10 = IOBLOK ADDR 00204000 * GPR 8 = RDEVBLOK ADDR 00205000 * 00206000 * EXIT CONDITIONS - 00207000 * 00208000 * EXIT IS VIA A 'BR R14' BACK TO DMKIOT. THE 00209000 * IOBLOK IS QUEUED FROM FIELD RDEVFIOB WITH FLAG 00210000 * IOBFLT SET. A TRQBLOK HAS BEEN SET SUCH THAT IF 00211000 * THE MSS DOES NOT RESOLVE THE CYLINDER FAULT 00212000 * WITHIN THE REQUIRED TIME, A TIMER INTERRUPT WILL 00213000 * BE RECEIVED. 00214000 * 00215000 * CALLS TO EXTERNAL ROUTINES - 00216000 * 00217000 * DMKFREE - GET STORAGE FOR A TRQBLOK 00218000 * DMKSCHST - PUT THE TRQBLOK IN THE TIMER Q 00219000 * 00220000 * OPERATION 00221000 * 00222000 * 1) QUEUE THE IOBLOK FROM FIELD RDEVFIOB WITH 00223000 * FLAG IOBFLT SET. 00224000 * 00225000 * 2) BUILD A TRQBLOK IN CASE THE SUBSEQUENT ATTN 00226000 * IS NOT RECEIVED. 00227000 * 00228000 * 3) CALL DMKSCHST TO PLACE THE TRQBLOK IN THE Q. 00229000 * 00230000 DMKSSUI2 EQU * SET UP FOR MISSING ATTN @V60B6B8 00231000 USING DMKSSUI2,R15 @V60B6B8 00232000 LR R2,R14 RESTORE DMKIOT RETURN ADDRESS @VA09298 00233000 LR R3,R12 RESTORE DMKIOT BASE REGISTER @VA09298 00234000 LR R12,R15 DMKSSUI2 ENTRY POINT ADDR @V60B6B8 00235000 SL R12,SSUI2OFF COMMON MODULE BASE @V60B6B8 00236000 DROP R15 @V60B6B8 00237000 USING DMKSSU,R12 @V60B6B8 00238000 USING RDEVBLOK,R8 @V60B6B8 00239000 USING IOBLOK,R10 @V60B6B8 00240000 OI IOBSTAT,IOBFLT INDICATE CYL FAULT HAS OCCURRED @V60B6B8 00241000 L R4,RDEVFIOB RDEVBLOK CHAIN FIELD @VA09298 00242000 ST R10,RDEVFIOB CHAIN IN CURRENT IOBLOK @V60B6B8 00243000 ST R4,IOBFPNT CHAIN IN PREVIOUS BLOCK @VA09298 00244000 ST R8,IOBBPNT SET BACK PTR IN CURRENT IOBLOK @V60B6B8 00245000 ST R10,IOBBPNT-IOBLOK(R4) SET BACK PTR IN PREVIOUS @VA09298 00246000 LA R0,TRQBSIZE+8 TRQBLOK + SAVE AREA @VMI2015 00247000 CALL DMKFREE GET STORAGE @V60B6B8 00248000 USING TRQBLOK,R1 STORAGE TO BE INITIALIZED @V60B6B8 00249000 ST R1,IOBCTRQ SAVE TRQBLOK POINTER @VA09957 00250000 STM R0,R15,40(R1) SAVE REGS FOR ASYNCH EXIT @VMI2015 00251000 ST R11,TRQBUSER USER VMBLOK ADDR @V60B6B8 00252000 LA R15,SCHIOB ADDR OF ROUTINE FOR MISSING ATTN @V60B6B8 00253000 ST R15,TRQBIRA SAVE IN BLOCK @V60B6B8 00254000 STCK TRQBTOD SAVE CURRENT TIME OF DAY @V60B6B8 00255000 L R5,ATTNPER PERIOD TO WAIT FOR AN ATTN @V60B6B8 00256000 SR R4,R4 CLEAR FOR FOLLOWING MULT @V60B6B8 00257000 M R4,MICROADD GET INTO MICROSECS @V60B6B8 00258000 SLDL R4,12 INTO TOD FORMAT @V60B6B8 00259000 AL R5,TRQBTOD+4 ADD TO TOD CURRENT VALUE @V60B6B8 00260000 BC 12,NOOVER NO OVERFLOW @V60B6B8 00261000 AL R4,F1 + 1 SEC IF OVERFLOW @V60B6B8 00262000 NOOVER EQU * @V60B6B8 00263000 AL R4,TRQBTOD HI-ORDER TOD BITS @V60B6B8 00264000 STM R4,R5,TRQBVAL INTO TRQBLOK @V60B6B8 00265000 CALL DMKSCHST PUT IT INTO THE TIMER QUEUE @V60B6B8 00266000 LR R14,R2 RESTORE DMKIOT RETURN ADDRESS @VA09298 00267000 LR R12,R3 RESTORE DMKIOT BASE REGISTER @VA09298 00268000 BR R14 AND RETURN @V60B6B8 00269000 EJECT 00270000 * 00271000 * SCHIOB IS THE ROUTINE WHICH IS DISPATCHED WHEN 00272000 * A MISSING ATTENTION IS ENCOUNTERED. IT IS 00273000 * DISPATCHED ASYNCHRONOUSLY BY DMKDSP WHEN THE 00274000 * TIMER VALUE SET BY DMKSSUI2 EXPIRES. 00275000 * 00276000 SCHIOB EQU * ATTENTION TIMER HAS EXPIRED @V60B6B8 00277000 BALR R12,R0 SET UP FOR OUR ADDRESSABILITY @V60B6B8 00278000 SCHIOB1 EQU * @V60B6B8 00279000 USING SCHIOB1,R12 @V60B6B8 00280000 SL R12,SSUIOOFF OFFSET TO MODULE START @V60B6B8 00281000 USING DMKSSU,R12 @V60B6B8 00282000 LM R0,R15,40(R10) RESTORE DMKSSU REGS @VMI2015 00283000 LR R3,R1 SAVE TRQBLOK ADDR @VMI2015 00284000 LH R1,IOBRADD-IOBLOK(R10) DEV ADDR @VMI2015 00285000 CALL DMKCVTBH INTO PRINTABLE HEX @VMI2015 00286000 ST R1,TEMPSAVE SAVE PRINTABLE DATA @VMI2015 00287000 LA R0,3 LENGTH FOR MESSAGE @VMI2015 00288000 LA R1,TEMPSAVE+1 ADDR FOR MESSAGE @VMI2015 00289000 L R2,OPTION74 MSG WRITER OPTIONS @VMI2020 00290000 CALL DMKERMSG WRITE MSG 084 @VMI2015 00291000 LR R1,R3 TRQBLOK ADDR @VMI2015 00292000 STCK TRQBTOD-TRQBLOK(R1) CURRENT TOD @VMI2015 00293000 L R5,ATTNPER NO. OF SECS IN 15 MIN @VMI2015 00294000 SR R4,R4 CLEAR FOR ARITH. @VMI2015 00295000 M R4,MICROADD INTO MICROSECS @VMI2015 00296000 SLDL R4,12 INTO TOD FORMAT @VMI2015 00297000 AL R5,TRQBTOD-TRQBLOK+4(R1) @VMI2015 00298000 AL R4,TRQBTOD-TRQBLOK(R1) @VMI2015 00299000 STM R4,R5,TRQBVAL-TRQBLOK(R1) NEXT TIMER POP @VMI2015 00300000 CALL DMKSCHST @VMI2015 00301000 GOTO DMKDSPCH AND WAIT @VMI2015 00302000 EJECT 00303000 * 00304000 * 00305000 * ENTRY POINT DMKSSUCF 00306000 * 00307000 * 00308000 * ENTRY CONDITIONS - 00309000 * 00310000 * ENTRY IS FROM DMKCFP VIA A CALL (SVC 8). THE PURPOSE 00311000 * OF THIS ENTRY IS TO CLEAN UP ANY POSSIBLE I/O 00312000 * INITIATED BY THE VIRTUAL MACHINE BUT CURRENTLY 00313000 * WAITING FOR A CYLINDER FAULT TO COMPLETE. THE 00314000 * PERTINENT REGISTERS AT ENTRY ARE: 00315000 * GPR 12 = DMKSSUCF ADDRESS 00316000 * GPR 11 = VMBLOK ADDRESS 00317000 * GPR 8 = VDEVBLOK ADDR 00318000 * GPR 1 = RDEVBLOK ADDR 00319000 * 00320000 * EXIT CONDITIONS - 00321000 * 00322000 * ANY IOBLOKS ORIGINALLY SCHEDULED FOR THIS REAL DEVICE 00323000 * FROM THIS VIRTUAL MACHINE WHICH ARE WAITING FOR A 00324000 * CYLINDER FAULT HAVE BEEN REMOVED FROM THE RDEVBLOK 00325000 * CHAIN AND ANY TIMER QUEUE BLOCKS ASSOCIATED WITH 00326000 * A POSSIBLE MISSING ATTENTION HAVE BEEN REMOVED FROM 00327000 * THE TIMER QUEUE. 00328000 * 00329000 * CALLS TO EXTERNAL ROUTINES - 00330000 * 00331000 * DMKSCHRT - REMOVE TRQBLOK FROM TIMER Q 00332000 * DMKFRET - RETURN STORAGE FOR TRQBLOK TO SYSTEM 00333000 * 00334000 * OPERATION - 00335000 * 00336000 * 1) IF THE VIRTUAL DEVICE BLOCK IS NOT BUSY, RETURN 00337000 * TO DMKCFP (IT CAN'T BE WAITING FOR AN ATTENTION). 00338000 * IF BUSY, COMPUTE THE RANGE OF REAL CYLINDERS WHICH 00339000 * PERTAINS TO THIS VIRTUAL DEVICE. 00340000 * 00341000 * 2) SCAN ANY QUEUED IOBLOKS FOR THE REAL DEVICE, 00342000 * LOOKING FOR THE ONE WHICH IS WAITING FOR THE ATTENTION 00343000 * AND REFLECTS AN OPERATION TO THE VIRTUAL DEVICE. 00344000 * 00345000 * 3) WHEN THE IOBLOK IS FOUND, REMOVE IT FROM THE CHAIN, 00346000 * FIND THE TIMER QUEUE POINTER, AND CALL DMKSCHRT TO 00347000 * REMOVE THE ASSOCIATED TRQBLOK. 00348000 * 00349000 * 00350000 DMKSSUCF RELOC ENTRY FROM DMKCFP @V60B6B8 00351000 USING VDEVBLOK,R8 SET BY DMKCFP @V60B6B8 00352000 USING RDEVBLOK,R1 SET BY DMKCFP @V60B6B8 00353000 TM VDEVSTAT,VDEVBUSY IS THE VIRTUAL DEVICE BUSY @V60B6B8 00354000 BO CHKFAULT YES, CHECK FOR CYL FAULT @V60B6B8 00355000 CFEXIT EXIT RETURN @V60B6B8 00356000 CHKFAULT EQU * SEE IF BUSY WAITING FOR CYL FAULT@V60B6B8 00357000 LH R3,VDEVRELN REAL OFFSET TO MINI-DISK @V60B6B8 00358000 LH R2,VDEVBND NO. OF CYL IN MINI-DISK @V60B6B8 00359000 AR R2,R3 END OF THE VIRT DEV @V60B6B8 00360000 L R10,RDEVFIOB FIRST QUEUED IOBLOK @V60B6B8 00361000 FIOBTEST EQU * SEE IF ADDR VALID @V60B6B8 00362000 LTR R10,R10 VALID ADDR? @V60B6B8 00363000 BZ CFEXIT NO, CAN'T BE ZERO @V60B6B8 00364000 CR R10,R1 IS THIS THE RDEVBLOK ADDR? @VA11443 00365000 BE CFEXIT YES, END OF CHAIN @V60B6B8 00366000 USING IOBLOK,R10 ASSEMBLER ADDRESSABILITY @V60B6B8 00367000 TM IOBSTAT,IOBFLT CYL. FLT THIS IOB? @VMI2015 00368000 BO TESTDEQ YES, SEE IF WE DEQ IT @V60B6B8 00369000 NEXTIOB EQU * GET NEXT IOB IN CHAIN @V60B6B8 00370000 L R10,IOBFPNT NEXT IOBLOK IN Q @V60B6B8 00371000 B FIOBTEST AND TEST IT @V60B6B8 00372000 * 00373000 * WE HAVE FOUND AN IOBLOK WAITING FOR A CYLINDER FAULT. 00374000 * SEE IF THE VIRTUAL DEVICE BEING RESET CAUSED THE 00375000 * CYLINDER FAULT BY COMPARING THE SEEK ADDR WHICH CAUSED 00376000 * THE FAULT TO THE BOUNDS OF THE VIRTUAL DEVICE. 00377000 * 00378000 TESTDEQ EQU * FIND THE FAULTED SEEK @V60B6B8 00379000 LR R5,R1 SAVE RDEV POINTER @VA11442 00380000 CALL DMKSCNVD TO GET OTHER VBLOKS @VA11442 00381000 LR R4,R1 PUT THE CCU INTO R4 @VA11442 00382000 LR R1,R5 RESTORE RDEVBLOK TO R1 @VA11442 00383000 CH R4,IOBVADD IS THIS IOBLOK FOR CORRECT VDEV @VA11442 00384000 BNE NEXTIOB NO, GET NEXT IN CHAIN @V60B6B8 00385000 CH R3,IOBCYL IS FAULTED CYL IN THE VDEV @V60B6B8 00386000 BH NEXTIOB NO @V60B6B8 00387000 CH R2,IOBCYL AGAIN - THIS TIME FOR TOP @V60B6B8 00388000 BL NEXTIOB IOB CYL NOT IN VDEV RANGE @V60B6B8 00389000 * 00390000 * UNCHAIN THIS IOBLOK FROM THE RDEV - IF THE 00391000 * ATTENTION COMES IN LATER, IT WILL BE IGNORED 00392000 * 00393000 L R3,IOBFPNT NEXT IOBLOK IN CHAIN @V60B6B8 00394000 L R4,IOBBPNT PREVIOUS IOBLOK @V60B6B8 00395000 ST R3,IOBFPNT-IOBLOK(R4) POINT PREVIOUS TO NEXT @V60B6B8 00396000 ST R4,IOBBPNT-IOBLOK(R3) POINT NEXT TO PREVIOUS @V60B6B8 00397000 * 00398000 * GET THE TRQBLOK PTR FROM THE IOBLOK AND CALL 00399000 * DMKSCHRT TO REMOVE THE TRQBLOK. THE PTR WAS 00400000 * PUT IN THE IOBLOK IN ROUTINE DMKSSUI2 WHEN THE 00401000 * IOBLOK WAS FIRST QUEUED AND THE TIMER POP REQUESTED 00402000 * 00403000 L R1,IOBCTRQ PTR TO QUEUED TRQBLOK @VA09957 00404000 CALL DMKSCHRT REMOVE IT - WE DON'T WANT INT. @V60B6B8 00405000 LA R0,TRQBSIZE+8 NO OF D-WORDS TO FRET @VMI2015 00406000 CALL DMKFRET RETURN STORAGE TO SYSTEM @V60B6B8 00407000 OI IOBSTAT,IOBCC3+IOBFATAL PSEUDO CC=3 @VA11446 00408000 NI IOBFLAG,X'FF'-IOBRSTRT NO RESTART @VA11446 00409000 CALL DMKSTKIO STACK THE IOBLOK @VA11446 00410000 LA R0,CPEXSIZE SIZE OF THE CPEXBLOK @VA11446 00411000 CALL DMKFREE GET THE STORAGE @VA11446 00412000 USING CPEXBLOK,R1 @VA11446 00413000 LA R2,CFEXIT PLACE WHERE WE WANT CONTROL @VA11446 00414000 ST R2,CPEXADD INTO THE CPEXBLOK @VA11446 00415000 STM R0,R15,CPEXREGS SAVE OUR REGS. @VA11446 00416000 CALL DMKSTKCP STACK THE CPEXBLOK @VA11446 00417000 DROP R1 @VA11446 00418000 GOTO DMKDSPCH WAIT FOR USER'S CC3 @VA11446 00419000 EJECT 00420000 SCHRTAD DC V(DMKSCHRT) ROIUTINE TO DEQ TIMER BLOKS 00421000 DS 0F MESSAGES ON FULL WORD BOUNDARY @V60B6B8 00422000 * 00423000 * THE FOLLOWING CONSTANTS DEFINE THE ERROR MESSAGE 00424000 * OPTIONS. THE MESSAGES HAVE THE FORMAT DMKSSU070 TO 00425000 * DMKSSU078. 00426000 * 00427000 OPTION74 DC X'80C9004A' DMKSSU074I @VMI2020 00428000 ATTNPER DC F'900' WAIT 15 MIN ON MISSING ATTN @V60B6B8 00429000 MICROADD DC F'1000000' CNVRT SEC TO MICROSECS @V60B6B8 00430000 SSUI1OFF DC A(DMKSSUI1-DMKSSU) OFFSET TO DMKSSUI1 @V60B6B8 00431000 SSUI2OFF DC A(DMKSSUI2-DMKSSU) OFFSET TO DMKSSUI1 @V60B6B8 00432000 SSUIOOFF DC A(SCHIOB1-DMKSSU) OFFSET TO SCHIOB1 @V60B6B8 00433000 FULL EQU X'FF' MASK FOR TURNING OFF FLAGS @V60B6B8 00434000 COPY SAVE @V60B6B8 00435000 RDEVDEMT EQU SAVEWRK1 @V60B6B8 00436000 DEMNTRET EQU SAVEWRK2 @V60B6B8 00437000 VSERADDR EQU SAVEWRK3 @V60B6B8 00438000 RDEVADDR EQU SAVEWRK4 @V60B6B8 00439000 RETNADDR EQU SAVEWRK5 @V60B6B8 00440000 ADDRSAVE EQU SAVEWRK6 @V60B6B8 00441000 IOSRETAD EQU SAVEWRK7 @V60B6B8 00442000 SAVRETAD EQU SAVEWRK8 @V60B6B8 00443000 EJECT 00444000 OSVSCOM MSSCOM @V60B6B8 00445000 EJECT 00446000 PSA @V60B6B8 00447000 COPY EQU @V60B6B8 00448000 COPY VMBLOK @V60B6B8 00449000 COPY TIMER @V60B6B8 00450000 COPY IOBLOKS @V60B6B8 00451000 COPY UDIRECT @V60B6B8 00452000 COPY DEVTYPES @V60B6B8 00453000 COPY RBLOKS @V60B6B8 00454000 COPY VBLOKS @V60B6B8 00455000 END DMKSSU 00456000