Table of Contents

DMKGIO Source

References

Source Listing

DMKGIO.ASSEMBLE.txt
  1. GIO TITLE 'DMKGIO (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V200020 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * DMKGIO 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * TO ALLOW CP TO DO ERROR RECOVERY FOR I/O OPERATIONS THAT 00009000
  10. * WERE INITIATED BY CMS. 00010000
  11. * 00011000
  12. * ATTRIBUTES - 00012000
  13. * REENTRANT, PAGEABLE, CALLED VIA SVC 00013000
  14. * 00014000
  15. * ENTRY POINT - 00015000
  16. * DMKGIOEX 00016000
  17. * 00017000
  18. * ENTRY CONDITIONS - 00018000
  19. * GPR 1=ADDRESS OF USER'S "R1" AND "R2" REGISTERS 00019000
  20. * GPR 11=ADDRESS OF USER'S VMBLOK 00020000
  21. * GPR 12=BASE ADDRESS OF DMKGIO 00021000
  22. * 00022000
  23. * USER'S "R1" REGISTER HOLDS THE VIRTUAL DEVICE ADDRESS 00023000
  24. * USER'S "R2" REGISTER HOLDS THE VIRTUAL CAW ADDRESS * 00024000
  25. * EXIT CONDITIONS - 00025000
  26. * THE USER'S CONDITION CODE IN THE VIRTUAL PSW, AND GENERAL 00026000
  27. * REGISTER 15 IS CHANGED BASED ON THE FOLLOWING CONDITIONS. 00027000
  28. * 00028000
  29. * CC=0 I/O COMPLETED SUCCESSFULLY 00029000
  30. * 00030000
  31. * CC=1 ERROR CONDITION, REG.15 CONTAINS RETURN CODE: 00031000
  32. * R15=1 DEVICE NOT ATTACHED 00032000
  33. * 00033000
  34. * CC=2 EXCEPTION CONDITIONS; R15 CONTAINS RETURN CODE 00034000
  35. * R15=2 UNIT EXCEPTION BIT IN DEV STATUS BYTE. 00035000
  36. * R15=3 WRONG LENGTH RECORD DETECTED. 00036000
  37. * 00037000
  38. * CC=3 ERROR CONDITION, REG.15 CONTAINS RETURN CODE 00038000
  39. * 00039000
  40. * R15=13 A PERMANENT I/O ERROR OCCURRED. 00040000
  41. * THE 2 LOW ORDER POS. OF THE USER'S CAW 00041000
  42. * REGISTER CONTAINS THE FIRST 2 SENSE BYTES. 00042000
  43. * 00043000
  44. * 00044000
  45. * CALLS TO OTHER ROUTINES - 00045000
  46. * DMKFREE USED TO OBTAIN STORAGE FOR BUILDING IOBLOK. 00046000
  47. * DMKFRET USED TO RETURN STORGE FOR IOBLOK. 00047000
  48. * DMKIOSQV TO QUE THE I/O REQUEST. 00048000
  49. * DMKCCWTR TO BUILD A REAL CHANNEL PROG. FROM VIRTUAL CCW'S. 00049000
  50. * DMKDSPCH TO ALLOW OTHER ROUTINES TO RUN. 00050000
  51. * DMKUNTRN TO TRANSLATE THE REAL CSW TO A VIRTUAL CSW. 00051000
  52. * DMKUNTFR TO FREE STORAGE USED FOR BUILDING REAL CCW'S. 00052000
  53. * DMKSCNVU - TO LOCATE A VIRTUAL DEVICE 00053000
  54. * DMKSCNVD - TO GET THE DEVICE ADDRESS IN CCU FORM 00053500
  55. * 00054000
  56. * EXTERNAL REFERENCES - 00055000
  57. * NONE 00056000
  58. * 00057000
  59. * 00058000
  60. * TABLES AND WORK AREA'S - 00059000
  61. * NONE 00060000
  62. * 00061000
  63. * 00062000
  64. * REGISTER USAGE - 00063000
  65. * GPR 4=VIRTUAL DEVICE 00064000
  66. * GPR 5=VIRTUAL CAW 00065000
  67. * GPR 6=ADDRESS OF VDEVBLOK 00066000
  68. * GPR 7=SCRATCH 00067000
  69. * GPR 8=ADDRESS OF VDEVBLOK 00068000
  70. * GPR 9=SCRATCH 00069000
  71. * GPR 10=ADDRESS OF IOBLOK 00070000
  72. * GPR 11=ADDRESS OF VMBLOK 00071000
  73. * GPR 12=BASE ADDRESS OF DMKGIO 00072000
  74. * GPR 13=ADDRESS OF A SAVE AREA 00073000
  75. * 00074000
  76. * 00075000
  77. * OPERATION - 00076000
  78. * DMKGIO IS CALLED BY DMKHVC WHEN A USER HAS ISSUED A 00077000
  79. * HYPERVISOR CALL FOR TAPE, UNIT RECORD, OR NON-STANDARD 00078000
  80. * DISK I/O CHANNEL PROGRAMS. A CHECK IS MADE TO VALIDATE THAT 00079000
  81. * THE DEVICE ADDRESS IS CORRECT AND, FOR MINIDISKS, THAT 00079500
  82. * THE DEVICE IS NOT RESERVED BY ANOTHER USER. IF NO ERROR 00080000
  83. * IS DETECTED, DMKGIO 00080500
  84. * BUILDS AN IOBLOK AND CALLS DMKCCWTR. ON RETURN FROM DMKCCWTR 00081000
  85. * A CALL IS MADE TO DMKIOSQV TO SCHEDULE A VIRTUAL DEVICE 00082000
  86. * REQUEST. WHEN THE I/O OPERATION COMPLETES DMKGIO REGAINS 00083000
  87. * CONTROL AT LABEL "DIAGRTN". THE IOBLOK IS CHECK FOR AN ERROR 00084000
  88. * CONDITION AND IF NONE EXISTS,THE IOBLOK IS FRETTED, THE 00085000
  89. * CONDITION CODE IS SET AND RETURN IS TO DMKDSPCH. 00086000
  90. * 00087000
  91. * OTHERWISE DMKUNTRN IS CALLED TO CONVERT THE REAL CSW TO A 00088000
  92. * VIRTUAL CSW. THE USER'S PAGE 0 IS THEN READ IN AND THE 00089000
  93. * CSW MOVE INTO IT. A RETURN CODE IS LOADED INTO REG.15 00090000
  94. * AND THE PSW "CONDITION CODE" IS SET. FREE STORAGE IS 00091000
  95. * RETURNED TO THE SYSTEMS POOL AND RETURN IS MADE TO DMKDSPCH. 00092000
  96. * 00093000
  97. * 00094000
  98. * 00095000
  99. *. 00096000
  100. EJECT 00097000
  101. COPY OPTIONS @V200020 00098000
  102. COPY LOCAL @V200020 00099000
  103. DMKGIO START 00100000
  104. SPACE 00101000
  105. DC CL8'DMKGIO' PAGEABLE MODULE IDENTIFIER @V200020 00102000
  106. SPACE 00103000
  107. EXTRN DMKCCWTR,DMKIOSQV @V200020 00104000
  108. EXTRN DMKUNTRN,DMKUNTFR,DMKSCNVU @V200020 00105000
  109. EXTRN DMKSCNVD @V407438 00105100
  110. SPACE 00106000
  111. USING *,R12 00107000
  112. USING PSA,R0 00108000
  113. USING VMBLOK,R11 00109000
  114. USING SAVEAREA,R13 00110000
  115. DMKGIOEX RELOC , VIRTUAL I/O WITHOUT INTERRUPTS @V200020 00111000
  116. NI VMPSW+2,X'FF'-X'30' SET CC=0 00112000
  117. NI VMPSW+4,X'FF'-X'30' SET CC=0 00113000
  118. SPACE 1 00114000
  119. L R4,0(,R1) LOAD REG1 W/ VIRTUAL DEV. ADDR. 00115000
  120. L R5,0(,R2) LOAD REG5. W/ VIRTUAL CAW ADDRESS. 00116000
  121. GIORST2 LR R1,R4 LOAD REG1 W/ VIRTUAL I/O ADDRESS @V407438 00117000
  122. CALL DMKSCNVU 00118000
  123. BNZ NOUNIT BRANCH IF DEVICE NO ATTACHED...CC= 1 00119000
  124. LR R6,R8 SAVE VDEVBLOK ADDR. IN R6 00120000
  125. USING VDEVBLOK,R8 00121000
  126. TM VDEVSTAT,VDEVDED IS DEV. ATTACHED ? 00122000
  127. BO DEVATTCH BRANCH IF YES 00123000
  128. TM VDEVTYPC,CLASDASD IS DEVICE DASDI ? 00124000
  129. BZ NOUNIT DEV MUST BE DASDI IF NOT ATTACHED. 00125000
  130. DEVATTCH TM VDEVSTAT,VDEVCHAN+VDEVBUSY+VDEVPEND ANYTHING @VA01365 00126000
  131. * HAPPENING? 00127000
  132. BNZ NOPATH YES, CANT HANDLE THEN @VA01365 00128000
  133. TM VDEVFLG2,VDEVRRF RES/REL FTR ON THIS MDISK? @V407438 00128020
  134. BZ DEVFREE NOPE, BR. @V407438 00128040
  135. L R9,VDEVRRB GET THE ADDRESS OF THE VRRBLOK @V407438 00128060
  136. USING VRRBLOK,R9 ADDRESS THE VRRBLOK @V407438 00128080
  137. TM VDEVFLG2,VDEVRES MDISK RESERVED FOR THIS USER @V407438 00128100
  138. BO DEVFREE YES, LET HIM PASS, BR. @V407438 00128120
  139. TM VRRSTAT,VRRRES ANYONE ELSE HAVE IT RESERVED? @V407438 00128140
  140. BZ DEVFREE NOPE, CONTINUE. @V407438 00128160
  141. LA R0,CPEXSIZE SIZE OF A CPEXBLOK @V407438 00128180
  142. CALL DMKFREE GET ONE PLEASE @V407438 00128200
  143. USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK FROM R1 @V407438 00128220
  144. STM R0,R15,CPEXR0 SAVE EVERYTHING JUST AS IT IS @V407438 00128240
  145. LR R3,R1 SWITCH CPEXBLOK TO R3 @V407438 00128260
  146. DROP R1 DROP USE OF CPEXBLOK FROM R1 @V407438 00128280
  147. USING CPEXBLOK,R3 AND USE R3 INSTEAD @V407438 00128300
  148. CALL DMKSCNVD GET DEVICE ADDRESS IN CCU FORM @V407438 00128320
  149. ST R1,CPEXMISC SAVE IT IN MISC FOR DMKCFPRD @V407438 00128340
  150. LA R0,GIORSTRT ADDRESS TO RESTART WITH PLEASE @V407438 00128360
  151. ST R0,CPEXADD ... @V407438 00128380
  152. L R1,VRRCPEX ADDRESS OF THE FIRST QED CPEXBLOK@V407438 00128400
  153. ST R1,CPEXFPNT PUT THIS CPEXBLOK IN THE CHAIN @V407438 00128420
  154. ST R3,VRRCPEX DITTO @V407438 00128440
  155. OI VDEVFLG2,VDEVCPEX FLAG WAITING FOR "RELEASE" @V407438 00128460
  156. OI VMRSTAT,VMIDLE DROP USER FROM QUEUE @V407438 00128480
  157. GOTO DMKDSPCH COME BACK WHEN DEVICE IS FREE @V407438 00128500
  158. * DROP FROM QUEUE, LEAVE IN EXECUTION WAIT @V407438 00128520
  159. * IF DEVICE IS RESET, CPEXADD IS SET NEGATIVE, LTR'ED BY DMKDSP@V407438 00128540
  160. GIORSTRT BM NOPATH DEVICE HAS BEEN RESET @V407438 00128560
  161. NI VMRSTAT,X'FF'-VMIDLE ALLOW BACK IN QUEUE @V407438 00128580
  162. NI VDEVFLG2,X'FF'-VDEVCPEX CFPRR - NOT WTNG ON CPEX@V407438 00128600
  163. B GIORST2 NOW GO TRY IT AGAIN SAM @V407438 00128620
  164. DROP R3,R9 NO MORE CPEXBLOK OR VRRBLOK @V407438 00128640
  165. SPACE 00128660
  166. DEVFREE EQU * HERE WHEN ACCESS TO MDISK IS FREE@V407438 00128680
  167. STH R4,VMACTDEV SAVE VIRTUAL DEVICE ADDRESS @VM01016 00131000
  168. LA R0,IOBSIZE GET AN IOB FOR THIS EVENT @VA01365 00132000
  169. CALL DMKFREE GET STORAGE FOR BUILDING IOBLOK 00133000
  170. LR R10,R1 LOAD REG10 W/ADDRESS OF IOBLOCK 00134000
  171. USING IOBLOK,R10 SET UP ADDRESSABLITY FOR IOBLOCK 00135000
  172. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK TO ZERO 00136000
  173. ST R5,IOBCAW STORE VIRTUAL CAW ADDR. IN IOBLOK 00137000
  174. OI IOBFLAG,IOBHVC SET ON IOBHVC BIT IN IOBLOK 00138000
  175. LA R9,DIAGRTN LOAD REG9 W/ RETURN ADDR. FOR DISPATCHER 00139000
  176. ST R9,IOBIRA SET RETURN ADDR. IN IRA 00140000
  177. OI VMRSTAT,VMIOWAIT FORCE USER TO WAIT FOR I/O TO FINISH 00141000
  178. ST R13,IOBMISC2 HANG ONTO SAVEAREA POINTER @V200020 00142000
  179. LA R9,0 STORE INITIAL CCWADDR (0) @VA13292 00142300
  180. ST R9,SAVEWRK8 OF CSW IN SAVEAREA @VA13292 00142600
  181. L R2,IOBCAW CCWTRANS NEEDS CAW+KEY IN GPR2. 00143000
  182. LA R9,0(,R2) CCWTRANS NEEDS CAW-KEY IN GPR9. 00144000
  183. SL R8,VMDVSTRT MAKE GPR 8 FOR RELATIVE DISPLACEMENT. 00145000
  184. ST R8,IOBMISC SAVE IT FOR LATER 00146000
  185. CALL DMKCCWTR CALL CCWTR TO BUILD A REAL CCW LIST 00147000
  186. AL R8,VMDVSTRT MAKE GPR 8 REAL ADDR. OF VDEVBLOK. 00148000
  187. TM IOBSPEC2,IOBCLN TASK ABORTED BY DMKCCW? @V407438 00148100
  188. BZ TRANSOK NOPE, CONTINUE @V407438 00148200
  189. BAL R9,FRETIOB RETURN THE IOB @V407438 00148300
  190. B NOPATH AND REFLECT TO USER @V407438 00148400
  191. SPACE 00148500
  192. TRANSOK EQU * HERE IF CCWTRANS WENT OK @V407438 00148600
  193. ST R10,VDEVIOB STORE ADDRESS OF ACTIVE IOBLOK 00149000
  194. XC VDEVCSW(8),VDEVCSW ZERO VDEVCSW @VA08386 00149500
  195. OI VDEVSTAT,VDEVBUSY MAKE VIRTUAL DEVICE BUSY 00150000
  196. LA R15,1 * ADD 1 TO THE VIRTUAL START I/O COUNT 00151000
  197. AL R15,VMIOCNT * FOR ACCOUNTING. 00152000
  198. ST R15,VMIOCNT * 00153000
  199. CALL DMKIOSQV CALL IOSQV TO PUT THIS REQUEST ON THE LIS 00154000
  200. GOTO DMKDSPCH DISPATCHER WILL RETURN WHEN I/O IS FINISH 00155000
  201. SPACE 3 00156000
  202. DIAGRTN DS 0H 00157000
  203. USING *,R12 SET UP ADDRESSABLITY 00158000
  204. SL R12,=A(DIAGRTN-DMKGIO) BACK UP TO MODULE START@V200020 00159000
  205. USING DMKGIO,R12 @V200020 00160000
  206. NI VMQLEVEL,X'FF'-(VMCOMP+VMLOPRI) UNFLAG COMPUTE BOUND 00161000
  207. L R13,IOBMISC2 RESTORE SAVEAREA BASE ADDRESS @V200020 00162000
  208. L R8,IOBMISC GET DISPLACEMENT TO VDEVBLOK 00165000
  209. AL R8,VMDVSTRT POINT TO VDEVBLOK 00166000
  210. CLI VDEVTYPC,CLASTAPE IS THIS A TAPE DEVICE? @VA12173 00166010
  211. BNE COMPLETE NO- COMPLETE @VA12173 00166040
  212. L R9,IOBCSW LOAD CCWADDRESS FROM CSW @VA13292 00166080
  213. LA R9,0(R9) CLEAR HIGH ORDER BYTE @VA13292 00166095
  214. LTR R9,R9 CCWADDRESS PRESENT @VA13292 00166110
  215. BZ COMPLETE STORE IT FOR DMKTAP IF NOT ZERO @VA13292 00166125
  216. MVC SAVEWRK8,IOBCSW @VA12173 00166130
  217. COMPLETE DS 0H @VA12173 00166160
  218. CL R10,IOBLINK FINAL INTERRUPT? @VA08386 00166300
  219. BNE FRETCOPY NO, FRET COPIED IOB @VA08386 00166600
  220. SR R0,R0 CLEAR VDEVIOB RIGHT NOW @VA03384 00167000
  221. ST R0,VDEVIOB TO AVOID POSSIBLE RESET PROBLEM @VA03384 00168000
  222. TM IOBSTAT,IOBCC3 REAL CC = 3 ON STARTIO OR DEVICE OFFLINE 00169000
  223. BO GDSTATUS YES- BRANCH 00170000
  224. ICM R7,15,IOBIOER IS THERE AN IOERBLOK @VA01599 00171000
  225. BZ TESTWLR NO, CHECK FOR WRONG LENGTH RECORD@VA01599 00172000
  226. TM VDEVTYPC,CLASDASD+CLASTAPE IS THIS A TAPE OR @VA01599 00173000
  227. * DASD DEVICE 00174000
  228. BZ GIOCONT NO, SET ERROR CONDITION @VA01599 00175000
  229. TM IOBSTAT,IOBFATAL IS THIS AN UNCORRECTABLE ERROR @VA01599 00176000
  230. BZ TESTWLR NO, TAKE NORMAL PATH @VA01599 00177000
  231. GIOCONT EQU * @VA01599 00178000
  232. LA R15,13 SET RETURN CODE TO 13. 00179000
  233. BAL R9,RTNCC3 SET PSW CONDITION CODE =3 00180000
  234. L R2,SAVER2 RESTORE POINTER TO USER'S 'R2' @V200020 00181000
  235. ST R7,VDEVIOER STORE IN VIRTUAL DEV. BLOCK. 00182000
  236. SR R1,R1 AND CLEAR IOBIOER 00184000
  237. ST R1,IOBIOER (SINCE WE'VE HUNG IT ON ANOTHER HOOK) 00185000
  238. USING IOERBLOK,R7 00186000
  239. MVC VDEVCSW(8),IOERCSW MOVE IN THE ERROR CSW 00187000
  240. CLC VDEVTYPC(2),=AL1(CLASDASD,TYP3340) 3340? @V56BDA8 00187050
  241. BNE NOT3340 NO, RETURN (OR CONTINUE AT @V56BDA8 00187100
  242. * GETRCAW) 00187150
  243. TM IOERDATA+6,CECYL CE CYLINDER? @V56BDA8 00187200
  244. BO NOT3340 YES, DONT TOUCH IT @V56BDA8 00187250
  245. SR R0,R0 CLEAR OUT REGISTER @V56BDA8 00187300
  246. IC R0,IOERDATA+6 0CCXHHHH @V56BDA8 00187350
  247. SLL R0,3 GET C512 + C256 @V56BDA8 00187400
  248. IC R0,IOERDATA+5 LOW ORDER CC @V56BDA8 00187450
  249. SH R0,VDEVRELN MAKE POSITION VIRTUAL @V56BDA8 00187500
  250. STH R0,VDEVPOSN STORE CC @V56BDA8 00187550
  251. MVN VDEVPOSN+3(1),IOERDATA+6 COPY H @V56BDA8 00187600
  252. NOT3340 EQU * @V56BDA8 00187650
  253. L R7,IOERDATA LOAD UP SENSE BYTES 1-4 00188000
  254. DROP R7 00189000
  255. SRL R7,16 SHIFT OUT SENSE BYTES 3-4 00190000
  256. ST R7,0(,R2) STORE SENSE BYTES 1-2 IN USER'S CAW REG. 00191000
  257. LA R0,IOERSIZE GET IOERROR BLOK SIZE @VA10489 00191100
  258. L R1,VDEVIOER GET ADDRESS OF IOERROR POINTER @VA10489 00191200
  259. USING IOERBLOK,R1 LET ASSEMBLER KNOW @VA10489 00191300
  260. AH R0,IOEREXT ADD EXTENSION IF NECCERARY @VA10489 00191400
  261. DROP R1 @VA10489 00191500
  262. CALL DMKFRET FREE THE BLOCK @VA10489 00191600
  263. SLR R0,R0 ZERO R0 @VA10489 00191700
  264. ST R0,VDEVIOER ZERO OUT POINTER TO ERROR BLOCK @VA10489 00191800
  265. B UNTRAN GO UNTRANS THE CSW 00192000
  266. TESTWLR TM IOBCSW+4,UE DID A UNIT EXCEPTION OCCUR ? 00193000
  267. BO MOVECSW YES, SAVE THE CSW FOR THE USER 00194000
  268. TM VDEVCSW+5,IL DID IL OCCUR IN 1ST INTERRUPT? @VA08386 00194200
  269. BNO *+8 NO @VA08386 00194400
  270. OI IOBCSW+5,IL PUT IN FINAL INTERRUPT @VA08386 00194600
  271. TM IOBCSW+5,IL WAS IT A WRONG LENGTH RECORD ? 00195000
  272. BZ MOVECSW NO,BRANCH @VA12728 00196100
  273. LA R15,3 SET RETURN CODE TO 3 00197000
  274. BAL R9,RTNCC2 SET PSW CONDITION CODE =2 00198000
  275. MOVECSW MVC VDEVCSW,IOBCSW MOVE IOBCSW TO VIRTUAL CSW. 00199000
  276. UNTRAN EQU * 00200000
  277. CALL DMKUNTRN CALL UNTRN TO CONVERT CSW TO VIRTUAL 00201000
  278. SL R8,VMDVSTRT CONVERT VDEVBLOK ADDR TO DISPL. 00202000
  279. SR R1,R1 SET TO PAGE 0 00203000
  280. TRANS 2,1,OPT=(BRING,DEFER) 00204000
  281. AL R8,VMDVSTRT RESTORE VDEVBLOK ADDRESS 00205000
  282. MVC CSW-PSA(8,R2),VDEVCSW MOVE CSW TO VIRTUAL USER'S CSW 00206000
  283. SPACE 2 00207000
  284. GDSTATUS EQU * HERE IF STATUS OK -- 00208000
  285. CALL DMKUNTFR CALL UNTFR TO FREE STORAGE USED FOR 00209000
  286. * BUILDING CCW STRING. 00210000
  287. TM IOBCSW+4,UE DID A UNIT EXCEPTION OCCUR ?? 00211000
  288. BZ FREEDEV NO -- 00212000
  289. LA R15,2 SET RETURN CODE TO 2 00213000
  290. BAL R9,RTNCC2 SET CONDITION CODE 2 IN VPSW 00214000
  291. SPACE 00215000
  292. FREEDEV EQU * MARK DEVICE FREE, RELEASE IOBLOK 00216000
  293. NI VDEVSTAT,X'FF'-VDEVBUSY AND FLAG DEVICE NOT BUSY 00217000
  294. TM IOBSTAT,IOBCC3 WAS THE DEVICE REALLY THERE ? 00218000
  295. BO REALCC3 NO -- RETURN VIRTUAL CC = 3 00219000
  296. BAL R9,FRETIOB RELEASE THE IOBLOK 00220000
  297. B GIOEXIT REMOVE FROM WAIT, EXIT @V200020 00221000
  298. SPACE 2 00222000
  299. NOPATH LA R15,5 PATH NOT FREE, INT. PENDING @VA01365 00223000
  300. LA R9,GIOEXIT SET CC1, ERROR 5... @VA01365 00224000
  301. B RTNCC1 GO SET IT, THEN EXIT @VA01365 00225000
  302. SPACE 00226000
  303. REALCC3 EQU * REAL DEVICE DOES NOT EXIST @V200020 00227000
  304. BAL R9,FRETIOB RELEASE IOBLOK, IOERBLOK @V200020 00228000
  305. NOUNIT LA R15,1 SET RETURN CODE TO 1 00229000
  306. BAL R9,RTNCC1 SET PSW CONDITION CODE =1 00230000
  307. GIOEXIT EQU * @V200020 00231000
  308. NI VMRSTAT,X'FF'-(VMIOWAIT+VMEXWAIT) @V200020 00232000
  309. EXIT @V200020 00233000
  310. EJECT 00234000
  311. FRETCOPY EQU * RELEASE COPIED IOBLOK, WAIT FOR LAST 00235000
  312. TM IOBCSW+5,IL GET AN IL ? @VA08386 00235200
  313. BNO *+8 NO @VA08386 00235400
  314. OI VDEVCSW+5,IL SAVE FOR FINAL INTERRUPT @VA08386 00235600
  315. BAL R9,FRETIOB FRET IOBLOK, POSSIBLE IOERBLOK @V200020 00236000
  316. GOTO DMKDSPCH WAIT FOR FINAL INTERRUPT @V200020 00237000
  317. SPACE 00238000
  318. RTNCC1 EQU * SET CONDITION CODE = ONE @V200020 00239000
  319. LA R1,X'10' @V200020 00240000
  320. B RTNCCS @V200020 00241000
  321. RTNCC2 EQU * SET CONDITION CODE = TWO @V200020 00242000
  322. LA R1,X'20' @V200020 00243000
  323. B RTNCCS @V200020 00244000
  324. RTNCC3 EQU * SET CONDITION CODE = THREE @V200020 00245000
  325. LA R1,X'30' @V200020 00246000
  326. * B RTNCCS @V200020 00247000
  327. SPACE 00248000
  328. RTNCCS EQU * SET VIRTUAL PSW CONDITION CODE @V200020 00249000
  329. ST R15,VMGPRS+R15*4 RETURN CODE TO VIRTUAL GR15 @V200020 00250000
  330. LA R2,VMPSW+4 BC-MODE COND. CODE LOCATION @V200020 00251000
  331. TM VMESTAT,VMEXTCM IN EC-MODE NOW ? @V200020 00252000
  332. BZ CLEARCC NO -- @VA13076 00253000
  333. LA R2,VMPSW+2 EC-MODE COND. CODE LOCATION @V200020 00254000
  334. CLEARCC NI 0(R2),X'FF'-X'30' CLEAR CONDITION CODE @VA13076 00254500
  335. EX R1,RTNSCC SET VIRTUAL CONDITION CODE @V200020 00255000
  336. BR R9 @V200020 00256000
  337. RTNSCC OI 0(R2),*-* . . . @V200020 00257000
  338. SPACE 00258000
  339. FRETIOB EQU * RELEASE IOBLOK AND IOERBLOK @V200020 00259000
  340. L R1,IOBIOER IS THERE AN IO ERROR BLOCK THERE @V200020 00260000
  341. LTR R1,R1 ... @V200020 00261000
  342. BZ FRETIOBL NOPE - PROCEED TO FRET THE IOBLOK@V200020 00262000
  343. LA R0,IOERSIZE SIZE OF IOERBLOK @V200020 00263000
  344. USING IOERBLOK,R1 @V200020 00264000
  345. AH R0,IOEREXT ADD EXTRA SIZE (IF ANY) OF IOERBL@V200020 00265000
  346. DROP R1 @V200020 00266000
  347. CALL DMKFRET GIVE IT BACK (BEFORE IT'S TOO LAT@V200020 00267000
  348. FRETIOBL LA R0,IOBSIZE GET SIZE OF IOBLOK @V200020 00268000
  349. LR R1,R10 AND ITS ADDRESS @V200020 00269000
  350. CALL DMKFRET RELEASE IT @V200020 00270000
  351. BR R9 RETURN INTERNALLY @V200020 00271000
  352. SPACE 1 00271100
  353. CECYL EQU X'10' CE CYLINDER ON 3340/3344 @V56BDA8 00271200
  354. SPACE 2 00272000
  355. LTORG 00273000
  356. EJECT 00274000
  357. COPY DEVTYPES 00275000
  358. COPY IOER 00276000
  359. COPY SAVE @V200020 00277000
  360. COPY VMBLOK 00278000
  361. COPY IOBLOKS 00279000
  362. COPY RBLOKS 00280000
  363. COPY VBLOKS 00281000
  364. COPY EQU 00282000
  365. PSA 00283000
  366. END DMKGIO @V200020 00284000