ibm:vm370-lib:cp:dmkiot.assemble_src
Table of Contents
DMKIOT Source
References
- Fixes Applied : 24
- This Source Date : Tuesday, April 17, 1979
- Last Fix ID : [R14597DK]
Source Listing
- DMKIOT.ASSEMBLE.txt
- IOT TITLE 'DMKIOT (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 00002000
- MACRO 00003000
- &LABEL INCR &COUNT 00004000
- &LABEL LA R0,1 00005000
- AL R0,&COUNT 00006000
- ST R0,&COUNT 00007000
- MEND 00008000
- *********************************************************************** 00009000
- * * 00010000
- *MODULE NAME = DMKIOT * 00011000
- * * 00012000
- *DESCRIPTIVE NAME = DMKIOT (CP) I/O INTERRUPT HANDLER * 00013000
- * * 00014000
- *COPYRIGHT = NONE * 00015000
- * * 00016000
- *STATUS = VM/370 - RELEASE 6, LEVEL 0 * 00017000
- * * 00018000
- *FUNCTION = TO SERVICE ALL I/O INTERRUPTS * 00019000
- * * 00020000
- *NOTES = SEE BELOW * 00021000
- * * 00022000
- * DEPENDENCIES = NONE * 00023000
- * * 00024000
- * RESTRICTIONS = NONE * 00025000
- * * 00026000
- * REGISTER CONVENTIONS = R0 = SCRATCH * 00027000
- * R1 = SCRATCH * 00028000
- * R2 = I/O RESTART INDEX (0, 4, 8 OR 12) * 00029000
- * R3 = INTERNAL SUBROUTINE LINKAGE (1ST LEVEL * 00030000
- * R4 = INTERNAL SUBROUTINE LINKAGE (3RD LEVEL * 00031000
- * R5 = INTERNAL SUBROUTINE LINKAGE (2ND LEVEL * 00032000
- * R6 = RCHBLOK BASE * 00033000
- * R7 = RCUBLOK BASE * 00034000
- * R8 = RDEVBLOK BASE * 00035000
- * R9 = DMKIOT 2ND BASE * 00036000
- * R10 = IOBLOK BASE * 00037000
- * R11 = VMBLOK BASE * 00038000
- * R12 = DMKIOT BASE * 00039000
- * R13 = ZERO IF ENTERED VIA INTERRUPT * 00040000
- * R14 = EXTERNAL SUBROUTINE LINKAGE * 00041000
- * R15 = EXTERNAL SUBROUTINE LINKAGE * 00042000
- * * 00043000
- * PATCH LABEL = N/A * 00044000
- * * 00045000
- *MODULE TYPE = CSECT * 00046000
- * * 00047000
- * PROCESSOR = ASSEMBLER XF * 00048000
- * * 00049000
- * MODULE SIZE = 8K BYTES (2 BASE REGISTERS DESIGN POINT) * 00050000
- * * 00051000
- * ATTRIBUTES = REENTRANT, RESIDENT. * 00052000
- * * 00053000
- *ENTRY POINT = DMKIOTIN * 00054000
- * * 00055000
- * PURPOSE = PROCESS AN I/O INTERRUPT * 00056000
- * * 00057000
- * LINKAGE = ENTERED DIRECTLY VIA I/O NEW PSW * 00058000
- * * 00059000
- *ENTRY POINT = DMKIOTCT * 00060000
- * * 00061000
- * PURPOSE = TOTAL I/O INTERRUPT COUNT. * 00062000
- * * 00063000
- * LINKAGE = NONE * 00064000
- * * 00065000
- *INPUT = * 00066000
- * DMKIOTIN * 00067000
- * R6 = RCHBLOK BASE * 00068000
- * R7 = RCUBLOK BASE * 00069000
- * R8 = RDEVBLOK BASE * 00070000
- * R10 = IOBLOK BASE * 00071000
- * R11 = VMBLOK BASE * 00072000
- * DMKIOTCT * 00073000
- * NONE * 00074000
- *OUTPUT = * 00075000
- * DMKIOTIN * 00076000
- * CPEXBLOK TO RETURN TO DMKIOSER * 00077000
- * CPEXBLOK TO RETURN TO DMKIOSRC * 00078000
- * * 00079000
- * DMKIOTCT * 00080000
- * * 00081000
- *EXIT-NORMAL = * 00082000
- * DMKIOTIN * 00083000
- * DISPATCHER * 00084000
- * DMKIOSST B IOSTART ISSUE SIO * 00085000
- * DMKIOSRS B IOTRSTDV RESTART DEVICE * 00086000
- * DMKIOSRQ B IOTREQUE REQUEUE REQUEST * 00087000
- * DMKIOSRU B IOTRSTCU RESTART CU & CH * 00088000
- * DMKIOSRH B IOTRSTCH RESTART CH * 00089000
- * DMKIOSRY B CALLERP PERFORM ERROR RECOVERY * 00090000
- * DMKIOSER VIA CPEXBLOK * 00091000
- * DMKIOSRC VIA CPEXBLOK * 00092000
- * * 00093000
- * DMKIOTCT * 00094000
- * NONE * 00095000
- * * 00096000
- *EXIT-ERROR = * 00097000
- * DMKIOTIN * 00098000
- * NONE * 00099000
- * DMKIOTCT * 00100000
- * NONE * 00101000
- * * 00102000
- *EXTERNAL REFERENCES = SEE BELOW * 00103000
- * * 00104000
- * ROUTINES = DMKSTKIO - TO STACK FOR 2ND LEVEL PROCESSING IOBLOKS FOR* 00105000
- * COMPLETED OPERATIONS. * 00106000
- * DMKSTKCP - TO STACK CPEXBLOK FOR DEFERRED CALL TO I/O * 00107000
- * ERROR RECORDER (DMKIOERR) * 00108000
- * DMKSCNRU - TO LOCATE RCHBLOK, RCUBLOK, AND RDEVBLOK FOR * 00109000
- * THE UNIT CAUSING THE INTERRUPT * 00110000
- * DMKIOERR - TO RECORD I/O ERRORS * 00111000
- * DMKCCHNT - TO HANDLE CHANNEL ERRORS DETECTED VIA AN I/O * 00112000
- * INTERRUPT * 00113000
- * DMKCCHSI - TO HANDLE CHANNEL ERRORS DETECTED VIA STATUS * 00114000
- * STORED ON CC 1 AFTER A SIO * 00115000
- * DMKDASER - TO RETRY FAILING DASD OPERATIONS * 00116000
- * DMKRSPER - TO RETRY FAILING UNIT RECORD OPERATIONS * 00117000
- * DMKTAPER - TO RETRY FAILING TAPE OPERATIONS * 00118000
- * DMKTRDSI - TO TRACE VIRTUAL MACHINE START I/O INSTRUCTION 00119000
- * DMKFREE - TO OBTAIN FREE STORAGE FOR AN IOBLOK * 00120000
- * DMKFRET - TO RETURN IOBLOKS TO FREE STORAGE * 00121000
- * DMKSCHDL - TO ALTER A VIRTUAL MACHINE'S DISPATCH STATUS * 00122000
- * INTERRUPT HANDLERS FOR UNSOLICITED INTERRUPTS: * 00123000
- * DMKVIOIN - INTERRUPT HANDLER FOR DEDICATED DEVICES * 00124000
- * DMKRSPEX - INTERRUPT HANDLER FOR SYSTEM SPOOL DEVICES * 00125000
- * DMKCNSIN - INTERRUPT HANDLER FOR SLOW-SPEED TERMINAL LINE 00126000
- * DMKGRFIN - INTERRUPT HANDLER FOR LOCAL GRAPHICS DEVICES * 00127000
- * DMKRNHIN - INTERRUPT HANDLER FOR THE 3704 AND 3705 * 00128000
- * DMKDSBRD - INTERRUPT HANDLER FOR DASD * 00129000
- * DMKRGAIN - INTERRUPT HANDLER FOR 3270 REMOTE SUPPORT * 00130000
- * DATA AREAS = DMKSYSVM - SYSTEM VMBLOK * 00131000
- * PSA - PREFIX STORAGE AREA * 00132000
- * IOERBLOK - I/O ERROR INFORMATION BLOCK * 00133000
- * IOBLOK - I/O TACK CONTROL BLOCK * 00134000
- * CPEXBLOK - * 00135000
- * RCHBLOK - REAL CHANNEL BLOCK * 00136000
- * RCUBLOK - REAL CONTROL UNIT BLOCK * 00137000
- * RDEVBLOK - REAL DEVICE BLOCK * 00138000
- * VMBLOK - VIRTUAL MACHINE CONTROL BLOCK * 00139000
- * SAVEAREA - SAVE AREA SVC CALL * 00140000
- * * 00141000
- *TABLES = TEMPSAVE - SAVES INITL SYSTEM STATUS UPON ENTRY TO DMKIOTIN * 00146000
- * * 00147000
- *MACROS = INCR * 00148000
- * PSA * 00149000
- * * 00150000
- *CHANGE ACTIVITY = AS FOLLOWS: * 00151000
- * CHANGE 01 02/16/79 SPLIT OF MODULE DMKIOS - DMKIOSIN PORTION * 00152000
- * * 00153000
- *********************************************************************** 00154000
- EJECT 00155000
- COPY OPTIONS 00156000
- COPY LOCAL OPTIONS 00157000
- SPACE 2 00158000
- DMKIOT CSECT @VA09587 00159000
- ENTRY DMKIOTIN,DMKIOTCT @VA09587 00160000
- EXTRN DMKSCHDL,DMKSTKCP,DMKSTKIO,DMKSCNRU @VA09587 00161000
- EXTRN DMKCCHNT,DMKCCHIS,DMKIOERR,DMKDASER,DMKTAPER @VA09587 00162000
- EXTRN DMKRSPER,DMKIOSRC,DMKIOSER @VA09587 00163000
- EXTRN DMKVIOIN,DMKGRFIN,DMKCNSIN,DMKRNHIN,DMKRSPEX @VA09587 00164000
- EXTRN DMKDSBRD,DMKBSCER,DMKRGAIN @VA09587 00165000
- EXTRN DMKIOSRS,DMKIOSSV @VA09587 00166000
- EXTRN DMKIOSRH,DMKIOSRQ,DMKIOSRU,DMKIOSRY,DMKIOSST @VA09587 00167000
- EXTRN DMKDIAIR @VA09587 00168000
- EXTRN DMKRIOCN @VA09587 00169000
- EXTRN DMKENTSK @V60BEBC 00170000
- AIF (NOT &AP).DSPRU6 00172000
- EXTRN DMKDSPRU,DMKLOKSY @V4M0173 00173000
- .DSPRU6 ANOP 00174000
- EXTRN DMKSTKMP,DMKDSPA @V4M0173 00175000
- EXTRN DMKSTKLF @V4M0154 00176000
- EXTRN DMKSSUI1,DMKSSUI2 @VA11455 00177010
- SPACE 00178000
- AIF (NOT &TRACE(6)).IOTNDX 00179000
- EXTRN DMKTRDSI @V4M0240 00180000
- .IOTNDX ANOP (END OF EXTRN'S) 00181000
- SPACE 00182000
- USING PSA,R0 00183000
- USING CPEXBLOK,R1 00184000
- USING RCHBLOK,R6 00185000
- USING RCUBLOK,R7 00186000
- USING RDEVBLOK,R8 00187000
- USING IOBLOK,R10 00188000
- USING VMBLOK,R11 00189000
- USING SAVEAREA,R13 00190000
- SPACE 00191000
- USING DMKIOT,R12,R9 @VA09587 00192000
- EJECT 00193000
- EJECT 00194000
- EJECT 00195000
- *. 00196000
- * 00197000
- * D. OPERATION OF DMKIOTIN - 00198000
- * 0. AP SUPPORT -- SET CPSUPER FLAG ON 00199000
- * 1. IF THE I/O OLD PSW INDICATES PROBLEM MODE, SAVE THE RUN- 00200000
- * NING USER'S CPU STATUS IN HIS VMBLOK 00201000
- * 2. CALL DMKSCNRU TO LOCATE THE RCHBLOK, RCUBLOK, AND RDEVBLOK 00202000
- * FOR THE INTERRUPTING UNIT. 00203000
- * 3. IF THE INTERRUPT TYPE INDICATES THAT A PREVIOUSLY BUSY RE- 00204000
- * SOURCE IS NOW AVAILABLE (CUE OR CHANNEL AVAILABLE), RESTART 00205000
- * AT THE APPROPRIATE LEVEL; OTHERWISE THE INTERRUPT MUST BE 00206000
- * STACKED FOR FURTHER PROCESSING 00207000
- * 4. IF THERE IS AN IOBLOK ACTIVE ON THE INTERRUPTING DEVICE, 00208000
- * CONTINUE; OTHERWISE, CALL THE 2ND LEVEL SUBROUTINE IOTGTIOB 00209000
- * (H, BELOW) TO CONSTRUCT ONE, AND CONTINUE 00210000
- * 00211000
- *. 00212000
- SPACE 00213000
- DMKIOTIN DS 0D I/O INTERRUPTION SUPERVISOR @VA09587 00214000
- OI CPSTATUS,CPSUPER WE ARE NOW IS SUPERVISOR STA@V407593 00215000
- STM R9,R15,TEMPR9 SAVE REGISTERS AT ENTRY @V407511 00216000
- BALR R15,0 ESTABLISH ADDRESABILITY @V408246 00217000
- USING *,R15 @V408246 00218000
- L R12,IOTBASE1 LOAD BASE REGISTER TO DMKIOT @VA09587 00219000
- L R9,IOTBASE2 LOAD SECOND BASE REG @VA09587 00220000
- DROP R15 @V407511 00221000
- USING DMKIOT,R12,R9 @VA09587 00222000
- TM CPSTATUS,CPRUN RUNNING VIRTUAL MACHINE? @V408246 00223000
- BZ IOTRSYS NO, WAIT STATE OR DISPATCH WINDOW@V408246 00224000
- L R14,RUNUSER VMBLOK POINTER @V408246 00225000
- USING VMBLOK,R14 @V408246 00226000
- STPT VMTMOUTQ CHECKPOINT PROBLEM OR WAIT @V408246 00227000
- * STATE TIMER 00228000
- MVC QUANTUMR,TIMER SAVE INTERVAL TIMER AT INTERRUPT @V408246 00229000
- LCTL C0,C0,CPCREG0 RE-ESTABLISH SYSTEM'S CONTROL @V408246 00230000
- * REGS. 00231000
- LCTL C8,C8,CPCREG8 . . @V408246 00232000
- STM R0,R8,VMGPRS SAVE THE USER'S REGISTERS @V407511 00233000
- MVC VMGPRS+R9*4(28),TEMPR9 @V407511 00234000
- AIF (NOT &FLOATPT).NOFP1 00235000
- STD Y0,VMFPRS SAVE FLOATING POINT REGISTERS 00236000
- STD Y2,VMFPRS+8 ... 00237000
- STD Y4,VMFPRS+16 ... 00238000
- STD Y6,VMFPRS+24 ... 00239000
- .NOFP1 ANOP 00240000
- MVC VMPSW+4(4),IOOPSW+4 SAVE THE INTERRUPTION ADDRESS 00241000
- IC R1,IOOPSW+2 SAVE THE CC AND PGM MASK 00242000
- TM VMESTAT,VMEXTCM EXTENDED CONTROL MACHINE ?? 00243000
- BZ IOTMNORM NO, NORMAL MODE 00244000
- STC R1,VMPSW+2 00245000
- B IOTRSYS1 CONTINUE @V407511 00246000
- IOTMNORM STC R1,VMPSW+4 00247000
- B IOTRSYS1 @V407511 00248000
- SPACE 00249000
- SPACE 00250000
- DROP R14 00251000
- USING VMBLOK,R11 @V408246 00252000
- EJECT 00253000
- IOTRSYS DS 0H @V408246 00254000
- TM CPSTATUS,CPWAIT INTERRUPT FROM WAIT? @V408246 00255000
- BO IOTWAIT YES, HANDLE INTERRUPT FROM WAIT @V4M0173 00256000
- AIF (NOT &AP).LOKSY6 00257000
- TM APSTAT1,APUOPER IS THIS AN AP SYSTEM? @V4M0173 00258000
- BZ IOTRSYS1 NO, CONTINUE AS IN UP MODE @V4M0173 00259000
- L R15,=A(DMKLOKSY+2) GET ADDR OF SYSTEM LOCK @V4M0173 00260000
- CLC LPUADDR,0(R15) IS THE SYSTEM LOCK HELD? @V4M0173 00261000
- BNE IOTRSYS1 NO, CONTINUE PROCESSING @V4M0173 00262000
- LOCK RELEASE,TYPE=SYS RELEASE SYSTEM LOCK @V4M0173 00263000
- .LOKSY6 ANOP 00264000
- B IOTRSYS1 CONTINUE INTERRUPT PROCESSING @V4M0173 00265000
- IOTWAIT DS 0H @V4M0173 00266000
- STPT WAITEND STOP WAITTIME ACCOUNTING @V407511 00267000
- IOTRSYS1 DS 0H V407511 00268000
- L R11,ASYSVM CHARGE SYSTEM FOR OVERHEAD UNTIL 00269000
- CHARGE START TRUE OWNER OF INTERRUPT IS ESTABL@V407593 00270000
- SPACE 00271000
- AIF (NOT &TRACE(9)).TR1 @V408246 00272000
- TM TRACFLG1,TRAC05 TRACING ACTIVE? @V408246 00273000
- BZ NOTRAC1 BRANCH IF NOT @V408246 00274000
- * GET TRACE-TABLE PTR, A 00275000
- TRACE CODE=IOTRCODE,R14,R0,R1 FLAG AS I/O INTER. @V407593 00276000
- MVI 1(R14),0 CLEAR 2ND BYTE @V408246 00277000
- MVC 2(2,R14),INTTIO SAVE INTERUPTING DEVICE ADDRESS @V408246 00278000
- MVC 4(4,R14),IOOPSW+4 SAVE RIGHT HALF OF I/O OLD PSW@V408246 00279000
- MVC 8(8,R14),CSW SAVE CSW @V408246 00280000
- L R14,RUNUSER RESTORE GPR14 @V408246 00281000
- NOTRAC1 EQU * @V408246 00282000
- .TR1 ANOP 00283000
- L R13,DMKIOTCT GET TOTAL I/O INTERRUPT COUNT @VA09587 00284000
- AL R13,F1 BUMP 00285000
- ST R13,DMKIOTCT AND SAVE @VA09587 00286000
- SLR R13,R13 INDICATE ENTRY FROM AN I/O INTERRUPT 00287000
- LH R1,INTTIO GET THE INTERRUPTING UNIT'S ADDRESS 00288000
- CALL DMKSCNRU GET REAL CHANNEL, CU, AND DEVICE BLOCKS 00289000
- BC 4,IOTGDISP EXIT IF CHANNEL NOT FOUND 00290000
- L R3,=A(DMKIOSSV) @VA09587 00291000
- ST R6,0(R3) SAVE RCH AND RCU VALUE @VA09587 00292000
- ST R7,4(R3) IN CASE OF RESTART @VA09587 00293000
- BNZ IOTNODEV DO NOT TEST FOR RESET IF DEVICE NOT FOUND 00294000
- TM RDEVTYPC,CLASTAPE TAPE DEVICE?? @VA11340 00295000
- BZ NOTTAPES NO SKIP @VA11340 00295010
- L R4,RDEVAIOB IS IT UNSOLICITED?? @VA11340 00295020
- LTR R4,R4 INTERRUPT @VA11340 00295030
- BZ IOTNODEV YES, INVESTIGATE @VA11340 00295040
- NOTTAPES EQU * @VA11340 00295050
- TM RDEVSTA2,RDEVRACT IS THIS DEVICE BEING RESET? @VA11340 00295060
- BZ IOTNODEV NOPE, BR. @VA11340 00295070
- NI RCHSTAT,X'FF'-RCHBUSY CLEAR CHANNEL BUSY @VA00931 00303000
- NI RCUSTAT,X'FF'-RCUBUSY CLEAR CU BUSY @VA00931 00304000
- TM RDEVSTAT,RDEVSCED I/O Q'D FROM C.U. OR CHAN? @VA10176 00304020
- BNO NONEQUED NO, FORGET THE SEARCH @VA10176 00304040
- L R10,RCUFIOB CHECK IF IOB OFF CTLUNIT @VA10176 00304060
- CUCKLOOP EQU * @VA10176 00304080
- CR R7,R10 IS THIS THE LAST ONE? @VA10176 00304100
- BE CHKCHAN YES, CHECK IF IOB OFF CHANNEL @VA10176 00304120
- CLC IOBRADD(2),INTTIO IS THIS FOR US? @VA10176 00304140
- BE CUCKOUT YES, GO DEQUEUE IT @VA10176 00304160
- L R10,IOBFPNT-IOBLOK(R10) NO, CHECK NEXT IOBLOK @VA10176 00304180
- B CUCKLOOP ... @VA10176 00304200
- CUCKOUT EQU * @VA10176 00304220
- LH R1,RCUQCNT DECREASE QUEUED COUNT @VA10176 00304240
- BCTR R1,0 ... @VA10176 00304260
- STH R1,RCUQCNT ... @VA10176 00304280
- B FNDIOB CONTINUE @VA10176 00304300
- CHKCHAN EQU * @VA10176 00304320
- L R10,RCHFIOB FIRST IOB ON CHANNEL @VA10176 00304340
- CHKCHAN1 EQU * @VA10176 00304360
- CR R6,R10 IS THIS THE END OF CHAIN? @VA10176 00304380
- BE NONEQUED YES, NORMAL PROCESSING @VA10176 00304400
- CLC IOBRADD(2),INTTIO IS THIS ONE FOR US? @VA10176 00304420
- BE CHCLOOP1 YES, GO DEQUEQE IT @VA10176 00304440
- L R10,IOBFPNT-IOBLOK(R10) NO, CHECK NEXT ONE @VA10176 00304460
- B CHKCHAN1 CONTINUE @VA10176 00304480
- CHCLOOP1 EQU * @VA10176 00304500
- LH R1,RCHQCNT DECREASE QUEUED COUNT @VA10176 00304520
- BCTR R1,0 ... @VA10176 00304540
- STH R1,RCHQCNT ... @VA10176 00304560
- FNDIOB EQU * @VA10176 00304580
- LM R4,R5,IOBFPNT-IOBLOK(R10) DEQUEUE IOBLOK @VA10176 00304600
- ST R4,IOBFPNT-IOBLOK(R5) ... @VA10176 00304620
- ST R5,IOBBPNT-IOBLOK(R4) ... @VA10176 00304640
- NI RDEVSTAT,X'FF'-(RDEVBUSY+RDEVSCED) RESET FLAGS @VA14143 00304661
- B IOTTART @VA10176 00304680
- NONEQUED EQU * @VA10176 00304700
- B IOTRSTCU @VA00931 00305000
- SPACE 3 00306000
- IOTBASE1 DC A(DMKIOT) ADCONS MUST BE IN THE FIRST 4K @VA09587 00307000
- IOTBASE2 DC A(DMKIOT+4096) AND AFTER THE LAST ENTRY POINT @VA09587 00308000
- * VA04182 00309000
- EJECT 00310000
- IOTNODEV EQU * @VA01382 00311000
- TM CSW+5,CDC+CCC+IFCC CHANNEL ERRORS ? @VA01382 00312000
- BZ IOTCLRCH NO - @VM08622 00313000
- LTR R8,R8 HAVE AN RDEVBLOK? @VMD0141 00314000
- BM IOTCCR NO, CALL DMKCCHNT NOW. @VMD0141 00315000
- ICM R10,15,RDEVAIOB UNSOLICITED INTERRUPT ?? @V508690 00316000
- BNZ IOTCCR NO, CALL DMKCCHNT NOW @V508690 00317000
- TM RDEVSTAT,RDEVDED UNSOL FROM DEDICATED DEVICE ? @V508690 00318000
- BZ IOTCCR NO, GO CALL DMKCCHNT @V508690 00319000
- BAL R5,IOTGTIOB YES, BUILD IOBLOK,FLAG IT UNSOL. @V508690 00320000
- ST R10,RDEVAIOB SAVE IOBLOK ADDRESS @V508690 00321000
- IOTCCR EQU * SET UP FOR CALL TO DMKCCHNT @V508690 00322000
- LM R4,R5,CSW SAVE CSW FOR CHANNEL HANDLER. @VM08622 00323000
- LH R3,INTTIO ALSO THE DEVICE ADDRESS. @VM08622 00324000
- AIF (NOT &AP).LOKSY7 00325000
- TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V4M0154 00326000
- BZ CALLCCH NO, JUST CALL CHANNEL CHECK @V4M0154 00327000
- L R15,=A(DMKLOKSY+2) GET ADDR SYSTEM LOCK @V4M0154 00328000
- CLC LPUADDR,0(R15) DO WE HOLD SYSTEM LOCK @V4M0154 00329000
- BE CALLCCH YES, OK TO CALL CHANNEL CHECK @V4M0154 00330000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO,SAVE @V4M0154 00331000
- BNE CCHSTACK STACK A CPEXBLOK @V4M0154 00332000
- CALL DMKCCHNT,AFFINITY GO PROCESS CHANNEL CHECK @V4M0154 00333000
- LOCK RELEASE,TYPE=SYS,SAVE RELEASE SYSTEM LOCK @V4M0154 00334000
- B CCHRET CONTINUE @VA09044 00335000
- CCHSTACK DS 0H @V4M0154 00336000
- LA R1,X'F00' CHANNEL MASK @VA07955 00337000
- NR R1,R3 CHANNEL ADDRESS @VA07955 00338000
- SRL R1,8 POSITION FOR COUNT @VA07955 00339000
- L R2,CHANOFF CHANNEL MASK BIT @VA07955 00340000
- SRL R2,0(R1) POSITION BIT MASK @VA07955 00341000
- X R2,FFS INVERT BITS @VA07955 00342000
- STCTL C2,C2,TEMPSAVE STORE CONTROL REG 2 @V4M0154 00343000
- N R2,TEMPSAVE DISABLE FAILING CHANNEL @V4M0154 00344000
- ST R2,TEMPSAVE STORE UPDATED CONTROL REG @V4M0154 00345000
- LCTL C2,C2,TEMPSAVE LOAD UPDATED CONTROL REG @V4M0154 00346000
- LA R0,CPEXSIZE GET SIZE OF A CPEXBLOK @V4M0154 00347000
- CALL DMKFREE OBTAIN A CPEXBLOK FROM FREE STOR @V4M0154 00348000
- USING CPEXBLOK,R1 ADDRESSIBILITY TO CPEXBLOK @V4M0154 00349000
- LA R15,CCHUNSTK LOAD ADDR RETURN POINT @V4M0154 00350000
- STM R15,R12,CPEXADD SAVE REGISTERS @V4M0154 00351000
- XC CPEXR13,CPEXR13 INDICATE NO SAVEAREA UPON RETURN@V4M0154 00352000
- MVC CPEXPROC,LPUADDR IND UNSTACKING ON THIS PROC @V4M0154 00353000
- CALL DMKSTKLF STACK A PRIORITY CPEXBLOK @V4M0154 00354000
- GOTO DMKDSPRU RETURN TO DISPATCHER @V4M0154 00355000
- DROP R1 @V4M0154 00356000
- CCHUNSTK DS 0H ENTERED VIA CPEXBLOK @V4M0154 00357000
- L R1,=A(DMKIOSSV) IOS SAVE AREA ADDRESS @VA09587 00358000
- ST R6,0(R1) SAVE RCH AND RCU ADDRESS @VA09587 00359000
- ST R7,4(R1) IN CASE LOSE CONTROL @VA09587 00360000
- LA R1,X'F00' CHANNEL MASK @VA07955 00361000
- NR R1,R3 GET INTERUPT ADDRESS @VA07955 00362000
- SRL R1,8 SHIFT FOR COUNT @VA07955 00363000
- L R2,CHANOFF CHANNEL MASK BIT @VA07955 00364000
- SRL R2,0(R1) CORRECTLY POSITION BIT @VA07955 00365000
- STCTL C2,C2,TEMPSAVE STORE CONTROL REG FOR UPDATING @V4M0154 00366000
- O R2,TEMPSAVE REENABLE FAILING CHANNEL @V4M0154 00367000
- ST R2,TEMPSAVE STORE UPDATED CONTROL REG @V4M0154 00368000
- LCTL C2,C2,TEMPSAVE LOAD UPDATED CONTROL REG @V4M0154 00369000
- .LOKSY7 ANOP 00370000
- CALLCCH DS 0H @V4M0154 00371000
- CALL DMKCCHNT,AFFINITY GO PROCESS CHANNEL CHECK @V4M0154 00372000
- CCHRET EQU * @VA09044 00373000
- LTR R7,R7 DO WE HAVE RCUBLOK ? @VA09044 00374000
- BM IOTRSTCH NO, START CHANNEL @VA09044 00375000
- LTR R8,R8 DO WE HAVE RDEVICE ? @VA09044 00376000
- BM IOTRSTCU NO, START CU @VA09044 00377000
- IOTCLRCH NI RCHSTAT,X'FF'-RCHBUSY CHANNEL NO-LONGER BUSY @VM08622 00378000
- SLR R2,R2 CLEAR... @VM08622 00379000
- CL R2,CSW IS CCW ADDRESS+8 EQ. ZERO? @VA01834 00380000
- BNE PARIS NON, POSSIBLE HIO... @VA01834 00381000
- CH R2,CSW+4 CHANNEL AVAILABLE INTERRUPT? @VA01834 00382000
- BE IOTRSTCH YES, RESTART CHANNEL @VA01834 00383000
- PARIS LTR R7,R7 MEFIONS-NOUS DU HIO..HANDLE HIO @VA01834 00384000
- BNP OFFLINE NO - RCUBLOK NOT FOUND. @VM08622 00385000
- TM RCUTYPE,RCUSUB IS IT A SUBORDINATE CU @VA07009 00386000
- BZ *+8 NO...BRANCH @VA07009 00387000
- L R7,RCUPRIME GET ADDRESS OF THE PRIME @VA07009 00388000
- TM RCUSTAT,RCUDISA CONTROL UNIT OFFLINE ? @VM08622 00389000
- BO CHTIO YES, SEE IF WE CAN IGNOR @VA09242 00390000
- TIORET EQU * @VA09242 00391000
- NI RCUSTAT,X'FF'-RCUBUSY C.U. NO-LONGER BUSY @VM08622 00392000
- CLI CSW+4,CUE C.U. END INTERRUPT ? @VM08622 00393000
- BE IOTRSTCU YES - RESTART C.U. AND CHANNEL @VM08622 00394000
- CLC CSW+4(2),=X'7000' CUE+SM+BUSY+0 CHAN STATUS @VA08741 00395000
- BE IOTRSTCU YES - RESTART C.U. AND CHANNEL @VA05140 00396000
- CLI CSW+4,SM+BUSY C.U. BUSY INTERRUPT @VM08622 00397000
- BE IOTGDISP YES - IGNORE THIS INTERRUPT @VM08622 00398000
- CLI CSW+4,BUSY DEVICE BUSY INTERRUPT ? @VA01940 00399000
- BE IOTGDISP YES - IGNORE THIS INTERRUPT @VA01940 00400000
- LTR R8,R8 RDEVBLOK FOUND @VM08622 00401000
- BNP TESTCUE NO--TEST UC AND CUE @VA05188 00402000
- NI RDEVSTA2,X'FF'-RDEVBUCH RESET DEVICE/CHANNEL @VM08622 00403000
- * BUSY 00404000
- TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE @VM08622 00405000
- BO TESTCUE YES--TEST UC AND CUE @VA05188 00406000
- SPACE 1 00407000
- L R10,RDEVAIOB CHECK FOR ACTIVE IOBLOK @VM08622 00408000
- LTR R10,R10 IS THE DEVICE ACTIVE @VM08622 00409000
- BZ IOTUNSOL NO - GO BUILD AN IOBLOK. @VM08622 00410000
- CLC INTTIO(2),IOBRADD @VA09325 00410100
- BNE IOTGDISP @VA09325 00410200
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE? @VA09500 00411100
- BNE NO3270 NO @VA07390 00412000
- TM RDEVTYPE,TYP3277+TYP3284 3277 OR 3284? @VA09500 00412100
- BZ NO3270 NO - BRANCH @VA09500 00412110
- CLI CSW+4,CE+DE+UE THIS DEVICE COULD HAVE A BUSY @VA07390 00413000
- BE UE3270 CONDITION REQUIRING A WAIT FOR @VA07390 00414000
- CLI CSW+4,DE+UE DEVICE END BEFORE RESTARTING @VA07390 00415000
- BE UE3270 THIS CHANNEL PROGRAM @VA07390 00416000
- NO3270 EQU * @VA07390 00417000
- TM CSW+4,ATTN ATTENTION INTERRUPT? @VA05089 00418000
- BZ NODIALCK NO - SKIP DIAL CHECK @VA05089 00419000
- CLI RDEVTYPC,CLASGRAF IS IT A GRAPHICS DEVICE? @VA05089 00420000
- BNE NODIALCK NO -NO NEED TO CHECK FOR DIALING @VA05089 00421000
- L R15,ASYSVM SYSTEM VMBLOK @VA05089 00422000
- LCTL C1,C1,VMSEG-VMBLOK(R15) SYSTEM SEGMENT TABLE @VA05089 00423000
- L R5,=A(DMKDIAIR) GET REAL ADDRESS @VA05089 00424000
- LRA R2,0(0,R5) OF DIALIRA @VA05089 00425000
- BNZ NODIALCK PAGE NOT RESIDENT @VA05089 00426000
- C R2,IOBIRA IS ACTIVE IOB FOR DIALING? @VA05089 00427000
- BE IOTGDISP YES - IGNORE THE ATTENTION INT @VA05089 00428000
- NODIALCK EQU * @VA05089 00429000
- L R5,IOBRADD CHECK IOB STATUS FLAGS FOR ... @VM08622 00430000
- IC R5,IOBSPEC2 GET IOBUC & IOBSNSIO BITS @V407438 00431000
- N R5,=AL1(0,0,IOBSPLT+IOBERP,IOBUC+IOBSNSIO) @VM08622 00432000
- BZ CKSTATUS FURTHER CHECK @VA05406 00433000
- TM IOBFLAG,IOBERP ERP IN CONTROL ? @VA09274 00434500
- BO CKSENS YES, CHECK NEXT @VA09274 00435000
- TM IOBSPEC,IOBUNSL IF UNSOL-INT ? @VA09274 00435500
- BZ IOTCKIOB NO, -- IOB IN CONTROL IOS -- @VA09274 00436000
- CKSENS EQU * @VA09274 00436500
- TM IOBSPEC2,IOBSNSIO DOING A SENSE ? @VA09274 00437000
- BO IOTCKIOB YES, PROCESS INT @VA09274 00437500
- TM RDEVSTAT,RDEVBUSY IS DEV BUSY ? @VA09274 00438000
- BO IOTCKIOB YES, CHECK IOB @VA09274 00438500
- TM IOBFLAG,IOBERP ERP IN CONTROL ? @VA09274 00439000
- BZ IOTCKIOB NO; GO CHECK IOB STATUS @VA14003 00439600
- TM CSW+4,UC YES; IS THERE ANOTHER UNIT CHECK? @VA14003 00439700
- BO CNTNGNCY YES; GO CLEAR CONTINGENCY @VA14003 00439800
- B IOTGDISP NO; IGNORE THIS INTERRUPT @VA14003 00439900
- CKSTATUS EQU * @VA05406 00443000
- TM IOBCSW+4,CE HAD THE CHANNEL COMPLETED EARLIER@VA03817 00444000
- BO PART YES- SAVE ONLY THE STATUS @VA03817 00445000
- MVC IOBCSW(4),CSW SAVE THE FULL CSW IF NO CE OR IF @VA03817 00446000
- MVC IOBCSW+6(2),CSW+6 THE OLD STATUS WAS STACKED. @VA03817 00447000
- PART OC IOBCSW+4(2),CSW+4 COMBINE THE STATUS. @VA03817 00448000
- LA R5,(256*(CE+DE)) NICE CLEAN STATUS BITS. @VM08622 00449000
- CH R5,CSW+4 CLEAN CHANNEL + DEVICE END ? @VM08622 00450000
- BE TESTCYL YES - CHECK FOR MSS CYL FLT @V60B6B8 00451000
- TM CSW+5,PCI+IL @VA13092 00452100
- BZ IOTCKIOB NO - CONTINUE @VM08622 00453000
- CLI CSW+4,0 ANY UNIT STATUS PRESENT W/PCI @VM08622 00454000
- BNE IOTCKIOB YES - PRESENT ALL TOGETHER @VM08622 00455000
- TM CSW+5,X'FF'-(PCI+IL) ANY BAD CHANNEL STATUS @VA01616 00456000
- BNZ IOTCKIOB YES - CONTINUE @VM08622 00457000
- BAL R5,COPYIOB COPY IOBLOK ON PCI INTERRUPTS @VM08622 00458000
- B IOTGDISP WAIT FOR FINAL INTERRUPT @VM08622 00459000
- EJECT 00460000
- IOTUNSOL EQU * UNSOLICITED I/O INTERRUPT @VM08864 00461000
- TM CSW+4,ATTN IS IT AN ATTN INTERRUPT @V60B6B8 00462000
- BZ UNSOL1 NO, CAN'T BE MSS CYL FLT @V60B6B8 00463000
- CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE @V60B6B8 00464000
- BNE UNSOL1 @V60B6B8 00465000
- CLI RDEVTYPE,TYP3330 IS THIS A 3330 DEVICE @V60B6B8 00466000
- BNE UNSOL1 NO, CAN'T BE MSS CYL FLT @V60B6B8 00467000
- TM RDEVFTR,VIRTUAL+SYSVIRT IS THIS AN MSS VUA @V60B6B8 00468000
- BZ UNSOL1 NO, CAN'T BE MSS CYL FLT @V60B6B8 00469000
- * 00470000
- * THIS IS AN ATTN ON AN MSS VUA. SEE WHETHER THE 00471000
- * VIRTUAL MACHINE IS HANDLING CYLINDER 00472000
- * FAULTS. IF NOT, CALL DMKSSSI1 TO SCHEDULE 00473000
- * THE OPERATION WHICH CAUSED THE ORIGINAL 00474000
- * CYLINDER FAULT. 00475000
- * 00476000
- TM RDEVFLAG,RDEV333V VM HANDLE OWN CYLINDER FAULTS?@VA09299 00477000
- BO UNSOL1 YES, CALL STKIO TO REFLECT ATTN @V60B6B8 00478000
- CALLMSSA EQU * CALL DMKSSSI1 TO RESTART QUEUED @V60B6B8 00479000
- * I/O 00480000
- L R15,SSSI1ADD ADDR OF DMKSSSI1 @V60B6B8 00481000
- BALR R14,R15 RESTART ANY IOBLOKS, TURN OFF @V60B6B8 00482000
- * TIMER 00483000
- B IOTRSTDV GO RESTART THE DEVICE @V60B6B8 00484000
- UNSOL1 EQU * @V60B6B8 00485000
- TM RDEVSTAT,RDEVBUSY IS THERE A WAITING IOBLOK ? @VM08864 00486000
- BZ IOTUNSIN NO -- TRULY UNSOLICITED @VM08864 00487000
- CLI CSW+4,DE DEVICE END BY ITSELF ? @VM08864 00488000
- BE IOTRSTDV YES - RESTART THE DEVICE @VM08864 00489000
- NI RDEVSTAT,255-RDEVBUSY NO LONGER BUSY @VM08864 00490000
- NI CSW+4,255-DE REMOVE THE DEVICE END @VM08864 00491000
- IOTUNSIN EQU * BUILD IOBLOK FOR THIS INTERRUPT @VM08864 00492000
- TM RDEVSTA3,RDEVDIIP DIAL IN PROGRESS ? @VA09164 00492150
- BNO NODIAL NO @VA09164 00492300
- TM CSW+4,ATTN UNSOLICITED ATTENTION ? @VA09164 00492450
- BO IOTGDISP YES, IGNORE @VA09164 00492600
- NODIAL EQU * @VA09164 00492750
- BAL R5,IOTGTIOB BUILD AN IOBLOK @VM08622 00493000
- ST R10,RDEVAIOB SAVE ITS ADDR. IN RDEVBLOK @VM08622 00494000
- B IOTCKIOB PROCESS THIS INTERRUPT @VM08622 00495000
- SPACE 1 00496000
- TESTCUE TM CSW+4,UC UNIT CHECK? @VA05188 00497000
- BO CNTNGNCY YES--CLEAR CONTINGENCY @VA04771 00498000
- TM CSW+4,CUE CONTROL UNIT END? @VA04771 00499000
- BO IOTRSTCU YES--RESTART CONTROL UNIT @VA04771 00500000
- B IOTGDISP NO--IGNORE INTERRUPT @VA04771 00501000
- CHTIO EQU * @VA09242 00502000
- L R10,RDEVAIOB GET IOB @VA09242 00503000
- LTR R10,R10 IS THERE ONE ? @VA09242 00504000
- BNZ ACTIOB YES, SEE IF TIO @VA09738 00504300
- TM CSW+4,CUE CONTROL UNIT END ? @VA09738 00504600
- BO IOTRSTCU START CONTROL UNIT @VA09738 00504900
- B OFFLINE NO, FORGET IT @VA09738 00505200
- ACTIOB EQU * @VA09738 00505500
- TM IOBSPEC,IOBTIO TIO IOB @VA09242 00506000
- BO TIORET YES, FOR TIO CU CAN BE OFFLINE @VA09242 00507000
- OFFLINE TM CSW+4,UC UNIT CHECK? @VA05188 00508000
- BZ IOTGDISP NO--IGNORE THIS INTERRUPT @VA05188 00509000
- CNTNGNCY EQU * @VA04771 00510000
- LA R1,CLRSNS GET ADDR. OF SENSE CMD. @VM08622 00511000
- ST R1,CAW THIS WILL CLEAR CONTENTION @VM08622 00512000
- LH R1,INTTIO GET ADDR. OF INTERRUPTING UNIT @VM08622 00513000
- TIO 0(R1) IN CASE CHANNEL END WITH IT. @VM08622 00514000
- RSIO SIO 0(R1) NOW CLEAR CONTENTION CONNECTION @VA02863 00515000
- BC 2,RSIO KEEP TRYING ON CC=2 @VA02863 00516000
- BC 8+1,IOTGDISP EXIT WHEN STARTED OR NOT THERE @VA02863 00517000
- TM CSW+4,UC UNIT CHECK WITH SENSE INTERRUPT? @VA02863 00518000
- BO IOTGDISP EXIT IF UNIT CHECK PERSISTS @VA03689 00519000
- TM CSW+5,CDC+CCC+IFCC CHAN. ERRORS ? @VA03689 00520000
- BZ RSIO NO, LOOP @VA03689 00521000
- TM CSW,X'04' YES, IS LOGOUT PENDING ? @VA03689 00522000
- BO IOTGDISP YES, EXIT SO CHAN. CAN LOGOUT @VA03689 00523000
- B RSIO NO, LOOP TO REISSUE SIO @VA03689 00524000
- SPACE 00525000
- DMKIOTCT DC F'0' COUNT OF I/O INTERRUPTS @VA09587 00526000
- EJECT 00527000
- *. 00528000
- * 00529000
- * 5. IF THERE IS A UNIT CHECK INDICATED, CALL IOSENSE (J, BELOW) 00530000
- * TO SCHEDULE THE SENSE, THEN EXIT TO DMKDSPCH. IF ERP IS 00531000
- * IN CONTROL OF THE TASK, RETURN THE IOBLOK TO THE PROPER 00532000
- * ERROR ROUTINE 00533000
- * 6. IF THE DEVICE IS STILL ACTIVE (INTERRUPT IS PCI OR CE), 00534000
- * COPY AND STACK THE IOBLOK AND CALL THE RECURSIVE RE- 00535000
- * START ROUTINE IOSRSTRT (E, BELOW), THEN EXIT TO DMKDSPCH 00536000
- * 7. FOR GRAPHICS AND NON-DEDICATED TP LINES, CALL DMKCNSIN TO 00537000
- * HANDLE FURTHER PROCESSING 00538000
- * 8. IF THE I/O OPERATION HAD AND ERROR AN SENSE BYTES ARE NOW 00539000
- * AVAILABLE, RECORD THE ERROR FOR USER TASKS AND ATTEMPT TO 00540000
- * RECOVER FOR CP TASKS 00541000
- * 9. IF THE INTERRUPT IS DUE TO THE COMPLETION OF A SPLIT SEEK, 00542000
- * RECHAIN THE SEEK AND RESCHEDULE THE OPERATION; OTHERWISE 00543000
- * 10. CALL DMKSTKIO TO STACK THE IOBLOK FOR THE 2ND LEVEL 00544000
- * INTERRUPT HANDLER SPECIFIED VIA IOBIRA AND RESTART ANY 00545000
- * UNITS FREED UP BY THE INTERRUPT 00546000
- * 00547000
- *. 00548000
- SPACE 00549000
- IOTCKIOB DS 0H CHECK OUT THIS IOBLOK 00550000
- TM IOBSPEC2,IOBUC+IOBSNSIO INT. FROM SNS OR WAITING@V407438 00551000
- * TO DO THE SENSE OPERATION ? 00552000
- BNZ IOTNOSWS YES - PROCEED WITH NORMAL PATH 00553000
- L R5,IOBIOER CHECK FOR EXISTANCE OF IOERBLOK 00554000
- LTR R5,R5 IS THERE ONE 00555000
- BZ IOTNOSWS NO - 00556000
- USING IOERBLOK,R5 00557000
- TM IOERCSW+5,CDC+CCC+IFCC ARE THERE ANY CHANNEL ERROR'S 00558000
- BZ IOTRSTCU NO -- WAIT FOR ERP TO FINISH FIRST ERROR 00559000
- TM CSW+5,CDC+CCC+IFCC CHAN ERR WHILE CHAN ERR @VA02014 00560000
- BZ IOTRSTCU RECOVERY - NO FORGET IT @VA02014 00561000
- DROP R5 00562000
- SPACE 00563000
- IOTNOSWS EQU * STOP CHARGING SYSTEM, @V407593 00564000
- * GET OWNER OF INTERRUPT, AND 00565000
- CHARGE SWITCH,IOBUSER START CHARGING HIM @V407593 00566000
- TM IOBSPEC2,IOBSNSIO IS THIS A SENSE OPERATION? @V407438 00567000
- BZ IOTAVCSW NO - GO SAVE CSW 00568000
- L R1,IOBIOER GET IOERBLOK ADDRESS 00569000
- USING IOERBLOK,R1 00570000
- CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE @VA14597 00570100
- BNE NORDOCK NO-GET OUT @VA14597 00570150
- SR R15,R15 CLEAR OUT REG 15 @VA14597 00570200
- ICM R15,B'0111',IOERCSW+1 FAILING CSW+8 @VA14597 00570250
- BZ NORDOCK NO IOERCSW-THEN GET OUT @VA14597 00570300
- S R15,F8 SUB 8 FAILING CCW @VA14597 00570350
- CLI 0(R15),X'FE' WRITE TO READ ONLY DISK @VA14597 00570400
- BNE NORDOCK NO-GET OUT @VA14597 00570450
- CLI IOERDATA,CMDREJ IS IT A COMMAND REJECT @VA14597 00570500
- BNE NORDOCK NO-GET OUT @VA14597 00570550
- MVI IOERDATA+1,X'02' TURN ON WRITE INHIBIT SW. @VA14597 00570600
- NORDOCK EQU * @VA14597 00570650
- LH R0,IOERLEN GET LENGTH OF SENSE 00571000
- SH R0,CSW+6 SUBTRACT RESIDUAL COUNT 00572000
- STH R0,IOERLEN SAVE NUMBER OF SENSE BYTES 00573000
- CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT A 3330 @VA11437 00574010
- BNE IOTCHKUC NO, CAN'T BE MSS VUA @V60B6B8 00575000
- TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A VUA @V60B6B8 00576000
- BZ IOTCHKUC NO, CAN'T BE MSS VUA @V60B6B8 00577000
- TM RDEVFLAG,RDEV333V VM HANDLE OWN CYLINDER FAULTS?@VA09299 00578000
- BO IOTCHKUC YES, REFLECT UC TO VIRT MACH @V60B6B8 00579000
- TESTUC EQU * TEST FOR IMBEDDED SEEK @V60B6B8 00580000
- * 00581000
- * IF WE REACH THIS POINT, THERE HAS BEEN A UNIT 00582000
- * CHECK ON A CHANNEL PROGRAM DIRECTED TO A VUA 00583000
- * WHICH IS NOT DEDICATED TO A USER AS A 3330V. 00584000
- * 00585000
- * TEST TO SEE IF THE SENSE DATA WAS A 'COMMAND 00586000
- * REJECT'. IF SO, THE STAGING ADAPTER IS FLAGGING 00587000
- * A CYLINDER FAULT ON AN IMBEDDED SEEK. 00588000
- * 00589000
- * RESET THE PREFIX SEEK CCW TO POINT TO THE FAILING 00590000
- * SEEK ARGUMENT AND REISSUE THE I/O, THUS CAUSING 00591000
- * THE STANDARD CYLINDER FAULT INDICATION, WHICH 00592000
- * WILL LATER BE TRAPPED BY THE TEST AT LABEL 'PART' 00593000
- * 00594000
- TM IOBCSW+4,UC WAS FIRST CSW UC @V60B6B8 00595000
- BZ IOTCHKPR NO, CHECK MSS PREFIX @VMI2013 00596000
- TM IOERDATA,CMDREJ WAS SENSE DATA 'CMD REJ' @V60B6B8 00597000
- BZ IOTCHKPR NO, CAN'T BE CYL FLT @V60B6B8 00598000
- CLI IOERDATA+7,X'0F' MSS UNIQUE ERROR @VMI2023 00599000
- BNE IOTCHKPR NO, NOT CYL FLT @VMI2023 00600000
- CLI IOERDATA+18,X'03' EMBEDDED SEEK @VMI2023 00601000
- BNE IOTCHKPR NO, VALID UNIT CHECK @VMI2023 00602000
- L R15,IOERCSW ADDR OF FAILING CCW @VMI2001 00603000
- RESETPRE EQU * @V60B6B8 00604000
- LA R0,CCWL TO DECREMENT @V60B6B8 00605000
- SR R15,R0 POINT TO FAILING CCW @V60B6B8 00606000
- L R3,IOBCAW FIRST CCW IN THE CHAIN @V60B6B8 00607000
- MVC 1(SEEKPTL,R3),1(R15) SET UP PTR TO SEEK ARGUMENT@V60B6B8 00608000
- STCM R15,7,TICOFF(R3) SET UP PREFIX TIC CCW @V60B6B8 00609000
- B IOTSTACK GO RESTACK THE IOBLOK @VMI2001 00610000
- IOTCHKPR EQU * UC ON 3330V CHAN PROG @V60B6B8 00611000
- * 00612000
- * TEST TO SEE IF THE ERROR WAS DETECTED ON THE PREFIX 00613000
- * CHANNEL PROGRAM. RESET IOBCSW ADDR IF SO. 00614000
- * 00615000
- L R14,IOBCAW FIRST CCW (PREFIX SEEK) @V60B6B8 00616000
- L R15,IOERCSW ADDRESS OF FAILING CSW +8 @VA11460 00617100
- CR R15,R14 SEE IF UC IN THE PREFIX @VA11460 00617200
- BL IOTCHKUC NO, MUST BE USER CCW @VA11460 00617300
- LA R14,PREL(R14) FIRST CCW PAST THE PREFIX @VA11460 00617400
- CR R15,R14 SEE IF UC IN THE PREFIX @V60B6B8 00619000
- BH IOTCHKUC NO, UC IN USER CCW @VMI2001 00620000
- LA R14,CCWL(R14) 8 BYTES PAST FIRST USER CCW @V60B6B8 00621000
- STCM R14,7,IOERCSW+1 ERROR IN USER PROGRAM @VMI2001 00622000
- B IOTCHKUC AND SET UP THE BLOCK @V60B6B8 00623000
- SPACE 00624000
- IOTAVCSW DS 0H SAVE CSW IN IOBLOK 00625000
- TM IOBCSW+5,CDC+CCC+IFCC ANY CHANNEL ERRORS @VA06201 00626000
- BZ PARTCSW1 NO CONTINUE IN LINE CODE @VA06201 00627000
- MVC IOBCSW(8),CSW SAVE ENTIRE CSW @VA06201 00628000
- B PARTCSW2 BRANCH AROUND FOLLOWING MOVES @VA06201 00629000
- PARTCSW1 TM IOBCSW+4,CE HAD THE CHANNEL COMPLETED EARLIER@VA06201 00630000
- BO PARTCSW YES- SAVE ONLY THE STATUS @VA03817 00631000
- MVC IOBCSW(4),CSW SAVE THE FULL CSW IF NO CE OR IF @VA03817 00632000
- MVC IOBCSW+6(2),CSW+6 THE OLD STATUS WAS STACKED. @VA03817 00633000
- PARTCSW OC IOBCSW+4(2),CSW+4 COMBINE THE STATUS. @VA03817 00634000
- TM IOBCSW+5,PCI PCI? @V408246 00635000
- BZ CHKUC NO, BYPASS STANDALONE CHECK @V408246 00636000
- CLI IOBCSW+4,0 ANY UNIT STATUS ? @V408246 00637000
- BNE CHKUC YES - TEST FOR UNIT CHECK @V408246 00638000
- TM IOBCSW+5,255-(PCI+IL) ANYTHING BAD IN CHAN @V408246 00639000
- * STATUS 00640000
- BZ IOTGDISP IF NOT IGNORE INTERUPT @V408246 00641000
- CHKUC DS 0H @V408246 00642000
- PARTCSW2 TM IOBSPEC2,IOBUC ERROR TASK WAITING FOR DE? @V407438 00643000
- BO DOSENSE YES -- GO DO SENSE NOW 00644000
- IOTCHKUC EQU * @VA01599 00645000
- TM CSW+5,CDC+CCC+IFCC ANY CHANNEL ERRORS ? 00646000
- BNZ IOTIOERR YES, DON'T BUILD IOERBLOK @VA01174 00647000
- TM CSW+4,UC WAS THERE A UNIT CHECK ? 00648000
- BZ IOTCKPRG NO - TEST FOR OTHER ERRORS 00649000
- SPACE 00650000
- DOSENSE TM CSW+5,CDC+CCC+IFCC ANY CHANNEL ERRORS ? 00651000
- BNZ IOTIOERR YES, DON'T BUILD IOERBLOK @VA01174 00652000
- TM IOBFLAG,IOBSPLT ERROR ON D.E. DOING A SPLIT SSEK 00653000
- BO IOTREQUE YES - RECHAIN CCW'S AND RE-ISSUE SIO 00654000
- BAL R5,IOTENSE OK TO BUILD IOERBLOK IF NO CHAN. ERRORS 00655000
- B IOTGDISP IF SENSE STARTED OK, LEAVE NOW -- 00656000
- B IOTIOERR IF SENSE DID NOT START, GO RECORD ERROR 00657000
- SPACE 00658000
- IOTCKPRG TM CSW+5,PRGC+PRTC+CHC PROGRAM, PROTECTION OR CHAINING ERR 00659000
- BZ IOTCKERP NO ... 00660000
- BAL R5,IOTENSE GO BUILD AN IOERBLOK 00661000
- B IOTIOERR RECORD AND STACK IOBLOK @VA00915 00662000
- SPACE 00663000
- IOTCKERP EQU * @VA01762 00664000
- NI IOBSPEC2,X'FF'-(IOBUC+IOBSNSIO) CLEAR ERR. FLAGS@V407438 00665000
- TM IOBFLAG,IOBERP IS ERP IN CONTROL @VA01762 00666000
- BZ IOTCKBSY NO, SEE IF DEVICE IS STILL BUSY @VA13728 00667100
- CLI IOBCSW+4,CE CE ALONE ON CH PGM RESTART ? @VA13728 00667200
- BE IOTRSTCU WAIT FOR I/O BEFORE RETURN TO @VA13728 00667300
- B IOTCPERR RETURN CONTROL TO ERP NOW @VA13728 00667400
- SPACE 00668000
- IOTCKBSY TM IOBCSW+4,CE DEVICE STILL BUSY ? 00669000
- BZ IOTCECUE BRANCH IF NO 00670000
- TM IOBCSW+4,DE+ATTN WITHOUT DEVICE END OR ATTENTION ? 00671000
- BNZ IOTCECUE NO -- DEVICE IS FREE 00672000
- TM IOBFLAG,IOBPAG+IOBCP IS THIS PAGING IOBLOK? @VA05614 00673000
- BO IOTSTACK LET HIM TAKE IT FROM HERE @VA05614 00674000
- BAL R5,COPYIOB IF CHANNEL END ONLY AND DEVICE IS BUSY, 00675000
- B IOTRSTCU GIVE USER THE INTERRUPT AND RESTART CU 00676000
- SPACE 00677000
- IOTCECUE DS 0H HERE IF DEVICE IS NOT BUSY 00678000
- TM IOBCSW+4,UC WAS THERE A UNIT CHECK @VA07109 00679000
- BNZ IOTIOERR YES, CALL THE ERROR ROUTINE 00680000
- TM IOBCSW+5,255-(PCI+IL) ANY BAD CHANNEL STATUS @VA07109 00681000
- BZ IOTCHKSS NO -- TEST FOR SPLIT SEEK 00682000
- SPACE 00683000
- IOTIOERR EQU * @VA01762 00684000
- NI IOBSPEC2,X'FF'-(IOBUC+IOBSNSIO) CLEAR ERR. FLAGS@V407438 00685000
- TM IOBSPEC,IOBTIO WAS IOBLOK MARKED FOR 'TIO' ONLY @VA01762 00686000
- BO IOTSTACK YES - BYPASS ERP PROCESSING 00687000
- TM IOBFLAG,IOBCP+IOBHVC IS IT A CP GENERATED I/O 00688000
- BNZ IOTCPERR YES--GO TRY TO RESTART. 00689000
- BAL R5,IOTRECER GO, RECORD USER ERROR . 00690000
- B IOTRSTDV AND CONTINUE PROCESSING 00691000
- SPACE 00692000
- IOTCPERR DS 0H HERE FOR ERRORS IN CP GENERATED I/O 00693000
- CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS ? @V2D3931 00694000
- BNE IOTBSC NO, CHECK OTHER CLASES @V2D3931 00695000
- TM RDEVSTAT,RDEVDED IS THIS DEVICE DEDICATED @V2D3931 00696000
- BO IOTBSC YES, BYPASS CHECK FOR LINE @V2D3931 00697000
- TM IOBFLAG,IOBHVC IS THIS A DIAGNOSE REQUEST @V2D3931 00698000
- BO IOTBSC YES, BYPASS BISYNC LINE FTN. @V2D3931 00699000
- TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE ? @V2D3931 00700000
- BO IOTSERP YES, GO TO ERP SUPPORT @V2D3931 00701000
- IOTBSC EQU * @V2D3931 00702000
- TM RDEVTYPC,CLASURI+CLASURO+CLASDASD+CLASTAPE @V200820 00703000
- BZ IOTSTACK NO ERP - STACK THE IOBLOK @V200820 00704000
- TM RDEVTYPC,CLASURI+CLASURO @VA01599 00705000
- BZ IOTSERP NO, GO TO EREP SUPPORT @VA01599 00706000
- TM IOBFLAG,IOBHVC IS THIS A DIAGNOSE REQUEST @VA01599 00707000
- BO IOTSTACK YES, GO STACK THE IOBLOK @VA01599 00708000
- IOTSERP EQU * @VA01599 00709000
- TM IOBSPEC2,IOBRETRY HAVE ALREADY STACKED CPEX @VA08119 00710000
- BZ IOTER ERROR RECOVERY NOT IN PROCESS @VA12941 00711000
- TM RDEVSTAT,RDEVNRDY INTERVENTION REQUIRED PENDING @VA12941 00711100
- BZ IOTRSTCU NO, IGNORE THIS INTERRUPT @VA12941 00711200
- TM CSW+4,DE+ATTN NOT-READY TO READY SEQUENCE @VA12941 00711300
- BZ IOTRSTCU NO, IGNORE THIS INTERRUPT @VA12941 00711400
- IOTER OI IOBSPEC2,IOBRETRY CONTINUE WITH ERROR RECOVERY @VA12941 00711500
- OI IOBFLAG,IOBERP INDICATE ERP IN CONTROL @V408246 00713000
- LA R5,IOTRSTCU SET UP RETURN FROM THE CPEXBLOK ROUTINE 00714000
- * TO DEQUE THE NEXT IOBLOK AND LET THE 00715000
- * SYSTEM GO TO WORK. 00716000
- L R2,=A(DMKIOSER) @VA09587 00717000
- B IOTGCPEX BUILD A CP EXECUTION BLOCK @VA09587 00718000
- * THE NEXT INSTRUCTION 00719000
- EJECT 00720000
- * 00721000
- * WHEN THE FOLLOWING ROUTINE IS ENTERED, WE HAVE 00722000
- * RECEIVED A CHANNEL END - DEVICE END 00723000
- * 00724000
- * TEST TO SEE IF THE REAL DEVICE IS AN MSS VUA 00725000
- * IF SO, SEE IF THE CE - DE WAS RECEIVED 00726000
- * ON THE NOP CCW. IF IT WAS, TEST TO SEE 00727000
- * IF THE CALLING VIRTUAL MACHINE WANTS TO 00728000
- * PROCESS CYLINDER FAULTS. IF SO, PASS THE 00729000
- * INTERRUPT TO HIM. OTHERWISE, CALL DMKSSS 00730000
- * TO QUEUE THIS IOBLOK AND WAIT FOR AN ATTN 00731000
- * 00732000
- TESTCYL EQU * @V60B6B8 00733000
- CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT A 3330 @VA11437 00734010
- BNE IOTSTACK NO @V60B6B8 00735000
- TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A VUA @V60B6B8 00736000
- BZ IOTSTACK NO @V60B6B8 00737000
- L R15,IOBCSW ADDR OF ENDING CCW + 8 @V60B6B8 00738000
- L R14,IOBCAW ADDR OF THE PREFIX FOR VUA @V60B6B8 00739000
- LA R14,PREL(R14) ADDR OF FIRST BYTE PAST NOP @V60B6B8 00740000
- LA R15,0(R15) CLEAR HI-ORDER BYTE @V60B6B8 00741000
- CR R14,R15 DID WE END ON THE NOP @V60B6B8 00742000
- BNE IOTSTACK NOPE, NOT CYL FLT @V60B6B8 00743000
- TM RDEVFLAG,RDEV333V VM HANDLE OWN CYLINDER FAULTS?@VA09299 00744000
- BO IOTSTACK YES, REFLECT INTERRUPT TO USER @V60B6B8 00745000
- L R15,SSSI2ADD ADDR OF DMKSSSI2 ENTRY POINT @V60B6B8 00746000
- BALR R14,R15 SAVE THE IOBLOK WITH IOBFLT SET @V60B6B8 00747000
- SR R15,R15 CLEAR FOR NEXT INSTR. @VMI2013 00748000
- ST R15,RDEVAIOB NO ACTIVE I/O @VMI2013 00749000
- NI RDEVSTAT,X'FF'-RDEVBUSY TURN OFF BUSY BIT @VA09589 00749100
- B IOTTEXIT AND RETURN @V60B6B8 00750000
- SPACE 00751000
- IOTCHKSS TM IOBFLAG,IOBSPLT IS THIS A SPLIT SEEK ? 00752000
- BO IOTREQUE YES -- GO RESTART THE OPERATION 00753000
- SPACE 00754000
- IOTSTACK DS 0H HERE TO 00755000
- CALL DMKSTKIO STACK THE IOBLOK 00756000
- * STOP CHARGING FOR INTERRUPT AND 00757000
- * START CHARGING RESTARTED USER 00758000
- CHARGE SWITCH,ASYSVM @V407593 00759000
- B IOTRSTDV @VA09587 00760000
- SPACE 00761000
- IOTTART EQU * ISSUE SIO @VA09587 00762000
- GOTO DMKIOSST @VA09587 00763000
- IOTRSTDV EQU * RESTART DEVICE-CU-CH @VA09587 00764000
- GOTO DMKIOSRS @VA09587 00765000
- IOTREQUE EQU * REQUE REQUEST @VA09587 00766000
- GOTO DMKIOSRQ @VA09587 00767000
- IOTRSTCU EQU * RESTART CU @VA09587 00768000
- GOTO DMKIOSRU @VA09587 00769000
- IOTRSTCH EQU * RESTART CH @VA09587 00770000
- GOTO DMKIOSRH @VA09587 00771000
- CALLERP EQU * PERFORM ERROR RECOVERY @VA09587 00772000
- GOTO DMKIOSRY @VA09587 00773000
- EJECT 00774000
- IOTTEXIT LTR R13,R13 WAS ENTRY TO IOS FROM A "CALL" 00775000
- BNZ IOTRETRN YES, RETURN TO CALLER 00776000
- SLR R3,R3 SET BRANCH INDEX TO ZERO @V407438 00777000
- CL R6,RCHRSTQ DID WE RESTART DIFF. CHAN ON INT?@V407438 00778000
- BE CHKCU NOPE, GO CHECK CTL UNIT @V407438 00779000
- L R4,RCHRSTQ GET INTERRUPTING CHANNEL ADDR @V407438 00780000
- ST R6,RCHRSTQ RESTARTED CHANNEL IS DONE NOW @V407438 00781000
- LR R6,R4 SET TO INT. CHAN FOR 2ND RESTART @V407438 00782000
- LA R3,4(R3) SET FOR CHANNEL CHANGE ONLY @V407438 00783000
- CHKCU LTR R7,R7 DOES CU EXIST (COULD BE CH AVAIL)@V407438 00784000
- BNP BRESTART(R3) NOPE, GO TO DISP OR CH RESTART @V407438 00785000
- CL R7,RCURSTQ DID WE RESTART DIFF. CU ON INT? @V407438 00786000
- BE BRESTART(R3) NOPE, GO TO DISP OR CH RESTART @V407438 00787000
- L R5,RCURSTQ GET INTERRUPTING CTL UNIT ADDR @V407438 00788000
- ST R7,RCURSTQ RESTARTED CTL UNIT IS DONE NOW @V407438 00789000
- LR R7,R5 SET TO INT. CU FOR 2ND RESTART @V407438 00790000
- LA R3,8(R3) SET FOR CTL UNIT CHANGE @V407438 00791000
- C R3,=F'12' @V407438 00792000
- BNE BRESTART(R3) @V407438 00793000
- B *+4(R3) GO TO EXIT OR RESTART ROUTINE @V407438 00794000
- SPACE 00795000
- BRESTART B IOTGDISP EXIT FORTHWITH @V407438 00796000
- B IOTRSTCH CH CHANGE ONLY, RESTART INT CH @V407438 00797000
- B IOTRSTCU CU CHANGE ONLY, RESTART INT CU @V407438 00798000
- B IOTRSTCU CH & CU CHNGE, RESTRT FROM INT CU@V407438 00799000
- EJECT 00800000
- SPACE 00801000
- * STOP CHARGING FOR RESTART, AND 00802000
- * RE-ESTABLISH RUNUSER FOR DISPATCH 00803000
- * START CHARGING HIM 00804000
- IOTGDISP CHARGE SWITCH,LASTUSER @V407511 00805000
- AIF (NOT &AP).LOKSY8 00806000
- * IF MPSYSLOCK CAN BE OBTAINED, 00807000
- * THEN GOTO DSPCH, OTHERWISE, 00808000
- * GOTO DSPRU 00809000
- TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 00810000
- BZ GOTOCH NO, GOTO DSPCH @V407511 00811000
- L R15,=A(DMKLOKSY+2) GET ADDR OF SYSTEM LOCK @V407511 00812000
- CLC LPUADDR,0(R15) DO I ALREADY HAVE THE SYSTEM LOCK@V407511 00813000
- BE GOTOCH YES, GOTO DSPCH @V407511 00814000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO @V407593 00815000
- BNE GOTODSPA COULDNT GET LOCK - GOTO DSPA @V4M0173 00816000
- .LOKSY8 ANOP 00817000
- GOTOCH GOTO DMKDSPCH @V407593 00818000
- GOTODSPA GOTO DMKDSPA GO TRY TO REDISPATCH RUNUSER @V4M0173 00819000
- IOTRETRN DS 0H HERE TO EXIT FROM RESTART 00820000
- * STOP CHARGING RESTARTED USER 00821000
- * GET CALLERS R11 AND 00822000
- * START CHARGING HIM 00823000
- CHARGE SWITCH,SAVER11 @V407593 00824000
- EXIT RETURN TO CALLER 00825000
- EJECT 00826000
- SPACE 00827000
- PTHSAVE DC 2F'0' A(CHANNEL) & A(CTL UNIT) ON ENTRY@V407438 00828000
- EJECT 00829000
- *. 00830000
- * 00831000
- * H. OPERATION OF IOTGTIOB - 00832000
- * 1. IOTGTIOB IS CALLED WHEN AN UNSOLICITED INTERRUPT MUST BE 00833000
- * STACKED FOR FURTHER PROCESSING 00834000
- * 2. AN IOBLOK IS OBTAINED FROM FREE STORAGE 00835000
- * 3. AN APPROPRIATE IRA IS SELECTED FOR THE IOBLOK, BASED ON 00836000
- * THE DEVICE TYPE OF THE INTERRUPTING UNIT 00837000
- * 4. IF THE DEVICE IS DEDICATED, FILL IN THE VIRTUAL ADDRESS 00838000
- * AND THE USER 00839000
- * 5. EXIT TO CALLER 00840000
- * 00841000
- *. 00842000
- SPACE 00843000
- IOTGTIOB DS 0H 00844000
- LM R2,R3,CSW SAVE CSW @VA0706 00845000
- LH R4,INTTIO SAVE INTERRUPT DEVICE ADDR. @VA0706 00846000
- LA R0,IOBSIZE SIZE OF AN IOBLOK 00847000
- CALL DMKFREE GET ONE 00848000
- LR R10,R1 THE USUAL BASE 00849000
- XC IOBLOK(IOBSIZE*8),IOBLOK ZERO IT OUT 00850000
- ST R10,IOBLINK IOBLOK POINTS TO ITSELF (= ORIGINAL COPY) 00851000
- STH R4,IOBRADD ADDR INTERRUPTED DEV. INTO IOBLOK @VA0706 00852000
- STM R2,R3,CSW RESTORE CSW @VA0706 00853000
- L R1,ASYSVM GET ADDRESS OF SYSTEM VMBLOK 00854000
- ST R1,IOBUSER ASSUME ACCOUNTING FOR SYSTEM. 00855000
- L R0,ASYSVM GET SYSTEM VMBLOK PTR. @VA04573 00856000
- LTR R8,R8 IS THERE A RDEVBLOK ? 00857000
- BNP IOTGTIGN NO -- 00858000
- CLI RDEVTYPC,CLASDASD DASD DEVICE ? @VA04680 00859000
- BE IOTGTCON YES..LET IT GO... @VA04680 00860000
- TM APSTAT1,CPINITD IS CPI FINISHED @VA07842 00861000
- BO IOTGTCON YES, LET IT GO @VA07842 00862000
- L R14,=A(DMKRIOCN) CONSOLE TABLE POINTER @VA05684 00863000
- CLC INTTIO(2),2(R14) IS IT PRIMARY CONSOLE? @VA05684 00864000
- BE IOTGTCON YES, PROCESS INTERRUPT @VA05684 00865000
- LA R14,4(R14) POINT TO COUNT OF ALT. CONSOLES @V60BCAA 00866000
- L R1,0(R14) ACCESS NUMBER OF ALT. CONSOLES @V60BCAA 00867000
- ALTLOOP LTR R1,R1 ANY MORE ALTERNATE CONSOLES? @V60BCAA 00868000
- BZ IOTGTIGN NO, IGNORE INTERRUPT @V60BCAA 00869000
- BCTR R1,0 DECREMENT COUNT FOR NEXT TIME @V60BCAA 00870000
- * THROUGH LOOP 00871000
- LA R14,4(R14) POINT TO NEXT ALT. CONSOLE DATA @V60BCAA 00872000
- CLC INTTIO(2),2(R14) IS THIS AN ALTERNATE CONSOLE? @V60BCAA 00873000
- BE IOTGTCON YES, PROCESS INTERRUPT @V60BCAA 00874000
- B ALTLOOP GO SEE IF IT IS ANOTHER ALT CONS @V60BCAA 00875000
- IOTGTCON EQU * @VA04680 00876000
- TM RDEVSTAT,RDEVDED IS THE DEVICE DEDICATED ?? 00877000
- BO IOTGTDED YES -- 00878000
- OI IOBFLAG,IOBCP FLAG AS CP IO 00879000
- L R1,=A(DMKCNSIN) CLASTERM INTERRUPT HANDLER @V200820 00880000
- CLI RDEVTYPC,CLASTERM ? @V200820 00881000
- BNE *+20 NO, BYPASS TERMINAL SUPPORT @V2D3931 00882000
- CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE - 3270 @V2D3931 00883000
- BNE IOTGTUSR NO, SET UP IOBUSER & IOBIRA @V2D3931 00884000
- L R1,=A(DMKRGAIN) 3270 REMOTE INTERRUPT HANDLER @V305798 00885000
- B IOTGTUSR SET UP IOBUSER & IOBIRA @V2D3931 00886000
- L R1,=A(DMKRSPEX) SPOOL INTERRUPT HANDLER @V200820 00887000
- TM RDEVTYPC,CLASURI+CLASURO SPOOL DEVICE ? @V200820 00888000
- BNZ IOTGTUSR YES - SETUP IOBIRA@V200820 00889000
- L R1,=A(DMKDSBRD) CLASDASD ASYNCHRONOUS I/O @VA08187 00890000
- CLI RDEVTYPC,CLASDASD IS THIS DIRECT ACCESS ? @V200820 00891000
- BE IOTGTIRA YES, SET IOBUSER @VA01672 00892000
- L R1,=A(DMKGRFIN) CLASGRAF INTERRUPT HANDLER @V200820 00893000
- CLI RDEVTYPC,CLASGRAF GRAPHIC DEVICE ? @V200820 00894000
- BE IOTGTCHK YES - CHECK FOR PROCESSOR @V200820 00895000
- L R1,=A(DMKRNHIN) CLASSPEC INTERRUPT HANDLER @V200820 00896000
- CLI RDEVTYPC,CLASSPEC SPECIAL DEVICE ? @V200820 00897000
- BE IOTGTCHK YES - CHECK FOR PROCESSOR @V200820 00898000
- * B IOTGTIGN IGNORE THE INTERRUPT 00899000
- EJECT 00900000
- IOTGTIGN EQU * IGNORE THE INTERRUPT @V200820 00901000
- LA R1,IOTIGNOR SET IOBIRA = A(IOSIGNOR) @V200820 00902000
- B IOTGTIRA @V200820 00903000
- IOTGTCHK EQU * CHECK FOR 'SOMETIMES' MODULES @V200820 00904000
- LTR R1,R1 DOES THE INTERRUPT HANDLER EXIST @V200820 00905000
- BZ IOTGTIGN NO -- IGNORE THE INTERRUPT @V200820 00906000
- B IOTGTUSR @V200820 00907000
- IOTGTDED EQU * SET FOR DEDICATED DEVICE @V200820 00908000
- L R1,=A(DMKVIOIN) VIRTUAL I/O INTRPT HANDLER @VA07486 00909000
- LH R0,RDEVATT VIRTUAL DEVICE ADDRESS @V200820 00910000
- STH R0,IOBVADD ...INTO IOBLOK FOR DMKVIO @V200820 00911000
- IOTGTUSR EQU * SET IOBUSER = RDEVUSER @V200820 00912000
- L R0,RDEVUSER @V200820 00913000
- TM RDEVTYPC,CLASURO IS IT A 3800 PRINTER ? @V60B9BA 00914000
- BZ IOTGTIRA XFER IF NOT @V60B9BA 00915000
- CLI RDEVTYPE,TYP3800 IS IT REALLY A 3800 ? @V60B9BA 00916000
- BNE IOTGTIRA XFER IF NOT @V60B9BA 00917000
- TM RDEVSTAT,RDEVDED ATTACHED TO A USER? @V60B9BA 00918000
- BO IOTGTIRA XFER, RDEVUSER IS OK @V60B9BA 00919000
- L R0,ASYSVM BETTER LOAD SYSTEM VMBLOK @V60B9BA 00920000
- IOTGTIRA EQU * SET IOBUSER, IOBIRA FIELDS @V200820 00921000
- ST R0,IOBUSER @V200820 00922000
- ST R1,IOBIRA @V200820 00923000
- OI IOBSPEC,IOBUNSL FLAG AS UNSOLICITED INTRUPT @V200820 00924000
- BR R5 AND EXIT TO CALLER 00925000
- EJECT 00926000
- COPYIOB EQU * HERE TO COPY IOBLOKS FOR NON-DEVICE-END INTERRUPTS 00927000
- LA R0,IOBSIZE GET IOBLOK SIZE 00928000
- CALL DMKFREE GET CORE 00929000
- CL R10,RDEVAIOB STILL ACTIVE OVER THE CALL ? @VA03817 00930000
- BNE FRETCOPY NO- SYSTEM EXTENDED, INT CAME IN @VA03817 00931000
- TM IOBCSW+4,CE IF CHANNEL END WITH... @VA03817 00932000
- BZ COPYBLOK DEVICE END OR ATTENTION... @VA03817 00933000
- TM IOBCSW+4,DE+ATTN THAN DON'T COPY THE IOBLOK, @VA03817 00934000
- BZ COPYBLOK ENDING STATUS WAS RECEIVED..@VA03817*00935000
- WHILE THE SYSTEM WAS EXTENDING FREE STORAGE. 00936000
- FRETCOPY CALL DMKFRET FRET BLOCK, ENDING STATUS CAME IN@VA03817 00937000
- BR R5 THEN RETURN TO THE CALLER @VA03817 00938000
- SPACE 1 00939000
- COPYBLOK EQU * HERE IF ENDING STATUS NOT RECEIVED FOR THE DEVICE 00940000
- MVC 0(IOBSIZE*8,R1),0(R10) COPY THE BLOK 00941000
- * NOTE: "IOBLINK" IN COPIED IOBLOK DOES 00942000
- * NOT "POINT TO ITSELF" - INDICATING THAT 00943000
- * THIS IS "NOT THE FINAL INTERRUPT". 00944000
- LR R2,R10 SAVE THE ADDRESS OF THE OLD BLOK @VA04182 00945000
- LR R10,R1 GET ADDRESS OF NEW BLOK 00946000
- SLR R1,R1 CLEAR IOERBLOK POINTER @VA01225 00947000
- ST R1,IOBIOER . . .TO AVOID DOUBLE FRET @VA01225 00948000
- CALL DMKSTKIO STACK THE IOBLOK 00949000
- LR R10,R2 RESTORE ADDRESS OF OLD BLOK @VA04182 00950000
- XC IOBCSW(8),IOBCSW ZERO OLD CSW FOR NEXT INT. @VA03817 00951000
- BR R5 AND RETURN TO CALLER 00952000
- EJECT 00953000
- SPACE 00954000
- IOTIGNOR DS 0H 00955000
- LA R0,IOBSIZE SIZE OF IOBLOK 00956000
- IOTIGN01 LR R1,R10 AND ITS ADDRESS 00957000
- L R2,IOBIOER IOERBLOK ADDRESS IF THERE IS ONE @V200820 00958000
- CALL DMKFRET RETURN IOBLOK TO FREE STORAGE 00959000
- L R12,ADSPCH A(DMKDSPCH) FOR 'GOTO'-STYLE EXIT@V200820 00960000
- LTR R1,R2 WAS THERE AN IOERBLOK ? @V200820 00961000
- BCR 8,R12 NO -- GOTO DMKDSPCH @V200820 00962000
- LA R0,IOERSIZE IOERBLOK SIZE IN DOUBLE-WORDS @V200820 00963000
- AH R0,IOEREXT-IOERBLOK(,R1) ...PLUS EXTENSION @V200820 00964000
- CALL DMKFRET RELEASE THE IOERBLOK @V200820 00965000
- BR R12 GOTO DMKDSPCH @V200820 00966000
- SPACE 00967000
- EJECT 00968000
- * 00969000
- * QUEUE AN IOBLOK FIRST ON REAL DEVICE QUEUE 00970000
- * 00971000
- UE3270 EQU * @VA07390 00972000
- SLR R1,R1 CLEAR FOR INSERT @VA07390 00973000
- IC R1,RDEVQCNT ADD 1 TO COUNT OF IOBLOKS @VA07390 00974000
- LA R1,1(R1) QUEUED OFF THIS DEVICE BLOCK @VA07390 00975000
- STC R1,RDEVQCNT @VA07390 00976000
- LR R2,R8 SAVE BACK CHAIN POINTER @VA07390 00977000
- L R1,RDEVFIOB POINT TO 1ST IOBLOK @VA07390 00978000
- STM R1,R2,IOBFPNT STORE FWD & BWD CHAIN POINTERS @VA07390 00979000
- ST R10,RDEVFIOB INSERT NEW 1ST IOBLOK @VA07390 00980000
- ST R10,IOBBPNT-IOBLOK(R1) BACK CHAIN POINTER @VA07390 00981000
- SLR R10,R10 @VA07390 00982000
- ST R10,RDEVAIOB CLEAR ACTIVE IOBLOK @VA07390 00983000
- NI RDEVSTA2,255-RDEVRACT THIS DEVICE NOT BEING @VA08381 00984000
- * RESET 00985000
- OI RDEVSTAT,RDEVBUSY IT IS BUSY @VA07390 00986000
- B IOTGDISP NOW WAIT FOR DEVICE END @VA07390 00987000
- EJECT 00988000
- *. 00989000
- * 00990000
- * J. OPERATION OF IOTENSE - 00991000
- * 1. FLAG THE IOBLOK AS AN ERROR TASK 00992000
- * 2. IF THE DEVICE IS STILL BUSY, EXIT TO CALLER TO WAIT FOR THE 00993000
- * DEVICE END 00994000
- * 3. IF THE DEVICE IS FREE, START THE SENSE AND EXIT TO CALLER 00995000
- * 00996000
- *. 00997000
- SPACE 00998000
- IOTENSE EQU * HERE TO SENSE ALL UNITS @VA09137 00999100
- TM IOBSPEC2,IOBSNSIO UC WHILE ATTEMPTING SENSE @VA09137 01000100
- BO IOTENBAD TROUBLE -INTERRUPT TIME - SENSE @VA10398 01016010
- TM IOBSPEC2,IOBUC FIRST ENTRY AFTER UNIT CHECK? @V407438 01017000
- BZ IOTGTERR YES -- GO BUILD ERROR BLOK 01018000
- L R4,IOBIOER GET ADDRESS OF ERROR BLOK 01019000
- USING IOERBLOK,R4 @VM01071 01020000
- TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED? @VA03834 01021000
- BO IOTETCAW YES--GIVE CURRENT STATUS ONLY @VA03834 01022000
- OC IOBCSW(8),IOERCSW ADD OLD CSW TO NEW CSW @VM01071 01023000
- B IOTETCAW AND GO START SENSE 01024000
- SPACE 01025000
- IOTGTERR DS 0H SET ERROR CONTROL BLOKS 01026000
- LA R0,IOERSIZE GET ERROR RECORDING BLOK 01027000
- CALL DMKFREE -- 01028000
- ST R1,IOBIOER AND SAVE ITS ADDRESS 01029000
- LR R4,R1 AND USE GPR4 FOR ADDRESSABILITY 01030000
- XC IOERBLOK(IOERSIZE*8),IOERBLOK CLEAR TO ZEROES 01031000
- MVC IOERCSW,IOBCSW SAVE UNIT CHECK CSW 01032000
- TM IOBCSW+4,UC UNIT CHECK PRESENT @VA01599 01033000
- BCR 8,R5 NO, RETURN TO IN LINE CODE @VA01599 01034000
- LM R0,R1,IOTSNCCW GET MODEL SENSE CCW @VA09137 01034100
- ALR R0,R4 ADJUST DATA ADDRESS @VA09137 01034150
- STM R0,R1,IOERCCW SAVE IN IOERBLOK @VA09137 01034200
- OI IOBSPEC2,IOBUC FLAG ERROR TASK @VA09137 01034250
- TM IOBSPEC,IOBTIO+IOBHIO WAS THIS A SIO REQUEST @VA01599 01035000
- BNZ IOTPERP NO, GET SENSE CCW @VA01599 01036000
- TM IOBFLAG,IOBCP+IOBHVC IS THIS A CP OR DIAGNOSE @VA01599 01037000
- * REQUEST 01038000
- BNZ NOT3203 YES, GO AROUND 3203 CODE @VA09137 01039050
- TM RDEVSTAT,RDEVDED DEVICE DEDICATED ? @VA09137 01039100
- BNO IOTPERP NO,NO CHECK FOR 3203 @VA09137 01039150
- CLC RDEVTYPC(2),=AL1(CLASURO,TYP3203) 3203 PRINTER? @VA09137 01039200
- BNE IOTPERP NO, GET SENSE CCW @VA09137 01039250
- CLC CSW+4(2),=AL1(CE+UC,0) SPECIAL 3203 INTERRUPT? @VA09137 01039300
- BE SPECINT SPECIAL 3203 INTERRUPT @VA14489 01039360
- CLC CSW+4(2),=AL1(CE+UC+IL,0) SPECIAL 3203 @VA14489 01039365
- * INTERRUPT? 01039370
- BNE IOTPERP NO, GET SENSE CCW @VA14489 01039375
- SPECINT EQU * @VA14489 01039380
- OI IOBSPEC3,IOBPST TELL VIO TO POST @VA09137 01039400
- LR R3,R5 SAVE R5 IN R3 ACROSS BAL @VA09137 01039450
- BAL R5,COPYIOB REFLECT THIS INTERRUPT @VA09137 01039500
- LR R5,R3 RESTORE R5 @VA09137 01039550
- NI IOBSPEC3,255-IOBPST TURN OFF POST @VA09137 01039600
- B SNS3203 DO TIO @VA09137 01039650
- NOT3203 EQU * @VA09137 01039700
- OI IOBFLAG,IOBERP SET INDICATOR FOR ERP SUPPORT @VA01599 01040000
- IOTPERP EQU * @VA01599 01041000
- SPACE 01046000
- TM IOBCSW+4,CE IS THE DEVICE FREE ? @VA01068 01047000
- BZ IOTETCAW YES -- GO START THE SENSE 01048000
- TM IOBCSW+4,DE+ATTN IS DEVICE STILL BUSY ? @VA01068 01049000
- BNZ IOTETCAW NO, ISSUE SENSE COMMAND 01050000
- LH R1,IOBRADD GET REAL DEVICE ADDRESS @VM01011 01051000
- XC CSW(8),CSW CLEAR THE REAL CSW @VM01011 01052000
- TIO 0(R1) SEE IF IT'S REALLY BUSY @VM01011 01053000
- BC 8+1,IOTETCAW GO AHEAD WITH THE SENSE @VM01011 01054000
- BC 2,IOTENSWT REALLY BUSY - WAIT FOR IT @VM01011 01055000
- TM CSW+4,DE+UC+ATTN ENDING STATUS ? @VM01011 01056000
- BZ IOTENSWT NO -- WAIT FOR IT @VM01011 01057000
- OI IOBCSW+4,DE FAKE DEVICE END REGARDLESS @VM01011 01058000
- B IOTETCAW AND GO AHEAD WITH THE SENSE @VM01011 01059000
- IOTENSWT EQU * @VM01011 01060000
- TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED 01061000
- BO COPYIOB YES, COPY IOBLOK FOR DEDICATED USER'S 01062000
- BR R5 MUST WAIT FOR DEVICE END 01063000
- SPACE 01063100
- SNS3203 EQU * 3203 TIO CODE FOR 0A STATUS @VA09137 01063150
- LH R1,IOBRADD GET REAL DEVICE ADDRESS @VA09137 01063200
- XC CSW(8),CSW CLEAR CSW @VA09137 01063250
- TIO 0(R1) IS IT BUSY ? @VA09137 01063300
- BC 8+1,IOTETCAW GO AHEAD WITH SENSE @VA09137 01063350
- BCR 2,R5 WAIT FOR DEVICE END @VA09137 01063400
- TM CSW+4,DE DEVICE END ? @VA09137 01063450
- BZR R5 NO, WAIT FOR IT @VA09137 01063500
- OI IOBCSW+4,DE SET DE FOR REFLECTION @VA09137 01063550
- B IOTETCAW GO DO SENSE @VA09137 01063600
- SPACE 3 01064000
- EJECT 01065000
- IOTETCAW DS 0H 01066000
- LA R1,IOERCCW GET ADDRESS OF SENSE CCW 01067000
- ST R1,CAW SET UP CHANNEL ADDRESS WORD 01068000
- XI IOBSPEC2,IOBUC+IOBSNSIO UNFLAG UC, FLAG SENSE @V407438 01069000
- LH R1,IOBRADD GET DEVICE ADDRESS 01070000
- OI RDEVSTA2,RDEVCONC ALLOW PRESERVATION OF @VA01044*01071000
- CONTINGENT CONNECTION FOR VIRTUAL USER. @VA01044 01072000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE? @VA09500 01073100
- BNE IOTNSIO1 NO, NOT 3270 TYPE @VA05088 01074000
- TM RDEVTYPE,TYP3277+TYP3284 3277 OR 3284? @VA09500 01074100
- BZ IOTNSIO1 NO - BRANCH @VA09500 01074110
- LA R15,2000(R0) LOAD COUNT FOR 3270 @VA05088 01075000
- B IOTNSIO GO TO SIO FOR SENSE @VA05088 01076000
- RETYCNT DC F'40000' RETRY COUNT @VA09500 01076100
- IOTNSIO1 EQU * @VA05088 01077000
- L R15,RETYCNT LOAD RETRY COUNT @VA09500 01078100
- IOTNSIO SIO 0(R1) ATTEMPT TO DO SENSE 01079000
- BCR 8,R5 SENSE STARTED -- GO WAIT FOR INTERRUPT 01080000
- BC 1,IOTENFAL ERROR FOR CC = 3 ON SIO 01081000
- BC 4,IOTNCC1 GO CHECK OUT CSW FOR CC = 1 ON SIO 01082000
- TM RCHTYPE,RCHBMX BUSY VALID ONLY ON BLOCK MULTIPLEXOR 01083000
- BZ IOTINBAD OTHERWISE, PROBABLE FAILURE @VA01350 01084000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 01085100
- BNE NOTGRAF1 NO-BRANCH @VA09500 01085200
- TM RDEVTYPE,TYP3277+TYP3284 @VA09500 01085300
- BM IOTINBAD IF EITHER LIMITED RETRY @VA09500 01085400
- NOTGRAF1 DS 0H @VA09500 01085500
- B IOTNSIO FOR BMPX, LOOP UNTIL STARTED 01087000
- SPACE 01088000
- IOTNCC1 TM CSW+4,X'FF'-(SM+CUE+BUSY) U.C.OR IRREG STATUS? @VX04718 01089000
- BNZ IOTINBAD YES,RETRY 16 TIMES @VX04718 01090000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 01091100
- BNE NOTGRAF2 NO-BRANCH @VA09500 01091200
- TM RDEVTYPE,TYP3277+TYP3284 @VA09500 01091300
- BM ROUT3277 @VA09500 01091400
- NOTGRAF2 DS 0H @VA09500 01091500
- CLI CSW+4,BUSY IS IT JUST A DEVICE BUSY @VA12629 01093100
- BE IOTINBAD YES USE LIMITED RETRY @VA12629 01093200
- TM CSW+4,SM+CUE+BUSY CUE OR CU PENDING @VA12629 01093300
- BNZ IOTNSIO YES UNLIMITED RETRY @VX04718 01094000
- NOUN3277 EQU * @VA05088 01095000
- TM CSW+5,X'FF' ANY BAD CHANNEL STATUS 01096000
- BZ IOTNSIO NO, RETRY SENSE COMMAND 01097000
- TM CSW+5,IFCC+CCC IS THIS A CHANNEL DATA CHECK @VA01599 01098000
- BNZ IOTENFAL NO, GO INDICATE SENSE FAILED @VA01599 01099000
- SPACE 01100000
- IOTINBAD DS 0H RETRY FOR 'UC' OR BUSY ON SENSE @VA01350 01101000
- BCT R15,IOTNSIO RETRY 16 TIMES @VA01350 01102000
- SPACE 01103000
- IOTENFAL DS 0H HERE IF THE SENSE HAS FAILED 01104000
- MVC IOERLEN,ZEROES SENSE NOT AVAILABLE @VA10398 01104010
- IOTENBAD DS 0H @VA10398 01104020
- NI IOBSPEC2,X'FF'-IOBSNSIO SENSE NOT GOING -- @V407438 01105000
- NI RCHSTAT,X'FF'-RCHBUSY RESET CHANNEL BUSY 01106000
- NI RCUSTAT,X'FF'-RCUBUSY RESTE CU BUSY 01107000
- OI IOBSTAT,IOBFATAL SENSE HAS FAILED @VA01581 01108000
- B 4(,R5) TAKE ERROR EXIT - 01109000
- ROUT3277 TM CSW+4,SM+CUE+BUSY @VA05088 01110000
- BNZ IOTINBAD DO LIMITED RETRY @VA05088 01111000
- B NOUN3277 GO CHECK OTHER CONDITIONS @VA05088 01112000
- SPACE 01113000
- IOTSNCCW CCW 4,IOERDATA-IOERBLOK,SILI,IOERSNSZ MDL SENSE CCW @V407438 01114000
- DROP R4 01115000
- CLRSNS CCW 4,*-*,SILI+SKIP,24 CLEAR CONTENTION CONNECTION @VM08622 01116000
- EJECT 01117000
- IOTRECER DS 0H SET UP TO RECORD IOERROR 01118000
- L R0,RDEVIOER GET PRIMARY IOERBLOK 01119000
- LTR R0,R0 ANY QUEUED ?? 01120000
- BZ IOTGTEX NO -- USE IOBIOER 01121000
- ST R0,IOBIOER AND CHAIN TO IOBLOK 01122000
- SR R0,R0 CLEAR OUT 01123000
- ST R0,RDEVIOER REVBLOK POINTER 01124000
- IOTGTEX EQU * GET A CPEXBLOK TO STACK 01125000
- L R2,=A(DMKIOSRC) @VA09587 01126000
- SPACE 2 01127000
- IOTGCPEX EQU * BUILD AND STACK CPEXBLOK 01128000
- LA R0,CPEXSIZE GET A CP REQUEST BLOK 01129000
- CALL DMKFREE 01130000
- USING CPEXBLOK,R1 01131000
- LR R15,R2 SET THE RETURN TO EXECUTION ADDRESS 01132000
- * SET UP BY THE CALLER 01133000
- XC CPEXR13(4),CPEXR13 ZERO OUT REG 13 (NO SAVE AREA) 01134000
- STM R15,R12,CPEXADD AND SAVE REGISTERS 01135000
- L R3,=A(DMKIOSSV) @VA09587 01136000
- L R14,0(R3) @VA09587 01137000
- L R15,4(R3) @VA09587 01138000
- ST R14,CPEXR0 IN CASE LOSE CONTROL @VA07225 01139000
- ST R15,CPEXR1 IN CASE LOSE CONTROL @VA07225 01140000
- CALL DMKSTKMP STACK REQ. ON MAIN(I/O) PROC. @V407593 01141000
- BR R5 AND RETURN TO CALLER 01142000
- SPACE 3 01143000
- CHANOFF DC A(X'80000000') MASK FOR DISABLING CHANNEL @VA07955 01144000
- SPACE 3 01145000
- CCWL EQU 8 CCL LENGTH @V60B6B8 01146000
- SEEKPTL EQU 3 LENGTH OF PTR TO SEEK ARG @V60B6B8 01147000
- TICOFF EQU 9 OFFSET TO CCW PTR IN TIC @V60B6B8 01148000
- PREL EQU 24 LENGTH OF PREFIX @V60B6B8 01149000
- SSSI1ADD DC V(DMKSSUI1) @VA11455 01150010
- SSSI2ADD DC V(DMKSSUI2) @VA11455 01150020
- * CONSTANTS 01152000
- SET EQU X'FF' USED TO TEST IF FLAG IS SET @V407593 01153000
- IOTRCODE EQU 5 TRACE-TABLE FLAG FOR I/O INTERRUP@V407593 01154000
- SKSHDR EQU 6 SEEKS HEADER LENGTH @V60BEBC 01155000
- INCLUDE EQU X'80' SEEKS INCLUDE OPTION @V60BEBC 01156000
- EXCLUDE EQU X'40' SEEKS EXCLUDE OPTION @V60BEBC 01157000
- SEEKCL EQU X'01' SEEKS MONITOR MASK @VMI0067 01158000
- SPACE 1 @V407593 01159000
- LTORG @V407593 01160000
- EJECT 01161000
- COPY EQU 01162000
- COPY DEVTYPES 01163000
- PSA 01164000
- COPY SAVE 01165000
- COPY VMBLOK 01166000
- COPY IOBLOKS 01167000
- COPY RBLOKS 01168000
- COPY VBLOKS 01169000
- COPY IOER 01170000
- END DMKIOT 01171000
ibm/vm370-lib/cp/dmkiot.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator