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