ibm:vm370-lib:cp:dmksss.assemble_src
Table of Contents
DMKSSS Source
References
- Fixes Applied : 37
- This Source Date : Thursday, December 14, 1978
- Last Fix ID : [R13058DK]
Source Listing
- DMKSSS.ASSEMBLE.txt
- SSS TITLE 'DMKSSS (CP) VM/370 - RELEASE 6' 00001000
- * 00002000
- * MODULE NAME - 00003000
- * 00004000
- * DMKSSS 00005000
- * 00006000
- * FUNCTION - 00007000
- * 00008000
- * THIS IS THE 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
- * DMKSSSL1 - FROM DMKLOG: PROCESS A DED STATEMENT 00023000
- * WITH THE 3330V PARAMETER 00024000
- * 00025000
- * DMKSSSL2 - FROM DMKLOG: PROCESS A DED STATEMENT 00026000
- * WITH 'RADDR' AND 'VOLID' SPECIFIED, AND THE 00027000
- * 'RADDR' IS A 3330V 00028000
- * 00029000
- * DMKSSSL3 - FROM DMKLOG: PROCESS A DED STATEMENT 00030000
- * WITH A 'VOLID' BUT NO 'RADDR'. TRY TO FIND A 3330V 00031000
- * WITH A VOLUME SERIAL OF 'VOLID' 00032000
- * 00033000
- * DMKSSSHV - FROM DMKHVC: PROCESS DIAGNOSE CODE 78 00034000
- * 00035000
- * DMKSSSUS - FROM DMKUSO: THE VIRTUAL MACHINE WHICH IS 00042000
- * ACTING AS THE MSS COMMUNICATOR IS LOGGING OFF 00043000
- * 00044000
- * DMKSSSVA - FROM DMKVDA: ATTACHING A 3330V TO EITHER 00045000
- * THE SYSTEM OR A VIRTUAL MACHINE 00046000
- * 00047000
- * DMKSSSLN - FROM DMKLNK: ATTEMPT TO MOUNT THE NEEDED 00048000
- * 'VOLID' ON A 3330V 00049000
- * 00050000
- * DMKSSSDE - FROM DMKDEF: DEMOUNT AN MSS VOLUME FROM THE 00054000
- * SPECIFIED 3330V 00055000
- * 00056000
- * DMKSSSRL - FROM DMKVDR: ISSUE A RELINQUISH REQUEST TO 00056100
- * DESTAGE ANY CHANGED CYLINDERS OF THE VOLUME MOUNTED ON 00056200
- * THE SPECIFIED VUA. 00056300
- * 00056400
- * ENTRY CONDITIONS - 00057000
- * 00058000
- * DEFINED FOR EACH ENTRY POINT IN THE PROLOGUE TO THAT 00059000
- * ENTRY POINT 00060000
- * 00061000
- * EXIT CONDITIONS - 00062000
- * 00063000
- * EXIT IS THROUGH THE STANDARD RETURN TO THE CALLING 00064000
- * MODULE. A RETURN CODE IS PASSED IN GPR 15 00065000
- * 00066000
- * GPR 15 = 0 MEANS FUNCTION COMPLETE, NO ERRORS 00067000
- * GPR 15 = 4 MEANS AN MSS VOLUME MOUNT HAS BEEN 00068000
- * SCHEDULED, BUT IS NOT YET COMPLETE. 00069000
- * AN MSSCOM BLOCK HAS BEEN CREATED AND 00070000
- * QUEUED PENDING MOUNT COMPLETE. A MESSAGE 00071000
- * HAS BEEN SENT TO THE USER STATING THAT 00072000
- * A MOUNT IS IN PROCESS 00073000
- * GPR 15 = 8 MEANS A SERIOUS ERROR OCCURRED. THE 00074000
- * REQUESTED FUNCTION WAS NOT PERFORMED 00075000
- * AND NO FURTHER ACTION WILL BE TAKEN ON 00076000
- * THE REQUEST 00077000
- * 00078000
- * OTHER EXIT CONDITIONS, UNIQUE TO A PARTICULAR SERVICE, 00079000
- * ARE DEFINED IN THE PROLOGUE TO THAT ENTRY POINT 00080000
- * 00081000
- * CALLS TO OTHER ROUTINES - 00082000
- * 00083000
- * SEE THE PROLOGUE FOR A PARTICULAR ENTRY POINT 00084000
- * 00085000
- * EXTERNAL REFERENCES - 00086000
- * 00087000
- * NONE 00088000
- * 00089000
- * NOTE THAT DMKSSS CONTAINS TWO QUEUE ANCHORS WHICH ARE 00090000
- * REFERENCED BY OTHER ROUTINES: 00091000
- * 00092000
- * DMKSSSMQ - THE ANCHOR FOR THE QUEUE OF MSSCOM BLOCKS 00093000
- * WAITING FOR MSS MOUNTS 00094000
- * 00095000
- * DMKSSSRQ - THE ANCHOR FOR THE QUEUE OF MSSCOM BLOCKS 00096000
- * WAITING TO BE PROCESSED BY THE MSS 00097000
- * COMMUNICATOR VIRTUAL MACHINE 00098000
- * 00099000
- * TABLES/WORKAREAS - 00100000
- * 00101000
- * MSSCOM 00102000
- * RDEVBLOK 00103000
- * VDEVBLOK 00104000
- * UDEVBLOK 00105000
- * IOBLOK 00106000
- * VMBLOK 00107000
- * UDEVBLOK 00108000
- * TRQBLOK 00109000
- * CPEXBLOK 00110000
- * SAVEAREA 00111000
- * PSA 00112000
- * 00113000
- * REGISTER USAGE - 00114000
- * 00115000
- * GPR 11 = VMBLOK BASE 00116000
- * GPR 12 = DMKSSS BASE 00117000
- * GPR 13 = SAVEAREA BASE 00118000
- * GPR 15 = RETURN CODE 00119000
- * 00120000
- * THE USAGE OF THE OTHER REGISTERS DEPENDS UPON THE ENTRY 00121000
- * POINT. SEE THE PROLOGUE FOR THE SPECIFIC ENTRY 00122000
- * 00123000
- EJECT 00124000
- COPY OPTIONS @V60B6B8 00125000
- COPY LOCAL @V60B6B8 00126000
- EJECT 00127000
- DMKSSS CSECT @V60B6B8 00128000
- DC CL8'DMKSSS' @V60B6B8 00129000
- SPACE 3 00130000
- USING PSA,R0 MAP FOR LOW CORE @V60B6B8 00131000
- USING VMBLOK,R11 PRIME VM CONTROL BLOCK @V60B6B8 00132000
- USING SAVEAREA,R13 REG SAVE AREA AND WORK AREA @V60B6B8 00133000
- ENTRY DMKSSSMQ @V60B6B8 00135000
- ENTRY DMKSSSVM @V60B6B8 00136000
- EXTRN DMKSCNVU,DMKSCNVS,DMKSCNAU @V60B6B8 00137000
- EXTRN DMKSCNRU @V60B6B8 00139000
- EXTRN DMKSCNRD @VA09305 00139100
- EXTRN DMKERMSG @V60B6B8 00140000
- EXTRN DMKSTKCP @V60B6B8 00141000
- EXTRN DMKCVTBH @V60B6B8 00142000
- EXTRN DMKSTKIO 00143500
- EJECT 00144000
- * 00145000
- * 00146000
- * DMKSSSL1 ENTRY POINT 00147000
- * 00148000
- * 00149000
- * ENTRY CONDITIONS - 00150000
- * ENTRY IS VIA A CALL (SVC 8) FROM DMKLOG. AT ENTRY, THE 00151000
- * PERTINENT REGISTERS ARE: 00152000
- * GPR 9 = UDEVBLOK PTR 00153000
- * GPR 11 = VMBLOK PTR 00154000
- * GPR 12 = DMKSSSL1 ADDRESS 00155000
- * GPR 13 = SAVEAREA PTR 00156000
- * 00157000
- * EXIT CONDITIONS - 00158000
- * 00159000
- * IF GPR 15 = 0, THEN A 3330V HAS BEEN ALLOCATED TO 00160000
- * THE VIRTUAL MACHINE AND, IF THE VOLID PARAMETER 00161000
- * WAS SPECIFIED, THE VOLUME IS MOUNTED. 00162000
- * 00163000
- * IF GPR 15 = 4, THEN A 3330V HAS BEEN ALLOCATED TO 00164000
- * THE VIRTUAL MACHINE, BUT AN MSS MOUNT IS IN PROCESS 00165000
- * FOR THE VOLID. 00166000
- * 00167000
- * IF GPR 15 = 8, THEN A 3330V WAS NOT ALLOCATED. 00168000
- * 00169000
- * CALLS TO EXTERNAL ROUTINES - 00170000
- * 00171000
- * DMKSCNRU - FIND THE RDEVBLOK FOR THE VUA 00172000
- * DMKSCNVU - FIND THE VDEVBLOK FOR THE COMMUNICATOR 00173000
- * DMKFREE - GET STORAGE FOR AN MSSCOM AND CPEXBLOK 00174000
- * DMKERMSG - ISSUE MESSAGES TO THE USER 00175000
- * DMKCVTBH - CONVERT BINARY DEV ADDR TO PRINTABLE HEX 00176000
- * DMKDSPCH - DISPATCH THE NEXT ELIGIBLE USER 00177000
- * 00178000
- * OPERATION - 00179000
- * 00180000
- * 1) CALL DMKSCNRU TO FIND THE RDEVBLOK FOR THE 00181000
- * REQUESTED REAL DEVICE. 00182000
- * 00183000
- * 2) IF THE REAL DEVICE IS AVAILABLE, BUT A DIFFERENT 00184000
- * VOLUME IS MOUNTED ON IT, DEMOUNT THE VOLUME. 00185000
- * 00186000
- * 3) IF A 'VOLID' WAS SPECIFIED, ALL 3330V'S ARE CHECKED. 00187000
- * IF THE VOLUME IS MOUNTED ON A DIFFERENT VUA, BUT 00188000
- * AVAILABLE, IT IS DEMOUNTED. 00189000
- * 00190000
- * 4) AN MSSCOM IS BUILT AND QUEUED TO MOUNT THE 'VOLID'. 00191000
- * 00192000
- * 5) ONCE THE MOUNT REQUEST HAS BEEN QUEUED, EXIT 00193000
- * TO THE DISPATCHER, PENDING DMKMSS PROCESSING THE MOUNT. 00194000
- * 00195000
- * 6) AFTER THE MOUNT REQUEST HAS BEEN ACCEPTED BY 00196000
- * THE MSS, CONTROL IS GIVEN TO DMKSSSHV, WHICH IN TURN 00197000
- * RETURNS TO THE DMKSSSL1 CALLER WITH A RETURN CODE 4. 00198000
- * 00199000
- SPACE 3 00200000
- DMKSSSL1 RELOC @V60B6B8 00201000
- USING UDEVBLOK,R9 SET BY DMKLOG @V60B6B8 00202000
- L R15,LOGADDR RETURN ADDR AFTER VOLUME MNTED @V60B6B8 00203000
- ST R15,SAVRETAD SAVE FOR MSSCOM BUILD ROUTINE @V60B6B8 00204000
- SR R15,R15 CLEAR THE POTENTIAL RET CODE @V60B6B8 00205000
- LH R1,UDEVLINK 'RADDR' PARM IF SUPPLIED @V60B6B8 00206000
- LTR R1,R1 WAS IT SUPPLIED @V60B6B8 00207000
- BNM CALLALLC THERE IS ONE GO GET BLK @VA11411 00208010
- DISASTER EQU * UNCORRECTABLE ERROR @V60B6B8 00209000
- LA R15,RCERROR RETURN CODE @V60B6B8 00210000
- GOODEXIT EQU * RETURN TO THE CALLER @V60B6B8 00211000
- LR R0,R15 PRESERVE RETURN CODE @V60B6B8 00212000
- LM R1,R11,SAVER1 CALLER'S REGS @V60B6B8 00213000
- SVC 12 AND INVOKE RETURN @V60B6B8 00214000
- CALLALLC EQU * TRY TO ALLOCATE A VIRTUAL 3330V @V60B6B8 00215000
- * 00216000
- * AT THIS POINT GPR 1 CONTAINS THE RADDR SPECIFIED 00217000
- * CALL DMKSCNRU TO FIND THE RDEVBLOK 00218000
- * 00219000
- CALL DMKSCNRU FIND THE RDEVBLOK FOR THE RADDR @V60B6B8 00220000
- BNE EMSG072 INVALID RADDR @VMI2020 00221000
- USING RDEVBLOK,R8 GPR 8 SET BY SCAN @V60B6B8 00222000
- * 00223000
- * THE RADDR IS VALID. NOW SEE IF IT IS A 3330V, 00224000
- * TYPE VIRTUAL, AND AVAILABLE 00225000
- * 00226000
- CLI RDEVTYPC,CLASDASD IT MUST BE A DASD DEVICE @V60B6B8 00227000
- BNE EMSG072 INVALID RADDR @VMI2020 00228000
- CLI RDEVTYPE,TYP3330 IT MUST BE A 3330 DASD @V60B6B8 00229000
- BNE EMSG072 INVALID RADDR @VMI2020 00230000
- TM RDEVFTR,VIRTUAL IT MUST BE VIRTUAL, NOT SYSVIRT @V60B6B8 00231000
- BZ EMSG072 INVALID RADDR @VMI2020 00232000
- TM RDEVSTAT,RDEVDISA+RDEVDED IS IT OFFLINE OR @V60B6B8 00233000
- * DEDICATED 00234000
- BNZ EMSG072 NOT AVAILABLE @VMI2020 00235000
- CLC RDEVSER,BLANKS IS A VOLUME MOUNTED? @VA11939 00236100
- BE DOALLC NO, GO ALLOCATE @VA11939 00236600
- * 00238000
- * A VOLUME IS MOUNTED ON THE REAL DEVICE BUT IS NOT IN 00239000
- * USE. CALL THE DEMOUNT SUBROUTINE IF THE MOUNTED 00240000
- * VOLUME IS NOT THE ONE REQUIRED. 00241000
- * 00242000
- CLC UDEVVSER(6),RDEVSER IS THE REQUIRED VOLUME @V60B6B8 00243000
- * MOUNTED 00244000
- BE DOALLC YES, ALLOCATE THE RDEVICE @V60B6B8 00245000
- ST R8,RDEVDEMT STORE RDEVBLOK FOR DEMOUNT @VA11436 00246010
- BAL R14,DEMOUNTV GO TO DO DEMOUNT @VA11436 00246020
- * 00250000
- * THE RDEVICE IS NOW AVAILABLE TO THE REQUESTOR AND 00251000
- * HAS BEEN VERIFIED AS THE CORRECT TYPE 00252000
- * 00253000
- DOALLC EQU * DEDICATE THE RDEVICE TO THE @V60B6B8 00254000
- * CALLER 00255000
- ST R11,RDEVUSER PUT USER VMBLOK ADDR IN RDEVBLOK @V60B6B8 00256000
- MVC RDEVATT(2),UDEVADD ATTACHED VIRTUAL ADDR @V60B6B8 00257000
- CLC UDEVVSER(6),BLANKS DID USER GIVE VOLSER @V60B6B8 00258000
- BNE CHKMOUNT YES, SEE IF ALREADY MOUNTED @V60B6B8 00259000
- SETRC0 EQU * MISSION ACCOMPLISHED @V60B6B8 00260000
- SR R15,R15 SET R15 RET CODE = 0 @V60B6B8 00261000
- B GOODEXIT AND RETURN @V60B6B8 00262000
- * 00263000
- * THE USER SPECIFIED A VOLID. IF IT IS ALREADY MOUNTED 00264000
- * ON THE SPECIFIED DEVICE, RETURN 00265000
- * 00266000
- CHKMOUNT EQU * TEST FOR VOLUME MOUNTED @V60B6B8 00267000
- CLC UDEVVSER(6),RDEVSER IS NEEDED VOLUME MOUNTED @V60B6B8 00268000
- BE SETRC0 YES, WE ARE DONE @V60B6B8 00269000
- * 00270000
- * THERE IS NOW A REAL DEVICE ALLOCATED FOR THIS REQUEST. 00271000
- * THE USER HAS REQUESTED A SPECIFIC VOLUME ON THE DEVICE. 00272000
- * FIRST SCAN THE RDEVBLOKS TO SEE IF THE VOLUME IS MOUNTED 00273000
- * ON ANOTHER DEVICE. 00274000
- * 00275000
- SCNVOL EQU * @V60B6B8 00276000
- LA R0,VOLSERL @VMI2008 00277000
- LA R1,UDEVVSER POINT TO VOLSER NEEDED @V60B6B8 00278000
- LR R5,R8 SAVE CURRENT RDEVBLOK ADDR @V60B6B8 00279000
- CALL DMKSCNVS LOOK FOR VOLSER MOUNTED @V60B6B8 00280000
- BNZ BLDCOMMT NOT MOUNTED, PROCEED TO MOUNT @V60B6B8 00281000
- LR R8,R1 RDEVBLOK FOUND BY SCNVS @VA09909 00282100
- TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A 3330V @V60B6B8 00285000
- BZ EMSG076 NO, VOLUME CAN'T BE MSS @VMI2020 00286000
- CHKSTAT EQU * NEEDED VOLUME MOUNTED ON WRONG @V60B6B8 00287000
- * DEV 00288000
- TM RDEVSTAT,RDEVDED IS DEV DEDICATED @V60B6B8 00289000
- BO EMSG076 YES, VOLID INVALID @VMI2020 00290000
- LA R0,ZERO SET UP FOR FOLLOWING COMP INST @V60B6B8 00291000
- CH R0,RDEVLNKS ANYONE LINKED TO THE DEVICE @V60B6B8 00292000
- BNE EMSG076 YES, WE CAN'T DEMOUNT @VMI2020 00294000
- ST R8,RDEVDEMT SAVE RDEVBLOK PTR @VA09909 00295100
- BAL R14,DEMOUNTV GO TO DO DEMOUNT @VA11436 00296010
- * 00299000
- * A REQUIRED VOLUME MUST BE MOUNTED. CALL SUBROUTINES 00300000
- * TO BUILD THE CONTROL BLOCKS AND SCHEDULE THE MOUNT. 00301000
- * 00302000
- * IF ENTRY TO THIS ROUTINE IS FROM DMKSSSLN, UDEVADD WHICH 00302100
- * IS R9 POINTS TO DMKLNK'S SAVEAREA SAVEWRK5 SO THAT THE YYY 00302200
- * ADDRESS WILL BE PUT INTO WAIT UNTIL MOUNT IS COMPLETE. 00302300
- * -- THAT IS, R9 WILL NOT REALLY POINT TO THE UDEVBLOK -- 00302400
- BLDCOMMT EQU * PROCEED TO BUILD AN MSSCOM @V60B6B8 00303000
- LA R3,UDEVVSER VOLSER NEEDED @V60B6B8 00304000
- BLDCOMTA EQU * ENTRY FROM DMKSSSVA @V60B6B8 00305000
- ST R3,VSERADDR SAVE IT FOR COMBLD @V60B6B8 00306000
- ST R5,RDEVADDR SAVE RDEVBLOK ADDR @V60B6B8 00307000
- BAL R14,COMBLD GO BUILD THE MSSCOM @VA11436 00308010
- USING OSVSCOM,R10 ASSEMBLER ADDRESSABILITY @V60B6B8 00313000
- MVI MSSFLAG1,MOUNT INDICATE MOUNT REQUEST @VA09302 00314000
- LA R0,CPEXSIZE NO OF D-WORDS IN CPEXBLOK @V60B6B8 00315000
- CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00316000
- ST R1,MSSTASK1 ESTABLISH PTR IN MSSCOM BLOCK @V60B6B8 00317000
- USING CPEXBLOK,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00318000
- MVC CPEXREGS(48),SAVEREGS SAVE CALLER REGISTERS @V60B6B8 00319000
- ST R10,CPEXR3 SAVE MSSCOM ADDRESS @V60B6B8 00320000
- MVC CPEXR12(8),SAVER12 CALLER REG 12 & 13 @V60B6B8 00321000
- MVC CPEXADD(4),SAVRETAD SAVE RETURN ADDRESS @V60B6B8 00322000
- MVC CPEXMISC(L2),UDEVADD SAVE VIRT DEV ADDR @V60B6B8 00323000
- B SCHMSSC SCHEDULE AN MSSCOM @V60B6B8 00324000
- DROP R10 @V60B6B8 00325000
- DROP R1 @V60B6B8 00326000
- EJECT 00327000
- EMSG076 EQU * ISSUE ERROR MSG @VMI2020 00328000
- * 00329000
- * A REQUIRED VOLUME HAS BEEN FOUND IN USE FOR ANOTHER 00330000
- * PURPOSE. FIRST ISSUE MSG DMKSSS076E, THEN DEALLOCATE 00331100
- * THE RDEVICE WHICH HAD BEEN PREVIOUSLY FOUND AND 00332000
- * RETURN WITH RETURN CODE 8 00333000
- * 00334000
- LA R0,N6 LENGTH OF VOLID @V60B6B8 00335000
- ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 00336000
- LA R1,UDEVVSER VOL SER FOR MSG INSERT @V60B6B8 00337000
- L R2,OPTION76 MESSAGE WRITER OPTIONS @VMI2020 00338000
- CALL DMKERMSG PUT OUT THE MESSAGE @V60B6B8 00339000
- DROP R8 @VA09909 00339500
- USING RDEVBLOK,R5 @V60B6B8 00340000
- MVC RDEVSER(6),BLANKS CLEAN OUT VOLID @V60B6B8 00341000
- MVC RDEVATT(2),ZEROES NO DEVICE ATTACHED @V60B6B8 00342000
- MVI RDEVSTAT,CLEAR CLEAR DEVICE STATUS @V60B6B8 00343000
- DROP R5 @V60B6B8 00344000
- B DISASTER SET RETURN CODE AND EXIT @V60B6B8 00345000
- EMSG072 EQU * PUT OUT ERROR MSG @VMI2020 00346000
- L R2,OPTION72 MESSAGE WRITER OPTIONS @VMI2020 00347000
- CALL DMKCVTBH CONVERT ADDR TO HEX @V60B6B8 00348000
- ST R1,ADDRSAVE SAVE THE 3-DIGIT ADDR @V60B6B8 00349000
- LA R1,ADDRSAVE+1 POINT TO IT FOR MESSAGE WRITER @V60B6B8 00350000
- LA R0,L3 LENGTH OF MESSAGE INSERT @V60B6B8 00351000
- ICM R0,14,DMKSSS+3 MODULE ID FOR WRITER @V60B6B8 00352000
- CALL DMKERMSG @V60B6B8 00353000
- B DISASTER EXIT WITH PERMANENT ERROR @V60B6B8 00354000
- EJECT 00355000
- * 00356000
- * THE FOLLOWING SUBROUTINE WILL DEMOUNT A VOLUME. 00357000
- * 00358000
- * AT INPUT, RDEVDEMT CONTAINS THE ADDR OF THE 00359000
- * RDEVBLOK FROM WHICH TO DEMOUNT, DEMNTRET 00360000
- * CONTAINS THE RETURN ADDRESS OF THE CALLING 00361000
- * ROUTINE. 00362000
- * 00363000
- * ON RETURN, GPR 15 WILL BE NON-ZERO IF AN ERROR OCCURS 00364000
- * 00365000
- DEMOUNTV DS 0H @VA11436 00366010
- ST R14,DEMNTRET SAVE RETURN ADDRESS @VA11436 00366020
- L R8,RDEVDEMT GET RDEVBLOK ADDR @V60B6B8 00367000
- LA R0,RDEVSER-RDEVBLOK(R8) VOL SER ADDR @V60B6B8 00368000
- ST R0,VSERADDR SAVE ADDR OF VOLID @V60B6B8 00369000
- ST R8,RDEVADDR RDEVBLOK ADDR @V60B6B8 00370000
- USING RDEVBLOK,R8 @VA11429 00370100
- OI RDEVFLAG,RDEVSEL DEVICE SELECTED FOR DEMOUNT 00370200
- BAL R14,COMBLD GO BUILD THE MSSCOM @VA11436 00371010
- USING OSVSCOM,R10 @V60B6B8 00376000
- MVI MSSFLAG1,DEMOUNT INDICATE DEMOUNT REQUEST @VA09302 00377000
- OI MSSFLAG1,MSSSAVE INDICATE GODSPCH NOT TO RETURN @VA10862 00377100
- * THE SAVE AREA 00377200
- LA R0,CPEXSIZE SIZE OF A CPEXBLOK @V60B6B8 00378000
- CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00379000
- ST R1,MSSTASK1 POINT MSSCOM TO THE CPEXBLOK @V60B6B8 00380000
- USING CPEXBLOK,R1 @V60B6B8 00381000
- MVC CPEXADD(4),DEMNTRET RETURN ADDR AFTER DEMOUNT @V60B6B8 00382000
- STM R0,R15,CPEXREGS REGS TO DISPATCH AFTER DEMOUNT @V60B6B8 00383000
- DROP R1 @V60B6B8 00388000
- DROP R10 @V60B6B8 00389000
- EJECT 00402000
- * 00403000
- * THE FOLLOWING ROUTINE PLACES AN MSSCOM BLOCK IN THE 00404000
- * QUEUE FOR DMKMSS. A CPEXBLOK IS BUILT AND ANCHORED 00405000
- * FROM MSSTASK2. THE PURPOSE OF THIS CPEXBLOK IS TO 00406000
- * PASS CONTROL BACK TO THE CALLER OF DMKSSS WITH A 00407000
- * RETURN CODE OF 4 AFTER THE MSS HAS ACCEPTED THE MOUNT 00408000
- * REQUESTED BY THIS MSSCOM. 00409000
- * 00410000
- SCHMSSC EQU * QUEUE AN MSSCOM BLOCK @V60B6B8 00411000
- L R10,VSERADDR MSSCOM BLOCK ADDR @V60B6B8 00412000
- USING OSVSCOM,R10 @V60B6B8 00413000
- LA R0,CPEXSIZE SIZE OF A CPEXBLOK @V60B6B8 00414000
- CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00415000
- USING CPEXBLOK,R1 R1 SET BY DMKFREE @V60B6B8 00416000
- MVC CPEXADD(4),SAVERETN EXIT ADDR AFTER MNT SCHED. @V60B6B8 00417000
- MVC CPEXREGS(48),SAVEREGS OUR CALLER'S REGS @V60B6B8 00418000
- MVC CPEXR12(8),SAVER12 CALLER'S REGS 12 & 13 @V60B6B8 00419000
- ST R1,MSSTASK2 SAVE PTR IN MSSCOM @V60B6B8 00420000
- DROP R1 @V60B6B8 00421000
- * 00434000
- * TEST TO SEE IF THERE IS A PREVIOUS Q ENTRY FOR 00435000
- * THIS SAME VOLUME. IF SO, JUST CHAIN IN THE REQUEST 00436000
- * AND WAIT FOR THE MOUNT 00437000
- * 00438000
- CHKDUP1 DS 0H @VA11344 00438500
- L R1,DMKSSSMQ Q ANCHOR @V60B6B8 00439000
- CHKDUP EQU * @V60B6B8 00440000
- LTR R1,R1 TEST FOR END OF Q @V60B6B8 00441000
- BZ SETRQENT END OF Q, THIS IS FIRST REQUEST @V60B6B8 00442000
- CLC 0(6,R1),MSSSER IS VOLSER THE SAME @V60B6B8 00443000
- BE SETCHAIN YES, MERELY CHAIN THE BLOCK @V60B6B8 00444000
- L R1,MSSNEXT-OSVSCOM(R1) NEXT Q ENTRY @V60B6B8 00445000
- B CHKDUP CHK FOR DUPLICATE VOLSER @V60B6B8 00446000
- SETCHAIN EQU * PUT THIS ENTRY IN THE CHAIN @V60B6B8 00447000
- * CHECK TO SEE IF THIS IS A VALID REQUEST 00448000
- * FOR THE SAME VOLUME, OR AN ERROR 00449000
- CLC MSSFLAG1-OSVSCOM(1,R1),MSSFLAG1 SAME REQ TYPE @VA09302 00450000
- BNE CHKMORE NO - THEN CHK FOR RELINQUISH @VA11344 00451000
- TM MSSFLAG1,RELINQSH BOTH RELINQUISH REQUESTS? @VA11344 00451200
- BO NORLQSH YES - THEN THROW AWAY NEW REQUEST@VA11344 00451400
- CHAINMOR DS 0H @VA11344 00451600
- LR R3,R1 QUEUED MSSCOM ADDR @VMI2008 00452000
- LH R1,MSSVUA-OSVSCOM(R1) RDEV IN QUEUED REQ @VMI2008 00453000
- CALL DMKSCNRU FIND RDEVBLOK @VMI2008 00454000
- TM RDEVFTR-RDEVBLOK(R8),SYSVIRT+VIRTUAL @VA11344 00455000
- * THIS AN MSS VUA? @VA11344 00455500
- BZ CONFLICT NO, CAN NOT ALLOW DUPLICATE @VMI2008 00456000
- LH R1,MSSVUA RDEV THIS REQ @VMI2008 00457000
- CALL DMKSCNRU FIND RDEVBLOK @VMI2008 00458000
- TM RDEVFTR-RDEVBLOK(R8),SYSVIRT+VIRTUAL @VA11344 00459000
- * THIS AN MSS VUA? @VA11344 00459600
- BZ CONFLICT MUST ALSO BE SYSTEM DEVICE @VMI2008 00460200
- CLC MSSVUA(2),MSSVUA-OSVSCOM(R3) SAME VUA? @VA11344 00460800
- BE SAMEVUA YES - THEN DON'T TURN OFF RDEVSEL@VA11344 00461400
- NI RDEVFLAG-RDEVBLOK(R8),FULL-RDEVSEL @VMI2008 00462000
- SAMEVUA DS 0H @VA11344 00462300
- MVC MSSVUA(2),MSSVUA-OSVSCOM(R3) SAME RDEV @VMI2008 00462600
- LR R1,R3 ADDR QUEUED MSSCOM @VMI2008 00463000
- MVC MSSFLAG2(1),MSSFLAG2-OSVSCOM(R1) @VA11135 00464100
- MVC MSSNEXT(4),MSSNEXT-OSVSCOM(R1) PREVIOUS BLOCK @V60B6B8 00465000
- * CHAIN 00466000
- ST R10,MSSNEXT-OSVSCOM(R1) CHAIN IN THIS BLOCK @V60B6B8 00467000
- B SETUP078 SET UP MSG 078 @VMI2020 00468000
- CHKMORE DS 0H @VA11344 00468070
- TM MSSFLAG1-OSVSCOM(R1),RELINQSH IS OLD REQUEST A @VA11344 00468140
- * RELINQUISH REQUEST? 00468210
- BNO CONFLICT NO - THEN STRANGE SEQUENCE OF @VA11344 00468280
- * REQUESTS INDEED!! 00468350
- B CHAINMOR ELSE CHAIN NEW REQ AFTER OLD @VA11344 00468420
- NORLQSH DS 0H @VA11344 00468490
- LR R1,R10 GET MSSCOM ADDR FOR FRET @VA11344 00468560
- LA R0,MSSSIZE GET SIZE OF MSSCOM FOR FRET @VA11344 00468630
- CALL DMKFRET GET RID OF DUPLICATE RELINQUISH @VA11344 00468700
- * REQUEST 00468770
- B SSSRLEND RETURN TO CALLER @VA11344 00468840
- * 00469000
- * TWO CONFLICTING REQUESTS HAVE BEEN MADE 00470000
- * FOR THE SAME VOLUME. REJECT THE LATEST REQUEST 00471000
- * 00472000
- CONFLICT EQU * @VMI2008 00473000
- LA R0,VOLSERL 6 BYTE VOL SER @VMI2008 00474000
- ICM R0,14,DMKSSS+3 MODULE ID @VMI2008 00475000
- LA R1,MSSSER VOL SER BEING REJECTED @VMI2008 00476000
- L R2,OPTION75 MESSAGE WRITER OPTIONS @VMI2020 00477000
- CALL DMKERMSG WRITE MSG TO USER @VMI2008 00478000
- TROUBS DS 0H HERE FOR NO SERVER OR BAD DEVICE @VA11436 00478010
- L R1,MSSTASK1 CPEXBLOK ADDR @VMI2008 00479000
- LA R0,CPEXSIZE CPEXBLOK SIZE @VMI2008 00480000
- LTR R1,R1 IS THERE AN EXBLOK @VMI2008 00481000
- BZ NOTSK1 NO @VMI2008 00482000
- CALL DMKFRET RETURN MEMORY TO SYSTEM @VMI2008 00483000
- NOTSK1 EQU * @VMI2008 00484000
- L R1,MSSTASK2 CPEXBLOK ADDR @VMI2008 00485000
- LA R0,CPEXSIZE CPEXBLOK SIZE @VMI2008 00486000
- LTR R1,R1 IS THERE AN EXBLOK @VMI2008 00487000
- BZ NOTSK2 NO @VMI2008 00488000
- CALL DMKFRET @VMI2008 00489000
- NOTSK2 DS 0H @VA11436 00490010
- ICM R1,15,DMKSSSMQ GET THE ANCHOR @VA11436 00490020
- BZ DISASTER WE SHOULDNT FIND THIS ANYWAY @VA11436 00490030
- CR R1,R10 WE THE FIRST ONE IN THE QUEUE @VA11436 00490040
- BNE GETRID3 NO CHECK THE REST @VA11436 00490050
- MVC DMKSSSMQ,MSSNEXT-OSVSCOM(R1) TAKE IT OUT @VA11436 00490060
- B GETRID4 AND FRET IT @VA11436 00490070
- GETRID2 DS 0H @VA11436 00490080
- CR R1,R10 IS THIS THE ONE WE PROCESSIN @VA11436 00490090
- BE GETRID YES GET RID OF IT @VA11436 00490100
- GETRID3 DS 0H @VA11436 00490110
- LR R0,R1 SAVE BACKWARD POINTER @VA11436 00490120
- ICM R1,15,MSSNEXT-OSVSCOM(R1) GET THE NEXT ONE @VA11436 00490130
- BZ DISASTER WE SHOULDNT FIND IT THIS WAY @VA11436 00490140
- B GETRID2 GO SEE IF THIS IS THE ONE @VA11436 00490150
- GETRID DS 0H @VA11436 00490160
- MVC MSSNEXT-OSVSCOM(R0),MSSNEXT-OSVSCOM(R1) DECHAIN @VA11436 00490170
- GETRID4 DS 0H 00490180
- LR R1,R10 CURRENT MSSCOM ADDR @VMI2008 00491000
- LA R0,MSSSIZE SIZE OF MSSCOM @VMI2008 00492000
- CALL DMKFRET RETURN CORE @VMI2008 00493000
- B DISASTER SET ERROR RET CODE, RETURN @VMI2008 00494000
- SETUP078 EQU * @VMI2020 00495000
- MVC MSSTASKD(4),MSSTASK2 SAVE CPEXBLOK PTR @VA09302 00496000
- XC MSSTASK2(4),MSSTASK2 INDICATE NO EXBLOK @VMI2008 00497000
- TM MSSFLAG2,MQENT @VA11135 00497100
- BZ GODSPCH1 @VA11135 00497200
- L R1,MSSTASKD CPEXBLOK PTR @VA11135 00497300
- LA R0,CPEXSIZE SIZE OF THE BLOCK @VA11135 00497400
- CALL DMKFRET RELEAS THE STORAGE @VA11135 00497500
- XC MSSTASKD(4),MSSTASKD CLEAR THE PTR @VA11135 00497600
- OI MSSFLAG2,MSGPROC INDICATE MSG WTR IN PROCESS @VA09302 00498000
- LA R0,VOLSERL 6 BYTE VOL SER @VMI2008 00499000
- ICM R0,14,DMKSSS+3 MODULE ID @VMI2021 00500000
- LA R1,MSSSER VOL SER @VMI2008 00501000
- L R2,OPTION78 MSG WRITER OPTIONS @VMI2020 00502000
- CALL DMKERMSG WRITE MSG 088 @VMI2008 00503000
- LA R0,RC4 RET CODE = MOUNT IN PROCESS @VMI2008 00504000
- TSK1FIN EQU * @VMI2008 00505000
- LR R1,R10 SET MSSCOM ADDR FOR CALLER @VMI2008 00506000
- LM R2,R11,SAVER2 CALLER'S REGS @VMI2008 00507000
- SVC 12 @VMI2008 00508000
- SETRQENT EQU * @V60B6B8 00509000
- OI MSSFLAG2,RQENT INDICATE WAITING FOR DMKMSS @VA09302 00510000
- MVC MSSNEXT(4),DMKSSSMQ @VMI2003 00511000
- ST R10,DMKSSSMQ @VMI2003 00512000
- * NOW SEE IF THE COMMUN IS ACTIVE 00513000
- LR R1,R10 NOW SET UP R1 AS THE START @VA11436 00514010
- TESTENDA DS 0H @VA11436 00514020
- TM MSSFLAG2-OSVSCOM(R1),INPROC THIS BLOK IN @VA09302 00518000
- * PROCESS 00519000
- BO GODSPCH YES, DON'T GENERATE ATTN @V60B6B8 00520000
- ICM R1,15,MSSNEXT-OSVSCOM(R1) GET THE NEXT POINTER @VA11436 00521010
- BNZ TESTENDA IF THERE IS ONE DO IT SOMEMORE @VA11436 00521020
- * 00534000
- * NOW GENERATE AN ATTENTION ON THE COMMUNICATION 00535000
- * MACHINES COMMUNICATIONS DEVICE. 00536000
- * 00537000
- GENATTN DS 0H @VA11436 00538010
- LR R3,R11 SAVE THIS GUYS VMBLOK @VA11436 00538020
- ICM R11,15,COMMVMAD IS THIS SERVER STILL HERE @VA11436 00538030
- BZ EMSG071 PERHAPS THE AP LOGGED HIM OFF @VA11436 00538040
- L R1,COMMADDR COMMUNICATOR DEVICE ADDR @V60B6B8 00541000
- CALL DMKSCNVU GET COMMUNICATORS VDEVBLOK @V60B6B8 00542000
- BZ GOTCOMDV YES, FOUND IT @V60B6B8 00543000
- LR R11,R3 RESET VMBLOK POINTER @V60B6B8 00544000
- B EMSG071 PUT OUT ERROR MSG @VMI2020 00545000
- GOTCOMDV EQU * GOT COMMUNICATIONS DEVICE @V60B6B8 00546000
- USING VDEVBLOK,R8 GPR 8 SET BY DMKSCN @V60B6B8 00547000
- OI VDEVINTS,ATTN SET ATTENTION PENDING @V60B6B8 00548000
- OI VDEVSTAT,VDEVPEND SET INTERRUPT PENDING @V60B6B8 00549000
- OI VMPEND,VMIOPND SET I/O PENDING IN VMBLOK @V60B6B8 00550000
- LH R4,VDEVADD DEVICE ADDR @V60B6B8 00551000
- L R5,INTMASKS INTERRUPT MASK ADDR @V60B6B8 00552000
- AR R4,R4 DEV ADDR BY 2 - WIDTH OF MASK @V60B6B8 00553000
- * TABLE 00554000
- AR R4,R5 SLOT IN INT MASK TABLE @V60B6B8 00555000
- OC VCUDVINT-VCUBLOK(2,R7),0(R4) PUT DEV INT IN CU @V60B6B8 00556000
- LH R4,VCUADD-VCUBLOK(R7) CU ADDR @V60B6B8 00557000
- SRL R4,3 DIVIDE BY 8 @VA10370 00558000
- * ENTRY 00559000
- AR R4,R5 SLOT IN MASK TABLE @V60B6B8 00560000
- OC VCHCUINT-VCHBLOK(2,R6),0(R4) PUT CU INT IN CH @V60B6B8 00561000
- LH R4,VCHADD-VCHBLOK(R6) CH ADDR @V60B6B8 00562000
- SRL R4,7 DIVIDE BY 128 @VA10370 00563000
- AR R4,R5 SLOT IN MASK TABLE @V60B6B8 00564000
- OC VMIOINT(2),0(R4) PUT CH INT IN VMBLOK @V60B6B8 00565000
- LR R1,R11 GET COMM VMBLOK @VA11573 00566100
- LR R11,R3 GET CURRENT VMBLOK @VA11573 00566200
- SWTCHVM @VA11573 00566300
- TM MSSFLAG1,RELINQSH RELINQUISH REQUEST @VA13058 00566350
- BZ RETSAVE NO, RETURN SAVEAREA IF NECESSARY @VA13058 00566400
- LA R0,CPEXSIZE GET CPEXBLOK @VA13058 00566450
- CALL DMKFREE ... @VA13058 00566500
- USING CPEXBLOK,R1 ... @VA13058 00566550
- XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR BLOCK @VA13058 00566600
- ST R11,CPEXR11 ADDRESS OF COMMUNICATOR VMBLOK @VA13058 00566650
- LA R2,GODSPCH1 DISPATCH COMMUNICATOR VMBLOK @VA13058 00566700
- ST R2,CPEXADD CPEXBLOK RETURN ADDRESS @VA13058 00566750
- CALL DMKSTKCP STACK CPEXBLOK @VA13058 00566800
- B SSSRLEND EXIT TO CALLER @VA13058 00566850
- DROP R1 DROP CPEXBLOK ADDRESSABILITY @VA13058 00566900
- GODSPCH EQU * @V60B6B8 00567000
- * 00568100
- * IF THE ENTRY WAS FOR A DISMOUNT AND MOUNT, THE SAVE 00568500
- * AREA WILL NOT BE RETURNED AT THIS TIME SINCE THE 00568900
- * INFORMATION WILL BE NEEDED FOR THE MOUNT REQUEST. 00569300
- * OTHERWISE WE WILL RETURN THE SAVE AREA SINCE WE ARE 00569700
- * NOT RETURNING THROUGH THE STANDARD SVC LINKAGE. 00570100
- * 00570500
- TM MSSFLAG1,RELINQSH THIS A RELINQUISH REQUEST? @VA11344 00570600
- BO SSSRLEND YES - THEN DON'T GO TO @VA11344 00570700
- * DISPATCHER; RETURN TO CALLER 00570800
- RETSAVE TM MSSFLAG1,MSSSAVE RETURN SAVE AREA NOW ? @VA13058 00570900
- BNZ GODSPCH1 NO..EXIT WITHOUT RETURNING SAVE @VA10862 00571300
- SR R0,R0 @V60B6B8 00572000
- ST R0,SAVER12 CLEAR RTN PTR IN SAVEAREA @V60B6B8 00573000
- SVC 16 CAUSE THE SAVEAREA TO BE RETURNED@V60B6B8 00574000
- GODSPCH1 EQU * @VA10862 00574100
- GOTO DMKDSPCH WAIT FOR MOUNT TO COMPLETE @V60B6B8 00575000
- DROP R10 @V60B6B8 00576000
- DROP R8 @V60B6B8 00577000
- EMSG071 EQU * PRINT MSG 071, SET RC = 8, RETURN@VMI2020 00578000
- L R2,OPTION71 MSG WRITER OPTIONS @VMI2020 00579000
- SR R1,R1 NO VARIABLE DATA @V60B6B8 00580000
- SR R0,R0 DATA LENGTH 0 @V60B6B8 00581000
- ICM R0,14,DMKSSS+3 MODULE ID 'SSS' @V60B6B8 00582000
- CALL DMKERMSG WRITE THE MESSAGE @V60B6B8 00583000
- B TROUBS GO FRET BLOKS AND RETURN @VA11436 00584010
- SPACE 00585010
- COMBLD DS 0H @VA11436 00585020
- ST R14,RETNADDR SAVE CALLERS RETURN ADDR @VA11436 00585030
- LA R0,MSSSIZE NO OF D-WORDS IN AN MSSCOM @V60B6B8 00586000
- CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00587000
- USING OSVSCOM,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00588000
- XC OSVSCOM(MSSSIZE*8),OSVSCOM CLEAR THE STORAGE @V60B6B8 00589000
- L R10,VSERADDR ADDR OF VOLSER @VA11253 00590100
- MVC MSSSER(VOLSERL),0(R10) PUT VOLSER IN MSSCOM @VA11253 00590200
- ST R1,VSERADDR SAVE MSSCOM ADDR FOR CALLER @V60B6B8 00592000
- L R10,RDEVADDR RDEVBLOK ADDR SET BY CALLER @VA11253 00593100
- SR R15,R15 @V60B6B8 00594000
- LH R15,RDEVADD-RDEVBLOK(R10) DEVICE ADDR @VA11253 00595100
- L R14,RDEVCUA-RDEVBLOK(R10) RCUBLOK ADDR @VA11253 00595200
- LH R0,RCUADD-RCUBLOK(R14) CU ADDR @V60B6B8 00597000
- OR R15,R0 CU-DEV ADDR @V60B6B8 00598000
- TM RCUTYPE-RCUBLOK(R14),RCUSUB SUBORD. CU @V60B6B8 00599000
- BZ GOTPRIME NO, THIS IS PRIME @V60B6B8 00600000
- L R14,RCUPRIME-RCUBLOK(R14) PRIME RCUBLOK @V60B6B8 00601000
- GOTPRIME EQU * GET CHANNEL ADDR @V60B6B8 00602000
- L R14,RCUCHA-RCUBLOK(R14) CHBLOK ADDR @V60B6B8 00603000
- LH R0,RCHADD-RCHBLOK(R14) CH ADDR @V60B6B8 00604000
- OR R15,R0 CH-CU-DEV @V60B6B8 00605000
- STH R15,MSSVUA INTO MSSCOM @V60B6B8 00606000
- MVC MSSUSER(8),VMUSER USERID INTO MSSCOM @V60B6B8 00607000
- LR R10,R1 SET UP R10 FOR THE CALLER @VA11436 00607010
- SR R15,R15 @V60B6B8 00608000
- L R14,RETNADDR RETURN ADDR SET BY CALLER @V60B6B8 00609000
- BR R14 RETURN TO CALLER @V60B6B8 00610000
- DROP R1 @V60B6B8 00611000
- EJECT 00612000
- * 00613000
- * 00614000
- * ENTRY POINT DMKSSSL2 00615000
- * 00616000
- * 00617000
- * ENTRY CONDITIONS - 00618000
- * 00619000
- * GPR 9 = UDEVBLOK PTR 00620000
- * GPR 11 = VMBLOK PTR 00621000
- * GPR 12 = DMKSSSL2 ADDR 00622000
- * GPR 13 = SAVEAREA PTR 00623000
- * 00624000
- * ENTRY IS VIA A CALL (SVC 8) FROM DMKLOG. 00625000
- * 00626000
- * EXIT CONDITIONS - 00627000
- * 00628000
- * DEFINED UNDER ENTRY POINT DMKSSSL1 00629000
- * 00630000
- * CALLS TO EXTERNAL ROUTINES - 00631000
- * 00632000
- * NONE 00633000
- * 00634000
- * OPERATION - 00635000
- * 00636000
- * 1) PICK UP THE REQUESTED REAL ADDRESS, GO TO LABEL 00637000
- * CALLALLC IN DMKSSSL1. 00638000
- * 00639000
- DMKSSSL2 RELOC @V60B6B8 00640000
- USING UDEVBLOK,R9 GPR 9 SET BY DMKLOG @V60B6B8 00641000
- LH R1,UDEVLINK 'RADDR' SPECIFIED BY USER @V60B6B8 00642000
- MVC SAVRETAD(4),LOGADDR SAVE DMKLOG RETURN ADDR @V60B6B8 00643000
- B CALLALLC GO FIND RDEVBLOK @V60B6B8 00644000
- EJECT 00645000
- * 00646000
- * 00647000
- * ENTRY POINT DMKSSSL3 00648000
- * 00649000
- * 00650000
- * ENTRY CONDITIONS - 00651000
- * 00652000
- * GPR 9 = UDEVBLOK PTR 00653000
- * GPR 11 = VMBLOK PTR 00654000
- * GPR 12 = DMKSSSL3 ADDR 00655000
- * GPR 13 = SAVEAREA PTR 00656000
- * 00657000
- * ENTRY IS VIA CALL (SVC 8) FROM DMKLOG 00658000
- * 00659000
- * EXIT CONDITIONS - 00660000
- * 00661000
- * DEFINED UNDER ENTRY POINT DMKSSSL1 00662000
- * 00663000
- * CALLS TO EXTERNAL ROUTINES - 00664000
- * 00665000
- * NONE 00666000
- * 00667000
- * 00668000
- * OPERATION - 00669000
- * 00670000
- * DMKLOG HAS FOUND A DEDICATE STATEMENT WHICH 00671000
- * CONTAINS A 'VOLID' BUT NO 'RADDR'. 00672000
- * 00673000
- * 1) FIND AN AVAILABLE 3330V WITH A FEATURE 'SYSVIRT'. 00674000
- * IF ONE CAN NOT BE FOUND, ISSUE MESSAGE 082E AND RETURN. 00675000
- * 00676000
- * 2) ENTER DMKSSSL1 ROUTINE AT LABEL SCNVOL TO SEE IF 00677000
- * 'VOLID' IS MOUNTED. 00678000
- * 00679000
- DMKSSSL3 RELOC @V60B6B8 00680000
- MVI VSERADDR,SYSVIRT INDICATE VIRTUAL 3330V NEEDED @V60B6B8 00681000
- MVC SAVRETAD(4),LOGADDR SAVE DMKLOG RETURN ADDR @V60B6B8 00682000
- LA R7,SSSL3RET LOAD OUR RETURN ADDRESS @VA10862 00683100
- B FINDRDEV TRY TO ALLOCATE AN RDEVBLOK @V60B6B8 00685000
- SSSL3RET EQU * RETURN FROM FINDRDEV @V60B6B8 00686000
- LTR R15,R15 DID HE FIND ONE @V60B6B8 00687000
- BNZ EMSG070 MESSAGE: NO DEVICES AVAIL. @VMI2020 00688000
- L R5,VSERADDR @VMI2003 00689000
- B BLDCOMMT NOW LOOK FOR VOLID @V60B6B8 00690000
- EMSG070 EQU * WRITE MSG DMKSSS070E @VMI2020 00691000
- SR R0,R0 MSG INSERT LENGTH 0 @VMI2008 00692000
- SR R1,R1 NO MSG INSERT @VMI2008 00693000
- ICM R0,14,DMKSSS+3 MODULE ID @VMI2008 00694000
- L R2,OPTION70 MSG WRITER OPTIONS @VMI2020 00695000
- CALL DMKERMSG PUT OUT MESSAGE @VMI2008 00696000
- B DISASTER RET WITH R. C. 8 @VMI2008 00697000
- EJECT 00698000
- * 00699000
- * THE FOLLOWING SUBROUTINE TRIES TO FIND AN AVAILABLE 00700000
- * RDEVBLOK OF THE CORRECT TYPE. 00701000
- * 00702000
- * ON INPUT, VSERADDR = REQUEST TYPE (VIRTUAL OR 00703000
- * SYSVIRT) AND RDEVADDR = RETURN ADDR. 00704000
- * REG 7 CONTAINS RETURN ADDRESS 00704100
- * 00705000
- * ON EXIT, IF SUCCESSFUL, GPR 15 = 0 AND VSERADDR 00706000
- * CONTAINS THE ALLOCATED RDEVBLOK ADDR. IF NOT 00707000
- * SUCCESSFUL, GPR 15 = 8. 00708000
- * 00709000
- FINDRDEV EQU * FIND A REAL DEVICE @V60B6B8 00710000
- L R5,ARIODV ADDR FIRST RDEVBLOK @V60B6B8 00711000
- L R6,ARIODC ADDR OF COUNT OF BLOCKS @V60B6B8 00712000
- LH R6,0(R6) ACTUAL COUNT OF BLOCKS @V60B6B8 00713000
- MVC RETNADDR(4),ZEROES CLEAR FOR POSSIBLE USE LATER @V60B6B8 00714000
- FRSTSCAN EQU * LOOK FOR TOTALLY FREE RDEVBLOK @V60B6B8 00715000
- USING RDEVBLOK,R5 SET ASSEMBLER ADDRESSABILITY @V60B6B8 00716000
- CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT 3330 @V60B6B8 00717000
- BNE BUMPCNT1 NO, GO BUMP INDEX COUNT @V60B6B8 00718000
- MVC VSERADDR+1(1),RDEVFTR REAL DEV FEATURE @V60B6B8 00719000
- NI VSERADDR+1,VIRTUAL+SYSVIRT TEST ONLY THESE BITS @V60B6B8 00720000
- CLC VSERADDR+1(1),VSERADDR IS RDEV WHAT HE WANTS @V60B6B8 00721000
- BNE BUMPCNT1 NO, GO BUMP THE COUNT @V60B6B8 00722000
- TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR DEDICATED @V60B6B8 00723000
- BNZ BUMPCNT1 CAN'T BE AVAILABLE @V60B6B8 00724000
- TM RDEVFLAG,RDEVSYS+RDEVOWN+RDEVSEL BELONG TO @V60B6B8 00725000
- * SYSTEM 00726000
- BNZ BUMPCNT1 YES, CAN'T BE AVAILABLE @V60B6B8 00727000
- CLI RDEVSER,X'40' IS A VOLUME MOUNTED @V60B6B8 00728000
- BE GOTFREE FOUND A FREE RDEVBLOK @V60B6B8 00729000
- ST R5,RETNADDR SAVE FOR POSSIBLE RE-ALLOCATION @V60B6B8 00730000
- BUMPCNT1 EQU * BUMP TO NEXT RDEVBLOK @V60B6B8 00731000
- LA R5,RDEVSIZE*8(R5) NEXT RDEVBLOK IN CHAIN @V60B6B8 00732000
- BCT R6,FRSTSCAN GET IT IF THERE IS ONE @V60B6B8 00733000
- L R5,RETNADDR DID WE SAVE AN ADDRESS @V60B6B8 00734000
- LTR R5,R5 POSSIBLE RDEVBLOK @V60B6B8 00735000
- BNZ REUSEVOL YES, WE CAN REUSE A BLOCK @V60B6B8 00736000
- ERRNOBLK EQU * NO RDEVBLOK AVAILABLE @V60B6B8 00737000
- LA R15,RCERROR SET RETURN CODE @V60B6B8 00738000
- RDEVEXIT EQU * NOW RETURN @V60B6B8 00739000
- BR R7 RETURN TO CALLER @VA10862 00740100
- * 00742000
- * WE HAVE AN RDEVBLOK ON WHICH A VOLUME IS MOUNTED BUT 00743000
- * NOT IN USE. DEMOUNT THE VOLUME, THEN REUSE THE BLOCK 00744000
- * 00745000
- REUSEVOL EQU * GET CURRENT VOLUME DEMOUNTED @V60B6B8 00746000
- ST R5,RDEVDEMT RDEVBLOK ADDR FOR DEMOUNT @V60B6B8 00747000
- BAL R14,DEMOUNTV GO DO THE DEMOUNT @VA11436 00748010
- * 00751000
- * THE CURRENT RDEVBLOK CAN NOW BE USED 00752000
- * 00753000
- GOTFREE EQU * WE HAVE A TOTALLY FREE RDEVBLOK @V60B6B8 00754000
- ST R5,RETNADDR SAVE RDEVBLOK ADDR @V60B6B8 00755000
- TM RDEVFTR,VIRTUAL IS THIS A VIRTUAL RDEV @V60B6B8 00756000
- BO ALLCVIRT YES @V60B6B8 00757000
- B ALLCRET GO SET UP RETURN @V60B6B8 00758000
- ALLCVIRT EQU * ALLOC VIRTUAL @V60B6B8 00759000
- ST R11,RDEVUSER POINT TO USER'S VMBLOK @V60B6B8 00760000
- MVC RDEVATT(2),UDEVADD SET VIRT DEV ADDR @V60B6B8 00761000
- ALLCRET EQU * READY TO RETURN @V60B6B8 00762000
- ST R5,VSERADDR SAVE RDEVBLOK ADDR @V60B6B8 00763000
- OI RDEVFLAG,RDEVSEL DEVICE IS SELECTED @V60B6B8 00764000
- MVC RDEVSER(6),BLANKS CLEAR THE VOL SER @V60B6B8 00765000
- SR R15,R15 SET GOOD RETURN CODE @V60B6B8 00766000
- B RDEVEXIT AND RETURN @V60B6B8 00767000
- DROP R5 @VMI2008 00768000
- EJECT 00769000
- RCERROR EQU 8 UNCORRECTABLE ERROR RET CODE @V60B6B8 00770000
- CLEAR EQU X'00' USED TO CLEAR A FLAG BYTE @V60B6B8 00771000
- EJECT 00772000
- * 00773000
- * 00774000
- * ENTRY POINT DMKSSSHV 00775000
- * 00776000
- * 00777000
- * ENTRY CONDITIONS - 00778000
- * 00779000
- * ENTRY IS FROM DMKHVC VIA A CALL (SVC 8). A VIRTUAL 00780000
- * MACHINE HAS ISSUED A DIAGNOSE INSTRUCTION WITH 00781000
- * A REQUEST CODE OF X'78'. 00782000
- * 00783000
- * GPR 5 = ADDR OF VALUE CONTAINED IN 'R1'-SET BY DMKHVC 00784000
- * GPR 6 = ADDR OF VALUE CONTAINED IN 'R2'-SET BY DMKHVC 00785000
- * GPR 11 = USER'S VMBLOK ADDR 00786000
- * GPR 12 = ADDR OF DMKSSSHV 00787000
- * GPR 13 = ADDR OF SAVEAREA 00788000
- * 00789000
- * EXIT CONDITIONS - 00790000
- * 00791000
- * CC0 - OK 00792010
- * CC1 - RC4 - SUBFUNCTION CODE IS < 0 OR > 16 00792020
- * - RC8 - SUBFUNCTION CODE IS NOT A MULTIPLE OF FOUR 00792030
- * - RC12 - ADDR EXCEPTION BRINGING IN BUFFER PAGE 00792040
- * - RC16 - ISSUER IS NOT THE USER WHO DID SUBFUNCTION 0 00792050
- * 00793000
- * CALLS TO EXTERNAL ROUTINES - 00794000
- * 00795000
- * DMKPTRAN - GET THE CALLER'S BUFFER 00796000
- * DMKFRET - RETURN STORAGE FOR CONTROL BLOCKS 00797000
- * DMKERMSG - WRITE A MESSAGE TO THE USER 00798000
- * DMKSTKCP - STACK A CPEXBLOK AFTER MSS PROCESSING 00799000
- * 00800000
- * OPERATION - 00801000
- * 00802000
- * SEE EACH SUBROUTINE FOR THE INDIVIDUAL SUBFUNCTION CODES 00803000
- * 00804000
- DMKSSSHV RELOC CALL FROM DMKHVC @V60B6B8 00805000
- * 00806000
- * THE DIAGNOSE CODE 78 SUB-FUNCTION CODE IS IN THE 00807000
- * USER'S GPR SPECIFIED AS GPR2 IN THE DIAGNOSE 00808000
- * INSTRUCTION. DMKHVC HAS POINTED OUR GPR 6 00809000
- * TO THE DATA CONTAINED IN THE VIRTUAL MACHINE'S 00810000
- * GPR 2. THE VALID SUB-FUNCTIONS ARE: 00811000
- * 00812000
- * 0 - USER IS THE COMMUNICATOR VIRT MACHINE. 00813000
- * 00814000
- * 4 - USER IS READY TO PROCESS AN MSSCOM 00815000
- * 00816000
- * 8 - USER HAS PROCESSED THE MSSCOM WITH NO ERROR 00817000
- * 00818000
- * 12 - USER HAS PROCESSED THE MSSCOM WITH AN ERROR 00819000
- * 00820000
- * 16 - COMMUNICATOR IS NO LONGER AVAILABLE 00821000
- * 00822000
- * GET THE SUB-FUNCTION CODE AND USE IT AS AN INDEX INTO 00823000
- * A BRANCH TABLE TO THE CORRECT PROCESSING ROUTINE. 00824000
- * 00825000
- TM 3(R6),X'03' CODE A MULTIPLE OF FOUR? @VA11367 00825010
- BZ MULTFOUR YES - OK @VA11367 00825020
- LA R15,RC8 GET APPROP RC @VA11367 00825030
- B BADINPUT GIVE CC1 @VA11367 00825040
- MULTFOUR DS 0H CONTINUE @VA11367 00825050
- L R7,0(R6) GET SUB-FUNCTION CODE @V60B6B8 00826000
- LTR R7,R7 TEST THE VALUE PASSED @V60B6B8 00827000
- BM BADSFID SFID CAN'T BE MINUS @V60B6B8 00828000
- LA R1,HIGHSFID HIGHEST VALID CODE @V60B6B8 00829000
- CR R7,R1 IS CURRENT OK @V60B6B8 00830000
- BH BADSFID NO, TOO HIGH @V60B6B8 00831000
- B HVCSUB(R7) GO TO PROPER SUBROUTINE @V60B6B8 00832000
- HVCSUB EQU * BRANCH TABLE @V60B6B8 00833000
- B HVC00ENT CODE 0 @V60B6B8 00834000
- B HVC04ENT CODE 4 @V60B6B8 00835000
- B HVC08ENT CODE 8 @V60B6B8 00836000
- B HVC08ENT CODE 12 - PROCESS AS 08 @V60B6B8 00837000
- B HVC16ENT CODE 16 @V60B6B8 00838000
- BADSFID EQU * @V60B6B8 00839000
- LA R15,RC4 SET RETURN CODE @V60B6B8 00840000
- BADINPUT DS 0H @VA11367 00840010
- ST R15,VMGPRS+60 SET RC FOR VIRT MACH @V60B6B8 00841000
- OI VMPSW+2,X'10' SET COND CODE 1 @V60B6B8 00842000
- B HVCEXIT AND DISPATCH VIRT MACH @V60B6B8 00843000
- BADADDR DS 0H @VA11434 00843010
- LA R15,RC12 INDICATE BAD BUFFER ADDR @VA11434 00843020
- B BADINPUT GO SET UP FOR RETURN CC1 @VA11434 00843030
- VALIDCHK EQU * @V60B6B8 00844000
- L R0,COMMVMAD COMM VIRT MACH VMBLOK @V60B6B8 00845000
- CR R0,R11 IS CURRENT USER LEGAL @V60B6B8 00846000
- BER R1 IF SAME USER RETURN @VA11367 00847010
- LA R15,RC16 INDICATE PROPER RC @VA11367 00847020
- B BADINPUT AND RETURN WITH CC1 TO PHONNIE @VA11367 00847030
- EJECT 00849000
- * 00850000
- * ENTRY SUB-FUNCTION OF ZERO 00851000
- * 00852000
- * VIRTUAL MACHINE GPR1 CONTAINS THE VIRT ADDRESS TO 00853000
- * BE USED FOR MSS COMMUNICATIONS 00854000
- * 00855000
- * OPERATION - 00856000
- * 00857000
- * 1) SAVE THE REQUIRED POINTERS TO THE COMMUNICATION 00858000
- * VIRTUAL MACHINE IN THE DMKSSS ANCHORS 00859000
- * 00860000
- HVC00ENT EQU * INITIALIZE FOR MSS COMMUNICATIONS@V60B6B8 00861000
- SR R0,R0 CLEAR REG 0 @VA11435 00862010
- CL R0,COMMVMAD IS THERE A COMM VMBLOK POINTER? @VA11435 00862020
- BNZ BADSFID ALREADY HAVE ONE @V60B6B8 00864000
- MVC COMMADDR(4),0(R5) GPR 5 SET BY DMKHVC @V60B6B8 00865000
- ST R11,COMMVMAD SAVE COMMUNICATOR VMBLOK ADDR @V60B6B8 00866000
- MVC COMMNAME(8),VMUSER SAVE VIRT MACH NAME @V60B6B8 00867000
- OI PSAMSS,MSSPRES MSS NOW ACTIVE @V60B6B8 00868000
- HVCEXIT EQU * RETURN TO DMKHVC @V60B6B8 00869000
- SR R15,R15 CLEAR RETURN CODE @V60B6B8 00870000
- EXIT AND RETURN @V60B6B8 00871000
- EJECT 00872000
- * 00873000
- * SUB-FUNCTION CODE WAS 4. THE CALLER'S GPR1 POINTS 00874000
- * TO A VIRTUAL MACHINE BUFFER INTO WHICH TO PLACE 00875000
- * AN MSSCOM BLOCK, OR A FLAG INDICATING NO MSS WORK 00876000
- * IS WAITING. 00877000
- * 00878000
- * OPERATION - 00879000
- * 00880000
- * 1) GET THE CALLER'S BUFFER ADDRESS, CALL DMKPTRAN 00881000
- * IF NECESSARY TO GET THE USER BUFFER, AND PLACE THE 00882000
- * NEXT MSSCOM IN THE USER BUFFER. 00883000
- * 00884000
- HVC04ENT EQU * SUB-FUNCTION CODE 4 @V60B6B8 00885000
- BAL R1,VALIDCHK IS USER VALID @V60B6B8 00886000
- L R1,0(R5) VIRT ADDR OF BUFFER @V60B6B8 00887000
- LR R7,R11 SAVE CALLER'S VMBLOK @V60B6B8 00888000
- L R11,COMMVMAD COMM VMBLOK @V60B6B8 00889000
- TRANS 2,1,OPT=(BRING,DEFER),ADEX=BADADDR @VA11434 00890010
- LR R11,R7 RESET BASE VMBLOK PTR @V60B6B8 00891000
- ADDROK1 EQU * REAL BUFFER ADDR IN GPR 2 @V60B6B8 00892000
- L R3,DMKSSSMQ Q OF WAITING MSSCOM BLOCKS @V60B6B8 00893000
- LTR R3,R3 IS THERE A Q @V60B6B8 00894000
- BZ QMT NO @V60B6B8 00895000
- TSTRQENT EQU * @V60B6B8 00896000
- TM MSSFLAG2-OSVSCOM(R3),RQENT IS THIS REQ WAITING @VA09302 00897000
- BO GIVEIT YES, USE IT @V60B6B8 00898000
- L R3,MSSNEXT-OSVSCOM(R3) NEXT ENTRY @V60B6B8 00899000
- LTR R3,R3 IS THERE ONE @V60B6B8 00900000
- BZ QMT NO @V60B6B8 00901000
- B TSTRQENT TEST THE NEXT ONE @V60B6B8 00902000
- GIVEIT EQU * @V60B6B8 00903000
- NI MSSFLAG2-OSVSCOM(R3),X'FF'-RQENT @VA09302 00904000
- OI MSSFLAG2-OSVSCOM(R3),INPROC @VA09302 00904100
- MVC 0(MSSSIZE*8,R2),0(R3) PUT MSSCOM BLOCK IN USER @V60B6B8 00906000
- * MACHINE 00907000
- B HVCEXIT @V60B6B8 00908000
- QMT EQU * THE DMKSSSRQ IS EMPTY @V60B6B8 00909000
- XC 0(MSSSIZE*8,R2),0(R2) CLEAR CALLER'S FLAGS @V60B6B8 00910000
- B HVCEXIT @V60B6B8 00911000
- EJECT 00912000
- * 00913000
- * THE ENTRY SUB-FUNCTION CODE WAS 08 OR 12. THE 00914000
- * CALLER'S GPR 1 POINTS TO AN MSSCOM FOR WHICH THE 00915000
- * MSS HAS COMPLETED. 00916000
- * 00917000
- * OPERATION - 00918000
- * 00919000
- * 1) GET THE CALLER'S BUFFER ADDRESS, CALL DMKPTRAN IF 00920000
- * NECESSARY, AND GET THE COMPLETED MSSCOM. 00921000
- * 00922000
- * 2) IF THERE WAS AN ERROR, THE ORIGINAL REQUESTOR 00923000
- * IS GIVEN CONTROL WITH RC = 8. 00924000
- * 00925000
- * 3) IF THE REQUEST IS FOR A MOUNT, THE BLOCK IS 00926000
- * QUEUED FROM DMKSSSMQ. 00927000
- * 00928000
- * 4) CONTROL IS RETURNED TO THE ORIGINAL REQUESTOR. 00929000
- * 00930000
- HVC08ENT EQU * GET THE MSSCOM @V60B6B8 00931000
- BAL R1,VALIDCHK @V60B6B8 00932000
- LR R7,R11 SAVE CALLER'S VMBLOK BASE @V60B6B8 00933000
- L R11,COMMVMAD COMMUN VMBLOK ADDR @V60B6B8 00934000
- L R1,0(R5) VIRT MACH ADDR OF MSSCOM @V60B6B8 00935000
- TRANS 2,1,OPT=(BRING,DEFER),ADEX=BADADDR @VA11434 00936010
- LR R11,R7 RESTORE GOOD VMBLOK BASE @V60B6B8 00937000
- ADDROK2 EQU * REAL ADDR OF MSSCOM NOW IN GPR 2 @V60B6B8 00938000
- USING OSVSCOM,R2 TELL THE ASSEMBLER @V60B6B8 00939000
- TM MSSFLAG1,DEMOUNT WAS THIS A DEMOUNT @VA11429 00939100
- BZ NOTDEMNT NO @VA11429 00939200
- LH R1,MSSVUA GET REAL DEVICE ADDRESS @VA11429 00939300
- CALL DMKSCNRU GET RDEVBLOK @VA11429 00939400
- LTR R8,R8 IS THERE ONE @VA11429 00939500
- BNP NOTDEMNT NO @VA11429 00939600
- USING RDEVBLOK,R8 @VA11429 00939700
- NI RDEVFLAG,X'FF'-RDEVSEL TURN OFF SELECTED FLAG @VA11429 00939800
- TM MSSFLAG1,MSSERR WAS THERE AN MSS ERROR? @VA11344 00939820
- BO NOTDEMNT YES - THEN DON'T RESET THE @VA11344 00939840
- * 'MOUNTED-BY-CP' FLAG 00939860
- NI RDEVFLAG,X'FF'-RDEVVMNT RESET 'MTD-BY-CP' FLAG @VA11344 00939880
- NOTDEMNT EQU * @VA11429 00939900
- TM MSSFLAG1,MSSERR WAS THERE AN MSS ERROR @VA09302 00940000
- BZ MNTCOM GO SEE IF IT WAS A MOUNT MSSCOM @V60B6B8 00941000
- L R1,DMKSSSMQ FIRST MSSCOM IN OUR Q @V60B6B8 00942000
- LA R3,DMKSSSMQ POINT TO ANCHOR @V60B6B8 00943000
- TESTQA EQU * @V60B6B8 00944000
- LR R8,R2 SAVE MSSCOM ADDR FROM VS @VMI2008 00945000
- CLC 0(8,R2),0(R1) IS THIS THE ONE WITH THE ERROR @V60B6B8 00946000
- BE RESETMQR YES, NOW RESET BASE REG @V60B6B8 00947000
- LA R3,MSSNEXT-OSVSCOM(R1) SAVE CHAINING PTR @V60B6B8 00948000
- L R1,MSSNEXT-OSVSCOM(R1) NEXT BLOK OUR Q @V60B6B8 00949000
- LTR R1,R1 IS THERE ONE @V60B6B8 00950000
- BZ HVCEXIT NO, ERROR ON NON-EXISTANT @V60B6B8 00951000
- B TESTQA CHECK REST OF Q @V60B6B8 00952000
- RESETMQR EQU * POINT TO REAL BLOK, NOT COPY @V60B6B8 00953000
- MVC 0(4,R3),MSSNEXT-OSVSCOM(R1) CHAIN NEXT TO @V60B6B8 00954000
- * PREVIOUS 00955000
- LR R2,R1 @V60B6B8 00956000
- L R9,0(R3) NEXT MSSCOM BLOCK IN Q @VMI2008 00957000
- L R1,MSSTASK1 ADDR OF EXBLOK FOR LNK, LOG, OR @V60B6B8 00958000
- * VDA 00959000
- TM MSSFLAG1,MSSSAVE SAVE AREA NEED TO BE RETURNED ?@VA10862 00959100
- BZ NORETURN NO..THEN BYPASS THIS @VA10862 00959150
- LR R6,R13 SAVE R13 ACROSS CALL @VA10862 00959200
- L R13,CPEXR13-CPEXBLOK(R1) LOAD SAVE AREA ADDRESS @VA10862 00959250
- * FROM DISMOUNT 00959300
- SR R0,R0 ZERO REG 0 @VA10862 00959350
- ST R0,CPEXR13-CPEXBLOK(R1) REFLECT IN CPEXR13 @VA10862 00959400
- ST R0,SAVER12 KEEP FROM UNLOCKING PAGE @VA10862 00959450
- SVC 16 AND RETURN IT @VA10862 00959500
- LR R13,R6 RESTORE SAVE AREA POINTER @VA10862 00959550
- NORETURN EQU * @VA10862 00959600
- LA R0,CPEXSIZE EXBLOK SIZE @V60B6B8 00960000
- CALL DMKFRET RETURN BLOCK - NEVER BE @V60B6B8 00961000
- * DISPATCHED 00962000
- LA R0,8 LENGTH OF USERID @V60B6B8 00963000
- LA R1,MSSUSER MSSCOM USER @V60B6B8 00964000
- CALL DMKSCNAU SEE IF USER STILL AROUND @V60B6B8 00965000
- BC 6,NOUSER1 VMBLOK IS NO LONGER @VA11270 00966010
- LR R6,R2 SAVE MSSCOM ADDRESS FOR LATER @VMI0087 00967000
- LR R7,R11 SAVE CURRENT VMBLOK @V60B6B8 00968000
- LR R11,R1 USER TO RECEIVE MESSAGE @VMI0087 00969000
- LH R1,MSSRC-OSVSCOM(R8) REASON CODE @VA11320 00970100
- CALL DMKCVTBH CONVERT BINARY TO HEX @VA11320 00970200
- SLR R0,R0 CLEAR FOR ERM @VA11320 00970300
- ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 00971000
- L R2,OPTION73 MSG WRITER OPTIONS @VMI2020 00973000
- CALL DMKERMSG @V60B6B8 00974000
- LR R11,R7 RESTORE PREVIOUS VMBLOK @V60B6B8 00975000
- LR R2,R6 RESTORE MSSCOM ADDRESS @VMI0087 00976000
- LA R15,RCERROR ERROR RETURN CODE @V60B6B8 00978000
- L R1,MSSTASK2 CPEXBLOK ADDRESS @VMI0087 00979000
- LTR R1,R1 IS THERE A VALID PTR @VMI2021 00980000
- BNZ STORERC YES, THIS IS INITIAL REQ @VMI2021 00981000
- L R1,MSSTASKD PTR IF DUP MOUNT REQ @VA09302 00982000
- STORERC EQU * SET UP RET CODE FOR CALLER @VMI2021 00983000
- ST R15,CPEXR0-CPEXBLOK(R1) SAVE RET CODE @VMI2021 00984000
- CALL DMKSTKCP @V60B6B8 00985000
- NOUSER2 DS 0H @VA11270 00985010
- LR R1,R2 MSSCOM ADDRESS TO R1 @VMI0087 00986000
- LA R0,MSSSIZE SIZE OF MSSCOM IN DBLWDS. @VMI0087 00987000
- CALL DMKFRET RELEASE MSSCOM @VMI0087 00988000
- LR R2,R8 VS'S MSSCOM ADDR @VMI2008 00989000
- *FIND THE RDEV AND TURN OFF RDEVSEL FLAG... 00990000
- USING RDEVBLOK,R8 TELL ASSEMBLER ... @VA09305 00990050
- L R8,ARIODV FIRST RDEVBLOK @VA09305 00990100
- L R15,ARIODC @VA11173 00990175
- LH R0,0(,R15) @VA11173 00990225
- CHKRDV EQU * @VA09305 00990250
- CALL DMKSCNRD GET THE CUU OF THIS RDEV @VA09305 00990300
- LH R15,MSSVUA GET VUA FOR MSSCOM IN ERROR @VA09305 00990350
- CR R1,R15 SAME DEVICE ADDRESS? @VA09305 00990400
- BZ FRERDV YES, GO FREE FOR FUTURE USE @VA09305 00990450
- LA R8,RDEVSIZE*8(R8) POINT NEXT RDEV @VA09305 00990500
- BCT R0,CHKRDV LOOK AT NEXT RDEV IF ONE @VA09305 00990550
- B NORDV PROBLEM, CAN'T FIND IT-CONTINUE @VA09305 00990600
- FRERDV EQU * FOUND A FREE ONE,TURN OFF FLAG @VA09305 00990650
- NI RDEVFLAG,X'FF'-RDEVSEL TURN OFF RDEVSEL FLAG @VA09305 00990700
- DROP R8 @VA09305 00990750
- NORDV EQU * CONTINUE ON ... @VA09305 00990800
- LR R1,R9 NEXT MSSCOM IN Q @VA09305 00990850
- LTR R1,R1 IS THERE ANOTHER Q ENTRY @VMI2008 00991000
- BZ HVCEXIT NO @VMI2008 00992000
- B TESTQA SEEE IF WAITING FOR SAME VOL @VMI2008 00993000
- SPACE 00993010
- NOUSER1 DS 0H HERE IF THE USER HAS DEPARTED @VA11270 00993020
- ICM R1,15,MSSTASK2 GET THE REMAINING CPEXBLOK @VA11270 00993030
- BNZ NOUSER3 WAS IT HERE @VA11270 00993040
- L R1,MSSTASKD OR WAS IT FOR A DUP @VA11270 00993050
- NOUSER3 DS 0H GOTTA GET RID OF IT ANYWAY @VA11270 00993060
- LA R0,CPEXSIZE GET THE 'HOW MUCH' BITS @VA11270 00993070
- CALL DMKFRET AND UNLOAD IT @VA11270 00993080
- B NOUSER2 NOW GO GET RID OF MSSCOM @VA11270 00993090
- SPACE 00993100
- MNTCOM EQU * @V60B6B8 00994000
- TM MSSFLAG1,MOUNT WAS IT A MOUNT REQUEST @VA09302 00995000
- BZ RETUSER NO, RETURN TO CALLER @V60B6B8 00996000
- L R1,DMKSSSMQ CURRENT ENTRY IN MOUNT Q @V60B6B8 00997000
- TESTQ EQU * @V60B6B8 00998000
- CLC 0(8,R1),0(R2) IS THIS CORRECT ONE @V60B6B8 00999000
- BE SETMQFLG YES @V60B6B8 01000000
- L R1,MSSNEXT-OSVSCOM(R1) NEXT Q ENTRY @V60B6B8 01001000
- LTR R1,R1 IS THERE ANOTHER @V60B6B8 01002000
- BZ HVCEXIT NO, NOTHING TO DO @V60B6B8 01003000
- B TESTQ CHECK THIS ONE @V60B6B8 01004000
- SETMQFLG EQU * @V60B6B8 01005000
- L R0,MSSTASK1-OSVSCOM(R1) CPEXBLOK PTR @V60B6B8 01006000
- LTR R0,R0 IS THERE ONE @V60B6B8 01007000
- BZ MNTDONE NO, MOUNT COMPLETED ALREADY @V60B6B8 01008000
- NI MSSFLAG2-OSVSCOM(R1),X'FF'-RQENT-INPROC @VA09302 01009000
- LR R3,R1 SAVE MSSCOM BLOCK ADDR @V60B6B8 01010000
- L R4,MSSTASK2-OSVSCOM(R1) CPEXBLOK ADDR @V60B6B8 01011000
- OI MSSFLAG2-OSVSCOM(R1),MQENT WAIT FOR MOUNT @VA09302 01012000
- LTR R4,R4 MOUNT PEND MSG ALREADY ISSUED? @VA09306 01012100
- BNZ MNTGO MOUNT HAS BEEN STARTED ON MSC @VA09306 01012200
- * AND IT LOOKS GOOD...BUT MOUNT STILL INCOMPLETE. 01012300
- L R4,MSSTASKD-OSVSCOM(R1) RETURN CPEXBLOK ADDR. @VA09302 01012400
- LTR R4,R4 IS THERE ONE? @VA09306 01012700
- BZ MSSNXT THIS SHOULD NEVER HAPPEN @VA09306 01012800
- XC MSSTASKD-OSVSCOM(4,R1),MSSTASKD-OSVSCOM(R1) @VA11135 01013300
- B MNTGO1 GO ISSUE MSG, RETURN @VA11135 01013450
- MNTGO XC MSSTASK2-OSVSCOM(4,R1),MSSTASK2-OSVSCOM(R1) ... @VA09306 01013500
- MNTGO1 EQU * @VA11135 01013550
- LA R0,VOLSERL LENGTH OF VOLID @V60B6B8 01014000
- ICM R0,14,DMKSSS+3 MODULE ID 'SSS' @V60B6B8 01015000
- LA R1,MSSSER VOL SER FOR MSG INSERT @V60B6B8 01016000
- L R2,OPTION78 MSG WRITER OPTIONS @VMI2020 01017000
- L R11,CPEXR11-CPEXBLOK(R4) REQUESTOR'S VMBLOK BASE@V60B6B8 01018000
- OI MSSFLAG2-OSVSCOM(R3),MSGPROC MSC PROC NOT @VA09302 01019000
- * COMPLETE 01020000
- CALL DMKERMSG PUT OUT THE MSG @V60B6B8 01021000
- * 01022000
- * STACK A CPEXBLOK FOR AN ASYNCHRONOUS RETURN 01023000
- * 01024000
- LA R15,RC4 RETURN CODE - MOUNT IN PROCESS @V60B6B8 01025000
- ST R15,CPEXR0-CPEXBLOK(R4) SET UP FOR REQUESTOR @V60B6B8 01026000
- ST R3,CPEXR1-CPEXBLOK(R4) SAVE MSSCOM ADDRESS @V60B6B8 01027000
- LR R1,R4 CPEXBLOK ADDR @V60B6B8 01028000
- CALL DMKSTKCP STACK THE CPEXBLOK @V60B6B8 01029000
- MSSNXT LR R2,R3 CURRENT MSSCOM ADDRESS @VA09306 01030000
- L R1,MSSNEXT-OSVSCOM(R3) CHAIN PTR @VMI2008 01031000
- LTR R1,R1 IS THERE ONE @VMI2008 01032000
- BZ HVCEXIT NO @VMI2008 01033000
- B TESTQ SEE IF FOR SAME VOL @VMI2008 01034000
- MNTDONE EQU * @V60B6B8 01035000
- * 01036000
- * IF THIS CODE IS ENTERED, THEN THE VOLUME MOUNT 01037000
- * HAS COMPLETED ALREADY. THE UNSOLICITED DEVICE END HAS 01038000
- * BEEN PROCESSED BY DMKDSB, AND THE REQUESTER'S ROUTINE 01039000
- * HAS BEEN DISPATCHED. 01040000
- * 01041000
- LA R3,DMKSSSMQ QUEUE OF MSSCOM BLOCKS @V60B6B8 01042000
- FINDCOMX EQU * @V60B6B8 01043000
- L R4,0(R3) ADDR OF AN MSSCOM @V60B6B8 01044000
- CR R4,R1 IS IT THE ONE WE ARE PROCESSING @V60B6B8 01045000
- BE RESETMQA YES, REMOVE CURRENT ENTRY @V60B6B8 01046000
- LA R3,MSSNEXT-OSVSCOM(R4) POINT TO NEXT CHAIN FIELD@V60B6B8 01047000
- B FINDCOMX AND CHECK IT @V60B6B8 01048000
- RESETMQA EQU * @V60B6B8 01049000
- MVC 0(4,R3),MSSNEXT-OSVSCOM(R4) RECHAIN BLOCKS @V60B6B8 01050000
- LA R0,MSSSIZE SIZE OF MSSCOM @V60B6B8 01051000
- LR R1,R4 CURRENT MSSCOM ADDRESS @V60B6B8 01052000
- CALL DMKFRET RETURN STORAGE TO SYSTEM @V60B6B8 01053000
- L R1,0(R3) NEXT MSSCOM BLOCK @VMI2008 01054000
- LTR R1,R1 IS THERE ONE @VMI2008 01055000
- BZ HVCEXIT NO @VMI2008 01056000
- B TESTQ @VMI2008 01057000
- RETUSER EQU * @V60B6B8 01058000
- L R1,DMKSSSMQ START OF OUR Q @V60B6B8 01059000
- TSTDEMQ EQU * FIND OUR Q ENTRY @V60B6B8 01060000
- CLC 0(8,R1),0(R2) IS THIS THE MATCHING ENTRY @V60B6B8 01061000
- BE DEMTQENT YES, CONTINUE DEMOUNT @V60B6B8 01062000
- L R1,MSSNEXT-OSVSCOM(R1) NEXT ENTRY @V60B6B8 01063000
- LTR R1,R1 IS THERE ONE @V60B6B8 01064000
- BZ HVCEXIT NO, THROW AWAY INTERRUPT @V60B6B8 01065000
- B TSTDEMQ CHECK IT OUT @V60B6B8 01066000
- DEMTQENT EQU * REMOVE ENTRY FROM Q @V60B6B8 01067000
- LA R3,DMKSSSMQ R3 POINTS TO CHAIN FIELD @V60B6B8 01068000
- L R4,0(R3) R4 POINTS TO AN ENTRY @V60B6B8 01069000
- REMOVQ EQU * @V60B6B8 01070000
- CR R4,R1 IS R4 THE ENTRY TO REMOVE @V60B6B8 01071000
- BE REMOVEIT YES @V60B6B8 01072000
- LA R3,MSSNEXT-OSVSCOM(R4) POINT TO CHAIN FIELD @V60B6B8 01073000
- L R4,MSSNEXT-OSVSCOM(R4) AND GET NEXT ENTRY @V60B6B8 01074000
- B REMOVQ TEST IT OUT @V60B6B8 01075000
- REMOVEIT EQU * @V60B6B8 01076000
- MVC 0(4,R3),MSSNEXT-OSVSCOM(R4) RECHAIN @V60B6B8 01077000
- TM MSSFLAG1,RELINQSH THIS A RELINQUISH REQUEST? @VA11344 01077100
- BNO NOTRLQSH NO - THEN DON'T FRET REQUEST BLOK@VA11344 01077200
- LR R1,R4 ELSE GET MSSCOM ADDR FOR FRET @VA11344 01077300
- LA R0,MSSSIZE SIZE OF MSSCOM FOR FRET @VA11344 01077400
- CALL DMKFRET FRET THE RELINQUISH REQ AFTER @VA11344 01077500
- * PROCESSING IT 01077600
- B HVCEXIT NOW RETURN TO ISSUER OF DIAG '78'@VA11344 01077700
- NOTRLQSH DS 0H @VA11344 01077800
- L R1,MSSTASK1-OSVSCOM(R1) CPEXBLOK ADDR @V60B6B8 01078000
- SR R0,R0 CLEAR FOR RET CODE @V60B6B8 01079000
- ST R0,CPEXR0-CPEXBLOK(R1) SET RET CODE FOR DEMOUNT @V60B6B8 01080000
- CALL DMKSTKCP STACK THE REQUEST @V60B6B8 01081000
- EXIT RETURN TO DMKHVC @V60B6B8 01082000
- EJECT 01091000
- HVC16ENT EQU * @V60B6B8 01092000
- * 01093000
- * 01094000
- * THE SUB-FUNCTION CODE WAS 16. THE MSS COMMUNICATOR 01095000
- * PROGRAM (DMKMSS) WILL NO LONGER BE ACTIVE. PURGE ALL 01096000
- * MSSCOM REQUESTS WHICH HAVE NOT YET BEEN PROCESSED BY 01097000
- * THE MSC. 01098000
- * 01099000
- * OPERATION - 01100000
- * 01101000
- * 1) THE QUEUE OF MSSCOM BLOCKS IN DMKSSSRQ IS 01102000
- * PROCESSED ONE AT A TIME. FOR EACH ONE, THE ORIGINAL 01103000
- * REQUESTOR IS DISPATCHED WITH A RC = 8. 01104000
- * 01105000
- BAL R1,VALIDCHK @V60B6B8 01106000
- L R4,DMKSSSMQ Q OF UNPROCESSED REQUESTS @V60B6B8 01107000
- LTR R4,R4 ARE THERE ANY @V60B6B8 01108000
- BNZ PURGCOM YES, GET ONE AT A TIME @V60B6B8 01109000
- RESETNAM EQU * CLEAR VIRT MACH NAME @V60B6B8 01110000
- XC COMMNAME(16),COMMNAME CLEAR NAME, VMBLOK, ADDR @V60B6B8 01111000
- NI PSAMSS,X'FF'-MSSPRES MSS COMM NOT ACTIVE NOW @V60B6B8 01112000
- EXIT RETURN TO DMKHVC @V60B6B8 01113000
- PURGCOM EQU * PURGE THE DMKSSSRQ @V60B6B8 01114000
- USING OSVSCOM,R4 @V60B6B8 01115000
- TM MSSFLAG2,RQENT+INPROC WAITING FOR MSC @VA09302 01116000
- BZ NOTINQ NO, NO CLEANUP @V60B6B8 01117000
- ICM R3,15,MSSTASK2 PICK UP CPEXBLOK POINTER @VA11135 01118000
- BNZ NOTSK3 DOES NOT EXIST @VA11135 01118100
- L R3,MSSTASKD SO PICK UP DUPLICATE CPEXBLOK @VA11135 01118200
- LTR R3,R3 ANYTHING THERE? @VA11344 01118225
- BZ NOTINQ NO - THEN DON'T STACK CPEXBLOK @VA11344 01118250
- NOTSK3 DS 0H @VA11135 01118300
- USING CPEXBLOK,R3 @V60B6B8 01119000
- LR R5,R11 SAVE OUR VMBLOK PTR @V60B6B8 01120000
- L R11,CPEXR11 GET USER'S VMBLOK BASE @V60B6B8 01121000
- L R2,OPTION72 MSG WRITER OPTIONS @VMI2020 01122000
- SR R1,R1 NO MSG INSERT PTR @V60B6B8 01123000
- SR R0,R0 NO MSG INSERT LENGTH @V60B6B8 01124000
- ICM R0,14,DMKSSS+3 MODULE ID FOR MSG @V60B6B8 01125000
- CALL DMKERMSG WRITE OUT THE MESSAGE @V60B6B8 01126000
- LA R15,RCERROR RETURN CODE 8 @V60B6B8 01127000
- ST R15,CPEXR0 SET FOR CALLER @V60B6B8 01128000
- LR R1,R3 CPEXBLOK ADDR @V60B6B8 01129000
- CALL DMKSTKCP STACK IT FOR THE DISPATCHER @V60B6B8 01130000
- NOTINQ EQU * @V60B6B8 01131000
- LH R1,MSSVUA @VA11709 01131100
- CALL DMKSCNRU @VA11709 01131200
- USING RDEVBLOK,R8 @VA11709 01131300
- NI RDEVFLAG,X'FF'-RDEVSEL @VA11709 01131400
- DROP R8 @VA11709 01131500
- LR R1,R4 MSSCOM ADDR @V60B6B8 01132000
- L R4,MSSNEXT NEXT MSSCOM IN CHAIN @V60B6B8 01133000
- LA R0,MSSSIZE PICK UP THE SIZE @VA11444 01134010
- CALL DMKFRET GIVE STORAGE BACK TO SYSTEM @V60B6B8 01135000
- LTR R4,R4 IS THERE ANOTHER MSSCOM @V60B6B8 01136000
- BNZ PURGCOM YES, GET RID OF IT @V60B6B8 01137000
- ST R4,DMKSSSMQ RESET ANCHOR TO ZERO @VA11103 01137010
- B RESETNAM CLEAR OUR ANCHORS, ETC. @V60B6B8 01138000
- DROP R3 @V60B6B8 01139000
- DROP R4 @V60B6B8 01140000
- EJECT 01141000
- * 01332000
- * 01333000
- * ENTRY POINT DMKSSSUS 01334000
- * 01335000
- * 01336000
- * ENTRY CONDITIONS - 01337000
- * 01338000
- * DMKSSSUS IS ENTERED VIA A CALL FROM DMKUSO. 01339000
- * AT ENTRY, THE PERTINENT REGISTERS ARE: 01340000
- * GPR 12 = DMKSSSUS ADDRESS 01341000
- * GPR 11 = VMBLOK ADDR 01342000
- * 01343000
- * EXIT CONDITIONS - 01344000
- * 01345000
- * STANDARD EXIT CONDITIONS 01346000
- * 01347000
- * CALLS TO EXTERNAL ROUTINES - 01348000
- * 01349000
- * NONE 01350000
- * 01351000
- * OPERATION - 01352000
- * 01353000
- * 1) CALL ROUTINE HVC16ENT TO PURGE ALL MSSCOM 01354000
- * REQUESTS WHICH HAVE NOT YET BEEN PROCESSED BY THE MSC. 01355000
- * 01356000
- DMKSSSUS RELOC @V60B6B8 01357000
- B HVC16ENT GO PURGE THE QUEUE @V60B6B8 01358000
- EJECT 01359000
- * 01360000
- * 01361000
- * DMKSSSLN ENTRY POINT 01362000
- * 01363000
- * 01364000
- * ENTRY CONDITIONS - 01365000
- * 01366000
- * ENTRY IS VIA A CALL (SVC 8) FROM DMKLNK. DMKLNK HAS 01367000
- * ATTEMPTED TO FIND A SYSTEM VOLUME, BUT THE CORRECT 01368000
- * ONE IS NOT CURRENTLY MOUNTED. REGISTERS AT ENTRY: 01369000
- * GPR 12 = DMKSSSLN ADDRESS 01370000
- * GPR 11 = USER'S VMBLOK ADDRESS 01371000
- * GPR 4 = UDEVBLOK ADDRESS 01372000
- * GPR 6 = YYY ADDRESS (LINKED 'AS' ADDRESS) 01372100
- * 01373000
- * EXIT CONDITIONS - 01374000
- * 01375000
- * GPR 15 = 0 MEANS VOLUME NOW MOUNTED 01376000
- * GPR 15 = 4 MEANS MSS PROCESSING VOLUME MOUNT 01377000
- * GPR 15 = 8 MEANS MSS ERROR, VOLUME CAN NOT BE MOUNTED 01378000
- * 01379000
- * CALLS TO EXTERNAL ROUTINES - 01380000
- * 01381000
- * DMKERMSG - WRITE A MESSAGE TO THE USER 01382000
- * 01383000
- * OPERATION - 01384000
- * 01385000
- * 1) GO TO SUBROUTINE FINDRDEV TO FIND AN AVAILABLE 01386000
- * SYSVIRT RDEVBLOK. IF NOT FOUND, ISSUE MESSAGE 01387000
- * DMKSSS080E AND RETURN WITH RETURN CODE 8. 01388000
- * 01389000
- * 2) WHEN AN RDEVBLOK IS ALLOCATED, GO TO ROUTINE 01390000
- * BLDCOMMT TO BUILD AND QUEUE AN MSSCOM FOR THE 01391000
- * VOLUME MOUNT. IF AN MSS ERROR IS DETECTED, 01392000
- * CONTROL IS RETURNED TO DMKLNK WITH A RETURN 01393000
- * CODE 8. IF THE MSS ACCEPTS THE MOUNT, RETURN 01394000
- * IS TO DMKLNK WITH RETURN CODE 4. 01395000
- * 01396000
- DMKSSSLN RELOC @V60B6B8 01397000
- MVI VSERADDR,SYSVIRT INDICATE WE NEED SYSVIRT DEVICE@V60B6B8 01398000
- LA R7,SSSLNDEV LOAD OUR RETURN ADDRESS @VA10862 01399000
- ST R6,SAVEWRK9 SAVE YYY ADDRESS @VA11254 01399100
- B FINDRDEV TRY TO FIND AN RDEVBLOK TO USE @V60B6B8 01401000
- SSSLNDEV EQU * RETURN FROM FINDRDEV @V60B6B8 01402000
- LTR R15,R15 DID WE GET AN RDEVICE @V60B6B8 01403000
- BZ RDEVLNOK YES @V60B6B8 01404000
- L R2,OPTION70 MSG WRITER OPTIONS @VMI2020 01405000
- SR R1,R1 NO MSG INSERTS @V60B6B8 01406000
- SR R0,R0 NO INSERT LENGTH @V60B6B8 01407000
- ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 01408000
- CALL DMKERMSG WRITE MSG TO USER @V60B6B8 01409000
- LA R0,RCERROR SET UP EXTERNAL RETURN CODE @V60B6B8 01410000
- RETLINK EQU * RETURN TO DMKLNK @V60B6B8 01411000
- LM R1,R11,SAVER1 CALLER'S REGS @V60B6B8 01412000
- SVC 12 INVOKE STANDARD EXIT SVC @V60B6B8 01413000
- RDEVLNOK EQU * FOUND AN RDEVBLOK @V60B6B8 01414000
- L R5,VSERADDR GET RDEVBLOK ADDR FROM FINDRDEV @V60B6B8 01415000
- LR R9,R4 SET UDEVBLOK BASE @V60B6B8 01416000
- LA R3,UDEVVSER VOLSER NEEDED @VA11254 01416100
- LA R9,SAVEWRK9+2 PUT YYY ADDRESS INTO R9 @VA11254 01416200
- MVC SAVRETAD(4),LNKMTRET ADDR IN DMKLNK AFTER @V60B6B8 01417000
- * MOUNT DONE 01418000
- B BLDCOMTA @VA11254 01419100
- EJECT 01420000
- * 01528000
- * 01529000
- * DMKSSSDE ENTRY POINT 01530000
- * 01531000
- * 01532000
- * ENTRY CONDITIONS - 01533000
- * 01534000
- * ENTRY IS VIA CALL (SVC 8) FROM DMKDEF OR DMKCPS. IF FROM 01535100
- * DMKDEF, THE PURPOSE IS TO DEMOUNT AN MSS VOLUME WHICH IS 01535600
- * MOUNTED, BUT NOT IN USE. THE REAL DEVICE IS GOING TO BE 01536100
- * REDEFINED SO THE VOLUME MUST BE DEMOUNTED. IF FROM DMKCPS, 01536600
- * THE PURPOSE IS TO DEMOUNT AN MSS VOLUME WHICH HAS BEEN 01537100
- * VARIED OFFLINE. ON ENTRY THE PERTINENT REGISTERS ARE: 01537600
- * GPR 12 = DMKSSSDE ADDR 01540000
- * GPR 11 = VMBLOK ADDR 01541000
- * GPR 8 = RDEVBLOK ADDR 01542000
- * 01543000
- * EXIT CONDITIONS - 01544000
- * 01545000
- * IF THE VOLUME CAN NOT BE DEMOUNTED FOR ANY REASON, SUCH 01546000
- * AS MSS NOT AVAILABLE OR MSC ERROR, THEN A MESSAGE IS 01547000
- * WRITTEN TO THE USER AND A RETURN CODE OF 8 IS PLACED 01548000
- * IN GPR 15. 01549000
- * 01550000
- * CALLS TO EXTERNAL ROUTINES - 01551000
- * 01552000
- * DMKFREE - GET STORAGE FOR A CPEXBLOK 01553000
- * DMKFRET - RETURN A CPEXBLOK 01554000
- * 01555000
- * OPERATION - 01556000
- * 01557000
- * 1) THE REQUIRED INFORMATION IS OBTAINED FROM THE 01558000
- * RDEVBLOK AND SUBROUTINE COMBLD IS CALLED TO BUILD 01559000
- * AN MSSCOM BLOCK FOR THE DEMOUNT. 01560000
- * 01561000
- * 2) A CPEXBLOK IS BUILT SO THAT OUR REGISTERS CAN BE 01562000
- * SAVED, AND SUBROUTINE SCHMSSC IS CALLED TO SCHEDULE 01563000
- * THE MSSCOM FOR DMKMSS. IF THERE ARE ANY ERRORS, A 01564000
- * MESSAGE IS WRITTEN BY SCHMSSC AND CONTROL IS RETURNED 01565000
- * TO CALLER. 01566100
- * 01567000
- * 3) AFTER THE DEMOUNT HAS BEEN PROCESSED BY THE MSC, 01568000
- * CONTROL IS GIVEN, BY DMKSSSHV, TO LABEL DEFDMT, SINCE 01569000
- * THAT ADDRESS WAS PLACED IN THE CPEXBLOK WHEN BUILT. 01570000
- * THE CODE AT DEFDMT THEN RETURNS TO DMKDEF. IF THE MSC 01571000
- * DETECTED AN ERROR DURING DEMOUNT, THEN DMKSSSHV WROTE 01572000
- * AN ERROR MESSAGE BEFORE RETURNING TO DEFDMT. 01573000
- * 01574000
- DMKSSSDE RELOC ENTRY FROM DMKDEF OR DMKCPS @VA10877 01575100
- USING RDEVBLOK,R8 SET BY CALLER @VA10877 01576100
- DROP R9 @V60B6B8 01577000
- MVC SAVRETAD(4),SAVERETN SAVE CALLER'S RTN ADDR @V60B6B8 01578000
- LA R1,RDEVSER VOLUME SER NO. @V60B6B8 01579000
- ST R1,VSERADDR SAVE ADDR FOR COMBLD @V60B6B8 01580000
- ST R8,RDEVADDR SAVE RDEVBLOK ADDR FOR COMBLD @V60B6B8 01581000
- OI RDEVFLAG,RDEVSEL @VA11429 01581100
- BAL R14,COMBLD GO BUILT THE MSSCOM @VA11436 01582010
- USING OSVSCOM,R10 TELL ASSEMBLER @V60B6B8 01587000
- MVI MSSFLAG1,DEMOUNT INDICATE DEMOUNT REQUEST @VA09302 01588000
- * 01589000
- * NOW BUILD A CPEXBLOK SO WE CAN SAVE OUR REGS ACROSS THE 01590000
- * SUBSEQUENT ASYNCHRONOUS DEMOUNT BY THE MSC. 01591000
- * 01592000
- LA R0,CPEXSIZE NO OF D-WORDS IN CPEXBLOK @V60B6B8 01593000
- CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 01594000
- USING CPEXBLOK,R1 R1 SET BY DMKFREE @V60B6B8 01595000
- ST R1,MSSTASK1 SAVE ADDR IN MSSCOM @V60B6B8 01596000
- LA R2,DEFDMT RETURN POINT ADDR @V60B6B8 01597000
- ST R2,RDEVADDR SAVE FOR SCHMSSC ALSO @V60B6B8 01598000
- MVC CPEXADD(4),SAVRETAD @V60B6B8 01599000
- MVC CPEXREGS(48),SAVEREGS @V60B6B8 01600000
- MVC CPEXR12(8),SAVER12 @V60B6B8 01601000
- B SCHMSSC PUT THE MSSCOM IN THE Q @V60B6B8 01602000
- DEFDMT EQU * RETURN FROM SCHMSSC OR DEMOUNT @V60B6B8 01603000
- GOTO DMKDSPCH WAIT FOR MSC TO PROCESS DEMOUNT @V60B6B8 01604000
- DEMTDONE EQU * @V60B6B8 01605000
- EXIT RETURN TO CALLER - GPR 15 @VA10877 01606100
- * CONTAINS THE RETURN CODE SET 01607000
- * BY DMKSSSHV OR SCHMSSC 01608000
- EJECT 01609000
- * 01610000
- * 01611000
- * DMKSSSVA ENTRY POINT 01612000
- * 01613000
- * 01614000
- * ENTRY CONDITIONS - 01615000
- * 01616000
- * ENTRY IS FROM DMDVDA VIA A CALL (SVC 8). AN MSS REAL 01617000
- * DEVICE IS BEING ATTACHED WITH THE VOLID PARAMETER. 01618000
- * ATTEMPT TO MOUNT THE VOLID ON THE DEVICE. AT ENTRY, 01619000
- * THE PERTINENT REGISTERS ARE: 01620000
- * GPR 12 = DMKSSSVA ADDR 01621000
- * GPR 11 = VMBLOK ADDR 01622000
- * GPR 8 = RDEVBLOK ADDR 01623000
- * GPR 13 = ADDR OF DMKSSS SAVEAREA 01624000
- * THE VOLID TO BE MOUNTED IS LOCATED AT FIELD ADDRSAVE 01625000
- * IN THE DMKVDA SAVE AREA. 01626000
- * 01627000
- * EXIT CONDITIONS - 01628000
- * 01629000
- * THE RETURN CODE IN GPR 15 INDICATES THE EXIT CONDITIONS. 01630000
- * GPR 15 = 0, THE VOLUME IS MOUNTED 01631000
- * GPR 15 = 4, THE MSS IS MOUNTING THE VOLUME 01632000
- * GPR 15 = 8, SERIOUS ERROR, THE VOLUME CAN NOT BE MOUNTED 01633000
- * 01634000
- * CALLS TO EXTERNAL ROUTINES - 01635000
- * 01636000
- * DMKERMSG - WRITE A MESSAGE TO THE USER 01637000
- * DMKSSSDE - DEMOUNT A VIRTUAL VOLUME 01638000
- * 01639000
- * OPERATION - 01640000
- * 01641000
- * 1) GET THE VOLID PARAMETER AS PASSED BY DMKVDA. ENSURE 01642000
- * THAT THE VOLUME IS NOT IN USE ON SOME OTHER DEVICE AND 01643000
- * THAT THIS REAL DEVICE IS AVAILABLE. 01644000
- * 01645000
- * 2) IF THE VOLUME IS MOUNTED ON ANOTHER DEVICE, BUT 01646000
- * NOT IN USE, CAUSE IT TO BE DEMOUNTED. IF THERE IS 01647000
- * A VOLUME MOUNTED ON THIS DEVICE, BUT THE DEVICE IS 01648000
- * OTHERWISE AVAILABLE, DEMOUNT THE VOLUME. 01649000
- * 01650000
- * 3) REQUEST A VOLUME MOUNT FROM THE MSC FOR THIS VOLUME. 01651000
- * WHEN THE MSC HAS ACCEPTED THE MOUNT REQUEST, RETURN TO 01652000
- * DMKVDA WITH A RETURN CODE OF 4. 01653000
- * 01654000
- * 01655000
- DMKSSSVA RELOC ENTRY FROM DMKVDA @V60B6B8 01656000
- USING RDEVBLOK,R8 SET BY DMKVDA @V60B6B8 01657000
- MVC SAVRETAD(4),VDAS1RET RETURN ADDR AFTER MOUNT @V60B6B8 01658000
- VDABRENT EQU * BRANCH ENTRY FROM DMKSSSAS @V60B6B8 01659000
- TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR ALREADY @V60B6B8 01660000
- * DEDICATED 01661000
- BNZ MSG438 YES,NOT AVAILABLE @VA11320 01662100
- TM RDEVFLAG,RDEVSEL SELECTED FOR MOUNT @VMI2011 01663000
- BZ VDAGO1 NO, AVAILABLE @VMI2011 01664000
- MSG438 EQU * MSS DEVICE AVAILABLE @VA11320 01665100
- L R2,OPT438 MSG WRITER OPTIONS @VA11320 01665500
- SR R1,R1 NO MSG INSERT @V60B6B8 01667000
- SR R0,R0 NO INSERT LENGTH @V60B6B8 01668000
- ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 01669000
- CALL DMKERMSG WRITE THE MESSAGE @V60B6B8 01670000
- VDAERROR LA R0,RCERROR ERROR RETURN CODE @V60B6B8 01671000
- VDAEXIT EQU * RETURN TO VDA @V60B6B8 01672000
- LM R1,R11,SAVER1 CALLER'S REGS @V60B6B8 01673000
- SVC 12 STANDARD SVC RETURN @V60B6B8 01674000
- VDAGO1 EQU * CONTINUE CHECKING @V60B6B8 01675000
- LH R0,RDEVLNKS NO OF USERS LINKED @V60B6B8 01676000
- LTR R0,R0 ARE THERE ANY @V60B6B8 01677000
- BNZ VDAERROR YES, WE CAN'T USE @V60B6B8 01678000
- * 01679000
- * THE RDEVICE IS AVAILABLE, SEE IF THE VOLUME IS ALREADY 01680000
- * MOUNTED, HERE OR ELSEWHERE 01681000
- * 01682000
- CLC RDEVSER(6),0(R7) IS VOLUME MOUNTED THIS DEVICE @V60B6B8 01683000
- BNE TSTRDEVA NO, CHECK THE REST @V60B6B8 01684000
- SR R0,R0 CLEAR THE RETURN CODE @V60B6B8 01685000
- B VDAEXIT AND EXIT - VOLUME ALREADY THERE @V60B6B8 01686000
- TSTRDEVA EQU * CHECK ALL RDEVS @V60B6B8 01687000
- CLC RDEVSER,BLANKS IS A VOLUME MOUNTED? @VA11939 01688100
- BNE MUSTDEMT YES, MUST DEMOUNT IT @VA11939 01688600
- LA R0,VOLSERL @VMI2008 01690000
- LR R1,R7 POINTER TO VOLSER @V60B6B8 01691000
- L R5,ARIODV FIRST REAL DEVICE BLOCK @VMI2012 01692000
- L R1,ARIODC COUNT OF RDEVBLOKS @VMI2012 01693000
- LH R1,0(R1) ACTUAL COUNT @VMI2012 01694000
- DROP R8 @VMI2012 01695000
- USING RDEVBLOK,R5 @VMI2012 01696000
- FINDVSER EQU * LOOK FOR THIS VOLSER @VMI2012 01697000
- CLC RDEVSER(6),0(R7) MOUNTED THIS DEVICE @VMI2012 01698000
- BE CHKSTVDA YES, CHECK DEVICE STATUS @VMI2012 01699000
- BUMPDEV EQU * BUMP TO NEXT DEVICE @VMI2012 01700000
- LA R5,RDEVSIZE*8(R5) NEXT BLOCK @VMI2012 01701000
- BCT R1,FINDVSER CHECK THE VOLSER @VMI2012 01702000
- B VDAMNTA VOLUME NOT MOUNTED @VMI2012 01703000
- CHKSTVDA EQU * @VMI2012 01704000
- CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) @VMI2012 01705000
- BNE BUMPDEV NOT A 3330 VOLUME @VMI2012 01706000
- TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A 3330V @VMI2012 01707000
- BZ BUMPDEV NO, NOT A DUPLICATE @VMI2012 01708000
- TM RDEVSTAT,RDEVDISA+RDEVDED DED OR OFFLINE @VMI2012 01709000
- BNZ MSG438 CAN NOT DEMOUNT @VA11320 01710500
- TM RDEVFLAG,RDEVOWN+RDEVSYS+RDEVSEL @VMI2012 01711000
- BNZ MSG438 CP OWNED,SYSTEM OR SELECTED @VA11320 01712100
- SR R0,R0 CLEAR @VMI2012 01713000
- CH R0,RDEVLNKS ANY MINI-DISKS ALLOCATED @VMI2012 01714000
- BNE MSG438 YES,CANNOT DEMOUNT @VA11320 01715100
- DROP R5 @VMI2012 01716000
- USING RDEVBLOK,R8 @VMI2012 01717000
- B VDASER @V60B6B8 01718000
- MUSTDEMT EQU * MUST DEMOUNT A VOLUME @V60B6B8 01719000
- LR R5,R8 RDEVBLOK ADDR INTO PROPER REG @V60B6B8 01720000
- B VDASER AND GO SET UP @V60B6B8 01721000
- * 01722000
- * THE VOLUME IS NOT MOUNTED AND THE RDEVBLOK IS 01723000
- * AVAILABLE. MOUNT THE VOLUME. 01724000
- * 01725000
- VDAMNTA EQU * SET UP FOR VOLUME MOUNT @V60B6B8 01726000
- OI RDEVFLAG,RDEVSEL DEVICE SELECTED FOR MOUNT @VMI2011 01727000
- LR R5,R8 SET UP RDEVBLOK PTR @V60B6B8 01728000
- LR R3,R7 VOLSER PTR @V60B6B8 01729000
- B BLDCOMTA GO GET VOLUME MOUNTED @V60B6B8 01730000
- VDASER EQU * SET UP FOR VOLUME DEMOUNT @V60B6B8 01731000
- LR R4,R8 SAVE INPUT RDEVBLOK ADDR @V60B6B8 01732000
- LR R8,R5 RDEVBLOK FOR DEMOUNT @V60B6B8 01733000
- CALL DMKSSSDE DEMOUNT THE VOLUME @V60B6B8 01734000
- LR R8,R4 RESET INPUT RDEVBLOK ADDR @V60B6B8 01735000
- LTR R0,R0 WAS THERE A DEMOUNT ERROR @V60B6B8 01736000
- BNZ VDAERROR YES, SET RETURN CODE, EXIT @V60B6B8 01737000
- B VDAMNTA GO GET OUR VOLUME MOUNTED @V60B6B8 01738000
- EJECT 01739000
- * 01740000
- * 01741000
- * DMKSSSAS ENTRY POINT 01742000
- * 01743000
- * 01744000
- * ENTRY CONDITIONS - 01745000
- * 01746000
- * ENTRY IS FROM DMKVDA VIA A CALL (SVC 8). WE ARE 01747000
- * TRYING TO ATTACH A 3330V TO THE SYSTEM WITH A VOLID. 01748000
- * UPON ENTRY, THE PERTINENT REGISTERS ARE: 01749000
- * 01750000
- * GPR 12 = DMKSSSAS ENTRY ADDR 01751000
- * GPR 11 = VMBLOK BASE 01752000
- * GPR 8 = RDEVBLOK ADDR 01753000
- * GPR 0 = ADDR OF VOLID 01754000
- * 01755000
- * EXIT CONDITIONS - 01756000
- * 01757000
- * IF SUCCESSFUL, THE REAL DEVICE HAS BEEN ATTACHED 01758000
- * TO THE SYSTEM AND THE REQUESTED VOLUME HAS BEEN 01759000
- * MOUNTED. THE RETURN CODES ARE: 01760000
- * 01761000
- * GPR 15 = 0, SUCCESS 01762000
- * GPR 15 = 4, MSS VOLUME MOUNT IN PROCESS 01763000
- * GPR 15 = 8, SERIOUS ERROR, ATTACH CAN NOT PROCEED 01764000
- * 01765000
- * CALLS TO EXTERNAL ROUTINES - 01766000
- * 01767000
- * DMKCVTBH - CONVERT BINARY RADDR TO PRINTABLE HEX 01768000
- * DMKERMSG - WRITE A MESSAGE TO THE USER 01769000
- * 01770000
- * OPERATION - 01771000
- * 01772000
- * 1) TEST TO MAKE SURE THAT THE RDEVBLOK IS THE 01773000
- * CORRECT TYPE. IF IT IS, ENTER DMKSSSVA TO ACCOMPLISH 01774000
- * THE REQUIRED VOLUME CHECKING AND MOUNTING. 01775000
- * 01776000
- DMKSSSAS RELOC ENTRY POINT @V60B6B8 01777000
- USING RDEVBLOK,R8 SET BY DMKVDA @V60B6B8 01778000
- LR R7,R0 ADDR OF VOLID @V60B6B8 01779000
- ST R7,VSERADDR SAVE VOL SER ADDR @V60B6B8 01780000
- TM RDEVFTR,SYSVIRT CORRECT DEVICE FEATURE @V60B6B8 01781000
- BO GOSSSVA YES, GO ENTER DMKSSSVA @V60B6B8 01782000
- LA R1,RDEVADD DEVICE ADDRESSG 082E @V60B6B8 01783000
- CALL DMKCVTBH GET FORMAT FOR MESSAGE @V60B6B8 01784000
- L R2,OPTION72 MSG WRITER OPTIONS @VMI2020 01785000
- SR R0,R0 INDICATE INSERT IN GPR 1 @V60B6B8 01786000
- ICM R0,14,DMKSSS+3 MOD ID FOR MSG @V60B6B8 01787000
- CALL DMKERMSG WRITE OUT MESSAGE @V60B6B8 01788000
- LA R15,RCERROR ERROR CODE 8 @V60B6B8 01789000
- EXIT RETURN TO DMKVDA @V60B6B8 01790000
- GOSSSVA EQU * SET UP PARMS @V60B6B8 01791000
- MVC SAVRETAD(4),VDAS2RET RETURN POINT AFTER MOUNT @V60B6B8 01792000
- B VDABRENT ENTER DMKSSSVA @V60B6B8 01793000
- EJECT 01794000
- * 01795000
- * 01796000
- * DMKSSSEN ENTRY POINT 01797000
- * 01798000
- * 01799000
- * ENTRY CONDITIONS - 01800000
- * 01801000
- * ENTRY IS FROM THE DISPATCHER (DMKDSP). 01802000
- * 01803000
- * DMKDSB HAS JUST PROCESSED AN UNSOLICITED DEVICE 01804000
- * END INTERRUPT ON A 3330V. THE ADDRESS OF A CPEXBLOK 01805000
- * WAS OBTAINED FROM THE MSSCOM WHICH REPRESENTED THE 01806000
- * MOUNT REQUEST FOR THE VOLUME JUST MOUNTED. THE 01807000
- * ADDRESS OF DMKSSSEN HAD BEEN PLACED IN FIELD CPEXADD 01808000
- * OF THE CPEXBLOK. THE PERTINENT REGISTERS ARE: 01809000
- * 01810000
- * GPR 15 = ADDRESS OF DMKSSSEN 01811000
- * GPR 2 = ADDRESS OF THE CPEXBLOK WHICH REPRESENTS THE 01812000
- * TASK WHICH REQUIRED THE MOUNT. 01813000
- * 01814000
- * OPERATION - 01815000
- * 01816000
- * GENERATE A LINK TO THE ADDRESS WITHIN THE REQUESTING 01817000
- * MODULE, THEN GO TO THE DISPATCHER 01818000
- * 01819000
- ENTRY DMKSSSEN @V60B6B8 01820000
- DMKSSSEN EQU * @V60B6B8 01821000
- USING *,R15 R15 SET BY DMKDSP @V60B6B8 01822000
- SL R15,=A(DMKSSSEN-DMKSSS) BACK TO COMMON BASE @V60B6B8 01823000
- LR R12,R15 INTO CORRECT REG @V60B6B8 01824000
- DROP R15 @V60B6B8 01825000
- USING DMKSSS,R12 @V60B6B8 01826000
- USING CPEXBLOK,R2 R2 SET UP THROUGH DMKDSP @V60B6B8 01827000
- * 01828000
- * CHECK TO SEE IF THE USER IS STILL ACTIVE 01829000
- * 01830000
- DROP R10 @V60B6B8 01831000
- USING OSVSCOM,R6 @V60B6B8 01832000
- TSTUSRAC EQU * SEE IF USER IS STILL ACTIVE @V60B6B8 01833000
- LA R0,8 LENGTH OF USERID @V60B6B8 01834000
- LA R1,MSSUSER USERID FFROM INITIAL REQUEST @V60B6B8 01835000
- CALL DMKSCNAU SEE IF STILL ACTIVE @V60B6B8 01836000
- BC 4,GAVEUP NOT STILL LOGGED ON @V60B6B8 01837000
- * 01838000
- * CHECK TO SEE IF THIS DEVICE END CAME IN BEFORE NORMAL 01839000
- * DEVICE END FOR THE MSC. IF SO, RETURN TO THE ORIGINAL 01840000
- * CALLLER (LNK, LOG, VDA) AS IT THE VOLUME HAD 01841000
- * ALWAYS BEEN MOUNTED. 01842000
- * 01843000
- L R1,MSSTASK2 RETURN ADDR IF MSC COMPLETES @V60B6B8 01844000
- LTR R1,R1 IS THERE ONE @V60B6B8 01845000
- BNZ DISPTSK2 MSC HAS NOT RETURNED @VA11135 01846100
- L R1,MSSTASKD CHECK FOR DUPLICATE MOUNTS @VA11135 01846200
- LTR R1,R1 MSSTASKD SET BY THE CMS SCHMSSC @VA11135 01846300
- * ROUTINE FOR DUPLICATE MOUNTS 01846400
- BZ DSPTASK1 NOT DUPLICATE, MSC COMPLETED @VA11135 01846500
- DISPTSK2 EQU * STACK CPEXBLOK FROM MSSTASK2 @VA11135 01846600
- LR R5,R6 SAVE MSSCOM ADDR @V60B6B8 01847000
- LA R0,CPEXSIZE CPEXBLOK SIZE @V60B6B8 01848000
- L R1,MSSTASK1 RETURN CPEXBLOK WE DON'T NEED @V60B6B8 01849000
- CALL DMKFRET @V60B6B8 01850000
- XC MSSTASK1(4),MSSTASK1 INDICATE WE'VE BEEN @V60B6B8 01851000
- * THROUGH HERE 01852000
- L R1,MSSTASK2 CALLER'S NORMAL RETURN PTR @V60B6B8 01853000
- XC MSSTASK2(4),MSSTASK2 @VA11574 01853050
- LTR R1,R1 IS THERE AN MSSTASK2T @VA11135 01853100
- BNZ USETASK2 YES, STACK IT @VA11135 01853200
- L R1,MSSTASKD THIS IS A DUP MOUNT @VA11135 01853300
- XC MSSTASKD(4),MSSTASKD @VA11574 01853350
- USETASK2 EQU * @VA11135 01853400
- SR R0,R0 CLEAR CONDITION CODE @V60B6B8 01854000
- ST R0,CPEXR0-CPEXBLOK(R1) @V60B6B8 01855000
- CALL DMKSTKCP GO BACK EVENTUALLY @V60B6B8 01856000
- B MORSTK1 SEE IF ANYONE ELSE IS WAITING @V60B6B8 01857000
- DSPTASK1 EQU * @V60B6B8 01858000
- * 01859000
- * MSC HAS RETURNED PREVIOUSLY. UNCHAIN THIS MSSCOM, 01860000
- * THEN GO BACK TO THE ASYNCHRONOUS ENTRY POINT 01861000
- * IDENTIFIED IN MSSTASK1 01862000
- * 01863000
- L R1,MSSTASKD POSSIBLE CPEXBLOK PTR @VA09302 01864000
- LTR R1,R1 WAS THIS A DUP MOUNT REQ @VMI2021 01865000
- BZ NOEXBLOK NO, MSC RET ON THIS REQ @VMI2021 01866000
- LA R0,CPEXSIZE SIZE OF CPEXBLOK @VMI2021 01867000
- CALL DMKFRET FRET BLOK FOR DUP REQ @VMI2021 01868000
- NOEXBLOK EQU * @VMI2021 01869000
- TM MSSFLAG2,MSGPROC @VA09302 01870000
- BZ DSPTASK2 @VMI2003 01871000
- NI MSSFLAG2,FULL-MSGPROC @VA09302 01872000
- B RETDSPCH @VMI2003 01873000
- DSPTASK2 EQU * @VMI2003 01874000
- LA R3,DMKSSSMQ QUEUE START @V60B6B8 01875000
- FINDCOMZ EQU * @V60B6B8 01876000
- L R5,0(R3) ADDR OF AN MSSCOM @V60B6B8 01877000
- LTR R5,R5 VALIDITY CHECK @V60B6B8 01878000
- BZ RETDSPCH @V60B6B8 01879000
- CR R5,R6 IS IT THE ONE @V60B6B8 01880000
- BE RESETMQB YES, UNCHAIN IT @V60B6B8 01881000
- LA R3,MSSNEXT-OSVSCOM(R5) NEXT CHAIN PTR @V60B6B8 01882000
- B FINDCOMZ AND CHECK IT @V60B6B8 01883000
- RESETMQB EQU * @V60B6B8 01884000
- MVC 0(4,R3),MSSNEXT-OSVSCOM(R5) RESET CHAIN POINTERS@V60B6B8 01885000
- L R5,MSSNEXT CHAIN PTR @V60B6B8 01886000
- NEXTCHK EQU * @VMI2008 01887000
- LTR R5,R5 IS THERE ONE @V60B6B8 01888000
- BZ NOSTACK NO, DON'T NEED CNTRL BACK @V60B6B8 01889000
- CLC MSSSER,0(R5) @VMI2008 01890000
- BE STACKUS @VMI2008 01891000
- L R5,MSSNEXT-OSVSCOM(R5) @VMI2008 01892000
- B NEXTCHK @VMI2008 01893000
- STACKUS EQU * @VMI2008 01894000
- LR R6,R5 @VMI2008 01895000
- LR R3,R2 @VMI2008 01896000
- L R2,MSSTASK1 @VMI2008 01897000
- LA R0,CPEXSIZE CPEXBLOK SIZE @V60B6B8 01898000
- CALL DMKFREE GET AN EXBLOK @V60B6B8 01899000
- STM R0,R15,CPEXREGS-CPEXBLOK(R1) OUR REGS @V60B6B8 01900000
- LA R15,MORSTACK OUR ENTRY ADDRESS @V60B6B8 01901000
- ST R15,CPEXADD-CPEXBLOK(R1) SAVE IT @V60B6B8 01902000
- CALL DMKSTKCP @V60B6B8 01903000
- LR R2,R3 @VMI2008 01904000
- NOSTACK EQU * @V60B6B8 01905000
- L R15,CPEXADD ENTRY POINT IN LOG, LNK, OR VDA @V60B6B8 01906000
- LM R0,R11,CPEXREGS THAT ROUTINES REGS @V60B6B8 01907000
- SVC 8 LINK TO THAT ROUTINE @V60B6B8 01908000
- GOTO DMKDSPCH ALL DONE THIS REQUEST @V60B6B8 01909000
- GAVEUP EQU * @V60B6B8 01910000
- L R2,MSSTASK1 RESET R2 FOR MULTI-VOLUMES @VA09304 01910100
- LA R0,CPEXSIZE ALWAYS AN MSSTAK1 @VA09304 01910125
- LR R1,R2 CPEXBLOK ADDR MSSTASK1 @VA09304 01910150
- CALL DMKFRET FREE MSSTASK1 @VA09304 01910175
- L R2,MSSTASK2 @VA09304 01910200
- LTR R2,R2 IS THERE TASK2 CPEXBLOK? @VA09304 01910225
- BZ NO2 NO, DON'T TRY TO FREE IT @VA09304 01910250
- LA R0,CPEXSIZE @VA09304 01910275
- LR R1,R2 CPEXBLOK ADDR. MSSTASK2 @VA09304 01910300
- CALL DMKFRET FREE MSSTASK2 @VA09304 01910325
- NO2 EQU * @VA09304 01910350
- L R2,MSSTASKD @VA09304 01910375
- LTR R2,R2 IS THERE TASKD CPEXBLOK? @VA09304 01910400
- BZ NOTD NO,DON'T TRY TO FREE IT @VA09304 01910425
- LA R0,CPEXSIZE @VA09304 01910450
- LR R1,R2 CPEXBLOK ADDR. MSSTASKD @VA09304 01910475
- CALL DMKFRET FREE MSSTASKD @VA09304 01910500
- *REG 6 NOW POINTS TO THE MSSCOM FOR WHICH THE USER HAS LOGGED 01910525
- *OFF AND HIS VOLUME IS MOUNTED. TAKE THIS ONE OFF OF THE QUEUE 01910550
- *AND FRET ITS STORAGE. 01910575
- NOTD EQU * @VA09304 01910600
- L R1,DMKSSSMQ MSSCOM Q ANCHOR @VA09304 01910625
- LA R2,DMKSSSMQ POINTER ADDRESS TO NEXT BLOK @VA09304 01910650
- LTR R1,R1 SHOULDN'T EVER BE ZERO @VA09304 01910675
- BZ RETDSPCH GET OUT IF IT IS @VA09304 01910700
- CHKCOM EQU * @VA09304 01910725
- CR R6,R1 IS THIS ONE DMKDSB FOUND? @VA09304 01910750
- BE DQIT YES,TAKE IT OFF OF THE QUEUE @VA09304 01910775
- LA R2,MSSNEXT-OSVSCOM(R1) UPDATE POINTERS @VA09304 01910800
- * VMI2036 01910825
- L R1,MSSNEXT-OSVSCOM(R1) UPDATE POINTERS @VA09304 01910850
- LTR R1,R1 SHOULDN'T EVER BE ZERO @VA09304 01910875
- BZ RETDSPCH GET OUT IF IT IS @VA09304 01910900
- B CHKCOM LOOK AT THIS ONE ... @VA09304 01910925
- DQIT EQU * REMOVE IT FROM THE QUEUE @VA09304 01910950
- L R5,MSSNEXT GET POINTER TO NEXT MSSCOM @VA09304 01910975
- ST R5,0(,R2) TAKE CURRENT BLOK OUT OF QUEUE @VA09304 01911000
- *NOW ITS OUT OF THE QUEUE ... FRET THE STORAGE 01911025
- SR R3,R3 CLEAR R3 INDICATING SAME SER. @VA09304 01911050
- CLC MSSSER(6),MSSSER-OSVSCOM(R5) SAME VOL? @VA09304 01911075
- BE SAMESER YES, LEAVE R3 FLAG = ZERO @VA09304 01911100
- LA R3,1 SET FLAG INDICATING NOT = @VA09304 01911125
- SAMESER LR R1,R6 ADDR. OF DE-QUEUED MSSCOM @VA09304 01911150
- LA R0,MSSSIZE SIZE OF THE MSSCOM @VA09304 01911175
- CALL DMKFRET FREE THE STORAGE @VA09304 01911200
- LTR R5,R5 IS THERE ANOTHER Q ENTRY? @VA09304 01911225
- BZ RETDSPCH NO, RETURN TO DISPATCH @VA09304 01911250
- L R2,MSSTASK1-OSVSCOM(R5) UPDATE CPEX POINTER @VA09304 01911275
- LTR R3,R3 LOOK AT THE R3 FLAG @VA09304 01911300
- BZ ONEMORE VOLSER =, LOOK AT THE NEXT ONE @VA09304 01911325
- B MORSTK1 VOLSER NOT =, LOOK AT NEXT ENTRY @VA09304 01911350
- MORSTACK EQU * CHECK THE MSSCOM Q @V60B6B8 01917000
- DROP R12 @VA11135 01917100
- USING *,R15 @VA11135 01917150
- SL R15,=A(MORSTACK-DMKSSS) E.P. ADDRESS @VA11135 01917200
- LR R12,R15 SET ADDRESSABILITY @VA11135 01917250
- DROP R15 @VA11135 01917300
- USING DMKSSS,R12 @VA11135 01917350
- INTSTK EQU * @VA11135 01917400
- * 01918000
- * TEST FOR MORE MOUNT REQUESTS FOR THIS VOLUME 01919000
- * 01920000
- CLC MSSSER(6),MSSSER-OSVSCOM(R5) SAME VOLUME? @VA09304 01921000
- * VMI2036 01921100
- BE ONEMORE YES, GET HIM STARTED @V60B6B8 01922000
- B MORSTK1 AND CHECK THE VOLID @V60B6B8 01923000
- ONEMORE EQU * @V60B6B8 01924000
- LR R6,R5 RESET MSSCOM ADDR @V60B6B8 01925000
- B TSTUSRAC SEE IF USER STILL ACTIVE @V60B6B8 01926000
- MORSTK1 EQU * @V60B6B8 01927000
- L R5,MSSNEXT-OSVSCOM(R5) CHAIN PTR @V60B6B8 01928000
- LTR R5,R5 IS THERE ONE @V60B6B8 01929000
- BNZ INTSTK YES, CHECK VOLSER. @VA11135 01930000
- GOTO DMKDSPCH @V60B6B8 01931000
- RETDSPCH EQU * RETURN TO THE DISPATCHER @V60B6B8 01932000
- GOTO DMKDSPCH @V60B6B8 01933000
- DROP R6 @V60B6B8 01934000
- EJECT 01935000
- * 01935020
- * DMKSSSRL ENTRY POINT 01935040
- * 01935060
- * ENTRY CONDITIONS - 01935080
- * ENTRY IS FROM DMKVDR, WHICH IS IN THE PROCESS OF DETACHING 01935100
- * A VUA FROM A VIRTUAL MACHINE. ANY CHANGED CYLINDERS OF THE 01935120
- * VOLUME MOUNTED ON THAT VUA NEED TO BE WRITTEN BACK ONTO THE 01935140
- * CARTRIDGES CONTAINING THAT VOLUME. SET UP A RELINQUISH 01935160
- * REQUEST MSSCOM BLOK TO DO SO. THE PERTINENT REGISTERS ARE: 01935180
- * 01935200
- * GPR 2 = RDEVBLOK ADDRESS FOR THIS VUA 01935220
- * 01935240
- * OPERATION - 01935260
- * 1. SAVE RDEVBLOK ADDRESS AND VOLSER ADDRESS FOR COMBLD 01935280
- * ROUTINE. BAL TO COMBLD TO BUILD A SKELETON MSSCOM. 01935300
- * 01935320
- * 2. FLAG MSSCOM AS A RELINQUISH REQUEST. 01935340
- * 01935360
- * 3. BRANCH TO CHKDUP1 TO PUT THE MSSCOM ON THE MSS 01935380
- * REQUEST QUEUE (DMKSSSMQ). 01935400
- * 01935420
- * 4. RETURN TO DMKVDR AFTER QUEUEING THE RELINQUISH REQUEST. 01935440
- * 01935460
- DMKSSSRL RELOC , @VA11344 01935480
- ST R2,RDEVADDR SAVE RDEVBLOK ADDR FOR COMBLD RTN@VA11344 01935500
- LA R2,RDEVSER-RDEVBLOK(R2) POINT TO START OF VOLSER@VA11344 01935520
- ST R2,VSERADDR SAVE ADDR OF VOLSER FOR COMBLD @VA11344 01935540
- BAL R14,COMBLD GO BUILD SKELETON OF MSSCOM @VA11344 01935560
- SPACE 1 01935580
- USING OSVSCOM,R10 01935600
- SPACE 1 01935620
- OI MSSFLAG1,RELINQSH SAY THIS IS A RELINQUISH REQ@VA11344 01935640
- B CHKDUP1 STACK MSSCOM ON QUEUE @VA11344 01935660
- DROP R10 01935680
- SSSRLEND DS 0H @VA11344 01935700
- EXIT @VA11344 01935720
- EJECT 01935740
- LOGADDR DC V(DMKLOHSS) RETURN ADDR FOR L1, L2, L3 @VA09593 01936100
- INTMASKS DC V(DMKVIOMK) DEV, CU, AND CH INTERRUPT MASKS @V60B6B8 01937000
- SCHRTAD DC V(DMKSCHRT) ROUTINE TO DEQ TIMER BLOCKS @V60B6B8 01938000
- LNKMTRET DC V(DMKLNKSS) RETURN ADDRESS FOR LN @V60B6B8 01939000
- VDAS1RET DC V(DMKVDAS1) RETURN ADDRESS FOR VA @V60B6B8 01940000
- VDAS2RET DC V(DMKVDAS2) RETURN ADDRESS FOR AS @V60B6B8 01941000
- DMKSSSMQ DC F'0' ANCHOR FOR MOUNTS IN PROCESS @V60B6B8 01942000
- DS 0F MESSAGES ON FULL WORD BOUNDARY @V60B6B8 01943000
- * 01944000
- * THE FOLLOWING CONSTANTS DEFINE THE ERROR MESSAGE 01945000
- * OPTIONS. THE MESSAGES HAVE THE FORMAT DMKSSS070 TO 01946000
- * DMKSSS078. 01947000
- * 01948000
- OPTION70 DC X'80C50046' DMKSSS070E @VMI2020 01949000
- OPTION71 DC X'80C50047' DMKSSS071E @VMI2020 01950000
- OPTION72 DC X'80C50048' DMKSSS072E @VMI2020 01951000
- OPTION73 DC X'80C50049' DMKSSS073E @VMI2020 01952000
- OPT438 DC X'80C501B6' DMKSSS438E @VA11320 01952100
- OPTION75 DC X'80C5004B' DMKSSS075E @VMI2020 01954000
- OPTION76 DC X'80C5004C' DMKSSS076E @VMI2020 01955000
- OPTION78 DC X'80C9004E' DMKSSS078I @VMI2020 01956000
- DAS3330 DC AL1(CLASDASD,TYP3330) MASK FOR RDEVBLOK COMPARE @V60B6B8 01957000
- COMMNAME DC D'0' COMMUNICATOR VIRT MACH NAME @V60B6B8 01958000
- DMKSSSVM EQU COMMNAME PROPER NAMING FOR EXT REF @V60B6B8 01959000
- COMMADDR DC F'0' COMMUNICATION VIRT ADDR @V60B6B8 01960000
- COMMVMAD DC F'0' COMMUNICATOR VMBLOK ADDR @V60B6B8 01961000
- ZERO EQU 0 @V60B6B8 01967000
- L2 EQU 2 LENGTH OF 2 @V60B6B8 01968000
- L3 EQU 3 LENGTH OF 3 @V60B6B8 01969000
- RC4 EQU 4 RETURN CODE 4 @V60B6B8 01970000
- RC8 EQU 8 RETURN CODE 8 @VA11367 01970010
- RC12 EQU 12 RETURN CODE 12 @VA11367 01970020
- RC16 EQU 16 RETURN CODE 16 @VA11367 01970030
- N6 EQU 6 LENGTH OF 'VOLID' PARAMETER @V60B6B8 01972000
- FULL EQU X'FF' MASK FOR TURNING OFF FLAGS @V60B6B8 01973000
- VOLSERL EQU 6 LENGTH OF VOLSER @V60B6B8 01974000
- HIGHSFID EQU 16 HIGHEST VALID DIAGNOSE SFID @V60B6B8 01975000
- COPY SAVE @V60B6B8 01980000
- RDEVDEMT EQU SAVEWRK1 @V60B6B8 01981000
- DEMNTRET EQU SAVEWRK2 @V60B6B8 01982000
- VSERADDR EQU SAVEWRK3 @V60B6B8 01983000
- RDEVADDR EQU SAVEWRK4 @V60B6B8 01984000
- RETNADDR EQU SAVEWRK5 @V60B6B8 01985000
- ADDRSAVE EQU SAVEWRK6 @V60B6B8 01986000
- IOSRETAD EQU SAVEWRK7 @V60B6B8 01987000
- SAVRETAD EQU SAVEWRK8 @V60B6B8 01988000
- EJECT 01989000
- OSVSCOM MSSCOM @V60B6B8 01990000
- EJECT 01991000
- PSA @V60B6B8 01992000
- COPY EQU @V60B6B8 01993000
- COPY VMBLOK @V60B6B8 01994000
- COPY TIMER @V60B6B8 01995000
- COPY IOBLOKS @V60B6B8 01996000
- COPY UDIRECT @V60B6B8 01997000
- COPY DEVTYPES @V60B6B8 01998000
- COPY RBLOKS @V60B6B8 01999000
- COPY VBLOKS @V60B6B8 02000000
- END DMKSSS 02001000
ibm/vm370-lib/cp/dmksss.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator