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