ibm:vm370-lib:cp:dmkvmc.assemble_src
Table of Contents
DMKVMC Source
References
- Fixes Applied : 6
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [R12989DK]
Source Listing
- DMKVMC.ASSEMBLE.txt
- VMC TITLE 'DMKVMC (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 @V387045 00002000
- DMKVMC CSECT @V387045 00003000
- MODID DC CL8'DMKVMC' MODULE IDENTIFIER @V387045 00004000
- SPACE 00005000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00006000
- * 00007000
- * MODULE NAME - 00008000
- * 00009000
- * DMKVMC 00010000
- * 00011000
- * DESCRIPTIVE NAME - 00012000
- * 00013000
- * VIRTUAL MACHINE COMMUNICATION FACILITY SUPPORT MODULE 00014000
- * 00015000
- * COPYRIGHT - NONE 00016000
- * 00017000
- * CHANGE ACTIVITY - NOT APPLICABLE 00018000
- * 00019000
- * CONTENTS: 00020000
- * 00021000
- * DMKVMCFC - PROCESS USER DIAGNOSE X'0068' REQUEST. 00022000
- * DMKVMCEX - REFLECT USER EXTERNAL INTERRUPT DATA. 00023000
- * DMKVMCUA - UNAUTHORIZE VMCF USER DURING SYSTEM RESET 00024000
- * (THIS ENTRY POINT IS DESCRIBED IN SUBROUTINE DESCRIPTION 00025000
- * VMCUAUTH) 00026000
- * 00027000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00028000
- * 00029000
- * SUBROUTINE NAME - 00030000
- * 00031000
- * DMKVMCFC 00032000
- * 00033000
- * FUNCTION - 00034000
- * 00035000
- * TO PROVIDE A VIRTUAL MACHINE -> VIRTUAL MACHINE 00036000
- * COMMUNICATION FACILITY THROUGH CP DIAGNOSE CODE 00037000
- * X'0068'. 00038000
- * 00039000
- * ATTRIBUTES - 00040000
- * 00041000
- * REENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVC 00042000
- * 00043000
- * ENTRY CONDITIONS - 00044000
- * 00045000
- * GPR 13 = SAVEAREA ADDRESS 00046000
- * GPR 12 = ADDRESS OF DMKVMCFC 00047000
- * GPR 11 = ADDRESS OF VMBLOK 00048000
- * GPR 2 = LENGTH OF VMCPARM (VMCPLEN) 00049000
- * GPR 1 = VIRTUAL ADDRESS OF VMCPARM 00050000
- * 00051000
- * EXIT CONDITIONS - 00052000
- * 00053000
- * GPR 14-15 = DESTROYED (VOLATILE) 00054000
- * GPR 13 = SAVEAREA 00055000
- * GPR 12 = DESTROYED (VOLATILE) 00056000
- * GPR 3-11 = RESTORED 00057000
- * GPR 2 = RETURN CODE PASSED BACK TO DMKHVC 00058000
- * GPR 0-1 = RESTORED 00059000
- * 00060000
- * CALLS TO OTHER ROUTINES - 00061000
- * 00062000
- * DMKFREE - GET STORAGE FOR VMCBLOKS - XINTBLOK - CPEXBLOK 00063000
- * DMKFRET - FRET VMCBLOK - XINTBLOK STORAGE 00064000
- * DMKSCNAU - LOCATE SOURCE / SINK VMBLOKS 00065000
- * DMKPTRAN - FETCH USER BUFFERS AND VMCPARM 00066000
- * DMKPSASC - CHECK STORAGE PROTECTION 00067000
- * DMKPSAFC - CHECK FETCH PROTECTION 00068000
- * DMKPSASP - CHECK STORAGE PROTECTION 00069000
- * DMKSTKCP - STACK WAKE - UP CPEXBLOKS 00070000
- * DMKPTRUL - UNLOCK SOURCE PAGES (DATA TRANSFER) 00071000
- * 00072000
- * SUBFUNCTION ROUTINES: 00073000
- * 00074000
- * VMCAUTH - AUTHORIZE 00075000
- * VMCUAUTH - UNAUTHORIZE + DMKVMCUA ENTRY POINT 00076000
- * VMCSEND - SEND 00077000
- * VMCSENDR - SEND/RECV 00078000
- * VMCSENDX - SENDX 00079000
- * VMCRECV - RECEIVE 00080000
- * VMCCNCL - CANCEL 00081000
- * VMCREPLY - REPLY 00082000
- * VMCQIES - QUIESCE 00083000
- * VMCRESUM - RESUME 00084000
- * VMCIDENT - IDENTIFY 00085000
- * VMCREJEC - REJECT 00086000
- * 00087000
- * INTERNAL SUBROUTINES: 00088000
- * 00089000
- * VMCBUILD - INITIALIZE AND ENQ VMCBLOK 00090000
- * VMCENQ - ENQ VMCBLOK ON SOURCE/SINK VMCBLOK CHAIN 00091000
- * VMCDEQ - DEQ VMCBLOK FROM VMCBLOK CHAIN 00092000
- * VMCICHK - INITIAL VALIDITY CHECK OF SINK USER STATUS 00093000
- * VMCSCANS - LOCATE VMCBLOK ON SINK VMCBLOK CHAIN 00094000
- * VMCSCANR - LOCATE VMCBLOK FOR ACTIVE USER (SOURCE/SINK) 00095000
- * VMCWAKUP - WAKE UP SOURCE/SINK USER 00096000
- * VMCHECK - VALIDITY CHECK VIRTUAL BUFFER ADDRESSES 00097000
- * VMCFRET - FRET VMCBLOK STORAGE 00098000
- * VMCSUSER - LOCATE SOURCE USER VMBLOK ADDRESS 00099000
- * VMCXFER - DATA TRANSFER SUBROUTINE 00100000
- * VMCEXIT - NORMAL EXIT FOR DMKVMCFC ENTRY 00101000
- * 00102000
- * EXTERNAL REFERENCES - 00103000
- * 00104000
- * NONE 00105000
- * 00106000
- * TABLES / WORK AREAS - 00107000
- * 00108000
- * VMBLOK, VMCBLOK, VMCPARM, XINTBLOK, CPEXBLOK, SAVEAREA 00109000
- * ECBLOK 00110000
- * 00111000
- * MACROS - 00112000
- * 00113000
- * CALL - USED TO CALL OTHER CP MODULES 00114000
- * EXIT - USED TO EXIT FROM DMKVMC 00115000
- * TRANS - USED TO FETCH VIRTUAL PAGES 00116000
- * PSA - USED TO REFERENCE THE PREFIX STORAGE AREA 00117000
- * RELOC - USED TO DEFINE ENTRY POINTS WITHIN DMKVMC 00118000
- * 00119000
- * REGISTER USAGE - 00120000
- * 00121000
- * GPR 13 = SAVEAREA REGISTER 00122000
- * GPR 12 = BASE REGISTER FOR DMKVMC 00123000
- * GPR 11 = VMBLOK ADDRESSABILITY 00124000
- * GPR 10 = INTERNAL LINK REGISTER 00125000
- * GPR 9 = ADDRESS OF VMCPARM 00126000
- * GPR 8 = ADDRESS OF VMCBLOK 00127000
- * GPR 7 = ADDRESS OF ALTERNATE VMCBLOK 00128000
- * GPR 3 = ADDRESS OF ALTERNATE USER VMBLOK 00129000
- * GPR 2 = RETURN CODE REGISTER 00130000
- * 00131000
- * GPR 0-1, 4-6, 14-15 = WORK REGISTERS 00132000
- * 00133000
- * NOTES - 00134000
- * 00135000
- * THIS MODULE CONTAINS THE FOLLOWING VMC DIAGNOSE 00136000
- * X'0068' SUB-FUNCTIONS: 00137000
- * 00138000
- * SUB-FUNCTION CODE (HEX) 00139000
- * 00140000
- * AUTHORIZE 0 00141000
- * UNAUTHORIZE 1 00142000
- * SEND 2 00143000
- * SEND/RECV 3 00144000
- * SENDX 4 00145000
- * RECEIVE 5 00146000
- * CANCEL 6 00147000
- * REPLY 7 00148000
- * QUIESCE 8 00149000
- * RESUME 9 00150000
- * IDENTIFY A 00151000
- * REJECT B 00152000
- * 00153000
- * OPERATION - 00154000
- * 00155000
- * 00156000
- * DMKVMCFC IS CALLED BY DMKHVC WHEN A USER EXECUTES A 00157000
- * DIAGNOSE INSTRUCTION WITH A FUNCTION CODE = X'0068'. 00158000
- * THE R1 REGISTER AT ENTRY TO DMKVMCFC CONTAINS THE 00159000
- * VIRTUAL ADDRESS OF THE USERS PARAMETER LIST VMCPARM. 00160000
- * 00161000
- EJECT 00162000
- * 00163000
- * 0 1 2 3 4 5 6 7 8 00164000
- * 00165000
- * 0 +-----------------------------------------------+ 00166000
- * | V*1 | V*2 | VMCPFUNC | VMCPMID | 00167000
- * 8 |-----------------------------------------------| 00168000
- * | VMCPUSER | 00169000
- * 10 |-----------------------------------------------| 00170000
- * | VMCPVADA | VMCPLENA | 00171000
- * 18 |-----------------------------------------------| 00172000
- * | VMCPVADB | VMCPLENB | 00173000
- * 20 |-----------------------------------------------| 00174000
- * | VMCPUSE | 00175000
- * 28 +-----------------------------------------------+ 00176000
- * 00177000
- * DMKVMCFC OBTAINS FREE STORAGE FOR A VMCBLOK VIA A CALL 00178000
- * TO DMKFREE AND COPIES THE USER PARMLIST VMCPARM TO THE 00179000
- * VMCBLOK. DMKVMCFC THEN EXTRACTS THE SUBFUNCTION CODE 00180000
- * (VMCPFUNC) AND VERIFIES THAT IT IS VALID. (WITHIN RANGE 00181000
- * X'0000' TO X'000B') IF THE SUBFUNCTION CODE IS NOT 00182000
- * VALID THEN THE STORAGE ACQUIRED FOR THE VMCBLOK IS 00183000
- * RELEASED VIA A CALL TO MODULE DMKFRET AND AN EXIT IS 00184000
- * MADE TO DMKHVC WITH THE APPROPRIATE RETURN CODE SET IN 00185000
- * GPR 2. IF THE SUBFUNCTION CODE IS VALID AND FOR 00186000
- * AUTHORIZE A BRANCH IS EXECUTED DIRECTLY TO THE 00187000
- * AUTHORIZE SUBROUTINE. IF THE SUB- FUNCTION IS FOR 00188000
- * OTHER THAN AUTHORIZE A CHECK IS MADE TO INSURE THAT THE 00189000
- * USER IS AUTHORIZED FOR VM COMMUNICATION. IF CP IS THE 00190000
- * SENDER OF THE VMCF DATA, THEN NO AUTHORIZE IS REQUIRED 00190100
- * FOR CP BUT THE RECEIVER OF THE DATA MUST BE AUTHORIZED. 00190200
- * (THE FOLLOWING BIT, VMBCAUTH, IN THE BYTE, VMCXSTAT, 00190300
- * OF THE USER'S VMBLOK MUST BE SET 'ON'.) IF THE USER 00191000
- * IS NOT AUTHORIZED FOR VM COMMUNICATION RETURN IS MADE 00192000
- * TO DMKHVC WITH APPROPRIATE RETURN CODE SET IN GPR 2, 00193000
- * OTHERWISE A BRANCH IS MADE DIRECTLY TO THE SUBFUNCTION 00194000
- * ROUTINE VIA A BRANCH TABLE. 00195000
- * 00196000
- * VMCAUTH - AUTHORIZE SUBROUTINE - 00197000
- * 00198000
- * 1. VALIDITY CHECK USERS EXTERNAL INTERRUPT BUFFER 00199000
- * LENGTH VMCPLENA. (MUST NOT BE LESS THAN VMCMLEN) 00200000
- * 2. VERIFY THAT USERS EXTERNAL INTERRUPT BUFFER IS 00201000
- * DOUBLEWORD ALIGNED. 00202000
- * 3. VALIDITY CHECK USER EXTERNAL INTERRUPT BUFFER 00203000
- * ADDRESS VIA SUBROUTINE 'VMCHECK'. 00204000
- * 4. FETCH USERS EXTERNAL INTERRUPT BUFFER VIA THE 00205000
- * 'TRANS' MACRO AND TEST FOR STORE PROTECTION 00206000
- * VIOLATIONS VIA MODULE DMKPSASP. 00207000
- * 5. INITIALIZE MASTER VMCBLOK AND CHAIN TO VMBLOK 00208000
- * ANCHOR VMCPNT. 00209000
- * 6. EXIT TO DMKHVC. 00210000
- * 00211000
- * VMCUAUTH - UNAUTHORIZE SUBROUTINE - 00212000
- * 00213000
- * 1. UNHOOK VMCBLOK CHAIN FROM VMBLOK AND FRET MASTER 00214000
- * VMCBLOK VIA SUBROUTINE VMCFRET. 00215000
- * 2. IF MORE VMCBLOKS EXIST CHECK FOR FINAL RESPONSE 00216000
- * EXTERNAL INTERRUPT (BIT VMCRESP). IF VMCBLOK IS 00217000
- * FOR A FINAL RESPONSE FRET THE BLOCK VIA SUBROUTINE 00218000
- * VMCFRET. 00219000
- * 3. IF VMCBLOK IS NOT A FINAL RESPONSE VMCBLOK LOCATE 00220000
- * SOURCE USERS VMBLOK VIA A CALL TO MODULE 00221000
- * DMKSCNAU. 00222000
- * 4. ENQUEUE THE VMCBLOK ON THE SOURCE USERS VMCBLOK 00223000
- * CHAIN VIA SUBROUTINE VMCENQ. 00224000
- * 5. WAKE UP SOURCE USER VIA SUBROUTINE VMCWAKUP. 00225000
- * 6. IF MORE VMCBLOKS EXIST ITERATE LOOP (2). 00226000
- * 7. SCAN USERS XINTBLOK CHAIN FOR A PENDING VMCF 00227000
- * EXTERNAL INTERRUPT AND IF ONE EXISTS DEQUEUE IT 00228000
- * FROM THE CHAIN AND RETURN IT TO FREE STORAGE VIA A 00229000
- * CALL TO MODULE DMKFREE. 00230000
- * 8. EXIT BACK TO MODULE DMKCFP OR DMKHVC VIA THE EXIT 00231000
- * MACRO. 00232000
- * 00233000
- * NOTE - WHEN VMCBLOKS ARE ENQUEUED ON THE SOURCE VMCBLOK 00234000
- * CHAIN THE BIT VMCRESP IS SET TO INDICATE FINAL RESPONSE 00235000
- * AND A DATA TRANSFER RETURN CODE IS SET INDICATING USER 00236000
- * NOT AVAILABLE. 00237000
- * 00238000
- * VMCSEND - SEND SUBROUTINE - 00239000
- * 00240000
- * 1. CHECK OUT SINK USER STATUS VIA SUBROUTINE 00241000
- * VMCICHK. 00242000
- * 2. VALIDITY CHECK USERS SEND BUFFER ADDRESS VIA 00243000
- * SUBROUTINE VMCHECK. 00244000
- * 3. SCAN FOR DUPLICATE MESSAGE VIA SUBROUTINE 00245000
- * VMCSCANS(R). 00246000
- * 4. INITIALIZE VMCBLOK AND ENQUEUE ON SINK VMCBLOK 00247000
- * CHAIN VIA SUBROUTINE VMCBUILD. 00248000
- * 5. WAKE UP SINK USER VIA SUBROUTINE VMCWAKUP. 00249000
- * 6. EXIT TO DMKHVC WITH APPROPRIATE RETURN CODE SET IN 00250000
- * GPR 2. 00251000
- * 00252000
- * VMCSENDR - SEND/RECV SUBROUTINE - 00253000
- * 00254000
- * 1. VALIDITY CHECK SINK USER STATUS VIA SUBROUTINE 00255000
- * VMCICHK. 00256000
- * 2. VALIDITY CHECK SEND AND REPLY BUFFER ADDRESSES VIA 00257000
- * SUBROUTINE VMCHECK. 00258000
- * 3. SCAN FOR DUPLICATE MESSAGE VIA SUBROUTINE 00259000
- * VMCSCANS(R). 00260000
- * 4. INITIALIZE AND ENQUEUE VMCBLOK ON SINK USER 00261000
- * VMCBLOK CHAIN VIA SUBROUTINE VMCBUILD. 00262000
- * 5. WAKE UP SINK USER VIA SUBROUTINE VMCWAKUP. 00263000
- * 6. EXIT TO DMKHVC WITH APPROPRIATE RETURN CODE SET IN 00264000
- * GPR 2. 00265000
- * 00266000
- * VMCSENDX - SENDX SUBROUTINE - 00267000
- * 00268000
- * 1. VALIDITY CHECK SINK USER STATUS VIA SUBROUTINE 00269000
- * VMCICHK. 00270000
- * 2. VALIDITY CHECK SEND BUFFER ADDRESS VIA SUBROUTINE 00271000
- * VMCHECK. 00272000
- * 3. VERIFY THAT SEND DATA WILL FIT IN SINK USER 00273000
- * EXTERNAL INTERRUPT BUFFER. 00274000
- * 4. SCAN FOR DUPLICATE MESSAGE VIA SUBROUTINE 00275000
- * VMCSCANS(R). 00276000
- * 5. INITIALIZE AND ENQUEUE VMCBLOK ON SINK VMCBLOK 00277000
- * CHAIN VIA SUBROUTINE VMCBUILD. 00278000
- * 6. WAKE UP SINK USER VIA SUBROUTINE VMCWAKUP. 00279000
- * 7. EXIT TO DMKHVC WITH APPROPRIATE RETURN CODE SET IN 00280000
- * GPR 2. 00281000
- * 00282000
- * VMCRECV - RECEIVE SUBROUTINE - 00283000
- * 00284000
- * 1. LOCATE SUBJECT VMCBLOK VIA SUBROUTINE VMCSCANR 00285000
- * (VMCPMID+ VMCPUSER). 00286000
- * 2. CHECK FOR PROTOCOL VIAOLATION AND SYNCHRONIZATION 00287000
- * ERRORS. (VMCCRECP - RECEIVE ALREADY EXECUTED) 00288000
- * 3. VALIDITY CHECK USER RECEIVE BUFFER ADDRESS VIA 00289000
- * SUBROUTINE VMCHECK. 00290000
- * 4. MOVE DATA FROM SOURCE SEND BUFFER TO SINK RECEIVE 00291000
- * BUFFER VIA SUBROUTINE VMCXFER. 00292000
- * 5. IF SUBFUNCTION WAS SEND/RECV EXIT BACK TO DMKHVC 00293000
- * (WAIT FOR REPLY). 00294000
- * 6. IF SUBFUNCTION WAS NOT SEND/RECV (SEND) DEQUEUE 00295000
- * VMCBLOK FROM SINK VMCBLOK CHAIN VIA SUBROUTINE 00296000
- * VMCDEQ AND ENQUEUE VMCBLOK ON SOURCE VMCBLOK CHAIN 00297000
- * VIA SUBROUTINE VMCENQ. 00298000
- * 7. SET FINAL RESPONSE EXTERNAL INTERRUPT IN VMCBLOK 00299000
- * (VMCCXINT+ VMCRESP) AND COPY USER DOUBLEWORD. 00300000
- * 8. WAKE UP SOURCE USER VIA SUBROUTINE VMCWAKUP. 00301000
- * 9. SET APPROPRIATE RETURN CODE IN GPR 2 AND EXIT TO 00302000
- * MODULE DMKHVC. 00303000
- * 00304000
- * VMCCNCL - CANCEL SUBROUTINE - 00305000
- * 00306000
- * 1. VERIFY THAT SINK USER IS LOGGED ON VIA A CALL TO 00307000
- * MODULE DMKSCNAU AND IF LOGGED ON VERIFY THAT THE SINK 00308000
- * USER IS AUTHORIZED FOR VM COMMUNICATION. 00309000
- * 2. CHECK FOR TOO LATE CONDITION AND PROTOCOL 00310000
- * VIOLATIONS. 00311000
- * 3. SCAN FOR SUBJECT VMCBLOK ON SINK USER CHAIN VIA 00312000
- * SUBROUTINE VMCSCANS. 00313000
- * 4. DEQUEUE SUBJECT VMCBLOK FOR SINK USER VMCBLOK 00314000
- * CHAIN AND FRET THE BLOCK VIA SUBROUTINE VMCFRET. 00315000
- * 5. SET APPROPRIATE RETURN CODE IF SINK HAS ALREADY 00316000
- * EXECUTED A RECEIVE BUT NOT A REPLY. 00317000
- * 6. DECREMENT MESSAGE COUNT IN MASTER VMCBLOK. 00318000
- * 7. SET APPROPRIATE RETURN CODE IN GPR 2 AND RETURN TO 00319000
- * MODULE DMKHVC VIA EXIT. 00320000
- * 00321000
- * VMCREPLY - REPLY SUBROUTINE - 00322000
- * 00323000
- * 1. SCAN FOR SUBJECT VMCBLOK VIA SUBROUTINE VMCSCANR. 00324000
- * 2. VERIFY THAT ORIGINAL REQUEST WAS SEND/RECV. 00325000
- * 3. CHECK FOR PROTOCOL VIOLATIONS AND SYNCHRONIZATION 00326000
- * ERROR. 00327000
- * 4. VALIDITY CHECK USERS REPLY DATA ADDRESS VIA 00328000
- * SUBROUTINE VMCHECK. 00329000
- * 5. MOVE REPLY DATA TO SOURCE REPLY BUFFER VIA 00330000
- * SUBROUTINE VMCXFER. 00331000
- * 6. DEQUEUE VMCBLOK FROM SINK VMCBLOK CHAIN VIA 00332000
- * SUBROUTINE VMCDEQ. 00333000
- * 7. COPY USER DOUBLEWORD AND SET FINAL RESPONSE 00334000
- * EXTERNAL INTERRUPT IN VMCBLOK (VMCRESP). 00335000
- * 8. ENQUEUE VMCBLOK ON SOURCE USER VMCBLOK CHAIN VIA 00336000
- * SUBROUTINE VMCENQ. 00337000
- * 9. WAKE UP SOURCE USER VIA SUBROUTINE VMCWAKUP. 00338000
- * 10. EXIT TO MODULE DMKHVC WITH APPROPRIATE RETURN CODE 00339000
- * SET IN GPR 2. 00340000
- * 00341000
- * NOTE - DATA TRANSFER RETURN CODE SET IN VMCEFLG OF 00342000
- * VMCBLOK. 00343000
- * 00344000
- * VMCQIES - QUIESCE SUBROUTINE - 00345000
- * 00346000
- * 1. SET VMACQIES FLAG IN MASTER VMCBLOK AND EXIT TO 00347000
- * DMKHVC WITH RC = 0. 00348000
- * 00349000
- * VMCRESUM - RESUME SUBROUTINE - 00350000
- * 00351000
- * 1. RESET VMACQIES FLAG IN MASTER VMCBLOK AND EXIT TO 00352000
- * MODULE DMKHVC WITH RC = 0. 00353000
- * 00354000
- * VMCIDENT - IDENTIFY SUBROUTINE - 00355000
- * 00356000
- * 1. VALIDITY CHECK SINK USER STATUS VIA SUBROUTINE 00357000
- * VMCICHK. 00358000
- * 2. INITIALIZE AND ENQUEUE VMCBLOK ON SINK VMCBLOK 00359000
- * CHAIN VIA SUBROUTINE VMCBUILD. 00360000
- * 3. SET FINAL RESPONSE IN VMCBLOK. (VMCRESP) 00361000
- * 4. WAKE UP SINK USER VIA SUBROUTINE VMCWAKUP. 00362000
- * 5. EXIT TO MODULE DMKHVC WITH APPROPRIATE RETURN CODE 00363000
- * SET IN GPR 2. 00364000
- * 00365000
- * VMCREJEC - REJECT SUBROUTINE - 00366000
- * 00367000
- * 1. LOCATE SUBJECT VMCBLOK VIA SUBROUTINE VMCSCANR. 00368000
- * 2. CHECK FOR PROTOCOL VIOLATION OR SYNCHRONIZATION 00369000
- * ERROR. 00370000
- * 3. DEQUEUE SUBJECT VMCBLOK FROM SINK VMCBLOK CHAIN 00371000
- * VIA SUBROUTINE VMCDEQ. 00372000
- * 4. COPY USER DOUBLEWORD AND SET FINAL RESPONSE 00373000
- * INTERRUPT AND REJECT FLAGS IN VMCBLOK 00374000
- * (VMCRESP+VMCRJCT). 00375000
- * 5. ENQUEUE VMCBLOK ON SOURCE VMCBLOK CHAIN VIA 00376000
- * SUBROUTINE VMCENQ. 00377000
- * 6. WAKE UP SOURCE USER VIA SUBROUTINE VMCWAKUP. 00378000
- * 7. EXIT TO MODULE DMKHVC WITH APPROPRIATE RETURN CODE 00379000
- * SET IN GPR 2. 00380000
- * 00381000
- * THE FOLLOWING ARE INTERNAL SUBROUTINES USED BY MODULE 00382000
- * DMKVMC SUBFUNCTION ROUTINES: 00383000
- * 00384000
- * VMCBUILD - INITIALIZE VMCBLOK FOR SOURCE REQUEST AND 00385000
- * ENQ ON SINK VMCBLOK CHAIN. 00386000
- * 00387000
- * 1. INITIALIZE VMCBLOK WITH SOURCE USERS CURRENT PSW 00388000
- * KEY (VMCKEY). 00389000
- * 2. CLEAR VMCEFLG TO ZERO. 00390000
- * 3. CLEAR VMCSTAT TO ZERO (WAS VMCPFLG1). 00391000
- * 4. UPDATE MESSAGE COUNT IN SOURCE MASTER VMCBLOK 00392000
- * (VMCACNT). 00393000
- * 5. BRANCH TO VMCENQ TO ENQUEUE VMCBLOK ON SINK USER 00394000
- * VMCBLOK CHAIN. 00395000
- * 00396000
- * VMCENQ - ENQUEUE VMCBLOK ON SOURCE OR SINK VMCBLOK 00397000
- * CHAIN. 00398000
- * 00399000
- * 1. IF THE VMCBLOK IS FOR A PRIORITY MESSAGE (VMCPRTY) 00400000
- * INSERT THE BLOCK AFTER THE LAST EXISTING PRIORITY 00401000
- * VMCBLOK, OTHERWISE, QUEUE THE BLOCK LAST ON THE 00402000
- * CHAIN. 00403000
- * 2. COPY USERID FIELD (VMUSER) TO VMCBLOK (VMCUSER). 00404000
- * 3. SET VMCCXINT FLAG IN VMCBLOK. 00405000
- * 4. RETURN TO CALLER. 00406000
- * 00407000
- * VMCDEQ - DEQUEUE SUBJECT VMCBLOK FROM VMCBLOK CHAIN 00408000
- * (VMCPNT IN VMBLOK). 00409000
- * 00410000
- * 1. DEQUEUE VMCBLOK AND RETURN TO CALLER. 00411000
- * 00412000
- * VMCICHK - INITIAL VALIDITY CHECK OF SINK USER STATUS 00413000
- * (VMCPUSER). 00414000
- * 00415000
- * 1. VERIFY THAT RECEVIER IS NOT CP 00415100
- * 2. VERIFY THAT USER IS NOT EXCEEDING THE MESSAGE 00416000
- * LIMIT. (VMCACNT IN MASTER VMCBLOK) 00417000
- * 3. CHECK TO SEE THAT SINK USER IS LOGGED ON VIA A 00418000
- * CALL TO MODULE DMKSCNAU. 00419000
- * 4. INSURE THAT SINK USER IS AUTHORIZED FOR VM 00420000
- * COMMUNICATION (VMBCAUTH IN VMCXSTAT OF VMBLOK). 00421000
- * 5. INSURE THAT USER IS NOT AUTHORIZED SPECIFIC FOR 00422000
- * SOME OTHER USER (VMCAAUTS FLAG IN MASTER 00423000
- * VMCBLOK). 00424000
- * 6. INSURE THAT SINK USER IS NOT QUIESCING STACKED 00425000
- * COMMUNICATION MESSAGES (VMACQIES FLAG IN MASTER 00426000
- * VMCBLOK). 00427000
- * 7. IF MESSAGE IS A PRIORITY MESSAGE (VMCPRTY IN 00428000
- * VMCSTAT OF VMCBLOK) VERIFY THAT SINK USER IS 00429000
- * AUTHORIZED TO RECEIVE PRIORITY MESSAGES (VMCAPRTY 00430000
- * IN VMCASTAT OF MASTER VMCBLOK). 00431000
- * 8. SET APPROPRIATE RETURN CODE IN GPR 2 AND EXIT TO 00432000
- * MODULE DMKHVC IF ANY ERRORS WERE DETECTED, 00433000
- * OTHERWISE, RETURN TO CALLER. 00434000
- * 00435000
- * VMCSCANS - LOCATE VMCBLOK ON SINK VMCBLOK CHAIN. 00436000
- * 00437000
- * 1. SCAN SINK VMCBLOK CHAIN FOR SUBJECT VMCBLOK 00438000
- * (VMUSER = VMCUSER - VMCPMID = VMCMID). 00439000
- * 2. IF VMCBLOK IS FOUND SET CC = 0 AND RETURN TO 00440000
- * CALLER, OTHERWISE, SET CC = 2 AND RETURN TO 00441000
- * CALLER. 00442000
- * 00443000
- * VMCSCANR - LOCATE VMCBLOK FOR ACTIVE USER. 00444000
- * 00445000
- * 1. SCAN VMCBLOK CHAIN ON CURRENT VMBLOK FOR SUBJECT 00446000
- * VMCBLOK (VMCPUSER = VMCUSER - VMCPMID = VMCMID). 00447000
- * 2. IF VMCBLOK IS FOUND SET CC = 0 AND RETURN TO 00448000
- * CALLER, OTHERWISE, SET CC = 2 AND RETURN TO 00449000
- * CALLER. 00450000
- * 00451000
- * VMCWAKUP - WAKE UP SOURCE / SINK USER. 00452000
- * 00453000
- * 1. SCAN SUBJECT USERS XINTBLOK CHAIN FOR AN ALREADY 00454000
- * EXISTING VMCF EXTERNAL INTERRUPT. IF ONE ALREADY 00455000
- * EXISTS RETURN TO THE CALLER. 00456000
- * 2. ACQUIRE FREE STORAGE FOR AN XINTBLOK VIA A CALL TO 00457000
- * MODULE DMKFREE. 00458000
- * 3. CHAIN XINTBLOK AT END OF SUBJECT USERS XINTBLOK 00459000
- * CHAIN. 00460000
- * 4. INITIALIZE XINTBLOK WITH MAXIMUM COLLATING VALUE 00461000
- * (X'7FFFFFFF') AND THE VMCF CODE (X'4001') AND MASK 00462000
- * (X'0001'). 00463000
- * 5. CHECK TO SEE IF TARGET VIRTUAL MACHINE IS ENABLED 00464000
- * FOR VMCF EXTERNAL INTERRUPTS (PSW BIT 7 + CR0 BIT 00465000
- * 31) AND IF NOT RETURN TO CALLER. 00466000
- * 6. IF TARGET VIRTUAL MACHINE IS ENABLED FOR VMCF 00467000
- * EXTERNAL INTERRUPTS GET STORAGE FOR A WAKE-UP 00468000
- * CPEXBLOK VIA A CALL TO MODULE DMKFREE. 00469000
- * 7. INITIALIZE THE CPEXBLOK TO RETURN DIRECTLY TO THE 00470000
- * DISPATCHER DMKDSPCH AND STACK THE BLOK VIA MODULE 00471000
- * DMKSTKCP. 00472000
- * 8. IF FINAL RESPONSE INTERRUPT IS FOR CP, THEN DON'T 00472100
- * REFLECT THE INTERRUPT 00472200
- * 9. RETURN TO CALLER. 00473000
- * 00474000
- * VMCHECK - VALIDITY CHECK VIRTUAL BUFFER ADDRESSES. 00475000
- * 00476000
- * 1. INSURE THAT CREG1 IS LOADED WITH THE CORRECT 00477000
- * SEGMENT TABLE ORIGIN. 00478000
- * 2. DO AN LRA ON THE STARTING VIRTUAL ADDRESS AND EXIT 00479000
- * TO MODULE DMKHVC WITH APPROPRIATE RETURN CODE IF 00480000
- * LRA FAILS. 00481000
- * 3. IF STARTING ADDRESS IS OK ADD BUFFER LENGTH TO 00482000
- * STARTING ADDRESS AND DO ANOTHER LRA. 00483000
- * 4. IF LRA FAILS RETURN TO MODULE DMKHVC WITH 00484000
- * APPROPRIATE RETURN CODE, OTHERWISE, RETURN TO 00485000
- * CALLER. (BEGINNING AND ENDING BUFFER ADDRESSES 00486000
- * OK) 00487000
- * 00488000
- * VMCFRET - RELEASE VMCBLOK STORAGE 00489000
- * 00490000
- * 1. FRET VMCBLOK VIA A CALL TO MODULE DMKFREE AND 00491000
- * RETURN TO CALLER. 00492000
- * 00493000
- * VMCSUSER - VALIDATE SOURCE USER STATUS 00494000
- * 00495000
- * 1. LOCATE SOURCE USER VMBLOK ADDRESS VIA A CALL TO 00496000
- * MODULE DMKSCNAU. 00497000
- * 2. VERIFY THAT SOURCE USER IS STILL AUTHORIZED FOR 00498000
- * VM COMMUNICATION. 00499000
- * 3. IF SOURCE USER IS NOT LOGGED ON OR NOT AUTHORIZED 00500000
- * FRET THE ACTIVE VMCBLOK VIA A CALL TO MODULE DMKFRET 00501000
- * AND RETURN TO MODULE DMKHVC WITH APPROPRIATE RETURN 00502000
- * CODE SET IN GPR 2, OTHERWISE, RETURN TO CALLER. 00503000
- * 00504000
- * VMCXFER - DATA TRANSFER SUBROUTINE 00505000
- * 00506000
- * INPUT = ADDRESS OF SEND AND RECEIVE VMCBLOKS. 00507000
- * 00508000
- * 1. DETERMINE CONTROLLING DATA TRANSFER COUNT (LOWEST 00509000
- * COUNT WINS) AND SET VMCEFLG IF INCORRECT LENGTH 00510000
- * CONDITION EXISTS. 00511000
- * 2. IF COUNT IS ZERO RETURN TO CALLER. 00512000
- * 3. LOCATE SENDER VMBLOK VIA A CALL TO MODULE 00513000
- * DMKSCNAU. 00514000
- * 4. FETCH SEND DATA AND LOCK THE PAGE IN STORAGE VIA A 00515000
- * CALL TO MODULE DMKPTRAN (TRANS MACRO). 00516000
- * 5. CHECK SEND BUFFER FOR FETCH PROTECTION VIOLATION 00517000
- * VIA A CALL TO MODULE DMKPSAFC. 00518000
- * 6. LOCATE RECEIVER VMBLOK VIA A CALL TO MODULE 00519000
- * DMKSCNAU. 00520000
- * 7. FETCH THE RECEIVE BUFFER VIA A CALL TO MODULE 00521000
- * DMKPTRAN (TRANS MACRO). 00522000
- * 8. CHECK FOR STORE PROTECTION VIOLATION WITHIN THE 00523000
- * RECEIVE BUFFER VIA A CALL TO MODULE DMKPSASC. 00524000
- * 9. COMPUTE LENGTH OF MOVE UP TO THE NEXT 2K BOUNDARY 00525000
- * (SEND OR RECEIVE). 00526000
- * 10. UPDATE SEND AND RECEIVE DATA COUNTS WITHIN THE 00527000
- * SOURCE AND SINK VMCBLOK. 00528000
- * 11. MOVE UP TO 2K OF DATA VIA THE MVCL INSTRUCTION. 00529000
- * 12. IF TOTAL DATA TRANSFER COUNT IS EXHAUSTED UNLOCK 00530000
- * SENDER PAGE AND RETURN TO THE CALLER. 00531000
- * 13. IF ANY DATA REMAINS IN SENDER 2K BLOCK ITERATE 00532000
- * LOOP (7). 00533000
- * 14. UNLOCK SENDER PAGE VIA A CALL TO MODULE DMKPTRUL. 00534000
- * 15. ITERATE LOOP (3). 00535000
- * 00536000
- * NOTE - IF ANY ERRORS ARE DETECTED DURING THE DATA 00537000
- * TRANSFER OPERATION THE DATA TRANSFER RETURN CODE IS 00538000
- * RETURNED TO THE CALLER. 00539000
- * 00539100
- * NOTE - NO SCANS FOR THE SYSTEM VMBLOK WILL BE MADE NOR 00539200
- * WILL THE TRANS MACRO BE EXECUTED FOR THE SENDER OF VMCF 00539300
- * DATA WHEN THE SENDER IS CP. 00539400
- * 00540000
- * VMCEXIT - NORMAL EXIT FROM DMKVMCFC ENTRY. 00541000
- * 00542000
- * 1. STORE RETURN CODE (R2) IN THE SAVEAREA FROM 00543000
- * DMKHVC. (SAVER2) 00544000
- * 2. IF FREE STORAGE WAS ACQUIRED FOR A VMCBLOK WHICH 00545000
- * WAS NOT USED (USED ONLY TO BUFFER VMCPARM) FRET 00546000
- * THE BLOCK VIA A CALL TO MODULE DMKFREE. 00547000
- * 3. EXIT TO MODULE DMKHVC VIA THE EXIT MACRO. 00548000
- * 00549000
- * RESPONSES - 00550000
- * 00551000
- * NONE 00552000
- * 00553000
- * ERROR MESSAGES - 00554000
- * 00555000
- * NONE 00556000
- * 00557000
- * ABEND CODES - 00558000
- * 00559000
- * NONE 00560000
- * 00561000
- * RETURN CODES - 00562000
- * 00563000
- * REFER TO VMCBLOKS COPY (RETURN CODE EQUATES) 00564000
- * 00565000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00566000
- COPY OPTIONS @V407510 00566100
- EJECT 00567000
- EXTRN DMKPSASC @V387045 00568000
- EXTRN DMKPSAFC @V387045 00569000
- EXTRN DMKPSASP @V387045 00570000
- EXTRN DMKSTKCP @V387045 00571000
- EXTRN DMKPTRPW @VA10373 00571100
- EXTRN DMKPTRUL @V387045 00572000
- EXTRN DMKSCNAU @V387045 00573000
- EXTRN DMKSCHDL @VA06441 00573500
- SPACE 00574000
- USING SAVEAREA,R13 @V387045 00575000
- USING VMBLOK,R11 @V387045 00576000
- USING VMCPARM,R9 @V387045 00577000
- USING VMCBLOK,R8 @V387045 00578000
- USING PSA,0 @V387045 00579000
- SPACE 00580000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00581000
- * 00582000
- * DMKVMCFC - INTERPRET USER FUNCTION CODE 00583000
- * 00584000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00585000
- DMKVMCFC RELOC @V387045 00586000
- XC SAVEWRK1,SAVEWRK1 CLEAR SAVE AREA @V387045 00587000
- LR R3,R2 PARMLIST LENGTH TO R3 @V387045 00588000
- LR R4,R1 SAVE VIRTUAL ADDRESS IN R4 @V387045 00589000
- LA R0,VMCBSIZE SIZE OF VMCBLOK (DOUBLEWORDS) @V387045 00590000
- CALL DMKFREE GET STORAGE FOR PARMLIST BUFFER @V387045 00591000
- LR R9,R1 SAVE ADDRESS IN R9 @V387045 00592000
- XC VMCPARM(VMCBSIZE*8),VMCPARM CLEAR BUFFER @V387045 00593000
- ST R9,SAVEWRK1 SAVE FOR LATER FRET @V387045 00594000
- C R11,ASYSVM IS IT REQUEST FROM CP? @V60C2B8 00594100
- BNE CPVMCF1 NO - VALIDATE ADDRESS @V60C2B8 00594200
- ST R9,VMCPNT STORE VMCBLOK PTR IN CP VMBLOK 00594210
- LR R2,R4 POINT REG 2 TO PARM LIST @V60C2B8 00594300
- BCTR R3,0 SUBTRACT 1 FOR EXECUTE 00594310
- EX R3,VMCFMOVE MOVE DATA DIRECTLY INTO CORE @V60C2B8 00594400
- B CPVMCF2 CONTINUE NORMAL PROCESSING @V60C2B8 00594500
- CPVMCF1 LR R1,R4 RESTORE VIRTUAL ADDRESS @V60C2B8 00595000
- LR R6,R3 SAVE TOTAL LENGTH @V387045 00596000
- LA R14,0(R3,R1) ENDING ADDRESS + 1 @V387045 00597000
- BCTR R14,0 ENDING ADDRESS @V387045 00598000
- L R15,XPAGNUM PAGE NUMBER MASK @V387045 00599000
- NR R14,R15 ENDING PAGE ADDRESS @V387045 00600000
- NR R15,R1 STARTING PAGE ADDRESS @V387045 00601000
- CLR R14,R15 VMCPARM IN ONE PAGE ? @V387045 00602000
- BE VMCFFTCH YES..CONTINUE... @V387045 00603000
- SLR R14,R1 BYTES REMAINING IN FIRST PAGE @V387045 00604000
- LR R6,R14 SAVE AS LENGTH MOVED @V387045 00605000
- VMCFFTCH TRANS 2,1,OPT=(BRING+DEFER) FETCH PARMLIST @V387045 00606000
- BNZ VMCRC15 EXIT IF PAGING ERROR @V387045 00607000
- LR R0,R6 SAVE BYTES BEING MOVED @V387045 00608000
- BCTR R6,0 LESS ONE FOR EXECUTE @V387045 00609000
- EX R6,VMCFMOVE MOVE ALL OR PART OF VMCPARM @V387045 00610000
- ALR R9,R0 ADJUST BUFFER ADDRESS @V387045 00611000
- ALR R1,R0 AND VIRTUAL VMCPARM ADDRESS @V387045 00612000
- SR R3,R0 AND TOTAL LENGTH OF VMCPARM @V387045 00613000
- LR R6,R3 BYTES LEFT (MAYBE) @V387045 00614000
- BP VMCFFTCH CONTINUE IF MORE TO DO.. @V387045 00615000
- CPVMCF2 L R9,SAVEWRK1 RESTORE ADDRESS OF VMCPARM @V60C2B8 00616000
- LH R1,VMCPFUNC DESIRED FUNCTION CODE @V387045 00617000
- CL R1,=A(VMCFMAX) WITHIN VALID RANGE ? @V387045 00618000
- BNL VMCRC2 NO..SET RC..EXIT @V387045 00619000
- SLA R1,2(0) TIMES 4 FOR BRANCH TABLE @V387045 00620000
- BZ VMCAUTH AUTHORIZE SUB FUNCTION.. @V387045 00621000
- C R11,ASYSVM IS IT A REQUEST FROM CP? @V60C2B8 00621100
- BE VMCFTBL YES - CP ALWAYS AUTHORIZED @V60C2B8 00621200
- TM VMCXSTAT,VMBCAUTH USER AUTHORIZED ? @V387045 00622000
- BZ VMCRC4 NO..SET CC AND EXIT... @V387045 00623000
- SPACE 00624000
- VMCFTBL B VMCFTBL(R1) GOTO SUBROUTINE @V387045 00625000
- * B VMCAUTH FC = 0 AUTHORIZE 00626000
- B VMCUAUTH FC = 1 UN-AUTHORIZE @V387045 00627000
- B VMCSEND FC = 2 SEND @V387045 00628000
- B VMCSENDR FC = 3 SEND/RECEIVE @V387045 00629000
- B VMCSENDX FC = 4 SENDX @V387045 00630000
- B VMCRECV FC = 5 RECEIVE @V387045 00631000
- B VMCCNCL FC = 6 CANCEL @V387045 00632000
- B VMCREPLY FC = 7 REPLY @V387045 00633000
- B VMCQIES FC = 8 QUIESCE @V387045 00634000
- B VMCRESUM FC = 9 RESUME @V387045 00635000
- B VMCIDENT FC = 10 IDENTIFY @V387045 00636000
- B VMCREJEC FC = 11 REJECT @V387045 00637000
- VMCFMAX EQU (*-VMCFTBL)/4 MAXIMUM SUPPORTED FUNCTION CODE @V387045 00638000
- VMCFMOVE MVC 0(*-*,R9),0(R2) EXECUTED MOVE @V387045 00639000
- EJECT 00640000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00641000
- * 00642000
- * AUTHORIZE - AUTHORIZE VM COMMUNICATIONS 00643000
- * 00644000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00645000
- VMCAUTH EQU * AUTHORIZE @V387045 00646000
- LM R1,R2,VMCPVADA VADDR + LENGTH @V387045 00647000
- LR R3,R1 BUFFER ADDRESS TO R3 @V387045 00648000
- N R3,F7 DOUBLE WORD ALIGNED ? @V387045 00649000
- BNZ VMCRC1 NO..SET RC..EXIT.. @V387045 00650000
- CL R2,=A(VMCMLEN) DATA LENGTH VALID ? @V387045 00651000
- BL VMCRC1 NO..SET RC..EXIT.. @V387045 00652000
- BAL R10,VMCHECK VALIDITY CHECK BUFFER ADDRESS @V387045 00653000
- TRANS 2,1,OPT=(BRING+DEFER) FETCH USER BUFFER @V387045 00654000
- BNZ VMCRC15 EXIT IF PAGING ERROR... @V387045 00655000
- CALL DMKPSASP CHECK STORAGE KEYS @V387045 00656000
- BNZ VMCRC6 STORE PROTECT VIOLATION @V387045 00657000
- L R8,VMCPNT VMCBLOK CHAIN @V387045 00658000
- LTR R8,R8 DO WE HAVE ANY ? @V387045 00659000
- BNZ VMCAIUTH YES..CONTINUE... @V387045 00660000
- XC SAVEWRK1,SAVEWRK1 CLEAR SAVED ADDRESS @V387045 00661000
- LR R8,R9 CONVERT VMCPARM TO VMCBLOK @V387045 00662000
- ST R8,VMCPNT CHAIN TO VMBLOK @V387045 00663000
- STCK VMCTOD STORE TOD AT AUTH. @VA07113 00663500
- VMCAIUTH EQU * @V387045 00664000
- LM R0,R1,VMCPVADA BUFFER ADDRESS + LENGTH @V387045 00665000
- STM R0,R1,VMCVADA TO VMCBLOK @V387045 00666000
- IC R0,VMPSW+1 CURRENT KEY.. @V387045 00667000
- STC R0,VMCKEY SAVE IN VMCBLOK @V387045 00668000
- NI VMCASTAT,VMCAQIES LEAVE ONLY THIS... @V387045 00669000
- TM VMCPFLG1,VMCPAUTS AUTHORIZE SPECIFIC ? @V387045 00670000
- BZ VMCATUTH NO..CONTINUE... @V387045 00671000
- MVC VMCUSER,VMCPUSER MOVE USERID TO VMCBLOK @V387045 00672000
- OI VMCASTAT,VMCAAUTS INDICATE SPECIFIC @V387045 00673000
- VMCATUTH EQU * @V387045 00674000
- TM VMCPFLG1,VMCPSMSG WANTS TO RECV SP MSG? @V60C2B8 00674100
- BZ VMCPRIOR NO..CONTINUE... @V60C2B8 00674200
- OI VMSPMFLG,VMSPMON ALLOW USER TO RECV SPM'S @V60C2B8 00674300
- VMCPRIOR TM VMCPFLG1,VMCPPRTY AUTHORIZE PRIORITY ? @V60C2B8 00675000
- BZ *+8 NO..CONTINUE... @V387045 00676000
- OI VMCASTAT,VMCAPRTY INDICATE PRIORITY @V387045 00677000
- MVI VMCSTAT,X'00' CLEAR VMCBLOK STATUS @V387045 00678000
- OI VMCXSTAT,VMBCAUTH USER NOW AUTHORIZED @V387045 00679000
- B VMCRC0 TAKE NORMAL EXIT..RC = 0 @V387045 00680000
- EJECT 00681000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00682000
- * 00683000
- * UN-AUTHORIZE - UNAUTHORIZE VM COMMUNICATIONS 00684000
- * 00685000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00686000
- DMKVMCUA RELOC @V387045 00687000
- XC SAVEWRK1,SAVEWRK1 CLEAR PARMLIST POINTER @V387045 00688000
- VMCUAUTH EQU * UN-AUTHORIZE @V387045 00689000
- NI VMCXSTAT,X'FF'-VMBCAUTH RESET AUTHORIZATION @V387045 00690000
- L R8,VMCPNT MASTER VMCBLOK ADDRESS @V387045 00691000
- L R4,VMCFPNT NEXT VMCBLOK @V387045 00692000
- SR R0,R0 CLEAR VMCBLOK @V387045 00693000
- ST R0,VMCPNT ANCHOR @V387045 00694000
- VMCUFRET EQU * @V387045 00695000
- BAL R10,VMCFRET GET RID OF MASTER BLOK @V387045 00696000
- VMCUNXT EQU * @V387045 00697000
- LTR R8,R4 ANY MORE VMCBLOKS ? @V387045 00698000
- BZ VMCUINT NO..CHECK FOR XINTBLOKS @V387045 00699000
- L R4,VMCFPNT NEXT VMCBLOK @V387045 00700000
- TM VMCSTAT,VMCRESP FINAL RESPONSE BLOK ? @V387045 00701000
- BNZ VMCUFRET YES..GET RID OF BLOCK @V387045 00702000
- CLC VMCUSER(8),SYSTEMID IS SOURCE CP? @VA11145 00702050
- BNE VMCUFIND NO-FIND SOURCE @VA11145 00702100
- CLC VMCFUNC,=AL2(VMCPSENX) IS IT SENDX? @VA11145 00702150
- BNE VMCUFIND NO-CONTINUE NORMALLY @VA11145 00702200
- TM VMCCSTAT,VMCCXINT WAITNIG FOR EXT INTERRUPT? @VA11145 00702250
- BNO VMCUFIND NO-CONTINUE NORNALLY @VA11145 00702300
- L R1,VMCVADA GET SOURCE SENDX DATA AREA @VA11145 00702350
- LA R2,VMCPLEN GET LENGTH OF VMCPARM @VA11145 00702400
- SR R1,R2 POINT TO THE START OF THE BOLCK @VA11145 00702450
- L R2,VMCLENA-VMCBLOK(R1) GET THE DATA LENGTH @VA11145 00702500
- LA R2,VMCPLEN+7(R2) GET BUFFER LENGTH FOR FRET @VA11145 00702550
- LR R0,R2 MOVE LENGHT FOR FRET @VA11145 00702600
- SRL R0,3 CONVERT TO DOUBLE WORDS @VA11145 00702650
- CALL DMKFRET FRET THE MESSAGE BLOCK @VA11145 00702700
- B VMCUFRET FRET THE VMCBLOCK @VA11145 00702750
- VMCUFIND EQU * @VA11145 00702800
- LA R0,L'VMCUSER LENGTH OF USERID @V387045 00703000
- LA R1,VMCUSER ADDRESS OF USERID @V387045 00704000
- CALL DMKSCNAU LOCATE SOURCE VMBLOK ADDRESS @V387045 00705000
- BNZ VMCUFRET FRET BLOK IF LOGGED OFF @V387045 00706000
- LR R3,R1 VMBLOK ADDRESS TO R3 @V387045 00707000
- CLR R3,R11 WRAP CONNECTION ? @V387045 00708000
- BE VMCUFRET YES..FRET THE BLOCK @V387045 00709000
- TM VMCXSTAT-VMBLOK(R3),VMBCAUTH AUTHORIZED ? @V387045 00710000
- BZ VMCUFRET NO..FRET THE BLOCK.. @V387045 00711000
- OI VMCSTAT,VMCRESP SET FINAL RESPONSE @V387045 00712000
- MVI VMCEFLG,VMC05 USER NOT AVAILABLE @V387045 00713000
- BAL R10,VMCENQ ENQUEUE VMCBLOK ON SOURCE CHAIN @V387045 00714000
- BAL R10,VMCWAKUP WAKE UP SOURCE USER @V387045 00715000
- B VMCUNXT ITERATE LOOP... @V387045 00716000
- VMCUINT EQU * @V387045 00717000
- LA R1,VMPXINT XINT BLOK ANCHOR @V387045 00718000
- VMCUXNXT EQU * @V387045 00719000
- LR R2,R1 SAVE ANCHOR @V387045 00720000
- L R1,XINTNEXT-XINTBLOK(,R2) NEXT BLOK @V387045 00721000
- LTR R1,R1 IS THERE ONE ? @V387045 00722000
- BZ VMCUTENT NO..EXIT NOW.. @V387045 00723000
- CLC XINTCODE-XINTBLOK(L'XINTCODE,R1),=AL2(VMCXCODE) @V387045 00724000
- BNE VMCUXNXT ITERATE LOOP IF NOT VMCF CODE @V387045 00725000
- L R0,XINTNEXT-XINTBLOK(,R1) NEXT BLOK @V387045 00726000
- ST R0,XINTNEXT-XINTBLOK(,R2) REMOVE FROM CHAIN @V387045 00727000
- LA R0,XINTSIZE SIZE OF BLOCK (DOUBLEWORDS) @V387045 00728000
- CALL DMKFRET FRET THE BLOCK @V387045 00729000
- VMCUTENT EQU * @V387045 00730000
- L R1,SAVEWRK1 ADDRESS OF PARMLIST @V387045 00731000
- LTR R1,R1 DMKCFP ENTRY ? @V387045 00732000
- BNZ VMCRC0 NO..EXIT TO DMKHVC @V387045 00733000
- EXIT EXIT TO DMKCFP @V387045 00734000
- EJECT 00735000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00736000
- * 00737000
- * SEND - SEND MESSAGE (VMCPMID) TO USERID (VMCPUSER) 00738000
- * 00739000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00740000
- VMCSEND EQU * SEND @V387045 00741000
- BAL R10,VMCICHK CHECK MSG COUNT + TARGET USER @V387045 00742000
- LM R1,R2,VMCPVADA BUFFER ADDRESS + LENGTH @V387045 00743000
- BAL R10,VMCHECK VALIDITY CHECK ADDRESS @V387045 00744000
- BAL R10,VMCSCANR AVOID POSSIBLE RACE @V387045 00745000
- BZ VMCRC8 CONDITION.... @V387045 00746000
- BAL R10,VMCSCANS SCAN FOR DUPLICATE MSG @V387045 00747000
- BZ VMCRC8 DUPLICATE MSG @V387045 00748000
- BAL R10,VMCBUILD INITIALIZE + ENQ VMCBLOK @V387045 00749000
- BAL R10,VMCWAKUP WAKE UP SINK USER @V387045 00750000
- B VMCRC0 EXIT TO DMKHVC @V387045 00751000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00752000
- * 00753000
- * SEND/RECV - SEND MESSAGE (VMCPMID) TO USERID (VMCPUSER) 00754000
- * AND WAIT FOR REPLY. 00755000
- * 00756000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00757000
- VMCSENDR EQU * SEND / RECV @V387045 00758000
- BAL R10,VMCICHK CHECK MSG COUNT + TARGET USER @V387045 00759000
- LM R1,R2,VMCPVADA SEND DATA ADDRESS @V387045 00760000
- BAL R10,VMCHECK VALIDITY CHECK ADDRESS @V387045 00761000
- LM R1,R2,VMCPVADB REPLY BUFFER ADDRESS @V387045 00762000
- BAL R10,VMCHECK VALIDITY CHECK ADDRESS @V387045 00763000
- BAL R10,VMCSCANR SCAN FOR EXISTING MSG @V387045 00764000
- BZ VMCRC8 DUPLICATE MESSAGE... @V387045 00765000
- BAL R10,VMCSCANS SCAN FOR DUPLICATE MSG @V387045 00766000
- BZ VMCRC8 DUPLICATE MSG @V387045 00767000
- BAL R10,VMCBUILD INITIALIZE + ENQ VMCBLOK @V387045 00768000
- BAL R10,VMCWAKUP WAKE UP SINK USER @V387045 00769000
- B VMCRC0 EXIT TO DMKHVC.. @V387045 00770000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00771000
- * 00772000
- * SENDX - SEND MESSAGE (VMCPMID) TO USERID (VMCPUSER) 00773000
- * WITHIN HIS EXTERNAL INTERRUPT BUFFER. 00774000
- * 00775000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00776000
- VMCSENDX EQU * @V387045 00777000
- BAL R10,VMCICHK CHECK MSG LIMIT + SINK USER @V387045 00778000
- LM R1,R2,VMCPVADA SEND DATA ADDRESS + LENGTH @V387045 00779000
- BAL R10,VMCHECK VALIDITY CHECK SENDX DATA ADDRESS@V387045 00780000
- LA R1,VMCMLEN(,R2) ADD MINIMUM HEADER LENGTH @V387045 00781000
- CL R1,VMCLENA WILL IT FIT ? @V387045 00782000
- BH VMCRC7 NO..SET RC..EXIT @V387045 00783000
- BAL R10,VMCSCANR SCAN RECEIVE QUEUE FOR @V387045 00784000
- BZ VMCRC8 DUPLICATE MESSAGE @V387045 00785000
- BAL R10,VMCSCANS SCAN FOR DUPLICATE MSG @V387045 00786000
- BZ VMCRC8 DUPLICATE MSG IS AN ERROR.. @V387045 00787000
- BAL R10,VMCBUILD INITIALIZE + ENQ VMCBLOK @V387045 00788000
- BAL R10,VMCWAKUP WAKE UP SINK USER @V387045 00789000
- B VMCRC0 EXIT TO DMKHVC @V387045 00790000
- EJECT 00791000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00792000
- * 00793000
- * RECEIVE - RECEIVE MESSAGE (VMCPMID) FROM USERID 00794000
- * (VMCPUSER). 00795000
- * 00796000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00797000
- VMCRECV EQU * RECEIVE @V387045 00798000
- BAL R10,VMCSCANR LOCATE SUBJECT VMCBLOK @V387045 00799000
- BNZ VMCRC12 MESSAGE NOT FOUND @V387045 00800000
- TM VMCSTAT,VMCRESP FINAL RESPONSE ? @V387045 00801000
- BO VMCRC3 YES..PROTOCOL VIOLATION @V387045 00802000
- TM VMCCSTAT,VMCCXINT XINT BLOK ? @V387045 00803000
- BO VMCRC13 YES..SYNCHRONIZATION ERROR... @V387045 00804000
- TM VMCCSTAT,VMCCRECP RECEIVE ALREADY EXECUTED ? @V387045 00805000
- BO VMCRC3 YES..PROTOCOL VIOLATION @V387045 00806000
- LM R1,R2,VMCPVADA BUFFER ADDRESS + LENGTH @V387045 00807000
- BAL R10,VMCHECK VALIDITY CHECK BUFFER ADDRESS @V387045 00808000
- OI VMCCSTAT,VMCCRECP INDICATE RECEIVE PROCESSED @V387045 00809000
- MVC VMCUSER,VMUSER SWAP USERID TO SINK @V387045 00810000
- LR R7,R8 SOURCE VMCBLOK ADDRESS TO R7 @V387045 00811000
- LR R8,R9 SINK VMCBLOK ADDRESS TO R8 @V387045 00812000
- IC R0,VMPSW+1 USERS CURRENT PSW KEY + @V387045 00813000
- STC R0,VMCKEY SAVE IN VMCBLOK @V387045 00814000
- SPACE 00815000
- BAL R10,VMCXFER TRANSFER DATA (VM -> VM) @V387045 00816000
- SPACE 00817000
- LR R8,R7 SWAP BACK TO SOURCE VMCBLOK (R8) @V387045 00818000
- MVC VMCUSER,VMCPUSER SWAP USERID BACK TO SOURCE @V387045 00819000
- CLC VMCFUNC,=AL2(VMCPSENR) SEND/RECV ? @V387045 00820000
- BE VMCREDAT YES..WAIT FOR REPLY... @V387045 00821000
- BAL R10,VMCDEQ DEQUEUE VMCBLOK FROM SINK CHAIN @V387045 00822000
- BAL R10,VMCSUSER CHECK OUT SOURCE STATUS @V387045 00823000
- OI VMCSTAT,VMCRESP SET FINAL RESPONSE @V387045 00824000
- MVC VMCUSE,VMCPUSE COPY USER DOUBLEWORD @V387045 00825000
- BAL R10,VMCENQ ENQUEUE BLOK ON SOURCE VMCBLOK @V387045 00826000
- * CHAIN 00827000
- BAL R10,VMCWAKUP WAKE UP SOURCE USER @V387045 00828000
- VMCREDAT EQU * @V387045 00829000
- SLR R2,R2 CLEAR RETURN CODE REG @V387045 00830000
- IC R2,VMCEFLG-VMCBLOK(,R9) SET RETURN CODE @V387045 00831000
- B VMCEXIT EXIT @V387045 00832000
- EJECT 00833000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00834000
- * 00835000
- * CANCEL - CANCEL MESSAGE (VMCPMID) PREVIOUSLY SENT 00836000
- * TO USER (VMCPUSER) 00837000
- * 00838000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00839000
- VMCCNCL EQU * CANCEL @V387045 00840000
- LA R0,L'VMCPUSER LENGTH OF USERID @V387045 00841000
- LA R1,VMCPUSER ADDRESS OF USERID @V387045 00842000
- CALL DMKSCNAU LOCATE SINK VMBLOK ADDRESS @V387045 00843000
- BNZ VMCRC5 USER NOT AVAILABLE @V387045 00844000
- LR R3,R1 VMBLOK ADDRESS TO R3 @V387045 00845000
- TM VMCXSTAT-VMBLOK(R3),VMBCAUTH AUTHORIZED ? @V387045 00846000
- BZ VMCRC5 NO..USER NOT AVAILABLE @V387045 00847000
- BAL R10,VMCSCANR CHECK FOR TOO LATE CONDITION @V387045 00848000
- BNZ VMCCNSS NOT THERE..LOCATE MESSAGE.. @V387045 00849000
- TM VMCSTAT,VMCRESP FINAL RESPONSE ? @V387045 00850000
- BO VMCRC14 YES..TOO LATE... @V387045 00851000
- CLR R11,R3 WRAP CONNECTION ? @V387045 00852000
- BNE VMCRC3 NO..PROTOCOL VIOLATION @V387045 00853000
- VMCCNSS EQU * @V387045 00854000
- BAL R10,VMCSCANS LOCATE SUBJECT VMCBLOK @V387045 00855000
- BNZ VMCRC12 MESSAGE NOT FOUND.. @V387045 00856000
- TM VMCCSTAT,VMCCBUSY IN PROCESS ? @V387045 00857000
- BNZ VMCRC20 YES..SET RC FOR BUSY.. @V387045 00858000
- SLR R4,R4 CLEAR RETURN CODE REGISTER @V387045 00859000
- TM VMCCSTAT,VMCCRECP RECEIVE ALREADY EXECUTED ? @V387045 00860000
- BZ *+8 NO..CONTINUE... @V387045 00861000
- LA R4,VMC11 REPLY CANCELLED @V387045 00862000
- L R1,VMCFPNT NEXT VMCBLOK @V387045 00863000
- ST R1,VMCFPNT-VMCBLOK(,R2) DECHAIN ACTIVE VMCBLOK @V387045 00864000
- BAL R10,VMCFRET AND RETURN IT TO FREE STORAGE @V387045 00865000
- L R8,VMCPNT ACCESS MASTER VMCBLOK @V387045 00866000
- L R1,VMCFPNT LOAD NEXT VMCBLOK @VA08623 00866100
- CLC VMCTOD-VMCBLOK(8,R1),VMCTOD-VMCBLOK(R8) GOOD @VA08623 00866300
- * TIME? 00866500
- BL VMCCNST NO, DO NOT CHANGE MSG COUNT @VA08623 00866700
- LH R1,VMCACNT ACTIVE MESSAGE COUNT @V387045 00867000
- BCTR R1,0 LESS ONE @V387045 00868000
- STH R1,VMCACNT REPLACE... @V387045 00869000
- VMCCNST LR R2,R4 RETURN CODE TO REG 2 @VA08623 00870100
- B VMCEXIT EXIT BACK TO DMKHVC.. @V387045 00871000
- EJECT 00872000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00873000
- * 00874000
- * REPLY - REPLY TO MESSAGE (VMCPMID) FROM USER (VMCPUSER). 00875000
- * 00876000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00877000
- VMCREPLY EQU * REPLY @V387045 00878000
- BAL R10,VMCSCANR LOCATE SUBJECT MESSAGE VMCBLOK @V387045 00879000
- BNZ VMCRC12 MESSAGE NOT FOUND @V387045 00880000
- CLC VMCFUNC,=AL2(VMCPSENR) SEND/RECV REQUEST ? @V387045 00881000
- BNE VMCRC3 NO..PROTOCOL VIOLATION... @V387045 00882000
- TM VMCSTAT,VMCRESP FINAL RESPONSE ? @V387045 00883000
- BO VMCRC3 YES..PROTOCOL... @V387045 00884000
- TM VMCCSTAT,VMCCXINT XINT BLOK ? @V387045 00885000
- BO VMCRC13 YES..SYNCHRONIZATION ERROR.. @V387045 00886000
- LM R1,R2,VMCPVADA BUFFER ADDRESS + LENGTH @V387045 00887000
- BAL R10,VMCHECK VALIDITY CHECK ADDRESS @V387045 00888000
- MVC VMCUSER,VMUSER SENDER USERID TO RECV VMCBLOK @V387045 00889000
- LR R7,R9 SENDER VMCBLOK TO R7 @V387045 00890000
- BAL R10,VMCRSWAP SWAP BUFFER ADDRESSES @V387045 00891000
- SPACE 00892000
- BAL R10,VMCXFER TRANSFER DATA (VM -> VM) @V387045 00893000
- SPACE 00894000
- BAL R10,VMCRSWAP SWAP BACK ADDRESSES @V387045 00895000
- BAL R10,VMCDEQ DECHAIN BLOK FROM SINK VMBLOK @V387045 00896000
- BAL R10,VMCSUSER SCAN FOR SOURCE VMBLOK @V387045 00897000
- OI VMCSTAT,VMCRESP SET FINAL RESPONSE @V387045 00898000
- MVC VMCUSE,VMCPUSE COPY USER DOUBLEWORD @V387045 00899000
- BAL R10,VMCENQ ENQUEUE BLOK ON SOURCE VMCBLOK @V387045 00900000
- * CHAIN 00901000
- BAL R10,VMCWAKUP WAKE UP SOURCE USER @V387045 00902000
- SLR R2,R2 CLEAR RETURN CODE REGISTER @V387045 00903000
- IC R2,VMCEFLG-VMCBLOK(R7) SET RETURN CODE @V387045 00904000
- B VMCEXIT EXIT... @V387045 00905000
- VMCRSWAP EQU * @V387045 00906000
- LM R0,R1,VMCVADA SWAP SEND @V387045 00907000
- LM R2,R3,VMCVADB AND REPLY @V387045 00908000
- STM R0,R1,VMCVADB BUFFER @V387045 00909000
- STM R2,R3,VMCVADA ADDRESSES... @V387045 00910000
- BR R10 RETURN @V387045 00911000
- EJECT 00912000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00913000
- * 00914000
- * QUIESCE - QUIESCE STACKED VMCF EXTERNAL INTERRUPTS 00915000
- * 00916000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00917000
- VMCQIES EQU * QUIESCE @V387045 00918000
- L R8,VMCPNT ADDRESS OF MASTER VMCBLOK @V387045 00919000
- OI VMCASTAT,VMCAQIES SET QUIESCE FLAG @V387045 00920000
- B VMCRC0 SET RC = 0...EXIT... @V387045 00921000
- SPACE 00922000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00923000
- * 00924000
- * RESUME - RESET ACTIVE 'QUIESCING' STATE 00925000
- * 00926000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00927000
- VMCRESUM EQU * RESUME VM COMMUNICATIONS @V387045 00928000
- L R8,VMCPNT ADDRESS OF MASTER VMCBLOK @V387045 00929000
- NI VMCASTAT,X'FF'-VMCAQIES RESET QUIESCE FLAG @V387045 00930000
- B VMCRC0 SET RC = 0..EXIT.. @V387045 00931000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00932000
- * 00933000
- * IDENTIFY - IDENTIFY SELF TO OTHER USERS 00934000
- * 00935000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00936000
- VMCIDENT EQU * IDENTIFY @V387045 00937000
- BAL R10,VMCICHK CHECK MSG LIMIT + SINK USER @V387045 00938000
- * STATUS 00939000
- BAL R10,VMCBUILD INITIALIZE + ENQ VMCBLOK @V387045 00940000
- OI VMCSTAT,VMCRESP SET FINAL RESPONSE @V387045 00941000
- BAL R10,VMCWAKUP WAKE UP SINK USER @V387045 00942000
- B VMCRC0 EXIT TO DMKHVC..RC = 0 @V387045 00943000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00944000
- * 00945000
- * REJECT - REJECT MESSAGE (VMCPMID) SENT BY USERID 00946000
- * (VMCPUSER) 00947000
- * 00948000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00949000
- VMCREJEC EQU * REJECT @V387045 00950000
- BAL R10,VMCSCANR LOCATE SUBJECT MESSAGE @V387045 00951000
- BNZ VMCRC12 MESSAGE NOT FOUND @V387045 00952000
- TM VMCSTAT,VMCRESP FINAL RESPONSE ? @V387045 00953000
- BO VMCRC3 YES..PROTOCOL VIOLATION... @V387045 00954000
- TM VMCCSTAT,VMCCXINT XINT BLOK ? @V387045 00955000
- BO VMCRC13 YES..SYNCHRONIZATION ERROR.. @V387045 00956000
- BAL R10,VMCDEQ DEQUEUE SUBJECT VMCBLOK @V387045 00957000
- BAL R10,VMCSUSER SCAN FOR SOURCE VMBLOK ADDRESS @V387045 00958000
- OI VMCSTAT,VMCRESP+VMCRJCT SET FINAL RESPONSE + @V387045 00959000
- * REJECT 00960000
- MVC VMCUSE,VMCPUSE COPY USER DOUBLEWORD @V387045 00961000
- BAL R10,VMCENQ ENQUEUE ON SOURCE VMCBLOK CHAIN @V387045 00962000
- BAL R10,VMCWAKUP WAKE UP SOURCE USER @V387045 00963000
- B VMCRC0 EXIT WITH RC = 0 @V387045 00964000
- EJECT 00965000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00966000
- * 00967000
- * VMCBUILD - INITIALIZE + ENQUEUE SOURCE VMCBLOK 00968000
- * 00969000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00970000
- VMCBUILD EQU * @V387045 00971000
- XC SAVEWRK1,SAVEWRK1 CLEAR PARMLIST BUFFER ADDRESS @V387045 00972000
- LR R8,R9 CONVERT PARMLIST BUFFER TO @V387045 00973000
- * VMCBLOK 00974000
- IC R0,VMPSW+1 USER PSW KEY @V387045 00975000
- STC R0,VMCKEY MOVE TO VMCBLOK @V387045 00976000
- TM VMCPFLG1,VMCPPRTY PRIORITY OPTION ? @V387045 00977000
- MVI VMCSTAT,X'00' CLEAR USER STATUS BYTE @V387045 00978000
- BZ *+8 CONTINUE... @V387045 00979000
- OI VMCSTAT,VMCPRTY SET PRIORITY FLAG @V387045 00980000
- MVI VMCEFLG,X'00' CLEAR VMCEFLG @V387045 00981000
- L R1,VMCPNT MASTER VMCBLOK @V387045 00982000
- C R11,ASYSVM IS VMCF SOURCE, 'CP'? 00982100
- BE VMCENQ YES - DON'T UPDATE MESSAGE COUNT 00982200
- LA R2,1 ADD ONE TO @V387045 00983000
- AH R2,VMCACNT-VMCBLOK(,R1) MESSAGE @V387045 00984000
- STH R2,VMCACNT-VMCBLOK(,R1) COUNT... @V387045 00985000
- * B VMCENQ ENQ BLOK ON SINK USER VMCBLOK CHAIN 00986000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00987000
- * * 00988000
- * VMCENQ - ENQUEUE VMCBLOK ON SOURCE/SINK VMCBLOK CHAIN 00989000
- * * 00990000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 00991000
- VMCENQ EQU * @V387045 00992000
- L R1,VMCPNT-VMBLOK(,R3) ADDRESS OF MASTER BLOK @V387045 00993000
- VMCECHN EQU * @V387045 00994000
- LR R2,R1 SAVE ANCHOR IN R2 @V387045 00995000
- L R1,VMCFPNT-VMCBLOK(,R2) NEXT BLOK @V387045 00996000
- LTR R1,R1 DOES ONE EXIST ? @V387045 00997000
- BZ VMCEAIN NO..CHAIN IN NEW BLOCK @V387045 00998000
- TM VMCSTAT,VMCPRTY PRIORITY MESSAGE ? @V387045 00999000
- BZ VMCECHN NO..SCAN TO END OF CHAIN @V387045 01000000
- TM VMCSTAT-VMCBLOK(R1),VMCPRTY PRIORITY BLOCK ? @V387045 01001000
- BNZ VMCECHN YES..KEEP LOOKING @V387045 01002000
- VMCEAIN EQU * @V387045 01003000
- L R1,VMCFPNT-VMCBLOK(,R2) NEXT POINTER @V387045 01004000
- ST R8,VMCFPNT-VMCBLOK(,R2) PATCH IN NEW BLOCK @V387045 01005000
- ST R1,VMCFPNT AND ADD REST OF CHAIN @V387045 01006000
- MVC VMCUSER,VMUSER COPY USERID TO BLOCK @V387045 01007000
- OI VMCCSTAT,VMCCXINT SET XINT PENDING... @V387045 01008000
- STCK VMCTOD STORE TOD AT BUILD @VA07113 01008500
- BR R10 RETURN TO CALLER @V387045 01009000
- EJECT 01010000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01011000
- * * 01012000
- * VMCDEQ - DEQUEUE VMCBLOK FROM CURRENT VMCBLOK CHAIN 01013000
- * * 01014000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01015000
- VMCDEQ EQU * @V387045 01016000
- L R1,VMCPNT ADDRESS OF MASTER VMCBLOK @V387045 01017000
- VMCDNEXT EQU * @V387045 01018000
- LR R2,R1 SAVE ANCHOR @V387045 01019000
- L R1,VMCFPNT-VMCBLOK(,R2) NEXT BLOCK @V387045 01020000
- CLR R1,R8 THIS THE BLOCK ? @V387045 01021000
- BNE VMCDNEXT NO..KEEP LOOKING... @V387045 01022000
- L R1,VMCFPNT ADDRESS OF NEXT BLOCK @V387045 01023000
- ST R1,VMCFPNT-VMCBLOK(,R2) DELETE FROM CHAIN @V387045 01024000
- BR R10 RETURN TO CALLER @V387045 01025000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01026000
- * 01027000
- * VMCXFER - VM -> VM DATA TRANSFER SUBROUTINE 01028000
- * 01029000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01030000
- VMCXFER EQU * @V387045 01031000
- LM R5,R6,VMCVADA BUFFER ADDR + LENGTH (SINK) @V387045 01032000
- LM R0,R1,VMCVADA-VMCBLOK(R7) SAME FOR SOURCE @V387045 01033000
- CLR R1,R6 COMPARE SEND TO RECEIVE @V387045 01034000
- BE VMCXCONT CONTINUE IF EQUAL @V387045 01035000
- BNH VMCXSR1 SEND COUNT LOW..USE IT.. @V387045 01036000
- MVI VMCEFLG,VMC16 SET INCORRECT LENGTH @V387045 01037000
- MVI VMCEFLG-VMCBLOK(R7),VMC16 DITTO... @V387045 01038000
- B VMCXCONT CONTINUE..R6 IS OK.. @V387045 01039000
- VMCXSR1 EQU * @V387045 01040000
- LR R6,R1 USE LOWEST COUNT @V387045 01041000
- VMCXCONT EQU * @V387045 01042000
- ST R5,SAVEWRK5 SAVE BUFFER ADDRESS (SINK) @V387045 01043000
- ST R0,SAVEWRK6 AND BUFFER ADDRESS (SOURCE) @V387045 01044000
- XC SAVEWRK7,SAVEWRK7 CLEAR WORK AREA @V387045 01045000
- LTR R6,R6 DATA COUNT REASONABLE ? @V387045 01046000
- BNPR R10 NO..RETURN TO CALLER @V387045 01047000
- OI VMCCSTAT,VMCCBUSY SET PROCESS FLAG @V387045 01048000
- OI VMCCSTAT-VMCBLOK(R7),VMCCBUSY DITTO... @V387045 01049000
- VMCXLOOP EQU * @V60C2B8 01050000
- L R4,SAVEWRK6 GET SOURCE BUFFER ADDRESS @V60C2B8 01050100
- CLC VMCUSER(8),SYSTEMID IS SOURCE CP? @V60C2B8 01050200
- BE VMCXLOPE YES - THEN ALL SET @V60C2B8 01050300
- LA R0,L'VMCUSER LENGTH OF USERID @V60C2B8 01051000
- LA R1,VMCUSER SOURCE USERID @V387045 01052000
- CALL DMKSCNAU SEE IF STILL LOGGED ON @V387045 01053000
- BNZ VMCEC5 NO..SET RETURN CODE..EXIT @V387045 01054000
- TM VMCXSTAT-VMBLOK(R1),VMBCAUTH AUTHORIZED ? @V60C2B8 01055000
- BZ VMCEC5 NO..EXIT NOW... @V387045 01056000
- SWTCHVM SWITCH TO SOURCE VMBLOK @V407510 01057100
- L R1,SAVEWRK6 SOURCE BUFFER ADDRESS @V387045 01060000
- TRANS 4,1,OPT=(BRING+DEFER+LOCK),ADEX=VMCEC1 @V387045 01061000
- BNZ VMCEC15 PAGING I/O ERROR @V387045 01062000
- ST R4,SAVEWRK7 SAVE ADDRESS OF LOCKED PAGE @V387045 01063000
- LR R2,R4 REAL ADDRESS TO R2 @V387045 01064000
- IC R0,VMCKEY-VMCBLOK(R7) USER KEY @V387045 01065000
- CALL DMKPSAFC CHECK FETCH PROTECTION @V387045 01066000
- BNZ VMCEC6 EXIT OF VIOLATED.. @V387045 01067000
- LA R0,L'VMCUSER LENGTH OF USERID @V387045 01068000
- LA R1,VMCUSER-VMCBLOK(,R7) SINK USERID @V387045 01069000
- CALL DMKSCNAU SEE IF STILL LOGGED ON @V387045 01070000
- BNZ VMCEC5 IF NOT..EXIT.... @V387045 01071000
- TM VMCXSTAT-VMBLOK(R1),VMBCAUTH AUTHORIZED ? @V387045 01072000
- BZ VMCEC5 NO..EXIT NOW... @V387045 01073000
- SWTCHVM SWITCH TO SINK VMBLOK @V407510 01074100
- VMCXLOPE EQU * @V387045 01077000
- L R1,SAVEWRK5 SINK BUFFER ADDRESS @V387045 01078000
- TRANS 2,1,OPT=(BRING+DEFER),ADEX=VMCEC1A @V387045 01079000
- BNZ VMCEC15A PAGING I/O ERROR @V387045 01080000
- LA R0,X'7FF' 2K MASK @V387045 01081000
- LR R3,R0 ALSO IN R3 @V387045 01082000
- OR R0,R4 LAST BYTE OF SOURCE 2K BLOCK @V387045 01083000
- SLR R0,R4 BYTES LEFT IN 2K BLOCK - 1 @V387045 01084000
- OR R3,R2 LAST BYTE OF SINK 2K BLOCK @V387045 01085000
- SLR R3,R2 BYTES LEFT IN 2K BLOCK - 1 @V387045 01086000
- CLR R3,R0 DETERMINE CONTROLLING @V387045 01087000
- BL *+6 TRANSFER @V387045 01088000
- LR R3,R0 COUNT.... @V387045 01089000
- AL R3,F1 ADJUST TO ACTUAL COUNT @V387045 01090000
- CLR R3,R6 MORE THAN BYTES REMAINING ? @V387045 01091000
- BL *+6 NO..USE THIS COUNT... @V387045 01092000
- LR R3,R6 OTHERWISE USE FINAL COUNT.. @V387045 01093000
- IC R0,VMCKEY PSW KEY OF RECEIVER @V387045 01094000
- CALL DMKPSASC CHECK FOR STORE PROTECT VIOLATE @V387045 01095000
- BNZ VMCEC6A TERMINATE IF KEY VIOLATION @V387045 01096000
- LM R0,R1,SAVEWRK5 USER BUFFER ADDRESSES @V387045 01097000
- ALR R0,R3 ADJUST WITH BYTES MOVED @V387045 01098000
- ALR R1,R3 DITTO... @V387045 01099000
- STM R0,R1,SAVEWRK5 REPLACE FOR NEXT PASS @V387045 01100000
- L R0,VMCLENA ADJUST DATA COUNT @V387045 01101000
- SLR R0,R3 FOR RECEIVING @V387045 01102000
- ST R0,VMCLENA VIRTUAL MACHINE... @V387045 01103000
- L R0,VMCLENA-VMCBLOK(,R7) ADJUST @V387045 01104000
- SLR R0,R3 DATA COUNT FOR SENDER @V387045 01105000
- ST R0,VMCLENA-VMCBLOK(,R7) VIRTUAL MACHINE.. @V387045 01106000
- SLR R6,R3 COMPUTE BYTES REMAINING @V387045 01107000
- LR R5,R3 MOVE LENGTH TO R5 @V387045 01108000
- SPACE 01109000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01110000
- * * 01111000
- MVCL R2,R4 TRANSFER UP TO 2K OF DATA @V387045 01112000
- * * 01113000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01114000
- SPACE 01115000
- BNZ VMCEC17 DESTRUCTIVE OVERLAP @V387045 01116000
- LTR R6,R6 ANY DATA REMAINING ? @V387045 01117000
- BNP VMCXEND NO..EXIT FORTHWITH @V387045 01118000
- LA R1,X'7FF' 2K MASK @V387045 01119000
- NR R1,R4 DATA LEFT IN SOURCE PAGE ? @V387045 01120000
- BNZ VMCXLOPE IF SO..CONTINUE... @V387045 01121000
- CLC VMCUSER(8),SYSTEMID IS SOURCE SYSTEM ? @V60C2B8 01121100
- BE CPVMCF4 YES - SKIP UNLOCK @V60C2B8 01121200
- LR R2,R4 REAL ADDRESS TO R2 @V387045 01122000
- BCTR R2,0 LESS ONE @V387045 01123000
- CALL DMKPTRUL UNLOCK SOURCE PAGE @V387045 01124000
- CPVMCF4 XC SAVEWRK7,SAVEWRK7 CLEAR PAGE ADDRESS @V60C2B8 01125000
- B VMCXLOOP NOW CONTINUE.... @V387045 01126000
- VMCXEND EQU * @V387045 01127000
- CLC VMCUSER(8),SYSTEMID IS SOURCE SYSTEM ? @V60C2B8 01127100
- BE CPVMCF5 YES - SKIP UNLOCK @V60C2B8 01127200
- L R2,SAVEWRK7 SOURCE LOCKED PAGE @V387045 01128000
- LTR R2,R2 ANY PAGES LOCKED ? @V387045 01129000
- BZ VMCXENDF NO..ALL FINISHED @V387045 01130000
- CALL DMKPTRUL UNLOCK SOURCE PAGE @V387045 01131000
- CPVMCF5 XC SAVEWRK7,SAVEWRK7 CLEAR ADDRESS @V60C2B8 01132000
- VMCXENDF EQU * DATA TRANSFER COMPLETE @V387045 01133000
- L R1,SAVER11 GET ORIGINAL VMBLOK @V407510 01134100
- SWTCHVM SWITCH BACK TO CALLER @V407510 01134200
- NI VMCCSTAT,X'FF'-VMCCBUSY RESET PROC FLAG @V387045 01138000
- NI VMCCSTAT-VMCBLOK(R7),X'FF'-VMCCBUSY DITTO... @V387045 01139000
- LTR R6,R6 SET CONDITION CODE IF ERRORS @V387045 01140000
- BR R10 RETURN TO CALLER @V387045 01141000
- EJECT 01142000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01143000
- * 01144000
- * VMCWAKUP - POST PENDING EXT INTERRUPT TO TARGET VM 01145000
- * 01146000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01147000
- VMCWAKUP EQU * @V387045 01148000
- LA R1,VMPXINT-VMBLOK(,R3) XINTBLOK ANCHOR @V387045 01149000
- VMCWNXT EQU * @V387045 01150000
- LR R2,R1 XINTBLOK ADDRESS TO R2 @V387045 01151000
- L R1,XINTNEXT-XINTBLOK(,R2) NEXT BLOK @V387045 01152000
- LTR R1,R1 DOES IT EXIST ? @V387045 01153000
- BZ VMCWAQR NO..GET NEW BLOK @V387045 01154000
- USING XINTBLOK,R1 @V387045 01155000
- CLC XINTCODE,=AL2(VMCXCODE) VMC INTERRUPT ? @V387045 01156000
- BNE VMCWNXT NO..KEEP LOOKING.. @V387045 01157000
- BR R10 RETURN..NOTHING TO DO HERE.. @V387045 01158000
- VMCWAQR EQU * @V387045 01159000
- LA R0,XINTSIZE SIZE OF XINTBLOK @V387045 01160000
- CALL DMKFREE GET STORAGE FOR BLOK @V387045 01161000
- XC XINTBLOK(XINTSIZE*8),XINTBLOK CLEAR @V387045 01162000
- ST R1,XINTNEXT-XINTBLOK(,R2) PATCH IN CHAIN @V387045 01163000
- L R2,=A(X'7FFFFFFF') MAX COLLATING VALUE @V387045 01164000
- ST R2,XINTSORT TO XINTBLOK.. @V387045 01165000
- L R2,=AL2(VMCXCODE,VMCXMASK) CODE+MASK @V387045 01166000
- ST R2,XINTCODE SAVE IN XINTBLOK @V387045 01167000
- L R2,VMVCR0-VMBLOK(,R3) CR0 (MAYBE) @V387045 01168000
- TM VMPSTAT-VMBLOK(R3),VMV370R ECMODE OPTION ? @V387045 01169000
- BZ *+8 NO..R2 IS OK.. @V387045 01170000
- L R2,EXTCR0-ECBLOK(,R2) VIRTUAL CR0 @V387045 01171000
- N R2,=A(VMCXMASK) ENABLED FOR VMC ? @V387045 01172000
- BZR R10 NO..NOTHING MORE TO DO.. @V387045 01173000
- DROP R1 @V387045 01174000
- TM VMPSW-VMBLOK(R3),VMEXTPND PSW ENABLED ? @V387045 01175000
- BZR R10 NO..WAIT UNTIL ENABLED... @V387045 01176000
- LA R0,CPEXSIZE SIZE OF CPEXBLOK (DOUBLE-WORDS) @V387045 01177000
- CALL DMKFREE GET STORAGE FOR CPEXBLOK @V387045 01178000
- USING CPEXBLOK,R1 @V387045 01179000
- XC CPEXBLOK(CPEXSIZE*8),CPEXBLOK CLEAR IT OUT @V387045 01180000
- LA R2,VMCDSP RETURN AND LOCK @VA12989 01181200
- ST R2,CPEXADD ADDRESS IN R2 @VA12989 01181250
- STM R0,R15,CPEXREGS SAVE REGS @VA12989 01181300
- CALL DMKPTRLK LOCK IN VMC @VA12989 01181350
- ST R3,CPEXR11 AND TARGET VMBLOK ADDRESS @V387045 01184000
- CALL DMKSTKCP STACK THE BLOK @V387045 01185000
- BR R10 RETURN TO CALLER @V387045 01186000
- VMCDSP DS 0H COME HERE ON STACKED CPEXBLOK @VA11766 01186100
- CALL DMKPTRPW MAKE SURE HE'S NOT IN PAGEWAIT @VA11766 01186200
- B VMCXGOTO GOTO DISPATCHER @VA12989 01186310
- DROP R1 @V387045 01187000
- EJECT 01188000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01189000
- * 01190000
- * VMCHECK - VALIDITY CHECK USER BUFFER ADDRESSES 01191000
- * 01192000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01193000
- VMCHECK EQU * VALIDITY CHECK ROUTINE @V387045 01194000
- C R11,ASYSVM IS THIS VALIDITY CHECK FOR CP? @V60C2B8 01194100
- BCR 8,R10 YES - SKIP VALIDITY CHECKING @V60C2B8 01194200
- LCTL C1,C1,VMSEG ACCESS SEGMENT TABLE @V387045 01195000
- LTR R2,R2 IS IT ZERO DATA LENGTH? @VA05890 01195100
- BZR R10 YES - THEN ADDRESS IS OK. @VA05890 01195200
- LRA R0,0(,R1) TEST FOR VALID ADDRESS @V387045 01196000
- BC 8+2,VMCHECK1 NO SEG EXCEPTION BRANCH @VA08051 01197200
- LR R0,R2 SAVE REG 2 ACROSS CALL @VA08051 01197250
- CALL DMKPTRAN,PARM=DEFER LET PTRAN HANDLE IT @VA08051 01197300
- BC 2,VMCRC1 ADDRESSING PROBLEM @VA08051 01197350
- LR R2,R0 RESTOPE REG2 @VA08051 01197400
- VMCHECK1 DS 0H @VA08051 01197450
- LA R14,0(R2,R1) ADD LENGTH @V387045 01198000
- BCTR R14,0 ADDRESS OF LAST BYTE @V387045 01199000
- L R15,XPAGNUM PAGE NO. MASK @V387045 01200000
- NR R14,R15 ENDING PAGE ADDRESS @V387045 01201000
- LRA R0,0(,R14) ENDING ADDRESS VALID ? @V387045 01202000
- BC 8+2,VMCHECK2 NO SEG EXCEPTION BRANCH @VA08051 01203200
- LR R0,R2 SAVE REG 2 ACROSS CALL @VA08051 01203230
- LR R7,R1 SAVE R1 @VA08051 01203260
- LR R1,R14 GRT ENDING ADDRESS FOR DMKPTRAN @VA08051 01203290
- CALL DMKPTRAN,PARM=DEFER LET PTRAN HANDLE IT @VA08051 01203320
- BC 2,VMCRC1 ADDRESSING PROBLEM @VA08051 01203350
- LR R2,R0 RESTORE REG2 @VA08051 01203380
- LR R1,R7 RESTORE REG1 @VA08051 01203410
- VMCHECK2 DS 0H @VA08051 01203440
- BR R10 RETURN @V387045 01204000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01205000
- * 01206000
- * VMCICHK - VALIDITY CHECK SINK VM STATUS 01207000
- * 01208000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01209000
- VMCICHK EQU * @V387045 01210000
- L R8,VMCPNT ADDRESS OF MASTER VMCBLOK @V387045 01211000
- CLC VMCACNT,=AL2(VMCSMAX) EXCEEDING MSG LIMIT ? @V387045 01212000
- BNL VMCRC10 YES..EXIT WITH RC SET @V387045 01213000
- CLC VMCPUSER(8),SYSTEMID IS SINK THE SYSTEM? @V60C2B8 01213100
- BE VMCRC9 YES - TELL USER 'CP QUIESCED' @V60C2B8 01213200
- LA R0,L'VMCPUSER LENGTH OF USERID @V387045 01214000
- LA R1,VMCPUSER ADDRESS OF USERID @V387045 01215000
- CALL DMKSCNAU LOCATE SINK VMBLOK ADDRESS @V387045 01216000
- BNZ VMCRC5 USER NOT AVAILABLE @V387045 01217000
- LR R3,R1 SAVE VMBLOK ADDRESS IN R3 @V387045 01218000
- TM VMCXSTAT-VMBLOK(R3),VMBCAUTH USER AUTHORIZED ? @V387045 01219000
- BZ VMCRC5 NO..NOT AVAILABLE @V387045 01220000
- L R8,VMCPNT-VMBLOK(R3) SINK MASTER VMCBLOK @V387045 01221000
- TM VMCASTAT,VMCAQIES USER QUIESCING ? @V387045 01222000
- BO VMCRC9 YES..SET RC..EXIT @V387045 01223000
- TM VMCPFLG1,VMCPPRTY PRIORITY MESSAGE ? @V387045 01224000
- BZ VMCINPRI NO..SKIP NEXT CHECK @V387045 01225000
- TM VMCASTAT,VMCAPRTY AUTHORIZED FOR PRIORITY @V387045 01226000
- * MESSAGES ? 01227000
- BZ VMCRC18 NO..SET RC..EXIT.. @V387045 01228000
- VMCINPRI EQU * @V387045 01229000
- TM VMCASTAT,VMCAAUTS AUTHORIZED SPECIFIC ? @V387045 01230000
- BZR R10 NO..RETURN TO CALLER @V387045 01231000
- CLC VMCUSER,VMUSER THIS THE CORRECT USER ? @V387045 01232000
- BNE VMCRC5 NO..USER NOT AVAILABLE. @V387045 01233000
- BR R10 RETURN TO CALLER @V387045 01234000
- EJECT 01235000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01236000
- * 01237000
- * VMCSCANS - LOCATE VMCBLOK ON SINK USER VMCBLOK CHAIN 01238000
- * 01239000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01240000
- VMCSCANS EQU * @V387045 01241000
- L R8,VMCPNT-VMBLOK(,R3) SINK VMCBLOK ANCHOR @V387045 01242000
- LA R1,VMUSER USERID WE'RE LOOKING FOR @V387045 01243000
- B VMCSNEXT BRANCH TO SCAN ROUTINE @V387045 01244000
- VMCSCANR EQU * @V387045 01245000
- L R8,VMCPNT VMCBLOK ANCHOR @V387045 01246000
- LA R1,VMCPUSER USERID WE'RE LOOKING FOR @V387045 01247000
- VMCSNEXT EQU * @V387045 01248000
- LR R2,R8 SAVE VMCBLOK ANCHOR @V387045 01249000
- L R8,VMCFPNT NEXT VMCBLOK @V387045 01250000
- LTR R8,R8 DOES IT EXIST ? @V387045 01251000
- BZ VMCSCC2 NO..SET CC = 2 TO CALLER @V387045 01252000
- CLC VMCUSER,0(R1) CORRECT USERID ? @V387045 01253000
- BNE VMCSNEXT NO..KEEP LOOKING... @V387045 01254000
- CLC VMCFUNC,=AL2(VMCPIDEN) IDENTIFY ? @V387045 01255000
- BE VMCSNEXT YES..DOES NOT COUNT... @V387045 01256000
- CLC VMCMID,VMCPMID CORRECT MESSAGE ID @V387045 01257000
- BNE VMCSNEXT NO..KEEP LOOKING... @V387045 01258000
- BR R10 RETURN TO CALLER (CC = 0) @V387045 01259000
- VMCSCC2 EQU * @V387045 01260000
- SLR R8,R8 CLEAR VMCBLOK REG..SET CC = 2 @V387045 01261000
- BR R10 RETURN TO CALLER @V387045 01262000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01263000
- * * 01264000
- * VMCSUSER - LOCATE OBJECT USER VMBLOK ADDRESS 01265000
- * * 01266000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01267000
- VMCSUSER EQU * @V387045 01268000
- LA R0,L'VMCPUSER LENGTH OF USERID @V387045 01269000
- LA R1,VMCPUSER AND ITS ADDRESS... @V387045 01270000
- CALL DMKSCNAU LOCATE VMBLOK ADDRESS @V387045 01271000
- BNZ VMCSUFR USER LOGGED OFF... @V387045 01272000
- LR R3,R1 SAVE IN R3 @V387045 01273000
- TM VMCXSTAT-VMBLOK(R3),VMBCAUTH AUTHORIZED ? @V387045 01274000
- BNZR R10 YES..RETURN TO CALLER.. @V387045 01275000
- VMCSUFR EQU * @V387045 01276000
- LR R1,R8 VMCBLOK ADDRESS TO R1 @V387045 01277000
- LA R0,VMCBSIZE SIZE OF BLOCK (DOUBLEWORDS) @V387045 01278000
- CALL DMKFRET RETURN TO FREE STORAGE @V387045 01279000
- B VMCRC5 SET RC..USER NOT AVAILABLE... @V387045 01280000
- EJECT 01281000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01282000
- * * 01283000
- * VMCFRET - FRET VMCBLOK STORAGE 01284000
- * * 01285000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01286000
- VMCFRET EQU * @V387045 01287000
- LR R1,R8 VMCBLOK ADDRESS TO R1 @V387045 01288000
- LA R0,VMCBSIZE SIZE OF BLOCK (DOUBLEWORDS) @V387045 01289000
- CALL DMKFRET FRET THE BLOCK @V387045 01290000
- BR R10 RETURN TO CALLER @V387045 01291000
- EJECT 01292000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01293000
- * 01294000
- * 01295000
- * SUBROUTINE NAME - 01296000
- * 01297000
- * DMKVMCEX 01298000
- * 01299000
- * FUNCTION - 01300000
- * 01301000
- * TO REFLECT THE VMC EXTERNAL INTERRUPT MESSAGE HEADER 01302000
- * AND OPTIONAL 'SENDX' DATA TO A VIRTUAL MACHINE. 01303000
- * (VMCMHDR) 01304000
- * 01305000
- * ATTRIBUTES - 01306000
- * 01307000
- * REENTRANT, PAGEABLE, ENTERED VIA 'CALL' FROM DMKDSP 01308000
- * 01309000
- * ENTRY POINTS - 01310000
- * 01311000
- * DMKVMCEX 01312000
- * 01313000
- * ENTRY CONDITIONS - 01314000
- * 01315000
- * GPR 13 = SAVEAREA ADDRESS 01316000
- * GPR 12 = ADDRESS OF DMKVMCEX 01317000
- * GPR 11 = VMBLOK ADDRESS OF USER TO RECEIVE INTERRUPT 01318000
- * GPR 6 = ADDRESS OF XINTBLOK 01319000
- * GPR 5 = ANCHOR FOR UNCHAINING XINTBLOK 01320000
- * GPR 14-15, 0-4, 7-10 = IRRELEVANT 01321000
- * 01322000
- * USER WAS MADE NON-DISPATCHIBLE PRIOR TO CALLING 01323000
- * THIS SUB-ROUTINE. (VMRSTAT (VMEXWAIT)) 01324000
- * 01325000
- * EXIT CONDITIONS - 01326000
- * 01327000
- * NO ERRORS: 01328000
- * 01329000
- * GPR 14-15 = DESTROYED 01330000
- * GPR 13 = SAVEAREA 01331000
- * GPR 12 = DESTROYED 01332000
- * GPR 0-11 = RESTORED 01333000
- * 01334000
- * CONTROL IS RETURNED TO THE DISPATCHER (DMKDSP) WHO WILL 01335000
- * FINISH REFLECTING THE HARDWARE EXTERNAL INTERRUPT. 01336000
- * (CODE X'4001') 01337000
- * 01338000
- * ERRORS: 01339000
- * 01340000
- * THE ACTIVE SAVEAREA IS RELEASED VIA SVC 16, THE XINTBLOK 01341000
- * IS DEQUEUED AND FRETTED (IF NECESSARY) AND RETURN IS MADE 01342000
- * TO THE DISPATCHER VIA A GOTO. (IGNORE INTERRUPT) 01343000
- * 01344000
- * CALLS TO OTHER ROUTINES - 01345000
- * 01346000
- * DMKSCNAU - TO LOCATE THE SOURCE USER VMBLOK 01347000
- * DMKPTRAN - TO FETCH USERS EXTERNAL INTERRUPT BUFFER 01348000
- * DMKPSASC - TO CHECK FOR STORE PROTECT VIOLATION 01349000
- * DMKPTRUL - TO UNLOCK MODULE DMKVMC IF XINT ERROR 01350000
- * DMKFRET - TO FRET XINTBLOK - VMCBLOK STORAGE 01351000
- * DMKDSPCH - TO IGNORE CURRENT INTERRUPT 01352000
- * DMKPSA - TO RELEASE THE SAVEAREA VIA SVC 16 01353000
- * 01354000
- * INTERNAL SUB-ROUTINES: 01355000
- * 01356000
- * VMCXFER - DATA TRANSFER SUB-ROUTINE 01357000
- * VMCFRET - FRET VMCBLOK STORAGE (FINAL RESPONSE) 01358000
- * VMCWAKUP - POST PENDING RESPONSE INTERRUPT TO SOURCE VM 01359000
- * VMCDEQ - DEQUEUE VMCBLOK FROM VMCBLOK CHAIN 01360000
- * VMCENQ - ENQUEUE VMCBLOK ON SOURCE VMCBLOK CHAIN 01361000
- * 01362000
- * EXTERNAL REFERENCES - 01363000
- * 01364000
- * NONE 01365000
- * 01366000
- * TABLES / WORK AREAS - 01367000
- * 01368000
- * VMCBLOK, VMCMHDR, XINTBLOK, VMBLOK, SAVEAREA 01369000
- * 01370000
- * MACROS - 01371000
- * 01372000
- * TRANS - FETCH USER PAGES 01373000
- * RELOC - DEFINE DMKVMCEX ENTRY POINT 01374000
- * CALL - USED TO CALL EXISTING CP MODULES 01375000
- * EXIT - USED TO EXIT FROM DMKVMCEX 01376000
- * PSA - USED TO REFERENCE PREFIX STORAGE AREA 01377000
- * GOTO - USED TO RE-ENTER THE DISPATCHER 01378000
- * 01379000
- * REGISTER USAGE - 01380000
- * 01381000
- * GPR 13 = ADDRESS OF STANDARD SAVEAREA 01382000
- * GPR 12 = BASE REGISTER FOR DMKVMCEX 01383000
- * GPR 11 = ADDRESS OF VMBLOK 01384000
- * GPR 10 = SUB-ROUTINE 'BAL' REGISTER 01385000
- * GPR 8 = ADDRESS OF VMCBLOK 01386000
- * GPR 7 = ADDRESS OF ALTERNATE VMCBLOK 01387000
- * GPR 3 = ADDRESS OF ALTERNATE USER VMBLOK 01388000
- * GPR 0-2, 4-6, 9, 14-15 = WORK REGISTERS 01389000
- * 01390000
- * NOTES - 01391000
- * 01392000
- * NONE 01393000
- * 01394000
- * OPERATION - 01395000
- * 01396000
- * DMKVMCEX IS CALLED BY THE DISPATCHER (DMKDSP) WHEN IT 01397000
- * IS DETERMINED THAT A USER HAS A PENDING VMCF EXTERNAL 01398000
- * INTERRUPT (CODE X'4001'). BEFORE CALLING DMKVMCEX THE 01399000
- * USER IS MADE NON-DISPATCHIBLE (VMRSTAT = VMEXWAIT). 01400000
- * DMKVMCEX WILL REFLECT THE STANDARD VMCF MESSAGE HEADER AND 01401000
- * OPTIONAL SENDX DATA (IF REQUIRED). 01402000
- * 01403000
- * 0 1 2 3 4 5 6 7 8 01404000
- * 01405000
- * 0 +-----------------------------------------------+ 01406000
- * | V*1 | V*2 | VMCMFUNC | VMCMMID | 01407000
- * 8 |-----------------------------------------------| 01408000
- * | VMCMUSER | 01409000
- * 10 |-----------------------------------------------| 01410000
- * | VMCMVADA | VMCMLENA | 01411000
- * 18 |-----------------------------------------------| 01412000
- * | VMCMVADB | VMCMLENB | 01413000
- * 20 |-----------------------------------------------| 01414000
- * | VMCMUSE | 01415000
- * 28 |-----------------------------------------------| 01416000
- * | | 01417000
- * = VMCMBUF = 01418000
- * | OPTIONAL MESSAGE BUFFER | 01419000
- * | | 01420000
- * XX +-----------------------------------------------+ 01421000
- * 01422000
- * 01423000
- * 1. LOCATE FIRST EXTERNAL INTERRUPT VMCBLOK ON USERS 01424000
- * VMCBLOK QUEUE. 01425000
- * 2. RESET VMCCXINT FLAG IN VMCBLOK. 01426000
- * 3. FETCH USERS EXTERNAL INTERRUPT BUFFER VIA THE 01427000
- * 'TRANS' MACRO. 01428000
- * 4. CHECK FOR STORE PROTECTION VIOLATION VIA A CALL 01429000
- * TO MODULE DMKPSASC. 01430000
- * 5. COPY MESSAGE HEADER (VMCMHDR) FROM VMCBLOK TO USERS 01431000
- * EXTERNAL INTERRUPT BUFFER. 01432000
- * 6. IF VMCBLOK IS FOR A FINAL RESPONSE EXTERNAL INTERRUPT 01433000
- * DEQUEUE THE BLOCK FROM THE USERS VMBLOK VIA SUB- 01434000
- * ROUTINE VMCDEQ, FRET THE BLOCK VIA SUBROUTINE 01435000
- * VMCFRET AND RETURN TO THE DISPATCHER. 01436000
- * 7. IF BLOCK IS NOT A FINAL RESPONSE AND NOT A SENDX 01437000
- * REQUEST RETURN DIRECTLY TO THE DISPATCHER. 01438000
- * 8. IF VMCBLOK IS FOR A SENDX REQUEST VERIFY THAT THE 01439000
- * SENDX DATA WILL STILL FIT. 01440000
- * 9. OBTAIN STORAGE FOR THE RECEIVER VMCBLOK VIA A CALL 01441000
- * TO MODULE DMKFREE. 01442000
- * 10. MOVE SENDX DATA TO USERS EXTERNAL INTERRUPT BUFFER 01443000
- * VIA SUBROUTINE VMCXFER. 01444000
- * 11. FRET THE THE RECEIVER VMCBLOK VIA A CALL TO MODULE 01445000
- * DMKFRET. 01446000
- * 12. DEQUEUE THE SUBJECT VMCBLOK FROM THE USERS VMCBLOK 01447000
- * QUEUE VIA SUBROUTINE VMCDEQ. 01448000
- * 13. ENQUEUE THE VMCBLOK ON THE SOURCE USERS VMCBLOK 01449000
- * QUEUE VIA SUBROUTINE VMCENQ. 01450000
- * 14. WAKE UP THE SOURCE USER VIA SUBROUTINE VMCWAKUP. 01451000
- * 15. EXIT BACK TO DMKDSP WHO WILL FINISH REFLECTING THE 01452000
- * HARDWARE EXTERNAL INTERRUPT CODE X'4001'. 01453000
- * 01454000
- * NOTE: IF THE VMCF EXTERNAL INTERRUPT IS FOR A FINAL 01455000
- * RESPONSE AND NOT AN IDENTIFY REQUEST THE MESSAGE COUNT 01456000
- * (VMCACNT) IN THE RECEIVERS MASTER VMCBLOK IS DECREMENTED. 01457000
- * IF THE INTERRUPT IS FOR AN IDENTIFY REQUEST THE MESSAGE 01458000
- * COUNT IS DECREMENTED IN THE MASTER VMCBLOK OF THE SOURCE 01459000
- * USER. 01460000
- * 01461000
- * IF ANY ERRORS ARE DETECTED IN THE PROCESS OF REFLECTING 01462000
- * THE EXTERNAL INTERRUPT HEADER OR SENDX DATA THE SOURCE 01463000
- * IS NOTIFIED VIA A DATA TRANSFER RETURN CODE (WHEN 01464000
- * APPLICABLE). 01465000
- * 01466000
- * RESPONSES - 01467000
- * 01468000
- * NONE 01469000
- * 01470000
- * ERROR MESSAGES - 01471000
- * 01472000
- * NONE 01473000
- * 01474000
- * ABEND CODES - 01475000
- * 01476000
- * NONE 01477000
- * 01478000
- * RETURN CODES - 01479000
- * 01480000
- * REFER TO VMCBLOKS COPY (RETURN CODE EQUATES) 01481000
- * 01482000
- *.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01483000
- DMKVMCEX RELOC @V387045 01484000
- L R8,VMCPNT MASTER VMCBLOK @V387045 01485000
- LR R7,R8 SAVE IN R7 @V387045 01486000
- VMCXTEX EQU * @V387045 01487000
- L R8,VMCFPNT NEXT VMCBLOK @V387045 01488000
- LTR R8,R8 DOES ONE EXIST ? @V387045 01489000
- BZ VMCXINFT NO..EXIT FORTHWITH... @V387045 01490000
- TM VMCCSTAT,VMCCXINT XINT BLOK ? @V387045 01491000
- BZ VMCXTEX NO..KEEP LOOKING... @V387045 01492000
- NI VMCCSTAT,X'FF'-VMCCXINT RESET FLAG @V387045 01493000
- OI VMCCSTAT,VMCCBUSY SET BUSY FLAG @V387045 01494000
- L R1,VMCVADA-VMCBLOK(,R7) ADDRESS OF XINT BUFFER @V387045 01495000
- LA R6,VMCMLEN-1 LENGTH OF MINIMUM BUFFER -1 @V387045 01496000
- LR R5,R8 ADDRESS OF XINT DATA TO R5 @V387045 01497000
- LA R3,X'7FF' 2K MASK @V387045 01498000
- OR R3,R1 LAST BYTE OF BUFFER IN 2K BLOCK @V387045 01499000
- SLR R3,R1 BYTES TO 2K BOUND - 1 @V387045 01500000
- VMCXFTCH C R11,ASYSVM INTERRUPT REFLECTION TO CP? @V60C2B8 01500100
- BNE CPVMCF6 NO - PROCEED NORMALLY @V60C2B8 01500200
- LR R2,R1 GET BUFFFER INTO REG 2 @V60C2B8 01500300
- B CPVMCF7 SKIP TRANS MACRO @V60C2B8 01500400
- CPVMCF6 TRANS 2,1,OPT=(BRING+DEFER) FETCH USER BUFFER @V387045 01501000
- BNZ VMCXERR PAGING I/O ERROR @V387045 01502000
- IC R0,VMCKEY-VMCBLOK(R7) USER KEY @V387045 01503000
- CALL DMKPSASC CHECK FOR KEY VIOLATION @V387045 01504000
- BNZ VMCXERR BRANCH IF STORE PROTECTION @V387045 01505000
- CPVMCF7 CLR R6,R3 WILL REMAINDER FIT IN 2K BLOCK ? @V60C2B8 01506000
- BNH VMCXVCX YES..DO LAST MOVE @V387045 01507000
- EX R3,VMCXMOVE MOVE PART OF HEADER @V387045 01508000
- LA R5,1(R3,R5) ADJUST DATA ADDRESS @V387045 01509000
- LA R1,1(R3,R1) AND BUFFER ADDRESS @V387045 01510000
- SLR R6,R3 COMPUTE REMAINING COUNT @V387045 01511000
- BCTR R6,0 LESS ONE FOR EXECUTE @V387045 01512000
- B VMCXFTCH FETCH USER BUFFER @V387045 01513000
- VMCXVCX EQU * @V387045 01514000
- EX R6,VMCXMOVE MOVE ALL OR PART OF VMCMHDR @V387045 01515000
- NI VMCCSTAT,X'FF'-VMCCBUSY RESET BUSY FLAG @V387045 01516000
- TM VMCSTAT,VMCRESP FINAL RESPONSE ? @V387045 01517000
- BO VMCXFRET YES..GET RID OF BLOCK.. @V387045 01518000
- CLC VMCFUNC,=AL2(VMCPSENX) SENDX REQUEST ? @V387045 01519000
- BNE VMCXXIT NO..RETURN TO DISPATCHER @V387045 01520000
- LA R0,VMCMLEN LENGTH OF MESSAGE HEADER @V387045 01521000
- L R1,VMCLENA-VMCBLOK(,R7) LENGTH OF XINT BUFFER @V387045 01522000
- SLR R1,R0 ADJUST WITH BYTES ALREADY MOVED @V387045 01523000
- CL R1,VMCLENA WILL SENDX DATA STILL FIT ? @V387045 01524000
- MVI VMCEFLG,VMC07 SET RETURN CODE @V387045 01525000
- BL VMCXERRA NO..CONTINUE... @V387045 01526000
- CALL DMKSCHDL ENSURE USER DOES NOT RUN @VA06441 01526500
- MVI VMCEFLG,X'00' CLEAR RETURN CODE @V387045 01527000
- LA R0,VMCBSIZE SIZE OF VMCBLOK @V387045 01528000
- CALL DMKFREE GET STORAGE FOR VMCBLOK @V387045 01529000
- LR R4,R1 SAVE IN R4 @V387045 01530000
- MVC 0(VMCBSIZE*8,R4),0(R7) COPY BLOCK @V387045 01531000
- LM R1,R2,VMCVADA-VMCBLOK(R4) BUFFER ADDRESS + @V387045 01532000
- * LENGTH 01533000
- LA R0,VMCMLEN LENGTH OF HEADER @V387045 01534000
- ALR R1,R0 ADJUST ADDRESS @V387045 01535000
- SLR R2,R0 AND LENGTH @V387045 01536000
- STM R1,R2,VMCVADA-VMCBLOK(R4) REPLACE @V387045 01537000
- MVC VMCUSER-VMCBLOK(L'VMCUSER,R4),VMCUSER USERID @V387045 01538000
- MVC VMCUSER,VMUSER SINK USERID @V387045 01539000
- LR R7,R8 SENDER VMCBLOK TO R7 @V387045 01540000
- LR R8,R4 RECEIVER VMCBLOK TO R8 @V387045 01541000
- SPACE 01542000
- BAL R10,VMCXFER TRANSFER DATA (VM -> VM) @V387045 01543000
- SPACE 01544000
- MVC VMCUSER-VMCBLOK(L'VMCUSER,R7),VMCUSER USERID @V387045 01545000
- LA R0,VMCBSIZE SIZE OF VMCBLOK (DOUBLEWORDS) @V387045 01546000
- LR R1,R8 VMCBLOK ADDRESS TO R1 @V387045 01547000
- CALL DMKFRET FRET THE BLOCK @V387045 01548000
- LR R8,R7 SWAP BACK TO SOURCE VMCBLOK @V387045 01549000
- CLI VMCEFLG,X'00' ANY ERRORS ? @V387045 01550000
- BNE VMCXERRA YES..QUIT RIGHT NOW... @V387045 01551000
- VMCXESC EQU * @V387045 01552000
- CLC VMCUSER(8),SYSTEMID IS SOURCE THE SYSTEM? @V60C2B8 01552100
- BNE CPVMCF8 NO - GO FIND USER'S VMBLOK @V60C2B8 01552200
- L R1,ASYSVM GET ADDRESS OF SYSTEM VMBLOK 01552300
- LR R3,R1 SAVE VMBLOK ADDRESS IN REG3 01552400
- B CPVMCFB GO DEQUE BLOCK FROM SINK CHAIN 01552500
- CPVMCF8 LA R0,L'VMCUSER LENGTH OF USERID @V387045 01553000
- LA R1,VMCUSER AND ITS ADDRESS @V387045 01554000
- CALL DMKSCNAU LOCATE SOURCE VMBLOK ADDRESS @V387045 01555000
- BNZ VMCXXFRT FRET BLOCK AND EXIT IF LOGGED OFF@V387045 01556000
- LR R3,R1 SAVE VMBLOK ADDRESS IN R3 @V60C2B8 01557000
- TM VMCXSTAT-VMBLOK(R3),VMBCAUTH AUTHORIZED ? @V387045 01558000
- BZ VMCXXFRT NO..GET RID OF BLOCKS... @V387045 01559000
- CPVMCFB BAL R10,VMCDEQ DEQUEUE BLOCK FROM SINK CHAIN @V387045 01560000
- CLC VMCUSER(8),SYSTEMID DID CP ISSUE SENDX? @V60C2B8 01560010
- BNE CPVMCFA NO - THEN CONTINUE NORMALLY @V60C2B8 01560020
- L R1,VMCVADA GET SENDER'S SENDX DATA ADDR @V60C2B8 01560030
- LA R2,VMCPLEN LEN OF VMCPARM (SENDX HEADER) @V60C2B8 01560040
- SR R1,R2 SET POINTER TO BEG OF SENDX BUF @V60C2B8 01560050
- L R2,VMCPLENA-VMCPARM(R1) SENDX DATA LENGTH @VA09656 01560061
- LA R2,VMCPLEN+7(R2) SENDX HEADER+DATA+7 FOR FRET @V60C2B8 01560070
- LR R0,R2 MOVE LENGTH TO R0 FOR FRET @V60C2B8 01560080
- SRL R0,3 CONVERT LEN TO DOUBLE WORDS @V60C2B8 01560090
- CALL DMKFRET FRET SENDER'S VMCPARM LIST @V60C2B8 01560100
- BAL R10,VMCFRET FRET CP'S VMCBLOCK @V60C2B8 01560110
- B VMCXXIT EXIT TO DISPATCHER @V60C2B8 01560120
- CPVMCFA NI VMCCSTAT,X'FF'-VMCCBUSY RESET BUSY FLAG.. @V60C2B8 01561000
- OI VMCSTAT,VMCRESP SET FINAL RESPONSE @V387045 01562000
- BAL R10,VMCENQ ENQ BLOCK ON SOURCE CHAIN @V387045 01563000
- BAL R10,VMCWAKUP WAKE UP SOURCE USER @V387045 01564000
- B VMCXXIT EXIT TO THE DISPATCHER @V387045 01565000
- VMCXERR EQU * @V387045 01566000
- MVI VMCEFLG,VMC19 SET DATA TRANSFER ERROR @V387045 01567000
- VMCXERRA EQU * @V387045 01568000
- LR R1,R8 VMCBLOK TO R1 @V387045 01569000
- VMCXSINT EQU * @V387045 01570000
- L R1,VMCFPNT-VMCBLOK(,R1) NEXT BLOK ? @V387045 01571000
- LTR R1,R1 DOES ONE EXIST ? @V387045 01572000
- BZ VMCXINFT NO..GET RID OF XINTBLOK @V387045 01573000
- TM VMCCSTAT,VMCCXINT XINT BLOK ? @V387045 01574000
- BZ VMCXSINT NO..KEEP LOOKING... @V387045 01575000
- B VMCXRLSV JUST GET RID OF SAVEAREA... @V387045 01576000
- VMCXINFT EQU * @V387045 01577000
- L R2,SAVER5 XINTBLOK ANCHOR @V387045 01578000
- L R1,SAVER6 ADDRESS OF XINTBLOK @V387045 01579000
- L R0,XINTNEXT-XINTBLOK(,R1) UNHOOK THIS @V387045 01580000
- ST R0,XINTNEXT-XINTBLOK(,R2) BLOK..ALWAYS LAST.. @V387045 01581000
- LA R0,XINTSIZE SIZE OF BLOCK (DOUBLEWORDS) @V387045 01582000
- CALL DMKFRET FRET THE BLOCK @V387045 01583000
- VMCXRLSV EQU * @V387045 01584000
- SVC 16 RELEASE ACTIVE SAVEAREA @V387045 01585000
- SLR R13,R13 CLEAR R13..JUST IN CASE... @V387045 01586000
- LTR R8,R8 DO WE HAVE A VMCBLOK ? @V387045 01587000
- BZ VMCXXIT NO..EXIT NOW... @V387045 01588000
- TM VMCSTAT,VMCRESP RESPONSE INTERRUPT ? @V387045 01589000
- BZ VMCXESC NO..SEND IT BACK TO SOURCE.. @V387045 01590000
- VMCXFRET EQU * @V387045 01591000
- L R1,VMCPNT MASTER VMCBLOK @V387045 01592000
- CLC VMCFUNC,=AL2(VMCPIDEN) IDENTIFY ? @V387045 01593000
- BNE VMCXDCNT NO..DECREMENT MESSAGE COUNT.. @V387045 01594000
- LA R0,L'VMCUSER LENGTH OF USERID @V387045 01595000
- LA R1,VMCUSER AND ITS ADDRESS @V387045 01596000
- CALL DMKSCNAU LOCATE SOURCE VMBLOK ADDRESS @V387045 01597000
- BNZ VMCXXFRT NOT THERE..JUST FRET THE BLOCK @V387045 01598000
- TM VMCXSTAT-VMBLOK(R1),VMBCAUTH AUTHORIZED ? @V387045 01599000
- BZ VMCXXFRT NO..FRET THE BLOCK.. @V387045 01600000
- L R1,VMCPNT-VMBLOK(,R1) MASTER BLOCK @V387045 01601000
- VMCXDCNT EQU * @V387045 01602000
- CLC VMCTOD-VMCBLOK(8,8),VMCTOD-VMCBLOK(1) TIME GOOD?@VA07113 01602300
- BL VMCXXFRT NO,DON'T DECREMENT MSG CTR @VA07113 01602600
- LH R2,VMCACNT-VMCBLOK(,R1) MESSAGE COUNT @V387045 01603000
- BCTR R2,0 LESS ONE @V387045 01604000
- STH R2,VMCACNT-VMCBLOK(,R1) REPLACE... @V387045 01605000
- VMCXXFRT EQU * @V387045 01606000
- BAL R10,VMCDEQ DEQUEUE VMCBLOK FROM VMCBLOK @V387045 01607000
- * CHAIN 01608000
- BAL R10,VMCFRET FRET THE BLOCK @V387045 01609000
- VMCXXIT EQU * @V387045 01610000
- NI VMRSTAT,X'FF'-VMEXWAIT USER CAN NOW RUN @V387045 01611000
- CALL DMKSCHDL TELL THE BOSS WE'RE RUNNABLE @VA06441 01611500
- LTR R13,R13 SAVEAREA GONE ? @V387045 01612000
- BZ VMCXGOTO YES..RETURN TO DISPATCHER @V387045 01613000
- CPVMCF9 EXIT @V60C2B8 01614000
- VMCXGOTO EQU * @V387045 01615000
- LR R2,R12 COMPUTE THE DISP INTO @VA08834 01615100
- SRL R2,12 THE SYSTEM CORE TABLE @VA08834 01615200
- SLL R2,4 FOR THIS PAGE FRAME @VA08834 01615300
- AL R2,ACORETBL ADD ADDRESS OF CORE TABLE @VA08834 01615400
- TM CORFLAG-CORTABLE(R2),CORCP IS PAGE RESIDENT ? @VA08834 01615500
- BO VMCXGONE YES, THEN LEAVE @VA08834 01615600
- LR R2,R12 BASE ADDRESS TO R2 @V387045 01616000
- CALL DMKPTRUL UNLOCK MY PAGE SINCE PSA WON'T @V387045 01617000
- VMCXGONE DS 0H @VA08834 01617500
- GOTO DMKDSPCH RETURN TO DISPATCHER @V387045 01618000
- VMCXMOVE MVC 0(*-*,R2),0(R5) EXECUTED MOVE FOR VMCMHDR @V387045 01619000
- EJECT 01620000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01621000
- * * 01622000
- * VM COMMUNICATION RETURN CODES 01623000
- * * 01624000
- *:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::* 01625000
- VMCRC1 LA R2,VMC01 INVALID VIRTUAL ADDRESS @V387045 01626000
- B VMCEXIT EXIT @V387045 01627000
- VMCRC2 LA R2,VMC02 INVALID SUBFUNCTION CODE @V387045 01628000
- B VMCEXIT EXIT @V387045 01629000
- VMCRC3 LA R2,VMC03 PROTOCOL VIOLATION @V387045 01630000
- B VMCEXIT EXIT @V387045 01631000
- VMCRC4 LA R2,VMC04 USER NOT AUTHORIZED (SOURCE) @V387045 01632000
- B VMCEXIT EXIT @V387045 01633000
- VMCRC5 LA R2,VMC05 USER NOT AVAILABLE @V387045 01634000
- B VMCEXIT EXIT @V387045 01635000
- VMCRC6 LA R2,VMC06 PROTECTION VIOLATION @V387045 01636000
- B VMCEXIT EXIT @V387045 01637000
- VMCRC7 LA R2,VMC07 SENDX DATA TOO LARGE @V387045 01638000
- B VMCEXIT EXIT @V387045 01639000
- VMCRC8 LA R2,VMC08 DUPLICATE MESSAGE @V387045 01640000
- B VMCEXIT EXIT @V387045 01641000
- VMCRC9 LA R2,VMC09 TARGET VM QUIESCING @V387045 01642000
- B VMCEXIT EXIT @V387045 01643000
- VMCRC10 LA R2,VMC10 MESSAGE LIMIT EXCEEDED @V387045 01644000
- B VMCEXIT EXIT @V387045 01645000
- VMCRC11 LA R2,VMC11 CANCEL - RECEIVE PROCESSED @V387045 01646000
- B VMCEXIT EXIT @V387045 01647000
- VMCRC12 LA R2,VMC12 MESSAGE NOT FOUND @V387045 01648000
- B VMCEXIT EXIT @V387045 01649000
- VMCRC13 LA R2,VMC13 SYNCHRONIZATION ERROR @V387045 01650000
- B VMCEXIT EXIT @V387045 01651000
- VMCRC14 LA R2,VMC14 CANCEL BUT TOO LATE @V387045 01652000
- B VMCEXIT EXIT @V387045 01653000
- VMCRC15 LA R2,VMC15 PAGING I/O ERROR @V387045 01654000
- B VMCEXIT EXIT @V387045 01655000
- VMCRC16 LA R2,VMC16 INCORRECT LENGTH @V387045 01656000
- B VMCEXIT EXIT @V387045 01657000
- VMCRC17 LA R2,VMC17 DESTRUCTIVE OVERLAP @V387045 01658000
- B VMCEXIT EXIT @V387045 01659000
- VMCRC18 LA R2,VMC18 USER NOT AUTHORIZED PRIORITY @V387045 01660000
- B VMCEXIT EXIT @V387045 01661000
- VMCRC19 LA R2,VMC19 DATA TRANSFER ERROR @V387045 01662000
- B VMCEXIT EXIT @V387045 01663000
- VMCRC20 LA R2,VMC20 CANCEL - VMCBLOK BUSY @V387045 01664000
- B VMCEXIT EXIT @V387045 01665000
- SPACE 01666000
- VMCEC1 MVI VMCEFLG-VMCBLOK(R7),VMC01 INVALID ADDRESS @V387045 01667000
- MVI VMCEFLG,VMC19 DATA TRANSFER ERROR @V387045 01668000
- B VMCXEND EXIT @V387045 01669000
- VMCEC1A MVI VMCEFLG,VMC01 INVALID ADDRESS @V387045 01670000
- MVI VMCEFLG-VMCBLOK(R7),VMC19 DATA XFER ERROR @V387045 01671000
- B VMCXEND EXIT @V387045 01672000
- VMCEC5 MVI VMCEFLG-VMCBLOK(R7),VMC05 NOT AVAILABLE @V387045 01673000
- MVI VMCEFLG,VMC05 USER NOT AVAILABLE @V387045 01674000
- B VMCXEND EXIT @V387045 01675000
- VMCEC6 MVI VMCEFLG-VMCBLOK(R7),VMC06 PROTECTION ERROR @V387045 01676000
- MVI VMCEFLG,VMC19 DATA TRANSFER ERROR @V387045 01677000
- B VMCXEND EXIT @V387045 01678000
- VMCEC6A MVI VMCEFLG,VMC06 PROTECTION ERROR @V387045 01679000
- MVI VMCEFLG-VMCBLOK(R7),VMC19 DATA TRANSFER ERROR @V387045 01680000
- B VMCXEND EXIT @V387045 01681000
- VMCEC15 MVI VMCEFLG-VMCBLOK(R7),VMC15 PAGING ERROR @V387045 01682000
- MVI VMCEFLG,VMC19 DATA TRANSFER ERROR @V387045 01683000
- B VMCXEND EXIT @V387045 01684000
- VMCEC15A MVI VMCEFLG,VMC15 PAGING I/O ERROR @V387045 01685000
- MVI VMCEFLG-VMCBLOK(R7),VMC19 DATA TRANSFER ERROR @V387045 01686000
- B VMCXEND EXIT @V387045 01687000
- VMCEC17 MVI VMCEFLG,VMC17 DESTRUCTIVE OVERLAP @V387045 01688000
- MVI VMCEFLG-VMCBLOK(R7),VMC17 DESTRUCTIVE OVERLAP @V387045 01689000
- B VMCXEND EXIT @V387045 01690000
- SPACE 01691000
- VMCRC0 SR R2,R2 NORMAL RETURN - NO ERRORS @V387045 01692000
- VMCEXIT EQU * @V387045 01693000
- ST R2,SAVER2 PASS BACK RETURN CODE TO DMKHVC @V387045 01694000
- L R1,SAVEWRK1 ADDRESS OF VMCPARM BUFFER @V387045 01695000
- LTR R1,R1 DID WE GET IT ? @V387045 01696000
- BZ VMCFEXIT NO..EXIT NOW @V387045 01697000
- LA R0,VMCBSIZE SIZE OF VMCBLOK (DOUBLEWORDS) @V387045 01698000
- CALL DMKFRET FRET VMCPARM BUFFER @V387045 01699000
- VMCFEXIT EQU * @V387045 01700000
- EXIT @V387045 01701000
- SPACE 01702000
- SYSTEMID DC CL8'SYSTEM ' LOGONID OF THE SYSTEM @V60C2B8 01702100
- SPACE 01702200
- LTORG @V387045 01703000
- EJECT 01704000
- COPY VMCBLOKS @V387045 01705000
- COPY CORE @VA08834 01705500
- COPY VMBLOK @V387045 01706000
- COPY EQU @V387045 01707000
- COPY XINTBLOK @V387045 01708000
- COPY SAVE @V387045 01709000
- PSA @V387045 01710000
- END DMKVMC 01711000
ibm/vm370-lib/cp/dmkvmc.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator