Table of Contents

DMKIOT Source

References

Source Listing

DMKIOT.ASSEMBLE.txt
  1. IOT TITLE 'DMKIOT (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 00002000
  3. MACRO 00003000
  4. &LABEL INCR &COUNT 00004000
  5. &LABEL LA R0,1 00005000
  6. AL R0,&COUNT 00006000
  7. ST R0,&COUNT 00007000
  8. MEND 00008000
  9. *********************************************************************** 00009000
  10. * * 00010000
  11. *MODULE NAME = DMKIOT * 00011000
  12. * * 00012000
  13. *DESCRIPTIVE NAME = DMKIOT (CP) I/O INTERRUPT HANDLER * 00013000
  14. * * 00014000
  15. *COPYRIGHT = NONE * 00015000
  16. * * 00016000
  17. *STATUS = VM/370 - RELEASE 6, LEVEL 0 * 00017000
  18. * * 00018000
  19. *FUNCTION = TO SERVICE ALL I/O INTERRUPTS * 00019000
  20. * * 00020000
  21. *NOTES = SEE BELOW * 00021000
  22. * * 00022000
  23. * DEPENDENCIES = NONE * 00023000
  24. * * 00024000
  25. * RESTRICTIONS = NONE * 00025000
  26. * * 00026000
  27. * REGISTER CONVENTIONS = R0 = SCRATCH * 00027000
  28. * R1 = SCRATCH * 00028000
  29. * R2 = I/O RESTART INDEX (0, 4, 8 OR 12) * 00029000
  30. * R3 = INTERNAL SUBROUTINE LINKAGE (1ST LEVEL * 00030000
  31. * R4 = INTERNAL SUBROUTINE LINKAGE (3RD LEVEL * 00031000
  32. * R5 = INTERNAL SUBROUTINE LINKAGE (2ND LEVEL * 00032000
  33. * R6 = RCHBLOK BASE * 00033000
  34. * R7 = RCUBLOK BASE * 00034000
  35. * R8 = RDEVBLOK BASE * 00035000
  36. * R9 = DMKIOT 2ND BASE * 00036000
  37. * R10 = IOBLOK BASE * 00037000
  38. * R11 = VMBLOK BASE * 00038000
  39. * R12 = DMKIOT BASE * 00039000
  40. * R13 = ZERO IF ENTERED VIA INTERRUPT * 00040000
  41. * R14 = EXTERNAL SUBROUTINE LINKAGE * 00041000
  42. * R15 = EXTERNAL SUBROUTINE LINKAGE * 00042000
  43. * * 00043000
  44. * PATCH LABEL = N/A * 00044000
  45. * * 00045000
  46. *MODULE TYPE = CSECT * 00046000
  47. * * 00047000
  48. * PROCESSOR = ASSEMBLER XF * 00048000
  49. * * 00049000
  50. * MODULE SIZE = 8K BYTES (2 BASE REGISTERS DESIGN POINT) * 00050000
  51. * * 00051000
  52. * ATTRIBUTES = REENTRANT, RESIDENT. * 00052000
  53. * * 00053000
  54. *ENTRY POINT = DMKIOTIN * 00054000
  55. * * 00055000
  56. * PURPOSE = PROCESS AN I/O INTERRUPT * 00056000
  57. * * 00057000
  58. * LINKAGE = ENTERED DIRECTLY VIA I/O NEW PSW * 00058000
  59. * * 00059000
  60. *ENTRY POINT = DMKIOTCT * 00060000
  61. * * 00061000
  62. * PURPOSE = TOTAL I/O INTERRUPT COUNT. * 00062000
  63. * * 00063000
  64. * LINKAGE = NONE * 00064000
  65. * * 00065000
  66. *INPUT = * 00066000
  67. * DMKIOTIN * 00067000
  68. * R6 = RCHBLOK BASE * 00068000
  69. * R7 = RCUBLOK BASE * 00069000
  70. * R8 = RDEVBLOK BASE * 00070000
  71. * R10 = IOBLOK BASE * 00071000
  72. * R11 = VMBLOK BASE * 00072000
  73. * DMKIOTCT * 00073000
  74. * NONE * 00074000
  75. *OUTPUT = * 00075000
  76. * DMKIOTIN * 00076000
  77. * CPEXBLOK TO RETURN TO DMKIOSER * 00077000
  78. * CPEXBLOK TO RETURN TO DMKIOSRC * 00078000
  79. * * 00079000
  80. * DMKIOTCT * 00080000
  81. * * 00081000
  82. *EXIT-NORMAL = * 00082000
  83. * DMKIOTIN * 00083000
  84. * DISPATCHER * 00084000
  85. * DMKIOSST B IOSTART ISSUE SIO * 00085000
  86. * DMKIOSRS B IOTRSTDV RESTART DEVICE * 00086000
  87. * DMKIOSRQ B IOTREQUE REQUEUE REQUEST * 00087000
  88. * DMKIOSRU B IOTRSTCU RESTART CU & CH * 00088000
  89. * DMKIOSRH B IOTRSTCH RESTART CH * 00089000
  90. * DMKIOSRY B CALLERP PERFORM ERROR RECOVERY * 00090000
  91. * DMKIOSER VIA CPEXBLOK * 00091000
  92. * DMKIOSRC VIA CPEXBLOK * 00092000
  93. * * 00093000
  94. * DMKIOTCT * 00094000
  95. * NONE * 00095000
  96. * * 00096000
  97. *EXIT-ERROR = * 00097000
  98. * DMKIOTIN * 00098000
  99. * NONE * 00099000
  100. * DMKIOTCT * 00100000
  101. * NONE * 00101000
  102. * * 00102000
  103. *EXTERNAL REFERENCES = SEE BELOW * 00103000
  104. * * 00104000
  105. * ROUTINES = DMKSTKIO - TO STACK FOR 2ND LEVEL PROCESSING IOBLOKS FOR* 00105000
  106. * COMPLETED OPERATIONS. * 00106000
  107. * DMKSTKCP - TO STACK CPEXBLOK FOR DEFERRED CALL TO I/O * 00107000
  108. * ERROR RECORDER (DMKIOERR) * 00108000
  109. * DMKSCNRU - TO LOCATE RCHBLOK, RCUBLOK, AND RDEVBLOK FOR * 00109000
  110. * THE UNIT CAUSING THE INTERRUPT * 00110000
  111. * DMKIOERR - TO RECORD I/O ERRORS * 00111000
  112. * DMKCCHNT - TO HANDLE CHANNEL ERRORS DETECTED VIA AN I/O * 00112000
  113. * INTERRUPT * 00113000
  114. * DMKCCHSI - TO HANDLE CHANNEL ERRORS DETECTED VIA STATUS * 00114000
  115. * STORED ON CC 1 AFTER A SIO * 00115000
  116. * DMKDASER - TO RETRY FAILING DASD OPERATIONS * 00116000
  117. * DMKRSPER - TO RETRY FAILING UNIT RECORD OPERATIONS * 00117000
  118. * DMKTAPER - TO RETRY FAILING TAPE OPERATIONS * 00118000
  119. * DMKTRDSI - TO TRACE VIRTUAL MACHINE START I/O INSTRUCTION 00119000
  120. * DMKFREE - TO OBTAIN FREE STORAGE FOR AN IOBLOK * 00120000
  121. * DMKFRET - TO RETURN IOBLOKS TO FREE STORAGE * 00121000
  122. * DMKSCHDL - TO ALTER A VIRTUAL MACHINE'S DISPATCH STATUS * 00122000
  123. * INTERRUPT HANDLERS FOR UNSOLICITED INTERRUPTS: * 00123000
  124. * DMKVIOIN - INTERRUPT HANDLER FOR DEDICATED DEVICES * 00124000
  125. * DMKRSPEX - INTERRUPT HANDLER FOR SYSTEM SPOOL DEVICES * 00125000
  126. * DMKCNSIN - INTERRUPT HANDLER FOR SLOW-SPEED TERMINAL LINE 00126000
  127. * DMKGRFIN - INTERRUPT HANDLER FOR LOCAL GRAPHICS DEVICES * 00127000
  128. * DMKRNHIN - INTERRUPT HANDLER FOR THE 3704 AND 3705 * 00128000
  129. * DMKDSBRD - INTERRUPT HANDLER FOR DASD * 00129000
  130. * DMKRGAIN - INTERRUPT HANDLER FOR 3270 REMOTE SUPPORT * 00130000
  131. * DATA AREAS = DMKSYSVM - SYSTEM VMBLOK * 00131000
  132. * PSA - PREFIX STORAGE AREA * 00132000
  133. * IOERBLOK - I/O ERROR INFORMATION BLOCK * 00133000
  134. * IOBLOK - I/O TACK CONTROL BLOCK * 00134000
  135. * CPEXBLOK - * 00135000
  136. * RCHBLOK - REAL CHANNEL BLOCK * 00136000
  137. * RCUBLOK - REAL CONTROL UNIT BLOCK * 00137000
  138. * RDEVBLOK - REAL DEVICE BLOCK * 00138000
  139. * VMBLOK - VIRTUAL MACHINE CONTROL BLOCK * 00139000
  140. * SAVEAREA - SAVE AREA SVC CALL * 00140000
  141. * * 00141000
  142. *TABLES = TEMPSAVE - SAVES INITL SYSTEM STATUS UPON ENTRY TO DMKIOTIN * 00146000
  143. * * 00147000
  144. *MACROS = INCR * 00148000
  145. * PSA * 00149000
  146. * * 00150000
  147. *CHANGE ACTIVITY = AS FOLLOWS: * 00151000
  148. * CHANGE 01 02/16/79 SPLIT OF MODULE DMKIOS - DMKIOSIN PORTION * 00152000
  149. * * 00153000
  150. *********************************************************************** 00154000
  151. EJECT 00155000
  152. COPY OPTIONS 00156000
  153. COPY LOCAL OPTIONS 00157000
  154. SPACE 2 00158000
  155. DMKIOT CSECT @VA09587 00159000
  156. ENTRY DMKIOTIN,DMKIOTCT @VA09587 00160000
  157. EXTRN DMKSCHDL,DMKSTKCP,DMKSTKIO,DMKSCNRU @VA09587 00161000
  158. EXTRN DMKCCHNT,DMKCCHIS,DMKIOERR,DMKDASER,DMKTAPER @VA09587 00162000
  159. EXTRN DMKRSPER,DMKIOSRC,DMKIOSER @VA09587 00163000
  160. EXTRN DMKVIOIN,DMKGRFIN,DMKCNSIN,DMKRNHIN,DMKRSPEX @VA09587 00164000
  161. EXTRN DMKDSBRD,DMKBSCER,DMKRGAIN @VA09587 00165000
  162. EXTRN DMKIOSRS,DMKIOSSV @VA09587 00166000
  163. EXTRN DMKIOSRH,DMKIOSRQ,DMKIOSRU,DMKIOSRY,DMKIOSST @VA09587 00167000
  164. EXTRN DMKDIAIR @VA09587 00168000
  165. EXTRN DMKRIOCN @VA09587 00169000
  166. EXTRN DMKENTSK @V60BEBC 00170000
  167. AIF (NOT &AP).DSPRU6 00172000
  168. EXTRN DMKDSPRU,DMKLOKSY @V4M0173 00173000
  169. .DSPRU6 ANOP 00174000
  170. EXTRN DMKSTKMP,DMKDSPA @V4M0173 00175000
  171. EXTRN DMKSTKLF @V4M0154 00176000
  172. EXTRN DMKSSUI1,DMKSSUI2 @VA11455 00177010
  173. SPACE 00178000
  174. AIF (NOT &TRACE(6)).IOTNDX 00179000
  175. EXTRN DMKTRDSI @V4M0240 00180000
  176. .IOTNDX ANOP (END OF EXTRN'S) 00181000
  177. SPACE 00182000
  178. USING PSA,R0 00183000
  179. USING CPEXBLOK,R1 00184000
  180. USING RCHBLOK,R6 00185000
  181. USING RCUBLOK,R7 00186000
  182. USING RDEVBLOK,R8 00187000
  183. USING IOBLOK,R10 00188000
  184. USING VMBLOK,R11 00189000
  185. USING SAVEAREA,R13 00190000
  186. SPACE 00191000
  187. USING DMKIOT,R12,R9 @VA09587 00192000
  188. EJECT 00193000
  189. EJECT 00194000
  190. EJECT 00195000
  191. *. 00196000
  192. * 00197000
  193. * D. OPERATION OF DMKIOTIN - 00198000
  194. * 0. AP SUPPORT -- SET CPSUPER FLAG ON 00199000
  195. * 1. IF THE I/O OLD PSW INDICATES PROBLEM MODE, SAVE THE RUN- 00200000
  196. * NING USER'S CPU STATUS IN HIS VMBLOK 00201000
  197. * 2. CALL DMKSCNRU TO LOCATE THE RCHBLOK, RCUBLOK, AND RDEVBLOK 00202000
  198. * FOR THE INTERRUPTING UNIT. 00203000
  199. * 3. IF THE INTERRUPT TYPE INDICATES THAT A PREVIOUSLY BUSY RE- 00204000
  200. * SOURCE IS NOW AVAILABLE (CUE OR CHANNEL AVAILABLE), RESTART 00205000
  201. * AT THE APPROPRIATE LEVEL; OTHERWISE THE INTERRUPT MUST BE 00206000
  202. * STACKED FOR FURTHER PROCESSING 00207000
  203. * 4. IF THERE IS AN IOBLOK ACTIVE ON THE INTERRUPTING DEVICE, 00208000
  204. * CONTINUE; OTHERWISE, CALL THE 2ND LEVEL SUBROUTINE IOTGTIOB 00209000
  205. * (H, BELOW) TO CONSTRUCT ONE, AND CONTINUE 00210000
  206. * 00211000
  207. *. 00212000
  208. SPACE 00213000
  209. DMKIOTIN DS 0D I/O INTERRUPTION SUPERVISOR @VA09587 00214000
  210. OI CPSTATUS,CPSUPER WE ARE NOW IS SUPERVISOR STA@V407593 00215000
  211. STM R9,R15,TEMPR9 SAVE REGISTERS AT ENTRY @V407511 00216000
  212. BALR R15,0 ESTABLISH ADDRESABILITY @V408246 00217000
  213. USING *,R15 @V408246 00218000
  214. L R12,IOTBASE1 LOAD BASE REGISTER TO DMKIOT @VA09587 00219000
  215. L R9,IOTBASE2 LOAD SECOND BASE REG @VA09587 00220000
  216. DROP R15 @V407511 00221000
  217. USING DMKIOT,R12,R9 @VA09587 00222000
  218. TM CPSTATUS,CPRUN RUNNING VIRTUAL MACHINE? @V408246 00223000
  219. BZ IOTRSYS NO, WAIT STATE OR DISPATCH WINDOW@V408246 00224000
  220. L R14,RUNUSER VMBLOK POINTER @V408246 00225000
  221. USING VMBLOK,R14 @V408246 00226000
  222. STPT VMTMOUTQ CHECKPOINT PROBLEM OR WAIT @V408246 00227000
  223. * STATE TIMER 00228000
  224. MVC QUANTUMR,TIMER SAVE INTERVAL TIMER AT INTERRUPT @V408246 00229000
  225. LCTL C0,C0,CPCREG0 RE-ESTABLISH SYSTEM'S CONTROL @V408246 00230000
  226. * REGS. 00231000
  227. LCTL C8,C8,CPCREG8 . . @V408246 00232000
  228. STM R0,R8,VMGPRS SAVE THE USER'S REGISTERS @V407511 00233000
  229. MVC VMGPRS+R9*4(28),TEMPR9 @V407511 00234000
  230. AIF (NOT &FLOATPT).NOFP1 00235000
  231. STD Y0,VMFPRS SAVE FLOATING POINT REGISTERS 00236000
  232. STD Y2,VMFPRS+8 ... 00237000
  233. STD Y4,VMFPRS+16 ... 00238000
  234. STD Y6,VMFPRS+24 ... 00239000
  235. .NOFP1 ANOP 00240000
  236. MVC VMPSW+4(4),IOOPSW+4 SAVE THE INTERRUPTION ADDRESS 00241000
  237. IC R1,IOOPSW+2 SAVE THE CC AND PGM MASK 00242000
  238. TM VMESTAT,VMEXTCM EXTENDED CONTROL MACHINE ?? 00243000
  239. BZ IOTMNORM NO, NORMAL MODE 00244000
  240. STC R1,VMPSW+2 00245000
  241. B IOTRSYS1 CONTINUE @V407511 00246000
  242. IOTMNORM STC R1,VMPSW+4 00247000
  243. B IOTRSYS1 @V407511 00248000
  244. SPACE 00249000
  245. SPACE 00250000
  246. DROP R14 00251000
  247. USING VMBLOK,R11 @V408246 00252000
  248. EJECT 00253000
  249. IOTRSYS DS 0H @V408246 00254000
  250. TM CPSTATUS,CPWAIT INTERRUPT FROM WAIT? @V408246 00255000
  251. BO IOTWAIT YES, HANDLE INTERRUPT FROM WAIT @V4M0173 00256000
  252. AIF (NOT &AP).LOKSY6 00257000
  253. TM APSTAT1,APUOPER IS THIS AN AP SYSTEM? @V4M0173 00258000
  254. BZ IOTRSYS1 NO, CONTINUE AS IN UP MODE @V4M0173 00259000
  255. L R15,=A(DMKLOKSY+2) GET ADDR OF SYSTEM LOCK @V4M0173 00260000
  256. CLC LPUADDR,0(R15) IS THE SYSTEM LOCK HELD? @V4M0173 00261000
  257. BNE IOTRSYS1 NO, CONTINUE PROCESSING @V4M0173 00262000
  258. LOCK RELEASE,TYPE=SYS RELEASE SYSTEM LOCK @V4M0173 00263000
  259. .LOKSY6 ANOP 00264000
  260. B IOTRSYS1 CONTINUE INTERRUPT PROCESSING @V4M0173 00265000
  261. IOTWAIT DS 0H @V4M0173 00266000
  262. STPT WAITEND STOP WAITTIME ACCOUNTING @V407511 00267000
  263. IOTRSYS1 DS 0H V407511 00268000
  264. L R11,ASYSVM CHARGE SYSTEM FOR OVERHEAD UNTIL 00269000
  265. CHARGE START TRUE OWNER OF INTERRUPT IS ESTABL@V407593 00270000
  266. SPACE 00271000
  267. AIF (NOT &TRACE(9)).TR1 @V408246 00272000
  268. TM TRACFLG1,TRAC05 TRACING ACTIVE? @V408246 00273000
  269. BZ NOTRAC1 BRANCH IF NOT @V408246 00274000
  270. * GET TRACE-TABLE PTR, A 00275000
  271. TRACE CODE=IOTRCODE,R14,R0,R1 FLAG AS I/O INTER. @V407593 00276000
  272. MVI 1(R14),0 CLEAR 2ND BYTE @V408246 00277000
  273. MVC 2(2,R14),INTTIO SAVE INTERUPTING DEVICE ADDRESS @V408246 00278000
  274. MVC 4(4,R14),IOOPSW+4 SAVE RIGHT HALF OF I/O OLD PSW@V408246 00279000
  275. MVC 8(8,R14),CSW SAVE CSW @V408246 00280000
  276. L R14,RUNUSER RESTORE GPR14 @V408246 00281000
  277. NOTRAC1 EQU * @V408246 00282000
  278. .TR1 ANOP 00283000
  279. L R13,DMKIOTCT GET TOTAL I/O INTERRUPT COUNT @VA09587 00284000
  280. AL R13,F1 BUMP 00285000
  281. ST R13,DMKIOTCT AND SAVE @VA09587 00286000
  282. SLR R13,R13 INDICATE ENTRY FROM AN I/O INTERRUPT 00287000
  283. LH R1,INTTIO GET THE INTERRUPTING UNIT'S ADDRESS 00288000
  284. CALL DMKSCNRU GET REAL CHANNEL, CU, AND DEVICE BLOCKS 00289000
  285. BC 4,IOTGDISP EXIT IF CHANNEL NOT FOUND 00290000
  286. L R3,=A(DMKIOSSV) @VA09587 00291000
  287. ST R6,0(R3) SAVE RCH AND RCU VALUE @VA09587 00292000
  288. ST R7,4(R3) IN CASE OF RESTART @VA09587 00293000
  289. BNZ IOTNODEV DO NOT TEST FOR RESET IF DEVICE NOT FOUND 00294000
  290. TM RDEVTYPC,CLASTAPE TAPE DEVICE?? @VA11340 00295000
  291. BZ NOTTAPES NO SKIP @VA11340 00295010
  292. L R4,RDEVAIOB IS IT UNSOLICITED?? @VA11340 00295020
  293. LTR R4,R4 INTERRUPT @VA11340 00295030
  294. BZ IOTNODEV YES, INVESTIGATE @VA11340 00295040
  295. NOTTAPES EQU * @VA11340 00295050
  296. TM RDEVSTA2,RDEVRACT IS THIS DEVICE BEING RESET? @VA11340 00295060
  297. BZ IOTNODEV NOPE, BR. @VA11340 00295070
  298. NI RCHSTAT,X'FF'-RCHBUSY CLEAR CHANNEL BUSY @VA00931 00303000
  299. NI RCUSTAT,X'FF'-RCUBUSY CLEAR CU BUSY @VA00931 00304000
  300. TM RDEVSTAT,RDEVSCED I/O Q'D FROM C.U. OR CHAN? @VA10176 00304020
  301. BNO NONEQUED NO, FORGET THE SEARCH @VA10176 00304040
  302. L R10,RCUFIOB CHECK IF IOB OFF CTLUNIT @VA10176 00304060
  303. CUCKLOOP EQU * @VA10176 00304080
  304. CR R7,R10 IS THIS THE LAST ONE? @VA10176 00304100
  305. BE CHKCHAN YES, CHECK IF IOB OFF CHANNEL @VA10176 00304120
  306. CLC IOBRADD(2),INTTIO IS THIS FOR US? @VA10176 00304140
  307. BE CUCKOUT YES, GO DEQUEUE IT @VA10176 00304160
  308. L R10,IOBFPNT-IOBLOK(R10) NO, CHECK NEXT IOBLOK @VA10176 00304180
  309. B CUCKLOOP ... @VA10176 00304200
  310. CUCKOUT EQU * @VA10176 00304220
  311. LH R1,RCUQCNT DECREASE QUEUED COUNT @VA10176 00304240
  312. BCTR R1,0 ... @VA10176 00304260
  313. STH R1,RCUQCNT ... @VA10176 00304280
  314. B FNDIOB CONTINUE @VA10176 00304300
  315. CHKCHAN EQU * @VA10176 00304320
  316. L R10,RCHFIOB FIRST IOB ON CHANNEL @VA10176 00304340
  317. CHKCHAN1 EQU * @VA10176 00304360
  318. CR R6,R10 IS THIS THE END OF CHAIN? @VA10176 00304380
  319. BE NONEQUED YES, NORMAL PROCESSING @VA10176 00304400
  320. CLC IOBRADD(2),INTTIO IS THIS ONE FOR US? @VA10176 00304420
  321. BE CHCLOOP1 YES, GO DEQUEQE IT @VA10176 00304440
  322. L R10,IOBFPNT-IOBLOK(R10) NO, CHECK NEXT ONE @VA10176 00304460
  323. B CHKCHAN1 CONTINUE @VA10176 00304480
  324. CHCLOOP1 EQU * @VA10176 00304500
  325. LH R1,RCHQCNT DECREASE QUEUED COUNT @VA10176 00304520
  326. BCTR R1,0 ... @VA10176 00304540
  327. STH R1,RCHQCNT ... @VA10176 00304560
  328. FNDIOB EQU * @VA10176 00304580
  329. LM R4,R5,IOBFPNT-IOBLOK(R10) DEQUEUE IOBLOK @VA10176 00304600
  330. ST R4,IOBFPNT-IOBLOK(R5) ... @VA10176 00304620
  331. ST R5,IOBBPNT-IOBLOK(R4) ... @VA10176 00304640
  332. NI RDEVSTAT,X'FF'-(RDEVBUSY+RDEVSCED) RESET FLAGS @VA14143 00304661
  333. B IOTTART @VA10176 00304680
  334. NONEQUED EQU * @VA10176 00304700
  335. B IOTRSTCU @VA00931 00305000
  336. SPACE 3 00306000
  337. IOTBASE1 DC A(DMKIOT) ADCONS MUST BE IN THE FIRST 4K @VA09587 00307000
  338. IOTBASE2 DC A(DMKIOT+4096) AND AFTER THE LAST ENTRY POINT @VA09587 00308000
  339. * VA04182 00309000
  340. EJECT 00310000
  341. IOTNODEV EQU * @VA01382 00311000
  342. TM CSW+5,CDC+CCC+IFCC CHANNEL ERRORS ? @VA01382 00312000
  343. BZ IOTCLRCH NO - @VM08622 00313000
  344. LTR R8,R8 HAVE AN RDEVBLOK? @VMD0141 00314000
  345. BM IOTCCR NO, CALL DMKCCHNT NOW. @VMD0141 00315000
  346. ICM R10,15,RDEVAIOB UNSOLICITED INTERRUPT ?? @V508690 00316000
  347. BNZ IOTCCR NO, CALL DMKCCHNT NOW @V508690 00317000
  348. TM RDEVSTAT,RDEVDED UNSOL FROM DEDICATED DEVICE ? @V508690 00318000
  349. BZ IOTCCR NO, GO CALL DMKCCHNT @V508690 00319000
  350. BAL R5,IOTGTIOB YES, BUILD IOBLOK,FLAG IT UNSOL. @V508690 00320000
  351. ST R10,RDEVAIOB SAVE IOBLOK ADDRESS @V508690 00321000
  352. IOTCCR EQU * SET UP FOR CALL TO DMKCCHNT @V508690 00322000
  353. LM R4,R5,CSW SAVE CSW FOR CHANNEL HANDLER. @VM08622 00323000
  354. LH R3,INTTIO ALSO THE DEVICE ADDRESS. @VM08622 00324000
  355. AIF (NOT &AP).LOKSY7 00325000
  356. TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V4M0154 00326000
  357. BZ CALLCCH NO, JUST CALL CHANNEL CHECK @V4M0154 00327000
  358. L R15,=A(DMKLOKSY+2) GET ADDR SYSTEM LOCK @V4M0154 00328000
  359. CLC LPUADDR,0(R15) DO WE HOLD SYSTEM LOCK @V4M0154 00329000
  360. BE CALLCCH YES, OK TO CALL CHANNEL CHECK @V4M0154 00330000
  361. LOCK OBTAIN,TYPE=SYS,SPIN=NO,SAVE @V4M0154 00331000
  362. BNE CCHSTACK STACK A CPEXBLOK @V4M0154 00332000
  363. CALL DMKCCHNT,AFFINITY GO PROCESS CHANNEL CHECK @V4M0154 00333000
  364. LOCK RELEASE,TYPE=SYS,SAVE RELEASE SYSTEM LOCK @V4M0154 00334000
  365. B CCHRET CONTINUE @VA09044 00335000
  366. CCHSTACK DS 0H @V4M0154 00336000
  367. LA R1,X'F00' CHANNEL MASK @VA07955 00337000
  368. NR R1,R3 CHANNEL ADDRESS @VA07955 00338000
  369. SRL R1,8 POSITION FOR COUNT @VA07955 00339000
  370. L R2,CHANOFF CHANNEL MASK BIT @VA07955 00340000
  371. SRL R2,0(R1) POSITION BIT MASK @VA07955 00341000
  372. X R2,FFS INVERT BITS @VA07955 00342000
  373. STCTL C2,C2,TEMPSAVE STORE CONTROL REG 2 @V4M0154 00343000
  374. N R2,TEMPSAVE DISABLE FAILING CHANNEL @V4M0154 00344000
  375. ST R2,TEMPSAVE STORE UPDATED CONTROL REG @V4M0154 00345000
  376. LCTL C2,C2,TEMPSAVE LOAD UPDATED CONTROL REG @V4M0154 00346000
  377. LA R0,CPEXSIZE GET SIZE OF A CPEXBLOK @V4M0154 00347000
  378. CALL DMKFREE OBTAIN A CPEXBLOK FROM FREE STOR @V4M0154 00348000
  379. USING CPEXBLOK,R1 ADDRESSIBILITY TO CPEXBLOK @V4M0154 00349000
  380. LA R15,CCHUNSTK LOAD ADDR RETURN POINT @V4M0154 00350000
  381. STM R15,R12,CPEXADD SAVE REGISTERS @V4M0154 00351000
  382. XC CPEXR13,CPEXR13 INDICATE NO SAVEAREA UPON RETURN@V4M0154 00352000
  383. MVC CPEXPROC,LPUADDR IND UNSTACKING ON THIS PROC @V4M0154 00353000
  384. CALL DMKSTKLF STACK A PRIORITY CPEXBLOK @V4M0154 00354000
  385. GOTO DMKDSPRU RETURN TO DISPATCHER @V4M0154 00355000
  386. DROP R1 @V4M0154 00356000
  387. CCHUNSTK DS 0H ENTERED VIA CPEXBLOK @V4M0154 00357000
  388. L R1,=A(DMKIOSSV) IOS SAVE AREA ADDRESS @VA09587 00358000
  389. ST R6,0(R1) SAVE RCH AND RCU ADDRESS @VA09587 00359000
  390. ST R7,4(R1) IN CASE LOSE CONTROL @VA09587 00360000
  391. LA R1,X'F00' CHANNEL MASK @VA07955 00361000
  392. NR R1,R3 GET INTERUPT ADDRESS @VA07955 00362000
  393. SRL R1,8 SHIFT FOR COUNT @VA07955 00363000
  394. L R2,CHANOFF CHANNEL MASK BIT @VA07955 00364000
  395. SRL R2,0(R1) CORRECTLY POSITION BIT @VA07955 00365000
  396. STCTL C2,C2,TEMPSAVE STORE CONTROL REG FOR UPDATING @V4M0154 00366000
  397. O R2,TEMPSAVE REENABLE FAILING CHANNEL @V4M0154 00367000
  398. ST R2,TEMPSAVE STORE UPDATED CONTROL REG @V4M0154 00368000
  399. LCTL C2,C2,TEMPSAVE LOAD UPDATED CONTROL REG @V4M0154 00369000
  400. .LOKSY7 ANOP 00370000
  401. CALLCCH DS 0H @V4M0154 00371000
  402. CALL DMKCCHNT,AFFINITY GO PROCESS CHANNEL CHECK @V4M0154 00372000
  403. CCHRET EQU * @VA09044 00373000
  404. LTR R7,R7 DO WE HAVE RCUBLOK ? @VA09044 00374000
  405. BM IOTRSTCH NO, START CHANNEL @VA09044 00375000
  406. LTR R8,R8 DO WE HAVE RDEVICE ? @VA09044 00376000
  407. BM IOTRSTCU NO, START CU @VA09044 00377000
  408. IOTCLRCH NI RCHSTAT,X'FF'-RCHBUSY CHANNEL NO-LONGER BUSY @VM08622 00378000
  409. SLR R2,R2 CLEAR... @VM08622 00379000
  410. CL R2,CSW IS CCW ADDRESS+8 EQ. ZERO? @VA01834 00380000
  411. BNE PARIS NON, POSSIBLE HIO... @VA01834 00381000
  412. CH R2,CSW+4 CHANNEL AVAILABLE INTERRUPT? @VA01834 00382000
  413. BE IOTRSTCH YES, RESTART CHANNEL @VA01834 00383000
  414. PARIS LTR R7,R7 MEFIONS-NOUS DU HIO..HANDLE HIO @VA01834 00384000
  415. BNP OFFLINE NO - RCUBLOK NOT FOUND. @VM08622 00385000
  416. TM RCUTYPE,RCUSUB IS IT A SUBORDINATE CU @VA07009 00386000
  417. BZ *+8 NO...BRANCH @VA07009 00387000
  418. L R7,RCUPRIME GET ADDRESS OF THE PRIME @VA07009 00388000
  419. TM RCUSTAT,RCUDISA CONTROL UNIT OFFLINE ? @VM08622 00389000
  420. BO CHTIO YES, SEE IF WE CAN IGNOR @VA09242 00390000
  421. TIORET EQU * @VA09242 00391000
  422. NI RCUSTAT,X'FF'-RCUBUSY C.U. NO-LONGER BUSY @VM08622 00392000
  423. CLI CSW+4,CUE C.U. END INTERRUPT ? @VM08622 00393000
  424. BE IOTRSTCU YES - RESTART C.U. AND CHANNEL @VM08622 00394000
  425. CLC CSW+4(2),=X'7000' CUE+SM+BUSY+0 CHAN STATUS @VA08741 00395000
  426. BE IOTRSTCU YES - RESTART C.U. AND CHANNEL @VA05140 00396000
  427. CLI CSW+4,SM+BUSY C.U. BUSY INTERRUPT @VM08622 00397000
  428. BE IOTGDISP YES - IGNORE THIS INTERRUPT @VM08622 00398000
  429. CLI CSW+4,BUSY DEVICE BUSY INTERRUPT ? @VA01940 00399000
  430. BE IOTGDISP YES - IGNORE THIS INTERRUPT @VA01940 00400000
  431. LTR R8,R8 RDEVBLOK FOUND @VM08622 00401000
  432. BNP TESTCUE NO--TEST UC AND CUE @VA05188 00402000
  433. NI RDEVSTA2,X'FF'-RDEVBUCH RESET DEVICE/CHANNEL @VM08622 00403000
  434. * BUSY 00404000
  435. TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE @VM08622 00405000
  436. BO TESTCUE YES--TEST UC AND CUE @VA05188 00406000
  437. SPACE 1 00407000
  438. L R10,RDEVAIOB CHECK FOR ACTIVE IOBLOK @VM08622 00408000
  439. LTR R10,R10 IS THE DEVICE ACTIVE @VM08622 00409000
  440. BZ IOTUNSOL NO - GO BUILD AN IOBLOK. @VM08622 00410000
  441. CLC INTTIO(2),IOBRADD @VA09325 00410100
  442. BNE IOTGDISP @VA09325 00410200
  443. CLI RDEVTYPC,CLASGRAF GRAF DEVICE? @VA09500 00411100
  444. BNE NO3270 NO @VA07390 00412000
  445. TM RDEVTYPE,TYP3277+TYP3284 3277 OR 3284? @VA09500 00412100
  446. BZ NO3270 NO - BRANCH @VA09500 00412110
  447. CLI CSW+4,CE+DE+UE THIS DEVICE COULD HAVE A BUSY @VA07390 00413000
  448. BE UE3270 CONDITION REQUIRING A WAIT FOR @VA07390 00414000
  449. CLI CSW+4,DE+UE DEVICE END BEFORE RESTARTING @VA07390 00415000
  450. BE UE3270 THIS CHANNEL PROGRAM @VA07390 00416000
  451. NO3270 EQU * @VA07390 00417000
  452. TM CSW+4,ATTN ATTENTION INTERRUPT? @VA05089 00418000
  453. BZ NODIALCK NO - SKIP DIAL CHECK @VA05089 00419000
  454. CLI RDEVTYPC,CLASGRAF IS IT A GRAPHICS DEVICE? @VA05089 00420000
  455. BNE NODIALCK NO -NO NEED TO CHECK FOR DIALING @VA05089 00421000
  456. L R15,ASYSVM SYSTEM VMBLOK @VA05089 00422000
  457. LCTL C1,C1,VMSEG-VMBLOK(R15) SYSTEM SEGMENT TABLE @VA05089 00423000
  458. L R5,=A(DMKDIAIR) GET REAL ADDRESS @VA05089 00424000
  459. LRA R2,0(0,R5) OF DIALIRA @VA05089 00425000
  460. BNZ NODIALCK PAGE NOT RESIDENT @VA05089 00426000
  461. C R2,IOBIRA IS ACTIVE IOB FOR DIALING? @VA05089 00427000
  462. BE IOTGDISP YES - IGNORE THE ATTENTION INT @VA05089 00428000
  463. NODIALCK EQU * @VA05089 00429000
  464. L R5,IOBRADD CHECK IOB STATUS FLAGS FOR ... @VM08622 00430000
  465. IC R5,IOBSPEC2 GET IOBUC & IOBSNSIO BITS @V407438 00431000
  466. N R5,=AL1(0,0,IOBSPLT+IOBERP,IOBUC+IOBSNSIO) @VM08622 00432000
  467. BZ CKSTATUS FURTHER CHECK @VA05406 00433000
  468. TM IOBFLAG,IOBERP ERP IN CONTROL ? @VA09274 00434500
  469. BO CKSENS YES, CHECK NEXT @VA09274 00435000
  470. TM IOBSPEC,IOBUNSL IF UNSOL-INT ? @VA09274 00435500
  471. BZ IOTCKIOB NO, -- IOB IN CONTROL IOS -- @VA09274 00436000
  472. CKSENS EQU * @VA09274 00436500
  473. TM IOBSPEC2,IOBSNSIO DOING A SENSE ? @VA09274 00437000
  474. BO IOTCKIOB YES, PROCESS INT @VA09274 00437500
  475. TM RDEVSTAT,RDEVBUSY IS DEV BUSY ? @VA09274 00438000
  476. BO IOTCKIOB YES, CHECK IOB @VA09274 00438500
  477. TM IOBFLAG,IOBERP ERP IN CONTROL ? @VA09274 00439000
  478. BZ IOTCKIOB NO; GO CHECK IOB STATUS @VA14003 00439600
  479. TM CSW+4,UC YES; IS THERE ANOTHER UNIT CHECK? @VA14003 00439700
  480. BO CNTNGNCY YES; GO CLEAR CONTINGENCY @VA14003 00439800
  481. B IOTGDISP NO; IGNORE THIS INTERRUPT @VA14003 00439900
  482. CKSTATUS EQU * @VA05406 00443000
  483. TM IOBCSW+4,CE HAD THE CHANNEL COMPLETED EARLIER@VA03817 00444000
  484. BO PART YES- SAVE ONLY THE STATUS @VA03817 00445000
  485. MVC IOBCSW(4),CSW SAVE THE FULL CSW IF NO CE OR IF @VA03817 00446000
  486. MVC IOBCSW+6(2),CSW+6 THE OLD STATUS WAS STACKED. @VA03817 00447000
  487. PART OC IOBCSW+4(2),CSW+4 COMBINE THE STATUS. @VA03817 00448000
  488. LA R5,(256*(CE+DE)) NICE CLEAN STATUS BITS. @VM08622 00449000
  489. CH R5,CSW+4 CLEAN CHANNEL + DEVICE END ? @VM08622 00450000
  490. BE TESTCYL YES - CHECK FOR MSS CYL FLT @V60B6B8 00451000
  491. TM CSW+5,PCI+IL @VA13092 00452100
  492. BZ IOTCKIOB NO - CONTINUE @VM08622 00453000
  493. CLI CSW+4,0 ANY UNIT STATUS PRESENT W/PCI @VM08622 00454000
  494. BNE IOTCKIOB YES - PRESENT ALL TOGETHER @VM08622 00455000
  495. TM CSW+5,X'FF'-(PCI+IL) ANY BAD CHANNEL STATUS @VA01616 00456000
  496. BNZ IOTCKIOB YES - CONTINUE @VM08622 00457000
  497. BAL R5,COPYIOB COPY IOBLOK ON PCI INTERRUPTS @VM08622 00458000
  498. B IOTGDISP WAIT FOR FINAL INTERRUPT @VM08622 00459000
  499. EJECT 00460000
  500. IOTUNSOL EQU * UNSOLICITED I/O INTERRUPT @VM08864 00461000
  501. TM CSW+4,ATTN IS IT AN ATTN INTERRUPT @V60B6B8 00462000
  502. BZ UNSOL1 NO, CAN'T BE MSS CYL FLT @V60B6B8 00463000
  503. CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE @V60B6B8 00464000
  504. BNE UNSOL1 @V60B6B8 00465000
  505. CLI RDEVTYPE,TYP3330 IS THIS A 3330 DEVICE @V60B6B8 00466000
  506. BNE UNSOL1 NO, CAN'T BE MSS CYL FLT @V60B6B8 00467000
  507. TM RDEVFTR,VIRTUAL+SYSVIRT IS THIS AN MSS VUA @V60B6B8 00468000
  508. BZ UNSOL1 NO, CAN'T BE MSS CYL FLT @V60B6B8 00469000
  509. * 00470000
  510. * THIS IS AN ATTN ON AN MSS VUA. SEE WHETHER THE 00471000
  511. * VIRTUAL MACHINE IS HANDLING CYLINDER 00472000
  512. * FAULTS. IF NOT, CALL DMKSSSI1 TO SCHEDULE 00473000
  513. * THE OPERATION WHICH CAUSED THE ORIGINAL 00474000
  514. * CYLINDER FAULT. 00475000
  515. * 00476000
  516. TM RDEVFLAG,RDEV333V VM HANDLE OWN CYLINDER FAULTS?@VA09299 00477000
  517. BO UNSOL1 YES, CALL STKIO TO REFLECT ATTN @V60B6B8 00478000
  518. CALLMSSA EQU * CALL DMKSSSI1 TO RESTART QUEUED @V60B6B8 00479000
  519. * I/O 00480000
  520. L R15,SSSI1ADD ADDR OF DMKSSSI1 @V60B6B8 00481000
  521. BALR R14,R15 RESTART ANY IOBLOKS, TURN OFF @V60B6B8 00482000
  522. * TIMER 00483000
  523. B IOTRSTDV GO RESTART THE DEVICE @V60B6B8 00484000
  524. UNSOL1 EQU * @V60B6B8 00485000
  525. TM RDEVSTAT,RDEVBUSY IS THERE A WAITING IOBLOK ? @VM08864 00486000
  526. BZ IOTUNSIN NO -- TRULY UNSOLICITED @VM08864 00487000
  527. CLI CSW+4,DE DEVICE END BY ITSELF ? @VM08864 00488000
  528. BE IOTRSTDV YES - RESTART THE DEVICE @VM08864 00489000
  529. NI RDEVSTAT,255-RDEVBUSY NO LONGER BUSY @VM08864 00490000
  530. NI CSW+4,255-DE REMOVE THE DEVICE END @VM08864 00491000
  531. IOTUNSIN EQU * BUILD IOBLOK FOR THIS INTERRUPT @VM08864 00492000
  532. TM RDEVSTA3,RDEVDIIP DIAL IN PROGRESS ? @VA09164 00492150
  533. BNO NODIAL NO @VA09164 00492300
  534. TM CSW+4,ATTN UNSOLICITED ATTENTION ? @VA09164 00492450
  535. BO IOTGDISP YES, IGNORE @VA09164 00492600
  536. NODIAL EQU * @VA09164 00492750
  537. BAL R5,IOTGTIOB BUILD AN IOBLOK @VM08622 00493000
  538. ST R10,RDEVAIOB SAVE ITS ADDR. IN RDEVBLOK @VM08622 00494000
  539. B IOTCKIOB PROCESS THIS INTERRUPT @VM08622 00495000
  540. SPACE 1 00496000
  541. TESTCUE TM CSW+4,UC UNIT CHECK? @VA05188 00497000
  542. BO CNTNGNCY YES--CLEAR CONTINGENCY @VA04771 00498000
  543. TM CSW+4,CUE CONTROL UNIT END? @VA04771 00499000
  544. BO IOTRSTCU YES--RESTART CONTROL UNIT @VA04771 00500000
  545. B IOTGDISP NO--IGNORE INTERRUPT @VA04771 00501000
  546. CHTIO EQU * @VA09242 00502000
  547. L R10,RDEVAIOB GET IOB @VA09242 00503000
  548. LTR R10,R10 IS THERE ONE ? @VA09242 00504000
  549. BNZ ACTIOB YES, SEE IF TIO @VA09738 00504300
  550. TM CSW+4,CUE CONTROL UNIT END ? @VA09738 00504600
  551. BO IOTRSTCU START CONTROL UNIT @VA09738 00504900
  552. B OFFLINE NO, FORGET IT @VA09738 00505200
  553. ACTIOB EQU * @VA09738 00505500
  554. TM IOBSPEC,IOBTIO TIO IOB @VA09242 00506000
  555. BO TIORET YES, FOR TIO CU CAN BE OFFLINE @VA09242 00507000
  556. OFFLINE TM CSW+4,UC UNIT CHECK? @VA05188 00508000
  557. BZ IOTGDISP NO--IGNORE THIS INTERRUPT @VA05188 00509000
  558. CNTNGNCY EQU * @VA04771 00510000
  559. LA R1,CLRSNS GET ADDR. OF SENSE CMD. @VM08622 00511000
  560. ST R1,CAW THIS WILL CLEAR CONTENTION @VM08622 00512000
  561. LH R1,INTTIO GET ADDR. OF INTERRUPTING UNIT @VM08622 00513000
  562. TIO 0(R1) IN CASE CHANNEL END WITH IT. @VM08622 00514000
  563. RSIO SIO 0(R1) NOW CLEAR CONTENTION CONNECTION @VA02863 00515000
  564. BC 2,RSIO KEEP TRYING ON CC=2 @VA02863 00516000
  565. BC 8+1,IOTGDISP EXIT WHEN STARTED OR NOT THERE @VA02863 00517000
  566. TM CSW+4,UC UNIT CHECK WITH SENSE INTERRUPT? @VA02863 00518000
  567. BO IOTGDISP EXIT IF UNIT CHECK PERSISTS @VA03689 00519000
  568. TM CSW+5,CDC+CCC+IFCC CHAN. ERRORS ? @VA03689 00520000
  569. BZ RSIO NO, LOOP @VA03689 00521000
  570. TM CSW,X'04' YES, IS LOGOUT PENDING ? @VA03689 00522000
  571. BO IOTGDISP YES, EXIT SO CHAN. CAN LOGOUT @VA03689 00523000
  572. B RSIO NO, LOOP TO REISSUE SIO @VA03689 00524000
  573. SPACE 00525000
  574. DMKIOTCT DC F'0' COUNT OF I/O INTERRUPTS @VA09587 00526000
  575. EJECT 00527000
  576. *. 00528000
  577. * 00529000
  578. * 5. IF THERE IS A UNIT CHECK INDICATED, CALL IOSENSE (J, BELOW) 00530000
  579. * TO SCHEDULE THE SENSE, THEN EXIT TO DMKDSPCH. IF ERP IS 00531000
  580. * IN CONTROL OF THE TASK, RETURN THE IOBLOK TO THE PROPER 00532000
  581. * ERROR ROUTINE 00533000
  582. * 6. IF THE DEVICE IS STILL ACTIVE (INTERRUPT IS PCI OR CE), 00534000
  583. * COPY AND STACK THE IOBLOK AND CALL THE RECURSIVE RE- 00535000
  584. * START ROUTINE IOSRSTRT (E, BELOW), THEN EXIT TO DMKDSPCH 00536000
  585. * 7. FOR GRAPHICS AND NON-DEDICATED TP LINES, CALL DMKCNSIN TO 00537000
  586. * HANDLE FURTHER PROCESSING 00538000
  587. * 8. IF THE I/O OPERATION HAD AND ERROR AN SENSE BYTES ARE NOW 00539000
  588. * AVAILABLE, RECORD THE ERROR FOR USER TASKS AND ATTEMPT TO 00540000
  589. * RECOVER FOR CP TASKS 00541000
  590. * 9. IF THE INTERRUPT IS DUE TO THE COMPLETION OF A SPLIT SEEK, 00542000
  591. * RECHAIN THE SEEK AND RESCHEDULE THE OPERATION; OTHERWISE 00543000
  592. * 10. CALL DMKSTKIO TO STACK THE IOBLOK FOR THE 2ND LEVEL 00544000
  593. * INTERRUPT HANDLER SPECIFIED VIA IOBIRA AND RESTART ANY 00545000
  594. * UNITS FREED UP BY THE INTERRUPT 00546000
  595. * 00547000
  596. *. 00548000
  597. SPACE 00549000
  598. IOTCKIOB DS 0H CHECK OUT THIS IOBLOK 00550000
  599. TM IOBSPEC2,IOBUC+IOBSNSIO INT. FROM SNS OR WAITING@V407438 00551000
  600. * TO DO THE SENSE OPERATION ? 00552000
  601. BNZ IOTNOSWS YES - PROCEED WITH NORMAL PATH 00553000
  602. L R5,IOBIOER CHECK FOR EXISTANCE OF IOERBLOK 00554000
  603. LTR R5,R5 IS THERE ONE 00555000
  604. BZ IOTNOSWS NO - 00556000
  605. USING IOERBLOK,R5 00557000
  606. TM IOERCSW+5,CDC+CCC+IFCC ARE THERE ANY CHANNEL ERROR'S 00558000
  607. BZ IOTRSTCU NO -- WAIT FOR ERP TO FINISH FIRST ERROR 00559000
  608. TM CSW+5,CDC+CCC+IFCC CHAN ERR WHILE CHAN ERR @VA02014 00560000
  609. BZ IOTRSTCU RECOVERY - NO FORGET IT @VA02014 00561000
  610. DROP R5 00562000
  611. SPACE 00563000
  612. IOTNOSWS EQU * STOP CHARGING SYSTEM, @V407593 00564000
  613. * GET OWNER OF INTERRUPT, AND 00565000
  614. CHARGE SWITCH,IOBUSER START CHARGING HIM @V407593 00566000
  615. TM IOBSPEC2,IOBSNSIO IS THIS A SENSE OPERATION? @V407438 00567000
  616. BZ IOTAVCSW NO - GO SAVE CSW 00568000
  617. L R1,IOBIOER GET IOERBLOK ADDRESS 00569000
  618. USING IOERBLOK,R1 00570000
  619. CLI RDEVTYPC,CLASDASD IS THIS A DASD DEVICE @VA14597 00570100
  620. BNE NORDOCK NO-GET OUT @VA14597 00570150
  621. SR R15,R15 CLEAR OUT REG 15 @VA14597 00570200
  622. ICM R15,B'0111',IOERCSW+1 FAILING CSW+8 @VA14597 00570250
  623. BZ NORDOCK NO IOERCSW-THEN GET OUT @VA14597 00570300
  624. S R15,F8 SUB 8 FAILING CCW @VA14597 00570350
  625. CLI 0(R15),X'FE' WRITE TO READ ONLY DISK @VA14597 00570400
  626. BNE NORDOCK NO-GET OUT @VA14597 00570450
  627. CLI IOERDATA,CMDREJ IS IT A COMMAND REJECT @VA14597 00570500
  628. BNE NORDOCK NO-GET OUT @VA14597 00570550
  629. MVI IOERDATA+1,X'02' TURN ON WRITE INHIBIT SW. @VA14597 00570600
  630. NORDOCK EQU * @VA14597 00570650
  631. LH R0,IOERLEN GET LENGTH OF SENSE 00571000
  632. SH R0,CSW+6 SUBTRACT RESIDUAL COUNT 00572000
  633. STH R0,IOERLEN SAVE NUMBER OF SENSE BYTES 00573000
  634. CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT A 3330 @VA11437 00574010
  635. BNE IOTCHKUC NO, CAN'T BE MSS VUA @V60B6B8 00575000
  636. TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A VUA @V60B6B8 00576000
  637. BZ IOTCHKUC NO, CAN'T BE MSS VUA @V60B6B8 00577000
  638. TM RDEVFLAG,RDEV333V VM HANDLE OWN CYLINDER FAULTS?@VA09299 00578000
  639. BO IOTCHKUC YES, REFLECT UC TO VIRT MACH @V60B6B8 00579000
  640. TESTUC EQU * TEST FOR IMBEDDED SEEK @V60B6B8 00580000
  641. * 00581000
  642. * IF WE REACH THIS POINT, THERE HAS BEEN A UNIT 00582000
  643. * CHECK ON A CHANNEL PROGRAM DIRECTED TO A VUA 00583000
  644. * WHICH IS NOT DEDICATED TO A USER AS A 3330V. 00584000
  645. * 00585000
  646. * TEST TO SEE IF THE SENSE DATA WAS A 'COMMAND 00586000
  647. * REJECT'. IF SO, THE STAGING ADAPTER IS FLAGGING 00587000
  648. * A CYLINDER FAULT ON AN IMBEDDED SEEK. 00588000
  649. * 00589000
  650. * RESET THE PREFIX SEEK CCW TO POINT TO THE FAILING 00590000
  651. * SEEK ARGUMENT AND REISSUE THE I/O, THUS CAUSING 00591000
  652. * THE STANDARD CYLINDER FAULT INDICATION, WHICH 00592000
  653. * WILL LATER BE TRAPPED BY THE TEST AT LABEL 'PART' 00593000
  654. * 00594000
  655. TM IOBCSW+4,UC WAS FIRST CSW UC @V60B6B8 00595000
  656. BZ IOTCHKPR NO, CHECK MSS PREFIX @VMI2013 00596000
  657. TM IOERDATA,CMDREJ WAS SENSE DATA 'CMD REJ' @V60B6B8 00597000
  658. BZ IOTCHKPR NO, CAN'T BE CYL FLT @V60B6B8 00598000
  659. CLI IOERDATA+7,X'0F' MSS UNIQUE ERROR @VMI2023 00599000
  660. BNE IOTCHKPR NO, NOT CYL FLT @VMI2023 00600000
  661. CLI IOERDATA+18,X'03' EMBEDDED SEEK @VMI2023 00601000
  662. BNE IOTCHKPR NO, VALID UNIT CHECK @VMI2023 00602000
  663. L R15,IOERCSW ADDR OF FAILING CCW @VMI2001 00603000
  664. RESETPRE EQU * @V60B6B8 00604000
  665. LA R0,CCWL TO DECREMENT @V60B6B8 00605000
  666. SR R15,R0 POINT TO FAILING CCW @V60B6B8 00606000
  667. L R3,IOBCAW FIRST CCW IN THE CHAIN @V60B6B8 00607000
  668. MVC 1(SEEKPTL,R3),1(R15) SET UP PTR TO SEEK ARGUMENT@V60B6B8 00608000
  669. STCM R15,7,TICOFF(R3) SET UP PREFIX TIC CCW @V60B6B8 00609000
  670. B IOTSTACK GO RESTACK THE IOBLOK @VMI2001 00610000
  671. IOTCHKPR EQU * UC ON 3330V CHAN PROG @V60B6B8 00611000
  672. * 00612000
  673. * TEST TO SEE IF THE ERROR WAS DETECTED ON THE PREFIX 00613000
  674. * CHANNEL PROGRAM. RESET IOBCSW ADDR IF SO. 00614000
  675. * 00615000
  676. L R14,IOBCAW FIRST CCW (PREFIX SEEK) @V60B6B8 00616000
  677. L R15,IOERCSW ADDRESS OF FAILING CSW +8 @VA11460 00617100
  678. CR R15,R14 SEE IF UC IN THE PREFIX @VA11460 00617200
  679. BL IOTCHKUC NO, MUST BE USER CCW @VA11460 00617300
  680. LA R14,PREL(R14) FIRST CCW PAST THE PREFIX @VA11460 00617400
  681. CR R15,R14 SEE IF UC IN THE PREFIX @V60B6B8 00619000
  682. BH IOTCHKUC NO, UC IN USER CCW @VMI2001 00620000
  683. LA R14,CCWL(R14) 8 BYTES PAST FIRST USER CCW @V60B6B8 00621000
  684. STCM R14,7,IOERCSW+1 ERROR IN USER PROGRAM @VMI2001 00622000
  685. B IOTCHKUC AND SET UP THE BLOCK @V60B6B8 00623000
  686. SPACE 00624000
  687. IOTAVCSW DS 0H SAVE CSW IN IOBLOK 00625000
  688. TM IOBCSW+5,CDC+CCC+IFCC ANY CHANNEL ERRORS @VA06201 00626000
  689. BZ PARTCSW1 NO CONTINUE IN LINE CODE @VA06201 00627000
  690. MVC IOBCSW(8),CSW SAVE ENTIRE CSW @VA06201 00628000
  691. B PARTCSW2 BRANCH AROUND FOLLOWING MOVES @VA06201 00629000
  692. PARTCSW1 TM IOBCSW+4,CE HAD THE CHANNEL COMPLETED EARLIER@VA06201 00630000
  693. BO PARTCSW YES- SAVE ONLY THE STATUS @VA03817 00631000
  694. MVC IOBCSW(4),CSW SAVE THE FULL CSW IF NO CE OR IF @VA03817 00632000
  695. MVC IOBCSW+6(2),CSW+6 THE OLD STATUS WAS STACKED. @VA03817 00633000
  696. PARTCSW OC IOBCSW+4(2),CSW+4 COMBINE THE STATUS. @VA03817 00634000
  697. TM IOBCSW+5,PCI PCI? @V408246 00635000
  698. BZ CHKUC NO, BYPASS STANDALONE CHECK @V408246 00636000
  699. CLI IOBCSW+4,0 ANY UNIT STATUS ? @V408246 00637000
  700. BNE CHKUC YES - TEST FOR UNIT CHECK @V408246 00638000
  701. TM IOBCSW+5,255-(PCI+IL) ANYTHING BAD IN CHAN @V408246 00639000
  702. * STATUS 00640000
  703. BZ IOTGDISP IF NOT IGNORE INTERUPT @V408246 00641000
  704. CHKUC DS 0H @V408246 00642000
  705. PARTCSW2 TM IOBSPEC2,IOBUC ERROR TASK WAITING FOR DE? @V407438 00643000
  706. BO DOSENSE YES -- GO DO SENSE NOW 00644000
  707. IOTCHKUC EQU * @VA01599 00645000
  708. TM CSW+5,CDC+CCC+IFCC ANY CHANNEL ERRORS ? 00646000
  709. BNZ IOTIOERR YES, DON'T BUILD IOERBLOK @VA01174 00647000
  710. TM CSW+4,UC WAS THERE A UNIT CHECK ? 00648000
  711. BZ IOTCKPRG NO - TEST FOR OTHER ERRORS 00649000
  712. SPACE 00650000
  713. DOSENSE TM CSW+5,CDC+CCC+IFCC ANY CHANNEL ERRORS ? 00651000
  714. BNZ IOTIOERR YES, DON'T BUILD IOERBLOK @VA01174 00652000
  715. TM IOBFLAG,IOBSPLT ERROR ON D.E. DOING A SPLIT SSEK 00653000
  716. BO IOTREQUE YES - RECHAIN CCW'S AND RE-ISSUE SIO 00654000
  717. BAL R5,IOTENSE OK TO BUILD IOERBLOK IF NO CHAN. ERRORS 00655000
  718. B IOTGDISP IF SENSE STARTED OK, LEAVE NOW -- 00656000
  719. B IOTIOERR IF SENSE DID NOT START, GO RECORD ERROR 00657000
  720. SPACE 00658000
  721. IOTCKPRG TM CSW+5,PRGC+PRTC+CHC PROGRAM, PROTECTION OR CHAINING ERR 00659000
  722. BZ IOTCKERP NO ... 00660000
  723. BAL R5,IOTENSE GO BUILD AN IOERBLOK 00661000
  724. B IOTIOERR RECORD AND STACK IOBLOK @VA00915 00662000
  725. SPACE 00663000
  726. IOTCKERP EQU * @VA01762 00664000
  727. NI IOBSPEC2,X'FF'-(IOBUC+IOBSNSIO) CLEAR ERR. FLAGS@V407438 00665000
  728. TM IOBFLAG,IOBERP IS ERP IN CONTROL @VA01762 00666000
  729. BZ IOTCKBSY NO, SEE IF DEVICE IS STILL BUSY @VA13728 00667100
  730. CLI IOBCSW+4,CE CE ALONE ON CH PGM RESTART ? @VA13728 00667200
  731. BE IOTRSTCU WAIT FOR I/O BEFORE RETURN TO @VA13728 00667300
  732. B IOTCPERR RETURN CONTROL TO ERP NOW @VA13728 00667400
  733. SPACE 00668000
  734. IOTCKBSY TM IOBCSW+4,CE DEVICE STILL BUSY ? 00669000
  735. BZ IOTCECUE BRANCH IF NO 00670000
  736. TM IOBCSW+4,DE+ATTN WITHOUT DEVICE END OR ATTENTION ? 00671000
  737. BNZ IOTCECUE NO -- DEVICE IS FREE 00672000
  738. TM IOBFLAG,IOBPAG+IOBCP IS THIS PAGING IOBLOK? @VA05614 00673000
  739. BO IOTSTACK LET HIM TAKE IT FROM HERE @VA05614 00674000
  740. BAL R5,COPYIOB IF CHANNEL END ONLY AND DEVICE IS BUSY, 00675000
  741. B IOTRSTCU GIVE USER THE INTERRUPT AND RESTART CU 00676000
  742. SPACE 00677000
  743. IOTCECUE DS 0H HERE IF DEVICE IS NOT BUSY 00678000
  744. TM IOBCSW+4,UC WAS THERE A UNIT CHECK @VA07109 00679000
  745. BNZ IOTIOERR YES, CALL THE ERROR ROUTINE 00680000
  746. TM IOBCSW+5,255-(PCI+IL) ANY BAD CHANNEL STATUS @VA07109 00681000
  747. BZ IOTCHKSS NO -- TEST FOR SPLIT SEEK 00682000
  748. SPACE 00683000
  749. IOTIOERR EQU * @VA01762 00684000
  750. NI IOBSPEC2,X'FF'-(IOBUC+IOBSNSIO) CLEAR ERR. FLAGS@V407438 00685000
  751. TM IOBSPEC,IOBTIO WAS IOBLOK MARKED FOR 'TIO' ONLY @VA01762 00686000
  752. BO IOTSTACK YES - BYPASS ERP PROCESSING 00687000
  753. TM IOBFLAG,IOBCP+IOBHVC IS IT A CP GENERATED I/O 00688000
  754. BNZ IOTCPERR YES--GO TRY TO RESTART. 00689000
  755. BAL R5,IOTRECER GO, RECORD USER ERROR . 00690000
  756. B IOTRSTDV AND CONTINUE PROCESSING 00691000
  757. SPACE 00692000
  758. IOTCPERR DS 0H HERE FOR ERRORS IN CP GENERATED I/O 00693000
  759. CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS ? @V2D3931 00694000
  760. BNE IOTBSC NO, CHECK OTHER CLASES @V2D3931 00695000
  761. TM RDEVSTAT,RDEVDED IS THIS DEVICE DEDICATED @V2D3931 00696000
  762. BO IOTBSC YES, BYPASS CHECK FOR LINE @V2D3931 00697000
  763. TM IOBFLAG,IOBHVC IS THIS A DIAGNOSE REQUEST @V2D3931 00698000
  764. BO IOTBSC YES, BYPASS BISYNC LINE FTN. @V2D3931 00699000
  765. TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE ? @V2D3931 00700000
  766. BO IOTSERP YES, GO TO ERP SUPPORT @V2D3931 00701000
  767. IOTBSC EQU * @V2D3931 00702000
  768. TM RDEVTYPC,CLASURI+CLASURO+CLASDASD+CLASTAPE @V200820 00703000
  769. BZ IOTSTACK NO ERP - STACK THE IOBLOK @V200820 00704000
  770. TM RDEVTYPC,CLASURI+CLASURO @VA01599 00705000
  771. BZ IOTSERP NO, GO TO EREP SUPPORT @VA01599 00706000
  772. TM IOBFLAG,IOBHVC IS THIS A DIAGNOSE REQUEST @VA01599 00707000
  773. BO IOTSTACK YES, GO STACK THE IOBLOK @VA01599 00708000
  774. IOTSERP EQU * @VA01599 00709000
  775. TM IOBSPEC2,IOBRETRY HAVE ALREADY STACKED CPEX @VA08119 00710000
  776. BZ IOTER ERROR RECOVERY NOT IN PROCESS @VA12941 00711000
  777. TM RDEVSTAT,RDEVNRDY INTERVENTION REQUIRED PENDING @VA12941 00711100
  778. BZ IOTRSTCU NO, IGNORE THIS INTERRUPT @VA12941 00711200
  779. TM CSW+4,DE+ATTN NOT-READY TO READY SEQUENCE @VA12941 00711300
  780. BZ IOTRSTCU NO, IGNORE THIS INTERRUPT @VA12941 00711400
  781. IOTER OI IOBSPEC2,IOBRETRY CONTINUE WITH ERROR RECOVERY @VA12941 00711500
  782. OI IOBFLAG,IOBERP INDICATE ERP IN CONTROL @V408246 00713000
  783. LA R5,IOTRSTCU SET UP RETURN FROM THE CPEXBLOK ROUTINE 00714000
  784. * TO DEQUE THE NEXT IOBLOK AND LET THE 00715000
  785. * SYSTEM GO TO WORK. 00716000
  786. L R2,=A(DMKIOSER) @VA09587 00717000
  787. B IOTGCPEX BUILD A CP EXECUTION BLOCK @VA09587 00718000
  788. * THE NEXT INSTRUCTION 00719000
  789. EJECT 00720000
  790. * 00721000
  791. * WHEN THE FOLLOWING ROUTINE IS ENTERED, WE HAVE 00722000
  792. * RECEIVED A CHANNEL END - DEVICE END 00723000
  793. * 00724000
  794. * TEST TO SEE IF THE REAL DEVICE IS AN MSS VUA 00725000
  795. * IF SO, SEE IF THE CE - DE WAS RECEIVED 00726000
  796. * ON THE NOP CCW. IF IT WAS, TEST TO SEE 00727000
  797. * IF THE CALLING VIRTUAL MACHINE WANTS TO 00728000
  798. * PROCESS CYLINDER FAULTS. IF SO, PASS THE 00729000
  799. * INTERRUPT TO HIM. OTHERWISE, CALL DMKSSS 00730000
  800. * TO QUEUE THIS IOBLOK AND WAIT FOR AN ATTN 00731000
  801. * 00732000
  802. TESTCYL EQU * @V60B6B8 00733000
  803. CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT A 3330 @VA11437 00734010
  804. BNE IOTSTACK NO @V60B6B8 00735000
  805. TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A VUA @V60B6B8 00736000
  806. BZ IOTSTACK NO @V60B6B8 00737000
  807. L R15,IOBCSW ADDR OF ENDING CCW + 8 @V60B6B8 00738000
  808. L R14,IOBCAW ADDR OF THE PREFIX FOR VUA @V60B6B8 00739000
  809. LA R14,PREL(R14) ADDR OF FIRST BYTE PAST NOP @V60B6B8 00740000
  810. LA R15,0(R15) CLEAR HI-ORDER BYTE @V60B6B8 00741000
  811. CR R14,R15 DID WE END ON THE NOP @V60B6B8 00742000
  812. BNE IOTSTACK NOPE, NOT CYL FLT @V60B6B8 00743000
  813. TM RDEVFLAG,RDEV333V VM HANDLE OWN CYLINDER FAULTS?@VA09299 00744000
  814. BO IOTSTACK YES, REFLECT INTERRUPT TO USER @V60B6B8 00745000
  815. L R15,SSSI2ADD ADDR OF DMKSSSI2 ENTRY POINT @V60B6B8 00746000
  816. BALR R14,R15 SAVE THE IOBLOK WITH IOBFLT SET @V60B6B8 00747000
  817. SR R15,R15 CLEAR FOR NEXT INSTR. @VMI2013 00748000
  818. ST R15,RDEVAIOB NO ACTIVE I/O @VMI2013 00749000
  819. NI RDEVSTAT,X'FF'-RDEVBUSY TURN OFF BUSY BIT @VA09589 00749100
  820. B IOTTEXIT AND RETURN @V60B6B8 00750000
  821. SPACE 00751000
  822. IOTCHKSS TM IOBFLAG,IOBSPLT IS THIS A SPLIT SEEK ? 00752000
  823. BO IOTREQUE YES -- GO RESTART THE OPERATION 00753000
  824. SPACE 00754000
  825. IOTSTACK DS 0H HERE TO 00755000
  826. CALL DMKSTKIO STACK THE IOBLOK 00756000
  827. * STOP CHARGING FOR INTERRUPT AND 00757000
  828. * START CHARGING RESTARTED USER 00758000
  829. CHARGE SWITCH,ASYSVM @V407593 00759000
  830. B IOTRSTDV @VA09587 00760000
  831. SPACE 00761000
  832. IOTTART EQU * ISSUE SIO @VA09587 00762000
  833. GOTO DMKIOSST @VA09587 00763000
  834. IOTRSTDV EQU * RESTART DEVICE-CU-CH @VA09587 00764000
  835. GOTO DMKIOSRS @VA09587 00765000
  836. IOTREQUE EQU * REQUE REQUEST @VA09587 00766000
  837. GOTO DMKIOSRQ @VA09587 00767000
  838. IOTRSTCU EQU * RESTART CU @VA09587 00768000
  839. GOTO DMKIOSRU @VA09587 00769000
  840. IOTRSTCH EQU * RESTART CH @VA09587 00770000
  841. GOTO DMKIOSRH @VA09587 00771000
  842. CALLERP EQU * PERFORM ERROR RECOVERY @VA09587 00772000
  843. GOTO DMKIOSRY @VA09587 00773000
  844. EJECT 00774000
  845. IOTTEXIT LTR R13,R13 WAS ENTRY TO IOS FROM A "CALL" 00775000
  846. BNZ IOTRETRN YES, RETURN TO CALLER 00776000
  847. SLR R3,R3 SET BRANCH INDEX TO ZERO @V407438 00777000
  848. CL R6,RCHRSTQ DID WE RESTART DIFF. CHAN ON INT?@V407438 00778000
  849. BE CHKCU NOPE, GO CHECK CTL UNIT @V407438 00779000
  850. L R4,RCHRSTQ GET INTERRUPTING CHANNEL ADDR @V407438 00780000
  851. ST R6,RCHRSTQ RESTARTED CHANNEL IS DONE NOW @V407438 00781000
  852. LR R6,R4 SET TO INT. CHAN FOR 2ND RESTART @V407438 00782000
  853. LA R3,4(R3) SET FOR CHANNEL CHANGE ONLY @V407438 00783000
  854. CHKCU LTR R7,R7 DOES CU EXIST (COULD BE CH AVAIL)@V407438 00784000
  855. BNP BRESTART(R3) NOPE, GO TO DISP OR CH RESTART @V407438 00785000
  856. CL R7,RCURSTQ DID WE RESTART DIFF. CU ON INT? @V407438 00786000
  857. BE BRESTART(R3) NOPE, GO TO DISP OR CH RESTART @V407438 00787000
  858. L R5,RCURSTQ GET INTERRUPTING CTL UNIT ADDR @V407438 00788000
  859. ST R7,RCURSTQ RESTARTED CTL UNIT IS DONE NOW @V407438 00789000
  860. LR R7,R5 SET TO INT. CU FOR 2ND RESTART @V407438 00790000
  861. LA R3,8(R3) SET FOR CTL UNIT CHANGE @V407438 00791000
  862. C R3,=F'12' @V407438 00792000
  863. BNE BRESTART(R3) @V407438 00793000
  864. B *+4(R3) GO TO EXIT OR RESTART ROUTINE @V407438 00794000
  865. SPACE 00795000
  866. BRESTART B IOTGDISP EXIT FORTHWITH @V407438 00796000
  867. B IOTRSTCH CH CHANGE ONLY, RESTART INT CH @V407438 00797000
  868. B IOTRSTCU CU CHANGE ONLY, RESTART INT CU @V407438 00798000
  869. B IOTRSTCU CH & CU CHNGE, RESTRT FROM INT CU@V407438 00799000
  870. EJECT 00800000
  871. SPACE 00801000
  872. * STOP CHARGING FOR RESTART, AND 00802000
  873. * RE-ESTABLISH RUNUSER FOR DISPATCH 00803000
  874. * START CHARGING HIM 00804000
  875. IOTGDISP CHARGE SWITCH,LASTUSER @V407511 00805000
  876. AIF (NOT &AP).LOKSY8 00806000
  877. * IF MPSYSLOCK CAN BE OBTAINED, 00807000
  878. * THEN GOTO DSPCH, OTHERWISE, 00808000
  879. * GOTO DSPRU 00809000
  880. TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 00810000
  881. BZ GOTOCH NO, GOTO DSPCH @V407511 00811000
  882. L R15,=A(DMKLOKSY+2) GET ADDR OF SYSTEM LOCK @V407511 00812000
  883. CLC LPUADDR,0(R15) DO I ALREADY HAVE THE SYSTEM LOCK@V407511 00813000
  884. BE GOTOCH YES, GOTO DSPCH @V407511 00814000
  885. LOCK OBTAIN,TYPE=SYS,SPIN=NO @V407593 00815000
  886. BNE GOTODSPA COULDNT GET LOCK - GOTO DSPA @V4M0173 00816000
  887. .LOKSY8 ANOP 00817000
  888. GOTOCH GOTO DMKDSPCH @V407593 00818000
  889. GOTODSPA GOTO DMKDSPA GO TRY TO REDISPATCH RUNUSER @V4M0173 00819000
  890. IOTRETRN DS 0H HERE TO EXIT FROM RESTART 00820000
  891. * STOP CHARGING RESTARTED USER 00821000
  892. * GET CALLERS R11 AND 00822000
  893. * START CHARGING HIM 00823000
  894. CHARGE SWITCH,SAVER11 @V407593 00824000
  895. EXIT RETURN TO CALLER 00825000
  896. EJECT 00826000
  897. SPACE 00827000
  898. PTHSAVE DC 2F'0' A(CHANNEL) & A(CTL UNIT) ON ENTRY@V407438 00828000
  899. EJECT 00829000
  900. *. 00830000
  901. * 00831000
  902. * H. OPERATION OF IOTGTIOB - 00832000
  903. * 1. IOTGTIOB IS CALLED WHEN AN UNSOLICITED INTERRUPT MUST BE 00833000
  904. * STACKED FOR FURTHER PROCESSING 00834000
  905. * 2. AN IOBLOK IS OBTAINED FROM FREE STORAGE 00835000
  906. * 3. AN APPROPRIATE IRA IS SELECTED FOR THE IOBLOK, BASED ON 00836000
  907. * THE DEVICE TYPE OF THE INTERRUPTING UNIT 00837000
  908. * 4. IF THE DEVICE IS DEDICATED, FILL IN THE VIRTUAL ADDRESS 00838000
  909. * AND THE USER 00839000
  910. * 5. EXIT TO CALLER 00840000
  911. * 00841000
  912. *. 00842000
  913. SPACE 00843000
  914. IOTGTIOB DS 0H 00844000
  915. LM R2,R3,CSW SAVE CSW @VA0706 00845000
  916. LH R4,INTTIO SAVE INTERRUPT DEVICE ADDR. @VA0706 00846000
  917. LA R0,IOBSIZE SIZE OF AN IOBLOK 00847000
  918. CALL DMKFREE GET ONE 00848000
  919. LR R10,R1 THE USUAL BASE 00849000
  920. XC IOBLOK(IOBSIZE*8),IOBLOK ZERO IT OUT 00850000
  921. ST R10,IOBLINK IOBLOK POINTS TO ITSELF (= ORIGINAL COPY) 00851000
  922. STH R4,IOBRADD ADDR INTERRUPTED DEV. INTO IOBLOK @VA0706 00852000
  923. STM R2,R3,CSW RESTORE CSW @VA0706 00853000
  924. L R1,ASYSVM GET ADDRESS OF SYSTEM VMBLOK 00854000
  925. ST R1,IOBUSER ASSUME ACCOUNTING FOR SYSTEM. 00855000
  926. L R0,ASYSVM GET SYSTEM VMBLOK PTR. @VA04573 00856000
  927. LTR R8,R8 IS THERE A RDEVBLOK ? 00857000
  928. BNP IOTGTIGN NO -- 00858000
  929. CLI RDEVTYPC,CLASDASD DASD DEVICE ? @VA04680 00859000
  930. BE IOTGTCON YES..LET IT GO... @VA04680 00860000
  931. TM APSTAT1,CPINITD IS CPI FINISHED @VA07842 00861000
  932. BO IOTGTCON YES, LET IT GO @VA07842 00862000
  933. L R14,=A(DMKRIOCN) CONSOLE TABLE POINTER @VA05684 00863000
  934. CLC INTTIO(2),2(R14) IS IT PRIMARY CONSOLE? @VA05684 00864000
  935. BE IOTGTCON YES, PROCESS INTERRUPT @VA05684 00865000
  936. LA R14,4(R14) POINT TO COUNT OF ALT. CONSOLES @V60BCAA 00866000
  937. L R1,0(R14) ACCESS NUMBER OF ALT. CONSOLES @V60BCAA 00867000
  938. ALTLOOP LTR R1,R1 ANY MORE ALTERNATE CONSOLES? @V60BCAA 00868000
  939. BZ IOTGTIGN NO, IGNORE INTERRUPT @V60BCAA 00869000
  940. BCTR R1,0 DECREMENT COUNT FOR NEXT TIME @V60BCAA 00870000
  941. * THROUGH LOOP 00871000
  942. LA R14,4(R14) POINT TO NEXT ALT. CONSOLE DATA @V60BCAA 00872000
  943. CLC INTTIO(2),2(R14) IS THIS AN ALTERNATE CONSOLE? @V60BCAA 00873000
  944. BE IOTGTCON YES, PROCESS INTERRUPT @V60BCAA 00874000
  945. B ALTLOOP GO SEE IF IT IS ANOTHER ALT CONS @V60BCAA 00875000
  946. IOTGTCON EQU * @VA04680 00876000
  947. TM RDEVSTAT,RDEVDED IS THE DEVICE DEDICATED ?? 00877000
  948. BO IOTGTDED YES -- 00878000
  949. OI IOBFLAG,IOBCP FLAG AS CP IO 00879000
  950. L R1,=A(DMKCNSIN) CLASTERM INTERRUPT HANDLER @V200820 00880000
  951. CLI RDEVTYPC,CLASTERM ? @V200820 00881000
  952. BNE *+20 NO, BYPASS TERMINAL SUPPORT @V2D3931 00882000
  953. CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE - 3270 @V2D3931 00883000
  954. BNE IOTGTUSR NO, SET UP IOBUSER & IOBIRA @V2D3931 00884000
  955. L R1,=A(DMKRGAIN) 3270 REMOTE INTERRUPT HANDLER @V305798 00885000
  956. B IOTGTUSR SET UP IOBUSER & IOBIRA @V2D3931 00886000
  957. L R1,=A(DMKRSPEX) SPOOL INTERRUPT HANDLER @V200820 00887000
  958. TM RDEVTYPC,CLASURI+CLASURO SPOOL DEVICE ? @V200820 00888000
  959. BNZ IOTGTUSR YES - SETUP IOBIRA@V200820 00889000
  960. L R1,=A(DMKDSBRD) CLASDASD ASYNCHRONOUS I/O @VA08187 00890000
  961. CLI RDEVTYPC,CLASDASD IS THIS DIRECT ACCESS ? @V200820 00891000
  962. BE IOTGTIRA YES, SET IOBUSER @VA01672 00892000
  963. L R1,=A(DMKGRFIN) CLASGRAF INTERRUPT HANDLER @V200820 00893000
  964. CLI RDEVTYPC,CLASGRAF GRAPHIC DEVICE ? @V200820 00894000
  965. BE IOTGTCHK YES - CHECK FOR PROCESSOR @V200820 00895000
  966. L R1,=A(DMKRNHIN) CLASSPEC INTERRUPT HANDLER @V200820 00896000
  967. CLI RDEVTYPC,CLASSPEC SPECIAL DEVICE ? @V200820 00897000
  968. BE IOTGTCHK YES - CHECK FOR PROCESSOR @V200820 00898000
  969. * B IOTGTIGN IGNORE THE INTERRUPT 00899000
  970. EJECT 00900000
  971. IOTGTIGN EQU * IGNORE THE INTERRUPT @V200820 00901000
  972. LA R1,IOTIGNOR SET IOBIRA = A(IOSIGNOR) @V200820 00902000
  973. B IOTGTIRA @V200820 00903000
  974. IOTGTCHK EQU * CHECK FOR 'SOMETIMES' MODULES @V200820 00904000
  975. LTR R1,R1 DOES THE INTERRUPT HANDLER EXIST @V200820 00905000
  976. BZ IOTGTIGN NO -- IGNORE THE INTERRUPT @V200820 00906000
  977. B IOTGTUSR @V200820 00907000
  978. IOTGTDED EQU * SET FOR DEDICATED DEVICE @V200820 00908000
  979. L R1,=A(DMKVIOIN) VIRTUAL I/O INTRPT HANDLER @VA07486 00909000
  980. LH R0,RDEVATT VIRTUAL DEVICE ADDRESS @V200820 00910000
  981. STH R0,IOBVADD ...INTO IOBLOK FOR DMKVIO @V200820 00911000
  982. IOTGTUSR EQU * SET IOBUSER = RDEVUSER @V200820 00912000
  983. L R0,RDEVUSER @V200820 00913000
  984. TM RDEVTYPC,CLASURO IS IT A 3800 PRINTER ? @V60B9BA 00914000
  985. BZ IOTGTIRA XFER IF NOT @V60B9BA 00915000
  986. CLI RDEVTYPE,TYP3800 IS IT REALLY A 3800 ? @V60B9BA 00916000
  987. BNE IOTGTIRA XFER IF NOT @V60B9BA 00917000
  988. TM RDEVSTAT,RDEVDED ATTACHED TO A USER? @V60B9BA 00918000
  989. BO IOTGTIRA XFER, RDEVUSER IS OK @V60B9BA 00919000
  990. L R0,ASYSVM BETTER LOAD SYSTEM VMBLOK @V60B9BA 00920000
  991. IOTGTIRA EQU * SET IOBUSER, IOBIRA FIELDS @V200820 00921000
  992. ST R0,IOBUSER @V200820 00922000
  993. ST R1,IOBIRA @V200820 00923000
  994. OI IOBSPEC,IOBUNSL FLAG AS UNSOLICITED INTRUPT @V200820 00924000
  995. BR R5 AND EXIT TO CALLER 00925000
  996. EJECT 00926000
  997. COPYIOB EQU * HERE TO COPY IOBLOKS FOR NON-DEVICE-END INTERRUPTS 00927000
  998. LA R0,IOBSIZE GET IOBLOK SIZE 00928000
  999. CALL DMKFREE GET CORE 00929000
  1000. CL R10,RDEVAIOB STILL ACTIVE OVER THE CALL ? @VA03817 00930000
  1001. BNE FRETCOPY NO- SYSTEM EXTENDED, INT CAME IN @VA03817 00931000
  1002. TM IOBCSW+4,CE IF CHANNEL END WITH... @VA03817 00932000
  1003. BZ COPYBLOK DEVICE END OR ATTENTION... @VA03817 00933000
  1004. TM IOBCSW+4,DE+ATTN THAN DON'T COPY THE IOBLOK, @VA03817 00934000
  1005. BZ COPYBLOK ENDING STATUS WAS RECEIVED..@VA03817*00935000
  1006. WHILE THE SYSTEM WAS EXTENDING FREE STORAGE. 00936000
  1007. FRETCOPY CALL DMKFRET FRET BLOCK, ENDING STATUS CAME IN@VA03817 00937000
  1008. BR R5 THEN RETURN TO THE CALLER @VA03817 00938000
  1009. SPACE 1 00939000
  1010. COPYBLOK EQU * HERE IF ENDING STATUS NOT RECEIVED FOR THE DEVICE 00940000
  1011. MVC 0(IOBSIZE*8,R1),0(R10) COPY THE BLOK 00941000
  1012. * NOTE: "IOBLINK" IN COPIED IOBLOK DOES 00942000
  1013. * NOT "POINT TO ITSELF" - INDICATING THAT 00943000
  1014. * THIS IS "NOT THE FINAL INTERRUPT". 00944000
  1015. LR R2,R10 SAVE THE ADDRESS OF THE OLD BLOK @VA04182 00945000
  1016. LR R10,R1 GET ADDRESS OF NEW BLOK 00946000
  1017. SLR R1,R1 CLEAR IOERBLOK POINTER @VA01225 00947000
  1018. ST R1,IOBIOER . . .TO AVOID DOUBLE FRET @VA01225 00948000
  1019. CALL DMKSTKIO STACK THE IOBLOK 00949000
  1020. LR R10,R2 RESTORE ADDRESS OF OLD BLOK @VA04182 00950000
  1021. XC IOBCSW(8),IOBCSW ZERO OLD CSW FOR NEXT INT. @VA03817 00951000
  1022. BR R5 AND RETURN TO CALLER 00952000
  1023. EJECT 00953000
  1024. SPACE 00954000
  1025. IOTIGNOR DS 0H 00955000
  1026. LA R0,IOBSIZE SIZE OF IOBLOK 00956000
  1027. IOTIGN01 LR R1,R10 AND ITS ADDRESS 00957000
  1028. L R2,IOBIOER IOERBLOK ADDRESS IF THERE IS ONE @V200820 00958000
  1029. CALL DMKFRET RETURN IOBLOK TO FREE STORAGE 00959000
  1030. L R12,ADSPCH A(DMKDSPCH) FOR 'GOTO'-STYLE EXIT@V200820 00960000
  1031. LTR R1,R2 WAS THERE AN IOERBLOK ? @V200820 00961000
  1032. BCR 8,R12 NO -- GOTO DMKDSPCH @V200820 00962000
  1033. LA R0,IOERSIZE IOERBLOK SIZE IN DOUBLE-WORDS @V200820 00963000
  1034. AH R0,IOEREXT-IOERBLOK(,R1) ...PLUS EXTENSION @V200820 00964000
  1035. CALL DMKFRET RELEASE THE IOERBLOK @V200820 00965000
  1036. BR R12 GOTO DMKDSPCH @V200820 00966000
  1037. SPACE 00967000
  1038. EJECT 00968000
  1039. * 00969000
  1040. * QUEUE AN IOBLOK FIRST ON REAL DEVICE QUEUE 00970000
  1041. * 00971000
  1042. UE3270 EQU * @VA07390 00972000
  1043. SLR R1,R1 CLEAR FOR INSERT @VA07390 00973000
  1044. IC R1,RDEVQCNT ADD 1 TO COUNT OF IOBLOKS @VA07390 00974000
  1045. LA R1,1(R1) QUEUED OFF THIS DEVICE BLOCK @VA07390 00975000
  1046. STC R1,RDEVQCNT @VA07390 00976000
  1047. LR R2,R8 SAVE BACK CHAIN POINTER @VA07390 00977000
  1048. L R1,RDEVFIOB POINT TO 1ST IOBLOK @VA07390 00978000
  1049. STM R1,R2,IOBFPNT STORE FWD & BWD CHAIN POINTERS @VA07390 00979000
  1050. ST R10,RDEVFIOB INSERT NEW 1ST IOBLOK @VA07390 00980000
  1051. ST R10,IOBBPNT-IOBLOK(R1) BACK CHAIN POINTER @VA07390 00981000
  1052. SLR R10,R10 @VA07390 00982000
  1053. ST R10,RDEVAIOB CLEAR ACTIVE IOBLOK @VA07390 00983000
  1054. NI RDEVSTA2,255-RDEVRACT THIS DEVICE NOT BEING @VA08381 00984000
  1055. * RESET 00985000
  1056. OI RDEVSTAT,RDEVBUSY IT IS BUSY @VA07390 00986000
  1057. B IOTGDISP NOW WAIT FOR DEVICE END @VA07390 00987000
  1058. EJECT 00988000
  1059. *. 00989000
  1060. * 00990000
  1061. * J. OPERATION OF IOTENSE - 00991000
  1062. * 1. FLAG THE IOBLOK AS AN ERROR TASK 00992000
  1063. * 2. IF THE DEVICE IS STILL BUSY, EXIT TO CALLER TO WAIT FOR THE 00993000
  1064. * DEVICE END 00994000
  1065. * 3. IF THE DEVICE IS FREE, START THE SENSE AND EXIT TO CALLER 00995000
  1066. * 00996000
  1067. *. 00997000
  1068. SPACE 00998000
  1069. IOTENSE EQU * HERE TO SENSE ALL UNITS @VA09137 00999100
  1070. TM IOBSPEC2,IOBSNSIO UC WHILE ATTEMPTING SENSE @VA09137 01000100
  1071. BO IOTENBAD TROUBLE -INTERRUPT TIME - SENSE @VA10398 01016010
  1072. TM IOBSPEC2,IOBUC FIRST ENTRY AFTER UNIT CHECK? @V407438 01017000
  1073. BZ IOTGTERR YES -- GO BUILD ERROR BLOK 01018000
  1074. L R4,IOBIOER GET ADDRESS OF ERROR BLOK 01019000
  1075. USING IOERBLOK,R4 @VM01071 01020000
  1076. TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED? @VA03834 01021000
  1077. BO IOTETCAW YES--GIVE CURRENT STATUS ONLY @VA03834 01022000
  1078. OC IOBCSW(8),IOERCSW ADD OLD CSW TO NEW CSW @VM01071 01023000
  1079. B IOTETCAW AND GO START SENSE 01024000
  1080. SPACE 01025000
  1081. IOTGTERR DS 0H SET ERROR CONTROL BLOKS 01026000
  1082. LA R0,IOERSIZE GET ERROR RECORDING BLOK 01027000
  1083. CALL DMKFREE -- 01028000
  1084. ST R1,IOBIOER AND SAVE ITS ADDRESS 01029000
  1085. LR R4,R1 AND USE GPR4 FOR ADDRESSABILITY 01030000
  1086. XC IOERBLOK(IOERSIZE*8),IOERBLOK CLEAR TO ZEROES 01031000
  1087. MVC IOERCSW,IOBCSW SAVE UNIT CHECK CSW 01032000
  1088. TM IOBCSW+4,UC UNIT CHECK PRESENT @VA01599 01033000
  1089. BCR 8,R5 NO, RETURN TO IN LINE CODE @VA01599 01034000
  1090. LM R0,R1,IOTSNCCW GET MODEL SENSE CCW @VA09137 01034100
  1091. ALR R0,R4 ADJUST DATA ADDRESS @VA09137 01034150
  1092. STM R0,R1,IOERCCW SAVE IN IOERBLOK @VA09137 01034200
  1093. OI IOBSPEC2,IOBUC FLAG ERROR TASK @VA09137 01034250
  1094. TM IOBSPEC,IOBTIO+IOBHIO WAS THIS A SIO REQUEST @VA01599 01035000
  1095. BNZ IOTPERP NO, GET SENSE CCW @VA01599 01036000
  1096. TM IOBFLAG,IOBCP+IOBHVC IS THIS A CP OR DIAGNOSE @VA01599 01037000
  1097. * REQUEST 01038000
  1098. BNZ NOT3203 YES, GO AROUND 3203 CODE @VA09137 01039050
  1099. TM RDEVSTAT,RDEVDED DEVICE DEDICATED ? @VA09137 01039100
  1100. BNO IOTPERP NO,NO CHECK FOR 3203 @VA09137 01039150
  1101. CLC RDEVTYPC(2),=AL1(CLASURO,TYP3203) 3203 PRINTER? @VA09137 01039200
  1102. BNE IOTPERP NO, GET SENSE CCW @VA09137 01039250
  1103. CLC CSW+4(2),=AL1(CE+UC,0) SPECIAL 3203 INTERRUPT? @VA09137 01039300
  1104. BE SPECINT SPECIAL 3203 INTERRUPT @VA14489 01039360
  1105. CLC CSW+4(2),=AL1(CE+UC+IL,0) SPECIAL 3203 @VA14489 01039365
  1106. * INTERRUPT? 01039370
  1107. BNE IOTPERP NO, GET SENSE CCW @VA14489 01039375
  1108. SPECINT EQU * @VA14489 01039380
  1109. OI IOBSPEC3,IOBPST TELL VIO TO POST @VA09137 01039400
  1110. LR R3,R5 SAVE R5 IN R3 ACROSS BAL @VA09137 01039450
  1111. BAL R5,COPYIOB REFLECT THIS INTERRUPT @VA09137 01039500
  1112. LR R5,R3 RESTORE R5 @VA09137 01039550
  1113. NI IOBSPEC3,255-IOBPST TURN OFF POST @VA09137 01039600
  1114. B SNS3203 DO TIO @VA09137 01039650
  1115. NOT3203 EQU * @VA09137 01039700
  1116. OI IOBFLAG,IOBERP SET INDICATOR FOR ERP SUPPORT @VA01599 01040000
  1117. IOTPERP EQU * @VA01599 01041000
  1118. SPACE 01046000
  1119. TM IOBCSW+4,CE IS THE DEVICE FREE ? @VA01068 01047000
  1120. BZ IOTETCAW YES -- GO START THE SENSE 01048000
  1121. TM IOBCSW+4,DE+ATTN IS DEVICE STILL BUSY ? @VA01068 01049000
  1122. BNZ IOTETCAW NO, ISSUE SENSE COMMAND 01050000
  1123. LH R1,IOBRADD GET REAL DEVICE ADDRESS @VM01011 01051000
  1124. XC CSW(8),CSW CLEAR THE REAL CSW @VM01011 01052000
  1125. TIO 0(R1) SEE IF IT'S REALLY BUSY @VM01011 01053000
  1126. BC 8+1,IOTETCAW GO AHEAD WITH THE SENSE @VM01011 01054000
  1127. BC 2,IOTENSWT REALLY BUSY - WAIT FOR IT @VM01011 01055000
  1128. TM CSW+4,DE+UC+ATTN ENDING STATUS ? @VM01011 01056000
  1129. BZ IOTENSWT NO -- WAIT FOR IT @VM01011 01057000
  1130. OI IOBCSW+4,DE FAKE DEVICE END REGARDLESS @VM01011 01058000
  1131. B IOTETCAW AND GO AHEAD WITH THE SENSE @VM01011 01059000
  1132. IOTENSWT EQU * @VM01011 01060000
  1133. TM RDEVSTAT,RDEVDED IS DEVICE DEDICATED 01061000
  1134. BO COPYIOB YES, COPY IOBLOK FOR DEDICATED USER'S 01062000
  1135. BR R5 MUST WAIT FOR DEVICE END 01063000
  1136. SPACE 01063100
  1137. SNS3203 EQU * 3203 TIO CODE FOR 0A STATUS @VA09137 01063150
  1138. LH R1,IOBRADD GET REAL DEVICE ADDRESS @VA09137 01063200
  1139. XC CSW(8),CSW CLEAR CSW @VA09137 01063250
  1140. TIO 0(R1) IS IT BUSY ? @VA09137 01063300
  1141. BC 8+1,IOTETCAW GO AHEAD WITH SENSE @VA09137 01063350
  1142. BCR 2,R5 WAIT FOR DEVICE END @VA09137 01063400
  1143. TM CSW+4,DE DEVICE END ? @VA09137 01063450
  1144. BZR R5 NO, WAIT FOR IT @VA09137 01063500
  1145. OI IOBCSW+4,DE SET DE FOR REFLECTION @VA09137 01063550
  1146. B IOTETCAW GO DO SENSE @VA09137 01063600
  1147. SPACE 3 01064000
  1148. EJECT 01065000
  1149. IOTETCAW DS 0H 01066000
  1150. LA R1,IOERCCW GET ADDRESS OF SENSE CCW 01067000
  1151. ST R1,CAW SET UP CHANNEL ADDRESS WORD 01068000
  1152. XI IOBSPEC2,IOBUC+IOBSNSIO UNFLAG UC, FLAG SENSE @V407438 01069000
  1153. LH R1,IOBRADD GET DEVICE ADDRESS 01070000
  1154. OI RDEVSTA2,RDEVCONC ALLOW PRESERVATION OF @VA01044*01071000
  1155. CONTINGENT CONNECTION FOR VIRTUAL USER. @VA01044 01072000
  1156. CLI RDEVTYPC,CLASGRAF GRAF DEVICE? @VA09500 01073100
  1157. BNE IOTNSIO1 NO, NOT 3270 TYPE @VA05088 01074000
  1158. TM RDEVTYPE,TYP3277+TYP3284 3277 OR 3284? @VA09500 01074100
  1159. BZ IOTNSIO1 NO - BRANCH @VA09500 01074110
  1160. LA R15,2000(R0) LOAD COUNT FOR 3270 @VA05088 01075000
  1161. B IOTNSIO GO TO SIO FOR SENSE @VA05088 01076000
  1162. RETYCNT DC F'40000' RETRY COUNT @VA09500 01076100
  1163. IOTNSIO1 EQU * @VA05088 01077000
  1164. L R15,RETYCNT LOAD RETRY COUNT @VA09500 01078100
  1165. IOTNSIO SIO 0(R1) ATTEMPT TO DO SENSE 01079000
  1166. BCR 8,R5 SENSE STARTED -- GO WAIT FOR INTERRUPT 01080000
  1167. BC 1,IOTENFAL ERROR FOR CC = 3 ON SIO 01081000
  1168. BC 4,IOTNCC1 GO CHECK OUT CSW FOR CC = 1 ON SIO 01082000
  1169. TM RCHTYPE,RCHBMX BUSY VALID ONLY ON BLOCK MULTIPLEXOR 01083000
  1170. BZ IOTINBAD OTHERWISE, PROBABLE FAILURE @VA01350 01084000
  1171. CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 01085100
  1172. BNE NOTGRAF1 NO-BRANCH @VA09500 01085200
  1173. TM RDEVTYPE,TYP3277+TYP3284 @VA09500 01085300
  1174. BM IOTINBAD IF EITHER LIMITED RETRY @VA09500 01085400
  1175. NOTGRAF1 DS 0H @VA09500 01085500
  1176. B IOTNSIO FOR BMPX, LOOP UNTIL STARTED 01087000
  1177. SPACE 01088000
  1178. IOTNCC1 TM CSW+4,X'FF'-(SM+CUE+BUSY) U.C.OR IRREG STATUS? @VX04718 01089000
  1179. BNZ IOTINBAD YES,RETRY 16 TIMES @VX04718 01090000
  1180. CLI RDEVTYPC,CLASGRAF GRAF DEVICE @VA09500 01091100
  1181. BNE NOTGRAF2 NO-BRANCH @VA09500 01091200
  1182. TM RDEVTYPE,TYP3277+TYP3284 @VA09500 01091300
  1183. BM ROUT3277 @VA09500 01091400
  1184. NOTGRAF2 DS 0H @VA09500 01091500
  1185. CLI CSW+4,BUSY IS IT JUST A DEVICE BUSY @VA12629 01093100
  1186. BE IOTINBAD YES USE LIMITED RETRY @VA12629 01093200
  1187. TM CSW+4,SM+CUE+BUSY CUE OR CU PENDING @VA12629 01093300
  1188. BNZ IOTNSIO YES UNLIMITED RETRY @VX04718 01094000
  1189. NOUN3277 EQU * @VA05088 01095000
  1190. TM CSW+5,X'FF' ANY BAD CHANNEL STATUS 01096000
  1191. BZ IOTNSIO NO, RETRY SENSE COMMAND 01097000
  1192. TM CSW+5,IFCC+CCC IS THIS A CHANNEL DATA CHECK @VA01599 01098000
  1193. BNZ IOTENFAL NO, GO INDICATE SENSE FAILED @VA01599 01099000
  1194. SPACE 01100000
  1195. IOTINBAD DS 0H RETRY FOR 'UC' OR BUSY ON SENSE @VA01350 01101000
  1196. BCT R15,IOTNSIO RETRY 16 TIMES @VA01350 01102000
  1197. SPACE 01103000
  1198. IOTENFAL DS 0H HERE IF THE SENSE HAS FAILED 01104000
  1199. MVC IOERLEN,ZEROES SENSE NOT AVAILABLE @VA10398 01104010
  1200. IOTENBAD DS 0H @VA10398 01104020
  1201. NI IOBSPEC2,X'FF'-IOBSNSIO SENSE NOT GOING -- @V407438 01105000
  1202. NI RCHSTAT,X'FF'-RCHBUSY RESET CHANNEL BUSY 01106000
  1203. NI RCUSTAT,X'FF'-RCUBUSY RESTE CU BUSY 01107000
  1204. OI IOBSTAT,IOBFATAL SENSE HAS FAILED @VA01581 01108000
  1205. B 4(,R5) TAKE ERROR EXIT - 01109000
  1206. ROUT3277 TM CSW+4,SM+CUE+BUSY @VA05088 01110000
  1207. BNZ IOTINBAD DO LIMITED RETRY @VA05088 01111000
  1208. B NOUN3277 GO CHECK OTHER CONDITIONS @VA05088 01112000
  1209. SPACE 01113000
  1210. IOTSNCCW CCW 4,IOERDATA-IOERBLOK,SILI,IOERSNSZ MDL SENSE CCW @V407438 01114000
  1211. DROP R4 01115000
  1212. CLRSNS CCW 4,*-*,SILI+SKIP,24 CLEAR CONTENTION CONNECTION @VM08622 01116000
  1213. EJECT 01117000
  1214. IOTRECER DS 0H SET UP TO RECORD IOERROR 01118000
  1215. L R0,RDEVIOER GET PRIMARY IOERBLOK 01119000
  1216. LTR R0,R0 ANY QUEUED ?? 01120000
  1217. BZ IOTGTEX NO -- USE IOBIOER 01121000
  1218. ST R0,IOBIOER AND CHAIN TO IOBLOK 01122000
  1219. SR R0,R0 CLEAR OUT 01123000
  1220. ST R0,RDEVIOER REVBLOK POINTER 01124000
  1221. IOTGTEX EQU * GET A CPEXBLOK TO STACK 01125000
  1222. L R2,=A(DMKIOSRC) @VA09587 01126000
  1223. SPACE 2 01127000
  1224. IOTGCPEX EQU * BUILD AND STACK CPEXBLOK 01128000
  1225. LA R0,CPEXSIZE GET A CP REQUEST BLOK 01129000
  1226. CALL DMKFREE 01130000
  1227. USING CPEXBLOK,R1 01131000
  1228. LR R15,R2 SET THE RETURN TO EXECUTION ADDRESS 01132000
  1229. * SET UP BY THE CALLER 01133000
  1230. XC CPEXR13(4),CPEXR13 ZERO OUT REG 13 (NO SAVE AREA) 01134000
  1231. STM R15,R12,CPEXADD AND SAVE REGISTERS 01135000
  1232. L R3,=A(DMKIOSSV) @VA09587 01136000
  1233. L R14,0(R3) @VA09587 01137000
  1234. L R15,4(R3) @VA09587 01138000
  1235. ST R14,CPEXR0 IN CASE LOSE CONTROL @VA07225 01139000
  1236. ST R15,CPEXR1 IN CASE LOSE CONTROL @VA07225 01140000
  1237. CALL DMKSTKMP STACK REQ. ON MAIN(I/O) PROC. @V407593 01141000
  1238. BR R5 AND RETURN TO CALLER 01142000
  1239. SPACE 3 01143000
  1240. CHANOFF DC A(X'80000000') MASK FOR DISABLING CHANNEL @VA07955 01144000
  1241. SPACE 3 01145000
  1242. CCWL EQU 8 CCL LENGTH @V60B6B8 01146000
  1243. SEEKPTL EQU 3 LENGTH OF PTR TO SEEK ARG @V60B6B8 01147000
  1244. TICOFF EQU 9 OFFSET TO CCW PTR IN TIC @V60B6B8 01148000
  1245. PREL EQU 24 LENGTH OF PREFIX @V60B6B8 01149000
  1246. SSSI1ADD DC V(DMKSSUI1) @VA11455 01150010
  1247. SSSI2ADD DC V(DMKSSUI2) @VA11455 01150020
  1248. * CONSTANTS 01152000
  1249. SET EQU X'FF' USED TO TEST IF FLAG IS SET @V407593 01153000
  1250. IOTRCODE EQU 5 TRACE-TABLE FLAG FOR I/O INTERRUP@V407593 01154000
  1251. SKSHDR EQU 6 SEEKS HEADER LENGTH @V60BEBC 01155000
  1252. INCLUDE EQU X'80' SEEKS INCLUDE OPTION @V60BEBC 01156000
  1253. EXCLUDE EQU X'40' SEEKS EXCLUDE OPTION @V60BEBC 01157000
  1254. SEEKCL EQU X'01' SEEKS MONITOR MASK @VMI0067 01158000
  1255. SPACE 1 @V407593 01159000
  1256. LTORG @V407593 01160000
  1257. EJECT 01161000
  1258. COPY EQU 01162000
  1259. COPY DEVTYPES 01163000
  1260. PSA 01164000
  1261. COPY SAVE 01165000
  1262. COPY VMBLOK 01166000
  1263. COPY IOBLOKS 01167000
  1264. COPY RBLOKS 01168000
  1265. COPY VBLOKS 01169000
  1266. COPY IOER 01170000
  1267. END DMKIOT 01171000