VDE TITLE 'DMKVDE (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V407466 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKVDE 00006000 * 00007000 * CONTENTS - 00008000 * 00008500 * DMKVDEDC - SUBROUTINE TO VERIFY DEVICE EXISTENCE FOR DEVICE 00009000 * WHICH IS BEING ATTACHED. 00009500 * 00010000 * DMKVDERR - SUBROUTINE TO ISSUE ATTACH ERROR MESSAGES. 00010500 *. 00011000 EJECT 00012000 PUNCH 'SPB' TELL LOADER TO START AT NEXT PAGE BOUNDRY 00013000 DMKVDE START 00014000 SPACE 00015000 DC CL8'DMKVDE' MODULE IDENTIFICATION @V407466 00016000 SPACE 00017000 USING PSA,R0 @V407466 00018000 USING SAVEAREA,R13 @V407466 00019000 EXTRN DMKIOSQR @V407466 00020000 EXTRN DMKSCNRU @V407466 00021000 EXTRN DMKCVTBD @VA13651 00021100 EXTRN DMKCVTBH @VA13651 00021200 EXTRN DMKERMSG @VA13651 00021300 EXTRN DMKLOCKD @VA13651 00021400 EXTRN DMKSCNRD @VA13651 00021500 EXTRN DMKSCNRN @VA13651 00021600 SPACE 00022000 *. 00022100 * SUBROUTINE NAME - 00022200 * DMKVDEDC - VERIFY DEVICE EXISTENCE 00022300 * 00022400 * FUNCTION - 00022500 * TO VERIFY THE EXISTENCE OF A DEVICE WHICH IS BEING ATTACHED. 00022600 * 00023000 * ATTRIBUTES - 00024000 * 00025000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00026000 * 00027000 * ENTRY CONDITIONS - 00028000 * 00029000 * GPR 6 = VADDR FOR DEVICE BEING ATTACHED 00030000 * GPR 8 = ADDRESS OF RDEVBLOK 00031000 * GPR 10 = ATTACHEE'S VMBLOK 00032000 * GPR 11 = ATTACHER'S VMBLOK 00033000 * GPR 12 = ADDRESS OF DMKVDEDC 00034000 * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00035000 SPACE 00036000 * PARM = 1 PASSED ON THE CALL MACRO INDICATES THAT 00037000 * DEVICE IS DASD AND ALLOCATION DATA IS TO BE READ. 00038000 SPACE 00039000 * 00040000 * EXIT CONDITIONS - 00041000 * 00042000 * 00043000 * RETURN IS TO DMKVDA 00044000 * 00045000 * GPR 2 = 0 IF LABEL/ALLOC. RECORD HAS BEEN READ 00046000 * SUCCESSFULLY. 00047000 * GPR 2 = ERROR CODE IS LABEL/ALLOC READ UNSUCCESSFUL. 00048000 * 00049000 * CALLS TO OTHER ROUTINES - 00050000 * 00051000 * DMKIOSQR 00052000 * DMKDSPCH 00053000 * DMKSCNRU 00054000 * DMKFREE 00055000 * DMKFRET 00056000 * 00057000 * EXTERNAL REFERENCES - 00058000 * 00059000 * NONE 00060000 * 00061000 * TABLES / WORK AREAS - 00062000 * 00063000 * VMBLOK 00064000 * 00065000 * REGISTER USAGE - 00066000 * 00067000 * GPR 2 = RETURN CODE FOR DMKVDA 00068000 * GPR 3 = WORK 00069000 * GPR 4 = WORK 00070000 * GPR 5 = WORK 00071000 * GPR 6 = VADDR OF DEVICE BEING ATTACHED 00072000 * GPR 7 = WORK 00073000 * GPR 8 = ADDRESS OF RDEVBLOK 00074000 * GPR 10 = ADDRESS OF VMBLOK FOR ATTACHED-TO USER 00075000 * GPR 11 = ADDRESS OF CALLER'S OR USER'S VMBLOK 00076000 * GPR 12 = BASE REGISTER 00077000 * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00078000 * 00079000 * 00080000 * 00081000 * OPERATION - 00082000 * 00083000 * DMKVDEDC - SUBROUTINE TO VERIFY DEVICE EXISTENCE. * 00084000 * SETS UP AN I/O TASK (TIO) TO SEE IF DEVICE EXISTS. * 00085000 * IF THE DEVICE DOES NOT EXIST, IT IS MARKED OFFLINE * 00086000 * AND THE APPROPRIATE RETURN CODE IS PLACED IN SAVER2 * 00087000 * TO BE PASSED BACK TO DMKVDA. A 'DOES NOT EXIST' MESSAGE * 00088000 * WILL BE ISSUED BY DMKVDA. * 00089000 * ------------------------------- * 00090000 * IN ADDITION, FOR DASD DMKVDE * 00091000 * SETS UP AND EXECUTES AN I/O TASK TO READ THE DASD VOLUME * 00092000 * LABEL OF THE DEVICE BEING ATTACH'ED. IF SUCCESSFUL, THE * 00093000 * VOLUME SERIAL IS INSERTED INTO THE 'RDEVSER' FIELD OF THE * 00094000 * REAL DEVICE BLOCK. RETURN CODES ARE SET IN SAVER2 TO * 00095000 * INDICATE FAILURE OF THE READ. IF A CP/370 OWNED VOLUME IS * 00096000 * ENCOUNTERED, A FLAG IS SET IN THE DMKVDA SAVE AREA. * 00097000 * IF DMKVDE HAS BEEN CALLED WITH PARM=1, MEANING ALLOCATION * 00098000 * DATA IS PRESENT, DMKVDE WILL READ THE ALLOCATION RECORD * 00099000 * INTO FREE STORAGE. * 00100000 *---------------------------------------------------------------------* 00101000 *. 00102000 COPY OPTIONS @VA08059 00102300 COPY LOCAL OPTIONS @VA08059 00102700 EJECT 00103000 DMKVDEDC RELOC ATTACH A REAL DEVICE OR CHANNEL TO @V407466 00104000 * USER'S VM 00105000 USING RDEVBLOK,R8 RDEVBLOK ADDRESSABILITY @V407466 00106000 SLR R3,R3 CLEAR R3 @V407466 00107000 LA R0,IOBSIZE SIZE OF IOBLOK IN DWDS. @V407466 00108000 CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00109000 BNE RDLAIOB NO, IOBLOK IS RIGHT SIZE @V407466 00110000 LA R0,ALLOLEN+IOBSIZE SIZE FOR ALLOC DATA BLOCK @V407466 00111000 C R2,F1 READING ALLOCATION DATA ? @V407466 00112000 BE RDLAIOB YES - ALL SET TO GO @V407466 00113000 LA R0,VDELLEN SMALLER IOBLOK FOR LABEL READ @V407466 00114000 RDLAIOB EQU * GET AN IOB + BUFFER FROM FREE STG@V407466 00115000 CALL DMKFREE @V407466 00116000 XC 0(IOBSIZE*8,R1),0(R1) CLEAR IOBLOK TO ZEROES @V407466 00117000 ST R10,IOBMISC-IOBLOK(,R1) SAVE ATTACHEE'S VMBLOK @V407466 00118000 LR R10,R1 @V407466 00119000 USING IOBLOK,R10 STANDARD IOBLOK ADDRESSABILITY @V407466 00120000 LA R7,X'100' LOAD TIO LOOP COUNT @VA09204 00120100 RDLCPEX1 OI IOBSPEC,IOBTIO FLAG REQUEST FOR SPECIAL 'TIO' @VA07221 00121100 SPACE 00122000 RDLCPEX EQU * GET CPEXBLOK FOR REGISTERS @V407466 00123000 LA R0,CPEXSIZE GET A CPEXBLOK... @V407466 00124000 CALL DMKFREE ...TO USE AS A SAVE-AREA @V407466 00125000 USING CPEXBLOK,R1 ...ACROSS THE CALL TO 'IOS' @V407466 00126000 STM R0,R15,CPEXR0 SAVE ALL CURRENT REGISTERS @V407466 00127000 ST R1,IOBMISC2 SAVE THE CPEXBLOK HERE @V407466 00128000 DROP R1 @V407466 00129000 SPACE 00130000 ST R11,IOBUSER ATTACHER'S VMBLOK @V407466 00131000 LA R1,RDLBIRA INTERRUPT RETURN ADDRESS @V407466 00132000 ST R1,IOBIRA ... @V407466 00133000 TM IOBSPEC,IOBTIO SPECIAL 'TIO' @V407466 00134000 BO RDLIOSR YES, TEST THE DEVICE NOW @V407466 00135000 LA R4,VDELCCW-VDELOK(,R10) CCW START @V407466 00136000 ST R4,IOBCAW ... @V407466 00137000 MVC 0(LABLSZ,R4),LABLCCW MOVE IN MODEL CCW'S @V407466 00138000 XC VDELSNS-VDELOK(IOERSNSZ,R10),VDELSNS-VDELOK CLR @V407466 00139000 C R2,F1 READING ALLOCATION RECORD ? @V407466 00140000 BNE RDLACCW NO - RELOCATE CCW'S @V407466 00141000 MVC VDELCNT-VDELOK(8,R10),ALLOCNT DIFF RECORD NO. @V407466 00142000 OI 52(R4),SKIP PREVENT TRANSFER OF SENSE DATA @V407466 00143000 LA R1,1024 ...ALSO LONGER RECORD @V407466 00144000 STH R1,46(,R4) ...INTO 'READ DATA' CCW @V407466 00145000 RDLACCW EQU * @V407466 00146000 LR R5,R4 ...START ADDRESS @V407466 00147000 LA R1,7 NUMBER TO BE RELOCATED @V407466 00148000 RDLABL1 EQU * RELOCATE CCW ADDRESSES @V407466 00149000 L R0,0(,R5) @V407466 00150000 ALR R0,R4 ADD CCW BASE ADDRESS @V407466 00151000 ST R0,0(,R5) @V407466 00152000 LA R5,8(,R5) NEXT CCW @V407466 00153000 BCT R1,RDLABL1 CONTINUE @V407466 00154000 L R1,IOBMISC2 GET CPEXBLOK ADDRESS @V407466 00155000 USING CPEXBLOK,R1 ADDRESSABILITY @V407466 00156000 ST R5,CPEXR5 PTR TO LAST CCW + 8 @V407466 00157000 DROP R1 @V407466 00158000 RDLIOSR EQU * QUEUE IOBLOK FOR EXECUTION @V407466 00159000 MVI IOBFLAG,IOBCP CP-GENERATED I/O @V407466 00160000 CALL DMKIOSQR R8 = RDEVBLOK, R10 = IOBLOK @V407466 00161000 GOTO DMKDSPCH WAIT FOR IT @V407466 00162000 SPACE 4 00163000 RDLBIRA EQU * INTERRUPT RETURN POINT @V407466 00164000 USING *,R12 @V407466 00165000 SL R12,=A(RDLBIRA-DMKVDE) ADJUST ADDRESSABILITY @V407466 00166000 USING DMKVDE,R12 @V407466 00167000 SPACE 00168000 L R1,IOBMISC2 GET CPEXBLOK ADDRESS @V407466 00169000 USING CPEXBLOK,R1 @V407466 00170000 LM R0,R9,CPEXR0 RELOAD OUR REGISTERS @V407466 00171000 L R13,CPEXR13 ... @V407466 00172000 LA R0,CPEXSIZE RETURN TO FREE STORAGE @V407466 00173000 CALL DMKFRET ... @V407466 00174000 DROP R1 @V407466 00175000 SPACE 00176000 SWITCH CONTINUE ON THE I/O PROCESSOR @V407508 00177000 TM IOBSPEC,IOBTIO WAS THIS A SPECIAL 'TIO' REQUEST?@V407466 00178000 BO CKREADY YES - CHECK IF DASD DEV IS READY @V407466 00179000 TM IOBSTAT,IOBFATAL FATAL DISK ERROR ? @V407466 00180000 BZ RDLABL2 NO - O.K. @V407466 00181000 DATMODER LA R3,BADLABL2 LABEL READ FAILED @V407466 00182000 C R2,F1 IF THIS IS ALLOC RECORD... @V407466 00183000 BE RDLFRET ... DON'T CLEAR THE SERIAL @V407466 00184000 LA R3,BADLABL READING REGL LABEL, NOT ALLOC @V407466 00185000 CYLFAULT MVC RDEVSER(6),BLANKS CLEAR VOLUME SERIAL @V407466 00186000 B RDLFRET GO RELEASE THE IOBLOK @V407466 00187000 SPACE 00188000 CKREADY NI IOBSPEC,X'FF'-IOBTIO RESET TIO FLAG @V407466 00189000 TM IOBSTAT,IOBCC3 IS DRIVE AVAILABLE? @V407466 00190000 BZ VDECC0 YES, GO READ VOLUME LABEL IF DASD@V407466 00191000 BO VDECC3 NO, DEVICE DOES NOT EXIST @V407466 00192000 * CC = 1, MAYBE UC 00193000 CLI RDEVTYPC,CLASDASD DASD DEVICE TYPE @V407466 00194000 BNE CKTAP NO, SKIP CHECK FOR CC=1, UC @V407466 00195000 TM IOBCSW+4,UC UNIT CHECK @V407466 00196000 BO CKMORE YES-CONTINUE CHECK @VA09204 00197200 BCT R7,RDLCPEX1 NO-RETRY TIO 256 TIMES @VA09204 00197300 LA R3,BUSY151 BUSY CONDITION? @VA11952 00197320 ST R10,SAVER8 SAVE POINTER TO IOBLOK @VA11952 00197340 B EXIT GET RC BACK TO DMKVDA @VA11952 00197360 CKMORE EQU * @VA09204 00197400 TM RDEVFTR,FTRVIRT 3330V DEVICE? @V407466 00198000 BZ NOTREADY NO, SKIP CHECK FOR CC=1, UC @V407466 00199000 TM IOBSTAT,IOBCC1 CC = 1 - CYLINDER FAULT @V407466 00200000 BZ NOTREADY NO, SOMETHING ELSE WENT WRONG @V407466 00201000 TM IOBCSW+4,UC CC=1, UC - CYLINDER FAULT @V407466 00202000 BO CYLFAULT YES, ATTACH ANYWAY @V407466 00203000 NOTREADY LA R3,NOTREDY FLAG DEVICE AS NOT READY @V407466 00204000 B RDLFRET GO TO EXIT @VA07700 00204500 SPACE 00205000 CKTAP CLI RDEVTYPC,CLASTAPE MIXED - CC=1,CSW STORED @V407466 00206000 BNE VDECC0 NOT TAPE, ASSUME DEVICE THERE @V407466 00207000 L R1,IOBIOER CHECK TO SEE IF IOERBLOK @V407466 00208000 LTR R1,R1 IS THERE ONE? @V407466 00209000 BZ RDLFRET NO, RETURN TO CALLER @V407466 00210000 USING IOERBLOK,R1 @V407466 00211000 TM IOERDATA,X'40' INTERVENTION REQUIRED @V407466 00212000 BZ RDLFRET NO @V407466 00213000 TM IOERDATA+1,X'60' STATUS A & B ON @V407466 00214000 BNZ RDLFRET SOMETHING ON, DEVICE THERE @V407466 00215000 OI IOBSTAT,IOBCC3 MAKE SURE BOTH BITS ARE ON @V407466 00216000 VDECC3 LR R1,R6 GET CCU FORM OF ADDR @V407466 00217000 * PASSED FROM DMKVDA 00218000 LA R3,1 NO. OF EXPOSURES TO VARY @VA10201 00219100 CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00220000 BNE VARYOFF NO @V407466 00221000 CLI RDEVTYPE,TYP2305 DRUM @V407466 00222000 BNE VARYOFF NO @V407466 00223000 LA R3,8 NO. OF EXPOSURES FOR DRUM @VA10201 00224100 LA R1,7(,R1) CONSTRUCT HIGHEST EXPOSURE ADDR @V407466 00225000 VARYLOOP CALL DMKSCNRU GET BLOCKS @V407466 00226000 BCTR R1,0 ... @V407466 00227000 VARYOFF OI RDEVSTAT,RDEVDISA MARK DEVICE OFFLINE @V407466 00228000 BCT R3,VARYLOOP CONTINUE @VA10201 00229100 LA R3,UNKNOWN ISSUE MESSAGE @V407466 00230000 B RDLFRET FRET BLOCKS FIRST @V407466 00231000 SPACE 00232000 VDECC0 CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00233000 BE RDLCPEX YES, GO READ LABEL @V407466 00234000 CLI RDEVTYPC,CLASTERM TERMINAL DEVICE @V407466 00235000 BNE RDLFRET NO RELEASE BLOCKS @V407466 00236000 TM RDEVTYPE,TYPBSC IS THIS BISYNC LINE @V407466 00237000 BZ RDLFRET NO @V407466 00238000 NI RDEVSTAT,X'FF'-RDEVNRDY CLEAR NOT READY FLAG @V407466 00239000 B RDLFRET RELEASE STORAGE @V407466 00240000 SPACE 00241000 RDLABL2 EQU * CHECK LABEL FORMAT @V407466 00242000 TM RDEVFTR,FTRVIRT 3330V DEVICE ADDRESS @V407466 00243000 BZ RDLABL2B NO, GO LOOK AT LABEL @V407466 00244000 L R1,IOBCSW ADDR LAST CCW EXECUTED @V407466 00245000 LA R1,0(,R1) CLEAR HI-ORDER GARBAGE @V407466 00246000 CR R5,R1 DID WE CYL FAULT? @V407466 00247000 BE RDLABL2B NO CYL FAULT SITUATION @V407466 00248000 MVC RDEVSER(6),BLANKS BLANK VOLID IN RDEVBLOK @V407466 00249000 B RDLFRET RELEASE BLOCKS @V407466 00250000 RDLABL2B C R2,F1 READING ALLOCATION RECORD ? @V407466 00251000 BE EXIT2 YES - JUST RETURN FOR NOW @V407466 00252000 USING VDELOK,R10 SWITCH DSECTS @V407466 00253000 CLI RDEVTYPE,TYP3340 3340 TYPE @V407466 00254000 BNE RDLABL3 NO - BRANCH @V407466 00255000 NI RDEVFTR,X'FF'-(FTRRPS+FTR35MB+FTR70MB) RESET @V407466 00256000 TM VDELSNS+2,X'80' RPS FEATURE INSTALLED ? @V407466 00257000 BZ *+8 NO - @V407466 00258000 OI RDEVFTR,FTRRPS INDICATE RPS INSTALLED @V407466 00259000 TM VDELSNS+2,X'03' 35MB OR 70MB MODULE MOUNTED? @V407466 00260000 BNM DATMODER DATA MODULE TYPE ERROR @V407466 00261000 TM VDELSNS+2,X'02' 3340 70MB PACK MOUNTED ? @V407466 00262000 BZ SET35MB NO - MUST BE 35MB PACK @V407466 00263000 OI RDEVFTR,FTR70MB INDICATE 70MB PACK MOUNTED @V407466 00264000 B RDLABL3 .. @V407466 00265000 SET35MB OI RDEVFTR,FTR35MB INDICATE 35MB PACK MOUNTED @V407466 00266000 RDLABL3 EQU * INTERPRET LABEL RECORD @V407466 00267000 LA R14,VDELBUF+4 POINT TO STD LABEL SERIAL START @V407466 00268000 CLC VDELBUF(4),=C'VOL1' IS IT STANDARD FORMAT ? @V407466 00269000 BNE RDLBCMS NO - CHECK FOR CMS LABEL @V407466 00270000 CLC VDELBUF+46(5),=C'CP370' ALLOCATION DATA PRESENT?@V407466 00271000 BNE RDLABSR NO - MOVE VOLID TO RDEVBLOK @V407466 00272000 LR R7,R13 SAVE PTR TO VDE SAVEAREA @V407466 00273000 L R13,SAVER13 PICK UP PTR TO VDA SAVEAREA @V407466 00274000 OI SAVEWRK1+1,CPOWND CP/370 OWNED VOLUME FORMAT @V407466 00275000 LR R13,R7 RESTORE VDE SAVEAREA ADDRESS @V407466 00276000 B RDLABSR MOVE VOLID TO RDEVBLOK @V407466 00277000 RDLBCMS EQU * SEE IF RECOGNIZABLE LABEL FORMAT @V407466 00278000 CLC VDELBUF(4),=C'CMS=' CMS FORMAT ? @V407466 00279000 BE RDLABSR YES @V407466 00280000 LA R14,VDELBUF NON-STANDARD LABEL START @V407466 00281000 SPACE 00282000 RDLABSR EQU * FILL IN RDEVBLOK SERIAL FIELD @V407466 00283000 MVC RDEVSER(6),0(R14) ... @V407466 00284000 EJECT 00285000 RDLFRET EQU * RELEASE IOBLOK @V407466 00286000 USING IOBLOK,R10 @V407466 00287000 L R1,IOBIOER SEE IF IOERBLOK TO RELEASE @V407466 00288000 LTR R1,R1 IS THERE ONE? @V407466 00289000 BZ IOBONLY NO, RELEASE IOBLOK ONLY @V407466 00290000 LA R0,IOERSIZE SIZE OF IOERBLOK @V407466 00291000 AH R0,IOEREXT ...PLUS EXTENSION SIZE @VA07361 00291100 CALL DMKFRET RELEASE IOERBLOK @V407466 00292000 IOBONLY LR R1,R10 IOBLOK ADDRESS TO R1 @V407466 00293000 DROP R10 @V407466 00294000 L R10,IOBMISC-IOBLOK(,R1) ATTACHEE'S VMBLOK @V407466 00295000 LA R0,IOBSIZE SIZE OF REGL. IOBLOK @V407466 00296000 CLI RDEVTYPC,CLASDASD DASD DEVICE @V407466 00297000 BNE RDFRIOB NO, IOBSIZE IS OK @V407466 00298000 LA R0,VDELLEN BLOCK SIZE @V407466 00299000 C R2,F1 ...EXCEPT THAT THE ALLOCATION @V407466 00300000 BNE RDFRIOB ...RECORD IS MUCH BIGGER @V407466 00301000 LA R0,IOBSIZE+ALLOLEN @V407466 00302000 RDFRIOB EQU * RELEASE THE IOBLOCK @V407466 00303000 CALL DMKFRET RELEASE IT... @V407466 00304000 EXIT ST R3,SAVER2 SAVE BAD RETURN CODE OR ZERO @V407466 00305000 EXIT RETURN TO DMKVDA @V407466 00306000 SPACE 00307000 EXIT2 ST R10,SAVER10 SAVE IOBLOK ADDRESS @V407466 00308000 * WHEN READING ALLOCATION RECORD @V407466 00309000 B EXIT AND GO EXIT @V407466 00310000 SPACE 2 00311000 NOTREDY EQU 68 'NOTREADY' @V407466 00312000 BADLABL EQU 72 READ FAILED FOR DASD LABEL @V407466 00313000 BADLABL2 EQU 76 READ FAILED FOR ALLOC. RECORD @V407466 00314000 UNKNOWN EQU 80 DEVICE DOES NOT EXIST @V407466 00315000 BUSY151 EQU 120 @VA11952 00315100 SPACE 00316000 * BITS DEFINED IN VDABITS+1: 00317000 CPOWND EQU X'20' ALLOCATION DATA PRESENT ON VOLUME@V407466 00318000 SPACE 00319000 LABLCCW CCW X'07',LABLCNT-LABLCCW,CC+SILI,6 SEEK @V407466 00320000 CCW X'08',LABLSRCH-LABLCCW,CC+SILI,1 TIC @V407466 00321000 CCW X'03',0,SILI,1 NOP @V407466 00322000 LABLSRCH CCW X'31',LABLCNT-LABLCCW+2,CC+SILI,5 SEARCH @V407466 00323000 CCW X'08',*-8-LABLCCW,CC,1 TIC @V407466 00324000 CCW X'06',LABLBUF-LABLCCW,CC+SILI,80 RD DATA @V407466 00325000 CCW X'04',LABLSNS-LABLCCW,SILI,IOERSNSZ SENSE @V407466 00326000 LABLEND EQU * END OF CCWS @V407466 00327000 LABLCNT DC AL2(0,0,0,3*256) BB,CC,HH,RX @V407466 00328000 LABLSZ EQU *-LABLCCW SIZE OF EXTENSION @V407466 00329000 LABLBUF DS 0D LABEL BUFFER LOCATION @V407466 00330000 ORG *+80 @V407466 00331000 LABLSNS EQU * @V407466 00332000 ORG *-80 @V407466 00333000 SPACE 3 00334000 ALLOCNT DC AL2(0,0,0,4*256) BB,CC,HH,RX @V407466 00335000 ALLOLEN EQU 1024/8+(LABLBUF-LABLCCW)/8 EXTRA SIZE FOR ALLOC @V407466 00336000 SPACE 2 00337000 EJECT 00338000 *. 00339000 * SUBROUTINE NAME - 00340000 * 00341000 * DMKVDERR - ISSUE ATTACH ERROR MESSAGES 00342000 * 00343000 * FUNCTION - 00344000 * TO ISSUE ERROR MESSAGES FOR THE 'ATTACH' COMMAND 00345000 * 00346000 * ATTRIBUTES - 00347000 * 00348000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00349000 * 00350000 * ENTRY CONDITIONS - 00351000 * 00352000 * GPR 2 - ERROR MESSAGE INDEX 00353000 * GPR 7 - ADDRESS OF ERROR MESSAGE AREA 00354000 * GPR 9 - ADDRESS OF UDEVBLOK 00355000 * GPR 10 - ADDRESS OF VMBLOK FOR ATTACHED-TO USER 00356000 * GPR 11 - ADDRESS OF CALLER'S VMBLOK 00357000 * GPR 12 - BASE REGISTER 00358000 * GPR 13 - ADDRESS OF STANDARD SAVE AREA 00359000 * 00360000 * EXIT CONDITIONS - 00361000 * 00362000 * GPR 2 = BRANCH TABLE INDEX FOR DMKVDA TO CONTINUE PROCESSING 00363000 * 00364000 * CALLS TO OTHER ROUTINES - 00365000 * 00366000 * DMKCVTBD 00367000 * DMKCVTBH 00368000 * DMKERMSG 00369000 * DMKLOCKD 00370000 * DMKSCNRD 00371000 * DMKSCNRN 00372000 * DMKSCNRU 00373000 * 00374000 * EXTERNAL REFERENCES - 00375000 * 00376000 * NONE 00377000 * 00378000 * TABLES / WORK AREAS - 00379000 * 00380000 * ERROR MESSAGE AREA 00381000 * DMKVDA'S SAVEAREA 00382000 * 00383000 * REGISTER USAGE - 00384000 * 00385000 * GPR 2 - ERROR INDEX CODE 00386000 * GPR 4 - ADDRESS OF SAVEAREA 00387000 * GPR 7 - ADDRESS OF ERROR MESSAGE AREA 00388000 * GPR 9 - UDEVBLOK ADDRESS 00389000 * GPR 10 - ADDRESS OF VMBLOK FOR ATTACHED-TO USER 00390000 * GPR 11 - ADDRESS OF CALLER'S OR USER'S VMBLOK 00391000 * GPR 12 - BASE REGISTER 00392000 * GPR 13 - ADDRESS OF DMKVDA'S SAVE AREA 00393000 * 00394000 * ALL OTHER REGISTERS ARE WORK REGISTERS 00395000 * 00396000 * NOTES - NONE 00397000 * 00398000 * OPERATION - 00399000 * 00400000 * 1. THE ERROR INDEX PASSED FROM DMKVDA IS USED AS AN INDEX 00401000 * INTO A BRANCH TABLE TO BRANCH TO THE APPROPRIATE ERROR 00402000 * MESSAGE PROCESSING. FOR EACH MESSAGE, THE VARIABLE DATA 00403000 * (IF ANY) IS SUPPLIED, THE MESSAGE NUMBER IS SET, AND 00404000 * DMKERMSG IS CALLED. IF DMKVDA DOES NOT NEED TO RECEIVE 00405000 * CONTROL BACK AFTER THE ERROR MESSAGE IS WRITTEN, DMKVDERR 00406000 * RELEASES ITS OWN SAVEAREA BEFORE CALLING DMKERMSG. 00407000 * DMKERMSG WILL THEN RELEASE DMKVDA'S SAVEAREA BEFORE 00408000 * RETURNING TO THE CALLER OF DMKVDA. 00409000 * 00410000 * RESPONSES - 00411000 * NONE 00412000 * 00413000 * ERROR MESSAGES - 00414000 * 00415000 * DMKVDE003E INVALID OPTION - $OPTION$ 00416000 * DMKVDE006E INVALID DEVICE TYPE - RADDR 00417000 * DMKVDE020E USERID MISSING OR INVALID 00418000 * DMKVDE021E RADDR MISSING OR INVALID 00419000 * DMKVDE022E VADDR MISSING OR INVALID 00420000 * DMKVDE023E VOLID MISSING OR INVALID 00421000 * DMKVDE034E CHANNEL MISSING OR INVALID 00422000 * DMKVDE040E DEV ADDR DOES NOT EXIST 00423000 * DMKVDE045E $USERID$ NOT LOGGED ON 00424000 * DMKVDE046E TYPE RADDR OFFLINE 00425000 * DMKVDE120E TYPE RADDR NOT ATTACHED; USERID VADDR ALREADY 00426000 * DEFINED 00427000 * DMKVDE121E TYPE RADDR NOT ATTACHED TO $USERID$ 00428000 * DMKVDE122E TYPE RADDR ALREADY ATTACHED TO $USERID$ 00429000 * DMKVDE123E DASD RADDR CP OWNED 00430000 * DMKVDE124E DASD RADDR IN USE BY NNN USERS 00431000 * DMKVDE125E DASD RADDR VOLID $VOLID$ ALREADY ATTACHED 00432000 * TO SYSTEM 00433000 * DMKVDE126E DASD RADDR ERROR READING VOLID 00434000 * DMKVDE127E DASD RADDR VOLID $VOLID$ DOES NOT MATCH 00435000 * DMKVDE128E DASD RADDR ERROR READING ALLOCATION RECORD 00436000 * DMKVDE131E INSUFFICIENT FREE STORAGE AVAILABLE FOR 00437000 * ATTACH REQUEST 00438000 * DMKVDE133E DASD RADDR NOT READY 00439000 * DMKVDE134E TYPE RADDR NOT ATTACHED; CHAN XX DEDICATED 00440000 * DMKVDE142E TYPE RADDR NOT DRAINED 00441000 * DMKVDE143E TYPE RADDR IN USE BY SYSTEM 00442000 * DMKVDE151I DASD RADDR NOT ATTACHED,BUSY PERSISTS, 00442100 * IOBSTAT=XX, IOBCSW+4=YYYY 00442200 * DMKVDE153E DEVICE RADDR EXCEEDS MAX NUM OF VIRTUAL DEVICES 00442300 *. 00443000 EJECT 00444000 DMKVDERR RELOC @VA13651 00445000 MVC SAVEWRK1,ZEROES CLEAR FOR FLAG BYTE 00445500 LR R4,R13 SAVE R13 SAVEAREA ADDR FOR LATER @VA13651 00446000 L R13,SAVER13 USE DMKVDA'S SAVEAREA @VA13651 00447000 USING WRK2,R7 GET ADDRESSABILITY TO MSG AREA @VA13651 00448000 USING VMBLOK,R11 GET ADDRESSABILITY TO VMBLOK @VA13651 00449000 USING UDEVBLOK,R9 GET ADDRESSABILITY TO UDEVBLOK @VA13651 00450000 B ERRTABL-8(R2) BRANCH TO PROPER ERROR ROUTINE; @VA13651 00451000 * R2 IS ERROR INDEX SET BY DMKVDA 00452000 SPACE 2 00453000 *---------------------------------------------------------------------* 00454000 * CVTRADD - CONVERT DEVICE ADDRESS TO HEXADECIMAL * 00455000 * ZAPVOLD - REMOVE VOLUME SERIAL FROM REAL DEVICE BLOCK * 00456000 *---------------------------------------------------------------------* 00457000 SPACE 2 00458000 CVTRADD EQU * CONVERT REAL DEVICE ADDRESS @V407466 00459000 L R1,DEVADDR @V407466 00460000 TM VDABITS,RANGE+MULTR RANGE/MULTIPLES BEING PROC @V407466 00461000 BZ CONVERT NO, USE ADDR IN DEVADDR FIELD @V407466 00462000 LH R1,UDEVADD DEVICE ADDRESS @V407466 00463000 CONVERT CALL DMKCVTBH @V407466 00464000 BR R5 @V407466 00465000 SPACE 00466000 ZAPVOLD EQU * REMOVE VOLID FROM RDEVBLOK @V407466 00467000 L R1,SAVEWRK9 REAL DEVICE BLOCK POINTER - SAVED@V407466 00468000 SWITCH CONTINUE PROCESSING ON I/O PROC @V407508 00469000 USING RDEVBLOK,R1 @V407466 00470000 MVC RDEVUSER(4),ASYSVM IN USE BY SYSTEM @V407466 00471000 BR R5 @V407466 00472000 DROP R1 @V407466 00473000 EJECT 00474000 *---------------------------------------------------------------------* 00475000 * FREUSER AND SWPUSER - UNLOCK USERID AND SWAP VMBLOKS * 00476000 *---------------------------------------------------------------------* 00477000 SPACE 2 00478000 FREUSER EQU * UNLOCK ATTACHEE'S USERID @V407466 00479000 LA R1,VMUSER @V407466 00480000 CALL DMKLOCKD DIRECTORY UNLOCK SUBROUTINE @V407466 00481000 L R1,SAVER11 GET CALLER'S VMBLOK ADDRESS @V407508 00482000 SWTCHVM SWITCH TO CALLER'S VMBLOK @V4M0193 00483000 BR R5 ...RETURN TO CALLER @V407466 00484000 SPACE 2 00485000 SWPUSER EQU * SWAP TO TARGET USER'S VMBLOK @V407466 00486000 LR R1,R10 GET USER'S VMBLOK ADDRESS @V407508 00487000 SWTCHVM SWITCH TO SPECIFIED USER @V4M0193 00488000 BR R5 @V407466 00489000 EJECT 00490000 *---------------------------------------------------------------------* 00491000 * GETRDEV, GETRTYP - GET REAL DEVICE BLOCK + TYPE NAME * 00492000 *---------------------------------------------------------------------* 00493000 SPACE 2 00494000 GETRDEV EQU * LOCATE REAL DEVICE BLOCK @V407466 00495000 TM VDABITS,RANGE+MULTR RANGE OR MULTIPLES @V407466 00496000 BM GETRDEV2 YES, R1 ALREADY SET UP @V407466 00497000 L R1,DEVADDR REAL DEVICE ADDRESS @V407466 00498000 GETRDEV2 CALL DMKSCNRU ...FIND THE RDEVBLOK @V407466 00499000 BNZ UNKNOWN2 REAL DEVICE DOES NOT EXIST @VA13651 00500000 ST R8,SAVEWRK9 SAVE THE RDEVBLOK POINTER @V407466 00501000 BR R5 @V407466 00502000 SPACE 00503000 GETRTYP EQU * GET EBCDIC TYPE-NAME OF REAL DEV @V407466 00504000 L R8,SAVEWRK9 RDEVBLOK ADDRESS @V407466 00505000 CALL DMKSCNRN ...GET IT'S TYPE-NAME @V407466 00506000 LR R3,R1 ...INTO R4 @V407466 00507000 BR R5 @V407466 00508000 EJECT 00509000 * 00510000 * ERROR INDEX = 28 00511000 * 00512000 INVOPTS EQU * INVALID OPTION - OPTION @V407466 00513000 LA R2,EMSG003 MSG= DMKVDE003E @VA13651 00514000 B MSGSEND3 (R0,R1 STILL SET FROM SCAN) @V407490 00515000 * 00516000 * ERROR INDEX = 88 00517000 * 00518000 INVOPTS2 EQU * @V407466 00519000 LA R2,EMSG003 MSG= DMKVDE003E @VA13651 00520000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00521000 B MSGSEND3 (R0,R1 STILL SET FROM SCAN) @VA13651 00522000 * 00523000 * ERROR INDEX = 92 00524000 * 00525000 INVTYPE EQU * INVALID DEVICE TYPE - RADDR @V407466 00526000 BAL R5,CVTRADD GET REAL ADDRESS @V407466 00527000 STCM R1,B'0111',ATTCUU ADDR @V407466 00528000 LA R0,ATTSIZE1 DATA LENGTH @V407466 00529000 LA R2,EMSG006 MSG= DMKVDE006E @VA13651 00530000 B MSGSEND2 @V407466 00531000 * 00532000 * ERROR INDEX = 48 00533000 * 00534000 INVUSID EQU * USERID MISSING OR INVALID @V407466 00535000 LA R2,EMSG020 MSG= DMKVDE020E @VA13651 00536000 B MSGONLY @V407466 00537000 * 00538000 * ERROR INDEX = 52 00539000 * 00540000 INVADD1 EQU * FIRST ADDR MISSING OR INVALID @V407466 00541000 TM VDABITS,CHANNEL MESSAGE FOR CAHNNEL COMMAND @V407466 00542000 BZ VDA021 BRANCH IF NOT @V407466 00543000 LA R2,EMSG034 LOAD CHANNEL ERROR CODE @V407490 00544000 B MSGONLY . . . . @V407466 00545000 VDA021 EQU * RADDR MISSING OR INVALID @V407490 00546000 MVC 0(L'VMUSER,R7),CMDUSER MOVE IN INVALID PARM @V407490 00547000 LA R0,L'VMUSER SET UP LENGTH @V407490 00548000 LA R2,EMSG021 SET UP ERROR CODE @V407490 00549000 B MSGSEND2 GO SEND MSG WITH NO RETURN @V407490 00550000 * 00551000 * ERROR INDEX = 96 00552000 * 00553000 VDE021A EQU * RADDR MISSING OR INVALID @VA13651 00554000 TM VDABITS,RANGE RANGE ?? @V407490 00555000 BZ VDA021B NO, BYPASS RANGE PROCESSING @V407490 00556000 BAL R5,SWPUSER SET UP TO UNLOCK ATTACHEE @V407490 00557000 BAL R5,FREUSER UNLOCK USERS CONTROL BLOCKS @V407490 00558000 VDA021B LH R1,UDEVADD PICK UP DEVICE ADDRESS @V407490 00559000 CALL DMKCVTBH CONVERT IT BACK @V407490 00560000 STCM R1,B'0111',ATTCUU STORE ADDRESS @V407490 00561000 LA R0,ATTSIZE1 SET UP SIZE OF ERROR MSG @V407490 00562000 LA R2,EMSG021 LOAD ERROR CODE FOR DMKVDE021 @VA13651 00563000 TM VDABITS,MULTR MULTIPLE DEVICES ????? @V407490 00564000 BO MSGSEND YES, SEND MSG AND RETURN TO VDE @VA13651 00565000 B MSGSEND2 GO SEND MSG, NO RETURN @V407490 00566000 * 00567000 * ERROR INDEX = 36 00568000 * 00569000 INVADD2 EQU * VADDR MISSING OR INVALID @V407466 00570000 TM VDABITS,ATTSYST ATTACH TO SYSTEM ? @V407466 00571000 BO INVOLID YES - ADD2 IS REALLY A VOLID @V407466 00572000 VDA022 LA R2,EMSG022 VADDR MISSING OR INVALID @V407490 00573000 B MSGONLY @V407466 00574000 * 00575000 * ERROR INDEX = 100 00576000 * 00577000 VDE022B EQU * @VA13651 00578000 LA R2,EMSG022 VADDR MISSING OR INVALID @V407490 00579000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00580000 B MSGONLY ISSUE MESSAGE @V407466 00581000 * 00582000 * ERROR INDEX = 40 00583000 * 00584000 INVOLID EQU * VOLID MISSING OR INVALID @V407466 00585000 LA R2,EMSG023 MSG= DMKVDE023E @VA13651 00586000 B MSGONLY @V407466 00587000 * 00588000 * ERROR INDEX = 80 00589000 * 00590000 UNKNOWN2 EQU * DEV ADDR DOES NOT EXIST @VA13651 00591000 BAL R5,CVTRADD CONVERT ADDRESS TO HEX @V407466 00592000 STCM R1,B'0111',ATTCUU @V407466 00593000 LA R0,ATTSIZE1 DATA LENGTH @V407466 00594000 LA R2,EMSG040 MSG= DMKVDE040E @VA13651 00595000 B MSGSEND GO BUILD + TYPE MESSAGE @V407466 00596000 * 00597000 * ERROR INDEX = 44 00598000 * 00599000 NOTLOGD EQU * USERID NOT LOGGED ON @V407466 00600000 MVC 0(L'VMUSER,R7),CMDUSER USERID @VA13651 00601000 LA R0,L'VMUSER DATA LENGTH @V407466 00602000 LA R2,EMSG045 MSG= DMKVDE045E @VA13651 00603000 B MSGSEND2 @V407466 00604000 * 00605000 * ERROR INDEX = 12 00606000 * 00607000 DEVOFFL EQU * TYPE RADDR OFFLINE @V407466 00608000 LA R2,EMSG046 MSG= DMKVDE046E @VA13651 00609000 TM VDABITS,ATTSYST ATTACHING TO 'SYSTEM' @V407466 00610000 BO TYPRADD YES, DO NOT WANT TO RETURN @V407490 00611000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00612000 B TYPRADD GO BUILD VARIABLE STRING @V407490 00613000 * 00614000 * ERROR INDEX = 60 00615000 * 00616000 BAD05 EQU * @VA13651 00617000 * 00618000 * ERROR INDEX = 56 00619000 * 00620000 DALREDY EQU * TYPE RADDR NOT ATTACHED; USERID @V407466 00621000 * VADDR ALREADY DEFINED 00622000 BAL R5,FREUSER ONLOCK USER'S CONTROL BLOCKS @V407466 00623000 BAL R6,USERDEV SET UP 'TYPE RADDR USERID' STRING@V407466 00624000 LH R1,VIRTADD VIRTUAL ADDRESS @V407466 00625000 TM VDABITS,RANGE+MULTR RANGE OR MULTIPLES @V407466 00626000 BZ CVT NO, ADDRESS IN 'VIRTADD' @V407466 00627000 LH R1,UDEVADD ADDRESS IN UDEVBLOK @V407466 00628000 CVT CALL DMKCVTBH CONVERT FOR MESSAGE @V407466 00629000 MVI ATTDEL2,BIN0 DELIMITER AFTER 'USERID' @V407466 00630000 STCM R1,B'0111',ATTVADDR ...ADD 'VADDR' @V407466 00631000 LA R0,ATTSIZE3 DATA LENGTH @V407466 00632000 LA R2,EMSG120 MSG= DMKVDE120E @VA13651 00633000 B MSGSEND @V407466 00634000 * 00635000 * ERROR INDEX = 20 00636000 * 00637000 DEVOWND EQU * DASD RADDR CP OWNED @V407466 00638000 BAL R5,CVTRADD CONVERT ADDRESS @V407466 00639000 STCM R1,B'0111',ATTCUU @V407466 00640000 LA R0,ATTSIZE1 DATA LENGTH @V407466 00641000 LA R2,EMSG123 MSG= DMKVDE123E @VA13651 00642000 TM VDABITS,ATTSYST ATTACHING TO 'SYSTEM' @V407466 00643000 BO MSGSEND2 YES, DO NOT RETURN TO DMKVDE @VA13651 00644000 B MSGSEND @V407466 00645000 * 00646000 * ERROR INDEX = 16 00647000 * 00648000 SHRCHEK EQU * CHECK DIFF VARIETIES OF 'SHARED' @V407466 00649000 L R8,SAVEWRK9 GET RDEVBLOK ADDRESS @V407466 00650000 USING RDEVBLOK,R8 @V407466 00651000 LA R2,EMSG143 MSG= DMKVDE143 @VA13651 00654000 TM VDABITS,ATTSYST ATTACHING TO 'SYSTEM' @V407466 00655000 BO TYPRADD YES, DO NOT RETURN AFTER MSG @V407466 00656000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00657000 SHRCHEK2 B TYPRADD @V407466 00658000 * 00659000 * ERROR INDEX = 64 00660000 * 00661000 CHANDED EQU * ERROR FOR DEDICATED CHANNELS @V407490 00662000 AIF (NOT &DEDCH).NOTDED3 **AIF** @V407466 00663000 LR R6,R8 RESTORE R6 @V407466 00664000 BAL R5,FREUSER UNLOCK USER'S CONTROL BLOCKS @V407466 00665000 USING VCHBLOK,R6 @V407466 00666000 LH R1,VCHADD GET ADDRESS OF VIRTUAL CHANNEL @V407466 00667000 SRL R1,8(0) ... @V407466 00668000 CALL DMKCVTBD CONVERT TO DECIMAL @V407466 00669000 DROP R6 @V407466 00670000 MVI ATTDEL1,BIN0 DELIMITER @V407466 00671000 STCM R1,B'0011',ATTCHAN STORE CHANNEL NUMBER @V407466 00672000 TM ATTCHAN,HEX0F CHANNEL NUMBER > 9 @V407466 00673000 BNZ *+8 YES - LEAVE CHANNEL NUMBER ALONE @V407466 00674000 MVI ATTCHAN,BIN0 CLEAR HI ORDER BYTE @V407466 00675000 BAL R5,GETRDEV GET REAL DEVICE BOLCKS @V407466 00676000 BAL R5,GETRTYP GO GET THE TYPE OF DEVICE @V407466 00677000 BAL R5,CVTRADD ... @V407466 00678000 ST R3,ATTCUU SAVE IT. @V407466 00679000 ST R1,ATTNO STORE DEVICE ADDRESS @V407466 00680000 MVI ATTNO,BIN0 DELIMITER @V407466 00681000 LA R0,ATTSIZE4 MESSAGE LENGTH @V407466 00682000 LA R2,EMSG134 MSG= DMKVDE134E @VA13651 00683000 B MSGSEND @V407466 00684000 .NOTDED3 ANOP 00685000 * 00686000 * ERROR INDEX = 8 00687000 * 00688000 NODRAIN EQU * TYPE RADDR NOT DRAINED @V407466 00689000 LA R2,EMSG142 MSG= DMKVDE142E @VA13651 00690000 TM VDABITS,ATTSYST ATTACHING TO 'SYSTEM' @V407466 00691000 BO TYPRADD YES, DO NOT RETURN @V407466 00692000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00693000 TYPRADD EQU * @V407466 00694000 BAL R5,GETRTYP @V407466 00695000 BAL R5,CVTRADD @V407466 00696000 ST R3,ATTCUU @V407466 00697000 ST R1,ATTNO @V407466 00698000 MVI ATTNO,BIN0 DELIMITER @V407466 00699000 LA R0,L'SAVEWRK2+L'SAVEWRK3 DATA LENGTH @V407466 00700000 B MSGSEND2 GO SEND IT @V407490 00701000 * 00702000 * ERROR INDEX = 84 00703000 * 00704000 DEVSHRD EQU * DASD RADDR IN USE BY NNN USERS @V407466 00705000 CLC RDEVSER(6),CMDUSER IS VOLID CORRECT? @VA11349 00706000 BNE WRNGVOL YES, CONTINUE. @VA11139 00707000 BAL R5,CVTRADD CONVERT ADDRESS @V407466 00708000 STCM R1,B'0111',ATTCUU @V407466 00709000 MVI ATTDEL4,BIN0 DELIMITER @V407466 00710000 L R8,SAVEWRK9 SAVED RDEVBLOK ADDRESS @V407466 00711000 LH R1,RDEVLNKS-RDEVBLOK(,R8) NO. OF USERS @V407466 00712000 CALL DMKCVTBD CONVERT TO DECIMAL @V407466 00713000 STCM R1,B'0111',ATTNO NUMBER OF USERS @V407466 00714000 LA R0,ATTSIZE5 DATA LENGTH @V407466 00715000 LA R2,EMSG124 MSG= DMKVDE124E @VA13651 00716000 TM VDABITS,ATTSYST ATTACHING TO 'SYSTEM' @V407466 00717000 BO MSGSEND2 DO NOT RETURN TO DMKVDE AFTER MSG@VA13651 00718000 B MSGSEND @V407466 00719000 * 00720000 * ERROR INDEX = 104 00721000 * 00722000 DUPVOL EQU * DASD RADDR VOLID $VOL$ ALRDY ATT @V407466 00723000 MSG125E CALL DMKSCNRD GET REAL DEVICE ADDRESS @V407466 00724000 CALL DMKCVTBH CONVERT TO HEX @V407466 00725000 STCM R1,B'0111',ATTCUU @V407466 00726000 MVI ATTDEL4,BIN0 DELIMITER @V407466 00727000 * VOLID IS IN 'CMDUSER' = SAVEWRK3,4 00728000 MVC ATTNO(L'SAVEWRK3+L'SAVEWRK4),CMDUSER @V407466 00729000 LA R0,L'SAVEWRK2+L'SAVEWRK3+L'SAVEWRK4 LENGTH @V407466 00730000 LA R2,EMSG125 MSG= DMKVDE125 @VA13651 00731000 B MSGSEND2 @V407466 00732000 * 00733000 * ERROR INDEX = 72 00734000 * 00735000 LABLERR EQU * DASD RADDR ERROR RDING VOL LABEL @V407466 00736000 BAL R5,CVTRADD @V407466 00737000 STCM R1,B'0111',ATTCUU @V407466 00738000 LA R0,ATTSIZE1 DATA LENGTH @V407466 00739000 LA R2,EMSG126 MSG= DMKVDE126 @VA13651 00740000 B MSGSEND2 @V407466 00741000 * 00742000 * ERROR INDEX = 108 00743000 * 00744000 WRNGVOL EQU * DASD RADDR VOL1 VOL2 DON'T MATCH @V407466 00745000 BAL R5,CVTRADD GET DEVICE ADDRESS @V407466 00746000 STCM R1,B'0111',ATTCUU @V407466 00747000 MVI ATTDEL4,BIN0 DELIMITER @V407466 00748000 MVC ATTNO(6),RDEVSER-RDEVBLOK(R8) VOLID FROM DEV @V407466 00749000 BAL R5,ZAPVOLD CLEAR VOLID FROM RDEVBLOK @V407466 00750000 LA R0,L'SAVEWRK2+L'SAVEWRK3+L'SAVEWRK4-2 LENGTH @V407466 00751000 LA R2,EMSG127 MSG= DMKVDE127E @VA13651 00752000 B MSGSEND2 @V407466 00753000 * 00754000 * ERROR INDEX = 32 00755000 * 00756000 NOSTOR MVC ATTCUU(L'ATTACHED-2),ATTACHED INSUFFICIENT @V407466 00757000 LA R2,EMSG131 FREE STORAGE AVAILABLE FOR @V407490 00758000 LA R0,L'ATTACHED-2 ATTACH REQUEST @V407466 00759000 B MSGSEND ISSUE MESSAGE @V407466 00760000 * 00761000 * ERROR INDEX = 68 00762000 * 00763000 INTREQD EQU * DASD RADDR NOT READY @V407466 00764000 BAL R5,CVTRADD GET REAL DEVICE ADDRESS @V407466 00765000 STCM R1,B'0111',ATTCUU DATA FOR DMKERMSG @V407466 00766000 LA R0,ATTSIZE1 DATA LENGTH @V407466 00767000 LA R2,EMSG133 MSG= DMKVDE133E @VA13651 00768000 B MSGSEND @V407466 00769000 * 00770000 * ERROR INDEX = 76 00771000 * 00772000 NOALLOC EQU * DASD RADDR ERR READING ALLOC REC.@V407466 00773000 BAL R5,CVTRADD @V407466 00774000 STCM R1,B'0111',ATTUSER2+3 SAVE ADDR OUT OF THE WAY @V407466 00775000 LA R0,ATTSIZE1 DATA LENGTH @V407466 00776000 LA R2,EMSG128 MSG= DMKVDE128E @VA13651 00777000 LA R1,ATTUSER2+3 DATA START @V407466 00778000 ICM R2,B'1100',=X'80E6' RETURN HERE, 'W' ACTION CODE@V407466 00779000 ICM R0,B'1110',DMKVDE+3 MODULE IDENTIFIER @VA13651 00780000 CALL DMKERMSG GO DO IT @V407466 00781000 B RESPATT ISSUE RESPONSES @V407466 00782000 * 00783000 * ERROR INDEX = 24 00784000 * 00785000 DEVDEDD EQU * TYPE RADDR ALREADY ATT TO USERID @V407466 00786000 LA R2,EMSG122 MGS=DMKVDE122E @VA13651 00787000 TM VDABITS,ATTSYST ATTACHING TO THE 'SYSTEM' @V407466 00788000 BO DEVDEDD3 YES, DO NOT RETURN @V407466 00789000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00790000 DEVDEDD3 DS 0H @V4M0236 00791000 BAL R6,USERDEV SET UP DATA STRING FOR 'ERMSG' @V407466 00792000 L R8,SAVEWRK9 GET RDEVBLOK ADDRESS @V4M0236 00793000 L R8,RDEVUSER-RDEVBLOK(,R8) GET USERS VMBLOK ADDR @V4M0236 00794000 MVC ATTUSE(L'VMUSER),VMUSER-VMBLOK(R8) MOVE IN @V4M0236 00795000 * CORRECT USERID @V4M0236 00796000 B MSGSEND2 @V407490 00797000 * 00797300 * ERROR INDEX=120 00797310 * 00797320 MSG151 EQU * BUSY CONDITION PERSISTS @VA11952 00797330 USING IOBLOK,R8 @VA11952 00797340 BAL R5,CVTRADD GET DEVICE ADDRESS @VA11952 00797350 STCM R1,B'0111',ATTCUU STORE DEVICE ADDRESS @VA11952 00797360 MVI ATTDEL4,BIN0 DELIMITER @VA11952 00797370 SR R1,R1 ZERO OUT R1 @VA11952 00797380 ICM R1,B'0001',IOBSTAT GET IOB STATUS @VA11952 00797390 CALL DMKCVTBH CONVERT IOB STATUS @VA11952 00797400 STH R1,ATTNO STORE IOB STATUS @VA11952 00797410 MVI ATTNO+2,BIN0 DELIMITER @VA11952 00797420 SR R1,R1 ZERO OUT R1 @VA11952 00797430 ICM R1,B'0011',IOBCSW+4 GET IOB SENSE @VA11952 00797440 CALL DMKCVTBH CONVERT IOB SENSE @VA11952 00797450 STCM R1,B'1111',ATTNO+4 STORE IOB SENSE @VA11952 00797460 LA R0,L'ATTCUU+L'ATTDEL4+8 MSG LENGTH @VA11952 00797470 ICM R2,B'1111',IMSG SET UP FOR 151I MSG @VA11952 00797480 LR R1,R7 ADDRESS OF MSG AREA @VA11952 00797490 ICM R0,B'1110',DMKVDE+3 MODULE ID @VA11952 00797500 LR R10,R8 R10 POINTS TO IOBLOK @VA11952 00797510 DROP R8 @VA11952 00797520 CALL DMKERMSG PRINT MSG @VA11952 00797530 B RDLFRET CLEAN UP @VA11952 00797540 SPACE 2 00798000 MAXDEV DS 0H PROCESS MAX DEVICES EXCEEDED @VA13217 00798050 MVC ATTCUU(3),=C'RNG' SETUP FOR POSSIBLE RANGE ERR @VA13217 00798150 TM VDABITS,RANGE PROCESSING RANGE OF DEVICES? @VA13217 00798250 BO MAXDEVR YES - SKIP ADDRESS CONVERT @VA13217 00798350 LH R1,UDEVADD PICK UP DEVICE ADDRESS @VA13217 00798450 CALL DMKCVTBH CONVERT TO HEXADECIMAL @VA13217 00798550 STCM R1,7,ATTCUU DVC ADDR TO INSERT IN MSG @VA13217 00798650 MAXDEVR LA R0,ATTSIZE1 SIZE OF DATA TO INSERT @VA13217 00798750 LA R2,EMSG153 MESSAGE NUMBER @VA13217 00798850 B MSGSEND2 SEND MSG AND EXIT @VA13217 00798950 MSGONLY EQU * NO EXTRA DATA FOR MESSAGE @V407466 00799000 SLR R1,R1 @V407466 00800000 SLR R0,R0 @V407466 00801000 B MSGSEND3 GO SEND MESSAGE @VA11361 00802000 SPACE 2 00803000 MSGSEND EQU * BUILD + TYPE ERROR MESSAGE @V407466 00804000 ICM R2,B'1000',=X'80' RETURN TO DMKVDE AFTER MSG @VA13651 00805000 MSGSEND2 LR R1,R7 GET ADDRESS OF ERROR MSG AREA @VA13651 00806000 MSGSEND3 EQU * @V407490 00807000 LTR R2,R2 CHECK TO SEE IF WE ARE RETURNING @V407490 00808000 BM WILLRET YES, WE SHALL RETURN..... @V407490 00809000 ICM R2,B'1000',=X'40' NOT RETURNING,SET UP FRET @V407490 00810000 LA R3,MSGSIZE+MULTSIZE+VOLSIZE BUFFER SIZE @V60B6B8 00811000 SLL R3,24 GET IT TO THE HI-ORDER @V407490 00812000 ICM R3,B'0111',SAVEWRK5+1 GET THE ADDRESS TO FRET @V407490 00813000 LR R13,R4 RESTORE DMKVDE SAVEAREA ADDR @VA13651 00814000 SVC 16 RELEASE THIS SAVEAREA @VA13651 00815000 WILLRET EQU * @V407490 00816000 ICM R0,B'1110',DMKVDE+3 MODULE IDENTIFIER @VA13651 00817000 CALL DMKERMSG GO DO IT @V407466 00818000 ST R2,SAVER2 SAVE ERROR NUMBER @V407490 00819000 * SAVED IN DMKVDA'S SAVEAREA 00820000 CH R2,=H'131' INSUFFICIENT STORAGE MSG? @V407466 00822000 BE CLEANXT YES, UNLOCK USER'S BLOCKS @V407466 00823000 TM VDABITS,MULTR MULTIPLES BEING PROCESSED? @V407466 00824000 BO MULTCONT YES, CONTINUE @V407466 00825000 TM VDABITS,RANGE IS RANGE BEING PROCESSED @V407466 00826000 BZ CLEANXT NO, EXIT @V407466 00827000 LH R1,UDEVADD UDEVADD TO R1 @V407466 00828000 LA R1,1(,R1) UP BY ONE @V407466 00829000 CH R1,VDABITS+2 END OF RANGE @V407466 00830000 BNH PROCESS NO, KEEP PROCESSING @V407466 00831000 * B CLEANXT GET OUT @VA13651 00832000 SPACE 2 00833000 CLEANXT EQU * @VA13651 00834000 LA R2,VDEXIT SET BRANCH INDEX FOR RETURN @VA13651 00835000 B ERREXIT GO EXIT FROM DMKVDERR @VA13651 00836000 PROCESS EQU * @VA13651 00837000 LA R2,VDEPROC SET BRANCH INDEX FOR RETURN @VA13651 00838000 LR R13,R4 RESTORE VDE'S SAVEAREA 00838100 ST R1,SAVER1 SAVE NEW R1 VALUE FOR DMKVDA @VA13651 00839000 B ERREXIT GO EXIT FROM DMKVDERR @VA13651 00840000 MULTCONT EQU * @VA13651 00841000 LA R2,VDEMULT SET BRANCH INDEX FOR RETURN @VA13651 00842000 B ERREXIT GO EXIT FROM DMKVDERR @VA13651 00843000 RESPATT EQU * @VA13651 00844000 LA R2,VDERESP SET BRANCH INDEX FOR RETURN @VA13651 00845000 L R4,SAVER13 RE-OBTAIN ADDR OF VDA'S SAVEAREA @VA13651 00846000 L R4,SAVEWRK5-SAVEAREA(,R4) ADDR OF VDA MSG AREA @VA13651 00847000 LA R4,0(,R4) CLEAR HIGH ORDER BYTE @VA13651 00848000 ST R4,SAVER4 SET NEW R4 VALUE FOR DMKVDA @VA13651 00849000 ERREXIT EQU * RETURN TO DMKVDA @VA13651 00850000 LR R13,R4 RESTORE VDE SAVEAREA ADDRESS 00850500 ST R2,SAVER2 SET BRANCH RETURN FOR DMKVDA @VA13651 00851000 EXIT RETURN TO DMKVDA @VA13651 00852000 * 00853000 * BRANCH TABLE FOR ERROR INDEX CODES FROM DMKVDA 00854000 * 00855000 ERRTABL DS 0H ERROR NUMBERS 8,12,16,20,24 @V407466 00856000 B NODRAIN 8 @V407466 00857000 B DEVOFFL 12 @V407466 00858000 B SHRCHEK 16 @V407466 00859000 B DEVOWND 20 @V407466 00860000 B DEVDEDD 24 @V407466 00861000 B INVOPTS 28 @V407466 00862000 B NOSTOR 32 @V407466 00863000 B INVADD2 36 @V407466 00864000 B INVOLID 40 @V407466 00865000 B NOTLOGD 44 @V407466 00866000 B INVUSID 48 @V407466 00867000 B INVADD1 52 @V407466 00868000 B DALREDY 56 @V407466 00869000 B BAD05 60 @V407466 00870000 B CHANDED 64 @V407466 00871000 B INTREQD 68 DEVICE NOT READY @V407466 00872000 B LABLERR 72 ERROR READING LABEL @V407466 00873000 B NOALLOC 76 ERROR READING ALLOC. RECORD @V407466 00874000 B UNKNOWN2 80 DEVICE DOES NOT EXIST @VA13651 00875000 B DEVSHRD 84 @VA13651 00876000 B INVOPTS2 88 @VA13651 00877000 B INVTYPE 92 @VA13651 00878000 B VDE021A 96 @VA13651 00879000 B VDE022B 100 @VA13651 00880000 B DUPVOL 104 @VA13651 00881000 B WRNGVOL 108 @VA13651 00882000 B MSG076 112 @VA13651 00883000 B MSG151 120 BUSY CONDITION PERSISTS @VA11952 00883100 B MAXDEV 124 @VA13217 00883200 SPACE 2 00884000 *---------------------------------------------------------------------* 00885000 * USERDEV - BUILD STRING FOR DMKERMSG = "TYPE RADDR USERID" * 00886000 *---------------------------------------------------------------------* 00887000 SPACE 2 00888000 USERDEV EQU * @V407466 00889000 BAL R5,GETRTYP GET 'TYPE' IN GPR 3 @V407466 00890000 BAL R5,CVTRADD GET 'RADD' IN GPR 1 @V407466 00891000 MVC ATTUSE(L'VMUSER),CMDUSER USERID TO MESSAGE @V407466 00892000 ST R3,ATTCUU DEVICE 'TYPE' TO MSG @V407466 00893000 ST R1,ATTNO DEVICE 'CUU' TO MSG @V407466 00894000 MVI ATTNO,BIN0 DELIMITER @V407490 00895000 MVI ATTDEL1,BIN0 DELIMITER @V407466 00896000 LA R0,ATTSIZE2 DATA LENGTH @V407466 00897000 BR R6 RETURN @V407466 00898000 SPACE 2 00899000 MSG076 EQU * SET UP MSG DMKVDA076E @VMI2020 00900000 L R2,OPTION76 DMKERMSG OPTIONS @VMI2020 00901000 TM VDABITS,ATTSYST IS IT ATT TO SYSTEM @V60B6B8 00902000 BO ADDCMDU YES, GET VOLID PTR @V60B6B8 00903000 L R1,SAVEWRK5 WORKAREA ADDR @V60B6B8 00904000 LA R1,0(,R1) CLEAR HIGH ORDER BYTE @VA13651 00905000 LA R0,MSGSIZE+MULTSIZE OFFSET IN D-WORDS @V60B6B8 00906000 SLL R0,3 INTO BYTES @V60B6B8 00907000 AR R1,R0 POINT TO VOLID IN WORKAREA @V60B6B8 00908000 B SETPL GET PARM LENGTH @V60B6B8 00909000 ADDCMDU EQU * GET VOLID PTR @V60B6B8 00910000 LA R1,CMDUSER VOLID IF ATT TO SYSTEM @V60B6B8 00911000 SETPL EQU * PARM LENGTH @V60B6B8 00912000 LA R0,VOLIDSIZ VOLSER 6 BYTES LONG @V60B6B8 00913000 B WILLRET AND CALL DMKERMSG @V60B6B8 00914000 DS 0F @V60B6B8 00915000 OPTION76 EQU * @VMI2020 00916000 DC X'80' RETURN FROM ERMSG TO VDA @V60B6B8 00917000 DC C'E' ERROR MESSAGE @V60B6B8 00918000 DC X'004C' MSG ID OF DEC. 76 @VMI2020 00919000 ATTACHED DC CL8'ATTACHED' CONSTANT FOR MESSAGE @VA13651 00920000 VOLSIZE EQU 1 @V60B6B8 00921000 IMSG DC X'80C90097' @VA11952 00921500 EJECT 00922000 LTORG @V407466 00923000 EJECT 00924000 COPY SAVE @V407466 00925000 EJECT 00926000 COPY EQU @V407466 00927000 COPY DEVTYPES @V407466 00928000 PSA @V407466 00929000 COPY RBLOKS @V407466 00930000 COPY IOBLOKS @V407466 00931000 COPY IOER @V407466 00932000 VDELOK DSECT , DSECT FOR EXPANDED IOBLOK @V407466 00933000 DS (IOBSIZE)D @V407466 00934000 VDELCCW DS 7D @V407466 00935000 * SEEK,TIC/NOP/SEARCH/TIC/READ/SENSE 00936000 VDELCNT DS 1D SEEK AND SEARCH ARGS @V407466 00937000 VDELBUF DS 10D 80-BYTE LABEL-RECORD BUFFER @V407466 00938000 VDELSNS DS CL(IOERSNSZ) SENSE AREA @V407466 00939000 VDELLEN EQU (*-VDELOK)/8 BLOCK LENGTH IN DBL-WDS @V407466 00940000 SPACE 00941000 *----------------------------* 00942000 * 00943000 WRK2 DSECT ERROR MESSAGE DSECT @V407466 00944000 ATTCUU DS CL3 CUU @V407466 00945000 ATTSIZE1 EQU *-ATTCUU DATA LENGTH @V407466 00946000 ATTDEL4 DS X DELIMITER @V407466 00947000 ATTNO DS CL3 NUMBER OF USERS @V407466 00948000 ATTSIZE5 EQU *-ATTCUU DATA LENGTH @V407466 00949000 DS X ... @V407466 00950000 ATTDEL1 DS X DELIMITER @V407466 00951000 ATTUSE DS CL3 USERID @V407466 00952000 ATTDEL5 DS X DELIMITER @V407466 00953000 ATTUSER2 DS CL4 USERID @V407466 00954000 ATTSIZE2 EQU *-ATTCUU DATA LENGTH @V407466 00955000 ATTDEL2 DS X DELIMITER @V407466 00956000 ATTVADDR DS CL3 VADDR @V407466 00957000 ATTSIZE3 EQU *-ATTCUU DATA LENGTH @V407466 00958000 MSGSIZE EQU (*-ATTCUU+7)/8 @V407466 00959000 ORG ATTDEL1 SAVEWRK4 @V407466 00960000 ATTDEL3 DS X DELIMITER @V407466 00961000 ATTCHAN DS CL2 CHANNEL @V407466 00962000 ATTSIZE4 EQU *-ATTCUU DATA LENGTH @V407466 00963000 ORG ATTCUU @V407466 00964000 DS CL4 @V407466 00965000 ATTCON DS CL8 CONSTANT 'ATTACHED' @V407466 00966000 *----------------------------* 00967000 * 00968000 VDABITS EQU SAVEWRK1 FLAGS USED WITHIN VDA @V407466 00969000 MULTCUU EQU SAVEWRK1+2 NO. MULT. ADDRS IN MSG @V407466 00970000 DEVADDR EQU SAVEWRK2 REAL/VIRTUAL DEVICE ADDRESS @V407466 00971000 CMDUSER EQU SAVEWRK3 AND SAVEWRK4 - USERID @V407466 00972000 VIRTADD EQU SAVEWRK1+2 VIRTUAL DEVICE ADDRESS @V407466 00973000 SPACE 00974000 * EQUATES 00975000 BIN0 EQU X'00' DELIMTER @V407466 00976000 HEX0F EQU X'0F' @V407466 00977000 EMSG003 EQU 3 @V407490 00978000 EMSG006 EQU 6 @V407490 00979000 EMSG020 EQU 20 @V407490 00980000 EMSG021 EQU 21 @V407490 00981000 EMSG022 EQU 22 @V407490 00982000 EMSG023 EQU 23 @V407490 00983000 EMSG034 EQU 34 @V407490 00984000 EMSG040 EQU 40 @V407490 00985000 EMSG045 EQU 45 @V407490 00986000 EMSG046 EQU 46 @V407490 00987000 EMSG120 EQU 120 @V407490 00988000 EMSG122 EQU 122 @V407490 00989000 EMSG123 EQU 123 @V407490 00990000 EMSG124 EQU 124 @V407490 00991000 EMSG125 EQU 125 @V407490 00992000 EMSG126 EQU 126 @V407490 00993000 EMSG127 EQU 127 @V407490 00994000 EMSG128 EQU 128 @V407490 00995000 EMSG131 EQU 131 @V407490 00996000 EMSG133 EQU 133 @V407490 00997000 EMSG134 EQU 134 @V407490 00998000 EMSG142 EQU 142 @V407490 00999000 EMSG143 EQU 143 @V407490 01000000 EMSG153 EQU 153 @VA13217 01000500 VOLIDSIZ EQU 6 @V407490 01001000 VDEXIT EQU 0 BRANCH INDEX FOR RETURN TO VDA @VA13651 01002000 VDEPROC EQU 4 BRANCH INDEX FOR RETURN TO VDA @VA13651 01003000 VDEMULT EQU 8 BRANCH INDEX FOR RETURN TO VDA @VA13651 01004000 VDERESP EQU 12 BRANCH INDEX FOR RETURN TO VDA @VA13651 01005000 SPACE 01006000 * 01007000 * FLAGS DEFINED IN "VDABITS" : 01008000 * 01009000 CHANNEL EQU X'80' "CHANNEL" OPTION SPECIFIED @V407466 01010000 NSYSOP EQU X'40' CALLER IS NOT SYSTEM OPERATOR @V407466 01011000 MULTR EQU X'20' MULTIPLE RADDR ON COMMAND LINE @V407466 01012000 ATTSYST EQU X'10' ATTACH/DETACH TO/FROM "SYSTEM" @V407466 01013000 ATTREAD EQU X'08' ATTACH "R/O" @V407466 01014000 ATTCTCA EQU X'02' ATTACH REAL CHAN-TO-CHAN ADAPTER @V407466 01015000 DED2305 EQU X'01' ATTACH/DEDICATE MULTI EXP DEVICE @V407466 01016000 RANGE EQU X'04' RANGE ON COMMAND LINE @V407466 01017000 SPACE 01018000 MDSECT DSECT @V407466 01019000 MULTADD DS F @V407466 01020000 DS 47F UP TO 48 CCU ON ONE COMMAND EXEC.@V407466 01021000 DS 4D @V407466 01022000 MULTSIZE EQU (*-MULTADD+7)/8 @V407466 01023000 MSGAREA EQU *-MULTADD @V407466 01024000 EJECT 01025000 COPY VMBLOK @V407466 01026000 COPY UDIRECT @V407466 01027000 COPY VBLOKS @VA13651 01028000 DMKVDE CSECT RE-ENTER MAIN CSECT @VA13651 01029000 END DMKVDE @VA13651 01030000