Table of Contents

DMKCFP Source

References

Source Listing

DMKCFP.ASSEMBLE.txt
  1. CFP TITLE 'DMKCFP (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKCFP 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * TO SIMULATE THE REAL MACHINES PUSH BUTTONS. 00010000
  11. * 00011000
  12. * ATTRIBUTES - 00012000
  13. * 00013000
  14. * REENTRANT, PAGEABLE, CALLED VIA SVC 00014000
  15. * 00015000
  16. * ENTRY POINTS - 00016000
  17. * 00017000
  18. * DMKCFPRR - ENTRY TO HANDLE SYSTEM RESETS FROM OTHER 00018000
  19. * CP ROUTINES. 00019000
  20. * DMKCFPRD - ENTRY TO RESET DEVICES FOR OTHER CP ROUTINES. 00020000
  21. * 00021000
  22. * ENTRY CONDITIONS - 00022000
  23. * 00023000
  24. * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00024000
  25. * GPR11 - ADDRESS OF VMBLOK 00025000
  26. * GPR12 - ADDRESS OF ENTRY POINT 00026000
  27. * GPR13 - ADDRESS OF SAVEAREA 00027000
  28. * 00028000
  29. * EXIT CONDITIONS - 00029000
  30. * 00030000
  31. * NORMAL - 00031000
  32. * GPR2 = 0 00032000
  33. * 00033000
  34. * ERROR - 00034000
  35. * GPR2 = ERROR MESSAGE CODE NUMBER 00035000
  36. * 00036000
  37. * CALLS TO OTHER ROUTINES - 00037000
  38. * 00038000
  39. * DMKSCNFD - TO LOCATE NEXT ARGUMENT IN THE COMMAND LINE 00039000
  40. * DMKCVTHB - CONVERT HEXADECIMAL ADDRESSES TO BINARY 00040000
  41. * DMKSCNVU - TO LOCATE ADDRESSES OF THE VIRTUAL DEVICE BLOKS 00041000
  42. * DMKVDREL - TO RELEASE A VIRTUAL DEVICE 00042000
  43. * DMKQCNSY - TO SYNCHRONIZE TERMINAL OUTPUT 00043000
  44. * DMKQCNWT - TO OUTPUT MESSAGES TO THE TERMINAL 00044000
  45. * DMKVATBC - TO RELEASE SHADOW TABLES FOR V370R 00045000
  46. * DMKVATMD - TO ENTER VIRTUAL MACHINE IN TRANSLATE MODE 00046000
  47. * DMKFREE - TO OBTAIN STORAGE FROM FREE STORAGE 00047000
  48. * DMKFRET - TO RETURN STORAGE TO FREE STORAGE 00048000
  49. * DMKVSPCR - TO CLOSE VIRTUAL CARD READER 00049000
  50. * DMKVSPCO - TO CLOSE VIRTUAL PRINTER OR PUNCH 00050000
  51. * DMKPTRUL - TO UNLOCK A PAGE IN VIRTUAL MACHINE 00051000
  52. * DMKPGSPO - TO CLEAR VIRTUAL STORAGE TO BINARY ZEROS 00052000
  53. * DMKERMSG - TO SEND ERROR MESSAGES TO THE TERMINAL. 00053000
  54. * DMKCFPRR - TO HANDLE SYSTEM RESET FUNCTION 00054000
  55. * DMKPTRAN - TO BRING A PAGE IN CORE 00055000
  56. * DMKCVTBH - CONVERT BINARY DATA TO HEXADECMAL 00056000
  57. * DMKCFPRD - TO RESET A VIRTUAL DEVICE 00057000
  58. * DMKSCHRT - TO RESET OUTSTANDING TIMER REQUEST 00058000
  59. * DMKPERT - TO RESET TRACING FUNCTION 00059000
  60. * DMKSTKCP - TO STACK CPEXBLOK FOR VIRTUAL CTCA RESET 00060000
  61. * DMKPTRPW - TO WAIT FOR PAGING COMPLETION BEFORE SYSTEM RESET 00061100
  62. * DMKDIBDR - TO DROP A DIALED LINE 00062000
  63. * DMKVCARD - TO RESET A NOT-BUSY VIRTUAL CTCA 00063000
  64. * DMKSTKIO - TO STACK AN I/O BLOCK FOR PROCESSING 00064000
  65. * DMKUNTFR - TO RELEASE A CCW PACKAGE 00065000
  66. * DMKRPAGT - TO READ A PAGE IN CORE 00066000
  67. * DMKSCNVS - TO SEARCH FOR A VOLUME 00067000
  68. * DMKCVTDB - CONVERT DECIMAL TO BINARY 00068000
  69. * DMKIOSQR - TO EXECUTE REAL INPUT/OUTPUT REQUESTS 00069000
  70. * DMKIOSHA - HALT AN ACTIVE REAL DEVICE 00070000
  71. * DMKTRCPB - PUT BACK INST. ALTERED BY TRACE 00071000
  72. * DMKVIOIN - PRESENT DE STATUS WHEN RES MDISK IS RELEASED 00072000
  73. * DMKVMCUA - RESET VIRTUAL MACHINE COMMUNICATIONS 00073000
  74. * HDKD7CTM - TERMINATE ACTIVE LOGICAL DEVICES HRC065DK 00073100
  75. * 00074000
  76. * EXTERNAL REFERENCES - 00075000
  77. * 00076000
  78. * DMKSYSVM - LOCATION OF THE SYSTEM VMBLOK 00077000
  79. * DMKIOSRW - INTRPT RETURN FOR DASD RELEASE IOBLOK 00078000
  80. * 00079000
  81. * TABLES/WORKAREAS - 00080000
  82. * 00081000
  83. * RDEVBLOK, IOBLOK, VMBLOK, VDEVBLOK, VCUBLOK, VCHBLOK 00082000
  84. * 00083000
  85. * REGISTER USAGE - 00084000
  86. * 00085000
  87. * GPR0 - ARGUMENT LENGTH (PASSED BACK FROM DMKSCNFD) 00086000
  88. * GPR1 - ARGUMENT ADDRESS (PASSED BACK FROM DMKSCNFD) 00087000
  89. * GPR2 -PASS PARAMETERS TO CALLED ROUTINES 00088000
  90. * GPR3 - WORK REG 00089000
  91. * GPR4 - WORK REG 00090000
  92. * GPR5 - WORK REG 00091000
  93. * GPR6 - VCHBLOK ADDRESS 00092000
  94. * GPR7 - VCUBLOK ADDRESS 00093000
  95. * GPR8 - VDEVBLOK ADDRESS 00094000
  96. * GPR9 - RDEVBLOK ADDRESS 00095000
  97. * GPR10 - IOBLOK ADDRESS 00096000
  98. * GPR11 - VMBLOK ADDRESS 00097000
  99. * GPR12 - BASE REG 00098000
  100. * GPR13 - SAVEAREA ADDRESS 00099000
  101. * GPR14 - LINKAGE REG 00100000
  102. * GPR15 - LINKAGE REG 00101000
  103. * 00102000
  104. * OPERATION - 00103000
  105. * 00104000
  106. * THE VARIOUS SUBROUTINES IN THIS MODULE ARE CALLED BY DMKCFM. 00105000
  107. * THE FORMAT AND DESCRIPTION OF EACH COMMAND IS LISTED 00106000
  108. * 00107000
  109. *. 00108000
  110. EJECT 00109000
  111. COPY OPTIONS 00110000
  112. COPY LOCAL 00111000
  113. SPACE 2 00112000
  114. DMKCFP START 00113000
  115. SPACE 00114000
  116. MODID DC CL8'DMKCFP' 00115000
  117. SPACE 00116000
  118. USING PSA,R0 00117000
  119. USING VMBLOK,R11 00118000
  120. USING SAVEAREA,R13 00119000
  121. SPACE 00120000
  122. EXTRN DMKERMSG 00121000
  123. EXTRN DMKCVTDB 00122000
  124. EXTRN DMKCVTBH 00123000
  125. EXTRN DMKVMI 00124000
  126. EXTRN DMKRPAGT 00125000
  127. EXTRN DMKCVTHB 00126000
  128. EXTRN DMKVIOMK 00127000
  129. EXTRN DMKPGSPO 00128000
  130. EXTRN DMKPTRUL 00129000
  131. EXTRN DMKUNTFR 00130000
  132. EXTRN DMKVDREL,DMKQCNSY @V200820 00131000
  133. EXTRN DMKSCNFD 00132000
  134. EXTRN DMKSCNVD,DMKTRCPB @V200820 00133000
  135. EXTRN DMKVSPCO 00134000
  136. EXTRN DMKVSPCR 00135000
  137. EXTRN DMKSNTBL,DMKSCNVS @V304235 00136000
  138. EXTRN DMKSCNVU 00137000
  139. EXTRN DMKPERT 00138000
  140. EXTRN DMKSTKIO,DMKSTKCP 00139000
  141. EXTRN DMKVATBC 00140000
  142. EXTRN DMKVATMD 00141000
  143. EXTRN DMKSCHRT 00142000
  144. EXTRN DMKDIBDR @VA13704 00143000
  145. EXTRN DMKIOSRW @VA04026 00144000
  146. EXTRN DMKIOSHA 00145000
  147. EXTRN DMKVIOIN @V407438 00146000
  148. EXTRN DMKSSUCF @VA11455 00146110
  149. AIF (NOT &ISAM).NOUNTS **AIF** 00147000
  150. EXTRN DMKUNTIS INTERRUPT RETURN FOR ISAM I/O @VA02130 00148000
  151. .NOUNTS ANOP 00149000
  152. EXTRN DMKVCARD 00150000
  153. EXTRN DMKBLDRT,DMKBLDRL,DMKPGSPP @V304635 00151000
  154. EXTRN DMKIOSQR 00152000
  155. EXTRN DMKLOCKQ,DMKLOCKD @VM08908 00153000
  156. EXTRN DMKPTRPW @VA08037 00154100
  157. EXTRN DMKVMCUA @V387045 00155000
  158. EXTRN HDKD7CTM HRC065DK 00155100
  159. EJECT 00156000
  160. *. 00157000
  161. * 00158000
  162. * SUBROUTINE NAME - 00159000
  163. * DMKCFPRR 00160000
  164. * 00161000
  165. * FUNCTION - 00162000
  166. * TO HANDLE SYSTEM RESETS FROM OTHER CP ROUTINES 00163000
  167. * 00164000
  168. * OPERATION - 00165000
  169. * IF THE USER IS IN PAGE WAIT WHEN DMKCFPRR IS ENTERED, 00166000
  170. * A CALL IS MADE TO DMKPGSPW TO STACK A CPEXBLOK 00167000
  171. * AND EXIT TO THE DISPATCHER. WHEN THE PAGE REQUEST IS 00168000
  172. * SATISFIED, RETURN IS MADE TO DMKCFP AND EXECUTION RESUMES 00169000
  173. * WITH THE FOLLOWING STEPS. 00170000
  174. * 1. BAL R10 TO LABEL RESYSTEM TO RESET THE SYSTEM. 00171000
  175. * 2. IF USER IS IN LOGOFF, EXIT. 00172000
  176. * 3. SET UP AN IDLE MESSAGE FOR THE TERMINAL AND SET THE 00173000
  177. * RETURN TO LABEL RESEXIT WHICH IS AN EXIT. 00174000
  178. * 4. CALL DMKQCNWT TO SEND THE IDLES. 00175000
  179. * 5. GOTO DMKDSPCH (DISPATCH) . 00176000
  180. * 00177000
  181. * RESPONSES - 00178000
  182. * NONE 00179000
  183. * 00180000
  184. * ERROR MESSAGES - 00181000
  185. * NONE 00182000
  186. *. 00183000
  187. EJECT 00184000
  188. DMKCFPRR RELOC SYSTEM RESET FROM OTHER CP ROUTINES 00185000
  189. TM VMRSTAT,VMPGWAIT IS USER IN PAGE WAIT? @VA04369 00186000
  190. BZ PGCOMP NO - CONTINUE PROCESSING @VA04369 00187000
  191. CL R11,ASYSVM IS IT SYSTEM VMBLOK? @VA04369 00188000
  192. BE PGCOMP YES - CONTINUE PROCESSING @VA04369 00189000
  193. CALL DMKPTRPW @VA08037 00190100
  194. PGCOMP EQU * @VA04369 00191000
  195. NI VMPSTAT,X'FF'-(VMNOTRAN+VMPAGEX) RESET 00192000
  196. NI VMFSTAT,X'FF'-VMFAUTO RESET AUTOPOLL H.S. TOO @V386298 00193000
  197. LA R1,VMUSER POINT TO THE USERID @VM08908 00194000
  198. CALL DMKLOCKQ LOCK THE VIRTUAL MACHINE @VM08908 00195000
  199. BAL R10,RESYSTEM RESET THE VIRTUAL MACHINE 00196000
  200. CALL DMKQCNSY SYNCHRONIZE THE TERMINAL ACTIVITY@V200820 00197000
  201. CFPUNLK EQU * @V240820 00198000
  202. LA R1,VMUSER POINT TO THE USERID @VM08908 00199000
  203. CALL DMKLOCKD UNLOCK THE VIRTUAL MACHINE @VM08908 00200000
  204. B RESEXIT EXIT WHEN COMPLETE @V200820 00201000
  205. EJECT 00202000
  206. *. 00203000
  207. * SUBROUTINE NAME - 00204000
  208. * RESYSTEM 00205000
  209. * 00206000
  210. * FUNCTION - 00207000
  211. * RESET THE COMPLETE VIRTUAL MACHINE. 00208000
  212. * 00209000
  213. * OPERATION - 00210000
  214. * 1. FOR A EC MODE MACHINE, STORE RESET VALUES IN THE CONTROL 00211000
  215. * REGISTERS AND CALL DMKVATBC TO RELEASE THE SHADOW TABLES. 00212000
  216. * RELEASE ANY QUEUED PSEUDO PAGE FAULT BLOCKS. 00213000
  217. * IF IT IS A NON-EC MODE MACHINE, STORE THE RESET 00214000
  218. * VALUE IN THE CREG 0 FOUND IN THE VMBLOK. 00215000
  219. * 2. GET THE NEXT SET OF VIRTUAL DEVICE BLOK ADDRESSES. 00216000
  220. * 3. CALL DMKCFPRD TO RESET THE VIRTUAL DEVICE. 00217000
  221. * 4. IF IT IS A TERMINAL DEVICE, CALL DMKVDBRL TO RELEASE THE 00218000
  222. * DEVICE. 00219000
  223. * 5. CLEAR THE PENDING INTERRURPTS. THEN IF NOT THE LAST 00220000
  224. * DEVICE, GO BACK TO STEP 2. IF IT IS THE LAST DEVICE, 00221000
  225. * RETURN ON REG 10. 00222000
  226. * 00223000
  227. * RESPONSES - 00224000
  228. * NONE 00225000
  229. * 00226000
  230. * ERROR MESSAGES - 00227000
  231. * NONE 00228000
  232. * 00229000
  233. *. 00230000
  234. EJECT 00231000
  235. RESYSTEM DS 0H PERFORM A VIRTUAL SYSTEM RESET 00232000
  236. TM VMCXSTAT,VMBCAUTH VMCF ACTIVE ? @V387045 00233000
  237. BZ CFPNVMCF NO..CONTINUE... @V387045 00234000
  238. CALL DMKVMCUA RESET VIRTUAL MACHINE @V387045 00235000
  239. * COMMUNICATION 00236000
  240. CFPNVMCF EQU * @V387045 00237000
  241. CLC INSTWRD1+1(3),ZEROES Are LDEVs active? HRC065DK 00237100
  242. BE LDEVDONE No, anchor is zero HRC065DK 00237200
  243. CALL HDKD7CTM Call rtn to term LDEVs HRC065DK 00237300
  244. * 00237400
  245. LDEVDONE EQU * HRC065DK 00237500
  246. AIF (NOT &TRACE(6)).NTR1 00238000
  247. TM VMTRCTL,VMTRBRIN ARE WE TRACING BRIN'S? @VA00786 00239000
  248. BZ TRCNOACT NOT ACTIVE, BR. @VA00786 00240000
  249. CALL DMKTRCPB CALL PUTBACK ROUTINE TO RESET @V200820 00241000
  250. TRCNOACT EQU * @VA00786 00242000
  251. .NTR1 ANOP 00243000
  252. TM VMPSTAT,VMV370R IS THIS AN EC-MODE MACHINE ??? 00244000
  253. BZ RESNEX NO 00245000
  254. L R2,VMECEXT EXTENSION BLOK ADDRESS 00246000
  255. USING ECBLOK,R2 00247000
  256. L R9,EXTCPTRQ @V408246 00248000
  257. USING TRQBLOK,R9 @V408246 00249000
  258. MVC EXTCR0(8),ZEROES CLEAR C-REGS 0,1 @V240820 00250000
  259. MVC EXTCR2(8),FFS SET C-REGS 2,3 TO X'FFFF' @V240820 00251000
  260. MVC EXTCR4(12*4),ZEROES CLEAR C-REGS 4-15 @V240820 00252000
  261. MVI EXTCR0+3,X'E0' RESET VALUES IN C-REGS 0,14,15 00253000
  262. MVI EXTCR14,X'C4' ... 00254000
  263. MVI EXTCR15+2,X'02' ... 00255000
  264. TM VMDSTAT,VMINQ IN-Q? @V408246 00256000
  265. BZ NQTMR @V408246 00257000
  266. LM R3,R4,VMTMOUTQ REMAINING TIME LEFT IN QUEUE @V408246 00258000
  267. LTR R3,R3 DID IT GO MINUS? @V408246 00259000
  268. BNM *+8 NO, ITS OK TO USE IT @V408246 00260000
  269. LM R3,R4,ZEROES MUST NOT BE NEGATIVE @V408246 00261000
  270. LM R5,R6,TRQBQUE TIME OF LAST VALUE @V408246 00262000
  271. TM VMTLEVEL,VMCPUTMR TRACKING VIRTUAL CPU TIMER? @V408246 00263000
  272. BO TRKTMR YES - SPECIAL HANDLING @V408246 00264000
  273. LR R5,R3 REMAINING TIME TO LEAVE IN QUEUE @V408246 00265000
  274. LR R6,R4 ..... @V408246 00266000
  275. B NOTRKTMR @V408246 00267000
  276. TRKTMR DS 0H HERE IF TRACKING VIRTUAL CPU @V408246 00268000
  277. * TIMER 00269000
  278. LM R7,R8,EXTCPTMR USERS VIRTUAL CPU TIMER VALUE @V408246 00270000
  279. SLR R8,R4 CALCULATE HOW LONG USER @V408246 00271000
  280. BC 8+2+1,*+8 HAS BEEN RUNNING IN @V408246 00272000
  281. SL R7,F1 PROBLEM STATE SINCE LAST TIMER @V408246 00273000
  282. SLR R7,R3 INSTRUCTION ..... @V408246 00274000
  283. SLR R6,R8 USE THIS FACTOR SO THAT WHEN @V408246 00275000
  284. BC 8+2+1,*+8 SCHEDULER DROPS HIM @V408246 00276000
  285. SL R5,F1 WE WON'T FOWL UP VIRTUAL CPU @V408246 00277000
  286. SLR R5,R7 ..... @V408246 00278000
  287. NOTRKTMR DS 0H @V408246 00279000
  288. NI VMTLEVEL,X'FF'-VMCPUTMR NOLONGER TRACKING @V408246 00280000
  289. STM R5,R6,TRQBQUE SAVE RESULT FOR SCHEDULAR.. @V408246 00281000
  290. TM CPSTATUS,CPRUN WAS SYSTEM IN PROBLEM STATE? @VA07582 00282000
  291. BZ NOPROBT NO, CONTINUE NORMALLY @VA07582 00283000
  292. C R11,RUNUSER IS THIS USER RUNUSER? @VA07582 00284000
  293. BNE NOPROBT NO, CONTINUE NORMALLY @VA07582 00285000
  294. * REGS R3 AND R4 CONTAIN VMTMOUTQ 00286000
  295. LM R7,R8,PROBSTRT GET TIMER AT PROBLEM STATE START @VA07582 00287000
  296. SLR R8,R4 CALC 2ND HALF OF ELAPSED TIME @VA07582 00288000
  297. BNM *+6 WAS THERE A CARRY? @VA07582 00289000
  298. BCTR R7,0 NO CARRY, SIGNIFICANT DIFFERENCE @VA07582 00290000
  299. SLR R7,R3 CALC 1ST HALF OF ELAPSED TIME @VA07582 00291000
  300. LM R3,R4,PROBTIME GET TOTAL PROBLEM TIME @VA07582 00292000
  301. SLR R4,R8 SUBTRCT 2ND HALF OF ELAPSED TIME @VA07582 00293000
  302. BNM *+6 WAS THERE A CARRY? @VA07582 00294000
  303. BCTR R3,0 NO CARRY, SIGNIFICANT DIFFERENCE @VA07582 00295000
  304. SLR R3,R7 SUBTRCT 1ST HALF OF ELAPSED TIME @VA07582 00296000
  305. STM R3,R4,PROBTIME STORE NEW TOTAL PROBLEM TIME @VA07582 00297000
  306. STM R5,R6,PROBSTRT SET PROBSTRT FOR DSP CALCULATION @VA07582 00298000
  307. NOPROBT DS 0H @VA07582 00299000
  308. STM R5,R6,VMTMOUTQ SAVE TIME TILL QUEUE DROP.. @V408246 00300000
  309. DROP R9 @V408246 00301000
  310. NQTMR DS 0H @V408246 00302000
  311. MVC EXTCPTMR,FFS RESET THE CPU TIMER 00303000
  312. L R1,EXTCCTRQ POINT TO TRQBLOK FOR CLOCK COMPARATOR 00304000
  313. USING TRQBLOK,R1 00305000
  314. ICM R0,15,TRQBFPNT CHECK FOR OUTSTANDING REQUEST @V240820 00306000
  315. BZ SETCKC NO .. 00307000
  316. CALL DMKSCHRT CALL THE SCHEDULER TO RESET IT 00308000
  317. SLR R2,R2 CLEAR TRQBLOK POINTER FOR USOFF 00309000
  318. ST R2,TRQBFPNT .. BLOCK HAS BEEN DEQUEUED 00310000
  319. SETCKC MVC TRQBVAL,ZEROES RESET CLOCK COMPARATOR @VA01177 00311000
  320. DROP R1 00312000
  321. DROP R2 00313000
  322. CALL DMKVATBC RELEASE SHADOW TABLES, IF ANY 00314000
  323. NI VMESTAT,VMMICSVC+VMINVPAG ONLY LEAVE THESE. @VA01198 00315000
  324. B RESNEX1 CONTINUE 00316000
  325. RESNEX EQU * RESET VIRTUAL C-REG 0 00317000
  326. LA R2,X'E0' RESET VALUE FOR C-REG 0 00318000
  327. ST R2,VMVCR0 SET IN VMBLOK 00319000
  328. RESNEX1 EQU * CONTINUE SYSTEM RESET 00320000
  329. NI VMVCR14,X'FF'-VMIOLOG FOR EC AND BCMODE, RESET @VMD0103 00321000
  330. * VMBLOK COPY OF CREG 14 IOLOG BIT. 00322000
  331. NI VMPEND,X'FF'-VMPGPND RESET PENDING PAGE FAULTS @V213135 00323000
  332. LA R0,PGBSIZE GET SIZE OF PAGE FAULT BLOK @V213135 00324000
  333. L R2,VMPGPNT POINT TO FIRST BLOK ON STACK @V213135 00325000
  334. USING PGBLOK,R2 ADDRESSABILITY @V213135 00326000
  335. SPACE 00327000
  336. PFLOOP LTR R1,R2 ANY MORE BLOKS TO FRET ? @V213135 00328000
  337. BZ RESNX2 NO -- CONTINUE WITH RESET @V213135 00329000
  338. L R2,PGPNT POINT TO NEXT BLOK @V213135 00330000
  339. CALL DMKFRET AND FRET THIS ONE @V213135 00331000
  340. ST R2,VMPGPNT SAVE POINTER TO NEXT ONE. @V213135 00332000
  341. B PFLOOP CONTINUE @V213135 00333000
  342. DROP R2 @V213135 00334000
  343. SPACE 00335000
  344. RESNX2 EQU * CONTINUE WITH RESET @V213135 00336000
  345. MVC VMPSW(8),=AL2(WAIT,0,0,0) DISABLE WAIT PSW @V240820 00337000
  346. SLR R0,R0 ZERO CONSTANT @V240820 00339000
  347. SR R1,R1 ZERO VMCHTBL INDEX 00340000
  348. LA R4,2 LOAD INDEX INCREMENT 00341000
  349. LA R5,30 LOAD INDEX COMPARAND 00342000
  350. RESNCH LH R6,VMCHTBL(R1) LOAD NEXT CHANNEL BLOK INDEX 00343000
  351. LTR R6,R6 DOES CHANNEL EXIST ? 00344000
  352. BM RESXCH NO, INDEX TO NEXT ONE 00345000
  353. A R6,VMCHSTRT POINT TO VCHBLOK 00346000
  354. USING VCHBLOK,R6 @V240820 00347000
  355. STH R0,VCHCUINT CLEAR PENDING CU INTERRUPT FLAGS 00348000
  356. NI VCHSTAT,VCHDED DON'T RESET DED. CHANNEL FLAG. 00349000
  357. SR R2,R2 ZERO VCHCUTBL INDEX 00350000
  358. RESNCU LH R7,VCHCUTBL(R2) LOAD NEXT CU BLOK INDEX 00351000
  359. LTR R7,R7 DOES COUNTROL UNIT EXIST 00352000
  360. BM RESXCU NO, INDEX TO NEXT ONE 00353000
  361. A R7,VMCUSTRT POINT TO VCUBLOK 00354000
  362. USING VCUBLOK,R7 @V240820 00355000
  363. STH R0,VCUDVINT CLEAR PENDING DEVICE INTERRUPT STATUS 00356000
  364. STH R0,VCUINTS CLEAR CU INTERRUPT STATUS 00357000
  365. MVI VCUSTAT,X'00' CLEAR CONTROL UNIT STATUS 00358000
  366. SR R3,R3 ZERO VCUDVTBL INDEX 00359000
  367. RESNDV LH R8,VCUDVTBL(R3) LOAD NEXT DEVICE BLOK INDEX 00360000
  368. LTR R8,R8 DOES DEVICE EXIST ? 00361000
  369. BM RESXDV NO, INDEX TO NEXT ONE 00362000
  370. A R8,VMDVSTRT POINT TO VDEVBLOK 00363000
  371. USING VDEVBLOK,R8 @V240820 00364000
  372. LH R9,VMVTERM INDEX TO THE VIRT. CONS. @VA04020 00365000
  373. A R9,VMDVSTRT POINT TO VDEVBLOK FOR IT @VA04020 00366000
  374. CR R8,R9 IS IT THE VIRT. CONSOLE @VA04020 00367000
  375. BE CFPCALL YES, WE WANT TO FIRST MAKE SURE @VA03351 00368000
  376. * THAT ALL OUTSTANDING PAGING IS TAKEN 00369000
  377. * CARE OF BEFORE GOING TO DMKVDREL 00370000
  378. * TO RESET AND RELEASE THE DEVICE 00371000
  379. * AND DOING AWAY WITH THE VIRT CONS BLOCKS 00372000
  380. TM VMRSTAT,VMLOGOFF LOGGING OUT ?? @V200930 00373000
  381. BO RESLOG YES @V200930 00374000
  382. CFPCALL EQU * @VA03351 00375000
  383. CALL DMKCFPRD RESET DEVICE @V200930 00376000
  384. B RESXDV CONTINUE WITH NEXT DEVICE @V240820 00377000
  385. RESLOG EQU * RESET AS PART OF LOGOFF PROCESS @VM08908 00378000
  386. CALL DMKVDREL RESET AND RELEASE THE DEVICE @VM08908 00379000
  387. L R9,FFS X'FFFFFFFF' @VA01881 00380000
  388. STH R9,VCUDVTBL(R3) MARK DEVICE DETACHED @VA01881 00381000
  389. STH R9,VDEVADD @VA01881 00382000
  390. RESXDV BXLE R3,R4,RESNDV BRANCH IF MORE DEVICES ON THIS CU 00383000
  391. RESXCU BXLE R2,R4,RESNCU BRANCH IF MORE CONTROL UNITS ON THIS CHAN 00384000
  392. TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ? @VA13280 00384100
  393. BZ RESXCH NO, SKIP DEDICATED CHAN. CHECK @VA13280 00384200
  394. TM VCHSTAT,VCHDED IS THIS A DEDICATED CHANNEL ? @VA13280 00384300
  395. BZ RESXCH NO, SKIP DEDICATED CHAN. CHECK @VA13280 00384400
  396. *-------RESET DEDICATED CHANNEL FLAG IN RCHBLOK-------* 00384500
  397. L R9,VCHRCHAD GET RCHBLOK ADDRESS @VA13280 00384600
  398. NI RCHSTAT-RCHBLOK(R9),X'FF'-RCHDED @VA13280 00384700
  399. *DETACH CHANNEL MSG TO OPERATOR AT LOGOFF IF NO DET CMD ISSUED 00384710
  400. LR R3,R1 SAVE R1 TEMPORARILY @VA13588 00384720
  401. LH R1,RCHADD-RCHBLOK(R9) REAL CHANNEL ADDRESS @VA13588 00384730
  402. CALL DMKCVTBH CONVERT CHAN ADDR TO HEX @VA13588 00384740
  403. LR R9,R1 SAVE R1 TEMPORARILY @VA13588 00384750
  404. LA R0,DETDSIZE SEZE OF THE MSG @VA13588 00384760
  405. CALL DMKFREE GET FREE STORAGE @VA13588 00384770
  406. USING DETMSG,R1 TEMP ADDRESSABILITY @VA13588 00384780
  407. MVC DETMSG(DETSIZE1),=C'CHAN X DETACHED ' @VA13588 00384790
  408. MVC DETUSER(8),VMUSER THE USERID @VA13588 00384800
  409. STCM R9,B'0100',DETRADD CHANNEL NUMBER @VA13588 00384810
  410. LA R0,DETSIZE SIZE OF THE MESSAGE @VA13588 00384820
  411. CALL DMKQCNWT,PARM=NORET+OPERATOR WRITE TO OPERATOR @VA13588 00384830
  412. LA R0,DETDSIZE SIZE OF THE MSG @VA13588 00384840
  413. CALL DMKFRET FRET THE MSG STORAGE @VA13588 00384850
  414. DROP R1 DROP TEMP ADDRESSABILITY @VA13588 00384860
  415. SLR R0,R0 RESTORE R0 @VA13588 00384870
  416. LR R1,R3 RESTORE R1 @VA13588 00384880
  417. RESXCH BXLE R1,R4,RESNCH BRANCH IF MORE CHANNELS ON THIS MACHINE 00385000
  418. STC R0,VMPEND RESET SUMMARY PENDING FLAGS 00386000
  419. STH R0,VMIOINT CLEAR IO INTERRUPTS @V200198 00387000
  420. STH R0,VMIOACTV RESET ACTIVE IO MASK 00388000
  421. L R1,VMSTOR RESTORE VIRTUAL MEMORY SIZE. @V304635 00389000
  422. L R2,XRIGHT24 CLEAR TO MAXIMUN MEMORY SIZE. @V304635 00390000
  423. CL R0,VMSEG IS USER FULLY LOGGED ON @V304635 00391000
  424. BE NOTLOGED NO - SKIP PAGE RELEASE @V304635 00392000
  425. CALL DMKPGSPP RELEASE AREA DEFINED IN (R1-R2) @V304635 00393000
  426. CALL DMKPGSPO RELEASE ALL NAMED SYSTEMS @V304635 00394000
  427. CLC VMSTOR,VMSIZE WAS VIRTUAL STORAGE EXPANDED ? @V304635 00395000
  428. BE PASSREL YES - THEN BYPASS PAGE RELEASE @V304635 00396000
  429. SRL R1,12 DROP OF DISPLACEMENT @V304635 00397000
  430. L R2,VMSIZE PRESENT SIZE OF VM (EXPANDED) @V304635 00398000
  431. SRL R2,12 DROP OFF DISPLACEMENT @V304635 00399000
  432. BCTR R2,0 MINUS 1 PAGE FOR BLD @V304635 00400000
  433. CLR R1,R2 FIRST ADDR. > LAST ? @V304635 00401000
  434. BNL SKIPREL YES - SKIP CALL TO RELEASE PAGES @V304635 00402000
  435. SLL R1,16 POSITION FIRST PAGE TO RELEASE @V304635 00403000
  436. OR R1,R2 PUT BEGIN/ENDING ADDRESS TOGETHER@V304635 00404000
  437. CALL DMKBLDRL,PARM=DELPAGES FRET THE ADDRESS RANGE @V304635 00405000
  438. * IN R1 00406000
  439. SKIPREL L R1,VMSTOR NOW RESTORE VIRTUAL STORAGE SIZE @V304635 00407000
  440. ST R1,VMSIZE STORE BACK OLD MEMORY SIZE. @V304635 00408000
  441. SRL R1,12 DROP OFF DISPLACEMENT FOR BLD.. @V304635 00409000
  442. BCTR R1,R0 MINUS 1 PAGE @V304635 00410000
  443. CALL DMKBLDRT,PARM=OLDVMSEG+KEEPSEGS+NEWPAGES+NEWSEGS 00411000
  444. PASSREL DS 0H HERE IF 'VMSIZE' EQUALED 'VMSTOR'@V304635 00412000
  445. NOTLOGED DS 0H HERE IF USER NO FULLY LOGGED ON. @V304635 00413000
  446. NI VMRSTAT,255-VMIOWAIT MAKE SURE USER NOT IN IOWAIT 00414000
  447. L R2,VMPXINT START OF QUEUE @V200198 00415000
  448. LA R0,XINTSIZE SIZE OF EXTERNAL INTERRUPT BLOCK @V200198 00416000
  449. RESLOOP LTR R1,R2 ANYTHING? @V200198 00417000
  450. BZ RESEND FINIS... @V200198 00418000
  451. L R2,0(,R1) FETCH FORWARD CHAIN POINTER @V200198 00419000
  452. CALL DMKFRET RELEASE THE INTERRUPT BLOCK @V240820 00420000
  453. B RESLOOP AGAIN @V200198 00421000
  454. SPACE 00422000
  455. RESEND EQU * SETUP FOR ECMODE PENDING INTRPTS @V240820 00423000
  456. ST R1,VMPXINT SET CHAIN POINTER TO ZERO @V240820 00424000
  457. TM VMPSTAT,VMV370R ECMODE OPTION MACHINE ? @V240820 00425000
  458. BZR R10 NO -- RESET IS COMPLETE @V240820 00426000
  459. TM VMRSTAT,VMLOGOFF USER LOGGING OFF? @VA04200 00427000
  460. BOR R10 YES - RESET IS COMPLETE @VA04200 00428000
  461. LA R0,XINTSIZE STORAGE FOR EXTERNAL INTERRUPTS @V240820 00429000
  462. CALL DMKFREE ONE FOR TOD CLOCK COMPARATOR @V240820 00430000
  463. LR R3,R1 SAVE THE ADDRESS @V240820 00431000
  464. CALL DMKFREE ONE FOR THE CPU TIMER @V240820 00432000
  465. ST R1,XINTNEXT-XINTBLOK(,R3) CHAIN THE BLOCKS @V240820 00433000
  466. ST R3,VMPXINT CONNECT TO THE VMBLOK @V240820 00434000
  467. MVC XINTSORT-XINTBLOK(12,R3),CKCPEND SETUP CKC @V240820 00435000
  468. MVC XINTSORT-XINTBLOK(12,R1),CPTPEND SETUP CPT @V240820 00436000
  469. SLR R0,R0 ZERO CONSTANT @V240820 00437000
  470. ST R0,XINTNEXT-XINTBLOK(,R1) CLEAR POINTER @V240820 00438000
  471. BR R10 RESET IS NOW COMPLETE @V240820 00439000
  472. SPACE 00440000
  473. CKCPEND DC X'10400000',X'10040800',XL4'00' COMPARATOR @V240820 00441000
  474. CPTPEND DC X'10500000',X'10050400',XL4'00' CPU TIMER @V240820 00442000
  475. EJECT 00443000
  476. *. 00444000
  477. * SUBROUTINE NAME - 00445000
  478. * DMKCFPRD 00446000
  479. * 00447000
  480. * FUNCTION - 00448000
  481. * 00449000
  482. * RESET A VIRTUAL DEVICE. 00450000
  483. * 00451000
  484. * OPERATION - 00452000
  485. * 00453000
  486. * DMKCFPRD IS CALLED TO RESET A VIRTUAL DEVICE. ANY SENSE 00454000
  487. * BYTES, CSW STATUS, OR IOERBLOKS ARE RELEASED AND SET TO 00455000
  488. * ZERO. ACTIVE I/O, IF ANY, IS RESET VIA A CALL TO DMKIOSHA 00456000
  489. * (DEDICATED OR DASD DEVICES ONLY), OR TO THE APPROPRIATE 00457000
  490. * DEVICE HANDLER (DMKVSP, DMKVCA, DMKDIA, ETC.). 00458000
  491. * SPECIAL HANDLING IS AS FOLLOWS: 00459000
  492. * DIALED LINES OR DIALED GRAPHIC DEVICES ARE RELEASED 00460000
  493. * VIA A CALL TO DMKDIBDR. 00461000
  494. * VIRTUAL CTCA DEVICES ARE RESET VIA A CALL TO DMKVCARD. 00462000
  495. * VIRTUAL SPOOL INPUT DEVICES ARE CLOSED VIA A CALL TO 00463000
  496. * DMKVSPCR (CLOSE READER). 00464000
  497. * VIRTUAL SPOOL OUTPUT DEVICES ARE CLOSED VIA A CALL TO 00465000
  498. * DMKVSPCO (CLOSE OUTPUT). 00466000
  499. * DEDICATED REAL CTCA DEVICES ARE RESET VIA A REAL 'HDV' 00467000
  500. * ISSUED VIA A CALL TO DMKIOSQR. 00468000
  501. * DEDICATED DASD DEVICES WHICH SUPPORT RESERVE/RELEASE ARE 00469000
  502. * RELEASED VIA A CALL TO DMKIOSQR. 00470000
  503. * MINIDISKS WHICH REQUEST VIRTUAL RESERVE/RELEASE SUPPORT 00471000
  504. * ARE RELEASED SO THAT OTHER USERS WAITING FOR THE DEVICE 00472000
  505. * WILL RECEIVE A DEVICE END. 00473000
  506. * 00474000
  507. * 00475000
  508. * RESPONSES - 00476000
  509. * NONE 00477000
  510. * 00478000
  511. * ERROR MESSSAGES - 00479000
  512. * NONE 00480000
  513. *. 00481000
  514. EJECT 00482000
  515. DMKCFPRD RELOC RESET A VIRTUAL DEVICE 00483000
  516. USING VCHBLOK,R6 00484000
  517. USING VCUBLOK,R7 00485000
  518. USING VDEVBLOK,R8 00486000
  519. L R1,VDEVIOER GET POINTER TO ERROR BLOK 00487000
  520. LTR R1,R1 IS THERE ONE ?? 00488000
  521. BZ RESIOER NO -- GO CLEAR WORK REGISTER 00489000
  522. TM VDEVSTAT,VDEVDED DEDICATED DEVICE 00490000
  523. BO GETIOER YES -- SENSE BYTES IN IOERBLOK 00491000
  524. TM VDEVTYPC,CLASURI+CLASURO UNIT RECORD ?? 00492000
  525. BNZ RESIOER YES -- SENSE BYTES IN VDEVBLOK 00493000
  526. CLI VDEVTYPE,TYP3215 CONSOLE ?? 00494000
  527. BE RESIOER YES -- SENSE BYTES IN VDEVBLOK 00495000
  528. SPACE 00496000
  529. GETIOER BAL R5,FRTIOER2 RETURN THE IOERBLOK @VA00884 00497000
  530. SPACE 00498000
  531. RESIOER SR R0,R0 CLEAR WORK REGISTER 00499000
  532. ST R0,VDEVIOER CLEAR ERROR FIELD 00500000
  533. NI VDEVFLAG,255-VDEVUC TURN OFF UNIT CHECK FLAG 00501000
  534. ST R0,VDEVCSW ZERO THE VIRTUAL CSW 00502000
  535. ST R0,VDEVCSW+4 .. 00503000
  536. SLR R2,R2 CLEAR @VA08629 00503100
  537. ICM R2,7,VDEVIO ANY PENDING I/O? @VA08629 00503200
  538. BZ CHKPEND NO, CONTINUE @VA08629 00503300
  539. LR R1,R2 IOBLOK ADDRESS TO R1 @VA08629 00503400
  540. CFPRUNQ L R2,IOBFPNT-IOBLOK(R1) ADDRESS OF NEXT ON QUEUE @VA08629 00503500
  541. LA R0,IOBSIZE PREPARE TO FRET IOBLOKS @VA08629 00503600
  542. CALL DMKFRET RELEASE BLOCK @VA08629 00503700
  543. LTR R2,R2 ANY MORE? @VA08629 00503800
  544. BZ CFPCLR NO @VA08629 00503900
  545. LR R1,R2 PREPARE TO GO THRU LOOP AGAIN @VA08629 00504000
  546. B CFPRUNQ REPEAT @VA08629 00504100
  547. CFPCLR STCM R2,7,VDEVIO CLEAR CHAIN POINTER @VA08629 00504200
  548. CHKPEND TM VDEVSTAT,VDEVPEND+VDEVCHAN+VDEVCUE ANYTHING @VA08629 00504300
  549. * PENDING? 00504400
  550. BNZ RESPEND YES -- CLEAR ALL PENDING INTERRUPTS 00505000
  551. RESCONT EQU * TEST FOR RESET MSS DEVICE @V60B6B8 00506010
  552. TM PSAMSS,MSSPRES IS MSS DEFINED IN THIS SYSTEM @V60B6B8 00506020
  553. BZ NOTVUA CAN'T BE A VUA @V60B6B8 00506030
  554. TM VDEVTYPC,CLASDASD @VA11970 00506032
  555. BNO NOTVUA @VA11970 00506034
  556. L R1,VDEVREAL GET RDEVBLOK @V60B6B8 00506040
  557. USING RDEVBLOK,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00506050
  558. CLI RDEVCLAS,CLASDASD IS THIS A DASD DEVICE @V60B6B8 00506060
  559. BNE NOTVUA CAN'T BE A VUA @V60B6B8 00506070
  560. CLI RDEVTYPE,TYP3330 IS IT A 3330 @V60B6B8 00506080
  561. BNE NOTVUA CAN'T BE A VUA @V60B6B8 00506090
  562. TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A VUA @V60B6B8 00506100
  563. BZ NOTVUA NOPE @V60B6B8 00506110
  564. CALL DMKSSUCF @VA11455 00506121
  565. NOTVUA EQU * PROCESS OTHER DEVICE STATUS @V60B6B8 00506130
  566. TM VDEVSTAT,VDEVBUSY IS THE DEVICE BUSY ? @V60B6B8 00506140
  567. BO RESBUSY BRANCH IF YES 00507000
  568. TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00508000
  569. BO DEDDEV YUP, GO CHECK IT OUT @V407438 00509000
  570. TM VDEVTYPC,CLASURI+CLASURO+CLASTERM SPOOLING DEVICE ? 00510000
  571. BNZ RESSPOL YES 00511000
  572. CLI VDEVTYPC,CLASSPEC MAYBE VIRTUAL CHAN-TO-CHAN ADAPTER 00512000
  573. BE RESCTCA IF YES - SPECIAL HANDLING 00513000
  574. B CHKVRES GO CHECK VIRT RESERVED MDISK @V407438 00514000
  575. SPACE 00515000
  576. DEDDEV EQU * NON BUSY DEDICATED DEVICE @V407438 00516000
  577. TM VDEVTYPC,CLASTERM+CLASGRAF DIAL TYPE DEVICE? @V407438 00517000
  578. BNZ RESDIAL YUP, GO HANDLE @V407438 00518000
  579. TM VDEVTYPC,CLASDASD+CLASTAPE IS THIS TAPE OR DASD?@V407438 00519000
  580. BNZ REALREL YUP, GO HANDLE @V407438 00520000
  581. LA R0,CLASSPEC*256+TYPCTCA IS IT REAL CTCA?? @V407438 00521000
  582. CH R0,VDEVTYPC ... @V407438 00522000
  583. BE RESRCTC YES, GO HANDLE. @V407438 00523000
  584. LA R0,CLASSPEC*256+TYP3851 IS IT MSC PORT ? @V407466 00524000
  585. CH R0,VDEVTYPC ... @V407466 00525000
  586. BE SUSPMSC YES, ISSUE SUSPEND ORDER @V407466 00526000
  587. B TESTDED NOPE, BR. @V407438 00527000
  588. EJECT 00528000
  589. TESTDED EQU * @VA03191 00529000
  590. SWITCH SWITCH TO MAIN PROCESSOR @V407510 00530000
  591. L R9,VDEVREAL LOAD REAL DEV BLOK @VA03191 00531000
  592. USING RDEVBLOK,R9 @VA03191 00532000
  593. L R10,RDEVAIOB LOAD ACTIVE IOBLOK @VA03191 00533000
  594. USING IOBLOK,R10 @VA03191 00534000
  595. LTR R10,R10 IS THERE ACTIVE IOB ON REAL DEV? @VA03191 00535000
  596. BZ RESEXIT NO--EXIT @VA03191 00536000
  597. TM IOBSPEC,IOBUNSL IS IT UNSL INT? @VA03191 00537000
  598. BO RESDED YES--TRY TO HALT THE IO @VA03191 00538000
  599. RESEXIT EXIT RETURN TO THE CALLER 00539000
  600. SPACE 2 00540000
  601. RESDIAL EQU * CHECK TO DROP DIALED LINE 00541000
  602. TM VDEVFLAG,VDEVDIAL CONNECTED VIA 'DIAL' ? 00542000
  603. BZ TESTDED NO--NOT HANDLED HERE @VA03191 00543000
  604. CALL DMKDIBDR DROP THE LINE @VA13704 00544000
  605. B RESEXIT AND NOW EXIT 00545000
  606. EJECT 00546000
  607. SUSPMSC LA R0,SUSPENDL ACQ. IOBLOK PLUS EXTENSION @V407466 00547000
  608. CALL DMKFREE ... @V407466 00548000
  609. LR R10,R1 R10 IOBLOK ADDRESSABILITY @V407466 00549000
  610. USING SUSPEND,R10 00550000
  611. XC SUSPEND(IOBSIZE*8),SUSPEND CLEAR IOBLOK @V407466 00551000
  612. MVC MSC87A(MSCL),MSC87B MOVE CCWS TO IOB EXTENSION @V407466 00552000
  613. LA R1,MSC87A RELOCATE CCW ADDRESSES @V407466 00553000
  614. L R0,MSC87A ... @V407466 00554000
  615. ALR R0,R1 ADJUST ADDRESS @V407466 00555000
  616. ST R0,MSC87A ... @V407466 00556000
  617. USING IOBLOK,R10 RE-ESTABLISH ADDRESSABILITY 00557000
  618. ST R1,IOBCAW CHANNEL PROGRAM ADDRESS @V407466 00558000
  619. MVC IOBUSER,ASYSVM CHARGE IT TO THE SYSTEM @V407466 00559000
  620. LA R1,SUSPDONE RETURN ADDRESS AFTER I/O @V407466 00560000
  621. ST R1,IOBIRA ... @V407466 00561000
  622. LA R0,CPEXSIZE GET A CPEXBLOK @V407466 00562000
  623. CALL DMKFREE ACQUIRE STORAGE FOR BLOCK @V407466 00563000
  624. ST R1,IOBMISC2 SAVE CPEXBLOK ADDRESS @V407466 00564000
  625. USING CPEXBLOK,R1 00565000
  626. STM R0,R15,CPEXR0 SAVE REGS ACROSS CALL TO IOS @V407466 00566000
  627. DROP R1 00567000
  628. L R8,VDEVREAL RDEVBLOK ADDRESS FOR IOS CALL @V407466 00568000
  629. CALL DMKIOSQR PERFORM I/O REQUEST @V407466 00569000
  630. GOTO DMKDSPCH DMKDSPCH GO OFF TO DISPATCHER @V407466 00570000
  631. SPACE 00571000
  632. SUSPDONE EQU * 00572000
  633. USING *,R12 00573000
  634. L R1,IOBMISC2 RESTORE CPEXBLOK ADDRESS @V407466 00574000
  635. USING CPEXBLOK,R1 ADDRESSABILITY 00575000
  636. LM R0,R15,CPEXR0 RESTORE CFP'S REGISTERS @V407466 00576000
  637. DROP R1 00577000
  638. USING DMKCFP,R12 00578000
  639. LR R1,R11 GET ADDRESS OF CALLER'S VMBLOK @V4M0007 00579000
  640. L R11,ASYSVM REPLACE R11 WITH SYSTEM VMBLOK - @V4M0007 00580000
  641. * R11 VALUE WHEN IOB IS UNSTACKED @V4M0007 00581000
  642. SWTCHVM SWITCH BACK TO CALLER'S VMBLOK @V4M0007 00582000
  643. TM IOBSTAT,IOBFATAL+IOBCC3 I/O SUCCESSFUL?? @V407466 00583000
  644. BZ IOBONLY YES, FRET IOB ONLY @V407466 00584000
  645. BAL R5,FRETIOER RELEASE IOERBLOK IF THERE IS ONE @V407466 00585000
  646. IOBONLY LA R0,CPEXSIZE RELEASE CPEXBLOK @V407466 00586000
  647. L R1,IOBMISC2 ADDRESS OF CPEXBLOK @V407466 00587000
  648. CALL DMKFRET RELEASE BLOCK @V407466 00588000
  649. LA R0,SUSPENDL SIZE OF IOB PLUS EXTENSION @V407466 00589000
  650. LR R1,R10 BLOCK ADDRESS TO R1 @V407466 00590000
  651. CALL DMKFRET RELEASE STORAGE @V407466 00591000
  652. B RESEXIT EXIT @V407466 00592000
  653. EJECT 00593000
  654. RESPEND STH R0,VDEVINTS CLEAR DEVICE INTERRUPT STATUS 00594000
  655. TM VDEVSTAT,VDEVCUE CUE PENDING FOR THIS DEVICE ? 00595000
  656. BZ RESPNDCH NO - CHECK FOR CHANNEL END 00596000
  657. NI VCUSTAT,255-(VCUCUEPN+VCUACTV) CLEAR OUT FLAGS @VA03150 00597000
  658. NI VCUINTS,255-CUE ... 00598000
  659. RESPNDCH TM VDEVSTAT,VDEVCHAN CHANNEL END FOR THIS DEVICE ? 00599000
  660. BZ RESPNDEV NO - GO CLEAR DEVICE INTERRUPTS 00600000
  661. NI VCUSTAT,255-(VCUCEPND+VCUACTV) CLEAR OUT FLAGS @VA03818 00601000
  662. NI VCHSTAT,255-VCHCEPND ... 00602000
  663. STH R0,VCHCEDEV ... 00603000
  664. RESPNDEV NI VDEVSTAT,255-(VDEVPEND+VDEVCHAN+VDEVCUE) 00604000
  665. L R1,=A(DMKVIOMK) LOAD ADDRESS OF INTERRUPT MASKS 00605000
  666. LH R2,VDEVADD LOAD VIRTUAL DEVICE ADDRESS 00606000
  667. AR R2,R2 MULTIPLY IT BY 2 00607000
  668. LA R2,0(R1,R2) POINT TO THE PROPER MASK 00608000
  669. XC VCUDVINT,0(R2) TURN OFF PENDING FLAG IN VCUBLOK 00609000
  670. BNZ RESCONT BRANCH IF OTHER INTERRUPTS PENDING 00610000
  671. LH R2,VCUADD LOAD VIRTUAL CONTROL UNIT ADDRESS 00611000
  672. SRL R2,3 MULTIPLY IT BY 2 00612000
  673. LA R2,0(R1,R2) POINT TO THE PROPER MASK 00613000
  674. XC VCHCUINT,0(R2) TURN OFF PENDING FLAG IN VCHBLOK 00614000
  675. BNZ RESCONT BRANCH IF OTHER INTERRUPTS PENDING 00615000
  676. LH R2,VCHADD LOAD VIRTUAL CHANNEL ADDRESS 00616000
  677. SRL R2,7 MULTIPLY IT BY 2 00617000
  678. LA R2,0(R1,R2) POINT TO THE PROPER MASK 00618000
  679. XC VMIOINT,0(R2) TURN OFF CHANNEL PENDING FLAG 00619000
  680. BNZ RESCONT MORE CHANNELS PENDING 00620000
  681. NI VMPEND,X'FF'-VMIOPND TURN OFF SUMMARY PENDING FLAG 00621000
  682. B RESCONT CONTINUE 00622000
  683. EJECT 00623000
  684. RELTD TM VDEVTYPC,CLASDASD+CLASTAPE IS THIS TAPE OR DASD?@V407438 00624000
  685. BZ RESEXIT NOPE, DONE @V407438 00625000
  686. TM VDEVSTAT,VDEVDED IS IT DEDICATED? @V407438 00626000
  687. BO REALREL YUP, GO HANDLE DEDICATED CASE @V407438 00627000
  688. CHKVRES TM VDEVFLG2,VDEVRES MDISK VIRT RESERVED FOR USER @V407438 00628000
  689. BO REALREL YES, GO DO REAL RELEASE (MAYBE) @V407438 00629000
  690. NI VDEVFLG2,X'FF'-VDEVODE DON'T OWE ANY DEV END @V407438 00630000
  691. TM VDEVFLG2,VDEVCPEX WAITING FOR VIRT RELEASE? @V407438 00631000
  692. BZ RESEXIT NOPE, CONTINUE @V407438 00632000
  693. CALL DMKSCNVD GET VIRT ADDRESS IN CCU FORM @V407438 00633000
  694. LR R0,R1 SAVE CCU IN R0 @V407438 00634000
  695. L R5,VDEVRRB GET VRRBLOK @V407438 00635000
  696. USING VRRBLOK,R5 ADDRESS THE VRRBLOK @V407438 00636000
  697. USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK @V407438 00637000
  698. LA R1,VRRCPEX-(CPEXFPNT-CPEXBLOK) ADDRSS THE ANCHOR@V407438 00638000
  699. NEXTCPEX LR R2,R1 SAVE THE PREVIOUS CPEXBLOK ADDR @V407438 00639000
  700. L R1,CPEXFPNT GET NEXT CPEXBLOK ON THE QUEUE @V407438 00640000
  701. LTR R1,R1 IS THERE ONE? @V407438 00641000
  702. BNZ CFP1OK YUP, GO CHECK IT OUT @V407438 00642000
  703. ABEND 1 SOMEBODY GOOFED @V407438 00643000
  704. CFP1OK CL R11,CPEXR11 IS THIS THE RIGHT USER? @V407438 00644000
  705. BNE NEXTCPEX NOPE, KEEP LOOKING @V407438 00645000
  706. CL R0,CPEXMISC IS THIS THE RIGHT VIRT DEVICE? @V407438 00646000
  707. BNE NEXTCPEX NOPE, KEEP LOOKING @V407438 00647000
  708. MVC CPEXFPNT-CPEXBLOK(4,R2),CPEXFPNT DEQUE THIS BLOK@V407438 00648000
  709. OI CPEXADD,X'80' MAKE RETURN ADDR NEG. FOR WAITEE @V407438 00649000
  710. CALL DMKSTKCP STACK THE CPEXBLOK ON THE DSP Q @V407438 00650000
  711. LA R0,CPEXSIZE NOW GET ANOTHER CPEXBLOK FOR US @V407438 00651000
  712. CALL DMKFREE TO SYNCHRONIZE THE ONE WE JUST @V407438 00652000
  713. STM R0,R15,CPEXR0 STACKED. @V407438 00653000
  714. LA R0,RESYNCH RETURN ADDRESS @V407438 00654000
  715. ST R0,CPEXADD FOR WHEN SYNCHRONIZATION COMPLETE@V407438 00655000
  716. CALL DMKSTKCP STACK THIS CPEX BEHIND THE OTHER @V407438 00656000
  717. GOTO DMKDSPCH WAIT ON RES/REL RELATED I/O RESET@V407438 00657000
  718. SPACE 00658000
  719. RESYNCH NI VMRSTAT,X'FF'-(VMIDLE+VMEXWAIT) ALLOW BACK IN Q @V407438 00659000
  720. NI VDEVFLG2,X'FF'-(VDEVCPEX+VDEVODE) NO CPEX, NO DE@V407438 00660000
  721. B RESEXIT DONE. @V407438 00661000
  722. DROP R1,R5 NO MORE CPEXBLOK OR VRRBLOK @V407438 00662000
  723. SPACE 00663000
  724. REALREL EQU * HERE TO DO A REAL RELEASE @V407438 00664000
  725. TM VDEVFLAG,VDEVRSRL IS RELEASE A VALID CCW? @V407438 00665000
  726. BZ VIRTREL NOPE, GO DO VIRT RELEASE (MAYBE) @V407438 00666000
  727. LA R0,IOBSIZE GET AN IOBLOK FOR THE I/O @VA04026 00667000
  728. CALL DMKFREE . . . FROM FREE STORAGE @VA04026 00668000
  729. LR R10,R1 NORMAL ADDRESSABILITY @VA04026 00669000
  730. USING IOBLOK,R10 . . . @VA04026 00670000
  731. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IT OUT @VA04026 00671000
  732. LA R0,(RCWCCW+8-RCWTASK)/8 RCWTASK SIZE @VA04026 00672000
  733. CALL DMKFREE GET AN RCWTASK FOR THE CCW @VA04026 00673000
  734. USING RCWTASK,R1 TEMPORARILY . . . @VA04026 00674000
  735. XC RCWTASK(RCWCCW-RCWTASK),RCWTASK @VA04026 00675000
  736. MVC RCWHEAD(2),FFS FILL IN X'FFFF' HEADER FLAG @VA04026 00676000
  737. MVC RCWCCW(8),=X'9400000030000018' RELEASE CCW @VA04026 00677000
  738. TM VDEVTYPC,CLASDASD IS THIS A DASD DEVICE? @V407438 00678000
  739. BO *+8 YUP, ALL SET FOR X'94' RELEASE @V407438 00679000
  740. MVI RCWCCW,X'D4' NOPE, THEN SET FOR TAPE RELEASE @V407438 00680000
  741. STH R0,RCWCCNT RCWTASK SIZE IN DBL-WDS @VA04026 00681000
  742. MVI RCWRCNT+1,X'01' ONE REAL CCW @VA04026 00682000
  743. LA R1,RCWCCW POINT TO THE RELEASE CCW @VA04026 00683000
  744. DROP R1 FINISHED FOR NOW @VA04026 00684000
  745. ST R1,IOBCAW START OF THE CHANNEL PROGRAM @VA04026 00685000
  746. MVC IOBUSER(4),ASYSVM CHARGE IT TO THE SYSTEM @VA04026 00686000
  747. L R1,=A(DMKIOSRW) IOS WILL FRET THE STORAGE @VA04026 00687000
  748. ST R1,IOBIRA . . .WHEN THE I/O IS COMPLETE @VA04026 00688000
  749. LR R1,R8 SAVE VDEVBLOK ADDRESS @V407438 00689000
  750. L R8,VDEVREAL LET R8 = RDEVBLOK FOR DMKIOS @VA04026 00690000
  751. CALL DMKIOSQR RELEASE THE DISK DRIVE @VA04026 00691000
  752. LR R8,R1 RESTORE VDEVBLOK ADDRESS @V407438 00692000
  753. VIRTREL EQU * HERE TO DO A VIRTUAL RELEASE @V407438 00693000
  754. TM VDEVSTAT,VDEVDED IS DISK/TAPE DEDICATED? @V407438 00694000
  755. BO RESEXIT YUP, DONE. (ONLY MINIDISKS LEFT) @V407438 00695000
  756. TM VDEVFLG2,VDEVRRF MDISK WITH RES/REL FEATURE? @V407438 00696000
  757. BZ RESEXIT NOPE, DONE, BR. @V407438 00697000
  758. L R5,VDEVRRB GET ADDR OF VRRBLOK @V407438 00698000
  759. USING VRRBLOK,R5 ADDRESS THE VRRBLOK @V407438 00699000
  760. NI VDEVFLG2,X'FF'-VDEVRES VIRT DEV NO LONGER RESV @V407438 00700000
  761. NI VRRSTAT,X'FF'-VRRRES DITTO @V407438 00701000
  762. NXTCPEX L R1,VRRCPEX GET FIRST/NEXT CPEXBLOK WAITING @V407438 00702000
  763. LTR R1,R1 IS ANYONE WAITING FOR THE MDISK? @V407438 00703000
  764. BZ NXTIOB NOPE, GO TRY DEVICE END INTS @V407438 00704000
  765. USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK @V407438 00705000
  766. L R0,CPEXFPNT GET THE ADDRESS OF THE NEXT ONE @V407438 00706000
  767. ST R0,VRRCPEX AND MAKE IT FIRST ON CHAIN @V407438 00707000
  768. CALL DMKSTKCP STACK THE UNCHAINED CPEXBLOK @V407438 00708000
  769. B NXTCPEX CONTINUE UNTIL ALL UNSTACKED @V407438 00709000
  770. DROP R1,R5 NO MORE CPEXBLOK OR VRRBLOK @V407438 00710000
  771. SPACE 00711000
  772. NXTIOB L R8,VDEVLINK GET NEXT VDEVBLOK USING THIS MDSK@V407438 00712000
  773. CL R8,SAVER8 SAME ONE WE ENTERED ON? @V407438 00713000
  774. BE RESEXIT YUP, WERE DONE, BR. @V407438 00714000
  775. TM VDEVFLG2,VDEVODE DO WE OWE THIS VDEV A DE INT @V407438 00715000
  776. BZ NXTIOB NOPE, LOOK THROUGH ALL VDEVBLOKS @V407438 00716000
  777. NI VDEVFLG2,X'FF'-VDEVODE WE DON'T OWE IT ANYMORE @V407438 00717000
  778. LA R0,IOBSIZE GET AN IOBLOK @V407438 00718000
  779. CALL DMKFREE FROM FREE STORAGE @V407438 00719000
  780. LR R10,R1 NORMAL ADDRESSABILITY PLEASE @V407438 00720000
  781. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR OUT THE BLOCK @V407438 00721000
  782. ST R1,IOBLINK AS THOUGH IT CAME FROM IOS @V407438 00722000
  783. MVI IOBCSW+4,DE ENDING STATUS = DEVICE END @V407438 00723000
  784. L R0,=A(DMKVIOIN) ADDRESS OF THE INT. HANDLER @V407438 00724000
  785. ST R0,IOBIRA THATS WHERE WE WANT IT TO GO @V407438 00725000
  786. L R11,VDEVUSER VDEVBLOK OWNER FOR SCN & IOB @V407466 00726000
  787. ST R11,IOBUSER IOB IS FOR THE DE RECEIVER AV407438 00727000
  788. CALL DMKSCNVD GET THE VIRTUAL CCU PLEASE @V407438 00728000
  789. L R11,SAVER11 RESTORE CALLER'S R11 @V407466 00729000
  790. STH R1,IOBVADD PUT CCU IN THE IOB TOO. @V407438 00730000
  791. CALL DMKSTKIO THAT SHOULD DO IT... @V407438 00731000
  792. B NXTIOB CONTINUE WITH THE NEXT NOW. @V407438 00732000
  793. SPACE 00733000
  794. EJECT 00734000
  795. RESRCTC EQU * IF REAL CTCA, ISSUE REAL HALT I/O 00735000
  796. LA R0,CLASSPEC*256+TYPCTCA DEVICE CLASS, TYPE 00736000
  797. CH R0,VDEVTYPC IS THIS A DEDICATED CTCA ? 00737000
  798. BNE TESTDED NO--NOT HANDLED HERE @VA03191 00738000
  799. L R9,VDEVREAL POINT TO RDEVBLOK @VA06017 00739000
  800. USING RDEVBLOK,R9 @VA06017 00740000
  801. ICM R10,B'1111',RDEVAIOB IS THERE AN ACTIVE IOB @VA06017 00741000
  802. BNZ RESDED YES ISSUE HALT I/O @VA06017 00742000
  803. DROP R9 @VA06017 00743000
  804. LR R15,R8 COPY THE VDEVICE ADDR @VA00884 00744000
  805. SL R15,VMDVSTRT COMPUTE RELATIVE VDEV ADDR @VA00884 00745000
  806. ST R15,SAVEWRK8 SAVE IT @VA00884 00746000
  807. L R8,VDEVREAL POINT TO REAL DEVICE BLOCK 00747000
  808. LA R0,IOBSIZE FREE STORAGE FOR AN IOBLOK 00748000
  809. CALL DMKFREE ... 00749000
  810. LR R10,R1 ADDRESS VIA GR10 00750000
  811. USING IOBLOK,R10 00751000
  812. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR OUT THE ENTIRE BLOCK 00752000
  813. ST R11,IOBUSER SAVE VMBLOCK ADDR @VA00884 00753000
  814. ST R8,IOBMISC SAVE THE RDEVBLOK ADDRESS @VA02130 00754000
  815. ST R13,IOBMISC2 . . .AND THE SAVEAREA ADDRESS @VA02130 00755000
  816. OI IOBSPEC,IOBHIO MAKE THIS A HALT I/O 00756000
  817. LA R15,CTCAIRA INTERRUPT RETURN AFTER HALT I/O @VA02130 00757000
  818. B STOREIRA SET IOBIRA AND CALL DMKIOSQR @VA02130 00758000
  819. SPACE 2 00759000
  820. USING *,R12 HERE ON COMPLETION ... @VA00884 00760000
  821. CTCAIRA SL R12,=A(CTCAIRA-DMKCFP) ESTABLISH ADDRESSABILITY @VA00884 00761000
  822. USING DMKCFP,R12 (WHEW) @VA00884 00762000
  823. L R1,IOBIOER POINT TO IOERBLOK @VA03831 00763000
  824. LTR R1,R1 IS THERE ONE? @VA03831 00764000
  825. BZ CTCATIO NO @VA03831 00765000
  826. BAL R5,FRTIOER2 YES - FRET IT @VA03831 00766000
  827. ST R1,IOBIOER CLEAR THE IOERBLOK POINTER @VA00884 00767000
  828. CTCATIO STH R1,IOBFLAG ZERO IOBFLAG & IOBSTAT @VA03831 00768000
  829. MVI IOBSPEC,IOBTIO NOW DO A TIO TO CLEAR ANY INT. @VA00884 00769000
  830. L R8,IOBMISC PICK UP RDEVBLOK ADDR FOR DMKIOS @VA02130 00770000
  831. LA R15,CFPIO SET IRA FOR ENTRY AFTER I/O @VA00884 00771000
  832. STOREIRA ST R15,IOBIRA STORE THE INT RETURN ADD @VA00884 00772000
  833. CALL DMKIOSQR SCHEDULE A HALT I/O @VA00884 00773000
  834. GOTO DMKDSPCH WAIT FOR STATUS @VA00884 00774000
  835. EJECT 00775000
  836. RESBUSY TM VDEVSTAT,VDEVCHBS IS THE VIRTUAL SUBCHANNEL BUSY ? 00776000
  837. BZ RESSTAT NO, DO NOT RESET THE CHANNEL AND CU 00777000
  838. NI VCUSTAT,255-(VCUBUSY+VCUCHBSY+VCUACTV) TURN OFF @VA03150 00778000
  839. * CONTROL UNIT BUSY FLAGS 00779000
  840. NI VCHSTAT,255-VCHBUSY TURN OFF CHANNEL BUSY FLAG 00780000
  841. RESSTAT TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00781000
  842. BO RESHALT BRANCH IF YES 00782000
  843. TM VDEVTYPC,CLASURI+CLASURO SPOOL DEVICE ? 00783000
  844. BNZ RESSPOL BRANCH IF YES 00784000
  845. NI VDEVSTAT,255-(VDEVBUSY+VDEVCHBS) FLAG DEVICE NOT BUSY 00785000
  846. CLI VDEVTYPE,TYP3215 CONSOLE ?? 00786000
  847. BE RESEXIT YES -- DMKCNS WILL HANDLE 00787000
  848. RESHALT L R9,VDEVREAL LOAD THE REAL DEVICE BLOCK ADDRESS 00788000
  849. NI VDEVSTAT,255-(VDEVBUSY+VDEVCHBS) FLAG DEVICE NOT BUSY 00789000
  850. USING RDEVBLOK,R9 00790000
  851. L R10,VDEVIOB GET ACTIVE IOBLOK 00791000
  852. USING IOBLOK,R10 USE STANDARD ADDRESSABILITY 00792000
  853. LTR R10,R10 ACTIVE CHANNEL PROGRAM ? 00793000
  854. BZ RELTD NOPE, TEST FOR RELEASE PROCESSING@V407438 00794000
  855. RESDED OI IOBFLAG,IOBRES FLAG IOB AS RESET @VA03191 00795000
  856. CL R11,AVMREAL IS USER IN V=R AREA @VA00996 00796000
  857. BNE NOTVRIOB NO - @VA00996 00797000
  858. L R15,IOBMISC WAS THE CCW'S TRANSLATED ? @VA00996 00798000
  859. LTR R15,R15 IOBMISC IS NON-ZERO IF THEY WERE @VA00996 00799000
  860. BNZ *+8 BRANCH IF TRANSLATED. @VA00996 00800000
  861. ST R15,IOBCAW INDICATE NO CALL TO DMKUNT. @VA00996 00801000
  862. NOTVRIOB LA R15,CFPIO ADDRESS OF NEW IRA RETURN @VA00996 00802000
  863. AIF (&ISAM).CHKUNT **AIF** 00803000
  864. ST R15,IOBIRA AND SAVE IN THE IOBLOK @VA02130 00804000
  865. AGO .NOTISM @VA02130 00805000
  866. .CHKUNT L R14,=A(DMKUNTIS) CHECK FOR ISAM IOBLOK @VA02130 00806000
  867. CL R14,IOBIRA IS THIS AN ISAM CCW STRING ? @VA02130 00807000
  868. BNE NOTISAM NO -- JUST RESET THE IRA @VA02130 00808000
  869. ST R15,IOBMISC COME HERE AFTER DMKUNTIS @VA02130 00809000
  870. B SAVESAVE @VA02130 00810000
  871. NOTISAM EQU * RESET IOBIRA FOR RETURN HERE @VA02130 00811000
  872. ST R15,IOBIRA SAVE ADDRESS FOR RETURN @VA02130 00812000
  873. SAVESAVE EQU * SAVE ADDRESS OF OUR SAVEAREA @VA02130 00813000
  874. .NOTISM ANOP 00814000
  875. ST R13,IOBMISC2 SAVEAREA ADDRESS FOR LATER USE @VA02130 00815000
  876. TM VDEVTYPC,CLASTERM+CLASSPEC TERMINAL OR CTCA ? 00816000
  877. BZ CKACTIVE NO- 0.K. TO HALT 00817000
  878. TM VDEVSTAT,VDEVDED HAS THE CONNECTION BEEN MADE 00818000
  879. BZ CKVIRT NO - GO SEE IF IT HAS BEEN STARTED 00819000
  880. SPACE 00820000
  881. CKACTIVE EQU * HERE TO HALT AN ACTIVE I/O REQUEST @VA04182 00821000
  882. SL R8,VMDVSTRT REMEMBER THE DISPLACEMENT OF THE VDEVBLOK 00822000
  883. ST R8,SAVEWRK8 IN THE SAVEAREA 00823000
  884. LR R8,R9 POINT TO THE REAL DEVICE BLOCK WITH R8 00824000
  885. DROP R9 @VA03831 00825000
  886. CALL DMKIOSHA HALT THE ACTIVE DEVICE 00826000
  887. GOTO DMKDSPCH WAIT FOR THE IOB TO BE UNSTACKED 00827000
  888. EJECT 00828000
  889. CKVIRT EQU * FIND OUT IF THE DIAL PROCESS HAS STARTED 00829000
  890. CLI VDEVTYPC,CLASSPEC SPECIAL-CLASS DEVICE ? 00830000
  891. BE RESSPEC YES - CHECK FOR CTCA 00831000
  892. TM VDEVFLAG,VDEVDIAL STARTED TO DIAL ? 00832000
  893. BO CFPWAIT YES - WAIT FOR I/O TO COMPLETE 00833000
  894. RESVIRT NI VDEVFLAG,X'FF'-VDEVENAB DEVICE NO LONGER ENABLED .. 00834000
  895. L R15,IOBUSER GET THE IOB OWNER @VA03161 00835000
  896. LTR R15,R15 IS THERE ANY? @VA03161 00836000
  897. BNZ *+8 YES--CONTINUE @VA03161 00837000
  898. ST R11,IOBUSER MAKE SURE OWNER IS THERE @VA03161 00838000
  899. ST R10,IOBLINK THIS IS THE ONLY IOBLOK 00839000
  900. CALL DMKSTKIO STACK THE IOBLOK FOR PROCESSING 00840000
  901. SPACE 00841000
  902. CFPWAIT SL R8,VMDVSTRT REMEMBER DISPLACEMENT OF VDEVBLOK 00842000
  903. ST R8,SAVEWRK8 IN THE SAVEAREA 00843000
  904. GOTO DMKDSPCH AND EXIT TO AWAIT COMPLETION ON I/O ... 00844000
  905. SPACE 2 00845000
  906. CFPIO EQU * HERE AFTER IOBLOK HAS BEEN UNSTACKED 00846000
  907. USING *,R12 TEMPORARY ADDRESSABILITY VIA IOBIRA 00847000
  908. SL R12,=A(CFPIO-DMKCFP) REESTABLISH STANDARD 00848000
  909. USING DMKCFP,R12 ADDRESSABILITY 00849000
  910. L R13,IOBMISC2 PICK POINTER TO SAVE AREA @VA02130 00850000
  911. L R8,SAVEWRK8 GET DISPLACEMENT OF VDEVBLOK 00851000
  912. AL R8,VMDVSTRT AND POINT TO VDEVBLOK 00852000
  913. L R9,IOBLINK SAVE LINK FIELD 00853000
  914. TM IOBSPEC,IOBTIO+IOBHIO WAS THIS REALLY A START I/O ? 00854000
  915. BNZ FRETIOB NO -- JUST FRET THE IOBLOK 00855000
  916. CLR R9,R10 IS THIS THE ORIGINAL IOBLOK ?? 00856000
  917. BNE FRETIOB NO -- SIMPLY GET RID OF IT 00857000
  918. TM VMDSTAT,VMTIO WAS USER IN TIO BUSY LOOP 00858000
  919. BNO CKDIAG NO- BRANCH 00859000
  920. CLI VDEVTYPC,CLASTERM SLOW SPEED TERMINAL DEVICE 00860000
  921. BNE *+8 NO- BRANCH 00861000
  922. NI VMRSTAT,X'FF'-VMIDLE YES- LET USER ENTER Q 00862000
  923. NI VMRSTAT,X'FF'-VMEXWAIT REMOVE EX WAIT FOR ALL DEVICES 00863000
  924. NI VMDSTAT,X'FF'-VMTIO REMOVE TIO FLAG 00864000
  925. EJECT 00865000
  926. CKDIAG EQU * 00866000
  927. TM IOBFLAG,IOBHVC WAS THIS I/O INITIATED VIA DIAGNOSE 00867000
  928. BZ *+8 NO -- 00868000
  929. NI VMRSTAT,X'FF'-(VMEXWAIT+VMIOWAIT) TAKE OUT OF WAIT 00869000
  930. L R0,IOBCAW GET ADDRESS OF CCW PACKAGE @VA00996 00870000
  931. LTR R0,R0 SHOULD THEY BE FRETTED ? @VA00996 00871000
  932. BZ NOCALL NO - THERE ARE NONE. @VA00996 00872000
  933. CALL DMKUNTFR RELEASE THE CCW PACKAGE @VA00996 00873000
  934. NOCALL CLI VDEVTYPC,CLASTERM TERMINAL TYPE DEVICE ? @VA00996 00874000
  935. BE TSTDIAL2 YES, TEST FOR DIALED DEVICE @V200730 00875000
  936. CLI VDEVTYPC,CLASGRAF GRAF DEVICE ?? @V200730 00876000
  937. BNE FRETIOB NO, CONT @V200730 00877000
  938. TSTDIAL2 DS 0H @V200730 00878000
  939. TM VDEVFLAG,VDEVDIAL WAS IT CONNECTED VIA DIAL 00879000
  940. BZ FRETIOB NO -- 00880000
  941. CALL DMKDIBDR IF SO, INFORM THE PREVIOUS USER @VA13704 00881000
  942. FRETIOB BAL R5,FRETIOER RETURN ANY IOERBLOK @VA00884 00882000
  943. LR R1,R10 POINT TO THE IOBLOK @VA00884 00883000
  944. LA R0,IOBSIZE AND GET ITS SIZE 00884000
  945. CALL DMKFRET RETURN IT TO FREE STORAGE 00885000
  946. CLR R9,R10 ARE WE FINISHED WITH THIS OPERATION ? 00886000
  947. BNE CFPWAIT NO -- MORE INTERRUPTS TO COME 00887000
  948. SLR R0,R0 CLEAR 00888000
  949. ST R0,VDEVIOB ACTIVE IOBLOK POINTER 00889000
  950. B RELTD GO CHECK OUT RELEASE PROCESSING @V407438 00890000
  951. EJECT 00891000
  952. FRETIOER L R1,IOBIOER POINT TO THE IOERBLOK (VIA R10) @VA00884 00892000
  953. LTR R1,R1 ZERO? @VA00884 00893000
  954. BNZ FRTIOER2 NO - GO FRET IOERBLOK @VA03831 00894000
  955. TM VDEVSTAT,VDEVDED IS REAL DEVICE DEDICATED? @VA03831 00895000
  956. BZR R5 NO @VA03831 00896000
  957. ST R5,SAVEWRK6 SAVE RETURN REGISTER @VA03831 00897000
  958. L R5,VDEVREAL USE R5 AS BASE FOR RDEVBLOK @VA03831 00898000
  959. SWITCH SWITCH TO MAIN PROCESSOR @V407510 00899000
  960. USING RDEVBLOK,R5 @VA03831 00900000
  961. L R1,RDEVIOER POINT TO POSSIBLE IOERBLOK @VA03831 00901000
  962. MVC RDEVIOER,ZEROES MAKE SURE POINTER IS CLEARED @VA03831 00902000
  963. DROP R5 @VA03831 00903000
  964. L R5,SAVEWRK6 RESTORE RETURN REGISTER @VA03831 00904000
  965. LTR R1,R1 WAS RDEVIOER ZERO? @VA03831 00905000
  966. BZR R5 YES - NO IOERBLOK TO FRET @VA03831 00906000
  967. FRTIOER2 EQU * ENTER HERE IF IOERBLOK IS HUNG @VA00884 00907000
  968. * OFF VDEVBLOK 00908000
  969. USING IOERBLOK,R1 @VA00884 00909000
  970. LA R0,IOERSIZE GET THE BASE SIZE @VA00884 00910000
  971. AH R0,IOEREXT AND ANY EXTRA SPACE ON THE END @VA00884 00911000
  972. DROP R1 @VA00884 00912000
  973. CALL DMKFRET FRET THE IOERBLOK @VA00884 00913000
  974. SR R1,R1 CLEAR R1 (TO ZERO THE POINTER) @VA00884 00914000
  975. BR R5 AND RETURN (VIA R5). @VA00884 00915000
  976. EJECT 00916000
  977. RESSPOL NI VDEVFLAG,255-VDEVCCW1 TURN OFF 1ST CCW FLAG 00917000
  978. TM VDEVTYPC,CLASURO IS THIS AN OUTPUT DEVICE ?? 00918000
  979. BO RESOPUT BRANCH IF YES 00919000
  980. CLI VDEVTYPE,TYP3210 IS IT A CONSOLE ?? @V200730 00920000
  981. BNE NOTCONS NO, CONT @V200730 00921000
  982. USING VCONCTL,R2 @V200730 00922000
  983. L R2,VDEVCON GET POINTER TO VIRTUAL CONTASK @V305535 00923000
  984. TM VDEVCFLG,VDEVAUCR AUTOLOG ON USER @V305535 00924000
  985. BZ FRETRBUF NO - CLEAR CONSOLE BLOCKS @V305535 00925000
  986. TM VMRSTAT,VMLOGOFF IN LOG-OFF NOW ? @V305535 00926000
  987. BO FRETRBUF YES - CLEAR CONSOLE BLOCKS @V305535 00927000
  988. TM VMOSTAT,VMKILL FORCE LOG-OFF CONDITION ? @V305535 00928000
  989. BZ NOTRBUF NO - LEAVE BUFFER ALONE @V305535 00929000
  990. FRETRBUF LTR R2,R2 CHECK FOR VCONCTL BLOCK @V305535 00930000
  991. BZ NOTCONS NO - CHECK FOR LOGOUT @V200730 00931000
  992. ICM R1,15,VCONRBUF IS THERE A READ BUFFER ? @V240820 00932000
  993. BZ NOTRBUF NO, CONT @V200730 00933000
  994. SLR R0,R0 CLEAR @V200730 00934000
  995. ST R0,VCONRBUF CLEAR POINTER @V200730 00935000
  996. LH R0,VCONRBSZ YES - GET SIZE IN DWDS HRC101DK 00936490
  997. CALL DMKFRET FRET IT. @V200730 00937000
  998. NOTRBUF EQU * @V240820 00938000
  999. ICM R1,15,VCONWBUF IS THERE A WRITE BUFFER ? @V240820 00939000
  1000. BZ NOTCONS NO, CONT @V200730 00940000
  1001. SLR R0,R0 CLEAR @V200730 00941000
  1002. ST R0,VCONWBUF CLEAR BUFFER ADDRESS @V200730 00942000
  1003. IC R0,VCONWBSZ GET SIZE IN DBL WDS @V200730 00943000
  1004. CALL DMKFRET FRET BUFFER @V200730 00944000
  1005. DROP R2 @V200730 00945000
  1006. NOTCONS EQU * HERE IF CONTASK IS NON-EXISTANT. @V200730 00946000
  1007. TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ???? 00947000
  1008. BZ RESEXIT BRANCH IF NOT 00948000
  1009. CLI VDEVTYPC,CLASTERM CONSOLE DEVICE ? 00949000
  1010. BE RESCSPL YES -- RESET CONSOLE SPOOL FLAG @VA04165 00950000
  1011. NI VDEVSFLG,X'FF'-VDEVFEED RESET FEED FLAG 00951000
  1012. ICM R0,15,VDEVSPL IS THERE AN ACTIVE SPOOL FILE ? @V240820 00952000
  1013. BZ RESEXIT NO -- JUST EXIT @V240820 00953000
  1014. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00954000
  1015. CALL DMKVSPCR,PARM=0 CLOSE THE CARD READER 00955000
  1016. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00956000
  1017. B RESIOER CLEAR THE FLAGS AGAIN 00957000
  1018. EJECT 00958000
  1019. RESCSPL DS 0H @VA10854 00959010
  1020. TM VDEVTYPE,TYPSS COMMUN CONSOL ? @VA10854 00959020
  1021. BM RESEXIT TTY OR SS @VA10854 00959030
  1022. NI VDEVFLAG,X'FF'-VDEVCSPL @VA10854 00959040
  1023. RESOPUT EQU * RESET OUTPUT SPOOL DEVICE @V240820 00960000
  1024. ICM R0,15,VDEVSPL IS THERE AN ACTIVE SPOOL FILE ? @V240820 00961000
  1025. BZ RESEXIT NO -- JUST EXIT @V240820 00962000
  1026. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00963000
  1027. CALL DMKVSPCO,PARM=0 CLOSE THE PRINTER OR PUNCH 00964000
  1028. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00965000
  1029. B RESIOER CLEAR THE FLAGS AGAIN 00966000
  1030. SPACE 1 00967000
  1031. RESSPEC EQU * RESET SPECIAL DEVICES 00968000
  1032. CLI VDEVTYPE,TYPCTCA VIRTUAL CHAN-TO-CHAN ADAPTER ? 00969000
  1033. BNE CFPWAIT NO -- WAIT FOR I/O COMPLETION 00970000
  1034. USING CHXBLOK,R9 VDEVREAL POINTS TO CHXBLOK 00971000
  1035. TM CHXFLAG,CHBWAIT IS THE X-SIDE WAITING ? 00972000
  1036. BZ CFPWAIT NO -- WE CAN WAIT FOR INTERRUPT 00973000
  1037. L R1,CHXCNCT CPEXBLOK FOR RE-CONNECT 00974000
  1038. ST R0,CHXCNCT (DO NOT STACK THE BLOCK TWICE) 00975000
  1039. CALL DMKSTKCP RESTART ACTIVITY TO CLEAR I/O 00976000
  1040. NI CHXFLAG,255-CHBWAIT NO LONGER IN WAIT STATUS 00977000
  1041. B CFPWAIT WAIT FOR COMPLETION 00978000
  1042. SPACE 00979000
  1043. RESCTCA EQU * RESET OF NOT-BUSY CHAN-TO-CHAN ADAPTER 00980000
  1044. CLI VDEVTYPE,TYPCTCA IS THIS VIRTUAL CTCA ? 00981000
  1045. BNE RESEXIT NO -- WE'RE ALL DONE ALREADY 00982000
  1046. TM VDEVSTAT,VDEVNRDY IS THE ADAPTER 'COUPLE'D YET ? 00983000
  1047. BO RESEXIT NO -- ALL DONE 00984000
  1048. CALL DMKVCARD PERFORM NECESSARY STATUS UPKEEP 00985000
  1049. B RESEXIT ...AND EXIT 00986000
  1050. DROP R6,R7,R8,R10 00987000
  1051. EJECT 00988000
  1052. EJECT 00989000
  1053. LTORG 00990000
  1054. EJECT 00991000
  1055. * CHANNEL PROGRAM USED TO SUSPEND MSC INTERFACE WHEN IPL OF VS 00992000
  1056. * SYSTEM IS INVOKED. 00993000
  1057. SPACE 00994000
  1058. MSC87B CCW X'87',MSC22B-MSC87B,CC,4 EXECUTE CCW @V407466 00995000
  1059. MSC03B CCW X'03',0,SILI,1 CHAINED TO NOP @V407466 00996000
  1060. MSC22B DC X'22008000' SUSPEND MSC INTERFACE @V407466 00997000
  1061. MSCL EQU *-MSC87B LENGTH OF CHANNEL PROGRAM 00998000
  1062. EJECT 00999000
  1063. PSA , @V306638 01000000
  1064. COPY CONBUF @V306638 01001000
  1065. COPY CORE @V306638 01002000
  1066. COPY DEVTYPES @V306638 01003000
  1067. COPY EQU @V306638 01004000
  1068. COPY IOBLOKS @V306638 01005000
  1069. * DSECT FOR EXTENDED IOBLOK 01006000
  1070. SUSPEND DSECT @V407466 01007000
  1071. DS (IOBSIZE)D SIZE OF IOBLOK @V407466 01008000
  1072. MSC87A DS D EXECUTE CCW @V407466 01009000
  1073. MSC03A DS D NOP @V407466 01010000
  1074. MSC22A DS D MSC SUSPEND ORDER @V407466 01011000
  1075. SUSPENDL EQU (*-SUSPEND)/8 @V407466 01012000
  1076. COPY IOER @V306638 01013000
  1077. COPY PGBLOK @V306638 01014000
  1078. COPY RBLOKS @V306638 01015000
  1079. COPY SAVE @V306638 01016000
  1080. COPY SAVTABLE @V306638 01017000
  1081. COPY SHRTABLE @V306638 01018000
  1082. COPY SYSTBL @V306638 01019000
  1083. COPY TIMER @V306638 01020000
  1084. COPY TREXT @V306638 01021000
  1085. COPY UDIRECT @V407438 01022000
  1086. COPY VBLOKS @V306638 01023000
  1087. COPY VCTCA @V306638 01024000
  1088. COPY VMBLOK @V306638 01025000
  1089. COPY XINTBLOK @V306638 01026000
  1090. DETMSG DSECT RESPONSE FOR DETACH CHANNEL AT LOGOFF TIME@VA13588 01026090
  1091. DS CL4,CL1 CHANNEL,BLANK @VA13588 01026140
  1092. DETRADD DS CL1,CL2 CHANNEL ADDRESS,BLANK @VA13588 01026190
  1093. DS CL8,CL2 DETACHED,BLANK @VA13588 01026240
  1094. DETSIZE1 EQU *-DETMSG MSG SIZE(MINUS USERID) @VA13588 01026290
  1095. DETUSER DS CL8 USERID @VA13588 01026340
  1096. DETSIZE EQU *-DETMSG MSG SIZE @VA13588 01026390
  1097. DETDSIZE EQU (DETSIZE+7)/8 SIZE IN DOUBLE WORDS @VA13588 01026440
  1098. END 01027000