Table of Contents

DMKSST Source

References

Source Listing

DMKSST.ASSEMBLE.txt
  1. SST TITLE 'DMKSST (CP) VM/370 - RELEASE 6' 00010000
  2. ISEQ 73,80 00020000
  3. MACRO 00030000
  4. &LABEL INCR &COUNT 00040000
  5. &LABEL LA R0,1 00050000
  6. AL R0,&COUNT 00060000
  7. ST R0,&COUNT 00070000
  8. MEND 00080000
  9. *********************************************************************** 00090000
  10. * * 00100000
  11. *MODULE NAME = DMKSST * 00110000
  12. * * 00120000
  13. *DESCRIPTIVE NAME = DMKSST (CP) SDG TABLE BUILD, VUA SELECTION * 00130000
  14. * * 00140000
  15. *COPYRIGHT = NONE * 00150000
  16. * * 00160000
  17. *STATUS = VM/370 - RELEASE 6, LEVEL 0 * 00170000
  18. * * 00180000
  19. *FUNCTION = * 00190000
  20. * DMKSSTBL = BUILD SDG TABLES OF CP'S VUAS * 00200000
  21. * * 00210000
  22. * DMKSSTFV = FIND AN AVAILABLE VUA TO MOUNT A VOLUME ON * 00220000
  23. * * 00230000
  24. *NOTES = SEE BELOW * 00240000
  25. * * 00250000
  26. * DEPENDENCIES = NONE * 00260000
  27. * * 00270000
  28. * RESTRICTIONS = NONE * 00280000
  29. * * 00290000
  30. * REGISTER CONVENTIONS = R0 = SCRATCH * 00300000
  31. * R1 = SCRATCH * 00310000
  32. * R2 = SCRATCH * 00320000
  33. * R3 = SCRATCH * 00330000
  34. * R4 = SCRATCH * 00340000
  35. * R5 = SCRATCH * 00350000
  36. * R6 = SCRATCH * 00360000
  37. * R7 = SDG TABLE BASE * 00370000
  38. * R8 = RDEVBLOK BASE * 00380000
  39. * R9 = VUA TABLE BASE * 00390000
  40. * R10 = SCRATCH * 00400000
  41. * R11 = VMBLOK BASE * 00410000
  42. * R12 = DMKIOT BASE * 00420000
  43. * R13 = SAVEAREA BASE * 00430000
  44. * R14 = SUBROUTINE LINKAGE * 00440000
  45. * R15 = SUBROUTINE LINKAGE * 00450000
  46. * * 00460000
  47. * PATCH LABEL = N/A * 00470000
  48. * * 00480000
  49. *MODULE TYPE = CSECT * 00490000
  50. * * 00500000
  51. * PROCESSOR = ASSEMBLER XF * 00510000
  52. * * 00520000
  53. * MODULE SIZE = 4K BYTES (1 BASE REGISTER DESIGN POINT) * 00530000
  54. * * 00540000
  55. * ATTRIBUTES = REENTRANT, PAGEABLE. * 00550000
  56. * * 00560000
  57. *ENTRY POINT = DMKSSTBL * 00570000
  58. * * 00580000
  59. * PURPOSE = BUILD SDG TABLES OF VUA'S IN CP CONFIGURATION * 00590000
  60. * * 00600000
  61. * LINKAGE = CALL * 00610000
  62. * * 00620000
  63. *ENTRY POINT = DMKSSTFV * 00630000
  64. * * 00640000
  65. * PURPOSE = FIND AN AVAILABLE VUA ON WHICH TO MOUNT A VIRTUAL VOLUME * 00650000
  66. * * 00660000
  67. * LINKAGE = CALL * 00670000
  68. * * 00680000
  69. *INPUT = * 00690000
  70. * DMKSSTBL * 00700000
  71. * R5 = VUATABLE BASE * 00710000
  72. * R11 = VMBLOK BASE * 00720000
  73. * * 00730000
  74. * DMKSSTFV * 00740000
  75. * R4 = SPECIFIC/NON-SPECIFIC SDG REQUESTED * 00750000
  76. * R5 = SHARED/NON-SHARED/BOTH VUA REQUESTED * 00760000
  77. * R11 = VMBLOK BASE * 00770000
  78. * * 00780000
  79. *OUTPUT = * 00790000
  80. * DMKSSTBL * 00800000
  81. * R2 = CCPD ANCHOR OF NON-SHARED SDG TABLE * 00810000
  82. * R3 = CCPD ANCHOR OF SHARED SDG TABLE * 00820000
  83. * R6 = RETURN CODE * 00830000
  84. * * 00840000
  85. * DMKSSTFV * 00850000
  86. * R5 = VUA ADDRESS (CUU) * 00860000
  87. * R6 = RETURN CODE * 00870000
  88. * * 00880000
  89. *EXIT-NORMAL = * 00890000
  90. * DMKSSTBL * 00900000
  91. * R2 = CCPD OF NON-SHARED SDG TABLE * 00910000
  92. * R3 = CCPD OF SHARED SDG TABLE * 00920000
  93. * R6 = REASON CODE * 00930000
  94. * * 00940000
  95. * DMKSSTFV * 00950000
  96. * R5 = VUA ADDRESS * 00960000
  97. * R6 = REASON CODE * 00970000
  98. * * 00980000
  99. *EXIT-ERROR = * 00990000
  100. * DMKSSTBL * 01000000
  101. * R6 = 1 - MSS NOT INSTALLED * 01010000
  102. * R6 = 13 - ERROR ON TRANS MACRO * 01020000
  103. * * 01030000
  104. * DMKSSTFV * 01040000
  105. * R6 = 4 - DEMOUNT IS REQUIRED * 01050000
  106. * R6 = 8 - VUA OF PROPER TYPE NOT FOUND * 01060000
  107. * * 01070000
  108. *EXTERNAL REFERENCES = SEE BELOW * 01080000
  109. * * 01090000
  110. * ROUTINES = DMKERMSG - TO LOCATE THE REQUESTED MESSAGE AND INSERT * 01100000
  111. * THE MODULE ID, MESSAGE NUMBER, AND DATA IF * 01110000
  112. * ANY, AND PRINT THE MESSAGE * 01120000
  113. * DMKPGTPG - TO ALLOCATE A PAGE OF DASD SPACE THAT IS TO * 01130000
  114. * BE USED FOR EITHER VIRTUAL MEMORY PAGING OR * 01140000
  115. * FOR SPOOL FILE PAGE BUFFERS * 01150000
  116. * DMKPGUVG - TO ALLOCATE A PAGE OF VIRTUAL STORAGE SPACE * 01160000
  117. * BELONGING TO THE CP PAGING VMBLOK * 01170000
  118. * DMKPGUVR - TO RELEASE A PAGE OF VIRTUAL MEMORY SPACE * 01180000
  119. * DMKRPAGT - MOVE THE SPECIFIED DASD PAGE FROM DASD TO * 01190000
  120. * TO THE SPECIFIED PAGE IN THE USER'S VIRTUAL * 01200000
  121. * MEMORY SPACE * 01210000
  122. * DMKRPAPT - MOVE THE PAGE FROM VIRTUAL MEMORY TO DASD * 01220000
  123. * DMKSCNRU - TO LOCATE RCHBLOK, RCUBLOK, AND RDEVBLOK FOR * 01230000
  124. * THE UNIT CAUSING THE INTERRUPT * 01240000
  125. * DATA AREAS = * 01250000
  126. * DEVTYPES - DEVICE TYPE EQUATES * 01260000
  127. * EQU - SYSTEM EQUATES * 01270000
  128. * * 01280000
  129. * CONTROL BLOCKS = * 01290000
  130. * CPEXBLOK - CP EXECUTE BLOCK * 01300000
  131. * PSA - PREFIX STORAGE AREA * 01310000
  132. * RDEVBLOK - REAL DEVICE BLOCK * 01320000
  133. * SAVEAREA - SAVE AREA SVC CALL * 01330000
  134. * VMBLOK - VIRTUAL MACHINE CONTROL BLOCK * 01340000
  135. * * 01350000
  136. *TABLES = * 01360000
  137. * VUATABLE - TABLE OF VUA'S IN CP CONFIGURATION * 01370000
  138. * SDGTABLE - TABLE OF SHARED/NONSHARED VUA'S IN CP * 01380000
  139. * CONFIGURATION, SORTED INTO SDG NUMBERS * 01390000
  140. * * 01400000
  141. *MACROS = * 01410000
  142. * PSA * 01420000
  143. * TRANS * 01430000
  144. * * 01440000
  145. *CHANGE ACTIVITY = AS FOLLOWS: * 01450000
  146. * * 01460000
  147. * * 01470000
  148. *********************************************************************** 01480000
  149. EJECT 01490000
  150. COPY OPTIONS 01500000
  151. COPY LOCAL OPTIONS 01510000
  152. SPACE 2 01520000
  153. DMKSST CSECT 01530000
  154. DC CL8'DMKSST' 01540000
  155. SPACE 1 01550000
  156. USING PSA,R0 01560000
  157. USING VMBLOK,R11 01570000
  158. USING SAVEAREA,R13 01580000
  159. SPACE 1 01590000
  160. EXTRN DMKERMSG 01600000
  161. EXTRN DMKPGTPG 01610000
  162. EXTRN DMKPGUVG 01620000
  163. EXTRN DMKPGUVR 01630000
  164. EXTRN DMKRIODV 01640000
  165. EXTRN DMKRPAGT 01650000
  166. EXTRN DMKRPAPT 01660000
  167. EXTRN DMKSCNRU 01670000
  168. EXTRN DMKSSSNS 01680000
  169. EXTRN DMKSSSHR 01690000
  170. EXTRN DMKSSSNV 01700000
  171. EJECT 01710000
  172. DMKSSTBL RELOC CALL FROM DMKSSS 01720000
  173. *. 01730000
  174. * REGISTER USAGE: 01740000
  175. * R0 = WORK REG 01750000
  176. * R1 = CCPD OF SHARED/NON-SHARED TABLES 01760000
  177. * R2 = WORK REG 01770000
  178. * R3 = WORK REG 01780000
  179. * R4 = SDG NUMBER 01790000
  180. * R5 = VUA 01800000
  181. * R6 = WORK REG/RETURN CODE 01810000
  182. * R7 = SDGTABLE BASE 01820000
  183. * R8 = COUNT OF VUA'S THIS ENTRY 01830000
  184. * R9 = MSSVUA BASE (VUA TABLE FROM DMKMSS) 01840000
  185. * R10 = COUNT OF VUA'S IN MSSVUA TABLE (VUA TABLE) 01850000
  186. * R11 = VMBLOK BASE 01860000
  187. * R12 = DMKSST BASE 01870000
  188. * R13 = SAVE AREA BASE 01880000
  189. * R14 = LINKAGE 01890000
  190. * R15 = LINKAGE 01900000
  191. * 01910000
  192. * OPERATION: 01920000
  193. * 01930000
  194. * 1. BRING IN VUATABLE FROM DMKMSS CENTRAL SERVER. IF ERROR 01940000
  195. * OCCURS, SET REASON CODE = 13 AND RETURN TO CALLER. 01950000
  196. * 01960000
  197. * 2. OBTAIN BUFFERS FOR TWO SDG TABLES (SHARED AND NON-SHARED). 01970000
  198. * IF ERROR OCCURS, SET REASON CODE = 13 AND RETURN TO CALLER. 01980000
  199. * 01990000
  200. * 3. LOOP THROUGH VUATABLE, BUILDING ENTRIES IN SDGTABLES: 02000000
  201. * 3A. GET VUA, SDG NUMBER, SHARED STATUS FROM VUA TABLE. 02010000
  202. * 3B. USE SHARED STATUS TO DETERMINE WHICH TABLE TO PUT INFO. 02020000
  203. * 3C. USE SDG NUMBER TO DETERMINE CORRECT ENTRY IN TABLE. 02030000
  204. * 3D. PUT INFORMATION IN NEXT AVAILABLE POSITION IN ENTRY. 02040000
  205. * 3E. UPDATE COUNT OF VUA'S IN THIS ENTRY. 02050000
  206. * 02060000
  207. * 4. GET CCPD OF PREVIOUS NON-SHARED TABLE. IF NO NON-SHARED 02070000
  208. * VUA'S, RELEASE SLOT. IF NON-SHARED VUA'S PRESENT BUT NO 02080000
  209. * SLOT, GET A SLOT. WRITE NON-SHARED SDG TABLE TO DASD. 02090000
  210. * 02100000
  211. * 5. GET CCPD OF PREVIOUS SHARED SDG TABLE. IF NO SHARED VUA'S. 02110000
  212. * RELEASE SLOT. IF SHARED VUA'S PRESENT BUT NO SLOT, GET 02120000
  213. * A SLOT. WRITE SHARED SDG TABLE TO DASD. 02130000
  214. * 02140000
  215. * 6. SET PROPER RETURN CODE AND EXIT. 02150000
  216. *. 02160000
  217. SPACE 1 02170000
  218. TM PSAMSS,MSSPRES IS MSS INSTALLED? 02180000
  219. BNO SSTERR01 NO - THEN DIAGNOSE X'78' IS INVALID 02190000
  220. XC SAVEWRK9,SAVEWRK9 CLEAR OUT TEMP FLAG AREA 02200000
  221. SPACE 1 02210000
  222. * 02220000
  223. * AT THIS POINT WE KNOW THE ISSUER IS THE AUTHORIZED CENTRAL 02230000
  224. * SERVER. MSS HAS PASSED TO DMKSSS A TABLE OF ALL THE VUA'S 02240000
  225. * IN OUR CONFIGURATION. WE NEED TO SEPARATE THESE VUA'S INTO 02250000
  226. * SHARED AND NON-SHARED VUA'S, SORTED INTO THEIR PROPER SDG 02260000
  227. * GROUP NUMBERS. 02270000
  228. * 02280000
  229. SPACE 1 02290000
  230. L R1,0(,R5) GET ADDRESS OF PTR TO MSS BUFFER 02300000
  231. TRANS 2,1,OPT=(BRING,DEFER),IOER=SSTERR02 02310000
  232. ST R1,SAVEWRK2 SAVE VIRTUAL ADDR OF USER' BUFF 02320000
  233. LR R9,R2 SAVE ADDRESS FOR LATER USE 02330000
  234. CALL DMKPGUVG GET VIRTUAL PAGE FOR TEMP BUFFER 02340000
  235. ST R1,SAVEWRK6 SAVE VIRT ADDRESS FOR CLEANUP 02350000
  236. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=SSTRELNS 02360000
  237. ST R2,SAVEWRK3 SAVE PTR TO NON-SHARED SDG TABLE 02370000
  238. L R3,=F'4096' SIZE OF BUFFER TO BE CLEARED 02380000
  239. L R5,F0 NO PAD CHARACTER, NO 2ND LENGTH 02390000
  240. MVCL R2,R4 CLEAR THE BUFFER BEFORE USING 02400000
  241. CALL DMKPGUVG GET VIRT PAGE FOR TEMP BUFFER 02410000
  242. ST R1,SAVEWRK7 SAVE VIRT ADDRESS FOR CLEANUP 02420000
  243. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=SSTRELBO 02430000
  244. ST R2,SAVEWRK4 SAVE PTR TO SHARED SDG TABLE 02440000
  245. L R3,=F'4096' SIZE OF BUFFER TO BE CLEARED 02450000
  246. L R5,F0 NO PAD CHARACTER, NO 2ND LENGTH 02460000
  247. MVCL R2,R4 CLEAR THE BUFFER BEFORE USING 02470000
  248. SPACE 1 02480000
  249. L R10,0(,R9) GET COUNT OF VUA'S FROM MSS TABLE 02490000
  250. L R1,SAVEWRK2 RE-LOAD VIRT. ADDR OF USER'S BUFF 02500000
  251. LA R1,4(,R1) POINT TO FIRST VUA IN TABLE 02510000
  252. TRANS 9,1,OPT=(BRING+DEFER),IOER=SSTRELBO BRING INTO REAL 02520000
  253. EJECT 02530000
  254. USING MSSVUA,R9 02540000
  255. SPACE 1 02550000
  256. SSTLOOP1 DS 0H 02560000
  257. LH R5,VUA GET THE VUA 02570000
  258. SLR R7,R7 ZERO OUT A WORK REG 02580000
  259. ICM R7,B'0001',SDG GET SDG NUMBER FOR THIS VUA 02590000
  260. LR R4,R7 SAVE SDG NUMBER 02600000
  261. MH R7,H130 GET THE INCREMENT TO CORRECT VUA 02610000
  262. TM STAT,SHRD IS THIS A SHARED VUA? 02620000
  263. BO SSTTBLSH YES - THEN PUT IN SHARED SDG TABLE 02630000
  264. OI SAVEWRK9,NSHRPRES NON-SHARED VUA IS PRESENT 02640000
  265. L R6,SAVEWRK3 GET START OF NON-SHARED TABLE 02650000
  266. B SSTTBLNS CONSTRUCT NON-SHARED SDG TABLE 02660000
  267. SPACE 1 02670000
  268. SSTTBLSH DS 0H 02680000
  269. OI SAVEWRK9,SHRDPRES SHARED VUA IS PRESENT 02690000
  270. L R6,SAVEWRK4 GET START OF SHARED SDG TABLE 02700000
  271. SPACE 1 02710000
  272. SSTTBLNS DS 0H 02720000
  273. AR R7,R6 ADD DISPLACEMENT TO CORRECT ENTRY 02730000
  274. SPACE 1 02740000
  275. USING SDGTABLE,R7 02750000
  276. SPACE 1 02760000
  277. LH R8,CNT GET COUNT OF VUA'S IN THIS SDG 02770000
  278. LA R8,1(,R8) INCREMENT COUNT BY ONE 02780000
  279. STH R8,CNT SAVE THE UPDATED COUNT 02790000
  280. AR R8,R8 GET TBL DISPL TO THIS INDEX 02800000
  281. STH R5,0(R8,R7) SAVE VUA ADDRESS (CUU) 02810000
  282. LA R1,4(,R1) POINT TO NEXT TABLE ENTRY 02820000
  283. TRANS 9,1,OPT=(BRING+DEFER),IOER=SSTRELBO GET REAL 02830000
  284. BCT R10,SSTLOOP1 BUILD SDG TABLES USING ALL OF THE 02840000
  285. * MSS-SUPPLIED VUA'S 02850000
  286. SPACE 1 02860000
  287. DROP R7,R9 02870000
  288. EJECT 02880000
  289. L R1,=A(DMKSSSNS) GET ADDR OF PTR TO N/S TABLE 02890000
  290. L R1,0(,R1) GET CCPD OF NON-SHRD TABLE 02900000
  291. TM SAVEWRK9,NSHRPRES HAVE ANY NON-SHARED VUA'S? 02910000
  292. BNO SSTPURGA NO - THEN CHECK FOR SLOT CLEANUP 02920000
  293. C R1,F0 IS PTR TO VUA TABLE ZEROS? 02930000
  294. BNE SSTSLOTA NO - THEN RE-USE OLD SLOT 02940000
  295. CALL DMKPGTPG GET SLOT OF DASD FOR VUA TABLE 02950000
  296. SSTSLOTA DS 0H 02960000
  297. LR R0,R1 DMKRPAPT WANTS CCPD IN R0 02970000
  298. ST R1,SAVEWRK1 SAVE CCPD IN CASE OF ERROR 02980000
  299. L R1,SAVEWRK6 GET VIRTUAL ADDRESS OF TABLE 02990000
  300. CALL DMKRPAPT,PARM=SYSTEM WRITE NON-SHRD TABLE 03000000
  301. BNZ SSTRELBO BRANCH ON ERROR WRITING TABLE 03010000
  302. MVC SAVER2(4),SAVEWRK1 ELSE SAVE CCPD OF N/S TABLE 03020000
  303. B SSTCHKB RELEASE BUFFER, CHECK SHARED VUA'S 03030000
  304. SSTPURGA DS 0H 03040000
  305. MVC SAVER2(4),F0 SAY NO NON-SHARED VUA'S PRESENT 03050000
  306. C R1,F0 IS PTR TO NON-SHRD TABLE ZEROS? 03060000
  307. BE SSTCHKB YES - NO NEED TO RELEASE OLD SLOT 03070000
  308. SLR R0,R0 ZERO OUT FOR SLOT BLANKING 03080000
  309. L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03090000
  310. CALL DMKRPAGT BLANK OUT VIRTUAL BUFFER 03100000
  311. SSTCHKB DS 0H 03110000
  312. L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03120000
  313. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03130000
  314. L R1,=A(DMKSSSHR) GET ADDR OF PTR TO SHRD TABLE 03140000
  315. L R1,0(,R1) GET PTR TO SHRD TABLE 03150000
  316. TM SAVEWRK9,SHRDPRES DO WE HAVE ANY SHARED VUA'S? 03160000
  317. BNO SSTPURGB NO - THEN CHECK FOR SLOT CLEANUP 03170000
  318. C R1,F0 IS THE PTR ZEROS? 03180000
  319. BNE SSTSLOTB NO - THEN RE-USE OLD SLOT 03190000
  320. CALL DMKPGTPG GET DASD SLOT FOR NON-SHRD TABLE 03200000
  321. SSTSLOTB DS 0H 03210000
  322. LR R0,R1 DMKRPAPT WANTS CCPD IN R0 03220000
  323. ST R1,SAVEWRK1 SAVE CCPD IN CASE OF ERROR 03230000
  324. L R1,SAVEWRK7 GET VIRT ADDR OF TABLE 03240000
  325. CALL DMKRPAPT,PARM=SYSTEM WRITE SHARED TABLE 03250000
  326. BNZ SSTRELSH BRANCH ON ERROR WRITING TABLE 03260000
  327. MVC SAVER3(4),SAVEWRK1 SAVE CCPD OF NON-SHRD TABLE 03270000
  328. B SSTRELVB AND RETURN TO CALLER 03280000
  329. SSTPURGB DS 0H 03290000
  330. MVC SAVER3(4),F0 SAY NO SHARED VUA'S PRESENT 03300000
  331. C R1,F0 IS SHARED-TABLE POINTER ZEROS? 03310000
  332. BE SSTRELVB YES - THEN NO NEED TO RELEASE OLD SLOT 03320000
  333. SLR R0,R0 ELSE ZERO OUT FOR SLOT BLANKING 03330000
  334. L R1,SAVEWRK7 GET VIRT ADDR OF SHRD TABLE 03340000
  335. CALL DMKRPAGT BLANK OUT VIRTUAL BUFFER 03350000
  336. SSTRELVB DS 0H 03360000
  337. L R1,SAVEWRK7 GET VIRTUAL BUFFER ADDRESS 03370000
  338. CALL DMKPGUVR RELREASE VIRTUAL BUFFER 03380000
  339. SSTEXIT0 DS 0H 03390000
  340. SLR R6,R6 SET RETURN CODE = 0 03400000
  341. SSTEXIT DS 0H 03410000
  342. ST R6,SAVER6 SAVE RETURN CODE FOR EXIT 03420000
  343. EXIT 03430000
  344. EJECT 03440000
  345. SSTERR01 DS 0H 03450000
  346. L R6,F1 SET RETURN CODE = 1 03460000
  347. B SSTEXIT 03470000
  348. SPACE 2 03480000
  349. SSTERR02 DS 0H 03490000
  350. L R6,F13 SET RETURN CODE = 13 03500000
  351. B SSTEXIT 03510000
  352. SPACE 1 03520000
  353. SSTRELNS DS 0H 03530000
  354. L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03540000
  355. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03550000
  356. B SSTERR02 SET THE CORRECT RET CODE & RETURN 03560000
  357. SPACE 1 03570000
  358. SSTRELBO DS 0H 03580000
  359. L R1,SAVEWRK6 GET VIRT ADDR OF NSHRD TABLE 03590000
  360. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03600000
  361. SSTRELSH DS 0H 03610000
  362. L R1,SAVEWRK7 GET VIRT ADDR OF SHRD TABLE 03620000
  363. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 03630000
  364. B SSTERR02 SET CORRECT RET CODE & RETURN 03640000
  365. EJECT 03650000
  366. DMKSSTFV RELOC 03660000
  367. *. 03670000
  368. * REGISTER USAGE: 03680000
  369. * R0 = WORK REG 03690000
  370. * R1 = VUA 03700000
  371. * R2 = INDEX TO THIS VUA IN SDG ENTRY 03710000
  372. * R3 = COUNT OF VUA'S THIS SDG ENTRY 03720000
  373. * R4 = SDG REQUESTED OR X'FF' 03730000
  374. * R5 = SHARED STATUS REQUESTED/WORK REG 03740000
  375. * R6 = SDG NUMBER BEING SCANNED NOW/RETURN CODE 03750000
  376. * R7 = WORK REG 03760000
  377. * R8 = RDEVBLOK BASE 03770000
  378. * R9 = CCPD OF SDG TABLE BEING SCANNED 03780000
  379. * R10 = SDGTABLE BASE 03790000
  380. * R11 = VMBLOK BASE 03800000
  381. * R12 = DMKSST BASE 03810000
  382. * R13 = SAVE AREA BASE 03820000
  383. * R14 = LINKAGE 03830000
  384. * R15 = LINKAGE 03840000
  385. * 03850000
  386. * OPERATION: 03860000
  387. * 03870000
  388. * 1. GET SHARED/NON-SHARED/BOTH REQUEST, SPECIFIC/NON-SPECIFIC 03880000
  389. * SDG REQUEST. 03890000
  390. * 03900000
  391. * 2. DETERMINE WHICH TABLE TO START SCAN WITH (NORMALLY SHARED 03910000
  392. * TABLE). TRANS THE TABLE IN. 03920000
  393. * 03930000
  394. * 3. PICK UP LAST SDG USED TO MOUNT A VOLUME IN. 03940000
  395. * 03950000
  396. * 4. MOVE TO NEXT SDG. POINT TO COUNT OF VUA'S IN THIS ENTRY. 03960000
  397. * IF NO MORE SDG'S AVAILABLE AND NONE TO DEMOUNT THEN SET 03970000
  398. * REASON CODE 8 AND RETURN TO CALLER. IF NO MORE SDG'S 03980000
  399. * AVAILABLE BUT CAN DEMOUNT, GO TO STEP 9. 03990000
  400. * 04000000
  401. * 5. POINT TO NEXT VUA. IF NONE GO TO STEP 4. 04010000
  402. * 04020000
  403. * 6. CALL DMKSCNRU TO LOCATE RDEVBLOK OF THIS VUA. IF NOT FOUND 04030000
  404. * GO TO STEP 5. 04040000
  405. * 04050000
  406. * 7. MAKE SURE IT'S: 04060000
  407. * - 3330 04070000
  408. * - SYSVIRT 04080000
  409. * - NOT OFFLINE, NOT DEDICATED 04090000
  410. * - NOT OWNED BY SYSTEM 04100000
  411. * IF THESE ARE NOT ALL MET, GO TO STEP 5. 04110000
  412. * 04120000
  413. * 8. IF NO VOLUMES MOUNTED TO IT, SELECT THIS VUA, RELEASE BUFFER, 04130000
  414. * RETURN TO CALLER. ELSE FLAG AS ABLE TO DEMOUNT. GO TO STEP 5. 04140000
  415. * 04150000
  416. * 9. IF DEMOUNT REQUIRED, SET DEMOUNT FLAG, SAVE VUA, RETURN TO 04160000
  417. * CALLER. 04170000
  418. *. 04180000
  419. ST R5,SAVEWRK5 SAVE FLAGS 04190000
  420. SLR R9,R9 ... 04200000
  421. ST R9,SAVEWRK1 ... 04210000
  422. TM SAVEWRK5+3,SHARD SHARED VUA REQUESTED? 04220000
  423. BNO FINDNS NO - THEN MUST BE NON-SHARED 04230000
  424. L R9,=A(DMKSSSHR) ELSE GET ADDR OF CCPD FOR SHRD TBL 04240000
  425. L R9,0(,R9) GET THAT CCPD 04250000
  426. XC SAVEWRK1,SAVEWRK1 RESET VIRT PAGE ADDR AREA 04260000
  427. XC SAVEWRK3,SAVEWRK3 CLEAR A FLAG AREA 04270000
  428. OI SAVEWRK3,SHARED FLAG AS LOOPING ON SHARED 04280000
  429. LTR R9,R9 ANYTHING THERE? 04290000
  430. BNZ GETPAGE YES - THEN BRING IT IN 04300000
  431. NOSHRD DS 0H 04310000
  432. TM SAVEWRK5+3,SHARD+NONSHRD EITHER SHARED OR NON- 04320000
  433. * SHARED ALLOWED? 04330000
  434. BNO FINDERR1 NO - THEN NO SHARED VUA'S PRESENT 04340000
  435. FINDNS DS 0H 04350000
  436. L R9,=A(DMKSSSNS) GET ADDR OF CCPD FOR NSHR TBL 04360000
  437. L R9,0(,R9) ... AND GET THAT CCPD 04370000
  438. XC SAVEWRK3,SAVEWRK3 RESET FLAG AREA 04380000
  439. OI SAVEWRK3,NONSHRD FLAG AS LOOKING FOR NON-SHRD 04390000
  440. LTR R9,R9 ANYTHING THERE? 04400000
  441. BZ FINDERR3 NO - THEN NO NON-SHARED VUA'S 04410000
  442. * PRESENT 04420000
  443. GETPAGE DS 0H 04430000
  444. LR R0,R9 CCPD TO R0 04440000
  445. L R1,SAVEWRK1 VIRTUAL BUFFER ADDRESS 04450000
  446. LTR R1,R1 IS THERE ONE ALREADY ? 04460000
  447. BNZ BYPASS YES, DON'T NEED ANOTHER ONE 04470000
  448. CALL DMKPGUVG GET A VIRTUAL PAGE FOR THIS TABLE 04480000
  449. TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=FINDERR4 04490000
  450. ST R1,SAVEWRK1 SAVE VIRTUAL ADDRESS OF BUFF 04500000
  451. ST R2,SAVEWRK8 SAVE REAL ADDRESS OF BUFF 04510000
  452. BYPASS CALL DMKRPAGT,PARM=(BRING+SYSTEM) BRING INTO STORAGE 04520000
  453. BNZ FINDERR4 PAGE READ ERROR 04530000
  454. C R4,FFS REQUEST ANY OLD SDG? 04540000
  455. BNE SPECSDG NO - USER WANTS A SPECIFIC ONE 04550000
  456. FRSTSCAN EQU * LOOK FOR TOTALLY FREE RDEVBLOK 04560000
  457. L R5,=A(DMKSSSNV) ADDRESS OF SDG INDEX 04570000
  458. L R6,0(R5) SDG INDEX 04580000
  459. ST R6,SAVEWRK6 SAVE FOR LATER REFERENCE 04590000
  460. NXTSCAN DS 0H 04600000
  461. L R6,SAVEWRK6 GET LAST SDG LOOKED AT 04610000
  462. A R6,F1 INCREMENT COUNT BY ONE 04620000
  463. CL R6,F27 LOOK AT HIGHEST SDG YET? 04630000
  464. BNH CONTSCAN NO - THEN THIS SDG NUMBER IS OKAY 04640000
  465. SLR R6,R6 ELSE GET FIRST SDG NUMBER 04650000
  466. CONTSCAN DS 0H 04660000
  467. ST R6,SAVEWRK6 SAVE NMBR OF SDG TO BE LOOKED AT 04670000
  468. MH R6,H130 GET DISPLACEMENT TO THIS SDG 04680000
  469. L R10,SAVEWRK8 GET START OF TABLE 04690000
  470. AR R10,R6 ADD IN DISPLACEMENT TO THIS SDG 04700000
  471. USING SDGTABLE,R10 04710000
  472. LH R3,CNT COUNT OF VUA IN SDG 04720000
  473. LTR R3,R3 ANY ? 04730000
  474. BNZ STRTSCAN LOOK FOR AVAILABLE ONE 04740000
  475. C R4,FFS REQUEST ANY OLD SDG? 04750000
  476. BNE FINDERR5 NO - THEN NO VUA'S IN THIS SDG 04760000
  477. CLC SAVEWRK6,0(R5) WRAPPED AROUND SDGS YET ? 04770000
  478. BE NONSHARE YES, SEE IF PROCESSED NONSHARED 04780000
  479. B NXTSCAN ELSE SET UP TO LOOK AT NEXT SDG 04790000
  480. STRTSCAN DS 0H 04800000
  481. SLR R2,R2 RESET AN INDEX REG 04810000
  482. FINDLOOP DS 0H 04820000
  483. LA R2,2(,R2) GET NEXT VUA IN SDG ENTRY 04830000
  484. LH R1,0(R2,R10) GET VUA NUMBER 04840000
  485. CALL DMKSCNRU GO FIND RDEVBLOK FOR THIS VUA 04850000
  486. BNZ NXTVUA IF RDEVBLOK NOT FOUND GET NEXT 04860000
  487. USING RDEVBLOK,R8 SET ASSEMBLER ADDRESSABILITY 04870000
  488. CLC RDEVTYPC(2),=AL1(CLASDASD,TYP3330) IS IT 3330 04880000
  489. BNE NXTVUA NO, GO BUMP INDEX COUNT 04890000
  490. TM RDEVFTR,SYSVIRT THIS A SYSVIRT VUA? 04900000
  491. BNO NXTVUA NO - THEN DON'T USE IT 04910000
  492. TM RDEVSTAT,RDEVDISA+RDEVDED OFFLINE OR DEDICATED 04920000
  493. BNZ NXTVUA CAN'T BE AVAILABLE 04930000
  494. TM RDEVFLAG,RDEVSYS+RDEVOWN+RDEVSEL BELONG TO 04940000
  495. * SYSTEM 04950000
  496. BNZ NXTVUA YES, CAN'T BE AVAILABLE 04960000
  497. CLI RDEVSER,X'40' IS A VOLUME MOUNTED 04970000
  498. BE GOTFREE FOUND A FREE RDEVBLOK 04980000
  499. OI SAVEWRK3,AVAILVOL VOL AVAILABLE FOR DEMOUNT 04990000
  500. TM SAVEWRK3,DEMNT LOOKING FOR VOL TO DEMOUNT? 05000000
  501. BO GOTONE YES - THEN DEMOUNT AND USE IT! 05010000
  502. NXTVUA EQU * 05020000
  503. BCT R3,FINDLOOP KEEP LOOKING TILL WE EXHAUST 05030000
  504. * THIS SDG 05040000
  505. TM SAVEWRK3,DEMNT WE TRY TO DEMOUNT YET? 05050000
  506. BNO DMOUNT NO - THEN TRY TO DEMOUNT 05060000
  507. TRYNOSHR CL R4,FFS THIS A REQUEST FOR 'ANY' SDG? 05070000
  508. BNE FINDERR5 NO - THEN NONE AVAILABLE THIS SDG 05080000
  509. CLC SAVEWRK6,0(R5) CYCLE THRU ALL THE SDG'S? 05090000
  510. BNE NXTSCAN NO - THEN LOOK AT NEXT ONE 05100000
  511. NONSHARE TM SAVEWRK3,NONSHRD WE LOOK FOR A NON-SHRD VUA? 05110000
  512. BO FINDERR7 YES - THEN ABSOLUTELY NONE 05120000
  513. * AVAILABLE 05130000
  514. B NOSHRD ELSE (MAYBE) LOOK FOR A 05140000
  515. * NON-SHARED VUA 05150000
  516. DMOUNT DS 0H 05160000
  517. TM SAVEWRK3,AVAILVOL VOL AVAILABLE THRU DEMOUNT? 05170000
  518. BNO TRYNOSHR NO - SEE IF CAN TRY NONSHARED 05180000
  519. OI SAVEWRK3,DEMNT SAY WANT TO TRY TO DEMOUNT 05190000
  520. LH R3,CNT COUNT OF VUAS IN SDG 05200000
  521. B STRTSCAN START SCANNING THIS SDG ALL OVER 05210000
  522. GOTFREE EQU * WE HAVE A TOTALLY FREE RDEVBLOK 05220000
  523. ST R1,SAVER5 SAVE VUA ADDRESS (CUU) 05230000
  524. OI RDEVFLAG,RDEVSEL DEVICE IS SELECTED 05240000
  525. MVC RDEVSER(6),BLANKS CLEAR THE VOL SER 05250000
  526. L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05260000
  527. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 05270000
  528. SLR R0,R0 ... 05280000
  529. CALL DMKRPAGT,PARM=(SYSTEM) 05290000
  530. C R4,FFS SPECIFIC SDG REQUEST ? 05300000
  531. BNE SSTEXIT0 DON'T CHANGE THE INDEX 05310000
  532. MVC 0(4,R5),SAVEWRK6 SAVE THIS SDG NUMBER 05320000
  533. B SSTEXIT0 EXIT RC = 0 05330000
  534. GOTONE EQU * GET CURRENT VOLUME DEMOUNTED 05340000
  535. ST R1,SAVER5 SAVE VUA ADDRESS (CUU) 05350000
  536. L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05360000
  537. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 05370000
  538. SLR R0,R0 ... 05380000
  539. CALL DMKRPAGT,PARM=(SYSTEM) 05390000
  540. L R6,F4 RC = 4 IF DEMOUNT REQUIRED 05400000
  541. C R4,FFS SPECIFIC SDG REQUEST 05410000
  542. BNE SSTEXIT DON'T CHANGE SDG INDEX 05420000
  543. MVC 0(4,R5),SAVEWRK6 SAVE THIS SDG NUMBER 05430000
  544. B SSTEXIT RETURN TO CALLER 05440000
  545. SPECSDG DS 0H 05450000
  546. LR R6,R4 GET SDG NUMBER REQUESTED 05460000
  547. LTR R6,R6 REQUEST FOR SDG 0? 05470000
  548. BNZ SPECSDG1 NO - THEN JUST DECREMENT BY ONE 05480000
  549. L R6,F28 ELSE SAY IT'S THE HIGHEST SDG 05490000
  550. SPECSDG1 DS 0H 05500000
  551. S R6,F1 DECREMENT BY ONE 05510000
  552. ST R6,SAVEWRK6 SAVE IN SAVEWRK6 05520000
  553. B NXTSCAN GO SEARCH THIS SDG ONLY FOR AN 05530000
  554. * AVAILABLE VUA 05540000
  555. DROP R8,R10 05550000
  556. FINDERR1 DS 0H 05560000
  557. MVC SAVEWRK2(16),=CL16'SHARED' SET SUBSTITUTION INFO 05570000
  558. B ERREXIT GO PUT OUT MESSAGE 05580000
  559. FINDERR3 DS 0H 05590000
  560. TM SAVEWRK5+3,SHRD+NONSHRD EITHER STATUS REQUESTED? 05600000
  561. BO FINDERR7 YES - THEN USE THAT ERR MSG 05610000
  562. MVC SAVEWRK2(16),=CL16'NONSHARED' SET SUBST. INFO 05620000
  563. B ERREXIT 05630000
  564. FINDERR7 DS 0H 05640000
  565. MVC SAVEWRK2(16),=CL16'SHARED/NONSHARED' SUBST. INFO 05650000
  566. B ERREXIT 05660000
  567. FINDERR5 DS 0H 05670000
  568. CVD R4,SAVEWRK2 CONVERT SDG NUMBER TO DECIMAL 05680000
  569. UNPK SAVEWRK6(2),SAVEWRK3+2(2) UNPK SDG FOR PRINT 05690000
  570. OI SAVEWRK6+1,X'F0' CORRECT EBCDIC CHARACTER 05700000
  571. MVC SAVEWRK2(16),=CL16'SHARED (SDG XX)' 05710000
  572. MVC SAVEWRK5(2),SAVEWRK6 05720000
  573. ERREXIT DS 0H 05730000
  574. L R0,F16 SIZE OF SUBSTITUTION DATA 05740000
  575. LA R1,SAVEWRK2 START OF SUBSTITUTION DATA 05750000
  576. LA R2,EMSG70 MESSAGE 070E 05760000
  577. ICM R2,B'1000',=X'80' RETURN TO DMKSST AFTER MSG 05770000
  578. ICM R0,B'1110',DMKSST+3 05780000
  579. CALL DMKERMSG GO ISSUE THE ERROR MESSAGE 05790000
  580. L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05800000
  581. CALL DMKPGUVR RELEASE BUFFER 05810000
  582. SLR R0,R0 ... 05820000
  583. CALL DMKRPAGT,PARM=(SYSTEM) 05830000
  584. B EXITRC8 EXIT WITH RC = 8 05840000
  585. FINDERR4 DS 0H 05850000
  586. L R1,SAVEWRK1 ADDRESS OF VIRTUAL BUFFER 05860000
  587. CALL DMKPGUVR RELEASE VIRTUAL BUFFER 05870000
  588. EXITRC8 L R6,F8 SET RETURN CODE = 8 05880000
  589. B SSTEXIT RETURN TO CALLER 05890000
  590. EJECT 05900000
  591. F13 DC F'13' 05910000
  592. F27 DC F'27' 05920000
  593. F28 DC F'28' 05930000
  594. H130 DC H'130' 05940000
  595. NSHRPRES EQU X'80' NON-SHARED VUA'S PRESENT 05950000
  596. SHRDPRES EQU X'40' SHARED VUA'S PRESENT 05960000
  597. SHARD EQU X'80' 05970000
  598. NONSHRD EQU X'40' 05980000
  599. SHARED EQU X'20' 05990000
  600. DEMNT EQU X'08' 06000000
  601. AVAILVOL EQU X'04' 06010000
  602. EMSG70 EQU 70 06020000
  603. EJECT 06030000
  604. COPY EQU 06040000
  605. COPY DEVTYPES 06050000
  606. PSA 06060000
  607. COPY RBLOKS 06070000
  608. COPY SAVE 06080000
  609. COPY VMBLOK 06090000
  610. * COPY VUATABLE 06100000
  611. SPACE 1 06110000
  612. MSSVUA DSECT 06120000
  613. SPACE 1 06130000
  614. VUA DS H 06140000
  615. STAT DS X 06150000
  616. SPACE 1 06160000
  617. * BITS DEFINED IN STAT: 06170000
  618. SHRD EQU X'80' THIS IS A SHARED VUA 06180000
  619. SPACE 1 06190000
  620. SDG DS X 06200000
  621. SPACE 3 06210000
  622. SDGTABLE DSECT 06220000
  623. SPACE 1 06230000
  624. CNT DS H COUNT OF VUA'S IN THIS SDG 06240000
  625. SDGINDX DS 64H INDEX TO RDEVBLOK FOR EACH VUA 06250000
  626. * IN THIS SDG 06260000
  627. END DMKSST 06270000