Table of Contents

DMKSSS Source

References

Source Listing

DMKSSS.ASSEMBLE.txt
  1. SSS TITLE 'DMKSSS (CP) VM/370 - RELEASE 6' 00001000
  2. * 00002000
  3. * MODULE NAME - 00003000
  4. * 00004000
  5. * DMKSSS 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * THIS IS THE 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. * DMKSSSL1 - FROM DMKLOG: PROCESS A DED STATEMENT 00023000
  24. * WITH THE 3330V PARAMETER 00024000
  25. * 00025000
  26. * DMKSSSL2 - FROM DMKLOG: PROCESS A DED STATEMENT 00026000
  27. * WITH 'RADDR' AND 'VOLID' SPECIFIED, AND THE 00027000
  28. * 'RADDR' IS A 3330V 00028000
  29. * 00029000
  30. * DMKSSSL3 - FROM DMKLOG: PROCESS A DED STATEMENT 00030000
  31. * WITH A 'VOLID' BUT NO 'RADDR'. TRY TO FIND A 3330V 00031000
  32. * WITH A VOLUME SERIAL OF 'VOLID' 00032000
  33. * 00033000
  34. * DMKSSSHV - FROM DMKHVC: PROCESS DIAGNOSE CODE 78 00034000
  35. * 00035000
  36. * DMKSSSUS - FROM DMKUSO: THE VIRTUAL MACHINE WHICH IS 00042000
  37. * ACTING AS THE MSS COMMUNICATOR IS LOGGING OFF 00043000
  38. * 00044000
  39. * DMKSSSVA - FROM DMKVDA: ATTACHING A 3330V TO EITHER 00045000
  40. * THE SYSTEM OR A VIRTUAL MACHINE 00046000
  41. * 00047000
  42. * DMKSSSLN - FROM DMKLNK: ATTEMPT TO MOUNT THE NEEDED 00048000
  43. * 'VOLID' ON A 3330V 00049000
  44. * 00050000
  45. * DMKSSSDE - FROM DMKDEF: DEMOUNT AN MSS VOLUME FROM THE 00054000
  46. * SPECIFIED 3330V 00055000
  47. * 00056000
  48. * DMKSSSRL - FROM DMKVDR: ISSUE A RELINQUISH REQUEST TO 00056100
  49. * DESTAGE ANY CHANGED CYLINDERS OF THE VOLUME MOUNTED ON 00056200
  50. * THE SPECIFIED VUA. 00056300
  51. * 00056400
  52. * ENTRY CONDITIONS - 00057000
  53. * 00058000
  54. * DEFINED FOR EACH ENTRY POINT IN THE PROLOGUE TO THAT 00059000
  55. * ENTRY POINT 00060000
  56. * 00061000
  57. * EXIT CONDITIONS - 00062000
  58. * 00063000
  59. * EXIT IS THROUGH THE STANDARD RETURN TO THE CALLING 00064000
  60. * MODULE. A RETURN CODE IS PASSED IN GPR 15 00065000
  61. * 00066000
  62. * GPR 15 = 0 MEANS FUNCTION COMPLETE, NO ERRORS 00067000
  63. * GPR 15 = 4 MEANS AN MSS VOLUME MOUNT HAS BEEN 00068000
  64. * SCHEDULED, BUT IS NOT YET COMPLETE. 00069000
  65. * AN MSSCOM BLOCK HAS BEEN CREATED AND 00070000
  66. * QUEUED PENDING MOUNT COMPLETE. A MESSAGE 00071000
  67. * HAS BEEN SENT TO THE USER STATING THAT 00072000
  68. * A MOUNT IS IN PROCESS 00073000
  69. * GPR 15 = 8 MEANS A SERIOUS ERROR OCCURRED. THE 00074000
  70. * REQUESTED FUNCTION WAS NOT PERFORMED 00075000
  71. * AND NO FURTHER ACTION WILL BE TAKEN ON 00076000
  72. * THE REQUEST 00077000
  73. * 00078000
  74. * OTHER EXIT CONDITIONS, UNIQUE TO A PARTICULAR SERVICE, 00079000
  75. * ARE DEFINED IN THE PROLOGUE TO THAT ENTRY POINT 00080000
  76. * 00081000
  77. * CALLS TO OTHER ROUTINES - 00082000
  78. * 00083000
  79. * SEE THE PROLOGUE FOR A PARTICULAR ENTRY POINT 00084000
  80. * 00085000
  81. * EXTERNAL REFERENCES - 00086000
  82. * 00087000
  83. * NONE 00088000
  84. * 00089000
  85. * NOTE THAT DMKSSS CONTAINS TWO QUEUE ANCHORS WHICH ARE 00090000
  86. * REFERENCED BY OTHER ROUTINES: 00091000
  87. * 00092000
  88. * DMKSSSMQ - THE ANCHOR FOR THE QUEUE OF MSSCOM BLOCKS 00093000
  89. * WAITING FOR MSS MOUNTS 00094000
  90. * 00095000
  91. * DMKSSSRQ - THE ANCHOR FOR THE QUEUE OF MSSCOM BLOCKS 00096000
  92. * WAITING TO BE PROCESSED BY THE MSS 00097000
  93. * COMMUNICATOR VIRTUAL MACHINE 00098000
  94. * 00099000
  95. * TABLES/WORKAREAS - 00100000
  96. * 00101000
  97. * MSSCOM 00102000
  98. * RDEVBLOK 00103000
  99. * VDEVBLOK 00104000
  100. * UDEVBLOK 00105000
  101. * IOBLOK 00106000
  102. * VMBLOK 00107000
  103. * UDEVBLOK 00108000
  104. * TRQBLOK 00109000
  105. * CPEXBLOK 00110000
  106. * SAVEAREA 00111000
  107. * PSA 00112000
  108. * 00113000
  109. * REGISTER USAGE - 00114000
  110. * 00115000
  111. * GPR 11 = VMBLOK BASE 00116000
  112. * GPR 12 = DMKSSS BASE 00117000
  113. * GPR 13 = SAVEAREA BASE 00118000
  114. * GPR 15 = RETURN CODE 00119000
  115. * 00120000
  116. * THE USAGE OF THE OTHER REGISTERS DEPENDS UPON THE ENTRY 00121000
  117. * POINT. SEE THE PROLOGUE FOR THE SPECIFIC ENTRY 00122000
  118. * 00123000
  119. EJECT 00124000
  120. COPY OPTIONS @V60B6B8 00125000
  121. COPY LOCAL @V60B6B8 00126000
  122. EJECT 00127000
  123. DMKSSS CSECT @V60B6B8 00128000
  124. DC CL8'DMKSSS' @V60B6B8 00129000
  125. SPACE 3 00130000
  126. USING PSA,R0 MAP FOR LOW CORE @V60B6B8 00131000
  127. USING VMBLOK,R11 PRIME VM CONTROL BLOCK @V60B6B8 00132000
  128. USING SAVEAREA,R13 REG SAVE AREA AND WORK AREA @V60B6B8 00133000
  129. ENTRY DMKSSSMQ @V60B6B8 00135000
  130. ENTRY DMKSSSVM @V60B6B8 00136000
  131. EXTRN DMKSCNVU,DMKSCNVS,DMKSCNAU @V60B6B8 00137000
  132. EXTRN DMKSCNRU @V60B6B8 00139000
  133. EXTRN DMKSCNRD @VA09305 00139100
  134. EXTRN DMKERMSG @V60B6B8 00140000
  135. EXTRN DMKSTKCP @V60B6B8 00141000
  136. EXTRN DMKCVTBH @V60B6B8 00142000
  137. EXTRN DMKSTKIO 00143500
  138. EJECT 00144000
  139. * 00145000
  140. * 00146000
  141. * DMKSSSL1 ENTRY POINT 00147000
  142. * 00148000
  143. * 00149000
  144. * ENTRY CONDITIONS - 00150000
  145. * ENTRY IS VIA A CALL (SVC 8) FROM DMKLOG. AT ENTRY, THE 00151000
  146. * PERTINENT REGISTERS ARE: 00152000
  147. * GPR 9 = UDEVBLOK PTR 00153000
  148. * GPR 11 = VMBLOK PTR 00154000
  149. * GPR 12 = DMKSSSL1 ADDRESS 00155000
  150. * GPR 13 = SAVEAREA PTR 00156000
  151. * 00157000
  152. * EXIT CONDITIONS - 00158000
  153. * 00159000
  154. * IF GPR 15 = 0, THEN A 3330V HAS BEEN ALLOCATED TO 00160000
  155. * THE VIRTUAL MACHINE AND, IF THE VOLID PARAMETER 00161000
  156. * WAS SPECIFIED, THE VOLUME IS MOUNTED. 00162000
  157. * 00163000
  158. * IF GPR 15 = 4, THEN A 3330V HAS BEEN ALLOCATED TO 00164000
  159. * THE VIRTUAL MACHINE, BUT AN MSS MOUNT IS IN PROCESS 00165000
  160. * FOR THE VOLID. 00166000
  161. * 00167000
  162. * IF GPR 15 = 8, THEN A 3330V WAS NOT ALLOCATED. 00168000
  163. * 00169000
  164. * CALLS TO EXTERNAL ROUTINES - 00170000
  165. * 00171000
  166. * DMKSCNRU - FIND THE RDEVBLOK FOR THE VUA 00172000
  167. * DMKSCNVU - FIND THE VDEVBLOK FOR THE COMMUNICATOR 00173000
  168. * DMKFREE - GET STORAGE FOR AN MSSCOM AND CPEXBLOK 00174000
  169. * DMKERMSG - ISSUE MESSAGES TO THE USER 00175000
  170. * DMKCVTBH - CONVERT BINARY DEV ADDR TO PRINTABLE HEX 00176000
  171. * DMKDSPCH - DISPATCH THE NEXT ELIGIBLE USER 00177000
  172. * 00178000
  173. * OPERATION - 00179000
  174. * 00180000
  175. * 1) CALL DMKSCNRU TO FIND THE RDEVBLOK FOR THE 00181000
  176. * REQUESTED REAL DEVICE. 00182000
  177. * 00183000
  178. * 2) IF THE REAL DEVICE IS AVAILABLE, BUT A DIFFERENT 00184000
  179. * VOLUME IS MOUNTED ON IT, DEMOUNT THE VOLUME. 00185000
  180. * 00186000
  181. * 3) IF A 'VOLID' WAS SPECIFIED, ALL 3330V'S ARE CHECKED. 00187000
  182. * IF THE VOLUME IS MOUNTED ON A DIFFERENT VUA, BUT 00188000
  183. * AVAILABLE, IT IS DEMOUNTED. 00189000
  184. * 00190000
  185. * 4) AN MSSCOM IS BUILT AND QUEUED TO MOUNT THE 'VOLID'. 00191000
  186. * 00192000
  187. * 5) ONCE THE MOUNT REQUEST HAS BEEN QUEUED, EXIT 00193000
  188. * TO THE DISPATCHER, PENDING DMKMSS PROCESSING THE MOUNT. 00194000
  189. * 00195000
  190. * 6) AFTER THE MOUNT REQUEST HAS BEEN ACCEPTED BY 00196000
  191. * THE MSS, CONTROL IS GIVEN TO DMKSSSHV, WHICH IN TURN 00197000
  192. * RETURNS TO THE DMKSSSL1 CALLER WITH A RETURN CODE 4. 00198000
  193. * 00199000
  194. SPACE 3 00200000
  195. DMKSSSL1 RELOC @V60B6B8 00201000
  196. USING UDEVBLOK,R9 SET BY DMKLOG @V60B6B8 00202000
  197. L R15,LOGADDR RETURN ADDR AFTER VOLUME MNTED @V60B6B8 00203000
  198. ST R15,SAVRETAD SAVE FOR MSSCOM BUILD ROUTINE @V60B6B8 00204000
  199. SR R15,R15 CLEAR THE POTENTIAL RET CODE @V60B6B8 00205000
  200. LH R1,UDEVLINK 'RADDR' PARM IF SUPPLIED @V60B6B8 00206000
  201. LTR R1,R1 WAS IT SUPPLIED @V60B6B8 00207000
  202. BNM CALLALLC THERE IS ONE GO GET BLK @VA11411 00208010
  203. DISASTER EQU * UNCORRECTABLE ERROR @V60B6B8 00209000
  204. LA R15,RCERROR RETURN CODE @V60B6B8 00210000
  205. GOODEXIT EQU * RETURN TO THE CALLER @V60B6B8 00211000
  206. LR R0,R15 PRESERVE RETURN CODE @V60B6B8 00212000
  207. LM R1,R11,SAVER1 CALLER'S REGS @V60B6B8 00213000
  208. SVC 12 AND INVOKE RETURN @V60B6B8 00214000
  209. CALLALLC EQU * TRY TO ALLOCATE A VIRTUAL 3330V @V60B6B8 00215000
  210. * 00216000
  211. * AT THIS POINT GPR 1 CONTAINS THE RADDR SPECIFIED 00217000
  212. * CALL DMKSCNRU TO FIND THE RDEVBLOK 00218000
  213. * 00219000
  214. CALL DMKSCNRU FIND THE RDEVBLOK FOR THE RADDR @V60B6B8 00220000
  215. BNE EMSG072 INVALID RADDR @VMI2020 00221000
  216. USING RDEVBLOK,R8 GPR 8 SET BY SCAN @V60B6B8 00222000
  217. * 00223000
  218. * THE RADDR IS VALID. NOW SEE IF IT IS A 3330V, 00224000
  219. * TYPE VIRTUAL, AND AVAILABLE 00225000
  220. * 00226000
  221. CLI RDEVTYPC,CLASDASD IT MUST BE A DASD DEVICE @V60B6B8 00227000
  222. BNE EMSG072 INVALID RADDR @VMI2020 00228000
  223. CLI RDEVTYPE,TYP3330 IT MUST BE A 3330 DASD @V60B6B8 00229000
  224. BNE EMSG072 INVALID RADDR @VMI2020 00230000
  225. TM RDEVFTR,VIRTUAL IT MUST BE VIRTUAL, NOT SYSVIRT @V60B6B8 00231000
  226. BZ EMSG072 INVALID RADDR @VMI2020 00232000
  227. TM RDEVSTAT,RDEVDISA+RDEVDED IS IT OFFLINE OR @V60B6B8 00233000
  228. * DEDICATED 00234000
  229. BNZ EMSG072 NOT AVAILABLE @VMI2020 00235000
  230. CLC RDEVSER,BLANKS IS A VOLUME MOUNTED? @VA11939 00236100
  231. BE DOALLC NO, GO ALLOCATE @VA11939 00236600
  232. * 00238000
  233. * A VOLUME IS MOUNTED ON THE REAL DEVICE BUT IS NOT IN 00239000
  234. * USE. CALL THE DEMOUNT SUBROUTINE IF THE MOUNTED 00240000
  235. * VOLUME IS NOT THE ONE REQUIRED. 00241000
  236. * 00242000
  237. CLC UDEVVSER(6),RDEVSER IS THE REQUIRED VOLUME @V60B6B8 00243000
  238. * MOUNTED 00244000
  239. BE DOALLC YES, ALLOCATE THE RDEVICE @V60B6B8 00245000
  240. ST R8,RDEVDEMT STORE RDEVBLOK FOR DEMOUNT @VA11436 00246010
  241. BAL R14,DEMOUNTV GO TO DO DEMOUNT @VA11436 00246020
  242. * 00250000
  243. * THE RDEVICE IS NOW AVAILABLE TO THE REQUESTOR AND 00251000
  244. * HAS BEEN VERIFIED AS THE CORRECT TYPE 00252000
  245. * 00253000
  246. DOALLC EQU * DEDICATE THE RDEVICE TO THE @V60B6B8 00254000
  247. * CALLER 00255000
  248. ST R11,RDEVUSER PUT USER VMBLOK ADDR IN RDEVBLOK @V60B6B8 00256000
  249. MVC RDEVATT(2),UDEVADD ATTACHED VIRTUAL ADDR @V60B6B8 00257000
  250. CLC UDEVVSER(6),BLANKS DID USER GIVE VOLSER @V60B6B8 00258000
  251. BNE CHKMOUNT YES, SEE IF ALREADY MOUNTED @V60B6B8 00259000
  252. SETRC0 EQU * MISSION ACCOMPLISHED @V60B6B8 00260000
  253. SR R15,R15 SET R15 RET CODE = 0 @V60B6B8 00261000
  254. B GOODEXIT AND RETURN @V60B6B8 00262000
  255. * 00263000
  256. * THE USER SPECIFIED A VOLID. IF IT IS ALREADY MOUNTED 00264000
  257. * ON THE SPECIFIED DEVICE, RETURN 00265000
  258. * 00266000
  259. CHKMOUNT EQU * TEST FOR VOLUME MOUNTED @V60B6B8 00267000
  260. CLC UDEVVSER(6),RDEVSER IS NEEDED VOLUME MOUNTED @V60B6B8 00268000
  261. BE SETRC0 YES, WE ARE DONE @V60B6B8 00269000
  262. * 00270000
  263. * THERE IS NOW A REAL DEVICE ALLOCATED FOR THIS REQUEST. 00271000
  264. * THE USER HAS REQUESTED A SPECIFIC VOLUME ON THE DEVICE. 00272000
  265. * FIRST SCAN THE RDEVBLOKS TO SEE IF THE VOLUME IS MOUNTED 00273000
  266. * ON ANOTHER DEVICE. 00274000
  267. * 00275000
  268. SCNVOL EQU * @V60B6B8 00276000
  269. LA R0,VOLSERL @VMI2008 00277000
  270. LA R1,UDEVVSER POINT TO VOLSER NEEDED @V60B6B8 00278000
  271. LR R5,R8 SAVE CURRENT RDEVBLOK ADDR @V60B6B8 00279000
  272. CALL DMKSCNVS LOOK FOR VOLSER MOUNTED @V60B6B8 00280000
  273. BNZ BLDCOMMT NOT MOUNTED, PROCEED TO MOUNT @V60B6B8 00281000
  274. LR R8,R1 RDEVBLOK FOUND BY SCNVS @VA09909 00282100
  275. TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A 3330V @V60B6B8 00285000
  276. BZ EMSG076 NO, VOLUME CAN'T BE MSS @VMI2020 00286000
  277. CHKSTAT EQU * NEEDED VOLUME MOUNTED ON WRONG @V60B6B8 00287000
  278. * DEV 00288000
  279. TM RDEVSTAT,RDEVDED IS DEV DEDICATED @V60B6B8 00289000
  280. BO EMSG076 YES, VOLID INVALID @VMI2020 00290000
  281. LA R0,ZERO SET UP FOR FOLLOWING COMP INST @V60B6B8 00291000
  282. CH R0,RDEVLNKS ANYONE LINKED TO THE DEVICE @V60B6B8 00292000
  283. BNE EMSG076 YES, WE CAN'T DEMOUNT @VMI2020 00294000
  284. ST R8,RDEVDEMT SAVE RDEVBLOK PTR @VA09909 00295100
  285. BAL R14,DEMOUNTV GO TO DO DEMOUNT @VA11436 00296010
  286. * 00299000
  287. * A REQUIRED VOLUME MUST BE MOUNTED. CALL SUBROUTINES 00300000
  288. * TO BUILD THE CONTROL BLOCKS AND SCHEDULE THE MOUNT. 00301000
  289. * 00302000
  290. * IF ENTRY TO THIS ROUTINE IS FROM DMKSSSLN, UDEVADD WHICH 00302100
  291. * IS R9 POINTS TO DMKLNK'S SAVEAREA SAVEWRK5 SO THAT THE YYY 00302200
  292. * ADDRESS WILL BE PUT INTO WAIT UNTIL MOUNT IS COMPLETE. 00302300
  293. * -- THAT IS, R9 WILL NOT REALLY POINT TO THE UDEVBLOK -- 00302400
  294. BLDCOMMT EQU * PROCEED TO BUILD AN MSSCOM @V60B6B8 00303000
  295. LA R3,UDEVVSER VOLSER NEEDED @V60B6B8 00304000
  296. BLDCOMTA EQU * ENTRY FROM DMKSSSVA @V60B6B8 00305000
  297. ST R3,VSERADDR SAVE IT FOR COMBLD @V60B6B8 00306000
  298. ST R5,RDEVADDR SAVE RDEVBLOK ADDR @V60B6B8 00307000
  299. BAL R14,COMBLD GO BUILD THE MSSCOM @VA11436 00308010
  300. USING OSVSCOM,R10 ASSEMBLER ADDRESSABILITY @V60B6B8 00313000
  301. MVI MSSFLAG1,MOUNT INDICATE MOUNT REQUEST @VA09302 00314000
  302. LA R0,CPEXSIZE NO OF D-WORDS IN CPEXBLOK @V60B6B8 00315000
  303. CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00316000
  304. ST R1,MSSTASK1 ESTABLISH PTR IN MSSCOM BLOCK @V60B6B8 00317000
  305. USING CPEXBLOK,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00318000
  306. MVC CPEXREGS(48),SAVEREGS SAVE CALLER REGISTERS @V60B6B8 00319000
  307. ST R10,CPEXR3 SAVE MSSCOM ADDRESS @V60B6B8 00320000
  308. MVC CPEXR12(8),SAVER12 CALLER REG 12 & 13 @V60B6B8 00321000
  309. MVC CPEXADD(4),SAVRETAD SAVE RETURN ADDRESS @V60B6B8 00322000
  310. MVC CPEXMISC(L2),UDEVADD SAVE VIRT DEV ADDR @V60B6B8 00323000
  311. B SCHMSSC SCHEDULE AN MSSCOM @V60B6B8 00324000
  312. DROP R10 @V60B6B8 00325000
  313. DROP R1 @V60B6B8 00326000
  314. EJECT 00327000
  315. EMSG076 EQU * ISSUE ERROR MSG @VMI2020 00328000
  316. * 00329000
  317. * A REQUIRED VOLUME HAS BEEN FOUND IN USE FOR ANOTHER 00330000
  318. * PURPOSE. FIRST ISSUE MSG DMKSSS076E, THEN DEALLOCATE 00331100
  319. * THE RDEVICE WHICH HAD BEEN PREVIOUSLY FOUND AND 00332000
  320. * RETURN WITH RETURN CODE 8 00333000
  321. * 00334000
  322. LA R0,N6 LENGTH OF VOLID @V60B6B8 00335000
  323. ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 00336000
  324. LA R1,UDEVVSER VOL SER FOR MSG INSERT @V60B6B8 00337000
  325. L R2,OPTION76 MESSAGE WRITER OPTIONS @VMI2020 00338000
  326. CALL DMKERMSG PUT OUT THE MESSAGE @V60B6B8 00339000
  327. DROP R8 @VA09909 00339500
  328. USING RDEVBLOK,R5 @V60B6B8 00340000
  329. MVC RDEVSER(6),BLANKS CLEAN OUT VOLID @V60B6B8 00341000
  330. MVC RDEVATT(2),ZEROES NO DEVICE ATTACHED @V60B6B8 00342000
  331. MVI RDEVSTAT,CLEAR CLEAR DEVICE STATUS @V60B6B8 00343000
  332. DROP R5 @V60B6B8 00344000
  333. B DISASTER SET RETURN CODE AND EXIT @V60B6B8 00345000
  334. EMSG072 EQU * PUT OUT ERROR MSG @VMI2020 00346000
  335. L R2,OPTION72 MESSAGE WRITER OPTIONS @VMI2020 00347000
  336. CALL DMKCVTBH CONVERT ADDR TO HEX @V60B6B8 00348000
  337. ST R1,ADDRSAVE SAVE THE 3-DIGIT ADDR @V60B6B8 00349000
  338. LA R1,ADDRSAVE+1 POINT TO IT FOR MESSAGE WRITER @V60B6B8 00350000
  339. LA R0,L3 LENGTH OF MESSAGE INSERT @V60B6B8 00351000
  340. ICM R0,14,DMKSSS+3 MODULE ID FOR WRITER @V60B6B8 00352000
  341. CALL DMKERMSG @V60B6B8 00353000
  342. B DISASTER EXIT WITH PERMANENT ERROR @V60B6B8 00354000
  343. EJECT 00355000
  344. * 00356000
  345. * THE FOLLOWING SUBROUTINE WILL DEMOUNT A VOLUME. 00357000
  346. * 00358000
  347. * AT INPUT, RDEVDEMT CONTAINS THE ADDR OF THE 00359000
  348. * RDEVBLOK FROM WHICH TO DEMOUNT, DEMNTRET 00360000
  349. * CONTAINS THE RETURN ADDRESS OF THE CALLING 00361000
  350. * ROUTINE. 00362000
  351. * 00363000
  352. * ON RETURN, GPR 15 WILL BE NON-ZERO IF AN ERROR OCCURS 00364000
  353. * 00365000
  354. DEMOUNTV DS 0H @VA11436 00366010
  355. ST R14,DEMNTRET SAVE RETURN ADDRESS @VA11436 00366020
  356. L R8,RDEVDEMT GET RDEVBLOK ADDR @V60B6B8 00367000
  357. LA R0,RDEVSER-RDEVBLOK(R8) VOL SER ADDR @V60B6B8 00368000
  358. ST R0,VSERADDR SAVE ADDR OF VOLID @V60B6B8 00369000
  359. ST R8,RDEVADDR RDEVBLOK ADDR @V60B6B8 00370000
  360. USING RDEVBLOK,R8 @VA11429 00370100
  361. OI RDEVFLAG,RDEVSEL DEVICE SELECTED FOR DEMOUNT 00370200
  362. BAL R14,COMBLD GO BUILD THE MSSCOM @VA11436 00371010
  363. USING OSVSCOM,R10 @V60B6B8 00376000
  364. MVI MSSFLAG1,DEMOUNT INDICATE DEMOUNT REQUEST @VA09302 00377000
  365. OI MSSFLAG1,MSSSAVE INDICATE GODSPCH NOT TO RETURN @VA10862 00377100
  366. * THE SAVE AREA 00377200
  367. LA R0,CPEXSIZE SIZE OF A CPEXBLOK @V60B6B8 00378000
  368. CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00379000
  369. ST R1,MSSTASK1 POINT MSSCOM TO THE CPEXBLOK @V60B6B8 00380000
  370. USING CPEXBLOK,R1 @V60B6B8 00381000
  371. MVC CPEXADD(4),DEMNTRET RETURN ADDR AFTER DEMOUNT @V60B6B8 00382000
  372. STM R0,R15,CPEXREGS REGS TO DISPATCH AFTER DEMOUNT @V60B6B8 00383000
  373. DROP R1 @V60B6B8 00388000
  374. DROP R10 @V60B6B8 00389000
  375. EJECT 00402000
  376. * 00403000
  377. * THE FOLLOWING ROUTINE PLACES AN MSSCOM BLOCK IN THE 00404000
  378. * QUEUE FOR DMKMSS. A CPEXBLOK IS BUILT AND ANCHORED 00405000
  379. * FROM MSSTASK2. THE PURPOSE OF THIS CPEXBLOK IS TO 00406000
  380. * PASS CONTROL BACK TO THE CALLER OF DMKSSS WITH A 00407000
  381. * RETURN CODE OF 4 AFTER THE MSS HAS ACCEPTED THE MOUNT 00408000
  382. * REQUESTED BY THIS MSSCOM. 00409000
  383. * 00410000
  384. SCHMSSC EQU * QUEUE AN MSSCOM BLOCK @V60B6B8 00411000
  385. L R10,VSERADDR MSSCOM BLOCK ADDR @V60B6B8 00412000
  386. USING OSVSCOM,R10 @V60B6B8 00413000
  387. LA R0,CPEXSIZE SIZE OF A CPEXBLOK @V60B6B8 00414000
  388. CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00415000
  389. USING CPEXBLOK,R1 R1 SET BY DMKFREE @V60B6B8 00416000
  390. MVC CPEXADD(4),SAVERETN EXIT ADDR AFTER MNT SCHED. @V60B6B8 00417000
  391. MVC CPEXREGS(48),SAVEREGS OUR CALLER'S REGS @V60B6B8 00418000
  392. MVC CPEXR12(8),SAVER12 CALLER'S REGS 12 & 13 @V60B6B8 00419000
  393. ST R1,MSSTASK2 SAVE PTR IN MSSCOM @V60B6B8 00420000
  394. DROP R1 @V60B6B8 00421000
  395. * 00434000
  396. * TEST TO SEE IF THERE IS A PREVIOUS Q ENTRY FOR 00435000
  397. * THIS SAME VOLUME. IF SO, JUST CHAIN IN THE REQUEST 00436000
  398. * AND WAIT FOR THE MOUNT 00437000
  399. * 00438000
  400. CHKDUP1 DS 0H @VA11344 00438500
  401. L R1,DMKSSSMQ Q ANCHOR @V60B6B8 00439000
  402. CHKDUP EQU * @V60B6B8 00440000
  403. LTR R1,R1 TEST FOR END OF Q @V60B6B8 00441000
  404. BZ SETRQENT END OF Q, THIS IS FIRST REQUEST @V60B6B8 00442000
  405. CLC 0(6,R1),MSSSER IS VOLSER THE SAME @V60B6B8 00443000
  406. BE SETCHAIN YES, MERELY CHAIN THE BLOCK @V60B6B8 00444000
  407. L R1,MSSNEXT-OSVSCOM(R1) NEXT Q ENTRY @V60B6B8 00445000
  408. B CHKDUP CHK FOR DUPLICATE VOLSER @V60B6B8 00446000
  409. SETCHAIN EQU * PUT THIS ENTRY IN THE CHAIN @V60B6B8 00447000
  410. * CHECK TO SEE IF THIS IS A VALID REQUEST 00448000
  411. * FOR THE SAME VOLUME, OR AN ERROR 00449000
  412. CLC MSSFLAG1-OSVSCOM(1,R1),MSSFLAG1 SAME REQ TYPE @VA09302 00450000
  413. BNE CHKMORE NO - THEN CHK FOR RELINQUISH @VA11344 00451000
  414. TM MSSFLAG1,RELINQSH BOTH RELINQUISH REQUESTS? @VA11344 00451200
  415. BO NORLQSH YES - THEN THROW AWAY NEW REQUEST@VA11344 00451400
  416. CHAINMOR DS 0H @VA11344 00451600
  417. LR R3,R1 QUEUED MSSCOM ADDR @VMI2008 00452000
  418. LH R1,MSSVUA-OSVSCOM(R1) RDEV IN QUEUED REQ @VMI2008 00453000
  419. CALL DMKSCNRU FIND RDEVBLOK @VMI2008 00454000
  420. TM RDEVFTR-RDEVBLOK(R8),SYSVIRT+VIRTUAL @VA11344 00455000
  421. * THIS AN MSS VUA? @VA11344 00455500
  422. BZ CONFLICT NO, CAN NOT ALLOW DUPLICATE @VMI2008 00456000
  423. LH R1,MSSVUA RDEV THIS REQ @VMI2008 00457000
  424. CALL DMKSCNRU FIND RDEVBLOK @VMI2008 00458000
  425. TM RDEVFTR-RDEVBLOK(R8),SYSVIRT+VIRTUAL @VA11344 00459000
  426. * THIS AN MSS VUA? @VA11344 00459600
  427. BZ CONFLICT MUST ALSO BE SYSTEM DEVICE @VMI2008 00460200
  428. CLC MSSVUA(2),MSSVUA-OSVSCOM(R3) SAME VUA? @VA11344 00460800
  429. BE SAMEVUA YES - THEN DON'T TURN OFF RDEVSEL@VA11344 00461400
  430. NI RDEVFLAG-RDEVBLOK(R8),FULL-RDEVSEL @VMI2008 00462000
  431. SAMEVUA DS 0H @VA11344 00462300
  432. MVC MSSVUA(2),MSSVUA-OSVSCOM(R3) SAME RDEV @VMI2008 00462600
  433. LR R1,R3 ADDR QUEUED MSSCOM @VMI2008 00463000
  434. MVC MSSFLAG2(1),MSSFLAG2-OSVSCOM(R1) @VA11135 00464100
  435. MVC MSSNEXT(4),MSSNEXT-OSVSCOM(R1) PREVIOUS BLOCK @V60B6B8 00465000
  436. * CHAIN 00466000
  437. ST R10,MSSNEXT-OSVSCOM(R1) CHAIN IN THIS BLOCK @V60B6B8 00467000
  438. B SETUP078 SET UP MSG 078 @VMI2020 00468000
  439. CHKMORE DS 0H @VA11344 00468070
  440. TM MSSFLAG1-OSVSCOM(R1),RELINQSH IS OLD REQUEST A @VA11344 00468140
  441. * RELINQUISH REQUEST? 00468210
  442. BNO CONFLICT NO - THEN STRANGE SEQUENCE OF @VA11344 00468280
  443. * REQUESTS INDEED!! 00468350
  444. B CHAINMOR ELSE CHAIN NEW REQ AFTER OLD @VA11344 00468420
  445. NORLQSH DS 0H @VA11344 00468490
  446. LR R1,R10 GET MSSCOM ADDR FOR FRET @VA11344 00468560
  447. LA R0,MSSSIZE GET SIZE OF MSSCOM FOR FRET @VA11344 00468630
  448. CALL DMKFRET GET RID OF DUPLICATE RELINQUISH @VA11344 00468700
  449. * REQUEST 00468770
  450. B SSSRLEND RETURN TO CALLER @VA11344 00468840
  451. * 00469000
  452. * TWO CONFLICTING REQUESTS HAVE BEEN MADE 00470000
  453. * FOR THE SAME VOLUME. REJECT THE LATEST REQUEST 00471000
  454. * 00472000
  455. CONFLICT EQU * @VMI2008 00473000
  456. LA R0,VOLSERL 6 BYTE VOL SER @VMI2008 00474000
  457. ICM R0,14,DMKSSS+3 MODULE ID @VMI2008 00475000
  458. LA R1,MSSSER VOL SER BEING REJECTED @VMI2008 00476000
  459. L R2,OPTION75 MESSAGE WRITER OPTIONS @VMI2020 00477000
  460. CALL DMKERMSG WRITE MSG TO USER @VMI2008 00478000
  461. TROUBS DS 0H HERE FOR NO SERVER OR BAD DEVICE @VA11436 00478010
  462. L R1,MSSTASK1 CPEXBLOK ADDR @VMI2008 00479000
  463. LA R0,CPEXSIZE CPEXBLOK SIZE @VMI2008 00480000
  464. LTR R1,R1 IS THERE AN EXBLOK @VMI2008 00481000
  465. BZ NOTSK1 NO @VMI2008 00482000
  466. CALL DMKFRET RETURN MEMORY TO SYSTEM @VMI2008 00483000
  467. NOTSK1 EQU * @VMI2008 00484000
  468. L R1,MSSTASK2 CPEXBLOK ADDR @VMI2008 00485000
  469. LA R0,CPEXSIZE CPEXBLOK SIZE @VMI2008 00486000
  470. LTR R1,R1 IS THERE AN EXBLOK @VMI2008 00487000
  471. BZ NOTSK2 NO @VMI2008 00488000
  472. CALL DMKFRET @VMI2008 00489000
  473. NOTSK2 DS 0H @VA11436 00490010
  474. ICM R1,15,DMKSSSMQ GET THE ANCHOR @VA11436 00490020
  475. BZ DISASTER WE SHOULDNT FIND THIS ANYWAY @VA11436 00490030
  476. CR R1,R10 WE THE FIRST ONE IN THE QUEUE @VA11436 00490040
  477. BNE GETRID3 NO CHECK THE REST @VA11436 00490050
  478. MVC DMKSSSMQ,MSSNEXT-OSVSCOM(R1) TAKE IT OUT @VA11436 00490060
  479. B GETRID4 AND FRET IT @VA11436 00490070
  480. GETRID2 DS 0H @VA11436 00490080
  481. CR R1,R10 IS THIS THE ONE WE PROCESSIN @VA11436 00490090
  482. BE GETRID YES GET RID OF IT @VA11436 00490100
  483. GETRID3 DS 0H @VA11436 00490110
  484. LR R0,R1 SAVE BACKWARD POINTER @VA11436 00490120
  485. ICM R1,15,MSSNEXT-OSVSCOM(R1) GET THE NEXT ONE @VA11436 00490130
  486. BZ DISASTER WE SHOULDNT FIND IT THIS WAY @VA11436 00490140
  487. B GETRID2 GO SEE IF THIS IS THE ONE @VA11436 00490150
  488. GETRID DS 0H @VA11436 00490160
  489. MVC MSSNEXT-OSVSCOM(R0),MSSNEXT-OSVSCOM(R1) DECHAIN @VA11436 00490170
  490. GETRID4 DS 0H 00490180
  491. LR R1,R10 CURRENT MSSCOM ADDR @VMI2008 00491000
  492. LA R0,MSSSIZE SIZE OF MSSCOM @VMI2008 00492000
  493. CALL DMKFRET RETURN CORE @VMI2008 00493000
  494. B DISASTER SET ERROR RET CODE, RETURN @VMI2008 00494000
  495. SETUP078 EQU * @VMI2020 00495000
  496. MVC MSSTASKD(4),MSSTASK2 SAVE CPEXBLOK PTR @VA09302 00496000
  497. XC MSSTASK2(4),MSSTASK2 INDICATE NO EXBLOK @VMI2008 00497000
  498. TM MSSFLAG2,MQENT @VA11135 00497100
  499. BZ GODSPCH1 @VA11135 00497200
  500. L R1,MSSTASKD CPEXBLOK PTR @VA11135 00497300
  501. LA R0,CPEXSIZE SIZE OF THE BLOCK @VA11135 00497400
  502. CALL DMKFRET RELEAS THE STORAGE @VA11135 00497500
  503. XC MSSTASKD(4),MSSTASKD CLEAR THE PTR @VA11135 00497600
  504. OI MSSFLAG2,MSGPROC INDICATE MSG WTR IN PROCESS @VA09302 00498000
  505. LA R0,VOLSERL 6 BYTE VOL SER @VMI2008 00499000
  506. ICM R0,14,DMKSSS+3 MODULE ID @VMI2021 00500000
  507. LA R1,MSSSER VOL SER @VMI2008 00501000
  508. L R2,OPTION78 MSG WRITER OPTIONS @VMI2020 00502000
  509. CALL DMKERMSG WRITE MSG 088 @VMI2008 00503000
  510. LA R0,RC4 RET CODE = MOUNT IN PROCESS @VMI2008 00504000
  511. TSK1FIN EQU * @VMI2008 00505000
  512. LR R1,R10 SET MSSCOM ADDR FOR CALLER @VMI2008 00506000
  513. LM R2,R11,SAVER2 CALLER'S REGS @VMI2008 00507000
  514. SVC 12 @VMI2008 00508000
  515. SETRQENT EQU * @V60B6B8 00509000
  516. OI MSSFLAG2,RQENT INDICATE WAITING FOR DMKMSS @VA09302 00510000
  517. MVC MSSNEXT(4),DMKSSSMQ @VMI2003 00511000
  518. ST R10,DMKSSSMQ @VMI2003 00512000
  519. * NOW SEE IF THE COMMUN IS ACTIVE 00513000
  520. LR R1,R10 NOW SET UP R1 AS THE START @VA11436 00514010
  521. TESTENDA DS 0H @VA11436 00514020
  522. TM MSSFLAG2-OSVSCOM(R1),INPROC THIS BLOK IN @VA09302 00518000
  523. * PROCESS 00519000
  524. BO GODSPCH YES, DON'T GENERATE ATTN @V60B6B8 00520000
  525. ICM R1,15,MSSNEXT-OSVSCOM(R1) GET THE NEXT POINTER @VA11436 00521010
  526. BNZ TESTENDA IF THERE IS ONE DO IT SOMEMORE @VA11436 00521020
  527. * 00534000
  528. * NOW GENERATE AN ATTENTION ON THE COMMUNICATION 00535000
  529. * MACHINES COMMUNICATIONS DEVICE. 00536000
  530. * 00537000
  531. GENATTN DS 0H @VA11436 00538010
  532. LR R3,R11 SAVE THIS GUYS VMBLOK @VA11436 00538020
  533. ICM R11,15,COMMVMAD IS THIS SERVER STILL HERE @VA11436 00538030
  534. BZ EMSG071 PERHAPS THE AP LOGGED HIM OFF @VA11436 00538040
  535. L R1,COMMADDR COMMUNICATOR DEVICE ADDR @V60B6B8 00541000
  536. CALL DMKSCNVU GET COMMUNICATORS VDEVBLOK @V60B6B8 00542000
  537. BZ GOTCOMDV YES, FOUND IT @V60B6B8 00543000
  538. LR R11,R3 RESET VMBLOK POINTER @V60B6B8 00544000
  539. B EMSG071 PUT OUT ERROR MSG @VMI2020 00545000
  540. GOTCOMDV EQU * GOT COMMUNICATIONS DEVICE @V60B6B8 00546000
  541. USING VDEVBLOK,R8 GPR 8 SET BY DMKSCN @V60B6B8 00547000
  542. OI VDEVINTS,ATTN SET ATTENTION PENDING @V60B6B8 00548000
  543. OI VDEVSTAT,VDEVPEND SET INTERRUPT PENDING @V60B6B8 00549000
  544. OI VMPEND,VMIOPND SET I/O PENDING IN VMBLOK @V60B6B8 00550000
  545. LH R4,VDEVADD DEVICE ADDR @V60B6B8 00551000
  546. L R5,INTMASKS INTERRUPT MASK ADDR @V60B6B8 00552000
  547. AR R4,R4 DEV ADDR BY 2 - WIDTH OF MASK @V60B6B8 00553000
  548. * TABLE 00554000
  549. AR R4,R5 SLOT IN INT MASK TABLE @V60B6B8 00555000
  550. OC VCUDVINT-VCUBLOK(2,R7),0(R4) PUT DEV INT IN CU @V60B6B8 00556000
  551. LH R4,VCUADD-VCUBLOK(R7) CU ADDR @V60B6B8 00557000
  552. SRL R4,3 DIVIDE BY 8 @VA10370 00558000
  553. * ENTRY 00559000
  554. AR R4,R5 SLOT IN MASK TABLE @V60B6B8 00560000
  555. OC VCHCUINT-VCHBLOK(2,R6),0(R4) PUT CU INT IN CH @V60B6B8 00561000
  556. LH R4,VCHADD-VCHBLOK(R6) CH ADDR @V60B6B8 00562000
  557. SRL R4,7 DIVIDE BY 128 @VA10370 00563000
  558. AR R4,R5 SLOT IN MASK TABLE @V60B6B8 00564000
  559. OC VMIOINT(2),0(R4) PUT CH INT IN VMBLOK @V60B6B8 00565000
  560. LR R1,R11 GET COMM VMBLOK @VA11573 00566100
  561. LR R11,R3 GET CURRENT VMBLOK @VA11573 00566200
  562. SWTCHVM @VA11573 00566300
  563. TM MSSFLAG1,RELINQSH RELINQUISH REQUEST @VA13058 00566350
  564. BZ RETSAVE NO, RETURN SAVEAREA IF NECESSARY @VA13058 00566400
  565. LA R0,CPEXSIZE GET CPEXBLOK @VA13058 00566450
  566. CALL DMKFREE ... @VA13058 00566500
  567. USING CPEXBLOK,R1 ... @VA13058 00566550
  568. XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR BLOCK @VA13058 00566600
  569. ST R11,CPEXR11 ADDRESS OF COMMUNICATOR VMBLOK @VA13058 00566650
  570. LA R2,GODSPCH1 DISPATCH COMMUNICATOR VMBLOK @VA13058 00566700
  571. ST R2,CPEXADD CPEXBLOK RETURN ADDRESS @VA13058 00566750
  572. CALL DMKSTKCP STACK CPEXBLOK @VA13058 00566800
  573. B SSSRLEND EXIT TO CALLER @VA13058 00566850
  574. DROP R1 DROP CPEXBLOK ADDRESSABILITY @VA13058 00566900
  575. GODSPCH EQU * @V60B6B8 00567000
  576. * 00568100
  577. * IF THE ENTRY WAS FOR A DISMOUNT AND MOUNT, THE SAVE 00568500
  578. * AREA WILL NOT BE RETURNED AT THIS TIME SINCE THE 00568900
  579. * INFORMATION WILL BE NEEDED FOR THE MOUNT REQUEST. 00569300
  580. * OTHERWISE WE WILL RETURN THE SAVE AREA SINCE WE ARE 00569700
  581. * NOT RETURNING THROUGH THE STANDARD SVC LINKAGE. 00570100
  582. * 00570500
  583. TM MSSFLAG1,RELINQSH THIS A RELINQUISH REQUEST? @VA11344 00570600
  584. BO SSSRLEND YES - THEN DON'T GO TO @VA11344 00570700
  585. * DISPATCHER; RETURN TO CALLER 00570800
  586. RETSAVE TM MSSFLAG1,MSSSAVE RETURN SAVE AREA NOW ? @VA13058 00570900
  587. BNZ GODSPCH1 NO..EXIT WITHOUT RETURNING SAVE @VA10862 00571300
  588. SR R0,R0 @V60B6B8 00572000
  589. ST R0,SAVER12 CLEAR RTN PTR IN SAVEAREA @V60B6B8 00573000
  590. SVC 16 CAUSE THE SAVEAREA TO BE RETURNED@V60B6B8 00574000
  591. GODSPCH1 EQU * @VA10862 00574100
  592. GOTO DMKDSPCH WAIT FOR MOUNT TO COMPLETE @V60B6B8 00575000
  593. DROP R10 @V60B6B8 00576000
  594. DROP R8 @V60B6B8 00577000
  595. EMSG071 EQU * PRINT MSG 071, SET RC = 8, RETURN@VMI2020 00578000
  596. L R2,OPTION71 MSG WRITER OPTIONS @VMI2020 00579000
  597. SR R1,R1 NO VARIABLE DATA @V60B6B8 00580000
  598. SR R0,R0 DATA LENGTH 0 @V60B6B8 00581000
  599. ICM R0,14,DMKSSS+3 MODULE ID 'SSS' @V60B6B8 00582000
  600. CALL DMKERMSG WRITE THE MESSAGE @V60B6B8 00583000
  601. B TROUBS GO FRET BLOKS AND RETURN @VA11436 00584010
  602. SPACE 00585010
  603. COMBLD DS 0H @VA11436 00585020
  604. ST R14,RETNADDR SAVE CALLERS RETURN ADDR @VA11436 00585030
  605. LA R0,MSSSIZE NO OF D-WORDS IN AN MSSCOM @V60B6B8 00586000
  606. CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 00587000
  607. USING OSVSCOM,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00588000
  608. XC OSVSCOM(MSSSIZE*8),OSVSCOM CLEAR THE STORAGE @V60B6B8 00589000
  609. L R10,VSERADDR ADDR OF VOLSER @VA11253 00590100
  610. MVC MSSSER(VOLSERL),0(R10) PUT VOLSER IN MSSCOM @VA11253 00590200
  611. ST R1,VSERADDR SAVE MSSCOM ADDR FOR CALLER @V60B6B8 00592000
  612. L R10,RDEVADDR RDEVBLOK ADDR SET BY CALLER @VA11253 00593100
  613. SR R15,R15 @V60B6B8 00594000
  614. LH R15,RDEVADD-RDEVBLOK(R10) DEVICE ADDR @VA11253 00595100
  615. L R14,RDEVCUA-RDEVBLOK(R10) RCUBLOK ADDR @VA11253 00595200
  616. LH R0,RCUADD-RCUBLOK(R14) CU ADDR @V60B6B8 00597000
  617. OR R15,R0 CU-DEV ADDR @V60B6B8 00598000
  618. TM RCUTYPE-RCUBLOK(R14),RCUSUB SUBORD. CU @V60B6B8 00599000
  619. BZ GOTPRIME NO, THIS IS PRIME @V60B6B8 00600000
  620. L R14,RCUPRIME-RCUBLOK(R14) PRIME RCUBLOK @V60B6B8 00601000
  621. GOTPRIME EQU * GET CHANNEL ADDR @V60B6B8 00602000
  622. L R14,RCUCHA-RCUBLOK(R14) CHBLOK ADDR @V60B6B8 00603000
  623. LH R0,RCHADD-RCHBLOK(R14) CH ADDR @V60B6B8 00604000
  624. OR R15,R0 CH-CU-DEV @V60B6B8 00605000
  625. STH R15,MSSVUA INTO MSSCOM @V60B6B8 00606000
  626. MVC MSSUSER(8),VMUSER USERID INTO MSSCOM @V60B6B8 00607000
  627. LR R10,R1 SET UP R10 FOR THE CALLER @VA11436 00607010
  628. SR R15,R15 @V60B6B8 00608000
  629. L R14,RETNADDR RETURN ADDR SET BY CALLER @V60B6B8 00609000
  630. BR R14 RETURN TO CALLER @V60B6B8 00610000
  631. DROP R1 @V60B6B8 00611000
  632. EJECT 00612000
  633. * 00613000
  634. * 00614000
  635. * ENTRY POINT DMKSSSL2 00615000
  636. * 00616000
  637. * 00617000
  638. * ENTRY CONDITIONS - 00618000
  639. * 00619000
  640. * GPR 9 = UDEVBLOK PTR 00620000
  641. * GPR 11 = VMBLOK PTR 00621000
  642. * GPR 12 = DMKSSSL2 ADDR 00622000
  643. * GPR 13 = SAVEAREA PTR 00623000
  644. * 00624000
  645. * ENTRY IS VIA A CALL (SVC 8) FROM DMKLOG. 00625000
  646. * 00626000
  647. * EXIT CONDITIONS - 00627000
  648. * 00628000
  649. * DEFINED UNDER ENTRY POINT DMKSSSL1 00629000
  650. * 00630000
  651. * CALLS TO EXTERNAL ROUTINES - 00631000
  652. * 00632000
  653. * NONE 00633000
  654. * 00634000
  655. * OPERATION - 00635000
  656. * 00636000
  657. * 1) PICK UP THE REQUESTED REAL ADDRESS, GO TO LABEL 00637000
  658. * CALLALLC IN DMKSSSL1. 00638000
  659. * 00639000
  660. DMKSSSL2 RELOC @V60B6B8 00640000
  661. USING UDEVBLOK,R9 GPR 9 SET BY DMKLOG @V60B6B8 00641000
  662. LH R1,UDEVLINK 'RADDR' SPECIFIED BY USER @V60B6B8 00642000
  663. MVC SAVRETAD(4),LOGADDR SAVE DMKLOG RETURN ADDR @V60B6B8 00643000
  664. B CALLALLC GO FIND RDEVBLOK @V60B6B8 00644000
  665. EJECT 00645000
  666. * 00646000
  667. * 00647000
  668. * ENTRY POINT DMKSSSL3 00648000
  669. * 00649000
  670. * 00650000
  671. * ENTRY CONDITIONS - 00651000
  672. * 00652000
  673. * GPR 9 = UDEVBLOK PTR 00653000
  674. * GPR 11 = VMBLOK PTR 00654000
  675. * GPR 12 = DMKSSSL3 ADDR 00655000
  676. * GPR 13 = SAVEAREA PTR 00656000
  677. * 00657000
  678. * ENTRY IS VIA CALL (SVC 8) FROM DMKLOG 00658000
  679. * 00659000
  680. * EXIT CONDITIONS - 00660000
  681. * 00661000
  682. * DEFINED UNDER ENTRY POINT DMKSSSL1 00662000
  683. * 00663000
  684. * CALLS TO EXTERNAL ROUTINES - 00664000
  685. * 00665000
  686. * NONE 00666000
  687. * 00667000
  688. * 00668000
  689. * OPERATION - 00669000
  690. * 00670000
  691. * DMKLOG HAS FOUND A DEDICATE STATEMENT WHICH 00671000
  692. * CONTAINS A 'VOLID' BUT NO 'RADDR'. 00672000
  693. * 00673000
  694. * 1) FIND AN AVAILABLE 3330V WITH A FEATURE 'SYSVIRT'. 00674000
  695. * IF ONE CAN NOT BE FOUND, ISSUE MESSAGE 082E AND RETURN. 00675000
  696. * 00676000
  697. * 2) ENTER DMKSSSL1 ROUTINE AT LABEL SCNVOL TO SEE IF 00677000
  698. * 'VOLID' IS MOUNTED. 00678000
  699. * 00679000
  700. DMKSSSL3 RELOC @V60B6B8 00680000
  701. MVI VSERADDR,SYSVIRT INDICATE VIRTUAL 3330V NEEDED @V60B6B8 00681000
  702. MVC SAVRETAD(4),LOGADDR SAVE DMKLOG RETURN ADDR @V60B6B8 00682000
  703. LA R7,SSSL3RET LOAD OUR RETURN ADDRESS @VA10862 00683100
  704. B FINDRDEV TRY TO ALLOCATE AN RDEVBLOK @V60B6B8 00685000
  705. SSSL3RET EQU * RETURN FROM FINDRDEV @V60B6B8 00686000
  706. LTR R15,R15 DID HE FIND ONE @V60B6B8 00687000
  707. BNZ EMSG070 MESSAGE: NO DEVICES AVAIL. @VMI2020 00688000
  708. L R5,VSERADDR @VMI2003 00689000
  709. B BLDCOMMT NOW LOOK FOR VOLID @V60B6B8 00690000
  710. EMSG070 EQU * WRITE MSG DMKSSS070E @VMI2020 00691000
  711. SR R0,R0 MSG INSERT LENGTH 0 @VMI2008 00692000
  712. SR R1,R1 NO MSG INSERT @VMI2008 00693000
  713. ICM R0,14,DMKSSS+3 MODULE ID @VMI2008 00694000
  714. L R2,OPTION70 MSG WRITER OPTIONS @VMI2020 00695000
  715. CALL DMKERMSG PUT OUT MESSAGE @VMI2008 00696000
  716. B DISASTER RET WITH R. C. 8 @VMI2008 00697000
  717. EJECT 00698000
  718. * 00699000
  719. * THE FOLLOWING SUBROUTINE TRIES TO FIND AN AVAILABLE 00700000
  720. * RDEVBLOK OF THE CORRECT TYPE. 00701000
  721. * 00702000
  722. * ON INPUT, VSERADDR = REQUEST TYPE (VIRTUAL OR 00703000
  723. * SYSVIRT) AND RDEVADDR = RETURN ADDR. 00704000
  724. * REG 7 CONTAINS RETURN ADDRESS 00704100
  725. * 00705000
  726. * ON EXIT, IF SUCCESSFUL, GPR 15 = 0 AND VSERADDR 00706000
  727. * CONTAINS THE ALLOCATED RDEVBLOK ADDR. IF NOT 00707000
  728. * SUCCESSFUL, GPR 15 = 8. 00708000
  729. * 00709000
  730. FINDRDEV EQU * FIND A REAL DEVICE @V60B6B8 00710000
  731. L R5,ARIODV ADDR FIRST RDEVBLOK @V60B6B8 00711000
  732. L R6,ARIODC ADDR OF COUNT OF BLOCKS @V60B6B8 00712000
  733. LH R6,0(R6) ACTUAL COUNT OF BLOCKS @V60B6B8 00713000
  734. MVC RETNADDR(4),ZEROES CLEAR FOR POSSIBLE USE LATER @V60B6B8 00714000
  735. FRSTSCAN EQU * LOOK FOR TOTALLY FREE RDEVBLOK @V60B6B8 00715000
  736. USING RDEVBLOK,R5 SET ASSEMBLER ADDRESSABILITY @V60B6B8 00716000
  737. CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT 3330 @V60B6B8 00717000
  738. BNE BUMPCNT1 NO, GO BUMP INDEX COUNT @V60B6B8 00718000
  739. MVC VSERADDR+1(1),RDEVFTR REAL DEV FEATURE @V60B6B8 00719000
  740. NI VSERADDR+1,VIRTUAL+SYSVIRT TEST ONLY THESE BITS @V60B6B8 00720000
  741. CLC VSERADDR+1(1),VSERADDR IS RDEV WHAT HE WANTS @V60B6B8 00721000
  742. BNE BUMPCNT1 NO, GO BUMP THE COUNT @V60B6B8 00722000
  743. TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR DEDICATED @V60B6B8 00723000
  744. BNZ BUMPCNT1 CAN'T BE AVAILABLE @V60B6B8 00724000
  745. TM RDEVFLAG,RDEVSYS+RDEVOWN+RDEVSEL BELONG TO @V60B6B8 00725000
  746. * SYSTEM 00726000
  747. BNZ BUMPCNT1 YES, CAN'T BE AVAILABLE @V60B6B8 00727000
  748. CLI RDEVSER,X'40' IS A VOLUME MOUNTED @V60B6B8 00728000
  749. BE GOTFREE FOUND A FREE RDEVBLOK @V60B6B8 00729000
  750. ST R5,RETNADDR SAVE FOR POSSIBLE RE-ALLOCATION @V60B6B8 00730000
  751. BUMPCNT1 EQU * BUMP TO NEXT RDEVBLOK @V60B6B8 00731000
  752. LA R5,RDEVSIZE*8(R5) NEXT RDEVBLOK IN CHAIN @V60B6B8 00732000
  753. BCT R6,FRSTSCAN GET IT IF THERE IS ONE @V60B6B8 00733000
  754. L R5,RETNADDR DID WE SAVE AN ADDRESS @V60B6B8 00734000
  755. LTR R5,R5 POSSIBLE RDEVBLOK @V60B6B8 00735000
  756. BNZ REUSEVOL YES, WE CAN REUSE A BLOCK @V60B6B8 00736000
  757. ERRNOBLK EQU * NO RDEVBLOK AVAILABLE @V60B6B8 00737000
  758. LA R15,RCERROR SET RETURN CODE @V60B6B8 00738000
  759. RDEVEXIT EQU * NOW RETURN @V60B6B8 00739000
  760. BR R7 RETURN TO CALLER @VA10862 00740100
  761. * 00742000
  762. * WE HAVE AN RDEVBLOK ON WHICH A VOLUME IS MOUNTED BUT 00743000
  763. * NOT IN USE. DEMOUNT THE VOLUME, THEN REUSE THE BLOCK 00744000
  764. * 00745000
  765. REUSEVOL EQU * GET CURRENT VOLUME DEMOUNTED @V60B6B8 00746000
  766. ST R5,RDEVDEMT RDEVBLOK ADDR FOR DEMOUNT @V60B6B8 00747000
  767. BAL R14,DEMOUNTV GO DO THE DEMOUNT @VA11436 00748010
  768. * 00751000
  769. * THE CURRENT RDEVBLOK CAN NOW BE USED 00752000
  770. * 00753000
  771. GOTFREE EQU * WE HAVE A TOTALLY FREE RDEVBLOK @V60B6B8 00754000
  772. ST R5,RETNADDR SAVE RDEVBLOK ADDR @V60B6B8 00755000
  773. TM RDEVFTR,VIRTUAL IS THIS A VIRTUAL RDEV @V60B6B8 00756000
  774. BO ALLCVIRT YES @V60B6B8 00757000
  775. B ALLCRET GO SET UP RETURN @V60B6B8 00758000
  776. ALLCVIRT EQU * ALLOC VIRTUAL @V60B6B8 00759000
  777. ST R11,RDEVUSER POINT TO USER'S VMBLOK @V60B6B8 00760000
  778. MVC RDEVATT(2),UDEVADD SET VIRT DEV ADDR @V60B6B8 00761000
  779. ALLCRET EQU * READY TO RETURN @V60B6B8 00762000
  780. ST R5,VSERADDR SAVE RDEVBLOK ADDR @V60B6B8 00763000
  781. OI RDEVFLAG,RDEVSEL DEVICE IS SELECTED @V60B6B8 00764000
  782. MVC RDEVSER(6),BLANKS CLEAR THE VOL SER @V60B6B8 00765000
  783. SR R15,R15 SET GOOD RETURN CODE @V60B6B8 00766000
  784. B RDEVEXIT AND RETURN @V60B6B8 00767000
  785. DROP R5 @VMI2008 00768000
  786. EJECT 00769000
  787. RCERROR EQU 8 UNCORRECTABLE ERROR RET CODE @V60B6B8 00770000
  788. CLEAR EQU X'00' USED TO CLEAR A FLAG BYTE @V60B6B8 00771000
  789. EJECT 00772000
  790. * 00773000
  791. * 00774000
  792. * ENTRY POINT DMKSSSHV 00775000
  793. * 00776000
  794. * 00777000
  795. * ENTRY CONDITIONS - 00778000
  796. * 00779000
  797. * ENTRY IS FROM DMKHVC VIA A CALL (SVC 8). A VIRTUAL 00780000
  798. * MACHINE HAS ISSUED A DIAGNOSE INSTRUCTION WITH 00781000
  799. * A REQUEST CODE OF X'78'. 00782000
  800. * 00783000
  801. * GPR 5 = ADDR OF VALUE CONTAINED IN 'R1'-SET BY DMKHVC 00784000
  802. * GPR 6 = ADDR OF VALUE CONTAINED IN 'R2'-SET BY DMKHVC 00785000
  803. * GPR 11 = USER'S VMBLOK ADDR 00786000
  804. * GPR 12 = ADDR OF DMKSSSHV 00787000
  805. * GPR 13 = ADDR OF SAVEAREA 00788000
  806. * 00789000
  807. * EXIT CONDITIONS - 00790000
  808. * 00791000
  809. * CC0 - OK 00792010
  810. * CC1 - RC4 - SUBFUNCTION CODE IS < 0 OR > 16 00792020
  811. * - RC8 - SUBFUNCTION CODE IS NOT A MULTIPLE OF FOUR 00792030
  812. * - RC12 - ADDR EXCEPTION BRINGING IN BUFFER PAGE 00792040
  813. * - RC16 - ISSUER IS NOT THE USER WHO DID SUBFUNCTION 0 00792050
  814. * 00793000
  815. * CALLS TO EXTERNAL ROUTINES - 00794000
  816. * 00795000
  817. * DMKPTRAN - GET THE CALLER'S BUFFER 00796000
  818. * DMKFRET - RETURN STORAGE FOR CONTROL BLOCKS 00797000
  819. * DMKERMSG - WRITE A MESSAGE TO THE USER 00798000
  820. * DMKSTKCP - STACK A CPEXBLOK AFTER MSS PROCESSING 00799000
  821. * 00800000
  822. * OPERATION - 00801000
  823. * 00802000
  824. * SEE EACH SUBROUTINE FOR THE INDIVIDUAL SUBFUNCTION CODES 00803000
  825. * 00804000
  826. DMKSSSHV RELOC CALL FROM DMKHVC @V60B6B8 00805000
  827. * 00806000
  828. * THE DIAGNOSE CODE 78 SUB-FUNCTION CODE IS IN THE 00807000
  829. * USER'S GPR SPECIFIED AS GPR2 IN THE DIAGNOSE 00808000
  830. * INSTRUCTION. DMKHVC HAS POINTED OUR GPR 6 00809000
  831. * TO THE DATA CONTAINED IN THE VIRTUAL MACHINE'S 00810000
  832. * GPR 2. THE VALID SUB-FUNCTIONS ARE: 00811000
  833. * 00812000
  834. * 0 - USER IS THE COMMUNICATOR VIRT MACHINE. 00813000
  835. * 00814000
  836. * 4 - USER IS READY TO PROCESS AN MSSCOM 00815000
  837. * 00816000
  838. * 8 - USER HAS PROCESSED THE MSSCOM WITH NO ERROR 00817000
  839. * 00818000
  840. * 12 - USER HAS PROCESSED THE MSSCOM WITH AN ERROR 00819000
  841. * 00820000
  842. * 16 - COMMUNICATOR IS NO LONGER AVAILABLE 00821000
  843. * 00822000
  844. * GET THE SUB-FUNCTION CODE AND USE IT AS AN INDEX INTO 00823000
  845. * A BRANCH TABLE TO THE CORRECT PROCESSING ROUTINE. 00824000
  846. * 00825000
  847. TM 3(R6),X'03' CODE A MULTIPLE OF FOUR? @VA11367 00825010
  848. BZ MULTFOUR YES - OK @VA11367 00825020
  849. LA R15,RC8 GET APPROP RC @VA11367 00825030
  850. B BADINPUT GIVE CC1 @VA11367 00825040
  851. MULTFOUR DS 0H CONTINUE @VA11367 00825050
  852. L R7,0(R6) GET SUB-FUNCTION CODE @V60B6B8 00826000
  853. LTR R7,R7 TEST THE VALUE PASSED @V60B6B8 00827000
  854. BM BADSFID SFID CAN'T BE MINUS @V60B6B8 00828000
  855. LA R1,HIGHSFID HIGHEST VALID CODE @V60B6B8 00829000
  856. CR R7,R1 IS CURRENT OK @V60B6B8 00830000
  857. BH BADSFID NO, TOO HIGH @V60B6B8 00831000
  858. B HVCSUB(R7) GO TO PROPER SUBROUTINE @V60B6B8 00832000
  859. HVCSUB EQU * BRANCH TABLE @V60B6B8 00833000
  860. B HVC00ENT CODE 0 @V60B6B8 00834000
  861. B HVC04ENT CODE 4 @V60B6B8 00835000
  862. B HVC08ENT CODE 8 @V60B6B8 00836000
  863. B HVC08ENT CODE 12 - PROCESS AS 08 @V60B6B8 00837000
  864. B HVC16ENT CODE 16 @V60B6B8 00838000
  865. BADSFID EQU * @V60B6B8 00839000
  866. LA R15,RC4 SET RETURN CODE @V60B6B8 00840000
  867. BADINPUT DS 0H @VA11367 00840010
  868. ST R15,VMGPRS+60 SET RC FOR VIRT MACH @V60B6B8 00841000
  869. OI VMPSW+2,X'10' SET COND CODE 1 @V60B6B8 00842000
  870. B HVCEXIT AND DISPATCH VIRT MACH @V60B6B8 00843000
  871. BADADDR DS 0H @VA11434 00843010
  872. LA R15,RC12 INDICATE BAD BUFFER ADDR @VA11434 00843020
  873. B BADINPUT GO SET UP FOR RETURN CC1 @VA11434 00843030
  874. VALIDCHK EQU * @V60B6B8 00844000
  875. L R0,COMMVMAD COMM VIRT MACH VMBLOK @V60B6B8 00845000
  876. CR R0,R11 IS CURRENT USER LEGAL @V60B6B8 00846000
  877. BER R1 IF SAME USER RETURN @VA11367 00847010
  878. LA R15,RC16 INDICATE PROPER RC @VA11367 00847020
  879. B BADINPUT AND RETURN WITH CC1 TO PHONNIE @VA11367 00847030
  880. EJECT 00849000
  881. * 00850000
  882. * ENTRY SUB-FUNCTION OF ZERO 00851000
  883. * 00852000
  884. * VIRTUAL MACHINE GPR1 CONTAINS THE VIRT ADDRESS TO 00853000
  885. * BE USED FOR MSS COMMUNICATIONS 00854000
  886. * 00855000
  887. * OPERATION - 00856000
  888. * 00857000
  889. * 1) SAVE THE REQUIRED POINTERS TO THE COMMUNICATION 00858000
  890. * VIRTUAL MACHINE IN THE DMKSSS ANCHORS 00859000
  891. * 00860000
  892. HVC00ENT EQU * INITIALIZE FOR MSS COMMUNICATIONS@V60B6B8 00861000
  893. SR R0,R0 CLEAR REG 0 @VA11435 00862010
  894. CL R0,COMMVMAD IS THERE A COMM VMBLOK POINTER? @VA11435 00862020
  895. BNZ BADSFID ALREADY HAVE ONE @V60B6B8 00864000
  896. MVC COMMADDR(4),0(R5) GPR 5 SET BY DMKHVC @V60B6B8 00865000
  897. ST R11,COMMVMAD SAVE COMMUNICATOR VMBLOK ADDR @V60B6B8 00866000
  898. MVC COMMNAME(8),VMUSER SAVE VIRT MACH NAME @V60B6B8 00867000
  899. OI PSAMSS,MSSPRES MSS NOW ACTIVE @V60B6B8 00868000
  900. HVCEXIT EQU * RETURN TO DMKHVC @V60B6B8 00869000
  901. SR R15,R15 CLEAR RETURN CODE @V60B6B8 00870000
  902. EXIT AND RETURN @V60B6B8 00871000
  903. EJECT 00872000
  904. * 00873000
  905. * SUB-FUNCTION CODE WAS 4. THE CALLER'S GPR1 POINTS 00874000
  906. * TO A VIRTUAL MACHINE BUFFER INTO WHICH TO PLACE 00875000
  907. * AN MSSCOM BLOCK, OR A FLAG INDICATING NO MSS WORK 00876000
  908. * IS WAITING. 00877000
  909. * 00878000
  910. * OPERATION - 00879000
  911. * 00880000
  912. * 1) GET THE CALLER'S BUFFER ADDRESS, CALL DMKPTRAN 00881000
  913. * IF NECESSARY TO GET THE USER BUFFER, AND PLACE THE 00882000
  914. * NEXT MSSCOM IN THE USER BUFFER. 00883000
  915. * 00884000
  916. HVC04ENT EQU * SUB-FUNCTION CODE 4 @V60B6B8 00885000
  917. BAL R1,VALIDCHK IS USER VALID @V60B6B8 00886000
  918. L R1,0(R5) VIRT ADDR OF BUFFER @V60B6B8 00887000
  919. LR R7,R11 SAVE CALLER'S VMBLOK @V60B6B8 00888000
  920. L R11,COMMVMAD COMM VMBLOK @V60B6B8 00889000
  921. TRANS 2,1,OPT=(BRING,DEFER),ADEX=BADADDR @VA11434 00890010
  922. LR R11,R7 RESET BASE VMBLOK PTR @V60B6B8 00891000
  923. ADDROK1 EQU * REAL BUFFER ADDR IN GPR 2 @V60B6B8 00892000
  924. L R3,DMKSSSMQ Q OF WAITING MSSCOM BLOCKS @V60B6B8 00893000
  925. LTR R3,R3 IS THERE A Q @V60B6B8 00894000
  926. BZ QMT NO @V60B6B8 00895000
  927. TSTRQENT EQU * @V60B6B8 00896000
  928. TM MSSFLAG2-OSVSCOM(R3),RQENT IS THIS REQ WAITING @VA09302 00897000
  929. BO GIVEIT YES, USE IT @V60B6B8 00898000
  930. L R3,MSSNEXT-OSVSCOM(R3) NEXT ENTRY @V60B6B8 00899000
  931. LTR R3,R3 IS THERE ONE @V60B6B8 00900000
  932. BZ QMT NO @V60B6B8 00901000
  933. B TSTRQENT TEST THE NEXT ONE @V60B6B8 00902000
  934. GIVEIT EQU * @V60B6B8 00903000
  935. NI MSSFLAG2-OSVSCOM(R3),X'FF'-RQENT @VA09302 00904000
  936. OI MSSFLAG2-OSVSCOM(R3),INPROC @VA09302 00904100
  937. MVC 0(MSSSIZE*8,R2),0(R3) PUT MSSCOM BLOCK IN USER @V60B6B8 00906000
  938. * MACHINE 00907000
  939. B HVCEXIT @V60B6B8 00908000
  940. QMT EQU * THE DMKSSSRQ IS EMPTY @V60B6B8 00909000
  941. XC 0(MSSSIZE*8,R2),0(R2) CLEAR CALLER'S FLAGS @V60B6B8 00910000
  942. B HVCEXIT @V60B6B8 00911000
  943. EJECT 00912000
  944. * 00913000
  945. * THE ENTRY SUB-FUNCTION CODE WAS 08 OR 12. THE 00914000
  946. * CALLER'S GPR 1 POINTS TO AN MSSCOM FOR WHICH THE 00915000
  947. * MSS HAS COMPLETED. 00916000
  948. * 00917000
  949. * OPERATION - 00918000
  950. * 00919000
  951. * 1) GET THE CALLER'S BUFFER ADDRESS, CALL DMKPTRAN IF 00920000
  952. * NECESSARY, AND GET THE COMPLETED MSSCOM. 00921000
  953. * 00922000
  954. * 2) IF THERE WAS AN ERROR, THE ORIGINAL REQUESTOR 00923000
  955. * IS GIVEN CONTROL WITH RC = 8. 00924000
  956. * 00925000
  957. * 3) IF THE REQUEST IS FOR A MOUNT, THE BLOCK IS 00926000
  958. * QUEUED FROM DMKSSSMQ. 00927000
  959. * 00928000
  960. * 4) CONTROL IS RETURNED TO THE ORIGINAL REQUESTOR. 00929000
  961. * 00930000
  962. HVC08ENT EQU * GET THE MSSCOM @V60B6B8 00931000
  963. BAL R1,VALIDCHK @V60B6B8 00932000
  964. LR R7,R11 SAVE CALLER'S VMBLOK BASE @V60B6B8 00933000
  965. L R11,COMMVMAD COMMUN VMBLOK ADDR @V60B6B8 00934000
  966. L R1,0(R5) VIRT MACH ADDR OF MSSCOM @V60B6B8 00935000
  967. TRANS 2,1,OPT=(BRING,DEFER),ADEX=BADADDR @VA11434 00936010
  968. LR R11,R7 RESTORE GOOD VMBLOK BASE @V60B6B8 00937000
  969. ADDROK2 EQU * REAL ADDR OF MSSCOM NOW IN GPR 2 @V60B6B8 00938000
  970. USING OSVSCOM,R2 TELL THE ASSEMBLER @V60B6B8 00939000
  971. TM MSSFLAG1,DEMOUNT WAS THIS A DEMOUNT @VA11429 00939100
  972. BZ NOTDEMNT NO @VA11429 00939200
  973. LH R1,MSSVUA GET REAL DEVICE ADDRESS @VA11429 00939300
  974. CALL DMKSCNRU GET RDEVBLOK @VA11429 00939400
  975. LTR R8,R8 IS THERE ONE @VA11429 00939500
  976. BNP NOTDEMNT NO @VA11429 00939600
  977. USING RDEVBLOK,R8 @VA11429 00939700
  978. NI RDEVFLAG,X'FF'-RDEVSEL TURN OFF SELECTED FLAG @VA11429 00939800
  979. TM MSSFLAG1,MSSERR WAS THERE AN MSS ERROR? @VA11344 00939820
  980. BO NOTDEMNT YES - THEN DON'T RESET THE @VA11344 00939840
  981. * 'MOUNTED-BY-CP' FLAG 00939860
  982. NI RDEVFLAG,X'FF'-RDEVVMNT RESET 'MTD-BY-CP' FLAG @VA11344 00939880
  983. NOTDEMNT EQU * @VA11429 00939900
  984. TM MSSFLAG1,MSSERR WAS THERE AN MSS ERROR @VA09302 00940000
  985. BZ MNTCOM GO SEE IF IT WAS A MOUNT MSSCOM @V60B6B8 00941000
  986. L R1,DMKSSSMQ FIRST MSSCOM IN OUR Q @V60B6B8 00942000
  987. LA R3,DMKSSSMQ POINT TO ANCHOR @V60B6B8 00943000
  988. TESTQA EQU * @V60B6B8 00944000
  989. LR R8,R2 SAVE MSSCOM ADDR FROM VS @VMI2008 00945000
  990. CLC 0(8,R2),0(R1) IS THIS THE ONE WITH THE ERROR @V60B6B8 00946000
  991. BE RESETMQR YES, NOW RESET BASE REG @V60B6B8 00947000
  992. LA R3,MSSNEXT-OSVSCOM(R1) SAVE CHAINING PTR @V60B6B8 00948000
  993. L R1,MSSNEXT-OSVSCOM(R1) NEXT BLOK OUR Q @V60B6B8 00949000
  994. LTR R1,R1 IS THERE ONE @V60B6B8 00950000
  995. BZ HVCEXIT NO, ERROR ON NON-EXISTANT @V60B6B8 00951000
  996. B TESTQA CHECK REST OF Q @V60B6B8 00952000
  997. RESETMQR EQU * POINT TO REAL BLOK, NOT COPY @V60B6B8 00953000
  998. MVC 0(4,R3),MSSNEXT-OSVSCOM(R1) CHAIN NEXT TO @V60B6B8 00954000
  999. * PREVIOUS 00955000
  1000. LR R2,R1 @V60B6B8 00956000
  1001. L R9,0(R3) NEXT MSSCOM BLOCK IN Q @VMI2008 00957000
  1002. L R1,MSSTASK1 ADDR OF EXBLOK FOR LNK, LOG, OR @V60B6B8 00958000
  1003. * VDA 00959000
  1004. TM MSSFLAG1,MSSSAVE SAVE AREA NEED TO BE RETURNED ?@VA10862 00959100
  1005. BZ NORETURN NO..THEN BYPASS THIS @VA10862 00959150
  1006. LR R6,R13 SAVE R13 ACROSS CALL @VA10862 00959200
  1007. L R13,CPEXR13-CPEXBLOK(R1) LOAD SAVE AREA ADDRESS @VA10862 00959250
  1008. * FROM DISMOUNT 00959300
  1009. SR R0,R0 ZERO REG 0 @VA10862 00959350
  1010. ST R0,CPEXR13-CPEXBLOK(R1) REFLECT IN CPEXR13 @VA10862 00959400
  1011. ST R0,SAVER12 KEEP FROM UNLOCKING PAGE @VA10862 00959450
  1012. SVC 16 AND RETURN IT @VA10862 00959500
  1013. LR R13,R6 RESTORE SAVE AREA POINTER @VA10862 00959550
  1014. NORETURN EQU * @VA10862 00959600
  1015. LA R0,CPEXSIZE EXBLOK SIZE @V60B6B8 00960000
  1016. CALL DMKFRET RETURN BLOCK - NEVER BE @V60B6B8 00961000
  1017. * DISPATCHED 00962000
  1018. LA R0,8 LENGTH OF USERID @V60B6B8 00963000
  1019. LA R1,MSSUSER MSSCOM USER @V60B6B8 00964000
  1020. CALL DMKSCNAU SEE IF USER STILL AROUND @V60B6B8 00965000
  1021. BC 6,NOUSER1 VMBLOK IS NO LONGER @VA11270 00966010
  1022. LR R6,R2 SAVE MSSCOM ADDRESS FOR LATER @VMI0087 00967000
  1023. LR R7,R11 SAVE CURRENT VMBLOK @V60B6B8 00968000
  1024. LR R11,R1 USER TO RECEIVE MESSAGE @VMI0087 00969000
  1025. LH R1,MSSRC-OSVSCOM(R8) REASON CODE @VA11320 00970100
  1026. CALL DMKCVTBH CONVERT BINARY TO HEX @VA11320 00970200
  1027. SLR R0,R0 CLEAR FOR ERM @VA11320 00970300
  1028. ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 00971000
  1029. L R2,OPTION73 MSG WRITER OPTIONS @VMI2020 00973000
  1030. CALL DMKERMSG @V60B6B8 00974000
  1031. LR R11,R7 RESTORE PREVIOUS VMBLOK @V60B6B8 00975000
  1032. LR R2,R6 RESTORE MSSCOM ADDRESS @VMI0087 00976000
  1033. LA R15,RCERROR ERROR RETURN CODE @V60B6B8 00978000
  1034. L R1,MSSTASK2 CPEXBLOK ADDRESS @VMI0087 00979000
  1035. LTR R1,R1 IS THERE A VALID PTR @VMI2021 00980000
  1036. BNZ STORERC YES, THIS IS INITIAL REQ @VMI2021 00981000
  1037. L R1,MSSTASKD PTR IF DUP MOUNT REQ @VA09302 00982000
  1038. STORERC EQU * SET UP RET CODE FOR CALLER @VMI2021 00983000
  1039. ST R15,CPEXR0-CPEXBLOK(R1) SAVE RET CODE @VMI2021 00984000
  1040. CALL DMKSTKCP @V60B6B8 00985000
  1041. NOUSER2 DS 0H @VA11270 00985010
  1042. LR R1,R2 MSSCOM ADDRESS TO R1 @VMI0087 00986000
  1043. LA R0,MSSSIZE SIZE OF MSSCOM IN DBLWDS. @VMI0087 00987000
  1044. CALL DMKFRET RELEASE MSSCOM @VMI0087 00988000
  1045. LR R2,R8 VS'S MSSCOM ADDR @VMI2008 00989000
  1046. *FIND THE RDEV AND TURN OFF RDEVSEL FLAG... 00990000
  1047. USING RDEVBLOK,R8 TELL ASSEMBLER ... @VA09305 00990050
  1048. L R8,ARIODV FIRST RDEVBLOK @VA09305 00990100
  1049. L R15,ARIODC @VA11173 00990175
  1050. LH R0,0(,R15) @VA11173 00990225
  1051. CHKRDV EQU * @VA09305 00990250
  1052. CALL DMKSCNRD GET THE CUU OF THIS RDEV @VA09305 00990300
  1053. LH R15,MSSVUA GET VUA FOR MSSCOM IN ERROR @VA09305 00990350
  1054. CR R1,R15 SAME DEVICE ADDRESS? @VA09305 00990400
  1055. BZ FRERDV YES, GO FREE FOR FUTURE USE @VA09305 00990450
  1056. LA R8,RDEVSIZE*8(R8) POINT NEXT RDEV @VA09305 00990500
  1057. BCT R0,CHKRDV LOOK AT NEXT RDEV IF ONE @VA09305 00990550
  1058. B NORDV PROBLEM, CAN'T FIND IT-CONTINUE @VA09305 00990600
  1059. FRERDV EQU * FOUND A FREE ONE,TURN OFF FLAG @VA09305 00990650
  1060. NI RDEVFLAG,X'FF'-RDEVSEL TURN OFF RDEVSEL FLAG @VA09305 00990700
  1061. DROP R8 @VA09305 00990750
  1062. NORDV EQU * CONTINUE ON ... @VA09305 00990800
  1063. LR R1,R9 NEXT MSSCOM IN Q @VA09305 00990850
  1064. LTR R1,R1 IS THERE ANOTHER Q ENTRY @VMI2008 00991000
  1065. BZ HVCEXIT NO @VMI2008 00992000
  1066. B TESTQA SEEE IF WAITING FOR SAME VOL @VMI2008 00993000
  1067. SPACE 00993010
  1068. NOUSER1 DS 0H HERE IF THE USER HAS DEPARTED @VA11270 00993020
  1069. ICM R1,15,MSSTASK2 GET THE REMAINING CPEXBLOK @VA11270 00993030
  1070. BNZ NOUSER3 WAS IT HERE @VA11270 00993040
  1071. L R1,MSSTASKD OR WAS IT FOR A DUP @VA11270 00993050
  1072. NOUSER3 DS 0H GOTTA GET RID OF IT ANYWAY @VA11270 00993060
  1073. LA R0,CPEXSIZE GET THE 'HOW MUCH' BITS @VA11270 00993070
  1074. CALL DMKFRET AND UNLOAD IT @VA11270 00993080
  1075. B NOUSER2 NOW GO GET RID OF MSSCOM @VA11270 00993090
  1076. SPACE 00993100
  1077. MNTCOM EQU * @V60B6B8 00994000
  1078. TM MSSFLAG1,MOUNT WAS IT A MOUNT REQUEST @VA09302 00995000
  1079. BZ RETUSER NO, RETURN TO CALLER @V60B6B8 00996000
  1080. L R1,DMKSSSMQ CURRENT ENTRY IN MOUNT Q @V60B6B8 00997000
  1081. TESTQ EQU * @V60B6B8 00998000
  1082. CLC 0(8,R1),0(R2) IS THIS CORRECT ONE @V60B6B8 00999000
  1083. BE SETMQFLG YES @V60B6B8 01000000
  1084. L R1,MSSNEXT-OSVSCOM(R1) NEXT Q ENTRY @V60B6B8 01001000
  1085. LTR R1,R1 IS THERE ANOTHER @V60B6B8 01002000
  1086. BZ HVCEXIT NO, NOTHING TO DO @V60B6B8 01003000
  1087. B TESTQ CHECK THIS ONE @V60B6B8 01004000
  1088. SETMQFLG EQU * @V60B6B8 01005000
  1089. L R0,MSSTASK1-OSVSCOM(R1) CPEXBLOK PTR @V60B6B8 01006000
  1090. LTR R0,R0 IS THERE ONE @V60B6B8 01007000
  1091. BZ MNTDONE NO, MOUNT COMPLETED ALREADY @V60B6B8 01008000
  1092. NI MSSFLAG2-OSVSCOM(R1),X'FF'-RQENT-INPROC @VA09302 01009000
  1093. LR R3,R1 SAVE MSSCOM BLOCK ADDR @V60B6B8 01010000
  1094. L R4,MSSTASK2-OSVSCOM(R1) CPEXBLOK ADDR @V60B6B8 01011000
  1095. OI MSSFLAG2-OSVSCOM(R1),MQENT WAIT FOR MOUNT @VA09302 01012000
  1096. LTR R4,R4 MOUNT PEND MSG ALREADY ISSUED? @VA09306 01012100
  1097. BNZ MNTGO MOUNT HAS BEEN STARTED ON MSC @VA09306 01012200
  1098. * AND IT LOOKS GOOD...BUT MOUNT STILL INCOMPLETE. 01012300
  1099. L R4,MSSTASKD-OSVSCOM(R1) RETURN CPEXBLOK ADDR. @VA09302 01012400
  1100. LTR R4,R4 IS THERE ONE? @VA09306 01012700
  1101. BZ MSSNXT THIS SHOULD NEVER HAPPEN @VA09306 01012800
  1102. XC MSSTASKD-OSVSCOM(4,R1),MSSTASKD-OSVSCOM(R1) @VA11135 01013300
  1103. B MNTGO1 GO ISSUE MSG, RETURN @VA11135 01013450
  1104. MNTGO XC MSSTASK2-OSVSCOM(4,R1),MSSTASK2-OSVSCOM(R1) ... @VA09306 01013500
  1105. MNTGO1 EQU * @VA11135 01013550
  1106. LA R0,VOLSERL LENGTH OF VOLID @V60B6B8 01014000
  1107. ICM R0,14,DMKSSS+3 MODULE ID 'SSS' @V60B6B8 01015000
  1108. LA R1,MSSSER VOL SER FOR MSG INSERT @V60B6B8 01016000
  1109. L R2,OPTION78 MSG WRITER OPTIONS @VMI2020 01017000
  1110. L R11,CPEXR11-CPEXBLOK(R4) REQUESTOR'S VMBLOK BASE@V60B6B8 01018000
  1111. OI MSSFLAG2-OSVSCOM(R3),MSGPROC MSC PROC NOT @VA09302 01019000
  1112. * COMPLETE 01020000
  1113. CALL DMKERMSG PUT OUT THE MSG @V60B6B8 01021000
  1114. * 01022000
  1115. * STACK A CPEXBLOK FOR AN ASYNCHRONOUS RETURN 01023000
  1116. * 01024000
  1117. LA R15,RC4 RETURN CODE - MOUNT IN PROCESS @V60B6B8 01025000
  1118. ST R15,CPEXR0-CPEXBLOK(R4) SET UP FOR REQUESTOR @V60B6B8 01026000
  1119. ST R3,CPEXR1-CPEXBLOK(R4) SAVE MSSCOM ADDRESS @V60B6B8 01027000
  1120. LR R1,R4 CPEXBLOK ADDR @V60B6B8 01028000
  1121. CALL DMKSTKCP STACK THE CPEXBLOK @V60B6B8 01029000
  1122. MSSNXT LR R2,R3 CURRENT MSSCOM ADDRESS @VA09306 01030000
  1123. L R1,MSSNEXT-OSVSCOM(R3) CHAIN PTR @VMI2008 01031000
  1124. LTR R1,R1 IS THERE ONE @VMI2008 01032000
  1125. BZ HVCEXIT NO @VMI2008 01033000
  1126. B TESTQ SEE IF FOR SAME VOL @VMI2008 01034000
  1127. MNTDONE EQU * @V60B6B8 01035000
  1128. * 01036000
  1129. * IF THIS CODE IS ENTERED, THEN THE VOLUME MOUNT 01037000
  1130. * HAS COMPLETED ALREADY. THE UNSOLICITED DEVICE END HAS 01038000
  1131. * BEEN PROCESSED BY DMKDSB, AND THE REQUESTER'S ROUTINE 01039000
  1132. * HAS BEEN DISPATCHED. 01040000
  1133. * 01041000
  1134. LA R3,DMKSSSMQ QUEUE OF MSSCOM BLOCKS @V60B6B8 01042000
  1135. FINDCOMX EQU * @V60B6B8 01043000
  1136. L R4,0(R3) ADDR OF AN MSSCOM @V60B6B8 01044000
  1137. CR R4,R1 IS IT THE ONE WE ARE PROCESSING @V60B6B8 01045000
  1138. BE RESETMQA YES, REMOVE CURRENT ENTRY @V60B6B8 01046000
  1139. LA R3,MSSNEXT-OSVSCOM(R4) POINT TO NEXT CHAIN FIELD@V60B6B8 01047000
  1140. B FINDCOMX AND CHECK IT @V60B6B8 01048000
  1141. RESETMQA EQU * @V60B6B8 01049000
  1142. MVC 0(4,R3),MSSNEXT-OSVSCOM(R4) RECHAIN BLOCKS @V60B6B8 01050000
  1143. LA R0,MSSSIZE SIZE OF MSSCOM @V60B6B8 01051000
  1144. LR R1,R4 CURRENT MSSCOM ADDRESS @V60B6B8 01052000
  1145. CALL DMKFRET RETURN STORAGE TO SYSTEM @V60B6B8 01053000
  1146. L R1,0(R3) NEXT MSSCOM BLOCK @VMI2008 01054000
  1147. LTR R1,R1 IS THERE ONE @VMI2008 01055000
  1148. BZ HVCEXIT NO @VMI2008 01056000
  1149. B TESTQ @VMI2008 01057000
  1150. RETUSER EQU * @V60B6B8 01058000
  1151. L R1,DMKSSSMQ START OF OUR Q @V60B6B8 01059000
  1152. TSTDEMQ EQU * FIND OUR Q ENTRY @V60B6B8 01060000
  1153. CLC 0(8,R1),0(R2) IS THIS THE MATCHING ENTRY @V60B6B8 01061000
  1154. BE DEMTQENT YES, CONTINUE DEMOUNT @V60B6B8 01062000
  1155. L R1,MSSNEXT-OSVSCOM(R1) NEXT ENTRY @V60B6B8 01063000
  1156. LTR R1,R1 IS THERE ONE @V60B6B8 01064000
  1157. BZ HVCEXIT NO, THROW AWAY INTERRUPT @V60B6B8 01065000
  1158. B TSTDEMQ CHECK IT OUT @V60B6B8 01066000
  1159. DEMTQENT EQU * REMOVE ENTRY FROM Q @V60B6B8 01067000
  1160. LA R3,DMKSSSMQ R3 POINTS TO CHAIN FIELD @V60B6B8 01068000
  1161. L R4,0(R3) R4 POINTS TO AN ENTRY @V60B6B8 01069000
  1162. REMOVQ EQU * @V60B6B8 01070000
  1163. CR R4,R1 IS R4 THE ENTRY TO REMOVE @V60B6B8 01071000
  1164. BE REMOVEIT YES @V60B6B8 01072000
  1165. LA R3,MSSNEXT-OSVSCOM(R4) POINT TO CHAIN FIELD @V60B6B8 01073000
  1166. L R4,MSSNEXT-OSVSCOM(R4) AND GET NEXT ENTRY @V60B6B8 01074000
  1167. B REMOVQ TEST IT OUT @V60B6B8 01075000
  1168. REMOVEIT EQU * @V60B6B8 01076000
  1169. MVC 0(4,R3),MSSNEXT-OSVSCOM(R4) RECHAIN @V60B6B8 01077000
  1170. TM MSSFLAG1,RELINQSH THIS A RELINQUISH REQUEST? @VA11344 01077100
  1171. BNO NOTRLQSH NO - THEN DON'T FRET REQUEST BLOK@VA11344 01077200
  1172. LR R1,R4 ELSE GET MSSCOM ADDR FOR FRET @VA11344 01077300
  1173. LA R0,MSSSIZE SIZE OF MSSCOM FOR FRET @VA11344 01077400
  1174. CALL DMKFRET FRET THE RELINQUISH REQ AFTER @VA11344 01077500
  1175. * PROCESSING IT 01077600
  1176. B HVCEXIT NOW RETURN TO ISSUER OF DIAG '78'@VA11344 01077700
  1177. NOTRLQSH DS 0H @VA11344 01077800
  1178. L R1,MSSTASK1-OSVSCOM(R1) CPEXBLOK ADDR @V60B6B8 01078000
  1179. SR R0,R0 CLEAR FOR RET CODE @V60B6B8 01079000
  1180. ST R0,CPEXR0-CPEXBLOK(R1) SET RET CODE FOR DEMOUNT @V60B6B8 01080000
  1181. CALL DMKSTKCP STACK THE REQUEST @V60B6B8 01081000
  1182. EXIT RETURN TO DMKHVC @V60B6B8 01082000
  1183. EJECT 01091000
  1184. HVC16ENT EQU * @V60B6B8 01092000
  1185. * 01093000
  1186. * 01094000
  1187. * THE SUB-FUNCTION CODE WAS 16. THE MSS COMMUNICATOR 01095000
  1188. * PROGRAM (DMKMSS) WILL NO LONGER BE ACTIVE. PURGE ALL 01096000
  1189. * MSSCOM REQUESTS WHICH HAVE NOT YET BEEN PROCESSED BY 01097000
  1190. * THE MSC. 01098000
  1191. * 01099000
  1192. * OPERATION - 01100000
  1193. * 01101000
  1194. * 1) THE QUEUE OF MSSCOM BLOCKS IN DMKSSSRQ IS 01102000
  1195. * PROCESSED ONE AT A TIME. FOR EACH ONE, THE ORIGINAL 01103000
  1196. * REQUESTOR IS DISPATCHED WITH A RC = 8. 01104000
  1197. * 01105000
  1198. BAL R1,VALIDCHK @V60B6B8 01106000
  1199. L R4,DMKSSSMQ Q OF UNPROCESSED REQUESTS @V60B6B8 01107000
  1200. LTR R4,R4 ARE THERE ANY @V60B6B8 01108000
  1201. BNZ PURGCOM YES, GET ONE AT A TIME @V60B6B8 01109000
  1202. RESETNAM EQU * CLEAR VIRT MACH NAME @V60B6B8 01110000
  1203. XC COMMNAME(16),COMMNAME CLEAR NAME, VMBLOK, ADDR @V60B6B8 01111000
  1204. NI PSAMSS,X'FF'-MSSPRES MSS COMM NOT ACTIVE NOW @V60B6B8 01112000
  1205. EXIT RETURN TO DMKHVC @V60B6B8 01113000
  1206. PURGCOM EQU * PURGE THE DMKSSSRQ @V60B6B8 01114000
  1207. USING OSVSCOM,R4 @V60B6B8 01115000
  1208. TM MSSFLAG2,RQENT+INPROC WAITING FOR MSC @VA09302 01116000
  1209. BZ NOTINQ NO, NO CLEANUP @V60B6B8 01117000
  1210. ICM R3,15,MSSTASK2 PICK UP CPEXBLOK POINTER @VA11135 01118000
  1211. BNZ NOTSK3 DOES NOT EXIST @VA11135 01118100
  1212. L R3,MSSTASKD SO PICK UP DUPLICATE CPEXBLOK @VA11135 01118200
  1213. LTR R3,R3 ANYTHING THERE? @VA11344 01118225
  1214. BZ NOTINQ NO - THEN DON'T STACK CPEXBLOK @VA11344 01118250
  1215. NOTSK3 DS 0H @VA11135 01118300
  1216. USING CPEXBLOK,R3 @V60B6B8 01119000
  1217. LR R5,R11 SAVE OUR VMBLOK PTR @V60B6B8 01120000
  1218. L R11,CPEXR11 GET USER'S VMBLOK BASE @V60B6B8 01121000
  1219. L R2,OPTION72 MSG WRITER OPTIONS @VMI2020 01122000
  1220. SR R1,R1 NO MSG INSERT PTR @V60B6B8 01123000
  1221. SR R0,R0 NO MSG INSERT LENGTH @V60B6B8 01124000
  1222. ICM R0,14,DMKSSS+3 MODULE ID FOR MSG @V60B6B8 01125000
  1223. CALL DMKERMSG WRITE OUT THE MESSAGE @V60B6B8 01126000
  1224. LA R15,RCERROR RETURN CODE 8 @V60B6B8 01127000
  1225. ST R15,CPEXR0 SET FOR CALLER @V60B6B8 01128000
  1226. LR R1,R3 CPEXBLOK ADDR @V60B6B8 01129000
  1227. CALL DMKSTKCP STACK IT FOR THE DISPATCHER @V60B6B8 01130000
  1228. NOTINQ EQU * @V60B6B8 01131000
  1229. LH R1,MSSVUA @VA11709 01131100
  1230. CALL DMKSCNRU @VA11709 01131200
  1231. USING RDEVBLOK,R8 @VA11709 01131300
  1232. NI RDEVFLAG,X'FF'-RDEVSEL @VA11709 01131400
  1233. DROP R8 @VA11709 01131500
  1234. LR R1,R4 MSSCOM ADDR @V60B6B8 01132000
  1235. L R4,MSSNEXT NEXT MSSCOM IN CHAIN @V60B6B8 01133000
  1236. LA R0,MSSSIZE PICK UP THE SIZE @VA11444 01134010
  1237. CALL DMKFRET GIVE STORAGE BACK TO SYSTEM @V60B6B8 01135000
  1238. LTR R4,R4 IS THERE ANOTHER MSSCOM @V60B6B8 01136000
  1239. BNZ PURGCOM YES, GET RID OF IT @V60B6B8 01137000
  1240. ST R4,DMKSSSMQ RESET ANCHOR TO ZERO @VA11103 01137010
  1241. B RESETNAM CLEAR OUR ANCHORS, ETC. @V60B6B8 01138000
  1242. DROP R3 @V60B6B8 01139000
  1243. DROP R4 @V60B6B8 01140000
  1244. EJECT 01141000
  1245. * 01332000
  1246. * 01333000
  1247. * ENTRY POINT DMKSSSUS 01334000
  1248. * 01335000
  1249. * 01336000
  1250. * ENTRY CONDITIONS - 01337000
  1251. * 01338000
  1252. * DMKSSSUS IS ENTERED VIA A CALL FROM DMKUSO. 01339000
  1253. * AT ENTRY, THE PERTINENT REGISTERS ARE: 01340000
  1254. * GPR 12 = DMKSSSUS ADDRESS 01341000
  1255. * GPR 11 = VMBLOK ADDR 01342000
  1256. * 01343000
  1257. * EXIT CONDITIONS - 01344000
  1258. * 01345000
  1259. * STANDARD EXIT CONDITIONS 01346000
  1260. * 01347000
  1261. * CALLS TO EXTERNAL ROUTINES - 01348000
  1262. * 01349000
  1263. * NONE 01350000
  1264. * 01351000
  1265. * OPERATION - 01352000
  1266. * 01353000
  1267. * 1) CALL ROUTINE HVC16ENT TO PURGE ALL MSSCOM 01354000
  1268. * REQUESTS WHICH HAVE NOT YET BEEN PROCESSED BY THE MSC. 01355000
  1269. * 01356000
  1270. DMKSSSUS RELOC @V60B6B8 01357000
  1271. B HVC16ENT GO PURGE THE QUEUE @V60B6B8 01358000
  1272. EJECT 01359000
  1273. * 01360000
  1274. * 01361000
  1275. * DMKSSSLN ENTRY POINT 01362000
  1276. * 01363000
  1277. * 01364000
  1278. * ENTRY CONDITIONS - 01365000
  1279. * 01366000
  1280. * ENTRY IS VIA A CALL (SVC 8) FROM DMKLNK. DMKLNK HAS 01367000
  1281. * ATTEMPTED TO FIND A SYSTEM VOLUME, BUT THE CORRECT 01368000
  1282. * ONE IS NOT CURRENTLY MOUNTED. REGISTERS AT ENTRY: 01369000
  1283. * GPR 12 = DMKSSSLN ADDRESS 01370000
  1284. * GPR 11 = USER'S VMBLOK ADDRESS 01371000
  1285. * GPR 4 = UDEVBLOK ADDRESS 01372000
  1286. * GPR 6 = YYY ADDRESS (LINKED 'AS' ADDRESS) 01372100
  1287. * 01373000
  1288. * EXIT CONDITIONS - 01374000
  1289. * 01375000
  1290. * GPR 15 = 0 MEANS VOLUME NOW MOUNTED 01376000
  1291. * GPR 15 = 4 MEANS MSS PROCESSING VOLUME MOUNT 01377000
  1292. * GPR 15 = 8 MEANS MSS ERROR, VOLUME CAN NOT BE MOUNTED 01378000
  1293. * 01379000
  1294. * CALLS TO EXTERNAL ROUTINES - 01380000
  1295. * 01381000
  1296. * DMKERMSG - WRITE A MESSAGE TO THE USER 01382000
  1297. * 01383000
  1298. * OPERATION - 01384000
  1299. * 01385000
  1300. * 1) GO TO SUBROUTINE FINDRDEV TO FIND AN AVAILABLE 01386000
  1301. * SYSVIRT RDEVBLOK. IF NOT FOUND, ISSUE MESSAGE 01387000
  1302. * DMKSSS080E AND RETURN WITH RETURN CODE 8. 01388000
  1303. * 01389000
  1304. * 2) WHEN AN RDEVBLOK IS ALLOCATED, GO TO ROUTINE 01390000
  1305. * BLDCOMMT TO BUILD AND QUEUE AN MSSCOM FOR THE 01391000
  1306. * VOLUME MOUNT. IF AN MSS ERROR IS DETECTED, 01392000
  1307. * CONTROL IS RETURNED TO DMKLNK WITH A RETURN 01393000
  1308. * CODE 8. IF THE MSS ACCEPTS THE MOUNT, RETURN 01394000
  1309. * IS TO DMKLNK WITH RETURN CODE 4. 01395000
  1310. * 01396000
  1311. DMKSSSLN RELOC @V60B6B8 01397000
  1312. MVI VSERADDR,SYSVIRT INDICATE WE NEED SYSVIRT DEVICE@V60B6B8 01398000
  1313. LA R7,SSSLNDEV LOAD OUR RETURN ADDRESS @VA10862 01399000
  1314. ST R6,SAVEWRK9 SAVE YYY ADDRESS @VA11254 01399100
  1315. B FINDRDEV TRY TO FIND AN RDEVBLOK TO USE @V60B6B8 01401000
  1316. SSSLNDEV EQU * RETURN FROM FINDRDEV @V60B6B8 01402000
  1317. LTR R15,R15 DID WE GET AN RDEVICE @V60B6B8 01403000
  1318. BZ RDEVLNOK YES @V60B6B8 01404000
  1319. L R2,OPTION70 MSG WRITER OPTIONS @VMI2020 01405000
  1320. SR R1,R1 NO MSG INSERTS @V60B6B8 01406000
  1321. SR R0,R0 NO INSERT LENGTH @V60B6B8 01407000
  1322. ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 01408000
  1323. CALL DMKERMSG WRITE MSG TO USER @V60B6B8 01409000
  1324. LA R0,RCERROR SET UP EXTERNAL RETURN CODE @V60B6B8 01410000
  1325. RETLINK EQU * RETURN TO DMKLNK @V60B6B8 01411000
  1326. LM R1,R11,SAVER1 CALLER'S REGS @V60B6B8 01412000
  1327. SVC 12 INVOKE STANDARD EXIT SVC @V60B6B8 01413000
  1328. RDEVLNOK EQU * FOUND AN RDEVBLOK @V60B6B8 01414000
  1329. L R5,VSERADDR GET RDEVBLOK ADDR FROM FINDRDEV @V60B6B8 01415000
  1330. LR R9,R4 SET UDEVBLOK BASE @V60B6B8 01416000
  1331. LA R3,UDEVVSER VOLSER NEEDED @VA11254 01416100
  1332. LA R9,SAVEWRK9+2 PUT YYY ADDRESS INTO R9 @VA11254 01416200
  1333. MVC SAVRETAD(4),LNKMTRET ADDR IN DMKLNK AFTER @V60B6B8 01417000
  1334. * MOUNT DONE 01418000
  1335. B BLDCOMTA @VA11254 01419100
  1336. EJECT 01420000
  1337. * 01528000
  1338. * 01529000
  1339. * DMKSSSDE ENTRY POINT 01530000
  1340. * 01531000
  1341. * 01532000
  1342. * ENTRY CONDITIONS - 01533000
  1343. * 01534000
  1344. * ENTRY IS VIA CALL (SVC 8) FROM DMKDEF OR DMKCPS. IF FROM 01535100
  1345. * DMKDEF, THE PURPOSE IS TO DEMOUNT AN MSS VOLUME WHICH IS 01535600
  1346. * MOUNTED, BUT NOT IN USE. THE REAL DEVICE IS GOING TO BE 01536100
  1347. * REDEFINED SO THE VOLUME MUST BE DEMOUNTED. IF FROM DMKCPS, 01536600
  1348. * THE PURPOSE IS TO DEMOUNT AN MSS VOLUME WHICH HAS BEEN 01537100
  1349. * VARIED OFFLINE. ON ENTRY THE PERTINENT REGISTERS ARE: 01537600
  1350. * GPR 12 = DMKSSSDE ADDR 01540000
  1351. * GPR 11 = VMBLOK ADDR 01541000
  1352. * GPR 8 = RDEVBLOK ADDR 01542000
  1353. * 01543000
  1354. * EXIT CONDITIONS - 01544000
  1355. * 01545000
  1356. * IF THE VOLUME CAN NOT BE DEMOUNTED FOR ANY REASON, SUCH 01546000
  1357. * AS MSS NOT AVAILABLE OR MSC ERROR, THEN A MESSAGE IS 01547000
  1358. * WRITTEN TO THE USER AND A RETURN CODE OF 8 IS PLACED 01548000
  1359. * IN GPR 15. 01549000
  1360. * 01550000
  1361. * CALLS TO EXTERNAL ROUTINES - 01551000
  1362. * 01552000
  1363. * DMKFREE - GET STORAGE FOR A CPEXBLOK 01553000
  1364. * DMKFRET - RETURN A CPEXBLOK 01554000
  1365. * 01555000
  1366. * OPERATION - 01556000
  1367. * 01557000
  1368. * 1) THE REQUIRED INFORMATION IS OBTAINED FROM THE 01558000
  1369. * RDEVBLOK AND SUBROUTINE COMBLD IS CALLED TO BUILD 01559000
  1370. * AN MSSCOM BLOCK FOR THE DEMOUNT. 01560000
  1371. * 01561000
  1372. * 2) A CPEXBLOK IS BUILT SO THAT OUR REGISTERS CAN BE 01562000
  1373. * SAVED, AND SUBROUTINE SCHMSSC IS CALLED TO SCHEDULE 01563000
  1374. * THE MSSCOM FOR DMKMSS. IF THERE ARE ANY ERRORS, A 01564000
  1375. * MESSAGE IS WRITTEN BY SCHMSSC AND CONTROL IS RETURNED 01565000
  1376. * TO CALLER. 01566100
  1377. * 01567000
  1378. * 3) AFTER THE DEMOUNT HAS BEEN PROCESSED BY THE MSC, 01568000
  1379. * CONTROL IS GIVEN, BY DMKSSSHV, TO LABEL DEFDMT, SINCE 01569000
  1380. * THAT ADDRESS WAS PLACED IN THE CPEXBLOK WHEN BUILT. 01570000
  1381. * THE CODE AT DEFDMT THEN RETURNS TO DMKDEF. IF THE MSC 01571000
  1382. * DETECTED AN ERROR DURING DEMOUNT, THEN DMKSSSHV WROTE 01572000
  1383. * AN ERROR MESSAGE BEFORE RETURNING TO DEFDMT. 01573000
  1384. * 01574000
  1385. DMKSSSDE RELOC ENTRY FROM DMKDEF OR DMKCPS @VA10877 01575100
  1386. USING RDEVBLOK,R8 SET BY CALLER @VA10877 01576100
  1387. DROP R9 @V60B6B8 01577000
  1388. MVC SAVRETAD(4),SAVERETN SAVE CALLER'S RTN ADDR @V60B6B8 01578000
  1389. LA R1,RDEVSER VOLUME SER NO. @V60B6B8 01579000
  1390. ST R1,VSERADDR SAVE ADDR FOR COMBLD @V60B6B8 01580000
  1391. ST R8,RDEVADDR SAVE RDEVBLOK ADDR FOR COMBLD @V60B6B8 01581000
  1392. OI RDEVFLAG,RDEVSEL @VA11429 01581100
  1393. BAL R14,COMBLD GO BUILT THE MSSCOM @VA11436 01582010
  1394. USING OSVSCOM,R10 TELL ASSEMBLER @V60B6B8 01587000
  1395. MVI MSSFLAG1,DEMOUNT INDICATE DEMOUNT REQUEST @VA09302 01588000
  1396. * 01589000
  1397. * NOW BUILD A CPEXBLOK SO WE CAN SAVE OUR REGS ACROSS THE 01590000
  1398. * SUBSEQUENT ASYNCHRONOUS DEMOUNT BY THE MSC. 01591000
  1399. * 01592000
  1400. LA R0,CPEXSIZE NO OF D-WORDS IN CPEXBLOK @V60B6B8 01593000
  1401. CALL DMKFREE GET DYNAMIC STORAGE @V60B6B8 01594000
  1402. USING CPEXBLOK,R1 R1 SET BY DMKFREE @V60B6B8 01595000
  1403. ST R1,MSSTASK1 SAVE ADDR IN MSSCOM @V60B6B8 01596000
  1404. LA R2,DEFDMT RETURN POINT ADDR @V60B6B8 01597000
  1405. ST R2,RDEVADDR SAVE FOR SCHMSSC ALSO @V60B6B8 01598000
  1406. MVC CPEXADD(4),SAVRETAD @V60B6B8 01599000
  1407. MVC CPEXREGS(48),SAVEREGS @V60B6B8 01600000
  1408. MVC CPEXR12(8),SAVER12 @V60B6B8 01601000
  1409. B SCHMSSC PUT THE MSSCOM IN THE Q @V60B6B8 01602000
  1410. DEFDMT EQU * RETURN FROM SCHMSSC OR DEMOUNT @V60B6B8 01603000
  1411. GOTO DMKDSPCH WAIT FOR MSC TO PROCESS DEMOUNT @V60B6B8 01604000
  1412. DEMTDONE EQU * @V60B6B8 01605000
  1413. EXIT RETURN TO CALLER - GPR 15 @VA10877 01606100
  1414. * CONTAINS THE RETURN CODE SET 01607000
  1415. * BY DMKSSSHV OR SCHMSSC 01608000
  1416. EJECT 01609000
  1417. * 01610000
  1418. * 01611000
  1419. * DMKSSSVA ENTRY POINT 01612000
  1420. * 01613000
  1421. * 01614000
  1422. * ENTRY CONDITIONS - 01615000
  1423. * 01616000
  1424. * ENTRY IS FROM DMDVDA VIA A CALL (SVC 8). AN MSS REAL 01617000
  1425. * DEVICE IS BEING ATTACHED WITH THE VOLID PARAMETER. 01618000
  1426. * ATTEMPT TO MOUNT THE VOLID ON THE DEVICE. AT ENTRY, 01619000
  1427. * THE PERTINENT REGISTERS ARE: 01620000
  1428. * GPR 12 = DMKSSSVA ADDR 01621000
  1429. * GPR 11 = VMBLOK ADDR 01622000
  1430. * GPR 8 = RDEVBLOK ADDR 01623000
  1431. * GPR 13 = ADDR OF DMKSSS SAVEAREA 01624000
  1432. * THE VOLID TO BE MOUNTED IS LOCATED AT FIELD ADDRSAVE 01625000
  1433. * IN THE DMKVDA SAVE AREA. 01626000
  1434. * 01627000
  1435. * EXIT CONDITIONS - 01628000
  1436. * 01629000
  1437. * THE RETURN CODE IN GPR 15 INDICATES THE EXIT CONDITIONS. 01630000
  1438. * GPR 15 = 0, THE VOLUME IS MOUNTED 01631000
  1439. * GPR 15 = 4, THE MSS IS MOUNTING THE VOLUME 01632000
  1440. * GPR 15 = 8, SERIOUS ERROR, THE VOLUME CAN NOT BE MOUNTED 01633000
  1441. * 01634000
  1442. * CALLS TO EXTERNAL ROUTINES - 01635000
  1443. * 01636000
  1444. * DMKERMSG - WRITE A MESSAGE TO THE USER 01637000
  1445. * DMKSSSDE - DEMOUNT A VIRTUAL VOLUME 01638000
  1446. * 01639000
  1447. * OPERATION - 01640000
  1448. * 01641000
  1449. * 1) GET THE VOLID PARAMETER AS PASSED BY DMKVDA. ENSURE 01642000
  1450. * THAT THE VOLUME IS NOT IN USE ON SOME OTHER DEVICE AND 01643000
  1451. * THAT THIS REAL DEVICE IS AVAILABLE. 01644000
  1452. * 01645000
  1453. * 2) IF THE VOLUME IS MOUNTED ON ANOTHER DEVICE, BUT 01646000
  1454. * NOT IN USE, CAUSE IT TO BE DEMOUNTED. IF THERE IS 01647000
  1455. * A VOLUME MOUNTED ON THIS DEVICE, BUT THE DEVICE IS 01648000
  1456. * OTHERWISE AVAILABLE, DEMOUNT THE VOLUME. 01649000
  1457. * 01650000
  1458. * 3) REQUEST A VOLUME MOUNT FROM THE MSC FOR THIS VOLUME. 01651000
  1459. * WHEN THE MSC HAS ACCEPTED THE MOUNT REQUEST, RETURN TO 01652000
  1460. * DMKVDA WITH A RETURN CODE OF 4. 01653000
  1461. * 01654000
  1462. * 01655000
  1463. DMKSSSVA RELOC ENTRY FROM DMKVDA @V60B6B8 01656000
  1464. USING RDEVBLOK,R8 SET BY DMKVDA @V60B6B8 01657000
  1465. MVC SAVRETAD(4),VDAS1RET RETURN ADDR AFTER MOUNT @V60B6B8 01658000
  1466. VDABRENT EQU * BRANCH ENTRY FROM DMKSSSAS @V60B6B8 01659000
  1467. TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR ALREADY @V60B6B8 01660000
  1468. * DEDICATED 01661000
  1469. BNZ MSG438 YES,NOT AVAILABLE @VA11320 01662100
  1470. TM RDEVFLAG,RDEVSEL SELECTED FOR MOUNT @VMI2011 01663000
  1471. BZ VDAGO1 NO, AVAILABLE @VMI2011 01664000
  1472. MSG438 EQU * MSS DEVICE AVAILABLE @VA11320 01665100
  1473. L R2,OPT438 MSG WRITER OPTIONS @VA11320 01665500
  1474. SR R1,R1 NO MSG INSERT @V60B6B8 01667000
  1475. SR R0,R0 NO INSERT LENGTH @V60B6B8 01668000
  1476. ICM R0,14,DMKSSS+3 MODULE ID @V60B6B8 01669000
  1477. CALL DMKERMSG WRITE THE MESSAGE @V60B6B8 01670000
  1478. VDAERROR LA R0,RCERROR ERROR RETURN CODE @V60B6B8 01671000
  1479. VDAEXIT EQU * RETURN TO VDA @V60B6B8 01672000
  1480. LM R1,R11,SAVER1 CALLER'S REGS @V60B6B8 01673000
  1481. SVC 12 STANDARD SVC RETURN @V60B6B8 01674000
  1482. VDAGO1 EQU * CONTINUE CHECKING @V60B6B8 01675000
  1483. LH R0,RDEVLNKS NO OF USERS LINKED @V60B6B8 01676000
  1484. LTR R0,R0 ARE THERE ANY @V60B6B8 01677000
  1485. BNZ VDAERROR YES, WE CAN'T USE @V60B6B8 01678000
  1486. * 01679000
  1487. * THE RDEVICE IS AVAILABLE, SEE IF THE VOLUME IS ALREADY 01680000
  1488. * MOUNTED, HERE OR ELSEWHERE 01681000
  1489. * 01682000
  1490. CLC RDEVSER(6),0(R7) IS VOLUME MOUNTED THIS DEVICE @V60B6B8 01683000
  1491. BNE TSTRDEVA NO, CHECK THE REST @V60B6B8 01684000
  1492. SR R0,R0 CLEAR THE RETURN CODE @V60B6B8 01685000
  1493. B VDAEXIT AND EXIT - VOLUME ALREADY THERE @V60B6B8 01686000
  1494. TSTRDEVA EQU * CHECK ALL RDEVS @V60B6B8 01687000
  1495. CLC RDEVSER,BLANKS IS A VOLUME MOUNTED? @VA11939 01688100
  1496. BNE MUSTDEMT YES, MUST DEMOUNT IT @VA11939 01688600
  1497. LA R0,VOLSERL @VMI2008 01690000
  1498. LR R1,R7 POINTER TO VOLSER @V60B6B8 01691000
  1499. L R5,ARIODV FIRST REAL DEVICE BLOCK @VMI2012 01692000
  1500. L R1,ARIODC COUNT OF RDEVBLOKS @VMI2012 01693000
  1501. LH R1,0(R1) ACTUAL COUNT @VMI2012 01694000
  1502. DROP R8 @VMI2012 01695000
  1503. USING RDEVBLOK,R5 @VMI2012 01696000
  1504. FINDVSER EQU * LOOK FOR THIS VOLSER @VMI2012 01697000
  1505. CLC RDEVSER(6),0(R7) MOUNTED THIS DEVICE @VMI2012 01698000
  1506. BE CHKSTVDA YES, CHECK DEVICE STATUS @VMI2012 01699000
  1507. BUMPDEV EQU * BUMP TO NEXT DEVICE @VMI2012 01700000
  1508. LA R5,RDEVSIZE*8(R5) NEXT BLOCK @VMI2012 01701000
  1509. BCT R1,FINDVSER CHECK THE VOLSER @VMI2012 01702000
  1510. B VDAMNTA VOLUME NOT MOUNTED @VMI2012 01703000
  1511. CHKSTVDA EQU * @VMI2012 01704000
  1512. CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) @VMI2012 01705000
  1513. BNE BUMPDEV NOT A 3330 VOLUME @VMI2012 01706000
  1514. TM RDEVFTR,VIRTUAL+SYSVIRT IS IT A 3330V @VMI2012 01707000
  1515. BZ BUMPDEV NO, NOT A DUPLICATE @VMI2012 01708000
  1516. TM RDEVSTAT,RDEVDISA+RDEVDED DED OR OFFLINE @VMI2012 01709000
  1517. BNZ MSG438 CAN NOT DEMOUNT @VA11320 01710500
  1518. TM RDEVFLAG,RDEVOWN+RDEVSYS+RDEVSEL @VMI2012 01711000
  1519. BNZ MSG438 CP OWNED,SYSTEM OR SELECTED @VA11320 01712100
  1520. SR R0,R0 CLEAR @VMI2012 01713000
  1521. CH R0,RDEVLNKS ANY MINI-DISKS ALLOCATED @VMI2012 01714000
  1522. BNE MSG438 YES,CANNOT DEMOUNT @VA11320 01715100
  1523. DROP R5 @VMI2012 01716000
  1524. USING RDEVBLOK,R8 @VMI2012 01717000
  1525. B VDASER @V60B6B8 01718000
  1526. MUSTDEMT EQU * MUST DEMOUNT A VOLUME @V60B6B8 01719000
  1527. LR R5,R8 RDEVBLOK ADDR INTO PROPER REG @V60B6B8 01720000
  1528. B VDASER AND GO SET UP @V60B6B8 01721000
  1529. * 01722000
  1530. * THE VOLUME IS NOT MOUNTED AND THE RDEVBLOK IS 01723000
  1531. * AVAILABLE. MOUNT THE VOLUME. 01724000
  1532. * 01725000
  1533. VDAMNTA EQU * SET UP FOR VOLUME MOUNT @V60B6B8 01726000
  1534. OI RDEVFLAG,RDEVSEL DEVICE SELECTED FOR MOUNT @VMI2011 01727000
  1535. LR R5,R8 SET UP RDEVBLOK PTR @V60B6B8 01728000
  1536. LR R3,R7 VOLSER PTR @V60B6B8 01729000
  1537. B BLDCOMTA GO GET VOLUME MOUNTED @V60B6B8 01730000
  1538. VDASER EQU * SET UP FOR VOLUME DEMOUNT @V60B6B8 01731000
  1539. LR R4,R8 SAVE INPUT RDEVBLOK ADDR @V60B6B8 01732000
  1540. LR R8,R5 RDEVBLOK FOR DEMOUNT @V60B6B8 01733000
  1541. CALL DMKSSSDE DEMOUNT THE VOLUME @V60B6B8 01734000
  1542. LR R8,R4 RESET INPUT RDEVBLOK ADDR @V60B6B8 01735000
  1543. LTR R0,R0 WAS THERE A DEMOUNT ERROR @V60B6B8 01736000
  1544. BNZ VDAERROR YES, SET RETURN CODE, EXIT @V60B6B8 01737000
  1545. B VDAMNTA GO GET OUR VOLUME MOUNTED @V60B6B8 01738000
  1546. EJECT 01739000
  1547. * 01740000
  1548. * 01741000
  1549. * DMKSSSAS ENTRY POINT 01742000
  1550. * 01743000
  1551. * 01744000
  1552. * ENTRY CONDITIONS - 01745000
  1553. * 01746000
  1554. * ENTRY IS FROM DMKVDA VIA A CALL (SVC 8). WE ARE 01747000
  1555. * TRYING TO ATTACH A 3330V TO THE SYSTEM WITH A VOLID. 01748000
  1556. * UPON ENTRY, THE PERTINENT REGISTERS ARE: 01749000
  1557. * 01750000
  1558. * GPR 12 = DMKSSSAS ENTRY ADDR 01751000
  1559. * GPR 11 = VMBLOK BASE 01752000
  1560. * GPR 8 = RDEVBLOK ADDR 01753000
  1561. * GPR 0 = ADDR OF VOLID 01754000
  1562. * 01755000
  1563. * EXIT CONDITIONS - 01756000
  1564. * 01757000
  1565. * IF SUCCESSFUL, THE REAL DEVICE HAS BEEN ATTACHED 01758000
  1566. * TO THE SYSTEM AND THE REQUESTED VOLUME HAS BEEN 01759000
  1567. * MOUNTED. THE RETURN CODES ARE: 01760000
  1568. * 01761000
  1569. * GPR 15 = 0, SUCCESS 01762000
  1570. * GPR 15 = 4, MSS VOLUME MOUNT IN PROCESS 01763000
  1571. * GPR 15 = 8, SERIOUS ERROR, ATTACH CAN NOT PROCEED 01764000
  1572. * 01765000
  1573. * CALLS TO EXTERNAL ROUTINES - 01766000
  1574. * 01767000
  1575. * DMKCVTBH - CONVERT BINARY RADDR TO PRINTABLE HEX 01768000
  1576. * DMKERMSG - WRITE A MESSAGE TO THE USER 01769000
  1577. * 01770000
  1578. * OPERATION - 01771000
  1579. * 01772000
  1580. * 1) TEST TO MAKE SURE THAT THE RDEVBLOK IS THE 01773000
  1581. * CORRECT TYPE. IF IT IS, ENTER DMKSSSVA TO ACCOMPLISH 01774000
  1582. * THE REQUIRED VOLUME CHECKING AND MOUNTING. 01775000
  1583. * 01776000
  1584. DMKSSSAS RELOC ENTRY POINT @V60B6B8 01777000
  1585. USING RDEVBLOK,R8 SET BY DMKVDA @V60B6B8 01778000
  1586. LR R7,R0 ADDR OF VOLID @V60B6B8 01779000
  1587. ST R7,VSERADDR SAVE VOL SER ADDR @V60B6B8 01780000
  1588. TM RDEVFTR,SYSVIRT CORRECT DEVICE FEATURE @V60B6B8 01781000
  1589. BO GOSSSVA YES, GO ENTER DMKSSSVA @V60B6B8 01782000
  1590. LA R1,RDEVADD DEVICE ADDRESSG 082E @V60B6B8 01783000
  1591. CALL DMKCVTBH GET FORMAT FOR MESSAGE @V60B6B8 01784000
  1592. L R2,OPTION72 MSG WRITER OPTIONS @VMI2020 01785000
  1593. SR R0,R0 INDICATE INSERT IN GPR 1 @V60B6B8 01786000
  1594. ICM R0,14,DMKSSS+3 MOD ID FOR MSG @V60B6B8 01787000
  1595. CALL DMKERMSG WRITE OUT MESSAGE @V60B6B8 01788000
  1596. LA R15,RCERROR ERROR CODE 8 @V60B6B8 01789000
  1597. EXIT RETURN TO DMKVDA @V60B6B8 01790000
  1598. GOSSSVA EQU * SET UP PARMS @V60B6B8 01791000
  1599. MVC SAVRETAD(4),VDAS2RET RETURN POINT AFTER MOUNT @V60B6B8 01792000
  1600. B VDABRENT ENTER DMKSSSVA @V60B6B8 01793000
  1601. EJECT 01794000
  1602. * 01795000
  1603. * 01796000
  1604. * DMKSSSEN ENTRY POINT 01797000
  1605. * 01798000
  1606. * 01799000
  1607. * ENTRY CONDITIONS - 01800000
  1608. * 01801000
  1609. * ENTRY IS FROM THE DISPATCHER (DMKDSP). 01802000
  1610. * 01803000
  1611. * DMKDSB HAS JUST PROCESSED AN UNSOLICITED DEVICE 01804000
  1612. * END INTERRUPT ON A 3330V. THE ADDRESS OF A CPEXBLOK 01805000
  1613. * WAS OBTAINED FROM THE MSSCOM WHICH REPRESENTED THE 01806000
  1614. * MOUNT REQUEST FOR THE VOLUME JUST MOUNTED. THE 01807000
  1615. * ADDRESS OF DMKSSSEN HAD BEEN PLACED IN FIELD CPEXADD 01808000
  1616. * OF THE CPEXBLOK. THE PERTINENT REGISTERS ARE: 01809000
  1617. * 01810000
  1618. * GPR 15 = ADDRESS OF DMKSSSEN 01811000
  1619. * GPR 2 = ADDRESS OF THE CPEXBLOK WHICH REPRESENTS THE 01812000
  1620. * TASK WHICH REQUIRED THE MOUNT. 01813000
  1621. * 01814000
  1622. * OPERATION - 01815000
  1623. * 01816000
  1624. * GENERATE A LINK TO THE ADDRESS WITHIN THE REQUESTING 01817000
  1625. * MODULE, THEN GO TO THE DISPATCHER 01818000
  1626. * 01819000
  1627. ENTRY DMKSSSEN @V60B6B8 01820000
  1628. DMKSSSEN EQU * @V60B6B8 01821000
  1629. USING *,R15 R15 SET BY DMKDSP @V60B6B8 01822000
  1630. SL R15,=A(DMKSSSEN-DMKSSS) BACK TO COMMON BASE @V60B6B8 01823000
  1631. LR R12,R15 INTO CORRECT REG @V60B6B8 01824000
  1632. DROP R15 @V60B6B8 01825000
  1633. USING DMKSSS,R12 @V60B6B8 01826000
  1634. USING CPEXBLOK,R2 R2 SET UP THROUGH DMKDSP @V60B6B8 01827000
  1635. * 01828000
  1636. * CHECK TO SEE IF THE USER IS STILL ACTIVE 01829000
  1637. * 01830000
  1638. DROP R10 @V60B6B8 01831000
  1639. USING OSVSCOM,R6 @V60B6B8 01832000
  1640. TSTUSRAC EQU * SEE IF USER IS STILL ACTIVE @V60B6B8 01833000
  1641. LA R0,8 LENGTH OF USERID @V60B6B8 01834000
  1642. LA R1,MSSUSER USERID FFROM INITIAL REQUEST @V60B6B8 01835000
  1643. CALL DMKSCNAU SEE IF STILL ACTIVE @V60B6B8 01836000
  1644. BC 4,GAVEUP NOT STILL LOGGED ON @V60B6B8 01837000
  1645. * 01838000
  1646. * CHECK TO SEE IF THIS DEVICE END CAME IN BEFORE NORMAL 01839000
  1647. * DEVICE END FOR THE MSC. IF SO, RETURN TO THE ORIGINAL 01840000
  1648. * CALLLER (LNK, LOG, VDA) AS IT THE VOLUME HAD 01841000
  1649. * ALWAYS BEEN MOUNTED. 01842000
  1650. * 01843000
  1651. L R1,MSSTASK2 RETURN ADDR IF MSC COMPLETES @V60B6B8 01844000
  1652. LTR R1,R1 IS THERE ONE @V60B6B8 01845000
  1653. BNZ DISPTSK2 MSC HAS NOT RETURNED @VA11135 01846100
  1654. L R1,MSSTASKD CHECK FOR DUPLICATE MOUNTS @VA11135 01846200
  1655. LTR R1,R1 MSSTASKD SET BY THE CMS SCHMSSC @VA11135 01846300
  1656. * ROUTINE FOR DUPLICATE MOUNTS 01846400
  1657. BZ DSPTASK1 NOT DUPLICATE, MSC COMPLETED @VA11135 01846500
  1658. DISPTSK2 EQU * STACK CPEXBLOK FROM MSSTASK2 @VA11135 01846600
  1659. LR R5,R6 SAVE MSSCOM ADDR @V60B6B8 01847000
  1660. LA R0,CPEXSIZE CPEXBLOK SIZE @V60B6B8 01848000
  1661. L R1,MSSTASK1 RETURN CPEXBLOK WE DON'T NEED @V60B6B8 01849000
  1662. CALL DMKFRET @V60B6B8 01850000
  1663. XC MSSTASK1(4),MSSTASK1 INDICATE WE'VE BEEN @V60B6B8 01851000
  1664. * THROUGH HERE 01852000
  1665. L R1,MSSTASK2 CALLER'S NORMAL RETURN PTR @V60B6B8 01853000
  1666. XC MSSTASK2(4),MSSTASK2 @VA11574 01853050
  1667. LTR R1,R1 IS THERE AN MSSTASK2T @VA11135 01853100
  1668. BNZ USETASK2 YES, STACK IT @VA11135 01853200
  1669. L R1,MSSTASKD THIS IS A DUP MOUNT @VA11135 01853300
  1670. XC MSSTASKD(4),MSSTASKD @VA11574 01853350
  1671. USETASK2 EQU * @VA11135 01853400
  1672. SR R0,R0 CLEAR CONDITION CODE @V60B6B8 01854000
  1673. ST R0,CPEXR0-CPEXBLOK(R1) @V60B6B8 01855000
  1674. CALL DMKSTKCP GO BACK EVENTUALLY @V60B6B8 01856000
  1675. B MORSTK1 SEE IF ANYONE ELSE IS WAITING @V60B6B8 01857000
  1676. DSPTASK1 EQU * @V60B6B8 01858000
  1677. * 01859000
  1678. * MSC HAS RETURNED PREVIOUSLY. UNCHAIN THIS MSSCOM, 01860000
  1679. * THEN GO BACK TO THE ASYNCHRONOUS ENTRY POINT 01861000
  1680. * IDENTIFIED IN MSSTASK1 01862000
  1681. * 01863000
  1682. L R1,MSSTASKD POSSIBLE CPEXBLOK PTR @VA09302 01864000
  1683. LTR R1,R1 WAS THIS A DUP MOUNT REQ @VMI2021 01865000
  1684. BZ NOEXBLOK NO, MSC RET ON THIS REQ @VMI2021 01866000
  1685. LA R0,CPEXSIZE SIZE OF CPEXBLOK @VMI2021 01867000
  1686. CALL DMKFRET FRET BLOK FOR DUP REQ @VMI2021 01868000
  1687. NOEXBLOK EQU * @VMI2021 01869000
  1688. TM MSSFLAG2,MSGPROC @VA09302 01870000
  1689. BZ DSPTASK2 @VMI2003 01871000
  1690. NI MSSFLAG2,FULL-MSGPROC @VA09302 01872000
  1691. B RETDSPCH @VMI2003 01873000
  1692. DSPTASK2 EQU * @VMI2003 01874000
  1693. LA R3,DMKSSSMQ QUEUE START @V60B6B8 01875000
  1694. FINDCOMZ EQU * @V60B6B8 01876000
  1695. L R5,0(R3) ADDR OF AN MSSCOM @V60B6B8 01877000
  1696. LTR R5,R5 VALIDITY CHECK @V60B6B8 01878000
  1697. BZ RETDSPCH @V60B6B8 01879000
  1698. CR R5,R6 IS IT THE ONE @V60B6B8 01880000
  1699. BE RESETMQB YES, UNCHAIN IT @V60B6B8 01881000
  1700. LA R3,MSSNEXT-OSVSCOM(R5) NEXT CHAIN PTR @V60B6B8 01882000
  1701. B FINDCOMZ AND CHECK IT @V60B6B8 01883000
  1702. RESETMQB EQU * @V60B6B8 01884000
  1703. MVC 0(4,R3),MSSNEXT-OSVSCOM(R5) RESET CHAIN POINTERS@V60B6B8 01885000
  1704. L R5,MSSNEXT CHAIN PTR @V60B6B8 01886000
  1705. NEXTCHK EQU * @VMI2008 01887000
  1706. LTR R5,R5 IS THERE ONE @V60B6B8 01888000
  1707. BZ NOSTACK NO, DON'T NEED CNTRL BACK @V60B6B8 01889000
  1708. CLC MSSSER,0(R5) @VMI2008 01890000
  1709. BE STACKUS @VMI2008 01891000
  1710. L R5,MSSNEXT-OSVSCOM(R5) @VMI2008 01892000
  1711. B NEXTCHK @VMI2008 01893000
  1712. STACKUS EQU * @VMI2008 01894000
  1713. LR R6,R5 @VMI2008 01895000
  1714. LR R3,R2 @VMI2008 01896000
  1715. L R2,MSSTASK1 @VMI2008 01897000
  1716. LA R0,CPEXSIZE CPEXBLOK SIZE @V60B6B8 01898000
  1717. CALL DMKFREE GET AN EXBLOK @V60B6B8 01899000
  1718. STM R0,R15,CPEXREGS-CPEXBLOK(R1) OUR REGS @V60B6B8 01900000
  1719. LA R15,MORSTACK OUR ENTRY ADDRESS @V60B6B8 01901000
  1720. ST R15,CPEXADD-CPEXBLOK(R1) SAVE IT @V60B6B8 01902000
  1721. CALL DMKSTKCP @V60B6B8 01903000
  1722. LR R2,R3 @VMI2008 01904000
  1723. NOSTACK EQU * @V60B6B8 01905000
  1724. L R15,CPEXADD ENTRY POINT IN LOG, LNK, OR VDA @V60B6B8 01906000
  1725. LM R0,R11,CPEXREGS THAT ROUTINES REGS @V60B6B8 01907000
  1726. SVC 8 LINK TO THAT ROUTINE @V60B6B8 01908000
  1727. GOTO DMKDSPCH ALL DONE THIS REQUEST @V60B6B8 01909000
  1728. GAVEUP EQU * @V60B6B8 01910000
  1729. L R2,MSSTASK1 RESET R2 FOR MULTI-VOLUMES @VA09304 01910100
  1730. LA R0,CPEXSIZE ALWAYS AN MSSTAK1 @VA09304 01910125
  1731. LR R1,R2 CPEXBLOK ADDR MSSTASK1 @VA09304 01910150
  1732. CALL DMKFRET FREE MSSTASK1 @VA09304 01910175
  1733. L R2,MSSTASK2 @VA09304 01910200
  1734. LTR R2,R2 IS THERE TASK2 CPEXBLOK? @VA09304 01910225
  1735. BZ NO2 NO, DON'T TRY TO FREE IT @VA09304 01910250
  1736. LA R0,CPEXSIZE @VA09304 01910275
  1737. LR R1,R2 CPEXBLOK ADDR. MSSTASK2 @VA09304 01910300
  1738. CALL DMKFRET FREE MSSTASK2 @VA09304 01910325
  1739. NO2 EQU * @VA09304 01910350
  1740. L R2,MSSTASKD @VA09304 01910375
  1741. LTR R2,R2 IS THERE TASKD CPEXBLOK? @VA09304 01910400
  1742. BZ NOTD NO,DON'T TRY TO FREE IT @VA09304 01910425
  1743. LA R0,CPEXSIZE @VA09304 01910450
  1744. LR R1,R2 CPEXBLOK ADDR. MSSTASKD @VA09304 01910475
  1745. CALL DMKFRET FREE MSSTASKD @VA09304 01910500
  1746. *REG 6 NOW POINTS TO THE MSSCOM FOR WHICH THE USER HAS LOGGED 01910525
  1747. *OFF AND HIS VOLUME IS MOUNTED. TAKE THIS ONE OFF OF THE QUEUE 01910550
  1748. *AND FRET ITS STORAGE. 01910575
  1749. NOTD EQU * @VA09304 01910600
  1750. L R1,DMKSSSMQ MSSCOM Q ANCHOR @VA09304 01910625
  1751. LA R2,DMKSSSMQ POINTER ADDRESS TO NEXT BLOK @VA09304 01910650
  1752. LTR R1,R1 SHOULDN'T EVER BE ZERO @VA09304 01910675
  1753. BZ RETDSPCH GET OUT IF IT IS @VA09304 01910700
  1754. CHKCOM EQU * @VA09304 01910725
  1755. CR R6,R1 IS THIS ONE DMKDSB FOUND? @VA09304 01910750
  1756. BE DQIT YES,TAKE IT OFF OF THE QUEUE @VA09304 01910775
  1757. LA R2,MSSNEXT-OSVSCOM(R1) UPDATE POINTERS @VA09304 01910800
  1758. * VMI2036 01910825
  1759. L R1,MSSNEXT-OSVSCOM(R1) UPDATE POINTERS @VA09304 01910850
  1760. LTR R1,R1 SHOULDN'T EVER BE ZERO @VA09304 01910875
  1761. BZ RETDSPCH GET OUT IF IT IS @VA09304 01910900
  1762. B CHKCOM LOOK AT THIS ONE ... @VA09304 01910925
  1763. DQIT EQU * REMOVE IT FROM THE QUEUE @VA09304 01910950
  1764. L R5,MSSNEXT GET POINTER TO NEXT MSSCOM @VA09304 01910975
  1765. ST R5,0(,R2) TAKE CURRENT BLOK OUT OF QUEUE @VA09304 01911000
  1766. *NOW ITS OUT OF THE QUEUE ... FRET THE STORAGE 01911025
  1767. SR R3,R3 CLEAR R3 INDICATING SAME SER. @VA09304 01911050
  1768. CLC MSSSER(6),MSSSER-OSVSCOM(R5) SAME VOL? @VA09304 01911075
  1769. BE SAMESER YES, LEAVE R3 FLAG = ZERO @VA09304 01911100
  1770. LA R3,1 SET FLAG INDICATING NOT = @VA09304 01911125
  1771. SAMESER LR R1,R6 ADDR. OF DE-QUEUED MSSCOM @VA09304 01911150
  1772. LA R0,MSSSIZE SIZE OF THE MSSCOM @VA09304 01911175
  1773. CALL DMKFRET FREE THE STORAGE @VA09304 01911200
  1774. LTR R5,R5 IS THERE ANOTHER Q ENTRY? @VA09304 01911225
  1775. BZ RETDSPCH NO, RETURN TO DISPATCH @VA09304 01911250
  1776. L R2,MSSTASK1-OSVSCOM(R5) UPDATE CPEX POINTER @VA09304 01911275
  1777. LTR R3,R3 LOOK AT THE R3 FLAG @VA09304 01911300
  1778. BZ ONEMORE VOLSER =, LOOK AT THE NEXT ONE @VA09304 01911325
  1779. B MORSTK1 VOLSER NOT =, LOOK AT NEXT ENTRY @VA09304 01911350
  1780. MORSTACK EQU * CHECK THE MSSCOM Q @V60B6B8 01917000
  1781. DROP R12 @VA11135 01917100
  1782. USING *,R15 @VA11135 01917150
  1783. SL R15,=A(MORSTACK-DMKSSS) E.P. ADDRESS @VA11135 01917200
  1784. LR R12,R15 SET ADDRESSABILITY @VA11135 01917250
  1785. DROP R15 @VA11135 01917300
  1786. USING DMKSSS,R12 @VA11135 01917350
  1787. INTSTK EQU * @VA11135 01917400
  1788. * 01918000
  1789. * TEST FOR MORE MOUNT REQUESTS FOR THIS VOLUME 01919000
  1790. * 01920000
  1791. CLC MSSSER(6),MSSSER-OSVSCOM(R5) SAME VOLUME? @VA09304 01921000
  1792. * VMI2036 01921100
  1793. BE ONEMORE YES, GET HIM STARTED @V60B6B8 01922000
  1794. B MORSTK1 AND CHECK THE VOLID @V60B6B8 01923000
  1795. ONEMORE EQU * @V60B6B8 01924000
  1796. LR R6,R5 RESET MSSCOM ADDR @V60B6B8 01925000
  1797. B TSTUSRAC SEE IF USER STILL ACTIVE @V60B6B8 01926000
  1798. MORSTK1 EQU * @V60B6B8 01927000
  1799. L R5,MSSNEXT-OSVSCOM(R5) CHAIN PTR @V60B6B8 01928000
  1800. LTR R5,R5 IS THERE ONE @V60B6B8 01929000
  1801. BNZ INTSTK YES, CHECK VOLSER. @VA11135 01930000
  1802. GOTO DMKDSPCH @V60B6B8 01931000
  1803. RETDSPCH EQU * RETURN TO THE DISPATCHER @V60B6B8 01932000
  1804. GOTO DMKDSPCH @V60B6B8 01933000
  1805. DROP R6 @V60B6B8 01934000
  1806. EJECT 01935000
  1807. * 01935020
  1808. * DMKSSSRL ENTRY POINT 01935040
  1809. * 01935060
  1810. * ENTRY CONDITIONS - 01935080
  1811. * ENTRY IS FROM DMKVDR, WHICH IS IN THE PROCESS OF DETACHING 01935100
  1812. * A VUA FROM A VIRTUAL MACHINE. ANY CHANGED CYLINDERS OF THE 01935120
  1813. * VOLUME MOUNTED ON THAT VUA NEED TO BE WRITTEN BACK ONTO THE 01935140
  1814. * CARTRIDGES CONTAINING THAT VOLUME. SET UP A RELINQUISH 01935160
  1815. * REQUEST MSSCOM BLOK TO DO SO. THE PERTINENT REGISTERS ARE: 01935180
  1816. * 01935200
  1817. * GPR 2 = RDEVBLOK ADDRESS FOR THIS VUA 01935220
  1818. * 01935240
  1819. * OPERATION - 01935260
  1820. * 1. SAVE RDEVBLOK ADDRESS AND VOLSER ADDRESS FOR COMBLD 01935280
  1821. * ROUTINE. BAL TO COMBLD TO BUILD A SKELETON MSSCOM. 01935300
  1822. * 01935320
  1823. * 2. FLAG MSSCOM AS A RELINQUISH REQUEST. 01935340
  1824. * 01935360
  1825. * 3. BRANCH TO CHKDUP1 TO PUT THE MSSCOM ON THE MSS 01935380
  1826. * REQUEST QUEUE (DMKSSSMQ). 01935400
  1827. * 01935420
  1828. * 4. RETURN TO DMKVDR AFTER QUEUEING THE RELINQUISH REQUEST. 01935440
  1829. * 01935460
  1830. DMKSSSRL RELOC , @VA11344 01935480
  1831. ST R2,RDEVADDR SAVE RDEVBLOK ADDR FOR COMBLD RTN@VA11344 01935500
  1832. LA R2,RDEVSER-RDEVBLOK(R2) POINT TO START OF VOLSER@VA11344 01935520
  1833. ST R2,VSERADDR SAVE ADDR OF VOLSER FOR COMBLD @VA11344 01935540
  1834. BAL R14,COMBLD GO BUILD SKELETON OF MSSCOM @VA11344 01935560
  1835. SPACE 1 01935580
  1836. USING OSVSCOM,R10 01935600
  1837. SPACE 1 01935620
  1838. OI MSSFLAG1,RELINQSH SAY THIS IS A RELINQUISH REQ@VA11344 01935640
  1839. B CHKDUP1 STACK MSSCOM ON QUEUE @VA11344 01935660
  1840. DROP R10 01935680
  1841. SSSRLEND DS 0H @VA11344 01935700
  1842. EXIT @VA11344 01935720
  1843. EJECT 01935740
  1844. LOGADDR DC V(DMKLOHSS) RETURN ADDR FOR L1, L2, L3 @VA09593 01936100
  1845. INTMASKS DC V(DMKVIOMK) DEV, CU, AND CH INTERRUPT MASKS @V60B6B8 01937000
  1846. SCHRTAD DC V(DMKSCHRT) ROUTINE TO DEQ TIMER BLOCKS @V60B6B8 01938000
  1847. LNKMTRET DC V(DMKLNKSS) RETURN ADDRESS FOR LN @V60B6B8 01939000
  1848. VDAS1RET DC V(DMKVDAS1) RETURN ADDRESS FOR VA @V60B6B8 01940000
  1849. VDAS2RET DC V(DMKVDAS2) RETURN ADDRESS FOR AS @V60B6B8 01941000
  1850. DMKSSSMQ DC F'0' ANCHOR FOR MOUNTS IN PROCESS @V60B6B8 01942000
  1851. DS 0F MESSAGES ON FULL WORD BOUNDARY @V60B6B8 01943000
  1852. * 01944000
  1853. * THE FOLLOWING CONSTANTS DEFINE THE ERROR MESSAGE 01945000
  1854. * OPTIONS. THE MESSAGES HAVE THE FORMAT DMKSSS070 TO 01946000
  1855. * DMKSSS078. 01947000
  1856. * 01948000
  1857. OPTION70 DC X'80C50046' DMKSSS070E @VMI2020 01949000
  1858. OPTION71 DC X'80C50047' DMKSSS071E @VMI2020 01950000
  1859. OPTION72 DC X'80C50048' DMKSSS072E @VMI2020 01951000
  1860. OPTION73 DC X'80C50049' DMKSSS073E @VMI2020 01952000
  1861. OPT438 DC X'80C501B6' DMKSSS438E @VA11320 01952100
  1862. OPTION75 DC X'80C5004B' DMKSSS075E @VMI2020 01954000
  1863. OPTION76 DC X'80C5004C' DMKSSS076E @VMI2020 01955000
  1864. OPTION78 DC X'80C9004E' DMKSSS078I @VMI2020 01956000
  1865. DAS3330 DC AL1(CLASDASD,TYP3330) MASK FOR RDEVBLOK COMPARE @V60B6B8 01957000
  1866. COMMNAME DC D'0' COMMUNICATOR VIRT MACH NAME @V60B6B8 01958000
  1867. DMKSSSVM EQU COMMNAME PROPER NAMING FOR EXT REF @V60B6B8 01959000
  1868. COMMADDR DC F'0' COMMUNICATION VIRT ADDR @V60B6B8 01960000
  1869. COMMVMAD DC F'0' COMMUNICATOR VMBLOK ADDR @V60B6B8 01961000
  1870. ZERO EQU 0 @V60B6B8 01967000
  1871. L2 EQU 2 LENGTH OF 2 @V60B6B8 01968000
  1872. L3 EQU 3 LENGTH OF 3 @V60B6B8 01969000
  1873. RC4 EQU 4 RETURN CODE 4 @V60B6B8 01970000
  1874. RC8 EQU 8 RETURN CODE 8 @VA11367 01970010
  1875. RC12 EQU 12 RETURN CODE 12 @VA11367 01970020
  1876. RC16 EQU 16 RETURN CODE 16 @VA11367 01970030
  1877. N6 EQU 6 LENGTH OF 'VOLID' PARAMETER @V60B6B8 01972000
  1878. FULL EQU X'FF' MASK FOR TURNING OFF FLAGS @V60B6B8 01973000
  1879. VOLSERL EQU 6 LENGTH OF VOLSER @V60B6B8 01974000
  1880. HIGHSFID EQU 16 HIGHEST VALID DIAGNOSE SFID @V60B6B8 01975000
  1881. COPY SAVE @V60B6B8 01980000
  1882. RDEVDEMT EQU SAVEWRK1 @V60B6B8 01981000
  1883. DEMNTRET EQU SAVEWRK2 @V60B6B8 01982000
  1884. VSERADDR EQU SAVEWRK3 @V60B6B8 01983000
  1885. RDEVADDR EQU SAVEWRK4 @V60B6B8 01984000
  1886. RETNADDR EQU SAVEWRK5 @V60B6B8 01985000
  1887. ADDRSAVE EQU SAVEWRK6 @V60B6B8 01986000
  1888. IOSRETAD EQU SAVEWRK7 @V60B6B8 01987000
  1889. SAVRETAD EQU SAVEWRK8 @V60B6B8 01988000
  1890. EJECT 01989000
  1891. OSVSCOM MSSCOM @V60B6B8 01990000
  1892. EJECT 01991000
  1893. PSA @V60B6B8 01992000
  1894. COPY EQU @V60B6B8 01993000
  1895. COPY VMBLOK @V60B6B8 01994000
  1896. COPY TIMER @V60B6B8 01995000
  1897. COPY IOBLOKS @V60B6B8 01996000
  1898. COPY UDIRECT @V60B6B8 01997000
  1899. COPY DEVTYPES @V60B6B8 01998000
  1900. COPY RBLOKS @V60B6B8 01999000
  1901. COPY VBLOKS @V60B6B8 02000000
  1902. END DMKSSS 02001000