Table of Contents

DMKVDR Source

References

Source Listing

DMKVDR.ASSEMBLE.txt
  1. VDR TITLE 'DMKVDR (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V200020 00002000
  3. COPY OPTIONS @V200020 00003000
  4. COPY LOCAL @V200020 00004000
  5. SPACE 2 00005000
  6. *. 00006000
  7. * MODULE NAME - 00007000
  8. * 00008000
  9. * DMKVDR 00009000
  10. * 00010000
  11. * CONTENTS - 00011000
  12. * 00012000
  13. * DMKVDREL - SUBROUTINE TO RELEASE A VIRTUAL DEVICE 00013000
  14. *. 00014000
  15. SPACE 2 00015000
  16. DMKVDR START 00016000
  17. SPACE 00017000
  18. MODID DC CL8'DMKVDR' PAGEABLE MODULE IDENTIFIER @V200020 00018000
  19. SPACE 00019000
  20. USING PSA,R0 @V200020 00020000
  21. USING VMBLOK,R11 @V200020 00021000
  22. USING SAVEAREA,R13 @V200020 00022000
  23. SPACE 00023000
  24. EXTRN DMKVSPCO,DMKVSPCR @V200020 00024000
  25. EXTRN DMKSTKCP @VA12861 00024500
  26. EXTRN DMKCVTBH,DMKSCNRN,DMKSCNRD @V200020 00025000
  27. EXTRN DMKIOSQR,DMKCFPRD,DMKTDKRL,DMKACODV @V200020 00026000
  28. EXTRN DMKIOSRW,DMKVCARS @V200020 00027000
  29. EXTRN DMKPTRPW @VA08037 00027200
  30. EXTRN DMKSSSRL @VA11344 00027600
  31. EJECT 00028000
  32. *. 00029000
  33. * SUBROUTINE NAME - 00030000
  34. * 00031000
  35. * DMKVDREL - SUBROUTINE TO RELEASE A VIRTUAL DEVICE 00032000
  36. * 00033000
  37. * FUNCTION - 00034000
  38. * 00035000
  39. * TO PERFORM THE NECESSARY FUNCTIONS TO RELEASE A REAL OR 00036000
  40. * VIRTUAL DEVICE FROM A VIRTUAL MACHINE. 00037000
  41. * 00038000
  42. * ATTRIBUTES - 00039000
  43. * 00040000
  44. * REENTRANT, PAGEABLE, CALLED VIA SVC 00041000
  45. * 00042000
  46. * ENTRY POINT - 00043000
  47. * 00044000
  48. * DMKVDREL 00045000
  49. * 00046000
  50. * ENTRY CONDITIONS - 00047000
  51. * 00048000
  52. * GPR 1 = VIRTUAL DEVICE ADDRESS 00049000
  53. * GPR 6 = ADDRESS OF VCHBLOK 00050000
  54. * GPR 7 = ADDRESS OF VCUBLOK 00051000
  55. * GPR 8 = ADDRESS OF VDEVBLOK 00052000
  56. * GPR 11 = ADDRESS OF USER'S VMBLOK 00053000
  57. * GPR 12 = ADDRESS OF DMKVDREL 00054000
  58. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00055000
  59. * 00056000
  60. * EXIT CONDITIONS - 00057000
  61. * 00058000
  62. * DEVICE HAS BEEN RELEASED FROM THE VIRTUAL MACHINE 00059000
  63. * 00060000
  64. * CALLS TO OTHER ROUTINES - 00061000
  65. * 00062000
  66. * DMKCFPRD 00063000
  67. * DMKACODV 00064000
  68. * DMKCVTBH 00065000
  69. * DMKQCNWT 00066000
  70. * DMKFREE 00067000
  71. * DMKSCNRD 00068000
  72. * DMKSCNRN 00069000
  73. * DMKIOSQR 00070000
  74. * DMKTDKRL 00071000
  75. * DMKVSPCR 00072000
  76. * DMKVSPCO 00073000
  77. * DMKVCARS 00074000
  78. * DMKFRET 00075000
  79. * DMKPTRPW 00075200
  80. * 00076000
  81. * EXTERNAL REFERENCES - 00077000
  82. * 00078000
  83. * DMKIOSRW 00079000
  84. * TABLES / WORK AREAS - 00080000
  85. * 00081000
  86. * VMBLOK 00082000
  87. * VCHBLOK 00083000
  88. * VCUBLOK 00084000
  89. * VDEVBLOK 00085000
  90. * VSPXBLOK 00086000
  91. * IOBLOK 00087000
  92. * 00088000
  93. * REGISTER USAGE - 00089000
  94. * 00090000
  95. * GPR 6 = ADDRESS OF VCHBLOK 00091000
  96. * GPR 7 = ADDRESS OF VCUBLOK 00092000
  97. * GPR 8 = ADDRESS OF VDEVBLOK 00093000
  98. * GPR 10 = ADDRESS OF IOBLOK 00094000
  99. * GPR 11 = ADDRESS OF USER'S VMBLOK 00095000
  100. * GPR 12 = BASE REGISTER 00096000
  101. * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00097000
  102. * GPRS 0-5 AND 14-15 ARE WORK REGISTERS. 00098000
  103. * GPR 9 IS NOT USED. 00099000
  104. * 00100000
  105. * NOTES - 00101000
  106. * 00102000
  107. * NONE 00103000
  108. * OPERATION - 00104000
  109. * 00105000
  110. * 1. A CALL IS MADE TO DMKCFPRD TO RESET THE DEVICE AND 00106000
  111. * CLEAR ANY ACTIVE IOBLOK OR PENDING I/O INTERRUPTS. 00107000
  112. * 00108000
  113. * 2. CHECKS ARE THEN MADE TO SEE IF THE DEVICE IS DEDICATED, 00109000
  114. * A DISK STORAGE DEVICE, A UNIT RECORD DEVICE, A SPECIAL 00110000
  115. * DEVICE, OR A CONSOLE DEVICE. (IF NONE OF THESE, AN ABEND 00111000
  116. * VIA SVC 0 IS GENERATED, INDICATING AN INTERNAL CODING ERROR.) 00112000
  117. * 00113000
  118. * 3. DEDICATED DEVICE: THE RDEVBLOK ADDRESS IS OBTAINED FROM 00114000
  119. * THE VDEVBLOK, AND ITS ADDRESS IS THEN CLEARED. IF THE DEVICE 00115000
  120. * IS A TAPE, AN IOBLOK TO REWIND AND UNLOAD THE TAPE IS BUILT, 00116000
  121. * AND DMKIOSQR IS CALLED TO START THE OPERATION. IN ANY EVENT, 00117000
  122. * THE DMKACODV ACCOUNTING ROUTINE IS CALLED, THE DEDICATED FLAG 00118000
  123. * BITS IN THE RDEVBLOK AND VDEVBLOK ARE CLEARED, THE OPERATOR IS 00119000
  124. * SENT A MESSAGE THAT THE DEVICE HAS BEEN RELEASED (BY WHAT 00120000
  125. * USER), AND RETURN IS MADE. 00121000
  126. * 00122000
  127. * 4. DISK STORAGE DEVICE: THE RDEVBLOK ADDRESS IS OBTAINED 00123000
  128. * FROM THE VDEVBLOK, AND ITS ADDRESS (VDEVREAL) IS THEN CLEARED. 00124000
  129. * IF THE DEVICE IS A T-DISK, DMKACODV IS CALLED TO BUILD AN 00125000
  130. * ACCOUNTING RECORD. THEN DMKTDKRL IS CALLED TO RETURN THE 00126000
  131. * T-DISK SPACE TO THE SYSTEM, AND RETURN IS MADE. IF NOT, THE 00127000
  132. * COUNT OF LINKS TO THE DISK IN THE RDEVBLOK IS DECREMENTED, AND 00128000
  133. * THE CHAIN OF LINKS TO THE DISK ACCESSIBLE VIA THE VDEVBLOK IS 00129000
  134. * ADJUSTED TO DELETE THE CALLER'S USERID. RETURN IS THEN MADE. 00130000
  135. * 00131000
  136. * 5. UNIT RECORD DEVICE: IF NO FILES ARE OPEN, RETURN IS MADE. 00132000
  137. * IF YES, THEN DMKVSPCO IS CALLED TO CLOSE THE PRINTER OR PUNCH, 00133000
  138. * OR DMKVSPCR IS CALLED TO CLOSE THE READER, AND RETURN IS MADE. 00134000
  139. * 00135000
  140. * 6. SPECIAL DEVICE: IF THE DEVICE IA A VIRTUAL CHANNEL- 00136000
  141. * TO-CHANNEL ADAPTER (CTCA), DMKVCARS IS CALLED TO RESET THE 00137000
  142. * UNIT AND DISCONNECT IT FROM ANOTHER ADAPTER, IF NEEDED. 00138000
  143. * IF IT IS NOT A VIRTUAL CTCA, RETURN IS IMMEDIATE. 00139000
  144. * 00140000
  145. * 7. CONSOLE DEVICE: IF THE DEVICE IS NOT A 1052 TYPE DEVICE, 00141000
  146. * EXIT IS IMMEDIATELY MADE TO THE CALLER. IF CONSOLE SPOOL 00142000
  147. * FILE IS ACTIVE; CALL DMKVSPCO TO CLOSE THE FILE. 00143000
  148. * RETURN IS THEN MADE TO THE CALLER. 00144000
  149. *. 00145000
  150. SPACE 2 00146000
  151. *********************************************************************** 00147000
  152. * 00148000
  153. * DMKVDREL = SUBROUTINE TO RELEASE A VIRTUAL DEVICE 00149000
  154. * 00150000
  155. *********************************************************************** 00151000
  156. SPACE 00152000
  157. DMKVDREL RELOC RELEASE A VIRTUAL DEVICE @V200020 00153000
  158. CALL DMKPTRPW @VA08037 00153200
  159. L R1,=A(DMKCFPRD) AVOID LOSING CONTROL DURING @VA04788 00153350
  160. TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) SVC TO DMKCFPRD @VA04788 00153700
  161. USING VDEVBLOK,R8 @V200020 00154000
  162. TM VDEVFLAG,VDEVDIAL IS IT A DIALED DEVICE? @VA12861 00154020
  163. BZ COMMON NO, CONTINUE @VA12861 00154040
  164. CLC VDEVREAL,F0 HAS DIAL PROCESS COMPLETED? @VA12861 00154060
  165. BE COMMON YES, CONTINUE @VA12861 00154080
  166. CLI VDEVTYPC,CLASGRAF IS IT GRAPHIC? @VA12861 00154100
  167. BNE COMMON NO, CONTINUE @VA12861 00154120
  168. ** IF IT IS TO RELEASE/DROP A DIALED IN CONSOLE, PROCESS THE 00154140
  169. ** PENDING I/O FIRST. THAT IS, GET A CPEXBLOK TO RETURN TO 00154160
  170. ** PROCESS RESET/DROP DEVICE FOR A DIALED CONSOLE AFTER ITS 00154180
  171. ** OUTSTANDING I/O IS PROCESSED CORRECTLY. 00154200
  172. LA R0,CPEXSIZE GET A CPEXBLOK @VA12861 00154220
  173. CALL DMKFREE @VA12861 00154240
  174. USING CPEXBLOK,R1 CPEXBLOK ADDRESSABILITY @VA12861 00154260
  175. LA R15,COMMON SAVE RETURN ADDRESS @VA12861 00154280
  176. STM R15,R14,CPEXADD AND ALL THE REGISTERS. @VA12861 00154300
  177. CALL DMKSTKCP STACK THE CPEXBOK @VA12861 00154320
  178. GOTO DMKDSPCH AND EXIT. @VA12861 00154340
  179. DROP R1 @VA12861 00154360
  180. COMMON EQU * @VA12861 00154380
  181. OI VDEVFLAG,VDEVDET PREVENT VIR I/O TO DEV @VA04343 00154500
  182. SR R0,R0 ZERO WORK REGISTER 00155000
  183. CALL DMKCFPRD RESET THE DEVICE 00156000
  184. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00156100
  185. TM VDEVSTAT,VDEVDED IS THIS A DEDICTED DEVICE? @V407438 00157000
  186. BO RELDEDD BRANCH IF YES 00158000
  187. TM VDEVTYPC,CLASDASD IS THIS A DISK STORAGE DEVICE ? 00159000
  188. BO RELDISK BRANCH IF YES 00160000
  189. TM VDEVTYPC,CLASURI+CLASURO IS THIS A UNIT RECORD DEVICE ? 00161000
  190. BNZ RELURDV BRANCH IF YES 00162000
  191. TM VDEVTYPC,CLASSPEC IS THIS A SPECIAL DEVICE ? 00163000
  192. BO RELSPEC BRANCH IF YES 00164000
  193. TM VDEVTYPC,CLASTERM IS THIS A CONSOLE DEVICE ? 00165000
  194. BO RELCONS BRANCH IF YES 00166000
  195. B RELEXIT LEAVE NOW 00167000
  196. SPACE 3 00168000
  197. RELDEDD L R2,VDEVREAL LOAD ATTACHED RDEVBLOK ADDRESS 00169000
  198. USING RDEVBLOK,R2 00170000
  199. TM VDEVTYPC,CLASTAPE IS THIS A TAPE DRIVE ? 00171000
  200. BO RELTAPE BRANCH IF YES 00172000
  201. CLC RDEVTYPC(2),=AL1(CLASDASD,TYP2305) FIXED HEAD? @VA01855 00173000
  202. BNE RELDOFF NO -- NORMAL HANDLING @V200820 00174000
  203. TM RDEVADD+1,X'07' IS THIS THE BASE EXPOSURE ? @V200820 00175000
  204. BNZ RELDRUM NO -- ONLY CUT ONE CARD @V200020 00176000
  205. EJECT 00177000
  206. RELDOFF EQU * PUNCH AN ACCOUNTING CARD 00178000
  207. CALL DMKACODV,AFFINITY @V4075A0 00179100
  208. RELDRUM EQU * @V200020 00180000
  209. TM RDEVTYPC,CLASDASD DASD DEVICE? @VA11344 00180100
  210. BZ NOTMSS NO THEN IT'S NOT AN MSS DEVICE @VA11344 00180200
  211. TM PSAMSS,MSSPRES IS THE MSS PRESENT? @VA11344 00180300
  212. BNO NOTMSS NO - THEN DON'T ISSUE ANY RLQSH @VA11344 00180400
  213. TM RDEVFLAG,RDEVVMNT WAS THIS VOL MOUNTED BY CP? @VA11344 00180500
  214. BNO NOTMSS NO - THEN DON'T ISSUE RELINQUISH @VA11344 00180600
  215. CALL DMKSSSRL ELSE ISSUE A RELINQUISH REQUEST @VA11344 00180700
  216. NOTMSS DS 0H @VA11344 00180800
  217. ST R0,VDEVREAL ZERO RDEVBLOK ADDRESS @V200020 00181000
  218. NI VDEVSTAT,255-VDEVDED TURN OFF DEDICATED FLAG 00182000
  219. NI RDEVSTAT,255-RDEVDED TURN OFF DEDICATED FLAG 00183000
  220. TM RDEVTYPC,CLASDASD IS THIS A DISK STORAGE DEV ?@V200020 00184000
  221. BZ NOTDASD NO-DO NOT TURN ON THE MOUNTED BIT@VA11344 00185000
  222. OI RDEVFLAG,RDEVMOUT INDICATE VOLUME NOT ATTACHED 00186000
  223. NOTDASD DS 0H @VA11344 00186500
  224. L R1,ASYSVM SET VMBLOK POINTER... 00187000
  225. ST R1,RDEVUSER ...TO POINT TO SYSTEM VMBLOK 00188000
  226. LH R6,RDEVATT REMEMBER VIRT. ADDR. FOR MESSAGE 00189000
  227. MVC RDEVATT(2),ZEROES CLEAR THE VIRTUAL ADDRESS 00190000
  228. MVC RDEVTMAT,ZEROES ZERO TIME ATTACHED 00191000
  229. TM RDEVTYPC,CLASURO IS IT A 3800 POSSIBLY? @V60B9BA 00191100
  230. BZ NOT3800 XFER IF NOT @V60B9BA 00191200
  231. CLI RDEVTYPE,TYP3800 IS IT REALLY A 3800 ? @V60B9BA 00191300
  232. BNE NOT3800 XFER IF NOT @V60B9BA 00191400
  233. MVC RDEVOVLY,BLANKS BLANK OUT THE FLASH OVERLAY @V60B9BA 00191500
  234. MVI RDEVCURP,22 ASSUME PAGE SIZE OF 11 IN. @V60B9BA 00191600
  235. MVC RDEVDELP,ZEROES ZERO THE DEL PURGE ANCHOR @V60B9BA 00191700
  236. NOT3800 EQU * @V60B9BA 00191800
  237. TM VDEVSTAT,VDEVCATT ATTACHED VIA CONSOLE FUNCTION ? 00192000
  238. BZ RELEXIT NO - SKIP THE MESSAGE 00193000
  239. NI VDEVSTAT,X'FF'-VDEVCATT TURN OFF FLAG BIT 00194000
  240. MVI SAVEWRK2,X'40' CLEAR PSEUDO-BUFFER 00195000
  241. MVC SAVEWRK2+1(31),SAVEWRK2 ... 00196000
  242. MVC SAVEWRK4+1(8),=C'DETACHED' CUE... 00197000
  243. LR R8,R2 SET R8 = ADDRESS OF RDEVBLOK, 00198000
  244. CALL DMKSCNRN GET EBCDIC DEVICE TYPE-NAME 00199000
  245. ST R1,SAVEWRK2 ...INTO START OF MESSAGE 00200000
  246. CALL DMKSCNRD DEVICE-ADDRESS TO CCU FORM, 00201000
  247. CALL DMKCVTBH CONVERT ADDRESS TO PRINTABLE CHARACTERS 00202000
  248. STCM R1,B'0111',SAVEWRK3+1 REAL ADDRESS 00203000
  249. MVC SAVEWRK6+3(8),VMUSER USERID 00204000
  250. LR R1,R6 VIRTUAL ADDRESS 00205000
  251. CALL DMKCVTBH 00206000
  252. STCM R1,B'0111',SAVEWRK9 ... 00207000
  253. LA R0,SAVEWRK9+3-SAVEWRK2 MESSAGE LENGTH 00208000
  254. LA R1,SAVEWRK2 LOAD MESSAGE ADDRESS 00209000
  255. CALL DMKQCNWT,PARM=NORET+OPERATOR NOTIFY THE OPERATOR 00210000
  256. RELEXIT L R8,SAVER8 POINT TO VDEVBLOK AGAIN @VA04788 00211000
  257. NI VDEVFLAG,X'FF'-VDEVDET VDEVDET NO LONGER NEEDED @VA04788 00211250
  258. EXIT @VA04343 00211500
  259. EJECT 00212000
  260. RELTAPE EQU * HRC003DK 00213590
  261. TM VDEVFLG2,VDEVTNR NO TAPE RUN ASKED ? HRC003DK 00213680
  262. BO RELDOFF YES - JUST GO BACK HRC003DK 00213770
  263. LA R0,IOBSIZE GET AN IOBLOK HRC003DK 00213860
  264. CALL DMKFREE GET AN IOBLOK FOR REWIND AND UNLOAD 00214000
  265. LR R10,R1 LOAD IOBLOK BASE REGISTER 00215000
  266. USING IOBLOK,R10 00216000
  267. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR THE IOBLOK 00217000
  268. MVI IOBFLAG,IOBRELCU INDICATE CU RELEASED AT INITIATION 00218000
  269. L R1,ASYSVM STORE SYSTEM VMBLOK ADDRESS IN IOBLOK 00219000
  270. ST R1,IOBUSER .. 00220000
  271. L R1,=A(DMKIOSRW) STORE INTERRUPT RETURN ADDRESS IN IOBLOK 00221000
  272. ST R1,IOBIRA .. 00222000
  273. LA R0,3 SIZE OF RCWTASK NEEDED @VA04137 00223200
  274. CALL DMKFREE GET THE RCWTASK @VA04137 00223400
  275. USING RCWTASK,R1 ADDRESSABILITY @VA04137 00223600
  276. XC RCWTASK(24),RCWTASK CLEAR RCWTASK @VA04137 00223800
  277. LA R15,3 ESTABLISH RCWTASK SIZE @VA04137 00224000
  278. STH R15,RCWCCNT STORE TOTAL NO OF DBL-WORDS @VA04137 00224200
  279. L R15,FFS INITIALIZE RCWHEAD... @VA04137 00224400
  280. STH R15,RCWHEAD ...TO 'FFFF' @VA04137 00224600
  281. LA R15,RCWCCW NOW WE HAVE TO... @VA04137 00224800
  282. ST R15,IOBCAW ...POINT IOBCAW TO THE CCW AND...@VA04137 00225000
  283. MVC 0(8,R15),RUNCCW ...MOVE RUN CCW TO RCWTASK @VA04137 00225200
  284. DROP R1 @VA04137 00225400
  285. LR R8,R2 LOAD RDEVBLOK BASE REGISTER 00226000
  286. CALL DMKIOSQR REWIND AND UNLOAD THE TAPE DRIVE 00227000
  287. L R8,SAVER8 RELOAD VDEVBLOK ADDRESS 00228000
  288. B RELDOFF CONTINUE 00229000
  289. DROP R2,R10 00230000
  290. EJECT 00231000
  291. RELDISK L R2,VDEVREAL LOAD RDEVBLOK ADDRESS 00232000
  292. USING RDEVBLOK,R2 00233000
  293. TM VDEVFLAG,VDEVTDSK IS THIS A T-DISK ? 00234000
  294. BO RELTDSK BRANCH IF YES 00235000
  295. ST R0,VDEVREAL ZERO RDEVBLOK ADDRESS 00236000
  296. LH R3,RDEVLNKS GET COUNT OF LINKS @VA03163 00237000
  297. S R3,F1 DECREMENT AND TEST @VA03163 00238000
  298. BP RELPOS STILL SOME LEFT, FIND NEXT ONE @VA03163 00239000
  299. BNZ ABEND3 NO LINKS TO BEGIN WITH: ERROR @VA03163 00240000
  300. TM PSAMSS,MSSPRES IS THE MSS PRESENT? @VA11344 00241000
  301. BNO RELPOS1 NO - THEN DON'T ISSUE RELINQUISH @VA11344 00241100
  302. TM RDEVFLAG,RDEVVMNT THIS VOL MNTD BY CP? @VA11344 00241200
  303. BNO RELPOS1 NO - THEN DON'T RELINQUISH IT! @VA11344 00241300
  304. * 00241400
  305. * ISSUE A RELINQUISH REQUEST FOR THIS VOLUME 00241500
  306. * 00241600
  307. CALL DMKSSSRL ISSUE RELINQUISH REQUEST @VA11344 00241700
  308. * 00242000
  309. RELPOS1 DS 0H @VA11344 00242300
  310. RELPOS STH R3,RDEVLNKS RESET COUNT OF LINKS @VA03163 00243000
  311. L R4,VDEVLINK GET NEXT VIRTUAL DEVICE BLOCK @VA03163 00244000
  312. LTR R4,R4 IS IT THERE? @VA03163 00245000
  313. BZ RELEXIT NO OUR WORK IS DONE @VA03163 00246000
  314. LA R3,1(,R3) BUMP LINK COUNT FOR SCAN @VA03163 00247000
  315. LR R1,R8 SAVE OUR VDEVBLOK ADDR @VA03163 00248000
  316. RELLINK LR R15,R8 SAVE PREVIOUS VDEVBLOK ADDR @VA03163 00249000
  317. L R8,VDEVLINK LOAD NEXT VDEV POINTER @VA03163 00250000
  318. CR R8,R1 DOES IT MATCH OURS? @VA03163 00251000
  319. BE RELRESET YES, DELINK @VA03163 00252000
  320. BCT R3,RELLINK NO, LOOP @VA03163 00253000
  321. B ABEND3 OUR BLOCK NEVER FOUND IN CHAIN @VA03163 00254000
  322. SPACE 1 00255000
  323. RELRESET ST R4,VDEVLINK-VDEVBLOK(R15) OUR FWD PTR TO PREV BK@V407438 00255200
  324. ST R0,VDEVLINK CLEAR OLD VDEVBLOK LINK FIELD @V407438 00255400
  325. L R1,VDEVRRB GET THE MDISK RES/REL BLOCK @V407438 00255600
  326. ST R0,VDEVRRB CLEAR THE POINTER TO IT @V407438 00255800
  327. NI VDEVFLG2,X'FF'-VDEVRRF NO MORE RES/REL FTR HERE @V407438 00256000
  328. CR R4,R8 DOES DET. DEVICE LINK TO ITSELF? @V407438 00256200
  329. BNE RELEXIT NOPE, NOT LAST ONE, BR. @V407438 00256400
  330. LTR R1,R1 IS THERE A VRRBLOK? @V407438 00256600
  331. BZ RELEXIT NOPE, DONE, BR. @V407438 00256800
  332. LA R0,VRRSIZE YUP, GET ITS SIZE @V407438 00257000
  333. CALL DMKFRET RETURN STORAGE TO THE SYSTEM @V407438 00257200
  334. B RELEXIT EXIT @VA03163 00258000
  335. SPACE 3 00259000
  336. ABEND3 ABEND 3 @VA03163 00260000
  337. EJECT 00261000
  338. RELTDSK DS 0H RELEASE A T-DISK 00262000
  339. CALL DMKACODV CALL ACOUNTING ROUTINE TO CUT A CARD 00263000
  340. LH R0,VDEVBND NUMBER OF CYLINDERS TO RELEASE 00264000
  341. LH R1,VDEVRELN FIRST CYLINDER OF AREA 00265000
  342. L R8,VDEVREAL RDEVBLOK OF ASSIGNED DEVICE 00266000
  343. CALL DMKTDKRL RETURN T-DISK SPACE TO CP 00267000
  344. B RELEXIT EXIT 00268000
  345. DROP R2 00269000
  346. SPACE 2 00270000
  347. * INPUT OR OUTPUT SPOOLED DEVICE: 00271000
  348. RELURDV DS 0H NOTE: R0 = 0 00272000
  349. TM VDEVTYPC,CLASURO IS THIS AN OUTPUT TYPE DEVICE ? 00273000
  350. BO RELOPUT BRANCH IF YES 00274000
  351. C R0,VDEVSPL IS AN INPUT FILE OPEN ? 00275000
  352. BE RELEXIT IF NOT, GO EXIT. 00276000
  353. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00277000
  354. CALL DMKVSPCR IF YES, CLOSE THE CARD READER 00278000
  355. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00279000
  356. B RELEXIT AND GO EXIT 00280000
  357. SPACE 00281000
  358. RELOPUT BAL R3,CLOSSPL CLOSE ANY SPOOL FILE-FRET XBLOK @VA04507 00282100
  359. TM VDEVTYPE,TYP3211 IS IT A 3203/3211 PRINTER?? @V386298 00283100
  360. BNO RELEXIT NO--GO EXIT @V386298 00283200
  361. LA R0,VFCBSIZE GET SIZE OF FORMS CONTROL BLOCK, 00296000
  362. LA R2,VDEVFCBK POINT TO FORMS CONTROL BLOCK (IF ANY) 00297000
  363. B RELFRET AND GO RETURN IT TO FREE STORAGE. 00298000
  364. SPACE 2 00299000
  365. RELSPEC EQU * RELEASE SPECIAL-CLASS DEVICES 00300000
  366. CLI VDEVTYPE,TYPCTCA CHANNEL-TOCHANNEL ADAPTER ? 00301000
  367. BNE RELEXIT NO - FORGET IT 00302000
  368. CALL DMKVCARS RESET ADAPTER + FRET BLOCKS 00303000
  369. B RELEXIT 00304000
  370. EJECT 00305000
  371. RELCONS CLI VDEVTYPE,TYP1052 IS THIS A CONSOLE DEVICE ? 00306000
  372. BNE RELEXIT BRANCH IF NO 00307000
  373. BAL R3,CLOSSPL CLOSE ANY SPOOL FILE-FRET XBLOK @VA04507 00308100
  374. L R0,FFS SET TO MINUS ONE @VA04507 00309100
  375. STH R0,VMVTERM NO MORE VIRTUAL CONSOLE @VM08536 00314000
  376. LA R2,VDEVCON POINT TO THE CONTROL BLOCK @VA00881 00315000
  377. L R3,0(R2) GET CONTROL BLOCK ADDRESS @VA00881 00316000
  378. LTR R3,R3 IS THERE ONE @VA00881 00317000
  379. BZ RELEXIT NONE @VA00881 00318000
  380. USING VCONCTL,R3 @VA00881 00319000
  381. SR R0,R0 CLEAR @V200730 00320000
  382. L R1,VCONRBUF GET READ BUFFER ADDRESS @V200730 00321000
  383. LTR R1,R1 IS THERE ONE ?? @V200730 00322000
  384. BZ RELC3 NO, CONT @V200730 00323000
  385. LH R0,VCONRBSZ GET BUFFER SIZE HRC101DK 00324490
  386. CALL DMKFRET FRET IT @V200730 00325000
  387. RELC3 L R1,VCONWBUF GET WRITE BUFFER ADDRESS 00326000
  388. LTR R1,R1 IS THERE ONE ?? 00327000
  389. BZ RELC4 NO, CONT 00328000
  390. IC R0,VCONWBSZ GET BUFFER SIZE 00329000
  391. CALL DMKFRET FRET BUFFER 00330000
  392. RELC4 DS 0H 00331000
  393. L R1,VCONBUF GET DATA BUFFER POINTER @VA00881 00332000
  394. LTR R1,R1 DOES ONE EXIST @VA00881 00333000
  395. BZ RELC2 NO @VA00881 00334000
  396. SR R0,R0 CLEAR HIGH ORDER BYTES @VA00881 00335000
  397. LH R0,VCONBFSZ LOAD DATA BUFFER SIZE HRC101DK 00336490
  398. CALL DMKFRET RETURN THE DATA BUFFER @VA00881 00337000
  399. SR R0,R0 @VM08825 00338000
  400. ST R0,VCONBUF CLEAR DATA BUFFER POINTER @VM08825 00339000
  401. DROP R3 @VA00881 00340000
  402. RELC2 LA R0,VCONSIZE LOAD CONTROL BLOCK SIZE @VA00881 00341000
  403. RELFRET L R1,0(,R2) GET CONTROL BLOCK ADDRESS 00342000
  404. LTR R1,R1 (IF ANY) 00343000
  405. BZ RELEXIT EXIT IF NONEXISTENT. 00344000
  406. CALL DMKFRET RETURN THE CONTROL BLOCK TO CP 00345000
  407. SR R0,R0 CLEAR ADDRESS OF 'GONE' CONTROL BLOCK 00346000
  408. ST R0,0(,R2) ... 00347000
  409. B RELEXIT GO EXIT . . . 00348000
  410. * HERE TO CLEAN UP VIRTUAL SPOOL DEVICE BEFORE DETACHING 00348050
  411. SPACE 2 00348100
  412. CLOSSPL C R0,VDEVSPL IS AN OUTPUT FILE OPEN? @VA04507 00348150
  413. BE RELOEXTN IF NOT, DONT TRY TO CLOSE IT @VA04507 00348200
  414. SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA04507 00348250
  415. CALL DMKVSPCO,PARM=0 CLOSE PRT, PUN OR CONS @VA04507 00348300
  416. AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA04507 00348350
  417. RELOEXTN L R1,VDEVEXTN ADDRESS OF VSPXBLOK @VA04507 00348400
  418. LTR R1,R1 DOES ONE EXIST? @VA04507 00348450
  419. BZR R3 NOPE-RETURN @VA04507 00348500
  420. SR R0,R0 CLEAR COUNT REGISTER @VA04507 00348550
  421. ST R0,VDEVEXTN NO MORE VSPXBLOK @VA04507 00348600
  422. IC R0,VSPXLEN-VSPXBLOK(R1) SET COUNT REG @VA04507 00348650
  423. CALL DMKFRET RELEASE VSPXBLOK STORAGE @VA04507 00348700
  424. BR R3 RETURN @VA04507 00348750
  425. EJECT 00348800
  426. EJECT 00349000
  427. RUNCCW CCW X'0F',0,SILI,1 REWIND AND UNLOAD FOR TAPE D@V200020 00350000
  428. SPACE 2 00351000
  429. LTORG @V200020 00352000
  430. EJECT 00353000
  431. COPY SAVE @V200020 00354000
  432. COPY EQU @V200020 00355000
  433. COPY DEVTYPES @V200020 00356000
  434. PSA @V200020 00357000
  435. COPY VMBLOK @V200020 00358000
  436. COPY RBLOKS @V200020 00359000
  437. COPY VBLOKS @V200020 00360000
  438. COPY IOBLOKS @V200020 00361000
  439. END DMKVDR @V200020 00362000