IOE TITLE 'DMKIOE (CP) VM/370 - RELEASE 6' 00001000 ******************************************************************* 00002000 * 00003000 * MODULE NAME - 00004000 * 00005000 * DMKIOE 00006000 * 00007000 * CONTENTS - 00008000 * 00009000 * DMKIOERR - FORMAT UNIT CHECKS AND CHANNEL ERRORS 00010000 * DMKIOESD - FORMAT HARDWARE ENVIRONMENTAL COUNTERS 00011000 * DMKIOERN - FORMAT 3270 REMOTE AND 3705 STATION ERRORS 00012000 * DMKIOEVR - HANDLE SVC 76 REQUEST FROM THE VIRTUAL MACHINE 00013000 * DMKIOECC - HANDLE CHANNEL CHECK RECORDS PASS FROM CCH HANDLER 00014000 * DMKIOEMC - HANDLE MACHINE CHECK RECORDS PASS FROM MCH HANDLER 00015000 * DMKIOEFM - CLEAR AND FORMAT THE RECORDING CYLINDERS 00016000 * DMKIOEFL - FORMAT PAGES ON THE RECORDING CYLINDERS 00017000 * DMKIOESR - HANDLE OBR RECORD REQUESTS SYNCHRONOUSLY 00018000 * DMKIOEST - TO CAUSE THE UPDATE OF STATISTICAL COUNTERS 00019000 * 00020000 * FUNCTION - 00021000 * 00022000 * THIS MODULE WILL BUILD AN ERRBLOK TO PASS TO THE PAGEABLE 00023000 * RECORDER. THE ERRBLOK WILL CONTAIN THE INFORMATION NEEDED 00024000 * BY THE PAGEABLE RECORDER TO BUILD AND FORMAT THE OBR/MDR 00025000 * RECORD. CONTROL WILL BE PASSED TO THE PAGEABLE RECORDER IF 00026000 * RECORDING IS NOT IN PROGRESS. IF A PREVIOUS REQUEST FOR ERROR 00027000 * RECORDING IS IN PROGRESS, THE CURRENT REQUEST IS QUED ON 00028000 * THE APPROPRIATE QUE, FOR RECORDING AT A LATER TIME. 00029000 * THE MODULE ALSO INITIALIZES AND FORMAT THE ERROR RECORDING 00030000 * CYLINDERS. 00031000 * 00032000 SPACE 2 00033000 DMKIOE CSECT @VA03358 00034000 SPACE 1 00035000 ENTRY DMKIOENQ,DMKIOEVQ,DMKIOERR,DMKIOEIR @VA03358 00036000 ENTRY DMKIOEMQ,DMKIOECQ,DMKIOERQ,DMKIOEIQ @VA03358 00037000 ENTRY DMKIOEES,DMKIOERP,DMKIOEMX @V5088AA 00038000 ENTRY DMKIOESQ,DMKIOENI,DMKIOETY @V5088AA 00039000 ENTRY DMKIOEHS,DMKIOEFR,DMKIOEEP,DMKIOECT @V5088AA 00040000 ENTRY DMKIOECE,DMKIOEIF @VA10241 00040100 EXTRN DMKIOFOB,DMKIOFVR,DMKIOFM1,DMKIOFIN @VA03358 00041000 EXTRN DMKIOFC1,DMKCCHRT,DMKCFMBK,DMKCFPRR @VA03358 00042000 EXTRN DMKDSPCH,DMKSTKCP,DMKIOGF1,DMKIOGF2 @VA03358 00043000 EXTRN DMKSYSTZ,DMKIOFST @VA03757 00044000 EXTRN DMKCVTAB @VA04301 00045000 SPACE 2 00046000 USING VMBLOK,R11 SETUP ADDRESSABILITY FOR VMBLOK @VA03358 00047000 USING IOBLOK,R10 SETUP ADDRESSABILITY FOR IOBLOK @VA03358 00048000 USING IOERBLOK,R4 SETUP ADDRESSABILITY FOR IOERBLOK@VA03358 00049000 USING RDEVBLOK,R8 SETUP ADDRESSABILITY FOR RDEVBLOK@VA03358 00050000 USING SAVEAREA,R13 SETUP ADDRESSABILITY FOR SAVEAREA@VA03358 00051000 USING PSA,R0 SETUP ADDRESSABILITY FOR LOWCORE @VA03358 00052000 EJECT 00053000 ********************************************************************** 00054000 * 00055000 * SUBROUTINE NAME - 00056000 * 00057000 * DMKIOERR 00058000 * 00059000 * FUNCTION - 00060000 * 00061000 * BUILD AN ERRBLOK AND GIVE CONTROL TO THE RECORDER FOR 00062000 * RECORDING OUTBOARD (OBR), INBOARD (CCH) AND MISCELLANEOUS 00063000 * DATA (MDR) RECORDS. RECORDING IS HANDLED ASYNCHRONOUS TO 00064000 * ERROR CONDITION. 00065000 * 00066000 * ATTRIBUTES - 00067000 * 00068000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00069000 * 00070000 * ENTRY CONDITIONS - 00071000 * 00072000 * GR 8 = ADDRESS OF RDEVBLOK 00073000 * GR 10 = ADDRESS OF IOBLOK 00074000 * GR 11 = ADDRESS OF VMBLOK 00075000 * GR 12 = ADDRESS OF DMKIOERR 00076000 * GR 13 = ADDRESS OF SAVE AREA 00077000 * 00078000 * EXIT CONDITIONS - 00079000 * 00080000 * IF NO RECORDING IS IN PROGRESS, ACTIVATE RECORDER AND 00081000 * RETURN TO CALLER. IF RECORDING IS IN PROGRESS, QUE REQUEST 00082000 * AND RETURN TO CALLER. 00083000 * 00084000 * REGISTER CONTENTS 00085000 * GR 6 = ADDRESS OF OBR/MDR/CCH RECORD 00086000 * GR 7 = SIZE OF RECORD IN DOUBLEWORDS 00087000 * 00088000 * CALL TO OTHER ROUTINES - 00089000 * 00090000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR RECORD 00091000 * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD/IOERBLOK 00092000 * DMKQCNWT - WRITE ERROR MESSAGE TO OPERATOR FOR CHANNEL ERROR 00093000 * DMKCCHRT - ISSUE ERROR MESSAGE FOR CHANNEL ERROR 00094000 * DMKCFPRR - RESET THE VIRTUAL MACHINE ON CHANNEL ERROR 00095000 * DMKCFMBK - PUT THE VIRTUAL MACHINE IN CONSOLE FUNCTION 00096000 * DMKDSPCH - EXIT TO DISPATCHER AFTER RETURNING FROM RECORDER 00097000 * DMKSTKCP - STACK CPEXBLOK TO ACTIVATE RECORDER 00098000 * DMKIOFOB - GO RECORD OBR/MDR RECORDS 00099000 * DMKIOFC1 - GO RECORD CCH RECORD 00100000 * 00101000 * EXTERNAL REFERENCES - 00102000 * 00103000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00104000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00105000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00106000 * DMKIOEES - OBR/MDR RECORD CYLINDER FULL FLAG 00107000 * DMKIOEMS - MCH/CCH RECORD CYLINDER FULL FLAG 00108000 * 00109000 * TABLES /WORK AREAS - 00110000 * 00111000 * DMKIOEIQ FIELD IS USED TO QUE OBR/MDR RECORD REQUESTS. 00112000 * DMKIOESQ FIELD IS USED TO QUE UPDATE REQUESTS. 00113000 * DMKIOECQ IS USED TO QUE CCH RECORDS. 00114000 * BITABL - THE MASK TABLE IS USE FOR INTENSIVE RECORDING. 00115000 * 00116000 * NOTES - 00117000 * 00118000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL IS WHEN 00119000 * A UNIT CHECK OR CHANNEL ERROR HAS OCCURRED. THE FOLLOWING 00120000 * MODULES GIVE CONTROL TO THIS SUBROUTINE: 00121000 * 00122000 * DMKIOS - ON A UNIT CHECK OR CHANNEL ERROR 00123000 * DMKCNS - WHEN AN I/O ERROR OCCURS AT A TERMINAL 00124000 * DMKGRF - WHEN AN I/O ERROR OCCURS AT A GRAPHIC DEVICE 00125000 * 00126000 * REGISTER USAGE - 00127000 * 00128000 * GR14,15 LINKAGE REGISTERS 00129000 * GR12 = MODULE BASE REGISTER 00130000 * GR11 = VMBLOK ADDRESSABILITY 00131000 * GR10 = IOBLOK ADDRESSABILITY 00132000 * GR 9 = WORK REGISTER 00133000 * GR 8 = RDEVBLOK ADDRESSABILITY 00134000 * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00135000 * GR 6 = ADDRESS OF THE RECORD 00136000 * GR 5 = SUBROUTINE BAL REGISTER 00137000 * GR 4 = IOERBLOK ADDRESSABILITY 00138000 * GR0-3= WORK REGISTERS 00139000 * 00140000 * OPERATION - 00141000 * 00142000 * I. BUILD AN ERRBLOK FOR THE ERROR CONDITION 00143000 * 00144000 * 1. IF THE IOERBLOK ADDRESS DOESN'T EXIST, RETURN 00145000 * TO CALLER. 00146000 * 00147000 * 2. IF A CHANNEL ERROR IS INDICATED IN THE CSW, DO 00148000 * THE FOLLOWING: 00149000 * 00150000 * . WRITE A CHANNEL ERROR MESSAGE TO THE OPERATOR 00151000 * (DMKCCH604I) AND RELEASE THE IOERBLOK. 00152000 * . IF THIS IS AN UNCORRECTABLE CHANNEL ERROR, WRITE 00153000 * A PERMANENT ERROR MSG. TO THE OPERATOR (DMKCCH606I) 00154000 * AND RESET THE VIRTUAL MACHINE BEFORE GOING TO THE 00155000 * RECORDER. 00156000 * . PUT THE DATE AND TIME IN THE CCH RECORD. 00157000 * . ANALYSE THE MCH/CCH CYLINDER AND THE RECORDING 00158000 * IN PROGRESS FLAG. 00159000 * 00160000 * * IF CYLINDER IS FULL OR NOT INITIALIZED, 00161000 * RELEASE THE CCH RECORD AND RETURN TO 00162000 * CALLER WITH A NON-ZERO RETURN CODE. 00163000 * * IF RECORDING IS IN PROGRESS, QUE CCH 00164000 * REQUEST AND RETURN TO CALLER. 00165000 * * IF RECORDING IS NOT IN PROGRESS, CALL 00166000 * THE RECORDER (DMKIOFC1) AND RECORD 00167000 * CCH RECORD. 00168000 * 00169000 * 3. DETERMINE IF INTENSIVE RECORDING IS ACTIVATED FOR A 00170000 * CLASS 'F' USER. 00171000 * 00172000 * 4. IF THIS IS NOT A CP OR DIAGNOSE GENERATED REQUEST, 00173000 * RETURN TO CALLER. 00174000 * 00175000 * 5. DETERMINE IF ENVIRONMENTAL DATA IS PRESENT 00176000 * IN THE SENSE DATA FOR A DASD DEVICE. IF PRESENT, 00177000 * BUILD AND FORMAT A MISCELLANEOUS DATA RECORD (MDR) 00178000 * FOR THE DASD'S HARDWARE COUNTERS BEFORE GOING TO 00179000 * STEP 8. 00180000 * 00181000 * 6. IF THIS IS NOT A PERMANENT I/O ERROR, RELEASE THE 00182000 * IOERBLOK AND RETURN TO THE CALLER. 00183000 * 00184000 * 7. BUILD AND FORMAT OUTBOARD RECORD (OBR) FOR UNIT 00185000 * CHECK CONDITION. 00186000 * 00187000 * 8. RELEASE THE IOERBLOK AND SETUP THE INTERFACE TO 00188000 * THE RECORDER. 00189000 * 00190000 * 9. ANALYSE THE ERROR RECORDING CYLINDERS AND 00191000 * THE RECORDING IN PROGRESS FLAG. 00192000 * 00193000 * . IF THE CYLINDERS ARE FULL OR NOT INITIALIZED, 00194000 * RELEASE THE OBR/MDR RECORD AND RETURN TO CALLER. 00195000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 00196000 * RETURN TO CALLER. 00197000 * . IF RECORDING IS NOT IN PROGRESS, QUE CPEXBLOK TO 00198000 * ACTIVATE RECORDER AND RETURN TO CALLER. 00199000 * 00200000 * ERROR MESSAGES - NONE 00201000 * 00202000 ********************************************************************** 00203000 COPY OPTIONS @V407510 00204000 EJECT 00205000 DMKIOERR EQU * HANDLE ASYNCHRONOUS RECORDING @VA03358 00206000 USING *,R12 SETUP ADDRESSABILITY @VA03358 00207000 STM R0,R11,SAVEREGS SAVE CALLER'S REGISTERS @VA03358 00208000 ICM R4,15,IOBIOER GET IOERBLOK POINTER FROM IOBLOK @VA03358 00209000 BZ COMEXIT IF ZERO, RETURN TO CALLER @VA03358 00210000 TM IOERCSW+5,CDC+CCC+IFCC IS THIS A CHANNEL ERROR @VA03358 00211000 BNZ CCHIOENT YES, GO TO CHANNEL ERROR SECTION @VA03358 00212000 BAL R5,INTREC CHECK INTENSIVE RECORDING FLAG @VA03358 00213000 TM IOERFLG2,IOERCEMD HAS ERROR BEEN RECORDED @VA03358 00214000 BO NREXIT YES, GO FRET IOERBLOK AND EXIT @VA03358 00215000 TM IOERDATA+1,X'04' FILE PROTECT ERROR? @VA14795 00215100 BO NREXIT DO NOT RECORD, GO FRET IOERBLOK @VA14795 00215400 * AND EXIT 00215700 TM IOBFLAG,IOBCP CP I/O ? @VA03186 00216000 BNZ OBRDAS OK..CONTINUE... @VA03186 00217000 TM IOBFLAG,IOBHVC DIAGNOSED I/O ? @VA03186 00218000 BZ COMEXIT NO..SHOULDN'T BE HERE.. @VA03186 00219000 TM IOERCSW+4,UC UNIT CHECK ? @VA03186 00220000 BZ COMEXIT NO..SKIP ERROR RECORDING @VA03186 00221000 OBRDAS EQU * @VA03186 00222000 BAL R5,DASDSEN CHECK DASD SENSE INFORMATION @VA03358 00223000 TM IOBSTAT,IOBFATAL IS THIS A PERMANENT I/O ERROR @VA03358 00224000 BO OBRRECD YES, NEED TO BUILD ERRBLOK @VA03757 00225000 BAL R5,CKTEMP GO CHECK DASD TEMPORARY ERRORS @VA03757 00226000 OBRRECD EQU * BUILD ERRBLOK FOR OBR PROCESSING @VA03757 00227000 BAL R5,ERRBLD BUILD ERRBLOK RECORD @VA03757 00228000 OBRSECT EQU * ANALYZE ERROR RECORDING CYLS @V5088AA 00229000 LR R6,R1 GET ADDRESS OF OBR RECORD @VA03358 00230000 LR R7,R0 LENGTH OF RECORD IN DOUBLEWORDS @VA03358 00231000 BAL R5,FRETIOER RELEASE IOERBLOK FOR CP REQUEST @VA03358 00232000 OBRANAL EQU * SET UP TO RECORD OBR/MDR RECORD @VA03358 00233000 BAL R5,ANALRECD ANALYZE ERROR RECORDING CYLS @V5088AA 00234000 B FRETRECD RELEASE THE OBR RECORD SPACE @VA03358 00235000 B QUEOBR QUE OBR OFF RECORDING QUE @VA03358 00236000 * NO RECORDING IS IN PROGESS 00237000 LA R4,IOFR1 SET UP RETURN ADDR FOR CPEXBLOK @VA03358 00238000 BAL R5,STKCPEX STACK CPEXBLOK OFF CPEXBLOK QUE @VA03358 00239000 SPACE 1 00240000 IOFR1 EQU * RETURN HERE WHEN CPEX IS UNSTACK @VA03358 00241000 CALL DMKIOFOB GO RECORD OBR/MDR RECORDS @VA03358 00242000 GOTO DMKDSPCH GO TO THE DISPATCHER @VA03358 00243000 SPACE 1 00244000 QUEOBR EQU * QUE OBR RECORD OFF RECORDING QUE @VA03358 00245000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 00246000 LA R3,DMKIOEIQ GET POINTER TO OBR/MDR QUE @VA03358 00247000 LA R5,COMEXIT RETURN TO CALLER @VA03358 00248000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUE @VA03358 00249000 SPACE 4 00250000 * SUBROUTINE TO DETERMINE WHETHER OR NOT ENVIRONMENTAL DATA 00251000 * IS INDICATED IN THE SENSE BYTE FOR DASD ERROR. 00252000 SPACE 1 00253000 DASDSEN EQU * ANALYSE SENSE INFORM. FOR DASD @VA03358 00254000 CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE CLASS @VA03358 00255000 BNER R5 NO, RETURN TO IN LINE CODE @VA03358 00256000 TM RDEVTYPE,TYP3330+TYP3340+TYP3350+TYP3380 HRC011DK 00257590 * DASD TYP 3330, 3340, 3350 OR 3380 ? HRC011DK 00258180 BZ DASD2305 NO, CHECK FOR 2305 DEVICE @VA03358 00259000 TM IOERDATA+2,X'10' IS ENVIRONMENTAL DATA PRESENT @VA03358 00260000 BNO NODATA RETURN TO INLINE CODE @VA10527 00260100 TM IOERDATA+7,X'60' IS THIS A FORMAT 6 RECORD? @VA10527 00260200 BO MDRRECD YES, GO BUILD MDR RECORD @VA03358 00261000 NODATA BR R5 RETURN TO INLINE CODE @VA10527 00262000 DASD2305 EQU * ANALYSE SENSE INFORM. FOR 2305 @VA03358 00263000 CLI RDEVTYPE,TYP2305 IS THIS A 2305 DEVICE TYPE @VA03358 00264000 BNER R5 NO, RETURN TO IN LINE CODE @VA03358 00265000 *********************************************************************** 00266100 * DMKDAS WILL ALLOW US TO COME HERE WITH TWO IOERBLOKS.. THE FIRST ONE 00266150 * HAS THE BUFFER OVERFLOW SENSE DATA IN IT AND THE SECOND ONE WILL HAVE 00266200 * THE UNLOADED BUFFER DATA. SO WE WANT TO SKIP THE FIRST AND FOOL WITH 00266250 * THE SECOND ONE. DMKDSB AT SHUTDOWN ALSO DOES UNLOADS BUT IT COMES 00266300 * HERE WITH ONLY THE IOERBLOK WITH THE UNLOADED BUFFER. ONLY WAY T'KEEP 00266350 * THEM STRAIGHT IS TO CHECK THE IOERBLOK WE GOT NOW AND SEE IF SENSE 00266400 * DATA FOR THE OVERFLOW UNIT CHECK EXISTS IF SO GET THE CHAINED IOERBLK 00266450 * THE BUFFERED DATA WILL START AT IOERDATA AND THE FIRST BYTE OF EACH 00266500 * DOUBLE WORD OF INFO IS THE CONTROL BYTE AND WONT BE ZERO IF WE CAME 00266550 * FROM THE UNIT CHECK THOUGH DMKDAS, BUT IF WE COME FROM DMKDSB 00266600 * NEAR ALL OF THE BUFFER COULD BE ZERO (I.E. BUFFER EMPTY)...BUT THEN 00266650 * IOERDATA + 2 WONT HAVE THE 80 IN IT EITHER SO WE SHOULD BE ALL SET 00266700 *********************************************************************** 00266750 CLC IOERDATA-IOERBLOK(3,R4),=X'000080' IS THIS THE @VA09736 00266800 BNER R5 IOERBLOK FOR THE BUFF FULL? NO CONTINUE... @VA09736 00266850 ICM R4,15,IOERPNT-IOERBLOK(R4) IF SO GET THE NEXT @VA09736 00266900 BNZ MDRRECD IF THERE ISNT ONE... WE GOT JUNK-A-HO @VA09736 00266950 L R4,IOBIOER IF THERE IS ONE ITS THE ONE WE @VA09736 00267000 BR R5 WANT TO LOG OUT.. IT HAS THE BUFFER @VA09736 00267050 MDRRECD EQU * FORMAT MISCELLANEOUS DATA RECORD @VA03358 00268000 BAL R5,MDRBLD GO BUILD ERRBLOK RECORD @VA03757 00269000 BAL R5,OBRSECT GO TO OBR RECORD SECTION @VA03358 00270000 SPACE 2 00271000 * SUBROUTINE TO DETERMINE IF A TEMPORARY OBR RECORD IS TO 00272000 * BE CREATED FOR SELECTED TEMPORARY DASD ERRORS ..... 00273000 SPACE 00274000 CKTEMP EQU * TEST SPECIFIED TEMPORARY ERRORS @VA03757 00275000 CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE ??? @VA03757 00276000 BNE NREXIT NO, GO FRET IOERBLOK AND EXIT. @VA03757 00277000 TM RDEVFTR,FTREXTSN EXTENED SENSE TYPE DASD ?? @VA03757 00278000 BZ NREXIT NO, GO FRET IOERBLOK AND EXIT @VA03757 00279000 TM IOERDATA,X'3D' TEMPORARY ERROR TO BE LOGGED ?? @VA03757 00280000 BZ NREXIT NO, GO FRET IOERBLOK AND EXIT @VA03757 00281000 TM IOERDATA,X'08' LOOK CLOSER, IS IT A DATA CHECK ?@VA03757 00282000 BZR R5 NO, GO SET UP FOR TEMPORARY ERROR@VA03757 00283000 TM IOERDATA+2,X'40' IS ERROR CORRECTABLE? @VA13854 00283025 BZ NREXIT NOT RIGHT TYPE OF ERROR-EXIT @VA13854 00283050 CLI RDEVTYPE,TYP2305 IS THIS A 2305 @VA12432 00283100 BER R5 YES-RECORD TEMPORARY ERRORS @VA12432 00283200 CLI RDEVTYPE,TYP3340 IS THIS A 3340 ?? @VA03757 00284000 BER R5 YES, SET UP FOR TEMP ERROR RECORD@VA03757 00285000 CLI RDEVTYPE,TYP3350 IS THIS A 3350 @VA11958 00287100 BER R5 YES-RECORD TEMPORARY ERRORS @VA11958 00287200 CLI RDEVTYPE,TYP3380 IS THIS A 3380 HRC011DK 00288100 BER R5 YES-RECORD TEMPORARY ERRORS HRC011DK 00289000 B NREXIT DON'T RECORD TEMP DATA CHECK @VA13854 00290100 EJECT 00291000 ********************************************************************** 00292000 * 00293000 * SUBROUTINE NAME - 00294000 * 00295000 * DMKIOESD 00296000 * 00297000 * FUNCTION - 00298000 * 00299000 * BUILD, FORMAT AND GIVE CONTROL TO THE RECORDER FOR RECORDING 00300000 * MISCELLANEOUS DATA RECORD (MDR) FOR HARDWARE COUNTERS. 00301000 * RECORDING IS HANDLE SYNCHRONOUS FOR HARDWARE STATISTICAL 00302000 * COUNTERS. 00303000 * 00304000 * ATTRIBUTES - 00305000 * 00306000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00307000 * 00308000 * ENTRY CONDITIONS - 00309000 * 00310000 * GR 8 = ADDRESS OF RDEVBLOK 00311000 * GR 10 = ADDRESS OF IOBLOK 00312000 * GR 11 = ADDRESS OF VMBLOK 00313000 * GR 12 = ADDRESS OF DMKIOESD 00314000 * GR 13 = ADDRESS OF SAVE AREA 00315000 * 00316000 * EXIT CONDITIONS - 00317000 * 00318000 * IF NO RECORDING IS IN PROGRESS, GIVE CONTROL TO THE RECORDER 00319000 * AND RETURN TO THE CALLER UPON COMPLETION. IF RECORDING IS IN 00320000 * PROGRESS, QUE RECORDING REQUEST AND EXIT TO DISPATCHER UNTIL 00321000 * RECORD IS RECORDED. 00322000 * 00323000 * REGISTER CONTENTS 00324000 * GR 6 = ADDRESS OF MDR RECORD 00325000 * GR 7 = SIZE OF RECORD IN DOUBLEWORDS 00326000 * 00327000 * CALL TO OTHER ROUTINES - 00328000 * 00329000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR RECORD 00330000 * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD/IOERBLOK 00331000 * DMKDSPCH - EXIT TO DISPATCHER IF RECORDING IS ACTIVE 00332000 * DMKSTKCP - STACK CPEXBLOK FOR RECORDER 00333000 * DMKIOFOB - GO RECORD MDR RECORDS 00334000 * 00335000 * EXTERNAL REFERENCES - 00336000 * 00337000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00338000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00339000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00340000 * DMKIOEES - OBR/MDR RECORD CYLINDER FULL FLAG 00341000 * 00342000 * TABLES /WORK AREAS - 00343000 * 00344000 * DMKIOENQ FIELD IS USED TO QUE MDR RECORDS. 00345000 * 00346000 * NOTES - 00347000 * 00348000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL IS WHEN THE 00349000 * SHUTDOWN COMMAND IS ISSUED OR WHEN A BUFFER LOGGED DEVICE 00350000 * IS BEING MOUNTED OR DEMOUNTED OR WHEN A BUFFER LOGGED 00351000 * DEVICE GETS THE ERROR LOG FULL CONDITION. 00352000 * THE FOLLOWING MODULES GIVE CONTROL TO THIS ROUTINE: 00353000 * 00354000 * DMKDAS - WHEN THE BUFFER LOG IS UNLOADED FROM THE DEVICE 00355000 * DMKRSE - WHEN THE BUFFER LOG IS UNLOADED FROM A 3800 00356000 * 00357000 * REGISTER USAGE - 00358000 * 00359000 * GR14,15 LINKAGE REGISTERS 00360000 * GR12 = MODULE BASE REGISTER 00361000 * GR11 = VMBLOK ADDRESSABILITY 00362000 * GR10 = IOBLOK ADDRESSABILITY 00363000 * GR 9 = WORK REGISTER 00364000 * GR 8 = RDEVBLOK ADDRESSABILITY 00365000 * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00366000 * GR 6 = ADDRESS OF THE RECORD 00367000 * GR 5 = SUBROUTINE BAL REGISTER 00368000 * GR 4 = IOERBLOK ADDRESSABILITY 00369000 * GR0-3= WORK REGISTERS 00370000 * 00371000 * OPERATION - 00372000 * 00373000 * I. BUILD AND FORMAT A MISCELLANEOUS DATA RECORD FOR COUNTERS 00374000 * 00375000 * 1. IF THE IOERBLOK ADDRESS DOESN'T EXIST, RETURN 00376000 * TO CALLER. 00377000 * 00378000 * 2. BUILD AND FORMAT A MISCELLANEOUS DATA RECORD (MDR) 00379000 * FOR THE DASD'S HARDWARE COUNTERS. 00380000 * 00381000 * 3. RELEASE THE IOERBLOK AND SETUP INTERFACE TO 00382000 * THE RECORDER. 00383000 * 00384000 * 4. ANALYSE THE OBR/MDR RECORDING CYLINDER AND 00385000 * THE RECORDING IN PROGRESS FLAG. 00386000 * 00387000 * . IF THE CYLINDER IS FULL OR NOT INITIALIZED, RELEASE 00388000 * THE OBR/MDR RECORD AND RETURN TO CALLER. 00389000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 00390000 * EXIT TO THE DISPATCHER UNTIL THE RECORDER STACKS 00391000 * THE CPEXBLOK FOR THIS REQUEST. 00392000 * . IF RECORDING IS NOT IN PROGRESS, GIVE CONTROL 00393000 * TO THE RECORDER TO RECORD THE MDR RECORD. 00394000 * 00395000 ********************************************************************** 00396000 EJECT 00397000 DMKIOESD RELOC HANDLE SYNCHRONOUS RECORDING @VA03358 00398000 ICM R4,15,IOBIOER GET POINTER TO IOERBLOK @VA03358 00399000 BNP COMEXIT IF ZERO, RETURN TO CALLER @VA03358 00400000 BAL R5,MDRBLD GO BUILD ERRBLOK RECORD @VA03757 00401000 LR R6,R1 GET ADDRESS OF MDR RECORD @VA03358 00402000 LR R7,R0 LENGTH OF RECORD IN DOUBLEWORDS @VA03358 00403000 BAL R5,FRETIOER RELEASE IOERBLOK FOR CP GENERATED@VA03358 00404000 BAL R5,ANALRECD ANALYZE THE ERROR RECORDING CYLS @V5088AA 00405000 B FRETRECD RELEASE THE MDR RECORD SPACE @VA03358 00406000 B QUEMDR QUE MDR RECORD OFF RECORDING QUE @VA03358 00407000 * NO RECORDING IS IN PROGRESS 00408000 IOFE1 EQU * SET UP TO CALL RECORDER FOR MDR @VA03358 00409000 CALL DMKIOFOB GO RECORD MDR RECORDS @VA03358 00410000 BAL R5,COMEXIT RETURN TO CALLER @VA03358 00411000 SPACE 1 00412000 QUEMDR EQU * QUE MDR RECORD OFF RECORDING QUE @VA03358 00413000 LA R4,IOFE1 SET UP RETURN ADDR FOR CPEXBLOK @VA03358 00414000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 00415000 LA R3,DMKIOENQ GET POINTER TO MDR QUE @VA03358 00416000 LA R5,DISPTH RETURN TO THE DISPATCHER @VA03358 00417000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUE @VA03358 00418000 EJECT 00419000 ********************************************************************** 00420000 * 00421000 * SUBROUTINE NAME - 00422000 * 00423000 * DMKIOESR 00424000 * 00425000 * FUNCTION - 00426000 * 00427000 * BUILD ERRBLOK AND GIVE CONTROL TO THE RECORDER TO BUILD AND 00428000 * FORMAT OUTBOARD RECORDS. THE OBR RECORD WILL BE WRITTEN 00429000 * SYNCHRONOUSLY... 00430000 * 00431000 * ATTRIBUTES _ 00432000 * 00433000 * SERIALLY REUSABLE, RESIDENT, ENTERED VIA SVC 00434000 * 00435000 * ENTRY CONDITIONS _ 00436000 * 00437000 * GR 8 = ADDRESS OF RDEVBLOK 00438000 * 00439000 * EXIT CONDITIONS - 00440000 * 00441000 * IF NO RECORDING IS IN PROGRESS, GIVE CONTROL TO THE RECORDER 00442000 * AND RETURN TO THE CALLER UPON COMPLETION. IF RECORDING IS IN 00443000 * PROGRESS, QUE RECORDING REQUEST AND EXIT TO DISPATCHER UNTIL 00444000 * RECORD IS RECORDED. IF THE ERROR CYLINDER IS FULL OR NOT 00445000 * INITIALIZED, RELEASE THE RECORD AND RETURN TO THE CALLER ... 00446000 * 00447000 * CALLS TO OTHER ROUTINES - 00448000 * 00449000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR ERRBLOK 00450000 * DMKFRET - TO RETURN ALLOCATED STORAGE FOR THE 00451000 * ERRBLOK/SDRBLOK 00452000 * DMKDSPCH - EXIT TO DISPATCHER IF RECORDING IS ACTIVE 00453000 * DMKSTKCP - STACK CPEXBLOK FOR RECORDER 00454000 * DMKIOFOB - GO RECORD OBR RECORD 00455000 * 00456000 * EXTERNAL REFERENCES - 00457000 * 00458000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00459000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00460000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00461000 * DMKIOEES - OBR/MDR RECORD CYLINDER FULL FLAG 00462000 * 00463000 * TABLES/WORK AREAS - 00464000 * 00465000 * DMKIOENQ FIELD IS USED TO QUE OBR RECORDS 00466000 * 00467000 * NOTES - 00468000 * 00469000 * THIS SUBROUTINE GETS CONTROL WHEN THE SHUTDOWN, VARY OFFLINE, 00470000 * NETWORK SHUTDOWN OR NETWORK VARY OFFLINE COMMANDS ARE ISSUED 00471000 * AND IF SDR COUNTERS EXIST FOR THE DEVICE OR DEVICES ADDRESSED. 00472000 * THE FOLLOWING MODULES GIVE CONTROL TO THIS SUBROUTINE... 00473000 * 00474000 * DMKCPV 00475000 * DMKNET 00476000 * DMKNES 00477000 * 00478000 * REGISTER USAGE - 00479000 * 00480000 * GR 0-3 WORK REGS 00481000 * GR 5 SUBROUTINE BAL REG 00482000 * GR 6 ADDRESS OF RECORD 00483000 * GR 7 SIZE OF RECORD 00484000 * GR 8 RDEVBLOK 00485000 * GR 9 SDRBLOK 00486000 * 00487000 * OPERATION - 00488000 * 00489000 * BUILD AN ERRBLOK, WHICH WILL BE USED TO BUILD AND FORMAT AN 00490000 * OUTBOARD RECORD FOR STATISTICAL COUNTERS... 00491000 * 00492000 * 1. IF THE SDRBLOK DOESNT EXIST,RETURN TO CALLER 00493000 * 00494000 * 2. IF THE SDR COUNTERS ARE ALL ZERO, FRET THE SDRBLOK 00495000 * AND RETURN TO THE CALLER.. 00496000 * 00497000 * 3. BUILD AN ERRBLOK 00498000 * 00499000 * 00500000 * 4. ANALYZE THE ERROR RECORDING CYLINDER AND THE 00501000 * RECORDING IN PROGRESS FLAG. 00502000 * 00503000 * . IF THE CYLINDER IS FULL OR NOT INITIALIZED, RELEASE 00504000 * THE ERRBLOK AND RETURN TO CALLER .. 00505000 * . IF RECORDING IS IN PROGRESS, QUE THE REQUEST AND 00506000 * EXIT TO THE DISPATCHER UNTIL THE RECORDER STACKS 00507000 * THE CPEXBLOK FOR THIS REQUEST.. 00508000 * . IF RECORDING IS NOT IN PROGRESS, GIVE CONTROL TO 00509000 * THE RECORDER TO FORMAT AND WRITE THE OBR RECORD.. 00510000 * 00511000 * 5. RELEASE THE STORAGE USED BY THE SDRBLOK 00512000 * 00513000 * 00514000 *********************************************************************** 00515000 EJECT 00516000 DMKIOESR RELOC HANDLE @VA03757 00517000 USING SDRBLOK,R9 ADDRESSABILITY FOR SDRBLOK @VA03757 00518000 ICM R9,15,RDEVCTRS GET SDRBLOK ADDRESS @VA03757 00519000 BZ COMEXIT NO SDRBLOK, GO BACK TO CALLER @VA03757 00520000 TM RDEVTYPE,TYP3410+TYP3420 3400 TAPE SERIES? @VA14701 00520100 BNZ *+8 YES, FORMAT LONG OBR @VA14701 00520200 OI SDRFLAGS,SDRSHRT TURN ON SHORT OBR FLAG @VA08550 00521000 SLR R1,R1 CLEAR WORK REG @VA08550 00521100 IC R1,SDRLNGTH GET LENGTH OF SDR COUNTERS @VA03757 00529000 BCTR R1,R0 SUBTRACT ONE FOR EXECUTE INST. @VA03757 00530000 EX R1,CHKCOUNT GO CHECK THE COUNTERS @VA03757 00531000 BNE GETOBR BR IF NOT ZERO TO BUILD RECORD @VA03757 00532000 BAL R5,FRETSDR COUNTERS ARE ZERO,FORGET @VA03757 00533000 B COMEXIT RECORDING, FRET SDRBLOK AND EXIT @VA03757 00534000 SPACE 1 00535000 CHKCOUNT CLC SDRCTRS(0),ZEROES @VA03757 00536000 SPACE 2 00537000 GETOBR EQU * @VA03757 00538000 TM SDRFLAGS,SDRSHRT IS IT A SHORT OBR? @VA14701 00538050 BO BYBUILD YES, BYPASS BUILDING DUMMY @VA14701 00538100 * IOBLOK AND IOERBLOK 00538150 LA R0,IOERSIZE DEFINE STORAGE FOR IOERBLOK @VA14701 00538200 CALL DMKFREE AND GET IT @VA14701 00538250 LR R4,R1 USE GPR4 FOR ADDRESSABILITY @VA14701 00538300 XC IOERBLOK(IOERSIZE*8),IOERBLOK CLEAR IOERBLOK @VA14701 00538350 LA R0,IOBSIZE DEFINE ITS STORAGE @VA14701 00538400 CALL DMKFREE AND GET IT @VA14701 00538450 LR R10,R1 USE GPR10 FOR ADDRESSABILITY @VA14701 00538500 XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK @VA14701 00538550 MVC IOBRADD,SDRCUA+1 MOVE IN ADDRESS @VA14701 00538600 CLI RDEVTYPE,TYP3420 3420 TAPE? @VA14701 00538650 BNE BYBUILD NO,BRANCH @VA14701 00538700 MVI IOERLEN+1,24 INDICATE IT IS A 3420 TAPE @VA14701 00538750 BYBUILD EQU * @VA14701 00538800 BAL R5,ERRBLD GO BUILD ERRBLOK RECORD @VA03757 00539000 LR R6,R1 SAVE ADDRESS OF RECORD @VA03757 00540000 LR R7,R0 SAVE LENGTH, IN DOUBLEWORDS @VA03757 00541000 TM SDRFLAGS,SDRSHRT SHORT OBR? @VA14701 00541100 BO NOFRET YES, NO DUMMY BLOKS TO FRET @VA14701 00541200 SR R3,R3 CLEAR R3 @VA14701 00541300 BAL R5,NOCHAN FRET DUMMY IOBLOK @VA14701 00541400 LR R1,R10 GET ADDRESS OF IOBLOK @VA14701 00541500 LA R0,IOBSIZE GET SIZE OF IOBLOK @VA14701 00541600 CALL DMKFRET RETURN DUMMY IOBLOK STORAGE @VA14701 00541700 NOFRET EQU * @VA14701 00541800 BAL R5,ANALRECD ANALYZE THE ERROR RECORDING CYLS @V5088AA 00542000 B FRETRECD RELEASE THE OBR RECORD SPACE @VA03757 00543000 B QUEOBR1 QUE OBR RECORD OFF RECORDING QUE @VA03757 00544000 SPACE 1 00545000 **** NO RECORDING IS IN PROGRESS **** 00546000 SPACE 1 00547000 IOFE2 EQU * @VA03757 00548000 CALL DMKIOFOB GO BUILD AND RECORD OBR RECORD @VA03757 00549000 BAL R5,FRETSDR FRET SDRBLOK @VA03757 00550000 B COMEXIT RETURN TO CALLER @VA03757 00551000 SPACE 1 00552000 **** QUE OBR RECORD OFF RECORDING QUEUE **** 00553000 SPACE 1 00554000 QUEOBR1 EQU * @VA03757 00555000 LA R4,IOFE2 SET UP RETURN ADDR FOR CPEXBLOK @VA03757 00556000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03757 00557000 LA R3,DMKIOENQ GET POINTER TO QUEUE @VA03757 00558000 LA R5,DISPTH RETURN TO THE DISPATCHER @VA03757 00559000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUEUE@VA03757 00560000 EJECT 00561000 ********************************************************************** 00562000 * 00563000 * SUBROUTINE NAME - 00564000 * 00565000 * DMKIOERN 00566000 * 00567000 * FUNCTION - 00568000 * 00569000 * BUILD, FORMAT AND GIVE CONTROL TO THE RECORDER FOR RECORDING 00570000 * MISCELLANEOUS DATA RECORDS (MDR) FOR 3270 REMOTE AND 3705 00571000 * STATIONS. RECORDING IS HANDLED ASYNCHRONOUS TO THE ERROR 00572000 * CONDITION. 00573000 * 00574000 * ATTRIBUTES - 00575000 * 00576000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00577000 * 00578000 * ENTRY CONDITIONS - 00579000 * 00580000 * GR 1 = ADDRESS OF CONTASK 00581000 * GR 8 = ADDRESS OF RDEVBLOK 00582000 * GR 11 = ADDRESS OF VMBLOK 00583000 * GR 12 = ADDRESS OF DMKIOERN 00584000 * GR 13 = ADDRESS OF SAVE AREA 00585000 * 00586000 * EXIT CONDITIONS - 00587000 * 00588000 * IF NO RECORDING IS IN PROGRESS, ACTIVATE RECORDER AND 00589000 * RETURN TO CALLER. IF RECORDING IS IN PROGRESS, QUE REQUEST 00590000 * AND RETURN TO CALLER. 00591000 * 00592000 * REGISTER CONTENTS 00593000 * GR 6 = ADDRESS OF MDR RECORD 00594000 * GR 7 = SIZE OF RECORD IN DOUBLEWORDS 00595000 * 00596000 * CALL TO OTHER ROUTINES - 00597000 * 00598000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR RECORD 00599000 * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD/CONTASK 00600000 * DMKDSPCH - EXIT TO DISPATCHER AFTER RETURNING FROM RECORDER 00601000 * DMKSTKCP - STACK CPEXBLOK TO ACTIVATE RECORDER 00602000 * DMKIOFOB - GO RECORD OBR/MDR RECORDS 00603000 * 00604000 * EXTERNAL REFERENCES - 00605000 * 00606000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00607000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00608000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00609000 * DMKIOEES - OBR/MDR RECORD CYLINDER FULL FLAG 00610000 * 00611000 * TABLES /WORK AREAS - 00612000 * 00613000 * DMKIOEIQ FIELD IS USED TO QUE MDR RECORDS. 00614000 * 00615000 * NOTES - 00616000 * 00617000 * THIS SUBROUTINE IS CALL ONLY FOR 3270 REMOTE AND 3705 00618000 * STATION ERRORS. THE FOLLOWING MODULES GIVE CONTROL TO THIS 00619000 * SUBROUTINE: 00620000 * 00621000 * DMKRGF - WHEN A 3270 REMOTE STATION ERROR OCCURS 00622000 * DMKRNH - WHEN A 3705 STATION ERROR OCCURS 00623000 * 00624000 * REGISTER USAGE - 00625000 * 00626000 * GR14,15 LINKAGE REGISTERS 00627000 * GR12 = MODULE BASE REGISTER 00628000 * GR11 = VMBLOK ADDRESSABILITY 00629000 * GR10 = IOBLOK ADDRESSABILITY 00630000 * GR 9 = CONTASK ADDRESSABILITY 00631000 * GR 8 = RDEVBLOK ADDRESSABILITY 00632000 * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00633000 * GR 6 = ADDRESS OF THE RECORD 00634000 * GR 5 = SUBROUTINE BAL REGISTER 00635000 * GR0-4= WORK REGISTERS 00636000 * 00637000 * OPERATION - 00638000 * 00639000 * I. BUILDING AND FORMATTING OF ERROR CONDITION 00640000 * 00641000 * 1. BUILD AND FORMAT A MISCELLANEOUS DATA RECORD (MDR) 00642000 * FOR THE 3270 REMOTE AND 3705 STATION ERROR. 00643000 * 00644000 * 2. RELEASE THE CONTASK AND SETUP THE INTERFACE TO 00645000 * THE RECORDER. 00646000 * 00647000 * 3. ANALYSE THE OBR/MDR RECORDING CYLINDER AND 00648000 * THE RECORDING IN PROGRESS FLAG. 00649000 * 00650000 * . IF THE CYLINDER IS FULL OR NOT INITIALIZED, RELEASE 00651000 * THE OBR/MDR RECORD AND RETURN TO CALLER. 00652000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 00653000 * RETURN TO CALLER. 00654000 * . IF RECORDING IS NOT IN PROGRESS, QUE CPEXBLOK TO 00655000 * ACTIVATE RECORDER AND RETURN TO CALLER. 00656000 * 00657000 ********************************************************************** 00658000 EJECT 00659000 ENTRY DMKIOERN @VA03358 00660000 USING DMKIOERN,R12 SETUP ADDRESSABILITY @VA03358 00661000 DMKIOERN DS 0H HANDLE ASYNCHRONOUS RECORDING @VA03358 00662000 ENTER @VA03358 00663000 L R12,=A(DMKIOE) SETUP ADDRESSABILITY FOR MODULE @VA03358 00664000 USING DMKIOE,R12 ... @VA03358 00665000 BAL R5,MDRBLD GO BUILD ERRBLOK RECORD @VA03757 00666000 LR R7,R0 LENGTH OF RECORD IN DOUBLEWORDS @VA03358 00667000 LR R6,R1 GET ADDRESS OF MDR RECORD @VA03358 00668000 BAL R5,FRETCON RELEASE THE CONTASK @VA03358 00669000 BAL R5,OBRANAL GO ANALYZE ERROR RECORDING CYLS @V5088AA 00670000 EJECT 00671000 ********************************************************************** 00672000 * 00673000 * SUBROUTINE NAME - 00674000 * 00675000 * DMKIOEVR 00676000 * 00677000 * FUNCTION - 00678000 * 00679000 * GIVE CONTROL TO THE RECORDER FOR RECORDING SVC 76 REQUESTS. 00680000 * RECORDING IS HANDLED ASYNCHRONOUS TO THE REQUEST. 00681000 * 00682000 * ATTRIBUTES - 00683000 * 00684000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00685000 * 00686000 * ENTRY CONDITIONS - 00687000 * 00688000 * GR 0 = SIZE OF SVC 76 RECORD IN DOUBLEWORDS 00689000 * GR 1 = ADDRESS OF SVC 76 RECORD 00690000 * GR 11 = ADDRESS OF VMBLOK 00691000 * GR 12 = ADDRESS OF DMKIOEVR 00692000 * GR 13 = ADDRESS OF SAVE AREA 00693000 * 00694000 * EXIT CONDITIONS - 00695000 * 00696000 * IF NO RECORDING IS IN PROGRESS, ACTIVATE RECORDER AND 00697000 * RETURN TO CALLER. IF RECORDING IS IN PROGRESS, QUE REQUEST 00698000 * AND RETURN TO CALLER. 00699000 * 00700000 * REGISTER CONTENTS 00701000 * GR 6 = ADDRESS OF SVC 76 RECORD 00702000 * GR 7 = SIZE OF RECORD IN DOUBLEWORDS 00703000 * 00704000 * CALL TO OTHER ROUTINES - 00705000 * 00706000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CPEXBLOK 00707000 * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD 00708000 * DMKDSPCH - EXIT TO DISPATCHER AFTER RETURNING FROM RECORDER 00709000 * DMKSTKCP - STACK CPEXBLOK TO ACTIVATE RECORDER 00710000 * DMKIOFVR - GO RECORD SVC 76 RECORDS 00711000 * 00712000 * EXTERNAL REFERENCES - 00713000 * 00714000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00715000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00716000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00717000 * DMKIOEES - OBR/MDR RECORD CYLINDER FULL FLAG 00718000 * 00719000 * TABLES /WORK AREAS - 00720000 * 00721000 * DMKIOEVQ FIELD IS USED TO QUE SVC 76 REQUESTS. 00722000 * 00723000 * NOTES - 00724000 * 00725000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL IS WHEN A 00726000 * VITUAL MACHINE REQUESTS THAT A RECORD BE RECORDED. THE 00727000 * FOLLOWING MODULE GIVE CONTROL TO THIS SUBROUTINE: 00728000 * 00729000 * DMKVER - WHEN A VIRTUAL ERROR RECORD IS CONVERTED TO A 00730000 * REAL ERROR RECORD. 00731000 * 00732000 * REGISTER USAGE - 00733000 * 00734000 * GR14,15 LINKAGE REGISTERS 00735000 * GR12 = MODULE BASE REGISTER 00736000 * GR11 = VMBLOK ADDRESSABILITY 00737000 * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00738000 * GR 6 = ADDRESS OF THE RECORD 00739000 * GR 5 = SUBROUTINE BAL REGISTER 00740000 * GR0-4= WORK REGISTERS 00741000 * 00742000 * OPERATION - 00743000 * 00744000 * I. FORMAT SVC 76 RECORD 00745000 * 00746000 * 1. MOVE THE DATE AND TIME RECORD WAS CREATED IN THE 00747000 * SVC 76 RECORD. 00748000 * 00749000 * 2. SET UP THE INTERFACE REGISTERS FOR THE RECORDER. 00750000 * 00751000 * 3. ANALYSE THE OBR/MDR RECORDING CYLINDER AND 00752000 * THE RECORDING IN PROGRESS FLAG. 00753000 * 00754000 * . IF THE CYLINDER IS FULL OR NOT INITIALIZED, RELEASE 00755000 * THE SVC 76 RECORD AND RETURN TO CALLER. 00756000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 00757000 * RETURN TO CALLER. 00758000 * . IF RECORDING IS NOT IN PROGRESS, QUE CPEXBLOK TO 00759000 * ACTIVATE RECORDER AND RETURN TO CALLER. 00760000 * 00761000 ********************************************************************** 00762000 EJECT 00763000 DMKIOEVR RELOC HANDLE ASYNCHRONOUS RECORDING @VA03358 00764000 LA R6,4(,R1) GET ADDRESS OF RECORD AREA @VA03358 00765000 LR R7,R0 GET LENGTH OF RECORD @VA03358 00766000 BAL R9,GETDATE GET DATE & TIME RECORD WAS MADE @VA03358 00767000 S R6,F4 ADDR. OF LENGTH FIELD & RECORD @VA03358 00768000 BAL R5,ANALRECD ANALYZE THE ERROR RECORDING CYLS @V5088AA 00769000 B FRETRECD RELEASE OBR/MDR RECORD @VA03358 00770000 B QUEVRM QUE OBR/MDR RECORD OFF REC QUE @VA03358 00771000 * NO RECORDING IN PROGRESS 00772000 LA R4,IOFVR SET UP RETURN ADDR FOR CPEXBLOK @VA03358 00773000 BAL R5,STKCPEX STACK CPEXBLOK OFF CPEXBLOK QUE @VA03358 00774000 SPACE 1 00775000 IOFVR EQU * CALL RECORDER FOR OBR/MDR RECORD @VA03358 00776000 CALL DMKIOFVR GO RECORD OBR/MDR RECORDS @VA03358 00777000 GOTO DMKDSPCH GO TO THE DISPATCHER @VA03358 00778000 SPACE 1 00779000 QUEVRM EQU * QUE OBR/MDR RECORD OFF REC. QUE @VA03358 00780000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 00781000 LA R3,DMKIOEVQ GET POINTER TO SVC 76 QUE @VA03358 00782000 LA R5,COMEXIT RETURN TO CALLER AFTER STACK @VA03358 00783000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUE @VA03358 00784000 EJECT 00785000 ********************************************************************** 00786000 * 00787000 * SUBROUTINE NAME - 00788000 * 00789000 * DMKIOECC 00790000 * 00791000 * FUNCTION - 00792000 * 00793000 * GIVE CONTROL TO THE RECORDER FOR RECORDING CHANNEL CHECK (CCH) 00794000 * RECORDS. RECORDING IS HANDLED ASYNCHRONOUS TO THE CHANNEL 00795000 * ERROR. 00796000 * 00797000 * ATTRIBUTES - 00798000 * 00799000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00800000 * 00801000 * ENTRY CONDITIONS - 00802000 * 00803000 * GR 6 = ADDRESS OF CHANNEL CHECK RECORD 00804000 * GR 7 = SIZE OF CHANNEL CHECK RECORD IN DOUBLEWORDS 00805000 * GR 8 = ADDRESS OF RDEVBLOK 00806000 * GR 10 = ADDRESS OF IOBLOK 00807000 * GR 11 = ADDRESS OF VMBLOK 00808000 * GR 12 = ADDRESS OF DMKIOECC 00809000 * GR 13 = ADDRESS OF SAVE AREA 00810000 * 00811000 * EXIT CONDITIONS - 00812000 * 00813000 * IF NO RECORDING IS IN PROGRESS, ACTIVATE RECORDER AND 00814000 * RETURN TO CALLER. IF RECORDING IS IN PROGRESS, QUE REQUEST 00815000 * AND RETURN TO CALLER. 00816000 * 00817000 * REGISTER CONTENTS 00818000 * GR 6 = ADDRESS OF OBR/MDR/CCH RECORD 00819000 * GR 7 = SIZE OF RECORD IN DOUBLEWORDS 00820000 * 00821000 * CALL TO OTHER ROUTINES - 00822000 * 00823000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CPEXBLOK 00824000 * DMKFRET - TO RETURN ALLOCATED STORAGE FOR RECORD 00825000 * DMKDSPCH - EXIT TO DISPATCHER AFTER RETURNING FROM RECORDER 00826000 * DMKSTKCP - STACK CPEXBLOK TO ACTIVATE RECORDER 00827000 * DMKIOFC1 - GO RECORD CCH RECORD 00828000 * 00829000 * EXTERNAL REFERENCES - 00830000 * 00831000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00832000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00833000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00834000 * DMKIOEMS - MCH/CCH RECORD CYLINDER FULL FLAG 00835000 * 00836000 * TABLES /WORK AREAS - 00837000 * 00838000 * DMKIOECQ FIELD IS USED TO QUE CCH RECORDS. 00839000 * 00840000 * NOTES - 00841000 * 00842000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL IS WHEN 00843000 * A CHANNEL ERROR HAS OCCURRED. THE FOLLOWING 00844000 * MODULE GIVE CONTROL TO THIS SUBROUTINE: 00845000 * 00846000 * DMKCCH - ON A CHANNEL ERROR 00847000 * 00848000 * REGISTER USAGE - 00849000 * 00850000 * GR14,15 LINKAGE REGISTERS 00851000 * GR12 = MODULE BASE REGISTER 00852000 * GR11 = VMBLOK ADDRESSABILITY 00853000 * GR10 = IOBLOK ADDRESSABILITY 00854000 * GR 9 = WORK REGISTER 00855000 * GR 8 = RDEVBLOK ADDRESSABILITY 00856000 * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00857000 * GR 6 = ADDRESS OF THE RECORD 00858000 * GR 5 = SUBROUTINE BAL REGISTER 00859000 * GR0-4= WORK REGISTERS 00860000 * 00861000 * OPERATION - 00862000 * 00863000 * I. FORMAT CHANNEL CHECK RECORD 00864000 * 00865000 * 1. MOVE THE DATE AND TIME RECORD WAS CREATED IN THE 00866000 * CHANNEL CHECK RECORD. 00867000 * 00868000 * 2. SET UP THE INTERFACE'S REGISTERS FOR THE RECORDER. 00869000 * 00870000 * 3. ANALYSE THE MCH/CCH RECORDING CYLINDER AND 00871000 * THE RECORDING IN PROGRESS FLAG. 00872000 * 00873000 * . IF THE CYLINDER IS FULL OR NOT INITIALIZED, SET A 00874000 * NON-ZERO RETURN CODE, RELEASE THE CCH RECORD AND 00875000 * RETURN TO CALLER. 00876000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 00877000 * RETURN TO CALLER. 00878000 * . IF RECORDING IS NOT IN PROGRESS, QUE CPEXBLOK TO 00879000 * ACTIVATE RECORDER AND RETURN TO CALLER. 00880000 * 00881000 ********************************************************************** 00882000 EJECT 00883000 DMKIOECC RELOC HANDLE ASYNCHRONOUS RECORDING @VA03358 00884000 CCHIOS EQU * ENTRY FROM I/O SUPERVICOR @VA03358 00885000 BAL R9,GETDATE GET DATE & TIME RECORD WAS MADE @VA03358 00886000 BAL R5,ANALRECD ANALYZE THE ERROR RECORDING CYLS @V5088AA 00887000 B CCHFRECD RELEASE CCH RECORD SPACE @VA03358 00888000 B QUECCH QUE CCH RECORD OFF RECORDING QUE @VA03358 00889000 * NO RECORDING IN PROGRESS 00890000 LA R4,IOFC1 SET UP RETURN ADDR FOR CPEXBLOK @VA03358 00891000 BAL R5,STKCPEX STACK CPEXBLOK OFF CPEXBLOK QUE @VA03358 00892000 SPACE 1 00893000 IOFC1 EQU * CALL RECORDER FOR CCH RECORD @VA03358 00894000 CALL DMKIOFC1 GO RECORD CCH RECORDS @VA03358 00895000 GOTO DMKDSPCH GO TO THE DISPATCHER @VA03358 00896000 SPACE 1 00897000 QUECCH EQU * QUE CCH RECORD OFF RECORDING QUE @VA03358 00898000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 00899000 LA R3,DMKIOECQ GET POINTER TO CCH QUE @VA03358 00900000 LA R5,COMEXIT RETURN TO CALLER AFTER STACK @VA03358 00901000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUE @VA03358 00902000 SPACE 2 00903000 CCHIOENT EQU * HANDLE CCH ERROR FROM I/O SUPVER.@VA03358 00904000 CALL DMKCCHRT WRITE ERROR MESSAGE TO OPERATOR @VA03358 00905000 L R7,IOERCCRL LENG OF CCH REC IN DOUBLEWORDS @V508690 00906000 L R6,IOERCCRA ADDR OF THE CCH RECORD @V508690 00907000 SR R5,R5 CLEAR WORK REGISTER @VA03358 00908000 ST R5,IOERCCRA CLEAR ADDRESS OD CCH RECORD @V508690 00909000 BAL R5,FRETIOER RELEASE STORAGE FOR IOERBLOK @VA03358 00910000 B CCHIOS GO SET UP FOR RECORDING @V508690 00911000 SPACE 2 00912000 DISPTH EQU * RETURN TO DISPATCHER @VA03358 00913000 GOTO DMKDSPCH GO TO THE DISPATCHER @VA03358 00914000 EJECT 00915000 ********************************************************************** 00916000 * 00917000 * SUBROUTINE NAME - 00918000 * 00919000 * DMKIOEMC 00920000 * 00921000 * FUNCTION - 00922000 * 00923000 * GIVE CONTROL TO THE RECORDER FOR RECORDING MACHINE CHECK (MCH) 00924000 * RECORDS. RECORDING IS HANDLE SYNCHRONOUS FOR MACHINE CHECK 00925000 * CONDITIONS. 00926000 * 00927000 * ATTRIBUTES - 00928000 * 00929000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00930000 * 00931000 * ENTRY CONDITIONS - 00932000 * 00933000 * GR 6 = ADDRESS OF MACHINE CHECK RECORD 00934000 * GR 7 = SIZE OF MACHINE CHECK RECORD IN DOUBLEWORDS 00935000 * GR 11 = ADDRESS OF VMBLOK 00936000 * GR 12 = ADDRESS OF DMKIOEMC 00937000 * GR 13 = ADDRESS OF SAVE AREA 00938000 * 00939000 * EXIT CONDITIONS - 00940000 * 00941000 * IF NO RECORDING IS IN PROGRESS, ACTIVATE RECORDER AND 00942000 * RETURN TO CALLER. IF RECORDING IS IN PROGRESS, QUE REQUEST 00943000 * AND RETURN TO CALLER. 00944000 * 00945000 * REGISTER CONTENTS 00946000 * GR 6 = ADDRESS OF OBR/MDR/CCH RECORD 00947000 * GR 7 = SIZE OF RECORD IN DOUBLEWORDS 00948000 * 00949000 * CALL TO OTHER ROUTINES - 00950000 * 00951000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CPEXBLOK 00952000 * DMKDSPCH - EXIT TO DISPATCHER UNTIL RECORD IS RECORDED 00953000 * DMKSTKCP - STACK CPEXBLOK WHEN THE RECORDER IS ACTIVE 00954000 * DMKIOFM1 - GO RECORD MCH RECORD 00955000 * 00956000 * EXTERNAL REFERENCES - 00957000 * 00958000 * DMKSYSTZ - GET ADDRESS OF GMT DIFFERENCE 00959000 * DMKIOERP - RECORDING IN PROGRESS FLAG 00960000 * DMKIOEMX - NUMBER OF PAGES (MAXIMUM) ON A CYLINDER 00961000 * DMKIOEMS - MCH/CCH RECORD CYLINDER FULL FLAG 00962000 * 00963000 * TABLES /WORK AREAS - 00964000 * 00965000 * DMKIOEMQ FIELD IS USED TO QUE MCH RECORDS. 00966000 * 00967000 * NOTES - 00968000 * 00969000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL, IS WHEN 00970000 * A MACHINE CHECK HAS OCCURRED. THE FOLLOWING 00971000 * MODULE GIVE CONTROL TO THIS SUBROUTINE: 00972000 * 00973000 * DMKMCH - ON A MACHINE CHECK CONDITION 00974000 * 00975000 * REGISTER USAGE - 00976000 * 00977000 * GR14,15 LINKAGE REGISTERS 00978000 * GR12 = MODULE BASE REGISTER 00979000 * GR11 = VMBLOK ADDRESSABILITY 00980000 * GR10 = IOBLOK ADDRESSABILITY 00981000 * GR 9 = WORK REGISTER 00982000 * GR 7 = SIZE OF THE RECORD IN DOUBLEWORDS 00983000 * GR 6 = ADDRESS OF THE RECORD 00984000 * GR 5 = SUBROUTINE BAL REGISTER 00985000 * GR0-4= WORK REGISTERS 00986000 * 00987000 * OPERATION - 00988000 * 00989000 * I. FORMAT MACHINE CHECK RECORD 00990000 * 00991000 * 1. MOVE DATE AND TIME RECORD WAS CREATED IN THE 00992000 * MACHINE CHECK RECORD. 00993000 * 00994000 * 2. SET UP THE INTERFACE'S REGISTERS FOR THE RECORDER. 00995000 * 00996000 * 3. ANALYSE THE MCH/CCH RECORDING CYLINDER AND 00997000 * THE RECORDING IN PROGRESS FLAG. 00998000 * 00999000 * . IF THE CYLINDER IS FULL OR NOT INITIALIZED, SET A 01000000 * NON-ZERO RETURN CODE AND RETURN TO CALLER. 01001000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 01002000 * EXIT TO THE DISPATCHER, UNTIL THE RECORDER STACKS 01003000 * THE CPEXBLOK FOR THIS REQUEST. 01004000 * . IF RECORDING IS NOT IN PROGRESS, GIVE CONTROL 01005000 * TO THE RECORDER TO RECORD THE MCH RECORD. 01006000 * 01007000 ********************************************************************** 01008000 EJECT 01009000 DMKIOEMC RELOC HANDLE SYNCHRONOUS RECORDING @VA03358 01010000 BAL R9,GETDATE GET DATE & TIME RECORD WAS MADE @VA03358 01011000 BAL R5,ANALRECD ANALYZE THE ERROR RECORDING CYLS @V5088AA 01012000 B MCHCCH SET A NON-ZERO RETURN CODE @VA03358 01013000 B QUEMCH QUE MCH RECORD OFF RECORDING QUE @VA03358 01014000 * NO RECORDING IN PROGRESS 01015000 IOFM1 EQU * PROCESS MCH REQUEST -SYNCHRONOUS @VA03358 01016000 CALL DMKIOFM1 GO RECORD MCH RECORDS @VA03358 01017000 BAL R5,COMEXIT RETURN TO CALLER @VA03358 01018000 SPACE 1 01019000 QUEMCH EQU * QUE MCH RECORD OFF RECORDING QUE @VA03358 01020000 LA R4,IOFM1 RETURN ADDRESS FOR CPEXBLOK @VA03358 01021000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 01022000 LA R3,DMKIOEMQ GET POINTER TO MCH QUE @VA03358 01023000 LA R5,DISPTH RETURN TO THE DISPATCHER @VA03358 01024000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUE @VA03358 01025000 SPACE 1 01026000 CCHFRECD EQU * HANDLE 'NOT INITIALIZE'/FULL CYL @VA03358 01027000 SR R5,R5 CLEAR FLAG REGISTER @VA03358 01028000 BAL R4,FRETRECD RELEASE SPACE FOR CCH RECORD @VA03358 01029000 MCHCCH EQU * SET RETURN CODE FOR CALLER @VA03358 01030000 LA R0,255 SET NON-ZERO RETURN CODE @VA03358 01031000 LM R1,R11,SAVEREGS+4 RESTORE CALLER'S REGISTERS @VA03358 01032000 SVC 12 RETURN TO USER @VA03358 01033000 EJECT 01034000 ********************************************************************** 01035000 * 01036000 * SUBROUTINE NAME - 01037000 * 01038000 * DMKIOEFM 01039000 * 01040000 * FUNCTION - 01041000 * 01042000 * THIS SUBROUTINE IS GIVEN CONTROL TO RESET OR CLEAR THE 01043000 * ERROR RECORDING CYLINDERS AND UPDATE THE INCORE POINTERS 01044000 * TO THE START OF THE RECORDING AREA. 01045000 * 01046000 * ATTRIBUTES - 01047000 * 01048000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 01049000 * 01050000 * ENTRY CONDITIONS - 01051000 * 01052000 * GR 2 = PARAMETER REGISTER 01053000 * 01054000 * PARAMETER 01055000 * GR2 = 01 - CLEAR OBR/MDR RECORDING CYLINDER 01056000 * GR2 = 02 - CLEAR MCH/CCH RECORDING CYLINDER 01057000 * GR2 = 03 - CLEAR BOTH RECORDING CYLINDERS 01058000 * 01059000 * GR 11 = ADDRESS OF VMBLOK 01060000 * GR 12 = ADDRESS OF DMKIOEFM 01061000 * GR 13 = ADDRESS OF SAVE AREA 01062000 * 01063000 * EXIT CONDITIONS - 01064000 * 01065000 * IF NO RECORDING IS IN PROGRESS, CLEAR THE ERROR RECORDING 01066000 * CYLINDERS AND INITIALIZE THE INCORE POINTERS. IF RECORDING IS 01067000 * IN PROGRESS, QUE ERASE REQUEST AND EXIT TO THE DISPATCHER. 01068000 * 01069000 * CALL TO OTHER ROUTINES - 01070000 * 01071000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CPEXBLOK 01072000 * DMKDSPCH - EXIT TO DISPATCHER AFTER STACKING CPEXBLOK 01073000 * DMKSTKCP - STACK CPEXBLOK FOR RECORDER 01074000 * DMKIOFIN - GO INITIALIZE THE INCORE POINTERS 01075000 * DMKIOGF2 - ERASE THE ERROR RECORDING CYLINDERS 01076000 * 01077000 * EXTERNAL REFERENCES - 01078000 * 01079000 * DMKIOERP - RECORDING IN PROGRESS FLAG 01080000 * 01081000 * TABLES /WORK AREAS - 01082000 * 01083000 * DMKIOERQ FIELD IS USED TO QUE ERASE REQUESTS. 01084000 * 01085000 * NOTES - 01086000 * 01087000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL IS WHEN 01088000 * THE CPEREP COMMAND IS ISSUE TO CLEAR OR RESET ERROR 01089000 * RECORDING CYLINDERS. THE FOLLOWING MODULE GIVE CONTROL 01090000 * TO THIS SUBROUTINE: 01091000 * 01092000 * DMKHVC - TO CLEAR ERROR RECORDING CYLINDERS 01093000 * 01094000 * REGISTER USAGE - 01095000 * 01096000 * GR14,15 LINKAGE REGISTERS 01097000 * GR12 = MODULE BASE REGISTER 01098000 * GR11 = VMBLOK ADDRESSABILITY 01099000 * GR 9 = WORK REGISTER 01100000 * GR 5 = SUBROUTINE BAL REGISTER 01101000 * GR0-4= WORK REGISTERS 01102000 * 01103000 * OPERATION - 01104000 * 01105000 * I. CLEAR AND FORMAT THE RECORDING AREA ON DISK 01106000 * 01107000 * 1. ANALYSE THE RECORDING IN PROGRESS FLAG. 01108000 * 01109000 * . IF RECORDING IS IN PROGRESS, QUE REQUEST AND 01110000 * EXIT TO DISPATCHER. 01111000 * . IF RECORDING IS NOT IN PROGRESS, GIVE CONTROL TO 01112000 * DMKIOGF2 TO CLEAR RECORDING CYLINDERS AND 01113000 * AFTERWARD, GIVE CONTROL TO THE RECORDER TO 01114000 * INITIALIZE THE INCORE POINTERS. 01115000 * 01116000 ********************************************************************** 01117000 EJECT 01118000 DMKIOEFM RELOC PROVIDE SYNCHRONOUS HANDLING @VA03358 01119000 BAL R5,ANALRECD CHECK RECORDING IN PROGRESS FLAG @VA03358 01120000 B *+8 IGNORE FULL/NOT INITIALIZE BRANCH@VA03358 01121000 B QUERASE QUE ERASE REQUEST OFF REC. QUE @VA03358 01122000 * NO RECORDING IN PROGRESS 01123000 IOFIN EQU * PROCESS ERASE REQUEST SYNCH. @VA03358 01124000 MVI DMKIOERP,X'FF' SET RECORDING IN PROGRESS FLAG @VA03358 01125000 CALL DMKIOGF2 @VA03358 01126000 CALL DMKIOFIN INITIALIZE OBR/MDR & MCH/CCH CYL @VA03358 01127000 BAL R5,COMEXIT RETURN TO CALLER @VA03358 01128000 SPACE 1 01129000 QUERASE EQU * QUE ERASE REQUEST OFF REC. QUE @VA03358 01130000 LA R4,IOFIN SET UP RETURN ADDRESS @VA03358 01131000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 01132000 LA R3,DMKIOERQ GET POINTER TO ERASE REQUEST QUE @VA03358 01133000 LA R5,DISPTH RETURN TO THE DISPATCHER @VA03358 01134000 BAL R4,QUECPEX STACK REQUEST OFF RECORDING QUE @VA03358 01135000 EJECT 01136000 ********************************************************************** 01137000 * 01138000 * SUBROUTINE NAME - 01139000 * 01140000 * DMKIOEFL 01141000 * 01142000 * FUNCTION - 01143000 * 01144000 * THIS SUBROUTINE FORMAT EVERY PAGE ON THE ERROR RECORDING 01145000 * CYLINDERS AND INITIALIZE THE INCORE POINTERS. 01146000 * 01147000 * ATTRIBUTES - 01148000 * 01149000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 01150000 * 01151000 * ENTRY CONDITIONS - 01152000 * 01153000 * GR 12 = ADDRESS OF DMKIOEFL 01154000 * GR 13 = ADDRESS OF SAVE AREA 01155000 * 01156000 * EXIT CONDITIONS - 01157000 * 01158000 * NONE 01159000 * 01160000 * CALL TO OTHER ROUTINES - 01161000 * 01162000 * DMKIOFIN - TO INITIALIZE INCORE POINTERS AFTER IPL OR CLEAR 01163000 * DMKIOGF1 - FORMAT PAGES IN THE ERROR RECORDING CYLINDERS 01164000 * 01165000 * EXTERNAL REFERENCES - 01166000 * 01167000 * DMKIOERP - RECORDING IN PROGRESS FLAG 01168000 * 01169000 * TABLES /WORK AREAS - 01170000 * 01171000 * NONE 01172000 * 01173000 * NOTES - 01174000 * 01175000 * THE ONLY TIME THIS SUBROUTINE GETS CONTROL IS WHEN 01176000 * THE SYSTEM IS IPL. THE FOLLOWING MODULE GIVE CONTROL 01177000 * TO THIS SUBROUTINE: 01178000 * 01179000 * DMKCPI - WHEN THE SYSTEM IS IPL 01180000 * 01181000 * REGISTER USAGE - 01182000 * 01183000 * GR14,15 LINKAGE REGISTERS 01184000 * GR12 = MODULE BASE REGISTER 01185000 * GR0-11= WORK REGISTERS 01186000 * 01187000 * OPERATION - 01188000 * 01189000 * I. FORMAT AND INITIALIZE PAGES ON RECORDING CYLINDERS 01190000 * 01191000 * 1. FORMAT AND INITIALIZE PAGES ON ERROR RECORDING 01192000 * CYLINDERS. 01193000 * 01194000 * 2. INITIALIZE THE INCORE POINTERS IN THE RECORDER. 01195000 * 01196000 ********************************************************************** 01197000 EJECT 01198000 DMKIOEFL RELOC INITIALIZE RECORDING CYLINDERS @VA03358 01199000 MVI DMKIOERP,X'FF' SET RECORDING IN PROGRESS FLAG @VA03358 01200000 CALL DMKIOGF1 FORMAT ERROR RECORDING CYLINDERS @VA03358 01201000 CALL DMKIOFIN INITIALIZE INCORE POINTERS @VA03358 01202000 BAL R5,COMEXIT RETURN TO CALLER @VA03358 01203000 EJECT 01204000 ******************************************************************* 01205000 * 01206000 * SUBROUTINE NAME 01207000 * 01208000 * DMKIOEST 01209000 * 01210000 * FUNCTION 01211000 * 01212000 * GET STORAGE AND BUILD ERRBLOK. QUEUE THE ERRBLOK 01213000 * FOR ASYNCHRONOUS PROCESSING. 01214000 * 01215000 * ATTRIBUTES 01216000 * 01217000 * SERIALLY REUSABLE, RESIDENT, ENTERED VIA SVC 01218000 * 01219000 * ENTRY CONDITIONS 01220000 * 01221000 * GR 8 = ADDRESS OF RDEVBLOK 01222000 * GR 10 = ADDRESS OF IOBLOK 01223000 * 01224000 * EXIT CONDITIONS 01225000 * 01226000 * RETURN TO THE CALLING ERP 01227000 * 01228000 * 01229000 * CALLS TO OTHER ROUTINES 01230000 * DMKFREE _ TO ALLOCATE FREE STORAGE FOR ERRBLOK 01231000 * 01232000 * NOTES: 01233000 * 01234000 * THIS MODULE GETS CONTROL FOR THE PURPOSE OF UPDATING 01235000 * THE SDR COUNTERS. THE FOLLOWING MODULES CALL THIS 01236000 * SUBROUTINE. 01237000 * 01238000 * DMKBSC 01239000 * DMKCNS 01240000 * DMKDAS 01241000 * DMKGRF 01242000 * DMKTAP 01243000 * DMKRSE 01244000 * 01245000 * TABLES/WORK AREAS 01246000 * 01247000 * ERRBLOK _ CONTAINS INFORMATION NEEDED TO UPDATE COUNTERS 01248000 * 01249000 * OPERATION 01250000 * 01251000 * 01252000 * 01253000 * 01254000 * 01255000 ******************************************************************* 01256000 EJECT 01257000 DMKIOEST RELOC HANDLE @VA03757 01258000 USING ERRBLOK,R6 SET UP ADDRESSABILITY FOR ERRBLOK@VA03757 01259000 ICM R4,15,RDEVIOER GET IOERBLOK ADDRESS @VA03757 01260000 BZ COMEXIT MUST HAVE IOERBLOK @VA03757 01261000 TM RDEVCTRS,X'FF' COUNTING SUSPENDED??? @VA03757 01262000 BO COMEXIT YES, EXIT @VA03757 01263000 BAL R5,ERRBLD GO BUILD THE ERRBLOK @VA03757 01264000 LR R6,R1 GET THE ADDRESS OF THE BLOCK @VA03757 01265000 LR R7,R0 GET THE SIZE IN DOUBLEWORDS @VA03757 01266000 ICM R5,15,SAVER1 GET PASSED REG 1 @VA03757 01267000 BZ SDRANAL IF ZERO, NO PARM STRING PASSED @VA03757 01268000 MVC ERRPARM+4(16),0(R5) MOVE IN THE PARM STRING @VA03757 01269000 SPACE 01270000 SDRANAL EQU * @VA03757 01271000 BAL R5,ANALRECD ANALYZE THE ERROR RECORDING CYLS @V5088AA 01272000 B FRETRECD RELEASE ERROR BLOCK @VA03757 01273000 B QUESDR UPDATE IN PROGRESS, QUEUE IT @VA03757 01274000 *** NO UPDATE IN PROGRESS 01275000 LA R4,IOFST SET UP RETURN ADDR FOR CPEXBLOK @VA03757 01276000 BAL R5,STKCPEX STACK CPEXBLOK OFF CPEXBLOK QUE @VA03757 01277000 SPACE 01278000 IOFST EQU * @VA03757 01279000 CALL DMKIOFST GO UPDATE SDR COUNTERS @VA03757 01280000 SPACE 01281000 GOTO DMKDSPCH GO TO DISPATCHER @VA03757 01282000 SPACE 2 01283000 QUESDR EQU * QUEUE ERRBLOK OFF UPDATE QUEUE @VA03757 01284000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03757 01285000 LA R3,DMKIOESQ GET ADDRESS OF UPDATE QUEUE @VA03757 01286000 LA R5,COMEXIT SET UP RETURN @VA03757 01287000 BAL R4,QUECPEX GO QUEUE IT @VA03757 01288000 DROP R6 @VA03757 01289000 EJECT 01290000 * 01291000 * SUBROUTINES FOR BUILDING AND FORMATTING ERROR RECORDS. 01292000 * 01293000 SPACE 2 01294000 ANALRECD EQU * ANALYSE THE OBR/MDR ERROR CYL. @VA03358 01295000 CLI DMKIOEES,X'FF' IS ERROR RECORDING AREA FULL? @V5088AA 01296000 BER R5 YES, RETURN TO IN LINE CODE @VA03358 01297000 ANINLINE EQU * CHECK FOR RECORDING IN PROGRESS @VA03358 01298000 CLI DMKIOEMX,X'00' IS ERROR REC. CYL. INITIALIZE @VA03358 01299000 BER R5 NO, RETURN TO IN LINE CODE @VA03358 01300000 CLI DMKIOERP,X'FF' IS RECORDING IN PROGRESS @VA03358 01301000 BE 4(R5) YES, RETURN TO IN LINE CODE @VA03358 01302000 MVI DMKIOERP,X'FF' SET RECORDING IN PROGRESS FLAG @VA03358 01303000 B 8(R5) GO CALL THE RECORDER @VA03358 01304000 SPACE 2 01305000 STKCPEX EQU * STACK THE CPEXBLOK OFF THE QUE @VA03358 01306000 CHARGE SWITCH,ASYSVM SWITCH TIMING TO SYSTEM @V407510 01307000 BAL R5,GETCPEX GET SPACE FOR CPEXBLOK @VA03358 01308000 CHARGE SWITCH,SAVER11 SWITCH BACK TO USER @V407510 01309000 CALL DMKSTKCP STACK THE CPEXBLOK FOR RETURN @VA03358 01310000 BAL R5,COMEXIT GO RETURN TO CALLER @VA03358 01311000 SPACE 2 01312000 SPACE 2 01313000 FRETSDR EQU * RELEASE STORAGE USED BY SDRBLOK @VA03757 01314000 ICM R9,15,RDEVCTRS IS THERE A SDRBLOK ?? @VA03757 01315000 BZR R5 NO, RETURN @VA03757 01316000 SR R1,R1 CLEAR WORK REG @VA03757 01317000 IC R1,SDRLNGTH GET LENGTH OF SDRWORK AREA @VA03757 01318000 LA R1,SDRBSIZE(,R1) ADD SDRBLOK BASE SIZE @VA03757 01319000 A R1,F7 ROUND UP TO NEXT DOUBLEWORD @VA03757 01320000 SRL R1,3 GET NUMBER OF DOUBLEWORDS @VA03757 01321000 LR R0,R1 SET UP FOR CALL @VA03757 01322000 LR R1,R9 GET ADDRESS OF SDRBLOK @VA03757 01323000 LA R1,0(,R1) CLEAR HI-ORDER BYTE @VA03757 01324000 CALL DMKFRET RELEASE STORAGE USED BY SDRBLOK @VA03757 01325000 XC RDEVCTRS,RDEVCTRS CLEAR POINTER TO SDRBLOK @VA03757 01326000 BR R5 RETURN TO IN LINE CODE @VA03757 01327000 SPACE 01328000 EJECT 01329000 *** ROUTINES USED TO BUILD THE ERRBLOK TO PASS TO MODULE 01330000 *** DMKIOF WHO WILL BUILD AND RECORD THE OBR/MDR RECORD 01331000 SPACE 01332000 *** BUILD ERRBLOK FOR OBR PROCESSING 01333000 SPACE 2 01334000 USING ERRBLOK,R6 SETUP ADDRESSABILITY FOR ERRBLOK @VA03757 01335000 USING SDRBLOK,R9 SETUP ADDRESSABILITY FOR SDRBLOK @VA03757 01336000 ERRBLD EQU * GET SPACE AND BUILD ERRBLOK @VA03757 01337000 SPACE 01338000 BAL R3,SPACE GO GET THE SPACE @VA03757 01339000 BAL R3,OBRMDRCL GO CLEAR THE ERRBLOK @VA03757 01340000 MVC ERRKEY(3),OBRKEY SET FOR OBR PROCESSING @VA03757 01341000 BAL R9,GETDATE GET TIME AND DATE @VA03757 01342000 ICM R9,15,RDEVCTRS PICK UP SDRBLOK ADDRESS @VA03757 01343000 BZ BYPASS01 BRANCH IF NO SDRBLOK @VA03757 01344000 MVC ERRSDR,SDRFLAGS MOVE SDR FLAGS TO ERRBLOK @VA03757 01345000 TM SDRFLAGS,SDRSHRT SHORT OBR TO BE WRITTEN ?? @VA03757 01346000 BOR R5 YES, RETURN TO IN LINE CODE @VA03757 01347000 SPACE 2 01348000 BYPASS01 EQU * GET THE FAILING CCW @VA03757 01349000 SPACE 01350000 SR R2,R2 CLEAR WORK REG @VA03757 01351000 ICM R2,7,IOERCSW+1 GET FAILING CCW ADDRESS PLUS 8 @VA03757 01352000 S R2,F8 GET FAILING CCW ADDRESS @VA03757 01353000 LTR R2,R2 IS THIS A VALID FAILING CCW ADDR @VA03757 01354000 BNP BYPASS02 NO, FORGET ABOUT CCW @VA03757 01355000 MVC ERRCCW(8),0(R2) MOVE IN FAILING CCW @VA03757 01356000 SPACE 2 01357000 BYPASS02 EQU * MOVE IN THE VOLID FROM RDEVBLOK @VA03757 01358000 MVC ERRVOLID(6),RDEVSER GET THE VOLID LABEL @VA03757 01359000 SPACE 2 01360000 OBRIOB EQU * MOVE IN THE IOBLOK @VA03757 01361000 MVC ERRIOB(64),IOBLOK MOVE IOBLOK TO ERRBLOK @VA03757 01362000 SPACE 2 01363000 SR R3,R3 CLEAR LENGTH WORK REG @VA11856 01364010 LH R3,IOEREXT GET EXTENSION @VA11856 01364020 LA R3,IOERSIZE(,R3) ADD THE IOERBLOK LENGTH @VA11856 01364030 SLL R3,3 MULT BY 8 @VA11856 01364040 N R3,=X'00000FFF' DONT GO CRAZY @VA11856 01364050 LA R2,ERRIOER POINT TO WHERE @VA11856 01364060 LA R14,IOERBLOK AND FROM WHERE @VA11856 01364070 LTR R15,R3 SET UP THE LENGTHS @VA11856 01364080 BZR R5 NOBYTES ALREADY DONE @VA11856 01364090 MVCL R2,R14 HANDLE BIG STUFF @VA11856 01364100 CLC RDEVTYPC(2),P3203 IS IT A 3203 PRINTER?? @V386298 01370000 BE CLRREG YES--GO CLEAR REGISTERS @V386298 01371000 CLC RDEVTYPC(2),P3211 IS THIS A 3211 (PRINTER) @VA03757 01372000 BNER R5 NO, RETURN TO IN LINE CODE @VA03757 01373000 CLRREG EQU * @V386298 01374000 SR R2,R2 CLEAR THE WORK REG @VA03757 01375000 IC R2,CORRCNT GET THE CORRELATION COUNT @VA03757 01376000 A R2,F1 ADD ONE TO IT @VA03757 01377000 STC R2,CORRCNT SAVE NEW COUNT @VA03757 01378000 STC R2,ERRCORR MOVE UPDATED COUNT TO ERRBLOK @VA03757 01379000 BR R5 RETURN TO IN LINE CODE @VA03757 01380000 SPACE 01381000 SPACE 5 01383000 *** 01384000 *** BUILD ERRBLOK FOR MDR PROCESSING 01385000 SPACE 01386000 MDRBLD EQU * GET SPACE AND BUILD ERRBLOK @VA03757 01387000 SPACE 01388000 BAL R3,GETSPACE GO GET SPACE FOR THE ERRBLOK @VA03757 01389000 USING ERRBLOK,R6 SETUP ADDRESSABILITY FOR ERRBLOK @VA03757 01390000 BAL R3,OBRMDRCL CLEAR ERRBLOK TO ZEROES @VA03757 01391000 MVC ERRKEY(3),MDRKEY MARK FOR MDR PROCESSING @VA03757 01392000 LR R7,R9 GET ADDR OF CONTASK FOR 3270/3705@VA03757 01393000 BAL R9,GETDATE GET DATE AND TIME RECORD WAS MADE@VA03757 01394000 LR R9,R7 RESTORE CONTASK ADDRESS @VA03757 01395000 CLI RDEVTYPC,CLASURO IS IT A 3800 ? @V60B9BA 01396000 BE CONTURO XFER IF SO @V60B9BA 01397000 CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE CLASS @VA03757 01398000 BNE MDRCONTK NO, MOVE 3705 DEPENDENT DATA @VA03757 01399000 CONTURO MVC ERRMIOB(64),IOBLOK MOVE IOBLOK INTO ERRBLOK @V60B9BA 01400000 SPACE 2 01401000 MDRVIOER EQU * MOVE IN IOERBLOKS @VA03757 01402000 LA R3,ERRMIOER GET ADDRESS INTO ERRBLOK @VA03757 01403000 LR R2,R4 GET ADDRESS OF IOERBLOK @VA03757 01404000 MDRMOVE LA R15,IOERSIZE LENGTH OF IOERBLOK @VA03757 01405000 AH R15,IOEREXT-IOERBLOK(R2) ADD EXTENTION SIZE @VA03757 01406000 SLL R15,3 CONVERT TO BYTES @VA03757 01407000 BCTR R15,R0 DECREMENT COUNT BY ONE @VA03757 01408000 EX R15,MDRIOER GO MOVE IOERBLOK INTO ERRBLOK @VA03757 01409000 CLI RDEVTYPC,CLASURO IS IT A 3800 ? @V60B9BA 01410000 BER R5 YES, ERRBLOK BUILT @V60B9BA 01411000 CLI RDEVTYPE,TYP2305 2305 ???? @VA03757 01412000 BER R5 YES, ERRBLOK BUILT @VA03757 01413000 LA R3,1(R15,R3) UPDATE ERRBLOK POINTER @VA03757 01414000 ICM R2,15,IOERPNT-IOERBLOK(R2) GET NEXT IOERBLOK @VA03757 01415000 BNZ MDRMOVE IF ANOTHER IOERBLOK, GO MOVE IT @VA03757 01416000 BR R5 ALL DONE, RETURN TO IN LINE CODE @VA03757 01417000 SPACE 01418000 MDRIOER MVC 0(0,R3),0(R2) MOVE IOERBLOK TO ERRBLOK @VA03757 01419000 SPACE 1 01420000 MDRCONTK EQU * MOVE DEPENDENT DATA FROM CONTASK @VA03757 01421000 USING CONCCW3,R9 SETUP ADRESSABILITY FOR CONTASK @VA03757 01422000 SR R2,R2 CLEAR WORK REG @VA03757 01423000 LH R2,CONDCNT GET BUFFER LENGTH @VA03757 01424000 STH R2,ERRCCNT SAVE BUFFER LENGTH IN ERRBLOK @VA03757 01425000 BCTR R2,R0 SUBTRACT ONE - EXECUTE INST. @VA03757 01426000 EX R2,MOVCONT MOVE BUFFER INTO MDR RECORD @VA03757 01427000 BR R5 RETURN TO IN LINE CODE @VA03757 01428000 SPACE 1 01429000 MOVCONT MVC 18(0,R6),CONDATA MOVE BUFFER INTO ERRBLOK @VA03757 01430000 DROP R9 DROP BASE REGISTER FOR CONTASK @VA03757 01431000 SPACE 3 01432000 USING SDRBLOK,R9 ADDRESSABILITY FOR SDRBLOK @VA03757 01433000 SPACE 01434000 SPACE EQU * GET STORAGE FOR ERRBLOK (OBR) @VA03757 01435000 LA R1,ERRHEADR+20 ERRBLOK HEADER SIZE + LENGTH FLD @VA03757 01436000 ICM R9,15,RDEVCTRS GET ADDRESS OF SDRBLOK @VA03757 01437000 BZ BYPASS03 BR IF IT DOESNT EXIST @VA03757 01438000 TM SDRFLAGS,SDRSHRT CREATE SHORT OBR ?? @VA03757 01439000 BNO BYPASS03 NO, THEN NEED EXTENSION @VA07931 01440000 ICM R0,15,SAVER1 IS THERE A PARMLIST? @VA07931 01441000 BZ CONVDWD NO, THEN GET REGULAR SIZE BLOK @VA07931 01442000 LA R1,16(,R1) YES, MAKE ROOM FOR PARMLIST @VA07931 01443000 B CONVDWD GO GET IT @VA07931 01444000 BYPASS03 EQU * @VA03757 01445000 LH R1,IOEREXT GET IOERBLOK EXT SIZE @VA07816 01446000 LA R1,ERRSIZE+1(0,R1) ADD SIZE OF ERRBLOK+ LENGTH @VA03757 01447000 B CALLFRE GET STORAGE FOR ERRBLOK @VA03757 01448000 SPACE 2 01449000 GETSPACE EQU * GET SPACE FOR ERRBLOK (MDR) @VA03757 01450000 CLI RDEVTYPC,CLASURO IS IT A 3800 ? @V60B9BA 01451000 BE STGDASD YES, GET SPACE FOR RECD @V60B9BA 01452000 CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE CLASS @VA03757 01453000 BE STGDASD YES, GET SPACE FOR DASD RECORD @VA03757 01454000 LR R9,R1 GET ADDRESS OF CONTASK @VA03757 01455000 LA R1,ERRHEADR+6 LENGTH OF HEADER & LENGTH FIELD @VA03757 01456000 USING CONCCW3,R9 SETUP ADDRESSABILTY FOR CONTASK @VA03757 01457000 AH R1,CONDCNT ADD BUFFER LENGTH TO HEADER @VA03757 01458000 B CONVDWD GO CONVERT LENGTH TO DOUBLEWORDS @VA03757 01459000 DROP R9 DROP CONTASK BASE REGISTER @VA03757 01460000 SPACE 1 01461000 STGDASD EQU * GET SPACE FOR DASD ERRBLOK @VA03757 01462000 LR R7,R4 GET CURRENT IOERBLOK POINTER @VA03757 01463000 LA R1,ERRMSIZE-IOERSIZE+1 ERRBLOK SIZE MINUS THE @VA03757 01464000 * IOERBLOK SIZE PLUS LENGTH FIELD 01465000 DEPSTG EQU * GET LENGTH OF DEPENDENT AREA @VA03757 01466000 LA R1,IOERSIZE(R1) NOW ADD IOERBLOK SIZE @VA03757 01467000 AH R1,IOEREXT-IOERBLOK(R7) ADD EXTENTION SIZE @VA03757 01468000 CLI RDEVTYPC,CLASURO IS IT A 3800 ? @V60B9BA 01469000 BE CALLFRE XFER IF SO @V60B9BA 01470000 CLI RDEVTYPE,TYP2305 IS THIS A 2305 ??? @VA03757 01471000 BE CALLFRE YES, GO GET ERRBLOK @VA03757 01472000 ICM R7,15,IOERPNT-IOERBLOK(R7) GET NEXT IOERBLOK @VA03757 01473000 BNZ DEPSTG THERE IS ANOTHER IOERBLOK @VA03757 01474000 B CALLFRE NOW GO GET STORAGE FOR THE @VA03757 01475000 * ERRBLOK 01476000 SPACE 01477000 CONVDWD EQU * CONVERT LENGTH TO DOUBLEWORDS @VA03757 01478000 A R1,F7 UPDATE BY ONE DOUBLEWORD @VA03757 01479000 SRL R1,3 GET NUMBER OF DOUBLEWORDS @VA03757 01480000 CALLFRE EQU * @VA03757 01481000 LR R0,R1 ... @VA03757 01482000 CALL DMKFREE GET STORAGE FOR ERRBLOK @VA03757 01483000 BR R3 RETURN TO IN LINE CODE @VA03757 01484000 SPACE 2 01485000 SPACE 2 01486000 OBRMDRCL EQU * CLEAR OBR/MDR RECORD AREA @VA03358 01487000 LR R7,R0 LENGTH IN DOUBLEWORDS OF RECORD @VA03358 01488000 SLL R7,3 GET ACTUAL LENGTH OF RECORD @VA03358 01489000 S R7,F4 SUBTRACT LENGTH FIELD FROM SIZE @VA03358 01490000 ST R7,0(,R1) SAVE LENGTH OF RECORD IN RECORD @VA03358 01491000 LA R6,4(,R1) GET ADDRESS OF RECORD BUILD AREA @VA03358 01492000 BCTR R7,R0 SUBTRACT TWO BYTES FROM SIZE, @VA03358 01493000 BCTR R7,R0 BECAUSE OF EXECUTE INSTRUCTION @VA03358 01494000 MVI 0(R6),X'00' SET FIRST BYTE IN RECORD TO ZERO @VA03358 01495000 C R7,F255 DOES COUNT EXCEEDS 255 @VA03358 01496000 BNH *+8 NO, BYPASS SETTING COUNT TO 255 @VA03358 01497000 LA R7,255 SET COUNT VALUE TO MAXIMUM @VA03358 01498000 EX R7,OBMDRCLR CLEAR OBR/MDR RECORD AREA @VA03358 01499000 BR R3 RETURN TO IN LINE CODE @VA03358 01500000 SPACE 1 01501000 OBMDRCLR MVC 1(0,R6),0(R6) CLEAR OBR/MDR RECORD AREA @VA03358 01502000 SPACE 2 01503000 FRETRECD EQU * RELEASE THE ERROR RECORD @VA03358 01504000 LR R1,R6 GET ADDRESS OF ERROR RECORD @VA03358 01505000 LR R0,R7 LENGTH OF RECORD IN DOUBLEWORDS @VA03358 01506000 CALL DMKFRET RELEASE THE ERROR RECORD STORAGE @VA03358 01507000 LTR R5,R5 IS THE FLAG REGISTER SET TO ZERO @VA03358 01508000 BZR R4 YES, RETURN TO IN LINE CODE @VA03358 01509000 BAL R5,COMEXIT RETURN TO CALLER @VA03358 01510000 SPACE 2 01511000 GETCPEX EQU * GET SPACE FOR CPEXBLOK @VA03358 01512000 LA R0,CPEXSIZE GET SIZE IN DOUBLEWORDS @VA03358 01513000 CALL DMKFREE GET STORAGE FOR CPEXBLOK @VA03358 01514000 USING CPEXBLOK,R1 SET UP ADDRESSABILITY FOR CPEXBLK@VA03358 01515000 STM R0,R15,CPEXREGS SAVE ALL REGISTERS IN CPEXBLOK @VA03358 01516000 ST R4,CPEXADD SET UP RETURN ADDR AFTER UNSTACK @VA03358 01517000 SLR R4,R4 CLEAR REGISTER R4 @VA03358 01518000 ST R4,CPEXFPNT CLEAR POINTER TO NEXT CPEXBLOK @VA03358 01519000 BR R5 RETURN TO IN LINE CODE @VA03358 01520000 DROP R1 DROP CPEXBLOK BASE REGISTER @VA03358 01521000 SPACE 2 01522000 QUECPEX EQU * QUE CPEXBLOK OFF RECORDING QUE @VA03358 01523000 LR R4,R3 GET POINTER TO RECORDING QUE @VA03358 01524000 ICM R3,15,0(R3) GET POINTER TO NEXT CPEXBLOK @VA03358 01525000 BNZ QUECPEX YES, GET POINTER TO NEXT CPEXBLOK@VA03358 01526000 ST R1,0(,R4) QUE CPEXBLOK AT THE END OF CHAIN @VA03358 01527000 BR R5 RETURN TO IN LINE CODE @VA03358 01528000 SPACE 2 01529000 INTREC EQU * HANDLE INTENSIVE RECORDING @VA03358 01530000 TM VMCLEVEL,VMCLASSF IS THIS A CLASS 'F' USER @VA03358 01531000 BZR R5 NO, RETURN TO IN LINE CODE @VA03358 01532000 TM IOBFLAG,IOBCP WAS REQUEST INITIATED BY CP @VA03358 01533000 BOR R5 YES, RETURN TO IN LINE CODE @VA03358 01534000 TM RDEVSTAT,RDEVIRM IS INTENSIVE RECORDING ON @VA03358 01535000 BZ COMEXIT NO, RETURN TO CALLER @VA03358 01536000 L R7,DMKIOEIR ADDR OF INTENSIVE RECORDING BLOCK@VA03358 01537000 USING IRMBLOK,R7 @VA03358 01538000 CLC IOBRADD(2),IRMRLADD REC. REQ. FOR DEV. ADDR @VA03358 01539000 BNE COMEXIT NO, RETURN TO CALLER @VA03358 01540000 SR R3,R3 CLEAR REG 3 @VA03358 01541000 IC R3,IRMBYT1 PICK UP FIRST SENSE BYTE PARM @VA03358 01542000 IC R3,IOERDATA(R3) PICK UP PROPER SENSE BYTE @VA03358 01543000 STC R3,CHECKER SAVE SENSE BYTE @VA03358 01544000 IC R3,IRMBIT1 PICK UP FIRST SENSE BIT PARM @VA03358 01545000 IC R3,BITABL(R3) PICK UP EQUIVALENT MASK @VA03358 01546000 EX R3,SNSTEST STORE AND TEST ERROR BITS @VA03358 01547000 BO SNSERFND YES, CHECK FOR 'AND' PARAMETER @VA03358 01548000 TM IRMFLG,IRMOR NO - WAS THE 'OR' PARM SPECIFIED @VA03358 01549000 BZ COMEXIT NO, DON'T RECORD THIS ERROR @VA03358 01550000 B PARM2CHK YES - CHECK THE SECOND PARM @VA03358 01551000 SNSERFND EQU * HANDLE CORRECT SENSE BYTE @VA03358 01552000 TM IRMFLG,IRMAND WAS THE 'AND' PARM SPECIFIED ? @VA03358 01553000 BZ OCCURCHK NO, CHECK THE USER LIMIT VALUE @VA03358 01554000 PARM2CHK EQU * CHECK THE SECOND PARMETER @VA03358 01555000 IC R3,IRMBYT2 PICK UP 2ND BYTE PARM @VA03358 01556000 IC R3,IOERDATA(R3) PICK UP SENSE BYTE @VA03358 01557000 STC R3,CHECKER SAVE SENSE BYTE @VA03358 01558000 IC R3,IRMBIT2 PICK UP 2ND SENSE BIT PARM @VA03358 01559000 IC R3,BITABL(R3) PICK UP MASK FOR TEST @VA03358 01560000 EX R3,SNSTEST IS THERE AN ERROR PRESENT @VA03358 01561000 BNO COMEXIT NO, RETURN TO CALLER @VA03358 01562000 OCCURCHK EQU * CHECK THE USER'S LIMIT VALUE @VA03358 01563000 LH R5,IRMLMTCT GET LIMIT COUNT @VA03358 01564000 LA R5,1(,R5) ADD 1 TO COUNT @VA03358 01565000 STH R5,IRMLMTCT PUT UPDATED COUNT BACK. @VA03358 01566000 CLI IRMMAXCT,X'00' IS THIS THE FIRST TIME? @VA03816 01567000 BE RECSTRT @VA03816 01568000 CH R5,IRMLMT COMPARE CTR TO LIMIT SET BY USER @VA03358 01569000 BL COMEXIT IF LOW, EXIT @VA03816 01570000 SR R3,R3 ZERO R3 @VA03816 01571000 STH R3,IRMLMTCT CLEAR LIMIT COUNTER @VA03358 01572000 IC R5,IRMMAXCT PICK UP TOTAL RECORDS RECORDED @VA03358 01573000 LA R5,1(,R5) ADD 1 @VA03358 01574000 STC R5,IRMMAXCT SAVE COUNT @VA03358 01575000 CLI IRMMAXCT,10 HAVE WE RECORDED 10 ERRORS ? @VA03358 01576000 BNE OBRRECD NO, CONTINUE RECORDING OBR RECORD@VA03358 01577000 SWITCH SWITCH TO MAIN PROCESSOR @V407510 01578000 NI RDEVSTAT,255-RDEVIRM TURN INTENS. REC. OFF @VA03816 01579000 LA R0,IRMSIZE GET SIZE OF IRMBLOK @VA03816 01580000 LR R1,R7 GET ADDRESS OF IRMBLOK @VA03816 01581000 CALL DMKFRET FRET IRMBLOK @VA03816 01582000 SR R1,R1 @VA03816 01583000 ST R1,DMKIOEIR ZERO IRMBLOK POINTER @VA03816 01584000 BAL R5,OBRRECD GO FORMAT AND BUILD OBR RECORD @VA03358 01585000 SPACE 1 01586000 RECSTRT EQU * @VA03358 01587000 STC R5,IRMMAXCT SAVE IT @VA03358 01588000 BAL R5,OBRRECD GO FORMAT AND BUILD OBR RECORD @VA03358 01589000 SPACE 1 01590000 SNSTEST TM CHECKER,X'00' CHECK FOR ERROR PRESENT @VA03358 01591000 SPACE 2 01592000 GETDATE EQU * GET DATE AND TIME VALUE @VA03358 01593000 STCK OSDATE STORE PRESENT TOD CLOCK @VA03358 01594000 BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 01595000 GOTO DMKCVTAB CLOCK DAMAGED...ABEND CVT001 @VA04301 01596000 CLOCKOK EQU * @VA04301 01597000 LM R2,R3,OSDATE GET THE CLOCK VALUE @VA03358 01598000 SRDL R2,12 SHIFT DOWN FOR ADJUST @VA03358 01599000 L R14,=A(DMKSYSTZ) ADDRESS OF GMT DIFFERENCE @VA03358 01600000 L R15,0(,R14) GET GMT DIFFERENCE @VA03358 01601000 LCR R15,R15 MAKE VALUE POSITIVE @VA03358 01602000 SR R14,R14 CLEAR WORK REGISTER @VA03358 01603000 M R14,=F'1000000' CONVERT GMT DIFF. TO MICROSEC @VA03358 01604000 SLR R3,R15 ADJUST TIME VALUE @VA03358 01605000 BC 11,*+8 ... @VA03358 01606000 SL R2,F1 ... @VA03358 01607000 SLR R2,R14 GET TIME VALUE @VA03358 01608000 SLDL R2,12 SHIFT IT BACK @VA03358 01609000 STM R2,R3,8(R6) SAVE TOD CLOCK VALUE IN RECORD @VA03358 01610000 BR R9 RETURN TO IN LINE CODE @VA03358 01611000 SPACE 2 01612000 FRETIOER EQU * RELEASE THE IOERBLOK @VA03358 01613000 LTR R10,R10 IS THERE AN IOBLOK POINTER @VA03358 01614000 BZR R5 NO, RETURN TO IN LINE CODE @VA03358 01615000 TM IOBFLAG,IOBCP IS THIS A CP GENERATED REQUEST @VA03358 01616000 BZR R5 NO, RETURN TO IN LINE CODE @VA03358 01617000 ICM R4,15,IOBIOER GET ADDRESS OF IOERBLOK @VA03358 01618000 BZR R5 NO PTR, RETURN TO IN LINE CODE @VA03358 01619000 FRETNXT EQU * RELEASE IOERBLOK @VA03358 01620000 L R3,IOERPNT GET POINTER TO NEXT IOERBLOK @VA03358 01621000 TM IOERCSW+5,CCC+CDC+IFCC IS THIS CHANNEL ERROR @VA03358 01622000 BZ NOCHAN NO, GO RELEASE IOERBLOK @VA03358 01623000 L R0,IOERCCRL PICK UP SIZE OF CCH RECORD @V508690 01624000 ICM R1,15,IOERCCRA GET ADDR OF CCH RECORD @V508690 01625000 BZ NOCHAN IF ZERO, BYPASS RELEASING STORAGE@VA03358 01626000 CALL DMKFRET FRET THE CCH RECORD @VA03358 01627000 NOCHAN EQU * @VA03358 01628000 LR R1,R4 GET ADDRESS OF IOERBLOK @VA03358 01629000 LA R0,IOERSIZE FRET THE IOERBLOK @VA03358 01630000 AH R0,IOEREXT ADD SIZE OF EXTENSION @VA03358 01631000 CALL DMKFRET FRET THE IOERBLOK @VA03358 01632000 LTR R4,R3 POINT TO THE NEXT IOERBLOK @VA03358 01633000 BNZ FRETNXT YES, GO FRET IOERBLOK @VA03358 01634000 XC IOBIOER(4),IOBIOER CLEAR IOERBLOK POINTER @VA03358 01635000 BR R5 RETURN TO IN LINE CODE @VA03358 01636000 SPACE 2 01637000 FRETCON EQU * RELEASE CONTASK BUFFER @VA03358 01638000 LR R1,R9 GET ADDRESS OF CONTASK @VA03358 01639000 LH R0,0(,R1) SIZE IN DOUBLEWORDS OF CONTASK @VA03358 01640000 CALL DMKFRET RELEASE BUFFER SPACE @VA03358 01641000 BR R5 RETURN TO IN LINE CODE @VA03358 01642000 SPACE 2 01643000 NREXIT EQU * RELEASE IOERBLOK FOR CP GENERATED@VA03358 01644000 BAL R5,FRETIOER RELEASE IOERBLOK @VA03358 01645000 COMEXIT EQU * RETURN TO CALLER @VA03358 01646000 EXIT @VA03358 01647000 EJECT 01648000 * THE DCS MUST REMAIN IN THE ORDERS BELOW. DMKIOFIN DEPENDENTS 01649000 * ON THE CYLINDER, PAGE AND DEVICE TYPE FIELDS (CCPD) BEING 01650000 * CONTINUOUS IN STORAGE. 01651000 SPACE 1 01652000 DS 0D @VA03358 01653000 OSDATE DC XL4'00000000',XL2'0006',PL2'1' USE FOR TOD CLK @VA03358 01654000 DMKIOEIQ DC F'00' REC. QUE CHAIN FOR OBR/MDR RECS. @VA03358 01655000 DMKIOENQ DC F'00' REC. QUE CHAIN FOR ENVIR. RECORDS@VA03358 01656000 DMKIOEMQ DC F'00' REC. QUE CHAIN FOR MCH RECORDS @VA03358 01657000 DMKIOECQ DC F'00' REC. QUE CHAIN FOR CCH RECORDS @VA03358 01658000 DMKIOERQ DC F'00' QUE CHAIN FOR ERASE REQUESTS @VA03358 01659000 DMKIOESQ DC F'00' QUEUE CHAIN FOR UPDATE REQUESTS @VA03757 01660000 DMKIOEVQ DC F'00' REC. QUE CHAIN FOR SVC76 RECORDS @VA03358 01661000 DMKIOEIR DC F'00' PTR. TO INTENSIVE RECORDING BLOCK@VA03358 01662000 DMKIOEEP DC X'000000' ERROR RECORDING CCP (CYL+PAGE) @V5088AA 01663000 DMKIOETY DC X'00' SYSRES DEV TYPE (USED FOR PAGING)@VA03358 01664000 DMKIOEHS DC X'00000000' ADDR OF 1ST ERROR RECORD (CCPD)@V5088AA 01665000 * OR PLACE WHERE IT SHOULD BE @V5088AA 01666000 * WRITTEN IF NONE IS THERE NOW @V5088AA 01667000 * (LOGREC HDRSTART VALUE) @V5088AA 01668000 DMKIOECT DC X'0000' NUMBER OF ERROR RECORDING CYLS @V5088AA 01669000 DMKIOEFR DC X'00' INDICATION OF WHETHER FRAMES @V5088AA 01670000 * EXIST ON ERROR RECORDING CYLS 01671000 DMKIOEMX DC X'00' NO. OF PAGES (MAX) ON A CYLINDER @VA03358 01672000 DMKIOENI DC X'00' NO. OF PAGES (90% FULL) ON A CYL.@VA03358 01673000 DMKIOERP DC X'00' RECORDING IN PROGRESS FLAG @VA03358 01674000 DMKIOEES DC X'00' RECORDING AREA FULL FLAG @V5088AA 01675000 DMKIOEIF DC X'00' INFOFLAG @VA10241 01675100 DMKIOECE DC H'00' CECYL @VA10241 01675200 DC X'01' CEPAGE @VA10241 01675300 CHECKER DC X'00' USE FOR INTENSIVE RECORDING @VA03358 01676000 CORRCNT DC X'00' CORRELATION NO. FOR 3211 RECORDS @VA03358 01677000 * AND 3203 RECORDS 01678000 P3211 DC X'1042' 3211 PRINTER @VA03358 01679000 P3203 DC X'1043' 3203 PRINTER @V386298 01680000 OBRKEY DC X'306640' OBR-CLASS/SYSTEM/REL. NUMBER @VA09371 01681000 MDRKEY DC X'916640' MDR-CLASS/SYSTEM/REL. NUMBER @VA09371 01682000 BITABL DC X'8040201008040201' MASK TABLE FOR INTENSIVE REC@VA03358 01683000 SPACE 1 01684000 EJECT 01685000 LTORG @VA03358 01686000 EJECT 01687000 COPY OBRRECN @VA03358 01688000 COPY SDRBLOK @VA03757 01689000 COPY TNSREC @VA03358 01690000 COPY EQU @VA03358 01691000 COPY RBLOKS @VA03358 01692000 COPY SAVE @VA03358 01693000 COPY IOBLOKS @VA03358 01694000 COPY IOER @VA03757 01695000 SPACE 01696000 COPY ERRBLOK @VA03757 01697000 SPACE 01698000 COPY VMBLOK @VA03358 01699000 COPY DEVTYPES @VA03358 01700000 PSA @VA03358 01701000 END 01702000