Table of Contents

DMKSSU Source

References

Source Listing

DMKSSU.ASSEMBLE.txt
  1. SSU TITLE 'DMKSSU (CP) VM/370 - RELEASE 6' 00001000
  2. * 00002000
  3. * MODULE NAME - 00003000
  4. * 00004000
  5. * DMKSSU 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * THIS IS A COMMON MSS SERVICE ROUTINE. IT HANDLES 00009000
  10. * MSS SERVICE REQUESTS FROM OTHER CONTROL PROGRAM 00010000
  11. * MODULES. THIS ROUTINE RECEIVES CONTROL AT DIFFERENT 00011000
  12. * ENTRY POINTS, DEPENDING ON THE TYPE OF SERVICE 00012000
  13. * REQUESTED. THE SERVICE PROVIDED BY EACH ENTRY POINT 00013000
  14. * IS DESCRIBED BY THE PROLOGUE TO THAT ENTRY POINT. 00014000
  15. * 00015000
  16. * ATTRIBUTES - 00016000
  17. * 00017000
  18. * REENTRANT, RESIDENT, ENTERED VIA A CALL OR BRANCH TO THE 00018000
  19. * APPROPRIATE ENTRY POINT 00019000
  20. * 00020000
  21. * ENTRY POINTS - 00021000
  22. * 00022000
  23. * DMKSSUI1 - FROM DMKIOT: AN ATTENTION INTERRUPT HAS 00023000
  24. * BEEN RECEIVED ON A 3330V 00024000
  25. * 00025000
  26. * DMKSSUI2 - FROM DMKIOT: AN CYLINDER FAULT HAS BEEN 00026000
  27. * DETECTED ON A 3330V 00027000
  28. * 00028000
  29. * DMKSSUCF - FROM DMKCFP: RESET A VIRTUAL DEVICE DEFINED 00029000
  30. * ON A 3330V 00030000
  31. * 00031000
  32. * ENTRY CONDITIONS - 00032000
  33. * 00033000
  34. * DEFINED FOR EACH ENTRY POINT IN THE PROLOGUE TO THAT 00034000
  35. * ENTRY POINT 00035000
  36. * 00036000
  37. * EXIT CONDITIONS - 00037000
  38. * 00038000
  39. * EXIT IS THROUGH THE STANDARD RETURN TO THE CALLING 00039000
  40. * MODULE. A RETURN CODE IS PASSED IN GPR 15 00040000
  41. * 00041000
  42. * GPR 15 = 0 MEANS FUNCTION COMPLETE, NO ERRORS 00042000
  43. * GPR 15 = 4 MEANS AN MSS VOLUME MOUNT HAS BEEN 00043000
  44. * SCHEDULED, BUT IS NOT YET COMPLETE. 00044000
  45. * AN MSSCOM BLOCK HAS BEEN CREATED AND 00045000
  46. * QUEUED PENDING MOUNT COMPLETE. A MESSAGE 00046000
  47. * HAS BEEN SENT TO THE USER STATING THAT 00047000
  48. * A MOUNT IS IN PROCESS 00048000
  49. * GPR 15 = 8 MEANS A SERIOUS ERROR OCCURRED. THE 00049000
  50. * REQUESTED FUNCTION WAS NOT PERFORMED 00050000
  51. * AND NO FURTHER ACTION WILL BE TAKEN ON 00051000
  52. * THE REQUEST 00052000
  53. * 00053000
  54. * OTHER EXIT CONDITIONS, UNIQUE TO A PARTICULAR SERVICE, 00054000
  55. * ARE DEFINED IN THE PROLOGUE TO THAT ENTRY POINT 00055000
  56. * 00056000
  57. * CALLS TO OTHER ROUTINES - 00057000
  58. * 00058000
  59. * SEE THE PROLOGUE FOR A PARTICULAR ENTRY POINT 00059000
  60. * 00060000
  61. * EXTERNAL REFERENCES - 00061000
  62. * 00062000
  63. * NONE 00063000
  64. * 00064000
  65. * 00065000
  66. * TABLES/WORKAREAS - 00066000
  67. * 00067000
  68. * MSSCOM 00068000
  69. * RDEVBLOK 00069000
  70. * VDEVBLOK 00070000
  71. * UDEVBLOK 00071000
  72. * IOBLOK 00072000
  73. * VMBLOK 00073000
  74. * UDEVBLOK 00074000
  75. * TRQBLOK 00075000
  76. * CPEXBLOK 00076000
  77. * SAVEAREA 00077000
  78. * PSA 00078000
  79. * 00079000
  80. * REGISTER USAGE - 00080000
  81. * 00081000
  82. * GPR 11 = VMBLOK BASE 00082000
  83. * GPR 12 = DMKSSU BASE 00083000
  84. * GPR 13 = SAVEAREA BASE 00084000
  85. * GPR 15 = RETURN CODE 00085000
  86. * 00086000
  87. * THE USAGE OF THE OTHER REGISTERS DEPENDS UPON THE ENTRY 00087000
  88. * POINT. SEE THE PROLOGUE FOR THE SPECIFIC ENTRY 00088000
  89. * 00089000
  90. EJECT 00090000
  91. COPY OPTIONS @V60B6B8 00091000
  92. COPY LOCAL @V60B6B8 00092000
  93. EJECT 00093000
  94. DMKSSU CSECT @V60B6B8 00094000
  95. DC CL8'DMKSSU' @V60B6B8 00095000
  96. SPACE 3 00096000
  97. USING PSA,R0 MAP FOR LOW CORE @V60B6B8 00097000
  98. USING VMBLOK,R11 PRIME VM CONTROL BLOCK @V60B6B8 00098000
  99. USING SAVEAREA,R13 REG SAVE AREA AND WORK AREA @V60B6B8 00099000
  100. ENTRY DMKSSUI1,DMKSSUI2 @V60B6B8 00100000
  101. EXTRN DMKSCHST,DMKSCHRT 00101000
  102. EXTRN DMKCVTBH 00102000
  103. EXTRN DMKERMSG 00103000
  104. EXTRN DMKSCNVD 00104000
  105. EXTRN DMKSTKIO,DMKSTKCP 00105000
  106. EJECT 00106000
  107. * 00107000
  108. * 00108000
  109. * 00109000
  110. * 00110000
  111. * ENTRY POINT DMKSSUI1 00111000
  112. * 00112000
  113. * 00113000
  114. * ENTRY CONDITIONS - 00114000
  115. * 00115000
  116. * ENTRY IS VIA A 'BALR R14,R15' FROM DMKIOT. AN ATTN 00116000
  117. * INTERRUPT HAS BEEN RECEIVED ON A 3330V. AT ENTRY, 00117000
  118. * THE PERTINENT REGISTERS ARE: 00118000
  119. * GPR 15 = ENTRY POINT ADDR 00119000
  120. * GPR 14 = DMKIOT RETURN ADDR 00120000
  121. * GPR 13 = DMKIOT SAVEAREA ADDR 00121000
  122. * GPR 11 = VMBLOK BASE REG 00122000
  123. * GPR 8 = RDEVBLOK ADDR 00123000
  124. * 00124000
  125. * EXIT CONDITIONS - 00125000
  126. * 00126000
  127. * EXIT IS VIA 'BR R14' BACK TO DMKIOT. THE ATTN 00127000
  128. * INTERRUPT HAS BEEN PROCESSED. 00128000
  129. * 00129000
  130. * CALLS TO EXTERNAL ROUTINES - 00130000
  131. * 00131000
  132. * NONE 00132000
  133. * 00133000
  134. * OPERATION - 00134000
  135. * 00135000
  136. * 1) FIND THE TIMER TRQBLOK WHICH PERTAINS TO THE 00136000
  137. * CYLINDER FAULT WHICH HAS NOW BEEN SATISFIED. 00137000
  138. * CALL DMKSCH TO REMOVE THE TRQBLOK, SINCE THE 00138000
  139. * ATTENTION HAS BEEN RECEIVED BEFORE THE TIMER 00139000
  140. * EXPIRED. 00140000
  141. * 00141000
  142. * 2) MAKE THE QUEUED IOBLOK DISPATCHABLE AND PLACE 00142000
  143. * IT BACK IN THE DISPATCH QUEUE. 00143000
  144. * 00144000
  145. * NOTE: IF THE REAL DEVICE IS DEDICATED TO A VIRTUAL 00145000
  146. * MACHINE AS A VIRTUAL 3330V, THEN THIS CODE WILL NOT 00146000
  147. * BE ENTERED. THE ORIGINAL CYLINDER FAULT WILL HAVE 00147000
  148. * BEEN REFLECTED TO THE VIRTUAL MACHINE BY DMKIOT, 00148000
  149. * AND THIS ATTN INTERRUPT WILL BE PASSED TO THE 00149000
  150. * VIRTUAL MACHINE RATHER THAN TO DMKSSU. 00150000
  151. * 00151000
  152. * 00152000
  153. DMKSSUI1 DS 0H PROCESS UNSOLICITED ATTENTION @V60B6B8 00153000
  154. USING *,R15 ENTRY VIA BALR 14,15 FROM DMKIOT @V60B6B8 00154000
  155. * MUST USE TEMPSAVE SINCE IOS MAY NOT HAVE SAVE AREA IN R13 00155000
  156. ST R12,TEMPR12 SAVE DMKIOT BASE REGISTER @VA09298 00156000
  157. LR R12,R15 SET UP STANDARD PGM BASE REG @V60B6B8 00157000
  158. SL R12,SSUI1OFF BACK TO MODULE START @V60B6B8 00158000
  159. DROP R15 @V60B6B8 00159000
  160. USING DMKSSU,R12 COMMON MODULE START @V60B6B8 00160000
  161. USING RDEVBLOK,R8 GPR 8 SET BY DMKIOT @V60B6B8 00161000
  162. ST R14,TEMPR14 SAVE DMKIOT RETURN ADDRESS @VA09298 00162000
  163. L R2,RDEVFIOB PTR TO FIRST QUEUED IOBLOK @VA09298 00163000
  164. USING IOBLOK,R2 ASSEMBLER ADDRESSABILITY @VA09298 00164000
  165. TESTFIOB EQU * CHECK FOR CYL FAULT @V60B6B8 00165000
  166. CR R2,R8 DOES IOBLOK POINT TO RDEVBLOK @VA09298 00166000
  167. BE TIMPROC YES, END OF THE QUEUE @V60B6B8 00167000
  168. TM IOBSTAT,IOBFLT CYL FAULT ON THIS IOBLOK @V60B6B8 00168000
  169. BZ NXTIOBLK NO, NO TIMER Q ENTRY @V60B6B8 00169000
  170. L R1,IOBCTRQ PTR TO QUEUED TRQBLOK @VA09957 00170000
  171. * 00171000
  172. * NOTE: WHEN THE CYLINDER FAULT INDICATION WAS 00172000
  173. * FIRST RECEIVED, AND THE IOBLOK QUEUED AND THE 00173000
  174. * TIMER Q ENTRY CREATED, THE ADDRESS OF THE 00174000
  175. * TRQBLOK WAS PLACED IN THE FIELD IOBMISC2 BY 00175000
  176. * ROUTINE DMKSSUI2. 00176000
  177. * 00177000
  178. L R15,SCHRTAD ADDR OF TIMER Q MAINT ROUTINE @V60B6B8 00178000
  179. BALR R14,R15 REMOVE THE TRQBLOK @V60B6B8 00179000
  180. L R1,IOBCTRQ TRQBLOCK ADDRESS @VA11445 00180000
  181. LA R0,TRQBSIZE+8 SIZE OF TRQBLOK + WORKAREA @VA11445 00181000
  182. CALL DMKFRET RETURN THE GOTTEN STORAGE @VA11445 00182000
  183. XC IOBCTRQ,IOBCTRQ CLEAR THIS POINTER @VA12882 00182500
  184. NI IOBSTAT,FULL-IOBFLT TURN OFF CYL FAULT FLAG @V60B6B8 00183000
  185. NXTIOBLK EQU * GET NEXT IOBLOK @V60B6B8 00184000
  186. L R2,IOBFPNT NEXT BLOCK POINTER @VA09298 00185000
  187. B TESTFIOB SEE IF THERE IS ONE @V60B6B8 00186000
  188. TIMPROC EQU * TIMER Q HAS BEEN PROCESSED @V60B6B8 00187000
  189. L R14,TEMPR14 RESTORE DMKIOT RETURN ADDRESS @VA09298 00188000
  190. L R12,TEMPR12 RESTORE DMKIOT BASE REGISTER @VA09298 00189000
  191. BR R14 AND RETURN @V60B6B8 00190000
  192. DROP R2 @VA09298 00191000
  193. EJECT 00192000
  194. * 00193000
  195. * 00194000
  196. * ENTRY POINT DMKSSUI2 00195000
  197. * 00196000
  198. * 00197000
  199. * ENTRY CONDITIONS - 00198000
  200. * 00199000
  201. * ENTRY IS VIA A 'BALR R14,R15' FROM DMKIOT. THE 00200000
  202. * PERTINENT REGISTERS ARE: 00201000
  203. * GPR 15 = DMKSSUI2 ADDRESS 00202000
  204. * GPR 14 = DMKIOT RETURN ADDRESS 00203000
  205. * GPR 10 = IOBLOK ADDR 00204000
  206. * GPR 8 = RDEVBLOK ADDR 00205000
  207. * 00206000
  208. * EXIT CONDITIONS - 00207000
  209. * 00208000
  210. * EXIT IS VIA A 'BR R14' BACK TO DMKIOT. THE 00209000
  211. * IOBLOK IS QUEUED FROM FIELD RDEVFIOB WITH FLAG 00210000
  212. * IOBFLT SET. A TRQBLOK HAS BEEN SET SUCH THAT IF 00211000
  213. * THE MSS DOES NOT RESOLVE THE CYLINDER FAULT 00212000
  214. * WITHIN THE REQUIRED TIME, A TIMER INTERRUPT WILL 00213000
  215. * BE RECEIVED. 00214000
  216. * 00215000
  217. * CALLS TO EXTERNAL ROUTINES - 00216000
  218. * 00217000
  219. * DMKFREE - GET STORAGE FOR A TRQBLOK 00218000
  220. * DMKSCHST - PUT THE TRQBLOK IN THE TIMER Q 00219000
  221. * 00220000
  222. * OPERATION 00221000
  223. * 00222000
  224. * 1) QUEUE THE IOBLOK FROM FIELD RDEVFIOB WITH 00223000
  225. * FLAG IOBFLT SET. 00224000
  226. * 00225000
  227. * 2) BUILD A TRQBLOK IN CASE THE SUBSEQUENT ATTN 00226000
  228. * IS NOT RECEIVED. 00227000
  229. * 00228000
  230. * 3) CALL DMKSCHST TO PLACE THE TRQBLOK IN THE Q. 00229000
  231. * 00230000
  232. DMKSSUI2 EQU * SET UP FOR MISSING ATTN @V60B6B8 00231000
  233. USING DMKSSUI2,R15 @V60B6B8 00232000
  234. LR R2,R14 RESTORE DMKIOT RETURN ADDRESS @VA09298 00233000
  235. LR R3,R12 RESTORE DMKIOT BASE REGISTER @VA09298 00234000
  236. LR R12,R15 DMKSSUI2 ENTRY POINT ADDR @V60B6B8 00235000
  237. SL R12,SSUI2OFF COMMON MODULE BASE @V60B6B8 00236000
  238. DROP R15 @V60B6B8 00237000
  239. USING DMKSSU,R12 @V60B6B8 00238000
  240. USING RDEVBLOK,R8 @V60B6B8 00239000
  241. USING IOBLOK,R10 @V60B6B8 00240000
  242. OI IOBSTAT,IOBFLT INDICATE CYL FAULT HAS OCCURRED @V60B6B8 00241000
  243. L R4,RDEVFIOB RDEVBLOK CHAIN FIELD @VA09298 00242000
  244. ST R10,RDEVFIOB CHAIN IN CURRENT IOBLOK @V60B6B8 00243000
  245. ST R4,IOBFPNT CHAIN IN PREVIOUS BLOCK @VA09298 00244000
  246. ST R8,IOBBPNT SET BACK PTR IN CURRENT IOBLOK @V60B6B8 00245000
  247. ST R10,IOBBPNT-IOBLOK(R4) SET BACK PTR IN PREVIOUS @VA09298 00246000
  248. LA R0,TRQBSIZE+8 TRQBLOK + SAVE AREA @VMI2015 00247000
  249. CALL DMKFREE GET STORAGE @V60B6B8 00248000
  250. USING TRQBLOK,R1 STORAGE TO BE INITIALIZED @V60B6B8 00249000
  251. ST R1,IOBCTRQ SAVE TRQBLOK POINTER @VA09957 00250000
  252. STM R0,R15,40(R1) SAVE REGS FOR ASYNCH EXIT @VMI2015 00251000
  253. ST R11,TRQBUSER USER VMBLOK ADDR @V60B6B8 00252000
  254. LA R15,SCHIOB ADDR OF ROUTINE FOR MISSING ATTN @V60B6B8 00253000
  255. ST R15,TRQBIRA SAVE IN BLOCK @V60B6B8 00254000
  256. STCK TRQBTOD SAVE CURRENT TIME OF DAY @V60B6B8 00255000
  257. L R5,ATTNPER PERIOD TO WAIT FOR AN ATTN @V60B6B8 00256000
  258. SR R4,R4 CLEAR FOR FOLLOWING MULT @V60B6B8 00257000
  259. M R4,MICROADD GET INTO MICROSECS @V60B6B8 00258000
  260. SLDL R4,12 INTO TOD FORMAT @V60B6B8 00259000
  261. AL R5,TRQBTOD+4 ADD TO TOD CURRENT VALUE @V60B6B8 00260000
  262. BC 12,NOOVER NO OVERFLOW @V60B6B8 00261000
  263. AL R4,F1 + 1 SEC IF OVERFLOW @V60B6B8 00262000
  264. NOOVER EQU * @V60B6B8 00263000
  265. AL R4,TRQBTOD HI-ORDER TOD BITS @V60B6B8 00264000
  266. STM R4,R5,TRQBVAL INTO TRQBLOK @V60B6B8 00265000
  267. CALL DMKSCHST PUT IT INTO THE TIMER QUEUE @V60B6B8 00266000
  268. LR R14,R2 RESTORE DMKIOT RETURN ADDRESS @VA09298 00267000
  269. LR R12,R3 RESTORE DMKIOT BASE REGISTER @VA09298 00268000
  270. BR R14 AND RETURN @V60B6B8 00269000
  271. EJECT 00270000
  272. * 00271000
  273. * SCHIOB IS THE ROUTINE WHICH IS DISPATCHED WHEN 00272000
  274. * A MISSING ATTENTION IS ENCOUNTERED. IT IS 00273000
  275. * DISPATCHED ASYNCHRONOUSLY BY DMKDSP WHEN THE 00274000
  276. * TIMER VALUE SET BY DMKSSUI2 EXPIRES. 00275000
  277. * 00276000
  278. SCHIOB EQU * ATTENTION TIMER HAS EXPIRED @V60B6B8 00277000
  279. BALR R12,R0 SET UP FOR OUR ADDRESSABILITY @V60B6B8 00278000
  280. SCHIOB1 EQU * @V60B6B8 00279000
  281. USING SCHIOB1,R12 @V60B6B8 00280000
  282. SL R12,SSUIOOFF OFFSET TO MODULE START @V60B6B8 00281000
  283. USING DMKSSU,R12 @V60B6B8 00282000
  284. LM R0,R15,40(R10) RESTORE DMKSSU REGS @VMI2015 00283000
  285. LR R3,R1 SAVE TRQBLOK ADDR @VMI2015 00284000
  286. LH R1,IOBRADD-IOBLOK(R10) DEV ADDR @VMI2015 00285000
  287. CALL DMKCVTBH INTO PRINTABLE HEX @VMI2015 00286000
  288. ST R1,TEMPSAVE SAVE PRINTABLE DATA @VMI2015 00287000
  289. LA R0,3 LENGTH FOR MESSAGE @VMI2015 00288000
  290. LA R1,TEMPSAVE+1 ADDR FOR MESSAGE @VMI2015 00289000
  291. L R2,OPTION74 MSG WRITER OPTIONS @VMI2020 00290000
  292. CALL DMKERMSG WRITE MSG 084 @VMI2015 00291000
  293. LR R1,R3 TRQBLOK ADDR @VMI2015 00292000
  294. STCK TRQBTOD-TRQBLOK(R1) CURRENT TOD @VMI2015 00293000
  295. L R5,ATTNPER NO. OF SECS IN 15 MIN @VMI2015 00294000
  296. SR R4,R4 CLEAR FOR ARITH. @VMI2015 00295000
  297. M R4,MICROADD INTO MICROSECS @VMI2015 00296000
  298. SLDL R4,12 INTO TOD FORMAT @VMI2015 00297000
  299. AL R5,TRQBTOD-TRQBLOK+4(R1) @VMI2015 00298000
  300. AL R4,TRQBTOD-TRQBLOK(R1) @VMI2015 00299000
  301. STM R4,R5,TRQBVAL-TRQBLOK(R1) NEXT TIMER POP @VMI2015 00300000
  302. CALL DMKSCHST @VMI2015 00301000
  303. GOTO DMKDSPCH AND WAIT @VMI2015 00302000
  304. EJECT 00303000
  305. * 00304000
  306. * 00305000
  307. * ENTRY POINT DMKSSUCF 00306000
  308. * 00307000
  309. * 00308000
  310. * ENTRY CONDITIONS - 00309000
  311. * 00310000
  312. * ENTRY IS FROM DMKCFP VIA A CALL (SVC 8). THE PURPOSE 00311000
  313. * OF THIS ENTRY IS TO CLEAN UP ANY POSSIBLE I/O 00312000
  314. * INITIATED BY THE VIRTUAL MACHINE BUT CURRENTLY 00313000
  315. * WAITING FOR A CYLINDER FAULT TO COMPLETE. THE 00314000
  316. * PERTINENT REGISTERS AT ENTRY ARE: 00315000
  317. * GPR 12 = DMKSSUCF ADDRESS 00316000
  318. * GPR 11 = VMBLOK ADDRESS 00317000
  319. * GPR 8 = VDEVBLOK ADDR 00318000
  320. * GPR 1 = RDEVBLOK ADDR 00319000
  321. * 00320000
  322. * EXIT CONDITIONS - 00321000
  323. * 00322000
  324. * ANY IOBLOKS ORIGINALLY SCHEDULED FOR THIS REAL DEVICE 00323000
  325. * FROM THIS VIRTUAL MACHINE WHICH ARE WAITING FOR A 00324000
  326. * CYLINDER FAULT HAVE BEEN REMOVED FROM THE RDEVBLOK 00325000
  327. * CHAIN AND ANY TIMER QUEUE BLOCKS ASSOCIATED WITH 00326000
  328. * A POSSIBLE MISSING ATTENTION HAVE BEEN REMOVED FROM 00327000
  329. * THE TIMER QUEUE. 00328000
  330. * 00329000
  331. * CALLS TO EXTERNAL ROUTINES - 00330000
  332. * 00331000
  333. * DMKSCHRT - REMOVE TRQBLOK FROM TIMER Q 00332000
  334. * DMKFRET - RETURN STORAGE FOR TRQBLOK TO SYSTEM 00333000
  335. * 00334000
  336. * OPERATION - 00335000
  337. * 00336000
  338. * 1) IF THE VIRTUAL DEVICE BLOCK IS NOT BUSY, RETURN 00337000
  339. * TO DMKCFP (IT CAN'T BE WAITING FOR AN ATTENTION). 00338000
  340. * IF BUSY, COMPUTE THE RANGE OF REAL CYLINDERS WHICH 00339000
  341. * PERTAINS TO THIS VIRTUAL DEVICE. 00340000
  342. * 00341000
  343. * 2) SCAN ANY QUEUED IOBLOKS FOR THE REAL DEVICE, 00342000
  344. * LOOKING FOR THE ONE WHICH IS WAITING FOR THE ATTENTION 00343000
  345. * AND REFLECTS AN OPERATION TO THE VIRTUAL DEVICE. 00344000
  346. * 00345000
  347. * 3) WHEN THE IOBLOK IS FOUND, REMOVE IT FROM THE CHAIN, 00346000
  348. * FIND THE TIMER QUEUE POINTER, AND CALL DMKSCHRT TO 00347000
  349. * REMOVE THE ASSOCIATED TRQBLOK. 00348000
  350. * 00349000
  351. * 00350000
  352. DMKSSUCF RELOC ENTRY FROM DMKCFP @V60B6B8 00351000
  353. USING VDEVBLOK,R8 SET BY DMKCFP @V60B6B8 00352000
  354. USING RDEVBLOK,R1 SET BY DMKCFP @V60B6B8 00353000
  355. TM VDEVSTAT,VDEVBUSY IS THE VIRTUAL DEVICE BUSY @V60B6B8 00354000
  356. BO CHKFAULT YES, CHECK FOR CYL FAULT @V60B6B8 00355000
  357. CFEXIT EXIT RETURN @V60B6B8 00356000
  358. CHKFAULT EQU * SEE IF BUSY WAITING FOR CYL FAULT@V60B6B8 00357000
  359. LH R3,VDEVRELN REAL OFFSET TO MINI-DISK @V60B6B8 00358000
  360. LH R2,VDEVBND NO. OF CYL IN MINI-DISK @V60B6B8 00359000
  361. AR R2,R3 END OF THE VIRT DEV @V60B6B8 00360000
  362. L R10,RDEVFIOB FIRST QUEUED IOBLOK @V60B6B8 00361000
  363. FIOBTEST EQU * SEE IF ADDR VALID @V60B6B8 00362000
  364. LTR R10,R10 VALID ADDR? @V60B6B8 00363000
  365. BZ CFEXIT NO, CAN'T BE ZERO @V60B6B8 00364000
  366. CR R10,R1 IS THIS THE RDEVBLOK ADDR? @VA11443 00365000
  367. BE CFEXIT YES, END OF CHAIN @V60B6B8 00366000
  368. USING IOBLOK,R10 ASSEMBLER ADDRESSABILITY @V60B6B8 00367000
  369. TM IOBSTAT,IOBFLT CYL. FLT THIS IOB? @VMI2015 00368000
  370. BO TESTDEQ YES, SEE IF WE DEQ IT @V60B6B8 00369000
  371. NEXTIOB EQU * GET NEXT IOB IN CHAIN @V60B6B8 00370000
  372. L R10,IOBFPNT NEXT IOBLOK IN Q @V60B6B8 00371000
  373. B FIOBTEST AND TEST IT @V60B6B8 00372000
  374. * 00373000
  375. * WE HAVE FOUND AN IOBLOK WAITING FOR A CYLINDER FAULT. 00374000
  376. * SEE IF THE VIRTUAL DEVICE BEING RESET CAUSED THE 00375000
  377. * CYLINDER FAULT BY COMPARING THE SEEK ADDR WHICH CAUSED 00376000
  378. * THE FAULT TO THE BOUNDS OF THE VIRTUAL DEVICE. 00377000
  379. * 00378000
  380. TESTDEQ EQU * FIND THE FAULTED SEEK @V60B6B8 00379000
  381. LR R5,R1 SAVE RDEV POINTER @VA11442 00380000
  382. CALL DMKSCNVD TO GET OTHER VBLOKS @VA11442 00381000
  383. LR R4,R1 PUT THE CCU INTO R4 @VA11442 00382000
  384. LR R1,R5 RESTORE RDEVBLOK TO R1 @VA11442 00383000
  385. CH R4,IOBVADD IS THIS IOBLOK FOR CORRECT VDEV @VA11442 00384000
  386. BNE NEXTIOB NO, GET NEXT IN CHAIN @V60B6B8 00385000
  387. CH R3,IOBCYL IS FAULTED CYL IN THE VDEV @V60B6B8 00386000
  388. BH NEXTIOB NO @V60B6B8 00387000
  389. CH R2,IOBCYL AGAIN - THIS TIME FOR TOP @V60B6B8 00388000
  390. BL NEXTIOB IOB CYL NOT IN VDEV RANGE @V60B6B8 00389000
  391. * 00390000
  392. * UNCHAIN THIS IOBLOK FROM THE RDEV - IF THE 00391000
  393. * ATTENTION COMES IN LATER, IT WILL BE IGNORED 00392000
  394. * 00393000
  395. L R3,IOBFPNT NEXT IOBLOK IN CHAIN @V60B6B8 00394000
  396. L R4,IOBBPNT PREVIOUS IOBLOK @V60B6B8 00395000
  397. ST R3,IOBFPNT-IOBLOK(R4) POINT PREVIOUS TO NEXT @V60B6B8 00396000
  398. ST R4,IOBBPNT-IOBLOK(R3) POINT NEXT TO PREVIOUS @V60B6B8 00397000
  399. * 00398000
  400. * GET THE TRQBLOK PTR FROM THE IOBLOK AND CALL 00399000
  401. * DMKSCHRT TO REMOVE THE TRQBLOK. THE PTR WAS 00400000
  402. * PUT IN THE IOBLOK IN ROUTINE DMKSSUI2 WHEN THE 00401000
  403. * IOBLOK WAS FIRST QUEUED AND THE TIMER POP REQUESTED 00402000
  404. * 00403000
  405. L R1,IOBCTRQ PTR TO QUEUED TRQBLOK @VA09957 00404000
  406. CALL DMKSCHRT REMOVE IT - WE DON'T WANT INT. @V60B6B8 00405000
  407. LA R0,TRQBSIZE+8 NO OF D-WORDS TO FRET @VMI2015 00406000
  408. CALL DMKFRET RETURN STORAGE TO SYSTEM @V60B6B8 00407000
  409. OI IOBSTAT,IOBCC3+IOBFATAL PSEUDO CC=3 @VA11446 00408000
  410. NI IOBFLAG,X'FF'-IOBRSTRT NO RESTART @VA11446 00409000
  411. CALL DMKSTKIO STACK THE IOBLOK @VA11446 00410000
  412. LA R0,CPEXSIZE SIZE OF THE CPEXBLOK @VA11446 00411000
  413. CALL DMKFREE GET THE STORAGE @VA11446 00412000
  414. USING CPEXBLOK,R1 @VA11446 00413000
  415. LA R2,CFEXIT PLACE WHERE WE WANT CONTROL @VA11446 00414000
  416. ST R2,CPEXADD INTO THE CPEXBLOK @VA11446 00415000
  417. STM R0,R15,CPEXREGS SAVE OUR REGS. @VA11446 00416000
  418. CALL DMKSTKCP STACK THE CPEXBLOK @VA11446 00417000
  419. DROP R1 @VA11446 00418000
  420. GOTO DMKDSPCH WAIT FOR USER'S CC3 @VA11446 00419000
  421. EJECT 00420000
  422. SCHRTAD DC V(DMKSCHRT) ROIUTINE TO DEQ TIMER BLOKS 00421000
  423. DS 0F MESSAGES ON FULL WORD BOUNDARY @V60B6B8 00422000
  424. * 00423000
  425. * THE FOLLOWING CONSTANTS DEFINE THE ERROR MESSAGE 00424000
  426. * OPTIONS. THE MESSAGES HAVE THE FORMAT DMKSSU070 TO 00425000
  427. * DMKSSU078. 00426000
  428. * 00427000
  429. OPTION74 DC X'80C9004A' DMKSSU074I @VMI2020 00428000
  430. ATTNPER DC F'900' WAIT 15 MIN ON MISSING ATTN @V60B6B8 00429000
  431. MICROADD DC F'1000000' CNVRT SEC TO MICROSECS @V60B6B8 00430000
  432. SSUI1OFF DC A(DMKSSUI1-DMKSSU) OFFSET TO DMKSSUI1 @V60B6B8 00431000
  433. SSUI2OFF DC A(DMKSSUI2-DMKSSU) OFFSET TO DMKSSUI1 @V60B6B8 00432000
  434. SSUIOOFF DC A(SCHIOB1-DMKSSU) OFFSET TO SCHIOB1 @V60B6B8 00433000
  435. FULL EQU X'FF' MASK FOR TURNING OFF FLAGS @V60B6B8 00434000
  436. COPY SAVE @V60B6B8 00435000
  437. RDEVDEMT EQU SAVEWRK1 @V60B6B8 00436000
  438. DEMNTRET EQU SAVEWRK2 @V60B6B8 00437000
  439. VSERADDR EQU SAVEWRK3 @V60B6B8 00438000
  440. RDEVADDR EQU SAVEWRK4 @V60B6B8 00439000
  441. RETNADDR EQU SAVEWRK5 @V60B6B8 00440000
  442. ADDRSAVE EQU SAVEWRK6 @V60B6B8 00441000
  443. IOSRETAD EQU SAVEWRK7 @V60B6B8 00442000
  444. SAVRETAD EQU SAVEWRK8 @V60B6B8 00443000
  445. EJECT 00444000
  446. OSVSCOM MSSCOM @V60B6B8 00445000
  447. EJECT 00446000
  448. PSA @V60B6B8 00447000
  449. COPY EQU @V60B6B8 00448000
  450. COPY VMBLOK @V60B6B8 00449000
  451. COPY TIMER @V60B6B8 00450000
  452. COPY IOBLOKS @V60B6B8 00451000
  453. COPY UDIRECT @V60B6B8 00452000
  454. COPY DEVTYPES @V60B6B8 00453000
  455. COPY RBLOKS @V60B6B8 00454000
  456. COPY VBLOKS @V60B6B8 00455000
  457. END DMKSSU 00456000