Table of Contents

DMKVIO Source

References

Source Listing

DMKVIO.ASSEMBLE.txt
  1. VIO TITLE 'DMKVIO (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SERIALIZATION OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKVIO 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * TO RECORD AND TRANSLATE THE INTERRUPTS AND STATUS ASSOCIATED 00010000
  11. * WITH VIRTUAL I/O OPERATIONS 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * REENTRANT, RESIDENT, ENTERED VIA GOTO FROM DMKDSP WHEN 00015000
  16. * AN IOBLOK FOR A VIRTUAL INTERRUPT IS UNSTACKED 00016000
  17. * 00017000
  18. * ENTRY POINTS - 00018000
  19. * 00019000
  20. * DMKVIOIN - TRANSLATE A VIRTUAL INTERRUPT 00020000
  21. * DMKVIOC1 - TO PRESENT CONDITION CODE 1 STATUS TO A VIRTUAL 00020200
  22. * MACHINE FOR DEDICATED 3705. 00020400
  23. * DMKVIOMK - ADDRESS OF A TABLE OF INTERRUPT MASKS, INDEXABLE BY 00021000
  24. * DEVICE ADDRESS 00022000
  25. * 00023000
  26. * ENTRY CONDITIONS - 00024000
  27. * 00025000
  28. * FOR DMKVIOIN - 00026000
  29. * GPR10 = ADDRESS OF THE IOBLOK THAT WAS UNSTACKED 00027000
  30. * GPR12 = DMKVIOIN BASE 00028000
  31. * 00029000
  32. * FOR DMKVIOC1 - 00030000
  33. * GPR6 = ADDRESS OF THE VIRTUAL CHANNEL BLOCK 00031000
  34. * GPR7 = ADDRESS OF THE VIRTUAL CONTROL UNIT BLOCK 00032000
  35. * GPR8 = ADDRESS OF THE VIRTUAL DEVICE BLOCK 00033000
  36. * GPR10 = ADDRESS OF THE IOBLOK FOR THIS TASK 00034000
  37. * GPR11 = ADDRESS OF THE VMBLOK FOR IOTASK USER 00035000
  38. * GPR12 = ADDRESS OF DMKVIOC1 00036000
  39. * 00037000
  40. * NOTE THAT GPR13 DOES NOT POINT TO A SAVEAREA 00038000
  41. * 00039000
  42. * EXIT CONDITIONS - 00040000
  43. * 00041000
  44. * FOR DMKVIOEX - NORMAL 00042000
  45. * THE CORRECT STATUS AND CONDITION CODES ARE REFLECTED TO THE 00043000
  46. * VIRTUAL MACHINE, AND, IF APPROPRIATE, THE I/O IS STARTED 00044000
  47. * 00045000
  48. * FOR DMKVIOIN - NORMAL 00046000
  49. * THE REAL INTERRUPT IS TRANSLATED INTO VIRTUAL STATUS TO BE 00047000
  50. * STORED IN THE VIRTUAL CHANNEL, CONTROL UNIT AND DEVICE BLOKS 00048000
  51. * 00049000
  52. * ERROR - NONE 00050000
  53. * 00051000
  54. EJECT 00052000
  55. * 00053000
  56. * CALLS TO OTHER ROUTINES - 00054000
  57. * 00055000
  58. * DMKPTRAN - LOCATE THE USER'S PAGE 0 00056000
  59. * DMKUNTFR - TO RETURN THE TRANSLATED CHANNEL PROGRAM TO FREE 00057000
  60. * STORAGE 00058000
  61. * DMKFREE - TO OBTAIN FREE STORAGE FOR IOBLOKS 00059000
  62. * DMKFRET - TO RETURN USED IOBLOKS TO FREE STORAGE 00060000
  63. * DMKUNTRN - TO UNTRANSLATE THE REAL CSW ADDRESS ASSOCIATED WITH 00061000
  64. * A VIRTUAL INTERRUPT 00062000
  65. * DMKDSPCH - EXIT VIA GOTO AFTER I/O IS SCHEDULED BY DMKIOSQV 00063000
  66. * DMKSCNVU - LOCATE VIRTUAL CHANNEL, CU, AND DEVICE BLOKS 00064000
  67. * DMKPTRUL - TO UNLOCK A PAGE 00065000
  68. * DMKTRDWT - TO SYNCHRONIZE TRACE ACTIVITY 00066000
  69. * DMKTRDSI - TO TRACE AN I/O OPERATION (SIO, TIO, HIO, OR TCH) 00067100
  70. * DMKTRCSW - TO TRACE A CSW INTERRUPT 00068000
  71. * DMKCCHRF - TO REFLECT CHANNEL ERROR TO VIRTUAL MACHINE 00068500
  72. * 00069000
  73. * EXTERNAL REFERENCES - 00070000
  74. * 00071000
  75. * NONE 00072000
  76. * 00073000
  77. * TABLES / WORKAREAS - 00074000
  78. * 00075000
  79. * VCHBLOK,VCUBLOK, AND VDEVBLOK ARE REFERENCED AND UPDATED 00076000
  80. * 00077000
  81. * REGISTER USAGE - 00078000
  82. * 00079000
  83. * GPR0 = CONDITION CODE RETURNED FROM DMKSCNVU 00080000
  84. * GPR1 = SCRATCH - OR USED FOR DEDICATED CHANNEL SUPPORT 00081000
  85. * GPR2 = SCRATCH - OR USED FOR DEDICATED CHANNEL SUPPORT 00082000
  86. * GPR3 = ADDRESS OF VBLOK THAT CONTAINS SUBCHANNEL STATUS 00083000
  87. * GPR4 = CSW STATUS TO BE STORED 00084000
  88. * GPR5 = INTERNAL SUBROUTINE LINKAGE 00085000
  89. * GPR6 = VCHBLOK BASE 00086000
  90. * GPR7 = VCUBLOK BASE 00087000
  91. * GPR8 = VDEVBLOK BASE 00088000
  92. * GPR9 = VIRTUAL DEVICE ADDRESS 00089000
  93. * GPR10 = IOBLOK BASE 00090000
  94. * GPR11 = VMBLOK BASE 00091000
  95. * GPR12 = DMKVIO BASE 00092000
  96. * GPR13 NOT USED 00093000
  97. * GPR14 = EXTERNAL LINKAGE 00094000
  98. * GPR15 = EXTERNAL LINKAGE 00095000
  99. EJECT 00096000
  100. * 00097000
  101. * NOTES - 00098000
  102. * 00099000
  103. * OPERATION - 00100000
  104. * 1. SET CONDITION CODE IN VIRTUAL PSW TO ZERO 00101000
  105. * 2. CALCULATE VIRTUAL UNIT ADDRESS USING REGISTER AND DISPLACE- 00102000
  106. * MENT VALUES PASSED BY PRIVILEGED IN VMINST 00103000
  107. * 3. CALL DMKSCNVU TO LOCATE VCHBLOK, VCUBLOK, AND VDEVBLOK, 00104000
  108. * AND SAVE THE RESULTING CONDITION IN GPR0 00105000
  109. * 4. BRANCH TO HANDLE SIO, TIO, TCH, AND HIO, DESCRIBED IN 00106000
  110. * SECTIONS A-D RESPECTIVELY 00107000
  111. *. 00108000
  112. EJECT 00109000
  113. COPY OPTIONS 00110000
  114. COPY LOCAL OPTIONS 00111000
  115. SPACE 2 00112000
  116. DMKVIO CSECT 00113000
  117. ENTRY DMKVIOIN @VA05037 00114000
  118. ENTRY DMKVIOC1 @VA05037 00115000
  119. ENTRY DMKVIOMK,DMKVIOXK 00116000
  120. EXTRN DMKUNTFR 00117000
  121. EXTRN DMKPTRUL 00118000
  122. EXTRN DMKUNTRN 00119000
  123. EXTRN DMKCCHRF @V508690 00119500
  124. EXTRN DMKSCNVU 00120000
  125. EXTRN DMKTRKFP @V56BDA8 00120100
  126. EXTRN DMKSTKIO @VA08629 00120200
  127. AIF (NOT &TRACE(6)).TRA1 **AIF** 00121000
  128. EXTRN DMKTRDSI,DMKTRCSW @V4M0240 00122100
  129. EXTRN DMKTRDWT @VA07229 00123100
  130. .TRA1 ANOP 00124000
  131. SPACE 2 00125000
  132. USING PSA,R0 00126000
  133. USING VCHBLOK,R6 00127000
  134. USING VCUBLOK,R7 00128000
  135. USING VDEVBLOK,R8 00129000
  136. USING IOBLOK,R10 00130000
  137. USING VMBLOK,R11 00131000
  138. EJECT 00132000
  139. *. 00133000
  140. * OPERATION OF VIRTUAL I/O INTERRUPT HANDLER - 00134000
  141. * 1. CALL DMKSCNVU TO LOCATE VCH, VCU, AND VDEVBLOKS FOR INTER- 00135000
  142. * RUPTING DEVICE 00136000
  143. * 2. IF DMKVIOIN HAS BEEN ENTERED TO PROCESS AND INTERRUPT, GO 00137000
  144. * SECTION F BELOW; OTHERWISE CONTINUE 00138000
  145. * 3. CONDITION CODE 2 SHOULD NEVER BE RETURNED; IF CONDITION 00139000
  146. * CODE 3 IS RETURNED, REFLECT IT TO THE USER AND EXIT; 00140000
  147. * OTHERWISE, CONTINUE 00141000
  148. *. 00142000
  149. SPACE 00143000
  150. USING DMKVIOIN,R12 @VA05037 00144000
  151. DMKVIOIN DS 0D VIRTUAL I/O INTERRUPT RETURN @VM08571 00145000
  152. USING *,R12 TEMPORARY ADDRESSABILITY 00146000
  153. L R12,=A(DMKVIO) COMMON ADDRESSABILITY 00147000
  154. USING DMKVIO,R12 00148000
  155. SPACE 00149000
  156. LH R1,IOBVADD GET VIRTUAL DEVICE ADDRESS 00150000
  157. CALL DMKSCNVU AND LOCATE CONTROL BLOKS 00151000
  158. BZ REFLECT ALL BLOKS FOUND 00152000
  159. TM IOBSPEC,IOBUNSL IS IT UNSOLICITED? @VA04788 00153000
  160. BO CHKUNSL YES - CLEAN UP AND LEAVE @VA04788 00154000
  161. ABEND 2 00155000
  162. SPACE 2 00156000
  163. REFLECT EQU * 00157000
  164. TM IOBSPEC2,IOBWRAP TASK FOR AUTOPOLL WRAP LIST? @V407438 00158000
  165. BZ CKCC NO -- GO CHECK OUT CONDITION CODE 00159000
  166. TM IOBCSW+5,PCI DID WE GET THE PCI ?? 00160000
  167. BZ CKCC NOT THIS TIME -- 00161000
  168. NI IOBCSW+5,X'FF'-PCI REMOVE CP GENERATED PCI 00162000
  169. SLR R15,R15 GET DISPLACEMENT TO CURRENT CCW @VA02985 00163000
  170. ICM R15,B'0111',IOBCSW+1 REAL ADDR OF CURRENT CCW @VA02985 00164000
  171. L R14,IOBCAW GET CAW @VA02137 00165000
  172. LA R14,0(R14) CLEAR HI BYTE @VA02137 00166000
  173. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00167025
  174. * R0=VIRTUAL CCW ADDRESS 00167035
  175. * R2=RCWTASK END 00167045
  176. * R5=RCWTASK+X'10' TO POINT TO FIRST CCW IN THIS RCWTASK 00167055
  177. * R14=IOBCAW/RCWTASK 00167065
  178. * R15=IOBCSW 00167075
  179. * THIS ROUTINE WILL FIND OUT WHICH RCWTASK HAS THE 00167085
  180. * INTERUPT IN IT. IT WILL THEN LOOK IN THE WRAP LIST 00167095
  181. * TO FIND OUT WHICH CCW CAUSED THE INTERUPT BY CHECKING 00167105
  182. * FOR THE DISPLACEMENT AND THE REAL VIRTUAL CCW ADDRESS. 00167115
  183. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00167125
  184. SPACE 00167135
  185. S R14,F16 POINT TO BEGINNING OF FIRST @VA08860 00167145
  186. * RCWTASK 00167155
  187. USING RCWTASK,R14 @VA08860 00167165
  188. CLC RCWHEAD,FFS IS THIS REALLY A RCWTASK @VA08860 00167175
  189. BNE CKCC NO, CONTINUE ON @VA08860 00167185
  190. REFLECT1 DS 0H @VA08860 00167195
  191. CLC RCWRCNT,ZEROES TEST CCW COUNT @VA08860 00167205
  192. BE REFLECT2 NO, GET NEXT RCWTASK @VA08860 00167215
  193. LH R2,RCWCCNT GET RCWTASK LENGTH @VA08860 00167225
  194. SLL R2,3 TIMES 8 TO GET NUMBER OF BYTES @VA08860 00167235
  195. LA R2,0(R14,R2) NOW GET END OF THE RCWTASK @VA08860 00167245
  196. * SO THAT WE CAN GET THE RIGHT RCWTASK FOR THIS INTERUPT 00167255
  197. * SO WE CAN ALTER THE TIC. 00167265
  198. CR R15,R2 IS THE INTERUPT ABOVE OURS @VA08860 00167275
  199. BH REFLECT2 YES,LOOK IN ANOTHER RCWTASK @VA08860 00167285
  200. CR R15,R14 IS THE INTERUPT BELOW OURS @VA08860 00167295
  201. BL REFLECT2 YES,LOOK IN ANOTHER RCWTASK @VA08860 00167305
  202. LA R5,RCWCCW NO,IT IS IN OUR RCWTASK,NOW POINT@VA08860 00167315
  203. * TO THE FIRST CCW IN THIS TASK 00167325
  204. LR R1,R5 WE WILL NEED THIS LATER AND USE @VA08860 00167335
  205. * R1 NOW 00167345
  206. SLR R15,R1 GET DISPLACEMENT TO CURRENT CCW @VA08860 00167355
  207. LR R0,R15 SAVE DISPLACEMENT ACROSS CALL @VA10312 00167370
  208. L R1,RCWVCAW ADDRESS TO TRANSLATE @VA10312 00167380
  209. TRANS R2,R1,OPT=(BRING+DEFER) CHECK OUT PAGE ADDRESS @VA10312 00167390
  210. LR R15,R0 RESTORE DISPLACEMENT @VA10312 00167400
  211. BNZ TSTPCIL SOMETHING WRONG HERE @VA10312 00167410
  212. AR R0,R2 POINT TO VIRTUAL CCW @VA10312 00167420
  213. B FINDTIC NOW LET'S SEE IF WE HAVE WRAPLIST@VA08860 00167455
  214. SPACE 00167465
  215. REFLECT2 DS 0H @VA08860 00167475
  216. ICM R14,B'0111',RCWPNT+1 SEE IF THERE IS ANOTHER @VA08860 00167485
  217. * RCWTASK 00167495
  218. BNZ REFLECT1 YES,GO BACK TO FIND IF INTERUPT @VA08860 00167505
  219. * IS IN THIS RCWTASK 00167515
  220. B TSTPCIL SOMETHING WRONG WE SHOULD HAVE @VA10312 00167526
  221. * FOUND THE INTERUPT...... 00167535
  222. DROP R14 @VA08860 00167545
  223. FINDTIC EQU * TRY TO FIND TIC TO AUTOPOLL CCW @VA02985 00168000
  224. ICM R14,B'1111',IOBMISC GET ADDRESS OF POLL LIST @VA01384 00169000
  225. BZ TSTPCIL BRANCH IF NONE @VA10312 00170100
  226. ICM R1,B'1111',IOBMISC2 GET NUMBER OF LIST ENTIES @VA01384 00171000
  227. BZ TSTPCIL BRANCH IF NONE OR END OF LIST @VA10312 00172100
  228. WRAPLP C R15,4(R14) LIST FOR THIS TIC ? @VA01384 00173000
  229. BNE WRAPLP1 NO, CONTINUE FIND IT SOMEWHERE @VA08860 00174200
  230. * ELSE 00174300
  231. CL R0,0(R14) YES,IT COULD BE OURS CHECK FOR @VA08860 00174400
  232. * SAME VIRT CCW ADDRESS 00174500
  233. BE CKTIC YES,GO CHECK TO SEE IF TIC IS @VA08860 00174600
  234. * CHANGED 00174700
  235. WRAPLP1 DS 0H @VA08860 00174800
  236. LA R14,8(,R14) UPDATE TO NEXT ENTRY @VA01384 00175000
  237. BCT R1,WRAPLP BRANCH IF MORE ENTRIES @VA01384 00176000
  238. S R0,F8 BACKUP TO PREVIOUS CCW @VA08860 00176500
  239. * THE PURPOSE FOR BACKING UP THE CCW'S IS THAT THE 00176550
  240. * PCI INTERUPT CAN OCCUR AT ANYTIME AFTER THE 00176600
  241. * PCI BIT IS DETECTED BY THE CHANNEL. THEREFORE 00176650
  242. * THE ACTUAL INTERUPT CAN COME IN ANYWHERE. 00176700
  243. S R15,F8 BACK UP ONE CCW @VA02985 00177000
  244. BNM FINDTIC BRANCH IF MORE CCW'S TO CHECK @VA02985 00178000
  245. B TSTPCIL NOT THIS TIME @VA10312 00179100
  246. CKTIC LM R1,R2,0(R14) VIRTUAL TIC ADD,REAL TIC DISP @VA01384 00180000
  247. AR R2,R5 NOW ADD THIS RCWTASK FIRST CCW @VA08860 00181050
  248. * TO DISPLACEMENT 00181100
  249. TM 0(R1),X'07' VIRTUAL TIC STILL A TIC ? @VA03585 00182000
  250. BNZ NEWCCW NO -- GO GET NEW CCW @VA03585 00183000
  251. TM 0(R1),X'08' MAKE SURE IT'S STILL A TIC @VA03585 00184000
  252. BO TSTPCIL IT IS -- CHECK FOR ENDING STATUS @VA03585 00185000
  253. NEWCCW EQU * VIRTUAL TIC HAS BEEN CHANGED @VA03585 00186000
  254. LM R14,R15,0(R1) GET NEW CCW FROM USER @VA01384 00187000
  255. ICM R14,B'1000',F3+3 MAKE SURE CCW IS A NOP @VA08336 00188100
  256. ST R15,4(R2) STORE SECOND HALF FIRST IN CASE @VA08336 00188250
  257. * CHANNEL ADDRESSING THIS SAME STORAGE 00188400
  258. * LOCATION. 00188550
  259. ST R14,0(R2) NOW STORE THE FIRST HALF @VA08336 00188700
  260. MVI 5(R2),X'00' ZERO FLAG BYTE IN REAL CCW @VA04888 00190000
  261. TSTPCIL TM IOBCSW+5,255-(PCI+IL) ANY FATAL-TYPE BITS ON IN CSW+5 ? 00191000
  262. BNZ CKCC IF YES, GO CHECK OUT THE CONDITION CODE 00192000
  263. CLI IOBCSW+4,0 ANY OTHER STATUS TO REFLECT ?? 00193000
  264. BE VIOBFRET NO -- EXIT 00194000
  265. SPACE 00195000
  266. CKCC EQU * 00196000
  267. TM IOBSTAT,IOBALTSK POSSIBLE RESTART REQUIRED? @V56BDA8 00196100
  268. BZ NOALTSK NO, EASY @V56BDA8 00196200
  269. CALL DMKTRKFP RESTART IF NECESSARY @V56BDA8 00196300
  270. NOALTSK EQU * @V56BDA8 00196400
  271. AIF (NOT &TRACE(6)).NTRV1 **AIF** 00197000
  272. TM VMTRCTL,VMTRSIO SIO TRACING WANTED ? 00198000
  273. BZ REFCC12 NOPE - NO PROBLEM. 00199000
  274. TM IOBSPEC,IOBTIO WAS IT A TEST I/O REQUEST ? @VM01157 00200000
  275. BO TRCONDC YES - WE MUST TRACE IT HERE @VM01157 00201000
  276. TM IOBSTAT,IOBCC3 WAS THIS AN I/O INTERRUPT ? @VM01157 00202000
  277. BZ VIOINT YES - DON'T TRACE AS START I/O @VM01157 00203000
  278. TRCONDC EQU * VIRTUAL ADDRESS IN GR1 ALREADY @VM01157 00204000
  279. LH R1,IOBVADD RESTORE DEVICE ADDRESS @VA04161 00205000
  280. CALL DMKTRDSI CALL TRACER - SIO ENTRY POINT @V4M0240 00206100
  281. CALL DMKSCNVU MAKE SURE WE KNOW ADDR OF CONTROL BLOKS 00207000
  282. REFCC12 EQU * CHECK WHERE TO GO NOW @VM01157 00208000
  283. .NTRV1 ANOP @VM01157 00209000
  284. TM IOBSTAT,IOBCC3 INTERRUPT OR CONDITION CODE ? @VM01157 00210000
  285. BZ VIOINT INTERRUPT -- PROCESS IT @VM01157 00211000
  286. BM TESTCC2 CONDITION CODE 1 OR 2 @VM01157 00212000
  287. * 00213000
  288. * HERE FOR CC 3: 00214000
  289. LA R2,X'30' SET CONDITION CODE THREE 00215000
  290. NI VDEVSTAT,255-(VDEVCHBS+VDEVBUSY) FREE UP THE DEVICE 00216000
  291. TM IOBSPEC,IOBTIO+IOBHIO WAS THIS A START I/O ? 00217000
  292. BNZ SETCCX NO -- JUST SET COND. CODE 00218000
  293. NI VCHSTAT,X'FF'-VCHBUSY CLEAR VIRTUAL CHANNEL 00219000
  294. NI VCUSTAT,X'FF'-(VCUCHBSY+VCUBUSY) CONTROL UNIT, 00220000
  295. AIF (NOT &VIRREAL).NOVR5 **AIF** 00221000
  296. C R11,AVMREAL DOES USER HAVE VIRT=REAL AREA 00222000
  297. BNE UNTFR1 NO, RELEASE THE CHANNEL PROGRAM 00223000
  298. ICM R15,15,IOBMISC DID I/O REQUIRE CCW TRANSLATION 00224000
  299. BZ SETCCX NO, SET COND. CODE = 3 AND EXIT 00225000
  300. UNTFR1 DS 0H CONNECTOR 00226000
  301. .NOVR5 ANOP 00227000
  302. CALL DMKUNTFR RELEASE CHANNEL PROGRAM 00228000
  303. B SETCCX EXIT WITH COND. CODE = 3 00229000
  304. SPACE 3 00230000
  305. TESTCC2 TM IOBSTAT,IOBCC2 IS IT CC 1 OR 2 ?? 00231000
  306. BZ VIOCC1 CONDITION CODE 1 00232000
  307. SPACE 2 00233000
  308. ABEND 3 SHOULD NEVER SEE CC 2 00234000
  309. EJECT 00235000
  310. *. 00236000
  311. * DMKVIOC1 ENTRY CONDITIONS: 00237000
  312. * 00238000
  313. * R6 - ADDRESS OF THE VIRTUAL CHANNEL BLOCK 00239000
  314. * R7 - ADDRESS OF THE VIRTUAL CONTROL UNIT BLOCK 00240000
  315. * R8 - ADDRESS OF THE VIRTUAL DEVICE BLOCK 00241000
  316. * R10 - ADDRESS OF THE IOBLOK ASSOCIATED WITH THIS TASK 00242000
  317. * R11 - ADDRESS OF THE VMBLOK FOR IOTASK USER 00243000
  318. * R12 - ADDRESS OF DMKVIOC1 00244000
  319. * 00245000
  320. * DMKVIOC1 IS ENTERED VIA GOTO FROM DMKVSI 00246000
  321. * 00247000
  322. * 4. FOR CC = 1, SAVE THE STATUS FROM THE REAL CSW, TRANS FOR 00248000
  323. * THE CALLER'S PAGE 0, AND STORE THE STATUS IN HIS CSW 00249000
  324. * 4.1 IF THE STATUS WAS THE RESULT OF A TEST I/O OR HALT I/O, 00250000
  325. * FREE UP THE DEVICE, SET CC = 1 FOR THE USER, FRET THE 00251000
  326. * IOBLOK AND EXIT. 00252000
  327. * 5. IF THE INTERRUPT IS FOR PCI ALONE, OR FOR PCI+IL ONLY, 00253000
  328. * SET CC = 1 AND EXIT. 00254000
  329. * 6. OTHERWISE, MARK THE SUB-CHANNEL AS NOT BUSY, AND TEST TO 00255000
  330. * SEE IF THE DEVICE IS FREE 00256000
  331. * 7. IF THE DEVICE IS FREE, RELEASE THE REAL CCW LIST VIA A CALL 00257000
  332. * TO DMKUNTFR, SET CC = 1, AND EXIT 00258000
  333. *. 00259000
  334. SPACE 00260000
  335. DMKVIOC1 DS 0H ENTRY FROM DMKVSI TO REFLECT CC1 @VA05037 00261000
  336. USING *,R12 TEMPORARY ADDRESSABILITY @VA05037 00262000
  337. L R12,=A(DMKVIO) STANDARD ADDRESSABILITY @VA05037 00263000
  338. USING DMKVIO,R12 ... @VA05037 00264000
  339. SPACE 00265000
  340. VIOCC1 EQU * 00266000
  341. TM IOBSPEC,IOBSIOF START I/O FAST RELEASE ? @VA01382 00267000
  342. BO SIOFCC1 YES - SPECIAL PROCEDURE @VA01382 00268000
  343. LH R4,IOBCSW+4 GET STATUS FROM THE REAL CSW 00269000
  344. STH R4,VDEVCSW+4 AND SAVE IN THE VIRTUAL ONE 00270000
  345. LA R1,CSW LOGICAL ADDRESS OF USER'S CSW 00271000
  346. SL R6,VMCHSTRT CHAN. DISP @VA01770 00272000
  347. SL R7,VMCUSTRT CONT. UNIT DSP. @VA01770 00273000
  348. SL R8,VMDVSTRT DEV. DISP @VA01770 00274000
  349. TRANS 2,1,OPT=(BRING,DEFER) FETCH USER'S PAGE 0 00275000
  350. AL R6,VMCHSTRT RESTORE CHANN ADDRESS @VA01770 00276000
  351. AL R7,VMCUSTRT RESTORE C. U. ADDRESS @VA01770 00277000
  352. AL R8,VMDVSTRT RESTORE DEV. ADDRESS @VA01770 00278000
  353. STH R4,4(,R2) STORE STATUS IN USER'S CSW 00279000
  354. TM 5(R2),CDC+CCC+IFCC WAS THIS A CHANNEL ERROR ? @V508690 00279050
  355. BZ NOCHAN NO, CONTINUE PROCESSING @V508690 00279100
  356. BAL R2,CHKIOERB CLEAN UP RESIDUAL IOER @VA09068 00279110
  357. ICM R1,15,VDEVIOER GET IOERBLOK FOR REFLECT @V508690 00279150
  358. BZ NOCHAN NO IOERBLOK, FORGET CALL @V508690 00279200
  359. CALL DMKCCHRF GO SET UP USERS CHANNEL CHECK @V508690 00279250
  360. * INFO. 00279300
  361. NOCHAN EQU * @V508690 00279350
  362. TM IOBSPEC,IOBTIO+IOBHIO WAS THIS A START I/O ? 00280000
  363. BZ CC1SIO YES, CONTINUE @VA01185 00281000
  364. NI VDEVSTAT,255-VDEVBUSY REMOVE TEMP BUSY BIT @VA01185 00282000
  365. B ERBLOKCK GO CHECK OUT IOERBLOK @VA01185 00283000
  366. CC1SIO EQU * @VA01185 00284000
  367. CH R4,=AL1(0,PCI) IS IT PCI ALONE ? 00285000
  368. BE CKTIO YES - CHANNEL STILL BUSY. 00286000
  369. CH R4,=AL1(0,PCI+IL) OR PCI+IL ONLY ? 00287000
  370. BE CKTIO YES - SAME HANDLING - CHANNEL STILL BUSY. 00288000
  371. NI VCHSTAT,X'FF'-VCHBUSY FREE UP THE SUB CHANNEL 00289000
  372. NI VCUSTAT,X'FF'-VCUCHBSY --- 00290000
  373. NI VDEVSTAT,X'FF'-VDEVCHBS -- 00291000
  374. C R4,=A(256*BUSY) IS IT BUSY ALONE ?? 00292000
  375. BNE CKDEBUSY CHECK FOR SPECAL BUSYS @VA05686 00293100
  376. AIF (NOT &VIRREAL).NOVR6 **AIF** 00294000
  377. C R11,AVMREAL DOES USER HAVE VIRT=REAL AREA 00295000
  378. BNE UNTFR2 NO, RELEASE THE CHANNEL PROGRAM 00296000
  379. ICM R15,15,IOBMISC WAS CHANNEL PROGRAM TRANSLATED 00297000
  380. BZ SETCC1 NO, EXIT WITH COND. CODE = 1 00298000
  381. UNTFR2 DS 0H CONNECTOR 00299000
  382. .NOVR6 ANOP 00300000
  383. CALL DMKUNTFR FREE UP THE CCW STRING 00301000
  384. B SETCC1 AND GO EXIT 00302000
  385. SPACE 3 00303000
  386. CKDEBUSY TM IOBCSW+4,DE+BUSY CE POSSIBLE ALSO @VA05686 00303100
  387. BNO CKATTN NO NEW DEVICE STATUS @VA05686 00303200
  388. TM VDEVSTAT,VDEVDED DEDICATED DEVICE? @VA05686 00303300
  389. BZ CKATTN IF NOT, LEAVE STATUS AS IS @VA05686 00303400
  390. NI VDEVSTAT,255-VDEVNRDY CLEAR POSSIBLE NOT READY @VA05686 00303500
  391. ICM R1,15,VDEVIOER IOERBLOK? @VA05686 00303600
  392. BZ CKATTN NO, SKIP FRET @VA05686 00303700
  393. BAL R2,IOERFRET CLEAR VDEVUC AND SENSE @VA05686 00303800
  394. CKATTN TM VDEVCSW+4,DE+ATTN IS THE DEVICE FREE? 00304000
  395. BNZ VIODEVFR YES -- 00305000
  396. TM VDEVCSW+4,CE IS THE DEVICE FREE ??? 00306000
  397. BO SETCC1 NO -- SET CC1 AND LEAVE 00307000
  398. VIODEVFR EQU * 00308000
  399. NI VDEVSTAT,X'FF'-VDEVBUSY FREE UP THE DEVICE 00309000
  400. AIF (NOT &VIRREAL).NOVR7 **AIF** 00310000
  401. C R11,AVMREAL DOES USER OWN VIRT=REAL AREA 00311000
  402. BNE UNTFR3 NO, RELEASE CHANNEL PROGRAM 00312000
  403. ICM R15,15,IOBMISC WAS CHANNEL PROGRAM TRANSLATED 00313000
  404. BZ NOUNTFR3 NO, CONTINUE 00314000
  405. UNTFR3 DS 0H CONNECTOR 00315000
  406. .NOVR7 ANOP 00316000
  407. CALL DMKUNTFR FREEUP THE CCW STRING 00317000
  408. NOUNTFR3 DS 0H CONNECTOR 00318000
  409. TM IOBFLAG,IOBRELCU THIS OPERATION RELEASE CU ? @VA04278 00319000
  410. BNZ ERBLOKCK YES..BEWARE OF BMPX CHANNEL @VA04278 00320000
  411. NI VCUSTAT,X'FF'-VCUBUSY FREE UP THE CONTROL UNIT 00321000
  412. ERBLOKCK BAL R2,CHKIOERB CHECK FOR POSSABLE IOERBLOK @VA01185 00322000
  413. TM IOBSTAT,IOBFATAL DID SENSE FAIL? @VA03443 00323000
  414. BZ SETCC1 NO...CONTINUE @VA03443 00324000
  415. ICM R1,15,VDEVIOER DOES IOERBLOK EXIST? @VA03443 00325000
  416. BZ SETCC1 NO...CONTINUE @VA03443 00326000
  417. BAL R2,IOERFRET GO FRET IOERBLOK @VA03443 00327000
  418. B SETCC1 AND EXIT 00328000
  419. SPACE 00329000
  420. SIOFCC1 EQU * GIVE DEFERRED CC = 1 @VA01382 00330000
  421. L R1,IOBCAW CHANNEL ADDRESS WORD @VA01382 00331000
  422. MVC IOBCSW+6(2),6(R1) MOVE IN RESIDUAL COUNT @VA01382 00332000
  423. AL R1,F8 POINT PAST FIRST CCW (KEEP KEY) @VA01382 00333000
  424. ST R1,IOBCSW SET ADDRESS IN THE CSW @VA01382 00334000
  425. OI IOBCSW,X'01' DEFERRED CONDITION CODE ONE @VA01382 00335000
  426. * B VIOINT TREAT THIS AS AN INTERRUPT @VA01382 00336000
  427. EJECT 00337000
  428. *. 00338000
  429. * F. HANDLING VIRTUAL INTERRUPTS - 00339000
  430. * 1. IF THE INTERRUPT IS A CHANNEL CLASS INTERRUPT, SAVE THE 00340000
  431. * CSW IN THE VDEVBLOK AND SAVE THE ADDRESS OF THE INTERRUPT- 00341000
  432. * ING UNIT 00342000
  433. * 2. CALL DMKUNTRN TO UNTRANSLATE THE ADDRESS IN THE REAL CSW 00343000
  434. * 3. IF THE DEVICE IS FREE ALSO, CALL DMKUNTFR TO RELEASE THE 00344000
  435. * REAL CCW LIST, AND STACK THE PENDING INTERRUPT FOR THE 00345000
  436. * VIRTUAL MACHINE 00346000
  437. * 4. IF THE INTERRUPT WAS DUE TO DEVICE END ALONE, SAVE THE INT- 00347000
  438. * ERRUPT STATUS IN THE VIRTUAL DEVICE BLOK, AND EXIT 00348000
  439. * 5. SAVE ANY SENSE BYTES ASSOCIATED WITH THE OPERATION 00349000
  440. * 6. EXIT VIA A GOTO TO DMKDSPCH 00350000
  441. * 00351000
  442. *. 00352000
  443. SPACE 00353000
  444. VIOINT DS 0H HANDLE VIRTUAL I/O INTERRUPT: 00354000
  445. CL R10,IOBLINK IS THIS THE FINAL INTERRUPT ? 00355000
  446. BNE VIOINT1 NOPE - NOT YET @VA08629 00356000
  447. SLR R15,R15 YES - CLEAR VDEVIOB RIGHT NOW 00357000
  448. ST R15,VDEVIOB TO AVOID POSSIBLE ''RESET'' PROBLEMS ETC 00358000
  449. VIOINT1 EQU * PERHAPS TRACING SYNCHRONIZATION @VM08571 00359000
  450. AIF (NOT &TRACE(6)).TRA4 **AIF** 00360000
  451. TM VMTRCTL,VMTRIO+VMTRSIO I/O TRACING ACTIVE ? @VM08571 00361000
  452. BZ VIOINT2 NO -- CONTINUE @VM08571 00362000
  453. L R15,PREFIXA GET PREFIX VALUE TO ADDRESS PSA @V4M0132 00363100
  454. * AT ABSOLUTE ZERO @V4M0132 00363200
  455. CLI XTNDLOCK-PSA(R15),X'FF' IS SYSTEM EXTENDING? @V4M0132 00363300
  456. BO VIOINT2 BYPASS TRACING. @VA03758 00364000
  457. CALL DMKTRDWT ENQUEUE ON DMKTRD AND TREXBLOK @VA07229 00365100
  458. LH R1,IOBVADD VIRTUAL DEVICE ADDRESS @VM08571 00366000
  459. CALL DMKSCNVU RE-SCAN JUST IN CASE @VM08571 00367000
  460. BZ VIOINT2 ALL'S WELL @VA01255 00368000
  461. B CHKUNSL CHK ON UNSOLICITED INTERR. @VA01255 00369000
  462. .TRA4 ANOP @VM08571 00370000
  463. SPACE 00371000
  464. VIOINT2 LM R1,R2,IOBCSW GET THE REAL CSW (FROM THE IOBLOK) 00372000
  465. LTR R1,R1 IS IT A CHANNEL CLASS INTERRUPT ? 00373000
  466. BZ DEVICEND NO - IT MUST BE A DEVICE CLASS INTERRUPT. 00374000
  467. EJECT 00375000
  468. CHANLEND TM VDEVCSW+5,PCI IS PCI ALREADY IN THE CSW ?? 00376000
  469. STM R1,R2,VDEVCSW SAVE CSW FOR USER 00377000
  470. BZ *+8 NO PCI IN CSW 00378000
  471. OI VDEVCSW+5,PCI REPLACE PCI 00379000
  472. SPACE 00380000
  473. SETCE TM VCHTYPE,VCHSEL IS IT A SELECTOR CHANNEL ? @VA01771 00381000
  474. BZ TESTVCU NO -- 00382000
  475. LH R3,IOBVADD GET DEVICE ADDRESS 00383000
  476. STH R3,VCHCEDEV AND SAVE IN CHANNEL BLOK 00384000
  477. OI VCHSTAT,VCHCEPND SET PENDING FLAG IN CHANNEL BLOK 00385000
  478. B SETDEV AND GO FLAG DEVICE 00386000
  479. SPACE 00387000
  480. TESTVCU TM VCUTYPE,VCUSHRD+VCUCTCA SHARED SUB-CHANNEL ? 00388000
  481. BZ SETDEV NO -- 00389000
  482. SETVCU OI VCUSTAT,VCUCEPND SET CE PENDING FLAG 00390000
  483. SPACE 00391000
  484. SETDEV OI VDEVSTAT,VDEVCHAN SET CHANNEL END PENDING 00392000
  485. SPACE 3 00393000
  486. UNTRAN DS 0H CONNECTOR 00394000
  487. AIF (NOT &VIRREAL).NOVR9 **AIF** 00395000
  488. C R11,AVMREAL DOES USER OWN VIRT=REAL AREA 00396000
  489. BNE UNTRN1 NO, UNTRANS THE CSW ADDRESS 00397000
  490. ICM R15,15,IOBMISC WAS CHANNEL PROGRAM TRANSLATED 00398000
  491. BZ NOUNTRN1 NO, CONTINUE 00399000
  492. UNTRN1 DS 0H CONNECTOR 00400000
  493. .NOVR9 ANOP 00401000
  494. CALL DMKUNTRN UNTRANSLATE THE CSW ADDRESS 00402000
  495. NOUNTRN1 DS 0H CONNECTOR 00403000
  496. TM VDEVCSW+5,PCI PCI PRESENT IN CSW ? 00404000
  497. BZ VIOCLRCH NO -- GO CLEAR CHANNEL 00405000
  498. TM VDEVCSW+5,255-(PCI+IL) ANY FATAL-TYPE BITS ON IN CSW+5 ? 00406000
  499. BNZ VIOCLRCH YES - CHANNEL IS THRU - GO CLEAR IT. 00407000
  500. CLI VDEVCSW+4,00 NO (JUST PCI OR PCI+IL) - IS CSW+4 = 00 ? 00408000
  501. BE STAKPEND IF YES, THE CHANNEL IS STILL BUSY. 00409000
  502. VIOCLRCH EQU * HERE TO FLAG SUBCHANNEL NOT BUSY 00410000
  503. NI VCHSTAT,X'FF'-VCHBUSY NO - MARK SUBCHANNEL 00411000
  504. NI VCUSTAT,X'FF'-VCUCHBSY NOT BUSY 00412000
  505. NI VDEVSTAT,X'FF'-VDEVCHBS .. 00413000
  506. SPACE 00414000
  507. CL R10,IOBLINK IS THIS THE FINAL INTERRUPT ? 00415000
  508. BE FREEDEV YES 00416000
  509. B STAKPEND NO -- GO STACK THE PENDING INTERRUPT 00417000
  510. EJECT 00418000
  511. DEVICEND EQU * HERE TO HANDLE DEVICE END TYPE INTERRUPTS 00419000
  512. TM IOBSPEC,IOBTIO WAS THIS A TEST I/O ? 00420000
  513. BO VIOFREDV YES -- IT WAS NOT AN INTERRUPT 00421000
  514. TM VCUSTAT,VCUCUEPN CUE REQUESTED ?? 00422000
  515. BZ DEVSTAT NO -- CONTINUE 00423000
  516. NI VCUSTAT,X'FF'-VCUCUEPN UNFLAG PENDING STATUS MOD. 00424000
  517. TM VCUINTS,CUE CUE ALREADY PENDING ?? 00425000
  518. BO DEVSTAT YES -- 00426000
  519. OI VCUINTS,CUE AND SET CUE 00427000
  520. OI VDEVSTAT,VDEVCUE MARK DEVICE CAUSING THE CUE 00428000
  521. SPACE 2 00429000
  522. DEVSTAT LH R3,IOBCSW+4 GET CSW STATUS 00430000
  523. TM IOBCSW+4,ATTN ATTENTION INTERRUPT @VA01653 00431000
  524. BZ SAVESTAT NO - OR IN OTHER STATUS @VA01653 00432000
  525. TM IOBSPEC,IOBUNSL UNSOLICITED INTERRUPT? @VA08629 00432100
  526. BZ ATTNPLUS NO SPECIAL CHECKING @VA08629 00432150
  527. CLI VDEVTYPC,CLASGRAF LOOKING FOR 2250/3350 @VA08629 00432200
  528. BNE ATTNPLUS GRAPHICS DEVICE @VA08629 00432250
  529. TM VDEVTYPE,TYP2250 ... @VA08629 00432300
  530. BZ ATTNPLUS NO SPECIAL CHECKING @VA08629 00432350
  531. TM VDEVFLAG,VDEVUC WAITING FOR SENSE TO BE @VA08629 00432400
  532. BZ ATTNPLUS OFFLOADED? NO, HANDLE NORMALLY @VA08629 00432450
  533. * MUST WAIT FOR SENSE TO BE OFFLOADED BEFORE HANDLING ATTENTION 00432500
  534. * I/O FOR KEYBOARD OR LIGHT PEN FUNCTIONS. 00432550
  535. SLR R2,R2 CLEAR R2 @VA08629 00432600
  536. ICM R2,7,VDEVIO QUEUE OF PENDING INTERRUPTS @VA08629 00432650
  537. BNZ NEXTIOB FIND END OF CHAIN AND QUEUE I/O @VA08629 00432700
  538. STCM R10,7,VDEVIO STORE POINTER TO IOBLOK @VA08629 00432750
  539. B GOTODSP OFF TO THE DISPATCHER @VA08629 00432800
  540. DROP R10 @VA08629 00432850
  541. USING IOBLOK,R2 R2 IOBLOK ADDRESSABILITY @VA08629 00432900
  542. NEXTIOB L R14,IOBFPNT POINTER TO NEXT IOB ON CHAIN @VA08629 00432950
  543. LTR R14,R14 LOOKING FOR END OF CHAIN @VA08629 00433000
  544. BZ QUEUE FOUND END - QUEUE THIS IOB @VA08629 00433050
  545. LR R2,R14 SAVE THIS IOBLOK POINTER @VA08629 00433100
  546. B NEXTIOB CONTINUE LOOKING FOR END @VA08629 00433150
  547. QUEUE ST R10,IOBFPNT CHAIN IN CURRENT IOBLOK @VA08629 00433200
  548. GOTODSP SLR R14,R14 CLEAR R14 TO ZERO POINTER @VA08629 00433250
  549. ST R14,IOBFPNT-IOBLOK(R10) CLEAR FORWARD POINTER @VA08629 00433300
  550. GOTO DMKDSPCH OFF TO THE DISPATCHER @VA08629 00433350
  551. SPACE 00433400
  552. USING IOBLOK,R10 RE-ESTABLISH R10 ADDRESSABILITY @VA08629 00433450
  553. ATTNPLUS TM IOBCSW+4,X'FF'-(ATTN+UC) ANYTHING ELSE? @VA08629 00433500
  554. BZ SAVESTAT NO-ADD TO OLD STATUS @VA12082 00434200
  555. CLI VDEVTYPC,CLASGRAF IS THIS GRAPHICS TYPE @VA12082 00434400
  556. BNE VIOBY1 NO-POST AS SINGLE INTERRUPT @VA12082 00434600
  557. CLI IOBCSW+4,ATTN+CUE DO WE HAVE ATTN AND CUE @VA12082 00434800
  558. BNE VIOBY1 NO-POST AS SINGLE INTERRUPT @VA12082 00435000
  559. TM VDEVINTS,X'04' DO WE HAVE DE END @VA12082 00435200
  560. BO SAVESTAT YES-ADD TO OLD STATUS @VA12082 00435400
  561. VIOBY1 EQU * @VA12082 00435600
  562. OI VDEVFLAG,VDEVPOST FLAG AS SINGLE INTERRUPT @VA12082 00435800
  563. SAVESTAT O R3,VDEVINTS-2 ADD TO EXISTING STATUS, IF ANY @VA01653 00436000
  564. STH R3,VDEVINTS AND STORE IN DEVICE BLOCK 00437000
  565. OI VDEVSTAT,VDEVPEND INDICATE DEVICE CLASS INTERRUPT PEND 00438000
  566. TM IOBSPEC,IOBUNSL UNSOLICITED INTERRUPT ? @VA04115 00439000
  567. BO FREEDEV YES - LEAVE IT ALONE @VA04115 00440000
  568. CLI VDEVTYPC,CLASGRAF IS IT A GRAPHICS DEVICE? @VA04456 00441000
  569. BNE FREEDEV NO - CNTRL UNIT END OK @VA04456 00442000
  570. NI VDEVINTS,X'FF'-CUE 3272 GIVES FALSE 'CUE+DE' @VA04115 00443000
  571. SPACE 2 00444000
  572. FREEDEV NI VDEVSTAT,255-VDEVBUSY FREE UP DEVICE @VA08747 00445100
  573. TM IOBFLAG,IOBRELCU THIS OPERATION RELEASE CU ? @VA04278 00446000
  574. BNZ *+8 YES..DON'T RESET CU BUSY (BMPX @VA04278 00447000
  575. * CHANNEL) 00448000
  576. NI VCUSTAT,255-VCUBUSY FREE UP CONTORL UNIT IF BUSY@VA01700 00449000
  577. NI VDEVFLAG,X'FF'-VDEVSAS DONE WITH SEEK, IF ANY 00450000
  578. LA R2,GETRCAW SET R2 TO CONTINUE AT "GETRCAW" AND ... 00452000
  579. SPACE 00453000
  580. CHKIOERB EQU * CHECK FOR POSSIBLE IO ERROR BLOCK (R2 = RETURN REG): 00454000
  581. L R1,IOBIOER GET ADDRESS OF IOERBLOK 00455000
  582. LTR R1,R1 IS THERE ONE ? 00456000
  583. BCR 8,R2 <BZ> NO - RETURN (OR CONTINUE AT GETRCAW) 00457000
  584. USING IOERBLOK,R1 ADDRESSABILITY 00458000
  585. TM IOERCSW+5,CDC+CCC+IFCC WAS THIS A CHANNEL @V508690 00458050
  586. * ERROR ? 00458100
  587. BZ NOCHAN01 NO, CONTINUE PROCESSING @V508690 00458150
  588. TM IOERCSW+5,IFCC WAS IT IFCC ONLY? @VA10829 00458160
  589. BZ NOTIFCC NO, CONTINUE @VA10829 00458170
  590. NI VDEVSTAT,255-VDEVCHBS IF ON, TURN IT OFF @VA10829 00458180
  591. NOTIFCC EQU * @VA10829 00458190
  592. L R15,VDEVIOER GET OLD(SENSE) IOERBLOK POINTER @V508690 00458200
  593. ST R1,VDEVIOER SAVE (CHANNEL CHECK) IOERBLOK @V508690 00458250
  594. * FOR REFLECTION 00458300
  595. SR R1,R1 CLEAR IT @V508690 00458350
  596. ST R1,IOBIOER WIPE OUT IOERBLOK IN THE IOBLOK @V508690 00458400
  597. LTR R1,R15 DID WE HAVE AN OLD IOERBLOK ? @V508690 00458450
  598. BZR R2 NO, RETURN @V508690 00458500
  599. B IOERFRET WE DID, BETTER FRET IT FIRST. @V508690 00458550
  600. NOCHAN01 EQU * @V508690 00458600
  601. TM IOERCSW+4,UC UNIT CHECK PRESENT ? 00459000
  602. BO CKIOER .....CONTINUE @VA07884 00460100
  603. LA R0,IOERSIZE IF NOT, RELEASE THE BLOK 00461000
  604. AH R0,IOEREXT ADD EXTRA SIZE (IF ANY) OF IOERBLOK 00462000
  605. CALL DMKFRET ... 00463000
  606. XC IOBIOER,IOBIOER CLEAR IOERBLOK POINTER @VA03443 00464000
  607. BR R2 RETURN (OR CONTINUE AT GETRCAW) 00465000
  608. EJECT 00466000
  609. CKIOER L R0,VDEVIOER ANY OLD SENSE BYTES HANGING AROUND ? 00472000
  610. LTR R0,R0 ?? 00473000
  611. BZ SAVEIOER NO -- 00474000
  612. LR R1,R0 OLD IOERBLOK STILL THERE, 00475000
  613. LA R0,IOERSIZE GET RID OF IT 00476000
  614. AH R0,IOEREXT ADD EXTRA SIZE (IF ANY) OF IOERBLOK 00477000
  615. CALL DMKFRET ... 00478000
  616. L R1,IOBIOER AND KEEP THE NEW ONE ... 00479000
  617. SAVEIOER ST R1,VDEVIOER SAVE NEW SENSE INFORMATION 00480000
  618. XC IOBIOER,IOBIOER CLEAR IOERBLOK POINTER @VA03443 00481000
  619. OI VDEVFLAG,VDEVUC AND SET FLAG NOTING THEIR PRESENSE 00482000
  620. CLC VDEVTYPC(2),=AL1(CLASDASD,TYP3340) 3340? @V56BDA8 00482050
  621. BNER R2 NO, RETURN (OR CONTINUE AT @V56BDA8 00482100
  622. * GETRCAW) 00482150
  623. TM IOERDATA+6,CECYL CE CYLINDER? @V56BDA8 00482200
  624. BOR R2 YES, DONT TOUCH IT @V56BDA8 00482250
  625. SR R0,R0 CLEAR OUT REGISTER @V56BDA8 00482300
  626. IC R0,IOERDATA+6 0CCXHHHH @V56BDA8 00482350
  627. SLL R0,3 GET C512 + C256 @V56BDA8 00482400
  628. IC R0,IOERDATA+5 LOW ORDER CC @V56BDA8 00482450
  629. SH R0,VDEVRELN MAKE POSITION VIRTUAL @V56BDA8 00482500
  630. STH R0,VDEVPOSN STORE CC @V56BDA8 00482550
  631. MVN VDEVPOSN+3(1),IOERDATA+6 COPY H @V56BDA8 00482600
  632. BR R2 RETURN (OR CONTINUE AT GETRCAW) 00483000
  633. SPACE 00484000
  634. GETRCAW L R1,IOBCAW GET ADDRESS OF REAL CCW LIST 00485000
  635. LTR R1,R1 IS THERE ONE ?? 00486000
  636. BNZ CKVR YES...GO TEST FOR V=R USER @VA03443 00487000
  637. ICM R1,15,IOBIOER IS THERE AN IOERBLOK? @VA03443 00488000
  638. BZ CKDE NO...GO TEST FOR UNSOL. DEV. END.@VA03443 00489000
  639. TM IOBSTAT,IOBFATAL DID SENSE FAIL? @VA03443 00490000
  640. BZ CKDE NO...CONTINUE @VA03443 00491000
  641. LA R2,IOERGONE SET RETURN ADDRESS @VA03443 00492000
  642. B IOERFRET YES...GET RID OF IOERBLOK @VA03443 00493000
  643. CKVR EQU * @VA03443 00494000
  644. AIF (NOT &VIRREAL).NOVR11 **AIF** 00495000
  645. C R11,AVMREAL DOES USER OWN VIRT=REAL AREA 00496000
  646. BNE UNTFR4 NO, RELEASE THE CHANNEL PROGRAM 00497000
  647. ICM R15,15,IOBMISC WAS CHANNEL PROGRAM TRANSLATED 00498000
  648. BZ NOUNTFR4 NO, CONTINUE 00499000
  649. UNTFR4 DS 0H CONNECTOR 00500000
  650. .NOVR11 ANOP 00501000
  651. CL R10,IOBLINK IS IT COPY IOB ? @VA09216 00501100
  652. BNE NOUNTFR4 NO, DON'T UNTRANSLATE IT @VA09216 00501150
  653. CALL DMKUNTFR FREE THE CCW LIST 00502000
  654. NOUNTFR4 DS 0H CONNECTOR 00503000
  655. TM IOBSTAT,IOBFATAL DID SENSE FAIL? @VA03443 00504000
  656. BZ STAKPEND NO...CONTINUE @VA03443 00505000
  657. ICM R1,15,VDEVIOER IS THERE AN IOERBLOK? @VA03443 00506000
  658. BZ STAKPEND NO...CONTINUE @VA03443 00507000
  659. BAL R2,IOERFRET GO FRET IOERBLOK @VA03443 00508000
  660. IOERGONE EQU * @VA03443 00509000
  661. B STAKPEND GO STACK THE INTERRUPT 00510000
  662. SPACE 00511000
  663. CKDE CLI IOBCSW+4,DE STANDALONE DEVICE END ? 00512000
  664. BNE STAKPEND NO -- 00513000
  665. NI VDEVSTAT,X'FF'-VDEVNRDY UNFLAG POSSIBLE NOT READY 00514000
  666. SPACE 00515000
  667. L R1,VDEVIOER MIGHT BE SOME OLD SENSE BYTES 00516000
  668. LTR R1,R1 ARE THERE ANY ? 00517000
  669. BZ STAKPEND NOPE - NOT TODAY. 00518000
  670. USING IOERBLOK,R1 00519000
  671. TM VDEVSTAT,VDEVDED IOERBLOK OR SENSE 00520000
  672. BZ NOTDED BR, MUST BE SENSE DATA 00521000
  673. B STAKPEND ALLOW ERROR TO CLEAR @VA05978 00522500
  674. EJECT 00524000
  675. NOTDED EQU * 00525000
  676. TM VDEVTYPC,CLASURI+CLASURO SPPOOL DEVICE 00526000
  677. BZ NIINTREQ NO 00527000
  678. CLRPTR EQU * 00528000
  679. SR R1,R1 00529000
  680. ST R1,VDEVIOER CLEAR SENSE INFO. 00530000
  681. B STAKPEND GO STACK IT 00531000
  682. NIINTREQ NI IOERDATA,255-INTREQ RESET INT. REQ. 00532000
  683. DROP R1 00533000
  684. SPACE 00534000
  685. STAKPEND EQU * HERE TO STACK ALL PENDING INTERRUPTS 00535000
  686. TM IOBSPEC3,IOBPST POST THIS INTERRUPT? @VA09137 00535200
  687. BNO NOPOST NO @VA09137 00535400
  688. OI VDEVFLG2,VDEVPST TELL DSP TO POST @VA09137 00535600
  689. NOPOST EQU * @VA09137 00535800
  690. LH R3,VDEVADD GET DEVICE ADDRESS (0-F) 00536000
  691. AR R3,R3 AND MULTIPLY BY 2 00537000
  692. LH R3,DMKVIOMK(R3) CORRECT INTERRUPT MASK BIT 00538000
  693. O R3,VCUDVINT-2 ADD TO PENDING INTERRUPTS 00539000
  694. STH R3,VCUDVINT ... 00540000
  695. SPACE 00541000
  696. LH R3,VCUADD GET CU ADDRESS (00-F0) 00542000
  697. SRL R3,3 CU ADDRESS TIMES 2 00543000
  698. LH R3,DMKVIOMK(R3) CORRECT INTERRUPT MASK BITS 00544000
  699. O R3,VCHCUINT-2 ADD TO PENDING INTERRUPTS 00545000
  700. STH R3,VCHCUINT ... 00546000
  701. SPACE 00547000
  702. LH R3,VCHADD GET CHANNEL ADDRESS (000-600) 00548000
  703. SRL R3,7 TIMES 2 -- 00549000
  704. LH R3,DMKVIOMK(R3) CORRECT INTERRUPT MASK BIT 00550000
  705. O R3,VMIOINT-2 ADD TO PENDING INTERRUPTS 00551000
  706. STH R3,VMIOINT ... 00552000
  707. SPACE 00553000
  708. OI VMPEND,VMIOPND FLAG SUMMARY PENDING BIT 00554000
  709. AIF (NOT &TRACE(6)).TRA5 **AIF** 00555000
  710. TM VMTRCTL,VMTRIO+VMTRBRIN TRACE I/O'S OR ALL INSTR ? 00556000
  711. BZ VIRAXIT NO -- EXIT 00557000
  712. L R15,VMTREXT 00558000
  713. USING TREXT,R15 00559000
  714. TM TREXCTL2,TREXCSW CSW-TRACING WANTED FOR I/O INTERRUPTS ? 00560000
  715. BZ VIRAXIT NO -- EXIT 00561000
  716. DROP R15 00562000
  717. CALL DMKTRCSW TRACE VIRTUAL AND REAL CSW @V200820 00563000
  718. LH R1,IOBVADD VIRTUAL DEVICE ADDRESS @V200820 00564000
  719. CALL DMKSCNVU RE-SCAN FOR DEVICE BLOCKS @V200820 00565000
  720. BZ VIRAXIT STILL OK. @VA01255 00566000
  721. EJECT 00567000
  722. CHKUNSL EQU * @VA01255 00568000
  723. ICM R1,15,IOBIOER YES - ANY ERRORS? @VA01255 00569000
  724. BZ VIOBFRET NO - JUST RETURN THE IOBLOK @VA01255 00570000
  725. LA R0,IOERSIZE YES - FIGURE OUT THE SIZE @VA01255 00571000
  726. AH R0,IOEREXT-IOERBLOK(R1) . . . @VA01255 00572000
  727. CALL DMKFRET RETURN THE ERROR BLOCK @VA01255 00573000
  728. B VIOBFRET & THE IOBLOK @VA01255 00574000
  729. .TRA5 ANOP @V200820 00575000
  730. B VIRAXIT --- 00576000
  731. SPACE 00577000
  732. VIOFREDV EQU * FREE UP DEVICE, EXIT CC = 0 00578000
  733. NI VDEVSTAT,255-VDEVBUSY REMOVE TEMPORARY BUSY BIT 00579000
  734. NI VMRSTAT,255-VMIOWAIT TAKE USER OUT OF IOWAIT@VM01157 00580000
  735. B CKTERM2 @VA10261 00581010
  736. SPACE 00582000
  737. SETCC1 EQU * 00583000
  738. LA R2,X'10' SET CONDITION CODE ONE 00584000
  739. SPACE 1 00585000
  740. SETCCX EQU * HERE TO SET CONDITION CODE 00586000
  741. TM VMESTAT,VMEXTCM EXTENDED MACHINE ?? 00587000
  742. BZ *+12 NO -- 00588000
  743. EX R2,SETECC SET EC-MODE CONDITION CODE 00589000
  744. B *+8 00590000
  745. EX R2,SETCC 00591000
  746. NI VMRSTAT,X'FF'-(VMEXWAIT+VMIOWAIT) NOT IN WAIT @VA04305 00592000
  747. EJECT 00593000
  748. VIRAXIT DS 0H 00594000
  749. TM VCHSTAT,VCHBUSY IS THE CHANNEL STILL ACTIVE ?? 00595000
  750. BO CKTIO YES -- 00596000
  751. TM VDEVFLAG,VDEVSAS DASD EXECUTING A STAND ALONE SEEK ? 00597000
  752. BO CKTIO YES -- LEAVE CHANNEL FLAGGED ACTIVE 00598000
  753. SPACE 00599000
  754. LH R3,VCHADD GET CHANNEL ADDRESS 00600000
  755. SRL R3,7 TIMES 2 00601000
  756. LH R3,DMKVIOXK(R3) CORRECT UNFLAGGING MASK 00602000
  757. N R3,VMIOACTV-2 UNFLAG ACTIVE I/O 00603000
  758. STH R3,VMIOACTV ... 00604000
  759. TM VCHTYPE,VCHBMX BMX CHANNEL? @VA03150 00605000
  760. BNO *+8 NO, SKIP CALL TO SCAN @VA03150 00606000
  761. BAL R14,SCANALL ANYTHING ELSE GOING ON ? @VA03150 00607000
  762. SPACE 00608000
  763. CKTIO EQU * 00609000
  764. TM VMDSTAT,VMTIO WAS USER IN TIO BUSY LOOP ? 00610000
  765. BZ CKTERM NO- BRANCH 00611000
  766. CLI VDEVTYPC,CLASTERM SLOW SPEED TERMINAL DEVICE 00612000
  767. BNE *+8 NO- BRANCH 00613000
  768. NI VMRSTAT,X'FF'-VMIDLE YES- LET THE USER ENTER Q 00614000
  769. NI VMRSTAT,X'FF'-VMEXWAIT TAKE OUT OF WAIT -- 00615000
  770. CKTERM EQU * @V200820 00616000
  771. TM VDEVTYPC,CLASTERM+CLASGRAF TERMINAL DEVICE ? @VA10261 00616200
  772. BZ CKTERM1 NO @VA10261 00616210
  773. OI VMQSTAT,VMPRIDSP SET Q1 SWITCH @VA10261 00616220
  774. CKTERM1 DS 0H @VA10261 00616230
  775. CL R10,IOBLINK FINAL INTERRUPT ? @VA10261 00616240
  776. BNE VIOBFRET NO. TAKE BRANCH @VA10261 00616250
  777. B QTWO GO CHECK FOR INTERRUPT @VA10261 00616260
  778. CKTERM2 DS 0H @VA10261 00616270
  779. TM VDEVTYPC,CLASTERM+CLASGRAF TERMINAL DEVICE? @V408246 00622100
  780. BNZ QONE YES, ELGIBLE FOR Q1 @VA07264 00622350
  781. TM VDEVTYPC,CLASSPEC IS IT SPECIAL CLASS ? @VA07264 00622400
  782. BZ QTWO NO, Q2 DISPATCHING @VA07264 00622450
  783. TM VDEVTYPE,TYP3704 D/T 3704 OR 3705 ? @VA07264 00622500
  784. BZ QTWO NO, Q2 DISPATCHING @VA07264 00622550
  785. QONE OI VMQSTAT,VMPRIDSP Q1 SWITCH @VA07264 00622600
  786. QTWO EQU * @VA07264 00622650
  787. SLR R0,R0 ZERO OUT 00623000
  788. ST R0,VDEVIOB THE ACTIVE IOBLOK POINTER 00624000
  789. TM IOBSPEC2,IOBWRAP WAS THIS AN AUTOPOLL TASK? @V407438 00625000
  790. BZ VIOBFRET NO -- 00626000
  791. ICM R1,B'1111',IOBMISC GET AUTO POLL LIST @VA01384 00627000
  792. BZ VIOBFRET BRANCH IF NONE @VA01384 00628000
  793. L R0,IOBMISC2 GET NUMBER OF ENTIES @VA01384 00629000
  794. WRAPLIST L R2,0(R1) GET ADDRESS OF VIRTUAL TIC @VA01384 00630000
  795. CALL DMKPTRUL AND UNLOCK ITS PAGE FRAME 00631000
  796. LA R1,8(,R1) UPDATE TO NEXT ENTRY @VA01384 00632000
  797. BCT R0,WRAPLIST BRANCH IF MORE ENTIES @VA01384 00633000
  798. L R1,IOBMISC ADDRESS OF POLL LIST @VA01384 00634000
  799. ST R0,IOBMISC CLEAR ADDRESS @VA01384 00635000
  800. L R0,IOBMISC2 GET SIZE OF POLL LIST @VA01384 00636000
  801. CALL DMKFRET RELEASE IT @VA01384 00637000
  802. SPACE 00638000
  803. VIOBFRET EQU * @VA08629 00639060
  804. VIORLSE LR R2,R10 SAVE IOBLOK ADDR TEMPORARILY @VA08629 00639110
  805. TM IOBSPEC3,IOBSENSE SPECIAL 2250/3250 UC CASE? @VA08629 00639160
  806. BZ VIONOSTK NO, KEEP GOING @VA08629 00639210
  807. NI IOBSPEC3,X'FF'-IOBSENSE RESET 2250/3250 IND. @VA08629 00639260
  808. SLR R10,R10 ... @VA08629 00639310
  809. ICM R10,7,VDEVIO ANY PENDING I/O @VA08629 00639360
  810. BZ VIONOSTK NO, BYPASS UNSTACK OF PEND I/O @VA08629 00639410
  811. UNSTKNXT L R1,IOBFPNT-IOBLOK(R10) ADDR OF NEXT ON CHAIN @VA08629 00639460
  812. CALL DMKSTKIO UNSTACK PENDING I/O @VA08629 00639510
  813. LTR R1,R1 ANY MORE PENDING @VA08629 00639560
  814. BZ VIOCLR NO, KEEP GOING @VA08629 00639610
  815. LR R10,R1 PREPARE TO UNSTACK NEXT I/O @VA08629 00639660
  816. B UNSTKNXT UNSTACK NEXT REQUEST @VA08629 00639710
  817. VIOCLR STCM R1,7,VDEVIO CLEAR VDEVBLOK PEND CHAIN @VA08629 00639760
  818. VIONOSTK EQU * @VA08629 00639810
  819. LR R1,R2 NOW RELEASE IOBLOK @VA08629 00639860
  820. LA R0,IOBSIZE SIZE IN DOUBLEWORDS @VA08629 00639910
  821. CALL DMKFRET RELEASE STORAGE @VA08629 00639960
  822. EJECT 00642000
  823. VIOEXIT2 EQU * @VA03443 00643000
  824. GOTO DMKDSPCH AND GO DISPATCH @VA03443 00644000
  825. USING IOERBLOK,R1 @VA03443 00645000
  826. IOERFRET EQU * @V508690 00646100
  827. SR R0,R0 CLEAR IT @V508690 00646200
  828. CL R1,VDEVIOER REG 1 THE ACTIVE IOERBLOK ? @V508690 00646300
  829. BNE FRET01 NO ,DONT CLEAR POINTER @V508690 00646400
  830. ST R0,VDEVIOER CLEAR THE POINTER @V508690 00646500
  831. FRET01 LA R0,IOERSIZE GET SIZE OF IOERBLOK @V508690 00646600
  832. AH R0,IOEREXT AND THE EXTRA (IF ANY) @VA03443 00647000
  833. CALL DMKFRET AND RELEASE IT @VA03443 00648000
  834. NI VDEVFLAG,255-VDEVUC RESET UNIT CHECK FLAG @VA03443 00651000
  835. SLR R3,R3 CLEAR @VA08629 00651100
  836. ICM R3,7,VDEVIO ANY I/O PENDING? @VA08629 00651200
  837. BZR R2 NO, NOTHING TO RELEASE @VA08629 00651300
  838. LR R1,R3 GET IOBLOK INTO R10 FOR STACK @VA08629 00651400
  839. VIORUNQ L R3,IOBFPNT-IOBLOK(R1) GET POINTER TO NEXT @VA08629 00651500
  840. * PRIOR 00651600
  841. LA R0,IOBSIZE SIZE OF STORAGE TO RELEASE @VA08629 00651700
  842. CALL DMKFRET TO RELEASE PENDING I/O @VA08629 00651800
  843. LTR R3,R3 ANYMORE ON CHAIN? @VA08629 00651900
  844. BZR R2 NO, RETURN @VA08629 00652000
  845. LR R1,R3 CONTINUE TO RELEASE PEND I/O @VA08629 00652100
  846. B VIORUNQ ... @VA08629 00652200
  847. SPACE 00653000
  848. SCANALL STM R7,R8,TEMPSAVE SAVE THESE REGS @VA03150 00654000
  849. NI VCUSTAT,255-VCUACTV RESET CU ACTIVE FLAG @VA03150 00655000
  850. LA R4,2 LOAD INDEX INCREMENT @VA03150 00656000
  851. LA R5,30 LOAD INDEX COMPARAND VALUE @VA03150 00657000
  852. SR R3,R3 ZERO VCUDVTBL INDEX @VA03150 00658000
  853. RESNDV LH R8,VCUDVTBL(R3) LOAD NEXT VDEVBLOK INDEX @VA03150 00659000
  854. LTR R8,R8 DOES DEVICE EXIST ? @VA03150 00660000
  855. BM RESXDV NO, INDEX TO NEXT ONE @VA03150 00661000
  856. A R8,VMDVSTRT POINT TO VDEVBLOK @VA03150 00662000
  857. TM VDEVSTAT,VDEVBUSY IS DEVICE BUSY ? @VA03150 00663000
  858. BNO RESXDV NO, INDEX TO NEXT ONE @VA03150 00664000
  859. TM VDEVTYPC,CLASTERM IS THIS A TERMINAL? @VA03150 00665000
  860. BO RESXDV YES, SKIP IT AND CHECK NEXT DEV @VA03150 00666000
  861. OI VCUSTAT,VCUACTV C U STILL ACTIVE THEN @VA03150 00667000
  862. REACTIVE LH R1,VCHADD GET CHANNEL ADDRESS @VA03150 00668000
  863. SRL R1,7 TIMES 2 @VA03150 00669000
  864. LH R1,DMKVIOMK(R1) PICK UP TURN ON MASK @VA03150 00670000
  865. O R1,VMIOACTV-2 ADD IT BACK @VA03150 00671000
  866. STH R1,VMIOACTV CHANNEL STILL ACTIVE @VA03150 00672000
  867. LM R7,R8,TEMPSAVE RESTORE REGS @VA03150 00673000
  868. BR R14 RETURN @VA03150 00674000
  869. RESNCU LH R7,VCHCUTBL(R2) LOAD NEXT VCUBLOK INDEX @VA03150 00675000
  870. LTR R7,R7 DOES C U EXIST ? @VA03150 00676000
  871. BM RESXCU NO - GET NEXT ONE @VA03150 00677000
  872. A R7,VMCUSTRT POINT TO VCUBLOK @VA03150 00678000
  873. TM VCUSTAT,VCUACTV IS C U ACTIVE ? @VA03150 00679000
  874. BO REACTIVE RESET CHANNEL ACTIVE @VA03150 00680000
  875. B RESXCU CONTINUE WITH NEXT CU @VA03150 00681000
  876. RESXDV BXLE R3,R4,RESNDV BRANCH IF MORE DEVICES ON C U @VA03150 00682000
  877. SR R2,R2 ZERO VCHCUTBL INDEX @VA03150 00683000
  878. RESXCU BXLE R2,R4,RESNCU BRANCH IF MORE CONTROL UNITS @VA03150 00684000
  879. LM R7,R8,TEMPSAVE RESTORE REGS @VA03150 00685000
  880. BR R14 RETURN @VA03150 00686000
  881. EJECT 00687000
  882. SETCC OI VMPSW+4,0 EXECUTED TO SET BC MODE COND CODE@VA05037 00688000
  883. SETECC OI VMPSW+2,0 EXECUTED TO SET EC MODE COND CODE@VA05037 00689000
  884. SPACE 00690000
  885. DMKVIOCT DC F'0' COUNT OF TOTAL I/O INSTRUCTIONS 00691000
  886. DMKVIOCW DC F'0' COUNT OF CALLS TO DMKCCWTR 00692000
  887. DMKVIOSI DC F'0' COUNT OF VIRT. SIO'S @V2B2638 00693000
  888. DMKVIOSF DC F'0' COUNT OF VIRT. SIOF'S @V2B2638 00694000
  889. DMKVIOTI DC F'0' COUNT OF VIRT. TIO'S @V2B2638 00695000
  890. DMKVIOCI DC F'0' COUNT OF VIRT. CLRIO'S @V2B2638 00696000
  891. DMKVIOHI DC F'0' COUNT OF VIRT. HIO'S @V2B2638 00697000
  892. DMKVIOHD DC F'0' COUNT OF VIRT. HDV'S @V2B2638 00698000
  893. DMKVIOTC DC F'0' COUNT OF VIRT. TCH'S @V2B2638 00699000
  894. SPACE 00700000
  895. DMKVIOMK DS 0H MASKS TO SET INTRPT PENDING IN VMBLOK 00701000
  896. DC X'8000400020001000' 00702000
  897. DC X'0800040002000100' 00703000
  898. DC X'0080004000200010' 00704000
  899. DC X'0008000400020001' 00705000
  900. SPACE 00706000
  901. DMKVIOXK DS 0H MASKS TO RESET INTRPT PENDING IN VMBLOK 00707000
  902. DC X'7FFFBFFFDFFFEFFF' 00708000
  903. DC X'F7FFFBFFFDFFFEFF' 00709000
  904. DC X'FF7FFFBFFFDFFFEF' 00710000
  905. DC X'FFF7FFFBFFFDFFFE' 00711000
  906. SPACE 1 00711100
  907. CECYL EQU X'10' 3340/44 CE CYLINDER @V56BDA8 00711200
  908. SPACE 00712000
  909. LTORG 00713000
  910. EJECT 00714000
  911. COPY VBLOKS @VA04320 00715000
  912. COPY VCTCA @VA04320 00716000
  913. COPY RBLOKS @VA04320 00717000
  914. COPY VMBLOK @VA04320 00718000
  915. COPY TREXT @VA04320 00719000
  916. COPY IOBLOKS @VA04320 00720000
  917. COPY IOER @VA04320 00721000
  918. PSA @VA04320 00722000
  919. COPY DEVTYPES @VA04320 00723000
  920. COPY EQU @VA04320 00724000
  921. END DMKVIO @VA04320 00725000