ibm:vm370-lib:cp:dmkssu.assemble_src
Table of Contents
DMKSSU Source
References
- Fixes Applied : 1
- This Source Date : Friday, July 25, 1980
- Last Fix ID : [R12882DK]
Source Listing
- DMKSSU.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmkssu.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator