DAS TITLE 'DMKDAS (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE INPUT SERIALIZATION @V200820 00002000 *. 00003000 * 00004000 * MODULE NAME : DMKDAS 00005000 * 00006000 * 00007000 * 00008000 * FUNCTION : TO EXAMINE THE ERROR CONDITION RESULTING FROM A UNIT CHECK 00009000 * WHILE EXECUTING A CP GENERATED DASD CHANNEL PROGRAM. 00010000 * THE ORIGINAL CHANNEL PROGRAM WILL BE RETRIED WHEN POSSIBLE 00011000 * TO CORRECT THE FAILING CONDITION. IF THE ERROR CONDITION 00012000 * IS UNCORRECTABLE CONTROL WILL BE PASSED TO THE MESSAGE 00013000 * WRITER (DMKMSW) FOR OPERATOR AWARENESS. UPON RETURNING 00014000 * FROM MESSAGE WRITER THE ORIGINAL CHANNEL PROGRAM MAY BE 00015000 * RE-EXECUTED OR TERMINATED. ALSO STATISTICAL COUNTERS 00016000 * FOR 2314 TYPE DEVICE WILL BE UPDATED. 00016100 * 00017000 * 00018000 * 00019000 * ATTRIBUTES : REENTRANT,RESIDENT,CALLED VIA SVC. 00020000 * 00021000 * 00022000 * ENTRY POINT : DMKDASER - TO RETRY THE FAILING DASDI CHANNEL PROGRAM 00023000 * 00026000 * 00027000 * ENTRY CONDITIONS : GPR8=ADDRESS OF RDEVBLOK 00028000 * GPR10=ADDRESS OF IOBLOK 00029000 * GPR12=BASE ADDRESS 00030000 * GPR13=ADDRESS OF SAVE AREA 00031000 * 00032000 * 00033000 * EXIT CONDITIONS : 1. WHEN RETRY IS POSSIBLE. 00034000 * IOBFLAG=IOBRSTRT 00035000 * IOBRCAW=ADDRESS OF RESTART CCW STRING. 00036000 * 2. WHEN RETRY IS NOT POSSIBLE. 00037000 * IOBSTAT=IOBFATAL 00038000 * 00039000 * 00040000 * CALLS TO OTHER ROUTINES : 00041000 * 1. DMKMSW - TO PROVIDE OPERATOR COMMUNICATION 00042000 * IN ATTEMPTING TO CORRECT THE 00043000 * ERROR CONDITION. 00044000 * 2. DMKFREE - TO OBTAIN STORAGE FOR DASD 00045000 * ENVIRONMENTAL SENSE DATA. THIS 00046000 * CONDITION OCCURS WHEN THE CONTROL 00047000 * UNIT INDICATES AN OVERFLOW OF THE 00048000 * USAGE COUNTER. 00049000 * 3. DMKFRET - TO RETURN STORAGE OBTAINED BY DMKFRE 00050000 * 4. DMKQCNWT - TO WRITE MSG DAS956A TO OPERATOR 00051000 * 5. DMKCVTBH - TO CONVERT REAL DEVICE ADDRESS 00052000 * 6. DMKIOEST - TO UPDATE STATISTICAL DATA COUNTERS 00053000 * 7. DMKTRKIN - TO HANDLE TRACK CONDITION CHECKS 00053100 * 00056000 * 00057000 * EXTERNAL REFERENCES : 00058000 * DMKMSW 00060000 * DMKIOEST 00060100 * 00061000 * 00062000 * TABLES AND WORKAREAS: BUFFER TO CONTAIN CHANNEL PROGRAM 00063000 * & LABEL READ FROM DASD VOLUME. 00064000 * 00065000 * REGISTER USAGE : 00066000 * GPR 0=PSA ADDRESSABILITY 00067000 * GPR 1=SCRATCH 00067100 * GPR 2=SCRATCH 00067200 * GPR 3=USED FOR TESTING RE-OCCURRING ERRORS 00067300 * GPR 4=SCRATCH 00068000 * GPR 5=GENERAL USAGE IS FOR BAL REGISTER 00069000 * GPR 6=SCRATCH 00070000 * GPR 7=IOERBLOK ADDRESS 00071000 * GPR 8=RDEVBLOK ADDRESS. 00072000 * GPR 9=SCRATCH 00073000 * GPR 10=IOBLOK ADDRESS. 00074000 * GPR 11=VMBLOK ADDRESS. 00075000 * GPR 12=BASE ADDRESS. 00076000 * GPR 13=SAVE AREA ADDRESS. 00077000 * GPR 14=EXTERNAL LINKAGE REGISTER. 00078000 * GPR 15=EXTERNAL LINKAGE REGISTER. 00079000 * 00080000 * 00081000 * NOTES : NONE. 00082000 * 00083000 * 00084000 * 00085000 * OPERATION : A. IF THE RETRY COUNT IN THE IOBLOK IS ZERO, STORE 00086000 * THE ADDRESS OF THE IOERBLOK IN THE RDEVBLOK. 00087000 * B. TEST FOR CHANNEL ERRORS. 00088000 * 1. CHANNEL DATA CHECKS ARE RETRIED 10 TIMES. 00089000 * 2. INTERFACE AND CHANNEL CONTROL CHECKS ARE 00090000 * RETRIED 10 TIMES. 00091000 * C. TEST FOR THE SPECIFIC TYPE OF ERROR. 00092000 * 1. EQUIPMENT CHECK - THE OPERATION IS RETRIED 10 TIMES 00093000 * 2. NO RECORD FOUND (NRF) CONDITION (2314/2319) A READ 00094000 * HOME ADDRESS IS EXECUTED AND THE DATA IS COMPARED 00095000 * TO THE SEEK ADDRESS. IF THE COMPARISON IS UNEQUAL 00096000 * A RECALIBRATE IS EXECUTED AND THE ORIGINAL CHANNEL 00097000 * PROGRAM IS RETRIED FOR A MAXIMUM OF 10 TIMES. IF 00098000 * THE COMPARISON IS EQUAL RETURN TO THE CALLER. 00099000 * NO RECORD FOUND CONDITION (2305/3330/3340) RETURN 00100000 * TO CALLER 00101000 * 3. SEEK CHECKS ARE RETRIED 10 TIMES, EXCEPT THE 00102000 * 3330/50/80 HAVE BEEN RETRIED ALREADY. HRC011DK 00103490 * 4. INTERVENTION REQUIRED - READ THE VOLID; IF PACK 00104000 * WAS CHANGED UNLOAD THE ENVIRONMENTAL BUFFER 00105000 * (3330/40/50/80) AND IF THE VOLUME WAS USED HRC011DK 00106490 * SYSTEM MARK DEVICE OFFLINE (MSG DMKDAS956). 00107000 * IN ANY CASE RESTART THE OPERATION. 00108000 * 5. BUS-OUT CHECK - RETRY THE OPERATION ONCE. 00109000 * 6. DATA CHECKS (2314/2319) ARE RETRIED 256 TIMES WITH 00110000 * RECALIBRATIONS BEING EXECUTED EVERY 16 TIMES. 00111000 * EXCEPTIONS ARE : (A) THE 3330/50/80 HAVE HRC011DK 00112490 * BEEN RETRIED BY THE HARDWARE. (B). 3340 AND 2305 00113000 * WILL BE RETRIED 10 TIMES. 00114000 * 7. OVERRUN - THE OPERATION IS RETRIED 10 TIMES. 00115000 * 8. MISSING ADDRESS MARKER-THE OPERATION IS RETRIED 00116000 * 10 TIMES. 00117000 * 9. COMMAND REJECT - RETURN TO THE CALLER 00118000 * 10. TRACK CONDITION CHECK - IF THIS IS A DEFECTIVE 00119000 * TRACK CALL DMKTRKIN FOR 3340/3344 DISKS. FOR OTHER 00120100 * TYPES, AN OPERATOR MESSAGE IS ISSUED. 00120200 * 11. END-OF CYL,TRACK OVERFLOW,AND FILE PROTECT 00122000 * CONDITIONS- RETURN TO CALLER. 00123000 * 12. CHAINING CHECK- TEST FOR COMMAND REJECT. 00124000 * IF NOT PRESENT RETRY THE OPERATION 10 TIMES. 00125000 * 13. ENVIRONMENTAL DATA PRESENT HRC011DK 00126290 * (3330/3340/3350/3380/2305) HRC011DK 00126580 * RE-EXECUTE THE ORIGINAL CHANNEL PROGRAM. 00127000 * 00128000 * 00129000 * D. IF THE RETRY PROCEDURE HAS BEEN EXHAUSTED AND 00130000 * UNSUCCESSFUL CALL DMKMSW FOR OPERATION OPTIONS. 00131000 * (I.E. CANCEL,RETRY,IGNORE) THE RESPONSES ALLOWED 00132000 * WILL BE BASED ON THE CONDITION CAUSING THIS ERROR. 00133000 * 00134000 * E. WHEN THE RETRY PROCEDURE IS FINISHED (EITHER CORRECTED 00135000 * OR UNCORRECTABLE), CALL DMKIOEST TO CAUSE STATISTICAL 00135100 * COUNTERS FOR 2314 TYPE DEVICES TO BE UPDATED. 00135200 * 00135300 * F. CYL POSITION VERIFICATION WILL ONLY BE 00135400 * PERFORMED IF THE FIRST CCW IN THE CHANNEL PROGRAM 00136000 * IS A SEEK AND THE SEEK COMMAND IS VALID. 00137000 * 00138000 * ERROR MESSAGES: 00139000 * 00140000 * DMKDAS956A DASD CCU VOLID VOLID NOT MOUNTED; NOW OFFLINE 00141000 *. 00142000 EJECT 00143000 COPY OPTIONS 00144000 DMKDAS CSECT 00145000 ENTRY DMKDASER HANDLE ERRORS FOR DASD DEVICES 00148000 SPACE 00149000 EXTRN DMKMSWR 00150000 EXTRN DMKCVTBH 00152000 EXTRN DMKIOEST @VA03757 00153100 EXTRN DMKTRKIN @V56BDA8 00153200 EXTRN DMKSTKCP @VA12941 00153400 USING SAVEAREA,R13 00154000 USING PSA,R0 00155000 USING IOERBLOK,R7 ADDRESSABILITY FOR IOERBLOK @VA08187 00156000 USING STATDASD,R4 ADDRESSABILITY FOR STATISICAL DATA 00157000 USING RDEVBLOK,R8 00158000 USING IOBLOK,R10 00159000 USING DMKDAS,R12,R6 ADDRESSABILITY @VA08187 00160000 EJECT 00387000 DMKDASER ENTER HANDLE ERRORS FOR DASD DEVICES: 00388000 LA R6,4095(R12) ADDRESSABILITY FOR 2ND BASE @VA08187 00389000 LA R6,1(,R6) ... @VA08187 00390000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00391100 ICM R7,15,RDEVIOER GET THE FIRST IOERBLOK, IF ANY. 00392000 BP NOTFIRST IF NONE THIS IS THE FIRST TIME IN 00393000 L R7,IOBIOER LOAD IOERBLOK IN REG.7 00394000 ST R7,RDEVIOER STORE ADDR IOERBLOK IN RDEVBLOK 00395000 SR R3,R3 CLEAR ADDR. FOR SECOND ERROR 00396000 ST R3,IOBIOER 00397000 STH R3,IOBRCNT ZERO THE IOBRCNT FOR THE FIRST TIME IN 00398000 NI IOBSTAT,X'FF'-IOBFATAL INSURE BIT IS OFF 00399000 NI IOBFLAG,X'FF'-(IOBRSTRT+IOBERP) MASK OFF BITS @VM08912 00400000 LTR R7,R7 IS THERE AN IOERBLOK @VM08912 00401000 BZ CORRECT1 NO, GO TO EXIT @VM08912 00402000 BAL R5,SKLOOP NORMALLY, THIS GETS USER'S SEEK @V56BDA8 00403000 * ADDRESS INTO IOERADDR & SETS IOERDASD ON. 00403010 OI IOBFLAG,IOBERP INDICATE ERP IN CONTROL 00404000 NI IOERFLG2,X'FF'-IOERMSW CLEAR MSG. WRITER FLAG @VM08912 00405000 NI IOERFLG3,X'FF'-IOERREAD RESET FLAG @VA03757 00405100 TM IOERDATA,X'08' DATA CHECK PRESENT ?? @VA03757 00405200 BZ NOTFIRST NO, CONTINUE @VA03757 00405300 BAL R5,RDOPCK GO CHECK IF FAILING COMMAND WAS @V56BDA8 00405400 * A READ OPERATION. IF SO, SET IOERREAD ON. 00405410 NOTFIRST EQU * R7 WILL POINT TO THE FIRST IOERBLOK 00406000 TM IOERIND3,IOERDEC IS MSG WTR WAITING FOR OPER RESP? 00407000 BNO NOTMSW NO- BRANCH MSG WTR (DMKMSWR) NOT WAITING*00408000 YES- IGNORE INT(S) UNTIL OPER RESPONDES 00409000 EXIT5 EQU * @VM08912 00410000 BAL R5,CKIOB RETURN ANY IOERBLOK 00411000 NI IOBFLAG,X'FF'-IOBRSTRT INSURE NO RESTART @VA00881 00412000 EXIT @VA00881 00413000 NOTMSW EQU * 00414000 LH R4,IOBRCNT INSERT I/O ERROR CTR. 00415000 A R4,F1 INCREASE COUNT BY 1 00416000 STH R4,IOBRCNT STORE NEW VALUE 00417000 L R3,IOBIOER GET THE ADDRESS OF THE SECOND @VA01254 00418000 * IOERBLOK 00419000 TM IOERCSW+5,IFCC+CCC+CDC IS THIS A CHANNEL ERROR ?@VA01254 00420000 BNZ DASCOUNT YES, GO TEST FOR VOL1 @VA01254 00421000 LTR R3,R3 DOES SECOND IOERBLOK EXIST ? @VA01254 00422000 BZ DASCOUNT NO, GO TEST FOR VOL1 @VA01254 00423000 TM IOERCSW+5-IOERBLOK(R3),IFCC+CCC+CDC IS CHANNEL @VA01254 00424000 * ERROR 00425000 * INDICATED ? 00426000 BZ DASCOUNT NO, GO INCREMENT COUNT @VA01254 00427000 BAL R5,FRETPTR RELEASE RECOVERY CCW WORK AREA. @V56BDA8 00428000 ST R3,RDEVIOER SAVE 2ND IOERBLOK ADDR (THAT HAD @V56BDA8 00429000 * CHANNEL CHECK) AS IF IT WAS THE FIRST. 00429050 MVC IOERPNT-IOERBLOK(L4,R3),IOERPNT-IOERBLOK(R7) @V56BDA8 00429100 * KEEPS PTR TO POSSIBLE CHAIN OF SDR BLOCKS 00429150 ST R7,IOBIOER SAVE ORIGINAL IOERBLOK ADDR @VM08849 00430000 LR R7,R3 GET CURRENT IOERBLOK ADDRESS @VM08849 00431000 B CHANPRG GO PRINT CHANNEL MESSAGE @VA01254 00432000 DASCOUNT EQU * @VA01254 00433000 TM IOERFLG2,IOERVOL1 READING THE VOL1 LABEL 00434000 BO VOLREAD YES- BRANCH 00435000 TM IOERFLG1,IOERPEND IS D.E. INTERRUPT EXPECTED 00436000 BO PENDING BRANCH IF YES. 00437000 TM IOERFLG2,IOERMSW IS THE MESSAGE WRITER ACTIVE @VM08912 00438000 BO EXIT5 YES, GO FRET IOERBLOK @VM08912 00439000 TM IOERFLG3,IOERALTR+IOERRDR0 ALT TRACK SUPPORT? @V56BDA8 00439020 BNZ CKALTERR ALTERNATE TRACK SUPPORT ACTIVE @V56BDA8 00439025 MVC SAVEWRK2(L'IOERLOC+L'IOERDW),IOERLOC SAVE START @V56BDA8 00439030 * AND LENGTH OF WORK AREA WHERE RECOVERY 00439035 * CCWS JUST EXECUTED WERE LOCATED. THEN 00439040 * CALL FRETPTR (BELOW) TO FREE THE WORK 00439045 * AREA. OBVIOUSLY WE CAN'T USE WORK AREA 00439050 * AFTER THAT,BUT WE STILL NEED TO KNOW 00439055 * WHERE IT WAS SO THE ADDRESS IN IOERCSW 00439060 * CAN BE CHECKED LATER TO SEE IF FAILURE 00439065 * OCCURRED ON ONE OF THE RECOVERY CCWS. 00439070 DC 0AL4(SAVEWRK3) PUT SYMB IN XREF FOR ABOVE INSTR @V56BDA8 00439075 LTR R3,R3 CLEAR IT @VA07807 00439100 BZ FRETBYP BRANCH FOR FRET @VA07807 00439200 TM IOERDATA+2-IOERBLOK(R3),X'10' TEST FOR ERROR @VA07807 00439300 BO *+8 @VA07807 00439400 FRETBYP DS 0H @VA07807 00439500 BAL R5,FRETPTR RELEASE RECOVERY CCW WORK AREA. @V56BDA8 00440000 TM IOERFLG2,IOERSTAT+IOERHA+IOERCAL+IOERECF 00441000 BNZ TSTERR BRANCH IF ENTRY FROM RECOVERY ACTION 00442000 CLC IOBRCNT,F1+2 TEST FOR FIRST TIME 00443000 BNE RECUR BRANCH IF NOT 1ST, KEEPING ADDR @V56BDA8 00444000 * OF 2ND IOERBLOK IN R3. 00444010 LR R3,R7 R3 GETS ADDR OF ORIGINAL IOERBLOK@V56BDA8 00445000 RECUR LTR R3,R3 DID OPERATION FINISH CORRECTLY 00446000 BZ SDRCORR BRANCH IF YES @VA03757 00447100 CLI RDEVTYPE,TYP3340 3340/3344? @V56BDA8 00447150 BNE NOT3340A NO SPECIAL HANDLING @V56BDA8 00447160 CLC IOERCSW+1(L3),IOERCSW+1-IOERBLOK(R3) SAME @V56BDA8 00447170 * FAILING CCW? 00447180 BE NOT3340A YES, NORMAL RETRY PATH @V56BDA8 00447190 SECNDERR ST R3,RDEVIOER SAVE CURRENT IOERBLOK ADDR @V56BDA8 00447200 MVC IOERPNT-IOERBLOK(L4,R3),IOERPNT-IOERBLOK(R7) @V56BDA8 00447210 * KEEPS PTR TO POSSIBLE CHAIN OF SDR BLOCKS 00447220 ST R7,IOBIOER SAVE ORIGINAL IOERBLOK ADDR @V56BDA8 00447230 LR R7,R3 GET CURRENT IOERBLOK ADDR @V56BDA8 00447240 RECURALT BAL R5,UPSK3340 MAKE SURE SEEK ADDR IS CURRENT. @V56BDA8 00447250 * THIS GETS SEEK ADDR FROM SENSE, 00447260 * AND SETS IOERDASD FLAG ON. 00447270 NOT3340A DS 0H @V56BDA8 00447280 TM IOERCSW+5,X'0F' TEST FOR CHANNEL ERROR'S 00448000 BNZ CHANCK BRANCH ON CHANNEL ERROR. @V56BDA8 00449000 TM IOERCSW+5,PRGC+PRTC IS THIS A CHANNEL PROG. CHECK ? 00450000 BNZ CHANPRG IF SO ,,BRANCH 00451000 B UNITCK BRANCH . MUST BE A UNIT CHECK. 00452000 CORRECT1 EQU * @VM08912 00455000 NI IOBFLAG,X'FF'-(IOBERP+IOBRSTRT) TURN OFF FLAGS @VM08912 00456000 EXIT 00457000 SPACE 00457910 * THIS ROUTINE FRETS ANY CCW WORK AREA HANGING OFF THE IOERBLOK 00457920 * POINTED TO BY R7. 00457930 FRETPTR SR R0,R0 CLEAR REG.0 00458000 LH R0,IOERDW LOAD REG.0 WITH CT OF DW'S 00459000 L R1,IOERLOC LOAD REG.1 OF ADDR. OF STORAGE OBTAINED 00460000 LTR R1,R1 WAS CORE REALLY GOTTEN 00461000 BCR 8,R5 BRANCH IF NO. 00462000 MVC IOERDW,ZEROES CLEAR OLD DATA. 00463000 MVC IOERLOC,ZEROES CLEAR OLD DATA. 00464000 CALL DMKFRET FREE CORE 00465000 BR R5 RETURN TO CALLER 00466000 SPACE 1 00467000 * THIS ROUTINE WILL ALLOW A MAXIMUN 00468000 * OF 10 RETRIES FOR CHANNEL ERROR'S 00469000 * 00470000 CHANCK CLC IOBRCNT,F10+2 HAVE 10 CHANNEL ERRORS OCCURRED ? 00471000 BNH CHANRTY BRANCH IF NO @VA01254 00472000 CHANPRG MVI IOERNUM,20 SET CHANNEL ERROR MESSAGE. 00473000 OI IOERIND3,IOERCAN+IOERINFO SET INDICATOR'S 00474000 TM IOBFLAG,IOBCP CP ERROR ? 00475000 BO *+8 IF YES, BRANCH 00476000 OI IOERFLG2,IOERCEMD NO DIAG RECORDING 00477000 B CALLWTR 00478000 CHANRTY BAL R5,CKIOB TEST FOR 2'ND IOERBLOK 00479000 OI IOBFLAG,IOBRSTRT TELL IOS TO RETRY 00480000 MVC IOBRCAW(4),IOBCAW SET RESTART CAW ADDRESS @VA01254 00481000 EXIT EXIT TO IOS 00482000 * 00483000 * ENTRY WILL BE MADED HERE WHEN A PENDING D.E. INT. OCCUR'S 00484000 * 00485000 PENDING TM IOERFLG2,IOERMSW MESSAGE WRITER IN PROGRESS @VA12941 00486000 BO BLDCPEX WAIT FOR MSW TO FINISH @VA12941 00486100 NI IOERFLG1,X'FF'-IOERPEND TURN OFF PEND DE BIT @VA12941 00486200 BAL R5,FRETPTR RELEASE ALLOCATED STORAGE @VM08912 00487000 BAL R5,GETSTBUF GET A BUFFER TO READ THE VOL1 LABEL 00488000 STH R0,IOERDW SAVE THE SIZE OF THE STAT BUFFER (DW) 00489000 ST R4,IOERLOC AND IT'S LOCATION ALSO 00490000 ST R4,IOBRCAW SET UP THE RESTART CAW (TO READ VOLID) 00491000 OI IOERFLG2,IOERVOL1 TURN ON THE READING VOLID FLAG 00492000 XC IOBRCNT,IOBRCNT INSURE 10 RETRIES FOR VOLREAD @VA08413 00492100 B RETRYK00 READ THE VOLID. @V56BDA8 00493100 SPACE 1 00493150 BLDCPEX LA R0,CPEXSIZE SIZE OF CPEXBLOK @VA12941 00493200 CALL DMKFREE GET STORAGE FOR CPEXBLOK @VA12941 00493250 USING CPEXBLOK,R1 CPEXBLOK ADDRESSABILIY @VA12941 00493300 XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR BLOCK @VA12941 00493350 MVC CPEXR0(CPEXR12-CPEXR0),SAVER0 SETUP CPEXBLOK @VA12941 00493400 STM R12,R13,CPEXR12 ... @VA12941 00493450 L R15,=A(DMKDASER) CPEXBLOK WILL RETURN TO DASER @VA12941 00493500 ST R15,CPEXADD CPEXBLOK RETURN ADDRESS @VA12941 00493550 DROP R1 ... @VA12941 00493600 L R5,IOERCPEX ANCHOR FOR CPEXBLOKS @VA12941 00493650 USING CPEXBLOK,R5 ADDRESSABILITY @VA12941 00493700 LTR R5,R5 ANY CPEXBLOKS ON QUEUE @VA12941 00493750 BNZ NEXTCPEX YES, FIND END OF CHAIN @VA12941 00493800 ST R1,IOERCPEX ADD TO THE CHAIN @VA12941 00493850 B GOTODSP GOTO THE DISPATCHER @VA12941 00493900 SPACE 1 00493950 NEXTCPEX L R14,CPEXFPNT GET POINTER TO NEXT ONE ON CHAIN @VA12941 00494000 LTR R14,R14 END OF QUEUE @VA12941 00494050 BZ QUEUE END OF QUEUE - ADD CPEXBLOK @VA12941 00494100 LR R5,R14 CONTINUE TO LOOK FOR END @VA12941 00494150 B NEXTCPEX ... @VA12941 00494200 SPACE 2 ... @VA12941 00494250 QUEUE ST R1,CPEXFPNT ADD CPEXBLOK TO QUEUE AT END @VA12941 00494300 GOTODSP GOTO DMKDSPCH EXIT TO DISPATCHER FOR NOW @VA12941 00494350 DROP R5 DROP CPEXBLOK ADDRESSABILITY @VA12941 00494400 SPACE 1 00494450 VOLREAD L R4,IOERLOC POINT TO CHANNEL PGM @VA07801 00495000 ICM R1,15,IOBIOER DID OPERATION FINISH CORRECTLY @VA07801 00495200 BNP READOK YES - BRANCH @VA07801 00495400 LA R15,STATREL+8 VERIFY IF RELEASE CCW FAILED @VA07801 00495600 L R5,IOBCSW LAST CCW EXECUTED + 8 @VA07801 00495800 LA R5,0(R5) CLEAR GARBAGE @VA07801 00496000 CLR R5,R15 WHERE DID CHANNEL PGM END @VA07801 00496200 BL TRY10 ERROR, RETRY 10 TIMES @VA07801 00496400 BH IOERCLR SENSE AFTER REL. FAILED, CONT. @VA07801 00496600 BAL R5,CKIOB FRET IOERBLOK IF REL. FAILED @VA07801 00496800 B LABRED LABEL READ, CONTINUE @VA07801 00497000 TRY10 CLC IOBRCNT,F10+2 TEN ERRORS? @VA07801 00497200 BNH RETRYK00 NO- RETRY @V56BDA8 00498100 LA R4,IOERPNT POINT TO THE ERROR POINTER 00499000 BAL R5,NXTPTR CHAIN IN THE ERROR BLOCK 00500000 L R4,IOERLOC POINT TO THE STATDASD BUFFER @VA04703 00500500 LA R5,CLEANUP SET UP THE RETURN POINTER 00501000 B ERROR95F MARK OFFLINE AND GIVE MESSAGE @V4075A0 00502100 SPACE 00503000 IOERCLR BAL R5,CKIOB FRET 2ND IOERBLOK @VA07801 00504000 READOK L R5,RDEVCUB CHECK FOR ALTERNATE CONTROL UNIT @VA07801 00504100 LTR R5,R5 ALTERNATE CONTROL UNIT? @VA07801 00504200 BNZ LABRED YES, DO NOT IND. 2/4 CHANSW @VA07801 00504300 * IN CASE ALTCU HAS NO FEATURE 00504400 OI RDEVFTR,FTRRSRL 2/4 CHANSW FEATURE PRESENT @VA07801 00504500 LABRED TM IOERFLG2,IOERSTAT STATISTICAL DATA UNLOADED @VA07801 00504600 BO STATIN YES- BRANCH 00506000 BAL R5,COMPVOL1 COMPARE THE VOL1 LABEL 00507000 BE STATIN IF THIS THE SAME VOLUME; BRANCH 00508000 TM RDEVTYPE,TYP3330+TYP3340+TYP3350+TYP3380 HRC011DK 00509490 BZ STATIN NO - SKIP THE UNLOAD @V2A2029 00510000 LA R0,IOERSIZE GET AN IOERBLOK FOR THE STAT DATA 00511000 CALL DMKFREE 00512000 MVC 0(IOERSIZE*8,R1),IOERBLOK COPY THE IOER BLOCK 00513000 MVC IOERVSER-IOERBLOK(6,R1),RDEVSER MOVE IN THE VOLID 00514000 LA R4,IOERPNT POINT TO THE IOERBLOK POINTER 00515000 BAL R5,NXTPTR CHAIN IN THE IOERBLOK 00516000 L R4,IOERLOC POINT TO THE STATDASD BUFFER @VA04703 00516500 ST R4,IOBRCAW INITIALIZE THE RESTART CAW @VA13424 00516700 LM R15,R0,PACKCHG * BUILD THE BUFFER UNLOAD CCW 00517000 ALR R15,R1 * TO READ THE ENVIRONMENTAL DATA 00518000 STM R15,R0,STATSNS * INTO THE IOERBLOK. 00519000 OI IOERFLG2,IOERSTAT TURN ON THE STATISTICAL DATA FLAG 00520000 B RETRYK00 AND GO READ THE DATA. @V56BDA8 00521100 SPACE 00522000 STATIN BAL R5,TESTVOL TEST IF THE VOLUME WAS SWAPPED OR IN USE *00523000 BY THE SYSTEM, IF YES MARK OFFLINE. 00524000 CLEANUP NI IOERFLG2,X'FF'-(IOERSTAT+IOERVOL1) TURN FLAG'S @VA02256 00525000 * OFF 00526000 BAL R5,FRETPTR RETURN THE STAT BUFFER 00527000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00527100 NI IOBFLAG,X'FF'-IOBERP TURN OFF EREP BIT 00528000 NI RDEVSTAT,X'FF'-RDEVNRDY RESET INTERVENTION REQUIRED 00529000 OI IOBFLAG,IOBRSTRT TURN ON RESTART BIT 00530000 SLR R3,R3 @V56BDA8 00530900 STH R3,IOBRCNT RESET RETRY COUNT 00531000 MVC IOBRCAW,IOBCAW SET RESTART CAW ADDR. 00532000 EXIT GO BACK TO IOS 00533000 * 00534000 * MORE ERROR TESTING IS REQUIRED 00535000 * 00536000 UNITCK TM RDEVFTR,FTREXTSN EXTENDED SENSE TYPE DASD ? @V304498 00537000 BNZ HISPEED BRANCH IF YES 00538000 * 00539000 * MUST BE A 2319 OR 2314 TO ENTER AT THIS POINT 00540000 * 00541000 TSTEQUIP TM IOERDATA,X'10' EQUIPMENT CHECK ERROR ? 00542000 BZ TSTNRF BRANCH IF NOT. 00543000 MVC IOBRCAW,IOBCAW SET UP RESTART CAW. 00544000 CLC IOBRCNT,F2+2 IS THIS THE THIRD ERROR ? 00545000 BNH RETRY BRANCH NO. 00546000 EQCK MVI IOERNUM,EQUIP INDICATE EQUIPMENT CHECK ERROR 00547000 OI IOERIND3,IOERCAN+IOERINFO @VA01426 00548000 * DISPLAY INFORMATION MSG 503I 00549000 B CALLWTR 00550000 TSTNRF TM IOERDATA+1,X'08' NRF ERROR 00551000 BZ TSTSEEK BRANCH NO 00552000 TM IOERDATA+1,X'02' MISSING ADDRESS MARKER ? 00553000 BZ READHA BRANCH NO. 00554000 CLC IOBRCNT,F10+2 HAS ERROR HAPPENED 11 TIMES ? 00555000 BNH RECAL BRANCH NO TO RECALIBRATE. 00556000 MVI IOERNUM,MADM SET MESSAGE NUMBER. 00557000 OI IOERIND3,IOERINFO+IOERCAN SET INDICATES @VA07665 00558100 B CALLWTR CALL WRITTER 00559000 RECAL LA R0,2 GET 2 DW'S FROM STORAGE 00560000 CALL DMKFREE 00561000 ST R1,IOERLOC 00562000 STH R0,IOERDW 00563000 MVC 0(16,R1),RESTORE MOVE IN RESTORE AND TIC COMMAND 00564000 ST R1,IOBRCAW SET UP RESTART CAW 00565000 L R5,IOBCAW CHAIN ORIGINAL CCW'S @VA08187 00566000 ST R5,8(0,R1) MOVE IN TIC COMMAND CODE AND @VA08187 00567000 MVI 8(R1),X'08' RESTORE CCW. 00568000 B RETRY BRANCH TO RETRY OPERATION. 00569000 SPACE 1 00570000 READHA LA R0,1 00571000 CALL DMKFREE CONSTRUCT READ HOME ADDR. CCW 00572000 ST R1,IOERLOC STORE ADDR. OF CCW 00573000 STH R0,IOERDW STORE SIZE OF STORAGE OBTAINED 00574000 ST R1,IOBRCAW SET RESTART ADDR. 00575000 MVC 0(8,R1),HACCW MOVE IN RD HA COMMAND 00576000 OI IOERFLG2,IOERHA SET ON TO INDICATE OPERATION IN PROG 00577000 LA R5,IOERADR+3 SET READIN AREA TO IOERBLOK @VA08187 00578000 ST R5,0(R1) ... @VA08187 00578100 MVI 0(R1),X'1A' SET COMMAND CODE TO READ HA 00580000 B RETRY 00581000 * 00582000 * WHEN THE INTERRUPT OCCUR'S FROM THIS CHANNEL PROGRAM 00583000 * THE HOME ADDRESS READ WILL BE COMPARED AGAINST THE 00584000 * INITIAL SEEK ADDR. IF EQUAL CONTROL WILL PASS TO IOS 00585000 * OTHERWISE IT WILL BE TREATED AS A SEEK CHECK AND THE 00586000 * OPERATION RETRIED. 00587000 * 00588000 TSTSEEK TM IOERDATA,X'01' IS ERROR BECAUSE OF A SEEK CHECK ? 00589000 BZ TSTINT BRANCH IF NOT SEEK CHECK 00590000 SEEKCK TM IOERDATA,X'80' COMMAND REJECT ERROR ? @V2A2029 00591000 BO COMREJ BRANCH IF YES 00592000 CLC IOBRCNT,F10+2 00593000 BNH RECAL BRANCH TO EXECUTE A RESTORE COMMAND 00594000 MVI IOERNUM,SKCK 00595000 OI IOERIND3,IOERINFO+IOERCAN SET INDICATES @VA07665 00600100 B CALLWTR 00601000 COMREJ MVI IOERNUM,REJ MOVE IN REJECT MESSAGE 00602000 OI IOERIND3,IOERCAN+IOERINFO 00603000 TM IOBFLAG,IOBCP CP ERROR ? 00604000 BO *+8 IF YES, BRANCH 00605000 OI IOERFLG2,IOERCEMD NO DIAG RECORDING 00606000 B CALLWTR 00607000 TSTINT TM IOERDATA,X'40' INTERVENTION REQUIRED 00608000 BZ BUSCK BRANCH IF NO 00609000 MVC IOBRCAW,IOBCAW SET UP RESTART CAW. 00610000 PENDE OI IOERFLG1,IOERPEND TURN ON D.E. BIT 00611000 MVI IOERNUM,INTREQU SET MSG. NUMBER 00612000 OI IOERIND3,IOERACT TURN ON ACTION BIT 00613000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00613100 OI RDEVSTAT,RDEVNRDY INDICATE INTERVENTION REQUIRED 00614000 B CALLWTR 00615000 BUSCK TM IOERDATA,X'20' IS THIS A BUS OUT ERROR 00616000 BZ DATACK BRANCH IF NO 00617000 MVC IOBRCAW,IOBCAW SET UP RESTART CAW. 00618000 CLC IOBRCNT,F1+2 IS THIS THE SECOND ERROR ? @VM01012 00619000 BH BUSMSG BRANCH YES 00620000 B RETRY 00621000 BUSMSG MVI IOERNUM,BUSOUTCK SET BUSOUT MESSAGE UP. 00622000 OI IOERIND3,IOERINFO+IOERCAN TURN ON INDICATOR'S 00623000 B CALLWTR 00624000 DATACK TM IOERDATA,X'08' TEST FOR DATA CHECK 00625000 BZ OVERRUN BRANCH IF NOT DATA CHECK 00626000 MVC IOBRCAW,IOBCAW SET UP RESTART CAW. 00627000 CLC IOBRCNT,F256+2 HAS ERROR HAPPENED 256 TIMES ? 00628000 BH DATAMSG BRANCH IF YES 00629000 TM IOBRCNT+1,X'0F' IS THIS MULTI OF 16 TIMES ? 00630000 BO RECAL BRANCH EVERY 16 TIMES. 00631000 B RETRY 00632000 DATAMSG MVI IOERNUM,DATAER 00633000 OI IOERIND3,IOERINFO+IOERCAN SET INDICATES @VA07665 00638100 B CALLWTR 00639000 SPACE 1 00640000 OVERRUN TM IOERDATA,X'04' 00641000 BZ MISSMRK 00642000 B OVERRUN1 @VA08385 00642250 OVERRUN2 L R11,ECFREG11-ECFDSECT(R9) SAVE REG11 @VA08385 00642500 OVERRUN1 MVC IOBRCAW,IOBCAW SET UP RESTART CAW. 00643000 CLC IOBRCNT,F10+2 00644000 BH OVERMSG 00645000 B RETRY 00646000 OVERMSG MVI IOERNUM,OVERERR INDICATE OVERRUN MESSAGE 00647000 OI IOERIND3,IOERDEC+IOERCAN+IOERETRY 00648000 B CALLWTR CALL MESSAGE WRITTER. 00649000 SPACE 1 00650000 MISSMRK TM IOERDATA+1,X'02' TEST FOR MISSING ADDRESS MARKER 00651000 BZ REJECT BRANCH IF NO. 00652000 CLC IOBRCNT,F10+2 IS COUNTER > 10 ? 00653000 BH MRKMSG BRANCH IF YES. 00654000 MVC IOBRCAW,IOBCAW SET RESTART ADDR. 00655000 B RETRY 00656000 MRKMSG MVI IOERNUM,MADM INDICATE MISSING ADDRESS MARKER 00657000 OI IOERIND3,IOERINFO+IOERCAN 00658000 B CALLWTR 00659000 REJECT TM IOERDATA,X'80' IS IT A COMMAND REJECT ? 00660000 BZ BDTRK BRANCH IF NO. 00661000 TM IOERDATA+1,X'04' FILE PROTECT ERROR 00662000 BO FILPROT BRANCH ON PROTECT ERROR. 00663000 CHKREL TM IOBSPEC2,IOBREL IS THIS SPECIAL DMKDSB CH PGM @VA07801 00663100 BO FINISH YES, THEN LEAVE IT ALONE @VA07801 00663200 L R2,IOERCSW FAILING CSW+8 @VA14597 00663400 LA R2,0(,R2) CLEAR HIGH ORDER BYTE @VA14597 00663500 S R2,F8 FAILING CCW @VA14597 00663600 CLI 0(R2),X'FE' WRITE WITH R/O DASD @VA14597 00663700 BNE COMREJ INVALID CMND @VA14597 00663800 MVI IOERDATA+1,X'02' TURN ON WRITE INHIBIT SW. @VA14597 00663900 B COMREJ MUST BE INVALID COMMAND 00664000 BDTRK TM IOERDATA,X'02' IS THIS A TRACK CONDITION CHECK ? 00665000 BZ TRKOV BRANCH NO. 00666000 MVI IOERNUM,TRKCOND SET TRACK CONDITION 00667000 OI IOERIND3,IOERCAN+IOERINFO 00668000 TM IOBFLAG,IOBCP CP ERROR ? 00669000 BO *+8 IF YES, BRANCH 00670000 OI IOERFLG2,IOERCEMD NO DIAG RECORDING 00671000 B CALLWTR CALL MESSAGE WRITTER 00672000 SPACE 1 00673000 TRKOV TM IOERDATA+1,X'40' TRACK OVERRUN ERROR ? 00674000 BZ ENDCYL BRANCH IF NO 00675000 MVI IOERNUM,TKOVER MESSAGE FOR WRITTER 00676000 OI IOERIND3,IOERINFO+IOERCAN 00677000 TM IOBFLAG,IOBCP CP ERROR ? 00678000 BO *+8 IF YES, BRANCH 00679000 OI IOERFLG2,IOERCEMD NO DIAG RECORDING 00680000 B CALLWTR 00681000 SPACE 1 00682000 ENDCYL TM IOERDATA+1,X'20' IS THIS AN EOC CONDITION 00683000 BZ FILPROT BRANCH IF NOT 00684000 EOCERR OI IOERFLG2,IOERCEMD DO NOT RECORD PROG ERROR @VA02358 00685000 B FATAL 00686000 FILPROT TM IOERDATA+1,X'04' FILE PROTECT ERROR ? 00687000 BZ SHDNOT BRANCH IF NO. 00688000 MVI IOERNUM,PROTECT SET MESSAGE NUMBER 00689000 TM IOBFLAG,IOBCP CP ERROR ? 00690000 BO *+8 IF YES, BRANCH 00691000 OI IOERFLG2,IOERCEMD NO DIAG RECORDING 00692000 OI IOERIND3,IOERCAN+IOERINFO 00693000 B CALLWTR 00694000 SPACE 1 00695000 SHDNOT MVI IOERNUM,BDSNS 00696000 OI IOERIND3,IOERCAN+IOERINFO 00697000 B CALLWTR 00698000 SPACE 1 00699000 TSTERR TM IOERFLG2,IOERSTAT 00700000 BZ NOTSTAT 00701000 NI IOERFLG2,X'FF'-IOERSTAT 00702000 LTR R3,R3 00703000 BZ SDRCORR BRANCH IF NO IOERBLOK @VA03757 00704000 L R4,IOERPNT 00705000 MVC IOERBLOK(IOERSIZE*8),0(R3) 00706000 ST R4,IOERPNT 00707000 MVC IOERVSER-IOERBLOK(6,R7),RDEVSER RESTORE VOLID @VA02536 00708000 B RECUR 00709000 NOTSTAT LTR R3,R3 00710000 BZ NOIOER NO IOERBLOK @VA01094 00711000 CLC IOBRCNT,F10+2 10 ERRORS YET? @VA01094 00712000 BH RECFAIL YES--FATAL @VA01094 00713000 TM IOBCSW+4,UC IS THERE UNIT CHECK? @VA01094 00714000 BZ RECFAIL RECOVERY FAILURE @V56BDA8 00715050 CLI RDEVTYPE,TYP3340 3340/3344? @V56BDA8 00715100 BNE UNITCK NO, PROCESS SECOND FAILURE @V56BDA8 00715150 L R1,SAVEWRK2 RECOVERY WORKAREA ADDRESS @V56BDA8 00715200 LH R0,SAVEWRK3 LENGTH IN DBLEWRDS @V56BDA8 00715250 SLL R0,3 LENGTH IN BYTES @V56BDA8 00715300 AR R0,R1 END OF RECOVERY WORKAREA @V56BDA8 00715350 CLM R1,7,IOERCSW+1-IOERBLOK(R3) BELOW OUR AREA? @V56BDA8 00715400 BNL SECNDERR YES, A NEW ERROR @V56BDA8 00715450 CLM R0,7,IOERCSW+1-IOERBLOK(R3) ABOVE US? @V56BDA8 00715500 BL SECNDERR YES, A NEW ERROR @V56BDA8 00715550 B HISPEED ELSE TAKE MORMAL RETRY PATH @V56BDA8 00715600 NOIOER EQU * @VA01094 00717000 TM IOERFLG2,IOERCAL 00718000 BO DSKCAL 00719000 SR R5,R5 CLEAR REG.5 00720000 TM IOERFLG2,IOERHA 00721000 BO FINHA 00722000 TM IOERFLG2,IOERECF ERROR CORRECTION FUNCTION FINISHED 00723000 BO FINISH YES - ERROR WAS FULLY CORRECTED 00724000 MVI IOERNUM,FALSE 00725000 OI IOERIND3,IOERINFO+IOERCAN 00726000 B CALLWTR 00727000 SPACE 1 00728000 RECFAIL MVI IOERNUM,RECERR INDICATE ERROR WHILE RECOVERING 00729000 OI IOERIND3,IOERINFO+IOERCAN 00730000 B CALLWTR 00731000 FINHA NI IOERFLG2,X'FF'-IOERHA TURN OFF HOME ADDRESS BIT 00732000 CLC IOBRCNT,F10+2 10 ERRORS YET ? 00733000 BNH SKLOOP IF NOT ,TAKE THE BRANCH 00734000 MVI IOERNUM,SKCK SET MESSAGE FOR SEEK CHECK 00735000 OI IOERIND3,IOERCAN+IOERINFO TURN ON CANCEL BIT 00736000 B CALLWTR ISSUE MESSAGE TO OPERATOR 00737000 SPACE 1 00738000 SKLOOP L R4,IOBCAW LOAD REG.4 WITH ADDR OF 1'ST CCW. 00739000 LTR R4,R4 IS IOBLOK ACTIVE ? 00740000 BZ FATAL EXIT IF NON-ACTIVE IOBLOK. 00741000 SPACE 00742000 CLI 0(R4),X'0B' IS FIRST CMD A SEEK? @VA00684 00743000 BE SKADCK YES, CHECK IF THIS ONE FAILED @VA00684 00744000 CLI 0(R4),X'07' TRY OTHER SEEK @VA00684 00745000 BNE SKRET NOPE, THEN CAN'T USE IT FOR CYL @VA00684 00746000 SKADCK LA R1,8(,R4) POINT TO END OF SEEK... @VA00684 00747000 CLM R1,B'0111',IOERCSW+1 AND SEE IF WE FAILED ON IT?@VA00684 00748000 BE SKRET YUP, THEN IT WOULD FAIL AGAIN. @VA00684 00749000 FULLSEEK L R4,0(R4) PICK UP ADDR. OF 00750000 LA R4,0(R4) SEEK DATA AND 00751000 MVC IOERADR(4),2(R4) MOVE IT INTO IOERADR 00752000 OI IOERIND3,IOERDASD INDICATE HOME ADDRESS 00754000 SKRET EQU * @VA00684 00755000 LTR R5,R5 TEST FOR 1'ST ENTRY INTO THIS MODULE 00756000 BCR 7,R5 BRANCH IF 1'ST TIME 00757000 TM IOERIND3,IOERDASD IS HA COMPARAND VALID? @VA00684 00758000 BZ PROGERR NOPE, DON'T BOTHER TO CHECK IT @VA00684 00759000 CLC IOERADR(4),IOERADR+4 ENTRY MUST BE RESULT OF 00760000 BNE RECAL A READ HOME ADDRESS BECAUSE OF 00761000 PROGERR OI IOERFLG2,IOERCEMD DO NOT RECORD PROGRAMING ERRORS. 00762000 B FATAL A NO RECORD FOUND CONDITION. 00763000 SPACE 1 00764000 SPACE 1 00765000 DSKCAL NI IOERFLG2,X'FF'-IOERCAL TURN OFF RECALIBRATE BIT 00766000 MVC IOBRCAW,IOBCAW IN IOERBLOK AND RETRY OPERATION. 00767000 SPACE 1 00768000 RETRY MVC IOBRCAW(L1),IOBCAW GET ORIGINAL KEY FOR RESTART @V56BDA8 00769100 RETRYK00 OI IOBFLAG,IOBRSTRT TURN ON RESTART FLAG @V56BDA8 00769200 NI IOERMSG,0 RESET MSG CODE. 00770000 NI IOERIND3,IOERDASD RESET ALL BUT HOME ADDR. INDICATOR. 00771000 NI IOERIND4,0 RESET OPERATOR FLAGS. 00772000 BAL R5,CKIOB MAKE SURE THAT STORAGE IS 00773000 EXIT IOS WILL RETRY OPERATION 00776000 * 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 2ND IOERBLOK @VA08187 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 CALLWTR EQU * CALL MSG WRITTER 00802000 TM IOERFLG2,IOERCEMD ERROR FROM DIAG INTERFACE 00803000 BO FATAL EXIT IF DIAG ERROR 00804000 BAL R5,CKIOB RETURN ANY IOERBLOK 00805000 L R0,=C'DAS ' IDENT INFO FOR MSG WRITTER 00806000 OI IOERFLG2,IOERMSW SET MESSAGE WRITER INDICATOR @VM08912 00807000 MVI SAVEWRK2+2,X'00' CLEAR SP CON INDICATOR FOR @VA07193 00807020 * MVI BELOW 00807040 ST R9,SAVEWRK3 SAVE REG 9 @VA05482 00807050 TM RDEVFLAG,RDEVOWN SYSTEM PACK? @VA05483 00807070 BNO CALLMSW NO. CONSOLE SPOOLING OK @VA05483 00807090 TM RDEVFLAG,RDEVPREF IS IT PREFERRED FOR PAGING? @VA11702 00807092 BO CALLMSW YES,CONSOLE SPOOLING OK @VA11702 00807094 L R11,ASYSOP GET VMBLOK OF SYSTEM OPERATOR @VA04231 00807300 LTR R11,R11 SYSTEM OPERATOR LOGGED ON? @VA04231 00807400 BNP CALLMSW NO, NO PROBLEM @VA04231 00807500 USING VMBLOK,R11 @VA04231 00807700 LH R9,VMVTERM LOCATE VIRTUAL CONSOLE @VA04231 00807800 LTR R9,R9 IS THERE ONE? @VA04231 00807900 BM CALLMSW NO, GO PUT OUT MSG @VA04231 00808000 AL R9,VMDVSTRT INDEX TO THE VDEVBLOK @VA04231 00808100 USING VDEVBLOK,R9 @VA04231 00808200 TM VDEVFLAG,VDEVCSPL OPER SPOOLED HIS CONSOLE? @VA04231 00808300 BZ CALLMSW NO, CONTINUE @VA04231 00808400 MVI SAVEWRK2+2,X'E2' REMEMBER THAT HE DID @VA04231 00808500 NI VDEVFLAG,X'FF'-VDEVCSPL TURN OFF CONS SPOOLING @VA04231 00808600 DROP R11 @VA04231 00808700 CALLMSW L R11,SAVER11 RELOAD VMBLOK PTR @VA03414 00808800 CALL DMKMSWR GO TO MSG WTR MODULE @VA03414 00808900 CLI SAVEWRK2+2,X'E2' DID WE TURN OFF CONS SPOOLING? @VA04231 00809000 BNE CLEARMWR NO, CONTINUE @VA04231 00809100 OI VDEVFLAG,VDEVCSPL PUT HIS FLAG BACK ON @VA04231 00809200 DROP R9 @VA04231 00809300 CLEARMWR L R9,SAVEWRK3 RESTORE R9 @VA04231 00809400 NI IOERFLG2,X'FF'-IOERMSW CLEAR MESSAGE WRITER FLAG@VM08912 00810000 TM IOERFLG1,IOERPEND CHECK FOR INT. REQ. 00811000 BZ NOTINT IF SO EXIT BACK TO IOS WITH 00812000 NI IOBFLAG,X'FF'-IOBRSTRT NO RESTART INDICATED 00813000 L R1,IOERCPEX SEE IF DEVICE END I/O TO REDRIVE @VA12941 00814000 LTR R1,R1 ANY CPEXBLOKS ON QUEUE @VA12941 00814050 BZ DASSDR NO DE I/O TO REDRIVE @VA12941 00814100 UNSTKNXT L R5,CPEXFPNT-CPEXBLOK(R1) NEXT CPEX ON CHAIN @VA12941 00814150 CALL DMKSTKCP STACK CPEXBLOK @VA12941 00814200 LTR R5,R5 ANY MORE ON CHAIN @VA12941 00814250 BZ CLEARPNT NO, ZERO ANCHOR AND EXIT @VA12941 00814300 LR R1,R5 CPEXBLOK ADDRESS TO R5 @VA12941 00814350 B UNSTKNXT STACK THEM ALL @VA12941 00814400 CLEARPNT ST R5,IOERCPEX CLEAR ANCHOR @VA12941 00814450 DASSDR B SDRCOUNT GO UPDATE COUNTERS, THEN EXIT @VA12941 00814500 NOTINT TM IOERIND4,IOERSTRT CHECK MESSAGE RESPONSE FOR RESTART 00815000 BZ IGNORE BRANCH IF NO RESTART 00816000 MVC IOBRCNT,F1+2 RESET ERROR COUNTER TO 1 00817000 MVC IOBRCAW,IOBCAW AND SET RESTART CAW 00818000 B RETRY TO RE-EXECUTE ORIGINAL CHANNEL PROGRAM 00819000 IGNORE TM IOERIND4,IOERIGNR TEST FOR OPERATOR IGNORE RESPONSE 00820000 BO FINISH BRANCH IF YES 00821000 SPACE 1 00822000 FATAL EQU * @VA03757 00822100 BAL R5,CKIOB CONDITION MUST BE FATAL... @VA03757 00822200 OI IOBSTAT,IOBFATAL EXIT WITH FATAL BIT ON @VA03757 00822300 SPACE 1 00822400 SDRCORR EQU * HERE IF ERROR WAS CORRECTED.... @VA03757 00822500 BAL R5,FRETPTR RELEASES RECOVERY CCW WORK AREA @V56BDA8 00823010 * THAT IS HANGING OFF OF THE IOERBLOK THAT 00823020 * IS POINTED TO BY R7. 00823030 NI IOBFLAG,X'FF'-IOBERP-IOBRSTRT 00824000 SDRCOUNT CLI RDEVTYPE,TYP2314 SDR TYPE ?? @VA03757 00825000 BNE NOCALL NO, DONT CALL UPDATE @VA03757 00825100 SR R1,R1 ZERO PARAMETER REG @VA03757 00825200 CALL DMKIOEST GO TO STATISTICAL COUNTER UPDATE @VA03757 00825300 NOCALL EQU * @VA03757 00825400 EXIT 00826000 SPACE 1 00827000 FINISH BAL R5,CKIOB OPERATOR ANSWERED WITH IGNORE OPTION. 00828000 BAL R5,FRETPTR RELEASE STORAGE USED AND EXIT. 00829000 NI IOBFLAG,X'FF'-IOBERP-IOBRSTRT 00830000 NI IOBSTAT,X'FF'-IOBFATAL 00831000 EXIT 00832000 SPACE 1 00833000 HISPEED MVC IOERVSER-IOERBLOK(6,R7),RDEVSER RESTORE VOLID @VA02536 00834000 CLC IOBRCNT,F1+2 @VA02536 00835000 BNE TESTSTAT 00836000 TM RDEVTYPE,TYP2305 00837000 BO T2305 00838000 TM IOERDATA+2,X'10' 00839000 BZ TESTPERM 00840000 LA R0,IOERSIZE 00841000 CALL DMKFREE 00842000 MVC 0(IOERSIZE*8,R1),IOERBLOK 00843000 MVC IOERVSER-IOERBLOK(6,R1),RDEVSER MOVE IN THE OLD VOLID 00844000 ST R1,IOERPNT 00845000 OI IOERFLG2,IOERSTAT 00846000 MVC IOBRCAW,IOBCAW 00847000 B RETRY 00848000 T2305 TM IOERDATA+2,X'80' 00849000 BZ TESTPERM 00850000 *********************************************************************** 00851010 * FOR CLARITY... SIZE OF THE EXTENSION HAS TO BE CALCULATED AS WHATS 00851020 * LEFT OF THE BUFFERED DATA SIZE (E.G. 128 FOR THIS 2305) AFTER TAKING 00851030 * OUT THAT PORTION PLACED FROM IOERDATA TO THE END OF THE IOERBLOK. 00851040 * AS THIS IS VARIABLE IT SHOULD BE CALCULATED AS THE OVERALL SIZE LESS 00851050 * THE AREA PRECEDING IOERDATA... ALL OF COURSE IN NUMBER OF DOUBLEWORDS 00851060 *********************************************************************** 00851070 LA R0,IOERSIZE+(128/8-(IOERSIZE-(IOERDATA-IOERBLOK)/8)) 00851080 * PUT IN THE SIZE PLUS EXTENSION RESIDUAL @VA09736 00851090 CALL DMKFREE 00852000 MVI 0(R1),X'00' INIT TO ZERO @VA09736 00852010 *********************************************************************** 00852020 * NOW TO CLEAR THE IOERBLOK PLUS THE RESIDUAL EXTENSION OF THE 2305'S 00852030 * 128 BYTES OF BUFFER DATA 00852040 *********************************************************************** 00852050 MVC 1(((IOERSIZE*8)+(128-((IOERSIZE*8)-(IOERDATA-IOERBLOK)))*00852060 -1),R1),0(R1) CLEAR IT OUT @VA09736 00852070 MVC 0(IOERSIZE*8,R1),IOERBLOK 00853000 MVI IOEREXT+1-IOERBLOK(R1),128/8-(IOERSIZE-(IOERDATA-IOERBLO*00854010 K)/8) PUT IN THE SIZE OF THE EXTENSION @VA09736 00854020 ST R1,IOERPNT 00856000 OI IOERFLG2,IOERSTAT 00857000 B CLRUNIT 00858000 SPACE 1 00859000 TESTSTAT TM RDEVTYPE,TYP2305 00860000 BO STAT2305 00861000 DROP R7 00862000 USING IOERBLOK,R3 00863000 TM IOERDATA+2,X'10' 00864000 BZ TESTPERM 00865000 LA R0,IOERSIZE 00866000 CALL DMKFREE 00867000 MVC 0(IOERSIZE*8,R1),IOERBLOK 00868000 MVC IOERVSER-IOERBLOK(6,R1),RDEVSER MOVE IN THE OLD VOLID 00869000 DROP R3 00870000 USING IOERBLOK,R7 00871000 L R4,IOBRCAW LOOK FOR ZERO RESTART CAW @VA13021 00871100 LTR R4,R4 TEST FOR IT @VA13021 00871300 BNZ BYMVCAW NON-ZERO ... O.K. @VA13021 00871500 MVC IOBRCAW,IOBCAW ZERO ... USE THE ORIGINAL CAW @VA13021 00871700 BYMVCAW DS 0H @VA07807 00872100 LA R4,IOERPNT 00873000 BAL R5,NXTPTR 00874000 OI IOBFLAG,IOBRSTRT TURN ON RESTART FLAG @VA07807 00874100 NI IOERMSG,0 RESET MSG CODE @VA07807 00874200 NI IOERIND3,IOERDASD RESET ALL BUT HOME ADDR IND @VA07807 00874300 NI IOERIND4,0 RESET OPERATOR FLAGS @VA07807 00874400 LR R4,R15 SAVE R15 ACROSS FRET @VA07807 00874500 BAL R5,CKIOB MAKE SURE THAT STORAGE IS @VA07807 00874600 IC R1,IOBCAW GET ORIGINAL KEY @VA07807 00874800 STC R1,IOBRCAW STORE IN RESTART CAW @VA07807 00874900 EXIT IOS WILL RETRY OPERATION @VA07807 00875000 SPACE 1 00876000 STAT2305 EQU * 00877000 DROP R7 00878000 USING IOERBLOK,R3 00879000 TM IOERDATA+2,X'80' 00880000 BZ TESTPERM 00881000 *********************************************************************** 00882010 * FOR CLARITY... SIZE OF THE EXTENSION HAS TO BE CALCULATED AS WHATS 00882020 * LEFT OF THE BUFFERED DATA SIZE (E.G. 128 FOR THIS 2305) AFTER TAKING 00882030 * OUT THAT PORTION PLACED FROM IOERDATA TO THE END OF THE IOERBLOK. 00882040 * AS THIS IS VARIABLE IT SHOULD BE CALCULATED AS THE OVERALL SIZE LESS 00882050 * THE AREA PRECEDING IOERDATA... ALL OF COURSE IN NUMBER OF DOUBLEWORDS 00882060 *********************************************************************** 00882070 LA R0,IOERSIZE+(128/8-(IOERSIZE-(IOERDATA-IOERBLOK)/8)) 00882080 * PUT IN THE SIZE PLUS EXTENSION RESIDUAL @VA09736 00882090 CALL DMKFREE 00883000 MVI 0(R1),X'00' INIT TO ZERO @VA09736 00883010 *********************************************************************** 00883020 * NOW TO CLEAR THE IOERBLOK PLUS THE RESIDUAL EXTENSION OF THE 2305'S 00883030 * 128 BYTES OF BUFFER DATA 00883040 *********************************************************************** 00883050 MVC 1(((IOERSIZE*8)+(128-((IOERSIZE*8)-(IOERDATA-IOERBLOK)))*00883060 -1),R1),0(R1) CLEAR IT OUT @VA09736 00883070 MVC 0(IOERSIZE*8,R1),IOERBLOK 00884000 MVI IOEREXT+1-IOERBLOK(R1),128/8-(IOERSIZE-(IOERDATA-IOERBLO*00885010 K)/8) PUT IN THE SIZE OF THE EXTENSION @VA09736 00885020 DROP R3 00887000 USING IOERBLOK,R7 00888000 LA R4,IOERPNT 00889000 BAL R5,NXTPTR 00890000 CLRUNIT LR R4,R1 00891000 MVC IOERVSER-IOERBLOK(6,R1),RDEVSER MOVE IN THE OLD VOLID 00892000 LA R0,2 00893000 CALL DMKFREE 00894000 STH R0,IOERDW 00895000 ST R1,IOERLOC 00896000 ST R1,IOBRCAW 00897000 MVC 0(8,R1),UNLOAD 00898000 MVC 8(8,R1),TICCW 00899000 SPACE 1 00900000 LA R4,IOERDATA-IOERBLOK(R4) PUT IT WHERE IT GOES @VA09736 00901010 AL R4,UNLOAD 00902000 ST R4,0(R1) 00903000 L R4,IOBCAW CHAIN A TIC COMD. TO USERS CCW STRING. 00904000 LA R4,0(R4) 00905000 AL R4,TICCW 00906000 ST R4,8(R1) 00907000 B RETRY 00908000 NXTPTR LR R15,R4 SAVE IOERPNT @VA08187 00909000 L R4,0(R4) 00910000 LTR R4,R4 00911000 BNZ NXTPTR 00912000 ST R1,0(R15) CHAIN BLOK IN @VA08187 00913000 BR R5 00914000 SPACE 1 00915000 TESTPERM TM IOERDATA+1,X'80' PERMANENT ERROR CONDITION ? 00916000 BZ NOTPERM BRANCH NO 00917000 MVI IOERNUM,PERM SET UP MESSAGE NUMBER. 00918000 OI IOERIND3,IOERCAN+IOERINFO 00919000 B CALLWTR 00920000 SPACE 1 00921000 NOTPERM TM IOERDATA,X'10' IS THIS AN EQUIP CHECK ERROR 00922000 BZ NOTEQIP 00923000 MVC IOBRCAW,IOBCAW SET UP CAW. 00924000 CLC IOBRCNT,F10+2 HAS THIS ERROR OCCURRED 10 TIMES ? 00925000 BH EQCK IF YES BRANCH 00926000 B RETRY 00927000 SPACE 1 00928000 NOTEQIP TM IOERDATA,X'20' BUSOUT CHECK ? 00929000 BO BUSCK BRANCH IF YES 00930000 TM IOERDATA,X'40' INT. REQ. CONDITION ? 00931000 BO TSTINT BRANCH IF YES 00932000 CLI RDEVTYPE,TYP3340 3340 DEVICE TYPE ? @V2A2029 00933000 BNE NOSEEK NO - DO NOT TEST FOR SEEK CHECK @V2A2029 00934000 TM IOERDATA,X'01' SEEK CHECK ERROR ? @V2A2029 00935000 BO SEEKCK YES --BRANCH @V2A2029 00936000 NOSEEK EQU * @V2A2029 00937000 TM IOERDATA,X'80' COMMAND REJECT ERROR ? 00938000 BZ NOTCOMRJ NO, DO NEXT TEST @V56BDA8 00939100 * NOTE: THE IOBALTSK FLAG, TESTED BELOW, CAUSES US TO CALL DMKTRKIN, 00939110 * SO IT HAD BETTER NOT GET SET FOR DEVICES NOT HANDLED BY DMKTRKIN. 00939120 * PRESENTLY DMKTRKIN IS LIMITED TO HANDLING 3340/3344. 00939130 TM IOBSTAT,IOBALTSK IS THERE A SEEK TO AN @V56BDA8 00939140 * ALTERNATE? 00939150 BO CKALTERR YES, CALL ALTERNATE TRACK ROUTINE@V56BDA8 00939160 B CHKREL ELSE, TREAT AS COMMAND REJECT @V56BDA8 00939170 NOTCOMRJ EQU * @V56BDA8 00939180 TM IOERDATA+1,X'08' NO RECORD FOUND ERROR ? 00940000 BO PROGERR YES- BRANCH 00941000 TM IOERDATA,X'04' OVERRUN ERROR ? 00942000 BO OVERRUN BRANCH YES 00943000 CLI RDEVTYPE,TYP3340 3340 DEVICE TYPE ? @V2A2029 00944000 BNE NOTRKC NO - DO NOT TEST FOR TRK COND. @V2A2029 00945000 TM IOERDATA,X'02' TRACK CONDITION ERROR ? @V2A2029 00946000 BZ NOTRKC NO, BRANCH TO CHECK NEXT @V56BDA8 00947050 CKALTERR CALL DMKTRKIN CALL ALTERNATE TRACK ROUTINE @V56BDA8 00947100 SWITCH @V56BDA8 00947150 B *+4(R1) BRANCH ON RETURN VECTOR @V56BDA8 00947200 B FINISH 0 - RECOVERY COMPLETE @V56BDA8 00947250 B RETRYK00 4 - DO AN IO OPERATION @V56BDA8 00947300 B EOCERR 8 - END OF CYLINDER CONDITION @V56BDA8 00947350 B RECURALT 12 - ANOTHER ERROR @V56BDA8 00947400 B RECFAIL 16 - RECOVERY FAILURE @V56BDA8 00947450 B FILPROT 20 - FILE PROTECT EXCEPTION @V56BDA8 00947500 B BDTRK 24 - PERMANENT TRACK CONDITION @V56BDA8 00947550 B CHKREL 28 - COMMAND REJECT @V56BDA8 00947600 SPACE 2 00947650 NOTRKC EQU * @V2A2029 00948000 TM IOERDATA+1,X'40' IS THIS A TRACK OVERFLOW 00949000 BO TRKOV BRANCH YES. 00950000 * 00951000 TM IOERDATA,X'08' DATA CHECK ERROR ? 00952000 BO DATCHECK BRANCH IF YES 00953000 TM IOERDATA+1,X'20' EOC CONDITION 00954000 BO EOCERR YES--DO NOT RECORD @VA02358 00955000 TM IOERDATA+1,X'04' FILE PROTECT ERROR ? 00956000 BO FILPROT BRANCH IF YES. 00957000 B SHDNOT 00958000 DATCHECK TM IOERDATA+2,X'40' CORRECTABLE ERROR ? 00959000 BO CORRERR YES -- @V2A2029 00960000 TM RDEVTYPE,TYP2305+TYP3340 3340 OR 2305 ? @V2A2029 00961000 BZ DATAMSG NO, BRANCH-GIVE ERROR MSG @V2A2029 00962000 CLC IOBRCNT(2),F10+2 OVER 10 RETRIES ? @V2A2029 00963000 BH DATAMSG YES, BRANCH- GIVE ERROR MSG @V2A2029 00964000 MVC IOBRCAW,IOBCAW SET UP RESTART ADDRESS @V2A2029 00965000 B RETRY RETRY THE OPERATION @V2A2029 00966000 CORRERR LA R0,20 GET FREE STORAGE @V2A2029 00967000 CALL DMKFREE 00968000 ST R1,IOERLOC STORE STORAGE LOCATION 00969000 STH R0,IOERDW STORE SIZE OF STORAGE . 00970000 LR R9,R1 SET BUFFER ADDRESS 00971000 XC 0(160,R9),0(R9) CLEAR BUFFER 00972000 USING ECFDSECT,R9 00973000 STM R2,R5,ECFREG2 SAVE REGS 2-5 @VA08187 00974000 ST R11,ECFREG11 SAVE REG.11 00975000 LH ERREG2,IOERDATA+18 LOAD BACKWARD DISP. 00976000 N ERREG2,XRIGHT16 CLEAR HI ORDER BYTES 00977000 L CCWREG,IOERCSW PICK UP CCW ADDR. FROM CSW 00978000 LA CCWREG,0(CCWREG) CLEAR HI ORDER BYTE 00979000 LTR CCWREG,CCWREG IS CCW ADDR. PRESENT 00980000 BZ EQCK IF NOT TREAR AS EQUIP CHECK 00981000 S CCWREG,F8 SUBTRACT 8 GIVING TRUE CCW ADDRESS 00982000 BM EQCK IF NEGATIVE, INDICATE EQUIPMENT @VM08849 00983000 * CHECK 00984000 L R1,IOBCAW POINT AT FIRST CCW @VA04842 00984575 LA R1,0(,R1) CLEAR KEY @VA04842 00985150 SLR R15,R15 CLEAR RESTART REGISTER @VA08187 00986300 CHKZERO CLI 0(CCWREG),X'00' IS THIS A DATA CHAIN CCW? @VA04842 00986875 BNE CHKCD FIND VALID RESTART CCW @VA12071 00988050 SPACE , @VA04842 00990900 CHKFIRST S CCWREG,F8 BACK UP TO PREVIOUS CCW @VA04842 00991475 B CHKZERO KEEP LOOKING... @VA04842 00992050 SPACE , @VA04842 00992625 CHKCD S R1,F16 BEGINNING OF FIRST RCWTASK @VA04842 00993200 L R0,FFS FOR RCWHEAD COMPARE @VA12071 00993250 CH R0,12(,R1) CCWREG REALLY FIRST IN RCWTASK? @VA12071 00993300 BNE BYPASSW NO... FIND VALID RESTART CCW @VA12071 00993350 CHKCD1 LH R0,10(,R1) GET COUNT OF CCWS @VA04842 00993775 LR R2,R1 R2 = RCWTASK NOW UNDER SCRUTINY @VA04842 00994350 LA R1,8(,R1) POINT TO FIRST CCW-8 @VA04842 00994925 NEXTCCW LA R1,8(,R1) POINT AT NEXT CCW @VA04842 00995500 CLI 0(R1),X'0B' IS CMD A SEEK? @VA12071 00995550 BE UPDTSEEK YES, REMEMBER IT @VA12071 00995600 CLI 0(R1),X'07' IS IT THIS SEEK? @VA12071 00995650 BNE NOTSEEK CARRY ON @VA12071 00995700 UPDTSEEK EQU * @VA12071 00995750 ST R3,SAVEWRK4 SAVE R3 @VA12071 00995800 L R3,0(R1) PICK UP ADDR. OF @VA12071 00995850 LA R3,0(R3) SEEK DATA AND @VA12071 00995900 MVC IOERADR(4),2(R3) SAVE THE LAST SEEK DONE @VA12071 00995950 L R3,SAVEWRK4 RESTORE R3 @VA12071 00996000 NOTSEEK EQU * @VA12071 00996050 CLR R1,CCWREG IS IT 'OUR' CCW? @VA04842 00996075 BE CHKCCW2 IF SO, LOOK NO FURTHER @VA04842 00996650 CLI 0(R1),CDTIC CHAIN DATA TIC CCW? @VA04842 00997225 BE CHKCCW YES...SEE WHERE IT GOES @VA04842 00997800 CLI 0(R1),X'08' ORDINARY TIC? @VA04842 00998375 BE NEXTCCW1 FORGET IT...TRY AGAIN @VA04842 00998950 TM 4(R1),CD START OF CD CHAIN? @VA04842 00999525 BO MAYBE LET'S SEE @VA04842 01000100 NEXTCCW1 SLR R15,R15 CLEAR REG15 @VA08187 01000675 B CHKCCW1 CONTINUE LOOKING... @VA04842 01001250 SPACE , @VA04842 01001825 CHKCCW CLM CCWREG,B'0111',1(R1) IS IT THE ONE WE WANT? @VA04842 01002400 BE DATACCW YES...THEN R6 IS THE RESTART CCW @VA04842 01002975 B CHKCCW1 NO...KEEP LOOKING @VA04842 01003550 SPACE , @VA04842 01004125 MAYBE LTR R15,R15 IS REG15 VALID @VA08187 01004700 BNZ CHKCCW1 YES...SAVE IT @VA04842 01005275 LR R15,R1 REMEMBER POSSIBLE RESTART ADDRESS@VA08187 01005850 CHKCCW1 BCT R0,NEXTCCW CHECK ENTIRE RCWTASK? @VA04842 01006425 L R1,0(,R2) POINT AT NEXT RCWTASK @VA04842 01007000 LTR R1,R1 IS THERE ONE? @VA04842 01007575 BNZ CHKCD1 YES...KEEP LOOKING @VA04842 01008150 CHKCCW2 LTR R15,R15 IS REG15 VALID @VA08187 01008725 BZ BYPASSW THEN USE CCWREG TO RESTART @VA04842 01009300 DATACCW LR CCWREG,R15 GET ADDRESS OF CHAINING CCW @VA08187 01009875 BYPASSW EQU * @VA04842 01010450 ST R11,ECFREG11 SAVE IT @VA08385 01010500 MVC ECFCNT+2(2),6(CCWREG) MOVE IN CCW CNT. 01012000 CLI RDEVTYPE,TYP2305 2305 TYPE ECF CORRECTION ? @V304498 01013000 BE DISPZ YES, APPLY 2305 ECF @V304498 01014000 MVC TOTALCNT+1(3),IOERDATA+15 FETCH RESTART DISP. 01015000 L ERREG1,TOTALCNT LOAD NUMBER READ BY C.U. 01016000 SR ERREG1,ERREG2 CALC FORWARD DISP. 01017000 * ERROR DISP OF 3 OR MORE USE SENSE BYTES 20,21,22 01018000 * ERROR DISP OF 2 USE SENSE BYTES 21,22 01019000 * ERROR DISP OF 1 USE SENSE BYTE 22 01020000 C ERREG2,F2 BACKWARD DISP OF 2 @VM08849 01021000 BH ECCNT NO - USE 3 BYTE ECC COUNT @VM08849 01022000 LR ERREG3,ERREG2 SET UP FOR COUNT OF TWO @VM08849 01023000 BE ECADDR YES - COUNT EQUALS 2 @VM08849 01024000 BCT ERREG2,LENCHK DISP EQUAL ZERO--BRANCH @VA02257 01025000 B ECADDR ERREG3 EQUALS 1 @VM08849 01026000 * 01027000 * CALCULATE FORWARD DISPLACEMENT FOR 2305 01028000 * 01029000 DISPZ DS 0H CONNECTOR 01030000 L ERREG1,ECFCNT GET CCW CNT. 01031000 SR ERREG1,ERREG2 DECR BY ECC DISP. 01032000 LH ERREG2,IOERCSW+6 LOAD RESIDUAL CNT. 01033000 N ERREG2,XRIGHT16 CLEAR HI ORDER BYTES 01034000 SR ERREG1,ERREG2 DECR BY RESIDUAL CNT. 01035000 BM OVERRUN2 BRANCH ON NEGATIVE DISP. @VA08385 01036100 * 01037000 ECCNT LA ERREG3,3 SET LOOP TO 3 @VM08849 01038000 ECADDR LA ERREG2,IOERDATA+23 POINT TO ECC BYTE+3 @VM08849 01039000 SR ERREG2,ERREG3 POINT TO CORRECT ECC BYTE @VM08849 01040000 ECFLOOP1 CL ERREG1,ECFCNT IS ERROR IN THIS SEG ? 01041000 BNL ENDSEG BRANCH IF NO 01042000 * 01043000 * CALCULATE FORWARD ERROR DISPLACEMENT FOR 3330/40/50/80 HRC011DK 01044490 * @VA00922 01045000 ST ERREG1,IDALCNT SAVE FWD DISP IN CASE IDAL @VA03061 01046000 TM 4(CCWREG),SKIP SUPPRESS DATA FLG. ON ? @VA00922 01047000 BO ECFINCR YES - @VA00922 01048000 L R15,0(CCWREG) GET DATA ADDR. FROM CCW @VA08187 01049000 LA R15,0(,R15) REMOVE CMD. CODE @VA08187 01050000 TM 4(CCWREG),IDA IS IDAL FLG. ON ? @VA00922 01051000 BO IDALIST YES - GO FIND RIGHT IDA WORD @VA00922 01052000 AR R15,R1 NO - ADD FWD DISP. VALUE @VA08187 01053000 B ECFBYTE OR' IN CORRECTION BYTES @VA00922 01054000 SPACE 1 @VA00922 01055000 * HERE TO PROCESS ERROR'S IN IDAL CCW STRINGS @VA00922 01056000 * @VA00922 01057000 IDALIST L R2,0(,R15) GET ENTRY WITHIN IDAL LIST @VA08187 01058000 L R3,F4096 CHECK BOTH HALFS OF PAGE @VA00922 01059000 O R2,=X'00000800' FORCE TO 2'ND HALF OF PAGE @VA00922 01060000 N R2,F4095 ONLY LEAVE DISP. OF IDAL WORD @VA00922 01061000 SLR R3,R2 SUBTRACT OUT DISP. VALUE @VA00922 01062000 CL R3,IDALCNT IS ERROR IN THIS IDA WORD ? @VA00922 01063000 BH FNDIDAW YES - @VA03061 01064000 L R2,IDALCNT NO - GET REMAINING BYTE COUNT @VA00922 01065000 SLR R2,R3 REDUCE COUNT BY THIS IDA WORD @VA00922 01066000 ST R2,IDALCNT SAVE NEW RESULT @VA00922 01067000 LA R15,4(,R15) POINT TO NEXT IDA WORD @VA08187 01068000 B IDALIST KEEP LOOKING FOR CORRECT IDA WORD@VA00922 01069000 FNDIDAW L R2,0(,R15) LOAD ADDRESS FROM IDA WORD @VA08187 01070000 AL R2,IDALCNT ADD IN RECOMPUTED DISP. @VA00922 01071000 NXTBYTE EQU * @VA09106 01072100 XC 0(1,R2),0(ERREG2) OR IN CORRECTION BYTE @VA09106 01072200 B ECFINCR GO INCREMENT FOR NEXT BYTE @VA03061 01073000 * @VA00922 01074000 * HERE TO EXCLUSIVE OR ECC BYTE INTO STORAGE FOR CHANNEL @VA00922 01075000 * PROGRAMS THAT DO NOT CONTAIN AN IDAL LIST @VA00922 01076000 * @VA00922 01077000 ECFBYTE XC 0(1,R15),0(ERREG2) APPLY CORRECTION TO CORE @VA08187 01078000 ECFINCR DS 0H CONNECTOR 01079000 LA ERREG2,1(ERREG2) POINT TO NEXT ECC BYTE 01080000 ECFINCR1 LA ERREG1,1(ERREG1) INCR DISP. VALUE 01081000 BCT ERREG3,ECFLOOP1 DECR LOOP CTR. 01082000 L R11,ECFREG11 MAKE SURE IT'S SAVED @VA08385 01082500 SPACE 1 01083000 CLI RDEVTYPE,TYP2305 PROCESS 2305 CHAN PROGRAM @V304498 01084000 BE ECFOVCK YES, TEST FOR CMD CHAINING @V304498 01085000 B LENCHK CORRECTION DONE -- GO CHECK LEN @VA03061 01086000 SPACE 1 01087000 ENDSEG EQU * 01088000 CLI RDEVTYPE,TYP2305 PROCESS 2305 CHAN PROGRAM ? @V304498 01089000 BE ECFOVCK YES, CHECK COMMAND CHAINING ? @V304498 01090000 TM 4(CCWREG),X'80' IS THIS CCW DOING ANY DATA CHAINING 01091000 BZ LENCHK BRANCH IF NO. 01092000 L R15,TOTALCNT LOAD TOTAL BYTES TRANSFERRED @VA08187 01093000 S R15,ECFCNT DECREASE BY CCW CNT @VA08187 01094000 ST R15,TOTALCNT STORE NEW RESULT @VA08187 01095000 S ERREG1,ECFCNT DECR DISP BY CCW CNT. 01096000 BM SETLEN BRANCH IF DISP. NEGATIVE 01097000 LA CCWREG,8(CCWREG) INCR TO NEXT CCW 01098000 TM 0(CCWREG),X'08' IS THIS A TIC CCW @VA00669 01099000 BZ SETECNT NO @VA00669 01100000 TM 0(CCWREG),X'07' TRY OTHER BITS @VA00669 01101000 BNZ SETECNT NOT A TIC CCW @VA00669 01102000 L CCWREG,0(CCWREG) PICK UP NEXT CCW ADDR. 01103000 SETECNT MVC ECFCNT+2(2),6(CCWREG) UPDATE COUNT AREA 01104000 B ECFLOOP1 01105000 SPACE 1 01106000 LENCHK TM IOERDATA+23,X'01' DID CONTROL UNIT INDICATE INCORRECT 01107000 BZ MER210 BRANCH IF NO 01108000 CLC TOTALCNT(4),ECFCNT COMPARE COUNT 01109000 BNE MER210 BRANCH ON INCORRECT LEN. 01110000 * IF NO INCORRECT LENGTH TREAT THIS ERROR AS A EQUIP. CHECK 01111000 * 01112000 * 01113000 MVC IOBRCAW,IOBCAW SET UP RESTART CAW 01114000 CLC IOBRCNT,F10+2 HAS ERROR OCCURRED 10 TIMES ? 01115000 BNH RETRY BRANCH IF NO 01116000 B EQCK CALL MESSAGE WRITTER 01117000 SPACE 1 01118000 MER210 EQU * 01119000 XC IOBCSW+6(2),IOBCSW+6 CLEAR CSW RESIDUAL COUNT @VA09516 01120100 NI IOBCSW+5,255-IL TURN OFF INCORRECT LENGTH @VA09516 01120300 CLC TOTALCNT(4),ECFCNT WAS FULL BLOCK TRANSFERRED @VA09516 01120500 BE ECFOVCK YES, LENGTH OK @VA09516 01120700 L ERREG2,ECFCNT GET ORIGINAL LENGTH @VA09516 01120900 S ERREG2,TOTALCNT SUBTRACT ACTUAL BYTES READ @VA09516 01121100 BM SETLEN INCORRECT LENGTH IF NEGATIVE @VA09516 01121300 STH ERREG2,IOBCSW+6 UPDATE CSW @VA09516 01121500 SETLEN EQU * @VA02277 01122000 TM 4(CCWREG),X'20' SUPPRESS LEN. BIT ON ? 01123000 BO ECFOVCK BRANCH IF YES 01124000 OI IOBCSW+5,IL SET INCORRECT LENGTH BIT IN CSW @VA09516 01125100 B NOERROR 01126000 SPACE 1 01127000 ECFOVCK EQU * 01128000 TM 4(CCWREG),X'40' IS COMMAND CHAINING BIT ON ? 01129000 BZ NOERROR BRANCH IF LAST CCW IN CHAIN 01130000 MVC SECTVAL+1(1),IOERDATA+13 GET SECTOR POINTER 01131000 LA ERREG2,8(CCWREG) POINT AT NEXT CCW 01132000 TM 0(ERREG2),X'08' IS THIS CCW A TIC @VA00669 01133000 BZ NOTIC NO @VA00669 01134000 TM 0(ERREG2),X'07' TRY OTHER BITS @VA00669 01135000 BNZ NOTIC NOT A TIC, SKIP @VA00669 01136000 L ERREG2,0(ERREG2) IF YES POINT TO NEXT CCW 01137000 ECFBLD EQU * 01138000 NOTIC CLI RDEVTYPE,TYP3340 3340/3344? @V56BDA8 01139100 BNE NOTICA NO, SKIP CALL @V56BDA8 01139200 BAL ERREG4,UPSK3340 ENSURE CORRECT RESTART CCHH @V56BDA8 01139300 NOTICA TM IOERIND3,IOERDASD IS SEEK ADDR PRESENT? @V56BDA8 01139400 BO SEEKBLD BRANCH IF YES. 01140000 B DATAMSG IF SEEK ADDR. NOT PRESENT TREAT AS ERROR 01141000 * 01142000 * 01143000 ********************* 01144000 SEEKBLD XC CCW1(48),CCW1 CLEAR STORAGE FOR CCW BUILDING.. 01145000 MVC SEEKADR+2(4),IOERADR MOVE IN SEEK AUG. 01146000 MVC SEEKADR+5(1),IOERDATA+6 CHANGE LOW ORDER HEAD ADDR. 01147000 NI SEEKADR+5,X'1F' RESET BIT'S 0-1-2- 01148000 MVC CCW1,SEEK BUILD MODEL SEEK CCW 01149000 LA ERREG4,SEEKADR GET ADDR. OF SEEK AUG. 01150000 AL ERREG4,SEEK AND ADD COMMAND CODE 01151000 ST ERREG4,CCW1 STORE RESULT IN CCW1 01152000 CLI RDEVTYPE,TYP2305 USE 2305 CYL/HEAD ADDRESS ? @V304498 01153000 BNE SECTOR NO, SKIP 2305 CCHH ADDRESS @V304498 01154000 L2305 MVC SEEKADR+3(1),IOERDATA+5 MOVE IN CYL. ADDR. FOR 2305 01155000 MVC SEEKADR+5(1),IOERDATA+6 MOVE IN HEAD NUM. FOR 2305 01156000 SECTOR MVC CCW2,SETSECT BUILD MODEL SECTORE CCW 01157000 LA ERREG4,IOERDATA+13 RESOLVE ADDRESS FOR CCW 01158000 AL ERREG4,SETSECT STORE REAL ADDR. 01159000 ST ERREG4,CCW2 IN CCW 2 01160000 MVC CCW3,SRCHEQ BUILD MODEL SEARCH CCW 01161000 LA ERREG4,IOERDATA+8 GET THE ADDRESS OF SRID DATA 01162000 AL ERREG4,SRCHEQ GET COMMAND CODE 01163000 ST ERREG4,CCW3 STORE ADDR. AND CC OF CCW 01164000 MVC CCW4,TICCW BUILD MODEL TIC CCW. 01165000 LA ERREG4,CCW3 PICK UP ADDR OF SEARCH CCW. 01166000 AL ERREG4,TICCW INSERT COMMAND CODE 01167000 ST ERREG4,CCW4 STORE TIC COMMAND AND ADDR. 01168000 TM 0(ERREG2),X'10' DOES CCW OPERATE ON COUNT FIELD ? 01169000 BNO BLDCNT IF THERE IS NO COUNT CODE, INCLUDE READ @VA03438 01170000 * COUNT COMMAND IN CCW CHAIN @VA03438 01171000 MVC CCW5,TICCW BUILD MODEL TIC CCW 01172000 LR ERREG4,ERREG2 LOAD CCW ADDR @VA00669 01173000 LA ERREG4,0(ERREG4) CLEAR OUT PROTECT KEY 01174000 AL ERREG4,TICCW INSERT TIC COMMAND CODE 01175000 ST ERREG4,CCW5 STORE COMPLETED CCW 01176000 B LOADREGS 01177000 BLDCNT MVC CCW5,RDCOUNT BUILD READ COUNT CCW 01178000 TM 0(ERREG2),X'80' IS IT A MULTI-TRACK COMMAND @VA03438 01179000 BNO NOMT IF NOT, BRANCH @VA03438 01180000 OI CCW5,X'80' ISSUE A MULTI-TRACK READ COUNT @VA03438 01181000 * COMMAND @VA03438 01182000 NOMT MVC CCW6,TICCW BUILD TIC CCW @VA03438 01183000 LR ERREG4,ERREG2 LOAD CCW ADDR @VA00669 01184000 LA ERREG4,0(ERREG4) CLEAR OUT PROTECT KEY. 01185000 AL ERREG4,TICCW INSERT 08 COMMAND FOR TIC 01186000 ST ERREG4,CCW6 STORE COMPLETED CCW 01187000 LOADREGS LA ERREG4,CCW1 LOAD THE ADDRESS OF THE FIRST CCW 01188000 ST ERREG4,IOBRCAW SET UP RESTATR CAW ADDRESS. 01189000 LM R2,R5,ECFREG2 RESTORE REGS 2-5 @VA08187 01190000 L R11,ECFREG11 01191000 OI IOERFLG2,IOERECF 01192000 B RETRY 01193000 ***** RESTORE ALL REGISTER'S 01194000 ****** 01195000 * 01196000 NOERROR MVI IOBCSW+4,X'0C' SET ON C.E. + D.E. 01197000 B FINISH 01198000 SPACE 1 01198050 RDOPCK EQU * HERE ON FIRST ERROR & DATA CK @VA03757 01198100 L R3,IOERCSW GET FAILING CCW ADDRESS PLUS 8 @VA03757 01198150 LA R3,0(,R3) CLEAR HI-ORDER BYTE @VA03757 01198200 S R3,F8 GET FAILING CCW ADDRESS @VA03757 01198250 BM NOREAD NO CCW @VA03757 01198300 TM 0(R3),X'01' WRITE OR CONTROL OP ??? @VA03757 01198350 BO NOREAD YES, FORGET READ FLAG @VA03757 01198400 TM 0(R3),X'02' IS IT A READ OP ?? @VA03757 01198450 BZ NOREAD NO, FORGET READ FLAG @VA03757 01198500 OI IOERFLG3,IOERREAD TURN ON READ FLAG FOR SDR @VA03757 01198550 NOREAD EQU * @VA03757 01198600 BR R5 RETURN TO IN LINE CODE @VA03757 01198650 SPACE 2 01198672 UPSK3340 IC R0,IOERDATA+6 XCCXHHHH @V56BDA8 01198674 SRL R0,5 XXXXXCC @V56BDA8 01198676 STC R0,IOERADR STORE HIGH CC @V56BDA8 01198678 NI IOERADR,X'03' CLEAR UNUSED BITS @V56BDA8 01198680 MVC IOERADR+1(L1),IOERDATA+5 STORE LOW CC @V56BDA8 01198682 MVC IOERADR+2(L2),ZEROES CLEAR HH FIELD @V56BDA8 01198684 MVN IOERADR+3(L1),IOERDATA+6 COPY HH @V56BDA8 01198686 OI IOERIND3,IOERDASD INDICATE GOOD SEEK ADDRESS @V56BDA8 01198688 BR R5 RETURN TO CALLER @V56BDA8 01198690 EJECT 01198700 SPACE 3 01199000 * BUILD A BUFFER TO READ THE VOLID OF PACK 01199050 SPACE 01199100 GETSTBUF LA R0,STATSIZE GET A BUFFER TO READ THE VOL1 @VA08187 01199150 * LABEL 01199200 CALL DMKFREE @VA08187 01199250 LR R4,R1 SAVE THE POINTER TO THE BUFFER @VA08187 01199300 XC STATDASD(STATSIZE*8),STATDASD ZERO OUT THE @VA08187 01199350 * BUFFER 01199400 MVC STATVOL1(6),BLANKS INITIALIZE LABL AND VOL1 @VA08187 01199450 MVC STATDASD(RDVOLEND-RDVOLID),RDVOLID MOVE MDL CCWS@VA08187 01199500 LA R14,((RDVOLEND-8)-RDVOLID)/8 GET LOOP COUNT @VA08187 01199550 LA R1,STATSEEK ADDR OF THE FIRST TO DO @VA08187 01199600 RESOLVAD L R15,0(R1) GET THE CURRENT ADDRESS @VA08187 01199650 ALR R15,R4 ADJUST BY BEGINNING OF GOTTEN STG@VA08187 01199700 ST R15,0(R1) AND RESTORE @VA08187 01199750 LA R1,8(R1) BUMP TO NEXT CCW @VA08187 01199800 BCT R14,RESOLVAD CONTINUE UNTIL ALL CCW'S ARE DONE@VA08187 01199850 BR R5 RETURN TO THE CALLING ROUTINE @VA08187 01199900 SPACE 3 01199950 * COMPARE THE VOLID READ TO THE VOLID IN THE REAL DEVICE BLOCK 01200000 SPACE 01200050 COMPVOL1 CLC STATVOL1,=C'VOL1' STANDARD VOL 1 LABEL @VA08187 01200100 BE STANDLBL YES - @VA08187 01200150 CLC STATVOL1,=C'CMS=' PACK HAVE CMS TYPE LABEL @VA08187 01200200 BE STANDLBL YES - @VA08187 01200250 CLC STATVOL1,=C'CMS1' PACK HAVE CMS TYPE LABEL HRC011DK 01200260 BE STANDLBL YES - HRC011DK 01200270 MVC STATLABL+4(2),STATLABL MOVE LABEL IN PIECES @VA08187 01200300 MVC STATLABL(4),STATVOL1 PREVENT OVERLAP @VA08187 01200350 STANDLBL EQU * HERE FOR STANDARD LABEL @VA08187 01200400 CLC STATLABL,RDEVSER WAS THE PACK CHANGED ? @VA08187 01200450 BCR 8,R5 RETURN WITH THE CONDITION CODE @VA08187 01200500 * SET 01200550 MVI STATPACK,X'FF' INDICATE PACK WAS CHANGED @VA08187 01200600 BR R5 RETURN WITH THE CONDITION CODE @VA08187 01200650 * SET 01200700 SPACE 3 01200750 * TEST IF PACK WAS CHANGED AND IN USE BY THE SYSTEM 01200800 SPACE 01200850 TESTVOL CLI STATPACK,X'FF' WAS THE PACK CHANGE @VA08187 01200900 BCR 7,R5 NO- RETURN TO THE CALLER @VA08187 01200950 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @VA08187 01201000 TM RDEVFLAG,RDEVSYS+RDEVOWN WAS PACK IN USE BY @VA08187 01201050 * SYSTEM 01201100 BNZ ERROR956 DO NOT MOVE IN NEW VOLID; VARY @VA08187 01201150 * OFFLINE 01201200 MVC RDEVSER,STATLABL MOVE IN THE NEW VOLID @VA08187 01201250 TM RDEVSTAT,RDEVDED DEVICE DEDICATED ? @VA08187 01201300 BO *+8 YES -- @VA08187 01201350 OI RDEVFLAG,RDEVMOUT INDICATE VOLUME MOUNTED; NOT @VA08187 01201400 * ATTACHED 01201450 CLI RDEVTYPE,TYP3340 3340 TYPE ? @VA08187 01201500 BCR 7,R5 NO - RETURN TO CALLER @VA08187 01201550 NI RDEVFTR,X'FF'-(FTRRPS+FTR70MB+FTR35MB) RESET @VA08187 01201600 TM STATSDAT+2,X'80' RPS FEATURE PRESENT ? @VA08187 01201650 BZ *+8 NO - @VA08187 01201700 OI RDEVFTR,FTRRPS INDICATE RPS FEATURE @VA08187 01201750 TM STATSDAT+2,X'02' 3340 70MB PACK MOUNTED ? @VA08187 01201800 BZ SET35MB NO -- MUST BE 35MB PACK @VA08187 01201850 OI RDEVFTR,FTR70MB INDICATE 70MB PACK MOUNTED @VA08187 01201900 BR R5 RETURN TO CALLER @VA08187 01201950 SET35MB OI RDEVFTR,FTR35MB INDICATE 35MB PACK MOUNTED @VA08187 01202000 BR R5 RETURN TO CALLER IF NOT IN USE @VA08187 01202050 * BY SYSTEM 01202100 SPACE 1 01202150 ERROR95F SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @VA08187 01202200 ERROR956 OI RDEVSTAT,RDEVDISA MARK THE DEVICE OFFLINE @VA08187 01202250 LH R1,IOBRADD GET THE REAL DEVICE ADDRESS @VA08187 01202300 CALL DMKCVTBH AND CONVERT IT @VA08187 01202350 LR R3,R1 SAVE CONVERTED ADDRESS @VA08187 01202400 LA R0,(L'DAS956+7)/8 GET A MSG BUFFER @VA08187 01202450 CALL DMKFREE @VA08187 01202500 MVC 0(L'DAS956,R1),DAS956 MOVE IN THE MSG @VA08187 01202550 STCM R3,7,DAS956AD(R1) FILL IN THE CONVERTED ADDRESS @VA08187 01202600 MVC DAS956VS(6,R1),STATLABL THE VOLID ALSO @VA08187 01202650 LR R3,R0 SAVE THE BUFFER LENGTH (DW) @VA08187 01202700 LA R0,L'DAS956 SET UP THE MSG LENGTH @VA08187 01202750 LA R2,DFRET+NORET+OPERATOR+ALARM PARM REG @VA08187 01202800 CALL DMKQCNWT TELL THE OPERATOR @VA08187 01202850 BR R5 RETURN TO THE CALLER @VA08187 01202900 EJECT 01202950 * 01203000 * 01203050 * 01203100 EQUIP EQU 3 EQUIPMENT CHECK MESSAGE @VA08187 01203150 MADM EQU 14 MISSING ADDRESS MARKER MESSAGE @VA08187 01203200 SKCK EQU 7 SEEK CHECK MESSAGE @VA08187 01203250 INTREQU EQU 1 INTERVENTION REQUIRED MESSA @VA08187 01203300 PERM EQU 8 @VA08187 01203350 RECERR EQU 18 @VA08187 01203400 FALSE EQU 17 @VA08187 01203450 BDSNS EQU 16 @VA08187 01203500 PROTECT EQU 13 @VA08187 01203550 TKOVER EQU 9 @VA08187 01203600 BUSOUTCK EQU 2 @VA08187 01203650 DATAER EQU 4 @VA08187 01203700 OVERERR EQU 5 @VA08187 01203750 TRKCOND EQU 6 @VA08187 01203800 REJ EQU 0 @VA08187 01203850 DAS956 DC C'DMKDAS956A DASD XXX VOLID XXXXXX not mounted; now OFFL*01217490 INE' 01218000 DAS956AD EQU 16 DISP OF THE UNIT ADDRESS 01219000 DAS956VS 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 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 DS 0D 01231000 RESTORE DC X'1300000060000001' RECALIBRATE CCW 01232000 TICCCW DC X'0800000020000005' 01233000 HACCW DC X'1A00000020000005' READ HOME ADDR. CCW 01234000 SEEK DC X'07' 01235000 DC AL3(0) 01236000 DC X'60' 01237000 DC X'00' 01238000 DC X'0006' 01239000 SETSECT DC X'23' SET SECTOR COMMAND 01240000 DC AL3(0) 01241000 DC X'60' 01242000 DC X'00' 01243000 DC X'0001' 01244000 SRCHEQ DC X'31' SEARCH ID EQUAL COMMAND 01245000 DC AL3(0) 01246000 DC X'60' 01247000 DC X'00' 01248000 DC X'0005' 01249000 TICCW DC X'08' TIC COMMAND CODE 01250000 DC AL3(0) 01251000 DC X'60' 01252000 DC X'00' 01253000 DC X'0001' 01254000 RDCOUNT DC X'12' READ COUNT COMMAND CODE 01255000 DC AL3(0) 01256000 DC X'70' 01257000 DC X'00' 01258000 DC X'0001' 01259000 UNLOAD DC X'24' BUFFER OFFLINE UNLOAD COMMAND CODE 01260000 DC AL3(0) 01261000 DC X'60' 01262000 DC X'00' 01263000 DC X'0080' 01264000 ERREG2 EQU 4 @VA08385 01265100 CCWREG EQU 5 01266000 ERREG1 EQU 1 01267000 ERREG3 EQU 11 @VA08385 01268100 ERREG4 EQU 5 01269000 CDTIC EQU X'18' CHAIN DATA TIC OP-CODE @VA04842 01270500 L1 EQU 1 FOR USE AS SYMBOLIC LENGTH. @V56BDA8 01270610 L2 EQU 2 FOR USE AS SYMBOLIC LENGTH. @V56BDA8 01270620 L3 EQU 3 FOR USE AS SYMBOLIC LENGTH. @V56BDA8 01270630 L4 EQU 4 FOR USE AS SYMBOLIC LENGTH. @V56BDA8 01270640 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 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 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 ECFDSECT DSECT 01294000 CCW1 DS D 01295000 CCW2 DS D 01296000 CCW3 DS D 01297000 CCW4 DS D 01298000 CCW5 DS D 01299000 CCW6 DS D 01300000 ECFCSW DS D 01301000 ECFCCW DS D 01302000 ECFCNT DS F CSW BYTE COUNT @VA09516 01303100 ECFREG2 DS F 01304000 ECFREG3 DS F 01305000 ECFREG4 DS F 01306000 ECFREG5 DS F 01307000 ECFREG15 DS F @VA08187 01308000 ECFBWK DS F 01309000 ECFFWD DS F 01310000 ECFCCWRD DS F 01311000 TOTALCNT DS F NUMBER OF BYTES PROCESSED @VA09516 01312100 IDALCNT DS F @VA00922 01313000 ECFREG11 DS F 01314000 SECTVAL DS H 01315000 * 01316000 SEEKADR DS CL6 01317000 EJECT 01318000 COPY RBLOKS @V200820 01319000 COPY VBLOKS @VA04231 01319400 COPY VMBLOK @VA04231 01319800 COPY IOBLOKS @V200820 01320000 COPY DEVTYPES @V200820 01321000 COPY EQU @V200820 01322000 COPY SAVE @V200820 01324000 PSA @V200820 01325000 END DMKDAS @V200820 01326000