ibm:vm370-lib:cp:dmkios.assemble_src
Table of Contents
DMKIOS Source
References
- Fixes Applied : 29
- This Source Date : Thursday, December 14, 1978
- Last Fix ID : [HRC078DK]
Source Listing
- DMKIOS.ASSEMBLE.txt
- IOS TITLE 'DMKIOS (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
- * * 00009100
- *MODULE NAME = DMKIOS * 00009200
- * * 00009300
- *DESCRIPTIVE NAME = DMKIOS (CP) I/O SCHEDULER * 00009400
- * * 00009500
- *COPYRIGHT = NONE * 00009600
- * * 00009700
- *STATUS = VM/370 - RELEASE 6, LEVEL 0 * 00009800
- * * 00009900
- *FUNCTION = TO SCHEDULE REQUESTS FOR VIRTUAL MACHINE AND CONTROL * 00010000
- * PROGRAM I/O OPERATIONS. * 00010100
- * * 00010200
- *NOTES = SEE BELOW * 00010300
- * * 00010400
- * DEPENDENCIES = NONE * 00010500
- * * 00010600
- * RESTRICTIONS = NONE * 00010700
- * * 00010800
- * REGISTER CONVENTIONS = R0 = PSA * 00010900
- * R1 = CPEXBLOK * 00011000
- * R2 = I/O RESTART INDEX (0, 4, 8 OR 12) * 00011100
- * R3 = INTERNAL SUBROUTINE LINKAGE (1ST LEVEL * 00011200
- * R4 = INTERNAL SUBROUTINE LINKAGE (3RD LEVEL * 00011300
- * R5 = INTERNAL SUBROUTINE LINKAGE (2ND LEVEL * 00011400
- * R6 = RCHBLOK BASE * 00011500
- * R7 = RCUBLOK BASE * 00011600
- * R8 = RDEVBLOK BASE * 00011700
- * R9 = DMKIOS 2ND BASE * 00011800
- * R10 = IOBLOK BASE * 00011900
- * R11 = VMBLOK BASE * 00012000
- * R12 = DMKIOS BASE * 00012100
- * R13 = SAVEAREA BASE FOR DMKIOSQR AND DMKIOSQV* 00012200
- * R14 = EXTERNAL SUBROUTINE LINKAGE * 00012300
- * R15 = EXTERNAL SUBROUTINE LINKAGE * 00012400
- * * 00012500
- * PATCH LABEL = N/A * 00012600
- * * 00012700
- *MODULE TYPE = CSECT * 00012800
- * * 00012900
- * PROCESSOR = ASSEMBLER XF * 00013000
- * * 00013100
- * MODULE SIZE = 8K BYTES (2 BASE REGISTERS DESIGN POINT) * 00013200
- * * 00013300
- * ATTRIBUTES = REENTRANT, RESIDENT. * 00013400
- * * 00013500
- *ENTRY POINT = DMKIOSQR * 00013600
- * * 00013700
- * PURPOSE = SCHEDULE A CP GENERATED I/O OPERATION * 00013800
- * * 00013900
- * LINKAGE = ENTERED VIA SVC CALL * 00014000
- * * 00014100
- *ENTRY POINT = DMKIOSQV * 00014200
- * * 00014300
- * PURPOSE = SCHEDULE A VIRTUAL MACHINE I/O OPERATION * 00014400
- * * 00014500
- * LINKAGE = ENTERED VIA SVC CALL * 00014600
- * * 00014700
- *ENTRY POINT = DMKIOSRW * 00014800
- * * 00014900
- * PURPOSE = PROCESS IOBLOK USED FOR REWIND * 00015000
- * * 00015100
- * LINKAGE = INTERRUPT RETURN ADDRESS FOR REWIND * 00015200
- * * 00015300
- *ENTRY POINT = DMKIOSHA * 00015400
- * * 00015500
- * PURPOSE = HALT AN ACTIVE DEVICE * 00015600
- * * 00015700
- * LINKAGE = ENTERED VIA SVC CALL * 00015800
- * * 00015900
- *ENTRY POINT = DMKIOSER * 00016000
- * * 00016100
- * PURPOSE = ERROR PROCESSING * 00016200
- * * 00016300
- * LINKAGE = CPEXBLOK RETURN ADDRESS DURING ERROR PROCESSING * 00016400
- * (FOR DISPATCHER TO COMPARE AGAINST) * 00016500
- * * 00016600
- *ENTRY POINT = DMKIOSRC * 00016700
- * * 00016800
- * PURPOSE = ERROR PROCESSING * 00016900
- * * 00017000
- * PURPOSE = CPEXBLOK RETURN ADDRESS DURING ERROR PROCESSING * 00017100
- * (FOR DISPATCHER TO COMPARE AGAINST) * 00017200
- * * 00017300
- *ENTRY POINT = DMKIOSRS * 00017400
- * * 00017500
- * PURPOSE = RESTART DEVICE * 00017600
- * * 00017700
- * LINKAGE = ENTERED VIA GOTO FROM DMKIOT * 00017800
- * * 00017900
- *ENTRY POINT = DMKIOSRU * 00018000
- * * 00018100
- * PURPOSE = RESTART CU-CH * 00018200
- * * 00018300
- * LINKAGE = ENTERED VIA GOTO FROM DMKIOT * 00018400
- * * 00018500
- *ENTRY POINT = DMKIOSRH * 00018600
- * * 00018700
- * PURPOSE = RESTART CH * 00018800
- * * 00018900
- * LINKAGE = ENTERED VIA GOTO FROM DMKIOT * 00019000
- * * 00019100
- *ENTRY POINT = DMKIOSRY * 00019200
- * * 00019300
- * PURPOSE = PERFORM ERROR RECOVERY * 00019400
- * * 00019500
- * LINKAGE = ENTERED VIA GOTO FROM DMKIOT * 00019600
- * * 00019700
- *ENTRY POINT = DMKIOSRQ * 00019800
- * * 00019900
- * PURPOSE = REQUEUE REQUEST * 00020000
- * * 00020100
- * LINKAGE = ENTERED VIA GOTO FROM DMKIOT * 00020200
- * * 00020300
- *ENTRY POINT = DMKIOSST * 00020400
- * * 00020500
- * PURPOSE = ISSUE SIO * 00020600
- * * 00020700
- * LINKAGE = ENTERED VIA GOTO FROM DMKIOT * 00020800
- * * 00020900
- *ENTRY POINT = DMKIOSSV * 00021000
- * * 00021100
- * PURPOSE = ADDRESS OF CHANNEL AND CONTROL UNIT UPON ENTRY * 00021200
- * * 00021300
- * LINKAGE = USED BY DMKIOT FOR ADDRESSES SAVE AREA * 00021400
- * * 00021500
- *INPUT = * 00021600
- * DMKIOSQR * 00021700
- * R8 = ADDRESS OF RDEVBLOK FOR UNIT TO START * 00021800
- * R10 = ADDRESS OF IOBLOK CONTAINING TASK INFORMATION * 00021900
- * R12 = BASE FOR DMKIOSQR * 00022000
- * R13 = ADDRESS OF STANDARD SAVEAREA * 00022100
- * DMKIOSQV * 00022200
- * R8 = ADDRESS OF VDEVBLOK FOR VIRTUAL DEVICE TO START * 00022300
- * R10 = ADDRESS OF IOBLOK CONTAINING TASK INFORMATION * 00022400
- * R12 = BASE FOR DMKIOSQV * 00022500
- * R13 = ADDRESS OF STANDARD SAVEAREA * 00022600
- * DMKIOSHA * 00022700
- * R8 = ADDRESS OF RDEVBLOK FOR UNIT TO HALT * 00022800
- * R10 = ADDRESS OF IOBLOK CONTAINING TASK INFORMATION * 00022900
- * R12 = BASE FOR DMKIOSHA * 00023000
- * R13 = ADDRESS OF STANDARD SAVEAREA * 00023100
- * DMKIOSRW * 00023200
- * R10 = ADDRESS OF IOBLOK CONTAINING TASK INFORMATION * 00023300
- * R12 = BASE FOR DMKIOSRW * 00023400
- * DMKIOSER * 00023500
- * R10 = ADDRESS OF IOBLOK CONTAINING TASK INFORMATION * 00023600
- * R12 = BASE FOR DMKIOSER * 00023700
- * DMKIOSRC * 00023800
- * R10 = ADDRESS OF IOBLOK CONTAINING TASK INFORMATION * 00023900
- * R12 = BASE FOR DMKIOSRC * 00024000
- * DMKIOSRH * 00024100
- * R12 = BASE FOR DMKIOSRH * 00024200
- * DMKIOSRQ * 00024300
- * R12 = BASE FOR DMKIOSRQ * 00024400
- * DMKIOSRS * 00024500
- * R12 = BASE FOR DMKIOSRS * 00024600
- * DMKIOSRU * 00024700
- * R12 = BASE FOR DMKIOSRU * 00024800
- * DMKIOSRY * 00024900
- * R12 = BASE FOR DMKIOSRY * 00025000
- * DMKIOSST * 00025100
- * R12 = BASE FOR DMKIOSST * 00025200
- * DMKIOSSV * 00025300
- * NONE * 00025400
- *OUTPUT = * 00025500
- * DMKIOSQR * 00025600
- * NONE * 00025700
- * DMKIOSQV * 00025800
- * NONE * 00025900
- * DMKIOSHA * 00026000
- * NONE * 00026100
- * DMKIOSRW * 00026200
- * NONE * 00026300
- * DMKIOSRH * 00026400
- * NONE * 00026500
- * DMKIOSRQ * 00026600
- * NONE * 00026700
- * DMKIOSRS * 00026800
- * NONE * 00026900
- * DMKIOSRU * 00027000
- * NONE * 00027100
- * DMKIOSRY * 00027200
- * NONE * 00027300
- * DMKIOSST * 00027400
- * NONE * 00027500
- *EXIT-NORMAL = * 00027600
- * DMKIOSQR * 00027700
- * RETURN TO CALLER VIA EXIT SVC * 00027800
- * DMKIOSQV * 00027900
- * RETURN TO CALLER VIA EXIT SVC * 00028000
- * DMKIOSHA * 00028100
- * RETURN TO CALLER VIA EXIT SVC * 00028200
- * DMKIOSER * 00028300
- * RETURN TO CALLER VIA EXIT SVC IF ENTRY WAS VIA CALL; * 00028400
- * ELSE TO DISPATCHER (DMKDSPCH OR DMKDSPA) VIA GOTO * 00028500
- * DMKIOSRW * 00028600
- * DMKDSPCH VIA GOTO * 00028700
- * DMKIOSRC * 00028800
- * DMKDSPCH VIA GOTO * 00028900
- * DMKIOSRH * 00029000
- * DMKDSPCH VIA GOTO * 00029100
- * DMKIOSRQ * 00029200
- * DMKDSPCH VIA GOTO * 00029300
- * DMKIOSRS * 00029400
- * DMKDSPCH VIA GOTO * 00029500
- * DMKIOSRU * 00029600
- * DMKDSPCH VIA GOTO * 00029700
- * DMKIOSRY * 00029800
- * DMKDSPCH VIA GOTO * 00029900
- * DMKIOSST * 00030000
- * DMKDSPCH VIA GOTO * 00030100
- *EXIT-ERROR = * 00030200
- * DMKIOSQR * 00030300
- * NONE * 00030400
- * DMKIOSQV * 00030500
- * NONE * 00030600
- * DMKIOSHA * 00030700
- * ABEND 1 * 00030800
- * ABEND 4 * 00030900
- * DMKIOSER * 00031000
- * ABEND 2 * 00031100
- * DMKIOSRW * 00031200
- * NONE * 00031300
- * DMKIOSRC * 00031400
- * NONE * 00031500
- * DMKIOSRH * 00031600
- * NONE * 00031700
- * DMKIOSRQ * 00031800
- * NONE * 00031900
- * DMKIOSRS * 00032000
- * NONE * 00032100
- * DMKIOSRU * 00032200
- * NONE * 00032300
- * DMKIOSRY * 00032400
- * NONE * 00032500
- * DMKIOSST * 00032600
- * NONE * 00032700
- * * 00032800
- *EXTERNAL REFERENCES = SEE BELOW * 00032900
- * * 00033000
- * ROUTINES = DMKSTKIO - TO STACK FOR 2ND LEVEL PROCESSING IOBLOKS FOR* 00033100
- * COMPLETED OPERATIONS. * 00033200
- * DMKSTKLP - TO STACK A PRIORITY CPEXBLOK * 00033300
- * DMKSTKMP - TO STACK A REQUEST ON MAIN (I/O) PROCESSOR * 00033400
- * DMKSCNRU - TO LOCATE RCHBLOK, RCUBLOK, AND RDEVBLOK FOR * 00033500
- * THE UNIT CAUSING THE INTERRUPT * 00033600
- * DMKIOERR - TO RECORD I/O ERRORS * 00033700
- * DMKCCHIS - TO HANDLE CHANNEL ERRORS DETECTED VIA STATUS * 00033800
- * STORED ON CC 1 AFTER A SIO * 00033900
- * DMKDASER - TO RETRY FAILING DASD OPERATIONS * 00034000
- * DMKRSPER - TO RETRY FAILING UNIT RECORD OPERATIONS * 00034100
- * DMKTAPER - TO RETRY FAILING TAPE OPERATIONS * 00034200
- * DMKBSCER - TO RETRY BISYNC OPERATIONS * 00034300
- * DMKTRDSI - TO TRACE VIRTUAL MACHINE START I/O INSTRUCTION 00034400
- * DMKFREE - TO OBTAIN FREE STORAGE FOR AN IOBLOK * 00034500
- * DMKFRET - TO RETURN IOBLOKS TO FREE STORAGE * 00034600
- * DMKSCHDL - TO ALTER A VIRTUAL MACHINE'S DISPATCH STATUS * 00034700
- * DMKENTSK - MONITOR SEEKS LIST * 00034800
- * DATA AREAS = DMKSYSVM - SYSTEM VMBLOK * 00034900
- * PSA - PREFIX STORAGE AREA * 00035000
- * IOERBLOK - I/O ERROR INFORMATION BLOCK * 00035100
- * IOBLOK - I/O TACK CONTROL BLOCK * 00035200
- * CPEXBLOK - * 00035300
- * RCHBLOK - REAL CHANNEL BLOCK * 00035400
- * RCUBLOK - REAL CONTROL UNIT BLOCK * 00035500
- * RDEVBLOK - REAL DEVICE BLOCK * 00035600
- * VMBLOK - VIRTUAL MACHINE CONTROL BLOCK * 00035700
- * SAVEAREA - SAVE AREA SVC CALL * 00035800
- * * 00035900
- * CONTROL BLOCKS = * 00036000
- * DMKRIOCU - START OF REAL CONTROL UNIT BLOCK LIST * 00036100
- * DMKRIOCT - LOOP DELIMITING ADDRESS * 00036200
- * * 00036300
- *TABLES = NONE * 00036400
- * * 00036500
- *MACROS = PSA * 00036600
- * * 00036700
- *CHANGE ACTIVITY = AS FOLLOWS: * 00036800
- * CHANGE 01 02/16/79 SPLIT OF MODULE DMKIOS - DMKIOS PORTION * 00036900
- * * 00037000
- *********************************************************************** 00037100
- EJECT 00126000
- COPY OPTIONS 00127000
- COPY LOCAL OPTIONS 00128000
- SPACE 2 00129000
- DMKIOS CSECT 00130000
- ENTRY DMKIOSQR,DMKIOSQV,DMKIOSHA @VA09587 00131000
- ENTRY DMKIOSER,DMKIOSRC @VA02760 00132000
- ENTRY DMKIOSRS,DMKIOSSV @VA09587 00132100
- ENTRY DMKIOSRH,DMKIOSRQ,DMKIOSRU,DMKIOSRY,DMKIOSST @VA09587 00132200
- ENTRY DMKIOSMQ QUEUE OF MINI IOB'S @V407438 00133000
- ENTRY DMKIOSNM NO. OF TIMES WERE OUT OF MINI'S @V407438 00134000
- SPACE 00135000
- EXTRN DMKSCHDL,DMKSTKIO,DMKSCNRU @VA09587 00136000
- EXTRN DMKCCHIS,DMKIOERR,DMKDASER,DMKTAPER,DMKRSPER @VA09587 00137000
- EXTRN DMKBSCER @VA09587 00139000
- EXTRN DMKENTSK @V60BEBC 00142000
- EXTRN HDKD7CIO HRC065DK 00142100
- EXTRN DMKRIOCT,DMKRIOCU @VA08355 00143000
- AIF (NOT &AP).DSPRU6 00144000
- EXTRN DMKDSPRU,DMKLOKSY @V4M0173 00145000
- .DSPRU6 ANOP 00146000
- EXTRN DMKSTKMP,DMKDSPA @V4M0173 00147000
- EXTRN DMKSTKLF @V4M0154 00148000
- SPACE 00150000
- AIF (NOT &TRACE(6)).IOSNDX 00151000
- EXTRN DMKTRDSI @V4M0240 00152000
- .IOSNDX ANOP (END OF EXTRN'S) 00153000
- SPACE 00154000
- USING PSA,R0 00155000
- USING CPEXBLOK,R1 00156000
- USING RCHBLOK,R6 00157000
- USING RCUBLOK,R7 00158000
- USING RDEVBLOK,R8 00159000
- USING IOBLOK,R10 00160000
- USING VMBLOK,R11 00161000
- USING SAVEAREA,R13 00162000
- SPACE 00163000
- USING DMKIOS,R12,R9 @VA04182 00164000
- EJECT 00165000
- *. 00166000
- * 00167000
- * A. OPERATION OF DMKIOSQR - 00168000
- * 0. FOR AP SUPPORT -- SWITCH TO I/O PROC. @V407593 00169000
- * 1. FLAG IOBLOK AS CP GENERATED I/O 00170000
- * 2. JOIN COMMON CODE AT IOSQCOM (C, BELOW) 00171000
- * 00172000
- *. 00173000
- SPACE 00174000
- DMKIOSQR ENTER 00175000
- L R9,IOSBASE2 SET SECOND BASE @VA04182 00176000
- SWITCH ENSURE EXECUTION ON I/O-PROC. @V407593 00177000
- OI IOBFLAG,IOBCP FLAG AS CP GENERATED I/O 00178000
- USING RDEVBLOK,R8 00181000
- B IOSQCOM CONTINUE 00182000
- SPACE 2 00183000
- *. 00184000
- * 00185000
- * B. OPERATION OF DMKIOSQV - 00186000
- * 0. FOR AP SUPPORT -- SWITCH TO I/O PROC. @V407593 00187000
- * 1. SAVE ADDRESS OF USER'S VMBLOK IN IOBUSER 00188000
- * 2. BUMP COUNT SIO'S IN VDEVBLOK 00189000
- * 3. JOIN COMMON CODE AT IOSQCOM (C, BELOW) 00190000
- * 00191000
- *. 00192000
- SPACE 00193000
- USING *,R12 00194000
- DMKIOSQV ENTER 00195000
- L R12,IOSBASE1 RESET THE BASE REGISTER TO DMKIOS@VA04182 00196000
- USING DMKIOS,R12 00197000
- L R9,IOSBASE2 SET SECOND BASE @VA04182 00198000
- USING DMKIOS,R12,R9 @VA04182 00199000
- SWITCH ENSURE EXECUTION ON I/O-PROC. @V407593 00200000
- ST R11,IOBUSER SAVE VMBLOK ADDRESS 00201000
- NI IOBFLAG,X'FF'-IOBCP TURN OFF CP GENERATED I/O FLAG 00202000
- TM IOBSPEC,IOBTIO+IOBHIO IS THIS A START I/O REQUEST ? 00203000
- BZ IOSQVREL YES -- ADD ONE TO SIO COUNTS 00204000
- USING VDEVBLOK,R8 00205000
- L R8,VDEVREAL POINT TO REAL DEVICE BLOCK 00206000
- B IOSQCOM GO SCHEDULE THE INSTRUCTION 00207000
- IOSQVREL EQU * INCREMENT START I/O COUNTS 00208000
- LA R1,1(0,0) 00209000
- AL R1,VDEVIOCT ADD ONE TO VIRTUAL SIO COUNT 00210000
- ST R1,VDEVIOCT 00211000
- L R8,VDEVREAL GET REAL DEVICE RDEVBLOK ADDRESS 00212000
- USING RDEVBLOK,R8 00213000
- SPACE 2 00214000
- EJECT 00215000
- *. 00216000
- * 00217000
- * C. OPERATION OF IOSQCOM - 00218000
- * 1. MARK IOBLOK AS NOT QUEUED, AND LINK IT TO ITSELF 00219000
- * 2. BUMP COUNT OF SIO'S IN RDEVBLOK 00220000
- * 3. IF THE DEVICE IS BUSY OR SCHEDULED, QUEUE THE IOBLOK FROM 00221000
- * THE DEVICE AND EXIT TO THE CALLER; OTHERWISE, 00222000
- * 4. CALL THE FIRST LEVEL SUBROUTINE IOSTRTDV TO SCHEDULE THE 00223000
- * OPERATION, AND EXIT TO THE CALLER 00224000
- * 00225000
- *. 00226000
- SPACE 00227000
- USING RDEVBLOK,R8 00228000
- IOSQCOM DS 0H 00229000
- ST R10,IOBLINK FORCE IOBLOK TO LINK TO ITSELF 00230000
- * IOBLOK POINTS TO ITSELF (= ORIGINAL COPY) 00231000
- SLR R1,R1 ZERO GPR-1 00232000
- ST R1,IOBIOER MAKE SURE THERE'S NO IOERBLOK PTR. 00233000
- NI IOBSPEC,255-IOBUNSL CLEAR UNSOL. INT. FLAG @VA05636 00234000
- TM RDEVADD,RDEVLDEV Is this a logical dev? HRC065DK 00234040
- BO LDEVIO Yes HRC065DK 00234050
- * BUMP COUNT FOR REQUESTS OF SIO'S 00234100
- TM IOBSPEC,IOBTIO+IOBHIO IS THIS A SIO? @VA11946 00234200
- BNZ NOCNT IF NOT - DON'T COUNT @VA11946 00234300
- LA R1,1 BUMP COUNT @VA11946 00234400
- AL R1,RDEVIOCT UPDATE THE SIO COUNT @VA11946 00234500
- ST R1,RDEVIOCT SAVE NEW COUNT @VA11946 00234600
- NOCNT EQU * @VA11946 00234700
- SPACE 00235000
- CLC RDEVTYPC(2),=AL1(CLASSPEC,TYPCTCA) CTCA DEVICE? @VA08043 00236000
- BNE IOSSCHZ NO, DON'T ALLOW HANG UP @VA08043 00237000
- TM IOBSPEC,IOBTIO+IOBHIO FOR TIO OR HIO? @VA08043 00238000
- BNZ IOSSCHX YES, DON'T WAIT @VA08043 00239000
- IOSSCHZ EQU * @VA08043 00240000
- IOSCHED TM RDEVSTAT,RDEVSCED+RDEVBUSY IS DEVICE AVAILABLE ? 00241000
- BNZ IOSQUED QUEUE IOBLOK @VA12963 00242100
- IOSSCHX EQU * @VA08043 00243000
- BAL R3,IOSTRTDV START THE I/O TO THIS DEVICE @VA04182 00244000
- B IOSQXIT RETURN TO CALLER 00245000
- LDEVIO EQU * HRC065DK 00245100
- MVC IOBRADD,RDEVADD Ensure LDEV addr in blokHRC069DK 00245150
- CALL HDKD7CIO Go analyze LDEV CCW str HRC065DK 00245200
- B IOSQXIT Return to caller HRC065DK 00245300
- SPACE 00246000
- IOSQUED BAL R4,IOSQDEV QUEUE THE IOBLOK OFF THE RDEVBLOK 00247000
- IOSQXIT EXIT RETURN TO CALLER 00248000
- SPACE 1 00248100
- EJECT 00249000
- *. 00250000
- * 00251000
- * OPERATION OF DMKIOSHA 00252000
- * 0. FOR AP SUPPORT -- SWITCH TO I/O PROC. @V407593 00253000
- * 1. IF IOB IS ACTIVE MARK THE RDEVBLOK TO BE RESET, ELSE 00254000
- * GOTO STEP 6. 00255000
- * 2. TURN RDEVHIO BIT ON IN THE ACTIVE IOB. 00256000
- * 3. IF 370 TYPE CHANNEL GO TO IOSTART TO HALT THE DEVICE. 00257000
- * 4. IF 360 TYPE CHANNEL AND THE CHANNEL IS BUSY WITH THE 00258000
- * DEVICE GO TO IOSTART TO HALT THE DEVICE, ELSE 00259000
- * RESCHEDULE THE IOB TO HALT THE DEVICE WHEN THE CHANNEL 00260000
- * OR CONTROL UNIT IS FREE OF ANY BURST OPERATION. 00261000
- * 5. RETURN TO CALLER. 00262000
- * 6. SEARCH DEVICE, CONTROL UNIT AND CHANNEL QUEUES FOR IOB. 00263000
- * 7. IF FOUND DEQUEUE AND STACK. 00264000
- * 8. RETURN TO CALLER. 00265000
- * 00266000
- *. 00267000
- SPACE 1 00268000
- USING *,R12 @VA04182 00269000
- DMKIOSHA ENTER ENTRY TO HALT AN ACTIVE DEVICE *00270000
- OR STACK A QUEUED IOBLOK. 00271000
- L R12,IOSBASE1 RESET THE BASE REGISTER TO DMKIOS@VA04182 00272000
- USING DMKIOS,R12 @VA04182 00273000
- L R9,IOSBASE2 SET SECOND BASE REG @VA04182 00274000
- USING DMKIOS,R12,R9 @VA04182 00275000
- TM IOBRADD,RDEVLDEV Is this an LDEV? HRC078DK 00275300
- BO IOSQXIT Avoid real halt i/o HRC078DK 00275500
- SWITCH ENSURE EXECUTION ON I/O-PROC. @V407593 00276000
- TM IOBSTAT,IOBMINI IS THIS A MINI IOB? @V407438 00277000
- BZ IOS4OK NOPE, OK THIS TIME @V407438 00278000
- ABEND 4 MUST CALL IOS WITH A REAL IOB @V407438 00279000
- IOS4OK EQU * CONTINUE @V407438 00280000
- CL R10,RDEVAIOB ACTIVE ON THE DEVICE ? @VA04182 00281000
- BNE SCANQS NO- SCAN ALL QUEUES FOR THE IOB @VA04182 00282000
- LH R1,IOBRADD POINT TO THE REAL DEVICE ADDRESS @VA05537 00283000
- CALL DMKSCNRU FIND THE CH-CU BLOK USING THE @VA05537 00284000
- * SAME PATH 00285000
- BZ IOS1OK ALL SET @VA05537 00286000
- ABEND 1 WHOOPS LOOKS LIKE A BAD IOB @VA05537 00287000
- * (FRET'ED ? ) 00288000
- IOS1OK ST R6,PTHSAVE SAVE RCHBLOK AND RCUBLOK @VA07225 00289000
- ST R7,PTHSAVE+4 FOR LATER USE @VA07225 00290000
- CL R10,RDEVAIOB IS R8 STILL POINTING TO THE @VA07225 00291000
- * SAME RDEVBLOK 00292000
- BNE IOS1 NO, BR. BAD IOB OR BAD CALLNG SEQ@V407438 00293000
- TM IOBFLAG,IOBERP IS ERP IN CONTROL? @VA05537 00294000
- BO HALTERP YES, SPECIAL HANDLING @VA05537 00295000
- TM IOBSPEC,IOBHIO+IOBTIO IS THIS A HALT OR TEST I/O@VA04182 00296000
- BNZ SKIPREST YES- DO NOT RESET JUST RESTART @VA04182 00297000
- * THE IOB 00298000
- OI IOBSPEC,IOBHIO RESET IOBLOK FOR HALT I/O @VA04182 00299000
- OI RDEVSTA2,RDEVRACT MARK THE DEVICE RESET @VA04182 00300000
- SKIPREST EQU * @VA05537 00301000
- TM RCHTYPE,RCH370 370 CHANNEL @VA04182 00302000
- BO IOSTART YES- GO LET THE CHANNEL DO THE @VA04182 00303000
- * WORK 00304000
- TM RDEVSTA2,RDEVBUCH IS THE DEVICE BUSY WITH THE @VA04182 00305000
- * CHAN 00306000
- BO IOSTART YES, THEN GO STOP IT NOW. @V407438 00307000
- LA R0,CLASSPEC*256+TYPCTCA SETUP FOR CTCA TEST @VA04182 00308000
- CH R0,RDEVTYPC TEST FOR CTCA @VA04182 00309000
- BE TSTCHBSY YES...SEE IF CHANNEL BUSY @VA04182 00310000
- TM RCUSTAT,RCUBUSY CONTROL UNIT BUSY? @VA04182 00311000
- BO IOSCBUSY YES- QUEUE THE DEVICE FIRST ON @VA04182 00312000
- * THE CU 00313000
- TSTCHBSY EQU * @VA04182 00314000
- TM RCHSTAT,RCHBUSY CHANNEL BUSY @VA04182 00315000
- BO IOSQBSY YES- QUEUE THE DEVICE FIRST ON @VA04182 00316000
- * THE CH 00317000
- B IOSTART NO BURST DEVICE WORKING, HALT @VA04182 00318000
- * THE DEVICE 00319000
- HALTERP TM RDEVSTAT,RDEVNRDY IS THE DEVICE NOT READY @VA05537 00320000
- BZ IOSQXIT IF READY, WAIT FOR ERP TO FINISH @VA07225 00321000
- LR R0,R6 RCHBLOK ADDR TO R0 @VA07225 00322000
- LR R1,R7 RCUBLOK ADDR TO R1 @VA07225 00323000
- B CALLERP IF NOT READY, QUIT @VA07225 00324000
- SPACE 00325000
- SCANQS EQU * SCAN DEV, CU AND CH QUEQES FOR @VA04182 00326000
- * IOB 00327000
- LR R2,R8 SET SCAN POINTER TO DEVICE BLOCK @VA04182 00328000
- BAL R5,DEQUEUE SCAN FOR IOB, IF FOUND DEQUEUE @VA04182 00329000
- BNZ CUA IF NOT FOUND BRANCH @VA04182 00330000
- IC R1,RDEVQCNT REDUCE QUEUE COUNT BY 1 @VA04182 00331000
- BCTR R1,0 ... @VA04182 00332000
- STC R1,RDEVQCNT ... @VA04182 00333000
- CL R8,RDEVFIOB @VA08180 00334000
- BNE STACKIOB YES- BRANCH @VA04182 00335000
- NI RDEVSTAT,255-RDEVSCED REMOVE SCHEDULED BIT @VA04182 00336000
- * NOTE: DO NOT REMOVE ANY BUSY BITS EVEN IF THERE IS NO ACTIVE 00337000
- * IOB. ANY INT. MUST RESTART THE DEVICE, CONTROL UNIT OR 00338000
- * CHANNEL BECAUSE THE INTERRUPT IS NOT UNSOLICITED. 00339000
- SPACE 1 00340000
- STACKIOB CALL DMKSTKIO STACK THE IOB @VA04182 00341000
- B IOSQXIT GO HOME @VA04182 00342000
- SPACE 1 00343000
- CUA L R7,RDEVCUA POINT TO THE PRIMARY CU @VA04182 00344000
- TM RCUTYPE,RCUSUB IS THIS A SUBORD CONTROL UNIT? @VA04182 00345000
- BZ SETPTR NO, BR. @V407438 00346000
- L R7,RCUPRIME POINT TO PRIMARY CONTROL UNIT @VA04182 00347000
- SETPTR LR R2,R7 SET SCAN POINTER TO CU BLOCK @VA04182 00348000
- BAL R3,CULOOP SCAN THE CU AND CH PATH @VA04182 00349000
- L R7,RDEVCUB GET ALTERNATE CONTROL UNIT @V407438 00350000
- LTR R7,R7 IS THERE ONE? @V407438 00351000
- BZ IOSQXIT NOPE, IOB NOT FOUND, MUST HAVE @V407438 00352000
- * BEEN STACKED BEFORE WE GOT HERE 00353000
- TM RCUTYPE,RCUSUB IS THIS CU A SUBORDINATE? @V407438 00354000
- BZ *+8 NOPE, ALL SET @V407438 00355000
- L R7,RCUPRIME ADDRESS OF THE PRIME CU BLOK @V407438 00356000
- LR R2,R7 SET SCAN POINTER TO CU BLOK @V407438 00357000
- BAL R3,CULOOP TRY TO FIND THE IOB ON THIS CU/CH@V407438 00358000
- B IOSQXIT NOPE, IOB NOT FOUND, MUST HAVE @V407438 00359000
- * BEEN STACKED BEFORE WE GOT HERE 00360000
- SPACE 1 00361000
- CULOOP BAL R5,DEQUEUE SCAN FOR IOB, IF FOUND DEQUEUE @VA04182 00362000
- BNZ CHA IF NOT FOUND BRANCH @VA04182 00363000
- LH R1,RCUQCNT REDUCE THE COUNT BY 1 @VA04182 00364000
- BCTR R1,0 ... @VA04182 00365000
- STH R1,RCUQCNT ... @VA04182 00366000
- TSTCUQ CL R7,RCUFIOB ANY IOB'S QUEUED ON CONTROL UNIT @VA04182 00367000
- BNE STARTDEV @VA08180 00368000
- NI RCUSTAT,255-RCUSCED NO- RESET THE SCHEDULED BIT @VA04182 00369000
- B STARTDEV @VA08180 00370000
- SPACE 1 00371000
- CHA SLR R1,R1 SET INDEX TO ZERO @V407438 00372000
- NEXTCH L R6,RCUCHA(R1) GET THE 1ST OR NEXT CHANNEL @V407438 00373000
- LTR R6,R6 IS THERE ONE? @V407438 00374000
- BZR R3 NOPE, RETURN @V407438 00375000
- LR R2,R6 SET TO SCAN THE CHANNEL BLOCK @V407438 00376000
- BAL R5,DEQUEUE GO SEARCH FOR THE IOB ON CHAN @V407438 00377000
- BZ DECRCNT IOB FOUND, GO FINISH UP @V407438 00378000
- LA R1,4(R1) BUMP CHANNEL INDEX @V407438 00379000
- CL R1,=F'12' HAVE WE LOOKED AT THE LAST CHAN? @V407438 00380000
- BHR R3 NO MORE CHANNELS, IOB NOT FOUND @V407438 00381000
- B NEXTCH CONTINUE LOOKING ON NEXT CHANNEL @V407438 00382000
- SPACE 00383000
- DECRCNT EQU * @VA08180 00384000
- LH R1,RCHQCNT REDUCE THE COUNT BY 1 @VA04182 00385000
- BCTR R1,0 ... @VA04182 00386000
- STH R1,RCHQCNT ... @VA04182 00387000
- B TSTCUQ TEST SCHEDULED BIT AND STACK IOB @VA04182 00388000
- SPACE 1 00389000
- DEQUEUE LM R14,R15,RDEVFIOB-RDEVBLOK(R2) GET IOB QUEUE *00390000
- POINTERS FOR CH, CU OR DEV BLOCK 00391000
- NEXTIOB CLR R10,R14 IOB FOUND ? @VA04182 00392000
- BE FOUND YES- BRANCH @VA04182 00393000
- CLR R14,R15 LAST IOB ? @VA04182 00394000
- BE NOTFOUND YES- BRANCH @VA04182 00395000
- L R14,IOBFPNT-IOBLOK(R14) POINT TO THE NEXT IOB @VA04182 00396000
- B NEXTIOB LOOP @VA04182 00397000
- SPACE 1 00398000
- FOUND LM R14,R15,IOBFPNT GRAB CHAIN POINTERS @VA04182 00399000
- ST R14,IOBFPNT-IOBLOK(R15) POINT PREV TO NEXT @VA04182 00400000
- ST R15,IOBBPNT-IOBLOK(R14) POINT NEXT TO PREV @VA04182 00401000
- ST R5,SAVEWRK2 SAVE R5 ACROSS 'IOSDQM' ROUTINE @V407438 00402000
- BAL R5,IOSDQM GO CLEAN UP ANY MINI IOB'S @V407438 00403000
- L R5,SAVEWRK2 RESTORE R5 @V407438 00404000
- BAL R1,IOSTSTIW CHECK VMIOWAIT STATUS @VA04182 00405000
- CLR R1,R1 SET CC=0 @VA04182 00406000
- BR R5 RETURN CC = 0; IOB FOUND @VA04182 00407000
- SPACE 1 00408000
- NOTFOUND TM NOTFOUND,X'FF' SET CC = 1 @VA04182 00409000
- BR R5 RETURN CC = 1; IOB NOT FOUND @VA04182 00410000
- STARTDEV EQU * @VA08180 00411000
- CALL DMKSTKIO @VA08180 00412000
- NI RDEVSTAT,255-(RDEVSCED+RDEVBUSY) @VA08180 00413000
- BAL R4,IOSDQDV @VA08180 00414000
- BAL R3,IOSTRTDV @VA08180 00415000
- B IOSQXIT @VA08180 00416000
- EJECT 00417000
- SPACE 00891000
- IOSIOERR EQU * @VA01762 00892000
- NI IOBSPEC2,X'FF'-(IOBUC+IOBSNSIO) CLEAR ERR. FLAGS@V407438 00893000
- TM IOBSPEC,IOBTIO WAS IOBLOK MARKED FOR 'TIO' ONLY @VA01762 00894000
- BO IOSSTACK YES - BYPASS ERP PROCESSING 00895000
- TM IOBFLAG,IOBCP+IOBHVC IS IT A CP GENERATED I/O 00896000
- BNZ IOSCPERR YES--GO TRY TO RESTART. 00897000
- BAL R5,IOSRECER GO, RECORD USER ERROR . 00898000
- B IOSRSTDV AND CONTINUE PROCESSING 00899000
- SPACE 00900000
- IOSCPERR DS 0H HERE FOR ERRORS IN CP GENERATED I/O 00901000
- CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS ? @V2D3931 00902000
- BNE IOSBSC NO, CHECK OTHER CLASES @V2D3931 00903000
- TM RDEVSTAT,RDEVDED IS THIS DEVICE DEDICATED @V2D3931 00904000
- BO IOSBSC YES, BYPASS CHECK FOR LINE @V2D3931 00905000
- TM IOBFLAG,IOBHVC IS THIS A DIAGNOSE REQUEST @V2D3931 00906000
- BO IOSBSC YES, BYPASS BISYNC LINE FTN. @V2D3931 00907000
- TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE ? @V2D3931 00908000
- BO IOSSERP YES, GO TO ERP SUPPORT @V2D3931 00909000
- IOSBSC EQU * @V2D3931 00910000
- TM RDEVTYPC,CLASURI+CLASURO+CLASDASD+CLASTAPE @V200820 00911000
- BZ IOSSTACK NO ERP - STACK THE IOBLOK @V200820 00912000
- TM RDEVTYPC,CLASURI+CLASURO @VA01599 00913000
- BZ IOSSERP NO, GO TO EREP SUPPORT @VA01599 00914000
- TM IOBFLAG,IOBHVC IS THIS A DIAGNOSE REQUEST @VA01599 00915000
- BO IOSSTACK YES, GO STACK THE IOBLOK @VA01599 00916000
- IOSSERP EQU * @VA01599 00917000
- TM IOBSPEC2,IOBRETRY HAVE ALREADY STACKED CPEX @VA08119 00918000
- BO IOSRSTCU YES, DONT STACK ANOTHER @VA08119 00919000
- OI IOBSPEC2,IOBRETRY CAN ONLY HANDLE ONE RETRY/IOB @VA08119 00920000
- OI IOBFLAG,IOBERP INDICATE ERP IN CONTROL @V408246 00921000
- LA R5,IOSRSTCU SET UP RETURN FROM THE CPEXBLOK ROUTINE 00922000
- * TO DEQUE THE NEXT IOBLOK AND LET THE 00923000
- * SYSTEM GO TO WORK. 00924000
- BAL R2,IOSGCPEX BUILD A CP EXECUTION BLOCK TO RETURN TO 00925000
- * THE NEXT INSTRUCTION 00926000
- DMKIOSER EQU * (DSP REFERENCES THIS LABEL) @VA02760 00927000
- USING *,R15 ADDRESSABILITY @VA09587 00927100
- L R12,IOSBASE1 RESET BASE REGISTER TO IOS @VA09587 00927150
- USING DMKIOS,R12 ADDRESSABILITY @VA09587 00927200
- L R9,IOSBASE2 RESET BASE REGISTER TO IOS @VA09587 00927250
- USING DMKIOS,R12,R9 ADDRESSABILITY @VA09587 00927300
- DROP R15 @VA09587 00927350
- L R15,IOBIOER GET ADDRESS OF IOERBLOK @VA01160 00929000
- LTR R15,R15 IS THERE AN IOERBLOK @VA01599 00930000
- BZ CALLERP NO, GO TO ERP SUPPORT @VA01599 00931000
- TM CSW+5,CDC+CCC+IFCC WAS THIS A CHANNEL ERROR @V508690 00932000
- BNZ CALLERP YES @V508690 00933000
- USING IOERBLOK,R15 ADDRESSABILITY @VA01160 00934000
- TM IOERDATA,INTREQ IS DEVICE READY ? @VA01160 00935000
- BNO CALLERP YES @VA01160 00936000
- OI VMRSTAT,VMIDLE DROP USER FROM QUEUE @VA01160 00937000
- CALL DMKSCHDL ... @VA01160 00938000
- DROP R15 @VA01160 00939000
- CALLERP DS 0H @V408246 00940000
- L R15,=A(DMKDASER) ADDR OF DASD ERP @VA01174 00941000
- CLI RDEVTYPC,CLASDASD DASD DEVICE ?? 00942000
- BE CALLRTRY YES -- 00943000
- L R15,=A(DMKRSPER) ADDRESS OF SPOOLING RETRY ROUTINE 00944000
- TM RDEVTYPC,CLASURI+CLASURO UNIT RECORD DEVICE ?? 00945000
- BNZ CALLRTRY 00946000
- L R15,=A(DMKTAPER) ADDRESS OF TAPE RETRY ROUTINE 00947000
- CLI RDEVTYPC,CLASTAPE IS THIS A TAPE DEVICE ? @V2D3931 00948000
- BE CALLRTRY YES, GO TO TAPE ERP MODULE @V2D3931 00949000
- L R15,=A(DMKBSCER) ADDRESS OF BISYNC RETRY ROUTINE@V2D3931 00950000
- SPACE 00951000
- CALLRTRY CALL (15),AFFINITY CALL APPROPRIATE RECOVERY ROUTINE@V407593 00952000
- NI IOBSPEC2,X'FF'-IOBRETRY TURN OFF IOBRETRY @VA12941 00952100
- ST R0,PTHSAVE RE-EST PTHSAVE INCASE LOST @VA07225 00953000
- ST R1,PTHSAVE+4 CONTROL ON GIVING CONTROL TO DAS @VA07225 00954000
- LR R1,R11 ADDR OF VMBLOK TO BE UNLOCKED .. @V407593 00955000
- C R1,LASTUSER IS VMBLOK LASTUSER? @V407508 00956000
- BE NOUNLOCK YES, DO NOT UNLOCK LASTUSER @V407508 00957000
- C R1,ASYSVM IS VMBLOK THE SYSTEM VMBLOK? @V407508 00958000
- BE NOUNLOCK YES, NO NEED TO UNLOCK SYSTEM @V407508 00959000
- LOCK RELEASE,TYPE=VMBLOK UNLOCK THIS VM @V407593 00960000
- NOUNLOCK DS 0H @V407508 00961000
- SPACE 00962000
- TM IOBFLAG,IOBERP IS ERP STILL IN CONTROL ?? 00963000
- BO IOSCKRST YES - TEST FOR RESTART REQUEST 00964000
- BAL R5,IOSRECER NO - GO RECORD ERROR 00965000
- B IOSRSTDV AND RESTART DEVICE 00966000
- SPACE 00967000
- IOSCKRST TM IOBFLAG,IOBRSTRT IS ERP REQUESTING RESTART ?? 00968000
- BNO IOSRSTCU NO--MUST BE WAITING FOR INT. @VA04277 00969000
- SLR R2,R2 @VA04277 00970000
- ST R2,RDEVAIOB CLEAR ACTIVE IOBLOK @VA04277 00971000
- NI RDEVSTAT,X'FF'-RDEVBUSY MARK DEVICE NOT BUSY @VA04277 00972000
- B IOSREQUE GO RESTART THE OPERATION @VA04277 00973000
- EJECT 01007000
- IOSSTACK DS 0H HERE TO 01008000
- CALL DMKSTKIO STACK THE IOBLOK 01009000
- * STOP CHARGING FOR INTERRUPT AND @V407593 01010000
- * START CHARGING RESTARTED USER @V407593 01011000
- CHARGE SWITCH,ASYSVM @V407593 01012000
- SPACE 01013000
- B IOSRSTDV @VA09587 01013100
- * 01013115
- USING *,R12 @VA09587 01013130
- DMKIOSRH DS 0H @VA09587 01013145
- L R12,IOSBASE1 @VA09587 01013160
- USING DMKIOS,R12 @VA09587 01013175
- L R9,IOSBASE2 @VA09587 01013190
- USING DMKIOS,R12,R9 @VA09587 01013205
- B IOSRSTCH @VA09587 01013220
- * 01013235
- USING *,R12 @VA09587 01013250
- DMKIOSRQ DS 0H @VA09587 01013265
- L R12,IOSBASE1 @VA09587 01013280
- USING DMKIOS,R12 @VA09587 01013295
- L R9,IOSBASE2 @VA09587 01013310
- USING DMKIOS,R12,R9 @VA09587 01013325
- B IOSREQUE @VA09587 01013340
- * 01013355
- DMKIOSRS DS 0H @VA09587 01013370
- USING *,R12 @VA09587 01013385
- L R12,IOSBASE1 @VA09587 01013400
- USING DMKIOS,R12 @VA09587 01013415
- L R9,IOSBASE2 @VA09587 01013430
- USING DMKIOS,R12,R9 @VA09587 01013445
- B IOSRSTDV @VA09587 01013460
- * 01013475
- USING *,R12 @VA09587 01013490
- DMKIOSRU DS 0H @VA09587 01013505
- L R12,IOSBASE1 @VA09587 01013520
- USING DMKIOS,R12 @VA09587 01013535
- L R9,IOSBASE2 @VA09587 01013550
- USING DMKIOS,R12,R9 @VA09587 01013565
- B IOSRSTCU @VA09587 01013580
- * 01013595
- USING *,R12 @VA09587 01013610
- DMKIOSRY DS 0H @VA09587 01013625
- L R12,IOSBASE1 @VA09587 01013640
- USING DMKIOS,R12 @VA09587 01013655
- L R9,IOSBASE2 @VA09587 01013670
- USING DMKIOS,R12,R9 @VA09587 01013685
- B CALLERP @VA09587 01013700
- * 01013715
- USING *,R12 @VA09587 01013730
- DMKIOSST DS 0H @VA09587 01013745
- L R12,IOSBASE1 @VA09587 01013760
- USING DMKIOS,R12 @VA09587 01013775
- L R9,IOSBASE2 @VA09587 01013790
- USING DMKIOS,R12,R9 @VA09587 01013805
- B IOSTART @VA09587 01013820
- * 01013835
- USING *,R15 @VA09587 01013850
- DMKIOSRC DS 0H @VA09587 01013865
- L R12,IOSBASE1 @VA09587 01013880
- DROP R15 @VA09587 01013895
- USING DMKIOS,R12 @VA09587 01013910
- L R9,IOSBASE2 @VA09587 01013925
- USING DMKIOS,R12,R9 @VA09587 01013940
- B IOSRC1 @VA09587 01013955
- IOSBASE1 DC A(DMKIOS) ADCONS MUST BE IN THE FIRST 4K @VA09587 01013970
- IOSBASE2 DC A(DMKIOS+4096) AND AFTER THE LAST ENTRY POINT @VA09587 01013985
- IOSRSTDV DS 0H 01014000
- SLR R2,R2 ... 01015000
- ST R2,RDEVAIOB CLEAR ACTIVE IOBLOK POINTER 01016000
- NI RDEVSTAT,X'FF'-RDEVBUSY AND MARK DEVICE NOT BUSY 01017000
- SPACE 01018000
- IOSRSTDE DS 0H 01019000
- BAL R4,IOSDQDV DEQUEUE THE NEXT IOBLOK OFF DEVICE QUEUE 01020000
- IOSREQUE BAL R3,IOSTRTDV +0, START THE I/O TO THIS DEVICE @V407438 01021000
- IOSRSTCU DS 0H +4, START THE CONTROL UNIT @V407438 01022000
- BAL R4,IOSDQCU DEQUEUE THE NEXT IOBLOK ON C.U. QUEUE 01023000
- BAL R3,IOSTRTCU +0, START I/O TO THIS CTL UNIT @V407438 01024000
- IOSRSTCH DS 0H +4, START THE CHANNEL @V407438 01025000
- BAL R4,IOSDQCH DEQUEUE NEXT IOBLOK OFF THE CHANNEL QUEUE 01026000
- BAL R3,IOSTRTCH +0, START I/O TO THIS CHANNEL @V407438 01027000
- TM RCHSTAT,RCHBUSY +4, IS THE CHANNEL BUSY? @V407438 01028000
- BO IOSTEXIT YES, EXIT 01029000
- C R6,RCHFIOB ANYTHING QUEUED ON THE CHANNEL 01030000
- BNE IOSRSTCH YES, RESTART IT 01031000
- EJECT 01032000
- IOSTEXIT LTR R13,R13 WAS ENTRY TO IOS FROM A "CALL" 01033000
- BNZ IOSRETRN YES, RETURN TO CALLER 01034000
- SLR R3,R3 SET BRANCH INDEX TO ZERO @V407438 01035000
- CL R6,RCHRSTQ DID WE RESTART DIFF. CHAN ON INT?@V407438 01036000
- BE CHKCU NOPE, GO CHECK CTL UNIT @V407438 01037000
- L R4,RCHRSTQ GET INTERRUPTING CHANNEL ADDR @V407438 01038000
- ST R6,RCHRSTQ RESTARTED CHANNEL IS DONE NOW @V407438 01039000
- LR R6,R4 SET TO INT. CHAN FOR 2ND RESTART @V407438 01040000
- LA R3,4(R3) SET FOR CHANNEL CHANGE ONLY @V407438 01041000
- CHKCU LTR R7,R7 DOES CU EXIST (COULD BE CH AVAIL)@V407438 01042000
- BNP BRESTART(R3) NOPE, GO TO DISP OR CH RESTART @V407438 01043000
- CL R7,RCURSTQ DID WE RESTART DIFF. CU ON INT? @V407438 01044000
- BE BRESTART(R3) NOPE, GO TO DISP OR CH RESTART @V407438 01045000
- L R5,RCURSTQ GET INTERRUPTING CTL UNIT ADDR @V407438 01046000
- ST R7,RCURSTQ RESTARTED CTL UNIT IS DONE NOW @V407438 01047000
- LR R7,R5 SET TO INT. CU FOR 2ND RESTART @V407438 01048000
- LA R3,8(R3) SET FOR CTL UNIT CHANGE @V407438 01049000
- C R3,=F'12' @V407438 01050000
- BNE BRESTART(R3) @V407438 01051000
- B *+4(R3) GO TO EXIT OR RESTART ROUTINE @V407438 01052000
- SPACE 01053000
- BRESTART B IOSGDISP EXIT FORTHWITH @V407438 01054000
- B IOSRSTCH CH CHANGE ONLY, RESTART INT CH @V407438 01055000
- B IOSRSTCU CU CHANGE ONLY, RESTART INT CU @V407438 01056000
- B IOSRSTCU CH & CU CHNGE, RESTRT FROM INT CU@V407438 01057000
- EJECT 01058000
- SPACE 01059000
- * STOP CHARGING FOR RESTART, AND @V407593 01060000
- * RE-ESTABLISH RUNUSER FOR DISPATCH@V407593 01061000
- * START CHARGING HIM @V407593 01062000
- IOSGDISP CHARGE SWITCH,LASTUSER @V407511 01063000
- AIF (NOT &AP).LOKSY8 01064000
- * IF MPSYSLOCK CAN BE OBTAINED, @V407593 01065000
- * THEN GOTO DSPCH, OTHERWISE, @V407593 01066000
- * GOTO DSPRU @V407593 01067000
- TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 01068000
- BZ GOTOCH NO, GOTO DSPCH @V407511 01069000
- L R15,=A(DMKLOKSY+2) GET ADDR OF SYSTEM LOCK @V407511 01070000
- CLC LPUADDR,0(R15) DO I ALREADY HAVE THE SYSTEM LOCK@V407511 01071000
- BE GOTOCH YES, GOTO DSPCH @V407511 01072000
- L R15,PREFIXB ACCESS OTHER PSA @VA09257 01072100
- TM XCPEND-PSA(R15),XCDISP IS DISPATCH PENDING @VA09257 01072300
- BO GOTODSPA YES, DO NOT OBTAIN LOCK @VA09257 01072500
- LOCK OBTAIN,TYPE=SYS,SPIN=NO @V407593 01073000
- BNE GOTODSPA COULDNT GET LOCK - GOTO DSPA @V4M0173 01074000
- .LOKSY8 ANOP 01075000
- GOTOCH GOTO DMKDSPCH @V407593 01076000
- GOTODSPA GOTO DMKDSPA GO TRY TO REDISPATCH RUNUSER @V4M0173 01077000
- IOSRETRN DS 0H HERE TO EXIT FROM RESTART 01078000
- * STOP CHARGING RESTARTED USER @V407593 01079000
- * GET CALLERS R11 AND @V407593 01080000
- * START CHARGING HIM @V407593 01081000
- CHARGE SWITCH,SAVER11 @V407593 01082000
- EXIT RETURN TO CALLER 01083000
- EJECT 01084000
- IOSTRTDV EQU * HERE TO START OR RESTART A DEVICE@V407438 01085000
- TM RDEVSTAT,RDEVDISA IS THE DEVICE OFF LINE ?? 01086000
- BO IOSNOPTH YES -- GO RETURN CC 3 01087000
- OI RDEVSTAT,RDEVSCED FLAG DEVICE AS SCHEDULED 01088000
- CLI RDEVTYPC,CLASDASD IS IT A MOVEABLE HEAD DEVICE ?? 01089000
- BNE IOSPATH NO -- NO SPLIT SEEK 01090000
- TM RDEVFTR,FTRRPS DOES DEVICE HAVE RPS FEATURE ? @V304498 01091000
- BZ IOSCKR NO -- GO TEST FOR SPLIT SEEK @V2A2029 01092000
- OI IOBFLAG,IOBRELCU RPS DEVICES LEAVE CU NONBUSY @V407438 01093000
- B IOSPATH CONTINUE -- 01094000
- SPACE 01095000
- IOSCKR DS 0H 01096000
- SPACE 01097000
- TM IOBSPEC,IOBTIO+IOBHIO IS THIS A 'TIO' OR 'HIO' ? 01098000
- BNZ IOSPATH YES -- SKIP SEEK CHECKING 01099000
- L R1,IOBCAW GET ADDRESS OF 1ST CCW 01100000
- CLI 0(R1),X'07' IS OPERATION A CYLINDER SEEK ?? 01101000
- BNE IOSPATH NO -- 01102000
- SPACE 01103000
- TM IOBFLAG,IOBSPLT RESTARTING SPLIT SEEK ?? 01104000
- BZ IOSCKSPL NO -- SEE IF THIS SEEK SHOULD BE SPLIT 01105000
- SPACE 01106000
- OI 4(R1),CC RECHAIN THE SEEK 01107000
- NI IOBFLAG,X'FF'-(IOBSPLT+IOBRELCU) AND UNFLAG TASK 01108000
- B IOSPATH GO RESTART 01109000
- SPACE 01110000
- IOSCKSPL DS 0H TEST FOR SEEK TO SPLIT 01111000
- TM IOBFLAG,IOBRSTRT RESTARTED OPERATION ? 01112000
- BO IOSPATH YES -- NO SPLIT SEEK FOR ERP. 01113000
- TM 4(R1),CC IS THE SEEK COMMAND CHAINED ?? 01114000
- BZ IOSPATH NO -- 01115000
- OI IOBFLAG,IOBSPLT+IOBRELCU FLAG SPLIT SEEK AND CU RELEASE 01116000
- NI 4(R1),X'FF'-CC AND UNCHAIN THE SEEK - 01117000
- SPACE 01118000
- IOSPATH TM IOBSTAT,IOBPATHF SPECIFIC PATH REQUESTED? @V407438 01119000
- BZ GETPATH NOPE, CONTINUE AND FIND ONE @V407438 01120000
- LR R0,R8 SAVE RDEVBLOK ADDRESS @V407438 01121000
- LH R1,IOBRADD GET THE PATH ADDRESS WE'RE TO USE@V407438 01122000
- CALL DMKSCNRU GO FIND RDEV, RCU AND RCH BLOCKS @V407438 01123000
- CLR R0,R8 RDEVBLOK BETTER BE THE SAME... @V407438 01124000
- BE GETPATH ... OK THIS TIME @V407438 01125000
- ABEND 5 SOMEBODY LIED ON ENTRY @V407438 01126000
- SPACE 01127000
- GETPATH BAL R5,IOSFINDP FIND AVAILABLE PATH DEVICE AND @V407438 01128000
- * RETURN IF SUCCESSFUL, ELSE EXIT ON GPR3 01129000
- * NOTE: THE REAL CHANNEL, CONTROL UNIT AND DEVICE ADDRESS 01130000
- * ARE SETUP IN THE IOBLOK BY THE FIND PATH SUBROUTINE. 01131000
- B IOSTART PATH FOUND, GO START THE I/O @V407438 01132000
- EJECT 01133000
- IOSTRTCU BAL R5,IOSFCH FIND CHAN PATH & FILL IN IOBRADD @V407438 01134000
- IOSTRTCH LH R1,IOBRADD GET THE FULL DEVICE ADDRESS @V407438 01135000
- CALL DMKSCNRU POINT TO THE PRIME CH, CU AND DEV@V407438 01136000
- BZ IOSTART AND START THIS DEVICE @V407438 01137000
- ABEND 2 IOBRADD BAD, IOB FRET'ED? @V407438 01138000
- SPACE 3 01139000
- *. 01140000
- * 01141000
- * F. OPERATION OF IOSTART - 01142000
- * IF THERE ARE ANY MINI IOB'S ON THE IOBLINK CHAIN, CALL 01143000
- * IOSDQM TO REMOVE THEM AND RETURN WITH THE MAIN IOB. 01144000
- * 1. IF THE IOBLOK HAS BEEN FLAGGED AS "RESET", FLAG THE DEVICE 01145000
- * AS AVAIALBLE AND ATTEMPT TO RESTART IT; OTHERWISE, CONTINUE 01146000
- * 2. CHAIN THE ACTIVE IOBLOK FROM THE RDEVBLOK, AND MARK THE 01147000
- * SUBCHANNEL PATH BUSY 01148000
- * 3. MARK THE APPROPRIATE UNITS IN THE I/O PATH BUSY 01149000
- * 4. LOCATE THE CALLER'S CAW, GET THE UNIT ADDRESS, AND ISSUE 01150000
- * THE SIO 01151000
- * 01152000
- *. 01153000
- SPACE 01154000
- IOSTART EQU * 01155000
- CL R10,IOBLINK IS THERE A MINI-IOB CHAIN? @V407438 01156000
- BE *+8 NOPE, SKIP @V407438 01157000
- BAL R5,IOSDQM YUP, GO CLEAN UP MINI IOB CHAIN @V407438 01158000
- TM IOBFLAG,IOBRES HAS I/O REQUEST BEEN RESET ?? 01159000
- BZ IOSETIOB NO -- GO SAVE ADDRESS OF ACTIVE IOBLOK 01160000
- TM RDEVSTA2,RDEVRACT IS DEVICE BEING RESET 01161000
- BO IOSETIOB YES- MUST FINISH THE RESET 01162000
- NI RDEVSTAT,X'FF'-RDEVSCED UNFLAG DEVICE SCHEDULED 01163000
- NI RCUSTAT,X'FF'-RCUSCED AND CU ALSO 01164000
- BAL R1,IOSTSTIW CHECK VMIOWAIT STATUS @VA04182 01165000
- B IOSSTACK STACK IOBLOK AND RESTART DEVICE @VM08864 01166000
- EJECT 01167000
- * HERE TO TURN OFF VMIOWAIT IF A RESET IOB WAS ABOUT TO BE 01168000
- * STARTED. IF VMBLOK-LOCK IS NOT HELD (OR ACQUIRED), THEN 01169000
- * A CPEXBLOK MUST BE STACKED. 01170000
- SPACE 2 01171000
- SPACE 01172000
- IOSETIOB DS 0H SAVE ADDRESS OF ACTIVE IOBLPK 01173000
- ST R10,RDEVAIOB SAVE ADDRESS OF ACTIVE IOBLOK 01174000
- OI RDEVSTAT,RDEVBUSY MARK DEVICE BUSY - 01175000
- NI RDEVSTAT,X'FF'-RDEVSCED AND RESET SCHEDULED, IF NEEDED 01176000
- TM RCHTYPE,RCHSEL IS THIS A SELECTOR CHANNEL? @V407438 01177000
- BZ IOSRCHNB NOPE, BR. DO NOT MARK IT BUSY @V407438 01178000
- OI RCHSTAT,RCHBUSY SET CHANNEL BUSY FLAG 01179000
- IOSRCHNB TM RCUTYPE,RCUSHRD ONLY 1 SUBCHANNEL FOR THIS CU ? 01180000
- BZ IOSRCUNB NO, DO NOT MARK BUSY 01181000
- OI RCUSTAT,RCUBUSY SET CONTROL UNIT BUSY 01182000
- NI RCUSTAT,X'FF'-RCUSCED AND RESET SCHEDULED 01183000
- IOSRCUNB TM IOBFLAG,IOBRSTRT IS THIS A RESTARTED OPERATION ? 01184000
- BO IOSRCAW YES, USE THE RESTART CAW 01185000
- TM IOBSPEC2,IOBSNSIO THIS IOB FOR SENSE?? @VA10557 01185100
- BNO IOSCAW NO, PROCESS AS NORMAL @VA10557 01185200
- L R2,IOBIOER OTHERWISE USE IOERCAW @VA10557 01185300
- LTR R2,R2 IF THERE IS NO IOERBLOK @VA10557 01185400
- BZ ABND09 THEN ABEND VM/370 @VA10557 01185500
- LA R2,IOERCCW-IOERBLOK(R2) POINT R2 AT SENSE CCW @VA10557 01185600
- B IOSTCAW AND CONTINUE AS BEFORE @VA10557 01185700
- ABND09 DS 0H IF WE ARE HERE, THEN THERE MUST @VA10557 01185800
- ABEND 9 BE TROUBLE IN RIVER CITY @VA10557 01185900
- SPACE 01186000
- SPACE 01187000
- IOSCAW DS 0H 01188000
- L R2,IOBCAW LOAD THE 1ST CCW ADDRESS 01189000
- B IOSTCAW CONTINUE 01190000
- SPACE 01191000
- IOSRCAW L R2,IOBRCAW LOAD THE RESTART CCW ADDRESS 01192000
- SPACE 01193000
- IOSTCAW ST R2,CAW STORE IN THE CHANNEL ADDRESS WORD 01194000
- IOSSIO NI IOBSTAT,X'FF'-IOBCC3 RESET CONDITION CODE IN IOBLOK 01195000
- XC CSW(8),CSW CLEAR CSW FOR SIO 01196000
- XC IOBCSW(8),IOBCSW CLEAR ANY OLD STATUS IN CSW @VA03817 01197000
- LH R1,IOBRADD LOAD REAL DEVICE ADDRESS 01198000
- SPACE 01199000
- TM IOBSPEC,IOBTIO+IOBHIO IS THIS REALLY A TIO OR HIO ? 01200000
- BNZ IOSQTIO YES -- GO FIND OUT WHICH 01201000
- SPACE 01205000
- SIO 0(R1) START THE I/O OPERATION 01206000
- SPACE 01207000
- AIF (NOT &TRACE(9)).TR2 01208000
- BAL R15,TRACESUB TRACE THE STARTIO (RETURN R15+2) 01209000
- DC X'0B00' TRACE TABLE FLAG FOR START I/O 01210000
- .TR2 ANOP 01211000
- SPACE 3 01212000
- *. 01213000
- * 01214000
- * 5. FOR CC = 0 ON A SPLIT SEEK TO A DASD DEVICE, 01215000
- * ISSUE A TIO SO THE STATUS OF THE SEEK CAN BE INTERROGATED. 01216000
- * IF THE ACCESS ARM REQUIRES MOVEMENT RESTART ANY REQUESTS 01217000
- * QUEUED FROM THE CONTROL UNIT. IF THE ARM IS ALREADY 01218000
- * POSITIONED RESTART THE DEVICE. 01219000
- * FOR A NON-DASD DEVICE, EXIT TO DMKDSPCH AFTER TAKING THE 01220000
- * VIRTUAL MACHINE OUT OF IOWAIT 01221000
- * 6. CC = 2 SHOULD OCCUR ONLY FOR A BLOCK MULTIPLEXOR CHANNEL; 01222000
- * IF IT DOES, REQUEUE THE IOBLOK ON THE CHANNEL AND EXIT; 01223000
- * OTHERWISE, ASSUME A FALSE BUSY ON MPX AND RETRY THE SIO 01224000
- * 7. CC = 3 IS FLAGGED AS A FATAL ERROR AND THE IOBLOK IS STACK- 01225000
- * ED FOR RETURN TO THE CALLER 01226000
- * 8. FOR CC = 1, STATUS IS TESTED FOR ERRORS AND SENSE IS SCHED- 01227000
- * ULED VIA A CALL TO IOSENSE (J, BELOW); WHEN THE SENSE IS 01228000
- * STARTED, RETURN TO CALLER 01229000
- * 9. IF NO ERRORS ARE INDICATED AND THE OPERATION IS COMPLETE 01230000
- * (DE POSTED), STACK THE IOBLOK AND CALL IOSRSTRT (E, ABOVE) 01231000
- * TO RESTART THE PATH 01232000
- * 10. IF THE OPERATION IS NOT COMPLETE (PCI OR CE WITHOUT DE), 01233000
- * COPY AND STACK THE IOBLOK AND RESTART THE CHANNEL AND CU 01234000
- * VIA A CALL TO IOSRSTRT (E, ABOVE) 01235000
- * 11. EXIT TO THE CALLER (EITHER IOSRSTRT OR IOSQCOM) 01236000
- * 01237000
- *. 01238000
- SPACE 01239000
- BC 8,IOSCC0 BRANCH IF SUCCESSFULLY STARTED 01240000
- BC 4,IOSCC1 BRANCH IF CSW STORED 01241000
- BC 1,IOSCC3 BRANCH IF NOT OPERATIONAL 01242000
- SPACE 2 01243000
- IOSQBSY TM RCHTYPE,RCHMPX BYTE MULTIPLEXER CHANNEL ? @VA01383 01244000
- BO *+8 YES - DO NOT MARK BUSY @VA01383 01245000
- OI RCHSTAT,RCHBUSY SET CHANNEL BUSY @VA01662 01246000
- NI RCUSTAT,X'FF'-RCUBUSY RESET CONTROL UNIT BUSY FLAG 01247000
- OI RDEVSTAT,RDEVSCED DEVICE IS SCHEDULED @VA04452 01248000
- L R1,RCHFIOB GET POINTER TO CHANNEL QUEUE 01249000
- BAL R4,IOSQCHSK AND QUEUE AND WAIT FOR CHANNEL AVAILABLE 01250000
- LH R4,RCHQCNT ADD 1 TO COUNT OF IOBLOCKS @VA01044 01251000
- LA R4,1(R4) QUEUED OFF THIS CHANNEL 01252000
- STH R4,RCHQCNT @VA01044 01253000
- XC RDEVAIOB(4),RDEVAIOB CLEAR ACTIVE IOBLOK POINTER@VA0773 01254000
- TM RCUTYPE,RCUSHRD ONLY 1 SUBCHAN FOR THIS CU @V407438 01255000
- BZ *+8 NOPE, MANY, DO NOT MARK SCHEDULED@V407438 01256000
- OI RCUSTAT,RCUSCED SET CONTROL UNIT SCHEDULED FLAG 01257000
- B IOSTEXIT AND EXIT 01258000
- EJECT 01259000
- IOSQTIO TM IOBSPEC,IOBHIO IS THIS A HALT I/O REQUEST? @V407438 01260000
- BO IOSQHIO YUP, BR. @V407438 01261000
- SPACE 01262000
- TIO 0(R1) ISSUE REQUESTED TEST I/O 01263000
- SPACE 01264000
- AIF (NOT &TRACE(9)).TRTIO 01265000
- BAL R15,TRACESUB TRACE THE TEST I/O (RETURN R15+2) 01266000
- DC X'0E00' TRACE TABLE FLAG FOR TEST I/O 01267000
- .TRTIO ANOP 01268000
- BC 8,IOSDVFRE CC = 0 DEVICE IS FREE 01269000
- BC 4,TIOCC1 CC = 1 CSW STORED 01270000
- BC 1,IOSCC3 CC = 3 NOT OPERATIONAL 01271000
- B IOSQBSY QUEUE IOBLOK UNTIL CHANNEL IS FREE 01272000
- SPACE 2 01273000
- IOSQHIO HDV 0(R1) ISSUE REQUESTED HALT I/O 01274000
- SPACE 01275000
- AIF (NOT &TRACE(9)).TRHIO 01276000
- BAL R15,TRACESUB TRACE THE HALT DEVICE (RETURN R15+2) 01277000
- DC X'0F00' TRACE TABLE FLAG FOR HALT DEVICE 01278000
- .TRHIO ANOP 01279000
- HIOBR DS 0H @VA05687 01280000
- BC 8,IOSCBUSY CC = 0 CONTROL UNIT BUSY 01281000
- BC 4,HIOCC1 CC = 1 CSW STORED 01282000
- BC 1,IOSCC3 CC = 3 NOT OPERATIONAL 01283000
- TM RCHTYPE,RCH370 370 TYPE CHANNEL 01284000
- BO IOSQBSY YES- WAIT FOR INT *01285000
- NO- HDV WORKS LIKE A HIO FOR 360 CHANNEL *01286000
- AND A BURST OPERATION WAS JUST HALTED 01287000
- NI RDEVSTA2,X'FF'-RDEVBUCH RESET DEVICE BUSY WITH CHANNEL 01288000
- OI IOBSTAT,IOBCC2 PASS CC = 2 TO THE CALLER 01289000
- TM RDEVSTA2,RDEVRACT DEVICE RESET 01290000
- BZ IOSNOSK NO- BURST DEVICE HALTED (ALL SET) 01291000
- CLEANUP NI IOBSPEC,X'FF'-IOBHIO RESET THE HIO BIT 01292000
- OI IOBSPEC,IOBTIO SET UP FOR A TEST I/O 01293000
- B IOSSIO GO DRAIN THE DEVICE 01294000
- SPACE 1 01295000
- IOSDVFRE NI RCHSTAT,255-RCHBUSY FREE UP THE DEVICE PATH 01296000
- NI RCUSTAT,255-RCUBUSY ... 01297000
- TM RDEVSTA2,RDEVRACT IS DEVICE BEING RESET ? 01298000
- BZ RESETFLG NO, BR. @V407438 01299000
- NI IOBSPEC,X'FF'-IOBTIO REMOVE TIO BIT 01300000
- OI IOBSTAT,IOBFATAL FATAL ERROR IF ACTIVE DEV RESET 01301000
- NI IOBFLAG,X'FF'-IOBRSTRT CLEAR RESTART FLAG @VA01327 01302000
- RESETFLG EQU * @VM01157 01303000
- NI RDEVSTA2,X'FF'-(RDEVBUCH+RDEVRACT) RESET FLAGS IF ON 01304000
- B IOSSTACK LEAVE THE USER IN IOWAIT @VM08864 01305000
- EJECT 01306000
- IOSCC0 DS 0H HERE FOR SUCCESSFUL SIO: 01307000
- CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE? 01308000
- BNE SKIPDA NOPE, BR. 01309000
- TM CPCREG8+2,SEEKCL SEEKS MONITORING ACTIVE? @VMI0068 01310000
- BNO NOMC NO, DON'T MONITOR CALL @VMI0068 01311000
- CLI RDEVTYPE,TYP2305 IS DASD DEV. A DRUM @VA07979 01312000
- BE NOMC YES, DON'T MONITOR ZERO LNTH SEEK@VA07979 01313000
- STM R0,R7,TEMPSAVE SAVE REGS FOR SEARCH @V60BEBC 01314000
- L R7,=A(DMKENTSK) GET TO MON SEEKS LIST @V60BEBC 01315000
- ICM R7,B'1111',0(R7) .... @V60BEBC 01316000
- BZ RELOAD RESTORE REGS AND ISSUE MC @VMI0067 01317000
- LA R6,SKSHDR(R7) SKIP HEADER TO BEGINNING OF LIST @V60BEBC 01318000
- LH R5,0(R7) NUM. DEVICES TO R5 @V60BEBC 01319000
- BCTR R5,0 LESS 1 @V60BEBC 01320000
- SLL R5,1 TIMES 2 YIELD OFFSET TO LAST @V60BEBC 01321000
- * ENTRY @V60BEBC 01322000
- AR R5,R6 ADDR(LAST)=ADDR(FIRST)+LAST @V60BEBC 01323000
- * OFFSET @V60BEBC 01324000
- NXTSCAN CR R5,R6 UPPER BOUND:LOWER BOUND @V60BEBC 01325000
- BL NOTFOUN DEV ADDRESS NOT FOUND @V60BEBC 01326000
- LR R4,R5 SET MIDPOINT @VA09284 01327100
- AR R4,R6 TO @VA09284 01327200
- SRL R4,2 FLOOR((UBOUND+LBOUND)/2) @V60BEBC 01328000
- SLL R4,1 THIS DOES PROPER ROUNDING @V60BEBC 01329000
- CH R1,0(R4) COMPARE I/O DEV ADDRS @V60BEBC 01330000
- BE FOUN FOUND IT @V60BEBC 01331000
- BH ADJUSTL ADJUST LOWER BOUND @V60BEBC 01332000
- LR R5,R4 ADJUST UPPER BOUND TO @V60BEBC 01333000
- S R5,F2 MIDPOINT LESS 2 @V60BEBC 01334000
- B NXTSCAN NEXT PASS @V60BEBC 01335000
- ADJUSTL LA R6,2(R4) LOWER BOUND=MIDPOINT+2 @V60BEBC 01336000
- B NXTSCAN NEXT PASS @V60BEBC 01337000
- FOUN TM 4(R7),INCLUDE MONITOR SEEK IF INCLUDED @V60BEBC 01338000
- BO RELOAD ... @V60BEBC 01339000
- B NOGO DON'T MONITOR IF EXCLUDED @V60BEBC 01340000
- NOTFOUN TM 4(R7),EXCLUDE MONITOR SEEK IF EXCLUDED @V60BEBC 01341000
- BO RELOAD ... @V60BEBC 01342000
- NOGO LM R0,R7,TEMPSAVE RESTORE REGS @V60BEBC 01343000
- B NOMC @V60BEBC 01344000
- RELOAD LM R0,R7,TEMPSAVE RESTORE REGS @V60BEBC 01345000
- IOSMC MC MNCOCYL,MNCLSEEK MONITOR SEEK I/O REQUEST 01346000
- NOMC EQU * @VA07979 01347000
- LH R5,IOBCYL GET TARGET ARM POSITION 01348000
- STH R5,RDEVCYL POSITION IT IN THE DEVICE BLOCK 01349000
- SKIPDA EQU * NON-DASD, CONTINUE... 01350000
- OI RDEVSTA2,RDEVBUCH MARK DEVICE BUSY WITH CHANNEL 01351000
- NI RDEVSTA2,X'FF'-RDEVCONC RESET CONTINGENT @VA01044*01352000
- CONNECTION @VA01044 01353000
- TM IOBFLAG,IOBSPLT IOS IOB DOING A SPLIT SEEK ? 01354000
- BZ IOSNOSK NO - BRANCH. 01355000
- IOSTIO TIO 0(R1) YES - CLEAR STATUS 01356000
- BC 2,IOSTIO WAIT UNTIL CHANNEL IS CLEAR. 01357000
- TM CSW+4,DE IS ACCESS ARM ALREADY THERE ? 01358000
- BZ IOSCHEND IF NOT, RESTART DEVICES OFF CONTROL UNIT 01359000
- NI IOBFLAG,X'FF'-IOBSPLT TURN OFF SPLIT SEEK FLAG 01360000
- L R2,CAW RELOAD ADDRESS OF CCW'S FROM CAW @VA00739 01361000
- OI 4(R2),CC AND RECHAIN THE SEEK CCW. 01362000
- B IOSSIO RESTART THE CHANNEL PROGRAM 01363000
- IOSCHEND NI RCHSTAT,X'FF'-RCHBUSY FLAG CHANNEL AND 01364000
- NI RCUSTAT,X'FF'-RCUBUSY CONTROL UNIT AS NOT BUSY 01365000
- NI RDEVSTA2,X'FF'-RDEVBUCH RESET DEVICE BUSY WITH CHANNEL 01366000
- B IOSRSTCU RESTART THE CONTROL UNIT AND CHANNEL 01367000
- SPACE 1 01368000
- IOSNOSK TM IOBFLAG,IOBCP+IOBHVC+IOBPAG CP-GEN I/O OPERATION ? 01369000
- BNZ IOSDTCH YES - DO NOT CHANGE USER STATUS @VM08572 01370000
- TM IOBSPEC,IOBSIOF START I/O FAST RELEASE ? @VA01382 01371000
- BO IOSDTCH YES - HE'S NOT IN VMIOWAIT @VA01382 01372000
- AIF (NOT &TRACE(6)).IOSNTRC @V407593 01373000
- TM VMTRCTL,VMTRSIO TRACE WANTED?... @V407593 01374000
- BZ IOSNTRC NO, NOT THIS TIME... @V407593 01375000
- BAL R5,IOSTRACE TRACE WANTED, SCHED. CPEX BLOCK A@V407593 01376000
- B IOSDTCH THEN CONTINUE WITH I/O WORK. @V407593 01377000
- EJECT 01378000
- * APU SUPPORT CODE TO TURN OFF IOWAIT BIT IN RSTAT, AND EITHER 01379000
- * PERFORM THE SCHEDULER FUNCTION OF TURNING ON THE VMRUN-BIT IN 01380000
- * VMDSTAT OR ELSE CALL THE SCHEDULER. THE VMBLOK-LOCK MUST 01381000
- * BE HELD BEFORE TESTING OR CHANGING RSTAT--IF LOCK IS HELD 01382000
- * OR CAN BE OBTAINED, TURN OFF VMIOWAIT IN VMRSTAT, OTHERWISE 01383000
- * STACK A CPEX-BLOCK FOR SUBSEQUENT TURN-OFF AND CONT. WITH I/O 01384000
- * NEXT, IF RSTAT IS NOW ZERO AND VMDSTAT HAS ONLY INQUE, THEN 01385000
- * THE SCHEDULER FUNCTION OF TURNING ON VMRUN CAN BE PERFORMED, 01386000
- * OTHERWISE A CALL TO THE SCHEDULER IS REQUIRED. THIS IN TURN 01387000
- * REQUIRES THAT THE SYSTEM LOCK BE HELD. 01388000
- * NOTE THAT THIS PLACES IN DMKIOS A SCHEDULER FUNCTION. 01389000
- SPACE 4 01390000
- .IOSNTRC ANOP @V407593 01391000
- IOSNTRC EQU * HERE TO TURN OFF VMIOWAIT AND, @V407593 01392000
- * CALL (OR STACK) CALL TO SCHEDULE 01393000
- AIF (NOT &AP).APCHK4 01394000
- TM APSTAT1,APUOPER APU OPERATIONAL @V407593 01395000
- BO LOCKSQ YES, GO TO MP LOGIC @V407593 01396000
- .APCHK4 ANOP 01397000
- NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF IOWAIT @V407593 01398000
- CL R11,RUNUSER IS RESTARTED USER RUNUSER @V407593 01399000
- BNE GOSCHED NO, LET DMKSCH KNOW ABOUT IT @VA09196 01400100
- TM CPSTAT,CPRUN WAS SYSTEM ACTUALLY RUNNING @VA09196 01400300
- * RUNUSER 01400500
- BO IOSDTCH YES, DISPATCH WILL CALL SCH. @VA09196 01400700
- GOSCHED CALL DMKSCHDL @VA09196 01400900
- AIF (NOT &AP).APCHK5 01402000
- B IOSDTCH AND CONTINUE WITH I/O @V407593 01403000
- LOCKSQ LTR R13,R13 CALL ENTRY?IF YES, VM-&SYS-LOCKS HELD @V4M0137 01404000
- BZ OBTLKS NO, LOCKS NOT HELD @V4M0137 01405000
- NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF IOWAIT @V4M0137 01406000
- CL R11,RUNUSER IS RESTARTED USER RUNUSER? @VA09196 01406100
- BE IOSDTCH YES, DISPATCH WILL CALL SCHD. @VA09196 01406600
- CALL DMKSCHDL LET SCHEDULER KNOW ABOUT IT @V4M0137 01407000
- B IOSDTCH AND CONTINUE WITH I/O PROCESSING @V4M0137 01408000
- OBTLKS CLC VMLOCK+2(2),LPUADDR IS VMLOCK HELD? @V4M0137 01409000
- BNE OBTVML1 NO...GO TRY TO LOCK IT @V4M0137 01410000
- CLI VMDSTAT,VMINQ IS ONLY THE 'INQUE'-BIT ON?? @V4M0137 01411000
- BNE OBTSL1 BR. IF NOT @V4M0137 01412000
- CLI VMRSTAT,VMIOWAIT IS ONLY THE IOWAIT BIT ON?? @V4M0137 01413000
- BNE OBTSL1 BR. IF ITS NOT @V4M0137 01414000
- NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF IOWAIT, AND @V4M0137 01415000
- OI VMDSTAT,VMRUN TURN ON VMRUN IN D-STAT @V4M0137 01416000
- B IOSDTCH AND CONTINUE WITH I/O PROCESSING @V4M0137 01417000
- OBTSL1 DS 0H @VA07467 01418000
- L R15,=A(DMKLOKSY+2) LOAD ADDR OF SYSTEM LOCK @VA07467 01419000
- CLC LPUADDR,0(R15) LOCK ALREADY HELD @VA07467 01420000
- BE OBTSL2 YES, SKIP OBTAINING SYSTEM LOCK @VA07467 01421000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO @VA07467 01422000
- BE OBTSL2 GOT THE LOCK @V4M0137 01423000
- LA R2,TOFFSH ADDR OF ENTRY ON UNSTACK @V4M0137 01424000
- BAL R5,IOSGCPEX GO BUILD/STACK A CPEX BLOCK @V4M0137 01425000
- B IOSDTCH AND CONTINUE WITH I/O PROCESSING @V4M0137 01426000
- OBTSL2 NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF IOWAIT, AND @V4M0137 01427000
- CALL DMKSCHDL CALL SCHEDULER, AND @V4M0137 01428000
- BAL R5,RELSL GO RELEASE MP-SYS LOCK @V4M0137 01429000
- B IOSDTCH AND CONTINUE WITH I/O PROCESSING @V4M0137 01430000
- OBTVML1 LR R1,R11 REG1 GETS VMBLOCK TO BE LOCKED @V4M0137 01431000
- LOCK OBTAIN,TYPE=VMBLOK,SPIN=NO,OPTION=NOUPDT @V4M0173 01432000
- BE OBTVML2 BR. IF LOCK WAS OBTAINED @V4M0137 01433000
- LA R2,TOFFSH ADDR OF ENTRY ON UNSTACK @V4M0137 01434000
- BAL R5,IOSGCPEX GO BUILD/STACK A CPEX BLOCK @V4M0137 01435000
- B IOSDTCH AND CONTINUE WITH I/O PROCESSING @V4M0137 01436000
- OBTVML2 CLI VMDSTAT,VMINQ IS ONLY THE 'INQUE'-BIT ON?? @V4M0137 01437000
- BNE OBTSL3 BR. IF NOT @V4M0137 01438000
- CLI VMRSTAT,VMIOWAIT IS ONLY THE IOWAIT BIT ON?? @V4M0137 01439000
- BNE OBTSL3 BR. IF ITS NOT @V4M0137 01440000
- NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF IOWAIT, AND @V4M0137 01441000
- OI VMDSTAT,VMRUN TURN ON VMRUN IN D-STAT @V4M0137 01442000
- B RELVML THEN GO RELEASE VM-LOCK @V4M0137 01443000
- OBTSL3 L R15,=A(DMKLOKSY+2) LOAD ADDR OF SYSTEM LOCK @V4M0169 01444000
- CLC LPUADDR,0(R15) LOCK ALREADY HELD @V4M0169 01445000
- BE OBTSL4 YES, SKIP OBTAINING SYSTEM LOCK @V4M0169 01446000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO 01447000
- BE OBTSL4 GOT THE SYSLOCK...OUT OF IOWAIT. @V4M0137 01448000
- LA R2,TOFFSH ADDR OF ENTRY ON UNSTACK @V4M0137 01449000
- BAL R5,IOSGCPEX GO BUILD/STACK A CPEX BLOCK @V4M0137 01450000
- B RELVML @V4M0137 01451000
- OBTSL4 NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF IOWAIT, AND @V4M0137 01452000
- CALL DMKSCHDL LET THE SCHEDULER KNOW ABOUT IT @V4M0137 01453000
- BAL R5,RELSL GO RELEASE MP-SYS LOCK @V4M0137 01454000
- RELVML LR R1,R11 LOAD REG FOR UNLOCK @V4M0168 01455000
- LOCK RELEASE,TYPE=VMBLOK @V4M0168 01456000
- L R14,PREFIXB ACCESS PREFIX OF APU @V4M0173 01457000
- CLI CPSTATUS-PSA(R14),CPWAIT IS AP IDLE @V4M0173 01458000
- BNE IOSDTCH NO @V4M0173 01459000
- TM VMDSTAT,VMRUN DOES VM APPEAR RUNNABLE @V4M0173 01460000
- BZ IOSDTCH NO @V4M0173 01461000
- SIGNAL WAKEUP WAKE-UP APU @V4M0173 01462000
- B IOSDTCH AND CONTINUE WITH I/O PROCESSING @V4M0137 01463000
- RELSL EQU * HERE ON REG 5 TO RELEASE SYS-LOCK@V4M0137 01464000
- LOCK RELEASE,TYPE=SYS @V4M0137 01465000
- BR R5 AND RETURN @V4M0137 01466000
- TOFFSH NI VMRSTAT,X'FF'-VMIOWAIT TURN OFF BIT, AND @V4M0137 01467000
- CALL DMKSCHDL CALL SCHEDULER, AND @V4M0137 01468000
- GOTO DMKDSPCH @V4M0137 01469000
- EJECT 01470000
- .APCHK5 ANOP 01471000
- IOSDTCH EQU * PRIME BLOCK MULTIPLEXOR CHANNELS @VM08572 01472000
- TM RCHTYPE,RCHBMX BLOCK MULTIPLEXER CHANNEL @VM08572 01473000
- BZ IOSTEXIT NO - FORGET TCH CMD. @VM08572 01474000
- LH R1,RCHADD PICK UP CHANNEL ADDRESS @VA04045 01475000
- CL R6,RCHFIOB ANYTHING ON CHANNEL @VA04045 01476000
- BE TSTSUBCH NO- TEST SUBCHANNEL @VA04045 01477000
- TM RCUTYPE,RCUSHRD ONLY ONE SUBCHANNEL @VA04045 01478000
- BZ TESTCHAN NOPE, GO ATTEMPT RCU RESTART @V407438 01479000
- TCH 0(R1) PRIME FOR CHANNEL AVAILABLE INT. @VA04045 01480000
- BZ IOSRSTCH RESTART THE CHANNEL @VA04045 01481000
- OI RCHSTAT,RCHBUSY BUSY - USE ALT PTH ON NEXT REQ @V407438 01482000
- B IOSTEXIT IF BUSY EXIT @VA04045 01483000
- SPACE 01484000
- TSTSUBCH TM RCUTYPE,RCUSHRD ONLY ONE SUBCHANNEL @VA04045 01485000
- BO IOSTEXIT YES- EXIT @VA04045 01486000
- CL R7,RCUFIOB ANYTHING WAITING ON SUBCHANNEL @VA04045 01487000
- BE IOSTEXIT NO- EXIT @VA04045 01488000
- TESTCHAN TCH 0(R1) PRIME FOR CHANNEL AVAILABLE INT. @VA04045 01489000
- BZ IOSRSTCU RESTART THE CONTROL UNIT @VA04045 01490000
- OI RCHSTAT,RCHBUSY SET CHANNEL BUSY @VA04045 01491000
- B IOSRSTCU PROMOTE IOB TO CHANNEL QUEUE TO @VA04045*01492000
- BE RESTARTED BY CHANNEL AVAILABLE INT. 01493000
- SPACE 3 01494000
- TIOCC1 CLI CSW+4,SM+CUE+BUSY 370X STATUS = X'70' ?? @VA05928 01495000
- BE IOSQTIO YES REISSUE TIO @VA05928 01496000
- TM RDEVSTA2,RDEVRACT ACTIVE DEVICE RESET ?? @VA05928 01497000
- BZ IOSCC1 NO- BRANCH 01498000
- TM CSW,X'04' IS LOGOUT PENDING INDICATED ? @VA01068 01499000
- BO IOSCCSET YES, GO SAVE CSW @VA01068 01500000
- CLI CSW+4,SM+BUSY CONTROL UNIT BUSY ? 01501000
- BE IOSCBUSY QUEUE FIRST OF THE CHANNEL 01502000
- NI RDEVSTA2,X'FF'-RDEVRACT RESET THE RESET BIT 01503000
- NI IOBSPEC,X'FF'-IOBTIO REMOVE THE TIO BIT 01504000
- OI IOBFLAG,IOBRES DO NOT LET THE IOB BE RESTARTED 01505000
- NI IOBFLAG,X'FF'-IOBRSTRT CLEAR RESTART FLAG @VA01327 01506000
- OI IOBSTAT,IOBFATAL FATAL ERROR IF ACTIVE DEV RESET 01507000
- CLI CSW+4,BUSY IS THE DEVICE BUSY ? 01508000
- BE IOSTEXIT YES- WAIT FOR THE I/O INTERUPTION *01509000
- (DO NOT ALTER THE USER'S STATUS) 01510000
- B IOSCCSET GO AHEAD @VA04240 01514000
- SPACE 1 01515000
- HIOCC1 CLI CSW+4,SM+BUSY CONTROL UNIT BUSY 01516000
- BE IOSCBUSY YES- QUEUE THE IOB (WAIT FOR CU END) 01517000
- TM CSW,X'04' IS LOGOUT PENDING INDICATED ? @VA01068 01518000
- BO IOSCCSET YES, GO SAVE CSW @VA01068 01519000
- TM RDEVSTA2,RDEVRACT DEVICE RESET ? 01520000
- BZ IOSCC1 NO, RETURN CONDITION CODE 1 @VA05687 01521000
- CLI CSW+4,SM+BUSY+CUE PATH IMMINENTLY FREE? @VA05687 01522000
- BNE CLEANUP NO, SOMETHING HAPPENED @VA05687 01523000
- LA R2,16 SET UP FOR 16 RETRIES @VA05687 01524000
- HIORLOOP HDV 0(R1) TRY AGAIN TO HALT THE DEVICE @VA05687 01525000
- AIF (NOT &TRACE(9)).TRHIOR @VA05687 01526000
- BAL R15,TRACESUB TRACE THE HIO @VA05687 01527000
- DC X'0F00' HIO TRACE TABLE CODE @VA05687 01528000
- .TRHIOR ANOP 01529000
- BC 8+2+1,HIOBR IF IT WORKED, USE NORMAL CODE @VA05687 01530000
- CLI CSW+4,SM+BUSY+CUE DID IT WORK? @VA05687 01531000
- BNE HIOCC1 YES, CHECK IT OUT @VA05687 01532000
- BCT R2,HIORLOOP RETRY @VA05687 01533000
- * OTHERWISE WE WILL ASSUME THAT NOTHING IS REALLY ACTIVE 01534000
- SPACE 01535000
- IOSCC1 OI IOBSTAT,IOBCC1 SET CC = 1 IN THE IOBLOK 01536000
- IOSCCSET EQU * 01537000
- SLR R2,R2 CLEAR RESTART INDEX 01538000
- MVC IOBCSW,CSW AND SAVE THE CSW 01539000
- TM CSW+5,CDC+CCC+IFCC ARE THERE ANY CHANNEL ERRORS ? 01540000
- BZ IOSJ2 NO,SKIP 01541000
- TM CSW,X'04' IS LOGOUT PENDING INDICATED ? @VA01068 01542000
- BZ IOSCCH NO LOGOUT PEND - CALL DMKCCH @VA13318 01543000
- SLR R1,R1 CLEAR WORK REG @VA13318 01543100
- IC R1,IOBERCNT LOGOUT PEND / CCC RETRY COUNT @VA13318 01543200
- C R1,F10 RETRY COUNT EXCEED 10 @VA13318 01543300
- BH IOSFATAL YES, REFLECT TO USER @VA13318 01543400
- LA R1,1(,R1) INCREMENT RETRY COUNT @VA13318 01543500
- STC R1,IOBERCNT STORE IN IOBLOK @VA13318 01543600
- B IOSQBSY QUEUE OFF THE CHANNEL @VA13318 01543700
- IOSFATAL NI RCHSTAT,255-RCHBUSY TURN OFF CHANNEL BUSY @VA13318 01543800
- NI RCUSTAT,255-RCUBUSY TURN OFF CONTROL UNIT BUSY @VA13318 01543900
- NI RDEVSTAT,255-RDEVBUSY DEVICE NO LONGER BUSY @VA13318 01544000
- XC RDEVAIOB,RDEVAIOB CLEAR ACTIVE IOBLOK @VA13318 01544100
- OI IOBSTAT,IOBFATAL FATAL I/O IF EXCEED 10 RETRIES @VA13318 01544200
- CALL DMKSTKIO STACK THE IOBLOK @VA13318 01544300
- B IOSTEXIT EXIT TO CALLER @VA13318 01544400
- IOSCCH NI RDEVSTA2,255-RDEVBUCH RESET DEVICE BUSY ON CHAN @VA13318 01544500
- AIF (NOT &AP).APCHK6 01545000
- TM APSTAT1,APUOPER RUNNING AP ? @VA08540 01546000
- BZ CCHDO NO - CALL CCH @VA08540 01547000
- L R15,=A(DMKLOKSY+2) GET ADDRESS OF SYSTEM LOCK @VA08540 01548000
- CLC LPUADDR,0(R15) DO WE HOLD SYSTEM LOCK @VA08540 01549000
- BE CCHDO YES- CALL CCH @VA08540 01550000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO,SAVE GET THE LOCK @VA08540 01551000
- BE CCHNT2 @VA08540 01552000
- LA R1,X'F00' CHANNEL MASK @VA08540 01553000
- LH R3,INTTIO GET DEVICE ADDRESS @VA08540 01554000
- NR R1,R3 CHANNEL ADDRESS @VA08540 01555000
- SRL R1,8 POSITION FOR COUNT @VA08540 01556000
- L R2,CHANOFF CHANNEL MASK BIT @VA08540 01557000
- SRL R2,0(R1) POSITION BIT MASK @VA08540 01558000
- X R2,FFS INVERT BITS @VA08540 01559000
- STCTL C2,C2,TEMPSAVE STORE CONTROL REG 2 @VA08540 01560000
- N R2,TEMPSAVE DISABLE FAILING CHANNEL @VA08540 01561000
- ST R2,TEMPSAVE STORE UPDATED CONTROL REG @VA08540 01562000
- LCTL C2,C2,TEMPSAVE LOAD UPDATED CONTROL REG @VA08540 01563000
- LA R0,CPEXSIZE GET SIZE OF A CPEXBLOK @VA08540 01564000
- CALL DMKFREE OBTAIN A CPEXBLOK FROM FREE STOR @VA08540 01565000
- USING CPEXBLOK,R1 ADDRESSIBILITY TO CPEXBLOK @VA08540 01566000
- LA R15,CCHUNST1 LOAD ADDR RETURN POINT @VA08540 01567000
- STM R15,R12,CPEXADD SAVE REGISTERS @VA08540 01568000
- XC CPEXR13,CPEXR13 INDICATE NO SAVEAREA UPON RETURN@VA08540 01569000
- MVC CPEXPROC,LPUADDR IND UNSTACKING ON THIS PROC @VA08540 01570000
- CALL DMKSTKLF STACK A PRIORITY CPEXBLOK @VA08540 01571000
- GOTO DMKDSPRU RETURN TO DISPATCHER @VA08540 01572000
- DROP R1 @VA08540 01573000
- CCHUNST1 DS 0H ENTERED VIA CPEXBLOK @VA08540 01574000
- ST R6,PTHSAVE RE-EST RCHBLOK/RCUBLOK ADDR @VA08540 01575000
- ST R7,PTHSAVE+4 IN CASE OF LOST CONTROL @VA08540 01576000
- LA R1,X'F00' CHANNEL MASK @VA08540 01577000
- NR R1,R3 GET INTERUPT ADDRESS @VA08540 01578000
- SRL R1,8 SHIFT FOR COUNT @VA08540 01579000
- L R2,CHANOFF CHANNEL MASK BIT @VA08540 01580000
- SRL R2,0(R1) CORRECT POSITION BIT @VA08540 01581000
- STCTL C2,C2,TEMPSAVE STORE CONTROL REG FOR UPDATING @VA08540 01582000
- O R2,TEMPSAVE REENABLE FAILING CHANNEL @VA08540 01583000
- ST R2,TEMPSAVE STORE UPDATED CONTROL REG @VA08540 01584000
- LCTL C2,C2,TEMPSAVE LOAD UPDATED CONTROL REG @VA08540 01585000
- B CCHDO CALL DMKCCHIS @VA08540 01586000
- CCHNT2 CALL DMKCCHIS,AFFINITY RECORD THE ERROR @VA08540 01587000
- LOCK RELEASE,TYPE=SYS,SAVE GIVE BACK THE LOCK @VA08540 01588000
- B CCHDONE @VA08540 01589000
- .APCHK6 ANOP 01590000
- CCHDO EQU * @VA08540 01591000
- CALL DMKCCHIS,AFFINITY YES--RECORD AND RETURN @V407593 01592000
- CCHDONE NI RCHSTAT,X'FF'-RCUBUSY CHANNEL NO LONGER BUSY @VA08540 01593000
- NI RCUSTAT,X'FF'-RCUBUSY RESET CU BUSY @VA03511 01594000
- B IOSIOERR GO CALL ERP 01595000
- SPACE 01596000
- IOSJ2 EQU * 01597000
- TM IOBCSW+4,UC UNIT CHECK PRESENT ?? 01598000
- BZ IOSPCI1 NO -- GO TEST FOR PCI 01599000
- NI RDEVSTA2,X'FF'-RDEVBUCH RESET DEVICE BUSY WITH CHANNEL 01600000
- BAL R5,IOSENSE GO ATTEMPT TO START SENSE 01601000
- B IOSTEXIT +0 - SENSE STARTED, EXIT @V407438 01602000
- OI IOBSTAT,IOBFATAL +4 - BAD NEWS IF CAN'T SENSE @V407438 01603000
- NI IOBFLAG,X'FF'-IOBRSTRT CLEAR RESTART FLAG @VA01327 01604000
- BAL R5,IOSRECER REOCRD THE I/O ERROR 01605000
- B IOSRSTDV GO RESTART DEV W/ NEXT IO REQUEST@V407438 01606000
- SPACE 01607000
- IOSPCI1 TM IOBCSW+5,PCI PCI IN STATUS ? 01608000
- BZ IOSCKBDE NO -- CONTINUE 01609000
- TM IOBCSW+5,PRGC+PRTC+CHC CHANNEL PROG., PROT. @VA01599 01610000
- * CHECK OR CHAINING 01611000
- BNZ IOSCKBDE YES -- STACK THE IOBLOK 01612000
- CLI IOBCSW+4,0 ACCOMPANIED BY ANY UNIT STATUS ? 01613000
- BNE IOSCKBDE YES - PRESENT ALL AT ONCE 01614000
- SPACE 01615000
- BAL R5,COPYIOB GO COPY AND STACK THE IOBLOK 01616000
- NI IOBSTAT,X'FF'-IOBCC3 REMOVE CONDITION CODE 01617000
- B IOSTEXIT AND LEAVE 01618000
- SPACE 1 01619000
- IOSCKBDE NI RCHSTAT,X'FF'-RCHBUSY @VA00931 01620000
- TM IOBCSW+4,CE+BUSY IF CE AND BUSY @VA06008 01621000
- BO DEVCLEAR - OR - @VA06008 01622000
- TM IOBCSW+4,DE+BUSY IF DE AND BUSY @VA06008 01623000
- BO DEVCLEAR DECIDE TO RESTART OR REFLECT @VA05686 01624000
- SPACE 01625000
- TM IOBCSW+4,CUE CONTROL UNIT END ?? 01626000
- BO IOSTART YES- RETRY SIO (HOPE ITS CLEARED)@VA00849 01627000
- TM IOBSPEC,IOBIMSTK SHUTDOWN FUNCTION ? @VA05361 01628000
- BO IOSSTACK YES,GIVE IOBLOK STATUS @VA05361 01629000
- SPACE 01630000
- SPACE 01631000
- CLI CSW+4,BUSY+SM IS THE CONTROL UNIT BUSY ? 01632000
- BE IOSCBUSY YES, QUEUE AND WAIT FOR CU END 01633000
- SPACE 01634000
- NI RCUSTAT,X'FF'-RCUBUSY FFLAG CU NOT BUSY 01635000
- SPACE 01636000
- CLI CSW+4,BUSY IS THE DEVICE BUSY ?? 01637000
- BNE IOSCKDE NO -- GO TEST FOR DEVICE FREE 01638000
- TM IOBSPEC,IOBTIO+IOBHIO TIO OR HIO REQUEST @VA04182 01639000
- BNZ IOSTCK YES- STACK THE IOB @VA04182 01640000
- B IOSDBUSY NO, CHECK ON IT FURTHER @VA05417 01641000
- * VA05417 01642000
- SPACE 01643000
- DEVCLEAR TM IOBFLAG,IOBCP+IOBHVC+IOBERP SEE IF VIRT SIO @VA05686 01644000
- BNZ IOSTART IF NOT, JUST RESTART @VA05686 01645000
- TM IOBSPEC,IOBTIO+IOBHIO ENSURE SIO @VA05686 01646000
- BNZ IOSTART OTHERWISE RESTART @VA05686 01647000
- TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED? @VA05686 01648000
- BZ IOSTART NO, DONT REFLECT BUSY @VA05686 01649000
- NI RCUSTAT,X'FF'-RCUBUSY CLEAR CU BUSY @VA05686 01650000
- B IOSTCK STACK THE IOBLOK @VA05686 01651000
- IOSCKDE DS 0H 01652000
- TM IOBCSW+4,CE IS THE DEVICE FREE ?? 01653000
- BZ IOSTCK YES -- GO STACK THE IOBLOK 01654000
- TM IOBCSW+4,DE+ATTN ONE MORE TEST 01655000
- BNZ IOSTCK YES -- STACK THE IOBLOK AND RESTART 01656000
- SPACE 01657000
- TM IOBSPEC,IOBTIO+IOBHIO TIO OR HIO REQUEST @VA04182 01658000
- BNZ IOSTCK YES- RETURN WITH STATUS @VA04182 01659000
- TM IOBSTAT,IOBFATAL IS THIS THE LAST INT FROM *01660000
- A HALT ACTIVE REQUEST 01661000
- BO IOSTCK YES- RETURN TO CALLER WITH STATUS@VA04182 01662000
- BAL R5,COPYIOB COPY THE CHANNEL END IOBLOK AND STACK IT 01663000
- NI IOBSTAT,X'FF'-IOBCC3 AND RESTORE THE ZERO CONDITION 01664000
- B IOSRSTCU GO RESTART THE CONTROL UNIT AND CHANNEL 01665000
- SPACE 3 01666000
- IOSCC3 EQU * HERE FOR CC = 3 -- 01667000
- TM RDEVSTA2,RDEVRACT ACTIVE DEVICE BEING RESET? 01668000
- BZ RESTSTA2 NO- BRANCH 01669000
- NI IOBSPEC,X'FF'-(IOBTIO+IOBHIO) RESET SPEC BITS IF ON 01670000
- RESTSTA2 NI RDEVSTA2,X'FF'-(RDEVBUCH+RDEVRACT) RESET BITS IF ON 01671000
- OI IOBSTAT,IOBCC3+IOBFATAL FATAL ERROR, CC = 3 @VM08891 01672000
- NI IOBFLAG,255-IOBRSTRT DO NOT RESTART THE I/O @VM08891 01673000
- NI RCHSTAT,255-RCHBUSY CHANNEL NO LONGER BUSY @VM08891 01674000
- NI RCUSTAT,255-RCUBUSY CTL UNIT NO LONGER BUSY @VM08891 01675000
- NI RDEVSTAT,255-RDEVBUSY DEVICE NOT BUSY @VM08891 01676000
- SPACE 2 01677000
- IOSTCK DS 0H 01678000
- TM CSW+5,PRGC+PRTC+CHC PROGRAM PROTECTION OR CHAINING ERR 01679000
- BZ IOSSTACK NO, STACK IOB & RESTART DEVICE @V407438 01680000
- TM IOBSPEC,IOBIMSTK SHUTDOWN FUNCTION ? @VA05361 01681000
- BO IOSSTACK YES, GIVE IOBLOK STATUS @VA05361 01682000
- BAL R5,IOSENSE GO BUILD AN IOERBLOK 01683000
- B IOSIOERR AND RETRY AND/OR RECORD THE ERROR 01684000
- EJECT 01685000
- IOSCBUSY EQU * HERE IF CU IS BUSY 01686000
- TM RCUTYPE,RCUSUB IS IT A SUBORDINATE CU @VA07009 01687000
- BZ *+8 NO...BRANCH @VA07009 01688000
- L R7,RCUPRIME GET ADDRESS OF THE PRIME @VA07009 01689000
- L R1,RCUFIOB GET POINTER TO IOBLOK QUEUE 01690000
- BAL R4,IOSQCUSK AND RE-QUEUE THE IOBLOK FIRST 01691000
- LH R4,RCUQCNT ADD 1 TO COUNT OF IOBLOCKS @VA01044 01692000
- LA R4,1(R4) QUEUED OFF THIS CONTROL UNIT 01693000
- STH R4,RCUQCNT @VA01044 01694000
- SR R2,R2 CLEAR I/O RESTART INDEX 01695000
- ST R2,RDEVAIOB CLEAR ACTIVE IOBLOK POINTER 01696000
- OI RDEVSTAT,RDEVSCED DEVICE IS SCHEDULED @VA04452 01697000
- B IOSRSTCH AND RESTART THE CHANNEL 01698000
- SPACE 01699000
- IOSDBUSY EQU * HERE IF DEVICE IS BUSY 01700000
- TM IOBFLAG,IOBSPLT WAS THIS A SPLIT SEEK? @VA03732 01701000
- BNO LOCBUSY1 NO @VA05417 01702000
- NI IOBFLAG,X'FF'-(IOBRELCU+IOBSPLT) UNFLAG IT @VA03732 01703000
- L R1,IOBCAW GET FIRST CCW @VA02011 01704000
- OI 4(R1),CC RECHAIN THE SEEK @VA02011 01705000
- SPACE 01706000
- LOCBUSY1 EQU * @VA05417 01707000
- TM RDEVSTAT,RDEVDED DEDICATED DEVICE? @VA05417 01708000
- BNO REQUEUE NO, REQUEUE THE TASK @VA05417 01709000
- TM IOBFLAG,IOBHVC WAS THIS DIAGNOSE @VA07486 01710000
- BO REQUEUE YES, REQUEUE IT @VA07486 01711000
- TM RDEVSTA2,RDEVCONC CONTINGENT CONNECTION? @VA05417 01712000
- BNO IOSTCK NO,STACK THE BLOCK @VA07486 01713000
- REQUEUE EQU * @VA02011 01714000
- LA R1,RDEVIOBL ADDR OF LOCK-WORD IN RDEVBLOK @VA10824 01714100
- LOCK OBTAIN,TYPE=PRIVATE,SPIN=YES LOCK THE IOB'S @VA10824 01714200
- BAL R4,IOSQDEV AND REQUEUE THE IOBLOK FROM THE DEVICE 01715000
- SR R2,R2 CLEAR I/O RESTART INDEX 01716000
- ST R2,RDEVAIOB CLEAR THE ACTIVE IOBLOK POINTER 01717000
- LA R1,RDEVIOBL ADDR OF LOCK-WORD IN RDEVBLOK @VA10824 01717100
- LOCK RELEASE,TYPE=PRIVATE RELEASE THE IOB'S @VA10824 01717200
- B IOSRSTCU AND RESTART THE CONTROL UNIT 01718000
- SPACE 3 01719000
- AIF (NOT &TRACE(9)).TRACE9 01720000
- TRACESUB TM TRACFLG2,TRACBEF TRACING ACTIVE? 01721000
- BZ NOTRAC9 BRANCH IF NOT 01722000
- IC R4,0(R15) R4 GETS TRACE-CODE FROM CALLER @V407593 01723000
- * THEN GET TRACE-TABLE PRT AND @V407593 01724000
- * FLAG ENTRY (SIO=0B TIO=0E HIO=0F)@V407593 01725000
- TRACE CODE=(R4),R14,R0,R5 @V4M0000 01726000
- STCM R15,B'1000',1(R14) SAVE CONDITION CODE 01727000
- NI 1(R14),X'30' TURN OFF ILC AND PROGRAM MASK BITS 01728000
- STH R1,2(,R14) SAVE DEVICE ADDRESS 01729000
- ST R10,4(,14) SAVE IOBLOK ADDRESS 01730000
- MVC 8(4,R14),CAW SAVE CAW 01731000
- XC 12(4,R14),12(R14) CLEAR LAST FIELD 01732000
- CLI 1(R14),X'10' CONDITION CODE 1 ? 01733000
- BNE *+10 NO -- DON'T SAVE CSW 01734000
- MVC 12(4,R14),CSW+4 SAVE RIGHT HALF OF CSW 01735000
- NOTRAC9 EQU * 01736000
- SPM R15 RESTORE CONDITION CODE 01737000
- B 2(,R15) RETURN TO CALLER+2 01738000
- .TRACE9 ANOP 01739000
- EJECT 01740000
- *. 01741000
- * OPERATION OF IOSFINDP - 01742000
- * 01743000
- * IOSFINDP IS CALLED BY THE CHANNEL, CONTROL UNIT AND DEVICE 01744000
- * RESTART ROUTINES TO LOCATE AN AVAILABLE PATH TO THE DEVICE. 01745000
- * IT ATTEMPTS TO SCHEDULE THE I/O REQUEST ON THE FIRST PATH 01746000
- * (CONTROL UNIT 'A' AND CHANNEL 'A'). IF MULTIPATH LOGIC 01747000
- * HAS BEEN INCLUDED (IN DMKRIO) FOR THE DEVICE, ALTERNATE 01748000
- * PATHS WILL BE EXAMINED, QUEUEING THE PRIMARY IOB ON THE 01749000
- * FIRST BUSY PATH AND MINI IOB'S ON ANY ALTERNATE BUSY PATHS. 01750000
- * IF AN AVAILABLE PATH IS FOUND, EXIT IS TAKEN TO THE FIRST 01751000
- * LEVEL CALLER VIA R5 TO START THE I/O. 01752000
- * IF NO AVAILABLE PATH IS FOUND, BUT THE I/O REQUEST HAS 01753000
- * BEEN QUEUED ON ONE OR MORE PATHS, EXIT IS TAKEN TO THE 01754000
- * MAINLINE CALLER VIA R3. 01755000
- * IF NO AVAILABLE PATH IS FOUND AND THE REQUEST HAS NOT BEEN 01756000
- * QUEUED ON ANY PATH (BECAUSE ALL PATHS ARE OFFLINE ETC.) 01757000
- * THEN THE I/O REQUEST IS MARKED FATAL+CC3 AND THE IOB IS 01758000
- * STACKED. EXIT IS THEN MADE TO THE MAINLINE CALLER VIA R3. 01759000
- * 01760000
- * WHEN IOSFINDP IS CALLED, THERE IS AN IOB POINTED TO 01761000
- * BY R10 FOR WHICH A PATH MUST BE FOUND. IF, DURRING THE 01762000
- * FINDPATH PROCESS, THAT IOB GETS QUEUED (AND THE R10QED BIT 01763000
- * IS SET) THEN THE ROUTINE CONTINUES SEARCHING FOR PATHS, BUT 01764000
- * IF ONE IS FOUND, A MINI-IOB MUST BE OBTAINED FROM THE 01765000
- * MINI-IOB QUEUE BEFORE THE I/O CAN BE QUEUED ON THE PATH. 01766000
- * A MINI-IOB IS NOT OBTAINED IMMEDIATELY BECAUSE OF PROCESSING 01767000
- * TIME AND THE LIKELYHOOD OF NOT FINDING AN ALTERNATE PATH. 01768000
- * CONSEQUENTLY, THE PATH AND STATUS INFORMATION IS KEPT IN 01769000
- * THE FINDPATH STATUS AREA BELOW DURING THE SEARCH PROCESS. 01770000
- * WHEN AN AVAILABLE PATH IS LOCATED, THE INFORMATION IS MOVED 01771000
- * FROM THE FINDPATH STATUS AREA TO THE IOB. 01772000
- * 01773000
- * NOTE: IN GENERAL: 01774000
- * R5 RETURNS TO IOSTART 01775000
- * R3 RETURNS TO IOSQXIT (IF IOS ENTERED VIA CALL), 01776000
- * OR TO DEQUEUE FROM CU (IF IOS ENTERED VIA INT 01777000
- *. 01778000
- SPACE 01779000
- SPACE 01780000
- DS 0F ALIGNMENT @V407438 01781000
- PTHFLG1 DC X'00' FIND PATH FLAGS @V407438 01782000
- SPACE 01783000
- * BITS DEFINED IN THE PTHFLG1 FIELD 01784000
- R10QED EQU X'80' R10 IOB HAS BEEN QED ON REAL BLKS@V407438 01785000
- EXTPAG EQU X'40' SPECIAL CASE PAGING WHILE EXTEND @V407438 01786000
- R7CUB EQU X'20' R7 REPRESENTS 2ND CTL UNIT @V407438 01787000
- SPACE 01788000
- CHINDEX DC X'00' CHANNEL INDEX @V407438 01789000
- DEVADD DC H'0' DEVICE ADDRESS @V407438 01790000
- SPACE 01791000
- DMKIOSSV DS 0F RCH AND RCU ADDRESS @VA09587 01791100
- PTHSAVE DC 2F'0' A(CHANNEL) & A(CTL UNIT) ON ENTRY@V407438 01792000
- *OSIBLKS DC 2A(0) INTERRUPT CH/CU BLOCK ADDRS 01793000
- *OSRBLKS DC 2A(0) RESTART CH/CU BLOCK ADDRS 01794000
- ORIGR10 DC A(0) ADDRESS OF THE ORIGINAL R10 IOB @V407438 01795000
- DMKIOSMQ DC A(0) MINI IOB QUEUE @V407438 01796000
- DMKIOSNM DC F'0' COUNT OF DEPLETED MINI IOB STACK @V407438 01797000
- GETMCT DC F'0' COUNT OF GOTMINI'S @V407438 01798000
- DEQMCT DC F'0' COUNT OF IOSDQM'S @V407438 01799000
- DQMSWP DC F'0' IOSDQM'S WHERE R10 IN = MINI IOB @V407438 01800000
- SPACE 2 01801000
- IOSFCH EQU * HERE TO FIND CHANNEL PATH TO DEV @V407438 01802000
- ST R6,PTHSAVE SAVE R6 AND R7 IN CASE @VA07369 01803000
- ST R7,PTHSAVE+4 EXIT ON R3 @VA07369 01804000
- SLR R0,R0 CLEAR FIELDS @V407438 01805000
- ST R0,PTHFLG1 CLEAR FLAGS, CH INDEX, DEV ADD @V407438 01806000
- LH R1,IOBRADD GET CURRENT IOBRADD FIELD @V407438 01807000
- STH R1,DEVADD PUT IN DEVADD, TO BE COMPLETED. @V407438 01808000
- ST R10,ORIGR10 SAVE ORIGINAL IOB ADDRESS @V407438 01809000
- TM IOBSTAT,IOBPATHF FIXED PATH I/O? @V407438 01810000
- BZ IOSBLKS MUST RE-EST RDEVBLOK @VA07779 01811000
- CALL DMKSCNRU GO GET THE CORRECT RCHADDR @V407438 01812000
- B FINDEX AND CONTINUE... @V407438 01813000
- SPACE 01814000
- IOSFINDP EQU * HERE TO FIND A PATH TO THE DEVICE@V407438 01815000
- ST R6,PTHSAVE STORE R6 AND R7 IN CASE @VA07369 01816000
- ST R7,PTHSAVE+4 EXIT ON R3 @VA07369 01817000
- SLR R0,R0 SET CHANNEL INDEX TO ZERO @V407438 01818000
- ST R0,PTHFLG1 CLEAR FLAGS, CH INDEX, DEV ADD @V407438 01819000
- ST R10,ORIGR10 SAVE ORIGINAL IOB ADDRESS @V407438 01820000
- TM IOBSTAT,IOBPATHF IOBRADD COMPLETE (FIXED PATH)? @V407438 01821000
- BZ IOSGETCU NOPE, BR. @V407438 01822000
- LH R0,IOBRADD GET THE PATH ADDR AND SAVE FOR...@V407438 01823000
- STH R0,DEVADD LATER. R6, R7 & R8 ALREADY SET UP@V407438 01824000
- B IOSFNDCU NOW GO CHECK CU STATUS ETC. @V407438 01825000
- SPACE 01826000
- IOSGETCU L R7,RDEVCUA GET FIRST CONTROL UNIT @V407438 01827000
- IOSDEVAD TM PTHFLG1,R10QED HAS IOBLOK BEEN QUEUED? @VA07369 01828000
- BO SKIPADDR DON'T MODIFY IOBRADD @VA07369 01829000
- MVC IOBRADD,RDEVADD RDEVADD TO IOBLOK @VA07369 01830000
- OC IOBRADD,RCUADD OR IN CONTROL UNIT ADDRESS @VA07369 01831000
- SKIPADDR TM RCUTYPE,RCUSUB IS THIS SUBORDINATE CU @VA07369 01832000
- BZ *+8 NO, BRANCH @VA07369 01833000
- L R7,RCUPRIME YES, POINT TO PRIME CU @VA07369 01834000
- TM RDEVSTA2,RDEVALT ALT PATH DEVICE @VA07369 01835000
- BZ IOSCHTIO NO,TAKE SHORT PATH @VA09242 01836050
- TM PTHFLG1,R7CUB PRCESSING 2ND CU PATH ? @VA08913 01836100
- BO IOSFNDCU YES, CUA SET BY IOSNOSCN @VA08913 01836200
- LH R0,IOBRADD MUST SAVE ADDRESS WE START WITH @VA07369 01837000
- STH R0,DEVADD ... @VA07369 01838000
- SPACE 01839000
- * FOLLOWING TEST PUT IN TO ALLOW A TIO FOR A SPECIFIC PATH 01840000
- * REQUEST EVEN IF CTL UNIT IS OFFLINE. 01841000
- SPACE 01842000
- IOSFNDCU EQU * @VA08547 01843000
- TM IOBSPEC,IOBTIO DO WE HAVE A TIO ?? @VA08547 01844000
- BZ IOSCKCUD IF NOT TREAT NORMALLY @VA08547 01845000
- TM IOBSTAT,IOBPATHF SPECIFIC PATH ??? @VA08547 01846000
- BO IOSCKCUB IF IT IS - BYPASS OFFLINE CHK @VA08547 01847000
- IOSCKCUD EQU * @VA08547 01848000
- TM RCUSTAT,RCUDISA IS CU OFFLINE ?? @VA08547 01849000
- BO IOSTNCU YUP, BR. GO TRY NEXT CTL UNIT @V407438 01850000
- IOSCKCUB EQU * @VA08547 01851000
- TM RCUSTAT,RCUBUSY IS IT BUSY ?? @V407438 01852000
- BO IOSQTNCU YUP, BR. GO Q AND TRY NEXT CU @V407438 01853000
- FNDCU L R2,PREFIXA GET PROCESSOR PREFIX ADDR @VA07369 01854000
- CLI XTNDLOCK-PSA(R2),SET IN EXTEND?? @V407593 01855000
- BNE IOSCONT NOPE, CONTINUE. @V407438 01856000
- TM IOBFLAG,IOBPAG IS THIS IOBLOK FOR PAGING? @V407438 01857000
- BZ IOSCONT NO - CONTINUE @V407438 01858000
- OI PTHFLG1,EXTPAG FLAG SPECIAL CASE: EXTEND+PAGING @V407438 01859000
- B IOSGETCH CONTINUE WITH CHANNEL PROCESSING @V407438 01860000
- SPACE 01861000
- IOSCONT EQU * @V407438 01862000
- TM RCUSTAT,RCUSCED IS C.U. ALREADY SCHEDULED ?? @V407438 01863000
- BO IOSCKREL YA, SEE IF THIS TASK WILL REL IT @V407438 01864000
- C R7,RCUFIOB ANY TASKS ALREADY QUEUED HERE ?? @V407438 01865000
- BE IOSCKCU NO -- GO CHECK OUT CU TYPE @V407438 01866000
- IOSCKREL TM IOBFLAG,IOBRELCU THIS REQ. RELEASE THE C.U.?? @V407438 01867000
- BO IOSCKCU REL. CU, CONT. AND FIND CH @VA07369 01868000
- TM IOBSTAT,IOBPATHF FIXED PATH I/O ? @VA07369 01869000
- BO IOSQTNCU YES, QUEUE ON CONTROL UNIT @VA07369 01870000
- TM RDEVSTA2,RDEVALT ALT. PATH DEVICE @VA07369 01871000
- BZ IOSQUECU NO SKIP OVERHEAD @VA07369 01872000
- B IOSQTNCU TRY ALT. PATHS IF AVAIL. @VA07369 01873000
- IOSCKCU TM RCUTYPE,RCUSHRD WILL UNIT BE TIED UP ?? @V407438 01874000
- BZ IOSGETCH NO -- NO NEED TO FLAG SCHEDULED @V407438 01875000
- OI RCUSTAT,RCUSCED FLAG IT @V407438 01876000
- IOSGETCH DS 0H @V407438 01877000
- TM IOBSTAT,IOBPATHF IS THIS A FIXED PATH TASK? @V407438 01878000
- BZ IOSFNDCH NO, MUST DETERMINE IF ALT. PATH @VA07369 01879000
- FINDEX ST R3,ORIGR10 SAVE R3 TEMPORARILY @V407438 01880000
- LA R1,RCUCHA GET ADDR OF FIRST CHANNEL PATH @V407438 01881000
- LA R2,4 INDEX VALUE @V407438 01882000
- LA R3,RCUCHD ADDR OF LAST CHANNEL PATH @V407438 01883000
- NEXTCHA CL R6,0(R1) IS THIS THE PATH WERE ON? @V407438 01884000
- BE *+8 YES, BR. @V407438 01885000
- BXLE R1,R2,NEXTCHA NOPE, KEEP LOOKING @V407438 01886000
- LA R2,RCUCHA ADDR OF THE FIRST PATH AGAIN @V407438 01887000
- SLR R1,R2 CREATE THE CHANNEL INDEX @V407438 01888000
- L R3,ORIGR10 RESTORE R3 @V407438 01889000
- B CHFND AND CONTINUE... @V407438 01890000
- SPACE 01891000
- BUMPCH SLR R6,R6 CLEAR FOR INSERT @V407438 01892000
- IC R6,CHINDEX GET CURRENT CHANNEL INDEX @V407438 01893000
- LR R1,R6 SAVE THE CHANNEL INDEX @V407438 01894000
- L R6,RCUCHA(R6) GET NEXT CHANNEL @V407438 01895000
- LTR R6,R6 DOES THIS CHANNEL EXIST? @V407438 01896000
- BZ IOSTNCU NOPE, MAYBE MORE CHANS ON NEXT CU@V407438 01897000
- TM PTHFLG1,R10QED HAS PRIME IOB BEEN QUEUED? @VA07305 01898000
- BO CHFND YES, ADDR ALREADY IN IOB @VA07305 01899000
- MVC IOBRADD(1),RCHADD ADDR TO IOBRADD IN CASE CC3 @V4M0216 01900000
- CHFND SRL R1,2 CVT CHAN INDEX TO VALUE BETWN 0-3@V407438 01901000
- IC R1,DISATBL(R1) GET PROPER CU TO CH PATH BIT @V407438 01902000
- SPACE 01903000
- * FOLLOWING TEST MADE TO ALLOW TIO FOR SPECIFIC PATH 01904000
- * REQUEST EVEN IF CHANNEL OFFLINE 01905000
- SPACE 01906000
- TM IOBSPEC,IOBTIO IS IT A TIO ??? @VA08547 01907000
- BZ IOSCKCHD IF NOT - DO NORMAL CHECK @VA08547 01908000
- TM IOBSTAT,IOBPATHF SPECIFIC PATH REQUESTED ?? @VA08547 01909000
- BO IOSLOCCH IF SO - BYPASS OFFLINE CHECK @VA08547 01910000
- IOSCKCHD EQU * @VA08547 01911000
- EX R1,CUCHPTH (TM RCUSTAT,RCUCHXOF) PTH AVAIL? @V407438 01912000
- BO IOSTNCH NOPE, BR. GO TRY NEXT CHANNEL @V407438 01913000
- IOSLOCCH EQU * @VA08547 01914000
- IC R0,RCHADD GET THE CHANNEL ADDRESS @V407438 01915000
- STC R0,DEVADD AND COMPLETE THE PATH ADDRESS @V407438 01916000
- TM RCHSTAT,RCHBUSY IS IT BUSY ?? @V407438 01917000
- BO IOSQTNCH YUP, BR. GO Q AND TRY NEXT CHAN @V407438 01918000
- TM RCHTYPE,RCHMPX BYTE MULTIPLEXER CHANNEL ? @V407438 01919000
- BO IOSFNDP YES, ITS NEVER BUSY @V407438 01920000
- TM PTHFLG1,EXTPAG IS THIS THE SPECIAL CASE? @V407438 01921000
- BO IOSFNDP YES, SKIP THE QUEUE CHECK @V407438 01922000
- C R6,RCHFIOB ANY ONE ELSE QUEUED AHEAD OF US? @V407438 01923000
- BNE IOSQTNCH YUP, GO QUEUE AND TRY NEXT CH @V407438 01924000
- * HERE WHEN A PATH HAS BEEN FOUND 01925000
- IOSFNDP EQU * @V407438 01926000
- TM PTHFLG1,R10QED HAS THE R10 IOB BEEN QUEUED? @V407438 01927000
- BZ SETADDR NOPE, OK TO USE IT AS IS, BR. @V407438 01928000
- L R10,ORIGR10 YES, GET THE ORIGINAL R10 IOB @V407438 01929000
- L R2,=A(DMKRIOCU) GET START OF RCUBLOKS @VA08355 01930000
- LA R0,0(R2) CLEAR HI ORDER BYTE @VA08355 01931000
- L R2,=A(DMKRIOCT) GET LOOP DELIMIT ADDRESS @VA08355 01932000
- LA R2,0(R2) CLEAR HI ORDER BYTE @VA08355 01933000
- LR R1,R10 GET IOBLOK TO DEQUEUE @VA08355 01934000
- GETRBLOK DS 0H @VA08355 01935000
- L R1,IOBBPNT-IOBLOK(R1) GET PREVIOUS IOBLOK @VA08355 01936000
- LA R1,0(R1) CLEAR HI ORDER BYTE @VA08355 01937000
- CR R1,R2 RCH-RCU BLOK ??? @VA08355 01938000
- BNL GETRBLOK NO, ROTATE TO NEXT BLOK @VA08355 01939000
- CR R1,R0 IOBLOK IN UNLOCKED V=R ??? @VA08355 01940000
- BL GETRBLOK YES, ROTATE TO NEXT BLOK @VA08355 01941000
- LH R2,RCUQCNT-RCUBLOK(R1) GET QUEUE COUNT @VA08355 01942000
- BCTR R2,0 FROM BLOK AND DECREMENT @VA08355 01943000
- STH R2,RCUQCNT-RCUBLOK(R1) AND SAVE NEW COUNT @VA08355 01944000
- LM R1,R2,IOBFPNT DEQUEUE THE ORIGINAL IOB @V407438 01945000
- ST R1,IOBFPNT-IOBLOK(R2) FROM THE REAL BLOCKS @V407438 01946000
- ST R2,IOBBPNT-IOBLOK(R1) ... @V407438 01947000
- CLR R1,R2 DID WE JUST DEQUEUE THE LAST ONE?@V407438 01948000
- BNE SETADDR NOPE, CONTINUE @V407438 01949000
- NI RCUSTAT-RCUBLOK(R1),X'FF'-RCUSCED UNMARK SCED'D @V407438 01950000
- SETADDR LH R0,DEVADD PICK UP THE PATH ADDRESS @V407438 01951000
- STH R0,IOBRADD AND PUT IT IN THE IOB @V407438 01952000
- LTR R13,R13 IS THIS A RESTART OPERATION? @V407438 01953000
- BNZR R5 NOPE, RETURN FORTHWITH @V407438 01954000
- L R0,PTHSAVE GET ENTRY CHANNEL ADDR @V407438 01955000
- L R1,PTHSAVE+4 GET ENTRY CONTROL UNIT @V407438 01956000
- CLR R0,R6 CURRENT CHANNEL SAME AS ENTRY? @V407438 01957000
- BNE CKCHRSTQ NOPE, GO CHECK OUT THE RESTART Q @V407438 01958000
- CLR R1,R7 YUP, IS CURR CU SAME AS ENTRY? @V407438 01959000
- BER R5 YA, NOTHING CHANGD, RET TO DO I/O@V407438 01960000
- CL R7,RCURSTQ ANYTHING ON THE CU RESTART Q? @V407438 01961000
- BE SCURSTQ NOPE, GO SETUP CU RESTART @V407438 01962000
- CL R1,RCURSTQ IS IT THE SAME AS ENTRY VALUE? @V407438 01963000
- BNE IOS8 NOPE, BAD NEWS. @V407438 01964000
- SCURSTQ ST R1,RCURSTQ SET THIS CU TO RESTART ENTRY ONE @V407438 01965000
- CKCHRSTQ CL R6,RCHRSTQ DOES CH HAVE A RESTART VALUE? @V407438 01966000
- BE SCHRSTQ NOPE, GO SET UP CH RESTART @V407438 01967000
- CL R0,RCHRSTQ IS IT THE SAME AS THE ENTRY VALUE@V407438 01968000
- BNE IOS8 NOPE, BAD NEWS. @V407438 01969000
- SCHRSTQ ST R0,RCHRSTQ SET CHANNEL TO RESTART ENTRY ONE @V407438 01970000
- BR R5 RETURN TO START THE I/O @V407438 01971000
- SPACE 1 01971100
- IOSCHTIO EQU * @VA09242 01971200
- TM IOBSPEC,IOBTIO TEST I/O ? @VA09242 01971300
- BZ IOSCU NO, CHECK OFFLINE @VA09242 01971400
- TM IOBSTAT,IOBPATHF FIXED PATH ? @VA09242 01971500
- BO IOSCUGO YES, DO NOT CHECK OFFLINE @VA09242 01971600
- SPACE 01972000
- IOSCU TM RCUSTAT,RCUDISA CONTROL UNIT OFFLINE @VA07369 01973000
- BO IOSNOPTH NO AVAILABLE PATH, CC=3 @VA07369 01974000
- IOSCUGO EQU * @VA09242 01974500
- TM RCUSTAT,RCUBUSY CONTROL UNIT BUSY? @VA07369 01975000
- BZ FNDCU NO, WE FOUND ONE; LOOK AT CH @VA07369 01976000
- IOSQUECU BAL R4,IOSQCU QUEUE IOBLOK OFF RCUBLOK @VA07369 01977000
- B IOSPTHEX RESTORE R6/R7 AS OF ENTRY @VA07369 01978000
- SPACE 01979000
- IOSBLKS ICM R1,B'0010',RCHADD RE-EST BLOCKS IN CASE @VA07779 01980000
- * ENTERED WITH DIFFERENT R8 = RDEVBLOK 01981000
- CALL DMKSCNRU REACQUIRE BLOCKS @VA07779 01982000
- SPACE 01983000
- IOSFNDCH TM RDEVSTA2,RDEVALT ALT. PATH DEVICE @VA07369 01984000
- BO BUMPCH YES, INCUR OVERHEAD PROCESSING @VA07369 01985000
- L R6,RCUCHA GET CHANNEL ADDRESS @VA07369 01986000
- MVC IOBRADD(1),RCHADD COMPLETE ADDR IN IOBLOK @VA07369 01987000
- TM RCUSTAT,RCUCHAOF IS CHANNEL PATH OFFLINE? @VA07369 01988000
- BO IOSNOPTH YES, COULDN'T GET TO DEVICE @VA07369 01989000
- TM RCHSTAT,RCHBUSY IS CHANNEL BUSY @VA07369 01990000
- BO IOSQUECH YES, GO QUEUE @VA07369 01991000
- TM RCHTYPE,RCHMPX BYTE MULTIPLEXER CHANNEL? @VA07369 01992000
- BOR R5 ITS NEVER BUSY; WE HAVE PATH @VA07369 01993000
- TM PTHFLG1,EXTPAG SPECIAL CASE (EXTEND + PAGING)? @VA07369 01994000
- BOR R5 YES, GET IT GOING @VA07369 01995000
- C R6,RCHFIOB ANYONE QUEUED AHEAD OF US @VA07369 01996000
- BER R5 NO @VA07369 01997000
- IOSQUECH BAL R4,IOSQCH QUEUE IOBLOK OFF RCHBLOK @VA07369 01998000
- B IOSPTHEX RESTORE R6/R7 AND EXIT TO CALLER @VA07369 01999000
- SPACE 02000000
- SPACE 02001000
- ABEND 8 CLOSED FOR STREET REPAIRS @V407438 02002000
- SPACE 02003000
- * CONTROL UNIT TO CHANNEL PATH OFFLINE BITS IN RCUSTAT 02004000
- DISATBL DC AL1(RCUCHAOF,RCUCHBOF,RCUCHCOF,RCUCHDOF) @V407438 02005000
- CUCHPTH TM RCUSTAT,0 CHECK CU TO CH PATH AVAILABILITY @V407438 02006000
- SPACE 02007000
- IOSQTNCH EQU * HERE TO QUEUE AND TRY NEXT CHAN @V407438 02008000
- LA R14,IOSQCH ADDR OF CHANNEL QUEUEING ROUTINE @V407438 02009000
- BAL R4,GETIOB GO CHECK OUT IOB STATUS FIRST @V407438 02010000
- IOSTNCH TM IOBSTAT,IOBPATHF FIXED PATH IOB? @V407438 02011000
- BO IOSNOCU YES, LOOK NO FURTHER, BR. @V407438 02012000
- CLI CHINDEX,12 HAVE WE RUN OUT OF CHANNELS? @V407438 02013000
- BNL IOSTNCU YES, GO TRY NEXT CONTROL UNIT @V407438 02014000
- IC R1,CHINDEX GET CURRENT CHANNEL INDEX @V407438 02015000
- LA R1,4(R1) BUMP TO NEXT CHANNEL POSITION @V407438 02016000
- STC R1,CHINDEX AND RE-STORE FOR LATER @V407438 02017000
- B IOSGETCH AND GO TRY CHECK IT OUT @V407438 02018000
- SPACE 02019000
- IOSQTNCU LA R14,IOSQCU ADDRESS OF THE QUEUEING ROUTINE @V407438 02020000
- BAL R4,GETIOB GO CHECK OUT THE IOB SITUATION @V407438 02021000
- IOSTNCU TM IOBSTAT,IOBPATHF FIXED PATH I/O? @VA07369 02022000
- BO IOSNOCU YES, LOOK NO FURTHER @VA07369 02023000
- TM PTHFLG1,R7CUB DOES R7 REPRESENT SECOND CU @VA07369 02024000
- BO IOSNOCU YES, NO MORE CONTROL UNITS LEFT @VA07369 02025000
- LTR R8,R8 CUE ON UNDEFINED DEVICE? @VA07369 02026000
- BNM IOSNOSCN NO, DO NOT RE-EST. BLOCKS @VA07226 02027000
- LH R1,IOBRADD GET CURRENT DEVICE ADDRESS @V4M0223 02028000
- CALL DMKSCNRU REACQUIRE REAL BLOCKS @V4M0223 02029000
- IOSNOSCN L R7,RDEVCUB PROCESSING SECOND CTL UNIT PATH @VA07369 02030000
- LTR R7,R7 DOES IT EXIST? @V407438 02031000
- BZ IOSNOCU NOPE, THEN WE'VE DONE ALL WE CAN @V407438 02032000
- OI PTHFLG1,R7CUB PROCESSING SECOND CTL UNIT PATH @V407438 02033000
- NI DEVADD+1,X'0F' CLEAR FIRST CUA @VA08913 02033100
- OC DEVADD,RCUADD OR IN NEW CU ADDRESS @VA08913 02033200
- MVI CHINDEX,0 SET CHANNEL INDEX BACK TO ZERO @V407438 02034000
- B IOSDEVAD NOW GO CHECK OUT THIS PATH @V407438 02035000
- SPACE 02036000
- IOSNOCU TM PTHFLG1,R10QED HAS AN IOB BEEN QUED SOMEWHERE? @V407438 02037000
- BO IOSPTHEX YES, WE DID OUT BEST, NOW RETURN @V407438 02038000
- TM IOBSTAT,IOBMINI IS THIS A MINI IOB? @V407438 02039000
- BZ IOSNOPTH NOPE, OK THIS TIME @V407438 02040000
- ABEND 6 MINI-IOB'S NOT ALLOWD OUTSIDE IOS@V407438 02041000
- IOSNOPTH OI IOBSTAT,IOBFATAL+IOBCC3 COULNDN'T GET TO DEVICE @V407438 02042000
- CALL DMKSTKIO STACK FOR 2ND LEVEL INT HANDLER @V407438 02043000
- IOSPTHEX L R6,PTHSAVE RESTORE CH & CU @VA07369 02044000
- L R7,PTHSAVE+4 VALUES AS OF ENTRY @VA07369 02045000
- LTR R13,R13 DID WE GET HERE VIA 'CALL'? @V407438 02046000
- BZR R3 NOPE, INT., RETURN @V407438 02047000
- * STOP CHARGING USER, @V407593 02048000
- * GET CALLERS R11, AND @V407593 02049000
- * START CHARGING HIM. @V407593 02050000
- CHARGE SWITCH,SAVER11 @V407593 02051000
- BR R3 EXIT TO CALLER @V407438 02052000
- EJECT 02053000
- GETIOB TM PTHFLG1,R10QED HAS THE R10 IOB BEEN QUED? @V407438 02054000
- BZ SETADDR2 NO, GO TO QUEUEING ROUTINE @V407438 02055000
- L R1,DMKIOSMQ GET NEXT MINI IOB ON THE QUEUE @V407438 02056000
- LTR R1,R1 IS THERE ONE THERE? @V407438 02057000
- BNZ GOTMINI YUP, BR. @V407438 02058000
- L R1,DMKIOSNM GET COUNT OF TIMES THIS HAPPENED @V407438 02059000
- AL R1,F1 BUMP IT @V407438 02060000
- ST R1,DMKIOSNM AND SAVE @V407438 02061000
- B IOSPTHEX RETURN TO CALLER @V407438 02062000
- SPACE 02063000
- GOTMINI L R0,0(R1) UNCHAIN 1ST MINIIOB: GET 2ND ONE @V407438 02064000
- ST R0,DMKIOSMQ AND MAKE IT THE FIRST @V407438 02065000
- L R0,IOBLINK GET PREVIOUS IOBLOK IOBLINK FIELD@V407438 02066000
- ST R0,IOBLINK-IOBLOK(R1) PUT IT IN THE NEW IOBLOK @V407438 02067000
- ST R1,IOBLINK SET PREV. IOB. IOBLINK TO NEW BLK@V407438 02068000
- LH R0,IOBFLAG GET OLD IOBFLAG+IOBSTAT FIELDS @V407438 02069000
- STH R0,IOBFLAG-IOBLOK(R1) AND PUT IN THE MINI BLOK @V407438 02070000
- OI IOBSTAT-IOBLOK(R1),IOBMINI FLAG NEW BLK AS MINI @V407438 02071000
- LR R10,R1 THE MINI IS NOW THE CURRENT IOB @V407438 02072000
- INCR GETMCT @V407438 02073000
- SETADDR2 DS 0H @V4M0225 02074000
- LH R0,DEVADD GET THE PATH ADDRESS @V4M0225 02075000
- STH R0,IOBRADD AND PUT IT IN THE IOB @V407438 02076000
- OI PTHFLG1,R10QED MARK R10 IOB AS HAVING BEEN QUED @V407438 02077000
- BR R14 GO TO QUEUEING ROUTINE @V407438 02078000
- EJECT 02079000
- *. 02080000
- * MINI IOB - "DEQUEUE FROM RBLOKS, UNCHAIN FROM 02081000
- * OTHER IOB'S" - ROUTINE 02082000
- * ON ENTRY R10 = IOB WHOSE INFORMATION IS TO BE KEPT. 02083000
- * ALL MINI IOB'S ON THE IOBLINK CHAIN WILL BE DEQUEUED FROM 02084000
- * THEIR RBLOKS QUEUES, UNCHAINED FROM THE IOBLINK FIELD 02085000
- * AND RETURNED TO THE IOS BACK POCKET MINI IOB STACK. 02086000
- * THE R10 IOB MUST HAVE ALREADY BEEN DEQUEUED, IT IS NOT 02087000
- * DEQUEUED IN THIS ROUTINE. ON EXIT, THE REAL (FULL) IOB 02088000
- * ON THE IOBLINK CHAIN WILL BE IN R10, AND THE IOBRADD, 02089000
- * IOBFLAG AND IOBSTAT FIELDS WILL CONTAIN THE SAME INFORMATION 02090000
- * WHICH WAS IN THOSE FIELDS OF THE R10 IOB AT ENTRY. 02091000
- *. 02092000
- SPACE 02093000
- IOSDQM LR R4,R10 REMEMBER THE ORIGINAL R10 IOB @V407438 02094000
- INCR DEQMCT @V407438 02095000
- DEQMINI L R1,IOBLINK GET NEXT IOB ON MINI CHAIN @V407438 02096000
- CLR R1,R10 ANY MORE ON THE CHAIN? @V407438 02097000
- BER R5 NOPE, RETURN @V407438 02098000
- CLR R1,R4 SHOULD THIS IOB BE DEQUED? @V407438 02099000
- BE IOSNODEQ NOPE, ALREADY DEQUED, BR. @V407438 02100000
- L R2,=A(DMKRIOCU) GET START OF RCUBLOKS @VA08355 02101000
- LA R0,0(R2) CLEAR HI ORDER BYTE @VA08355 02102000
- L R2,=A(DMKRIOCT) GET LOOP DELIMIT ADDRESS @VA08355 02103000
- LA R2,0(R2) CLEAR HI ORDER BYTE @VA08355 02104000
- LR R3,R1 GET IOBLOK TO DEQUEUE @VA08355 02105000
- FNDRBLOK DS 0H @VA08355 02106000
- L R3,IOBBPNT-IOBLOK(R3) GET PREVIOUS IOBLOK @VA08355 02107000
- LA R3,0(R3) CLEAR HI ORDER BYTE @VA08355 02108000
- CR R3,R2 RCH-RCU BLOK ??? @VA08355 02109000
- BNL FNDRBLOK NO, ROTATE TO NEXT BLOK @VA08355 02110000
- CR R3,R0 IOBLOK IN UNLOCKED V=R ??? @VA08355 02111000
- BL FNDRBLOK YES, ROTATE TO NEXT BLOK @VA08355 02112000
- LH R2,RCUQCNT-RCUBLOK(R3) GET QUEUE COUNT @VA08355 02113000
- BCTR R2,0 FROM BLOK AND DECREMENT @VA08355 02114000
- STH R2,RCUQCNT-RCUBLOK(R3) AND SAVE NEW COUNT @VA08355 02115000
- LM R2,R3,IOBFPNT-IOBLOK(R1) GET FWD & BACK PTRS @V407438 02116000
- ST R2,IOBFPNT-IOBLOK(R3) REMOVE FROM FWD CHAIN @V407438 02117000
- ST R3,IOBBPNT-IOBLOK(R2) AND FROM BACK CHAIN @V407438 02118000
- CLR R2,R3 ARE WE DEQUEUEING THE LAST IOB? @V407438 02119000
- BNE *+8 NOPE, SKIP @V407438 02120000
- NI RCUSTAT-RCUBLOK(R2),X'FF'-RCUSCED YUP, UNSCHED @V407438 02121000
- IOSNODEQ TM IOBSTAT-IOBLOK(R1),IOBMINI IS NEW BLOK A MINI @V407438 02122000
- BZ FNDREAL NOPE, REAL IOB HAS BEEN FOUND, BR@V407438 02123000
- L R0,IOBLINK-IOBLOK(R1) GET NEW IOB CHAIN PTR @V407438 02124000
- ST R0,IOBLINK REMOVE R1 IOB FROM MINI CHAIN @V407438 02125000
- L R0,DMKIOSMQ GET MINI IOB BACK POCKET Q PTR @V407438 02126000
- ST R0,0(R1) CHAIN THE R1 MINI IOB ON THE... @V407438 02127000
- ST R1,DMKIOSMQ ...BACK POCKET QUEUE @V407438 02128000
- B DEQMINI AND ON WITH THE NEXT ONE... @V407438 02129000
- SPACE 02130000
- FNDREAL TM IOBSTAT,IOBMINI IS THE R10 IOB A MINI? @V407438 02131000
- BO IOS7OK YES, OK THIS TIME, BR @V407438 02132000
- ABEND 7 NOPE, THEN R1 & R10 ARE REAL SOBS@V407438 02133000
- IOS7OK L R0,IOBRADD GET RADDR, FLAG & SPEC FIELDS @V407438 02134000
- ST R0,IOBRADD-IOBLOK(R1) PUT THEM IN THE REAL IOB @V407438 02135000
- INCR DQMSWP @V407438 02136000
- NI IOBSTAT-IOBLOK(R1),X'FF'-IOBMINI THIS ISNT AMINI@V407438 02137000
- LR R10,R1 MAKE THE REAL IOB THE R10 IOB @V407438 02138000
- * IN THE IOSDQXX ROUTINE (ENTERED TO DEQUEUE AN IOB FOR RESTARTING 02139000
- * A CH, CU OR DEV), THE SWITCH OF THE CPUTIMER IS SKIPPED IF THE 02140000
- * DEQUEUEING IS BEING DONE ON A MINI-IOB; IT IS LEFT TO THIS ROUTINE 02141000
- * TO SWITCH THE CPUTIMER WHEN THE REAL IOB IS FOUND. 02142000
- CHARGE SWITCH,IOBUSER @V407593 02143000
- B DEQMINI CONTINUE PROCESSING MINI CHAIN @V407438 02144000
- EJECT 02242000
- COPYIOB EQU * HERE TO COPY IOBLOKS FOR NON-DEVICE-END INTERRUPTS 02243000
- LA R0,IOBSIZE GET IOBLOK SIZE 02244000
- CALL DMKFREE GET CORE 02245000
- CL R10,RDEVAIOB STILL ACTIVE OVER THE CALL ? @VA03817 02246000
- BNE FRETCOPY NO- SYSTEM EXTENDED, INT CAME IN @VA03817 02247000
- TM IOBCSW+4,CE IF CHANNEL END WITH... @VA03817 02248000
- BZ COPYBLOK DEVICE END OR ATTENTION... @VA03817 02249000
- TM IOBCSW+4,DE+ATTN THAN DON'T COPY THE IOBLOK, @VA03817 02250000
- BZ COPYBLOK ENDING STATUS WAS RECEIVED..@VA03817*02251000
- WHILE THE SYSTEM WAS EXTENDING FREE STORAGE. 02252000
- FRETCOPY CALL DMKFRET FRET BLOCK, ENDING STATUS CAME IN@VA03817 02253000
- BR R5 THEN RETURN TO THE CALLER @VA03817 02254000
- SPACE 1 02255000
- COPYBLOK EQU * HERE IF ENDING STATUS NOT RECEIVED FOR THE DEVICE 02256000
- MVC 0(IOBSIZE*8,R1),0(R10) COPY THE BLOK 02257000
- * NOTE: "IOBLINK" IN COPIED IOBLOK DOES 02258000
- * NOT "POINT TO ITSELF" - INDICATING THAT 02259000
- * THIS IS "NOT THE FINAL INTERRUPT". 02260000
- LR R2,R10 SAVE THE ADDRESS OF THE OLD BLOK @VA04182 02261000
- LR R10,R1 GET ADDRESS OF NEW BLOK 02262000
- SLR R1,R1 CLEAR IOERBLOK POINTER @VA01225 02263000
- ST R1,IOBIOER . . .TO AVOID DOUBLE FRET @VA01225 02264000
- CALL DMKSTKIO STACK THE IOBLOK 02265000
- LR R10,R2 RESTORE ADDRESS OF OLD BLOK @VA04182 02266000
- XC IOBCSW(8),IOBCSW ZERO OLD CSW FOR NEXT INT. @VA03817 02267000
- BR R5 AND RETURN TO CALLER 02268000
- EJECT 02269000
- ENTRY DMKIOSRW PROCESS IOBLOK USED FOR A REWIND 02270000
- DROP R9 @VA13034 02270100
- USING *,R12 02271000
- DMKIOSRW EQU * HERE TO PROCESS IOBLOK(S) FOR TAPE REWIND 02272000
- LA R0,IOBSIZE GET SIZE OF STANDARD IOBLOK 02273000
- CL R10,IOBLINK IS THE IOBLOK THE ORIGINAL COPY? 02274000
- BNE IOSIGN01 NO-FREE 8 DOUBLE WORDS 02275000
- L R1,IOBCAW POINT TO CCW @VA04137 02276000
- SL R1,F16 POINT TO BEGINNING OF RCWTASK @VA04137 02277000
- USING RCWTASK,R1 @VA04137 02278000
- LH R0,RCWCCNT SIZE OF RCWTASK @VA04137 02279000
- CALL DMKFRET RELEASE RCWTASK @VA04137 02280000
- DROP R1 @VA04137 02281000
- DROP R12 02282000
- SPACE 02283000
- IOSIGNOR DS 0H 02284000
- LA R0,IOBSIZE SIZE OF IOBLOK 02285000
- IOSIGN01 LR R1,R10 AND ITS ADDRESS 02286000
- L R2,IOBIOER IOERBLOK ADDRESS IF THERE IS ONE @V200820 02287000
- CALL DMKFRET RETURN IOBLOK TO FREE STORAGE 02288000
- L R12,ADSPCH A(DMKDSPCH) FOR 'GOTO'-STYLE EXIT@V200820 02289000
- LTR R1,R2 WAS THERE AN IOERBLOK ? @V200820 02290000
- BCR 8,R12 NO -- GOTO DMKDSPCH @V200820 02291000
- LA R0,IOERSIZE IOERBLOK SIZE IN DOUBLE-WORDS @V200820 02292000
- AH R0,IOEREXT-IOERBLOK(,R1) ...PLUS EXTENSION @V200820 02293000
- CALL DMKFRET RELEASE THE IOERBLOK @V200820 02294000
- BR R12 GOTO DMKDSPCH @V200820 02295000
- SPACE 02296000
- USING DMKIOS,R12 REESTABLISH ADDRESSABILITY 02297000
- USING DMKIOS,R12,R9 @VA13034 02297100
- EJECT 02298000
- *. 02299000
- * I. OPERATION OF QUEUEING AN IOBLOK. 02300000
- * 1. NORMALLY IOBLOKS ARE QUEUED ON A FIFO BASIS; HOWEVER, 02301000
- * REQUESTS FOR MOVEABLE HEAD DASDI DEVICES ARE QUEUED BY 02302000
- * SEEK ADDRESS. THIS IS CALLED -ORDERED SEEK QUEUEING- AND 02303000
- * IS USED TO IMPROVE SYSTEM THROUGHPUT. FOR NON-DEDICATED 02304000
- * DASDI DEVICES IOBLOKS ARE ADDED TO THE IOBLOK CHAIN BASED 02305000
- * ON THEIR SEEK ADDRESS. THE CHAIN IS FORMED SO THAT THE 02306000
- * SEEK ADDRESS CONTAINED IN THE IOBCYL IS BUILT IN ASCENDING 02307000
- * ORDER. WHEN THE IOBLOK IS DE-QUEUED, THE CHAIN IS SEARCHED 02308000
- * IN THE SAME DIRECTION AS THE ARM MOVEMENT. I.E. IF THE ARM 02309000
- * IS SEEKING FORWARD THE CHAIN IS SEARCHED IN ASCENDING 02310000
- * ORDER. IF THE ARM IS SEEKING BACKWARD THE CHAIN IS SEARCHED 02311000
- * IN A DESCENDING ORDER. THIS ACTION CONTINUES UNTIL THE END 02312000
- * OF THE CHAIN IS DETECTED. 02313000
- * 02314000
- *. 02315000
- SPACE 02316000
- * QUEUE AN IOBLOK ON A REAL DEVICE QUEUE 02317000
- * 02318000
- IOSQDEV DS 0H 02319000
- SLR R1,R1 CLEAR FOR INSERT 02320000
- IC R1,RDEVQCNT ADD 1 TO COUNT OF IOBLOKS @VA01044 02321000
- LA R1,1(R1) QUEUED OFF THIS DEVICE BLOCK 02322000
- STC R1,RDEVQCNT @VA01044 02323000
- LR R1,R8 SAVE BACK CHAIN POINTER 02324000
- CLI RDEVTYPC,CLASDASD MOVEABLE HEAD DEVICE ?? 02325000
- BE IOSQVDOS YES -- USE ORDERED SEEK QUEUEING 02326000
- * IF NOT A DISK, QUEUE REQUESTS FIFO 02327000
- L R2,RDEVLIOB POINT TO LAST IOBLOK ON DEVICE 02328000
- B IOSQBLOK AND GO QUEUE THE BLOK 02329000
- SPACE 02330000
- IOSQVDOS DS 0H QUEUE REQUESTS IN ASCENDING ORDER BY SEEK ADDRESS 02331000
- LH R0,IOBCYL GET CYLINDER NUMBER FOR THIS IOBLOK 02332000
- IOSQDEVC LR R2,R1 SAVE BACK CHAIN POINTER 02333000
- L R1,IOBFPNT-IOBLOK(,R1) POINT TO NEXT BLOK ON CHAIN 02334000
- CR R1,R8 END OF CHAIN REACHED ?? 02335000
- BE IOSQBLOK YES -- GO QUEUE TO END 02336000
- CH R0,IOBCYL-IOBLOK(,R1) COMPARE SEEK ADDRESSES 02337000
- BNL IOSQDEVC LOOK UNTIL NEW ONE > CHAIN @V407438 02338000
- B IOSQBLOK NEW REQUEST IS HIGH, CHAIN IT @V407438 02339000
- EJECT 02359000
- * 02360000
- * QUEUE AN IOBLOK ON A REAL CONTROL UNIT QUEUE 02361000
- * 02362000
- IOSQCU DS 0H 02363000
- IOSQCUCR DS 0H 02364000
- LH R1,RCUQCNT ADD 1 TO COUNT OF I/O BLOCKS @VA01044 02365000
- LA R1,1(R1) QUEUED OFF THIS CONTROL UNIT 02366000
- STH R1,RCUQCNT @VA01044 02367000
- LM R1,R2,RCUFIOB GET POINTERS TO IOBLOKS CHAINED TO RCU 02368000
- TM IOBFLAG,IOBRELCU WILL CU BE RELEASED ON INITIATION ? 02369000
- BO IOSQCUSK YES, ADD TO THE START OF THE QUEUE 02370000
- * QUEUE IN FIFO ORDER 02371000
- LR R1,R7 SET FORWARD POINTER TO QUEUE ANCHOR 02372000
- B IOSQBLOK AND GO QUEUE THE BLOK 02373000
- SPACE 02374000
- * QUEUE SEEKS, REW, RUN AND BLOCK MULTIPLEX OPERATIONS FIRST 02375000
- IOSQCUSK LR R15,R7 SAVE ADDRESS OF QUEUE ANCHOR 02376000
- LR R2,R7 SAVE 1ST BACKCHAIN 02377000
- B IOSQSK AND GO QUEUE THE IOBLOK 02378000
- SPACE 3 02379000
- * 02380000
- * QUEUE AN IOBLOK ON A REAL CHANNEL QUEUE 02381000
- * 02382000
- IOSQCH DS 0H 02383000
- IOSQCHCR DS 0H 02384000
- LH R1,RCHQCNT ADD 1 TO COUNT OF I/O BLOCKS @VA01044 02385000
- LA R1,1(R1) QUEUED OFF THIS CHANNEL 02386000
- STH R1,RCHQCNT @VA01044 02387000
- LM R1,R2,RCHFIOB GET POINTERS TO IOBLOKS QUEUED ON CHAN 02388000
- TM IOBFLAG,IOBRELCU WILL CU BE RELEASE ON INITIATION ? 02389000
- BO IOSQCHSK YES, ADD TO THE START OF THE QUEUE 02390000
- SPACE 02391000
- * QUEUE IN FIFO ORDER 02392000
- LR R1,R6 POINT FORWARD CHAIN 02393000
- B IOSQBLOK AND GO QUEUE FIFO 02394000
- SPACE 02395000
- * QUEUE SEEKS, REW, RUN AND BLOCK MULTIPLEX OPERATIONS FIRST 02396000
- IOSQCHSK LR R15,R6 SAVE ADDRESS OF QUEUE ANCHOR 02397000
- LR R2,R6 SAVE 1ST BACKCHAIN 02398000
- SPACE 2 02399000
- IOSQSK CLR R1,R15 AT THE END OF THE QUEUE ?? 02400000
- BE IOSQBLOK YES -- 02401000
- TM IOBFLAG-IOBLOK(R1),IOBRELCU END OF HI PRIORITY BLOKS ? 02402000
- BZ IOSQBLOK YES -- 02403000
- LR R2,R1 SAVE NEW BACK CHAIN 02404000
- L R1,IOBFPNT-IOBLOK(,R1) GET NEXT IOBLOK QUEUED 02405000
- B IOSQSK AND CONTINUE 02406000
- SPACE 3 02407000
- SPACE 3 02408000
- IOSQBLOK DS 0H GENERAL BLOK QUEUEING ROUTINE 02409000
- STM R1,R2,IOBFPNT STORE FORWARD AND BACK CHAIN POINTERS 02410000
- ST R10,IOBBPNT-IOBLOK(,R1) INSERT NEW BACKCHAIN 02411000
- ST R10,IOBFPNT-IOBLOK(,R2) AND FORWARD CHAIN 02412000
- BR R4 AND RETURN TO CALLER 02413000
- EJECT 02414000
- * 02415000
- * DEQUEUE THE NEXT IOBLOK OFF A REAL DEVICE QUEUE 02416000
- * 02417000
- * EXITS - 02418000
- * R4+4 IF THE QUEUE IS EMPTY 02419000
- * R4 IF AN IOBLOK IS DEQUEUED 02420000
- * 02421000
- * 02422000
- * FOR APU SUPPORT IT IS NECESSARY TO LOCK THE RDEVBLOK 02423000
- * TO AVOID INTERFERENCE WITH DMKPAG WHEN DMKPAG ADDS IOBS TO 02424000
- * THE QUEUE OF IOBS ON A PAGING DEVICE. TO CONTROL LOCKING AND 02425000
- * UNLOCKING, THE CALLERS REG IS HELD IN REG 3 AND REG 4 IS SET 02426000
- * TO A LOCAL ADDRESS. THE RDEVBLOK LOCK IS THEN ACQUIRED. 02427000
- * ON RETURN FROM DEQUEUE, THE LOCK IS RELEASED AND THE 02428000
- * PROPER EXIT IS TAKEN 02429000
- * 02430000
- IOSDQDV DS 0H 02431000
- TM RDEVSTAT,RDEVSCED ANYTHING SCHEDULED FOR @VA04452 02432000
- * DEVICE CHAINED FROM C.U. OR CHANNEL QUEUES 02433000
- BO 4(,R4) YES - THEN IT MUST START FIRST. @VA04452 02434000
- AIF (NOT &AP).APCHK7 02435000
- TM APSTAT1,APUOPER RUNNING AP? @V4M0146 02436000
- BNO DQIT NO, SKIP THE APU LOGIC @V4M0146 02437000
- LR R3,R4 SAVE CALLERS REG4 @V4M0146 02438000
- LA R4,GOTYA GET NEW RETURN POINT @V407593 02439000
- LA R1,RDEVIOBL ADDR OF LOCK-WORD IN RDEVBLOCK @V407593 02440000
- LOCK OBTAIN,TYPE=PRIVATE,SPIN=YES @V407593 02441000
- B DQIT WE GOT THIS LOCKED,GO DQIT @V4M0146 02442000
- * HERE ON FINISHING-UP THE DEQUEUE @V407593 02443000
- GOTYA B NORM NORMAL RETURN (IE BR R4) @V407593 02444000
- B NORMP4 EMPTY QUEUE CASE (IE BR 4,(,R4)) @V407593 02445000
- NORM LR R4,R3 RESTORE REG4 @V4M0146 02446000
- B UNLOCK GO UNLOCK THE RDEVBLOCK @V407593 02447000
- NORMP4 LA R4,4(,R3) RESTORE TO RETURN POINT PLUS 4 @V4M0146 02448000
- UNLOCK LA R1,RDEVIOBL ADDR OF LOCK-WORD IN RDEVBLOCK @V407593 02449000
- LOCK RELEASE,TYPE=PRIVATE RELEASE THE LOCK @V407593 02450000
- BR R4 AND GET OUT @V407593 02451000
- EJECT 02452000
- DQIT EQU * @V4M0146 02453000
- .APCHK7 ANOP 02454000
- L R10,RDEVFIOB LOAD ADDRESS OF 1ST IOBLOK QUEUED 02455000
- CR R8,R10 IS THE QUEUE EMPTY ? 02456000
- BE 4(,R4) YES -- EXIT NOW 02457000
- * 02458000
- * MAKE SURE THAT THE IOBLOK DOES NOT HAVE IOBFLT 02459000
- * FLAG SET - THAT IS, THE IOBLOK IS NOT 02460000
- * QUEUED IN WAIT FOR AN MSS CYLINDER FAULT 02461000
- * 02462000
- TESTCYFT EQU * @V60B6B8 02463000
- TM IOBSTAT,IOBFLT IS IOBLOK WAITING FOR CYL FLT @V60B6B8 02464000
- BZ SETCOUNT NO, CONTINUE @V60B6B8 02465000
- L R10,IOBFPNT GET NEXT IOBLOK @V60B6B8 02466000
- CR R8,R10 IS THERE ONE @V60B6B8 02467000
- BE 4(,R4) NO, IOBLOK POINTS TO RDEVBLOK @V60B6B8 02468000
- B TESTCYFT CHECK THE NEXT ONE @V60B6B8 02469000
- SETCOUNT EQU * SET THE COUNT OF QUEUED BLOCKS @V60B6B8 02470000
- L R1,F0 CLEAR FOR INSERT 02471000
- IC R1,RDEVQCNT SUB 1 FROM COUNT OF IOBLOKS @VA01044 02472000
- BCTR R1,0 QUEUED THIS DEVICE BLOCK 02473000
- STC R1,RDEVQCNT @VA01044 02474000
- CLI RDEVTYPC,CLASDASD IS IT A MOVEABLE HEAD DEVICE ?? 02475000
- LR R2,R8 POINT TO RDEVBLOK TO CHECK QUEUE 02476000
- BNE IOSTSTQ NO- CHECK QUEUE POINTERS AND DEQUEUE IOB 02477000
- SPACE 02478000
- * DEQUEUE IN ORDER BY SEEK ADDRESS 02479000
- C R8,IOBFPNT ONLY 1 IOBLOK ON THIS QUEUE ? 02480000
- BE IOSDQBLK YES, DON'T BOTHER GOING THRU CHAIN 02481000
- LH R0,RDEVCYL LOAD CURRENT CYLINDER ADDRESS 02482000
- TM RDEVFLAG,RDEVSKUP SEEKING UP THE PACK ? @VA00915 02483000
- BZ IOSDQDVD BRANCH IF NO 02484000
- IOSDQDVN DS 0H LOOK FOR AN ADDRESS EQUAL OR HIGHER 02485000
- CH R0,IOBCYL IS CYLINDER ADDRESS GE CURRENT CYLINDER ? 02486000
- BNH IOSDQBLK ADDRESS GE TO CURRENT ARM, GO DEQUEUE 02487000
- IOSDQNXT L R10,IOBFPNT OTHERWISE, LOOK AT NEXT IOBLOK 02488000
- CR R8,R10 IS THIS THE END OF THE CHAIN ? 02489000
- BNE IOSDQDVN BRANCH IF NO 02490000
- NI RDEVFLAG,X'FF'-RDEVSKUP NOW SEEKING DOWN @VA00915 02491000
- IOSDQDVD L R10,RDEVLIOB LOAD ADDRESS OF LAST IOBLOK QUEUED 02492000
- IOSDQDVP DS 0H LOOK FOR AN ADDRESS EQUAL OR LOWER 02493000
- CH R0,IOBCYL IS CYLINDER ADDRESS LE CURRENT CYLINDER ? 02494000
- BNL IOSDQBLK ADDRESS LE TO CURRENT ARM - GO DEQUEUE 02495000
- L R10,IOBBPNT BACK DOWN THE CHAIN 02496000
- CR R8,R10 IS THIS THE END OF THE CHAIN ? 02497000
- BNE IOSDQDVP BRANCH IF NO 02498000
- OI RDEVFLAG,RDEVSKUP NOW SEEKING UP THE PACK @VM08572 02499000
- B IOSDQNXT GO GET ADDRESS OF FIRST IOBLOK 02500000
- SPACE 02501000
- EJECT 02502000
- * 02503000
- * DEQUEUE THE NEXT IOBLOK OFF A REAL CONTROL UNIT QUEUE 02504000
- * 02505000
- * EXITS - 02506000
- * R4+4 IF THE QUEUE IS EMPTY 02507000
- * R4 IF AN IOBLOK WAS DEQUEUED 02508000
- * 02509000
- IOSDQCU DS 0H 02510000
- L R10,RCUFIOB LOAD ADDRESS OF 1ST IOBLOK SCHEDULED 02511000
- CR R7,R10 IS THE QUEUE EMPTY ? 02512000
- BE 4(,R4) YES -- EXIT NOW 02513000
- LH R1,RCUQCNT SUB 1 FROM COUNT OF I/O BLOCKS @VA01044 02514000
- BCTR R1,0 QUEUED OFF THIS CONTROL UNIT 02515000
- STH R1,RCUQCNT @VA01044 02516000
- LR R2,R7 POINT TO THE RCUBLOK TO CHECK QUEUE 02517000
- B IOSTSTQ GO CHECK QOEUE POINTERS AND DEQUEUE IOB 02518000
- SPACE 3 02519000
- * 02520000
- * DEQUEUE THE NEXT IOBLOK OFF A REAL CHANNEL QUEUE 02521000
- * 02522000
- * EXITS - 02523000
- * R4+4 IF THE QUEUE IS EMPTY 02524000
- * R4 IF AN IOBLOK WAS DEQUEUED 02525000
- * 02526000
- IOSDQCH DS 0H 02527000
- L R10,RCHFIOB LOAD ADDRESS OF 1ST IOBLOK SCHEDULED 02528000
- CR R6,R10 IS THE QUEUE EMPTY ? 02529000
- BE 4(,R4) YES -- ESIT NOW 02530000
- LH R1,RCHQCNT SUB 1 FROM COUNT OF I/O BLOCKS @VA01044 02531000
- BCTR R1,0 QUEUED OFF THIS CHANNEL 02532000
- STH R1,RCHQCNT @VA01044 02533000
- LR R2,R6 POINT TO THE RCHBLOK TO CHECK QUEQE 02534000
- SPACE 1 02535000
- IOSTSTQ C R2,IOBBPNT THE BACK POINTER MUST POINT BACK TO 02536000
- BE IOSDQBLK THE QUEUE WE ARE DEQUEUING FROM OR 02537000
- ABEND 3 THIS IOBLOK IS ON TWO QUEUES!!! 02538000
- SPACE 2 02539000
- IOSDQBLK DS 0H HERE FOR GENERAL IOBLOK DEQUEUE 02540000
- LM R1,R2,IOBFPNT GET FORWARD AND BACKWARD POINTERS 02541000
- ST R1,IOBFPNT-IOBLOK(,R2) UNCHAIN THE BLOK 02542000
- ST R2,IOBBPNT-IOBLOK(,R1) -- 02543000
- TM IOBSTAT,IOBMINI IS THIS A MINI-IOB? @V407438 02544000
- BOR R4 YES, THEN IOBUSER DOESN'T EXIST @V407438 02545000
- * IOSDQM ROUTINE WILL DO TIMER SWITCH 02546000
- * OTHERWISE, STOP CHARGING OLD USER@V407593 02547000
- * GET USER OF NEW IOB, AND @V407593 02548000
- * START CHARGING HIM @V407593 02549000
- CHARGE SWITCH,IOBUSER @V407593 02550000
- BR R4 AND EXIT 02551000
- EJECT 02552000
- *. 02553000
- * 02554000
- * J. OPERATION OF IOSENSE - 02555000
- * 1. FLAG THE IOBLOK AS AN ERROR TASK 02556000
- * 2. IF THE DEVICE IS STILL BUSY, EXIT TO CALLER TO WAIT FOR THE 02557000
- * DEVICE END 02558000
- * 3. IF THE DEVICE IS FREE, START THE SENSE AND EXIT TO CALLER 02559000
- * 02560000
- *. 02561000
- SPACE 02562000
- IOSENSE EQU * HERE TO SENSE ALL UNITS @VA09137 02563100
- TM IOBSPEC2,IOBSNSIO UC WHILE ATTEMPTING SENSE @VA09137 02564100
- BO IOSENBAD TROUBLE -INTERRUPT TIME - SENSE @VA10398 02580100
- TM IOBSPEC2,IOBUC FIRST ENTRY AFTER UNIT CHECK? @V407438 02581000
- BZ IOSGTERR YES -- GO BUILD ERROR BLOK 02582000
- L R4,IOBIOER GET ADDRESS OF ERROR BLOK 02583000
- USING IOERBLOK,R4 @VM01071 02584000
- TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED? @VA03834 02585000
- BO IOSETCAW YES--GIVE CURRENT STATUS ONLY @VA03834 02586000
- OC IOBCSW(8),IOERCSW ADD OLD CSW TO NEW CSW @VM01071 02587000
- B IOSETCAW AND GO START SENSE 02588000
- SPACE 02589000
- IOSGTERR DS 0H SET ERROR CONTROL BLOKS 02590000
- LA R0,IOERSIZE GET ERROR RECORDING BLOK 02591000
- CALL DMKFREE -- 02592000
- ST R1,IOBIOER AND SAVE ITS ADDRESS 02593000
- LR R4,R1 AND USE GPR4 FOR ADDRESSABILITY 02594000
- XC IOERBLOK(IOERSIZE*8),IOERBLOK CLEAR TO ZEROES 02595000
- MVC IOERCSW,IOBCSW SAVE UNIT CHECK CSW 02596000
- TM IOBCSW+4,UC UNIT CHECK PRESENT @VA01599 02597000
- BCR 8,R5 NO, RETURN TO IN LINE CODE @VA01599 02598000
- LM R0,R1,IOSSNCCW GET MODEL SENSE CCW @VA09137 02598100
- ALR R0,R4 ADJUST DATA ADDRESS @VA09137 02598200
- STM R0,R1,IOERCCW SAVE IN IOERBLOK @VA09137 02598300
- OI IOBSPEC2,IOBUC FLAG ERROR TASK @VA09137 02598400
- TM IOBSPEC,IOBTIO+IOBHIO WAS THIS A SIO REQUEST @VA01599 02599000
- BNZ IOSPERP NO, GET SENSE CCW @VA01599 02600000
- TM IOBFLAG,IOBCP+IOBHVC IS THIS A CP OR DIAGNOSE @VA01599 02601000
- * REQUEST 02602000
- BNZ NOT3203 YES, GO AROUND 3203 CODE @VA09137 02603050
- TM RDEVSTAT,RDEVDED DEVICE DEDICATED ? @VA09137 02603100
- BNO IOSPERP NO,NO CHECK FOR 3203 @VA09137 02603150
- CLC RDEVTYPC(2),=AL1(CLASURO,TYP3203) 3203 PRINTER? @VA09137 02603200
- BNE IOSPERP NO, GET SENSE CCW @VA09137 02603250
- CLC CSW+4(2),=AL1(CE+UC,0) SPECIAL 3203 INTERRUPT? @VA09137 02603300
- BE SPECINT SPECIAL 3203 INTERRUPT @VA14489 02603360
- CLC CSW+4(2),=AL1(CE+UC+IL,0) SPECIAL 3203 @VA14489 02603365
- * INTERRUPT? 02603370
- BNE IOSPERP NO, GET SENSE CCW @VA14489 02603375
- SPECINT EQU * @VA14489 02603380
- OI IOBSPEC3,IOBPST TELL VIO TO POST @VA09137 02603400
- LR R3,R5 SAVE R5 IN R3 ACROSS BAL @VA09137 02603450
- BAL R5,COPYIOB REFLECT THIS INTERRUPT @VA09137 02603500
- LR R5,R3 RESTORE R5 @VA09137 02603550
- NI IOBSPEC3,255-IOBPST TURN OFF POST @VA09137 02603600
- B SNS3203 DO TIO @VA09137 02603650
- NOT3203 EQU * @VA09137 02603700
- OI IOBFLAG,IOBERP SET INDICATOR FOR ERP SUPPORT @VA01599 02604000
- IOSPERP EQU * @VA01599 02605000
- TM IOBCSW+4,CE IS THE DEVICE FREE ? @VA01068 02611000
- BZ IOSETCAW YES -- GO START THE SENSE 02612000
- TM IOBCSW+4,DE+ATTN IS DEVICE STILL BUSY ? @VA01068 02613000
- BNZ IOSETCAW NO, ISSUE SENSE COMMAND 02614000
- LH R1,IOBRADD GET REAL DEVICE ADDRESS @VM01011 02615000
- XC CSW(8),CSW CLEAR THE REAL CSW @VM01011 02616000
- TIO 0(R1) SEE IF IT'S REALLY BUSY @VM01011 02617000
- BC 8+1,IOSETCAW GO AHEAD WITH THE SENSE @VM01011 02618000
- BC 2,IOSENSWT REALLY BUSY - WAIT FOR IT @VM01011 02619000
- TM CSW+4,DE+UC+ATTN ENDING STATUS ? @VM01011 02620000
- BZ IOSENSWT NO -- WAIT FOR IT @VM01011 02621000
- OI IOBCSW+4,DE FAKE DEVICE END REGARDLESS @VM01011 02622000
- B IOSETCAW AND GO AHEAD WITH THE SENSE @VM01011 02623000
- IOSENSWT EQU * @VM01011 02624000
- TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED 02625000
- BO COPYIOB YES, COPY IOBLOK FOR DEDICATED USER'S 02626000
- BR R5 MUST WAIT FOR DEVICE END 02627000
- SPACE 02627050
- SNS3203 EQU * 3203 TIO CODE FOR 0A STATUS @VA09137 02627100
- LH R1,IOBRADD GET REAL DEVICE ADDRESS @VA09137 02627150
- XC CSW(8),CSW CLEAR CSW @VA09137 02627200
- TIO 0(R1) IS IT BUSY ? @VA09137 02627250
- BC 8+1,IOSETCAW GO AHEAD WITH SENSE @VA09137 02627300
- BCR 2,R5 WAIT FOR DEVICE END @VA09137 02627350
- TM CSW+4,DE DEVICE END ? @VA09137 02627400
- BZR R5 NO, WAIT FOR IT @VA09137 02627450
- OI IOBCSW+4,DE SET DE FOR REFLECTION @VA09137 02627500
- B IOSETCAW GO DO SENSE @VA09137 02627550
- SPACE 3 02628000
- * 02629000
- * TEST IOBLOK TO SEE IF VMBLOK SHOULD BE TAKEN OUT OF 02630000
- * VMIOWAIT. 02631000
- * 02632000
- IOSTSTIW DS 0H @VA04182 02633000
- TM IOBFLAG,IOBCP CP GENERATED I/O ? @VA04182 02634000
- BOR R1 IF SO, DON'T RESET IOWAIT @VA04182 02635000
- TM IOBSPEC,IOBSIOF SIO FAST RELEASE ? @VA04182 02636000
- BOR R1 IF SO, SAME AS ABOVE @VA04182 02637000
- NI VMRSTAT,X'FF'-VMIOWAIT NO LONGER IN VMIOWAIT @VA04182 02638000
- BR R1 RETURN TO CALLER @VA04182 02639000
- EJECT 02640000
- IOSETCAW DS 0H 02641000
- LA R1,IOERCCW GET ADDRESS OF SENSE CCW 02642000
- ST R1,CAW SET UP CHANNEL ADDRESS WORD 02643000
- XI IOBSPEC2,IOBUC+IOBSNSIO UNFLAG UC, FLAG SENSE @V407438 02644000
- LH R1,IOBRADD GET DEVICE ADDRESS 02645000
- OI RDEVSTA2,RDEVCONC ALLOW PRESERVATION OF @VA01044*02646000
- CONTINGENT CONNECTION FOR VIRTUAL USER. @VA01044 02647000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 02648100
- BNE IOSNSIO1 NO, NOT 3270 TYPE @VA05088 02649000
- TM RDEVTYPE,TYP3277+TYP3284 3277 OR 3284? @VA09500 02649100
- BZ IOSNSIO1 NO- BRANCH @VA09500 02649110
- LA R15,2000(R0) LOAD COUNT FOR 3270 @VA05088 02650000
- B IOSNSIO GO TO SIO FOR SENSE @VA05088 02651000
- RETYCNT DC F'40000' RETRY COUNT @VA09500 02651100
- IOSNSIO1 EQU * @VA05088 02652000
- L R15,RETYCNT LOAD RETRY COUNT @VA09500 02653100
- IOSNSIO SIO 0(R1) ATTEMPT TO DO SENSE 02654000
- BCR 8,R5 SENSE STARTED -- GO WAIT FOR INTERRUPT 02655000
- BC 1,IOSENFAL ERROR FOR CC = 3 ON SIO 02656000
- BC 4,IOSNCC1 GO CHECK OUT CSW FOR CC = 1 ON SIO 02657000
- TM RCHTYPE,RCHBMX BUSY VALID ONLY ON BLOCK MULTIPLEXOR 02658000
- BZ IOSINBAD OTHERWISE, PROBABLE FAILURE @VA01350 02659000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 02660100
- BNE NOTGRAF1 NO-BRANCH @VA09500 02660200
- TM RDEVTYPE,TYP3277+TYP3284 @VA09500 02660300
- BM IOSINBAD IF EITHER LIMITED RETRY @VA09500 02660400
- NOTGRAF1 DS 0H @VA09500 02660500
- B IOSNSIO FOR BMPX, LOOP UNTIL STARTED 02662000
- SPACE 02663000
- IOSNCC1 TM CSW+4,X'FF'-(SM+CUE+BUSY) U.C.OR IRREG STATUS? @VX04718 02664000
- BNZ IOSINBAD YES,RETRY 16 TIMES @VX04718 02665000
- CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 02666100
- BNE NOTGRAF2 NO-BRANCH @VA09500 02666200
- TM RDEVTYPE,TYP3277+TYP3284 @VA09500 02666300
- BM ROUT3277 @VA09500 02666400
- NOTGRAF2 DS 0H @VA09500 02666500
- IOSSTAT CLI CSW+4,BUSY IS IT JUST A DEVICE BUSY @VA12629 02666600
- BE IOSINBAD YES USE LIMITED RETRY @VA12629 02666700
- TM CSW+4,SM+CUE+BUSY CUE OR CU PENDING @VA12629 02666800
- TM CSW+4,SM+CUE+BUSY NO,CUE,SM,OR BUSY? @VX04718 02668000
- BNZ IOSNSIO YES UNLIMITED RETRY @VX04718 02669000
- NOUN3277 EQU * @VA05088 02670000
- TM CSW+5,X'FF' ANY BAD CHANNEL STATUS 02671000
- BZ IOSNSIO NO, RETRY SENSE COMMAND 02672000
- TM CSW+5,IFCC+CCC IS THIS A CHANNEL DATA CHECK @VA01599 02673000
- BNZ IOSENFAL NO, GO INDICATE SENSE FAILED @VA01599 02674000
- SPACE 02675000
- IOSINBAD DS 0H RETRY FOR 'UC' OR BUSY ON SENSE @VA01350 02676000
- BCT R15,IOSNSIO RETRY 16 TIMES @VA01350 02677000
- SPACE 02678000
- IOSENFAL DS 0H HERE IF THE SENSE HAS FAILED 02679000
- MVC IOERLEN,ZEROES SENSE NOT AVAILABLE @VA10398 02679100
- IOSENBAD DS 0H @VA10398 02679200
- NI IOBSPEC2,X'FF'-IOBSNSIO SENSE NOT GOING -- @V407438 02680000
- NI RCHSTAT,X'FF'-RCHBUSY RESET CHANNEL BUSY 02681000
- NI RCUSTAT,X'FF'-RCUBUSY RESTE CU BUSY 02682000
- OI IOBSTAT,IOBFATAL SENSE HAS FAILED @VA01581 02683000
- B 4(,R5) TAKE ERROR EXIT - 02684000
- ROUT3277 TM CSW+4,SM+CUE+BUSY @VA05088 02685000
- BNZ IOSINBAD DO LIMITED RETRY @VA05088 02686000
- B NOUN3277 GO CHECK OTHER CONDITIONS @VA05088 02687000
- SPACE 02688000
- IOSSNCCW CCW 4,IOERDATA-IOERBLOK,SILI,IOERSNSZ MDL SENSE CCW @V407438 02689000
- DROP R4 02690000
- CLRSNS CCW 4,*-*,SILI+SKIP,24 CLEAR CONTENTION CONNECTION @VM08622 02691000
- EJECT 02692000
- IOSRECER DS 0H SET UP TO RECORD IOERROR 02693000
- L R0,RDEVIOER GET PRIMARY IOERBLOK 02694000
- LTR R0,R0 ANY QUEUED ?? 02695000
- BZ IOSGTEX NO -- USE IOBIOER 02696000
- ST R0,IOBIOER AND CHAIN TO IOBLOK 02697000
- SR R0,R0 CLEAR OUT 02698000
- ST R0,RDEVIOER REVBLOK POINTER 02699000
- IOSGTEX EQU * GET A CPEXBLOK TO STACK 02700000
- BAL R2,IOSGCPEX AND SET RETURN TO THE NEXT INSTRUCTION 02701000
- IOSRC1 EQU * DMKIOSRC BEGINS EXECUTION HERE @VA09587 02702000
- TM IOBSPEC,IOBTIO+IOBHIO WAS IT REALLY A SIO? @VA02503 02703000
- BNZ IOSERSTK NO -- JUST STACK THE IOBLOK @VA02503 02704000
- CALL DMKIOERR,AFFINITY RECORD THE ERROR @V407593 02705000
- ST R0,PTHSAVE RESTORE PTHSAVE VALUE IN CASE @VA07225 02706000
- ST R1,PTHSAVE+4 LOST CONTROL @VA07225 02707000
- TM IOBFLAG,IOBRSTRT HAS ERP REQUESTED RESTART ?? 02708000
- BZ RSTIDLE NO - REMOVE IDLE COND. @VA01160 02709000
- TM IOBFLAG,IOBRES HAS RESET BEEN ISSUED @VA05537 02710000
- BO IOSERSTK STACK IOBLOK @VA05537 02711000
- LA R0,IOERSIZE SIZE OF ONE IOERBLOK 02712000
- L R1,IOBIOER GET ADDRESS OF IOERBLOK 02713000
- LTR R1,R1 DO WE HAVE ONE 02714000
- BZ REQIOER RESTART IOB @VA05940 02715000
- USING IOERBLOK,R1 02716000
- AH R0,IOEREXT ADD EXTRA SIZE (IF ANY) OF IOERBLOK 02717000
- DROP R1 02718000
- CALL DMKFRET YES - FRET IT 02719000
- SLR R0,R0 02720000
- ST R0,IOBIOER CLEAR OUT POINTER TO OLD IOERBLOK 02721000
- REQIOER TM RDEVSTAT,RDEVSCED+RDEVBUSY IS DEVICE FREE? @VA05940 02722000
- BZ IOSREQUE YES, RESTART OPERATION @VA05940 02723000
- BAL R4,IOSQDEV OTHERWISE REQUEUE IT @VA05940 02724000
- B IOSTEXIT AND FINISH UP @VA05940 02725000
- RSTIDLE NI VMRSTAT,X'FF'-VMIDLE PUT USER BACK IN QUEUE @VA01160 02726000
- CALL DMKSCHDL ..... @VA01160 02727000
- SPACE 1 02728000
- SPACE 02729000
- IOSERSTK CALL DMKSTKIO STACK THE IOBLOK 02730000
- SPACE 02731000
- IOSERXIT GOTO DMKDSPCH AND LEAVE 02732000
- SPACE 2 02733000
- IOSGCPEX EQU * BUILD AND STACK CPEXBLOK 02734000
- LA R0,CPEXSIZE GET A CP REQUEST BLOK 02735000
- CALL DMKFREE 02736000
- USING CPEXBLOK,R1 02737000
- LR R15,R2 SET THE RETURN TO EXECUTION ADDRESS 02738000
- * SET UP BY THE CALLER 02739000
- XC CPEXR13(4),CPEXR13 ZERO OUT REG 13 (NO SAVE AREA) 02740000
- STM R15,R12,CPEXADD AND SAVE REGISTERS 02741000
- L R14,PTHSAVE SAVE PTHSAVE VALUE @VA07225 02742000
- L R15,PTHSAVE+4 ... @VA07225 02743000
- ST R14,CPEXR0 IN CASE LOSE CONTROL @VA07225 02744000
- ST R15,CPEXR1 IN CASE LOSE CONTROL @VA07225 02745000
- CALL DMKSTKMP STACK REQ. ON MAIN(I/O) PROC. @V407593 02746000
- BR R5 AND RETURN TO CALLER 02747000
- SPACE 3 02748000
- AIF (NOT &TRACE(6)).IOSEND 02749000
- SPACE 02750000
- * SUBROUTINE TO INITIATE A CALL TO DMKTRCSI TO TRACE A VIRTUAL 02751000
- * MACHINE SIO WHEN IT IS APPROPRIATE FOR CP TO DO SO 02752000
- * 02753000
- * AT ENTRY: 02754000
- * R5 = RETURN REGISTER 02755000
- * R10 = A (IOBLOK) (NOTE - CC IS STORED IN IOBLOK) 02756000
- * R11 = A (USER'S VMBLOK) 02757000
- * USING VMBLOK,R11 ... 02758000
- * 02759000
- * AT EXIT: 02760000
- * A CALL TO DMKTRCSI HAS BEEN SCHEDULED 02761000
- * 02762000
- IOSTRACE EQU * @V407593 02763000
- BAL R2,IOSGCPEX BUILD A CP EXECUTION BLOCK TO RETURN TO 02764000
- * THE NEXT INSTRUCTION, AND RETURN TO 02765000
- * CALLER ON REG 5. 02766000
- SPACE 2 02767000
- * WHEN TRIGGERED BY 'IOSTRACE' ABOVE, WE EVENTUALLY COME HERE: 02768000
- * 02769000
- TM VMTRCTL,VMTRSIO STILL TRACING SIO @VA07464 02770000
- BZ NIVRMST NOPE - HE CHANGED HIS MIND REAL FAST 02771000
- LH R1,IOBVADD YES - VIRTUAL ADDRESS IS EXPECTED IN R1 02772000
- CALL DMKTRDSI NOW CALL THE SIO TRACER ENTRY @V4M0240 02773000
- NIVRMST NI VMRSTAT,255-VMIOWAIT NOW TAKE HIM OUT OF IOWAIT, COACH.. 02774000
- GOTO DMKDSPCH AND GO DO WHAT'S BEST. 02775000
- .IOSEND ANOP 02776000
- CHANOFF DC A(X'80000000') MASK FOR DISABLING CHANNEL @VA07955 02777000
- SPACE 3 02778000
- CCWL EQU 8 CCL LENGTH @V60B6B8 02779000
- SEEKPTL EQU 3 LENGTH OF PTR TO SEEK ARG @V60B6B8 02780000
- TICOFF EQU 9 OFFSET TO CCW PTR IN TIC @V60B6B8 02781000
- PREL EQU 24 LENGTH OF PREFIX @V60B6B8 02782000
- * CONSTANTS @V407593 02785000
- SET EQU X'FF' USED TO TEST IF FLAG IS SET @V407593 02786000
- IOTRCODE EQU 5 TRACE-TABLE FLAG FOR I/O INTERRUP@V407593 02787000
- SKSHDR EQU 6 SEEKS HEADER LENGTH @V60BEBC 02788000
- INCLUDE EQU X'80' SEEKS INCLUDE OPTION @V60BEBC 02789000
- EXCLUDE EQU X'40' SEEKS EXCLUDE OPTION @V60BEBC 02790000
- SEEKCL EQU X'01' SEEKS MONITOR MASK @VMI0067 02791000
- SPACE 1 @V407593 02792000
- LTORG @V407593 02793000
- EJECT 02794000
- COPY EQU 02795000
- COPY DEVTYPES 02796000
- PSA 02797000
- COPY SAVE 02798000
- COPY VMBLOK 02799000
- COPY IOBLOKS 02800000
- COPY RBLOKS 02801000
- COPY VBLOKS 02802000
- COPY IOER 02803000
- END DMKIOS @V200820 02804000
ibm/vm370-lib/cp/dmkios.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator