SST TITLE 'DMKSST (CP) VM/370 - RELEASE 6' 00010000 ISEQ 73,80 00020000 MACRO 00030000 &LABEL INCR &COUNT 00040000 &LABEL LA R0,1 00050000 AL R0,&COUNT 00060000 ST R0,&COUNT 00070000 MEND 00080000 *********************************************************************** 00090000 * * 00100000 *MODULE NAME = DMKSST * 00110000 * * 00120000 *DESCRIPTIVE NAME = DMKSST (CP) SDG TABLE BUILD, VUA SELECTION * 00130000 * * 00140000 *COPYRIGHT = NONE * 00150000 * * 00160000 *STATUS = VM/370 - RELEASE 6, LEVEL 0 * 00170000 * * 00180000 *FUNCTION = * 00190000 * DMKSSTBL = BUILD SDG TABLES OF CP'S VUAS * 00200000 * * 00210000 * DMKSSTFV = FIND AN AVAILABLE VUA TO MOUNT A VOLUME ON * 00220000 * * 00230000 *NOTES = SEE BELOW * 00240000 * * 00250000 * DEPENDENCIES = NONE * 00260000 * * 00270000 * RESTRICTIONS = NONE * 00280000 * * 00290000 * REGISTER CONVENTIONS = R0 = SCRATCH * 00300000 * R1 = SCRATCH * 00310000 * R2 = SCRATCH * 00320000 * R3 = SCRATCH * 00330000 * R4 = SCRATCH * 00340000 * R5 = SCRATCH * 00350000 * R6 = SCRATCH * 00360000 * R7 = SDG TABLE BASE * 00370000 * R8 = RDEVBLOK BASE * 00380000 * R9 = VUA TABLE BASE * 00390000 * R10 = SCRATCH * 00400000 * R11 = VMBLOK BASE * 00410000 * R12 = DMKIOT BASE * 00420000 * R13 = SAVEAREA BASE * 00430000 * R14 = SUBROUTINE LINKAGE * 00440000 * R15 = SUBROUTINE LINKAGE * 00450000 * * 00460000 * PATCH LABEL = N/A * 00470000 * * 00480000 *MODULE TYPE = CSECT * 00490000 * * 00500000 * PROCESSOR = ASSEMBLER XF * 00510000 * * 00520000 * MODULE SIZE = 4K BYTES (1 BASE REGISTER DESIGN POINT) * 00530000 * * 00540000 * ATTRIBUTES = REENTRANT, PAGEABLE. * 00550000 * * 00560000 *ENTRY POINT = DMKSSTBL * 00570000 * * 00580000 * PURPOSE = BUILD SDG TABLES OF VUA'S IN CP CONFIGURATION * 00590000 * * 00600000 * LINKAGE = CALL * 00610000 * * 00620000 *ENTRY POINT = DMKSSTFV * 00630000 * * 00640000 * PURPOSE = FIND AN AVAILABLE VUA ON WHICH TO MOUNT A VIRTUAL VOLUME * 00650000 * * 00660000 * LINKAGE = CALL * 00670000 * * 00680000 *INPUT = * 00690000 * DMKSSTBL * 00700000 * R5 = VUATABLE BASE * 00710000 * R11 = VMBLOK BASE * 00720000 * * 00730000 * DMKSSTFV * 00740000 * R4 = SPECIFIC/NON-SPECIFIC SDG REQUESTED * 00750000 * R5 = SHARED/NON-SHARED/BOTH VUA REQUESTED * 00760000 * R11 = VMBLOK BASE * 00770000 * * 00780000 *OUTPUT = * 00790000 * DMKSSTBL * 00800000 * R2 = CCPD ANCHOR OF NON-SHARED SDG TABLE * 00810000 * R3 = CCPD ANCHOR OF SHARED SDG TABLE * 00820000 * R6 = RETURN CODE * 00830000 * * 00840000 * DMKSSTFV * 00850000 * R5 = VUA ADDRESS (CUU) * 00860000 * R6 = RETURN CODE * 00870000 * * 00880000 *EXIT-NORMAL = * 00890000 * DMKSSTBL * 00900000 * R2 = CCPD OF NON-SHARED SDG TABLE * 00910000 * R3 = CCPD OF SHARED SDG TABLE * 00920000 * R6 = REASON CODE * 00930000 * * 00940000 * DMKSSTFV * 00950000 * R5 = VUA ADDRESS * 00960000 * R6 = REASON CODE * 00970000 * * 00980000 *EXIT-ERROR = * 00990000 * DMKSSTBL * 01000000 * R6 = 1 - MSS NOT INSTALLED * 01010000 * R6 = 13 - ERROR ON TRANS MACRO * 01020000 * * 01030000 * DMKSSTFV * 01040000 * R6 = 4 - DEMOUNT IS REQUIRED * 01050000 * R6 = 8 - VUA OF PROPER TYPE NOT FOUND * 01060000 * * 01070000 *EXTERNAL REFERENCES = SEE BELOW * 01080000 * * 01090000 * ROUTINES = DMKERMSG - TO LOCATE THE REQUESTED MESSAGE AND INSERT * 01100000 * THE MODULE ID, MESSAGE NUMBER, AND DATA IF * 01110000 * ANY, AND PRINT THE MESSAGE * 01120000 * DMKPGTPG - TO ALLOCATE A PAGE OF DASD SPACE THAT IS TO * 01130000 * BE USED FOR EITHER VIRTUAL MEMORY PAGING OR * 01140000 * FOR SPOOL FILE PAGE BUFFERS * 01150000 * DMKPGUVG - TO ALLOCATE A PAGE OF VIRTUAL STORAGE SPACE * 01160000 * BELONGING TO THE CP PAGING VMBLOK * 01170000 * DMKPGUVR - TO RELEASE A PAGE OF VIRTUAL MEMORY SPACE * 01180000 * DMKRPAGT - MOVE THE SPECIFIED DASD PAGE FROM DASD TO * 01190000 * TO THE SPECIFIED PAGE IN THE USER'S VIRTUAL * 01200000 * MEMORY SPACE * 01210000 * DMKRPAPT - MOVE THE PAGE FROM VIRTUAL MEMORY TO DASD * 01220000 * DMKSCNRU - TO LOCATE RCHBLOK, RCUBLOK, AND RDEVBLOK FOR * 01230000 * THE UNIT CAUSING THE INTERRUPT * 01240000 * DATA AREAS = * 01250000 * DEVTYPES - DEVICE TYPE EQUATES * 01260000 * EQU - SYSTEM EQUATES * 01270000 * * 01280000 * CONTROL BLOCKS = * 01290000 * CPEXBLOK - CP EXECUTE BLOCK * 01300000 * PSA - PREFIX STORAGE AREA * 01310000 * RDEVBLOK - REAL DEVICE BLOCK * 01320000 * SAVEAREA - SAVE AREA SVC CALL * 01330000 * VMBLOK - VIRTUAL MACHINE CONTROL BLOCK * 01340000 * * 01350000 *TABLES = * 01360000 * VUATABLE - TABLE OF VUA'S IN CP CONFIGURATION * 01370000 * SDGTABLE - TABLE OF SHARED/NONSHARED VUA'S IN CP * 01380000 * CONFIGURATION, SORTED INTO SDG NUMBERS * 01390000 * * 01400000 *MACROS = * 01410000 * PSA * 01420000 * TRANS * 01430000 * * 01440000 *CHANGE ACTIVITY = AS FOLLOWS: * 01450000 * * 01460000 * * 01470000 *********************************************************************** 01480000 EJECT 01490000 COPY OPTIONS 01500000 COPY LOCAL OPTIONS 01510000 SPACE 2 01520000 DMKSST CSECT 01530000 DC CL8'DMKSST' 01540000 SPACE 1 01550000 USING PSA,R0 01560000 USING VMBLOK,R11 01570000 USING SAVEAREA,R13 01580000 SPACE 1 01590000 EXTRN DMKERMSG 01600000 EXTRN DMKPGTPG 01610000 EXTRN DMKPGUVG 01620000 EXTRN DMKPGUVR 01630000 EXTRN DMKRIODV 01640000 EXTRN DMKRPAGT 01650000 EXTRN DMKRPAPT 01660000 EXTRN DMKSCNRU 01670000 EXTRN DMKSSSNS 01680000 EXTRN DMKSSSHR 01690000 EXTRN DMKSSSNV 01700000 EJECT 01710000 DMKSSTBL RELOC CALL FROM DMKSSS 01720000 *. 01730000 * REGISTER USAGE: 01740000 * R0 = WORK REG 01750000 * R1 = CCPD OF SHARED/NON-SHARED TABLES 01760000 * R2 = WORK REG 01770000 * R3 = WORK REG 01780000 * R4 = SDG NUMBER 01790000 * R5 = VUA 01800000 * R6 = WORK REG/RETURN CODE 01810000 * R7 = SDGTABLE BASE 01820000 * R8 = COUNT OF VUA'S THIS ENTRY 01830000 * R9 = MSSVUA BASE (VUA TABLE FROM DMKMSS) 01840000 * R10 = COUNT OF VUA'S IN MSSVUA TABLE (VUA TABLE) 01850000 * R11 = VMBLOK BASE 01860000 * R12 = DMKSST BASE 01870000 * R13 = SAVE AREA BASE 01880000 * R14 = LINKAGE 01890000 * R15 = LINKAGE 01900000 * 01910000 * OPERATION: 01920000 * 01930000 * 1. BRING IN VUATABLE FROM DMKMSS CENTRAL SERVER. IF ERROR 01940000 * OCCURS, SET REASON CODE = 13 AND RETURN TO CALLER. 01950000 * 01960000 * 2. OBTAIN BUFFERS FOR TWO SDG TABLES (SHARED AND NON-SHARED). 01970000 * IF ERROR OCCURS, SET REASON CODE = 13 AND RETURN TO CALLER. 01980000 * 01990000 * 3. LOOP THROUGH VUATABLE, BUILDING ENTRIES IN SDGTABLES: 02000000 * 3A. GET VUA, SDG NUMBER, SHARED STATUS FROM VUA TABLE. 02010000 * 3B. USE SHARED STATUS TO DETERMINE WHICH TABLE TO PUT INFO. 02020000 * 3C. USE SDG NUMBER TO DETERMINE CORRECT ENTRY IN TABLE. 02030000 * 3D. PUT INFORMATION IN NEXT AVAILABLE POSITION IN ENTRY. 02040000 * 3E. UPDATE COUNT OF VUA'S IN THIS ENTRY. 02050000 * 02060000 * 4. GET CCPD OF PREVIOUS NON-SHARED TABLE. IF NO NON-SHARED 02070000 * VUA'S, RELEASE SLOT. IF NON-SHARED VUA'S PRESENT BUT NO 02080000 * SLOT, GET A SLOT. WRITE NON-SHARED SDG TABLE TO DASD. 02090000 * 02100000 * 5. GET CCPD OF PREVIOUS SHARED SDG TABLE. IF NO SHARED VUA'S. 02110000 * RELEASE SLOT. IF SHARED VUA'S PRESENT BUT NO SLOT, GET 02120000 * A SLOT. WRITE SHARED SDG TABLE TO DASD. 02130000 * 02140000 * 6. SET PROPER RETURN CODE AND EXIT. 02150000 *. 02160000 SPACE 1 02170000 TM PSAMSS,MSSPRES IS MSS INSTALLED? 02180000 BNO SSTERR01 NO - THEN DIAGNOSE X'78' IS INVALID 02190000 XC SAVEWRK9,SAVEWRK9 CLEAR OUT TEMP FLAG AREA 02200000 SPACE 1 02210000 * 02220000 * AT THIS POINT WE KNOW THE ISSUER IS THE AUTHORIZED CENTRAL 02230000 * SERVER. MSS HAS PASSED TO DMKSSS A TABLE OF ALL THE VUA'S 02240000 * IN OUR CONFIGURATION. WE NEED TO SEPARATE THESE VUA'S INTO 02250000 * SHARED AND NON-SHARED VUA'S, SORTED INTO THEIR PROPER SDG 02260000 * GROUP NUMBERS. 02270000 * 02280000 SPACE 1 02290000 L R1,0(,R5) GET ADDRESS OF PTR TO MSS BUFFER 02300000 TRANS 2,1,OPT=(BRING,DEFER),IOER=SSTERR02 02310000 ST R1,SAVEWRK2 SAVE VIRTUAL ADDR OF USER' BUFF 02320000 LR R9,R2 SAVE ADDRESS FOR LATER USE 02330000 CALL DMKPGUVG GET VIRTUAL PAGE FOR TEMP BUFFER 02340000 ST R1,SAVEWRK6 SAVE VIRT ADDRESS FOR CLEANUP 02350000 TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=SSTRELNS 02360000 ST R2,SAVEWRK3 SAVE PTR TO NON-SHARED SDG TABLE 02370000 L R3,=F'4096' SIZE OF BUFFER TO BE CLEARED 02380000 L R5,F0 NO PAD CHARACTER, NO 2ND LENGTH 02390000 MVCL R2,R4 CLEAR THE BUFFER BEFORE USING 02400000 CALL DMKPGUVG GET VIRT PAGE FOR TEMP BUFFER 02410000 ST R1,SAVEWRK7 SAVE VIRT ADDRESS FOR CLEANUP 02420000 TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=SSTRELBO 02430000 ST R2,SAVEWRK4 SAVE PTR TO SHARED SDG TABLE 02440000 L R3,=F'4096' SIZE OF BUFFER TO BE CLEARED 02450000 L R5,F0 NO PAD CHARACTER, NO 2ND LENGTH 02460000 MVCL R2,R4 CLEAR THE BUFFER BEFORE USING 02470000 SPACE 1 02480000 L R10,0(,R9) GET COUNT OF VUA'S FROM MSS TABLE 02490000 L R1,SAVEWRK2 RE-LOAD VIRT. ADDR OF USER'S BUFF 02500000 LA R1,4(,R1) POINT TO FIRST VUA IN TABLE 02510000 TRANS 9,1,OPT=(BRING+DEFER),IOER=SSTRELBO BRING INTO REAL 02520000 EJECT 02530000 USING MSSVUA,R9 02540000 SPACE 1 02550000 SSTLOOP1 DS 0H 02560000 LH R5,VUA GET THE VUA 02570000 SLR R7,R7 ZERO OUT A WORK REG 02580000 ICM R7,B'0001',SDG GET SDG NUMBER FOR THIS VUA 02590000 LR R4,R7 SAVE SDG NUMBER 02600000 MH R7,H130 GET THE INCREMENT TO CORRECT VUA 02610000 TM STAT,SHRD IS THIS A SHARED VUA? 02620000 BO SSTTBLSH YES - THEN PUT IN SHARED SDG TABLE 02630000 OI SAVEWRK9,NSHRPRES NON-SHARED VUA IS PRESENT 02640000 L R6,SAVEWRK3 GET START OF NON-SHARED TABLE 02650000 B SSTTBLNS CONSTRUCT NON-SHARED SDG TABLE 02660000 SPACE 1 02670000 SSTTBLSH DS 0H 02680000 OI SAVEWRK9,SHRDPRES SHARED VUA IS PRESENT 02690000 L R6,SAVEWRK4 GET START OF SHARED SDG TABLE 02700000 SPACE 1 02710000 SSTTBLNS DS 0H 02720000 AR R7,R6 ADD DISPLACEMENT TO CORRECT ENTRY 02730000 SPACE 1 02740000 USING SDGTABLE,R7 02750000 SPACE 1 02760000 LH R8,CNT GET COUNT OF VUA'S IN THIS SDG 02770000 LA R8,1(,R8) INCREMENT COUNT BY ONE 02780000 STH R8,CNT SAVE THE UPDATED COUNT 02790000 AR R8,R8 GET TBL DISPL TO THIS INDEX 02800000 STH R5,0(R8,R7) SAVE VUA ADDRESS (CUU) 02810000 LA R1,4(,R1) POINT TO NEXT TABLE ENTRY 02820000 TRANS 9,1,OPT=(BRING+DEFER),IOER=SSTRELBO GET REAL 02830000 BCT R10,SSTLOOP1 BUILD SDG TABLES USING ALL OF THE 02840000 * MSS-SUPPLIED VUA'S 02850000 SPACE 1 02860000 DROP R7,R9 02870000 EJECT 02880000 L R1,=A(DMKSSSNS) GET ADDR OF PTR TO N/S TABLE 02890000 L R1,0(,R1) GET CCPD OF NON-SHRD TABLE 02900000 TM SAVEWRK9,NSHRPRES HAVE ANY NON-SHARED VUA'S? 02910000 BNO SSTPURGA NO - THEN CHECK FOR SLOT CLEANUP 02920000 C R1,F0 IS PTR TO VUA TABLE ZEROS? 02930000 BNE SSTSLOTA NO - THEN RE-USE OLD SLOT 02940000 CALL DMKPGTPG GET SLOT OF DASD FOR VUA TABLE 02950000 SSTSLOTA DS 0H 02960000 LR R0,R1 DMKRPAPT WANTS CCPD IN R0 02970000 ST R1,SAVEWRK1 SAVE CCPD IN CASE OF ERROR 02980000 L R1,SAVEWRK6 GET VIRTUAL ADDRESS OF TABLE 02990000 CALL DMKRPAPT,PARM=SYSTEM WRITE NON-SHRD TABLE 03000000 BNZ SSTRELBO BRANCH ON ERROR WRITING TABLE 03010000 MVC SAVER2(4),SAVEWRK1 ELSE SAVE CCPD OF N/S TABLE 03020000 B SSTCHKB RELEASE BUFFER, CHECK SHARED VUA'S 03030000 SSTPURGA DS 0H 03040000 MVC SAVER2(4),F0 SAY NO NON-SHARED VUA'S PRESENT 03050000 C R1,F0 IS PTR TO NON-SHRD TABLE ZEROS? 03060000 BE SSTCHKB YES - NO NEED TO RELEASE OLD SLOT 03070000 SLR R0,R0 ZERO OUT FOR SLOT BLANKING 03080000 L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03090000 CALL DMKRPAGT BLANK OUT VIRTUAL BUFFER 03100000 SSTCHKB DS 0H 03110000 L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03120000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03130000 L R1,=A(DMKSSSHR) GET ADDR OF PTR TO SHRD TABLE 03140000 L R1,0(,R1) GET PTR TO SHRD TABLE 03150000 TM SAVEWRK9,SHRDPRES DO WE HAVE ANY SHARED VUA'S? 03160000 BNO SSTPURGB NO - THEN CHECK FOR SLOT CLEANUP 03170000 C R1,F0 IS THE PTR ZEROS? 03180000 BNE SSTSLOTB NO - THEN RE-USE OLD SLOT 03190000 CALL DMKPGTPG GET DASD SLOT FOR NON-SHRD TABLE 03200000 SSTSLOTB DS 0H 03210000 LR R0,R1 DMKRPAPT WANTS CCPD IN R0 03220000 ST R1,SAVEWRK1 SAVE CCPD IN CASE OF ERROR 03230000 L R1,SAVEWRK7 GET VIRT ADDR OF TABLE 03240000 CALL DMKRPAPT,PARM=SYSTEM WRITE SHARED TABLE 03250000 BNZ SSTRELSH BRANCH ON ERROR WRITING TABLE 03260000 MVC SAVER3(4),SAVEWRK1 SAVE CCPD OF NON-SHRD TABLE 03270000 B SSTRELVB AND RETURN TO CALLER 03280000 SSTPURGB DS 0H 03290000 MVC SAVER3(4),F0 SAY NO SHARED VUA'S PRESENT 03300000 C R1,F0 IS SHARED-TABLE POINTER ZEROS? 03310000 BE SSTRELVB YES - THEN NO NEED TO RELEASE OLD SLOT 03320000 SLR R0,R0 ELSE ZERO OUT FOR SLOT BLANKING 03330000 L R1,SAVEWRK7 GET VIRT ADDR OF SHRD TABLE 03340000 CALL DMKRPAGT BLANK OUT VIRTUAL BUFFER 03350000 SSTRELVB DS 0H 03360000 L R1,SAVEWRK7 GET VIRTUAL BUFFER ADDRESS 03370000 CALL DMKPGUVR RELREASE VIRTUAL BUFFER 03380000 SSTEXIT0 DS 0H 03390000 SLR R6,R6 SET RETURN CODE = 0 03400000 SSTEXIT DS 0H 03410000 ST R6,SAVER6 SAVE RETURN CODE FOR EXIT 03420000 EXIT 03430000 EJECT 03440000 SSTERR01 DS 0H 03450000 L R6,F1 SET RETURN CODE = 1 03460000 B SSTEXIT 03470000 SPACE 2 03480000 SSTERR02 DS 0H 03490000 L R6,F13 SET RETURN CODE = 13 03500000 B SSTEXIT 03510000 SPACE 1 03520000 SSTRELNS DS 0H 03530000 L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03540000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03550000 B SSTERR02 SET THE CORRECT RET CODE & RETURN 03560000 SPACE 1 03570000 SSTRELBO DS 0H 03580000 L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03590000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03600000 SSTRELSH DS 0H 03610000 L R1,SAVEWRK7 GET VIRT ADDR OF SHRD TABLE 03620000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03630000 B SSTERR02 SET CORRECT RET CODE & RETURN 03640000 EJECT 03650000 DMKSSTFV RELOC 03660000 *. 03670000 * REGISTER USAGE: 03680000 * R0 = WORK REG 03690000 * R1 = VUA 03700000 * R2 = INDEX TO THIS VUA IN SDG ENTRY 03710000 * R3 = COUNT OF VUA'S THIS SDG ENTRY 03720000 * R4 = SDG REQUESTED OR X'FF' 03730000 * R5 = SHARED STATUS REQUESTED/WORK REG 03740000 * R6 = SDG NUMBER BEING SCANNED NOW/RETURN CODE 03750000 * R7 = WORK REG 03760000 * R8 = RDEVBLOK BASE 03770000 * R9 = CCPD OF SDG TABLE BEING SCANNED 03780000 * R10 = SDGTABLE BASE 03790000 * R11 = VMBLOK BASE 03800000 * R12 = DMKSST BASE 03810000 * R13 = SAVE AREA BASE 03820000 * R14 = LINKAGE 03830000 * R15 = LINKAGE 03840000 * 03850000 * OPERATION: 03860000 * 03870000 * 1. GET SHARED/NON-SHARED/BOTH REQUEST, SPECIFIC/NON-SPECIFIC 03880000 * SDG REQUEST. 03890000 * 03900000 * 2. DETERMINE WHICH TABLE TO START SCAN WITH (NORMALLY SHARED 03910000 * TABLE). TRANS THE TABLE IN. 03920000 * 03930000 * 3. PICK UP LAST SDG USED TO MOUNT A VOLUME IN. 03940000 * 03950000 * 4. MOVE TO NEXT SDG. POINT TO COUNT OF VUA'S IN THIS ENTRY. 03960000 * IF NO MORE SDG'S AVAILABLE AND NONE TO DEMOUNT THEN SET 03970000 * REASON CODE 8 AND RETURN TO CALLER. IF NO MORE SDG'S 03980000 * AVAILABLE BUT CAN DEMOUNT, GO TO STEP 9. 03990000 * 04000000 * 5. POINT TO NEXT VUA. IF NONE GO TO STEP 4. 04010000 * 04020000 * 6. CALL DMKSCNRU TO LOCATE RDEVBLOK OF THIS VUA. IF NOT FOUND 04030000 * GO TO STEP 5. 04040000 * 04050000 * 7. MAKE SURE IT'S: 04060000 * - 3330 04070000 * - SYSVIRT 04080000 * - NOT OFFLINE, NOT DEDICATED 04090000 * - NOT OWNED BY SYSTEM 04100000 * IF THESE ARE NOT ALL MET, GO TO STEP 5. 04110000 * 04120000 * 8. IF NO VOLUMES MOUNTED TO IT, SELECT THIS VUA, RELEASE BUFFER, 04130000 * RETURN TO CALLER. ELSE FLAG AS ABLE TO DEMOUNT. GO TO STEP 5. 04140000 * 04150000 * 9. IF DEMOUNT REQUIRED, SET DEMOUNT FLAG, SAVE VUA, RETURN TO 04160000 * CALLER. 04170000 *. 04180000 ST R5,SAVEWRK5 SAVE FLAGS 04190000 SLR R9,R9 ... 04200000 ST R9,SAVEWRK1 ... 04210000 TM SAVEWRK5+3,SHARD SHARED VUA REQUESTED? 04220000 BNO FINDNS NO - THEN MUST BE NON-SHARED 04230000 L R9,=A(DMKSSSHR) ELSE GET ADDR OF CCPD FOR SHRD TBL 04240000 L R9,0(,R9) GET THAT CCPD 04250000 XC SAVEWRK1,SAVEWRK1 RESET VIRT PAGE ADDR AREA 04260000 XC SAVEWRK3,SAVEWRK3 CLEAR A FLAG AREA 04270000 OI SAVEWRK3,SHARED FLAG AS LOOPING ON SHARED 04280000 LTR R9,R9 ANYTHING THERE? 04290000 BNZ GETPAGE YES - THEN BRING IT IN 04300000 NOSHRD DS 0H 04310000 TM SAVEWRK5+3,SHARD+NONSHRD EITHER SHARED OR NON- 04320000 * SHARED ALLOWED? 04330000 BNO FINDERR1 NO - THEN NO SHARED VUA'S PRESENT 04340000 FINDNS DS 0H 04350000 L R9,=A(DMKSSSNS) GET ADDR OF CCPD FOR NSHR TBL 04360000 L R9,0(,R9) ... AND GET THAT CCPD 04370000 XC SAVEWRK3,SAVEWRK3 RESET FLAG AREA 04380000 OI SAVEWRK3,NONSHRD FLAG AS LOOKING FOR NON-SHRD 04390000 LTR R9,R9 ANYTHING THERE? 04400000 BZ FINDERR3 NO - THEN NO NON-SHARED VUA'S 04410000 * PRESENT 04420000 GETPAGE DS 0H 04430000 LR R0,R9 CCPD TO R0 04440000 L R1,SAVEWRK1 VIRTUAL BUFFER ADDRESS 04450000 LTR R1,R1 IS THERE ONE ALREADY ? 04460000 BNZ BYPASS YES, DON'T NEED ANOTHER ONE 04470000 CALL DMKPGUVG GET A VIRTUAL PAGE FOR THIS TABLE 04480000 TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=FINDERR4 04490000 ST R1,SAVEWRK1 SAVE VIRTUAL ADDRESS OF BUFF 04500000 ST R2,SAVEWRK8 SAVE REAL ADDRESS OF BUFF 04510000 BYPASS CALL DMKRPAGT,PARM=(BRING+SYSTEM) BRING INTO STORAGE 04520000 BNZ FINDERR4 PAGE READ ERROR 04530000 C R4,FFS REQUEST ANY OLD SDG? 04540000 BNE SPECSDG NO - USER WANTS A SPECIFIC ONE 04550000 FRSTSCAN EQU * LOOK FOR TOTALLY FREE RDEVBLOK 04560000 L R5,=A(DMKSSSNV) ADDRESS OF SDG INDEX 04570000 L R6,0(R5) SDG INDEX 04580000 ST R6,SAVEWRK6 SAVE FOR LATER REFERENCE 04590000 NXTSCAN DS 0H 04600000 L R6,SAVEWRK6 GET LAST SDG LOOKED AT 04610000 A R6,F1 INCREMENT COUNT BY ONE 04620000 CL R6,F27 LOOK AT HIGHEST SDG YET? 04630000 BNH CONTSCAN NO - THEN THIS SDG NUMBER IS OKAY 04640000 SLR R6,R6 ELSE GET FIRST SDG NUMBER 04650000 CONTSCAN DS 0H 04660000 ST R6,SAVEWRK6 SAVE NMBR OF SDG TO BE LOOKED AT 04670000 MH R6,H130 GET DISPLACEMENT TO THIS SDG 04680000 L R10,SAVEWRK8 GET START OF TABLE 04690000 AR R10,R6 ADD IN DISPLACEMENT TO THIS SDG 04700000 USING SDGTABLE,R10 04710000 LH R3,CNT COUNT OF VUA IN SDG 04720000 LTR R3,R3 ANY ? 04730000 BNZ STRTSCAN LOOK FOR AVAILABLE ONE 04740000 C R4,FFS REQUEST ANY OLD SDG? 04750000 BNE FINDERR5 NO - THEN NO VUA'S IN THIS SDG 04760000 CLC SAVEWRK6,0(R5) WRAPPED AROUND SDGS YET ? 04770000 BE NONSHARE YES, SEE IF PROCESSED NONSHARED 04780000 B NXTSCAN ELSE SET UP TO LOOK AT NEXT SDG 04790000 STRTSCAN DS 0H 04800000 SLR R2,R2 RESET AN INDEX REG 04810000 FINDLOOP DS 0H 04820000 LA R2,2(,R2) GET NEXT VUA IN SDG ENTRY 04830000 LH R1,0(R2,R10) GET VUA NUMBER 04840000 CALL DMKSCNRU GO FIND RDEVBLOK FOR THIS VUA 04850000 BNZ NXTVUA IF RDEVBLOK NOT FOUND GET NEXT 04860000 USING RDEVBLOK,R8 SET ASSEMBLER ADDRESSABILITY 04870000 CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT 3330 04880000 BNE NXTVUA NO, GO BUMP INDEX COUNT 04890000 TM RDEVFTR,SYSVIRT THIS A SYSVIRT VUA? 04900000 BNO NXTVUA NO - THEN DON'T USE IT 04910000 TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR DEDICATED 04920000 BNZ NXTVUA CAN'T BE AVAILABLE 04930000 TM RDEVFLAG,RDEVSYS+RDEVOWN+RDEVSEL BELONG TO 04940000 * SYSTEM 04950000 BNZ NXTVUA YES, CAN'T BE AVAILABLE 04960000 CLI RDEVSER,X'40' IS A VOLUME MOUNTED 04970000 BE GOTFREE FOUND A FREE RDEVBLOK 04980000 OI SAVEWRK3,AVAILVOL VOL AVAILABLE FOR DEMOUNT 04990000 TM SAVEWRK3,DEMNT LOOKING FOR VOL TO DEMOUNT? 05000000 BO GOTONE YES - THEN DEMOUNT AND USE IT! 05010000 NXTVUA EQU * 05020000 BCT R3,FINDLOOP KEEP LOOKING TILL WE EXHAUST 05030000 * THIS SDG 05040000 TM SAVEWRK3,DEMNT WE TRY TO DEMOUNT YET? 05050000 BNO DMOUNT NO - THEN TRY TO DEMOUNT 05060000 TRYNOSHR CL R4,FFS THIS A REQUEST FOR 'ANY' SDG? 05070000 BNE FINDERR5 NO - THEN NONE AVAILABLE THIS SDG 05080000 CLC SAVEWRK6,0(R5) CYCLE THRU ALL THE SDG'S? 05090000 BNE NXTSCAN NO - THEN LOOK AT NEXT ONE 05100000 NONSHARE TM SAVEWRK3,NONSHRD WE LOOK FOR A NON-SHRD VUA? 05110000 BO FINDERR7 YES - THEN ABSOLUTELY NONE 05120000 * AVAILABLE 05130000 B NOSHRD ELSE (MAYBE) LOOK FOR A 05140000 * NON-SHARED VUA 05150000 DMOUNT DS 0H 05160000 TM SAVEWRK3,AVAILVOL VOL AVAILABLE THRU DEMOUNT? 05170000 BNO TRYNOSHR NO - SEE IF CAN TRY NONSHARED 05180000 OI SAVEWRK3,DEMNT SAY WANT TO TRY TO DEMOUNT 05190000 LH R3,CNT COUNT OF VUAS IN SDG 05200000 B STRTSCAN START SCANNING THIS SDG ALL OVER 05210000 GOTFREE EQU * WE HAVE A TOTALLY FREE RDEVBLOK 05220000 ST R1,SAVER5 SAVE VUA ADDRESS (CUU) 05230000 OI RDEVFLAG,RDEVSEL DEVICE IS SELECTED 05240000 MVC RDEVSER(6),BLANKS CLEAR THE VOL SER 05250000 L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05260000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 05270000 SLR R0,R0 ... 05280000 CALL DMKRPAGT,PARM=(SYSTEM) 05290000 C R4,FFS SPECIFIC SDG REQUEST ? 05300000 BNE SSTEXIT0 DON'T CHANGE THE INDEX 05310000 MVC 0(4,R5),SAVEWRK6 SAVE THIS SDG NUMBER 05320000 B SSTEXIT0 EXIT RC = 0 05330000 GOTONE EQU * GET CURRENT VOLUME DEMOUNTED 05340000 ST R1,SAVER5 SAVE VUA ADDRESS (CUU) 05350000 L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05360000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 05370000 SLR R0,R0 ... 05380000 CALL DMKRPAGT,PARM=(SYSTEM) 05390000 L R6,F4 RC = 4 IF DEMOUNT REQUIRED 05400000 C R4,FFS SPECIFIC SDG REQUEST 05410000 BNE SSTEXIT DON'T CHANGE SDG INDEX 05420000 MVC 0(4,R5),SAVEWRK6 SAVE THIS SDG NUMBER 05430000 B SSTEXIT RETURN TO CALLER 05440000 SPECSDG DS 0H 05450000 LR R6,R4 GET SDG NUMBER REQUESTED 05460000 LTR R6,R6 REQUEST FOR SDG 0? 05470000 BNZ SPECSDG1 NO - THEN JUST DECREMENT BY ONE 05480000 L R6,F28 ELSE SAY IT'S THE HIGHEST SDG 05490000 SPECSDG1 DS 0H 05500000 S R6,F1 DECREMENT BY ONE 05510000 ST R6,SAVEWRK6 SAVE IN SAVEWRK6 05520000 B NXTSCAN GO SEARCH THIS SDG ONLY FOR AN 05530000 * AVAILABLE VUA 05540000 DROP R8,R10 05550000 FINDERR1 DS 0H 05560000 MVC SAVEWRK2(16),=CL16'SHARED' SET SUBSTITUTION INFO 05570000 B ERREXIT GO PUT OUT MESSAGE 05580000 FINDERR3 DS 0H 05590000 TM SAVEWRK5+3,SHRD+NONSHRD EITHER STATUS REQUESTED? 05600000 BO FINDERR7 YES - THEN USE THAT ERR MSG 05610000 MVC SAVEWRK2(16),=CL16'NONSHARED' SET SUBST. INFO 05620000 B ERREXIT 05630000 FINDERR7 DS 0H 05640000 MVC SAVEWRK2(16),=CL16'SHARED/NONSHARED' SUBST. INFO 05650000 B ERREXIT 05660000 FINDERR5 DS 0H 05670000 CVD R4,SAVEWRK2 CONVERT SDG NUMBER TO DECIMAL 05680000 UNPK SAVEWRK6(2),SAVEWRK3+2(2) UNPK SDG FOR PRINT 05690000 OI SAVEWRK6+1,X'F0' CORRECT EBCDIC CHARACTER 05700000 MVC SAVEWRK2(16),=CL16'SHARED (SDG XX)' 05710000 MVC SAVEWRK5(2),SAVEWRK6 05720000 ERREXIT DS 0H 05730000 L R0,F16 SIZE OF SUBSTITUTION DATA 05740000 LA R1,SAVEWRK2 START OF SUBSTITUTION DATA 05750000 LA R2,EMSG70 MESSAGE 070E 05760000 ICM R2,B'1000',=X'80' RETURN TO DMKSST AFTER MSG 05770000 ICM R0,B'1110',DMKSST+3 05780000 CALL DMKERMSG GO ISSUE THE ERROR MESSAGE 05790000 L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05800000 CALL DMKPGUVR RELEASE BUFFER 05810000 SLR R0,R0 ... 05820000 CALL DMKRPAGT,PARM=(SYSTEM) 05830000 B EXITRC8 EXIT WITH RC = 8 05840000 FINDERR4 DS 0H 05850000 L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05860000 CALL DMKPGUVR RELEASE VIRTUAL BUFFER 05870000 EXITRC8 L R6,F8 SET RETURN CODE = 8 05880000 B SSTEXIT RETURN TO CALLER 05890000 EJECT 05900000 F13 DC F'13' 05910000 F27 DC F'27' 05920000 F28 DC F'28' 05930000 H130 DC H'130' 05940000 NSHRPRES EQU X'80' NON-SHARED VUA'S PRESENT 05950000 SHRDPRES EQU X'40' SHARED VUA'S PRESENT 05960000 SHARD EQU X'80' 05970000 NONSHRD EQU X'40' 05980000 SHARED EQU X'20' 05990000 DEMNT EQU X'08' 06000000 AVAILVOL EQU X'04' 06010000 EMSG70 EQU 70 06020000 EJECT 06030000 COPY EQU 06040000 COPY DEVTYPES 06050000 PSA 06060000 COPY RBLOKS 06070000 COPY SAVE 06080000 COPY VMBLOK 06090000 * COPY VUATABLE 06100000 SPACE 1 06110000 MSSVUA DSECT 06120000 SPACE 1 06130000 VUA DS H 06140000 STAT DS X 06150000 SPACE 1 06160000 * BITS DEFINED IN STAT: 06170000 SHRD EQU X'80' THIS IS A SHARED VUA 06180000 SPACE 1 06190000 SDG DS X 06200000 SPACE 3 06210000 SDGTABLE DSECT 06220000 SPACE 1 06230000 CNT DS H COUNT OF VUA'S IN THIS SDG 06240000 SDGINDX DS 64H INDEX TO RDEVBLOK FOR EACH VUA 06250000 * IN THIS SDG 06260000 END DMKSST 06270000