CCH TITLE 'DMKCCH (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
*. 00003000
*MODULE NAME 00004000
* 00005000
* DMKCCH 00006000
* 00007000
*FUNCTION - 00008000
* 00009000
* THE CHANNEL CHECK HANDLER FUNCTIONS WITH THE I/O INTERRUPT 00010000
* HANDLER TO SCHEDULE A DEVICE DEPENDENT ERROR RECOVERY 00011000
* PROCEDURE WHEN A CHANNEL DATA CHECK,A CHANNEL 00012000
* CONTROL CHECK,OR AN INTERFACE CONTROL CHECK IS DETECTED. 00013000
* 00014000
*ATTRIBUTES- RESIDENT,SERIALLY REUSABLE,CALLED BY DMKIOS 00015000
* 00016000
* 00017000
*ENTRY POINTS - 00018000
* -DMKCCHNT-ENTRY POINT FROM DMKIOINT WHEN A CHANNEL CHECK IS 00019000
* FOUND ON AN I/O INTERRUPT 00020000
* 00021000
* 00022000
* -DMKCCHIS-ENTRY FROM DMKIOS WHEN A CHANNEL CHECK IS FOUND ON 00023000
* A CSW STORED CONDITION AFTER A SIO 00024000
* 00025000
* -DMKCCHRT-ENTRY FROM DMKIOE TO ALLOW ERROR MESSAGES TO BE 00026000
* PRINTED. 00027000
* 00028000
* -DMKCCHRF-ENTRY FROM DMKDSP, DMKVIO AND DMKVSI WHEN REFLECTING 00029000
* A CHANNEL CHECK. 00030000
* 00031000
*ENTRY CONDITIONS- 00032000
* 00033000
* -FROM DMKIOECC-GPR 15 NOT ZERO IF ERROR WAS NOT RECORDED 00034000
* 00035000
* -FROM DMKINT GPR 7= ADDR OF RCUBLOK 00036000
* 00037000
* GPR 8= ADDR OF RDEVBLOK 00038000
* 00039000
* GRP 6= ADDR OF RCHBLOK 00040000
* 00041000
* GPR 4-5= CSW 00042000
* 00043000
* GPR 3= INTERRUPTING DEVICE ADDRESS 00044000
* 00045000
* -FROM DMKIOS GRP 10 = IOBLOK ADDRESS 00046000
* 00047000
* 00048000
*EXIT CONDITIONS - 00049000
* TO DMKIOSIN - IF CHANNEL ERROR IS RETRYABLE 00050000
* 00051000
* DISABLED WAIT STATE IF ERROR IS CATASTROPHIC 00052000
* 00053000
* 00054000
*CALLS TO OTHER ROUTINES- 00055000
* -DMKIOECC TO RECORD ERROR 00056000
* -DMKFREE TO GET STORAGE FOR IOERBLOK AND ERROR RECORD. 00057000
* -DMKSCNRU TO GET DEVICE BLOCKS. 00058000
* -DMKQCNWT TO WRITE CONSOLE MESSAGES. 00059000
* -DMKCVTBH TO CONVERT OPERATOR MESSAGES. 00060000
* -DMKFRET TO RETURN ERROR RECORD TO FREE STORAGE 00061000
* -DMKSCNRD TO GET REAL DEVICE ADDRESS (CCU) 00062000
* 00063000
* 00064000
*EXTERNAL REFERENECS - 00065000
* DMKSYSCK - ADDRESS OF TOD CLOCK FIELD 00066000
* 00067000
* 00068000
*TABLES AND WORK AREAS - 00069000
* MCHAREA, CCHREC, RCHBLOK, RCUBLOK AND RDEVBLOK 00070000
* 00071000
* 00072000
*REGISTER USEAGE- 00073000
* GPR 0= PSA BASE 00074000
* GPR 0= LENGTH OF CHANNEL CHECK RECORD 00075000
* GPR 1= PARAMETER 00076000
* GPR 2=SCRATCH 00077000
* GPR 3=INTERNAL SWITCHES 00078000
* GPR 4= IOERBLOK BASE 00079000
* GPR 5= SCRATCH 00080000
* GPR 6= RCHBLOK BASE 00081000
* GPR 7= RCUBLOK BASE 00082000
* GPR 8= RDEVBLOK BASE 00083000
* GPR 9= CHANNEL CHECK RECORD BASE 00084000
* GPR 10= IOBLOK BASE 00085000
* GPR 12= DMKCCH BASE 00086000
* GPR 13= SAVEAREA BASE 00087000
* GPR 14= SCRATCH 00088000
* GPR 15= SCRATCH 00089000
* 00090000
* 00091000
*NOTES- 00092000
* WILL SUPPORT SYSTEM/370 MODEL 135, 138, 145, 148, 155-2, 00093000
* 158, 158-2, 165-2, 168, 3033,3032 AND 3031. THERE IS ALSO 00094100
* SUPPORT FOR THE 4331/4341 PROCESSORS. 00094200
* 00095000
* 00096000
*OPERATION - DMKCCHNT AND DMKCCHIS. 00097000
* 00098000
* 1.CONTROL IS PASSED TO DMKCCH AFTER EITHER A SIO WITH FAILING 00099000
* STATUS STORED, OR AN I/O INTERRUPT THAT REFLECTS CHANNEL 00100000
* CONTROL CHECK,INTERFACE CONTROL CHECK, OR CHANNEL DATA 00101000
* CHECK HAS OCCURED. 00102000
* 00103000
* 2.IF RDEVBLOK AND IOBLOK EXIST - 00104000
* DMKCCH WILL BUILD AN IOERBLOK TO BE USED BY THE DEVICE 00105000
* DEPENDENT ERP'S TO DETERMINE IF RECOVERY IS POSSIBLE FOR 00106000
* CP INITIATED I/O EVENTS. I/O EVENTS ASSOCIATED WITH A VIRTUAL 00107000
* USER THAT RESULT IN A CHANNEL ERROR WILL BE REFLECTED TO 00108000
* THAT VIRTUAL MACHINE. THE WILL ENABLE THE VIRTUAL MACHINE 00109000
* TO DO ITS OWN RECOVERY FROM CHANNEL CHECKS. 00110000
* 00111000
* 3 AN EXAMINATION OF THE CHANNEL STATUS WORD AND EXTENDED 00112000
* CHANNEL STATUS WORD WILL BE PERFORMED TO DETERMINE IF THE 00113000
* CHANNEL HAS BEEN RESET OR IF THE RESET CODES ARE INVALID; 00114000
* THE CHANNEL STATUS WORD AND EXTENDED CHANNEL STATUS 00115000
* WORD WILL ALSO BE EXAMINED TO SEE IF AN INTERFACE 00116000
* HANG-UP (INTERFACE INOPERATIVE) HAS OCCURRED. 00117000
* IF ANY OF THESE CONDITIONS IS PRESENT A MESSAGE IS 00118000
* SENT TO THE OPERATOR AND A WAIT STATE IS PSW IS LOADED. IF 00119100
* THIS IS A 4331/4341 PROCESSOR, THERE WILL NOT BE AN I/O FIXED 00119200
* OR EXTENDED LOGOUT FOR A CHANNEL CHECK. THERE WILL BE A 00119300
* LIMITED CHANNEL LOGOUT. THERE ALSO WILL NOT BE AN IOEL 00119400
* POINTER(LOCATION 173-175). 00119500
* 00120000
* 4.AN ERROR RECORD WILL BE CONSTRUCTED WHICH WILL CONTAIN THE 00121000
* EXTENDED CHANNEL STATUS WORD,THE CHANNEL LOGOUT,AND UP 00122000
* TO EIGHT ACTIVE UNITS IN USE AT THE TIME OF ERROR ON THE 00123000
* DAMAGED CHANNEL.DMKIOECC WILL USE THIS INFORMATION TO 00124000
* BUILD THE CHANNEL CHECK RECORD. 00125000
* 00126000
* 5 THE DEVICE DEPENDENT ERP'S WILL USE THE SEQUENCE 00127000
* CODE AND RETRY CODE PORTION OF THE ECSW IN THE IOERBLOK 00128000
* TO DETERMINE CORRECT RETRY SEQUENCES. 00129000
* 00130000
* 00131000
*OPERATION - DMKCCHRT. 00132000
* 1. IF THE ERROR IS A CHANNEL CONTROL CHECK OR INTERFACE 00133000
* CONTROL CHECK, CALL DMKQCNWT TO SEND ERROR MESSAGE 00134000
* DMKCCH601I OR DMKCCH602I TO THE SYSTEM OPERATOR. 00135000
* 2. IF THE ERROR WAS ASSOCIATED WITH A VIRTUAL MACHINE, AQUIRE 00136000
* STORAGE FOR A NEW IOERBLOK, COPY THE OLD IOERBLOK TO THE NEW 00137000
* IOERBLOK AND BUILD THE CCR EXTENTION. 00138000
* 3. RETURN TO THE CALLER. 00139000
* 00140000
*MESSAGES- 00141000
* DMKCCH601I CHANNEL CONTROL CHECK DEV XXX; USER USERID.. 00142000
* DMKCCH602I INTERFACE CONTROL CHECK DEV XXX; USER USERID.. 00143000
* DMKCCH603W CHANNEL ERROR; RUN SEREP, RESTART SYSTEM 00144000
* DMKCCH604I CHANNEL ERROR DEV XXX ; USER XXXXXXXX MACHINE RESET 00145000
* DMKCCH605I CHANNEL CHECK RECORDING FAILURE 00146000
* 00147000
********************************************************************** 00148000
EJECT 00149000
COPY OPTIONS @VA01077 00150000
EJECT 00151000
COPY LOCAL @VA01077 00152000
EJECT 00153000
DMKCCH CSECT 00154000
SPACE 00155000
EXTRN DMKIOECC 00156000
EXTRN DMKSCNRU 00157000
EXTRN DMKCVTBH 00158000
EXTRN DMKSYSCK 00159000
ENTRY DMKCCHCF 00160000
ENTRY DMKCCHMX 00161000
ENTRY DMKCCHSZ 00162000
EXTRN DMKSYSRM @VA01337 00163000
ENTRY DMKCCH60 00164000
EXTRN DMKSCNRD @VA01081 00165000
EXTRN DMKQCNWT @V407510 00166000
EXTRN DMKMCHST @V407510 00167000
EXTRN DMKOPRWT @VA10837 00167010
SPACE 3 00168000
USING PSA,R0 00169000
USING RCHBLOK,R6 00170000
USING RCUBLOK,R7 00171000
USING RDEVBLOK,R8 00172000
USING IOBLOK,R10 00173000
USING SAVEAREA,R13 00174000
SPACE 00175000
SPACE 00176000
DMKCCHIS RELOC 00177000
MVI ENTSW,SIOCCH SET ENTRY SWITCH FOR SIO ENTRY 00178000
LM R4,R5,IOBCSW GET THE FAILING CSW @VA01068 00179000
LH R3,IOBRADD GET THE DEVICE ADDRESS @VA01068 00180000
B FINDBLOK GO STORE THE DEVICE ADDRESS 00181000
DMKCCHNT RELOC 00182000
MVI ENTSW,INTERCCH SET ENTRY SWITCH FOR INTERRUPT ENTRY 00183000
SR R10,R10 CLEAR IOB POINTER @VA01337 00184000
FINDBLOK EQU * 00185000
STM R4,R5,CSW PUT BACK THE CSW @VA01068 00186000
STH R3,SIOADDR SAVE THE DEVICE ADDRESS @VA01068 00187000
TM CSW,X'04' IS LOGOUT PENDING ? 00188000
BZ CCHSCAN NO, GO GET DEVICE BLOCKS 00189000
OI ENTSW,TERMSYS SET SYSTEM TERMINATION FLAG 00190000
CCHSCAN EQU * 00191000
LR R1,R3 GET REAL DEVICE ADD. FOR DMKSCN @VA09029 00191500
CALL DMKSCNRU GET THE REAL CHANNEL, CONTROL UNIT AND 00192000
* DEVICE BLOCK ADDRESSES 00193000
STM R6,R8,RCHSAVE SAVE THE RCHBLOK, RCUBLOK AND RDEVBLOK 00194000
BNZ BULDREC GO BUILD RECORD IF ADDRESSES DON'T 00195000
* EXIST 00196000
OI ENTSW,DEVCCH INDICATE THE DEVICE BLOCK ADDRESS EXIST 00197000
ICM R10,15,RDEVAIOB GET THE I/O BLOCK ADDRESS 00198000
BZ BULDREC IF THE ADDRESS IS ZERO, GO BUILD 00199000
* CCH RECORD 00200000
OI ENTSW,IOBCCH INDICATE THE I/O BLOCK ADDRESS EXIST 00201000
BULDREC EQU * 00202000
SR R0,R0 CLEAR REGISTER @VA00881 00203000
ICM R0,3,DMKCCHMX GET THE LENGTH OF CCH RECORD @V5088AA 00204000
BZ CPTERM IF ZERO, GO TERMINATE SYSTEM 00205000
A R0,F7 PUT LENGTH ON A DOUBLEWORD @VA00881 00206000
* BOUNDARY 00207000
SRL R0,3 DIVIDE BY 8 00208000
ST R0,RECLENTH SAVE THE LENGTH OF THE CCH RECORD 00209000
CALL DMKFREE GO GET STORAGE 00210000
ST R1,RECADDR SAVE THE ADDRESS OF THE CCH RECORD 00211000
STM R4,R5,CSW RESTORE THE CSW @VA01068 00212000
LR R9,R1 SAVE THE CCH RECORD ADDRESS 00213000
USING CCHREC,R9 SETUP ADDRESSABILITY FOR CCH RECORD 00214000
XC CCRECTYP(CCHSIZE*8),CCRECTYP CLEAR CCH RECORD HEADER 00215000
MVC CCHREC(8),CCHCONST MOVE RECORD HEADER INTO RECORD 00216000
MVC CCCPUID(8),CPUID SAVE CPU ID NUMBER @V508690 00217000
L R2,CAW GET CHANNEL ADDRESS WORD @VA01337 00218000
LA R2,0(,R2) CLEAR HIGH ORDER BYTE @VA01337 00219000
TM ENTSW,INTERCCH IS THIS AN I/O INTERRUPT @VA01337 00220000
BZ CCHBYPAS NO, GO VALIDATE ADDRESS @VA01337 00221000
ICM R2,C7,CSW+1 GET THE CCW ADDRESS 00222000
BZ ADDMOVE IF ADDRESS IS ZERO, DON'T MOVE DATA 00223000
LA R2,0(R2) GET THE ADDRESS OF THE LAST CCW PLUS 8 00224000
S R2,F8 GET THE ADDRESS OF THE LAST CCW 00225000
BM ADDMOVE IF ADDRESS IS NEGATIVE, DON'T MOVE CCW 00226000
CCHBYPAS EQU * @VA01337 00227000
L R5,=A(DMKSYSRM) GET ADDRESS OF MAX. STORAGE @VA01337 00228000
L R5,0(,R5) GET MAX. SIZE OF REAL STORAGE @VA01337 00229000
CR R2,R5 IS THIS ADDRESS IN REAL STORAGE @VA01337 00230000
BNL ADDMOVE NO, GO MOVE IN FAILING CSW @VA01337 00231000
STC R2,FAILCSW SAVE LOW ORDER BYTE @VA01337 00232000
TM FAILCSW,X'07' IS THIS ADDR. ON DOUBLEWORD BDY @VA01337 00233000
BNZ ADDMOVE NO, GO MOVE IN FAILING CSW @VA01337 00234000
MVC FAILCCW,0(R2) SAVE FAILING CCW @VA01337 00235000
ADDMOVE EQU * @VA01337 00236000
MVC FAILCSW,CSW SAVE FAILING CSW @VA01337 00237000
LH R2,SIOADDR GET THE FAILING DEVICE ADDRESS 00238000
STCM R2,7,CCHCUA SAVE FAILING DEVICE ADDRESS @VA01068 00239000
SRL R2,8 GET THE CHANNEL NUMBER 00240000
IC R0,DMKCCHCF(R2) GET THE CHANNEL TYPE 00241000
STC R0,CCHANID SAVE THE CHANNEL TYPE IN RECORD 00242000
TM ENTSW,DEVCCH DOES THE REAL DEVICE BLOCK EXIST ? 00243000
BZ CCHIO NO, GO CHECK FOR I/O BLOCK 00244000
MVC CCDEVTYP(4),RDEVSTAT MOVE DEVICE DATA TO CCH @VA01068 00245000
* RECORD 00246000
CCHIO EQU * 00247000
MVC CCPROGID,CPEYED MOVE IN CP/370 IDENTIFICATION @VA01068 00248000
TM ENTSW,IOBCCH DOES THE I/O BLOCK EXIST ? 00249000
BZ RDEVBSY NO, GO TEST FAILING DEVICE 00250000
TM IOBFLAG,IOBCP WAS THIS A CP GENERATED @VA01077 00251000
BNZ RDEVBSY YES, GO TEST FAILING DEVICE @VA00881 00252000
L R14,IOBUSER GET THE USER'S VMBLOK ADDRESS 00253000
MVC CCPROGID,VMUSER-VMBLOK(R14) SAVE THE USER'S ID. 00254000
RDEVBSY EQU * 00255000
SR R4,R4 CLEAR ADDRESSABILITY REGISTER FOR 00256000
* THE I/O ERROR BLOCK 00257000
TM ENTSW,DEVCCH+IOBCCH DOES THE BLOCKS EXIST ? 00258000
BNO CCHDEPND NO, GO GET DEPENDENT ROUTINE 00259000
TM IOBSPEC,IOBTIO WAS ERROR ON TIO INSTRUCTION ? 00260000
BZ CCHHIOI NO, GO TEST FOR HIO INSTRUCTION 00261000
OI ENTSW,TIOCCH SET TIO INDICATOR 00262000
CCHHIOI EQU * 00263000
TM IOBSPEC,IOBHIO WAS ERROR ON HIO INSTRUCTION ? 00264000
BZ CCHIOERL NO, GO GET IOERBLOK LENGTH 00265000
OI ENTSW,HIOCCH SET HIO INDICATOR 00266000
CCHIOERL EQU * 00267000
LA R0,IOERSIZE+1 GET THE DOUBLEWORD LENGTH OF THE I/O 00268000
* ERROR BLOCK 00269000
LM R4,R5,CSW GET THE CSW INFORMATION @VA01068 00270000
CALL DMKFREE GO GET THE STORAGE 00271000
STM R4,R5,CSW RESTORE THE CSW @VA01068 00272000
LR R4,R1 SAVE THE I/O ERROR BLOCK ADDRESS 00273000
ICM R1,15,IOBIOER GET IOERBLOK ADDRESS @VA01337 00274000
ST R4,IOBIOER SAVE NEW IOERBLOK ADDRESS @VA01337 00275000
BZ CCIOERBK IF ZERO, GO SET UP IOERBLOK @VA01337 00276000
LA R0,IOERSIZE GET SIZE IN DOUBLEWORDS @VA01337 00277000
AH R0,IOEREXT-IOERBLOK(R1) GET EXTENSION @VA01337 00278000
CALL DMKFRET FRET IOERBLOK @VA01337 00279000
CCIOERBK EQU * @VA01337 00280000
USING IOERBLOK,R4 SETUP ADDRESSABILITY FOR I/O ERROR BLOCK 00281000
XC IOERBLOK(IOERSIZE*8),IOERBLOK CLEAR THE I/O ERROR BLOCK 00282000
MVI IOEREXT+1,X'01' PUT IN LENGTH OF EXTENSION 00283000
MVC IOERCSW,FAILCSW SAVE CSW IN I/O ERROR BLOCK @VA01068 00284000
MVC IOERCCRL(8),RECLENTH SAVE THE CCH RECORD LENGTH 00285000
* AND ADDRESS 00286000
CCHDEPND EQU * 00287000
USING MCHAREA,R5 SETUP ADDRESSABILITY FOR MCH AREA 00288000
L R5,AMCHAREA GET PTR TO MCH COMMON AREA @V407510 00289000
L R15,DMK2880 GET THE ADDRESS OF THE 2880 MODULE 00290000
LA R0,CCHSIZE GET THE SIZE OF THE CCH RECORD IN 00291000
* DOUBLEWORDS 00292000
MVC IGPRGFLG(1),ENTSW GET THE TYPE OF CONDITION @VA01068 00293000
NI IGPRGFLG,CCHSIOB+CCHINTB+CCHTIO+CCHHIO CLEAR @VA01068 00294000
* FLAGS 00295000
TM IGPRGFLG,CCHTIO+CCHHIO IS TIO OR HIO INDICATED ?@VA01068 00296000
BZ CCHBEGIN NO, GO TEST FOR CHANNEL TYPE @VA01068 00297000
NI IGPRGFLG,X'FF'-CCHSIOB CLEAR THE SIO INDICATOR @VA01068 00298000
CCHBEGIN EQU * @VA01068 00299000
OI IGPRGFLG,CCHSNSB INDICATE THE SENSE DATA IS @VA01068 00300000
* STORED 00301000
OI IGVALIDB,CCHRCV+CCHCAV INDICATE THE RETRY CODE @VA01068 00302000
* AND CHANNEL ADDRESS ARE VALID 00303000
CLI CCHANID,X'08' IS THIS A 2880 CHANNEL TYPE ? 00304000
MVI CCHCLOGL+1,X'70' SET UP LOG LENGTH @V508690 00305000
BE CCHEXIT1 YES, GO GET DEPENDENT MODULE 00306000
CLI CCHANID,X'07' IS THIS A 2880 CHANNEL TYPE ? 00307000
BE CCHEXIT1 YES, GO GET DEPENDENT MODULE 00308000
MVI CCHCLOGL+1,X'00' SET UP LOG LENGTH @V508690 00309000
TM FAILCSW+5,IFCC+CCC IS THIS A CHANNEL DATA CHECK @VA01068 00310000
BZ RCUSCN1 YES, GO GET EIGHT BUSY UNITS 00311000
CLI MCHMODEL,MODEL165 IS THIS A MODEL 165 OR 168 ? 00312000
BNE INTEGRAT NO, GO TO INTEGRATED CHANNEL SUPPORT 00313000
MVI CCHCLOGL+1,X'18' SET UP LOG LENGTH @V508690 00314000
L R15,DMKCCH60 GET THE ADDRESS OF THE 2880 MODULE 00315000
CLI CCHANID,X'05' IS THIS A 2860 CHANNEL TYPE ? 00316000
BE CCHEXIT1 YES, GO GET DEPENDENT MODULE 00317000
L R15,DMK2870 GET THE ADDRESS OF THE 2870 MODULE 00318000
CLI CCHANID,X'06' IS THIS A 2870 CHANNEL TYPE ? 00319000
BNE CCHERROR NO, GO SET SYSTEM TERMINATION 00320000
********************************************************************** 00321000
CCHEXIT1 EQU * 00322000
LTR R15,R15 IS THERE AN ADDRESS FOR 00323000
* THE DEPENDENT MODULE ? 00324000
BZ CPTERM NO, GO TERMINATE THE OPERATING SYSTEM 00325000
BALR R14,R15 GO TO DEPENDENT MODULE 00326000
TM ENTSW,TERMSYS IS SYSTEM TERMINATION ON ? 00327000
BO RCUSCN1 YES, GO GET EIGHT BUSY UNITS 00328000
TM FAILCSW+5,CDC IS THIS A CHANNEL DATA CHECK ? @VA01068 00329000
BO RCUSCN1 YES, GET EIGHT BUSY UNITS @VA01337 00330000
TM IGTERMSQ,COMPSYS IS TERMINATION CODE = 3 FOR @VA01077 00331000
* SYSTEM RESET 00332000
BO CCHERROR YES, GO SET TERMINATION FLAG @VA01077 00333000
LTR R4,R4 IS THERE AN IOERBLOK ADDRESS ? 00334000
BZ RCUSCN1 NO, GO GET EIGHT BUSY UNITS 00335000
MVC IOERECSW(4),FAILECSW MOVE FAILING ECSW INTO @VA01077 00336000
* I/O ERROR BLOCK 00337000
B RCUSCN1 GO GET EIGHT BUSY UNITS 00338000
********************************************************************** 00339000
INTEGRAT EQU * 00340000
SR R2,R2 CLEAR REG 2 TO USE AS INDICATOR @VA08513 00340100
TM ECSWLOG,X'80' IS LIMITED CHANNEL LOGOUT VALID @VA01337 00341000
BO CCHSYSM NO, SET SYSTEM TERMINATION FLAG @VA01337 00342000
TM ECSWLOG+1,X'01' TEST THE 'LOG STORED' BIT IN LCL@VA08513 00342100
BZ CCHRESET EITHER LOG WAS NOT STORED OR @VA08513 00342200
* THIS CPU DOES NOT SET BIT 15 IN LCL 00342300
LA R2,1 SET AN INDICATION OF LOG STORED @VA08513 00342400
CCHRESET TM ECSWLOG+3,COMPSYS IS CHANNEL RESET? @VA08513 00343000
BO CCHSYSM GO SET SYSTEM TERMINATION @V5088AA 00344000
TM FAILCSW+5,IFCC INTERFACE CONTROL CHECK? @V5088AA 00345000
BZ CCHIOER NO, TEST FOR IOERBLOK @V5088AA 00346000
TM ECSWBYT3,CCHIOH I/O INTERFACE HANG-UP? @V5088AA 00347000
BNO CCHIOER NO, TEST FOR IOERBLOK @V5088AA 00348000
TM RCHSTAT,RCHDED IS THE CHANNEL DEDICATED ?? @V508690 00349000
BO CCHIOER YES, THEN REFLECT ERROR TO USER @V508690 00350000
CCHSYSM EQU * 00351000
OI ENTSW,TERMSYS SET SYSTEM TERMINATION FLAG 00352000
CCHIOER EQU * 00353000
MVC FAILECSW+1(3),ECSWLOG+1 FAILING ECSW INTO @VA01337 00354000
* CCH RECORD 00355000
LTR R4,R4 IS THERE AN IOERBLOK ADDRESS 00356000
BZ CCHFAIL NO, GO GET FAILING ECSW 00357000
MVC IOERECSW(4),ECSWLOG MOVE IN ECSW @VA09068 00358100
* CCH RECORD 00359000
CCHFAIL EQU * 00360000
LA R0,CCHSIZE1 GET THE SIZE OF CCH RECORD @VA01068 00361000
A R0,F7 PUT LENGTH IN @VA01068 00362000
SRL R0,3 DOUBLEWORDS @VA01068 00363000
MVC CCHADDR+2(2),SIOADDR MOVE IN UNIT ADDRESS @VA01068 00364000
* BY INTEGRATED CHANNEL 00365000
MVI ECSWLOG,X'FF' INITIALIZE THE ECSW @VA01337 00366000
CLI MCHMODEL,MOD4331 MODEL 4331/4341? @V60A6B6 00366100
BE RCUSCN1 THEN IOELPNTR MAY BE INVALID. @V60A6B6 00366200
ICM R1,15,IOELPNTR GET ADDRESS OF I/O EXTENDED LOGOUT 00367000
* AREA 00368000
BZ RCUSCN1 IF ADDRESS IS ZERO, GO INDICATE 00369000
* SIZE OF CCH RECORD 00370000
LTR R2,R2 WAS BIT 15 OF LCL (LOG STORED) =1@VA08513 00370100
BNZ GOODIOEL IF SO, DONT CHECK IOEL FOR X'FF'S@VA08513 00370200
CLC 0(4,R1),FFS IS THE LOGOUT AREA VALID ? 00371000
BE RCUSCN1 NO, GO INDICATE SIZE OF CCH RECORD 00372000
GOODIOEL SR R2,R2 CLEAR WORK REGISTER @VA08513 00373000
ICM R2,3,DMKCCHSZ GET THE SIZES OF THE I/O EXT. @V5088AA 00374000
* LOGOUT AREA 00375000
BZ RCUSCN1 IF ZERO, GO INDICATE CCH RECORD SIZES 00376000
CLI MCHMODEL,MODEL145 IS THIS A MODEL 145/148? @V386298 00377000
BNE CCHMVC1 NO, GO MOVE LOGOUT AREA INTO RECORD 00378000
CLI CCHANID,X'01' IS THIS A BYTE MPX CHANNEL ? 00379000
BNE CCHMVC1 NO, GO MOVE LOGOUT AREA INTO RECORD 00380000
TM 0(R1),X'80' DOES LOGOUT APPLIES TO THIS ERROR@VA01068 00381000
BZ RCUSCN1 NO, GO SAVE CCH RECORD LENGTH @VA01068 00382000
LA R2,76 GET SIZE OF I/O EXTENDED LOGOUT @VA01068 00383000
* FOR CHANNEL CONTROL CHECK 00384000
TM FAILCSW+5,IFCC IS THIS INTERFACE CONT CHECK ? @VA01068 00385000
BZ CCHMVC1 NO, GO GET THE SIZES OF THE CCH RECORD 00386000
LA R2,36 GET SIZE OF I/O EXTENDED LOGOUT @VA01068 00387000
* FOR INTERFACE CONTROL CHECK 00388000
CCHMVC1 EQU * 00389000
LA R0,CCHSIZE1(R2) GET SIZE OF CCH RECORD @VA01068 00390000
A R0,F7 PUT LENGTH IN @VA01068 00391000
STCM R2,B'0011',CCHCLOGL SAVE SIZE OF LOGOUT @V508690 00392000
SRL R0,3 DOUBLEWORDS @VA01068 00393000
LR R14,R4 TEMPORARY SAVE OF IOERBLOK @ @V5088AA 00394000
LR R15,R2 TEMPORARY SAVE OF IOEL LENGTH @V5088AA 00395000
LR R3,R2 LENGTH TO MOVE @V5088AA 00396000
LR R5,R3 LENGTH TO MOVE @V5088AA 00397000
LR R4,R1 'FROM' ADDRESS (IOEL) @V5088AA 00398000
LA R2,CCHLOG45 'TO' ADDRESS (CCH RECORD) @V5088AA 00399000
MVCL R2,R4 MOVE IOEL TO CCH RECORD @V5088AA 00400000
LR R2,R1 'TO' ADDRESS (IOEL) @V5088AA 00401000
LR R3,R15 LENGTH OF IOEL FOR MOVE @V5088AA 00402000
LR R4,R2 'FROM' ADDRESS @V5088AA 00403000
L R5,F255 PAD CHARACTER @V5088AA 00404000
SLL R5,24 PAD CHAR. OF X'FF', LENGTH=0 @V5088AA 00405000
MVCL R2,R4 PROPAGATE FF'S THRUOUT IOEL @V5088AA 00406000
LR R4,R14 RESTORE IOERBLOK BASE ADDRESS @V5088AA 00407000
B RCUSCN1 GO SAVE THE CCH RECORD LENGTH 00408000
********************************************************************** 00409000
CCHERROR EQU * 00410000
OI ENTSW,TERMSYS SET SYSTEM TERMINATION FLAG 00411000
********************************************************************** 00412000
RCUSCN1 EQU * 00413000
CALL DMKFREE GET THE STORAGE FOR THE CCH @VA00881 00414000
* RECORD 00415000
LTR R4,R4 IS THERE AN IOERBLOK ? @VA00881 00416000
BZ RMSREC NO, GO COPY CCH RECORD INTO NEW @VA00881 00417000
* STORAGE 00418000
STM R0,R1,IOERCCRL SAVE SIZE AND ADDRESS OF CCH @VA00881 00419000
* RECORD 00420000
RMSREC EQU * @VA00881 00421000
LR R5,R0 GET THE SIZE OF THE CCH RECORD @VA00881 00422000
SLL R5,3 GET THE LENGTH IN BYTES FOR CCH @VA00881 00423000
* RECORD 00424000
LR R3,R5 GET THE LENGTH OF CCH RECORD @VA00881 00425000
LR R2,R1 GET THE ADDRESS OF THE NEW CCH @VA00881 00426000
* RECORD 00427000
L R4,RECADDR GET THE ADDRESS OF THE OLD CCH @VA00881 00428000
* RECORD 00429000
MVCL R2,R4 MOVE THE CCH RECORD TO NEW @VA00881 00430000
* LOCATION 00431000
LR R2,R0 GET THE SIZE OF THE NEW CCH @VA00881 00432000
* RECORD 00433000
LR R3,R1 GET THE ADDRESS OF THE NEW CCH @VA00881 00434000
* RECORD 00435000
LR R9,R3 GET THE ADDRESS OF THE NEW CCH @VA00881 00436000
* RECORD 00437000
LM R0,R1,RECLENTH GET THE SIZE AND ADDRESS OF @VA00881 00438000
* THE OLD CCH RECORD 00439000
CALL DMKFRET RELEASE STORAGE FOR OLD CCH @VA00881 00440000
* RECORD 00441000
STM R2,R3,RECLENTH SAVE THE SIZE AND ADDRESS OF THE @VA00881 00442000
* NEW CCH RECORD 00443000
RCUSCN2 EQU * 00444000
SR R1,R1 CLEAR SWITCH REGISTER 00445000
LTR R6,R6 IS THERE AN RCHBLOK ADDRESS ? 00446000
BM SCNEND NO, GO TEST FOR SYSTEM TERMINATION 00447000
TM ENTSW,DEVCCH DOES THE DEVICE ADDRESS EXIST ? 00448000
BZ RCUSCN NO, GO SETUP FOR SCAN 00449000
TM RDEVSTAT,RDEVBUSY WAS FAILING DEVICE ACTIVE ? 00450000
BZ RCUSCN NO, GO SETUP FOR SCAN 00451000
MVC FAILADD(2),SIOADDR SAVE THE FAILING DEVICE ADDRESS 00452000
LA R1,2 UPDATE THE SAVE AREA FOR UNITS BY 1 00453000
RCUSCN EQU * 00454000
LA R2,2 INITIALIZE THE INCREMENT LENGTH 00455000
LR R4,R2 UPDATE REGISTER 4 00456000
LA R3,62 INITIALIZE THE COUNT 00457000
ST R11,FALADDPT SAVE THE CONTENT OF REGISTER 11 00458000
SR R11,R11 CLEAR REGISTER 11 00459000
RCCUSCN EQU * 00460000
LH R7,RCHCUTBL(R11) GET THE CONTROL UNIT ADDRESS 00461000
LTR R7,R7 IS THERE A CONTROL UNIT ADDRESS ? 00462000
BM RCUSCNI NO, GO GET NEXT CONTROL UNIT 00463000
A R7,ARIOCU GET ADDRESS OF RCUBLOK 00464000
SR R14,R14 CLEAR REGISTER 14 FOR INDEX 00465000
LA R5,30 INITIALIZE COUNT REGISTER 00466000
RDEVSCN EQU * 00467000
LH R8,RCUDVTBL(R14) GET THE DEVICE ADDRESS 00468000
LTR R8,R8 IS THERE A DEVICE ADDRESS ? 00469000
BM RDVSCNI NO, GO GET NEXT DEVICE ADDRESS 00470000
SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00471000
A R8,ARIODV GET ADDRESS OF RDEVBLOK 00472000
C R8,RDEVSAVE IS THIS THE FAILING DEVICE ADDRESS 00473000
BE RDVSCNI YES, DON'T PUT ADDRESS IN RECORD 00474000
TM RDEVSTAT,RDEVBUSY WAS THE DEVICE BUSY ? 00475000
BZ RDVSCNI NO, GO GET NEXT DEVICE ADDRESS 00476000
FOUNDUM EQU * 00477000
C R1,F16 ARE THERE EIGHT CONTROL UNITS SAVE ? 00478000
BE SCNEND1 YES, GO GET DEVICE ADDRESS 00479000
LH R0,RDEVADD GET DEVICE ADDRESS 00480000
LH R15,RCUADD GET CONTROL UNIT ADDRESS 00481000
OR R15,R0 GET THE 00482000
LH R0,RCHADD CONTROL UNIT ADDRESS 00483000
OR R15,R0 * 00484000
STH R15,FAILADD(R1) SAVE UNIT ADDRESS IN CCH RECORD 00485000
LA R1,2(R1) UPDATE UNIT ADDRESS COUNT 00486000
RDVSCNI EQU * 00487000
BXLE R14,R4,RDEVSCN GET THE NEXT DEVICE ADDRESS AND BRANCH 00488000
RCUSCNI EQU * 00489000
BXLE R11,R2,RCCUSCN GET THE NEXT CONTROL UNIT AND BRANCH 00490000
SCNEND1 EQU * 00491000
L R11,FALADDPT RESTORE THE CONTENT OF REGISTER 11 00492000
SCNEND EQU * 00493000
TM ENTSW,TERMSYS IS SYSTEM TERMINATION INDICATED ? 00494000
BO CCHRESTO YES, RESTORE I/O EXTENDED LOGOUT AREA 00495000
* FOR SEREP 00496000
LM R7,R8,RCUSAVE GET THE DEVICE AND CONTROL UNIT ADDRS. 00497000
TM ENTSW,DEVCCH+IOBCCH DOES THE ADDRESSES EXIST ? 00498000
BNO CCHIOE NO, GO PUT CCH RECORD OUT ON 00499000
* LOGREC 00500000
LM R4,R5,FAILCSW GET THE CSW FOR RESTORE @VA01068 00501000
TM ENTSW,INTERCCH INTERRUPT ENTRY @VA01068 00502000
BO RESTDEV YES, RESTORE DEVICE AND CSW @VA01068 00503000
B RESTCSW @VA01068 00504000
********************************************************************* 00505000
********************************************************************* 00506000
SPACE 2 00507000
CCHIOE EQU * IF NO RDEV OR NO IOBLOK, COME HERE TO RECORD CHL CHK 00508000
LM R4,R5,FAILCSW GET THE CSW FOR RESTORE @VA01068 00509000
BAL R3,MESSAGE GO WRITE THE MESSAGE @VA01068 00510000
L R7,RECLENTH GET CCH RECORD LENGTH 00511000
L R6,RECADDR GET THE ADDRESS OF THE CCH RECORD AREA 00512000
SR R0,R0 CLEAR RETURN CODE REGISTER @VA03358 00513000
CALL DMKIOECC,AFFINITY @V407510 00514000
LTR R0,R0 WAS THE RECORDING SUCCESSFUL 00515000
BZ MSGGEN YES, GO PUT OUT MESSAGE 00516000
LA R0,MSG15L GET THE LENGTH OF THE MESSAGE 00517000
LA R1,MSG15M GET THE ADDRESS OF THE ERROR MESSAGE 00518000
CALL DMKQCNWT,PARM=OPERATOR+ALARM+NORET,AFFINITY @V407510 00519000
MSGGEN EQU * 00520000
TM ENTSW,SIOCCH START I/O ENTRY @VA01068 00521000
BO RESTCSW YES, JUST RESTORE THE CSW @VA01068 00522000
RESTDEV LH R2,SIOADDR GET THE DEVICE ADDRESS @VA01068 00523000
STH R2,INTTIO RESTORE IT @VA01068 00524000
RESTCSW EQU * @VA01068 00525000
STM R4,R5,CSW RESTORE THE CSW FOR IOS @VA01068 00526000
EXIT RETURN TO IOS 00527000
********************************************************************* 00528000
EJECT 00529000
CCHRESTO EQU * 00530000
MVC ECSWLOG(4),FAILECSW RESTORE ECSW INFORMATION @VA01337 00531000
SR R2,R2 CLEAR REGISTER 2 00532000
ICM R2,3,DMKCCHSZ GET THE I/O EXT. LOGOUT LENGTH @V5088AA 00533000
BZ CPTERM IF ZERO, GO PUT SYSTEM DOWN 00534000
BCTR R2,R0 SUBTRACT ONE FROM THE LENGTH 00535000
ICM R1,15,IOELPNTR GET THE POINTER TO THE I/O 00536000
* EXTENDED LOGOUT 00537000
BZ CPTERM IF ZERO, GO PUT SYSTEM DOWN 00538000
SR R3,R3 CLEAR REGISTER 3 FOR INDEX 00539000
L R5,AMCHAREA GET PTR TO MCH COMMON AREA @V407510 00540000
ICM R3,1,MCHMODEL GET THE MODEL ID. 00541000
B CCHSEREP(R3) BRANCH TO THE CORRECT MODEL SUPPORT 00542000
CCHSEREP EQU * 00543000
B CPTERM GO PUT THE SYSTEM DOWN 00544000
B LOGOUT RESTORE LOGOUT AREA 00545000
B LOGOUT RESTORE LOGOUT AREA FOR 145 00546000
B CPTERM GO PUT SYSTEM DOWN 00547000
B CCHCHAN GO CHECK CHANNEL ID FOR 165/168 00548000
B CPTERM GO PUT THE SYSTEM DOWN FOR 3031/ @V5088AA 00549000
* 3032/3033 PROCESSORS 00550000
LOGOUT EQU * 00551000
EX R2,MVCLOG RESTORE I/O EXTENDED LOGOUT AREA 00552000
B CPTERM GO PUT SYSTEM DOWN 00553000
SPACE 2 00554000
********************************************************************* 00555000
MVCLOG MVC 0(0,R1),CCHLOG45 MOVE I/O EXTENDED LOGOUT 00556000
* INTO STORAGE 00557000
MVCLOG1 MVC 0(0,R1),CCHLOG80 MOVE I/O EXTENDED LOGOUT 00558000
* FOR STANDALONE CHANNEL INTO STORAGE 00559000
********************************************************************* 00560000
SPACE 2 00561000
CCHCHAN EQU * 00562000
CLI RECLENTH+3,X'18' IS THIS A 2880 CHANNEL ? @VA00881 00563000
BE LOGOUT1 YES, GO RESTORE I/O EXTENDED LOGOUT 00564000
LA R1,304 ADDRESS OF THE I/O EXTENDED LOGOUT AREA 00565000
LA R2,23 THE LENGTH OF THE I/O EXTENDED LOGOUT 00566000
CLI RECLENTH+3,X'0D' IS THIS A 2860 OR 2870 @VA00881 00567000
* CHANNEL ? 00568000
BNE CPTERM NO, GO PUT SYSTEM DOWN 00569000
LOGOUT1 EQU * 00570000
EX R2,MVCLOG1 RESTORE I/O EXTENDED LOGOUT AREA 00571000
EJECT 00572000
********************************************************************* 00573000
* OPERATOR COMMUNICATION ROUTINE 00574000
********************************************************************* 00575000
SPACE 2 00576000
CPTERM EQU * 00577000
LH R2,SIOADDR GET THE ADDRESS OF THE DEVICE 00578000
STH R2,IOOPSW+2 SAVE THE DEVICE ADDRESS IN I/O OLD 00579000
* PSW 00580000
USING VMBLOK,R11 SETUP ADDRESSABILITY FOR VMBLOK 00582000
AIF (NOT &AP).CCHWFD @VA10837 00585010
SWTCH DS 0H SWITCH TO MAIN PROCESSOR @VA10837 00585020
TM APSTAT1,PROCIO MAIN PROCESSOR? @VA10837 00585030
BNO ATTTERM NO, BRANCH @VA10837 00585040
SIGNAL SSS STOP & STORE STATUS TO AP @VA10837 00585050
B CCHCONT @VA10837 00585060
ATTTERM DS 0H @VA10837 00585070
L R4,PREFIXA GET OWN PREFIX REG @VA10837 00585080
STM R0,R15,DUMPSAVE-PSA(R4) SAVE REGS FOR RESTART @VA10837 00585090
L R4,PREFIXB GET OTHER PREFIX REG @VA10837 00585100
MVC RSRTNPSW-PSA(,R4),RSRTMAIN RESTART NEW PSW @VA10837 00585110
SIGNAL SSS SIGNAL MAIN PROCESSOR TO STOP @VA10837 00585120
SIGNAL RESTART SIGNAL MAIN PROCESSOR TO RESTART @VA10837 00585130
SIGNAL STOP,CONTROL=AUTO SIGNAL SELF TO STOP @VA10837 00585140
MAINRSRT DS 0H RESTART ON MAIN PROCESSOR @VA10837 00585150
L R4,PREFIXA GET OWN PREFIX REGISTER @VA10837 00585160
LM R0,R15,DUMPSAVE-PSA(R4) RESTORE REGS @VA10837 00585170
CCHCONT DS 0H @VA10837 00585180
.CCHWFD ANOP 00585190
LA R1,CCMSG GET THE CHANNEL MESSAGE @VA13439 00585194
LA R0,CCMSGL GET LENGTH OF MESSAGE @VA13439 00585198
MVC SAVEWRK2(20),IOOPSW @VA10837 00585200
CALL DMKOPRWT,PARM=ALARM WRITE TO OPERATOR @VA10837 00585210
MVC IOOPSW(20),SAVEWRK2 NOW REINSTATE @VA10837 00585220
L R14,PREFIXA GET OWN PREFIX REG @VA10837 00585230
CLC CPID-PSA(4,R14),WARM WARM INDICATED IN ID @VA10837 00585240
BNE CCHCKP NO,DONT CHANGE ID @VA10837 00585250
MVC CPID-PSA(4,R14),CPCP MOVE ID FOR CHECKPOINT @VA10837 00585260
CCHCKP DS 0H @VA10837 00585270
MVI MCNPSW+3,X'0F' SET FOR SEREP @VA10837 00585280
LPSW WAITCCH ENTER DISABLE WAIT @VA10837 00585290
SPACE 00587000
********************************************************************* 00588000
SPACE 00589000
DROP R6 @VMD0144 00590000
EJECT 00591000
******************************************************************* 00592000
* PRINT THE CHANNEL ERROR MESSAGE FOR DMKIOE. 00593000
********************************************************************* 00594000
SPACE 00595000
DMKCCHRT RELOC 00596000
LTR R10,R10 IS THERE AN IOBLOK ? @VA01077 00597000
BNP CCHEND NO, DON'T LOOK FOR TROUBLE @VA01077 00598000
L R4,IOBIOER GET IOERBLOK ADDRESS 00599000
L R9,IOERCCRA GET RECORD ADDRESS 00600000
BAL R3,MESSAGE GO SETUP CCH MESSAGE 00601000
LTR R8,R8 WAS THERE A RDEVBLOK ? 00602000
BNP CCHEND NO,EXIT GRACEFULLY 00603000
SPACE 00604000
TM IOBFLAG,IOBCP WAS THIS A CP GENERATED @VA01077 00605000
* EVENT ? 00606000
BNZ CCHEND YES, EXIT @VA00881 00607000
LTR R4,R4 DO WE HAVE AN IOERBLOK ? @V508690 00608000
BZ CCHEND NO,LETS RETURN @V508690 00609000
LH R2,CCHCLOGL GET THE LENGTH OF LOGOUT @V508690 00610000
LA R2,CCHADDR-CCCPUID(R2) LENGTH OF IOERCCR EXT @V508690 00611000
CLI CCHANID,X'08' CHECK FOR STANDALONE CHANNEL @V508690 00612000
BE LNTHOK IT IS, DO NOT INCREMENT COUNT @V508690 00613000
TM CCHANID,X'04' ONE OF THE OTHER STANDALONES ? @V508690 00614000
BO LNTHOK YES, DO NOT INCREMENT COUNT @V508690 00615000
LA R2,4(,R2) INCREMENT COUNT,INTEGRAT ADDR @V508690 00616000
LNTHOK A R2,F7 ROUND UP @V508690 00617000
SRL R2,3 CONVERT TO DOUBLEWORDS @V508690 00618000
STH R2,IOERCCH SAVE SIZE OF CCH RECORD @V508690 00619000
LA R0,IOERSIZE(R2) ADD IN THE IOERBLOK SIZE @V508690 00620000
AH R0,IOEREXT ADD IOEREXT SIZE (SHOULD BE 1) @V508690 00621000
CALL DMKFREE GET STORAGE FOR NEW IOERBLOK @V508690 00622000
ST R1,IOBIOER CHAIN NEW IOERBLOK @V508690 00623000
ST R1,SAVER4 PASS BACK TO DMKIOE THE NEW @V508690 00624000
* IOERBLOK ADDRESS. 00625000
LR R2,R1 ADDRESS OF NEW IOERBLOK @V508690 00626000
LA R3,IOERSIZE+1 SIZE OF OLD IOERBLOK @V508690 00627000
SLL R3,3 CONVERT TO BYTES @V508690 00628000
LR R7,R3 MAKE COUNT REGS EQUAL @V508690 00629000
LR R6,R4 ADDRESS OF OLD IOERBLOK @V508690 00630000
MVCL R2,R6 MOVE IT @V508690 00631000
LH R3,IOERCCH LENGTH OF CCH RECORD @V508690 00632000
SLL R3,3 CONVERT TO BYTES @V508690 00633000
LR R7,R3 MAKE COUNT REGS EQUAL @V508690 00634000
LA R6,CCCPUID ADDR OF CCHREC TO BE COPIED @V508690 00635000
MVCL R2,R6 MOVE CCHREC PORTION TO IOERBLOK @V508690 00636000
* R2 SET FROM PREVIOUS MVCL 00637000
LH R0,IOERCCH CCR EXT. SIZE @VMD0114 00638000
AH R0,IOEREXT ADD SIZE OF OLD IOERBLOK EXT. @VMD0114 00639000
STH R0,IOEREXT-IOERBLOK(R1) SIZE OF NEW IOERBLOK @VMD0114 00640000
* EXT. GETS PUT INTO NEW IOERBLOK 00641000
LA R0,IOERSIZE SET UP TO FRET OLD IOERBLOK @V508690 00642000
AH R0,IOEREXT ADD THE EXTENTION SIZE @V508690 00643000
LR R1,R4 ADDRESS OF OLD IOERBLOK TO FRET @V508690 00644000
CALL DMKFRET FRET THE OLD IOERBLOK @V508690 00645000
SPACE 00646000
CCHEND EQU * 00647000
EXIT RETURN TO THE RECORDER (DMKIOE) 00648000
SPACE 00649000
********************************************************************* 00650000
EJECT 00651000
********************************************************************* 00652000
MESSAGE EQU * 00653000
SR R1,R1 CLEAR REGISTER 1 @VA01068 00654000
ICM R1,7,CCHCUA GET FAILING DEVICE ADDRESS @VA01068 00655000
CALL DMKCVTBH CONVERT TO PRINT FORM 00656000
LA R0,CCCMSGL INSERT MSG LENGTH 00657000
STCM R1,C7,CCCADDR MOVE FAILING ADDRESS IN MESSAGE 00658000
MVC CCCUSID(8),CCPROGID MOVE USERID TO MSG 00659000
TM FAILCSW+5,CCC+IFCC WAS IT A CHANNEL CONTROL 00660000
* CHECK OR INTERFACE CONTROL CHECK ? 00661000
BZ MSGEXIT NO, RETURN TO IN LINE CODE 00662000
LA R1,CCCMSG GET THE BEGINNING ADDRESS OF THE MESSAGE 00663000
MVC CCCMSID(12),CCCCONST MOVE IN CHANNEL CONTROL CHECK ID. 00664000
TM FAILCSW+5,IFCC IS THIS INTERFACE CONTROL CHECK @VA01068 00665000
BZ MSGOPERA NO, GO PUT MESSAGE OUT @VA01068 00666000
MVC CCCMSID(12),ICCCONST MOVE IN INTERFACE CONTROL CHECK 00667000
* IDENTIFICATION 00668000
MSGOPERA EQU * 00669000
CALL DMKQCNWT,PARM=OPERATOR+NORET,AFFINITY @V407510 00670000
MSGEXIT EQU * 00671000
BR R3 RETURN TO IN LINE CODE 00672000
******************************************************************** 00673000
******************************************************************* 00674000
EJECT 00675000
******************************************************************** 00676000
* 00677000
* SUBROUTINE NAME 00678000
* 00679000
* DMKCCHRF 00680000
* 00681000
* FUNCTION - 00682000
* 00683000
* THIS SUBROUTINE WILL REFLECT CHANNEL LOGOUT INFORMATION 00684000
* TO A USERS VIRTUAL MACHINE PAGE ZERO .. 00685000
* 00686000
* ATTRIBUTES - 00687000
* 00688000
* RESIDENT,SERIALLY REUSABLE, ENTERED VIA SVC 00689000
* 00690000
* ENTRY CONDITIONS - 00691000
* 00692000
* GR 2 = ADDRESSABILITY FOR USER PAGE ZERO 00693000
* GR 8 = ADDRESS OF VDEVBLOK 00694000
* GR 11 = ADDRESS OF VMBLOK 00695000
* 00696000
* EXIT CONDITIONS - 00697000
* 00698000
* THE CHANNEL CHECK INFORMATION WILL HAVE BEEN REFLECTED 00699000
* TO THE USERS PAGE ZERO AND USERS CHANNEL LOGOUT AREA. 00700000
* 00701000
* CALLS TO OTHER ROUTINES - 00702000
* 00703000
* DMKFRET - TO FRET THE IOERBLOK ASSOCIATED WITH THE 00704000
* CHANNEL CHECK. 00705000
* 00706000
* EXTERNAL REFERENCES - 00707000
* 00708000
* NONE 00709000
* 00710000
* TABLES/WORK AREAS - 00711000
* 00712000
* IOERBLOK EXTENTION CONTAINS THE CHANNEL CHECK 00713000
* INFORMATION TO BE REFLECTED. 00714000
* 00715000
* NOTES - 00716000
* THE ONLY TIME THIS ROUTINE GETS CONTROL IS WHEN A 00717000
* CHANNEL CHECK IS DETECTED WHILE TRYING TO REFLECT 00718000
* STATUS TO THE VIRTUAL MACHINE. 00719000
* THIS ROUTINE IS CALLED BY: 00720000
* 00721000
* DMKVIO 00722000
* DMKVSI 00723000
* DMKDSP 00724000
* 00725000
* REGISTER USAGE - 00726000
* 00727000
* GR 14,15 LINKAGE REGISTERS 00728000
* GR 12 = MODULE BASE REGISTER 00729000
* GR 11 = VMBLOK ADDRESSABILITY 00730000
* GR 9 = IOERBLOK ADDRESSABILITY 00731000
* GR 8 = VDEVBLOK ADDRESSABILITY 00732000
* GR 2 = ADDRESSABILITY FOR USER PAGE ZERO AND LOGOUT AREA 00733000
* GR 1,3,4,5 AND 7 = WORK REGISTERS 00734000
* 00735000
* OPERATION - 00736000
* 00737000
* 1. FOR ALL CHANNELS EXCEPT STANDALONE CHANNELS (2860,2870 00738000
* 2880) MOVE THE ECSW FROM THE IOERBLOK EXTENTION TO USERS 00739000
* PAGE ZERO. 00740000
* 00741000
* 2. DETERMINE THE CPU TYPE. 00742000
* 00743000
* 3. FOR ALL CPU'S EXCEPT 155/158 OBTAIN THE ADDRESS OF THE 00744000
* LOGOUT AREA, IF NECESSARY BRING USER'S PAGE INTO CORE THEN 00745000
* MOVE THE CHANNEL LOGOUT INFORMATION FROM THE IOERBLOK 00746000
* EXTENTION TO THE VIRTUAL MACHINES LOGOUT AREA. 00747000
* BUT FOR CPU'S WITH CHANNELS THAT ALLOW C-REG 14 TO MASK 00748000
* OFF THE LOGOUT AND WHICH USE THE LOGOUT POINTER IN LOW 00749000
* CORE AT X'AC', WE FIRST CHECK THE USERS C-REG 14 TO SEE 00750000
* IF LOGOUT IS PERMITTED. IF IT IS WE THEN MAKE ONE 00751000
* ADDITIONAL CHECK (NOT WANTED BY S/370 ARCHITECTURE, BUT 00752000
* IT MAY PREVENT SOMEONE'S LOW CORE FROM BEING WIPED OUT) 00753000
* BEFORE PROCEEDING: IF HIS LOGOUT POINTER (AT LOCATION 00754000
* X'AC') POINTS TO 0 WE WILL NOT LOGOUT. 00755000
* 00756000
* 4. FRET THE IOERBLOK. 00757000
* 00758000
* ERROR MESSAGES - 00759000
* 00760000
* NONE 00761000
* 00762000
********************************************************************* 00763000
SPACE 3 00764000
DMKCCHRF RELOC @V508690 00765000
USING VDEVBLOK,R8 @V508690 00766000
USING IOERBLOK,R9 @V508690 00767000
SPACE 00768000
L R9,VDEVIOER PICK UP IOERBLOK ADDR @V508690 00769000
CLI IOERCCH+1,X'00' DO WE HAVE A CCR EXTENTION @V508690 00770000
BE FRETCCR NO,FRET IOERBLOK AND EXIT @V508690 00771000
SLR R1,R1 SET UP FOR USER PAGE ZERO @V508690 00772000
SL R8,VMDVSTRT DEVICE DISPLACEMENT @V508690 00773000
TRANS 2,1,OPT=(BRING,DEFER) GET USER PAGE ZERO @V508690 00774000
AL R8,VMDVSTRT RESTORE VDEVBLOK PNTR @V508690 00775000
CLI IOERCHID,IOER2860 TEST FOR STANDALONE CHANNELS @V508690 00776000
BL MVECSW NOT STANDALONE,GO MOVE ECSW @V508690 00777000
CLI IOERCHID,IOERS80 CHECK HI END OF RANGE @V508690 00778000
BNH CPUTYP YES, A STANDALONE , BYPASS MOVE @V508690 00779000
MVECSW EQU * @VA09068 00780100
MVC ECSWLOG-PSA(4,R2),IOERECSW ECSW TO USER @VA09068 00780400
SPACE 00781000
CPUTYP EQU * @V508690 00782000
L R5,AMCHAREA GET MCH AREA POINTER @V508690 00783000
CLI MCHMODEL,MODEL155 IS THIS A 155/158 ? @V508690 00784000
BE FRETCCR YES,ALL DONE,155/158 DO NOT LOG @V508690 00785000
SPACE 00786000
* DETERMINE WHETHER THE CHANNEL IS ONE THAT LOGS OUT IN THE 00787000
* FIXED LOGOUT AREA IN LOW CORE AND IGNORES THE LOGOUT MASK IN 00788000
* C-REG 14, OR ONE THAT USES THE IOEL POINTER (AT X'AC' IN LOW 00789000
* CORE) AND HEEDS THE MASK IN C-REG 14. 00790000
TM IOERCHID,X'04' 2860/2870 CHANNEL? @VMD0151 00791000
BZ TRY135 NO, DEFINITELY NOT 2860/2870. @VMD0151 00792000
LA R1,FXDLOG+48 2860/2870 LOW CORE LOGOUT AREA. @VMD0151 00793000
CLI IOERCHID,IOERB80 2880 SLIPPED THRU ABOVE TEST? @VMD0151 00794000
BNE GETLOGA NO, SO IT IS TRULY 2860/2870. @VMD0151 00795000
TRY135 LA R1,FXDLOG 135/138 LOW CORE LOGOUT AREA. @VMD0151 00796000
CLI MCHMODEL,MODEL135 IS IT REALLY 135/138? @VMD0151 00797000
BE GETLOGA YES, 135/138. @VMD0151 00798000
SPACE 00799000
* THE CHANNEL USES IOEL POINTER. (INTEGRATED CHNL OR 2880 CHNL) 00800000
L R1,IOELPNTR(R2) POINTER TO LOGOUT AREA. @VMD0151 00801000
TM VMVCR14,VMIOLOG TEST USERS C-REG 14 I/O LOGOUT @VMD0103 00802000
* MASK. 00803000
BNO FRETCCR DO NOT LOGOUT, C-REG 14 PREVENTS.@VMD0103 00804000
LTR R1,R1 IS HIS LOGOUT POINTER A 0? @VMD0103 00805000
BZ FRETCCR DO NOT LOGOUT, IT WOULD KILL HIM.@VMD0103 00806000
GETLOGA DS 0H TRANSLATE VIRT. LOG ADDR (R1) TO REAL (R2). @VMD0151 00807000
SL R8,VMDVSTRT DEVICE DISPLACEMENT. @VMD0103 00808000
TRANS 2,1,OPT=(BRING,DEFER) GET USER LOG AREA @V508690 00809000
AL R8,VMDVSTRT RESTORE DEVICE BLOK PNTR @V508690 00810000
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00811000
* FROM HERE TO NEXT DASHED COMMENT SEPARATOR WE ARE COMPUTING: 00812000
* R4 GETS ADDRESS OF LOGOUT DATA IN IOERBLOK. 00813000
* R5 GETS LENGTH OF THIS LOGOUT DATA. LENGTH IS LESSER OF: 00814000
* (1) LENGTH FOUND IN IOERLOGL (=CCHCLOGL); (2) STIDC LENGTH; 00815000
* (3) LENGTH OF DATA AFTER X'FF' PAD BYTES HAVE BEEN STRIPPED 00816000
* FROM FAR END. 00817000
SR R5,R5 @VMD0135 00818000
IC R5,IOERCCUA+1 CHANNEL NUMBER OF FAILING REAL @VMD0135 00819000
* CHANNEL (2ND BYTE OF 3 BYTE UNITADDR). 00820000
AR R5,R5 DOUBLE IT TO INDEX HALFWORDS. @VMD0135 00821000
A R5,ARIOCT ADD ADDR OF CHNL TABLE (HALFWDS).@VMD0135 00822000
LH R5,0(0,R5) LOAD HALFWD INDEX TO RCHBLOK. @VMD0135 00823000
* AT THIS POINT WE WOULD NORMALLY CHECK FOR MINUS INDEX TO SEE 00824000
* IF CHANNEL WAS 'GEN'ED OR NOT, BUT THAT SHOULD NOT BE 00825000
* NECESSARY HERE AS WE WOULD NOT BE REFLECTING INTERRUPT IF 00826000
* CHANNEL WAS NOT 'GEN'ED. 00827000
A R5,ARIOCH INDEX+BASE GIVES RCHBLOK ADDRESS.@VMD0135 00828000
USING RCHBLOK,R5 @VMD0135 00829000
LH R5,RCHSTIDC+2 LOAD LENGTH OF LOGOUT. THIS IS @VMD0135 00830000
* WHAT REAL CHANNEL SAID IN RESPONSE TO 00831000
* STIDC INSTRUCTION AT CP IPL TIME. 00832000
DROP R5 @VMD0135 00833000
LTR R5,R5 IF MINUS, REAL CHNL GAVE CC=3. @VMD0151 00834000
* IF 0, CHNL GAVE FALSE LENGTH OF 0 TO 00835000
* STIDC. CHNLS USING FIX-LOG-AREA DO THIS. 00836000
BNP COMPUTLN USE COMPUTED LENGTH, NOT STIDC. @VMD0151 00837000
CH R5,IOERLOGL COMPARE STIDC LENGTH WITH LENGTH @VMD0151 00838000
* COMPUTED FOR THIS PARTICULAR LOGOUT. 00839000
BNH KEEPSTID USE WHICHEVER LENGTH IS SMALLER. @VMD0151 00840000
* NOTE: FOR THE NEW PROCESSORS, 3031 ETC, 00841000
* COMPUTED LENGTH MAY BE LARGER THAN ACTUAL 00842000
* STIDC LENGTH. 00843000
COMPUTLN LH R5,IOERLOGL COMPUTED LENGTH IS SMALLER. ONE @VMD0151 00844000
* EXAMPLE OF THIS IS WHERE THE CHANNEL IS 00845000
* ONE THAT DOES NOT LOGOUT FOR CHANNEL DATA 00846000
* CHECK; THAT WOULD GIVE 0 HERE. 00847000
KEEPSTID DS 0H @VMD0151 00848000
LA R4,IOERCLOG ADDRESS OF LOG OUT INFO @V508690 00849000
CLI IOERCHID,IOERB80 CHECK FOR 2880 @V508690 00850000
BE ADDROK YES,DO NOT INCREMENT ADDRESS @V508690 00851000
CLI IOERCHID,IOERS80 CHECK FOR OTHER 2880 @V508690 00852000
BE ADDROK YES, DO NOT INCREMENT ADDRESS @V508690 00853000
CLI IOERCHID,IOER2860 CHECK FOR 2860. @VMD0151 00854000
BE ADDROK YES,KEEP NON-INTEGRATED LOG ADDR.@VMD0151 00855000
CLI IOERCHID,IOER2870 CHECK FOR 2870. @VMD0151 00856000
BE ADDROK YES,KEEP NON-INTEGRATED LOG ADDR.@VMD0151 00857000
LA R4,IOERLG45 ADDR OF INTEGRATED LOGOUT DATA. @VMD0151 00858000
ADDROK DS 0H @VMD0151 00859000
SLR R0,R0 @VMD0151 00860000
LA R5,1(0,R5) +1 TO COMPENSATE FOR INITL BCT. @VMD0151 00861000
LR R3,R4 ADDR OF LOGOUT DATA IN IOERBLOK. @VMD0151 00862000
BCT R3,FCHKLPZ COMPUTE ADDR OF LOGOUT -1. @VMD0151 00863000
SPACE 00864000
* LOOK FOR FF BYTES AT THE FAR END OF THE LOGOUT AREA, WHICH 00865000
* WILL INDICATE THE LOGOUT WAS SHORTER THAN WE THOUGHT. 00866000
FCHKLOOP IC R0,0(R5,R3) LOAD BYTE FROM END OF LOGOUT. @VMD0151 00867000
C R0,F255 IS IT X'FF' ? @VMD0151 00868000
BNE NOMOREFF NO,SO IT'S THE TOP OF THE LOGOUT.@VMD0151 00869000
FCHKLPZ BCT R5,FCHKLOOP STILL FINDING FFS AT END, SO BCT @VMD0151 00870000
* DECREMENTS LOGOUT LENGTH. 00871000
NOMOREFF DS 0H @VMD0151 00872000
* R4 NOW HAS ADDR OF LOGOUT DATA IN IOERBLOK. 00873000
* R5 NOW HAS LENGTH OF LOGOUT DATA (POSSIBLY 0). 00874000
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00875000
LR R3,R5 SAVE COPY OF LENGTH IN R3. @VMD0151 00876000
LR R7,R2 LOAD WORK REG, IOEL POINTER. @VMD0151 00877000
SRL R7,12 CLEAR OUT LOW ORDER ADDRESS @V508690 00878000
A R7,F1 ROUND UP TO NEXT PAGE @V508690 00879000
SLL R7,12 MOVE IT BACK @V508690 00880000
SR R7,R2 SUB THE IOEL PNT FROM NEXT PAGE @V508690 00881000
CR R7,R3 COMPARE REMAINDER W/ IOEL LENGTH.@VMD0135 00882000
BNL MOVELOG IT WILL FIT, SO MOVE IT @V508690 00883000
LR R3,R7 LOAD WHAT WILL FIT @V508690 00884000
AR R1,R7 SET UP LOG OUT AREA POINTER FOR @V508690 00885000
* THE NEXT TRANS (ROUND UP) 00886000
MOVELOG MVCL R2,R4 MOVE LOG INFO TO USER @V508690 00887000
BE FRETCCR COUNTERS EQUAL, WE ARE FINISHED @V508690 00888000
SL R8,VMDVSTRT DEVICE DISPLACEMENT @V508690 00889000
TRANS 2,1,OPT=(BRING,DEFER) GET NEXT LOGOUT PAGE @V508690 00890000
AL R8,VMDVSTRT RESTORE DEVICE BLOK PNTER @V508690 00891000
LR R3,R5 COUNTERS EQUAL RESIDUAL COUNT @V508690 00892000
B MOVELOG FINISH MOVING LOG INFO @V508690 00893000
SPACE 3 00894000
FRETCCR LA R0,IOERSIZE LETS FRET THE IOERBLOK @V508690 00895000
AH R0,IOEREXT ADD THE EXTENTION SIZE @V508690 00896000
LR R1,R9 THE ADDRESS TO FRET @V508690 00897000
CALL DMKFRET @V508690 00898000
MVC VDEVIOER,ZEROES CLEAR THE POINTER @V508690 00899000
NI VDEVFLAG,255-VDEVUC TURN OFF UC FLAG @VA08976 00899500
EXIT @V508690 00900000
EJECT 00901000
WAITCCH DS 0D @VA10837 00902010
DC X'0002',X'0000' @VA10837 00902020
DC X'00000002' @VA10837 00902030
WARM DC C'WARM' @VA10837 00902040
CPCP DC C'CPCP' @VA10837 00902050
AIF (NOT &AP).CCHWFD2 @VA10837 00902060
RSRTMAIN DS 0D @VA10837 00902070
DC X'00080000' @VA10837 00902080
DC A(MAINRSRT) @VA10837 00902090
.CCHWFD2 ANOP 00902100
SPACE 00903000
SPACE 00904000
CCMSG DC X'151515' 00905000
DC C'DMKCCH603W CHANNEL ERROR; RUN SEREP, RESTART SYSTEM' 00906000
DC X'1515' 00907000
CCMSGL EQU (*-CCMSG) LENGTH OF MESSAGE 00908000
SPACE 00909000
CCCMSG DC X'151515' 00910000
DC C'DMKCCH60' 00911000
CCCMSID DC C'1I ' 00912000
CCCTYPE DC C' CHANNEL ' 00913000
DC C' CONTROL CHECK DEV ' 00914000
CCCADDR DC C'XXX' 00915000
DC C'; USER ' 00916000
CCCUSID DC C'XXXXXXXX' 00917000
DC X'1515' 00918000
CCCMSGL EQU (*-CCCMSG) 00919000
SPACE 00920000
MSG15M DC X'1515' 00921000
DC C'DMKCCH605I CHANNEL CHECK RECORDING FAILURE',X'1515' 00922000
MSG15L EQU *-MSG15M 00923000
CCCCONST DC C'1I CHANNEL ' @VA01337 00924000
ICCCONST DC C'2I INTERFACE' @VA01337 00925000
************************************************************ 00926000
SPACE 00927000
CCHCONST DC X'20' REC. TYPE 00928000
DC X'66' OPERATING SYSTEM AND RELEASE @VA10800 00929500
DC X'40' CONVERT THE TOD FIELD @VM08856 00930000
DC XL5'00' MISC. SWITCHES 00931000
SPACE 00932000
CPEYED DC C' CP/370' 00933000
DMKCCHCF DC XL16'00' CHANNEL TYPE TABLE 00934000
DMKCCH60 DC F'0' ADDRESS OF THE 2860 CHANNEL MODULE 00935000
DMK2870 DC F'0' ADDRESS OF THE 2870 CHANNEL MODULE 00936000
DMK2880 DC F'0' ADDRESS OF THE 2880 CHANNEL MODULE 00937000
DMKCCHSZ DC H'0000' SAVE THE SIZES OF THE IOEL @V5088AA 00938000
DMKCCHMX DC H'0000' SAVE MAX. SIZE OF CCH RECORD @V5088AA 00939000
********************************************************************* 00940000
EJECT 00941000
LTORG 00942000
EJECT 00943000
PSA , @V306638 00944000
COPY CCHREC @V306638 00945000
COPY EQU @V306638 00946000
COPY DEVTYPES @V306638 00947000
COPY VBLOKS @V508690 00948000
COPY IOBLOKS @V306638 00949000
COPY IOER @V306638 00950000
COPY MCHAREA @V306638 00951000
COPY RBLOKS @V306638 00952000
COPY SAVE @V306638 00953000
COPY VMBLOK @V306638 00954000
EJECT 00955000
ENTSW EQU SAVEWRK1 00956000
RCHSAVE EQU SAVEWRK2 00957000
RCUSAVE EQU SAVEWRK3 00958000
RDEVSAVE EQU SAVEWRK4 00959000
FALADDPT EQU SAVEWRK5 00960000
RECLENTH EQU SAVEWRK6 00961000
RECADDR EQU SAVEWRK7 00962000
ADDSAVE EQU SAVEWRK8 00963000
SIOADDR EQU SAVEWRK9 00964000
END 00965000