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