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