Table of Contents

DMKDGD Source

References

Source Listing

DMKDGD.ASSEMBLE.txt
  1. DGD TITLE 'DMKDGD (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKDGD - PERFORM SHORT-CUT DISK I/O 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * TO PERFORM SIMPLE DISK I/O OF A STANDARDIZED FORMAT WITH A 00010000
  11. * MINIMUM OF CCW-CHAIN MANIPULATION AND INTERRUPT HANDLING. 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * ENTERED VIA 'GOTO' FROM DMKHVCAL 00015000
  16. * 00016000
  17. * ENTRY POINT - 00017000
  18. * 00018000
  19. * DMKDGDDK 00019000
  20. * 00020000
  21. * ENTRY CONDITIONS - 00021000
  22. * 00022000
  23. * GPR 1 POINTS TO USER'S "R1" REGISTER 00023000
  24. * GPR 2 POINTS TO USER'S "R2" REGISTER 00024000
  25. * GPR 11 = ADDRESS OF USER'S VMBLOK 00025000
  26. * GPR 12 = ADDRESS OF DMKDGDDK 00026000
  27. * 00027000
  28. * USER'S "R1" REGISTER HOLDS DEVICE-ADDRESS OF THE DISK 00028000
  29. * 00029000
  30. * USER'S "R2" REGISTER POINTS TO CCW-CHAIN TO READ OR WRITE A 00030000
  31. * LIMITED NUMBER OF DISK RECORDS. EACH READ OR WRITE MUST 00031000
  32. * SPECIFY NO MORE THAN 2048 BYTES (USUALLY 800 IS USED), 00032000
  33. * AND THE CCW-CHAIN IS OF A STANDARD FORM, AS SHOWN BELOW. 00033000
  34. * FOR 3330/40/50/80, A SET SECTOR CMD NORMALLY HRC011DK 00034490
  35. * PRECEEDS EACH SRCH COMMANDS; FOR A 23XX DEVICE HRC011DK 00034980
  36. * IT IS OMITTED. HRC011DK 00035470
  37. * 00036000
  38. * USER'S R15 CONTAINS THE NUMBER OF READS OR WRITES IN THE CCW 00037000
  39. * CHAIN (= 2 IN THE EXAMPLE SHOWN BELOW). 00038000
  40. * (SEE ERROR CONDITIONS AND NOTES) 00039000
  41. * TYPICAL CCW STRING (TO READ OR WRITE TWO 800-BYTE RECORDS): 00040000
  42. * 00041000
  43. * SEEK,A,CC,6 00042000
  44. * SET SECTOR,AA,CC,1 (OMITTED FOR 2311/2314/2319) 00043000
  45. * SRCH,A+2,CC,5 00044000
  46. * TIC,*-8,0,0 00045000
  47. * RD OR WRT,DATA,CC+SILI,800 (1ST RD/WRT) 00046000
  48. * SEEK HEAD,B,CC,6 (OMITTED IF HEAD NUMBER UNCHANGED) 00047000
  49. * SET SECTOR,BB,CC,1 (OMITTED FOR 2311/2314/2319) 00048000
  50. * SRCH,B+2,CC,5 00049000
  51. * TIC,*-8,0,0 00050000
  52. * RD OR WRT,DATA+800,SILI,800 (2ND = LAST RD/WRT) 00051000
  53. * . 00052000
  54. * A BBCCHHR (7 BYTES) SEEK/SRCH ARGMENTS FOR FIRST RD/WRT 00053000
  55. * AA N (1 BYTE) SECTOR NUMBER FOR FIRST SET SECTOR 00054000
  56. * B BBCCHHR (7 BYTES) SEEK/SRCH ARGUMENTS FOR SECOND RD/WRT 00055000
  57. * BB N (1 BYTE) SECTOR NUMBER FOR SECOND SET SECTOR 00056000
  58. EJECT 00057000
  59. * EXIT CONDITIONS - 00058000
  60. * 00059000
  61. * AT RETURN TO USER, CONDITIONS ARE AS FOLLOWS: 00060000
  62. * 00061000
  63. * CONDITION-CODE (CC) = 0: I/O COMPLETE WITH NO ERRORS. 00062000
  64. * (R15 ALSO = 0) 00063000
  65. * 00064000
  66. * CC = 1: ERROR CONDITION, PER R15 AS FOLLOWS: 00065000
  67. * 1 = DEVICE NOT ATTACHED 00066000
  68. * 2 = DEVICE NOT DASD - 2311/2314/2319/3330/3340/3350 00067000
  69. * 3380 HRC011DK 00067500
  70. * 3 = ATTEMPT TO WRITE ON A READ-ONLY DISK 00068000
  71. * 4 = CYLINDER NUMBER NOT WITHIN RANGE OF USER'S DISK 00069000
  72. * 00070000
  73. * CC = 2: ERROR CONDITION, PER R15 AS FOLLOWS: 00071000
  74. * 5 = POINTER TO USER'S CCW STRING NOT DBL-WORD ALIGNED 00072000
  75. * 6 = CCW OR SEEK/SEARCH ARGUMENTS NOT WITHIN USER CORE 00073000
  76. * 7 = USER CCW IS INVALID 00074000
  77. * 8 = READ/WRITE BYTE-COUNT = 0 00075000
  78. * 9 = READ/WRITE BYTE-COUNT GREATER THAN 2048 00076000
  79. * 10 = READ/WRITE BUFFER NOT WITHIN USER CORE 00077000
  80. * (OR ATTEMPT TO READ INTO A SHARED SEGMENT) 00078000
  81. * 11 = USER'S R15 AT ENTRY NOT POSITIVE NUMBER 00079000
  82. * FROM 1 TO 15 (INCLUSIVE), OR WAS NOT 00080000
  83. * LARGE ENOUGH FOR THE GIVEN CCW STRING. 00081000
  84. * 12 = CYLINDER NUMBER ON SEEK-HEAD DOES NOT MATCH 00082000
  85. * THE CYLINDER NUMBER ON THE FIRST SEEK. 00083000
  86. * 00084000
  87. * CC = 3: UNCORRECTABLE I/O ERROR, AS FOLLOWS: 00085000
  88. * R15 = 13 00086000
  89. * CSW (8 BYTES) RETURNED TO USER; 00087000
  90. * SENSE BYTES AVAILABLE IF USER DOES A 'SENSE'. 00088000
  91. * 00089000
  92. * CALLS TO OTHER ROUTINES - 00090000
  93. * 00091000
  94. * DMKFREE 00092000
  95. * DMKSCNVU 00093000
  96. * DMKIOSQV 00094000
  97. * DMKPTRUL 00095000
  98. * DMKFRET 00096000
  99. * DMKSCNVD - TO OBTAIN THE VIRTUAL ADDRESS IN CCU FORM 00096100
  100. * DMKPSASC - TO CHECK IF WRITTING FROM A SHARED PAGE 00097000
  101. * DMKPSACC - TO CHECK IF SHARED PAGE WAS CHANGED BY RUNUSER 00098000
  102. * DMKVMAPS - TO RELEASE A NAMED SYSTEM FROM RUNUSER 00099000
  103. * DMKPTRFR - TO OBTAIN A PAGE OF FREE STORAGE 00100000
  104. * DMKPTRFT - TO RELEASE A PAGE OF FREE STORAGE 00101000
  105. * 00102000
  106. * EXTERNAL REFERENCES - 00103000
  107. * 00104000
  108. * NONE 00105000
  109. * 00106000
  110. * TABLES / WORK AREAS - 00107000
  111. * 00108000
  112. * NONE 00109000
  113. EJECT 00110000
  114. * REGISTER USAGE - 00111000
  115. * 00112000
  116. * GPR 6 = CONSTRUCTED REAL CCWS (RCWCCW) 00113000
  117. * GPR 7 = CONTROL WORDS FOR SEEK/SEARCH ARGUMENTS AND IDAWS 00114000
  118. * GPR 8 = ADDRESS OR DISPLACEMENT OF VDEVBLOK 00115000
  119. * GPR 9 = ADDRESS OF RCWTASK 00116000
  120. * GPR 10 = ADDRESS OF IOBLOK 00117000
  121. * GPR 11 = ADDRESS OF USER'S VMBLOK 00118000
  122. * GPR 12 = BASE REGISTER 00119000
  123. * GPR 13 = POINTER TO USER'S 'R2' REGISTER (VIRTUAL CAW) 00120000
  124. * 00121000
  125. * OTHER REGISTERS ARE USED FOR WORK REGISTERS 00122000
  126. * 00123000
  127. * NOTES - 00124000
  128. * 00125000
  129. * THE USER'S "R1" AND "R2" REGISTERS CAN BE ANY TWO 00126000
  130. * REGISTERS OTHER THAN R15. 00127000
  131. * 00128000
  132. * THE USER'S R15 REGISTER MUST HOLD THE NUMBER OF READ OR WRITES 00129000
  133. * (I.E. NUMBER OF "CCW PACKAGES") IN THE CCW-CHAIN. 00130000
  134. * THIS NUMBER MUST BE A POSITIVE NUMBER FROM 1 TO 15 INCLUSIVE 00131000
  135. * (ERROR 11 IF NOT). 00132000
  136. * 00133000
  137. * THE CCW CHAIN SPECIFIED BY THE USER MUST SPECIFY I/O ON 00134000
  138. * ONLY ONE CYLINDER, UP TO A LIMITED NUMBER OF PAGES, 00135000
  139. * AND MUST BE OF THE STANDARD FORMAT. 00136000
  140. * 00137000
  141. * FOR 3330/40/50/80, THE SET SECTOR CMD SHOULD PROCEDE HRC011DK 00138490
  142. * EACH SEARCH COMMAND; FOR 2311/2314/2319, IT IS OMITTED. 00139000
  143. * 00140000
  144. * THE CCW-CHAIN ENDS WITH A READ OR WRITE WITHOUT 00141000
  145. * A COMMAND-CHAIN. 00142000
  146. * 00143000
  147. * THE CCW CHAIN MUST NOT HAVE ANY INDIRECT DATA LIST (IDA), 00144000
  148. * CHAIN-DATA, OR PCI FLAGS; ERROR 7 IS GIVEN FOR ANY OF THESE. 00145000
  149. * DMKDGDDK TAKES CARE OF HANDLING DATA CROSSING 4096-BYTE 00146000
  150. * BOUNDARIES, USING INDIRECT DATA LISTS. 00147000
  151. * 00148000
  152. * OPERATION - 00149000
  153. * 00150000
  154. * DMKDGDDK IS ENTERED FROM DMKPRVLG WHEN A USER HAS ISSUED A 00151000
  155. * "DIAGNOSE" CALL FOR A STANDARDIZED I/O TASK TO BE PERFORMED ON 00152000
  156. * A 2311/2314/2319/3340/3330/3350/3380 HRC011DK 00153090
  157. * DMKDGDDK CHECKS FOR VARIOUS HRC011DK 00153180
  158. * CALLING ERRORS; IF NONE IS PRESENT, AND, FOR MINIDISKS, 00153500
  159. * THE DEVICE IS NOT RESERVED BY ANOTHER USER, 00154000
  160. * AN IOBLOK AND RCWTASK ARE 00154500
  161. * MADE UP AND SCHEDULED FOR EXECUTION BY CALLS TO DMKIOSQV AND 00155000
  162. * DMKDSPCH. UPON COMPLETION, A CONDITION CODE OF 0 INDICATES 00156000
  163. * TO THE USER THAT THE I/O HAS BEEN COMPLETED WITH NO ERRORS 00157000
  164. * (NO CSW BEING RETURNED TO THE USER). ERRORS ARE SIGNALLED TO 00158000
  165. * THE USER AS INDICATED UNDER EXIT CONDITIONS. 00159000
  166. *. 00160000
  167. EJECT 00161000
  168. COPY OPTIONS 00162000
  169. COPY LOCAL 00163000
  170. EJECT 00164000
  171. DMKDGD CSECT -LOADER CONTROL- 00165000
  172. * 00166000
  173. ENTRY DMKDGDDK ENTRY POINT FOR "STANDARD" DISK I/O 00167000
  174. * 00168000
  175. *** EXTRN DMKFREE,DMKFRET 00169000
  176. EXTRN DMKSCNVD @V407438 00169100
  177. EXTRN DMKSCNVU 00170000
  178. EXTRN DMKSSSMQ,DMKDSPCH @V60B6B8 00170500
  179. EXTRN DMKIOSQV 00171000
  180. *** EXTRN DMKDSPCH 00172000
  181. EXTRN DMKPSASC,DMKPSACC,DMKPTRFR,DMKPTRFT @V60BC11 00173000
  182. EXTRN DMKPTRUL 00174000
  183. EXTRN DMKVMASH @VA07351 00174100
  184. * 00175000
  185. USING PSA,R0 00176000
  186. USING VMBLOK,R11 00177000
  187. * 00178000
  188. USING DMKDGDDK,R12 - ENTER HERE (FROM DMKPRV) - 00179000
  189. DMKDGDDK DS 0H ENTRY POINT FOR "STANDARD" DISK I/O 00180000
  190. NI VMPSW+2,X'CF' YES - CLEAR USER'S CONDITION CODE 00181000
  191. DG01 NI VMPSW+4,X'CF' CLEAR USER'S CONDITION-CODE 00182000
  192. SLR R10,R10 R10=0 MEANS NO FREE STORAGE OBTAINED YET 00183000
  193. L R5,0(,R1) LET R5 = USER'S "R1" REG = DEV. ADDRESS 00184000
  194. L R13,0(,R2) AND R13 = USER'S 'R2' REG = VIRTUAL CAW 00185000
  195. TM 3(R2),07 CHECK LAST 3 BITS OF USER'S CAW 00186000
  196. BNZ ERROR5 ERROR IF NOT DOUBLE-WORD ALIGNED. 00187000
  197. DGDRST2 LR R1,R5 CHECK DEVICE AND FIND VDEVBLOK @V407438 00188000
  198. CALL DMKSCNVU ... 00189000
  199. BNZ CHKMOUNT CHECK FOR MSS MOUNT IN PROCESS @V60B6B8 00190000
  200. USING VDEVBLOK,R8 00191000
  201. TM VDEVTYPC,CLASDASD HOPEFULLY A DASD DEVICE ? 00192000
  202. BZ ERROR2 ERROR IF NOT. 00193000
  203. LA R1,JNUMOTH ASSUME 2311 OR 2314/2319 00194000
  204. TM VDEVTYPE,TYP2311+TYP2314 IS IT ? 00195000
  205. BM DG02 TRF IF YES, ONE OF THE ABOVE. 00196000
  206. TM VDEVTYPE,TYP3330+TYP3340+TYP3350+TYP2305+TYP3380 , *00197590
  207. VALID DASD DEVICE TYPE ? HRC011DK 00198180
  208. BNM ERROR2 ERROR IF NOT. 00199000
  209. LA R1,JNUM3330 SET R1 FOR NO. FULL WORDS FOR 3330 00200000
  210. DG02 L R3,VMGPRS+R15*4 GET USER'S R15 = NO. OF READS/WRITES 00201000
  211. CL R3,F15 MAKE SURE USER'S R15 WAS NO MORE THAN 15 00202000
  212. BH ERROR11 ERROR 11 IF IT WAS > 15. 00203000
  213. MR R0,R3 GET NO. OF FULL-WORDS NEEDED FOR CCWS ETC 00204000
  214. AL R1,F1 PRODUCT+1 TO HANDLE ODD NO. OF FULL WORDS 00205000
  215. SRA R1,1 NOW INTO DOUBLE WORDS (AND SET CC) 00206000
  216. BNP ERROR11 ERROR IF NOT PLUS (USER'S R15 AT FAULT) 00207000
  217. TM VDEVSTAT,VDEVCHAN+VDEVBUSY+VDEVPEND ANYTHING @VA01365 00208000
  218. * HAPPENING? 00209000
  219. BNZ ERROR51 YES, GIVE ERROR5, CC1 @VA01365 00210000
  220. LA R2,2(,R1) ADD SIZE OF HEADER, REMEMBER IN R2 00213000
  221. TM VDEVFLG2,VDEVRRF RES/REL FTR ON THIS MDISK? @V407438 00213005
  222. BZ DEVFREE NOPE, BR. @V407438 00213010
  223. L R4,VDEVRRB GET THE ADDRESS OF THE VRRBLOK @V407438 00213015
  224. USING VRRBLOK,R4 ADDRESS THE VRRBLOK @V407438 00213020
  225. TM VDEVFLG2,VDEVRES MDISK RESERVED FOR THIS USER @V407438 00213025
  226. BO DEVFREE YES, LET HIM PASS, BR. @V407438 00213030
  227. TM VRRSTAT,VRRRES ANYONE ELSE HAVE IT RESERVED? @V407438 00213035
  228. BZ DEVFREE NOPE, CONTINUE. @V407438 00213040
  229. LA R0,CPEXSIZE SIZE OF A CPEXSIZE @V407438 00213045
  230. CALL DMKFREE GET ONE PLEASE @V407438 00213050
  231. USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK FROM R1 @V407438 00213055
  232. STM R0,R15,CPEXR0 SAVE EVERYTHING JUST AS IT IS @V407438 00213060
  233. ST R5,CPEXMISC SAVE DEVICE ADDRESS FOR DMKCFPRD @V407438 00213065
  234. LA R0,DGDRSTRT ADDRESS TO RESTART WITH PLEASE @V407438 00213070
  235. ST R0,CPEXADD ... @V407438 00213075
  236. L R0,VRRCPEX ADDRESS OF THE FIRST QED CPEXBLOK@V407438 00213080
  237. ST R0,CPEXFPNT PUT THIS CPEXBLOK IN THE CHAIN @V407438 00213085
  238. ST R1,VRRCPEX DITTO @V407438 00213090
  239. OI VDEVFLG2,VDEVCPEX FLAG WAITING FOR "RELEASE" @V407438 00213095
  240. OI VMRSTAT,VMIDLE DROP USER FROM QUEUE @V407438 00213100
  241. GOTO DMKDSPCH COME BACK WHEN DEVICE IS FREE @V407438 00213105
  242. * DROP FROM QUEUE, LEAVE IN EXECUTION WAIT 00213110
  243. * IF DEVICE IS RESET, CPEXADD IS SET NEGATIVE, LTR'ED BY DMKDSP 00213115
  244. DGDRSTRT EQU * @VA08682 00213117
  245. LCTL C1,C1,VMSEG LOAD SEG TABLE ADDRESS @VA08682 00213119
  246. BNP ERROR51 DEVICE WAS RESET ,BR @VA08682 00213121
  247. NI VMRSTAT,X'FF'-VMIDLE ALLOW IN QUEUE AGAIN @V407438 00213125
  248. NI VDEVFLG2,X'FF'-VDEVCPEX CFPRR - NOT WTNG ON CPEX@V407438 00213130
  249. B DGDRST2 NOW TRY IT AGAIN SAM @V407438 00213135
  250. DROP R1,R4 NO MORE CPEXBLOK OR VRRBLOK @V407438 00213140
  251. SPACE 00213145
  252. DEVFREE EQU * HERE WHEN ACCESS TO MDISK IS FREE@V407438 00213150
  253. LA R0,IOBSIZE GET STORAGE FOR IOBLOK FIRST 00214000
  254. CALL DMKFREE ... 00215000
  255. XC 0(IOBSIZE*8,R1),0(R1) CLEAR ENTIRE IOBLOK 00216000
  256. LR R10,R1 REFERENCE IOBLOK IN R10 00217000
  257. STH R5,VMACTDEV SAVE VIRTUAL DEVICE ADDRESS @V2B2638 00218000
  258. USING IOBLOK,R10 ... 00219000
  259. ST R3,IOBMISC2 REMEMBER COUNT OF CCW PACKAGES 00220000
  260. L R1,VDEVREAL GET PTR TO RDEVBLOK @V60B6B8 00220100
  261. TM RDEVFTR-RDEVBLOK(R1),VIRTUAL+SYSVIRT IS THE @V60B6B8 00220200
  262. * REAL DEVICE A 3330V 00220300
  263. BZ SETLENG NO @V60B6B8 00220400
  264. LA R2,N3(R2) 3 PREFIX CCW'S FOR 3330V @V60B6B8 00220500
  265. SETLENG EQU * SET LENGTH FOR DMKFREE @V60B6B8 00220600
  266. LR R0,R2 NOW GET STORAGE FOR THE RCWTASK 00221000
  267. CALL DMKFREE ... 00222000
  268. LR R9,R1 REFERENCE IN R9 00223000
  269. USING JRCWTASK,R9 ... 00224000
  270. SLR R3,R3 CLEAR R3 (R2 IS IMMATERIAL) 00225000
  271. LR R15,R0 TOTAL COUNT INTO R15 00226000
  272. SLL R15,3 (IN BYTES, PLEASE) 00227000
  273. LR R14,R9 START OF RCWTASK & CCW CHAIN 00228000
  274. MVCL R14,R2 CLEAR HEADER AND CCW STRING 00229000
  275. STH R0,JRCWCCNT STORE TOTAL NO. DBL-WORDS USED 00230000
  276. SLL R0,3 MAKE R0 BYTES NOW (FOR USE SHORTLY) 00231000
  277. LA R6,JCCW1ST R6 = START OF CCW CHAIN WE WILL BUILD 00232000
  278. ST R6,IOBCAW STORE IN IOBLOK 00233000
  279. USING RCWCCW,R6 USE HANDY DSECT FOR CONSTRUCTING CCWS 00234000
  280. L R1,VDEVREAL GET REAL DEVICE BLOCK ADDR @V60B6B8 00234100
  281. TM RDEVFTR-RDEVBLOK(R1),VIRTUAL+SYSVIRT @V60B6B8 00234200
  282. BZ NOPRE NO, NO SPECIAL PREFIX @V60B6B8 00234300
  283. MVC RCWCCW(PREL),MSSPRE MOVE 3-CCW PREFIX @V60B6B8 00234400
  284. LA R1,PREL(R6) POINT PAST PREFIX @V60B6B8 00234500
  285. STCM R1,7,TICOFF(R6) POINT TIC CCW TO FIRST USER CCW @V60B6B8 00234600
  286. LR R6,R1 AND RESET CURRENT CCW PTR @V60B6B8 00234700
  287. NOPRE EQU * SET UP RCWTASK @V60B6B8 00234800
  288. LR R7,R0 BYTE-COUNT OF AREA INTO R7, AND 00235000
  289. ALR R7,R9 R7 = END OF CONTROL-WORD AREA 00236000
  290. SL R7,FNUMCC START WITH LAST BYTES IN OUR AREA 00237000
  291. USING JSEEKA,R7 REFERENCE CONTROL WORDS TO BE CONSTRUCTED 00238000
  292. ST R13,JRCWVCAW STORE RCWVCAW 00239000
  293. STCM R13,B'1000',IOBCAW SET REAL KEY @VA03750 00240000
  294. L R14,FFS STORE FFFF WHERE NEEDED 00241000
  295. STH R14,JRCWHEAD ... 00242000
  296. ALR R0,R13 COMPUTE END OF AREA USED BY USER @V304635 00243000
  297. LR R1,R0 ADDRESS INTO REG. 1 @V304635 00244000
  298. LRA R1,0(,R1) IS IT A VALID ADDRESS ? @V304635 00245000
  299. BC 8+2,DG02A CONTINUE IF NOT A SEG EXCEPTION @V408246 00246100
  300. LR R1,R0 RESTORE VIRTUAL ADDR. @V408246 00246200
  301. CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00246300
  302. BC 2,ERROR6 ADDRESSING ERROR @V408246 00246400
  303. DG02A DS 0H @V408246 00246500
  304. LR R1,R13 00247000
  305. BAL R5,DGTRANS FIND FIRST USER CCW-COMMAND 00248000
  306. MVC RCWCCW(8),0(R2) AND OBTAIN IT 00249000
  307. CLI RCWCOMND,X'07' FIRST COMMAND MUST BE A 'SEEK' 00250000
  308. BNE ERROR7 "WRONG CCW COMMAND" IF IT AIN'T. 00251000
  309. * HANDLE 1ST COMMAND = "SEEK" 00252000
  310. MVI RCWCTL,00 CLEAR CP'S FLAG BYTE 00253000
  311. L R1,RCWADDR COMMAND-CODE & DATA-ADDRESS INTO R1, 00254000
  312. LH R3,RCWCNT BYTE-COUNT FROM CCW 2ND HALF INTO R3 00255000
  313. TM RCWFLAG,IDA+CD+PCIF ANY INVALID BITS IN CCW ? @VA01003 00256000
  314. BNZ ERROR7 USER BROKE THE RULES IF YES @VA01003 00257000
  315. OI RCWFLAG,CC BUT THE CC MUST BE ON 00258000
  316. BAL R4,DGMOVESK GO MOVE SEEK ARG @VA03176 00259000
  317. TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00260000
  318. BO DG03 IF YES, HANDLE OF SEEK ALMOST DONE. 00261000
  319. LH R14,VDEVBND NO. OF CYLINDERS USER HAS INTO R14, 00262000
  320. CLR R15,R14 COMPARE SEEK-ADDRESS WITH NO. CYLS 00263000
  321. BNL ERROR4 USE ERROR 4 IF NOT WITHIN RANGE OF DISK. 00264000
  322. LH R14,VDEVRELN CYLINDER RELOCATION FACTOR INTO R14, 00265000
  323. ST R14,IOBMISC REMEMBER RELOC. FACTOR FOR SEEK-HEAD USE 00266000
  324. ALR R15,R14 ADD RELOCATION FACTOR 00267000
  325. DG03 STH R15,IOBCYL STORE RELOCATED CYLINDER NO. IN IOBLOK 00268000
  326. MVC VDEVPOSN(4),JSEEKA+2 REMEMBER VDEVPOSN (CCHH FORM) 00269000
  327. B DG04 GO STORE RELOCATED CYLINDER NUMBER ETC. 00270000
  328. SPACE 00271000
  329. DGCCWLP DS 0H LOOP TO PROCESS GROUPS OF CCWS: 00272000
  330. ST R15,IOBMISC2 STORE UPDATED VALUE OF CCW-PKG COUNT 00273000
  331. SL R7,FNUMCC DECREMENT R7 FOR NEW CONTROL WORDS 00274000
  332. AL R8,VMDVSTRT LET R8 AGAIN = A(VDEVBLOK) 00275000
  333. * 00276000
  334. DGCCWNXT DS 0H PROCESS THE 'NEXT' USER CCW: 00277000
  335. AL R6,F8 BUMP ADDESS FOR NEXT CCW TO BUILD@V304735 00278000
  336. AL R13,F8 BUMP ADDRESS FOR NEXT USER CCW @V304735 00279000
  337. CLR R6,R7 R6 MUST BE < R7 00280000
  338. BNL ERROR11D IF NOT, WE RAN OUT OF ROOM. 00281000
  339. LR R1,R13 ADDRESS INTO R1 AND 00282000
  340. BAL R5,DGTRANS FIND USER'S NEXT CCW COMMAND 00283000
  341. MVC RCWCCW(8),0(R2) AND OBTAIN IT 00284000
  342. MVI RCWCTL,00 CLEAR CP'S FLAG-BYTE 00285000
  343. L R1,RCWADDR COMMAND-CODE & DATA-ADDRESS INTO R1, 00286000
  344. LH R3,RCWCNT BYTE-COUNT FROM CCW 2ND HALF INTO R3 00287000
  345. TM RCWFLAG,IDA+CD+PCIF ANY INVALID BITS IN CCW ? @VA01003 00288000
  346. BNZ ERROR7 USER BROKE THE RULES IF YES @VA01003 00289000
  347. CLI RCWCOMND,X'06' READ ? 00290000
  348. BE DGREAD YES 00291000
  349. CLI RCWCOMND,X'05' WRITE ? 00292000
  350. BE DGWRITE YES 00293000
  351. CLI RCWCOMND,X'08' TIC? @VM08944 00294000
  352. BE DGTIC YES @VM08944 00295000
  353. OI RCWFLAG,CC ENSURE COMMAND-CHAIN ON 00296000
  354. CLI RCWCOMND,X'31' SEARCH ? 00297000
  355. BE DGSEARCH YES. 00298000
  356. CLI RCWCOMND,X'23' SET-SECTOR ? 00299000
  357. BE DGSECTOR YES. 00300000
  358. CLI RCWCOMND,X'1B' SEEK HEAD ? 00301000
  359. BNE ERROR7 ERROR IF "NONE OF THE ABOVE". 00302000
  360. SPACE 00303000
  361. DGSEEKHD DS 0H USER CCW WAS A "SEEK HEAD" 00304000
  362. BAL R4,DGMOVESK GO MOVE SEEK ARGUMENT @VA03176 00305000
  363. CH R15,VDEVPOSN MUST BE THE SAME ONE WE STARTED WITH 00306000
  364. BNE ERROR12 USE ERROR 12 IF NOT. 00307000
  365. AL R15,IOBMISC ADD 0 (IF DEDICATED) OR RELOCATION FACTOR 00308000
  366. DG04 ST R15,JSEEKA STORE RELOCATED CYLINDER NUMBER. 00309000
  367. STCM R7,7,RCWADDR+1 ADDRESS OF "JSEEKA" INTO CCW ITSELF 00310000
  368. L R1,VDEVREAL GET THE REAL DEVICE BLOCK @V60B6B8 00310150
  369. TM RDEVFTR-RDEVBLOK(R1),VIRTUAL+SYSVIRT @V60B6B8 00310300
  370. BZ DGCCWNXT NO, DONE WITH SEEK @V60B6B8 00310450
  371. LA R1,JCCW1ST ADDR 3330V PREFIX SEEK @V60B6B8 00310600
  372. STCM R7,7,1(R1) SEEK ARG. PTR FOR PREFIX SEEK @V60B6B8 00310750
  373. B DGCCWNXT NOW GET NEXT CCW. 00311000
  374. SPACE 00312000
  375. DGSEARCH DS 0H USER CCW WAS A "SEARCH" 00313000
  376. CL R3,F5 BYTE-COUNT MUST BE 5 00314000
  377. BNE ERROR7 USER GOOFED IF NOT. 00315000
  378. BAL R5,DGTRANS NOW GET THE SEARCH ARGUMENT 00316000
  379. LNR R5,R2 HOW MANY BYTES TILL END OF PAGE? @VA03176 00317000
  380. N R5,F4095 R5 CONTAINS THE COUNT @VA03176 00318000
  381. BZ SCHLNOK ARGUMENT WAS ON PAGE BOUNDARY @VA03176 00319000
  382. CLR R5,R3 CHECK AGAINST MAX TO MOVE @VA03176 00320000
  383. BNL SCHLNOK ALL ARE PRESENT @VA03176 00321000
  384. LR R3,R5 LESS THAN FIVE, SET TO MOVE @VA03176 00322000
  385. SCHLNOK BCTR R3,0 DECREMENT LENGTH FOR EXECUTE @VA03176 00323000
  386. LA R5,JSEARCH ADDRESS TARGET @VA03176 00324000
  387. EX R3,EXMVC MOVE HOWEVER MANY @VA03176 00325000
  388. C R3,F4 IS THAT ENOUGH? @VA03176 00326000
  389. BNL DGSCHXIT YES, GET OUT @VA03176 00327000
  390. * 00328000
  391. LA R1,1(R3,R1) GET NEXT PAGE ADDRESS @VA03176 00329000
  392. BAL R5,DGTRANS REALLY @VA03176 00330000
  393. LA R5,JSEARCH+1(R3) ADDRESS REMAINDER OF TARGET @VA03176 00331000
  394. S R3,F3 COMPUTE HOW MUCH TO MOVE @VA03176 00332000
  395. LCR R3,R3 ... @VA03176 00333000
  396. EX R3,EXMVC MOVE REMAINDER OF SEARCH ARGUMENT@VA03176 00334000
  397. * 00335000
  398. DGSCHXIT LA R15,JSEARCH POINT TO SEARCH BYTES @VA03176 00336000
  399. STCM R15,7,RCWADDR+1 STORE ADDRESS IN CCW 00337000
  400. TM VDEVTYPE,TYP3330+TYP3340 3330 OR 3340 ? @VA03832 00338000
  401. BZ DGCCWNXT NO..CONTINUE... @VA03832 00339000
  402. CLI JSEARCH+4,0 SEARCHING ON RECORD O ? @VA03832 00340000
  403. BNE DGCCWNXT NO..CONTINUE... @VA03832 00341000
  404. LH R15,JSEARCH PICK UP CYLINDER NUMBER @VA03832 00342000
  405. AL R15,IOBMISC RELOCATE TO CORRECT CYL @VA03832 00343000
  406. STH R15,JSEARCH REPLACE... @VA03832 00344000
  407. B DGCCWNXT NOW GET NEXT CCW AFTER THE USER'S TIC. 00345000
  408. SPACE 00346000
  409. DGSECTOR DS 0H USER CCW WAS A "SET SECTOR" 00347000
  410. CL R3,F1 BYTE-COUNT MUST BE 1 00348000
  411. BNE ERROR7 USER GOOFED IF NOT 00349000
  412. TM VDEVTYPE,TYP3330+TYP3340+TYP3350+TYP2305+TYP3380 , *00350590
  413. VALID DASD DEVICE TYPE ? HRC011DK 00351180
  414. BNM ERROR7 USER GOOFED IF NOT. 00352000
  415. BAL R5,DGTRANS NOW GET THE SET-SECTOR BYTE 00353000
  416. IC R15,0(,R2) ... 00354000
  417. STC R15,JSCTNO STORE IN OUR AREA 00355000
  418. LA R15,JSCTNO POINT TO IT THERE, AND 00356000
  419. STCM R15,7,RCWADDR+1 STORE ITS ADDRESS IN THE CCW. 00357000
  420. B DGCCWNXT GO GET NEXT CCW. 00358000
  421. SPACE 00359000
  422. DGTIC EQU * @VM08944 00360000
  423. LR R5,R13 VIRT. ADDR OF CCW @VM08944 00361000
  424. S R5,F8 MINUS 8 @VM08944 00362000
  425. CLM R5,7,RCWADDR+1 TIC *-8?? @VM08944 00363000
  426. BNE ERROR7 NOPE - AGAINST THE RULES. @VM08944 00364000
  427. LR R5,R6 REAL ADDR OF CCW. @VM08944 00365000
  428. S R5,F8 MINUS 8. @VM08944 00366000
  429. STCM R5,7,RCWADDR+1 PUT INTO REAL CCW @VM08944 00367000
  430. XC RCWCOMND+4(4),RCWCOMND+4 CLEAR 2ND WD @VM08944 00368000
  431. B DGCCWNXT GO GET NEXT CCW @VM08944 00369000
  432. SPACE 00370000
  433. DGWRITE DS 0H USER CCW WAS A "WRITE" 00371000
  434. TM VDEVFLAG,VDEVRDO IS IT A READONLY DISK ? 00372000
  435. BO ERROR3 ERROR 3 IF YES. 00373000
  436. * 00374000
  437. DGREAD DS 0H HANDLE READ (OR WRITE): 00375000
  438. LTR R3,R3 CHECK BYTE-COUNT 00376000
  439. BZ ERROR8 USER GOOF IF BYTE-COUNT = 0 00377000
  440. CL R3,F2048 DOES IT EXCEED LIMIT OF 2048 ? 00378000
  441. BH ERROR9 TRF IF YES (USER BROKE THE RULES). 00379000
  442. LA R3,0(R1,R3) COMPUTE END OF BUFFER (PLUS 1) 00380000
  443. SL R8,VMDVSTRT MAKE R8 "RELATIVE" ACROSS TRANS CALL(S) 00381000
  444. DROP R8 00382000
  445. ALTER1 TRANS 2,1,OPT=(BRING,DEFER,LOCK),ADEX=ERROR10 GET PAGE@V304735 00383000
  446. CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00384000
  447. BZ NOTCHG1 NOT CHANGED - CONTINUE @V304735 00385000
  448. CALL DMKPTRUL UNLOCK THE PAGE @VA07694 00385050
  449. CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00385100
  450. B ALTER1 NOW -REISSUE CURRENT RUNUSER @V304735 00387000
  451. NOTCHG1 STCM R2,7,RCWADDR+1 STORE REAL ADDRESS IN RCWTASK @V304735 00388000
  452. OI RCWCTL,RCWIO FLAG AS NEEDING UNLOCK LATER @VA05378 00389000
  453. SR R5,R5 CLEAR COPYPAGE CALL FLAG @VA05378 00389100
  454. LR R4,R2 AND REMEMBER IN R4 IN CASE NEEDED LATER 00390000
  455. SLR R0,R0 INDICATE ALLOW STORE ANYWHERE @V304735 00391000
  456. CALL DMKPSASC CHECK IF ACCESSING A SHARED PAGE @V304735 00392000
  457. BZ NOTSHR1 CONTINUE IF NOT A SHARED PAGE @V304735 00393000
  458. CLI RCWCOMND,X'06' IS HE READING INTO A SHARED @V304735 00394000
  459. * PAGE ? 00395000
  460. BE ERROR10P YES - REFLECT PROTECTION ERROR @V304735 00396000
  461. TM RCWFLAG,IDA USING IDA LIST @V304735 00397000
  462. BO DG05 IF YES - DON'T COPY PAGE @V304735 00398000
  463. BAL R14,COPYPAGE COPY OVER THE ORIGINAL PAGE @V304735 00399000
  464. LA R5,1 INDICATE COPYPAGE WAS CALLED @VA05378 00399100
  465. STCM R2,7,RCWADDR+1 STORE NEW REAL ADDRESS @VA05378 00400000
  466. LR R4,R2 ALSO CHANGE R4 @V304735 00401000
  467. NOTSHR1 BCTR R3,0 R3=ADDR. OF LAST BYTE TO BE @V304735 00403000
  468. * TRANSFERRED. 00404000
  469. N R1,XPAGNUM ISOLATE PAGE-NUMBER OF BEGIN. OF DATA, 00405000
  470. N R3,XPAGNUM DITTO FOR END OF DATA 00406000
  471. CLR R1,R3 ARE THEY THE SAME ? 00407000
  472. BE DG05 IF YES, DOESN'T CROSS PAGE BOUNDARY 00408000
  473. LR R1,R3 BEGINNING OF 2ND VIRT. PAGE INTO R1, 00409000
  474. ALTER2 TRANS 2,1,OPT=(BRING,DEFER,LOCK),ADEX=ERROR10P GET @V304735 00410000
  475. * PAGE 00411000
  476. CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00412000
  477. BZ NOTCHG2 IF NOT CHANGED - CONTINUE @V304735 00413000
  478. CALL DMKPTRUL UNLOCK THE PAGE @VA07694 00413050
  479. CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00413100
  480. B ALTER2 NOW REISSUE THE TRANS CALL @V304735 00415000
  481. NOTCHG2 OI RCWFLAG,IDA SET REAL IDA BIT @V304735 00416000
  482. LA R15,JIDAL1 STORE ADDRESS OF IDAW PAIR IN CCW, 00417000
  483. STCM R15,7,RCWADDR+1 ... 00418000
  484. ST R4,JIDAL1 STORE 1ST IDAW ADDRESS 00419000
  485. ST R2,JIDAL2 AND STORE 2ND IDAW ADDRESS 00420000
  486. SLR R0,R0 INDICATE ALLOW STORE ANYWHERE @V304735 00421000
  487. CALL DMKPSASC CHECK IF ACCESSING A SHARED PAGE @V304735 00422000
  488. BZ DG05 CONTINUE IF NOT A SHARED PAGE @V304735 00423000
  489. CLI RCWCOMND,X'06' IS HE READING INTO A SHARED @V304735 00424000
  490. * PAGE ? 00425000
  491. BE ERROR10P YES - REFLECT PROTECTION ERROR @V304735 00426000
  492. BAL R14,COPYPAGE COPY OVER THE ORIGINAL PAGE @V304735 00427000
  493. ST R2,JIDAL2 NEW 2ND IDAW ADDRESS @V304735 00428000
  494. LTR R5,R5 WAS FIRST PAGE COPIED @VA05378 00429000
  495. BP DG05A YES, DONE WITH THIS CCW @VA05378 00429100
  496. L R2,JIDAL1 GET FIRST PAGE ADDRESS @VA05378 00429200
  497. BAL R14,COPYPAGE COPY THIS PAGE ALSO @VA05378 00429300
  498. ST R2,JIDAL1 NEW FIRST IDAW ADDRESS @VA05378 00429400
  499. B DG05A DONE WITH THIS CCW @VA05378 00429500
  500. DG05 TM RCWFLAG,IDA IDAL IN USE ?? @VA05378 00429600
  501. BZ DG05A NO, DONE WITH THIS CCW @VA05378 00429700
  502. LTR R5,R5 WAS FIRST PAGE COPIED @VA05378 00429800
  503. BZ DG05A NO, DONE WITH THIS CCW @VA05378 00429900
  504. L R2,JIDAL2 GET 2ND PAGE ADDRESS @VA05378 00430000
  505. BAL R14,COPYPAGE COPY THIS PAGE ALSO @VA05378 00430100
  506. ST R2,JIDAL2 NEW 2ND IDAW ADDRESS @VA05378 00430200
  507. DG05A TM RCWFLAG,CC WAS READ/WRITE COMMAND CHAINED ??@VA05378 00430300
  508. BZ DG06 IF NOT, WE SHOULD BE ALL DONE. 00431000
  509. L R15,IOBMISC2 IF COMMAND-CHAINED, RECOVER CCW-PKG COUNT 00432000
  510. BCT R15,DGCCWLP AND ITERATE LOOP TO NEXT USER CCW. 00433000
  511. * IF DROPS THRU BCT, USER'S R15 AT ENTRY WAS TOO SMALL FOR CCW-STRING: 00434000
  512. AL R6,F8 BUMP R6 FOR FINISHED CCW @V304735 00435000
  513. B ERROR11 MAKE THAT ERROR 11. 00436000
  514. SPACE 00437000
  515. * FINISHED HANDLING USER CCW-CHAIN: 00438000
  516. DG06 AL R6,F8 BUMP R6 FOR FINISHED CCW @V304735 00439000
  517. L R3,IOBCAW ACCESS REAL CAW @VA03750 00440000
  518. LA R3,0(,R3) CLEAR OUT KEY..ETC @VA03750 00441000
  519. SLR R6,R3 SUBTRACT START OF CCWS @VA03750 00442000
  520. SRL R6,3 BYTES TO DBL-WORDS PLEASE 00443000
  521. STH R6,JRCWRCNT STORE COUNT OF REAL CCWS 00444000
  522. STH R6,JRCWVCNT DITTO VIRTUAL COUNT (SAME NUMBER) 00445000
  523. LA R3,DGRETURN R3 POINTS TO WHERE-TO-RETURN 00446000
  524. ST R3,IOBIRA STORE IN IOBLOK, 00447000
  525. ST R8,IOBMISC REMEMBER DISPLACEMENT OF VDEVBLOK 00448000
  526. AL R8,VMDVSTRT IOS NEEDS ADDRESS OF BLOK .. 00449000
  527. USING VDEVBLOK,R8 00450000
  528. ST R10,VDEVIOB SAVE ADDRESS OF ACTIVE IOBLOK 00451000
  529. OI VDEVSTAT,VDEVBUSY AND FLAG DEVICE BUSY 00452000
  530. L R1,VDEVIOER SEE IF ANY OLD SENSE BYTES 00453000
  531. LTR R1,R1 ...ARE HANGING AROUND VDEVBLOK 00454000
  532. BZ DG06A NO - SKIP FRET 00455000
  533. LA R0,IOERSIZE SIZE OF IOERBLOK 00456000
  534. USING IOERBLOK,R1 00457000
  535. AH R0,IOEREXT ADD EXTRA SIZE (IF ANY) OF IOERBLOK 00458000
  536. DROP R1 00459000
  537. CALL DMKFRET RETURN TO FREE STORAGE 00460000
  538. SLR R1,R1 00461000
  539. ST R1,VDEVIOER DON'T FRET IT TWICE 00462000
  540. NI VDEVFLAG,X'FF'-VDEVUC INDICATE NO SENSE BYTES 00463000
  541. DROP R8 00464000
  542. DG06A EQU * START UP THE I/O OPERATION 00465000
  543. OI IOBFLAG,IOBHVC INDICATE HYPERVISOR CALL I/O 00466000
  544. OI VMRSTAT,VMIOWAIT FLAG USER IN "IOWAIT" PLEASE, 00467000
  545. LA R15,1 * ADD 1 TO THE STARTIO COUNT 00468000
  546. AL R15,VMIOCNT * FOR ACCOUNTING 00469000
  547. ST R15,VMIOCNT * 00470000
  548. CALL DMKIOSQV USE VIRTUAL I/O ENTRY POINT TO GET STATS 00471000
  549. * (NOTE - DMKIOSQV STORES R11 IN IOBUSER) 00472000
  550. GOTO DMKDSPCH THEN LET "DISPATCH" TAKE CARE OF IT. 00473000
  551. * 00474000
  552. EJECT 00475000
  553. * 00476000
  554. * SUBROUTINE TO BRING IN A PAGE (WITHOUT LOCKING IT) 00477000
  555. * (TO SAVE SPACE - CALLED IN SEVERAL PLACES) 00478000
  556. * R5 = RETURN REGISTER. 00479000
  557. * 00480000
  558. DGTRANS0 SLR R1,R1 ENTER HERE TO BRING IN PAGE 0. 00481000
  559. * 00482000
  560. DGTRANS DS 0H 00483000
  561. SL R8,VMDVSTRT MAKE R8 "RELATIVE" ACROSS TRANS CALL 00484000
  562. ALTER3 TRANS 2,1,OPT=(BRING,DEFER),ADEX=ERROR6 GET PAGE @V304735 00485000
  563. CALL DMKPSACC CHECK IF SHARED PAGE CHANGED @V304735 00486000
  564. BZ NOTCHG3 NOT CHANGED - CONTINUE @V304735 00487000
  565. CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00487100
  566. B ALTER3 NOW - REISSUE THE TRANS CALL @V304735 00490000
  567. NOTCHG3 AL R8,VMDVSTRT LET R8 AGAIN = (VDEVBLOK) @V304735 00491000
  568. BR R5 RETURN TO CALLER @V304735 00492000
  569. EJECT 00493000
  570. USING SAVEAREA,R13 @V304735 00494000
  571. COPYPAGE SVC 20 GET A PLACE TO SAVE REGISTERS @V304735 00495000
  572. STM R0,R11,SAVEREGS SAVE THESE @V304735 00496000
  573. ST R14,SAVEWRK9 SAVE RETURN ADDRESS @V304735 00497000
  574. XC SAVER12,SAVER12 SET UP FOR RELEASE (SVC-16) @V304735 00498000
  575. LA R15,1 GET INCREMENT OF 1 @V407508 00498100
  576. AL R15,SHRLKCNT ADD ONE TO CPSHRLK COUNT @V407508 00498200
  577. ST R15,SHRLKCNT STORE UPDATED COUNT @V407508 00498300
  578. OI CPSTAT2,CPSHRLK FREEZE THE SYSTEM @V304735 00499000
  579. CALL DMKPTRFR,AFFINITY GET A NEW PAGE @VA10216 00500050
  580. L R15,SHRLKCNT GET CURRENT CPSHRLK COUNT @V407508 00500100
  581. BCTR R15,0 DECREMENT COUNT BY 1 @V407508 00500200
  582. ST R15,SHRLKCNT STORE UPDATED COUNT @V407508 00500300
  583. LTR R15,R15 TEST IF THE COUNT IS NOW 0 @V407508 00500400
  584. BNZ *+8 NO, SKIP RESET OF CPSHRLK @V407508 00500500
  585. NI CPSTAT2,X'FF'-CPSHRLK NOW CAN RUN USERS @V304735 00501000
  586. MVI CORFLAG-CORTABLE(R7),CORFLUSH @V408246 00501100
  587. OI RCWCTL,RCWSHR FLAG GOTTEN FROM DMKPTRFR @V304735 00502000
  588. LR R4,R7 CORTABLE ADDRESS OF THIS PAGE @V304735 00503000
  589. SL R4,ACORETBL LEAVE INDEX PORTION OF CORTABLE @V304735 00504000
  590. SLL R4,8 R4 = NOW REAL PAGE ADDRESS @V304735 00505000
  591. L R3,F4096 4096 BYTES TO MOVE @V304735 00506000
  592. LR R5,R3 ALSO FOR 'R1+1' REGISTER @V304735 00507000
  593. N R2,XPAGNUM DROP OFF DISPLACEMENT @V304735 00508000
  594. MVCL R4,R2 MOVE ORIGINAL TO NEW @V304735 00509000
  595. SL R4,F4096 'MVCL' CLOBBERED R4 @V304735 00510000
  596. L R2,SAVER2 RESTORE ORIGINAL PAGE ADDRESS @V304735 00511000
  597. LR R5,R2 GET ORIGINAL PAGE ADDRESS @V304735 00512000
  598. N R5,XPAGNUM CLEAR DISPLACEMENT @V304735 00513000
  599. SRL R5,8 INDEX INTO CORETBL @V304735 00514000
  600. AL R5,ACORETBL FIND ACTUAL CORETBL ENTRY @V304735 00515000
  601. L R5,CORSWPNT-CORTABLE(,R5) POINTER TO SWAP @V304735 00516000
  602. L R5,SWPFLAG-SWPFLAG(,R5) GET KEYS. @V304735 00517000
  603. N R5,=A(X'F8F8') CLEAR CHANGE/REFERENCE BITS @V304735 00518000
  604. LA R4,2048(,R4) LAST HALF OF NEW PAGE @V304735 00519000
  605. SSK R5,R4 SET UP THE KEY @V304735 00520000
  606. SRL R5,8 POSITION FOR FIRST HALF PAGE @V304735 00521000
  607. N R4,XPAGNUM BACK TO BEGINING ADDRESS @V304735 00522000
  608. SSK R5,R4 SET THE REAL KEY @V304735 00523000
  609. L R1,SAVER2 GET ADDRESS OF ORIGINAL PAGE @V304735 00524000
  610. N R1,F4095 LEAVE JUST THE DISPLACEMENT @V304735 00525000
  611. OR R1,R4 PUT IN REPLACEMENT PAGE NUMBER @V304735 00526000
  612. ST R1,SAVER2 THIS BECOMES NEW PAGE ADDRESS @V304735 00527000
  613. CALL DMKPTRUL UNLOCK THE ORIGINAL PAGE @V304735 00528000
  614. LM R0,R11,SAVEREGS RESTORE ALL THE REMAINING @V304735 00529000
  615. NI RCWCTL,X'FF'-RCWIO RESET LOCK FLAG @VA05378 00529100
  616. L R14,SAVEWRK9 RESTORE RETURN ADDRESS @V304735 00530000
  617. SVC 16 NOW RELEASE THIS SAVE AREA. @V304735 00531000
  618. BR R14 RETURN TO CALLER @V304735 00532000
  619. EJECT 00533000
  620. DGMOVESK EQU * @VA03176 00534000
  621. SPACE 1 00535000
  622. * THIS SUBROUTINE MOVES DATA FROM THE VIRTUAL ADDRESS 00536000
  623. * CONTAINED IN R1 TO 'JSEEKA'. SINCE SIX BYTES OF DATA 00537000
  624. * MAY CROSS A PAGE BOUNDARY, A SUBSEQUENT TRANS MAY 00538000
  625. * BE NECESSARY. THE LENGTH OF THE SEEK ARGUMENT IN R3 00539000
  626. * IS VALIDATED (MUST BE SIX). ALSO, THE CYLINDER 00540000
  627. * SPECIFICATION IS LOADED INTO R15 PRIOR TO RETURN. 00541000
  628. * 00542000
  629. CL R3,F6 VALIDATE PROPER LENGTH @VA03176 00543000
  630. BNE ERROR7 ERROR IF NOT @VA03176 00544000
  631. BAL R5,DGTRANS BRING IN THE SEEK ARG PAGE @VA03176 00545000
  632. LNR R5,R2 COMPUTE NUM OF BYTES THIS PAGE @VA03176 00546000
  633. N R5,F4095 R5 CONTAINS THE COUNT @VA03176 00547000
  634. BZ SKLNOK ARGUMENT WAS ON PAGE BOUNDARY @VA03176 00548000
  635. CLR R5,R3 CHECK AGAINST WHAT'S NEEDED @VA03176 00549000
  636. BNL SKLNOK ALL ARE PRESENT @VA03176 00550000
  637. LR R3,R5 SET ACCORDINGLY @VA03176 00551000
  638. SKLNOK BCTR R3,0 DECREMENT LENGTH FOR EXECUTE @VA03176 00552000
  639. LA R5,JSEEKA ADDRESS SEEK ARGUMENT TARGET @VA03176 00553000
  640. EX R3,EXMVC MOVE PART OR ALL @VA03176 00554000
  641. C R3,F5 DID WE MOVE ALL? @VA03176 00555000
  642. BNL DGMVEXIT YES, GET OUT @VA03176 00556000
  643. * 00557000
  644. LA R1,1(R3,R1) SET TO GET NEXT PAGE @VA03176 00558000
  645. BAL R5,DGTRANS GET REAL ADDRESS @VA03176 00559000
  646. LA R5,JSEEKA+1(R3) RESET FOR REM OF TARGET @VA03176 00560000
  647. S R3,F4 COMPUTE HOW MUCH TO MOVE @VA03176 00561000
  648. LCR R3,R3 ... @VA03176 00562000
  649. EX R3,EXMVC MOVE REMAINDER OF SEEK @VA03176 00563000
  650. * 00564000
  651. DGMVEXIT L R15,JSEEKA LOAD CYLINDER SPECIFICATION @VA03176 00565000
  652. BR R4 RETURN @VA03176 00566000
  653. SPACE 2 00567000
  654. EXMVC MVC 0(0,R5),0(R2) MOVE ARGUMENT @VA03176 00568000
  655. DROP R9,R12 THRU WITH THESE FOR NOW. 00569000
  656. EJECT 00570000
  657. * 00571000
  658. DGRETURN DS 0H RETURNS HERE WHEN TASK IS FINISHED. 00572000
  659. * 00573000
  660. USING *,R12 (TEMPORARILY) 00574000
  661. L R12,=A(DMKDGD) COMMON ADDRESSABILITY PLEASE 00575000
  662. USING DMKDGD,R12 ... 00576000
  663. USING IOBLOK,R10 R10 & R12 THE ONLY INFO. WE'VE GOT. 00577000
  664. USING VMBLOK,R11 R11 = A(VMBLOK) IS ALSO INTACT 00578000
  665. CL R10,IOBLINK IS IT A COPIED IOBLOK ? @VA01004 00579000
  666. BNE DG07WAIT IF YES, WAIT FOR DEVICE END. @VA01004 00580000
  667. NI VMQLEVEL,X'FF'-(VMCOMP+VMLOPRI) UNFLAG COMPUTE BOUND 00581000
  668. L R9,IOBCAW REFERENCE RCWTASK AGAIN 00582000
  669. SL R9,F16 ... 00583000
  670. USING JRCWTASK,R9 ... 00584000
  671. L R8,IOBMISC RETRIEVE VDEVBLOK DISPLACEMENT 00585000
  672. AL R8,VMDVSTRT AND DEVELOP ADDRESS 00586000
  673. USING VDEVBLOK,R8 00587000
  674. SLR R15,R15 CLEAR OUT ACTIVE IOBLOK POINTER, AND 00588000
  675. ST R15,VDEVIOB SET RETURN CODE REGISTER = 0 00589000
  676. NI VDEVSTAT,X'FF'-VDEVBUSY AND MARK DEVICE NOT BUSY 00590000
  677. TM IOBSTAT,IOBFATAL+IOBCC3 ANY TROUBLE WITH I/O ? 00591000
  678. BZ DG10 NO 00592000
  679. * SOME KIND OF TROUBLE OCCURRED: 00593000
  680. DG07 DS 0H IF ERROR, RETURN CONDITION-CODE 3 TO USER 00594000
  681. TM VMESTAT,VMEXTCM IN EXTENDED CONTROL MODE NOW ? 00595000
  682. BZ DG07V NO. 00596000
  683. OI VMPSW+2,X'30' YES - SET CONDITION-CODE 3 00597000
  684. B DG07V+4 00598000
  685. DG07V OI VMPSW+4,X'30' CONDITION-CODE 3 TO VM PSW 00599000
  686. BAL R5,DGTRANS0 FIND USER'S PAGE 0, 00600000
  687. TM IOBSTAT,IOBCC1 WAS IT CONDITION-CODE 1 ? 00601000
  688. BZ DG08 NOPE - I/O COMPLETE WITH ERRORS, THEN. 00602000
  689. SLR R14,R14 IF CC 1, RETURN CSW+4/CSW+5 ONLY 00603000
  690. SLR R15,R15 ... 00604000
  691. ICM R15,12,IOBCSW+4 ... 00605000
  692. B DG09 AND STORE SAME IN USER'S PAGE 0. 00606000
  693. SPACE 00607000
  694. * FOR A COPIED IOBLOK, FRET THE IOERBLOK (IF ANY) & IOBLOK, 00608000
  695. * AND WAIT FOR THE FINAL INTERRUPT TO COME IN: 00609000
  696. DG07WAIT BAL R5,FRETIOB "FRET" THE BLOCK(S) @VA01004 00610000
  697. GOTO DMKDSPCH AND GO WAIT FOR FINAL INTERRUPT. @VA01004 00611000
  698. DG08 LM R14,R15,IOBCSW REAL CSW INTO R14-R15 00612000
  699. L R1,IOBCAW ACCESS REAL CAW @VA03750 00613000
  700. LA R1,0(,R1) CLEAR KEY..ETC @VA03750 00614000
  701. SLR R14,R1 MAKE ADDRESS RELATIVE @VA03750 00615000
  702. AL R14,JRCWVCAW NOW MAKE IT A VIRTUAL ADDRESS 00616000
  703. USING PSA,R2 00617000
  704. DG09 STM R14,R15,CSW AND STORE IN USER'S CSW 00618000
  705. DROP R2 00619000
  706. L R1,IOBIOER DO WE HAVE ANY SENSE BYTE INFORMATION ? 00620000
  707. LTR R1,R1 ... 00621000
  708. BZ ERROR13 IF NOT, NOTHING TO DO HERE. 00622000
  709. ST R1,VDEVIOER STORE A(IOERBLOK) IN VDEVBLOK 00623000
  710. OI VDEVFLAG,VDEVUC SIGNAL: SENSE BYTES AVAILABLE 00624000
  711. SR R1,R1 AND CLEAR IOBIOER 00625000
  712. ST R1,IOBIOER (SINCE WE'VE HUNG IT ON ANOTHER HOOK) 00626000
  713. DROP R8 00627000
  714. ERROR13 LA R15,13 SIGNAL: ERROR 13 TO USER 00628000
  715. * 00629000
  716. DG10 ST R15,VMGPRS+R15*4 STORE RETURN CODE IN USER'S R15, 00630000
  717. LH R4,JRCWRCNT R4 = COUNT OF CCWS 00631000
  718. DG11 TM VMRSTAT,VMLOGOFF USER LOGGING OFF? @VA01684 00632000
  719. BO DG12 SKIP UNLOCKING @VA01684 00633000
  720. LA R5,DGUNLOCK R5 = ADDRESS OF UNLOCKING LOOP @VA01684 00634000
  721. L R6,IOBCAW R6 = START OF CCWS TO BE EXAMINED 00635000
  722. LA R6,0(,R6) CLEAR KEY..ETC.. @VA03750 00636000
  723. USING RCWCCW,R6 00637000
  724. * LOOP TO PAGE-UNLOCK DATA AFTER I/O IS COMPLETE: 00638000
  725. DGUNLOCK TM RCWCTL,RCWIO+RCWSHR ANY LOCKED OR SHARED PAGES? @V304735 00639000
  726. BNZ DGUNLOK1 YES - GO HANDLE THEM @V304735 00640000
  727. AL R6,F8 IF NOT - BUMP R6 @V304735 00641000
  728. BCTR R4,R5 AND ITERATE "DGUNLOCK" LOOP. 00642000
  729. B DG12 GO FRET RCWTASK WHEN THRU. 00643000
  730. * 00644000
  731. * UNLOCK USER PAGE ON READ-WRITE (WATCH FOR IDAL STUFF): 00645000
  732. DGUNLOK1 L R3,RCWADDR ADDRESS INTO R3 (NOTE - CC STILL SET) 00646000
  733. LA R2,0(,R3) INTO R2 PLEASE, WITH NO HIGH-ORDER BYTE 00647000
  734. TM RCWCTL,RCWSHR ANY PAGES FLAGGED AS SHARED @V304735 00648000
  735. * PAGES ? 00649000
  736. BZ NONESHR NO - JUST UNLOCK THEM @V304735 00650000
  737. TM RCWFLAG,IDA IS REAL IDA FLAG ON ? @V304735 00651000
  738. BZ DGFRET2 NO - JUST RETURN THE PRIMARY PAGE@V304735 00652000
  739. L R7,0(,R3) GET ADDR. OF 1'ST IDAW IN @V304735 00653000
  740. * 2-WORD IDAL 00654000
  741. N R7,XPAGNUM DROP OFF THE DISPLACEMENT @V304735 00655000
  742. SRL R7,8 LEAVE INDEX INTO CORTABLE @V304735 00656000
  743. AL R7,ACORETBL GET THE PROPER TABLE ENTRY @V304735 00657000
  744. XC CORPGPNT-CORTABLE(4,R7),CORPGPNT-CORTABLE(R7) @V304735 00658000
  745. CALL DMKPTRFT PUT THIS PAGE ON THE FREE-LIST @V304735 00659000
  746. L R2,4(,R3) GET ADDR. OF 2'ND IDAW @V304735 00660000
  747. DGFRET2 LR R7,R2 TRANSFER ADDRESS OF REAL PAGE @V304735 00661000
  748. N R7,XPAGNUM DROP OFF THE DISPLACEMENT @V304735 00662000
  749. SRL R7,8 LEAVE INDEX INTO CORTABLE @V304735 00663000
  750. AL R7,ACORETBL GET THE PROPER TABLE ENTRY @V304735 00664000
  751. XC CORPGPNT-CORTABLE(4,R7),CORPGPNT-CORTABLE(R7) @V304735 00665000
  752. CALL DMKPTRFT PUT THIS PAGE ON THE FREE-LIST @V304735 00666000
  753. AL R6,F8 BUMP R6 FOR NEXT CCW @V304735 00667000
  754. BCTR R4,R5 PROCESS ALL CCW'S @V304735 00668000
  755. B DG12 NOW RELEASE THE RCWTASK @V304735 00669000
  756. NONESHR TM RCWFLAG,IDA IS THE REAL IDA FLAG ON ? @V304735 00670000
  757. BZ DGUNLOK2 NO - JUST UNLOCK PRIMARY ADDRESS 00671000
  758. L R2,0(,R3) GET ADDRESS OF FIRST IDAW IN 2-WORD IDAL, 00672000
  759. CALL DMKPTRUL UNLOCK THAT; 00673000
  760. L R2,4(,R3) NOW ADDRESS OF 2ND IDAW, AND 00674000
  761. DGUNLOK2 CALL DMKPTRUL UNLOCK 2ND IDAW, OR USER PAGE DIRECTLY 00675000
  762. AL R6,F8 BUMP R6 FOR NEXT TIME, AND @V304735 00676000
  763. BCTR R4,R5 ITERATE "DGUNLOCK" LOOP. 00677000
  764. * 00678000
  765. DG12 LR R1,R9 NOW 'FRET' THE RCWTASK 00679000
  766. LH R0,JRCWCCNT GET TOTAL NO. DBL WORDS IN RCWTASK 00680000
  767. CALL DMKFRET ... 00681000
  768. BAL R5,FRETIOB FRET THE IOBLOK THEN COME BACK @VA01004 00682000
  769. DGEXIT NI VMRSTAT,255-(VMIOWAIT+VMEXWAIT) CLEAR VMRSTAT @VA01004 00683000
  770. * BITS 00684000
  771. GOTO DMKDSPCH AND EXIT TO USER VIA 'DISPATCH' @VA01004 00685000
  772. SPACE 00686000
  773. FRETIOB L R1,IOBIOER IS THERE AN IO ERROR BLOCK THERE @VA01004 00687000
  774. LTR R1,R1 ... 00688000
  775. BZ DG12A NOPE - PROCEED TO FRET THE IOBLOK. 00689000
  776. LA R0,IOERSIZE SIZE OF IOERBLOK 00690000
  777. USING IOERBLOK,R1 00691000
  778. AH R0,IOEREXT ADD EXTRA SIZE (IF ANY) OF IOERBLOK 00692000
  779. DROP R1 00693000
  780. CALL DMKFRET GIVE IT BACK (BEFORE IT'S TOO LATE) 00694000
  781. DG12A LA R0,IOBSIZE NOW FRET THE IOBLOK 00695000
  782. LR R1,R10 ... 00696000
  783. CALL DMKFRET ... 00697000
  784. BR R5 AND RETURN TO MAIN DMKDGD CODE @VA01004 00698000
  785. EJECT 00699000
  786. * ERROR-RETURNS (SEE ALSO PROLOG ABOVE): 00700000
  787. * 00701000
  788. ERROR1 LA R15,1 ERROR FROM DMKSCNVU - MUST BE ILLEGAL DEVICE 00702000
  789. B SETCC1 THAT = ERROR 1. 00703000
  790. * 00704000
  791. ERROR2 LA R15,2 INVALID DEVICE TYPE @V2A2029 00705000
  792. B SETCC1 THAT = ERROR 2. 00706000
  793. * 00707000
  794. ERROR3 LA R15,3 ATTEMPT TO WRITE ON A READ-ONLY DISK 00708000
  795. B SETCC1 THAT = ERROR 3. 00709000
  796. * 00710000
  797. ERROR4 LA R15,4 CYLINDER NUMBER NOT WITHIN RANGE OF USER'S DISK 00711000
  798. * THAT = ERROR 4. 00712000
  799. B SETCC1 GO SET CONDITION CODE @VA01365 00713000
  800. ERROR51 LA R15,5 DEVICE PATH NOT FREE, INT. @VA01365 00714000
  801. * PENDING 00715000
  802. SETCC1 DS 0H SET CONDITION-CODE = 1 FOR ERRORS 1-4: 00716000
  803. TM VMESTAT,VMEXTCM IN EXTENDED CONTROL MODE NOW ? 00717000
  804. BZ SETCC1V NO. 00718000
  805. OI VMPSW+2,X'10' YES - SET CONDITION-CODE 1 00719000
  806. B DG14 00720000
  807. SETCC1V OI VMPSW+4,X'10' CONDITION-CODE 1 TO VM PSW 00721000
  808. B DG14 AND GO STORE R15 ERROR CODE. 00722000
  809. * 00723000
  810. ERROR5 LA R15,5 CALLER'S CAW NOT DOUBLE-WORD ALIGNED 00724000
  811. B SETCC2 THAT = ERROR 5. 00725000
  812. * 00726000
  813. ERROR6 LA R15,6 CCW OR SEEK/SEARCH ARGUMENTS NOT WITHIN USER CORE 00727000
  814. B SETCC2 THAT = ERROR 6. 00728000
  815. * 00729000
  816. ERROR7 LA R15,7 USER CCW IS INVALID 00730000
  817. B SETCC2 THAT = ERROR 7. 00731000
  818. * 00732000
  819. ERROR8 LA R15,8 READ/WRITE BYTE-COUNT = 0 00733000
  820. B SETCC2 THAT = ERROR 8. 00734000
  821. * 00735000
  822. ERROR9 LA R15,9 READ/WRITE BYTE-COUNT GREATER THAN 2048 00736000
  823. B SETCC2 THAT = ERROR 9. 00737000
  824. * 00738000
  825. ERROR10P AL R6,F8 BUMP FOR LAST CCW @V304735 00739000
  826. ERROR10 LA R15,10 READ/WRITE BUFFER NOT WITHIN USER MACHINE 00740000
  827. B SETCC2 THAT = ERROR 10. 00741000
  828. * 00742000
  829. ERROR11D SL R6,F8 DECREMENT IF WE RUN OUT OF ROOM @V304735 00743000
  830. * 00744000
  831. ERROR11 LA R15,11 USER'S R15 AT ENTRY TOO SMALL FOR CCW-STRING 00745000
  832. B SETCC2 THESE = ERROR 11. 00746000
  833. * 00747000
  834. ERROR12 LA R15,12 CYL. NO. ON SEEK HEAD NOT = CYL NO. FROM SEEK 00748000
  835. * THAT = ERROR 12 00749000
  836. SETCC2 DS 0H SET CONDITION-CODE = 2 FOR ERRORS 5-12: 00750000
  837. TM VMESTAT,VMEXTCM IN EXTENDED CONTROL MODE NOW ? 00751000
  838. BZ SETCC2V NO. 00752000
  839. OI VMPSW+2,X'20' YES - SET CONDITION-CODE 2 00753000
  840. B DG14 00754000
  841. SETCC2V OI VMPSW+4,X'20' CONDITION-CODE 2 TO VM PSW 00755000
  842. * 00756000
  843. DG14 ST R15,VMGPRS+R15*4 RETURN R15 ERROR-CODE TO THE USER, 00757000
  844. LTR R1,R10 ANY FREE STORAGE IN USE YET ? 00758000
  845. BZ DGEXIT IF NOT, PREPARE TO EXIT FORTHWITH. 00759000
  846. LR R4,R6 POINTER TO CURRENT CCW INTO R4, 00760000
  847. L R1,IOBCAW ACCESS REAL CAW @VA03750 00761000
  848. LA R1,0(,R1) CLEAR KEY..ETC.. @VA03750 00762000
  849. SLR R4,R1 SUBTRACT STARTING POINT @VA03750 00763000
  850. SRA R4,3 BYTES TO DOUBLE WORDS (AND SET CC) 00764000
  851. BP DG11 IF R4 > 0, GO UNLOCK HALF-FINISHED STUFF. 00765000
  852. B DG12 IF NOT, GO RETURN THE FREE STORAGE USED. 00766000
  853. EJECT 00766020
  854. CHKMOUNT EQU * @V60B6B8 00766040
  855. * 00766060
  856. * IF THE VIRTUAL ADDRESS WAS NOT FOUND BY DMKSCNVU, 00766080
  857. * IT MAY BE BECAUSE THE MSS IS IN THE PROCESS 00766100
  858. * OF MOUNTING A REQUIRED SYSTEM VOLUME. 00766120
  859. * 00766140
  860. * TEST THE QUEUE OF TASKS WAITING FOR MSS MOUNTS TO 00766160
  861. * SEE IF THAT IS THE CASE HERE. IF IT IS, SET 00766180
  862. * UP A CPEXBLOK WHICH WILL BE DISPATCHED BY 00766200
  863. * LOGON, LINK, OR ATTACH WHEN THE MSS VOLUME 00766220
  864. * MOUNT IS COMPLETE. 00766240
  865. * 00766260
  866. TM PSAMSS,MSSPRES DOES THE SYSTEM HAVE MSS SUPPORT @V60B6B8 00766280
  867. BZ ERROR1 NO, CAN'T BE MSS MOUNT @V60B6B8 00766300
  868. L R3,=V(DMKSSSMQ) Q OF MSS VOLUME MOUNTS @V60B6B8 00766320
  869. L R3,0(R3) @VA11115 00766330
  870. TESTCOM EQU * IS THERE A Q @V60B6B8 00766340
  871. LTR R3,R3 0 PTR = Q END @V60B6B8 00766360
  872. BZ ERROR1 NOT WAITING FOR THIS VIRT ADDR @V60B6B8 00766380
  873. USING OSVSCOM,R3 ASSEMBLER ADDRESSABILITY @V60B6B8 00766400
  874. CLC VMUSER(8),MSSUSER IS Q ENTRY FOR THIS USER @V60B6B8 00766420
  875. BNE NXTCOM NO, GET NEXT ENTRY @V60B6B8 00766440
  876. L R2,MSSTASK1 CPEXBLOK FOR MOUNT REQUESTOR @V60B6B8 00766460
  877. CH R5,CPEXMISC-CPEXBLOK(R2) THIS VADDR WAITING? @V60B6B8 00766480
  878. BNE NXTCOM NO, SEE IF WAITING FOR MORE @V60B6B8 00766500
  879. LA R0,CPEXSIZE NO OF D-WORDS IN A CPEXBLOK @V60B6B8 00766520
  880. CALL DMKFREE GET A CPEXBLOK @V60B6B8 00766540
  881. USING CPEXBLOK,R1 ASSEMBLER ADDRESSABILITY @V60B6B8 00766560
  882. ST R1,MSSTASK2 PTR IN THE MASTER CONTROL BLOCK @V60B6B8 00766580
  883. STM R0,R15,CPEXREGS SAVE CURRENT REGS @V60B6B8 00766600
  884. LA R0,DGDRST2 RESTART ADDR @V60B6B8 00766620
  885. ST R0,CPEXADD ADDR TO BE DISPATCHED @V60B6B8 00766640
  886. ST R5,CPEXMISC SAVE VIRT DEV ADDR @V60B6B8 00766660
  887. OI VMRSTAT,VMCFWAIT PLACE VIRT MACH IN WAIT @V60B6B8 00766680
  888. GOTO DMKDSPCH EXIT FOR NOW - WILL BE DISPATCHED@V60B6B8 00766700
  889. * AT DGDRST2 WHEN MOUNT COMPLETE 00766720
  890. DROP R1 @V60B6B8 00766740
  891. NXTCOM EQU * GET NEXT MSSCOM BLOCK @V60B6B8 00766760
  892. L R3,MSSNEXT CHAIN PTR @V60B6B8 00766780
  893. B TESTCOM GO TEST IT @V60B6B8 00766800
  894. DROP R3 @V60B6B8 00766820
  895. EJECT 00767000
  896. * CONSTANTS: 00768000
  897. * 00769000
  898. FNUMCC DC A(JNUMCC) NO. OF BYTES RESERVED FOR CONTROL WORDS 00770000
  899. F2048 DC F'2048' ALSO = X'00000800' 00771000
  900. * 00771060
  901. * PREFIX CCWS TO BE PLACED IN THE REAL CHANNEL PROGRAM 00771120
  902. * IF THE REAL DEVICE IS A 3330V 00771180
  903. * 00771240
  904. DS 0D @V60B6B8 00771300
  905. MSSPRE EQU * @V60B6B8 00771360
  906. DC X'07',XL3'0',AL1(CC),AL3(6) SEEK CCW @V60B6B8 00771420
  907. DC X'08',XL3'0',AL1(CC),AL3(1) TIC CCW @V60B6B8 00771480
  908. DC X'03',XL3'0',AL1(0),AL3(1) NOP CCW @V60B6B8 00771540
  909. PREL EQU *-MSSPRE PREFIX LENGTH @V60B6B8 00771600
  910. N3 EQU 3 @V60B6B8 00771660
  911. TICOFF EQU 9 @V60B6B8 00771720
  912. FULL EQU X'FF' CONSTANT FOR FLAG BYTE CLEARING @V60B6B8 00771780
  913. ZERO EQU X'00' @V60B6B8 00771840
  914. * 00772000
  915. LTORG 00773000
  916. EJECT 00774000
  917. OSVSCOM MSSCOM @V60B6B8 00774500
  918. COPY IOBLOKS NOTE: SEE OUR DSECT FOLLOWING THIS ... 00775000
  919. EJECT 00776000
  920. IOBLOK DSECT OUR "IOTASK" AND FILLED-IN CCW-CHAIN (R10) 00777000
  921. * 00778000
  922. ORG IOBLOK START AT THE BEGINNING 00779000
  923. * 00780000
  924. JRCWTASK DSECT RCWTASK INCLUDING HEADER AND CCW-CHAIN (R9) 00781000
  925. * 00782000
  926. *** RCWTASK - TRANSLATED VIRTUAL IO CCW PACKAGE 00783000
  927. * 00784000
  928. JRCWPNT DS 1F = RCWPNT 00785000
  929. JRCWVCAW DS 1F = RCWVCAW 00786000
  930. JRCWVCNT DS 1H = RCWVCNT 00787000
  931. JRCWRCNT DS 1H = RCWRCNT 00788000
  932. JRCWHEAD DS 1H = RCWHEAD 00789000
  933. JRCWCCNT DS 1H NOTE: USED FOR TOTAL NO. DBL-WORDS USED. 00790000
  934. * 00791000
  935. * NOTE: RCW HEADER = 2 DBL WORDS = 16 BYTES 00792000
  936. * 00793000
  937. DS 0D RCWCCW FOLLOWS: 00794000
  938. JCCW1ST CCW X'07',JSEEKA,CC,6 SEEK (07) OR SEEK HEAD (1B) 00795000
  939. CCW X'23',JSCTNO,CC,1 SET SECTOR @V2A2029 00796000
  940. CCW X'31',JSEARCH,CC,5 SEARCH 00797000
  941. CCW X'08',*-8,0,0 TIC BACK TO SEARCH 00798000
  942. CCW X'00',*-*,SILI,*-* READ (06) OR WRITE (05) 00799000
  943. * 00800000
  944. JSEEKA DC XL6'00' 6-BYTE SEEK ARGUMENT 00801000
  945. JSEARCH DC XL5'00' 5-BYTE SEARCH ARGUMENT 00802000
  946. JSCTNO DC X'00' 1-BYTE SECTOR NUMBER @V2A2029 00803000
  947. * 00804000
  948. JIDAL1 DC F'0' IDAW WORDS (IF NEEDED) 00805000
  949. JIDAL2 DC F'0' ... 00806000
  950. * 00807000
  951. JNUMCC EQU *-JSEEKA NUMBER OF BYTES FOR CONTROL WORDS 00808000
  952. * 00809000
  953. JNUM3330 EQU (*-JCCW1ST)/4 NO. OF FULL WORDS PER READ/WRITE @V2A2029 00810000
  954. JNUMOTH EQU JNUM3330-2 DITTO FOR 2311/2319 (NO SET-SECTOR USED) 00811000
  955. EJECT 00812000
  956. COPY IOER 00813000
  957. COPY VMBLOK 00814000
  958. COPY EQU 00815000
  959. COPY SAVE @V304735 00816000
  960. COPY CORE @V304735 00817000
  961. COPY VBLOKS 00818000
  962. COPY RBLOKS @V60B6B8 00818500
  963. COPY DEVTYPES 00819000
  964. PSA 00820000
  965. END 00821000