DSB TITLE 'DMKDSB (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE INPUT SERIALIZATION @V200820 00002000 *. 00003000 * 00004000 * MODULE NAME : DMKDSB 00005000 * 00006000 * 00007000 * 00008000 * FUNCTION: 00009000 * 00010000 * 00011000 * DMKDSBSD: ISSUES BUFFER UNLOAD CCW FOR 3330/3340/3350/2305. 00012000 * 00013000 * DMKDSBRD: READS VOLUME LABEL WHEN AN UNSOLICITED DEVICE-END 00014000 * INTERRUPT OCCURS. IF THE PACK HAS BEEN CHANGED (3330/3340/ 00015000 * 3350/2305) A BUFFER UNLOAD IS ALSO PERFORMED. 00016000 * 00017000 * 00018000 * ATTRIBUTES : REENTRANT,RESIDENT,CALLED VIA SVC. 00019000 * 00020000 * 00021000 * ENTRY POINT: DMKDSBRD - ENTRY FOR UNSOLICATED D.E. INTERRUPTS 00022000 * DMKDSBSD - COLLECT DASD ENVIRONMENTAL SENSE DATA 00023000 * 00024000 * 00025000 * ENTRY CONDITIONS : GPR8=ADDRESS OF RDEVBLOK 00026000 * GPR10=ADDRESS OF IOBLOK 00027000 * GPR12=BASE ADDRESS 00028000 * GPR13=ADDRESS OF SAVE AREA 00029000 * 00030000 * 00031000 * EXIT CONDITIONS : 1. RETURN TO CALLER WHEN ENTRY POINT 00032000 * WAS DMKDSBSD. 00033000 * 2. EXIT TO DMKDSPCH WHEN ENTRY POINT 00034000 * WAS DMKDSBRD. 00035000 * 00036000 * 00037000 * CALLS TO OTHER ROUTINES : 00038000 * 1. DMKIOSQR - PERFORM REAL I/O. 00039000 * 2. DMKFREE - OBTAIN STORAGE FOR DASD 00040000 * IOERBLOK, WORK BUFFER AND MSG 00041000 * BUFFER. 00042000 * 3. DMKFRET - TO RET. STORAGE OBTAINED BY DMKFRE 00043000 * 4. DMKIOESD - RECORD DASD STATISTICAL DATA 00044000 * 5. DMKQCNWT - TO WRITE MSG DSB956A TO OPERATOR 00045000 * 6. DMKSCNRU - TO FIND THE R-BLOCK'S 00046000 * 7. DMKCVTBH - TO CONVERT REAL DEVICE ADDRESS 00047000 * 8. DMKDSPCH - EXIT AFTER DMKDSBRD PROCESSING 00048000 * OR TO WAIT FOR I/O TO COMPLETE. 00049000 * 00050000 * 00051000 * EXTERNAL REFERENCES : 00052000 * DMKIOESD 00053000 * 00054000 * 00055000 * TABLES AND WORKAREAS : BUFFER TO CONTAIN CHANNEL PROGRAM 00056000 * AND LABEL READ FROM DASD VOLUME. 00057000 * 00058000 * 00059000 * REGISTER USAGE : 00060000 * GPR 0=PSA ADDRESSABILITY 00061000 * GPR 1=SCRATCH 00062000 * GPR 2=SCRATCH 00063000 * GPR 3=SCRATCH 00064000 * GPR 4=SCRATCH 00065000 * GPR 5=GENERAL USAGE IS FOR BAL REGISTER 00066000 * GPR 6=SCRATCH 00067000 * GPR 7=IOERBLOK ADDRESS 00068000 * GPR 8=RDEVBLOK ADDRESS. 00069000 * GPR 9=SCRATCH 00070000 * GPR 10=IOBLOK ADDRESS. 00071000 * GPR 11=VMBLOK ADDRESS. 00072000 * GPR 12=BASE ADDRESS. 00073000 * GPR 13=SAVE AREA ADDRESS. 00074000 * GPR 14=EXTERNAL LINKAGE REGISTER. 00075000 * GPR 15=EXTERNAL LINKAGE REGISTER. 00076000 * 00077000 * 00078000 * NOTES : NONE. 00079000 * 00080000 * 00081000 * 00082000 * OPERATION : 00083000 * 00084000 * 00085000 * DMKDSBSD: IS CALLED FROM DMKCPS WHEN A 'SHUTDOWN' COMMAND IS ISSUED 00086000 * OR FROM DMKCCW WHEN THE VIRTUAL MACHINE ISSUES A BUFFER UNLOAD 00087000 * CCW. IT DETERMINES WHAT TYPES OF DASDI DEVICES ARE 00088000 * ON THE SYSTEM AND ISSUES BUFFER UNLOAD TO 3330/3340/3350/2305 00089000 * DEVICES. IF NO ERROR'S ARE ENCOUNTED A CALL IS MADE TO 00090000 * DMKIOESD TO RECORD THE RECORD FOR FIELD ENGINEERING USE. 00091000 * 00092000 * 00093000 * DMKDSBRD: IS CALLED FROM DMKIOS WHEN AN UNSOLICITED DEVICE END 00094000 * INTERRUPT OCCURS. THIS ROUTINE WILL READ THE VOLUME LABEL VIA 00095000 * A CALL TO DMKIOS. IF THE PACK HAS BEEN CHANGED AND THE 00096000 * DEVICE IS A 3330/3340/3350, A BUFFER UNLOAD COMMAND WILL BE 00097000 * EXECUTED. A CALL IS THEN MADE TO DMKIOESD TO RECORD THE 00098000 * RECORD. THE NEW VOLUME LABEL IS THEN MOVED INTO THE RDEVBLOK. 00099000 * THIS ENABLES DYNAMIC VOLUME RECOGNITION 00100000 * DMKVDD (DETACH) ALSO STACKS AN UNSOLICITED DEVICE-END 00101000 * INTERRUPT TO DMKDSBRD TO SEE IF THE PACK WAS CHANGED. 00102000 * DMKCPS STACKS AN UNSOLICITED DEVICE-END INTERRUPT TO 00103000 * DMKDSBRD TO SEE IF 2/4 CHANSW FEATURE ON HARDWARE WHEN 00104000 * PERFORM A LABEL READ. 00105000 * 00106000 * 00107000 * 00108000 * 00109000 * ERROR MESSAGES: 00110000 * 00111000 * DMKDSB956A DASD CCU VOLID VOLID NOT MOUNTED; NOW OFFLINE 00112000 *. 00113000 EJECT 00143000 COPY OPTIONS 00144000 DMKDSB CSECT 00145000 ENTRY DMKDSBSD DO BUFFER UNLOAD FOR SHUTDOWN OR DMKCCW 00146000 ENTRY DMKDSBRD ENTRY TO READ VOLUME LABEL ETC. 00147000 SPACE 00149000 EXTRN DMKIOESD,DMKIOSQR 00151000 EXTRN DMKCVTBH 00152000 EXTRN DMKSCNRU 00153000 EXTRN DMKSTKCP,DMKSSSMQ @V60B6B8 00153010 USING SAVEAREA,R13 00154000 USING PSA,R0 00155000 * USING IOERBLOK,R7 ADDRESSABILITY FOR IOERBLOK 00156000 USING STATDASD,R4 ADDRESSABILITY FOR STATISICAL DATA 00157000 USING RDEVBLOK,R8 00158000 USING IOBLOK,R10 00159000 USING DMKDSB,R12 COMMON ADDRESSABILITY 00160000 * DMKDSBSD = 1ST ENTRY POINT; R12 = A(DMKDSBSD) = A(DMKDSB) ... 00181000 SPACE 00182000 DMKDSBSD ENTER DO BUFFER UNLOAD FOR SHUTDOWN OR DMKCCW: 00183000 BAL R5,GETSTBUF GET BUFFER TO READ THE VOL1 LABEL 00184000 MVI STATCALL,X'FF' INDICATE DMKDSBSD ENTRY @VA02264 00185000 ST R13,STATGR13 STORE POINTER TO SAVE AREA 00186000 B STATMAIN CONTINUE 00187000 SPACE 00188000 DMKDSBRD DS 0H ENTRY FROM UNSOLICITED DE INTERRUPT 00189000 USING *,R12 00190000 L R12,=A(DMKDSB) COMMON ADDRESSABILITY 00191000 USING DMKDSB,R12 00192000 TM IOBCSW+4,DE DOES THE UNSOL. INT INCLUDE DE? @V407438 00192250 BZ NOLABEL NOPE, THEN DON'T READ THE LABEL @V407438 00192500 TM IOBCSW+4,UC ENTRY WITH UC STATUS 00193000 BZ NOUCK NO 00194000 NOLABEL BAL R5,CKIOB FRET ANY IOERBLOK @V407438 00195000 B FRETIOB 00196000 NOUCK LH R1,IOBRADD GET THE REAL DEVICE ADDRESS 00197000 CALL DMKSCNRU AND FIND THE R-BLOCK'S 00198000 BAL R5,GETSTBUF GET A BUFFER TO READ THE VOL1 LABEL 00199000 STATMAIN L R1,ASYSVM LOAD THE ADDRESS OF SYSTEM VMBLOK 00200000 CLI STATCALL,X'FF' ENTERED AT DMKDSBSD ? @VA02264 00201000 BNE *+6 NO -- CHARGE SYSTEM @VA02264 00202000 LR R1,R11 YES -- CHARGE USER @VA02264 00203000 ST R1,IOBUSER ..... INTO IOBLOK @VA02264 00204000 LA R0,IOERSIZE SIZE OF 1 IOERBLOK 00205000 SR R7,R7 R7=0: NO EXTRA WORDS IN IOERBLOK 00206000 CLI RDEVTYPE,TYP2305 IS IT A 2305 ? 00207000 BNE CALLFREE NOPE - REGULAR-SIZE IOERBLOK IS FINE 00208000 *********************************************************************** 00209010 * FOR CLARITY... SIZE OF THE EXTENSION HAS TO BE CALCULATED AS WHATS 00209020 * LEFT OF THE BUFFERED DATA SIZE (E.G. 128 FOR THIS 2305) AFTER TAKING 00209030 * OUT THAT PORTION PLACED FROM IOERDATA TO THE END OF THE IOERBLOK. 00209040 * AS THIS IS VARIABLE IT SHOULD BE CALCULATED AS THE OVERALL SIZE LESS 00209050 * THE AREA PRECEDING IOERDATA... ALL OF COURSE IN NUMBER OF DOUBLEWORDS 00209060 *********************************************************************** 00209070 LA R0,IOERSIZE+(128/8-(IOERSIZE-(IOERDATA-IOERBLOK)/8)) 973 00209080 LA R7,128/8-(IOERSIZE-(IOERDATA-IOERBLOK)/8) 12 @VA09736 00209090 CALLFREE CALL DMKFREE NOW GET REGULAR OR EXTRA-SIZE IOERBLOK 00211000 USING IOERBLOK,R1 (VERY BRIEFLY) 00212000 LR R0,R7 SAVE THIS EXTENSION LENGTH @VA09736 00213010 LA R7,IOERSIZE(R7) INDICATE OVERALL LENGTH @VA09736 00213020 SLL R7,3 MULT BY EIGHT @VA09736 00213030 BCTR R7,R0 DECRIMENT BY UNO FOR EX @VA09736 00213040 BCTR R7,R0 DECRIMENT BY UNO FOR CLEAR @VA09736 00213050 MVI IOERBLOK,X'00' INIT BLOK TO ZERO @VA09736 00213060 EX R7,IOECLR AND CLEAR THE BEAUTY OUT @VA09736 00213070 STH R0,IOEREXT INDICATE THE EXTENSION @VA09736 00213080 B SKIPCLR @VA09736 00213090 SPACE 00213100 IOECLR MVC IOERBLOK+1(0),IOERBLOK EXEC TO CLEAR @VA09736 00213110 SPACE 00213120 SKIPCLR DS 0H @VA09736 00213130 DROP R1 00215000 LR R7,R1 NOW NORMAL IOERBLOK ADDRESSABILITY 00216000 USING IOERBLOK,R7 ... 00217000 LA R0,STATSIZE SIZE OF WORKING STORAGE IS 00218000 STH R0,IOERDW STORED IN THE IOERBLOK. 00219000 ST R4,IOERLOC SAVE ADDRESS OF WORKING STORAGE. 00220000 ST R4,IOBCAW SET CAW ADDRESS IN IOBLOK 00221000 STM R7,R8,STATREGS SAVE PTRS TO IOERBLOK AND RDEVBLOK 00222000 CLI RDEVTYPE,TYP2314 IS IT 2314 ?? @VA05779 00222100 BE SNS2314 YES @VA05779 00222200 LA R1,SNSRTN GET INTERRUPT RETURN ADDRESS AND 00223000 ST R1,IOBIRA STORE IT IN THE IOBLOK 00224000 OI IOBSPEC,IOBTIO TELL IOS TO DO A 'TIO' 00225000 CALL DMKIOSQR CALL IOS TO SCHEDULE SENSE 00226000 GOTO DMKDSPCH WAIT FOR I/O TO COMPLETE 00227000 SPACE 00228000 SNSRTN DS 0H CONNECTOR 00229000 USING *,R12 00230000 L R12,=A(DMKDSB) 00231000 USING DMKDSB,R12 00232000 L R4,IOBCAW RESTORE ADDRESS OF WORKING STORAGE 00233000 LM R7,R8,STATREGS RESTORE ADDRESS OF IOERBLOK AND RDEVBLOK 00234000 NI IOBSPEC,X'FF'-IOBTIO RESET 'TIO' FLAG 00235000 TM IOBSTAT,IOBFATAL WAS THERE AN ERROR CONDALTPATH @VA11416 00236100 BNZ FRETIOER IF YES, EXIT 00237000 TM IOBSTAT,IOBCC3 WAS THERE AN ERROR CONDITION @VA11416 00237060 BZ SNS2314 NO, ALL OK @VA11416 00237120 BO FRETIOER DEVICE GONE IN THE MEANWHILE @VA11416 00237180 CLC IOBCSW+4(2),=AL1(DE,0) CLEAN DEVICE END? @VA11416 00237240 BNE FRETIOER NO. @VA11416 00237300 SNS2314 EQU * @VA05779 00237500 XC IOERDATA(IOERSNSZ),IOERDATA CLEAR SENSE AREA @V407438 00238000 CLI STATCALL,X'FF' ENTERED AT DMKDSBSD ? @VA02264 00243000 BE SKIPVOL1 IF YES, NO NEED TO READ VOLUME LABEL. 00244000 CLI RDEVTYPE,TYP3380 DO WE HAVE A 3380 ? HRC011DK 00244300 BE RDVOL80 HRC011DK 00244600 CLI RDEVTYPE,TYP2305 DO WE HAVE A 2305? @VA07801 00245000 BNE RDVOLLA NOPE - GO READ VOL LABEL @VA07801 00245100 LA R6,STATREL LOOKING FOR RELEASE @VA07801 00245200 ST R6,IOBCAW STORE IT @VA07801 00245300 LA R1,RELRET LOAD R1 WITH IRA @VA07801 00245400 ST R1,IOBIRA STORE INTO IOBLOK @VA07801 00245500 OI IOBSPEC2,IOBREL IND. CH. PGM CONTAINS CP REL. @VA07801 00245600 B DSBIOS CALL IOSQR @VA07801 00245700 RDVOL80 LA R1,STATSEN-STATDASD HRC011DK 00245730 OI 4(R1),CC TURN ON COMMAND CHAINING HRC011DK 00245760 RDVOLLA OI IOBSPEC2,IOBREL IND. CH. PGM CONTAINS CP REL. @VA07801 00245800 RDVOLLB LA R1,VOL1RTN RETURN ADDR AFTER LABEL READ @VA07801 00245900 ST R1,IOBIRA STORE ADDRESS IN IOBLOK @VA07801 00246000 ST R4,IOBCAW ADDRESS OF CHANNEL PROGRAM @VA07801 00246100 DSBIOS CALL DMKIOSQR CALL IOS TO READ VOL LABEL @VA07801 00246200 GOTO DMKDSPCH WAIT FOR I/O TO COMPLETE 00247000 SPACE 00248000 RELRET DS 0H @VA07801 00248025 USING *,R12 @VA07801 00248050 L R12,=A(DMKDSB) @VA07801 00248075 USING DMKDSB,R12 @VA07801 00248100 NI IOBSPEC2,255-IOBREL TURN OFF SPECIAL REL. FLG @VA07801 00248125 CL R10,IOBLINK VERIFY IF THIS IS COPIED IOBLOK @VA07801 00248150 BNE FRETIOB YES, GET RID OF IT @VA07801 00248175 L R6,IOBCAW POINT TO IT @VA07801 00248200 LA R1,STATREL-STATDASD DISP OF REL IN CHANNEL PGM @VA07801 00248225 LR R4,R6 ADDRESS OF RELEASE TO R4 @VA07801 00248250 SR R4,R1 R4 - BEGINNING OF WORK STORAGE @VA07801 00248275 LM R7,R8,STATREGS GET IOERBLOK/RDEVBLOK ADDRESSES @VA07801 00248300 LA R6,8(,R6) POINT PAST RELEASE CCW @VA07801 00248325 L R1,IOBCSW GET ENDING CSW ADDR @VA07801 00248350 LA R1,0(R1) CLEAN ANY GARBAGE @VA07801 00248375 CR R1,R6 @VA07801 00248400 BNH SKIPFEAT 2/4 CHANSW NOT PRESENT @VA07801 00248425 OI RDEVFTR,FTRRSRL ONLY 1 CCW LEFT @VA07801 00248450 SKIPFEAT TM IOBSTAT,IOBFATAL+IOBCC3 FATAL I/O? @VA07801 00248475 BZ *+8 NO @VA07801 00248500 BAL R5,CKIOB FRET POSSIBLE IOERBLOK @VA07801 00248525 NI STATSCCW+4,X'FF'-CC NO MORE CMD CHAINING @VA07801 00248550 B RDVOLLB CALL IOS @VA07801 00248575 VOL1RTN DS 0H CONNECTOR 00249000 USING *,R12 00250000 L R12,=A(DMKDSB) 00251000 USING DMKDSB,R12 00252000 CL R10,IOBLINK IS THIS DEVICE END @VA01965 00253000 BNE FRETIOB IF NOT, GO FRET IOB @VA01940 00254000 L R4,IOBCAW RESTORE ADDRESS OF WORKING STORAGE. 00255000 LM R7,R8,STATREGS RESTORE ADDRESS OF IOERBLOK AND RDEVBLOK 00256000 TM STATSCCW+4,CC NO CMD CHAINING HERE @VA07801 00257000 BZ LABRED DON'T BOTHER WITH RELEASE @VA07801 00257100 NI IOBSPEC2,255-IOBREL TURN OFF SPECIAL REL. FLG @VA07801 00257200 LA R0,STATREL+8 GET END OF RELEASE CCW ADDRESS @VA07801 00257300 L R1,IOBCSW GET ENDING CSW ADDRESS @V407438 00258200 LA R1,0(R1) CLEAR ANY GARBAGE @V407438 00258300 CLR R1,R0 DID WE GET THE LABEL READ? @V407438 00258400 BNH LABRED ENDED BEFORE REL CCW @VA07875 00258500 L R5,RDEVCUB GET ADDRESS OF ALTCU @VA07875 00258520 LTR R5,R5 IS THERE ALTCU ? @VA07875 00258540 BNZ LABRED YES, CAN NOT ALLOW RES/REL @VA07875 00258560 OI RDEVFTR,FTRRSRL ONLY 1 CCW LEFT, R/R MUSTBE GOOD@V407438 00258600 LABRED TM IOBSTAT,IOBFATAL+IOBCC3 FATAL I/O @VA07801 00259100 BNZ FRETIOER POSSIBLY FRET IOERBLOK @VA07801 00259200 CLI RDEVTYPE,TYP3380 IS THIS A 3380 DASD ? HRC011DK 00259220 BNE LABCOMP NO, CONTINUE HRC011DK 00259240 MVC RDEVMDL,STATSDE4 YES, STORE MODEL TYPE HRC011DK 00259260 LABCOMP DS 0H HRC011DK 00259280 BAL R5,COMPVOL1 COMP THE LABEL READ WITH VOLID @VA07801 00259300 BE FRETIOER IF NOT CHANGED SKIP THE BUFFER UNLOAD 00260000 SPACE 00261000 SKIPVOL1 CL R10,IOBLINK DO WE HAVE A COPIED IOBLOK ? @VA07015 00262100 BNE FRETIOB YES, GO FRET IOBLOK AND OUT @VA07015 00262200 TM RDEVFTR,FTREXTSN DOES DEVICE HAVE BUFFERS ? @VA07015 00262300 BZ FRETIOER IF NOT, DO NOT ISSUE BUFFER UNLOAD 00263000 LM R0,R1,PACKCHG RESOLVE ADDRESS OF BUFFER UNLOAD CCW 00264000 CLI RDEVTYPE,TYP2305 HOLD IT - DO WE HAVE THE RIGHT CCW ? 00265000 BNE *+8 YES - DON'T BE A WORRY-WART. 00266000 LM R0,R1,UNLD2305 NOPE - GET THE RIGHT ONE LIKE I SAID 00267000 ALR R0,R7 00268000 STM R0,R1,STATSNS 00269000 STH R1,IOERLEN SAVE SENSE LENGTH FOR ERROR RECORDING 00270000 LA R1,READBUF LOAD R1 W/ INTERRUPT RETURN ADDRESS AND 00271000 ST R1,IOBIRA STORE IT IN THE IOBLOK. 00272000 ST R4,IOBCAW SET CAW ADDR IN IOBLOK @VA01727 00273000 STM R7,R8,STATREGS SAVE PTR TO IOERBLOK AND RDEVBLOK@VA01727 00274000 CALL DMKIOSQR CALL IOS FOR BUFFER UNLOAD OPERATION. 00275000 GOTO DMKDSPCH WAIT FOR I/O TO COMPLETE. 00276000 SPACE 00277000 READBUF DS 0H CONNECTOR 00278000 USING *,R12 00279000 L R12,=A(DMKDSB) 00280000 USING DMKDSB,R12 00281000 L R4,IOBCAW RESTORE ADDRESS OF WORKING STORAGE 00282000 LM R7,R8,STATREGS RESTORE ADDRESS OF IOERBLOK AND RDEVBLOK. 00283000 TM IOBSTAT,IOBFATAL+IOBCC3 WAS THERE AN ERROR CONDITION 00284000 BNZ FRETIOER IF YES, EXIT 00285000 LH R3,IOERDW SAVE NUMBER OF DW IN WORKING STORAGE. 00286000 ST R7,IOBIOER STORE ADDRESS OF IOERBLOK FOR RECORDER. 00287000 MVC IOERVSER(6),RDEVSER MOVE IN OLD VOLID @VA01727 00288000 CALL DMKIOESD RECORD THIS RECORD. 00289000 B FRETSTAT RELEASE WORKING STORAGE 00290000 SPACE 00291000 FRETIOER LA R0,IOERSIZE SIZE OF 1 IOERBLOK 00292000 AH R0,IOEREXT INCLUDE EXTRA SIZE (IF ANY) 00293000 LR R1,R7 LOCATION OF IOERBLOK. 00294000 CALL DMKFRET FRET THIS STORAGE 00295000 SPACE 00296000 FRETSTAT BAL R5,TESTVOL CHECK VOLUME STATUS @VA03772 00297000 ICM R2,B'1000',STATCALL RESTORE CALLING IND.. @VA03772 00298000 L R13,STATGR13 AND SAVEAREA REG @VA03772 00299000 LR R1,R4 ADDRESS OF STAT DSECT 00300000 LA R0,STATSIZE ALSO ITS SIZE 00301000 CALL DMKFRET FRET IT 00302000 BAL R5,CKIOB FRET POSSIBLE IOERBLOK 00303000 LTR R2,R2 ENTERED AT DMKDSBSD ? @VA02264 00304000 BM RETNSHUT IF YES, EXIT TO CALLER , OTHERWISE 00305000 FRETIOB LR R1,R10 R1 IS ADDR OF IOB @VA01940 00306000 LA R0,IOBSIZE GET IT'S SIZE @VA01965 00307000 CALL DMKFRET AND RELEASE IT @VA01965 00308000 GOTO DMKDSPCH GOTO THE DISPATCHER. 00309000 SPACE 00310000 RETNSHUT EXIT EXIT TO CALLER. 00311000 SPACE 3 00312000 * BUILD A BUFFER TO READ THE VOLID OF PACK 00313000 SPACE 00314000 GETSTBUF LA R0,STATSIZE GET A BUFFER TO READ THE VOL1 LABEL 00315000 CALL DMKFREE 00316000 LR R4,R1 SAVE THE POINTER TO THE BUFFER 00317000 XC STATDASD(STATSIZE*8),STATDASD ZERO OUT THE BUFFER 00318000 MVC STATVOL1(6),BLANKS INITIALIZE LABL AND VOL1 @VA04062 00318500 MVC STATDASD(RDVOLEND-RDVOLID),RDVOLID MOVE MDL CCWS@V407438 00319000 LA R14,((RDVOLEND-8)-RDVOLID)/8 GET LOOP COUNT @V4M0003 00320100 LA R1,STATSEEK ADDR OF THE FIRST TO DO @V407438 00321000 RESOLVAD L R15,0(R1) GET THE CURRENT ADDRESS @V407438 00322000 ALR R15,R4 ADJUST BY BEGINNING OF GOTTEN STG@V407438 00323000 ST R15,0(R1) AND RESTORE @V407438 00324000 LA R1,8(R1) BUMP TO NEXT CCW @V407438 00325000 BCT R14,RESOLVAD CONTINUE UNTIL ALL CCW'S ARE DONE@V4M0003 00326100 BR R5 RETURN TO THE CALLING ROUTINE 00335000 SPACE 3 00336000 * COMPARE THE VOLID READ TO THE VOLID IN THE REAL DEVICE BLOCK 00337000 SPACE 00338000 COMPVOL1 CLC STATVOL1,=C'VOL1' STANDARD VOL 1 LABEL 00339000 BE STANDLBL YES - 00340000 CLC STATVOL1(3),=C'CMS' ANY CMS TYPE LABEL? HRC015DK 00341000 BE STANDLBL YES - 00342000 MVC STATLABL+4(2),STATLABL MOVE LABEL IN PIECES @VA04062 00343500 MVC STATLABL(4),STATVOL1 PREVENT OVERLAP @VA04062 00344500 STANDLBL EQU * HERE FOR STANDARD LABEL 00345000 CLC STATLABL,RDEVSER WAS THE PACK CHANGED ? 00346000 BCR 8,R5 RETURN WITH THE CONDITION CODE SET 00347000 MVI STATPACK,X'FF' INDICATE PACK WAS CHANGED 00348000 BR R5 RETURN WITH THE CONDITION CODE SET 00349000 SPACE 3 00350000 * TEST IF PACK WAS CHANGED AND IN USE BY THE SYSTEM 00351000 SPACE 00352000 TESTVOL CLI STATPACK,X'FF' WAS THE PACK CHANGE 00353000 BCR 7,R5 NO- RETURN TO THE CALLER 00354000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00354100 CLI RDEVTYPE,TYP3330 IS IT A 3330 @V60B6B8 00354110 BNE TESTSYS NO, NO SPECIAL 3330V CHECK @V60B6B8 00354120 TM RDEVFTR,SYSVIRT+VIRTUAL IS IT A VUA @V60B6B8 00354130 BNZ MNT3330V YES, CHECK FOR WAITING USER @V60B6B8 00354140 TESTSYS EQU * CONTINUE STANDARD DASD CHECKS @V60B6B8 00354150 TM RDEVFLAG,RDEVSYS+RDEVOWN WAS PACK IN USE BY SYSTEM 00355000 BNZ ERROR956 DO NOT MOVE IN NEW VOLID; VARY OFFLINE 00356000 MVC RDEVSER,STATLABL MOVE IN THE NEW VOLID 00357000 TM RDEVSTAT,RDEVDED DEVICE DEDICATED ? 00358000 BO *+8 YES -- 00359000 OI RDEVFLAG,RDEVMOUT INDICATE VOLUME MOUNTED; NOT ATTACHED 00360000 CLI RDEVTYPE,TYP3340 3340 TYPE ? @V2A2029 00361000 BCR 7,R5 NO - RETURN TO CALLER @V2A2029 00362000 NI RDEVFTR,X'FF'-(FTRRPS+FTR70MB+FTR35MB) RESET @V2A2029 00363000 TM STATSDAT+2,X'80' RPS FEATURE PRESENT ? @V2A2029 00364000 BZ *+8 NO - @V2A2029 00365000 OI RDEVFTR,FTRRPS INDICATE RPS FEATURE @V2A2029 00366000 TM STATSDAT+2,X'02' 3340 70MB PACK MOUNTED ? @V2A2029 00367000 BZ SET35MB NO -- MUST BE 35MB PACK @V2A2029 00368000 OI RDEVFTR,FTR70MB INDICATE 70MB PACK MOUNTED @V2A2029 00369000 BR R5 RETURN TO CALLER @V2A2029 00370000 SET35MB OI RDEVFTR,FTR35MB INDICATE 35MB PACK MOUNTED @V2A2029 00371000 BR R5 RETURN TO CALLER IF NOT IN USE BY SYSTEM 00372000 SPACE 1 00372100 ERROR956 OI RDEVSTAT,RDEVDISA MARK THE DEVICE OFFLINE 00373000 LH R1,IOBRADD GET THE REAL DEVICE ADDRESS 00374000 CALL DMKCVTBH AND CONVERT IT 00375000 LR R3,R1 SAVE CONVERTED ADDRESS 00376000 LA R0,(L'DSB956+7)/8 GET A MSG BUFFER 00377000 CALL DMKFREE 00378000 MVC 0(L'DSB956,R1),DSB956 MOVE IN THE MSG 00379000 STCM R3,7,DSB956AD(R1) FILL IN THE CONVERTED ADDRESS 00380000 MVC DSB956VS(6,R1),STATLABL THE VOLID ALSO 00381000 LR R3,R0 SAVE THE BUFFER LENGTH (DW) 00382000 LA R0,L'DSB956 SET UP THE MSG LENGTH 00383000 LA R2,DFRET+NORET+OPERATOR+ALARM PARM REG 00384000 CALL DMKQCNWT TELL THE OPERATOR 00385000 BR R5 RETURN TO THE CALLER 00386000 EJECT 00386100 MNT3330V EQU * PROCESS 3330V MOUNT @V60B6B8 00386200 * 00386300 * THIS ROUTINE IS ENTERED WHEN A 3330V VOLUME 00386400 * HAS BEEN MOUNTED ON A NON-DEDICATED VUA. 00386500 * THIS CODE WILL SCAN THE QUEUE OF MSSCOM 00386600 * BLOCKS WHICH DESCRIBE MACHINES WAITING FOR 00386700 * 3330V'S. THIS QUEUE IS CREATED BY DMKSSS 00386800 * WHEN A MOUNT ORDER FOR A SYSTEM VOLUME IS 00386900 * ISSUED TO THE MSC. THE UNSOLICITED DEVICE 00387000 * END, INDICATING MOUNT COMPLETE, IS GENERATED 00387100 * BY THE STAGING ADAPTER WHEN THE FIRST CYLINDER 00387200 * OF THE REQUESTED VOLUME HAS BEEN STAGED. 00387300 * 00387400 * WHEN THE CORRECT MSSCOM BLOCK IS FOUND, THE 00387500 * ADDRESS OF A CPEXBLOK IS EXTRACTED. THIS 00387600 * CPEXBLOK IS CREATED BY DMKSSS WHEN THE MSSCOM 00387700 * BLOCK IS QUEUED. THE DISPATCH ADDRESS IN THE 00387800 * CPEXBLOK POINTS TO AN ENTRY IN DMKSSS AT WHICH 00387900 * A LINK TO A SYSTEM 3330V IS TO CONTINUE. 00388000 * 00388100 MVC RDEVSER,STATLABL MOVE LABEL INTO RDEVBLOK @V60B6B8 00388200 NI RDEVFLAG,X'FF'-RDEVSEL-RDEVMOUT @VA09303 00388210 * HOLLY 00388300 L R1,MOUNTQ ANCHOR FOR QUEUE OF MSSCOM BLOCKS@V60B6B8 00388400 L R6,0(R1) FIRST MSSCOM BLOCK @V60B6B8 00388500 LTR R6,R6 IS THERE A Q @V60B6B8 00388600 BZ NOWAIT NO, NO ONE WAITING @V60B6B8 00388700 USING VSCOMM,R6 ADDRESSABILITY FOR ASSEMBLER @V60B6B8 00388800 COMPVOL EQU * LOOP TO FIND BLOCK FOR THIS @V60B6B8 00388900 * VOLUME 00389000 CLC RDEVSER,MSSSER COMPARE VOLSER JUST MOUNTED @V60B6B8 00389100 * TO VOLSER THIS BLOCK DESCRIBES 00389200 BE COMMFOUN THIS IS THE ONE @V60B6B8 00389300 DEVADBAD EQU * @VMI2016 00389310 LA R1,MSSNEXT RESET R1 FOR FUTURE RECHAINING @V60B6B8 00389400 L R6,MSSNEXT GET NEXT BLOCK POINTER @V60B6B8 00389500 LTR R6,R6 IS THERE ANOTHER BLOCK @V60B6B8 00389600 BNZ COMPVOL YES, CHECK IT @V60B6B8 00389700 NOWAIT EQU * NO ONE WAITING ON THIS MOUNT @V60B6B8 00389800 OI RDEVFLAG,RDEVMOUT SET FLAG: VOLUME MOUNTED @V60B6B8 00389900 BR R5 RETURN: NO ONE WAITING @V60B6B8 00390000 COMMFOUN EQU * SOMEONE NEEDS THIS VOLUME @V60B6B8 00390100 LH R1,RDEVADD DEVICE ADDR @VMI2016 00390103 L R15,RDEVCUA RCUBLOK ADDR @VMI2016 00390106 LH R0,RCUADD-RCUBLOK(R15) CU ADDR @VMI2016 00390109 OR R1,R0 CU-DEV ADDR @VMI2016 00390112 TM RCUTYPE-RCUBLOK(R15),RCUSUB SUBORD CUBLOK? @VMI2016 00390115 BZ GOTPRIME NO, PRIME, POINTS TO RCHBLOK @VMI2016 00390118 L R15,RCUPRIME-RCUBLOK(R15) GET PRIME RCUBLOK @VMI2016 00390121 GOTPRIME EQU * THIS RCUBLOK POINTS TO RCHBLOK @VMI2016 00390124 L R15,RCUCHA-RCUBLOK(R15) RCHBLOK ADDR @VMI2016 00390127 LH R0,RCHADD-RCHBLOK(R15) CHAN ADDR @VMI2016 00390130 OR R1,R0 CH - CU - DEV ADDR @VMI2016 00390133 CH R1,MSSVUA IS MSS P.C.I. ON CORRECT ADDR @VMI2016 00390136 BNE DEVADBAD NO, MUST BE ALT PATH @VMI2016 00390139 * 00390147 * CHECK TO SEE IF THIS MSS VOLUME IS BEING MOUNTED BY VM/370. 00390155 * IF SO, THEN FLAG AS SO IN ORDER TO RECOGNIZE ANY NEED TO 00390163 * ISSUE A RELINQUISH REQUEST FOR THIS VOLUME. 00390171 * 00390179 OI RDEVFLAG,RDEVVMNT FLAG AS MOUNTED BY CP @VA11344 00390187 L R2,MSSTASK1 ADDR OF CPEXBLOK FOR DMKSSS @V60B6B8 00390200 LA R0,CPEXSIZE SIZE OF CPEXBLOK FOR DMKFREE @V60B6B8 00390300 * HOLLY 00390400 CALL DMKFREE HOLLY @V60B6B8 00390500 USING CPEXBLOK,R1 HOLLY @V60B6B8 00390600 STM R0,R15,CPEXREGS SAVE REGS IN CPEXBLOK @V60B6B8 00390700 * HOLLY 00390800 L R15,=V(DMKSSSEN) STACK A CPEXBLOK @V60B6B8 00390900 * HOLLY 00391000 ST R15,CPEXADD FOR DMKSSEN @V60B6B8 00391100 * HOLLY 00391200 CALL DMKSTKCP PUT THE CPEXBLOK ON DISPATCH Q @V60B6B8 00391300 BR R5 BACK TO THE MAINLINE @V60B6B8 00391400 DROP R6 THROUGH WITH MSSCOM @V60B6B8 00391500 USING STATDASD,R4 @V60B6B8 00391600 * THIS ROUTINE WILL CHECK FOR A SECOND IOERBLOK . IF ONE WAS 00777000 * OBTAINED STORAGE WILL BE GIVEN BACK TO THE SYSTEM. 00778000 * 00779000 CKIOB L R1,IOBIOER GET ADDR OF 2'ND IOERBLOK @VA07801 00780000 LA R1,0(R1) CLEAR HI BYTE 00781000 LTR R1,R1 WAS BLOCK REALY OBTAINED ? 00782000 BZ NOTUSED BRANCH IF NO. 00783000 TM IOERCSW+5-IOERBLOK(R1),IFCC+CCC+CDC IS CHANNEL @VA01254 00784000 * ERROR 00785000 * INDICATED ? 00786000 BZ CKEND NO, GO FRET IOERBLOK @VA01254 00787000 LR R3,R1 SAVE THE IOERBLOK POINTER @VA01254 00788000 L R1,IOERCCRA-IOERBLOK(R3) CHANNEL REC ADDR @V508690 00789500 L R0,IOERCCRL-IOERBLOK(R3) CHANNEL REC LENGTH @V508690 00790500 CALL DMKFRET RELEASE STORAGE @VA01254 00793000 LR R1,R3 GET IOERBLOK POINTER @VA01254 00794000 CKEND EQU * @VA01254 00795000 LA R0,IOERSIZE LOAD IOERBLOK SIZE. 00796000 AH R0,IOEREXT-IOERBLOK(,R1) INCLUDE EXTRA SIZE (IF ANY) 00797000 CALL DMKFRET 00798000 NOTUSED MVC IOBIOER,ZEROES CLEAR ADDRESS IN IOBLOK IN CASE 00799000 BR R5 RETURN TO CALLER. 00800000 SPACE 1 00801000 DSB956 DC C'DMKDSB956A DASD XXX VOLID XXXXXX NOT MOUNTED; NOW OFFL*01217000 INE' 01218000 DSB956AD EQU 16 DISP OF THE UNIT ADDRESS 01219000 DSB956VS EQU 26 DISP OF THE VOL SER NO 01220000 SPACE 01221000 RDVOLID CCW X'07',STATCCHH-STATDASD,CC+SILI,6 SEEK 01222000 CCW X'08',STATSRCH-STATDASD,CC+SILI,1 @V407438 01222250 CCW X'03',0,SILI,1 TIC/NOP FOR 3330V'S @V407438 01222500 CCW X'31',STATCCHH+2-STATDASD,CC+SILI,5 SRCHID 01223000 CCW X'08',STATSRCH-STATDASD,CC+SILI,1 TIC 01224000 CCW X'06',STATVOL1-STATDASD,CC+SILI,10 READ DATA @V2A2029 01225000 CCW X'04',STATSDAT-STATDASD,SILI+CC,IOERSNSZ SENSE @VA07801 01225500 CCW X'94',STATSDAT-STATDASD,SILI+CC,IOERSNSZ RELSE @VA07801 01226000 CCW X'04',STATSDAT-STATDASD,SILI,IOERSNSZ SENSE @VA07801 01226500 SENSE4 CCW X'E4',STATSE4-STATDASD,SILI,7 SENSE ID HRC011DK 01226700 VOL1CCHH DC X'0000000000000300' SEARCH AURGUMENT 01227000 RDVOLEND EQU * END OF CH PGMS + SEEK/SRCH ARG @V407438 01227250 SPACE 01227500 PACKCHG CCW X'A4',IOERDATA-IOERBLOK,SILI,24 BUFFER UNLOAD COMMAND 01228000 UNLD2305 CCW X'24',IOERDATA-IOERBLOK,SILI,128 DITTO FOR 2305 ONLY 01229000 SPACE 01230000 MOUNTQ DC V(DMKSSSMQ) ANCHOR FOR QUEUE OF MSSCOM BLOCKS@V60B6B8 01230010 * DESCRIBING 3330V'S BEING MOUNTED 01230020 LTORG @V407438 01270750 EJECT 01271000 COPY IOER GET IOERSNSZ DEFINED @V407438 01271250 EJECT 01271500 STATDASD DSECT 01273000 STATSEEK DS D SEEK CCW 01274000 STATTIC1 DS D TIC TO "STATSRCH" @V407438 01274250 STATNOP DS D NOP, END HERE FOR 3330V CYL FAULT@V407438 01274500 STATSRCH DS D SEARCH ID EQUAL CCW 01275000 STATTIC DS D TIC CCW 01276000 STATREAD DS D READ DATA CCW 01277000 STATSCCW DS D SENSE CCW (3340) @VA07801 01277500 STATREL DS D RELEASE CCW @VA07801 01278000 STATSEN DS D SENSE FOR DETECTING RELEASE @VA07801 01278500 STATSE4 DS D SENSE ID FOR 3380S HRC011DK 01278700 STATCCHH DS D SEARCH AURGUMENT (BBCCHHR) 01279000 STATVOL1 DS CL4 (VOL1) 01280000 STATLABL DS CL6 VOLUME SERIAL NUMBER. 01281000 DS CL4 01282000 STATPACK DS CL1 PACK CHANGE SWITCH 01283000 STATCALL DS CL1 CALLED FROM SHUTDOWN 01284000 STATSDAT DS CL(IOERSNSZ) SENSE INFORMATION @V407438 01285000 STATSDE4 DS CL7 SENSE ID INFORMATION HRC011DK 01285300 DS CL1 HRC011DK 01285600 STATREGS DS D GPR7-8 SAVE AREA 01286000 STATGR13 DS F USED TO SAVE GPR-13 01287000 DS F 01288000 ORG STATSEEK 01289000 STATSNS DS D BUFFER UNLOAD CCW 01290000 ORG 01291000 STATSIZE EQU (*-STATDASD)/8 SIZE OF DSECT IN DOUBLE WORDS 01293000 EJECT 01318000 VSCOMM MSSCOM @V60B6B8 01318010 EJECT 01318020 COPY RBLOKS @V200820 01319000 COPY VMBLOK @VA04231 01319800 COPY IOBLOKS @V200820 01320000 COPY DEVTYPES @V200820 01321000 COPY EQU @V200820 01322000 COPY SAVE @V200820 01324000 PSA @V200820 01325000 END DMKDSB @V200820 01326000