TITLE 'IEAVGM00 OS/VS2 GETMAIN / FREEMAIN SERVICE ROUTINE *00005003 CSECT-IEAVGM00' 00008003 * /* START OF SPECIFICATIONS **** 00011002 * 00012002 *01* MODULE-NAME = IEAVGM00 00013002 * 00014002 *02* CSECT-NAME = IEAVGM00 00015002 * 00016002 *02* CSECT-NAME = IEAVGM01 00016202 * 00016402 *02* CSECT-NAME = IEASMFGF 00017002 * 00018002 *01* DESCRIPTIVE-NAME = OS/VS2 GETMAIN/FREEMAIN SERVICE ROUTINE 00019002 * 00020002 *01* COPYRIGHT = NONE 00021002 * 00022002 *01* STATUS = OS/VS2 RELEASE 3.7 WITH SU5 AND SU7 00022140 * PFT LEVEL UZ18823 00022240 * 00024002 *01* FUNCTION = THE GETMAIN/FREEMAIN MODULE WILL ALLOCATE (GETMAIN) 00025002 * AND DEALLOCATE (FREEMAIN) VIRTUAL STORAGE IN THE SQA AND CSA AND 00026002 * IN THE LSQA, SWA, AND USER REGION OF EACH VIRTUAL MEMORY. THIS 00027002 * INVOLVES: 00028002 * 00029002 * 1. ALLOCATION OF STORAGE BLOCKS ON REQUEST 00030002 * 00031002 * 2. RELEASE OF STORAGE BLOCKS ON REQUEST 00032002 * 00033002 * 3. MAINTAINING OWNERSHIP OF ALL 4K BLOCKS 00034002 * 00035002 * A. MAINTAINING A RECORD OF ALL 4K BLOCKS ASSIGNED TO 00036002 * EACH TASK AND TO EACH SUBPOOL BELONGING TO THAT TASK 00037002 * 00038002 * B. MAINTAINING A QUEUE IN LSQA OF FREE AREAS IN THE 00039002 * STORAGE ASSIGNED TO EACH TASK SUBPOOL 00040002 * 00041002 * C. MAINTAINING A RECORD OF ASSOCIATION WITH A TASK 00042002 * OR JOB STEP OF STORAGE ALLOCATED FROM SUPERVISOR 00043002 * OWNED STORAGE (VIA AQE'S - ALLOCATED QUEUE ELEMENTS) 00044002 * WHEN REQUESTED TO DO SO 00045002 * 00046002 * A SECONDARY FUNCTION IN SUPPORT OF SYSTEM MANAGEMENT 00047002 * FACILITIES (SMF) IS TO PRODUCE ACTUAL STORAGE USED VALUES. 00048002 * THIS INVOLVES: 00049002 * 00050002 * 1. MONITORING REQUESTS FOR PROBLEM PROGRAM 00051002 * SUBPOOLS (INCLUDING SUBPOOLS 250, 251, AND 00052002 * 252); AND MAINTAINING STORAGE USED FIELDS 00053002 * ASSOCIATED WITH EACH PROBLEM PROGRAM TCB 00054002 * 00055002 * 2. THE FIELDS MAINTAINED ARE: 00056002 * 00057002 * TCTLWM HIGHEST ADDRESS ALLOCATED FROM THE 00058002 * BOTTOM OF THE PRIVATE AREA OR REGION 00059002 * 00060002 * TCTHWM LOWEST ADDRESS THAT LSQA, SQA, AND 00061002 * SUBPOOLS 229 AND 230 REACH FROM THE 00062002 * TOP OF THE PRIVATE AREA 00063002 * 00064002 * TCTMINC NO LONGER USED 00065002 * 00066002 * 3. DURING TASK TERMINATION (HIGH ORDER BIT OF TCT 00067002 * ADDRESS IN TCB SET TO ZERO) THIS SMF DATA WILL 00068002 * NOT BE RECORDED IN ORDER TO PREVENT INITIATOR 00069002 * PROCESSING FROM AFFECTING THE RESULTS. 00070002 * 00071002 *02* OPERATION = WHEN THE MODULE IS ENTERED ON AN SVC 4 OR SVC 5 00072002 * REQUEST, ADDRESSABILITY IS ESTABLISHED AND IF THE TASK IS NOT 00073002 * KEY 0 ALL OF THE INPUT PARAMETERS AND LISTS ARE VALIDITY 00074002 * CHECKED. 00075002 * 00076002 * WHEN THE MODULE IS ENTERED ON ANY OTHER TYPE OF REQUEST, 00077002 * ADDRESSABILITY IS ESTABLISHED, REGISTERS ARE SAVED 00078002 * (BRANCH ENTRIES ONLY), AND AN INDICATION OF THE TYPE OF 00079002 * ENTRY IS SAVED. 00080002 * 00081002 * FOR ALL ENTRIES INTERNAL PARAMETERS ARE NOW SET UP SO 00082002 * THAT COMMON ROUTINES MAY BE USED FOR THE ACTUAL GETMAIN 00083002 * OR FREEMAIN. THESE PARAMETERS ARE: 00084002 * 00085002 * RIN1 (REG 1) = VALUE OF REG 1 WHEN THIS MODULE WAS 00086002 * ENTERED 00087002 * 00088002 * RLENGTH (REG 10) = LENGTH OR POINTER TO LENGTH LIST 00089002 * 00090002 * RADDR (REG 11) = ADDRESS OR ADDRESS SLOT, OR LIST OF ADDRESSES 00091002 * 00092002 * RLDA (REG 4) = ADDRESS OF LDA 00093002 * 00096002 * LDARQSTA = SVC NUMBER OR BRANCH INDICATOR, PROTECT KEY, 00097002 * AND MODE FLAGS 00098002 * 00099002 * AT THIS POINT THE GMCOMMON ROUTINE IS ENTERED FOR A 00100002 * GETMAIN AND THE FMCOMMON ROUTINE IS ENTERED FOR A 00101002 * FREEMAIN. IN EITHER CASE THE SUBPOOL CHECK SUBROUTINE 00102002 * (CSPCHK) IS CALLED TO LOOK UP THE SUBPOOL NUMBER AND 00103002 * TAKE SPECIAL ACTION IF NECESSARY. IF SUBPOOLS 242 OR 247 00104002 * ARE REFERENCED, CONTROL PASSES TO THE MODULE IEAVPRT0 00105002 * (GET/FREE PART). ALL OTHER SUBPOOLS ARE PROCESSED 00106002 * IN THIS MODULE (IEAVGM00) OR ARE CONSIDERED ERROR 00106502 * CONDITIONS. FOR EACH SUBPOOL THE NECESSARY POINTERS ARE 00107002 * INITIALIZED AND FOR SUBPOOLS OTHER THAN SQA OR LSQA A 00108002 * SEARCH IS MADE FOR AN SPQE. IF ONE IS FOUND ITS ADDRESS 00109002 * IS RETURNED TO THE CALLING ROUTINE. 00110002 * 00111002 * UPON RETURN TO THE GMCOMMON ROUTINE, IF AN SPQE WAS NOT 00112002 * FOUND ONE IS CREATED, THE REQUEST LENGTH IS ROUNDED UP 00113002 * TO AN 8 BYTE MULTIPLE, AND THE REQUESTED VIRTUAL STORAGE 00114002 * IS SEARCHED FOR. IF IT IS AVAILABLE, RETURN IS MADE TO 00115002 * THE CALLER WITH THE ADDRESS OF THE ALLOCATED SPACE. IF 00116002 * THE STORAGE IS NOT AVAILABLE RETURN IS MADE WITH A 00117002 * RETURN CODE OF 4 OR 8 IN REGISTER 15 IF THE REQUEST WAS 00118002 * CONDITIONAL, OR THE TASK IS ABENDED IF THE REQUEST WAS 00119002 * UNCONDITIONAL. 00120002 * 00121002 * FOR A FREEMAIN, WHEN THE CSPCHK ROUTINE RETURNS TO 00122002 * FMCOMMON, IF NO SPQE WAS FOUND AN ERROR IS INDICATED. 00123002 * OTHERWISE THE APPROPRIATE STORAGE IS REMOVED FROM THE 00124002 * ALLOCATED AREA AND RETURNED TO THE FREE QUEUES. 00125002 * CHECKING IS DONE TO DETERMINE IF A 4K BLOCK OF 00126002 * STORAGE HAS BEEN MADE FREE. IF IT HAS, THE RELEASE PAGE 00127002 * ROUTINE OF RSM IS ENTERED TO FREE THE PAGE AND UNLESS 00128002 * THE SPACE IS IN SQA OR CSA, IT IS REMOVED FROM THE 00129002 * SUBPOOL FREE QUEUE AND ADDED TO THE ADDRESS SPACE FREE 00130002 * QUEUE. SQA AND CSA PAGES ARE RETURNED TO THE 00131002 * APPROPRIATE GLOBAL FREE QUEUES. 00132002 * 00133002 * IF AN ERROR WAS FOUND DURING THE FREEMAIN PROCESS AND 00134002 * THE REQUEST WAS UNCONDITIONAL THEN THE REQUESTING TASK 00135002 * IS ABENDED. IF THE REQUEST WAS CONDITIONAL AND NO ERROR 00136002 * WAS DISCOVERED, A RETURN CODE OF 0 IS GIVEN; IF AN ERROR 00137002 * DID OCCUR, A RETURN CODE OF 4 OR 8 IS GIVEN. THE RETURN 00138002 * CODE IS PROVIDED IN REGISTER 15. 00139002 * 00140002 *01* NOTES = NONE 00141002 * 00142002 *02* DEPENDENCIES = THE LOCAL MEMORY LOCK MUST BE HELD UPON ENTRY 00143002 * TO THIS ROUTINE EXCEPT FOR THE GLBRANCH AND MRELEASR ENTRIES 00144002 * WHICH MUST HAVE THE SALLOC LOCK. THE STORAGE KEY MUST BE 00145002 * ZERO, THE SYSTEM MUST BE IN SUPERVISOR MODE, AND DYNAMIC 00146002 * ADDRESS TRANSLATION MUST BE ON. 00147002 * 00148002 *03* CHARACTER-CODE-DEPENDENCIES = THE MODULE IS INDEPENDENT OF 00149002 * CHARACTER CODES 00150002 * 00151002 *02* RESTRICTIONS = NONE 00152002 * 00153002 *02* REGISTER-CONVENTIONS = SEE SECTION "REGISTER EQUATES" 00154002 * 00155002 *02* PATCH-LABEL = NO PATCH AREA PROVIDED 00156002 * 00157002 *01* MODULE-TYPE = PROCEDURE 00158002 * 00159002 *02* PROCESSOR = ASSEMBLER-370R 00160003 * 00161002 *02* MODULE-SIZE = 11K BYTES 00162003 * 00163002 *02* ATTRIBUTES = NUCLEUS, ZERO PSW PROTECT KEY, REFRESHABLE, 00164002 * SUPERVISOR MODE 00165002 * 00166002 *01* ENTRY-POINT = IGC004 00167002 * 00168002 *02* PURPOSE = STORAGE TYPE GETMAIN 00169002 * 00170002 *02* LINKAGE = CALLED BY E, L, AND V FORMS OF GETMAIN MACRO; 00171002 * ENTERED FROM SVC INTERRUPTION HANDLER 00172002 * 00173002 *02* INPUT = 00174002 * REG 1 ADDRESS OF THE PARAMETER LIST 00175002 * REG 4 ADDRESS OF CURRENT TCB 00176002 * REG 5 ADDRESS OF RB AT TOP OF THE RB QUEUE 00177002 * REG 7 ADDRESS OF CURRENT ASCB 00178002 * REG 14 ADDRESS OF THE TYPE 1 SVC EXIT HANDLER 00179002 * 00180002 * THE FORMAT OF THE PARAMETER LIST IS DESCRIBED BELOW UNDER 00181002 * "INPUT PARAMETER LIST" 00182002 * 00183002 *02* OUTPUT = THE ADDRESS(ES) OF THE STORAGE ALLOCATED IS PLACED 00184002 * INTO THE PARAMETER LIST. (SEE "LIST FORMATS" BELOW) 00185002 * 00186002 *02* REGISTERS-SAVED = REGISTERS 1 AND 14 00187002 * 00188002 *02* REGISTERS-RESTORED = REGISTERS 1 AND 14 00189002 * 00190002 *01* ENTRY-POINT = IGC005 00191002 * 00192002 *02* PURPOSE = STORAGE TYPE FREEMAIN 00193002 * 00194002 *02* LINKAGE = CALLED BY E, L, AND V FORMS OF FREEMAIN MACRO; 00195002 * ENTERED FROM SVC INTERRUPTION HANDLER 00196002 * 00197002 *02* INPUT = 00198002 * REG 1 ADDRESS OF THE PARAMETER LIST 00199002 * REG 4 ADDRESS OF CURRENT TCB 00200002 * REG 5 ADDRESS OF RB AT TOP OF THE RB QUEUE 00201002 * REG 7 ADDRESS OF CURRENT ASCB 00202002 * REG 14 ADDRESS OF THE TYPE 1 SVC EXIT HANDLER 00203002 * 00204002 * THE FORMAT OF THE PARAMETER LIST IS DESCRIBED BELOW UNDER 00205002 * "INPUT PARAMETER LIST" 00206002 * 00207002 *02* OUTPUT = NONE 00208002 * 00209002 *02* REGISTERS-SAVED = REGISTERS 1 AND 14 00210002 * 00211002 *02* REGISTERS-RESTORED = REGISTERS 1 AND 14 00212002 * 00213002 *01* ENTRY-POINT = IGC010 00214002 * 00215002 *02* PURPOSE = REGISTER TYPE, UNCONDITIONAL GETMAIN OR FREEMAIN 00216002 * 00217002 *02* LINKAGE = CALLED BY R FORM OF GETMAIN OR FREEMAIN MACRO; 00218002 * ENTERED FROM SVC INTERRUPTION HANDLER 00219002 * 00220002 *02* INPUT = 00221002 * REG 0 SUBPOOL ID IN BYTE 0, NUMBER OF BYTES REQUESTED IN 00222002 * BYTES 1 TO 3; FOR A SUBPOOL FREEMAIN BYTES 1 TO 3 00223002 * MUST BE 0 00224002 * REG 1 ANY NEGATIVE VALUE IF REQUEST IS FOR A GETMAIN, 00225002 * ADDRESS TO BE FREED IF REQUEST IS FOR A FREEMAIN; 00226002 * FOR A SUBPOOL FREEMAIN MUST BE 0 00227002 * REG 4 ADDRESS OF CURRENT TCB 00228002 * REG 5 ADDRESS OF RB AT TOP OF THE RB QUEUE 00229002 * REG 7 ADDRESS OF CURRENT ASCB 00230002 * REG 14 ADDRESS OF THE TYPE 1 SVC EXIT HANDLER 00231002 * 00232002 *02* OUTPUT = FOR A GETMAIN, REGISTER 1 CONTAINS THE ADDRESS OF 00233002 * THE STORAGE ALLOCATED; FOR A FREEMAIN, NONE 00234002 * 00235002 *02* REGISTERS-SAVED = REGISTERS 1 AND 14 00236002 * 00237002 *02* REGISTERS-RESTORED = REGISTER 14 IF GETMAIN AND REGISTERS 1 00238002 * AND 14 IF FREEMAIN 00239002 * 00240002 *01* ENTRY-POINT = IGC120 00241002 * 00242002 *02* PURPOSE = REGISTER TYPE GETMAIN OR FREEMAIN 00243002 * 00244002 *02* LINKAGE = CALLED BY RC OR RU FORMS OF GETMAIN OR FREEMAIN 00245002 * MACRO; ENTERED FROM SVC INTERRUPTION HANDLER 00246002 * 00247002 *02* INPUT = 00248002 * REG 0 NUMBER OF BYTES REQUESTED; FOR A SUBPOOL FREEMAIN 00249002 * MUST BE 0 00250002 * REG 1 ZERO FOR A GETMAIN, ADDRESS TO BE FREED FOR A 00251002 * FREEMAIN; FOR A SUBPOOL FREEMAIN MUST BE 0 00252002 * REG 4 ADDRESS OF CURRENT TCB 00253002 * REG 5 ADDRESS OF RB AT TOP OF THE RB QUEUE 00254002 * REG 7 ADDRESS OF CURRENT ASCB 00255002 * REG 14 ADDRESS OF THE TYPE 1 SVC EXIT HANDLER 00256002 * REG 15 BYTES 0 AND 1 RESERVED, SET TO 0 00257002 * BYTE 2 SUBPOOL ID 00257202 * BYTE 3 FLAGS AS FOLLOWS: 00258002 * BITS 0-4 RESERVED, SET TO 0 00259002 * BIT 5 = 0 DOUBLEWORD BOUNDARY 00260002 * = 1 PAGE BOUNDARY 00261002 * BIT 6 = 0 CONDITIONAL REQUEST 00262002 * = 1 UNCONDITIONAL REQUEST 00263002 * BIT 7 = 0 GETMAIN 00264002 * = 1 FREEMAIN 00265002 * 00266002 *02* OUTPUT = FOR A GETMAIN, REGISTER 1 CONTAINS THE ADDRESS OF 00267002 * THE STORAGE ALLOCATED; FOR A FREEMAIN, NONE 00268002 * 00269002 *02* REGISTERS-SAVED = REGISTERS 1 AND 14 00270002 * 00271002 *02* REGISTERS-RESTORED = REGISTER 14 IF GETMAIN AND REGISTERS 1 00272002 * AND 14 IF FREEMAIN 00273002 * 00274002 *01* ENTRY-POINT = GMBRANCH 00275002 * 00276002 *02* PURPOSE = STORAGE TYPE GETMAIN, BRANCH ENTRY 00277002 * 00278002 *02* LINKAGE = CALLED BY E, L, AND V FORMS OF GETMAIN MACRO 00279002 * WITH BRANCH OPTION SPECIFIED 00280002 * 00281002 *02* INPUT = 00282002 * REG 1 ADDRESS OF THE PARAMETER LIST 00283002 * REG 4 ADDRESS OF THE TCB UNDER WHICH STORAGE IS TO BE 00284002 * ALLOCATED 00285002 * REG 7 ADDRESS OF ASCB 00286002 * REG 14 RETURN ADDRESS 00287002 * 00288002 * THE FORMAT OF THE PARAMETER LIST IS DESCRIBED BELOW UNDER 00289002 * "INPUT PARAMETER LIST" 00290002 * 00291002 *02* OUTPUT = THE ADDRESS(ES) OF THE STORAGE ALLOCATED IS PLACED 00292002 * INTO THE PARAMETER LIST. (SEE "LIST FORMATS" BELOW) 00293002 * 00294002 *02* REGISTERS-SAVED = ALL REGISTERS EXCEPT 7 00295003 * 00296002 *02* REGISTERS-RESTORED = ALL REGISTERS EXCEPT 1, 7 AND 15 00297003 * 00298002 *01* ENTRY-POINT = FMBRANCH 00299002 * 00300002 *02* PURPOSE = STORAGE TYPE FREEMAIN, BRANCH ENTRY 00301002 * 00302002 *02* LINKAGE = CALLED BY E, L, AND V FORMS OF FREEMAIN MACRO 00303002 * WITH BRANCH OPTION SPECIFIED 00304002 * 00305002 *02* INPUT = 00306002 * REG 1 ADDRESS OF THE PARAMETER LIST 00307002 * REG 4 ADDRESS OF THE TCB UNDER WHICH STORAGE IS TO BE 00308002 * ALLOCATED 00309002 * REG 7 ADDRESS OF ASCB 00310002 * REG 14 RETURN ADDRESS 00311002 * 00312002 * THE FORMAT OF THE PARAMETER LIST IS DESCRIBED BELOW UNDER 00313002 * "INPUT PARAMETER LIST" 00314002 * 00315002 *02* OUTPUT = NONE 00316002 * 00317002 *02* REGISTERS-SAVED = ALL REGISTERS 00318002 * 00319002 *02* REGISTERS-RESTORED = ALL REGISTERS EXCEPT 15 00320002 * 00321002 *01* ENTRY-POINT = RMBRANCH 00322002 * 00323002 *02* PURPOSE = REGISTER TYPE, UNCONDITIONAL GETMAIN OR FREEMAIN, 00324002 * BRANCH ENTRY 00325002 * 00326002 *02* LINKAGE = CALLED BY R FORM OF GETMAIN OR FREEMAIN MACRO 00327002 * WITH BRANCH OPTION SPECIFIED 00328002 * 00329002 *02* INPUT = 00330002 * REG 0 SUBPOOL ID IN BYTE 0, NUMBER OF BYTES REQUESTED IN 00331002 * BYTES 1 TO 3; FOR A SUBPOOL FREEMAIN BYTES 1 TO 3 00332002 * MUST BE 0 00333002 * REG 1 ANY NEGATIVE VALUE IF REQUEST IS FOR A GETMAIN, 00334002 * ADDRESS TO BE FREED IF REQUEST IS FOR A FREEMAIN; 00335002 * FOR A SUBPOOL FREEMAIN MUST BE 0 00336002 * REG 4 ADDRESS OF THE TCB UNDER WHICH STORAGE IS TO BE 00337002 * ALLOCATED 00338002 * REG 7 ADDRESS OF ASCB 00339002 * REG 14 RETURN ADDRESS 00340002 * 00341002 *02* OUTPUT = FOR A GETMAIN, REGISTER 1 CONTAINS THE ADDRESS OF 00342002 * THE STORAGE ALLOCATED; FOR A FREEMAIN, NONE 00343002 * 00344002 *02* REGISTERS-SAVED = ALL REGISTERS EXCEPT 7 00345003 * 00346002 *02* REGISTERS-RESTORED = ALL REGISTERS EXCEPT 1, 7 AND 15 IF 00347003 * GETMAIN AND ALL REGISTERS EXCEPT 7 AND 15 IF FREEMAIN 00347503 * 00349002 *01* ENTRY-POINT = QCBRANCH 00350002 * 00351002 *02* PURPOSE = IDENTICAL TO RMBRANCH, RETAINED FOR COMPATIBILITY 00352002 * WITH OS/VS2 RELEASE 1 QUICKCELLS 00353002 * 00354002 *01* ENTRY-POINT = CRBRANCH 00355002 * 00356002 *02* PURPOSE = REGISTER TYPE GETMAIN OR FREEMAIN, BRANCH ENTRY 00357002 * 00358002 *02* LINKAGE = CALLED BY RC OR RU FORMS OF GETMAIN OR FREEMAIN 00359002 * MACRO WITH BRANCH OPTION SPECIFIED 00360002 * 00361002 *02* INPUT = 00362002 * REG 0 NUMBER OF BYTES REQUESTED; FOR A SUBPOOL FREEMAIN 00363002 * MUST BE 0 00364002 * REG 1 ZERO FOR A GETMAIN, ADDRESS TO BE FREED FOR A 00365002 * FREEMAIN; FOR A SUBPOOL FREEMAIN MUST BE 0 00366002 * REG 3 BYTE 0 RESERVED, SET TO 0 00367002 * BYTE 1 PROTECT KEY FOR SP 227-231 AND 241 00368003 * BYTE 2 SUBPOOL ID 00368202 * BYTE 3 FLAGS AS FOLLOWS: 00369002 * BITS 0-4 RESERVED, SET TO 0 00370002 * BIT 5 = 0 DOUBLEWORD BOUNDARY 00371002 * = 1 PAGE BOUNDARY 00372002 * BIT 6 = 0 CONDITIONAL REQUEST 00373002 * = 1 UNCONDITIONAL REQUEST 00374002 * BIT 7 = 0 GETMAIN 00375002 * = 1 FREEMAIN 00376002 * REG 4 ADDRESS OF TCB UNDER WHICH STORAGE IS TO BE 00377002 * ALLOCATED 00378002 * REG 7 ADDRESS OF ASCB 00379002 * REG 14 RETURN ADDRESS 00380002 * 00381002 *02* OUTPUT = FOR A GETMAIN, REGISTER 1 CONTAINS THE ADDRESS OF 00382002 * THE STORAGE ALLOCATED; FOR A FREEMAIN, NONE 00383002 * 00384002 *02* REGISTERS-SAVED = ALL REGISTERS EXCEPT 7 00385003 * 00386002 *02* REGISTERS-RESTORED = ALL REGISTERS EXCEPT 1, 7 AND 15 IF 00387003 * GETMAIN AND ALL REGISTERS EXCEPT 7 AND 15 IF FREEMAIN 00387503 * 00389002 *01* ENTRY-POINT = GLBRANCH 00390002 * 00391002 *02* PURPOSE = REGISTER TYPE GETMAIN OR FREEMAIN FOR GLOBAL 00392002 * SUBPOOLS WITHOUT LOCAL MEMORY LOCK (SALLOC LOCK REQUIRED), 00393002 * BRANCH ENTRY 00394002 * 00395002 *02* LINKAGE = CALLED BY RC OR RU FORMS OF GETMAIN OR FREEMAIN 00396002 * MACRO WITH BRANCH AND GLOBAL OPTIONS SPECIFIED 00397002 * 00398002 *02* INPUT = 00399002 * REG 0 NUMBER OF BYTES REQUESTED 00400002 * REG 1 ZERO FOR A GETMAIN, ADDRESS TO BE FREED FOR A 00401002 * FREEMAIN 00402002 * REG 3 BYTE 0 RESERVED, SET TO 0 00403002 * BYTE 1 PROTECT KEY FOR SUBPOOLS 231 AND 241 00404002 * BYTE 2 SUBPOOL ID 00404202 * BYTE 3 FLAGS AS FOLLOWS: 00405002 * BITS 0-4 RESERVED, SET TO 0 00406002 * BIT 5 = 0 DOUBLEWORD BOUNDARY 00407002 * = 1 PAGE BOUNDARY 00408002 * BIT 6 = 0 CONDITIONAL REQUEST 00409002 * = 1 UNCONDITIONAL REQUEST 00410002 * BIT 7 = 0 GETMAIN 00411002 * = 1 FREEMAIN 00412002 * REG 4 ADDRESS OF GLOBAL SAVE AREA 00413002 * REG 14 RETURN ADDRESS 00414002 * 00415002 *02* OUTPUT = FOR A GETMAIN, REGISTER 1 CONTAINS THE ADDRESS OF 00416002 * THE STORAGE ALLOCATED; FOR A FREEMAIN, NONE 00417002 * 00418002 *02* REGISTERS-SAVED = ALL REGISTERS 00419002 * 00420002 *02* REGISTERS-RESTORED = ALL REGISTERS EXCEPT 1 AND 15 IF GETMAIN 00421002 * AND ALL REGISTERS EXCEPT 15 IF FREEMAIN 00421202 * 00422002 *01* ENTRY-POINT = CBBRANCH 00423003 * 00424002 *02* PURPOSE = SPECIAL ENTRY TO THE INTERNAL GETMAIN (GETMAINC) 00425003 * OR FREEMAIN (FMAINC) ROUTINES TO GET OR FREE A CELL FOR 00426003 * A VSM CONTROL BLOCK. 00427003 * 00427503 *02* LINKAGE = CALLED VIA A BRANCH ENTRY WITH LOCAL LOCK HELD 00428003 * 00430002 *02* INPUT = 00431002 * REG 0 SPID IN BYTE 0 FOR GETMAIN REQUEST 00432003 * REG 1 NEGATIVE FOR GETMAIN 00434003 * POSITIVE FOR FREEMAIN, ADDRESS OF CELL TO BE FREED 00435003 * REG 7 ASCB ADDRESS 00436003 * REG 14 RETURN ADDRESS 00437002 * REG 15 ENTRY ADDRESS (CBBRANCH) 00438203 * 00439202 * LENGTH IS IMPLIED (EQUAL TO VSM CB LENGTH - 16 BYTES). 00439403 * CELL IS ZEROED BY GETMAIN BEFORE RETURNING TO CALLER. 00439503 * 00439603 *02* OUTPUT = ADDRESS OF CELL ALLOCATED IN REGISTER 1 00439903 * 00440002 *02* REGISTERS-SAVED = 2-6, 8-14, (7 IS DESTROYED) 00441003 * 00442002 *02* REGISTERS-RESTORED = ALL REGISTERS EXCEPT 0, 1, 7 AND 15 00443003 * 00445002 *01* ENTRY-POINT = GETMAING 00445203 * 00445403 *02* PURPOSE = SPECIAL ENTRY TO THE INTERNAL GETMAIN ROUTINE 00445603 * (GETMAINB) TO GET SPACE IN SQA OR LSQA FOR A CONTROL BLOCK 00446003 * 00457003 * LINKAGE = CALLED BY GETPART (MODULE IEAVPRT0) VIA BRANCH 00462003 * ENTRY, WITH LOCAL MEMORY LOCK HELD 00467003 * 00467103 *02* INPUT = 00469203 * REG 1 SUBPOOL ID IN BYTE ZERO AND LENGTH OF REQUEST 00469403 * IN BYTES 1 TO 3 00471003 * REG 4 LDA ADDRESS 00472003 * REG 8 FIRST BASE REGISTER 00473003 * REG 13 SECOND BASE REGISTER 00474003 * REG 14 RETURN ADDRESS 00475003 * REG 15 ENTRY ADDRESS (GETMAING) 00476003 * 00477003 *02* OUTPUT = ADDRESS OF ALLOCATED STORAGE IN REGISTER 1 00479003 * 00480003 *02* REGISTERS SAVED = ALL REGISTERS 00481003 * 00482003 *02* REGISTERS RESTORED = ALL REGISTERS EXCEPT REGISTER 1 00483003 * 00484003 *01* ENTRY-POINT = MRELEASF 00485003 * 00486003 *02* PURPOSE = SPECIAL ENTRY TO THE INTERNAL ROUTINE THAT 00487003 * RETURNS FREED STORAGE TO AN FBQE (MRELEASE), TO RETURN V=R 00489003 * REGION SPACE TO SYSTEM V=R PQE AND ADDRESS SPACE PQE 00510003 * 00511003 *02* LINKAGE = CALLED BY FREEPART (MODULE IEAVPRT0) VIA A BRANCH 00521003 * ENTRY, WITH LOCAL MEMORY LOCK HELD 00532003 * 00542003 *02* INPUT = 00563003 * REG 4 LDA ADDRESS 00564003 * REG 6 SIZE OF AREA TO BE RETURNED TO AN FBQE 00584203 * REG 7 ADDRESS OF PQE THAT STORAGE WAS OBTAINED FROM 00585003 * REG 8 FIRST BASE REGISTER 00595003 * 00610603 * REG 9 ADDRESS OF AREA BEING RETURNED TO AN FBQE 00616003 * REG 13 SECOND BASE REGISTER 00617003 * REG 14 RETURN ADDRESS 00627003 * REG 15 ENTRY ADDRESS (MRELEASF) 00638003 * 00648003 * IN ADDITION THE SUBPOOL ID WHICH IS TO BE USED IN OBTAINING 00669003 * AN FBQE MUST BE PRE-STORED IN THE FIELD LDACBSP IN THE LDA 00670003 * 00680003 *02* OUTPUT = NONE 00691003 * 00701003 *02* REGISTERS-SAVED = REGISTERS 2 TO 15 00722003 * 00723003 *02* REGISTERS-RESTORED = REGISTERS 2 TO 15 00733003 * 00743003 *01* ENTRY-POINT = MRELEASR 00753003 * 00763003 *02* PURPOSE = SPECIAL ENTRY TO THE INTERNAL ROUTINE THAT 00773003 * RETURNS FREED STORAGE TO AN FBQE (MRELEASE), TO RETURN ONE 00783003 * PAGE OF REGION OR CSA SPACE THAT WAS PREVIOUSLY IN DEFERRED 00793003 * RELEASE STATUS 00803003 * 00813003 *02* LINKAGE = CALLED BY THE RSM PAGE RELEASE ROUTINE (MODULE 00823003 * IEAVRELS) VIA A BRANCH ENTRY WITH THE SALLOC LOCK HELD. IN 00833003 * ADDITION THE LOCAL MEMORY LOCK WILL BE HELD ON ENTRIES TO 00843003 * RELEASE LOCAL STORAGE. 00853003 * 00863003 *02* INPUT = 00873003 * REG 0 = 0 FOR LOCAL STORAGE; LDA WILL BE USED FOR THE 00883003 * WORK AREA 00893003 * = 1 FOR GLOBAL STORAGE; GLOBAL SAVE AREA WILL BE 00903003 * USED FOR THE WORK AREA 00913003 * REG 1 VIRTUAL ADDRESS OF THE PAGE TO BE RETURNED TO AN 00923003 * FBQE 00933003 * REG 14 RETURN ADDRESS 00943003 * REG 15 ENTRY ADDRESS (MRELEASR) 00953003 * 00963003 *02* OUTPUT = NONE 00973003 * 00983003 *02* REGISTERS-SAVED = REGISTERS 0 TO 14 00993003 * 01003003 *02* REGISTERS-RESTORED = REGISTERS 0 TO 14 01013003 * 01023003 *01* EXIT-NORMAL = NO NAME 01033003 * 01043003 *02* CONDITIONS = SUCCESSFUL GETMAIN OR FREEMAIN, RETURN TO ADDRESS 01053003 * IN REGISTER 14 01063003 * 01073003 *02* OUTPUT = ADDRESS OF STORAGE OBTAINED FOR A GETMAIN REQUEST IN 01083003 * THE PARAMETER LIST FOR A STORAGE TYPE REQUEST OR IN REGISTER 1 01093003 * FOR A REGISTER TYPE REQUEST. 01103003 * 01113003 *02* RETURN-CODES = REGISTER 15 WILL HAVE A RETURN CODE OF 0 01123003 * INDICATING SUCCESSFUL COMPLETION OF REQUEST 01133003 * 01143003 *01* EXIT-ERROR = NO NAME 01153003 * 01163003 *02* CONDITIONS = UNSUCCESSFUL CONDITIONAL GETMAIN OR FREEMAIN, 01173003 * RETURN TO ADDRESS IN REGISTER 14 01183003 * 01193003 *02* OUTPUT = NONE 01203003 * 01213003 *02* RETURN-CODES = REGISTER 15 WILL HAVE A RETURN CODE OF 4 IN ALL 01223003 * CASES EXCEPT THE FOLLOWING: 01233003 * 01243003 * ON A GETMAIN FOR SQA OR LSQA IF A REAL PAGE IS NOT AVAILABLE 01253003 * A RETURN CODE OF 8 WILL BE GIVEN. 01263003 * 01273003 * ON A FREEMAIN OF A LOCAL STORAGE PAGE THAT IS STILL FIXED, 01283003 * IF THE TCBEOTFM FLAG IS ON A RETURN CODE OF 8 WILL BE GIVEN. 01293003 * 01303003 *01* EXIT-ERROR = ABEND 01313003 * 01323003 *02* CONDITIONS = UNSUCCESSFUL UNCONDITIONAL GETMAIN OR FREEMAIN OR 01333003 * A PARAMETER ERROR FOR A CONDITIONAL GETMAIN OR FREEMAIN. ABEND 01343003 * MACRO IS EXECUTED. 01353003 * 01363003 *02* OUTPUT = NONE 01373003 * 01383003 *02* RETURN-CODES = NONE 01393003 * 01403003 *01* EXTERNAL-REFERENCES: 01413003 * 01423003 *02* ROUTINES = 01433003 * 01443003 * ABEND ABNORMAL TERMINATION, MACRO USED 01453003 * IEAVCSEG CREATE SEGMENT, BRANCH ENTRY 01463003 * IEAVFP1 FIND PAGE, BRANCH ENTRY 01473003 * IEAVPRT0 GETPART/FREEPART, BRANCH ENTRY 01483003 * IEAVRELV RELEASE PAGE, BRANCH ENTRY 01493003 * IEAVSQA OBTAIN FIXED PAGE FOR L/SQA, BRANCH ENTRY 01503003 * IEA0VL00 VALIDITY CHECK ROUTINE, BRANCH ENTRY 01513003 * IEA0VL01 VALIDITY CHECK ROUTINE, BRANCH ENTRY 01523003 * IGFPTERM SYSTEM TERMINATION ROUTINE, BRANCH ENTRY 01533003 * SETFRR SET FUNCTIONAL RECOVERY ROUTINE, MACRO USED 01543003 * SETLOCK OBTAIN AND RELEASE LOCKS, MACRO USED 01553003 * SYSEVENT INFORM SRM OF SQA AVAILABILITY, MACRO USED 01563003 * TESTAUTH CHECK CALLER AUTHORIZATION, MACRO USED 01573003 * 01583003 *02* DATA-AREAS = 01593003 * 01603003 * GLOBAL DATA AREA (GDA) CONTAINS GLOBAL STORAGE POINTERS. 01613003 * 01623003 * LOCAL DATA AREA (LDA) CONTAINS LOCAL STORAGE POINTERS AND 01633003 * IS USED AS WORK AREA SO THAT THIS ROUTINE IS REFRESHABLE. 01643003 * 01653003 * GETMAIN/FREEMAIN GLOBAL SAVE AREA USED IN PLACE OF LDA AS A 01663003 * WORK AREA ON CERTAIN GLOBAL STORAGE REQUESTS. 01673003 * 01683003 * FRR PARAMETER AREA (6 WORDS) USED FOR COMMUNICATION WITH FRR. 01693003 * 01703003 *02* CONTROL-BLOCKS = 01713003 * 01723003 * CVT (R) 01733003 * IEFTCT (W) 01743003 * IHAAQE (C) (D) 01753003 * IHAASCB (R) 01763003 * IHADQE (C) (D) 01773003 * IHAFBQE (C) (D) 01783003 * IHAFQE (C) (D) 01793003 * IHAFRRS (R) 01803003 * IHAGDA (W) 01813003 * IHAINF (W) 01823003 * IHALDA (W) 01833003 * IHAPGTE (W) 01843003 * IHAPQE (W) 01853003 * IHAPSA (R) 01863003 * IHAPVT (W) 01873003 * IHARB (R) 01883003 * IHARVT (R) 01893003 * IHASPQE (C) 01903003 * IHAWSAVT (R) 01913003 * IHAXPTE (W) 01923003 * IKJTCB (W) 01933003 * 01943003 *01* TABLES = AT LABEL RCTABLE IS A RETURN CODE VERSUS ERROR CODE 01953003 * TABLE FOR CONVERTING ANY ERROR CODE TO THE APPROPRIATE RETURN 01963003 * CODE 01973003 * 01983003 *01* MACROS = 01993003 * 02003003 * ABEND 02013003 * MODID 02023003 * SETFRR 02033003 * SETLOCK 02043003 * SYSEVENT 02053003 * TESTAUTH 02063003 * WTO 02073003 * 02083003 *02* SERIALIZATION = THE SALLOC LOCK IS SOMETIMES OBTAINED AND 02093003 * RELEASED BY THIS MODULE 02103003 * 02113003 *01* CHANGE-ACTIVITY = SIGNIFICANT CHANGES TO THIS MODULE (ANY CHANGE 02123003 * OTHER THAN A COMMENT) OVER THE OS/VS2 RELEASE 1 VERSION ARE 02133003 * FLAGGED WITH THE FOLLOWING S/D CODES Y02711, Y02714, Y02751, 02143003 * Y02753 02153003 * 02163003 * APARS = OZ00829 (2) 456772-456776, 456816-456836 02163540 * OZ05196 (2) 327241 02164040 * OZ02359 (2) 218055-218073 02164840 * OZ03280 (3) 496520 02166440 * OZ04815 (2) 355552-355576 02168140 * OZ05954 (2) 196641 02168340 * OZ08170 (3) 516500, 517000, 517704, 5178400-517960 02168540 * 518420-518600, 523040-523046, 523049 02169040 * 523052-523091 02169840 * OZ09199 (2) 167742-167762 02170640 * OZ10820 (4) 517620 02171040 * OZ11822 (3) 237440-237560, 492646-492663, 02171140 * 492912-492918, 700297 02171240 * OZ14231 (3) 317100 02171340 * OZ16417 (3) 471586-471587, 473710-473730 02171540 * OZ17759 (3) 287400, 288200-288340 02171840 * OZ17804 (3) 161960-163460 02172040 * OZ20641 (3) 02172140 * OZ20951 (3) 02172240 * OZ27672 (3) 02172340 * OZ29442 (3) 02172440 * OZ29616 (3) 02172540 * OZ30210 (3) 02172640 * OZ27466 (3) 02172740 * 02172840 *01* MESSAGES = IEA946W, ISSUED JUST BEFORE TERMINATING SYSTEM WHEN 02173003 * THERE IS NO VIRTUAL OR REAL STORAGE AVAILABLE FOR SQA 02183003 * 02193003 *01* ABEND-CODES = 02203003 * 02213003 * ABEND CODE REASON RETURN DESCRIPTION 02223003 * CODE CODE * 02233003 * 02243003 * 104, 10A, 178 NONE 8 CANNOT OBTAIN REAL PAGE OF 02253003 * STORAGE FOR SQA OR LSQA 02263003 * 305, 30A, 378 1 4 STORAGE NOT IN SPECIFIED SUBPOOL 02273003 * (NO DQE FOUND FOR SPECIFIED 02283003 * STORAGE AREA) 02293003 * 2 4 SPECIFIED SUBPOOL COULD NOT BE 02303003 * FOUND 02313003 * 4 NONE ZERO LENGTH NOT SPECIFIED FOR 02323003 * SUBPOOL FREEMAIN 02333003 * 40A, 478 0 NONE SUBPOOL FREEMAIN FOR SQA, CSA, 02343003 * SUBPOOLS 254 OR 255, OR INVALID 02353003 * SUBPOOL; OR PROBLEM PROGRAM 02363003 * FREEING SUBPOOL 0 02373003 * 504, 505 0 NONE LENGTH AND ADDRESS LISTS OVERLAP 02383003 * 604, 605 1 NONE PARAMETER LIST NOT IN PROBLEM 02393003 * PROGRAM AREA, NOT ON WORD 02403003 * BOUNDARY, OR LIST ADDRESS NOT 02413003 * VALID @ 02423003 * 804, 80A, 878 1 4 NOT ENOUGH VIRTUAL STORAGE 02433003 * 2 NONE NEGATIVE LENGTH FOR GETMAIN 02443003 * 905, 90A, 978 0 NONE ADDRESS NOT MULTIPLE OF 8 02453003 * A05, A0A, A78 1 4 AREA BEING FREED OVERLAPS A 02463003 * FREE AREA 02473003 * 2 8 # PART OF AREA BEING FREED IS 02483003 * STILL FIXED 02493003 * B04, B05, B0A, 0 NONE PROBLEM PROGRAM REQUESTS SUB- 02503003 * B78 POOL 128 TO 255 OR AUTHORIZED 02513003 * PROGRAM REQUESTS INVALID 02523003 * SUBPOOL 02533003 * D05, D0A, D78 0 4 NO AQE WHEN THERE SHOULD BE 02543003 * ONE (LSQA NOT OWNED BY 02553003 * REQUESTING TASK) 02563003 * 02573003 * * RETURN CODE FOR CONDITIONAL REQUESTS. THE ENTRY 02583003 * "NONE" MEANS THE REQUEST WILL BE ABENDED EVEN OF IT 02593003 * IS CONDITIONAL. 02603003 * @ FOR A REQUEST IN KEY 0-7 OR FOR A BRANCH ENTRY THESE 02613040 * CHECKS ARE BYPASSED. 02623003 * # FOR A CONDITIONAL REQUEST WITH "TCBEOTFM" BIT IN 02633003 * TCB, OR LDAFPFM BIT IN LDA, SET TO 1, THIS ERROR 02634040 * WILL GIVE A RETURN CODE OF 8. OTHERWISE IT WILL 02635040 * BE ABENDED. 02637040 * 02663003 *01* MESSAGE-SYMBOL = STRWTO FOR MESSAGE IEA946W 02673003 * 02683003 EJECT 02693003 * INPUT PARAMETER LIST 02703003 * 02713003 * 02723003 * TO GETMAIN (SVC 4) 02733003 * 02743003 * REGISTER 1 = ADDRESS OF A PARAMETER LIST 02753003 * 02763003 * 02773003 * TO FREEMAIN (SVC 5) 02783003 * 02793003 * REGISTER 1 = ADDRESS OF A PARAMETER LIST 02803003 * 02813003 * 02823003 * PARAMETER LIST FORMAT 02833003 * 02843003 * ******************************************** 02853003 * * LENGTH REQUESTED IF SINGLE AREA REQUEST * 02863003 * * OR ADDRESS OF A LIST OF LENGTHS * 02873003 * ******************************************** 02883003 * * ADDRESS OF A LIST IN WHICH THE ADDRESSES * 02893003 * * OF ALLOCATED AREAS IS TO BE RETURNED * 02903003 * ******************************************** 02913003 * * CODE * SUBPOOL * 02923003 * * * ID * 02933003 * *********************** 02943003 * 02953003 * CODE VALUES 02963003 * X'00' - UNCONDITIONAL SINGLE ELEMENT REQUEST 02973003 * X'20' - CONDITIONAL '' '' '' 02983003 * X'C0' - UNCONDITIONAL VARIABLE REQUEST 02993003 * X'E0' - CONDITIONAL '' '' 03003003 * X'80' - UNCONDITIONAL LIST REQUEST 03013003 * X'A0' - CONDITIONAL '' '' 03023003 * X'10' - PAGE BOUNDARY REQUEST (THIS MAY BE IN 03033003 * ADDITION TO THOSE ABOVE) 03043003 EJECT 03053003 * LIST FORMATS 03063003 * 03073003 * SINGLE ELEMENT REQUEST 03083003 * 03093003 * AREA LIST 03103003 * ******************************************** 03113003 * * * ADDRESS OF AREA ALLOCATED * 03123003 * ******************************************** 03133003 * 03143003 * VARIABLE REQUEST 03153003 * 03163003 * LENGTH LIST 03173003 * ******************************************** 03183003 * * 0 * MINIMUM LENGTH REQUESTED * 03193003 * ******************************************** 03203003 * * 0 * MAXIMUM LENGTH REQUESTED * 03213003 * ******************************************** 03223003 * 03233003 * AREA LIST 03243003 * ******************************************** 03253003 * * * ADDRESS OF AREA ALLOCATED * 03263003 * ******************************************** 03273003 * * * ACTUAL LENGTH ALLOCATED * 03283003 * ******************************************** 03293003 * 03303003 * LIST REQUEST 03313003 * 03323003 * LENGTH LIST 03333003 * ******************************************** 03343003 * * SIGN = 0 * FIRST LENGTH REQUESTED * 03353003 * ******************************************** 03363003 * * SIGN = 0 * SECOND LENGTH REQUESTED * 03373003 * ******************************************** 03383003 * / / 03393003 * ******************************************** 03403003 * * SIGN = 1 * LAST LENGTH REQUESTED * 03413003 * ******************************************** 03423003 * 03433003 * AREA LIST 03443003 * ******************************************** 03453003 * * * ADDR OF AREA FOR FIRST LENGTH * 03463003 * ******************************************** 03473003 * * * ADDR OF AREA FOR SECOND LENGTH* 03483003 * ******************************************** 03493003 * / / 03503003 * ******************************************** 03513003 * * * ADDR OF AREA FOR LAST LENGTH * 03523003 * ******************************************** 03533003 * 03543003 **** END OF SPECIFICATIONS ***/ 03553003 EJECT Y02714 03743002 IEAVGM00 CSECT 15582002 ENTRY IGC004 15583002 ENTRY IGC005 15584002 ENTRY IGC010 15585002 ENTRY IGC120 Y02714 15586002 ENTRY GMBRANCH 15587002 ENTRY FMBRANCH 15588002 ENTRY RMBRANCH 15589002 ENTRY CRBRANCH Y02714 15589202 ENTRY GLBRANCH Y02714 15589402 ENTRY MRELEASF Y02714 15589602 ENTRY MRELEASR Y02714 15589802 ENTRY CBBRANCH @Z30ENWD 15589903 ENTRY QCBRANCH 15590602 ENTRY GETMAING Y02714 15590703 ENTRY PLISTERR @ZA20641 15590840 EJECT 15590940 *********************************************************************** 15591302 * 15592002 * GETMAIN/FREEMAIN ENTRY POINT 15600002 * 15620001 * 15640001 * ENTRY POINT FOR SVC 4 & 5 15650002 * 15660001 * THIS ROUTINE CHECKS THE PARAMETER LIST AND ALL ENTRIES 15700001 * POINTED TO BY THE PARAMETER LIST TO INSURE THAT THEY 15705040 * ARE ON WORD BOUNDARIES, AND THAT ALL ENTRIES ARE ON 15710040 * GETMAIN ASSIGNED PAGES. ADDITIONALLY, THE ADDRESS LIST 15720040 * IS CHECKED TO INSURE THAT IT IS IN THE USER'S STORAGE 15730040 * KEY. THE PARAMETER AND LENGTH LISTS ARE NOT CHECKED 15740040 * FOR STORAGE KEY SINCE THEY ARE READ ONLY TO IEAVGM00. 15750040 * NO VALIDITY CHECKING IS PERFORMED FOR INTERFACES 15760040 * SUPPLIED BY KEY 0-7 CALLERS. @ZA20641 15770040 * 15800001 * NOTE: AN ENTRY ON A PAGE THAT IS NOT GETMAIN ASSIGNED WILL 15801040 * CAUSE A PROGRAM INTERRUPT CODE X'10' OR X'11' TO 15802040 * OCCUR WHEN THAT ENTRY IS REFERENCED. MODULE IEAVGFRR 15803040 * WILL GET CONTROL IN SUCH CASES AND WILL RETRY BACK 15804040 * INTO IEAVGM00 AT LABEL PLISTERR TO COMPLETE PROCESSING 15805040 * FOR THE ERROR CONDITION. @ZA20641 15806040 * 15807040 *********************************************************************** 15810002 SPACE 2 Y02714 15822002 MODID BR=NO Y02714 15824002 SPACE 2 Y02714 15826002 USING PSA,0 ADDRESSABILITY FOR LOW STOR. Y02714 15828002 USING TCB,RTCB1 Y02714 15830002 SPACE 2 15840001 IGC005 DS 0H IGC004 AND IGC005 HAVE SAME ENTRY POINT Y02714 15850002 IGC004 BALR RBASE1,0 SET UP BASE REGISTER Y02714 15860002 USING *,RBASE1 ESTABLISH PRELIMINARY BASE Y02714 15900002 USING ASCB,RASCB Y02714 15939402 GMBASE L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 15939502 USING LDA,RASCB Y02714 15939602 ST RTCB,LDATCB SAVE TCB POINTER Y02714 15939702 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 15939802 DROP RASCB Y02714 15948002 USING LDA,RLDA Y02714 15952002 ST RRETURN,RETSAVE SAVE RETURN ADDRESS 15962002 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 15963002 LR SAVEPARM,RIN1 SAVE PARAMETER PTR 15988802 ST RIN1,SAVEREG1 SAVE FOR RESTORE ON EXIT Y02714 15990802 LA RRBPRXLN,RBPRFLNA GET PREFIX LENGTH Y02714 15998802 SR RRB,RRBPRXLN GET BASE FOR RB INCLUDING PREFIX 15998902 USING RBPRFXST,RRB SET ADDRESSABILITY TO RB PREFIX 15999002 SR RFLAGWD,RFLAGWD CLEAR REGISTER Y02714 15999202 ICM RFLAGWD,M2,RBINTCOD+C1 GET SVC TYPE Y02714 16009602 IC RFLAGWD,RBOPSW+C1 GET KEY Y02714 16020002 DROP RRB Y02714 16030002 SR INDEX,INDEX CLEAR INDEX REGISTER 16160001 LA RIN0,KEY0 GET KEY 0 MASK 16190001 NR RIN0,RFLAGWD KEY FOR VALIDITY CHECK BYPASS Y02714 16192002 STC RIN0,RQSTRKEY SAVE KEY Y02714 16194002 MVC CODE1,CODE(RIN1) SAVE OPTION CODE @ZA20641 16196040 TM RQSTRKEY,CX80 KEY 0-7 ? @ZA20641 16206040 BZ AUTHUSER YES, SKIP VALIDITY CHECKS @ZA20641 16216040 OI PARMFLG1(R2),PARMVLCK VALIDITY CK BEING DONE @ZA20641 16226040 BAL RVALRET,CHECKWB CHECK BOUNDARY ALIGNMENT @ZA20641 16276040 LM RLENGTH,RADDR,C0(SAVEPARM) GET LENGTH AND ADDRESS PTRS 16316040 LR RIN1,RADDR GET ADDRESS OF 1ST ADDR ENTRY 16336040 L RVALBASE,VALIDCK1 GET IEA0VL01 ENTRY ADDRESS @ZA20641 16356040 BAL RVALRET,CHEKEY1 CK KEY/WB OF 1ST ADDR ENTRY @ZA20641 16376040 TM C8(SAVEPARM),LISTVAR ELEMENT REQUEST? @ZA20641 16396040 BZ ENDCHECK YES, PREPARE TO EXIT @ZA20641 16416040 LR RIN1,RLENGTH GET LENGTH LIST START ADDR @ZA20641 16436040 BO VARIABLE NO, VARIABLE REQUEST @ZA20641 16456040 BAL RVALRET,CHECKWB CHECK BOUNDARY ALIGNMENT @ZA20641 16476040 LR PARMREG,RLENGTH GET LENGTH LIST START ADDR @ZA20641 16496040 CHECK5 TM C0(PARMREG),CX80 IS THIS THE LAST ENTRY? Y02714 16516040 BO LISTEND YES, SAVE ITS ADDRESS @ZA20641 16536040 LA INDEX,C4(INDEX) INCREMENT INDEX @ZA20641 16556040 LA PARMREG,C0(INDEX,RLENGTH) GET LENGTH ENTRY ADDR @ZA20641 16606040 LA RIN1,C0(INDEX,RADDR) GET ADDRESS ENTRY ADDRESS 16616040 L RVALBASE,VALIDCK0 GET IEA0VL00 ENTRY ADDRESS @ZA20641 16626040 BAL RVALRET,CHEKEY1 CK KEY OF NTH ADDRESS ENTRY @ZA20641 16636040 B CHECK5 GO CHECK FOR END OF LIST @ZA20641 16752640 SPACE 2 16753240 VARIABLE LA RIN15,SV5 SVC 5 COMPARISON VALUE Y02714 16755640 LR SVTYPE,RFLAGWD GET FLAGWORD Y02714 16756240 SRL SVTYPE,C8 ISOLATE SVC TYPE Y02714 16756840 CR SVTYPE,RIN15 SVC 5 (FREEMAIN) ? 16757440 BE OUTLNTH YES, SKIP LENGTH LIST CHECK @ZA20641 16758040 BAL RVALRET,CHECKWB CHECK BOUNDARY ALIGNMENT @ZA20641 16758840 LM RMIN,RMAX,C0(RIN1) REFERENCE LENGTH LIST @ZA20641 16759640 OUTLNTH LA RIN1,C4(RADDR) GET OUTPUT LENGTH ENTRY @ZA20641 16760440 L RVALBASE,VALIDCK0 GET IEA0VL00 ENTRY ADDRESS @ZA20641 16761240 BAL RVALRET,CHEKEY1 CK KEY OF OUTPUT LNTH ENTRY @ZA20641 16762040 B ENDCHECK PREPARE TO EXIT @ZA20641 16762840 SPACE 2 16764840 AUTHUSER SR RWORK,RWORK CALCULATE @ZA20641 16765840 BCTR RWORK,C0 THE LARGEST @ZA20641 16766040 SRL RWORK,C1 POSITIVE NUMBER @ZA20641 16766240 ST RWORK,LASTLSTA END OF LIST FOR AUTH USERS @ZA20641 16766440 B CHECKTYP PREPARE TO EXIT @ZA20641 16766840 SPACE 2 16767840 CHECKWB LA RWORK,FWBMASK FULL WORD BOUNDARY MASK @ZA20641 16787040 NR RWORK,RIN1 ADDR ON FULL WORD BOUNDARY? @ZA20641 16787140 BZR RVALRET YES, RETURN @ZA20641 16787840 B PLISTERR NO, PARAMETER ERROR @ZA09199 16787940 SPACE 2 16788040 LISTEND ST PARMREG,LASTLSTA SAVE ADDR LAST LIST ENTRY @ZA20641 16788140 SR RLENGTH,RADDR GET NUMBER OF BYTES BETWEEN @ZA20641 16788240 BNM CKOVLAP1 STARTING ADDRESSES 16788302 LCR RLENGTH,RLENGTH OF LISTS 16789602 CKOVLAP1 LA INDEX,C4(INDEX) INCREMENT INDEX 16790902 SR RLENGTH,INDEX DO LISTS OVERLAP? 16792202 LA RERROR,ERR5 SET UP ERROR CODE @Z30ENWD 16793503 MVI MSGLEN,C4 REASON CODE 0 - LENGTH 4 16794802 BM LSTOVLAP YES 16796102 SPACE 2 16797402 ENDCHECK L R2,FRRPARM GET ADDR OF FRR PARM AREA @ZA20641 16800040 NI PARMFLG1(R2),ALL-PARMVLCK VALIDITY CK FINISHED @ZA20641 16800340 CHECKTYP LM RLENGTH,RADDR,C0(SAVEPARM) LENGTH AND ADDR PTRS @ZA20641 16800640 LR RIN1,SAVEPARM RESTORE PARAMETER POINTER 16801302 SR RSPID,RSPID INITIALIZE SPID REG 16811302 IC RSPID,SPIDISP(RIN1) GET SPID 16821302 ST RFLAGWD,LDARQSTA SAVE STATUS FLAGWORD Y02714 16831302 L RBASE2,ABASE2 GET SECOND BASE Y02714 16841302 L RBASE1,ABASE1 GET FIRST BASE Y02714 16847702 USING BASE1,RBASE1 Y02714 16848102 CLI SVCBYTE,SV5 SVC 5? Y02714 16849302 BE FMCOMMON YES - FREEMAIN Y02714 16849702 B GMCOMMON NO - GETMAIN 16850102 SPACE 2 16850502 CHEKEY1 SR R2,R2 VALIDITY CK RTN NEEDS R2 = 0 Y02714 16861902 LR RWORK,RLDA SAVE LDA POINTER Y02714 16862302 L RTCB,LDATCB GET TCB ADDRESS Y02714 16866202 BALR RRETURN,RVALBASE ENTER VALIDITY CHECK ROUTINE Y02714 16868202 LR RLDA,RWORK RESTORE LDA POINTER Y02714 16868602 BZR RVALRET VALID PARAMETER, RETURN Y02714 16869002 * INVALID PARAMETER, ERROR Y02714 16869402 SPACE 2 16877902 PLISTERR LA RERROR,ERR6 SET UP ERROR ADDRESS @Z30ENWD 16884940 MVI MSGLEN,H24 REASON CODE 1 - MSGLEN OF 4 16893602 LSTOVLAP LR RLENGTH,SAVEPARM GET PARAMETER LIST POINTER 16894102 SR RSPID,RSPID ZERO SUBPOOL ID SO THAT WHEN STC IS 16894302 * DONE,ONLY PARAMETER LIST POINTER 16896802 * WILL BE GIVEN AS INFO 16899302 ST RFLAGWD,LDARQSTA SAVE FLAGWORD Y02714 16904302 USING GMBASE,RBASE1 @ZA20641 16905340 L RBASE2,ABASE2 GET SECOND BASE Y02714 16906802 L RBASE1,ABASE1 GET FIRST BASE Y02714 16909302 USING BASE1,RBASE1 @Z30ENYF 16910303 B GERROR GO TO ERROR ROUTINE @Z30ENWD 16911803 SPACE 2 16914302 VALIDCK0 DC V(IEA0VL00) VALIDITY CHECK ROUTINE (KEY) Y02714 16916802 VALIDCK1 DC V(IEA0VL01) VALIDITY CHECK ROUTINE ("+WB) Y02714 16919302 SPACE 2 Y02714 16921802 DROP RBASE1,RLDA Y02714 16924302 EJECT 16926802 *********************************************************************** 16929302 * 16929702 * SVC 4 EQUIVALENT BRANCH ENTRY 16930102 * 16930502 *********************************************************************** 16931302 SPACE 2 Y02714 16945302 GMBRANCH EQU * 16951302 USING ASCB,RASCB Y02714 16961302 L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 16971302 USING LDA,RASCB Y02714 16981302 STM RIN0,RIN15,BRANCHSV SAVE CALLER'S REGISTERS Y02714 16991302 ST RTCB,LDATCB SAVE TCB POINTER Y02714 16993302 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 16995302 DROP RASCB Y02714 16997302 USING LDA,RLDA Y02714 16999302 BALR TEMPBASE,0 ESTABLISH TEMPORARY BASE 17001302 USING *,TEMPBASE 17051302 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 17052302 L RBASE1,ABASE1 GET FIRST BASE Y02714 17151302 L RBASE2,ABASE2 GET SECOND BASE Y02714 17161302 USING BASE1,RBASE1,RBASE2 SET UP ADDRESSABILITY Y02714 17201302 OI FLAGS,BRENTRY SET BRANCH ENTRY Y02714 17281302 MVI SVCBYTE,SV4 INDICATE SVC 4 Y02714 17291302 MVI RQSTRKEY,C0 SET REQUESTER KEY TO ZERO Y02714 17341302 LM RLENGTH,RADDR,C0(RIN1) GET LENGTH & ADDRESS 17401302 L RWORK,LGPOSNUM SET LAST LIST ADDRESS VERY Y02714 17411302 ST RWORK,LASTLSTA LARGE SO IT WON'T FAIL Y02714 17421302 SR RSPID,RSPID 17451302 IC RSPID,SPIDISP(RIN1) GET SUBPOOL ID 18240002 MVC CODE1,CODE(RIN1) SAVE OPTION CODE Y02714 18290002 B GMCOMMON GO TO GETMAIN COMMON ROUTINE 18300002 SPACE 2 18320001 DROP RBASE1,RBASE2,RLDA,TEMPBASE Y02714 18330002 EJECT Y02714 18340002 *********************************************************************** 18342002 * 18342402 * SVC 5 EQUIVALENT BRANCH ENTRY 18342802 * 18343202 *********************************************************************** 18344002 SPACE 2 18350001 FMBRANCH EQU * 18360001 USING ASCB,RASCB Y02714 18362002 L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 18364002 USING LDA,RASCB Y02714 18366002 STM RIN0,RIN15,BRANCHSV SAVE CALLER'S REGISTERS Y02714 18368002 ST RTCB,LDATCB SAVE TCB POINTER Y02714 18368402 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 18368802 DROP RASCB Y02714 18369202 USING LDA,RLDA Y02714 18369602 BALR TEMPBASE,0 ESTABLISH TEMPORARY BASE 18370002 USING *,TEMPBASE 18400001 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 18401002 L RBASE1,ABASE1 GET FIRST BASE Y02714 18420002 L RBASE2,ABASE2 GET SECOND BASE Y02714 18430002 USING BASE1,RBASE1,RBASE2 SET UP ADDRESSABILITY Y02714 18440002 OI FLAGS,BRENTRY SET BRANCH ENTRY Y02714 18554002 MVI SVCBYTE,SV5 INDICATE SVC 5 Y02714 18556002 MVI RQSTRKEY,C0 SET REQUESTER KEY TO ZERO Y02714 18566002 LM RLENGTH,RADDR,C0(RIN1) GET LENGTH & ADDRESS 18600002 L RWORK,LGPOSNUM SET LAST LIST ADDRESS VERY Y02714 18610002 ST RWORK,LASTLSTA LARGE SO IT WON'T FAIL Y02714 18612002 SR RSPID,RSPID 18620001 IC RSPID,SPIDISP(RIN1) GET SUBPOOL ID 18640002 MVC CODE1,CODE(RIN1) SAVE OPTION CODE Y02714 18710002 B FMCOMMON GO TO FREEMAIN COMMON ROUTINE 18720002 SPACE 2 18730001 DROP RBASE1,RBASE2,RLDA,TEMPBASE Y02714 18732002 EJECT Y02714 18834302 *********************************************************************** 18834702 * 18834802 * SVC 10 EQUIVALENT BRANCH ENTRY 18834902 * 18835002 *********************************************************************** 18835102 SPACE 2 Y02714 18835902 RMBRANCH EQU * 18840002 QCBRANCH EQU * 18848002 USING ASCB,RASCB Y02714 18850002 L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 18852002 USING LDA,RASCB Y02714 18854002 STM RIN0,RIN15,BRANCHSV SAVE CALLER'S REGISTERS Y02714 18854402 ST RTCB,LDATCB SAVE TCB POINTER Y02714 18854802 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 18855202 DROP RASCB Y02714 18855602 USING LDA,RLDA Y02714 18855702 BALR TEMPBASE,0 ESTABLISH TEMPORARY BASE 18856002 USING *,TEMPBASE ESTABLISH TEMP ADDRESSABILITY 18864002 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 18865002 OI FLAGS,BRENTRY SET BRANCH ENTRY Y02714 18970002 MVI SVCBYTE,SV10 INDICATE SVC 10 Y02714 18972002 MVI RQSTRKEY,C0 SET REQUESTER KEY TO ZERO Y02714 18982002 L RBASE1,ABASE1 GET FIRST BASE Y02714 19010002 B SVC10A CONTINUE 19040002 SPACE 2 19050001 DROP TEMPBASE,RLDA Y02714 19170002 SPACE 5 19172002 *********************************************************************** 19174002 * 19174402 * SVC 10 ENTRY POINT 19174802 * 19175202 *********************************************************************** 19176002 SPACE 2 19180002 IGC010 BALR RBASE1,0 SET UP TEMP ADDRESSABILITY Y02714 19200002 USING *,RBASE1 Y02714 19220002 USING ASCB,RASCB Y02714 19282002 L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 19284002 USING LDA,RASCB Y02714 19286002 ST RTCB,LDATCB SAVE TCB POINTER Y02714 19288402 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 19288802 DROP RASCB Y02714 19289202 USING LDA,RLDA Y02714 19289602 ST RRETURN,RETSAVE SAVE RETURN REG 19289802 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 19290802 LA RRBPRXLN,RBPRFLNA GET PREFIX LENGTH Y02714 19344002 SR RRB,RRBPRXLN GET BASE FOR RB INCL. PREFIX Y02714 19348002 USING RBPRFXST,RRB SET ADDRESSABILITY TO PREFIX Y02714 19348102 IC RWORK,RBOPSW+C1 GET KEY AND MODE Y02714 19348402 STC RWORK,MODE SAVE IN LDARQSTA Y02714 19348702 MVI SVCBYTE,SV10 INDICATE SVC 10 Y02714 19349002 STC RWORK,RQSTRKEY SAVE REQUESTER KEY Y02714 19349402 NI RQSTRKEY,KEY0 REMOVE MODE FROM KEY Y02714 19349702 DROP RRB Y02714 19350002 ST RIN1,SAVEREG1 SAVE FOR RESTORE ON FREEMAIN Y02714 19350402 L RBASE1,ABASE1 GET FIRST BASE Y02714 19352002 USING BASE1,RBASE1 Y02714 19354002 SVC10A L RBASE2,ABASE2 GET SECOND BASE Y02714 19356002 LR RSPID,RIN0 GET SUBPOOL ID AND LENGTH 19400002 LA RIN0,C0(0,RSPID) REMOVE SPID FROM LENGTH Y02714 19410002 SRL RSPID,C24 MOVE SPID TO LOW ORDER BYTE Y02714 19420002 MVI CODE1,C0 ZERO OPTION FIELD 19520002 LR RLENGTH,RIN0 GET LENGTH Y02714 19550002 LTR RIN1,RIN1 IS IT A GETMAIN? 19551002 BNM FMCOMM1 NO, FREEMAIN Y02714 19552002 B GMCOMM1 GETMAIN 19560001 SPACE 2 19580001 DROP RBASE1 Y02714 19590002 EJECT Y02714 19600002 **************************************************************** Y02714 19602002 * Y02714 19610002 * GLOBAL STORAGE BRANCH ENTRY WITH SALLOC LOCK HELD Y02714 19620002 * Y02714 19622002 **************************************************************** Y02714 19622102 SPACE 2 Y02714 19622402 GLBRANCH STM RIN0,RIN15,BRANCHSV SAVE CALLER'S REGISTERS Y02714 19624002 ST RASCB,PASCBSV SETUP SO GM/FM COMMON WILL Y02714 19626002 ST RLDA,BRANCHSV+C28 RESTORE REGS CORRECTLY Y02714 19628002 BALR TEMPBASE,0 ESTABLISH TEMPORARY BASE 19630002 USING *,TEMPBASE 19660001 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 19661002 OI PARMFLG1(R2),PARMGLBL SET GLOBAL REQUEST FOR FRR Y02753 19662002 OI LOCKFLAG,SALHELD INDICATE SALLOC ALREADY HELD Y02751 19664002 MVI LDAFLAGS,C0 CLEAR FREEPART FLAGS @ZA05954 19665040 LA RBASE1,IGC120BS GET COMMON TEMP BASE Y02714 19670002 USING IGC120BS,RBASE1 Y02714 19670102 L RBASE2,ABASE2 GET SECOND BASE Y02714 19670402 USING BASE2,RBASE2 Y02714 19678602 SR RWORK,RWORK SET TCB ADDRESS Y02714 19703402 ST RWORK,LDATCB TO ZERO Y02714 19711602 LR RSPID,RIN3 GET SPID (+ KEY & FLAGS) Y02714 19719802 SRL RSPID,C8 MOVE TO LOW ORDER BYTE Y02714 19728002 N RSPID,BYTE3MSK ELIMINATE KEY Y02714 19736202 LA INDEX,C6 CHECK FOR SIX SUBPOOLS @Y30APYF 19744403 GLBRNCH1 IC RWORK,GLSPIDS-1(INDEX) GET NEXT VALID SPID Y02714 19752602 CR RWORK,RSPID IS THIS A VALID SUBPOOL? Y02714 19760802 BE SVC120A YES, CONTINUE Y02714 19769002 BCT INDEX,GLBRNCH1 TRY NEXT SUBPOOL Y02714 19777202 * Y02714 19785402 * INVALID SUBPOOL, SET UP GERROR ROUTINE INTERFACE Y02714 19793602 * Y02714 19801802 LR RLENGTH,RIN0 GET LENGTH FOR MESSAGE Y02714 19810002 MVI CODE1,C0 SET UNCONDITIONAL REQUEST Y02714 19816002 MVI MSGLEN,C4 REASON CODE 0 - MSGLEN OF 4 Y02714 19818402 MVI SVCBYTE,SV120 SET UP SVC TYPE FOR MESSAGE Y02714 19818502 L RBASE1,ABASE1 GET FIRST BASE Y02714 19820802 USING BASE1,RBASE1 Y02714 19821802 LA RERROR,ERRB SET UP ERROR CODE @Z30ENWD 19822003 B GERROR ABEND, B78 COMP CODE @Z30ENWD 19822803 SPACE 2 Y02714 19823602 DROP RBASE1,RBASE2,RLDA,TEMPBASE Y02714 19824402 EJECT Y02714 19824502 *********************************************************************** 19825902 * 19826502 * SVC 120 EQUIVALENT BRANCH ENTRY 19827102 * 19827902 *********************************************************************** 19828702 SPACE 2 Y02714 19829302 CRBRANCH EQU * Y02714 19830102 USING ASCB,RASCB Y02714 19830902 L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 19831702 USING LDA,RASCB Y02714 19832502 STM RIN0,RIN15,BRANCHSV SAVE CALLER'S REGISTERS Y02714 19833302 ST RTCB,LDATCB SAVE TCB POINTER Y02714 19834802 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 19834902 DROP RASCB Y02714 19835702 USING LDA,RLDA Y02714 19836502 BALR TEMPBASE,0 ESTABLISH TEMPORARY BASE 19837302 USING *,TEMPBASE 19838802 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 19839602 LA RBASE1,IGC120BS GET COMMON TEMP BASE Y02714 19839702 USING IGC120BS,RBASE1 Y02714 19840502 L RBASE2,ABASE2 GET SECOND BASE Y02714 19841402 DROP TEMPBASE Y02714 19842202 SVC120A OI FLAGS,BRENTRY SET BRANCH ENTRY Y02714 19843002 MVI SVCBYTE,SV120 INDICATE SVC 120 Y02714 19844402 LR RIN15,RIN3 SIMULATE SVC 120 - DATA IN Y02714 19845202 * REGISTER 15 Y02714 19845302 B SVC120B CONTINUE AS FOR SVC 120 Y02714 19846802 SPACE 5 Y02714 19847602 *********************************************************************** 19848402 * 19848602 * SVC 120 ENTRY POINT 19849402 * 19850202 *********************************************************************** 19851102 SPACE 2 Y02714 19852102 IGC120 BALR RBASE1,0 SET TEMPORARY ADDRESSABILITY Y02714 19853102 USING *,RBASE1 Y02714 19853702 USING ASCB,RASCB Y02714 19854302 IGC120BS L RASCB,ASCBLDA GET ADDRESS OF LDA Y02714 19855102 USING LDA,RASCB Y02714 19856102 ST RTCB,LDATCB SAVE TCB POINTER Y02714 19857202 LR RLDA,RASCB SET ADDRESSABILITY TO LDA Y02714 19857302 DROP RASCB Y02714 19858502 USING LDA,RLDA Y02714 19859102 ST RRETURN,RETSAVE SAVE RETURN REG Y02714 19859702 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 19860602 L RBASE2,ABASE2 GET SECOND BASE Y02714 19861402 USING BASE2,RBASE2 Y02714 19862202 MVI SVCBYTE,SV120 INDICATE SVC 120 Y02714 19863402 LA RRBPRXLN,RBPRFLNA GET PREFIX LENGTH Y02714 19864302 SR RRB,RRBPRXLN GET BASE FOR RB INCL. PREFIX Y02714 19865202 USING RBPRFXST,RRB SET ADDRESSABILITY TO PREFIX Y02714 19865702 MVC MODE(C1),RBOPSW+C1 GET KEY AND MODE Y02714 19866202 ICM RIN15,MKEY,RBOPSW+C1 GET KEY FROM RB OLD PSW Y02714 19867202 N RIN15,KEYMASK REMOVE MODE FROM KEY Y02714 19868402 DROP RRB Y02714 19869102 ST RIN1,SAVEREG1 SAVE FOR RESTORE ON FREEMAIN Y02714 19869802 SPACE 2 Y02714 19870602 SVC120B LR RSPID,RIN15 GET SPID (+ KEY & FLAGS) Y02714 19871302 SRL RSPID,C8 MOVE TO LOW ORDER BYTE Y02714 19872002 N RSPID,BYTE3MSK ELIMINATE KEY Y02714 19872802 STCM RIN15,MKEY,RQSTRKEY SAVE REQUESTER KEY Y02714 19873502 MVI CODE1,C0 ZERO OPTION CODE BYTE Y02714 19875002 STC RIN15,CODE2 STORE ACTUAL OPTION CODE Y02714 19876002 TM CODE2,S120UNCD UNCONDITIONAL REQUEST? Y02714 19877202 BO SVC120C YES Y02714 19877702 OI CODE1,CONDTNL NO, SET SVC 4 COND. FLAG Y02714 19878202 SVC120C TM CODE2,S120PBND PAGE BOUNDARY REQUEST? Y02714 19879402 BZ SVC120D NO Y02714 19880102 OI CODE1,BOUND YES, SET SVC 4 PAGE BNDRY FLG Y02714 19880802 SVC120D L RBASE1,ABASE1 GET PERMANENT FIRST BASE Y02714 19881602 USING BASE1,RBASE1 Y02714 19882302 LR RLENGTH,RIN0 GET LENGTH Y02714 19883002 TM CODE2,S120FM FREEMAIN REQUEST? Y02714 19883802 BO FMCOMM1 YES, FREEMAIN Y02714 19884802 B GMCOMM1 GETMAIN Y02714 19886002 SPACE 2 19886702 DROP RBASE1,RBASE2,RLDA Y02714 19887402 EJECT Y02714 19888202 **************************************************************** Y02714 19888902 * Y02714 19890002 * ENTRY POINT FROM REAL STORAGE MANAGEMENT TO RETURN ONE Y02714 19890202 * PAGE TO AN FBQE Y02714 19891002 * Y02714 19891802 **************************************************************** Y02714 19892602 SPACE 2 Y02714 19893602 USING *,RIN15 Y02714 19894802 MRELEASR LTR RIN0,RIN0 LOCAL OR GLOBAL REQUEST? Y02714 19895502 BZ MRLSER1 LOCAL, USE LDA Y02714 19896202 L RIN15,CVTPTR GLOBAL, USE GLOBAL SAVE AREA Y02714 19897002 USING CVT,RIN15 Y02714 19897702 L RIN15,CVTSPSA GLOBAL SAVE AREA VECTOR TABLE Y02714 19898402 USING WSAG,RIN15 Y02714 19899202 L RIN15,WSAGGMFM GLOBAL SAVE AREA ADDRESS Y02714 19899902 USING LDA,RIN15 Y02714 19900602 STM RIN0,RRETURN,MSAVE SAVE REGISTERS 0 TO 14 Y02714 19901402 LR RLDA,RIN15 PUT LDA POINTER IN REG 4 Y02714 19902402 DROP RIN15 Y02714 19903602 BALR TEMPBASE,0 SET UP TEMPORARY BASE Y02714 19904302 USING *,TEMPBASE Y02714 19905002 B MRLSER2 CONTINUE Y02714 19905702 DROP TEMPBASE Y02714 19906402 SPACE 2 Y02714 19907102 MRLSER1 L RIN15,PSAAOLD GET CURRENT ASCB POINTER Y02714 19907802 USING ASCB,RIN15 Y02714 19908502 L RIN15,ASCBLDA GET ADDRESS OF LDA Y02714 19909202 USING LDA,RIN15 Y02714 19910202 STM RIN0,RRETURN,MSAVE SAVE REGISTERS 0 TO 14 Y02714 19911202 LR RLDA,RIN15 PUT LDA POINTER IN REG 4 Y02714 19912402 DROP RIN15 Y02714 19913102 USING LDA,RLDA Y02714 19913802 MRLSER2 BALR TEMPBASE,0 SET UP TEMPORARY BASE Y02714 19914602 USING *,TEMPBASE Y02714 19915302 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 19916002 L RBASE1,ABASE1 GET FIRST BASE Y02714 19916802 L RBASE2,ABASE2 GET SECOND BASE Y02714 19917602 USING BASE1,RBASE1,RBASE2 Y02714 19918802 LR RADDRM,RIN1 MOVE ADDRESS FOR MRELEASE Y02714 19918902 L RSIZEM,PAGE SET LENGTH TO 1 PAGE Y02714 19920402 LTR RWORK3,RIN0 LOCAL OR GLOBAL REQUEST? Y02714 19921202 BZ MRLSER3 LOCAL, GET A. S. PQE Y02714 19921502 OI PARMFLG1(R2),PARMGLBL SET GLOBAL REQUEST FOR FRR Y02753 19922202 L RCVT,CVTPTR GET CVT POINTER Y02714 19923402 USING CVT,RCVT Y02714 19924402 L RGDA,CVTGDA GET GDA POINTER Y02714 19924902 DROP RCVT Y02714 19925402 USING GDA,RGDA Y02714 19926402 L RPQEM,CSAPQEP GET CSA PQE POINTER Y02714 19927402 DROP RGDA Y02714 19928402 LR RIN0,RSIZEM SET UP FOR SRM Y02714 19929002 BAL RCOMRET1,SRM INTERFACE ROUTINE, CSA FREED Y02714 19929602 LR RADDRM,RIN1 GET ADDRESS AGAIN Y02714 19930402 MVI LDACBSP,CBSQA FBQE IS IN SQA Y02714 19931402 B MRLSER4 GO DO MRELEASE Y02714 19932402 SPACE 2 Y02714 19933102 MRLSER3 L RPQEM,ASDPQE GET ADDRESS SPACE PQE POINTER Y02714 19933802 MVI LDACBSP,CBLSQA FBQE IS IN LSQA Y02714 19934502 MRLSER4 BAL RRETURN,MRELEASE GO RETURN STORAGE TO FBQE Y02714 19935202 LTR RWORK3,RWORK3 LOCAL OR GLOBAL REQUEST? Y02714 19936002 BNZ MRLSER5 GLOBAL, DON'T UPDATE CURRGNTP Y02714 19936802 L RBLKAD,MSAVE+C4 GET STARTING ADDRESS Y02714 19937602 LA RCWRK,C0(RBLKAD,RSIZEM) DEVELOP AUB Y02714 19938402 C RCWRK,CURRGNTP AUB = CURRGNTP? Y02714 19939202 BNE MRLSER5 NO, UPDATE NOT NEEDED Y02714 19940002 LR RSIZE,RSIZEM GET SIZE Y02714 19940802 LR REGA,RPQEM GET A. S. PQE Y02714 19941602 L RDQE,AFMSMF GET FMSMF ENTRY POINT Y02714 19942402 BAL RCOMRET1,FMSMFMR-FMSMFCRE(0,RDQE) UPDATE CURRGNTP Y02714 19943202 MRLSER5 BAL RRETURN,FRRDELET GO DELETE FRR Y02753 19944002 LM RIN0,RRETURN,MSAVE RESTORE REGISTERS 0 TO 14 Y02714 19944802 BR RRETURN RETURN TO RSM Y02714 19945602 SPACE 2 Y02714 19946402 DROP TEMPBASE Y02714 19947602 EJECT Y02714 19954202 **************************************************************** Y02714 19956402 * Y02714 19958602 * ENTRY POINT FROM FREEPART TO RETURN REGION SPACE TO AN Y02714 19960802 * APPROPRIATE FBQE Y02714 19963002 * Y02714 19965202 **************************************************************** Y02714 19967402 SPACE 2 Y02714 19969602 USING MRELEASF,RIN15 Y02753 19970602 MRELEASF STM R2,RIN15,BRANCHSV+C8 SAVE REGISTERS 2 THRU 15 Y02714 19971802 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR LDARQSTA Y02753 19973802 DROP RIN15 Y02753 19973902 BAL RRETURN,MRELEASE GO TO MRELEASE Y02714 19974002 USING *,RRETURN Y02714 19976203 B COMRET DO COMMON RETURN PROCESSING Y02714 19986003 SPACE 2 19986403 DROP RRETURN Y02714 19986503 SPACE 5 19986603 **************************************************************** Y02714 19986803 * Y02714 19986903 * ENTRY POINT FROM GETPART TO ALLOCATE SPACE IN LSQA Y02714 19989403 * FOR VSM CONTROL BLOCKS THAT ARE NOT CELL LENGTH @Z30ENWD 19991603 * Y02714 19994203 **************************************************************** Y02714 19994603 SPACE 2 19995003 USING GETMAING,RIN15 Y02753 19995103 GETMAING STM R2,RIN15,BRANCHSV+C8 SAVE REGISTERS 2 THRU 15 Y02714 19995203 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR FLAGS @Z30ENWD 19995403 DROP RIN15 Y02753 19995603 BAL RRETURN,GETMAINB GO TO GET STORAGE Y02714 19995803 COMRET BAL RRETURN,FMPOSTP FREE Q'D AREAS AND SALLOC @Z30ENWD 19996603 BAL RRETURN,FRRDELET GO DELETE FRR Y02753 19997003 LM R2,RIN15,BRANCHSV+C8 RESTORE REGISTERS 2 THRU 15 Y02714 19997103 BR RRETURN RETURN Y02714 19997203 SPACE 2 19997303 DROP RBASE1,RBASE2 Y02714 19997403 EJECT 19997803 ***************************************************************@Z30ENWD 19997903 * @Z30ENWD 19998603 * ENTRY POINT TO ALLOCATE OR RELEASE VSM CONTROL BLOCK 19998803 * CELLS IN SQA OR LSQA @Z30ENYF 19999003 * @Z30ENWD 20000703 ***************************************************************@Z30ENWD 20001403 SPACE 2 @Z30ENWD 20002103 USING CBBRANCH,RIN15 @Z30ENWD 20002803 CBBRANCH EQU * @Z30ENWD 20003503 USING ASCB,RASCB @Z30ENWD 20004203 L RASCB,ASCBLDA PICK UP LDA ADDRESS @Z30ENWD 20004903 USING LDA,RASCB @Z30ENWD 20005603 STM R2,RRETURN,BRANCHSV+C8 SAVE REGISTERS 2 THRU 14@Z30ENWD 20006303 LR RLDA,RASCB LOAD PROPER REG @Z30ENWD 20007003 DROP RASCB @Z30ENWD 20007703 USING LDA,RLDA @Z30ENWD 20008403 BAL RRETURN,FRRINIT ESTABLISH FRR, CLEAR FLAGS @Z30ENWD 20009103 OI CELLFLGS,INCBBRAN SET CBBRANCH ENTERED FLAG @Z30ENWD 20009803 L RBASE1,ABASE1 LOAD BASE REG @Z30ENWD 20010503 L RBASE2,ABASE2 LOAD BASE REG @Z30ENWD 20011203 USING BASE1,RBASE1 @Z30ENWD 20011903 USING BASE2,RBASE2 @Z30ENWD 20012603 SR R2,R2 CLEAR REG @Z30ENYF 20013303 ST R2,BRANCHSV+C60 PRESET RETURN CODE @Z30ENYF 20014003 LTR RIN1,RIN1 CHECK REQUEST TYPE @Z30ENWD 20014703 BNM FCEL FREEMAIN REQUEST @Z30ENWD 20015403 SPACE 20016903 LR RIN1,RIN0 SET UP SPID PARM @Z30ENWD 20017203 BAL RRETURN,GETMAINC REQUEST A CELL FOR USER @Z30ENWD 20017703 LTR RIN1,RIN1 GET A CELL? @Z30ENWD 20018203 BZ CBSETRC NO CELL, SET BAD R.C. @Z30ENWD 20018703 B CLNUP GO TO COMMON LOGIC @Z30ENWD 20019203 SPACE 20020003 FCEL C RIN1,CURRGNTP ADDRESS REASONABLE? @Z30ENWD 20020303 BNL FCELBR YES, FREE IT @Z30ENYF 20021303 CBSETRC LA R2,FOUR LOAD RETURN CODE @Z30ENYF 20022303 ST R2,BRANCHSV+C60 STORE RETURN CODE @Z30ENYF 20023303 B CLNUP @Z30ENWD 20024303 FCELBR BAL RCOMRET1,FMAINC FREE A CELL FOR USER @Z30ENWD 20025303 SPACE 20026503 CLNUP BAL RRETURN,FMPOSTP FREE ANY QUEUED AREAS @Z30ENWD 20027303 BAL RRETURN,FRRDELET GO DELETE FRR @Z30ENWD 20028303 LM R2,RIN15,BRANCHSV+C8 RESTORE REGISTERS 2 THRU 15@Z30ENWD 20029303 DROP RLDA @Z30ENWD 20030303 USING LDA,RASCB @Z30ENWD 20031303 L RASCB,PASCBSV RESTORE REG FROM SAVE @Z30ENWD 20032303 BR RRETURN RETURN @Z30ENWD 20033303 SPACE 2 20040803 DROP RBASE1,RBASE2,RIN15,RASCB @Z30ENWD 20044003 USING LDA,RLDA @Z30ENWD 20046003 EJECT Y02753 20048003 **************************************************************** Y02753 20048803 * Y02753 20052003 * ROUTINE TO ESTABLISH A FUNCTIONAL RECOVERY ROUTINE Y02753 20052803 * (FRR) AND DO COMMON ENTRY INITIALIZATION Y02753 20056003 * Y02753 20056803 * INPUT Y02753 20058403 * RLDA - LDA ADDRESS Y02753 20060203 * RRETURN - RETURN ADDRESS Y02753 20062203 * OUTPUT Y02753 20064203 * LDARQSTA SET TO ZERO Y02753 20066203 * LOCKFLAG SET TO ZERO Y02753 20070003 * CELLFLGS SET TO ZERO @Z30ENWD 20070903 * FRRBRNDX SET TO ZERO Y02753 20071803 * FRR ESTABLISHED Y02753 20072703 * FRR PARAMETER AREA INITIALIZED AND ADDRESS SAVED Y02753 20074503 * IN FRRPARM Y02753 20076303 * R2 - ADDRESS OF FRR PARAMETER AREA Y02753 20080003 * WORK Y02753 20082003 * R2, REGA, REGB, WORK Y02753 20084003 * Y02753 20086003 **************************************************************** Y02753 20088003 SPACE 2 Y02753 20090003 FRRINIT BALR REGB,0 SET ADDRESSABILITY Y02753 20092003 USING *,REGB Y02753 20094003 SR WORK,WORK CLEAR CURRENT Y02753 20096003 ST WORK,LDARQSTA REQUEST STATUS, LOCK FLAGS, Y02753 20098003 STH WORK,LOCKFLAG FRR BRANCH INDEX, @Z30ENWD 20100003 MVI CELLFLGS,OFF AND CELLFLAGS @Z30ENYF 20102003 L R2,AFRR GET FRR ADDRESS Y02753 20104003 SETFRR A,FRRAD=(R2),PARMAD=(R2),WRKREGS=(REGA,WORK) Y02753 20106003 ST R2,FRRPARM SAVE PARM AREA ADDRESS Y02753 20108003 ST RLDA,PARMLDA(0,R2) PLACE LDA ADDR IN PARM AREA Y02753 20110003 BR RRETURN RETURN Y02753 20112003 SPACE 2 Y02753 20114003 DROP REGB Y02753 20116003 AFRR DC V(IEAVGFRR) FUNCT. RECOVERY ROUTINE (FRR) Y02753 20118003 EJECT Y02714 20120003 **************************************************************** Y02714 20122003 * Y02714 20124003 * PERMANENT BASE REGISTER DEFINITIONS Y02714 20126003 * Y02714 20128003 **************************************************************** Y02714 20130003 SPACE 2 Y02714 20132003 BASE1 EQU * START OF FIRST PERMANENT BASE Y02714 20134003 BASE2 EQU BASE1+4096 START OF SECOND PERM. BASE Y02714 20136003 ABASE1 DC A(BASE1) FIRST PERMANENT BASE Y02714 20138003 ABASE2 DC A(BASE2) SECOND PERMANENT BASE Y02714 20140003 SPACE 2 Y02714 20142003 USING BASE1,RBASE1,RBASE2 Y02714 20144003 EJECT 20146003 *********************************************************************** 20148003 * 20150003 * GETMAIN FOR A VSM QUEUE ELEMENT - A CELL FROM LOCAL OR 20152003 * CELL POOL. 20154003 * 20156003 * INPUT - RIN1 - SPID IN BYTE ZERO 20158003 * RRETURN - RETURN REGISTER 20160001 * OUTPUT - RIN1 - ADDRESS OF ASSIGNED STORAGE, OR 20180003 * ZERO IF NO CELLS AVAILABLE 20182003 * R2 - R15 - RESTORED OR UNCHANGED 20190003 * 20200001 *********************************************************************** 20210002 SPACE 2 20210103 GETMAINC STM RRETURN,RCOMRET1,CSAVE SAVE CALLERS REGS 14-9 @Z30ENWD 20210403 OI CELLFLGS,INCELL SET GETMAINC FLAG @Z30ENWD 20210603 SRL RIN1,C24 ADJUST SPID FOR COMPARE @Z30ENWD 20210803 C RIN1,SP245F SQA REQUEST ? @Z30ENWD 20211003 BE SQACEL YES, SQA REQUEST @Z30ENWD 20211203 SPACE 20211703 OI CELLFLGS,LCLREQ REMEMBER REQUEST TYPE = LSQA@Z30ENWD 20211803 LA RANCHOR,LCLCELL LOAD ANCHOR ADDRESS @Z30ENWD 20215803 B REMOVCEL GO TAKE A CELL @Z30ENWD 20219803 SPACE 20226003 SQACEL BAL RCOMRET1,GTSALLOC OBTAIN SALLOC @Z30ENWD 20228003 L RCVT,CVTPTR GET CVT POINTER @Z30ENWD 20229003 USING CVT,RCVT @Z30ENWD 20230003 L RGDA,CVTGDA GET GDA POINTER @Z30ENWD 20231003 DROP RCVT @Z30ENWD 20232003 USING GDA,RGDA @Z30ENWD 20233003 LA RANCHOR,GLBLCELL LOAD ANCHOR ADDRESS @Z30ENWD 20234003 DROP RGDA @Z30ENWD 20235003 SPACE 20242003 REMOVCEL L RIN1,C0(,RANCHOR) GET FIRST CELL @Z30ENWD 20244003 LTR RIN1,RIN1 GOT A CELL? @Z30ENWD 20244803 BZ QTEST NO CELL AVAILABLE @Z30ENWD 20245603 SPACE 20246603 RECHAINQ MVC C0(C4,RANCHOR),C0(RIN1) RECHAIN QUEUE @Z30ENWD 20252003 L RCTR,C4(,RANCHOR) LOAD COUNT @Z30ENWD 20252903 BCTR RCTR,C0 MINUS 1 @Z30ENWD 20253803 ST RCTR,C4(,RANCHOR) STORE NEW COUNT @Z30ENWD 20254703 C RCTR,CELLOW IS QUEUE LOW? @Z30ENWD 20255603 BNL GMCCLEAR NO @Z30ENWD 20256503 TM CELLFLGS,LCLREQ IS THIS A LOCAL REQUEST? @Z30ENWD 20257403 BZ GBLEXP NO, GLOBAL @Z30ENWD 20258303 OI CELLFLGS,LCLEXP YES, SET LOCAL FLAG @Z30ENWD 20259203 B GMCCLEAR CLEAR CELL @Z30ENWD 20260103 GBLEXP OI CELLFLGS,GLBLEXP SET GLOBAL FLAG @Z30ENWD 20261003 EJECT 20262803 GMCCLEAR XC C0(CELLEN,RIN1),C0(RIN1) CLEAR CELL @Z30ENWD 20266003 GMCRSET NI CELLFLGS,ALL-INCELL-LCLREQ RESET FLAGS @Z30ENWD 20266403 LM RRETURN,RIN0,CSAVE RESTORE REGISTERS 14-0 @Z30ENWD 20266803 LM RAREG,RCOMRET1,CSAVE+C16 AND 2-9 @Z30ENWD 20267203 BR RRETURN RETURN 20267703 SPACE 3 20268103 QTEST TM CELLFLGS,LCLREQ LOCAL REQUEST? @Z30ENWD 20268203 BZ SETGLBL NO, GLOBAL REQUEST @Z30ENWD 20268303 OI CELLFLGS,LCLEXP SET LOCAL EXPANSION FLAG @Z30ENWD 20268403 B TESTGNOT TEST FOR CALLER @Z30ENWD 20268503 SETGLBL OI CELLFLGS,GLBLEXP SET GLOBAL EXPANSION FLAG @Z30ENWD 20268603 SPACE 20269103 TESTGNOT TM CELLFLGS,GNOTCALL IS GNOTSAT THE CALLER @Z30ENWD 20269203 BZ TRYEXPN NO, EXPANSION ALLOWED @Z30ENWD 20271203 TM CELLFLGS,LCLREQ LOCAL REQUEST? @Z30ENWD 20273203 BZ GMCRSET NO, RETURN WITH ZERO @Z30ENWD 20275203 RSETLCL NI CELLFLGS,ALL-LCLREQ RESET FLAG @Z30ENWD 20277203 B SQACEL TRY TO GET SQA @Z30ENWD 20279203 SPACE 20281403 TRYEXPN BAL RRETURN,GETMAINE TRY TO EXTEND POOL @Z30ENWD 20281503 L RIN1,C0(,RANCHOR) TAKE CELL @Z30ENWD 20282003 LTR RIN1,RIN1 HAVE ANY NOW? @Z30ENWD 20282503 BNZ RECHAINQ YES, RECHAIN QUEUE @Z30ENWD 20283003 TM CELLFLGS,LCLREQ IS THIS A LOCAL REQUEST? @Z30ENWD 20283503 BO RSETLCL YES, TRY FOR SQA @Z30ENWD 20284003 SPACE 20284903 TM CELLFLGS,INCBBRAN WAS CBBRANCH THE CALLER? @Z30ENWD 20285403 BO GMCRSET YES @Z30ENWD 20286403 B WAITPREP NO, PREPARE FOR WAIT @Z30ENWD 20287403 EJECT 20288403 *********************************************************************** 20288703 * @Z30ENWD 20288803 * GETMAINE/GETMAINB - ENTRY POINTS FOR INTERNAL GETMAIN @Z30ENWD 20289303 * GETMAINE - EXPANDS CELL POOL @Z30ENWD 20289803 * GETMAINB - PAGETABLE SPACE, GETMAING, GETMAINE @Z30ENWD 20290303 * @Z30ENWD 20290803 * GETMAINE INPUT - FLAGS (LCLEXP AND/OR GLBLEXP) @Z30ENWD 20291303 * OUTPUT - CELLS ON APPROPRIATE QUEUE @Z30ENWD 20291803 * @Z30ENWD 20292303 *********************************************************************** 20292903 SPACE 20294003 GETMAINE STM RAREG,RIN1,BSAVE STORE REGS @Z30ENWD 20294903 OI CELLFLGS,INEXPN SET GETMAINE ENTERED FLAG @Z30ENWD 20295703 TM CELLFLGS,LCLEXP ENTER TO EXPAND LSQA CELLS? @Z30ENWD 20296503 BZ SETSQASP NO,SQA CELLS @Z30ENWD 20297303 L RSPID,SP255F LOAD LSQA SPID @Z30ENWD 20298103 B SETLEN GO SET LENGTH @Z30ENWD 20298903 SETSQASP L RSPID,SP245F LOAD SQA SPID @Z30ENWD 20299703 SETLEN L RLENGTH,CELEXPNL LOAD EXPANSION LENGTH @Z30ENWD 20300503 B GMB1 DO A MODIFIED GETMAINB @Z30ENWD 20301303 SPACE 2 20302803 *********************************************************************** 20303503 * @Z30ENWD 20304203 * GETMAINB INPUT - RIN1 = SPID AND LENGTH @Z30ENWD 20304903 * OUTPUT - RIN1 = ADDRESS @Z30ENWD 20305603 * @Z30ENWD 20306303 *********************************************************************** 20307003 SPACE 2 20307703 GETMAINB STM RAREG,RIN1,BSAVE SAVE CALLERS REGS 20308403 LR RSPID,RIN1 ISOLATE SUBPOOL ID 20309103 SRL RSPID,C24 INTO CORRECT REG 20310003 LA RLENGTH,0(0,RIN1) GET LENGTH WITHOUT SPID Y02714 20312003 GMB1 L RRETURN,LDARQSTA SAVE FLAG WORD @Z30ENWD 20314003 GMB2 MVI SPFLAGS,C0 ZERO FLAG BYTE @Z30ENWD 20316003 C RSPID,SP255F SQA OR LSQA? Y02714 20318003 BE GTLSQASP LSQA 20320001 GETSQAPT L RCVT,CVTPTR GET CVT POINTER Y02714 20330002 USING CVT,RCVT Y02714 20332002 L RGDA,CVTGDA GET GDA POINTER Y02714 20334002 DROP RCVT Y02714 20336002 USING GDA,RGDA Y02714 20338002 L RSPQE,SQASPQEP GET SPQE FOR SQA Y02714 20340002 DROP RGDA Y02714 20350002 OI SPFLAGS,SQA SET SQA FLAG Y02714 20360002 B SETGMBSW GO SET GETMAINB SW 20380001 EJECT 20382003 CHNTOSQA NI CELLFLGS,ALL-LCLEXP RESET FLAG @Z30ENWD 20382503 TM CELLFLGS,INEXPN WAS EXPANSION THE CALLER? @Z30ENWD 20384503 BO GMBRSET YES, DON'T CONVERT @Z30ENWD 20386503 LA RSPID,C245 CHANGE TO SQA @Z30ENWD 20388503 B GETSQAPT GO GET SPQE FOR SQA 20392002 SPACE 1 Y02714 20402002 GTLSQASP L RSPQE,LSQAPTR GET SPQE FOR LSQA Y02714 20420002 LTR RSPQE,RSPQE IS THERE AN SPQE FOR LSQA? 20450002 BZ CHNTOSQA NO - CHANGE TO SQA 20460002 OI SPFLAGS,LSQA SET LSQA FLAG Y02714 20470002 SETGMBSW OI FLAGS,GETMB SET GETMAINB SWITCH Y02714 20480002 STM RAREG,RIN1,SAVEREG2 SAVE REGS-RETRY FROM GNOTSAT@Z30ENWD 20500003 * @Z30ENWD 20505003 * THE GNOTSAT ROUTINE CAN ENTER AT THIS LABEL @Z30ENWD 20510003 * @Z30ENWD 20515003 GMBRETRY BAL RCOMRET1,GFRECORE TRY TO GET STORAGE FROM SUBPOOL 20520002 B GNOTSATA NOT FOUND 20540001 BAL RCOMRET1,GFQEUPDT FOUND - REMOVE ASGNED CORE FROM FQE 20560001 LR RIN1,RFQE ADDRESS OF ASSIGNED AREA 20580001 TM CELLFLGS,INEXPN NEED TO FORMAT? @Z30ENWD 20590003 BO EXPNFMT YES @Z30ENWD 20591003 SPACE 20592303 BCTR RLENGTH,0 DECREMENT TO CLEAR CORE 20592603 EX RLENGTH,CLEARCOR CLEAR ASSIGNED CORE 20592903 GMBRSET ST RRETURN,LDARQSTA RESTORE FLAG WORD Y02714 20593203 NI CELLFLGS,ALL-INEXPN-LCLEXP-GLBLEXP RESET FLAGS @Z30ENWD 20593503 LM RAREG,RIN0,BSAVE RESTORE REGISTERS 20594103 BR RRETURN RETURN 20596103 SPACE 1 20599603 CLEARCOR XC C0(C0,RIN1),C0(RIN1) CLEAR ASSIGNED CORE 20600003 SPACE 3 20601003 * EXPANSION FORMAT ROUTINE OF GETMAINB @Z30ENWD 20602003 SPACE 3 20603003 EXPNFMT TM CELLFLGS,LCLEXP LOCAL REQUEST? @Z30ENWD 20604003 BZ GLSETUP NO, MUST BE GLOBAL @Z30ENWD 20605003 NI CELLFLGS,ALL-LCLEXP RESET FLAG @Z30ENWD 20606003 LA RANCHOR,LCLCELL LOAD ANCHOR ADDRESS @Z30ENWD 20607003 B LENCK CHECK LENGTH @Z30ENWD 20608003 SPACE 20610003 GLSETUP NI CELLFLGS,ALL-GLBLEXP RESET FLAG @Z30ENWD 20613003 L RCVT,CVTPTR GET CVT POINTER @Z30ENWD 20614003 USING CVT,RCVT @Z30ENWD 20615003 L RGDA,CVTGDA GET GDA POINTER @Z30ENWD 20616003 DROP RCVT @Z30ENWD 20617003 USING GDA,RGDA @Z30ENWD 20618003 LA RANCHOR,GLBLCELL GET ANCHOR ADDRESS @Z30ENWD 20619003 DROP RGDA @Z30ENWD 20620003 SPACE 20625003 LENCK LTR RLENGTH,RLENGTH LENGTH EQUAL ZERO? @Z30ENWD 20626303 BZ CKDBLENT YES, NO FORMAT REQUIRED @Z30ENWD 20627303 SPACE 20628303 L ROLDQ,C0(,RANCHOR) SAVE OLD QUEUE POINTER @Z30ENWD 20629303 LA RSTOP,C0(RLENGTH,RIN1) GET STOP ADDRESS @Z30ENWD 20630303 LR RNEXT,RIN1 PRESET NEXT ADDRESS @Z30ENWD 20631303 SR RCTR,RCTR CLEAR THE COUNTER @Z30ENWD 20632303 ST RIN1,C0(,RANCHOR) STORE FIRST CELL ADDRESS @Z30ENWD 20633303 CELLOOP LA RCTR,C1(,RCTR) ADD ONE TO COUNTER @Z30ENWD 20634303 LA RNEXT,CELLEN(,RNEXT) UPDATE NEXT POINTER @Z30ENWD 20635303 CR RNEXT,RSTOP LAST CELL? @Z30ENWD 20636303 BNL WRAPUP YES, GET OUT OF LOOP @Z30ENWD 20637303 SPACE 20647003 ST RNEXT,C0(,RIN1) STORE FORWARD POINTER @Z30ENWD 20649003 LR RIN1,RNEXT UPDATE CELL POINTER @Z30ENWD 20650003 B CELLOOP DO NEXT CELL @Z30ENWD 20651003 SPACE 20653503 WRAPUP ST ROLDQ,C0(RIN1) RECHAIN OLD QUEUE @Z30ENWD 20654003 A RCTR,C4(,RANCHOR) ADD IN OLD COUNT @Z30ENWD 20655003 ST RCTR,C4(,RANCHOR) STORE NEW COUNT @Z30ENWD 20656003 SPACE 20659503 CKDBLENT TM CELLFLGS,GLBLEXP SQA REQUEST ALSO? @Z30ENWD 20661503 BZ GMBRSET NO, DON'T TRY SQA @Z30ENWD 20663503 SPACE 20666003 L RLENGTH,CELEXPNL GET EXPANSION LENGTH @Z30ENWD 20668003 L RSPID,SP245F SET SQA SPID @Z30ENWD 20698003 B GMB2 EXPAND FOR SQA @Z30ENWD 20728003 EJECT 20760001 *********************************************************************** 20770002 * 20800001 * SUBROUTINE TO DETERMINE SUBPOOL REQUEST AND TO GET SPQE FOR 20820001 * REQUESTED SUBPOOL 20840001 * 20850002 * INPUT 20860001 * RSPID - SPID 20900001 * RCOMRET1 _ RETURN ADDRESS 20910001 * OUTPUT 20920001 * RSPQE - SPQE ADDRESS 20940001 * - 0 IF SPQE NOT FOUND 20960001 * WORK 20970002 * RWORK, RCVT, RGDA, RRETURN, RRETCODE 20972002 * 20980001 *********************************************************************** 20990002 SPACE 2 Y02714 21000002 CSPCHK LA RWORK,C128 PROBLEM PROGRAM 21020001 STC RSPID,SAVSPID SAVE SPID FOR FREEMAIN ERROR 21030001 MVI LDACBSP,CBLSQA CONTROL BLOCKS IN LSQA Y02714 21032002 SR RWORK,RSPID IS THIS PROBLEM PROGRAM SUBPOOL? 21040002 BP PGTSPQE YES 21060001 LA RWORK,SUPSPLIM BELOW SUPERV. SUBPOOL LIMIT? Y02714 21080002 SR RWORK,RSPID 21100001 LCR RWORK,RWORK 21120001 BM ERROR11A YES - INVALID SUBPOOL 21140002 SLL RWORK,C2 X 4 FOR BRANCH TABLE 21160002 TM FLAGS,BRENTRY BRANCH ENTRY? Y02714 21180002 BO TABLE(RWORK) YES, DETERMINE REQUESTED SUBP Y02714 21200002 TM MODE,X'80'+SUP KEY 0 TO 7 OR SUPERV MODE? Y02714 21203002 BNO TABLE(RWORK) YES, DETERMINE REQUESTED SUBP Y02714 21206002 STM RIN0,RIN1,CSPCKSAV SAVE REGISTERS 0 AND 1 Y02714 21210002 TESTAUTH FCTN=1,BRANCH=YES Y02714 21214002 LM RIN0,RIN1,CSPCKSAV RESTORE REGISTERS 0 AND 1 Y02714 21216002 LTR RRETCODE,RRETCODE IS CALLER AUTHORIZED? Y02714 21218402 BZ TABLE(RWORK) YES, DETERMINE REQUESTED SUBP Y02714 21218802 B ERROR11A NO, ABEND BXY Y02714 21219202 SPACE 2 21280001 * SUBPOOL 21290002 SPACE 1 Y02714 21292002 TABLE B SP227 227 @Y30APYF 21294003 B SP228 228 @Y30APYF 21294603 B SP229 229 Y02714 21295203 B SP230 230 Y02714 21296002 B SP231 231 Y02714 21298002 B ERROR11A 232 Y02714 21298402 B SP233 233 21310002 B SP233 234 21320002 B SP233 235 21340002 B SP236 236 21360002 B SP236 237 21380002 B ERROR11A 238 21400002 B SP239 239 Y02714 21420002 B SP250 240 21440002 B SP241 241 21460002 B SP242 242 21480002 B ERROR11A 243 Y02714 21500002 B ERROR11A 244 Y02714 21520002 B SP245 245 21540002 B ERROR11A 246 21560002 B SP242 247 Y02714 21580002 B ERROR11A 248 21600002 B ERROR11A 249 Y02714 21620002 B SP250 250 21640002 B SP251 251 21660002 B SP251 252 21680002 B SP253 253 21700002 B SP254 254 21720002 B SP255 255 Y02714 21740002 SPACE 2 Y02714 21750002 SP229 OI SPFLAGS,FPROTECT FETCH PROTECTED SUBPOOL Y02714 21752002 SP230 L RTCB1,LDATCB GET TCB ADDRESS Y02714 21752402 LA RSPQE,TCBUKYSP GET SPQE POINTER FROM TCB Y02714 21754002 OI SPFLAGS,AUK AUTH. USER KEY SUBPOOL Y02714 21756002 B UKSPQE CONTINUE PROCESSING Y02714 21758002 SPACE 2 Y02714 21758102 SP239 MVI RQSTRKEY,C0 SET REQUESTER KEY TO ZERO Y02714 21761303 LA RSPID,C227 CONVERT TO SP 227 @Y30APYF 21763303 SP227 OI SPFLAGS,FPROTECT FETCH PROTECTED SUBPOOL @Y30APYF 21763603 SP228 OI SPFLAGS,SQA BACKED LIKE SQA @Y30APYF 21763903 B SP241 FIND SPQE ON CSA CHAIN @Y30APYF 21764203 SPACE 2 21764603 SP231 OI SPFLAGS,FPROTECT FETCH PROTECTED SUBPOOL Y02714 21771603 SP241 L RCVT,CVTPTR GET CVT POINTER Y02714 21780103 USING CVT,RCVT Y02714 21783203 L RGDA,CVTGDA GET GDA POINTER Y02714 21786303 DROP RCVT Y02714 21789403 USING GDA,RGDA Y02714 21792503 LA RSPQE,CSASPQEP GET CSA SPQE POINTER Y02714 21795603 DROP RGDA Y02714 21798703 OI SPFLAGS,CSA CSA SUBPOOL Y02714 21801803 MVI LDACBSP,CBSQA CONTROL BLOCKS IN SQA Y02714 21804903 LR RWORK,RCOMRET1 SAVE CSPCHK RETURN ADDRESS @ZA02359 21805503 BAL RCOMRET1,GTSALLOC GET SALLOC LOCK TO PREVENT @ZA02359 21806103 * BUILDING DUPLICATE SPQES @ZA02359 21806703 LR RCOMRET1,RWORK RESTORE RETURN ADDRESS @ZA02359 21807303 SPACE 2 Y02714 21808003 UKSPQE ST RSPQE,SPQESAVE SAVE SPQE PTR FOR GSPQESPC Y02714 21814203 L RSPQE,0(0,RSPQE) GET FIRST SPQE ADDRESS Y02714 21820403 LTR RSPQE,RSPQE IS THERE ONE? Y02714 21823503 BZR RCOMRET1 NO, RETURN WITH ZERO POINTER Y02714 21826603 SR RWORK,RWORK CLEAR FOR SPID Y02714 21829703 UKSPQE1 IC RWORK,SPQEID(0,RSPQE) GET SPQE SPID Y02714 21832803 CR RWORK,RSPID IS THIS SPID REQUESTED? Y02714 21835903 BNE UKSPQE2 NO, GO TRY NEXT Y02714 21839003 CLC RQSTRKEY,SPQEKEY(RSPQE) DOES THE KEY MATCH? Y02714 21842103 BE GETSPQE1 YES, CORRECT SPQE FOUND Y02714 21845203 UKSPQE2 TM SPQEFLGS(RSPQE),LASTSPQE LAST SPQE? Y02714 21848303 BO UKSPQE3 YES Y02714 21851403 L RSPQE,SPQEPTR(0,RSPQE) NO, GET NEXT SPQE Y02714 21854503 B UKSPQE1 CHECK IT Y02714 21857603 SPACE 2 Y02714 21860703 UKSPQE3 SR RSPQE,RSPQE INDICATE SPQE NOT FOUND Y02714 21863803 BR RCOMRET1 RETURN Y02714 21866903 SPACE 2 21870003 SP233 LA RSPID,C20(RSPID) CHANGE SP TO 253,254, OR 255 21873003 LA RWORK,C80(RWORK) CHANGE BRANCH VALUE Y02714 21876003 B TABLE(RWORK) GO TO PROPER ROUTINE 21880003 SPACE 2 Y02714 21883003 SP236 L RTCB1,LDATCB GET TCB ADDRESS Y02711 21886003 LA RSPQE,TCBSWA GET SWA SPQE ADDRESS Y02711 21890003 ST RSPQE,SPQESAVE SAVE SPQE PTR FOR GSPQESPC Y02711 21892003 OI SPFLAGS,SWA SWA SUBPOOL Y02711 21896003 L RSPQE,0(0,RSPQE) GET FIRST SPQE PTR Y02711 21900003 B ANYSPQE GO FIND CORRECT SPQE Y02711 21903003 SPACE 2 21906003 SP242 L RIN15,GFPART GET GET/FREE PART ADDRESS 21910002 LR PARMREG,RSPID PUT SUBPOOL ID IN CORRECT REG Y02714 21920002 MVI FREESW,C0 CLEAR FREESW Y02714 21922002 BAL RRETURN,FRRDELET DELETE FRR BEFORE GET PART @YM07647 21924003 TM FLAGS,BRENTRY BRANCH ENTRY? Y02714 21930002 BZR RIN15 NO, GO TO GET/FREE PART Y02714 21940002 OI LDAFLAGS,LDABRSW INDICATE BRANCH ENTRY Y02714 21942002 MVC BRANCHSV+C28(C4),PASCBSV RESTORE REG 7 POSITION Y02714 21944002 BR RIN15 GO TO GET/FREE PART 21946002 SPACE 2 21948002 SP245 OI SPFLAGS,SQA SET SQA SWITCH Y02714 21980002 MVI LDACBSP,CBSQA CONTROL BLOCKS IN SQA Y02714 21990002 L RCVT,CVTPTR GET CVT POINTER Y02714 22000002 USING CVT,RCVT Y02714 22010002 L RGDA,CVTGDA GET GDA POINTER Y02714 22012002 DROP RCVT Y02714 22014002 USING GDA,RGDA Y02714 22016002 L RSPQE,SQASPQEP GET SQA SPQE POINTER Y02714 22018002 DROP RGDA Y02714 22018402 BR RCOMRET1 RETURN 22020001 SPACE 2 22040001 SP250 SR RSPID,RSPID CHANGE TO SUBPOOL 0 22042002 B PGTSPQE1 TREAT AS IF PP 22044002 SPACE 2 22046002 SP254 L RTCB1,LDATCB GET ADDRESS OF TCB Y02714 22050002 TM TCBFLGS3,TCBABGM REQUESTING TCB ABENDING ? @ZA29616 22052040 L RTCB1,TCBJSTCB GET ADDRESS OF JOBSTEP TCB Y02714 22056040 ST RTCB1,LDATCB SAVE AS REQUESTING TCB Y02714 22060040 BNO SP253 NO, CONTINUE @ZA29616 22064040 OI FLAGS,LDAABGM YES, INDICATE TCB ABENDING @ZA29616 22068040 SP253 OI SPFLAGS,NEEDAQE INDICATE AQE NEEDED Y02714 22080002 SP255 OI SPFLAGS,LSQA SET LSQA SWITCH Y02714 22120002 L RSPQE,LSQAPTR PICK UP LSQA SPQE Y02714 22140002 LTR RSPQE,RSPQE IS THERE AN SPQE? Y02714 22190002 BNZR RCOMRET1 YES, RETURN Y02714 22220002 LA RSPID,C245 NO, CHANGE TO SQA (SP 245) Y02714 22270002 NI SPFLAGS,ALL-LSQA RESET LSQA FLAG Y02714 22280002 B SP245 GO PROCESS AS SUBPOOL 245 22300002 SPACE 2 22310001 * 22520001 * FIND SUBPOOL QUEUE ELEMENT FOR PROBLEM PROGRAM SUBPOOLS 22540001 * AND FOR SUBPOOLS 250, 251, AND 252 22560002 * 22580001 SPACE 1 22600001 PGTSPQE TM MODE,KEY0+SUP KEY 0 AND SUPERVISOR STATE Y02714 22660002 BZ SUPVPPSP YES 22680001 SPACE 2 22700001 PGTSPQE1 L RTCB1,LDATCB GET TCB ADDRESS Y02714 22710002 PGTSPQE2 LA RSPQE,TCBMSS GET SPQE PTR FROM TCB Y02714 22712002 ST RSPQE,SPQESAVE SAVE SPQE PTR FOR GSPQESPC Y02714 22714002 L RSPQE,TCBMSS GET 1ST SPQE Y02714 22720002 OI SPFLAGS,FPROTECT SET FETCH PROTECT FLAG Y02714 22730002 ANYSPQE LTR RSPQE,RSPQE IS THERE ONE? Y02714 22740002 BZR RCOMRET1 NO - RETURN WITH 0 POINTER Y02714 22780002 SR RWORK,RWORK 22800001 GETSPQE IC RWORK,SPQEID(RSPQE) PICK UP SPID 22820001 CR RWORK,RSPID SAME ID? 22840002 BE GETSPQE1 YES - CHECK IF SHARED 22860001 TM SPQEFLGS(RSPQE),LASTSPQE LAST SPQE? 22880002 BZ GETSPQE2 NO 22900001 SR RSPQE,RSPQE INDICATE SPQE NOT FOUND 22920001 BR RCOMRET1 RETURN 22940001 SPACE 2 22960001 GETSPQE2 L RSPQE,SPQEPTR(RSPQE) GET NEXT SPQE Y02714 22980002 B GETSPQE CHECK IT OUT 23020001 SPACE 2 23040001 GETSPQE1 TM SPQEFLGS(RSPQE),SPSHARE SHARED? 23060002 BZ SVSPQEKY NO, CONTINUE Y02714 23080002 L RSPQE,SPDQEAD(RSPQE) LOAD OWNING SPQE Y02714 23100002 SVSPQEKY IC RWORK,SPQEKEY(RSPQE) SAVE SPQE KEY Y02714 23110002 STC RWORK,LSPQEKEY FOR SETTING STORAGE KEY Y02714 23111002 BR RCOMRET1 RETURN - SPQE FOUND 23120001 SPACE 2 23140001 SUPVPPSP TM MODE,SUBFRMN SUBPOOL FREEMAIN? 23160002 BO PGTSPQE1 YES 23180001 LTR RSPID,RSPID IS THIS SUBPOOL 0 Y02714 23190002 BNZ PGTSPQE1 NO, LEAVE AS IS Y02714 23192002 LA RSPID,C252 CHANGE TO SUBPOOL 252 Y02714 23200002 SPACE 2 Y02714 23210002 SP251 L RTCB1,LDATCB GET ADDRESS OF TCB Y02714 23212002 L RTCB1,TCBJSTCB GET ADDRESS OF JOBSTEP TCB Y02714 23214002 ST RTCB1,LDATCB SAVE AS REQUESTING TCB Y02714 23216002 B PGTSPQE2 GO FIND SPQE Y02714 23240002 SPACE 2 23376001 ERROR11A MVI MSGLEN,C4 REASON CODE 0 - MSGLEN OF 4 Y02714 23376802 LA RERROR,ERRB SET ERROR CODE 11 @Z30ENWD 23377003 CLI SVCBYTE,SV5 IS THIS SVC 5? Y02714 23377202 BNE GERROR NO - MSGLEN OK @Z30ENWD 23377603 L RADDR,C0(RADDR) GET ADDRESS TO BE FREED 23377701 MVI MSGLEN,C8 REASON CODE 0 - MSGLEN OF 8 23377801 B GERROR INVALID SUBPOOL @Z30ENWD 23377903 EJECT 23394501 *********************************************************************** 23404502 * 23420001 * ROUND REQUESTED LENGTH TO DOUBLE WORD BOUNDARY 23440001 * 23450002 * IF AQE NEEDED - FLAG REQ4K IS SET IF ROUNDED LENGTH 23452040 * IS EXACTLY 4096 BYTES (1 PAGE) 23454040 * - LENGTH IS INCREMENTED BY 8 23456040 * INPUT 23480001 * RLENGTH - LENGTH REQUESTED 23500002 * RCOMRET1 - RETURN ADDRESS 23510001 * OUTPUT 23520001 * RLENGTH - ROUNDED LENGTH 23540002 * RWORK - 7, USED BY FMCOMMON 23550002 * 23620001 *********************************************************************** 23630002 SPACE 2 Y02714 23632002 CRNDLNTH LA RWORK,C7 ROUND 23640001 AR RLENGTH,RWORK LENGTH 23660001 OR RLENGTH,RWORK TO 8 BYTE 23680001 XR RLENGTH,RWORK MULTIPLE 23700001 TM SPFLAGS,NEEDAQE AQE NEEDED 23720002 BZR RCOMRET1 NO 23740002 C RLENGTH,PAGE LENGTH EXACTLY 4096 BYTES @ZA11822 23744040 BNE NOTAPAGE NO @ZA11822 23748040 OI SPFLAGS,REQ4K INDICATE 4096 BYTE REQUEST @ZA11822 23752040 NOTAPAGE LA RLENGTH,C8(RLENGTH) ADD 8 BYTES TO LNTH FOR AQE @ZA11822 23756040 BR RCOMRET1 RETURN 23780001 EJECT 23800001 *********************************************************************** 23810002 * 23840001 * CREATE AN SPQE FOR A NEW SUBPOOL 23860001 * 23870002 * INPUT 23880001 * RSPID - SUBPOOL ID 23920001 * RCOMRET1 - RETURN ADDRESS 23930001 * OUTPUT 23940001 * RSPQE - ADDRESS OF SPQE 23960001 * WORK 23970002 * RWORK, RIN15 23972002 * 23980001 *********************************************************************** 23990002 SPACE 2 Y02714 24000002 GSPQESPC EQU * 24020001 LR RIN15,RIN1 SAVE PARAMETER POINTER 24040001 ICM RIN1,MASK1,LDACBSP INDICATE CONTROL BLOCK SUBPOOLY02714 24070002 BAL RRETURN,GETMAINC GET SPACE FOR SPQE @Z30ENWD 24120003 LR RSPQE,RIN1 GET SPQE ADDRESS 24160001 L RWORK,SPQESAVE GET ADDRESS OF SPQE POINTER Y02714 24170002 * SAVED BY CSPCHK Y02714 24172002 MVC SPQEPTR(C4,RSPQE),0(RWORK) NEXT SPQE PTR TO SPQE Y02714 24180002 ST RSPQE,0(0,RWORK) NEW SPQE ADDR TO SPQE PTR Y02714 24200002 STC RSPID,SPQEID(RSPQE) SPID TO SPQE 24240001 TM SPFLAGS,CSA+AUK CSA OR AUTH. USER KEY SP? Y02714 24250002 BNZ GTCSAKEY YES, GO GET KEY Y02714 24252002 TM SPFLAGS,SWA SWA SUBPOOL? Y02714 24254002 BO GTSCHEDK YES, GET SCHEDULER KEY Y02714 24256002 LA RWORK,C252 GET COMPARISON VALUE 24256140 CR RSPID,RWORK SUBPOOL 252 REQUESTED? 24256340 BNE GETCBKEY NO, GET KEY FROM TCB 24256640 SR RWORK,RWORK YES, MAKE KEY = 0 24256940 B SAVKEY GO STORE KEY 24257240 GETCBKEY L RTCB1,LDATCB GET TCB ADDRESS Y02714 24257540 IC RWORK,TCBPKF GET TCB KEY Y02714 24258402 SAVKEY STC RWORK,LSPQEKEY SAVE FOR SETTING STORAGE KEYS Y02714 24258802 STC RWORK,SPQEKEY(0,RSPQE) ALSO PLACE IN SPQE Y02714 24259202 OC SPQEPTR(C4,RSPQE),SPQEPTR(RSPQE) FIRST SPQE Y02714 24260002 * IF POINTER = 0 Y02714 24270002 BNZ GSPQESP1 NOT FIRST Y02714 24280002 MVI SPQEFLGS(RSPQE),LASTSPQE INDICATE LAST SPQE 24300002 GSPQESP1 LR RIN1,RIN15 RESTORE REG1 24320002 BR RCOMRET1 RETURN 24340002 SPACE 2 Y02714 24350002 GTCSAKEY IC RWORK,RQSTRKEY GET REQUESTER KEY Y02714 24352002 B SAVKEY GO SAVE IT Y02714 24354002 GTSCHEDK LA RWORK,SCHEDKEY GET SCHEDULER KEY (FOR SWA) Y02711 24356002 B SAVKEY GO SAVE IT Y02711 24358002 EJECT 24360001 *********************************************************************** 24410002 * 26180001 * ROUTINE TO HANDLE FREEING OF LIST REQUESTS 26200001 * 26210002 * INPUT 26220001 * RLENGTH - ADDRESS OF LENGTH LIST 26240001 * RADDR - ADDRESS OF AREA LIST 26260001 * OUTPUT 26280001 * RIN0 - ADDRESS OF CURRENT LENGTH IN LENGTH LIST 26300001 * RIN1 - ADDRESS OF CURRENT ADDRESS IN ADDR LIST 26320001 * WORK 26340002 * RFMRET 26360002 * 26370002 *********************************************************************** 26372002 SPACE 2 Y02714 26374002 FLISTADV LA RFMRET,FMCOM GO TO FMCOM FIRST TIME 26380002 L INDEX,CLHIBYTE MASK TO CLEAR HIGH BYTE 26420002 FLISTAD1 L RIN0,C0(RLENGTH) GET CURRENT LENGTH 26440001 NR RIN0,INDEX CLEAR LAST INDICATOR 26460001 L RIN1,C0(RADDR) GET CURRENT ADDRESS 26480001 NR RIN1,INDEX CLEAR HIGH BYTE Y02714 26530002 STM INDEX,RADDR,SAV911 SAVE NINE THRU ELEVEN 26540001 BALR RCOMRET1,RFMRET PROCESS CURRENT ENTRY 26560001 BAL RCOMRET1,CLSALLOC CLEAR SALLOC LOCK IF OBTAINED Y02751 26570002 LM INDEX,RADDR,SAV911 RESTORE REGS 26580001 TM C0(RLENGTH),CX80 LAST ENTRY? Y02714 26590002 BO FRETRN2 YES Y02714 26592002 LA RLENGTH,C4(RLENGTH) GET NEXT LENGTH ENTRY POINTER 26600002 LA RADDR,C4(RADDR) GET NEXT AREA ENTRY POINTER 26620002 C RLENGTH,LASTLSTA THIS ENTRY > ORIG END OF LIST?Y02714 26630002 BH FRETRN2 YES, TERMINATE REQUEST HERE Y02714 26632002 LA RFMRET,FCOM1 GO TO FCOM1 FOR REST OF LIST 26640002 L RSPQE,SPQESAVE RESTORE SPQE REG 26650002 NI FREESW,FREESWM RESET FREESW EXCEPT FM FLAG Y02714 26652002 B FLISTAD1 26660001 EJECT 26760001 *********************************************************************** 26770002 * 26800001 * ROUTINE TO HANDLE FREEING OF VARIABLE REQUESTS 26820001 * 26830002 * INPUT 26840001 * RADDR - ADDRESS OF AREA; ADDRESS OF LENGTH 26860002 * OUTPUT 26880001 * RIN0 - LENGTH OF AREA TO BE FREED 26900001 * RIN1 - ADDRESS OF AREA TO BE FREED 26920001 * 26940001 *********************************************************************** 26950002 SPACE 2 Y02714 26960002 FVARCHK L RIN1,C4(RADDR) PICK UP LENGTH Y02714 26980002 LA RIN0,0(0,RIN1) CLEAR HIGH BYTE Y02714 26990002 L RIN1,C0(RADDR) PICK UP ADDRESS TO BE FREED 27000001 LA RIN1,0(0,RIN1) CLEAR HIGH BYTE Y02714 27010002 B FMCOMM1A 27020001 SPACE 5 27040002 *********************************************************************** 27050002 * 27080001 * ROUTINE TO HANDLE FREEING OF ELEMENT REQUESTS 27100001 * 27110002 * INPUT 27120001 * RLENGTH - LENGTH 27140001 * RADDR - ADDRESS OF LOCATION CONTAINING ADDRESS 27160001 * OUTPUT 27180001 * RIN0 - LENGTH 27200001 * RIN1 - ADDRESS TO BE FREED 27220001 * 27240001 *********************************************************************** 27250002 SPACE 2 Y02714 27260002 FELEMENT LA RIN0,0(0,RLENGTH) SET LENGTH, CLEAR HIGH BYTE Y02714 27280002 L RIN1,C0(RADDR) GET ADDRESS 27300001 LA RIN1,0(0,RIN1) CLEAR HIGH BYTE Y02714 27310002 B FMCOMM1A 27320001 EJECT 27340001 *********************************************************************** 27350002 * 27380001 * RETURN CODE AND ABEND INTERFACE ROUTINE 27400002 * 27410402 * INPUT 27420001 * RERROR - ERROR CODE 27440003 * RLENGTH - LENGTH REQUESTED 27450002 * RADDR - ADDRESS TO BE FREED 27452002 * RSPID - SPID (GETMAIN ONLY) 27454002 * OUTPUT 27460001 * ABEND CALLED 27470002 * OR 27480002 * RRETCODE - RETURN CODE TO REQUESTER 27490002 * 27500001 * GERROR1 REAL PAGE NOT OBTAINED FOR L/SQA REQUEST 27500803 * GERROR2 NOT USED 27501803 * GERROR3 STORAGE NOT IN SPECIFIED SUBPOOL OR 27504003 * NEGATIVE LENGTH FREEMAIN ON SVC 120 27504803 * GERROR4 PP ATTEMPTING TO FREE ALL OF SP 0 27508003 * SP FREEMAIN FOR INVALID SUBPOOL 27508403 * GERROR5 LENGTH & ADDRESS LISTS OVERLAP 27508803 * GERROR6 PARAMETER LIST NOT IN PP AREA 27509203 * INPUT LIST ADDRESS NOT ON WORD BOUNDARY 27509603 * LIST ADDRESS NOT VALID 27509703 * GERROR7 ISSUED BY FRR, SYSTEM ERROR 27509803 * GERROR8 STORAGE UNAVAILABLE 27509903 * NEGATIVE LENGTH 27510003 * GERROR9 ADDRESS TO FREE NOT A MULTIPLE OF 8 27514003 * GERROR10 AREA BEING FREED OVERLAPS A FREE AREA 27515003 * PART OF AREA BEING FREED IS STILL FIXED 27516003 * GERROR11 PP REQUESTS SP 128-255 27516203 * AUTH. PROGRAM REQUESTS INVALID SUBPOOL 27516403 * GERROR12 NOT USED 27516603 * GERROR13 REQUEST TO FREE CORE FROM SQA NOT OWNED 27517003 * 27521003 *********************************************************************** 27525003 SPACE 2 Y02714 27530003 GERROR EQU * 27540001 SPACE 2 Y02714 27910002 LR RIN1,RERROR LOAD ERROR VALUE @Z30ENWD 27920003 SLL RIN1,C8 MOVE TO BYTE 2 27940002 IC RIN1,SVCBYTE GET SVC TYPE Y02714 27960002 BAL RRETURN,FMPOSTP FREE ANY QUEUED AREAS Y02714 27964402 TM CODE1,CONDTNL CONDITIONAL REQUEST? Y02714 27966002 BO RETCODE YES, GO CHECK R. C. TABLE Y02714 27968002 CKERRCDE LA RWORK,C1 ERROR 1 COMPARE VALUE Y02714 27968402 CR RERROR,RWORK IS THIS ERROR 1? Y02714 27968802 BE ERRMSG3A YES, NO MESSAGE Y02714 27969202 OC LDATCB,LDATCB IS TCB ADDRESS = 0? YO2714 27979202 BZ ERRMSG3A YES, SKIP TABLE ENTRY Y02714 27989202 L RCVT,CVTPTR GET CVT ADDRESS Y02714 28000002 USING CVT,RCVT 28079801 * 28080703 * CVTQMSG POINTS TO A MESSAGE TABLE, THE FIRST WORD OF THE 28081603 * TABLE IS THE ADDRESS OF THE END OF THE TABLE, THE SECOND WORD 28082503 * IS THE ADDRESS OF THE FIRST ENTRY, AN ADDRESS IN THE FIRST 28083403 * WORD OF AN ENTRY INDICATES IT IS IN USE 28084303 * 28085203 L RIN15,CVTQMSG GET ADDRESS OF INFOLIST 28086602 DROP RCVT Y02714 28087002 L RWORK,C0(RIN15) ADDRESS OF END OF LIST 28088601 LA RIN15,C4(RIN15) ADDRESS OF 1ST ENTRY 28090601 L RASCB,PSAAOLD GET CURRENT ASCB ADDRESS Y02714 28092602 ERRMSG1 CR RIN15,RWORK ANY MORE ENTRIES TO SEARCH? 28093101 BE ERRMSG3A NO - CANNOT MAKE ENTRY 28093202 SR RWORK3,RWORK3 ZERO REG FOR COMPARE 28095202 USING INFOLIST,RIN15 28097401 CS RWORK3,RASCB,INFASCB IF AVAIL., STORE ASCB ADDR. Y02714 28099402 BZ ERRMSG2 ENTRY WAS OBTAINED Y02714 28101402 LA RIN15,INFLEN(RIN15) GET NEXT ENTRY 28101501 B ERRMSG1 SEE IF THERE IS ONE 28104501 SPACE 2 28106501 ERRMSG2 MVC INFTCB,PSATOLD STORE CURRENT TCB ADDRESS Y02714 28108502 TM FLAGS,BRENTRY BRANCH ENTRY? Y02714 28108902 BZ SVCENTRY NO - MOVE IN DATA 28109201 OI INFFLG,INFFLG0 SET BRANCH ENTRY SW 28109601 MVC INFBADDR(C4),BRANCHSV+C56 MOVE RETURN ADDRESS 28110501 SVCENTRY STH RIN1,INFCC STORE ABEND CODE 28111301 TM SPFLAGS,NEEDAQE AQE REQUEST? Y02714 28111702 BZ ERRMSG2A NO - NO ADJUSTMENTS NEEDED 28111801 TM FREESW,INCR HAS LENGTH BEEN INCREMENTED? 28111901 BZ ERRMSG2A NO 28112401 SH RLENGTH,H8 DECREMENT LENGTH BY 8 (AQE LEN) 28112802 TM FREESW,DECR HAS ADDRESS BEEN DECREMENTED? 28113201 BZ ERRMSG2A NO 28113301 AH RADDR,H8 INCREMENT ADDRESS BY 8 (AQE LEN) 28113401 ERRMSG2A ST RLENGTH,INFVAR1 ST LENGTH OR PARAMETER LIST ADDR 28114301 TM FREESW,FREESWM FREEMAIN? 28114401 BZ ERRMSG2B NO 28114501 IC RSPID,SAVSPID GET SUBPOOL ID 28114601 ERRMSG2B STC RSPID,INFVAR1 STORE SPID OR ZERO 28114701 TM FREESW,FREESWM FREEMAIN? 28114801 BO FREE YES 28114901 MVC INFVAR2(C4),ABNDATA VARIABLE DATA 28115301 B ERRMSG3 GO SET REASON CODE 28115701 SPACE 2 28115801 FREE MVC INFVAR3(C4),ABNDATA VARIABLE DATA 28115901 TM FLAGS,DEFERR10 IS IT DEFERED ERROR 10 @YM07648 28116003 BZ STVAR2 IF NOT RADDR IS OK @YM07648 28118003 TM MODE,SUBFRMN IS IT SUBPOOL FREEMAIN @YM07648 28120003 BZ STVAR2 IF NOT RADDR IS OK @YM07648 28122003 MVC INFVAR2(4),SVRLB GET CORRECT ADDRESS FROM THE CALL 28127802 * TO RELEASE @YM07648 28133803 B ERRMSG3 GO SET REASON CODE @YM07648 28139803 STVAR2 ST RADDR,INFVAR2 STORE ADDRESS BEING FREED 28145802 ERRMSG3 MVC INFRCL(C1),MSGLEN SET REASON CODE & MSGLEN 28151802 DROP RIN15 Y02714 28157802 ERRMSG3A XC ABNDATA(ABNDATAL),ABNDATA CLEAR WORK FIELDS 28163802 BAL RRETURN,FRRDELET GO DELETE FRR Y02753 28169802 ABENDUSR ABEND (1),DUMP,,SYSTEM ABEND USER Y02714 28175802 SPACE 2 28186801 RETCODE SR RRETCODE,RRETCODE CLEAR FOR RETURN CODE Y02714 28187202 LA RWORK,RCTABLE-1(RERROR) GET RETURN CODE TABLE ADDRY02714 28187602 IC RRETCODE,0(0,RWORK) GET TABLE ENTRY Y02714 28188002 LTR RRETCODE,RRETCODE IS CODE ZERO? Y02714 28188402 BZ CKERRCDE YES, ABEND REQUESTER Y02714 28188502 TM 0(RWORK),CX80 SHOULD REASON CODE BE CHECKED?Y02714 28188602 BZ DLTFRR NO, FINISH PROCESSING Y02714 28190602 LA RWORK,C3 CONSTANT OF 3 Y02714 28192602 CR RERROR,RWORK IS IT ERROR 3? Y02714 28193002 BE ERRCODE3 YES Y02714 28193402 LA RWORK,C8 CONSTANT OF 8 Y02714 28193802 CR RERROR,RWORK IS IT ERROR 8? Y02714 28193902 BE ERRCODE8 YES Y02714 28194002 TM MSGLEN,CX40 ERROR CODE 10, CK REAS CODE Y02714 28194102 BZ RESETBT0 NOT REASON CODE 2 Y02714 28194202 L RTCB1,LDATCB GET TCB ADDRESS Y02714 28194302 TM TCBFBYT1,TCBEOTFM EOT? Y02714 28194802 BZ CHKFPFM NO, CHECK FOR FREEMAIN FROM @ZA05954 28195040 * FREEPART 28195240 B SETRC8 YES, GO SET RETURN CODE @ZA05954 28195740 CHKFPFM TM LDAFLAGS,LDAFPFM FREEMAIN DONE BY FREEPART? @ZA05954 28195940 BZ CKERRCDE NO, ABEND REQUESTER 28196140 SETRC8 LA RRETCODE,C8 YES, SET RETURN CODE OF 8 Y02714 28196340 RESETBT0 N RRETCODE,RCMASK RESET BIT 0 IN RETURN CODE Y02714 28196540 DLTFRR BAL RRETURN,FRRDELET GO DELETE FRR Y02753 28197140 XC ABNDATA(ABNDATAL),ABNDATA CLEAR WORK FIELDS Y02714 28197702 TM FLAGS,BRENTRY BRANCH ENTRY? Y02714 28199802 BO RSTREGS YES Y02714 28201702 L RRETURN,RETSAVE GET RETURN ADDRESS Y02714 28203602 BR RRETURN RETURN TO SVC INTERRUPT HANDLRY02714 28205502 SPACE 2 Y02714 28207402 RSTREGS LM RIN0,RRETURN,BRANCHSV RESTORE REGISTERS Y02714 28209302 USING LDA,RASCB Y02714 28211202 L RASCB,PASCBSV RESTORE ASCB POINTER Y02714 28213102 DROP RASCB Y02714 28215002 BR RRETURN RETURN WITH RETURN CODE Y02714 28216902 SPACE 2 Y02714 28218802 ERRCODE3 TM MSGLEN,CX80 IS REASON CODE 4? Y02714 28220702 BZ RESETBT0 NO, GIVE RETURN CODE Y02714 28222602 B CKERRCDE YES, ABEND Y02714 28224502 SPACE 2 Y02714 28226402 ERRCODE8 TM MSGLEN,CX40 IS REASON CODE 2? Y02714 28228302 BZ RESETBT0 NO, GIVE RETURN CODE Y02714 28230202 B CKERRCDE YES, ABEND Y02714 28232102 EJECT 28234002 *********************************************************************** 28284003 * 28334003 * THIS ROUTINE BUILDS AN AQE AT THE BEGINNING OF THE AREA TO BE 28384003 * ALLOCATED AND CHAINS THE AQE ONTO THE TCBAQE QUEUE. 28434003 * 28437003 * INPUT - RFQE - ADDRESS OF FQE 28446003 * RLENGTH - LENGTH OF REQUEST 28464003 * RCOMRET1 _ RETURN ADDRESS 28464703 * OUTPUT - AQE BUILT & IN TCBAQE QUEUE 28466103 * WORK - RWORK, RIN15 28468203 * 28468503 *********************************************************************** 28469203 SPACE 2 Y02714 28469503 GBLDAQE LA RWORK,C8(RFQE) GET END ADDRESS OF AREA 28469703 SR RWORK,RLENGTH GET BEGINNING ADDRESS 28470003 L RIN15,LDATCB GET TCB ADDRESS Y02714 28482003 USING TCB,RIN15 Y02714 28491003 MVC C0(C4,RWORK),TCBAQE PUT POINTER IN NEW AQE 28494003 ST RLENGTH,C4(RWORK) PUT LENGTH IN AQE 28495603 ST RWORK,TCBAQE PUT AQE IN QUEUE 28496003 DROP RIN15 Y02714 28496403 BR RCOMRET1 RETURN 28496503 EJECT 28496603 *********************************************************************** 28496703 * 28500001 * MAINLINE CONTROL ROUTINE FOR GETMAIN 28520001 * 28530002 * INPUT 28540001 * RIN1 - ADDRESS OF PARAMETER LIST 28560001 * RSPID - SPID 28600001 * RADDR - ADDRESS OR LIST OF ADDRESSES 28620001 * RLENGTH - LENGTH OR LIST OF LENGTHS 28640001 * 28660001 *********************************************************************** 28670002 SPACE 2 Y02714 28680002 GMCOMMON TM CODE1,LISTVAR LIST REQUEST Y02714 28700002 BM GLIST YES 28720001 BZ CLRHIBYT BR IF SINGLE ELEMENT @ZA17759 28730040 * IT IS A VARIABLE REQUEST 28760003 MVC MINMAX(C8),C0(RLENGTH) GET MAX & MIN LENGTHS 28780002 L RLENGTH,MINMAX+4 GET MAXIMUM LENGTH 28820002 * 28822040 * FOR ELEMENT AND VARIABLE REQUESTS, THE HIGH ORDER BYTE 28824040 * OF THE LENGTH IS CLEARED TO PREVENT GOING THROUGH GETMAIN 28826040 * WITH A REQUEST FOR ZERO BYTES. ROUTINE GLIST DOES THIS 28828040 * FOR LIST REQUESTS. A 32 BIT LENGTH VALUE COULD RESULT IN 28830040 * X'00000000' OR X'80000000' AFTER IT WAS ROUNDED UP BY 28830840 * ROUTINE CRNDLNTH. @ZA17759 28831640 * 28832440 CLRHIBYT LA RLENGTH,0(0,RLENGTH) CLEAR HIGH BYTE OF LENGTH @ZA17759 28834040 GMCOMM1 BAL RCOMRET1,CSPCHK FIND SPQE 28840001 GCOMM4 LTR RLENGTH,RLENGTH NEGATIVE REQUEST 28860001 BM GERROR8A YES, ERROR Y02714 28880002 BZ GCOMM11 ZERO BYTES 28900002 LTR RSPQE,RSPQE SPQE FOUND 28920001 BNZ ROUND YES 28940001 BAL RCOMRET1,GSPQESPC GETMAIN & CREATE SPQE 28960001 ROUND BAL RCOMRET1,CRNDLNTH ROUND TO 8 BYTE MULTIPLE 28980001 STM RIN0,RIN15,GMREPSAV SAVE REGS FOR REPEAT REQUEST 29000001 GMREPEAT TM SPFLAGS,LSQA+SQA L/SQA REQUEST 29020002 BNZ CLGFORE YES 29040001 TM CODE1,BOUND PAGE BOUNDARY? Y02714 29050002 BO GLSTDQE YES 29052001 C RLENGTH,MAXFQESZ REQ GREATER THAN MAX FQE SIZE Y02714 29060002 BH GLSTDQE YES 29080001 BAL RCOMRET1,GFRECORE SEARCH FOR FREE STORAGE 29100002 B DET4KBLK NOT FOUND 29120002 BAL RCOMRET1,GFQEUPDT REMOVE STORAGE FROM FQE 29140002 SPACE 2 29160001 GCOMM2 BAL RCOMRET1,CLSALLOC CLEAR SALLOC LOCK IF OBTAINED Y02751 29170002 SPACE 2 Y02751 29172002 GCOMM3 TM CODE1,LISTVAR LIST REQUEST Y02714 29180002 BM GLIST1 YES 29200001 BZ GCOMM8 SINGLE ELEMENT 29220001 ST RFQE,C0(RADDR) ADDRESS ASSIGNED 29240002 ST RLENGTH,C4(RADDR) LENGTH OF AREA ASSIGNED 29260002 GCOMM5 SR RRETCODE,RRETCODE SET RETURN CODE = 0 Y02714 29280002 BAL RRETURN,FMPOSTP FREE ANY QUEUED AREAS Y02714 29290002 BAL RRETURN,FRRDELET GO DELETE FRR Y02753 29291002 TM FLAGS,BRENTRY BRANCH ENTRY? Y02714 29300002 L RRETURN,RETSAVE GET RETURN ADDRESS 29310002 L RIN1,SAVEREG1 RESTORE PARAMETER LIST ADDR Y02714 29312002 BZR RRETURN NO Y02714 29320002 LM RIN0,RRETURN,BRANCHSV RESTORE REGISTERS 29340002 USING LDA,RASCB Y02714 29342002 L RASCB,PASCBSV RESTORE ASCB ADDRESS Y02714 29350002 DROP RASCB Y02714 29352002 BR RRETURN RETURN 29360001 SPACE 2 29380001 GCOMM11 SR RFQE,RFQE ZERO ADDRESS ASSIGNED 29382001 B GCOMM3 STORE ADDRESS IN AREA SPECIFIED 29384002 SPACE 2 29386001 GCOMM8 CLI SVCBYTE,SV10 REGISTER TYPE REQUEST? Y02714 29390002 BNL GCOMM9 YES 29392002 ST RFQE,C0(RADDR) STORE ASSIGNED ADDRESS WHERE INDICATED 29394002 B GCOMM5 RETURN 29396002 SPACE 2 29398001 GCOMM9 LR RIN1,RFQE PUT ADDRESS ASSIGNED IN REG 1 29398402 SR RRETCODE,RRETCODE ZERO RETURN CODE Y02714 29398802 BAL RRETURN,FMPOSTP FREE ANY QUEUED AREAS Y02714 29398902 BAL RRETURN,FRRDELET GO DELETE FRR Y02753 29399102 TM FLAGS,BRENTRY BRANCH ENTRY? Y02714 29399202 BO GCOMM10 YES 29399602 L RRETURN,RETSAVE GET RETURN ADDRESS 29399702 BR RRETURN RETURN 29399802 SPACE 2 29399901 GCOMM10 L RIN0,BRANCHSV RESTORE REG 0 29406602 LM RAREG,RRETURN,BRANCHSV+C8 RESTORE REMAINING REGS 29408602 USING LDA,RASCB Y02714 29409002 L RASCB,PASCBSV RESTORE ASCB ADDRESS Y02714 29410602 DROP RASCB Y02714 29411002 BR RRETURN RETURN 29412602 SPACE 2 29413001 CLGFORE BAL RCOMRET1,GFRECORE SEARCH FOR FREE CORE Y02714 29413302 B GNOTSATA OUT OF VIRTUAL L/SQA 29420001 TM SPFLAGS,NEEDAQE AQE NEEDED? Y02714 29440002 BZ GCOMM6 NO 29460001 BAL RCOMRET1,GBLDAQE BUILD AQE @Z30ENWD 29490003 GCOMM6 BAL RCOMRET1,GFQEUPDT REMOVE CORE FROM FQE 29500001 B GCOMM2 Y02714 29520002 SPACE 2 29640001 GLSTDQE L RDQE,SPDQEPTR(RSPQE) GET FIRST DQE Y02714 29680002 LTR RDQE,RDQE IS THERE ONE Y02714 29700002 BZ NODQE NO 29720002 LASTDQE LR RPREVDQE,RDQE MAKE CURRENT PREVIOUS 29740002 L RDQE,DQEPTR(RPREVDQE) GET NEXT DQE 29760002 LTR RDQE,RDQE IS THERE ONE Y02714 29780002 BNZ LASTDQE YES - KEEP SEARCHING FOR LAST 29800002 DET4KBLK LA SIZEREG,C4095 DETERMINE Y02714 29820002 LR RAREG,SIZEREG NUMBER 29840002 AR SIZEREG,RLENGTH OF 4K 29860002 OR SIZEREG,RAREG BLOCKS 29880002 XR SIZEREG,RAREG REQUIRED 29900002 BAL RRETURN,G4KSRCH1 GET 4K BLOCKS @Y30APYF 29920003 B GCOMM2 FOUND Y02714 29940002 B GNOTSATB NOT FOUND 29980002 SPACE 2 30000001 NODQE LR RPREVDQE,RSPQE MAKE SPQE THE LAST DQE 30020002 B DET4KBLK 30040001 SPACE 2 30042001 GERROR8A MVI MSGLEN,H48 REASON 2 - MSGLEN 8 Y02714 30046002 ST RLENGTH,ABNDATA SAVE FULL LENGTH Y02714 30047002 LA RERROR,ERR8 NEGATIVE LENGTH SPECIFIED @Z30ENWD 30047203 B GERROR @Z30ENWD 30047803 EJECT 30048402 *********************************************************************** 30048802 * 30049202 * GETMAIN LIST PROCESSOR 30049602 * 30049702 * INPUT 30049802 * RADDR - POINTER TO ADDRESS LIST 30049902 * RLENGTH - POINTER TO LENGTH LIST 30050002 * OUTPUT 30052702 * RLENGTH - CURRENT LENGTH REQUESTED 30054702 * WORK 30054802 * RWORK, INDEX 30054902 * 30055102 *********************************************************************** 30055502 SPACE 2 Y02714 30055602 GLIST XC LSTINDEX,LSTINDEX CLEAR INDEX FIELD 30055902 ST RLENGTH,LENSAVE SAVE LENGTH LIST POINTER 30056002 L RLENGTH,C0(RLENGTH) GET 1ST LENGTH 30056102 ST RLENGTH,LASTSAVE SAVE POSSIBLE LAST ENTRY 30056202 LA RLENGTH,0(0,RLENGTH) CLEAR LIST END FLAG Y02714 30056302 B GMCOMM1 PROCESS FIRST ENTRY 30056502 SPACE 2 30056602 GLIST1 L RWORK,LSTINDEX GET ENTRY DISPLACEMENT 30056702 ST RFQE,C0(RWORK,RADDR) STORE ADDRESS IN LIST 30056802 L INDEX,LENSAVE RESTORE LENGTH LIST POINTER 30057102 TM LASTSAVE,CX80 LAST ENTRY? Y02714 30057502 BO GCOMM5 RETURN - LIST SATISFIED 30057902 LA RWORK,C4(RWORK) INCREMENT INDEX 30058002 ST RWORK,LSTINDEX SAVE IT 30058102 L RLENGTH,C0(RWORK,INDEX) GET NEXT LENGTH 30058202 ST RLENGTH,LASTSAVE SAVE POSSIBLE LAST LENGTH 30058302 LA RLENGTH,0(0,RLENGTH) CLEAR LIST END FLAG Y02714 30058402 LA RWORK,0(RWORK,INDEX) GET ADDRESS OF CURRENT LENGTHY02714 30058502 C RWORK,LASTLSTA ORIG END OF LIST EXCEEDED? Y02714 30058602 BH GCOMM5 YES, TERMINATE REQUEST Y02714 30058702 B GCOMM4 PROCESS NEXT LENGTH 30058802 EJECT 30058902 *********************************************************************** 30060402 * 30061702 * TURN ON INHIBIT GETMAIN FLAG FOR REAL STORAGE MANAGEMENT 30061802 * 30061902 * INPUT 30064902 * RCOMRET1 - RETURN ADDRESS 30067602 * OUTPUT 30068002 * PVTBGMS FLAG IN PVT TURNED ON 30068402 * WORK 30068802 * RPVT 30068902 * 30069202 *********************************************************************** 30070002 SPACE 2 30072002 TRNONPVT L RCVT,CVTPTR GET CVT POINTER Y02714 30078002 USING CVT,RCVT Y02714 30081002 L RPVT,CVTPVTP GET POINTER TO PVT 30084002 DROP RCVT 30090002 USING PVT,RPVT 30093002 SPACE 2 30096002 OI PVTFLAG1,PVTBGMS TURN ON PVTBGMS 30099002 BR RCOMRET1 RETURN TO MAINLINE 30102002 SPACE 2 Y02714 30105002 DROP RPVT Y02714 30108002 EJECT 30111002 *********************************************************************** 30114002 * * 30117002 * THE FREEMAIN COMMON ROUTINE IS ENTERED AT VARIOUS ENTRY POINTS * 30120002 * TO HANDLE ALL FREEMAINS. FOR A REGION FREEMAIN, IF A PAGE OR * 30140002 * MULTIPLES OF A PAGE ARE FREED, THE PAGE IS MARKED NOT GETMAINED * 30160001 * AND A RELEASE PAGE IS DONE ON IT TO UNHOOK IT FROM THE PAGING * 30180002 * SUPERVISOR QUEUES. FOR SQA/LSQA THE SAME IS DONE, IN ADDITION THE * 30200001 * RELEASE PAGE CAUSES THE FIXED PAGE TO BE RELEASED. THE VARIOUS * 30220002 * ENTRY POINTS AND THEIR CALLERS ARE: * 30240002 * * 30260001 * ENTRY * 30280001 * * 30300001 * FMCOMMON - FROM ENTRY PROCESSING TO FREE SPACE FOR SVC 5 TYPE* 30320001 * REQUESTS * 30340001 * * 30360001 * FMCOMM1 - FROM ENTRY PROCESSING TO FREE SPACE FOR SVC 10 * 30380001 * AND SVC 120 TYPE REQUESTS * 30400002 * * 30420001 * FCOM1 - FOR SECOND AND SUBSEQUENT ENTRIES IN A LIST * 30440001 * REQUEST TO BYPASS THE SPQE CHECK * 30460001 * * 30480001 * SP253FR - FROM SUBPOOL FREEMAIN (SPFRMAIN) TO FREE AQE AND * 30500001 * AREA ASSOCIATED WITH IT * 30520001 * * 30560001 * SPREL - FROM SPFRMAIN TO FREE DQE AND ALL SPACE ASSOCIATED* 30580002 * WITH IT. * 30600001 * * 30620001 * FMAINC - FROM VIRTUAL STORAGE MANAGEMENT ROUTINES TO FREE * 30630003 * VSM CELLS * 30632003 * * 30634003 * FMAINB - FROM VIRTUAL STORAGE MANAGEMENT ROUTINES TO FREE * 30640002 * CONTROL BLOCKS THAT ARE NOT CELL LENGTH * 30660003 * * 30680001 * CONTENTS OF REGS ON INPUT TO FMAINB * 30700002 * * 30720001 * RIN0 (0) - SUBPOOL ID IN HIGH ORDER BYTE AND LENGTH IN * 30820002 * THREE LOW ORDER BYTES * 30830002 * RIN1 (1) - ADDRESS TO BE FREED * 30890002 * * 31040001 * LDARQSTA - BYTE 0 - FLAGS * 31050002 * BYTE 1 - SUBPOOL FLAGS * 31052002 * BYTE 2 - SVC NUMBER * 31054002 * BYTE 3 - KEY AND MODE * 31056002 * * 31058002 * WHEN REQUEST IS AN SVC 10 OR SVC 120 OR FROM RMBRANCH, * 31060002 * CRBRANCH, OR GLBRANCH * 31070002 * * 31080001 * RIN1 (1) - ADDRESS TO BE FREED OR ZERO IF FREE OF * 31100002 * COMPLETE SUBPOOL * 31120002 * RLENGTH (10) - LENGTH TO BE FREED OR ZERO IF FREE OF * 31160002 * COMPLETE SUBPOOL * 31180002 * * 31200001 * WHEN REQUEST IS AN SVC 5 OR FROM FMBRANCH * 31220001 * * 31240001 * 1 - NORMAL FREEMAIN * 31260001 * * 31280001 * RLENGTH (10) - POINTER TO LENGTH LIST OR LENGTH * 31300002 * RADDR (11) - POINTER TO ADDRESS OR LIST OF ADDRESSES * 31340002 * * 31360001 * 2 - VARIABLE FREEMAIN * 31380001 * * 31400001 * RIN1 (1) - ADDRESS OF PARAMETER LIST * 31420002 * RADDR (11) - POINTER TO TWO WORDS; FIRST WORD ADDRESS, * 31460002 * SECOND WORD CONTAINS LENGTH * 31480002 * * 31500001 *********************************************************************** 31560001 SPACE 2 Y02714 31570002 FMCOMMON TM CODE1,LISTVAR CHECK TYPE OF REQUEST Y02714 31600002 BM FLISTADV LIST REQUEST Y02714 31620002 BO FVARCHK VARIABLE REQUEST Y02714 31640002 B FELEMENT ELEMENT REQUEST 31660002 SPACE 2 Y02714 31670002 FMCOMM1 LTR RIN1,RIN1 SUBPOOL FREEMAIN 31680002 BZ SPFRMAIN YES 31700002 LA RIN1,0(0,RIN1) CLEAR HIGH BYTE OF ADDRESS @ZA14231 31710040 FMCOMM1A BAL RCOMRET1,FMCOM GO TO COMMON PROCESSING ROUTINE 31720002 FRETRN2 SR RRETCODE,RRETCODE ZERO RETURN CODE Y02714 31722002 MVI FREESW,C0 ZERO FREESW 31752001 BAL RRETURN,FMPOSTP DO FREEMAIN POST PROCESSING Y02714 31754002 BAL RRETURN,FRRDELET GO DELETE FRR Y02753 31755002 TM FLAGS,BRENTRY BRANCH ENTRY Y02714 31760002 BO FRETRN3 YES Y02714 31780002 L RRETURN,RETSAVE GET RETURN ADDRESS Y02714 31790002 L RIN1,SAVEREG1 RESTORE REGISTER 1 Y02714 31790402 BR RRETURN RETURN Y02714 31792002 SPACE 2 Y02714 31794002 FRETRN3 LM RIN0,RRETURN,BRANCHSV RESTORE REGS Y02714 31800002 USING LDA,RASCB Y02714 31802002 L RASCB,PASCBSV RESTORE ASCB ADDRESS Y02714 31810002 DROP RASCB Y02714 31812002 BR RRETURN RETURN TO BR ENTRY CALLER 31820003 EJECT 31830003 FMAINC STM RCOMRET1,REGB,CSAVE+C48 SAVE REGS 9-11 @Z30ENWD 31830203 OI CELLFLGS,INCELL SET FLAG FOR FRR USE @Z30ENWD 31830403 L REGA,CVTPTR GET CVT ADDRESS @Z30ENWD 31830603 USING CVT,REGA @Z30ENWD 31830803 C RIN1,CVTSHRVM IS CELL IN PRIVATE AREA? @Z30ENWD 31831003 BL LCLRTN YES, A LOCAL REQUEST @Z30ENWD 31831203 SPACE 31831603 BAL RCOMRET1,GTSALLOC GET THE GLOBAL LOCK @Z30ENWD 31831703 L REGA,CVTGDA GET THE GDA ADDRESS @Z30ENWD 31831803 DROP REGA 31831903 USING GDA,REGA 31832003 LA REGA,GLBLCELL GET THE ANCHOR ADDRESS @Z30ENWD 31834003 B CELRTN RETURN THE CELL @Z30ENWD 31834603 SPACE 31835203 LCLRTN LA REGA,LCLCELL GET THE ANCHOR ADDRESS @Z30ENWD 31835803 OI CELLFLGS,LCLREQ SET FLAG FOR FRR USE @Z30ENWD 31836103 SPACE 31836403 CELRTN L REGB,C0(,REGA) GET POINTER TO FIRST CELL @Z30ENWD 31837603 ST RIN1,C0(,REGA) CHAIN RETURNED CELL @Z30ENWD 31838003 ST REGB,C0(,RIN1) RECHAIN QUEUE @Z30ENWD 31838403 L REGB,C4(,REGA) PICK UP CELL COUNT @Z30ENWD 31838803 LA REGB,C1(REGB) UPDATE COUNT @Z30ENWD 31839203 ST REGB,C4(,REGA) STORE UPDATED COUNT @Z30ENWD 31839603 LM RCOMRET1,REGB,CSAVE+C48 RESTORE REGS 9-11 @Z30ENWD 31840003 NI CELLFLGS,ALL-INCELL-LCLREQ RESET FLAGS @Z30ENWD 31840403 BR RCOMRET1 RETURN TO CALLER @Z30ENWD 31840803 DROP REGA 31842003 SPACE 3 31842503 FMAINB STM RIN0,RIN15,FSAVE SAVE REGS 31843003 MVC DQESAVE1(C32),DQESAVE SAVE DQE AND OTHER POINTERS Y02714 31852003 L RWORK,LDARQSTA SAVE CURRENT Y02714 31854003 ST RWORK,SAVSVTSV REQUEST STATUS Y02714 31856003 L RWORK,SETUPFMB SET UP STATUS FOR FREEMAIN Y02714 31858503 ST RWORK,LDARQSTA OF A CONTROL BLOCK Y02714 31861403 MVC SAVSPID2(1),SAVSPID SAVE SP ID FOR MESSAGES @YM07648 31864403 MVC SAVFRESW,FREESW SAVE CURRENT FREESW Y02714 31867503 MVI FREESW,C0 CLEAR NEW FREESW Y02714 31870403 LR RSPID,RIN0 GET SPID AND LENGTH Y02714 31871403 LA RIN0,0(0,RSPID) CLEAR SPID FROM LENGTH Y02714 31873303 SRL RSPID,C24 MOVE SPID TO LOW ORDER BYTE Y02714 31875303 BAL RCOMRET1,FMCOM GO TO COMMON PROCESSING ROUTINE 31880003 MVC SAVSPID(1),SAVSPID2 REST SP ID FOR MESSAGES @YM07648 31882003 L RWORK,SAVSVTSV RESTORE CURRENT Y02714 31884003 ST RWORK,LDARQSTA REQUEST STATUS Y02714 31886003 LM RIN0,RIN15,FSAVE RESTORE REGS 31888003 MVC DQESAVE(C32),DQESAVE1 RESTORE POINTERS Y02714 31892002 MVC FREESW,SAVFRESW RESTORE FREESW Y02714 31894002 BR RCOMRET1 RETURN 31900002 EJECT 31910003 *********************************************************************** 31920002 * * 31930002 * FMCOM IS THE ROUTINE WHICH HANDLES ALL COMMON FREEMAIN * 31940002 * PROCESSING. EXCEPTIONS TO THIS ARE THE TWO SUBPOOL * 31960002 * FREEMAIN ENTRIES SP253FR AND SPREL. FCOM1 IS ALSO * 31980002 * USED FOR THE SECOND AND ALL SUBSEQUENT ENTRIES OF A LIST * 32000001 * REQUEST TO BYPASS THE SPQE CHECK. * 32020002 * * 32040001 *********************************************************************** 32060001 SPACE 2 Y02714 32062002 FMCOM OI FREESW,FREESWM INDICATE FREEMAIN 32072002 ST RCOMRET1,FMSAVE SAVE RETURN REG 32080001 BAL RCOMRET1,CSPCHK GO TO CHECK FOR SPQE 32100002 FCOM1 LTR RSPQE,RSPQE SUBPOOL FOUND Y02714 32560002 BNZ SPQEFND YES Y02714 32570002 LR RADDR,RIN1 SAVE AREA ADDRESS @YM33014 32575003 MVI MSGLEN,H4C REASON CODE 2 - LENGTH 12 32580002 LA RERROR,ERR3 SET PROPER ERROR CODE @Z30ENWD 32590003 B GERROR3C GO SET UP REMAINING PARAMETERS 32600001 SPACE 2 32602001 SPQEFND TM SPFLAGS,LSQA LSQA REQUEST Y02714 32620002 BZ INLSQA NO 32640002 L RCVT,CVTPTR GET CVT POINTER Y02714 32690002 USING CVT,RCVT Y02714 32692002 L RGDA,CVTGDA GET GDA POINTER Y02714 32694002 DROP RCVT Y02714 32696002 USING GDA,RGDA Y02714 32698002 L RWORK,PASTRT GET PRIVATE AREA SIZE Y02714 32698402 A RWORK,PASIZE ADD LENGTH, GIVES BOTTOM CSA Y02714 32698802 CR RIN1,RWORK IS STORAGE IN SQA? Y02714 32699602 BL INLSQA NO 32700002 L RSPQE,SQASPQEP SQA SPQE INSTEAD OF LSQA Y02714 32720002 DROP RGDA Y02714 32722002 XI SPFLAGS,SQA+LSQA RESET LSQA; SET SQA Y02714 32724002 MVI LDACBSP,CBSQA CONTROL BLOCKS IN SQA @ZA05196 32725040 INLSQA LR RLENGTH,RIN0 LENGTH 32730002 ST RSPQE,SPQESAVE SAVE SPQE REG IN CASE OF LIST 32750002 LR RADDR,RIN1 PICK UP ADDR @YM07655 32751003 LTR RLENGTH,RLENGTH ZERO BYTE REQUEST Y02714 32752002 BZ FMLEAVE YES, RETURN 32754002 BM NEGLEN78 BR IF LENGTH NEGATIVE @YM07655 32755003 LTR RADDR,RADDR TEST FOR NEGATIVE ADDRESS @YM07655 32756003 BM NEGLEN78 BR IF ADDRESS NEGATIVE @YM07655 32757003 BAL RCOMRET1,CRNDLNTH ROUND LENGTH TO MULTIPLE OF 8 BYTES 32760002 * RWORK CONTAINS SEVEN FROM CRNDLNTH 32780002 NR RWORK,RADDR TEST ADDRESS FOR MULTIPLE OF 8 32820002 BNZ GERROR9A ADDRESS NOT A MULTIPLE OF 8 32840002 TM SPFLAGS,NEEDAQE AQE REQUEST Y02714 32860002 BZ DONTBACK NO 32880002 LA RWORK,AQESIZE SUBTRACT AQESIZE (8) FROM Y02714 32900002 SR RADDR,RWORK BEGIN ADDRESS 32920002 SPACE 5 Y02714 32970002 * 32980002 * FMCOMMON - FIND DQE WHICH ENCOMPASSES AREA BEING FREED 32982002 * 32984002 SPACE 2 Y02714 32986002 DONTBACK TM SPFLAGS,SQA+CSA IS THIS SQA OR CSA REQUEST? Y02751 32990002 BZ SCDQE NO Y02751 32992002 BAL RCOMRET1,GTSALLOC GET SALLOC LOCK Y02751 32994002 SCDQE LR RDQE,RSPQE INITIALIZE DQE PTR Y02751 33000002 TM SPFLAGS,SQA+CSA IF SP227, 228, OR 239 SET NOT FIRST 33001003 * DQE @Y30APYF 33001503 BNO NEXTDQE SO FIRST DQE CAN GO AWAY Y02714 33002002 SPACE 2 Y02714 33006202 NOTFIRST OI FREESW,NFRSTDQE SET "NOT FIRST DQE" FOR L/SQA Y02714 33007202 NEXTDQE LR RPREVDQE,RDQE DQE NOW PREVIOUS 33008602 L RDQE,DQEPTR(RPREVDQE) PICK UP DQE 33010002 LTR RDQE,RDQE DQE EXIST 33060002 BNZ NEXT1 YES 33110001 NEGLEN78 MVI MSGLEN,H2C REASON CODE 1 - LENGTH 12 Y02714 33112002 LA RERROR,ERR3 NO DQE FOR SUBPOOL IN WHICH @Z30ENWD 33114003 * FREE IS BEING ATTEMPTED @YM07655 33116003 * OR INVALID LENGTH OR @YM07655 33116603 * ADDRESS (NEGATIVE) 33116903 B GERROR3A SET UP REMAINING PARAMETERS 33118001 SPACE 2 33118401 NEXT1 L RUB,DQELNTH(RDQE) LENGTH OF AREA DESCRIBED BY DQE 33120002 A RUB,DQEBLKAD(RDQE) UPPER BOUND OF DQE 33140002 LR RAUB,RADDR ADDRESS TO BE FREED 33160002 AR RAUB,RLENGTH UPPER BOUND OF AREA TO BE FREED 33180002 C RADDR,DQEBLKAD(RDQE) ADDR LESS THAN LOWER BOUND 33200002 BL NOTFIRST YES NOT RIGHT DQE Y02714 33220002 CLR RAUB,RUB AREA TO BE FREED UPPER BOUND @YM07655 33240003 BH NOTFIRST GREATER THAN DQE UPPER BOUND Y02714 33250003 ST RDQE,DQESAVE SAVE DQE POINTER 33270002 TM SPFLAGS,NEEDAQE AQE REQUEST? Y02714 33300002 ST RPREVDQE,DQESAVE+4 SAVE PREV DQE REG 33301002 BZ NOAQE NO, SKIP AQE PROCESSING 33320002 SPACE 5 Y02714 33322002 * 33324002 * FMCOMMON - REMOVE ANY AQE'S FOR AREA BEING FREED 33326002 * 33328002 SPACE 2 Y02714 33328402 SP253FR L RIN1,LDATCB GET TCB ADDRESS Y02714 33330002 DROP RTCB1 Y02714 33330402 USING TCB,RIN1 Y02714 33332002 L RAQE,TCBAQE PICK UP AQE POINTER Y02714 33340002 LTR RAQE,RAQE TCBAQE ZERO 33360002 BZ ERROR13A YES - ERROR13 33380002 LA RAQE,TCBAQE INITIALIZE PREV 33400002 DROP RIN1 Y02714 33410002 USING TCB,RTCB1 Y02714 33412002 AQECHECK LR RPREVAQE,RAQE SAVE PREV 33420002 L RAQE,AQEPTR(RAQE) PICK UP AQE 33440002 CR RADDR,RAQE ADDRESS LESS THAN AQE ADDR 33460002 BL AQECHECK YES 33480002 LTR RAQE,RAQE END OF CHAIN 33500002 BZ ERROR13A YES ERROR 13 33520002 LR RUB,RAQE AQE ADDRESS 33540002 A RUB,AQELEN(RAQE) UPPER BOUND OF AQE 33560002 CR RAUB,RUB AREA UPPER BOUND GREATER THAN 33580002 BH AQECHECK AQE UPPER BOUND - YES 33600002 BL FREELMID FREEING LOWER OR MIDDLE 33620002 CR RADDR,RAQE FREEING TOP; ALL OF IT? 33640002 BNE FREETOP NO, FREEING TOP PART ONLY 33660002 MVC AQEPTR(FOUR,RPREVAQE),AQEPTR(RAQE) REMOVE AQE FROM CHAIN 33680001 * AS WHOLE AREA IS BEING FREED 33700002 B NOAQE RETURN TO NORMAL PROCESSING 33710002 * 33760003 * FREEING LOWER OR MIDDLE PART OF AN AREA DESCRIBED BY AN AQE 33810003 * 33860003 FREELMID SR RAUB,RWORK SUBTRACT 8 FROM AREA UPPER BOUND FOR 34710002 * NEW OR MOVED AQE 34712002 SR RLENGTH,RWORK SUBTRACT 8 FROM LENGTH FOR SIZE OF 34714002 * AQE (CRNDLNTH HAS ADDED 8) 34716002 ST RAUB,AQEPTR(RPREVAQE) 34718001 LR WORK,RUB OLD AQE UPPER BOUND MINUS NEW 34718402 SR WORK,RAUB AQE START IS LENGTH OF NEW AQE 34718802 ST WORK,AQELEN(RAUB) PLACE LENGTH IN AQE 34719202 CR RADDR,RAQE FREEING BOTTOM ONLY 34719602 BNE FREEMID NO FREEING MIDDLE 34719702 MVC AQEPTR(FOUR,RAUB),AQEPTR(RAQE) MOVE NEXT POINTER FROM 34719802 * OLD TO NEW AQE 34719902 B NOAQE RESUME NORMAL PROCESSING 34726602 * 34726703 * FREEING MIDDLE PART OF AREA DESCRIBED BY AN AQE 34726803 * 34726903 FREEMID ST RAQE,AQEPTR(RAUB) PLACE POINTER TO OLD AQE IN NEW AQE 34728602 AR RADDR,RWORK FREEING MIDDLE SO START ADDRESS MUST 34730602 * BE PLACED BACK AT ITS ORIGINAL 34732602 * LOCATION AS NO AQE IS BEING FREED 34733002 SR RLENGTH,RWORK 8 WAS ADDED TO LENGTH IN CRNDLNTH 34733102 * FOR AN AQE - IT WAS SUBTRACTED 34733202 * WHEN THE NEW AQE WAS BUILT. 34735402 * NOW AS THE MIDDLE IS BEING FREED THE 34737402 * ORIGINAL AQE IS NOT BEING FREED SO 34737502 * THE 8 THAT CRNDLNTH ADDED MUST BE 34739402 * SUBTRACTED ALSO. 34742002 LR RPREVAQE,RADDR ADDR TO BE FREED 34743902 SR RPREVAQE,RAQE START OF AREA TO BE FREED MINUS 34745802 * OLD AQE ADDR IS LENGTH OF OLD AQE 34747702 ST RPREVAQE,AQELEN(RAQE) PLACE LENGTH IN OLD AQE 34749602 B NOAQE RETURN TO NORMAL PROCESSING 34751502 * 34751603 * FREEING TOP PART OF AN AREA DESCRIBED BY AN AQE 34751703 * 34751803 FREETOP AR RADDR,RWORK PLACE ADDR BACK TO ORIGINAL Y02714 34755302 * LOCATION AS AQE IS NOT BEING FREED 34757202 SR RLENGTH,RWORK REPLACE AQE SIZE ADDED BY CRNDLNTH 34759102 LTR RLENGTH,RLENGTH ZERO BYTE FREE 34761002 BZ FMLEAVE YES, RETURN 34762902 L RWORK,AQELEN(RAQE) AQE LENGTH 34764802 SR RWORK,RLENGTH SUBTRACT LENGTH OF AREA TO BE FREED 34766702 ST RWORK,AQELEN(RAQE) NEW LENGTH 34768602 SPACE 5 Y02714 34769002 * 34769402 * FMCOMMON - FIND FQE AND RECONSTRUCT FQE'S TO REFLECT 34769802 * ADDITIONAL FREE AREA 34770202 * 34770302 SPACE 2 Y02714 34770402 NOAQE BAL RCOMRET1,QELOCATE GO TO LOCATE FQE WHOSE LOW ADDR IS 34770602 * LOW OR EQUAL TO THE HIGH BOUND OF 34770702 * THE AREA BEING FREED 34770802 CR RAUB,RLB AREA UPPER BOUND EQUAL TO FQE 34774402 * LOWER BOUND 34776402 BNE CHKFQE NO 34776802 L RWORK,FQELNTH(RFQE) PICK UP LENGTH 34777202 AR RWORK,RLENGTH ADD LENGTH OF AREA BEING FREED 34777602 ST RWORK,FQELNTH(RFQE) PLACE NEW LENGTH IN FQE 34778002 B CKNXTFQE GO TO CHECK NEXT FQE FOR COMBINATION 34778102 SPACE 2 Y02714 34778402 CHKFQE LTR RLB,RLB ANY FQE EXIST ON THIS DQE? Y02714 34785602 BZ CHECTYP NO, CREATE FQE IF NEEDED 34788602 CR RADDR,RUB FQE UPPER BOUND EQUAL ADDRESS? 34791602 BNE CREATFQE NO, MUST CREATE FQE 34794602 TM FQTYPE(RFQE),REGION REGION FQE? 34800002 BZ NOTREG1 NO 34820002 ST RAUB,FQAREA(RFQE) YES, PLACE NEW ADDRESS IN FQE 34840002 L RWORK,FQELNTH(RFQE) PICK UP LENGTH 34860002 B LSQA1 ADJUST LENGTH 34880002 SPACE 2 Y02714 34890002 NOTREG1 OI FREESW,FQEBELOW INDICATE FQE BELOW FREED AREA Y02714 34892002 LA RWORK,FQESLNTH FQE LENGTH Y02714 34900002 LR WORK,RAUB NEW FQE ADDR PLUS FQE LENGTH 34920002 SR WORK,RWORK NEW FQE ADDR 34940002 ST WORK,FQEPTR(RPREVFQE) PLACE MOVED FQE 34960002 MVC FQEPTR(FOUR,WORK),FQEPTR(RFQE) INTO CHAIN 34980001 L RWORK,FQELNTH(RFQE) LENGTH 35000001 LR RFQE,WORK NEW FQE LOCATION 35020002 LSQA1 AR RWORK,RLENGTH NEW FQE LENGTH 35040002 ST RWORK,FQELNTH(RFQE) NEW FQE AREA LENGTH 35060002 B CHECK4K GO TO SEE IF 4K CAN BE RELEASED 35080002 SPACE 2 Y02714 35090002 CREATFQE TM SPFLAGS,SQA+LSQA REGION FQE REQUIRED? Y02714 35100002 BNZ LNTHADJ NO, ADJUST LENGTH Y02714 35120002 LR RWORK,RPREVFQE SAVE PREV FQE POINTER 35130002 ICM RIN1,MASK1,LDACBSP GET SPID FOR FQE Y02714 35160002 BAL RRETURN,GETMAINC OBTAIN FQE @Z30ENWD 35180003 LR RFQE,RIN1 NEW FQE 35240001 LR RPREVFQE,RWORK RESTORE PREV FQE POINTER 35250002 MVI FQTYPE(RFQE),REGION INDICATE REGION FQE 35252002 ST RAUB,FQAREA(RFQE) HIGH ADDRESS OF FREE SPACE 35254002 ADJLNTH ST RLENGTH,FQELNTH(RFQE) PLACE LENGTH IN FQE 35260002 MVC FQEPTR+1(C3,RFQE),FQEPTR+1(RPREVFQE) PREV FQENXT IS NEW 35280001 * FQENXT 35300001 STCM RFQE,MASK,FQEPTR+1(RPREVFQE) NEW FQE IS PREVIOUS FQENXT 35320001 B CHECK4K GO TO SEE IF 4K TO BE RELEASED 35340001 SPACE 2 Y02714 35350002 LNTHADJ LA RWORK,FQESLNTH FQE SIZE Y02714 35360002 LR RFQE,RAUB NEW FQE PLUS FQE SIZE 35380002 SR RFQE,RWORK NEW FQE 35400001 MVI FQTYPE(RFQE),C0 INDICATE NON REGION FQE 35410002 B ADJLNTH ADJUST LENGTH 35420001 SPACE 2 Y02714 35430002 CHECTYP L RWORK,DQELNTH(RPREVFQE) IF NO FQE EXISTS THE PREVIOUS 35440002 * FQE IS A DQE 35460001 CR RLENGTH,RWORK LENGTH OF FREEMAIN EQUAL TO DQESIZE 35480002 BNE CREATFQE NO, GO CREATE FQE 35540002 L RLB,DQEBLKAD(RPREVFQE) LOWER BOUND 35550002 LR RUB,RLENGTH LENGTH OF DQE 35550240 AR RUB,RLB UPPER BOUND 35550440 * 35550640 * THE FREEMAIN IS FOR ALL OF THE SPACE DESCRIBED BY THE DQE. 35550840 * AT LEAST 1 PAGE IS BEING FREEMAINED, AND NO FQE WILL BE 35551040 * REQUIRED. THE PAGE(S) CAN BE PUT BACK INTO AN FBQE IF THE 35551240 * PROPER CONDITIONS EXIST. THE TESTS BELOW CHECK FOR THOSE 35551440 * CONDITIONS. 35551640 * 35552040 ST RPREVFQE,PREVFQSV SAVE PREV POINTER 35554040 TM SPFLAGS,SQA+LSQA SQA OR LSQA SUBPOOL? Y02714 35554440 BZ CHECK4K1 NO @ZA04815 35555040 TM FREESW,NFRSTDQE CAN SPACE GO BACK TO FBQE @ZA04815 35555240 BO CHECK4K1 YES @ZA04815 35556040 B SQABND1 N0 @ZA04815 35556840 SPACE 2 Y02714 35559202 CKNXTFQE L RWORK,FQEPTR(RFQE) PICK UP NEXT FQE 35560001 LA RWORK,0(0,RWORK) CLEAR REGION INDICATOR Y02714 35570002 LTR RWORK,RWORK IS THERE A NEXT FQE? Y02714 35580002 BZ CHECK4K NO CONTINUE PROCESSING 35600001 TM FQTYPE(RWORK),REGION REGION FQE? 35620002 BZ CHECKCOM NO, GET AREA + 8 AS UPPER BOUND 35640002 L WORK,FQAREA(RWORK) UPPER BOUND OF FQE AREA 35660002 B COMBCK GO SEE IF FQE'S CAN BE COMBINED 35680002 SPACE 2 Y02714 35690002 CHECKCOM LA WORK,FQESLNTH(RWORK) FQE ADDR PLUS 8 IS UPPER BOUND 35700002 COMBCK CR WORK,RADDR CAN FQE'S BE COMBINED 35720002 BNE CHECK4K NO, CONTINUE PROCESSING 35740002 OI FREESW,FQEBELOW INDICATE FQE BELOW FREED AREA Y02714 35750002 L WORK,FQELNTH(RWORK) LENGTH OF FQE 35760001 A WORK,FQELNTH(RFQE) ADD ORIGINAL FQE LENGTH 35780001 ST WORK,FQELNTH(RFQE) NEW FQE LENGTH 35800001 MVC FQEPTR(FOUR,RFQE),FQEPTR(RWORK) DEQUEUE FQE 35820002 TM FQTYPE(RFQE),REGION REGION FQE? 35840002 BZ CHECK4K NO, CONTINUE PROCESSING 35860002 LR WORK,RPREVFQE SAVE PREV POINTER 35900002 LR RIN1,RWORK FQE ADDR 35920002 BAL RCOMRET1,FMAINC FREE FQE @Z30ENWD 36000003 LR RPREVFQE,WORK RESTORE PREV FQE POINTER 36060002 SPACE 5 Y02714 36070002 * 36072002 * FMCOMMON - DETERMINE (SEPARATELY FOR REGION AND CSA 36074002 * STORAGE OR FOR SQA AND LSQA STORAGE) WHETHER OR NOT 36076002 * ONE OR MORE COMPLETE PAGES OF STORAGE HAVE BECOME FREE 36078002 * 36078402 SPACE 2 Y02714 36078802 CHECK4K STM RPREVFQE,RFQE,PREVFQSV SAVE PREV AND FQE POINTER 36080002 TM FQTYPE(RFQE),REGION REGION FQE? 36100002 BZ SQABNDRY NO, SQA OR LSQA Y02714 36120002 L RUB,FQAREA(RFQE) FQE AREA EQUALS UPPER BOUND Y02714 36170002 CHECK4K0 LR RLB,RUB TO OBTAIN LOWER BOUND Y02714 36180002 S RLB,FQELNTH(RFQE) SUBTRACT LENGTH TO GET RLB Y02714 36190002 CHECK4K1 LA RWORK,C4095 4K MINUS 1 Y02714 36240002 LR WORK,RUB UPPER BOUND Y02714 36320002 OR WORK,RWORK WORK NOW CONTAINS THE UPPER 36340002 XR WORK,RWORK BOUND OF THE FREE AREA ROUNDED DOWN 36360002 LR RWORK2,RLB LOWER BOUND 36380002 AR RWORK2,RWORK ADD 4K - 1 36400002 OR RWORK2,RWORK RWORK2 NOW CONTAINS THE LOWER 36420002 XR RWORK2,RWORK BOUND OF THE FREE AREA ROUNDED UP 36440002 LR RSIZE,WORK UPPER BOUND 36460002 SR RSIZE,RWORK2 DIFFERENCE OF TWO ROUNDED AREAS 36480002 BNP FMLEAVE IF NEGATIVE OR ZERO NO 4K BLOCKS TO 36500002 * BE RELEASED 36520002 ST RLENGTH,RQSTSIZE SAVE RQSTD SIZE FOR AXX-2 @ZA27672 36521040 B RSTRCDQE GO RESTRUCTURE DQE Y02714 36522002 SPACE 2 Y02714 36524002 SQABNDRY LA RUB,FQESLNTH(RFQE) END OF FREE AREA (FUB) Y02714 36530002 TM FREESW,NFRSTDQE IS THIS FIRST DQE Y02714 36530102 BO CHECK4K0 NO, DON'T KEEP PAGE WITH FQE Y02714 36530202 LR RLB,RUB START WITH FUB AND Y02714 36530402 S RLB,FQELNTH(RFQE) SUBTRACT LENGTH TO GET FLB Y02714 36530802 SQABND1 LA RWORK,C4095 4K MINUS 1 Y02714 36538002 LR WORK,RAUB GET AREA UPPER BOUNDARY Y02714 36546002 AR WORK,RWORK AUB + 4095 Y02714 36556002 OR WORK,RWORK GET AREA UPPER BOUND ROUNDED Y02714 36568002 XR WORK,RWORK UP TO PAGE BOUNDARY (RUB) Y02714 36568402 CR WORK,RUB COMPARE RUB TO FUB Y02714 36568802 BL SQABND2 RUB < FUB, LEAVE RUB AS IS Y02714 36569202 * KEEP PAGE WITH FQE Y02714 36571402 S WORK,PAGE GO DOWN ONE PAGE Y02714 36573102 SQABND2 LR RWORK2,RADDR GET AREA LOWER BOUNDARY Y02714 36573602 TM FREESW,FQEBELOW WAS FQE BELOW AREA? Y02714 36574702 BZ SQABND3 NO Y02714 36575802 LA RIN15,FQESLNTH LENGTH OF FQE Y02714 36576902 SR RWORK2,RIN15 INCLUDE FQE IN AREA Y02714 36578002 SQABND3 OR RWORK2,RWORK GET AREA LOWER BOUND ROUNDED Y02714 36579102 XR RWORK2,RWORK DOWN TO PAGE BOUNDARY (RLB) Y02714 36580202 CR RWORK2,RLB IS RLB < FLB? Y02714 36581302 BNL SQABND4 NO, LEAVE AS IS Y02714 36582402 A RWORK2,PAGE YES, GO UP ONE PAGE Y02714 36583502 SQABND4 LR RSIZE,WORK UPPER BOUND Y02714 36584602 SR RSIZE,RWORK2 DIFFERENCE OF ROUNDED BOUNDS Y02714 36585702 BNP FMLEAVE NO BLOCKS TO RELEASE Y02714 36586802 B TSTSQA KEEP ALL OF FIRST DQE Y02714 36587002 SPACE 5 Y02714 37984402 * 37986402 * FMCOMMON - RESTRUCTURE DQE'S AND THEIR FQE'S TO ACCOUNT 37988402 * FOR AREA JUST FREED 37990402 * 37990802 SPACE 2 Y02714 37990902 SPREL EQU * SUBPOOL FREEMAIN ENTRY Y02714 37995702 RSTRCDQE ST RWORK2,SVRLB SAVE RLB AND Y02714 38000802 ST RSIZE,SVSIZE SIZE FOR LATER Y02714 38005602 L RDQE,DQESAVE RESTORE DQE REG 38010402 L RPREVDQE,DQESAVE+C4 RESTORE PREV DQE REG Y02714 38015202 L RLENGTH,DQELNTH(RDQE) PICK UP LENGTH 38020002 CR RLENGTH,RSIZE WHOLE DQE AREA BEING FREED? 38040002 BNE FPARTDQE NO, FREEING SOME PART OF DQE 38060002 MVC DQEPTR(C4,RPREVDQE),DQEPTR(RDQE) REMOVE DQE FROM Y02714 38080002 * CHAIN 38090002 L RFQE,DQFQEPTR(RDQE) FQE 38100002 LTR RFQE,RFQE FQE EXIST 38160001 BZ FREEDQE NO, FREE DQE 38180002 TM FQTYPE(RFQE),REGION REGION FQE? Y02714 38182002 BZ FREEDQE NO, FREE DQE Y02714 38184002 LR RIN1,RFQE FQE ADDR 38220002 BAL RCOMRET1,FMAINC FREE FQE @Z30ENWD 38240003 FREEDQE LR RIN1,RDQE DQE ADDR 38280003 BAL RCOMRET1,FMAINC FREE DQE @Z30ENWD 38290003 B RSTRLBSZ GO RELEASE PAGES Y02714 38310002 SPACE 2 Y02714 38342002 FPARTDQE A RLENGTH,DQEBLKAD(RDQE) UPPER BOUND OF DQE 38360001 CR RLENGTH,WORK FREEING UPPER END OF DQE 38380002 BNE DQELOWMD NO FREEING BOTTOM OR MIDDLE 38400002 L RWORK,DQELNTH(RDQE) LENGTH OF DQE 38420002 SR RWORK,RSIZE SUBTRACT AMOUNT FREED 38440002 ST RWORK,DQELNTH(RDQE) NEW SIZE OF DQE 38460002 L RFQE,FQESAVE RESTORE FQE REG 38470002 L RLENGTH,FQELNTH(RFQE) LENGTH OF FQE 38480002 LR RWORK,WORK UPPER BOUND OF AREA Y02714 38481002 SR RWORK,RLENGTH LOWER BOUND OF AREA Y02714 38500002 CR RWORK2,RWORK COMPLETE FQE AREA FREED? Y02714 38520002 BNZ ADJREMAN NO, GO ADJUST FQE 38540002 MVC DQFQEPTR+1(C3,RDQE),FQEPTR+1(RFQE) REMOVE FQE FROM 38560002 * CHAIN BY POINTING DQE TO NEXT FQE 38580002 COMFQEFR TM FQTYPE(RFQE),REGION REGION FQE? Y02714 38590002 BZ RSTRLBSZ NO, DON'T FREE IT Y02714 38600002 LR RIN1,RFQE FQE ADDR 38640002 BAL RCOMRET1,FMAINC FREE FQE @Z30ENWD 38680003 B RSTRLBSZ GO RELEASE PAGES Y02714 38720002 SPACE 2 Y02714 38730002 ADJREMAN TM FQTYPE(RFQE),REGION REGION FQE? Y02714 38732002 BZ CRNEWFQE NO, CREATE NEW FQE Y02714 38734002 ST RWORK2,FQAREA(RFQE) NEW START ADDR OF FQE Y02714 38740002 L RLENGTH,FQELNTH(RFQE) FQE LENGTH 38760002 SR RLENGTH,RSIZE SIZE OF FREED AREA 38780002 ST RLENGTH,FQELNTH(RFQE) NEW FQE LENGTH 38800002 B RSTRLBSZ GO RELEASE PAGES Y02714 38810002 SPACE 2 Y02714 38822002 CRNEWFQE LA RWORK,FQESLNTH GET FQE LENGTH Y02714 38824002 SR RWORK2,RWORK NEW FQE ADDRESS Y02714 38826002 L RWORK,FQEPTR(RFQE) GET OLD FORWARD POINTER Y02714 38828002 ST RWORK,FQEPTR(RWORK2) PUT IN NEW FQE Y02714 38828402 ST RWORK2,DQFQEPTR(RDQE) POINT DQE TO NEW FQE Y02714 38828802 L RLENGTH,FQELNTH(RFQE) GET LENGTH IN OLD FQE Y02714 38829202 SR RLENGTH,RSIZE LESS SIZE OF FREED AREA Y02714 38829602 ST RLENGTH,FQELNTH(RWORK2) NEW LENGTH IN NEW FQE Y02714 38829702 B RSTRLBSZ GO RELEASE PAGES Y02714 38829802 SPACE 2 Y02714 38830002 DQELOWMD C RWORK2,DQEBLKAD(RDQE) LOW BOUND OF DQE BEING FREED? 38840002 BNE DQEMIDFR NO, FREEING MIDDLE 38860002 ST WORK,DQEBLKAD(RDQE) NEW DQE START ADDR 38880001 L RLENGTH,DQELNTH(RDQE) ORIGINAL LENGTH 38900002 SR RLENGTH,RSIZE SUBTRACT AMOUNT FREED 38920001 ST RLENGTH,DQELNTH(RDQE) NEW LENGTH OF DQE 38940002 L RFQE,FQESAVE RESTORE FQE REG 38950002 TM FQTYPE(RFQE),REGION REGION FQE? Y02714 38952002 BZ NOTREGFQ NO, PROCESS ACCORDINGLY Y02714 38954002 C WORK,FQAREA(RFQE) COMPLETE FQE AREA BEING FREED? 38960002 BE FREFQE YES, FREE FQE 38980002 GETNEWLN L RLENGTH,FQELNTH(RFQE) LENGTH OF FQE ENCOMPASSING Y02714 39000002 * BLOCKS FREED 39010002 SR RLENGTH,RSIZE NEW LENGTH = LENGTH - 4K BLCKS FREED 39020002 ST RLENGTH,FQELNTH(RFQE) NEW LENGTH IN FQE 39040002 B RSTRLBSZ GO RELEASE PAGES Y02714 39050002 SPACE 2 Y02714 39062002 NOTREGFQ LA RWORK,FQESLNTH(0,RFQE) FQE AREA POINTER Y02714 39065202 CR WORK,RWORK COMPLETE FQE AREA BEING FREED Y02714 39066002 BE FREFQE YES, FQE NOT NEEDED Y02714 39068002 B GETNEWLN NO, UPDATE FQE LENGTH Y02714 39068402 SPACE 2 Y02714 39070002 FREFQE L RPREVFQE,PREVFQSV RESTORE PREVIOUS FQE REG 39080001 XC FQEPTR+1(C3,RPREVFQE),FQEPTR+1(RPREVFQE) ZERO PREVIOUS 39100002 * NEXT POINTER AS IT IS NOW LAST 39120002 B COMFQEFR FREE FQE 39140002 SPACE 2 Y02714 39142002 DQEMIDFR TM SPFLAGS,SQA+LSQA L/SQA FQE? Y02714 39144002 BZ DQEMIDF1 NO, GET FINAL DQE Y02714 39146002 LA RNEWDQE,TEMPDQE YES, USE TEMPORARY DQE TO Y02714 39148002 * AVOID CHANGING FQE'S Y02714 39148102 XC DQFQEPTR(FOUR,RNEWDQE),DQFQEPTR(RNEWDQE) NO FQE'S Y02714 39148202 B DQEMIDF2 NOW; CONTINUE Y02714 39148402 SPACE 2 Y02714 39148802 DQEMIDF1 ICM RIN1,MASK1,LDACBSP GET SPID FOR DQE @Z30ENWD 39160003 BAL RRETURN,GETMAINC OBTAIN DQE @Z30ENWD 39200003 DQEMIDF2 MVC DQEPTR(FOUR,RNEWDQE),DQEPTR(RDQE) MOVE DQENXT Y02714 39240002 * FROM OLD TO NEW DQE 39260002 ST RNEWDQE,DQEPTR(RDQE) POINT OLD DQE TO NEW DQE 39280002 ST WORK,DQEBLKAD(RNEWDQE) START ADDRESS OF NEW DQE 39300002 SR RLENGTH,WORK TO OBTAIN LENGTH OF NEW DQE (RLENGTH 39320002 * CONTAINED UPPER BOUND OF OLD DQE) 39330002 ST RLENGTH,DQELNTH(RNEWDQE) PLACE LENGTH IN NEW DQE 39340002 L RWORK,DQEBLKAD(RDQE) ADDR OF OLD DQE 39360001 LR RLENGTH,RWORK2 UPPER BOUND OF OLD DQE AFTER FREE 39380002 SR RLENGTH,RWORK TO OBTAIN NEW LENGTH OF OLD DQE 39400002 ST RLENGTH,DQELNTH(RDQE) PLACE NEW LENGTH IN OLD DQE 39420002 L RADDR,DQFQEPTR(RDQE) BEGINNING OF FQE QUEUE OF OLD DQE 39440002 L RFQE,FQESAVE RESTORE FQE REG 39450002 TM FQTYPE(RFQE),REGION REGION FQE? Y02714 39452002 BO GETFQEPT YES, GET FQE POINTERS Y02714 39454002 LA RWORK,FQESLNTH(0,RFQE) TOP OF AREA DESCRIBED Y02714 39456002 * BY FQE Y02714 39456102 LA RADDR,FQESLNTH(0,RADDR) TOP OF FIRST FQE Y02714 39465602 B ANYTOP GO DO COMPARE Y02714 39469202 SPACE 2 Y02714 39472802 GETFQEPT L RWORK,FQAREA(RFQE) TOP OF AREA DESCRIBED BY FQE Y02714 39476402 L RADDR,FQAREA(RADDR) NOW HAVE TOP OF AREA DESCRIBED BY 39480001 * FIRST FQE OFF QUEUE 39500002 ANYTOP CR RADDR,RWORK COMPARE TWO AREAS Y02714 39520002 BH MVFQEPTR THE BRANCH WILL BE TAKEN IF PART 39540002 * OF THE OLD FQE QUEUE DESCRIBES OLD 39560002 * FREE AREAS THAT ARE NOW WITHIN 39580002 * THE AREA DESCRIBED BY THE NEW DQE 39600002 **** XC DQFQEPTR(FOUR,RNEWDQE),DQFQEPTR(RNEWDQE) NO FQE'S 39620002 * IN AREA NEW DQE DESCRIBES. THIS 39640002 * INSTRUCTION IS NOT NEEDED AS 39650002 * GETMAINB ZEROED OUT THE NEW DQE 39652002 B UPPERCK GO TO CHECK FOR A REMAINDER ABOVE 39660002 * THE AREA BEING FREED 39680002 SPACE 2 Y02714 39690002 MVFQEPTR MVC DQFQEPTR(FOUR,RNEWDQE),DQFQEPTR(RDQE) NEW DQE NOW HAS 39700002 * OLD DQE FQE PTR 39720002 UPPERCK SR RWORK,WORK IS THERE A REMAINDER OF FREE AREA 39740002 * ABOVE THE 4K BLOCKS FREED 39760002 BZ NOUPPER NO ADJUST QUEUE 39780002 TM FQTYPE(RFQE),REGION REGION FQE? Y02714 39782002 BZ NONRGFQE NO, UPDATE ONLY REQUIRED Y02714 39784002 LR RLENGTH,RNEWDQE SAVE NEW DQE PTR 39790002 ICM RIN1,MASK1,LDACBSP GET SPID FOR FQE Y02714 39852002 BAL RRETURN,GETMAINC GET FQE @Z30ENWD 39860003 LR RIN15,RIN1 NEW FQE 39900002 LR RNEWDQE,RLENGTH RESTORE NEW DQE REG 39920002 MVC FQAREA(FOUR,RIN15),FQAREA(RFQE) ADDR OF FQE DESCRIBING 39960002 * AREA ABOVE 4K BLOCKS FREED. 39980001 MVI FQTYPE(RIN15),FQERGNFL INDICATE REGION FQE 39992001 SETNEWLN ST RWORK,FQELNTH(RIN15) LENGTH IN NEW FQE Y02714 39994002 L RWORK4,PREVFQSV PREVIOUS FQE Y02714 40000002 CR RWORK4,RDQE PREVIOUS FQE THE DQE Y02714 40020002 BNE PREVISFQ NO UPDATE FQE CHAIN 40040002 ST RIN15,DQFQEPTR(RNEWDQE) THIS IS FIRST AND ONLY FQE 40060001 * FOR NEW DQE 40080002 B LOWERCK GO CHECK FOR REMAINDER BELOW 40100001 SPACE 2 Y02714 40102002 NONRGFQE LR RIN15,RFQE NEW FQE = OLD FQE Y02714 40108002 LA RADDR,FQESLNTH GET NON-REGION FQE SIZE Y02714 40108102 SR RFQE,RADDR SAVE OLD FQE IN SPACE BELOW Y02714 40110002 * NEW FQE Y02714 40112002 MVC 0(FQESLNTH,RFQE),0(RIN15) SAVE OLD FQE CONTENTS Y02714 40112102 AR RADDR,RIN15 TOP OF OLD FQE FOR LATER Y02714 40112202 XC FQEPTR(FOUR,RIN15),FQEPTR(RIN15) THIS IS LAST Y02714 40112402 * FQE ON NEW DQE Y02714 40114302 B SETNEWLN GO UPDATE LENGTH Y02714 40116202 SPACE 2 Y02714 40118102 PREVISFQ STCM RIN15,MASK,FQEPTR+1(RWORK4) MAKE NEW FQE NEXT OF Y02714 40120002 * PREVIOUS Y02714 40130002 B LOWERCK GO CHECK FOR REMAINDER BELOW 40140002 SPACE 2 Y02714 40150002 NOUPPER L RADDR,PREVFQSV PREVIOUS FQE 40160001 XC FQEPTR+1(C3,RADDR),FQEPTR+1(RADDR) ZERO NEXT IN 40220002 * PREVIOUS AS IT IS NOW LAST 40222002 TM SPFLAGS,SQA+LSQA L/SQA FQE? Y02714 40224002 BZ LOWERCK1 NO Y02714 40226002 LA RADDR,FQESLNTH(0,RFQE) TOP OF L/SQA FQE AREA Y02714 40228002 B LOWERCK2 CONTINUE Y02714 40228402 SPACE 2 Y02714 40228802 LOWERCK TM SPFLAGS,SQA+LSQA L/SQA FQE? Y02714 40229202 BNZ LOWERCK2 YES, RADDR ALREADY SET Y02714 40229602 LOWERCK1 L RADDR,FQAREA(RFQE) TOP OF FQE AREA Y02714 40240002 LOWERCK2 S RADDR,FQELNTH(RFQE) BOT. OF AREA DESCRIBED BY FQE Y02714 40260002 LR RLENGTH,RWORK2 BOTTOM OF FREED 4K BLOCKS 40280002 SR RLENGTH,RADDR IS THERE A REMAINDER 40300001 BNZ CRFQELOW YES ADJUST OLD FQE TO DESCRIBE IT 40320001 MVC DQFQEPTR+1(C3,RDQE),FQEPTR+1(RFQE) IF NO REMAINDER 40340002 * THEN FQE NEXT OF THE FQE DESCRIBING 40360002 * THE AREA TO BE FREED IS THE FIRST 40380001 * FQE OF THE OLD DQE 40400001 TM SPFLAGS,SQA+LSQA L/SQA FQE? Y02714 40410002 BNZ MOVEDQE YES, GET PERMANENT DQE Y02714 40412002 B COMFQEFR FREE OLD FQE 40420001 SPACE 2 Y02714 40430002 CRFQELOW TM FQTYPE(RFQE),REGION REGION FQE? Y02714 40432002 BO MODFYFQE YES, MODIFY OLD FQE Y02714 40434002 LA RWORK,FQESLNTH GET FQE LENGTH Y02714 40436002 SR RWORK2,RWORK NEW FQE ADDRESS Y02714 40438002 L RWORK,FQEPTR(RFQE) NEXT LOWER FQE Y02714 40438402 ST RWORK,FQEPTR(RWORK2) PUT IN NEW FQE Y02714 40438802 LR RFQE,RWORK2 MAKE NEW, CURRENT Y02714 40439202 B FINISHFQ FINISH FQE Y02714 40439602 SPACE 2 Y02714 40439702 MODFYFQE ST RWORK2,FQAREA(RFQE) START ADDR Y02714 40440002 FINISHFQ ST RLENGTH,FQELNTH(RFQE) NEW LENGTH Y02714 40460002 ST RFQE,DQFQEPTR(RDQE) MAKE THIS FIRST FQE OF OLD Y02714 40480002 * DQE 40490002 TM SPFLAGS,SQA+LSQA L/SQA FQE? Y02714 40490102 BZ RSTRLBSZ NO, GO RELEASE PAGES Y02714 40490202 MOVEDQE ICM RIN1,MASK1,LDACBSP GET SPID @Z30ENWD 40491103 BAL RRETURN,GETMAINC OBTAIN DQE @Z30ENWD 40492103 MVC 0(DQESIZE,RNEWDQE),TEMPDQE MOVE DQE Y02714 40493502 ST RNEWDQE,DQEPTR(0,RDQE) POINT OLD DQE TO NEW DQE Y02714 40493602 SPACE 2 Y02714 40495702 RSTRLBSZ L RWORK2,SVRLB RESTORE RLB AND Y02714 40497702 L RSIZE,SVSIZE SIZE TO BE RELEASED Y02714 40497802 TM SPFLAGS,SQA+LSQA SQA OR LSQA REQUEST? Y02714 40497902 BZ FREE4KR NO, REGION OR CSA REQUEST Y02714 40498002 SPACE 5 Y02714 40508002 * 40510002 * FMCOMMON - RELEASE SQA AND LSQA PAGES AND RETURN THEM 40510402 * TO PROPER FBQE. IN THIS CASE, SQA INCLUDES THOSE CSA @ZA20951 40510540 * SUBPOOLS THAT ARE FIXED (IE. 227, 228, 239). @ZA20951 40510740 * 40510940 SPACE 2 Y02714 40511140 TSTSQA TM SPFLAGS,SQA+CSA SQA (SP245) REQUEST? @ZA20951 40511340 BC NOTMIXED,TSTNIP4K NO, IT IS LSQA OR FIXED CSA @ZA20951 40511540 LR RIN0,RSIZE GET SIZE IN REG 0 FOR SRM Y02714 40512402 BAL RCOMRET1,SRM TELL SRM, SQA FREED Y02714 40512502 TSTNIP4K L RCVT,CVTPTR GET CVT POINTER Y02714 40512602 USING CVT,RCVT Y02714 40512702 L RGDA,CVTGDA GET GDA POINTER Y02714 40513102 DROP RCVT Y02714 40513502 USING GDA,RGDA Y02714 40513902 TM GDAFLAGS,NIPFOURK IS NIP IN PROCESS Y02714 40514002 DROP RGDA Y02714 40514102 BO CKFSTDQE IF NIP IS IN PROCESS RSM Y02714 40514202 * CANNOT BE ENTERED TO RELEASE 40514302 * FIXED PAGES AS NIP IS MANAGING 40514702 * PAGES OF SQA AT THIS TIME 40515102 BAL RAREG,RLSEPAGE GO RELEASE PAGES Y02714 40515502 L RSIZE,GFRESAVE+C60 RESTORE SIZE Y02714 40515902 CKFSTDQE TM FREESW,NFRSTDQE IS "NOT FIRST DQE" SET? Y02714 40516002 BZ FMLEAVE NO, KEEP FIRST DQE Y02714 40516602 STM RIN0,RIN15,MSAVE SAVE ALL REGISTERS Y02714 40517002 RETPGFBQ TM SPFLAGS,CSA CSA SUBPOOL? Y02714 40517402 BZ RETPPFBQ NO Y02714 40517502 LR RIN0,RSIZE GET SIZE IN REG 0 FOR SRM Y02714 40517602 BAL RCOMRET1,SRM TELL SRM, CSA FREED Y02714 40517702 RETPPFBQ LR RADDRM,RWORK2 START ADDRESS Y02714 40518302 TM SPFLAGS,SQA+CSA SQA OR CSA SUBPOOL? Y02714 40518402 BZ RETFBQ0 NO Y02714 40518502 L RCVT,CVTPTR GET CVT POINTER Y02714 40518602 USING CVT,RCVT Y02714 40518702 L RGDA,CVTGDA GET GDA POINTER Y02714 40518802 DROP RCVT Y02714 40519302 USING GDA,RGDA Y02714 40519702 L RPQEM,CSAPQEP GET CSA PQE PTR Y02714 40520102 DROP RGDA Y02714 40520202 B RETFBQ2 CONTINUE Y02714 40520302 SPACE 2 Y02714 40520402 RETFBQ0 TM SPFLAGS,LSQA+SWA+AUK HIGH END SUBPOOL? Y02714 40520502 BNZ RETFBQ1 YES, USE A. S. PQE Y02714 40520602 L RTCB1,LDATCB GET TCB POINTER Y02714 40520702 L RPQEM,TCBPQE DUMMY PQE MINUS 8 Y02714 40520802 L RPQEM,PQEFPQE(RPQEM) REGION PQE Y02714 40520902 B RETFBQ2 CONTINUE Y02714 40521102 SPACE 2 Y02714 40521202 RETFBQ1 L RPQEM,ASDPQE GET A. S. PQE PTR Y02714 40521302 RETFBQ2 LR RSIZEM,RSIZE SIZE TO RETURN TO FBQE Y02714 40521402 BAL RRETURN,MRELEASE RETURN PAGES(S) TO FBQE Y02714 40521502 TM FREESW,NEEDRLSE FURTHER PAGE RELEASE NEEDED? Y02714 40521602 BO RSETNDRL YES Y02714 40521702 RETFBQ3 LM RIN0,RIN15,MSAVE RESTORE ALL REGISTERS Y02714 40521802 B FSMFINTR GO RECORD FOR SMF Y02714 40521902 SPACE 5 40522002 * 40522102 * SUBROUTINE TO INTERFACE WITH THE RSM RELEASE PAGE ROUTINE, 40522203 * RSM MAY RETURN PAGETABLE SPACE TO BE FREED. @Z30ENWD 40523003 * 40523203 SPACE 2 Y02714 40524203 RLSEPAGE STM RIN0,RIN15,GFRESAVE SAVE REGS ACROSS RELEASE CALL Y02714 40525203 BAL RCOMRET1,GTSALLOC GET SALLOC IF NOT ALREADY HELDY02751 40526203 BAL RCOMRET1,TRNONPVT TURN ON GETMAIN INHIBITED FLAG 40527203 LR RIN0,RWORK2 LOWER BOUND Y02714 40528203 LR RIN1,WORK UPPER BOUND Y02714 40529203 L R2,PSAAOLD CURRENT ASCB ADDRESS Y02714 40532003 LR RWORK3,RPVT SAVE PVT ADDRESS Y02714 40532903 USING PVT,RPVT Y02714 40533303 L RIN15,PVTPRELV GET RELEASE ENTRY ADDRESS Y02714 40533803 DROP RPVT Y02714 40534703 BALR RRETURN,RIN15 RELEASE PAGES 40535603 USING PVT,RWORK3 Y02714 40536503 NI PVTFLAG1,ALL-PVTBGMS TURN OFF GETMAIN INHIB. FLAGY02714 40537403 DROP RWORK3 Y02714 40538303 LTR RIN1,R2 ANY STORAGE TO BE FREEMAINED Y02714 40539203 BZ RLSEPG2 NO, CONTINUE Y02714 40539703 L RIN0,FMPGTBSP GET SPID AND LENGTH Y02714 40540203 SPACE 2 Y02714 40542003 LA RWORK,FMAREAS POINT TO START OF CHAIN OF Y02714 40542803 * ANY EXISTING AREAS TO BE FREEDY02714 40543603 QFMAINB1 L RWORK2,C0(0,RWORK) GET NEXT AREA POINTER @Z30ENWD 40544903 LTR RWORK2,RWORK2 IS THERE ONE @Z30ENWD 40545803 BZ QFMAINB2 NO, CHAIN IN HERE @Z30ENWD 40546703 LR RWORK,RWORK2 YES, SET AS PREVIOUS @Z30ENWD 40547603 B QFMAINB1 GO CHECK NEXT @Z30ENWD 40548503 SPACE 2 @Z30ENWD 40549403 QFMAINB2 ST RIN1,C0(0,RWORK) ADD AREA TO QUEUE @Z30ENWD 40550303 RLSEPG1 ST RIN0,C4(0,RIN1) SPID & LENGTH IN WORD 2 @Z30ENWD 40551203 L RIN1,C0(0,RIN1) GET NEXT AREA IN QUEUE @Z30ENWD 40552103 LTR RIN1,RIN1 IS THERE ONE? Y02714 40553003 BNZ RLSEPG1 YES, DO NEXT @Z30ENWD 40553803 SPACE 2 Y02714 40556203 RLSEPG2 LM RIN0,R2,GFRESAVE RESTORE REGS, PRESERVE R.C. Y02714 40557003 LM RLDA,RRETURN,GFRESAVE+C16 AND REG 3 Y02714 40557803 BR RAREG RETURN TO MAIN LINE 40558603 SPACE 5 Y02714 40559403 * 40560903 * FMCOMMON - RELEASE REGION AND CSA PAGES (UNLESS V=R) AND 40561003 * RETURN THEM TO PROPER FBQE 40561203 * 40561403 SPACE 2 Y02714 40561703 FREE4KR TM SPFLAGS,CSA+SWA+AUK CSA, SWA, OR AUK SUBPOOL? Y02714 40561903 BNZ RELSEPGS YES, GO RELEASE PAGES Y02714 40562103 L RTCB1,LDATCB GET TCB POINTER Y02714 40563503 TM TCBFLGS6,TCBRV V=R TASK? Y02714 40564403 BZ RELSEPGS NO, GO RELEASE PAGES Y02714 40565303 STM RIN0,RIN15,MSAVE SAVE REGS Y02714 40566203 LR RADDRM,RWORK2 START ADDRESS OF AREA TO BE RELEASED 40568003 L RPQEM,TCBPQE DUMMY PQE MINUS 8 40568903 L RPQEM,PQEFPQE(RPQEM) PQE 40569803 LR RSIZEM,RSIZE SIZE OF AREA TO BE RELEASED 40570703 BAL RRETURN,MRELEASE RELEASE 4K BLOCKS Y02714 40571603 LM RIN0,RIN15,MSAVE RESTORE REGS 40572503 LA RWORK,C8 KEY ZERO FETCH PROTECT MASK Y02714 40573403 LR RLENGTH,RWORK2 FIRST BLOCK IN WHICH KEYS ARE TO 40574303 * BE SET 40575203 SETAGAIN SSK RWORK,RLENGTH SET KEYS 40577003 LA RLENGTH,C2K(RLENGTH) INCREMENT BY 2K 40577903 CR RLENGTH,WORK END OF AREA TO SET KEYS 40578803 BNE SETAGAIN NO SET NEXT 2K 40579703 B FSMFINTR DON'T UPDATE PAGE TABLES FOR V = R 40580603 SPACE 2 Y02714 40581503 RELSEPGS STM RIN0,RIN15,MSAVE SAVE ALL REGISTERS Y02714 40582403 RELSEPG1 BAL RAREG,RLSEPAGE RELEASE PAGES Y02714 40583303 LTR RRETCODE,RRETCODE IS RETURN CODE ZERO? Y02714 40584203 BZ RESTSIZE YES, RETURN PG(S) TO FBQE Y02714 40586003 LA RAREG,C8 GET AN 8 Y02753 40586903 CR RAREG,RRETCODE IS RETURN CODE 8? Y02753 40587803 BNE RCDPRERR NO, RECORD PG REL. ERROR Y02753 40588703 TM SPFLAGS,CSA CSA SUBPOOL? Y02714 40589603 BO NDRLSFLG YES, DON'T ABEND Y02714 40590503 OI FLAGS,DEFERR10 SET DEFERRED ERROR 10 Y02714 40591403 NDRLSFLG OI FREESW,NEEDRLSE SET FURTHER PG RELEASE NEEDED Y02714 40592303 LR RWORK3,RIN3 SAVE DEFERRED PAGE ADDRESS Y02714 40593203 LR WORK,RIN3 NEW RFUB Y02714 40595003 LR RSIZE,WORK GET NEW SIZE (RFUB - RFLB) TO Y02714 40595903 SR RSIZE,RWORK2 RETURN TO FBQE Y02714 40596803 BP RETPGFBQ RETURN PAGES TO FBQE, IF ANY Y02714 40597703 RSETNDRL NI FREESW,ALL-NEEDRLSE RESET RELEASE NEEDED FLAG Y02714 40598603 LR RWORK2,RWORK3 NEW RFLB = PAGE ABOVE THAT IN Y02714 40599503 A RWORK2,PAGE DEFERRED RELEASE STATUS Y02714 40600403 L WORK,MSAVE+C48 RESTORE ORIGINAL RFUB Y02714 40601303 LR RSIZE,WORK GET NEW SIZE (RFUB - RFLB) Y02714 40602203 SR RSIZE,RWORK2 TO RELEASE Y02714 40604003 ST RWORK2,MSAVE+C28 SAVE UPDATED ADDRESS AND Y02714 40604903 ST RSIZE,MSAVE+C60 SIZE FOR CURRGNTP UPDATE Y02714 40605803 BP RELSEPG1 RELEASE REST OF PAGES Y02714 40606703 B RETFBQ3 CONTINUE PROCESSING Y02714 40607603 SPACE 2 Y02714 40608503 RCDPRERR MVI FRRBRNDX,PGRLSRC4 SET RETURN CODE 4 FOR FRR Y02753 40609403 ABEND X'C0D',DUMP,,SYSTEM GO TO FRR TO RECORD ERROR Y02753 40610303 RESTSIZE L RSIZE,GFRESAVE+C60 RESTORE SIZE Y02714 40611203 B RETPGFBQ GO RETURN STORAGE TO FBQE Y02753 40613003 SPACE 5 Y02753 40613903 * 40614803 * FMCOMMON - DO ANY NECESSARY SMF INTERFACING 40615703 * 40616603 SPACE 2 Y02714 40617503 FSMFINTR TM SPFLAGS,SQA+CSA+LSQA+SWA+AUK SKIP SMF? Y02714 40618403 BNZ FMLEAVE YES Y02714 40619303 LR RBLKAD,RWORK2 START ADDRESS IN 14 - SIZE IS IN 15 40620203 L RDQE,AFMSMF GET FMSMF ENTRY POINT 40622003 BALR RCOMRET1,RDQE GO TO SMF INTERFACE ROUTINE 40622903 SPACE 5 Y02714 40623803 * 40624703 * FMCOMMON - EXIT AND ERROR PROCESSING 40625603 * 40626503 SPACE 2 Y02714 40627403 FMLEAVE TM FLAGS,DEFERR10 IS DEFERRED ERROR 10 SET? Y02714 40628303 BZ FMLEAVE1 NO, GO RETURN Y02714 40629203 LA RERROR,ERRA SET ERROR CODE 10 @Z30ENWD 40631003 MVI MSGLEN,H4C REASON CODE 2 - LENGTH 12 Y02714 40631903 L RLENGTH,RQSTSIZE RESTORE ORIGINAL SIZE @ZA27672 40632340 B GERROR3C GO SAVE TCB ADDRESS Y02714 40632803 SPACE 2 Y02714 40633703 FMLEAVE1 L RCOMRET1,FMSAVE RESTORE RETURN REG 40634603 BR RCOMRET1 RETURN TO FMCOM 40635503 SPACE 2 40636403 GERROR3A OI FREESW,DECR INDICATE ADDRESS DECREMENTED Y02714 40637303 GERROR3B OI FREESW,INCR INDICATE LENGTH INCREMENTED 40638203 GERROR3C MVC ABNDATA,LDATCB SAVE TCB ADDRESS FOR VAR DATA Y02714 40639103 B GERROR GO TO HANDLE ERROR @Z30ENWD 40640103 SPACE 2 40641103 GERROR9A MVI MSGLEN,C12 REASON CODE 0 - LENGTH 12 Y02714 40642103 LA RERROR,ERR9 SET APPROPRIATE ERROR @Z30ENWD 40643103 CLI SVCBYTE,SV5 SVC 5? Y02714 40644103 BE GERROR3B YES - MSGLEN OK 40645103 MVI MSGLEN,C8 CHANGE LENGTH TO 8 40646103 B GERROR3B SET UP REMAINING PARAMETERS 40647103 SPACE 2 40648103 ERROR13A MVI MSGLEN,C12 REASON CODE 0 - MSG LENGTH 12 Y02714 40649103 LA RERROR,ERRD SET APPROPRIATE ERROR @Z30ENWD 40650103 B GERROR3A SET UP REMAINING PARAMETERS 40651103 EJECT 40652103 *********************************************************************** 40653103 * * 40654103 * MRELEASE GIVES BACK 4K BLOCKS TO THE QUEUE OF FREE STORAGE FOR * 40655103 * A REGION. IT ALSO GIVES BACK PARTITIONS TO THE QUEUE OF * 40656103 * UNASSIGNED SYSTEM STORAGE. * 40657103 * * 40658103 * ENTRY: MRELEASE * 40660002 * * 40720001 * INPUT * 40730002 * RSIZEM = SIZE OF AREA TO BE RELEASED * 40740002 * RPQEM = PQE FROM WHICH FBQE CHAIN IS ORIGINED * 40780001 * RADDRM = ADDRESS OF AREA TO BE RELEASED * 40820001 * RRETURN = RETURN REG * 40860001 * LDACBSP = SPID OF CONTROL BLOCKS (SQA OR LSQA) * 40870002 * OUTPUT * 40880002 * ON RETURN - STORAGE RELEASED * 40900002 * WORK * 40910002 * RIN0, RIN1, RPREFBQE, RCOMRET1, RFBQNXT, RBLOCK * 40912002 * * 40920001 *********************************************************************** 40940001 SPACE 2 Y02714 40990002 MRELEASE LA RBLOCK,DUMFBQE INITIALIZE DUMMY FBQE Y02714 41020002 ST RSIZEM,SIZE(RBLOCK) INITIALIZE SIZE 41040001 ST RADDRM,FBQAREA(RBLOCK) INITIALIZE AREA 41060001 LR RPREFBQE,RPQEM PQE IS PREVIOUS FBQE 41080001 L RFBQNXT,FWDPTR(RPREFBQE) FOWARD FBQE IS NEXT FBQE 41100002 OI GMFMSW,GM INDICATE GETMAIN TO BE DONE 41120001 CR RFBQNXT,RPQEM FBQENXT EQUAL PQE - NO FBQE'S 41140001 BNE MFBQEXST NO SOME FBQE'S EXIST 41160001 LR RFBQNXT,RPQEM FBQENXT FOR NEW FBQE WILL BE PQE 41180001 MFOUND ST RBLOCK,FWDPTR(RPREFBQE) RBLOCK IS NEXT TO PREVIOUS 41190002 ST RPREFBQE,BCKPTR(RBLOCK) PREV FBQE IS BACK OF RBLOCK 41220002 ST RFBQNXT,FWDPTR(RBLOCK) FBQENXT IS FORWARD TO RBLOCK 41240002 ST RBLOCK,BCKPTR(RFBQNXT) RBLOCK IS PREV TO NEXT 41250002 B MCKCOMB GO TO CHECK FOR COMBINATION 41280001 SPACE 2 Y02714 41290002 MFBQEXST CLC FBQAREA(FOUR,RBLOCK),FBQAREA(RFBQNXT) DOES RBLOCK 41300002 * DESCRIBE AN AREA LOWER IN 41320002 * ADDRESS THAN FBQE NEXT? 41330002 BL MFOUND YES, PLACE FBQE IN QUEUE 41340002 LR RPREFBQE,RFBQNXT OLD NEXT IS NOW PREVIOUS 41360002 L RFBQNXT,FWDPTR(RFBQNXT) NEW NEXT 41380002 CR RFBQNXT,RPQEM NEXT EQUAL PQE? 41400002 BE MFOUND YES, ADD RBLOCK INTO QUEUE 41420002 B MFBQEXST NO - CHECK NEXT FBQE FOR PROPER SLOT 41440002 SPACE 2 Y02714 41450002 MCKCOMB CR RPREFBQE,RPQEM PREVIOUS FBQE EQUAL PQE? 41460002 ST RPREFBQE,MPTRS SAVE POINTERS FOR LATER QUEUING 41480002 ST RFBQNXT,MPTRS+4 SAVE NEXT ALSO 41490002 BE MSKIP1 YES, CANNOT BE COMBINED 41500002 BAL RCOMRET1,COMBINE GO SEE IF PREV CAN BE COMBINED 41520002 MSKIP1 LR RPREFBQE,RBLOCK A COMBINATION WAS NOT DONE SO 41540002 * RBLOCK IS NOW THE PREVIOUS BLOCK 41560002 * WHEN THE NEXT COMBINATION CHECK 41580002 * IS MADE. IF, HOWEVER, A 41600002 * COMBINATION HAS BEEN DONE, RBLOCK 41620002 * HAS BEEN COMBINED WITH THE PREV FBQE 41640002 * SO THAT RPREFBQE REMAINS THE SAME. 41650002 * THIS RETURN IS PLUS 2 TO ELIMINATE 41660002 * THIS INSTRUCTION. 41680002 CR RFBQNXT,RPQEM NEXT THE PQE 41700002 BE MSKIP2 YES CAN'T COMBINE WITH A PQE 41720002 OI GMFMSW,FIRSTSW TURN ON FIRST TIME THRU SWITCH 41740002 LR RBLOCK,RFBQNXT RBLOCK IS PREV - NEXT IS RBLOCK 41760002 L RFBQNXT,FWDPTR(RFBQNXT) NEW NEXT 41780001 BAL RCOMRET1,COMBINE GO TO SEE IF NEXT CAN BE COMBINED 41800002 NOPR RCOMRET1 NO MORE COMBINATION TO BE DONE 41820002 MSKIP2 L RPREFBQE,MPTRS RESTORE POINTERS 41840002 L RFBQNXT,MPTRS+4 RESTORE NEXT POINTER 41850002 TM GMFMSW,GM GETMAIN TO BE DONE 41860002 BZ MCKFM NO CHECK FOR FREEMAIN 41880002 ICM RIN1,MASK1,LDACBSP INSERT PROPER SUBPOOL ID Y02714 41920002 LR RCOMRET1,RRETURN SAVE RETURN REG 41930002 BAL RRETURN,GETMAINC GET FBQE @Z30ENWD 41940003 LR RRETURN,RCOMRET1 RESTORE RETURN REG 41950002 MVC FWDPTR(FBQESIZE,RIN1),DUMFBQE MOVE INFO IN FROM DUMMY 41960002 L RPREFBQE,BCKPTR(RIN1) PREV AND NEXT FBQE Y02714 41970002 L RFBQNXT,FWDPTR(RIN1) MAY HAVE BEEN CHANGED Y02714 41974002 ST RIN1,FWDPTR(RPREFBQE) NEW IS FORWARD OF PREVIOUS 41980001 ST RIN1,BCKPTR(RFBQNXT) NEW IS BACKWARD OF NEXT 42000002 MCLRSW MVI GMFMSW,OFF CLEAR SWITCHES 42020002 BR RRETURN RETURN 42040002 SPACE 2 Y02714 42050002 MCKFM TM GMFMSW,FM FREEMAIN TO BE DONE 42060002 BZ MCLRSW NO CLEAR SWITCHES AND RETURN 42080002 LR RIN1,RPREFBQE FREE PREVIOUS FBQE 42170002 BAL RCOMRET1,FMAINC FREE THE FBQE @Z30ENWD 42172003 B MCLRSW CLEAR SWITCHES AND RETURN 42173202 SPACE 4 Y02714 42176702 COMBINE L RUB,FBQAREA(RPREFBQE) START OF AREA 42180001 A RUB,SIZE(RPREFBQE) ADD SIZE TO GET UPPER BOUND 42200001 C RUB,FBQAREA(RBLOCK) CAN COMBINATION BE DONE 42220001 BNER RCOMRET1 NO CANNOT COMBINE Y02714 42240002 TM GMFMSW,FIRSTSW FIRST SW ON 42260001 BZ MNFSTSW NO FIRST TIME THRU 42280001 MVC FBQAREA(FOUR,RBLOCK),FBQAREA(RPREFBQE) NEW START ADDRESS 42300001 * FOR RBLOCK 42320002 L RIN1,SIZE(RPREFBQE) SIZE OF PREVIOUS 42340002 A RIN1,SIZE(RBLOCK) SIZE OF RBLOCK 42360002 ST RIN1,SIZE(RBLOCK) PUT NEW SIZE IN 42380002 L RIN1,BCKPTR(RPREFBQE) PREVIOUS PREVIOUS 42400001 ST RBLOCK,FWDPTR(RIN1) RBLOCK IS NOW FORWARD OF PREV 42420002 * PREVIOUS 42440002 ST RIN1,BCKPTR(RBLOCK) PREV PREVIOUS IS NOW BACK 42460001 * OF RBLOCK 42480002 TM GMFMSW,GM GETMAIN SWITCH ON 42500002 BZ MTURNFM NO TURN ON FREEMAIN SW 42520002 MGMOFF NI GMFMSW,ALL-GM TURN OFF GM SW Y02714 42540002 B TWO(RCOMRET1) INDICATE COMBINATION DONE 42560002 SPACE 2 Y02714 42570002 MTURNFM OI GMFMSW,FM INDICATE FREEMAIN NEEDED 42580002 B TWO(RCOMRET1) INDICATE COMBINATION DONE 42600002 SPACE 2 Y02714 42610002 MNFSTSW L RIN1,SIZE(RPREFBQE) PICK UP SIZE OF PREVIOUS 42620002 A RIN1,SIZE(RBLOCK) SIZE TO BE COMBINED 42640002 ST RIN1,SIZE(RPREFBQE) COMBINE SIZES 42660002 ST RFBQNXT,FWDPTR(RPREFBQE) SET NEXT AS FWD TO PREV Y02714 42710002 ST RPREFBQE,BCKPTR(RFBQNXT) SET PREV AS BACK TO NEXT 42720002 B MGMOFF TURN OFF GM SWITCH AND RETURN 42740002 EJECT 42750001 *********************************************************************** 42760001 * * 42780001 * THE SPFRMAIN ROUTINE HANDLES THE FREEING OF AN ENTIRE SUBPOOL. * 42800001 * PROCESSING IS DONE FOR BOTH REGION REQUESTS AND FOR SUBPOOLS * 42840002 * 253 (LSQA) AND 236 AND 237 (SWA). * 42860002 * * 42900001 * INPUT: RSPID = SUBPOOL ID * 42920002 * RIN0 = 0 TO INDICATE SUBPOOL FREEMAIN (LENGTH) * 42930002 * RIN1 = 0 TO INDICATE SUBPOOL FREEMAIN (ADDRESS) * 42960002 * * 43100001 *********************************************************************** 43120001 SPACE 2 Y02714 43122002 SPFRMAIN OI FREESW,FREESWM INDICATE FREEMAIN 43130001 STC RSPID,SAVSPID SAVE SPID FOR FREEMAIN ERROR Y02714 43135002 LTR RIN0,RIN0 LENGTH EQUAL ZERO Y02714 43140002 BNZ GERROR3D NO, ERROR 43160002 STC RSPID,SPID TEST AREA 43180002 CLI SPID,C128 SUBPOOL < 128? Y02714 43190002 BL SOK YES Y02714 43192002 CLI SPID,C253 SUBPOOL > 253? Y02714 43194002 BH GERROR4A YES, ERROR Y02714 43196002 CLI SPID,C250 SUBPOOL >= 250? Y02714 43196402 BNL SOK YES Y02714 43196802 CLI SPID,C237 SUBPOOL = 237? Y02714 43198002 BE SOK YES Y02714 43198402 CLI SPID,C236 SUBPOOL = 236? Y02714 43198802 BE SOK YES Y02714 43199202 CLI SPID,C229 SUBPOOL = 229? Y02714 43199302 BE SOK YES Y02714 43199402 CLI SPID,C230 SUBPOOL = 230? Y02714 43199502 BE SOK YES Y02714 43199602 CLI SPID,C233 SUBPOOL = 233? Y02714 43199902 BNE GERROR4A NO, ERROR Y02714 43200002 SOK OI MODE,SUBFRMN INDICATE SUBPOOL FREEMAIN 43400002 BAL RCOMRET1,CSPCHK GO TO OBTAIN SPQE 43420002 LTR RSPQE,RSPQE SUBPOOL FOUND 43440002 BZ FRETRN2 NO RETURN Y02714 43480002 TM MODE,KEY0 SUPERVISOR KEY Y02714 43500002 BZ SLSQACK YES, CHECK FOR AQE REQUEST 43520002 CLI SPID,C0 SUBPOOL ZERO REQUEST Y02714 43530002 BZ GERROR4A YES, ABEND 43560002 SLSQACK CLI SPID,C253 253 REQUEST 43580002 BE SAQE YES, FREE SUBPOOL 253 43600002 LR RPRSDQE,RSPQE SPQE IS FIRST PREV DQE PTR 43620002 ST RPRSDQE,DQESAVE+4 SAVE PREVIOUS POINTER FOR FREEMAIN 43630002 SPFRET L RDQE,DQEPTR(RPRSDQE) PICK UP FIRST OR NEXT DQE 43640001 LTR RDQE,RDQE END OF QUEUE 43660002 BZ FRETRN2 YES, RETURN @Z30ENWD 43700003 * 43705003 * FREE EACH FQE 43710003 * 43715003 L RFQE,DQFQEPTR(RDQE) FIRST FQE 43720002 SCKNXTFQ LA RFQE,0(0,RFQE) CLEAR REGION INDICATOR Y02714 43730002 LTR RFQE,RFQE END OF QUEUE Y02714 43740002 BZ SFQEND YES, SET UP TO FREE DQE 43760002 LR RIN1,RFQE FQE TO FREE 43800002 L RFQE,FQEPTR(RFQE) NEXT FQE PTR 43820002 BAL RCOMRET1,FMAINC FREE FQE @Z30ENWD 43840003 B SCKNXTFQ CHECK NEXT FQE 43860002 * 43870003 * FREE SPACE DESCRIBED BY DQE 43873003 * 43876003 SFQEND LA RCOMRET1,SPFRET RETURN TO PROCESS NEXT DQE 43880002 ST RCOMRET1,FMSAVE 43890001 XC DQFQEPTR(FOUR,RDQE),DQFQEPTR(RDQE) ZERO FQE PTR 43900001 ST RDQE,DQESAVE FOR FMCOMMON 43920001 L RSIZE,DQELNTH(RDQE) SIZE TO BE RELEASED 43940002 L RWORK2,DQEBLKAD(RDQE) START ADDR 43960001 LA WORK,0(RSIZE,RWORK2) UPPER BOUND Y02714 43970002 B SPREL FREE DQE AND AREA, RETURN WILL BE BY 43980002 * FMLEAVE TO SPFRET 44000001 * 44002003 * SUBPOOL FREEMAIN IS FOR SUBPOOL 253 44004003 * 44006003 SAQE LA RCOMRET1,SP253RET RETURN REG 44020001 ST RCOMRET1,FMSAVE 44030001 SP253RET L RTCB1,LDATCB GET TCB ADDRESS Y02714 44032002 L RAQE,TCBAQE PICK UP AQE QUEUE Y02714 44040002 LTR RAQE,RAQE END OF QUEUE 44060001 BZ FRETRN2 YES, RETURN @Z30ENWD 44100003 L RCVT,CVTPTR GET CVT POINTER Y02714 44110002 USING CVT,RCVT Y02714 44112002 L RGDA,CVTGDA GET GDA POINTER Y02714 44114002 DROP RCVT Y02714 44116002 USING GDA,RGDA Y02714 44118002 L RWORK,PASTRT GET PRIVATE AREA START Y02714 44118402 A RWORK,PASIZE ADD LENGTH, GIVES BOTTOM CSA Y02714 44118802 CR RAQE,RWORK IS AQE IN SQA? Y02714 44119602 BL SNOTSQA NO, CONTINUE PROCESSING 44140002 L RSPQE,SQASPQEP SQA SPQE Y02714 44160002 DROP RGDA Y02714 44170002 MVI SPFLAGS,SQA INDICATE SQA REQUEST Y02714 44172002 B SSQA CONTINUE PROCESSING 44180002 SPACE 2 Y02714 44190002 SNOTSQA L RSPQE,LSQAPTR LSQA SPQE Y02714 44200002 MVI SPFLAGS,LSQA INDICATE LSQA REQUEST Y02714 44220002 SSQA L RLENGTH,AQELEN(RAQE) LENGTH Y02714 44240002 LR RADDR,RAQE ADDRESS TO BE FREED IS AQE ADDR 44260001 L RDQE,SPDQEPTR(RSPQE) FIRST DQE ADDRESS 44270002 LR RPREVDQE,RSPQE SPQE IS PREVIOUS DQE Y02714 44280002 LA RAUB,0(RLENGTH,RADDR) UPPER BOUND OF AREA Y02714 44290402 SPFRDQAD L RIN0,DQEBLKAD(0,RDQE) START ADDRESS IN DQE Y02714 44292802 CR RADDR,RIN0 IS AREA AT OR ABOVE THIS Y02714 44293202 BL SPFRNXDQ NO, TRY NEXT DQE Y02714 44293602 A RIN0,DQELNTH(0,RDQE) TOP OF AREA IN DQE Y02714 44293702 CR RAUB,RIN0 IS AREA AT OR BELOW THIS Y02714 44293802 BNH SPFRDQFN YES, CORRECT DQE Y02714 44293902 SPFRNXDQ LR RPREVDQE,RDQE DQE IS NOW PREVIOUS Y02714 44295902 L RDQE,DQEPTR(0,RDQE) POINT TO NEXT DQE Y02714 44300402 OI FREESW,NFRSTDQE INDICATE THIS ISN'T FIRST DQE Y02714 44300802 LTR RDQE,RDQE IS THERE ONE Y02714 44301202 BNZ SPFRDQAD YES, CHECK IT Y02714 44301602 LA RIN0,SPFMERR INDICATE ERROR TYPE Y02753 44301702 L RBASE1,BASE101 SET BASE FOR CSECT01 @Y30APYF 44301803 USING G4KSRCH,RBASE1 @Y30APYF 44304003 B STBRNDX GO TO FRR, QUEUES MESSED UP Y02753 44305003 USING BASE1,RBASE1 REG ALREADY SET @Y30APYF 44305503 SPACE 2 44306003 SPFRDQFN ST RDQE,DQESAVE SAVE DQE FOR FMCOMMON Y02714 44308003 ST RPREVDQE,DQESAVE+C4 SAVE PREVIOUS DQE ALSO Y02714 44309703 B SP253FR GO FREE AREA DESCRIBED BY Y02714 44311703 * AQE, RETURN IS BY FMLEAVE 44313703 * TO SP253RET 44315703 SPACE 2 Y02714 44317703 GERROR3D MVI MSGLEN,H8C REASON CODE 4 - LENGTH 12 44319703 SR RADDR,RADDR ZERO ADDRESS POINTER 44321703 MVC ABNDATA,LDATCB SAVE TCB ADDRESS FOR VAR DATA Y02714 44323703 LA RERROR,ERR3 0 LENGTH NOT SPECIFIED FOR @Z30ENWD 44323903 B GERROR SUBPOOL FREEMAIN @Z30ENWD 44325903 SPACE 2 44329703 GERROR4A MVI MSGLEN,C8 REASON CODE 0 - LENGTH 8 44331703 SR RADDR,RADDR 0 ADDRESS POINTER 44333703 LA RERROR,ERR4 INVALID SP FREEMAIN REQUEST @Z30ENWD 44335703 B GERROR @Z30ENWD 44336703 EJECT 44337703 *********************************************************************** 44340001 * * 44360001 * THE QELOCATE ROUTINE FINDS AN FQE WHOSE ADDRESS IS EQUAL TO OR * 44380002 * LESS THAN THE HIGH BOUND OF THE AREA BEING FREED. IT ALSO VALIDITY * 44420002 * CHECKS THE REQUEST TO SEE THAT THE AREA BEING FREED DOES NOT * 44460001 * OVERLAP AN AREA WHICH IS PRESENTLY FREE. * 44500002 * * 44520001 * INPUT: RADDR - ADDRESS OF AREA BEING FREED * 44540002 * RLENGTH - LENGTH OF AREA BEING FREED * 44580002 * RAUB - UPPER BOUND OF AREA BEING FREED * 44620002 * RDQE - DQE INCLUDING AREA TO BE FREED * 44660002 * RCOMRET1 - RETURN ADDRESS * 44661002 * * 44720001 * OUTPUT: RFQE - FQE WHOSE ADDR IS EQUAL TO OR LESS THAN * 44740002 * HIGH BOUND OF AREA BEING FREED * 44780002 * RPREVFQE - FQE PREV TO RFQE * 44820002 * RUB - UPPER BOUND OF FQE * 44860002 * RLB - LOWER BOUND OF FQE * 44920002 * * 44921002 * WORK: RWORK, RWORK4, RIN15 * 44922002 * * 44940001 * THE FIRST SECTION OF THIS ROUTINE HAS BEEN OPTIMIZED FOR SPEED. * 44941002 * DO NOT MAKE CHANGES WITHOUT CONSIDERING THEIR EFFECT UPON * 44942002 * EXECUTION TIME. * 44943002 * * 44944002 * REGISTER USAGE * 44945002 * * 44946002 * REG NAME CONTAINS * 44947002 * * 44948002 * 0 RUB UPPER BOUND OF FQE * 44949002 * 1 RPREVFQE PREVIOUS FQE * 44950002 * 2 RFQE CURRENT FQE * 44951002 * 3 RDQE DQE INCLUDING AREA TO BE FREED (ON ENTRY) * 44952002 * RLB LOWER BOUND OF FQE (DURING LOOP) * 44953002 * 4 RLDA LDA ADDRESS * 44954002 * 5 RERROR ERROR CODE * 44955003 * 6 RWORK NEXT FQE (PRELOADED) * 44956002 * 7 RAUB UPPER BOUND OF AREA BEING FREED * 44957002 * 8 RBASE1 FIRST BASE REGISTER * 44958002 * 9 RCOMRET1 RETURN ADDRESS * 44959002 * 10 RLENGTH LENGTH OF AREA BEING FREED * 44959202 * 11 RADDR ADDRESS OF AREA BEING FREED * 44959402 * 12 NOT USED * 44959602 * 13 RBASE2 SECOND BASE REGISTER * 44959802 * 14 RWORK4 MASK TO CLEAR HIGH BIT OF FQE * 44959902 * 15 RIN15 LOOP BRANCH ADDRESS * 44960902 * * 44961102 *********************************************************************** 44961902 SPACE 2 Y02714 44970002 CNOP 4,8 PLACE LOOPS ON DOUBLE WORD Y02714 44971002 QELOCATE LR RPREVFQE,RDQE INITIALIZE PREV FQE IS DQE 44980002 L RFQE,FQEPTR(RPREVFQE) GET FIRST FQE 45000002 SLR RLB,RLB IN CASE FQE DOESN'T EXIST Y02714 45010002 LA RFQE,0(0,RFQE) CLEAR REGION INDICATOR Y02714 45020002 LTR RFQE,RFQE FQE EXIST? Y02714 45030002 BZR RCOMRET1 NO, RETURN Y02714 45040002 TM FQTYPE(RFQE),REGION REGION FQE? 45060002 BO QREG YES Y02714 45061002 LA RIN15,QNREG LOOP BRANCH ADDRESS Y02714 45062002 QNREG L RWORK,FQEPTR(0,RFQE) PRELOAD NEXT FQE ADDRESS Y02714 45064002 LA RUB,FQESLNTH(0,RFQE) UPPER BOUND OF FQE Y02714 45065002 LR RLB,RUB GET LOWER BOUND FROM UPPER Y02714 45066002 SL RLB,FQELNTH(0,RFQE) BOUND MINUS LENGTH Y02714 45067002 CLR RLB,RAUB LOWER BOUND OF FQE LESS THAN Y02714 45220002 * UPPER BOUND OF AREA? 45260002 BL QCKOVLP YES, RIGHT FQE, CHECK FOR OVERLAP 45280002 BE QTEMP CHECK FOR OVERLAP OF NEXT FQE 45300002 LR RPREVFQE,RFQE MAKE CURRENT FQE PREVIOUS 45320002 LTR RFQE,RWORK GET NEXT FQE Y02714 45321002 BNZR RIN15 IF THERE IS ONE CHECK IT Y02714 45322002 BR RCOMRET1 NONE, RETURN Y02714 45323002 SPACE 2 Y02714 45324002 QREG L RWORK4,CLRHIBIT MASK TO CLEAR FQE HIGH BIT Y02714 45325002 LA RIN15,QREG1 LOOP BRANCH ADDRESS Y02714 45326002 QREG1 L RUB,FQAREA(0,RFQE) UPPER BOUND OF FQE Y02714 45327002 L RWORK,FQEPTR(0,RFQE) PRELOAD NEXT FQE ADDRESS Y02714 45328002 LR RLB,RUB GET LOWER BOUND FROM UPPER Y02714 45329002 SL RLB,FQELNTH(0,RFQE) BOUND MINUS LENGTH Y02714 45330002 CLR RLB,RAUB LOWER BOUND OF FQE LESS THAN Y02714 45331002 * UPPER BOUND OF AREA? Y02714 45332002 BL QCKOVLP YES, RIGHT FQE, CHECK OVERLAP Y02714 45333002 BE QTEMP CHECK FOR OVERLAP OF NEXT FQE Y02714 45334002 LR RPREVFQE,RFQE MAKE CURRENT FQE PREVIOUS Y02714 45335002 LR RFQE,RWORK GET NEXT FQE Y02714 45336002 NR RFQE,RWORK4 IS THERE ONE Y02714 45337002 BNZR RIN15 YES, CHECK IT Y02714 45338002 BR RCOMRET1 NO, RETURN Y02714 45339002 SPACE 2 Y02714 45340002 * END OF OPTIMIZED SECTION 45341002 SPACE 2 Y02714 45370002 QCKOVLP CR RUB,RADDR FQE UPPER BOUND GREATER THAN RADDR 45380002 BH ERROR10A YES, AREA TO BE FREED OVERLAPS AN 45400002 * AREA WHICH IS PRESENTLY FREE 45420002 BR RCOMRET1 RETURN FQE FOUND 45440002 SPACE 2 Y02714 45450002 QTEMP L RWORK,FQEPTR(RFQE) NEXT FQE 45460002 LA RWORK,0(0,RWORK) CLEAR REGION INDICATOR Y02714 45470002 LTR RWORK,RWORK ANOTHER FQE EXIST? Y02714 45480002 BZR RCOMRET1 NO - CAN'T OVERLAP - RETURN Y02714 45500002 TM FQTYPE(RWORK),REGION REGION FQE 45520001 BZ QNOTREG1 NO 45540002 L RWORK,FQAREA(RWORK) UPPER BOUND OF NEXT FQE 45560001 B QUPPRCK CHECK FOR OVERLAP 45580002 SPACE 2 Y02714 45590002 QNOTREG1 LA RWORK,FQESLNTH(RWORK) UPPER BOUND OF NEXT FQE Y02714 45600002 QUPPRCK CR RWORK,RADDR OVERLAP? 45620002 BH ERROR10C YES, GO TO GERROR 45640002 BR RCOMRET1 NO RETURN FQE FOUND 45660001 SPACE 2 45670001 ERROR10A CR RUB,RAUB IS FQE HIGH ADDRESS GREATER THAN 45672001 * UPPER BOUND OF AREA BEING FREED? 45674001 BL ERROR10B NO 45676401 LR RWORK,RAUB GET HIGH AREA ADDRESS YA00829 45677203 CR RADDR,RLB IS AREA LOW ADDRESS GREATER YA00829 45677303 * THAN FQE LOWER BOUND? YA00829 45677403 BH ERROR10C YES YA00829 45677503 ERROR10E SR RWORK,RLB CALCULATE OVERLAP YA00829 45677603 B ERROR10D STORE VARIABLE DATA 45678603 SPACE 2 45679603 ERROR10B LR RWORK,RUB SET UP HIGH ADDRESS 45680603 CR RLB,RADDR IS FQE LOWER BOUND GREATER YA00829 45681603 * THAN AREA ADDRESS? YA00829 45682603 BH ERROR10E YES YA00829 45683603 ERROR10C SR RWORK,RADDR GET AMOUNT OF OVERLAP 45684603 ERROR10D ST RWORK,ABNDATA SET UP VARIABLE DATA FIELD 45685603 MVI MSGLEN,H2C REASON CODE 1 - LENGTH 12 45690702 LA RERROR,ERRA AREA BEING FREED OVERLAPS @Z30ENWD 45693803 B GERROR FREE AREA @Z30ENWD 45694803 EJECT 45696901 *********************************************************************** 45700001 * * 45720001 * THIS ROUTINE PROCESSES THE CONDITIONS OF OUT OF REGION, * 45740002 * L/SQA VIRTUAL SPACE AND OUT OF REAL L/SQA SPACE. * 45780002 * * 45800001 * ENTRY POINTS: GNOTSATA - FROM GETMAIN COMMON OR GETMAINB * 45860002 * WHEN OUT OF VIRTUAL L/SQA * 45900002 * GNOTSATB - FROM GETMAIN COMMON WHEN OUT OF * 45960002 * VIRTUAL REGION SPACE * 46000002 * GNOTSATC - FROM GFRECORE WHEN A REAL PAGE * 46040002 * CANNOT BE OBTAINED * 46080002 * * 46100001 * REGISTERS UPON INPUT THAT ARE USED * 46120002 * * 46140001 * RLENGTH - ACTUAL LENGTH REQUIRED * 46150002 * RSPID - SPID * 46160002 * RSPQE - SPQE POINTER * 46170002 * RPREVDQE - LAST DQE ON CHAIN * 46172002 * RIN15 - LARGEST SIZE AVAILABLE * 46173002 * * 46180001 *********************************************************************** 46200001 SPACE 2 Y02714 46202002 GNOTSATA LR RIN0,RIN15 LARGEST SIZE FROM GFRECORE Y02714 46212003 TM CELLFLGS,INCELL IS GMC THE CALLER? @Z30ENWD 46215003 BZ GREQCEL NO, GET A CELL @Z30ENWD 46218003 SR RCELLP,RCELLP YES, ZERO THE CELL POINTER @Z30ENWD 46221003 B ADDSIZE GO TO ADD CELL LENGTH @Z30ENWD 46224003 SPACE 46230003 GREQCEL TM SPFLAGS,LSQA LSQA REQUEST? @Z30ENWD 46233003 BO SETLCL YES @Z30ENWD 46235003 ICM RIN1,MASK1,SP245B NO, SQA REQUEST @Z30ENWD 46237003 B GETCNOW GET A CELL @Z30ENWD 46239003 SETLCL ICM RIN1,MASK1,SP255B LSQA @Z30ENWD 46241003 GETCNOW OI CELLFLGS,GNOTCALL GNOT IS CALLING GME @Z30ENWD 46243003 LR RCELLP,RPREVDQE SAVE RPREVDQE @Z30ENYF 46244003 BAL RRETURN,GETMAINC GET A CELL @Z30ENWD 46245003 NI CELLFLGS,ALL-GNOTCALL RESET GNOT CALLING FLAG @Z30ENWD 46247003 SR SIZEREG,SIZEREG PRESET @Z30ENWD 46249003 XR RCELLP,RPREVDQE SWITCH REGISTERS @Z30ENYF 46249503 XR RPREVDQE,RCELLP @Z30ENYF 46250003 XR RCELLP,RPREVDQE @Z30ENYF 46250503 LTR RCELLP,RCELLP DID I GET ONE? @Z30ENWD 46251003 BNZ DONTADD YES @Z30ENWD 46253003 SPACE 46259003 ADDSIZE LA SIZEREG,DQESIZE GET SIZE OF DQE @Z30ENWD 46260803 DONTADD LA RAREG,C4095 GET PAGE SIZE - 1 @Z30ENWD 46261803 AR SIZEREG,RAREG SUM OF THESE Y02714 46264403 AR SIZEREG,RLENGTH TOTAL LENGTH + 4095 Y02714 46266203 TM SPFLAGS,LSQA LSQA REQUEST? Y02714 46268003 BZ ROUNDUP NO Y02714 46268903 TM FLAGS,GETMB GETMAINB REQUEST? Y02714 46269803 BO ROUNDUP YES Y02714 46272603 LA RIN15,PGTABLEN LENGTH OF PAGE TABLES Y02714 46273603 LR RIN3,RLENGTH LENGTH OF REQUEST Y02714 46274603 SRL RIN3,C16 NUMBER OF WHOLE SEGMENTS Y02714 46277003 LA RIN3,C1(0,RIN3) TOTAL NUMBER OF SEGMENTS Y02714 46278803 MR RRETURN,RIN3 LENGTH NEEDED FOR PG. TABLES Y02714 46279603 AR SIZEREG,RIN15 ADD TO TOTAL LENGTH Y02714 46281203 TM SPFLAGS,REQ4K SP=253/254 AND LENGTH=4K? @ZA30210 46281740 BNO ROUNDUP NO, SIZEREG IS O. K. @ZA30210 46282240 A SIZEREG,PAGE GET AN EXTRA PAGE @ZA30210 46282740 ROUNDUP OR SIZEREG,RAREG RESET 12 LOW ORDER Y02714 46283303 XR SIZEREG,RAREG BITS; NOW HAVE # OF 4K PAGES Y02714 46284303 MVC OBFRSAVE(C64),FBQSAVE SAVE REGISTER SAVE AREA Y02714 46286003 MVC GNOTSAVE(C64),G4KSAVE SAVE REGISTER SAVE AREA Y02714 46288803 MVC CODE2,CODE1 SAVE OPTION CODE Y02714 46289803 MVI CODE1,C0 ZERO OPTION CODE - G4KSRCH Y02714 46291403 * CHECKS CODE1 FOR PG. BOUNDARY Y02714 46293203 * AND VARIABLE Y02714 46295003 MVI OUTSW,VIRTUAL PRESET - OUT OF VIRTUAL Y02714 46296003 BAL RRETURN,G4KSRCH1 SEARCH FBQES FOR STORAGE @Y30APYF 46298603 B GNTSATA1 FOUND Y02714 46299603 MVC FBQSAVE(C64),OBFRSAVE NONE AVAILABLE, RESTORE Y02714 46302203 MVC G4KSAVE(C64),GNOTSAVE REGISTER SAVE AREAS Y02714 46304003 MVC CODE1,CODE2 RESTORE OPTION CODE Y02714 46305803 CR RIN0,RIN15 FQE SIZE LARGEST? Y02714 46306803 BH GNOTSTC1 YES, MAX SIZE O. K. @Z30ENYF 46307803 TM SPFLAGS,LSQA LSQA SUBPOOL? Y02714 46309403 BZ GNTSATA0 NO Y02714 46310403 TM FLAGS,GETMB GETMAINB REQUEST? Y02714 46312803 BO GNTSATA0 YES Y02714 46316003 LA RWORK2,PGTABLEN LENGTH OF PAGE TABLES Y02714 46317003 LR RWORK,RIN15 SIZE AVAILABLE Y02714 46318003 SRL RWORK,C16 NUMBER OF WHOLE SEGMENTS Y02714 46320003 LA RWORK,C1(0,RWORK) TOTAL NUMBER OF SEGMENTS Y02714 46321003 MR RWORK,RWORK LENGTH NEEDED FOR PG. TABLES Y02714 46323803 SR RIN15,RWORK2 MAX LENGTH FOR REQUEST Y02714 46325803 GNTSATA0 LTR RIN1,RCELLP DO WE HAVE A CELL? @Z30ENWD 46326803 BZ REDUCESZ NO @Z30ENWD 46327803 BAL RCOMRET1,FMAINC FREE THE CELL @Z30ENWD 46328803 B CKGFREE CHECK FOR LARGEST @Z30ENWD 46329803 REDUCESZ LA RWORK,DQESIZE SIZE OF DQE @Z30ENWD 46330803 SR RIN15,RWORK REDUCE SIZE AVAILABLE Y02714 46335603 CKGFREE CR RIN0,RIN15 GFRECORE HAVE MORE? Y02714 46338203 BNH GNOTSTC1 NO, LEAVE AS IS Y02714 46339203 LR RIN15,RIN0 YES, SET AS MAX Y02714 46340203 B GNOTSTC1 CONTINUE PROCESSING 46343203 SPACE 2 Y02714 46344203 GNTSATA1 LTR RFQE,RCELLP DID I GET A CELL? @Z30ENYF 46346203 BNZ COPYDUMY YES, INITIALIZE IT @Z30ENWD 46347203 MVC NOTSATS1,LDARQSTA SAVE CURRENT REQUEST STATUS @Z30ENWD 46348203 MVC LDARQSTA,SETUP REINIT STATUS FOR DQE REQUEST Y02714 46350203 CLI LDACBSP,CBSQA CONTROL BLOCKS IN SQA? Y02714 46352803 BNE GNTSATA2 NO, LEAVE AS IS Y02714 46354403 XI SPFLAGS,SQA+LSQA YES, CHANGE TO SQA Y02714 46355303 L RCVT,CVTPTR GET CVT POINTER Y02714 46357203 USING CVT,RCVT Y02714 46360003 L RGDA,CVTGDA GET GDA POINTER Y02714 46362003 DROP RCVT Y02714 46363003 USING GDA,RGDA Y02714 46364003 L RSPQE,SQASPQEP GET SQA SPQE POINTER (IN CASE Y02714 46366003 DROP RGDA OF SP 239) Y02714 46368003 GNTSATA2 OI FLAGS,EXPANSN INDICATE EXPANS. FOR GNOTSATC Y02714 46370003 LA RLENGTH,DQESIZE SET LENGTH TO DQE SIZE Y02714 46372003 BAL RCOMRET1,GFRECORE GET STORAGE FOR DQE Y02714 46373003 B GOOF1 STORAGE NOT AVAILABLE Y02714 46374003 BAL RCOMRET1,GFQEUPDT REMOVE STORAGE FROM FQE Y02714 46376003 MVC LDARQSTA,NOTSATS1 RESTORE CURRENT REQ STATUS @Z30ENWD 46378003 COPYDUMY MVC 0(DQESIZE,RFQE),DUMYDQE MOVE DQE CONTENTS @Z30ENWD 46379003 L RPREVDQE,G4KSAVE+C4 RESTORE PREVIOUS DQE POINTER Y02714 46381003 ST RFQE,DQEPTR(0,RPREVDQE) CORRECT DQE POINTER Y02714 46384003 MVC FBQSAVE(C64),OBFRSAVE RESTORE REG SAVE AREA Y02714 46385003 MVC G4KSAVE(C64),GNOTSAVE RESTORE REG SAVE AREA Y02714 46387003 MVC CODE1,CODE2 RESTORE OPTION CODE Y02714 46389003 TM FLAGS,GETMB GETMAINB REQUEST? Y02714 46390003 BO GNTSATA3 YES Y02714 46392003 LM RIN0,RIN15,GMREPSAV RESTORE REGS FOR RETRY Y02714 46394003 * @ZA29442 46394140 * SEE IF THE REQUEST WAS CONVERTED FROM LSQA TO SQA. @ZA29442 46394240 * THIS CAN HAPPEN IF THERE WAS INSUFFICIENT LSQA, THE @ZA29442 46394340 * REQUEST WAS CONDITIONAL, AND THE REQUESTING TASK WAS @ZA29442 46394440 * ABENDING. IF SO, PICK UP THE SQA SPQE POINTER SO @ZA29442 46394540 * THAT THE CORRECT QUEUES WILL BE SEARCHED. @ZA29442 46394640 * @ZA29442 46394740 TM SPFLAGS,CSA+SQA LOOKING FOR SQA ? @ZA29442 46394840 BC NOTMIXED,GMREPEAT NO, USE SPQE PTR AS IS @ZA29442 46394940 L RCVT,CVTPTR GET CVT POINTER @ZA29442 46395340 USING CVT,RCVT @ZA29442 46395440 L RGDA,CVTGDA GET GDA POINTER @ZA29442 46395540 DROP RCVT @ZA29442 46395640 USING GDA,RGDA @ZA29442 46395740 L RSPQE,SQASPQEP GET SQA SPQE @ZA29442 46395840 DROP RGDA @ZA29442 46395940 B GMREPEAT REPEAT REQUEST Y02714 46396003 SPACE 2 Y02714 46397003 GNTSATA3 LM RAREG,RIN1,SAVEREG2 RESTORE GETMAINB RETRY REGS Y02714 46398003 B GMBRETRY TRY REQUEST AGAIN Y02714 46400003 SPACE 2 Y02714 46402003 GOOF1 MVI FRRBRNDX,GFREFAIL GFRECORE FAILED TO FIND SPACE Y02753 46404003 ABEND X'C0D',DUMP,,SYSTEM GO TO FRR TO RECORD Y02753 46405003 SPACE 2 Y02714 46406003 GNOTSATC MVI OUTSW,REALOUT INDICATE OUT OF REAL 46408003 GNOTSTC1 TM FLAGS,GETMB IS IT A GETMAINB REQUEST Y02714 46413003 BO NGMBPROC YES, PROCESS FOR GETMAINB REQUEST 46414003 TM FLAGS,EXPANSN SQA OR LSQA EXPANSION? Y02714 46415003 BO GOOF1 YES, SHOULD NEVER OCCUR Y02714 46417003 TM CODE1,VARBLE IS IT A VARIABLE REQUEST? 46418003 BO NVARPROC YES, PROCESS VARIABLE REQUEST 46420003 BRINGTST TM CODE1,CONDTNL IS IT A CONDITIONAL REQUEST? 46422003 BZ CNDTNPRO NO, TERMINATE REQUEST Y02714 46424003 TM SPFLAGS,LSQA LSQA REQUEST? Y02714 46426003 BZ CNDTNPRO NO, TERMINATE REQUEST Y02714 46428003 TM FLAGS,LDAABGM ABEND IN PROCESS ? @ZA29616 46430040 BO TRYSQA YES, CONVERT REQUEST TO SQA @ZA29616 46440040 CLI SAVSPID,C254 MAYBE. IS REQUEST FOR 254 ? @ZA29616 46450040 BE CNDTNPRO YES, THERE IS NO ABEND @ZA29616 46460040 L RTCB1,LDATCB GET TCB ADDRESS Y02714 46470040 TM TCBFLGS3,TCBABGM ABEND IN PROCESS? 46480040 BZ CNDTNPRO NO, TERMINATE REQUEST 46490040 TRYSQA LM RIN0,RIN15,GMREPSAV RESTORE REGS FOR RETRY @ZA29616 46500040 LA RSPID,C245 GET SQA SPID Y02714 46550002 L RCVT,CVTPTR GET CVT POINTER Y02714 46552002 USING CVT,RCVT Y02714 46554002 L RGDA,CVTGDA GET GDA POINTER Y02714 46556002 DROP RCVT Y02714 46558002 USING GDA,RGDA Y02714 46558402 L RSPQE,SQASPQEP GET SQA SPQE Y02714 46558802 DROP RGDA Y02714 46559202 XI SPFLAGS,LSQA+SQA RESET LSQA; SET SQA Y02714 46559602 B GMREPEAT REPEAT REQUEST 46640002 SPACE 2 Y02714 46650002 NGMBPROC TM CELLFLGS,INEXPN WAS EXPANSION THE CALLER @Z30ENWD 46650903 BZ TESTYPE NO @Z30ENWD 46651903 LA REG5,CELLEN LENGTH OF ONE CELL @Z30ENWD 46652903 CR RIN15,REG5 ENOUGH FOR ONE CELL? @Z30ENWD 46653903 BNL SETMAXC YES @Z30ENWD 46654903 LM RAREG,RIN1,SAVEREG2 RESTORE REGS @Z30ENWD 46655903 SR RLENGTH,RLENGTH ZERO LENGTH @Z30ENWD 46656903 B EXPNFMT RETURN WITH ZERO LENGTH @Z30ENWD 46657903 SPACE 46659603 SETMAXC LR RLENGTH,RIN15 SET NEW REQUEST LENGTH @Z30ENWD 46659703 SRL RLENGTH,C3 ROUND TO 16 BYTE LENGTH @Z30ENWD 46660703 SLL RLENGTH,C3 REPOSITION @Z30ENWD 46661703 LM RAREG,RCOMRET1,SAVEREG2 RESTORE @Z30ENWD 46662703 LM REGB,RIN1,SAVEREG2+C36 REGS FOR RETRY @Z30ENYF 46663703 B GMBRETRY RETRY SMALLER AMOUNT @Z30ENWD 46664703 SPACE 46670003 TESTYPE TM SPFLAGS,LSQA LSQA REQUEST? @Z30ENWD 46672003 BO NLSQARTY YES, PICK UP SQA AND RETRY @Z30ENWD 46679003 WAITPREP L REGB,ASTERMR SYSTEM TERM ROUTINE, REAL - @Z30ENWD 46686003 * MAY BE BRANCHED TO FROM GMC @Z30ENWD 46693003 TM OUTSW,VIRTUAL OUT OF VIRTUAL? Y02714 46700002 BZR REGB NO, OUT OF REAL Y02751 46720002 L REGB,ASTERMV SYSTEM TERM ROUTINE, VIRTUAL Y02751 46721002 BR REGB TERMINATE SYSTEM Y02751 46770002 SPACE 2 Y02714 46772002 NLSQARTY LM RAREG,RIN1,SAVEREG2 RESTORE REGS FOR RETRY 46780001 LA RSPID,C245 GET SQA SPID Y02714 46800002 XI SPFLAGS,LSQA+SQA RESET LSQA; SET SQA Y02714 46810002 L RCVT,CVTPTR GET CVT POINTER Y02714 46812002 USING CVT,RCVT Y02714 46814002 L RGDA,CVTGDA GET GDA POINTER Y02714 46816002 DROP RCVT Y02714 46818002 USING GDA,RGDA Y02714 46818402 L RSPQE,SQASPQEP GET SQA SPQE Y02714 46818802 DROP RGDA Y02714 46819202 B GMBRETRY RETRY REQUEST 46860002 SPACE 2 Y02714 46862002 GNOTSATB MVI OUTSW,VIRTUAL INDICATE OUT OF VIRTUAL 46870003 TM CODE1,VARBLE VARIABLE REQUEST? 46920002 BO NVARPROC YES, PROCESS VARIABLE REQUEST 46940002 CNDTNPRO TM CODE1,LIST IS IT A LIST ENTRY 46960002 BM NLISTPRO YES, PROCESS LIST ENTRY 46980002 NFIRST TM OUTSW,VIRTUAL OUT OF REAL? Y02714 47040002 LA RERROR,ERR1 SET ERROR CODE @Z30ENWD 47050003 BZ GERROR YES @Z30ENWD 47060003 ST RIN15,ABNDATA SAVE LARGEST AVAILABLE FOR VAR DATA 47070001 MVI MSGLEN,H28 REASON CODE 1 - LENGTH 8 Y02714 47072002 OI FREESW,INCR INDICATE LENGTH INCREMENTED 47074001 LA RERROR,ERR8 OUT OF VIRTUAL @Z30ENWD 47080003 B GERROR HANDLE THE ERROR @Z30ENWD 47110003 SPACE 2 47156001 NVARPROC EQU * 47158001 L RLENGTH,MINMAX GET MINIMUM REQUEST 47158401 LTR RLENGTH,RLENGTH NEGATIVE MINIMUM REQUEST? @ZA16417 47158640 BM GERROR8A YES, ERROR @ZA16417 47158940 BAL RCOMRET1,CRNDLNTH ROUND UP MIN AND ACCOUNT FOR AQE 47159140 * IF NEEDED 47159540 CR RIN15,RLENGTH WILL AVAILABLE FULFILL MIN? 47159601 BL NLSQACK NO REQUEST CAN'T BE SATISFIED 47200002 LR RLENGTH,RIN15 SET LENGTH TO LARGEST AVAILABLE 47220002 B RETRYMIN RETRY REQUEST Y02714 47280002 SPACE 2 Y02714 47290002 NLSQACK TM SPFLAGS,SQA+CSA+LSQA+SWA+AUK PROB. PROG. SUBPOOL? Y02714 47300002 BNZ BRINGTST NO, CONTINUE Y02714 47340002 L RWORK,VVREGSZ GET EXPLICIT V=V REGION SIZE Y02714 47350002 LTR RWORK,RWORK IS ONE GIVEN? Y02714 47352002 BZ NFIRST NO, TERMINATE REQUEST Y02714 47354002 TM FLAGS,VARPASS2 YES, IS THIS THE SECOND PASS? Y02714 47356002 BZ RETRYMIN NO, IGNORE REGION AND RETRY Y02714 47358002 NI FLAGS,ALL-VARPASS2 RESET FLAG Y02714 47358402 B NFIRST TERMINATE REQUEST Y02714 47358802 SPACE 2 Y02714 47359202 RETRYMIN OI FLAGS,VARPASS2 INDICATE SECOND PASS Y02714 47359602 ST RLENGTH,GMREPSAV+C40 SAVE NEW LENGTH Y02714 47359840 LM RIN0,RIN15,GMREPSAV RESTORE REGS 0-15 Y02714 47370002 LTR RLENGTH,RLENGTH ZERO MINIMUM REQUEST? @ZA16417 47371040 BZ GCOMM11 YES @ZA16417 47372040 B GMREPEAT RETRY REQUEST FOR MINIMUM SIZE 47380002 SPACE 2 Y02714 47390002 NLISTPRO LA RWORK,FOUR WORD SIZE 47400002 C RWORK,LSTINDEX IS THIS FIRST ENTRY 47410002 BH NFIRST YES 47420002 L RLENGTH,LENSAVE BEGINNING OF LENGTH LIST 47440002 A RLENGTH,LSTINDEX GET PRESENT ENTRY 47450002 SR RLENGTH,RWORK DECREMENT TO PREVIOUS ENTRY 47480001 OI 0(RLENGTH),LAST MAKE TEMPORARILY LAST Y02714 47500002 ST RLENGTH,NOTSATSV SAVE TEMPORARY END POINTER 47520002 LM RIN0,RIN15,GMREPSAV RESTORE ORIGINAL REGS 0-15 Y02714 47540002 L RLENGTH,LENSAVE POINTER TO BEGINNING OF LIST 47552002 MVC NOTSATS1,LDARQSTA SAVE STATUS Y02714 47554002 NI FLAGS,ALL-BRENTRY INSURE FREEMAIN RETURNS HERE Y02714 47556002 MVC GNOTSAVE(FOUR),RETSAVE SAVE USER RETURN ADDRESS Y02714 47558002 LA RRETURN,NLISTPR1 GET LOCAL RETURN ADDRESS Y02714 47558402 ST RRETURN,RETSAVE SAVE FOR FMCOMMON Y02714 47558802 B FLISTADV FREE ALREADY OBTAINED ENTRIES Y02714 47560002 SPACE 2 Y02714 47560402 NLISTPR1 MVC RETSAVE(FOUR),GNOTSAVE RESTORE USER RETURN ADDR Y02714 47562002 MVC LDARQSTA,NOTSATS1 RESTORE STATUS Y02714 47570002 L RLENGTH,NOTSATSV LENGTH POINTER 47600002 NI 0(RLENGTH),ALL-LAST RESET TEMPORARY END OF LIST Y02714 47620002 B NFIRST CONTINUE PROCESSING 47640001 EJECT 48340001 *********************************************************************** 48344003 * 48348003 * GFQEUPDT - REMOVES AREA TO BE ALLOCATED FROM FQE 48352003 * 48356003 * INPUT 48360003 * RFQE - FQE ADDRESS 48364003 * RPREVFQE - PREVIOUS FQE ADDRESS 48368003 * RLENGTH - LENGTH OF REQUEST 48372003 * RCOMRET1 - RETURN ADDRESS 48376003 * OUTPUT 48380003 * RFQE - ADDRESS OF ALLOCATED AREA 48384003 * WORK REGS 48388003 * RWORK, RNEWFQE, RIN0, RIN15 48392003 * 48396003 *********************************************************************** 48400003 SPACE 2 Y02714 48404003 GFQEUPDT L RWORK,FQELNTH(RFQE) PICK UP FQE LENGTH 48408003 SR RWORK,RLENGTH GET REMAINING STORAGE 48412003 LTR RWORK,RWORK ANY REMAINING 48416003 BZ REMFQE NO 48420003 TM FQTYPE(RFQE),REGION REGION FQE Y02714 48424003 BZ MOVEFQE NO - FQE MUST BE MOVED 48428003 ST RWORK,FQELNTH(RFQE) PUT NEW LENGTH IN FQE 48432003 L RWORK,FQAREA(RFQE) PICK UP AREA ADDRESS 48436003 SR RWORK,RLENGTH GET NEW AREA ADDRESS 48440003 ST RWORK,FQAREA(RFQE) PLACE ADDRESS IN FQE 48444003 AQECHK TM SPFLAGS,NEEDAQE AQE NEEDED? Y02714 48448003 BZ GFQERET NO 48452003 LA RFQE,AQESIZE GET AQE SIZE Y02714 48456003 AR RWORK,RFQE ACCOUNT FOR AQE AT Y02714 48460003 * BEGINNING OF AREA Y02714 48464003 SR RLENGTH,RFQE DECREMENT LENGTH DUE TO AQE Y02714 48468003 GFQERET LR RFQE,RWORK POINT TO AREA ASSIGNED 48472003 BR RCOMRET1 RETURN 48476003 SPACE 2 48480003 REMFQE MVC FQEPTR+1(C3,RPREVFQE),FQEPTR+1(RFQE) DEQUEUE FQE Y02714 48484003 TM FQTYPE(RFQE),REGION REGION FQE Y02714 48488003 BZ GETSTRT NO 48492003 LR RIN15,RCOMRET1 SAVE RETURN REG 48500003 L RWORK,FQAREA(RFQE) GET AREA ADDRESS 48504003 SR RWORK,RLENGTH GET BEGINNING ADDRESS 48508003 LR RIN1,RFQE GET ADDRESS TO FREE 48520003 BAL RCOMRET1,FMAINC FREEMAIN FQE @Z30ENWD 48524003 LR RCOMRET1,RIN15 RESTORE RETURN REG 48528003 B AQECHK CHECK ON AQE 48532003 SPACE 2 48536003 GETSTRT LR RWORK,RFQE GET FQE ADDRESS 48540003 LA RWORK,FQESLNTH(RWORK) GET END ADDRESS Y02714 48544003 SR RWORK,RLENGTH GET BEGINNING ADDRESS 48548003 B AQECHK CHECK FOR AQE 48552003 SPACE 2 48556003 MOVEFQE LR RNEWFQE,RFQE GET ADDRESS 48560003 SR RNEWFQE,RLENGTH OF NEW FQE 48564003 ST RWORK,FQELNTH(RNEWFQE) PUT NEW LENGTH IN NEW FQE 48568003 L RWORK,FQEPTR(0,RFQE) GET OLD FORWARD POINTER Y02714 48572003 ST RWORK,FQEPTR(0,RNEWFQE) PLACE IN NEW FQE Y02714 48576003 ST RNEWFQE,FQEPTR(RPREVFQE) CHAIN PREV FQE TO NEW FQE 48580003 LA RWORK,FQESLNTH(RNEWFQE) ADDRESS OF AREA ASSIGNED Y02714 48584003 B AQECHK 48588003 EJECT 48592003 *********************************************************************** 48596003 * 48600003 * THE GFRECORE ROUTINE SEARCHES THE FQE CHAIN(S) OF A SUBPOOL TO 48604003 * LOCATE AN FQE TO SATISFY A GETMAIN REQUEST, USING A BEST FIT 48608003 * ALGORITHM. SPECIAL PROCESSING IS DONE TO FIX A PAGE 48612003 * TO BACK UP ALL SATISFIED L/SQA REQUESTS. L/SQA REQUESTS 48616003 * OF 4K OR LESS ARE NOT SATISFIED ACROSS PAGE BOUNDARIES. 48620003 * 48624003 * INPUT 48628003 * RSPQE - ADDRESS OF SUBPOOL QUEUE ELEMENT 48632003 * RLENGTH - REQUESTED LENGTH 48636003 * RCOMRET1 - RETURN ADDRESS 48640003 * 48644003 * OUTPUT 48648003 * RPREVDQE - LAST DQE ON CHAIN - STORAGE NOT FOUND 48652003 * RFQE - ADDRESS OF CURRENT FQE 48656003 * RPREVFQE - ADDRESS OF PREVIOUS FQE 48660003 * RIN15 - LARGEST AREA AVAILABLE - STORAGE 48664003 * NOT FOUND 48668003 * 48672003 * 48676003 * THE FIRST SECTION OF THIS ROUTINE HAS BEEN OPTIMIZED FOR SPEED. 48680003 * DO NOT MAKE CHANGES WITHOUT CONSIDERING THEIR EFFECT UPON 48684003 * EXECUTION TIME. 48688003 * 48692003 * REGISTER USAGE 48696003 * 48700003 * REG NAME CONTAINS 48704003 * 48708003 * 0 RIN0 NEXT DQE (PRELOADED) 48712003 * 1 RPREVFQE PREVIOUS FQE 48716003 * 2 RFQE CURRENT FQE 48720003 * 3 RDQE CURRENT DQE 48724003 * 4 RLDA LDA ADDRESS 48728003 * 5 RWORK3 PREVIOUS FQE TO CLOSEST FQE 48732003 * 6 RWORK CLOSEST FQE (IN SIZE) 48736003 * 7 RSPQE SPQE ADDRESS (ON ENTRY) 48740003 * RPRVDQE PREVIOUS DQE (DURING LOOP) 48744003 * 8 RBASE1 FIRST BASE REGISTER 48748003 * 9 SEGREG MASK TO CLEAR HIGH BYTE OF FQE 48752003 * 10 RLENGTH REQUESTED LENGTH 48756003 * 11 RFQESIZE CURRENT FQE SIZE 48760003 * 12 WORK CLOSEST FQE SIZE (LARGER THAN REQUEST) 48764003 * 13 RBASE2 SECOND BASE REGISTER 48768003 * 14 RWORK4 NEXT FQE (PRELOADED) 48772003 * 15 RLGSOFAR LARGEST AVAILABLE FQE SIZE (LESS THAN REQUEST) 48776003 * 48780003 *********************************************************************** 48784003 SPACE 2 Y02714 48788003 CNOP 2,8 PLACE LOOPS ON DOUBLE WORD Y02714 48792003 GFRECORE STM RIN0,RIN15,GFRESAVE SAVE CALLERS REGS Y02714 48796003 TM SPFLAGS,SQA+CSA SALLOC LOCK NEEDED? Y02751 48800003 BZ GFRECOR1 NO Y02751 48804003 BAL RCOMRET1,GTSALLOC GET SALLOC LOCK Y02751 48808003 SPACE 2 48812003 GFRECOR1 SLR RLGSOFAR,RLGSOFAR CLEAR LARGEST SIZE FOUND Y02714 48816003 GFRECOR2 L RDQE,SPDQEAD(0,RSPQE) GET POINTER TO FIRST DQE Y02714 48820003 LTR RDQE,RDQE IS THERE A DQE Y02714 48824003 BZ SKIPCLER NO, STORAGE NOT AVAILABLE Y02714 48828003 L SEGREG,CLHIBYTE MASK TO CLEAR FQE HIGH BYTE Y02714 48832003 SLR RWORK,RWORK ZERO CLOSEST FQE ADDRESS Y02714 48836003 L WORK,LGPOSNUM SET CLOSEST FQE SIZE LARGE Y02714 48840003 GDQESRCH L RFQE,DQFQEPTR(0,RDQE) GET POINTER TO FIRST FQE Y02714 48844003 L RIN0,DQEPTR(0,RDQE) PRELOAD NEXT DQE ADDRESS Y02714 48848003 LR RPREVFQE,RDQE MAKE DQE PREVIOUS FQE Y02714 48852003 NR RFQE,SEGREG IS THERE AN FQE Y02714 48856003 BZ NXTDQE NO, CHECK NEXT DQE Y02714 48860003 GFQESRCH L RFQESIZE,FQELNTH(0,RFQE) GET FQE SIZE Y02714 48864003 L RWORK4,FQEPTR(0,RFQE) PRELOAD NEXT FQE ADDRESS Y02714 48868003 TM FQTYPE(RFQE),FQECPB FQE CROSS PAGE BOUNDARY? Y02714 48872003 BO NXTFQE YES, GET NEXT FQE Y02714 48876003 CLR RLENGTH,RFQESIZE IS FQE LARGE ENOUGH Y02714 48880003 BH GREATEST NO, CHECK FOR LARGEST SO FAR Y02714 48884003 BE SAVEPREV EQUAL, USE THIS FQE Y02714 48888003 CLR WORK,RFQESIZE YES, CLOSER THAN BEFORE? Y02714 48892003 BNH NXTFQE NO, TRY NEXT FQE Y02714 48896003 LR RWORK3,RPREVFQE SAVE PREVIOUS TO CLOSEST FQE Y02714 48900003 LR RWORK,RFQE SAVE CURRENT CLOSEST FQE Y02714 48904003 LR WORK,RFQESIZE SAVE NEW CLOSEST SIZE Y02714 48908003 SPACE 2 Y02714 48912003 NXTFQE LR RPREVFQE,RFQE MAKE CURRENT FQE PREVIOUS Y02714 48916003 LR RFQE,RWORK4 GET NEXT FQE Y02714 48920003 NR RFQE,SEGREG IS THERE ONE? Y02714 48924003 BNZ GFQESRCH YES, CHECK IT Y02714 48928003 SPACE 2 Y02714 48932003 NXTDQE LR RPRVDQE,RDQE MAKE CURRENT DQE PREVIOUS Y02714 48936003 LTR RDQE,RIN0 GET NEXT DQE Y02714 48940003 BNZ GDQESRCH IF ANY GO CHECK IT Y02714 48944003 SPACE 2 Y02714 48948003 LTR RWORK,RWORK WAS THERE A CLOSE FQE Y02714 48952003 BZ CHCKLSW NO, CHECK CLEARSW Y02714 48956003 LR RPREVFQE,RWORK3 GET PREVIOUS CLOSEST FQE Y02714 48960003 LR RFQE,RWORK GET CLOSEST FQE Y02714 48964003 SAVEPREV STM RPREVFQE,RFQE,CLOPREV SAVE PREVIOUS AND CLOSEST FQE 48968003 ST RLGSOFAR,LARGESTA SAVE LARGEST AVAILABLE SIZE Y02714 48972003 TM SPFLAGS,LSQA+SQA SQA OR LSQA REQUEST? Y02714 48976003 BNZ PGBOUND YES, CHECK PAGE BOUNDARIES 48980003 GFREFND L RIN0,GFRESAVE RESTORE 48984003 LM RIN3,RIN15,GFRESAVE+C12 CALLERS REGS Y02714 48988003 B C4(RCOMRET1) STORAGE FOUND - FQE, PREVFQE 48992003 SPACE 2 Y02714 48996003 GREATEST CR RFQESIZE,RLGSOFAR THIS FQE LARGEST SO FAR? Y02714 49000003 BNH NXTFQE NO, CHECK NEXT FQE Y02714 49004003 LR RLGSOFAR,RFQESIZE YES, SAVE NEW LARGEST SIZE Y02714 49008003 B NXTFQE GO CHECK NEXT FQE Y02714 49012003 SPACE 2 49016003 CHCKLSW TM CLEARSW,CLEARON CLEARSW ON? 49020003 BZ SKIPCLER NO - RETURN STORAGE NOT FOUND 49024003 BAL RCOMRET1,FQECLEAR CLEAR CPB FLAG IN FQE'S 49028003 SKIPCLER ST RLGSOFAR,LARGESTA SAVE LARGEST AVAILABLE SIZE Y02714 49032003 LR RPREVDQE,RPRVDQE GET LAST DQE Y02714 49036003 L RIN0,GFRESAVE RESTORE 49040003 LM RAREG,RRETURN,GFRESAVE+C8 CALLERS REGS 49044003 BR RCOMRET1 RETURN - NOT FOUND - PREVDQE 49048003 * & LARGEST AVAILABLE 49052003 SPACE 2 Y02714 49056003 * END OF OPTIMIZED SECTION 49060003 SPACE 5 49064003 * 49068003 * FQECLEAR - CLEARS FQECPB INDICATORS IN FQE (FQE CROSSES 49072003 * PAGE BOUNDARY) 49076003 * 49080003 FQECLEAR XI CLEARSW,CLEARON TURN OFF CLEARSW 49230003 L RDQE,GFRESAVE+C28 GET SPQE ADDRESS Y02714 49233003 FQECLR1 L RDQE,DQEPTR(0,RDQE) GET FIRST/NEXT DQE Y02714 49236003 LTR RDQE,RDQE IS THERE ONE Y02714 49239003 BZR RCOMRET1 NO, RETURN Y02714 49242003 L RFQE,DQFQEPTR(RDQE) PICK UP 1ST FQE POINTER 49245003 FQECLR2 LTR RFQE,RFQE IS THERE AN FQE Y02714 49248003 BZ FQECLR1 NO, GET NEXT DQE Y02714 49251003 NI FQTYPE(RFQE),ALL-FQECPB TURN OFF CPB FLAG Y02714 49254003 L RFQE,FQTYPE(RFQE) GET NEXT FQE POINTER 49257003 B FQECLR2 CHECK THIS FQE Y02714 49260003 * 49262003 * AREA DESCRIBED BY FQE CROSSED A PAGE BOUNDARY 49262603 * 49263203 * SINCE A REQUEST FOR SP 253 OR 254 WILL HAVE HAD ITS 49263440 * LENGTH INCREMENTED BY 8 TO ACCOMODATE THE AQE, SPECIAL 49263640 * PROCESSING MUST BE PERFORMED FOR REQUESTS OF EXACTLY 49263840 * 4096 BYTES FROM THOSE SUBPOOLS SO THAT SUCH REQUESTS 49264040 * WILL NOT BE ALLOCATED ACROSS A PAGE BOUNDARY 49264240 * 49264440 PGBOUND TM SPFLAGS,REQ4K SP=253/254 AND LENGTH=4K? @ZA11822 49264640 BNO LENGTHOK NO @ZA11822 49264840 SH RLENGTH,H8 GET REQUESTED LENGTH @ZA11822 49265840 LENGTHOK LA RWORK,FQESLNTH(RFQE) GET END ADDRESS @ZA11822 49266340 ST RWORK,ENDADD & SAVE IT 49267540 LR RWORK3,RWORK SAVE END ADDRESS 49268003 SR RWORK,RLENGTH GET START ADDRESS 49270003 ST RWORK,STRTADD & SAVE IT 49272003 N RWORK,BND4K ROUND START DOWN TO 4K BOUND 49274003 ST RWORK,RSTRTADD & SAVE IT 49280003 * 49281040 * THE FOLLOWING INSTRUCTION WILL DECREMENT THE END ADDRESS BY 49281540 * ONE BEFORE ROUNDING IT TO THE NEXT LOWER PAGE BOUNDARY, IN 49282040 * CASE IT HAPPENS TO FALL ON A PAGE BOUNDARY. 49282540 * 49283040 BCTR RWORK3,0 DECREMENT END ADDRESS BY 1 Y02714 49284003 N RWORK3,BND4K ROUND END DOWN TO 4K BOUND 49285003 ST RWORK3,RENDADD & SAVE IT 49286003 C RLENGTH,PAGE LENGTH > PAGE 49290003 BH PGBND1 YES 49291003 TM SPFLAGS,REQ4K SP=253/254 AND LENGTH=4K? @ZA11822 49291240 BNO NOAQEADD NO @ZA11822 49291440 LA RLENGTH,C8(RLENGTH) GET LENGTH PLUS AQE SIZE @ZA11822 49291640 * 49291840 * WILL THE ALLOCATED AREA START ON THE SAME PAGE AS THE 49291940 * FREE AREA ENDS ON ? IF NOT, THE FREE AREA IN THE HIGH 49292040 * ADDRESSED PAGE (OLDFQELN) CANNOT BE BIG ENOUGH TO 49292140 * SATISFY THE REQUEST. 49292240 * 49292340 NOAQEADD CR RWORK,RWORK3 ROUNDED ADDRS EQ(SAME PAGE) @ZA11822 49292440 BNE PGBND2 NO 49293003 C RLENGTH,FQELNTH(RFQE) REQUEST EQUAL FQE SIZE Y02714 49294003 BE CHCKCL1 YES - CHECK CLEARSW 49295003 L RWORK,STRTADD GET START ADDRESS 49296003 N RWORK,PGBNDMSK START ADDRESS ON 4K BOUNDARY? 49297003 BZ LRA1 YES - LRA ON START-4K 49300003 CHCKCL1 TM CLEARSW,CLEARON CLEARSW ON 49305003 BZ GFREFND NO - RETURN - STORAGE FOUND 49310003 BAL RCOMRET1,FQECLEAR CLEAR CPB FLAG IN FQE'S 49315003 LM RPREVFQE,RFQE,CLOPREV GET CLOSEST AND PREVIOUS FQE 49320003 B GFREFND RETURN - STORAGE FOUND 49325003 SPACE 2 Y02714 49330003 * 49330540 * THE ALLOCATED AREA WILL START ON A 4K BOUNDARY, BUT THE 49331040 * FQE ALSO DESCRIBES SPACE BELOW THE BOUNDARY. IF THE FQE 49331540 * IS NOT AN EXACT FIT FOR THE REQUEST, A NEW FQE MUST BE 49332040 * BUILT ON THE NEXT LOWER PAGE. THEREFORE, A CHECK MUST BE 49332540 * MADE TO ENSURE THAT THE NEXT LOWER PAGE IS BACKED BY REAL 49333040 * STORAGE SO THAT THE FQE CAN BE BUILT THERE. 49333540 * 49334040 LRA1 L RWORK3,STRTADD GET START ADDRESS 49335003 S RWORK3,PAGE SUBTRACT 4K Y02714 49340003 BAL WORK,PGINCORE CHECK IF PAGE IS IN STORAGE 49345003 B CHCKCL1 YES, IT IS 49350003 B GFRENO FIXED PAGE NOT OBTAINED 49355003 SPACE 2 49360003 PGBND2 L RWORK,ENDADD GET END ADDRESS 49365003 S RWORK,RENDADD SUBTRACT ROUNDED END ADDRESS 49370003 ST RWORK,OLDFQELN SAVE AS OLD LENGTH 49375003 L RWORK3,FQELNTH(RFQE) GET FQE LENGTH 49380003 SR RWORK3,RWORK SUBTRACT OLD LENGTH FROM FQE LENGTH 49385003 ST RWORK3,NEWFQELN & SAVE AS NEW LENGTH 49390003 CR RLENGTH,RWORK3 NEW LENGTH LARGE ENOUGH Y02714 49395003 BH OLDVSNEW NO - COMPARE OLD TO NEW 49400003 L RWORK3,RSTRTADD GET ROUNDED START ADDRESS 49405003 BAL WORK,PGINCORE CHECK IF PAGE IS IN STORAGE 49420003 B IS4KREQ YES IT IS 49423003 B GFRENO NO IT IS NOT 49426003 IS4KREQ C RLENGTH,PAGE 4K REQUEST 49429003 BE NEWVS4K YES - SEE IF NEWLEN = 4K 49432003 TM SPFLAGS,REQ4K SP=253/254 AND LENGTH=4K? @ZA30210 49432340 BO NEWVS4K YES - SEE IF NEWLEN = 4K @ZA30210 49432640 * 49432940 * THE REQUEST IS NOT FOR EXACTLY 4K. BUILD AN FQE TO 49433240 * DESCRIBE THE FREE SPACE ON THE LOWER PAGE AFTER UPDATING 49433540 * THE LENGTH IN THE FQE ON THE HIGHER PAGE. THEN CHAIN 49433840 * THE LOWER FQE FROM THE HIGHER ONE. 49434140 * 49434540 CREATNFQ MVC FQELNTH(C4,RFQE),OLDFQELN NEW LENGTH FOR OLD FQE 49435003 L RWORK,RENDADD PICK UP ROUNDED END ADDRESS 49438003 LA RWORK2,FQESLNTH GET FQE LENGTH Y02714 49441003 SR RWORK,RWORK2 GET NEW FQE ADDRESS Y02714 49444003 MVC FQEPTR(C4,RWORK),FQEPTR(RFQE) CHAIN IN Y02714 49447003 ST RWORK,FQEPTR(RFQE) NEW FQE Y02714 49450003 LR RPREVFQE,RFQE MAKE CURRENT PREVIOUS FQE 49453003 LR RFQE,RWORK MAKE NEW CURRENT FQE 49456003 MVC FQELNTH(C4,RFQE),NEWFQELN SET LENGTH 49459003 STM RPREVFQE,RFQE,CLOPREV NEW FQE IS NOW PROPER ONE 49470003 B CHCKCL1 CHECK CLEARSW 49471003 SPACE 2 Y02714 49472003 OLDVSNEW CR RWORK,RWORK3 OLD > NEW LENGTH Y02714 49473003 BH LENVSLRG YES - COMPARE TO LARGEST AVAILABLE 49474003 LR RWORK,RWORK3 GET NEW FQE LENGTH Y02714 49475003 LENVSLRG CR RWORK,RLGSOFAR LESS THAN LARGEST AVAILABLE? Y02714 49480003 BL REPEAT YES - REPEAT REQUEST 49483003 LR RLGSOFAR,RWORK GET LARGEST AVAILABLE Y02714 49486003 REPEAT OI CLEARSW,CLEARON TURN ON CLEARSW 49489003 OI FQTYPE(RFQE),FQECPB SET CPB FLAG IN FQE Y02714 49492003 LM RIN0,RWORK4,GFRESAVE RESTORE REGS, KEEP RLGSOFAR Y02714 49495003 B GFRECOR2 TRY AGAIN Y02714 49498003 SPACE 2 49501003 NEWVS4K CLC NEWFQELN(C4),PAGE NEW LENGTH = 4K? 49504003 BE CREATNFQ YES - CREATE NEW FQE 49510003 * 49510140 * THE LENGTH DESCRIBED BY THE NEW FQE IS NOT 4K. AN FQE 49510240 * MUST BE BUILT ON THE PAGE BELOW THE 4K PAGE THAT WILL BE 49510340 * ALLOCATED. THEREFORE, REAL STORAGE MUST BE OBTAINED FOR 49510440 * THE PAGE CONTAINING THIS FQE. IF REAL STORAGE CANNOT BE 49510540 * ASSIGNED, THE FRAME PREVIOUSLY GOTTEN TO BACK THE NEXT 49510640 * HIGHER PAGE MUST BE RELEASED. 49510740 * 49510840 L RWORK3,RSTRTADD GET ROUNDED START ADDRESS 49511003 S RWORK3,PAGE SUBTRACT 4K 49512003 BAL WORK,PGINCORE CHECK IF PAGE IS IN STORAGE 49513003 B CREATNFQ YES IT IS 49514003 L RIN0,RSTRTADD GET BEGINNING ADDR TO RELEASE Y02714 49515003 LR RIN1,RIN0 GET ENDING ADDRESS Y02714 49516003 A RIN1,PAGE TO RELEASE Y02714 49520003 B NOTASIG1 GO RELEASE THE PAGE 49521003 SPACE 2 49522003 PGBND1 L RWORK,STRTADD GET START ADDRESS 49523003 C RLENGTH,FQELNTH(RFQE) IS REQUEST EQUAL TO FQE SIZE? 49524003 BE PGBND1A YES - DO NOT ALLOW FOR FQE 49525003 LA RWORK2,FQESLNTH GET FQE LENGTH Y02714 49526003 SR RWORK,RWORK2 SUBTRACT FQE LENGTH Y02714 49527003 PGBND1A N RWORK,BND4K ROUND DOWN TO 4K BOUNDARY 49528003 L RWORK3,RENDADD GET ROUNDED END ADDRESS 49530003 ST RWORK3,FIXEND SAVE IT 49531003 SR RWORK3,RWORK GET LENGTH 49532003 ST RWORK3,DIFF SAVE IN DIFFERENCE 49533003 XC FIXSTART(C4),FIXSTART CLEAR WORK AREA 49534003 L RWORK3,RENDADD GET END ADDRESS 49535003 CHECKDIF OC DIFF,DIFF DIFFERENCE = 0? Y02714 49540003 BZ GFREFND YES - RETURN - STORAGE FOUND 49541003 S RWORK3,PAGE SUBTRACT 4K FROM ROUNDED END ADDRESS 49542003 BAL WORK,PGINCORE CHECK IF PAGE IS IN STORAGE 49543003 B DECFXST YES IT IS 49544003 B NOTASSIG NO IT IS NOT 49545003 SPACE 2 49550003 DECFXST ST RWORK3,FIXSTART FIXSTART = RENDADD - 4K 49551003 ST RWORK3,RENDADD FROM RENDADD 49552003 L RWORK,DIFF SUBTRACT 4K 49553003 S RWORK,PAGE FROM 49554003 ST RWORK,DIFF DIFFERENCE 49555003 B CHECKDIF CHECK DIFFERENCE 49556003 SPACE 2 49560003 NOTASSIG OC FIXSTART,FIXSTART FIXSTART = 0? Y02714 49562003 BZ GFRENO YES - PAGE NOT OBTAINED 49564003 LM RIN0,RIN1,FIXSTART GET ADDRESSES TO RELEASE Y02714 49566003 NOTASIG1 BAL RCOMRET1,TRNONPVT INHIBIT GETMAINS Y02714 49568003 L R2,PSAAOLD CURRENT ASCB ADDRESS Y02714 49570003 LR RWORK2,RPVT SAVE PVT ADDRESS Y02714 49572003 USING PVT,RPVT Y02714 49580003 L RIN15,PVTPRELV GET ENTRY TO RELEASE PAGE Y02714 49581003 DROP RPVT Y02714 49582003 BALR RRETURN,RIN15 RELEASE PAGE 49583003 USING PVT,RWORK2 Y02714 49584003 NI PVTFLAG1,ALL-PVTBGMS RESET GETMAIN INHIB. FLAG Y02714 49585003 DROP RWORK2 Y02714 49586003 GFRENO TM CLEARSW,CLEARON CLEARSW ON 49587003 BO CALFQCLR YES 49588003 CALGNOTC L RIN15,LARGESTA PICK UP LARGEST AVAILABLE 49589003 B GNOTSATC PAGE NOT OBTAINED 49591003 SPACE 2 49592003 CALFQCLR BAL RCOMRET1,FQECLEAR CLEAR CPB FLAG IN FQE'S 49593003 B CALGNOTC PAGE NOT OBTAINED 49594003 EJECT 49595003 **************************************************************** Y02753 49596003 * Y02753 49597003 * ROUTINE TO DELETE A FUNCTIONAL RECOVERY ROUTINE (FRR) Y02753 49598003 * Y02753 49599003 * INPUT Y02753 49600003 * RRETURN - RETURN ADDRESS Y02753 49601003 * OUTPUT Y02753 49602003 * FRR DELETED Y02753 49603003 * WORK Y02753 49604003 * RWORK, RWORK2 Y02753 49605003 * Y02753 49606003 **************************************************************** Y02753 49607003 SPACE 2 Y02753 49608003 FRRDELET SETFRR D,WRKREGS=(RWORK,RWORK2) DELETE FRR Y02753 49609003 BR RRETURN RETURN Y02753 49610003 EJECT Y02714 49611003 **************************************************************** Y02751 49612003 * Y02751 49613003 * LOCKING INTERFACE ROUTINES - GTSALLOC & CLSALLOC Y02751 49614003 * Y02751 49615003 * INPUT Y02751 49616003 * RCOMRET1 - RETURN ADDRESS Y02751 49617003 * OUTPUT Y02751 49618003 * SALLOC LOCK OBTAINED OR FREED AS REQUESTED Y02751 49619003 * Y02751 49620003 **************************************************************** Y02751 49621003 SPACE 2 Y02751 49622003 GTSALLOC TM LOCKFLAG,SALHELD+SALOBTND LOCK ALREADY HELD OR Y02751 49623003 * OBTAINED? Y02751 49624003 BNZR RCOMRET1 YES, RETURN Y02751 49625003 STM RCOMRET1,RRETURN,LOCKSAVE SAVE REGS 9-14 Y02751 49626003 SOBTAIN SETLOCK OBTAIN,TYPE=SALLOC,MODE=UNCOND,RELATED=(VSM, Y02751*49627003 IEAVGM00(SRELEASE)) GET SALLOC LOCK Y02751 49628003 LTR RCOMRET1,RBASE2 SAVE AND TEST RETURN CODE Y02751 49629003 LM REGB,RRETURN,LOCKSAVE+C8 RESTORE REGISTERS 11-14 Y02751 49630003 BZ GTSALOK4 LOCK OBTAINED Y02751 49631003 LA REGA,C4 IS RETURN Y02751 49632003 CR RCOMRET1,REGA CODE = 4? Y02751 49633003 BE GTSALOK3 YES, LOCK ALREADY HELD Y02751 49634003 * Y02751 49635003 * UNDEFINED RETURN CODE - GO RECORD ERROR & TERMINATE Y02751 49636003 * Y02751 49637003 LA RIN0,GTSALFLD INDICATE SALLOC OBTAIN Y02751 49638003 * RETURN CODE NOT 0 OR 4 Y02751 49639003 L RBASE1,BASE101 SET BASE FOR CSECT01 @Y30APYF 49639303 USING G4KSRCH,RBASE1 @Y30APYF 49639603 B STBRNDX GO TERMINATE USER Y02751 49640003 USING BASE1,RBASE1 REG ALREADY SET @Y30APYF 49640503 SPACE 2 Y02751 49641003 GTSALOK3 OI LOCKFLAG,SALHELD INDICATE LOCK ALREADY HELD Y02751 49642003 B GTSALOK5 GO RESTORE REGISTERS Y02751 49643003 SPACE 2 Y02751 49644003 GTSALOK4 OI LOCKFLAG,SALOBTND INDICATE LOCK OBTAINED Y02751 49645003 L REGA,FRRPARM POINT TO FRR PARAMETER AREA Y02753 49646003 OI PARMFLG1(REGA),PARMSALO INDICATE LOCK OBTAINED Y02753 49647003 GTSALOK5 LM RCOMRET1,REGA,LOCKSAVE RESTORE REGS 9-10 Y02751 49648003 BR RCOMRET1 RETURN, LOCK OBTAINED Y02751 49649003 SPACE 5 Y02751 49650003 CLSALLOC TM LOCKFLAG,SALOBTND WAS LOCK OBTAINED? @ZA03280 49651040 BZR RCOMRET1 NO, DON'T RELEASE IT Y02751 49653003 STM RCOMRET1,RRETURN,LOCKSAVE SAVE REGS 9-14 Y02751 49654003 SRELEASE SETLOCK RELEASE,TYPE=SALLOC,RELATED=(VSM, Y02751*49655003 IEAVGM00(SOBTAIN)) RELEASE SALLOC LOCK Y02751 49656003 LTR RCOMRET1,RBASE2 SAVE AND TEST RETURN CODE Y02751 49657003 LM REGA,RRETURN,LOCKSAVE+C4 RESTORE REGISTERS 10-14 Y02751 49658003 BNZ CLSALOK2 RETURN CODE NOT ZERO Y02751 49659003 CLSALOK1 NI LOCKFLAG,ALL-SALOBTND RESET LOCK OBTAINED FLAG Y02751 49660003 L RCOMRET1,FRRPARM POINT TO FRR PARAMETER AREA Y02753 49661003 NI PARMFLG1(RCOMRET1),ALL-PARMSALO RESET LOCK FLAG Y02753 49662003 L RCOMRET1,LOCKSAVE RESTORE RETURN REGISTER Y02751 49663003 BR RCOMRET1 RETURN,LOCK RELEASED Y02751 49664003 SPACE 2 Y02751 49665003 CLSALOK2 STM RIN15,RIN1,LOCKSAVE+C4 SAVE REGISTERS 15-1 Y02753 49666003 MVI FRRBRNDX,CLSALFLD SALLOC RELEASE R. C. > 4 Y02753 49667003 ABEND X'C0D',DUMP,,SYSTEM GO TO FRR TO RECORD ERROR Y02753 49668003 LM RIN15,RIN1,LOCKSAVE+C4 RESTORE REGISTERS 15-1 Y02753 49669003 B CLSALOK1 CONTINUE AS IF NO ERROR Y02753 49670003 EJECT 50960003 **************************************************************** Y02714 50980003 * Y02714 51050003 * POST PROCESSING ROUTINE TO FREE BLOCKS OF STORAGE Y02714 51060003 * QUEUED TO THE "FMAREAS" FIELD, AND TO CHECK FOR @Z30ENWD 51060803 * INTERNAL CELL EXPANSION REQUIREMENT. CALLS CLSALLOC @Z30ENWD 51061803 * TO FREE LOCK IF OBTAINED. @Z30ENWD 51062803 * INPUT Y02714 51064803 * RLDA - LDA ADDRESS Y02714 51066403 * RBASE1 - BASE REGISTER Y02714 51066803 * RBASE2 - BASE REGISTER Y02714 51066903 * RRETURN - RETURN ADDRESS Y02714 51067003 * OUTPUT Y02714 51067203 * ALL REGISTERS RESTORED @Z30ENWD 51067603 * WORK Y02714 51068003 * GMREPSAV USED TO SAVE REGISTERS Y02714 51068403 * Y02714 51070403 **************************************************************** Y02714 51072603 SPACE 2 @Y30APYF 51072703 FMPOSTP STM RIN0,RCOMRET1,GMREPSAV SAVE REGISTERS 0 TO 9 Y02714 51072803 SPACE 51084503 FMPOST1 L RIN1,FMAREAS FIRST/NEXT AREA TO FREE Y02714 51085403 LTR RIN1,RIN1 IS THERE ONE? Y02714 51088403 BZ FMPOST2 NO, GO CHECK FOR EXPANSION 51090203 L RWORK,C0(0,RIN1) POINT TO NEXT AREA IF ANY Y02714 51090803 ST RWORK,FMAREAS RE-CHAIN REMAINING AREAS Y02714 51091103 L RIN0,C4(0,RIN1) SPID AND LENGTH Y02714 51091403 BAL RCOMRET1,FMAINB GO FREE CURRENT AREA Y02714 51091503 B FMPOST1 GO CHECK FOR MORE Y02714 51091603 SPACE 2 Y02714 51091803 FMPOST2 TM CELLFLGS,LCLEXP+GLBLEXP NEED TO REFILL POOL? @Z30ENWD 51092203 BZ FMPOST3 NO @Z30ENWD 51092403 LR RERROR,RRETURN SAVE RETURN ADDRESS @Z30ENYF 51092503 BAL RRETURN,GETMAINE EXPANSION INTERNAL POOL @Z30ENYF 51092603 LR RRETURN,RERROR 51092703 FMPOST3 BAL RCOMRET1,CLSALLOC CLEAR SALLOC IF OBTAINED @Z30ENWD 51092803 LM RIN0,RCOMRET1,GMREPSAV RESTORE REGISTERS 0 TO 9 Y02714 51093203 BR RRETURN Y02714 51093603 TITLE 'IEAVGM00 OS/VS2 GETMAIN / FREEMAIN SERVICE ROUTINE *51093803 CSECT-IEAVGM01' 51093903 *********************************************************************** 51094203 * 51095003 * G4KSRCH - ENTERED ON A REGION REQUEST TO OBTAIN SOME MULTIPLE 51095603 * OF 4K TO SATISFY A REQUEST 51100003 * 51105003 * INPUT 51110003 * RPREVDQE - LAST DQE ON THE CHAIN 51115003 * SIZEREG - NUMBER OF BYTES REQUESTED (ROUNDED UP 51120002 * TO 4K) 51140002 * RSPID - SPID 51160001 * RLENGTH - ACTUAL LENGTH REQUIRED 51170002 * RRETURN - RETURN ADDRESS 51172002 * OUTPUT 51180001 * RFQE - ADDRESS ALLOCATED AREA 51200002 * RIN15 - LARGEST AVAILABLE IF REQUEST NOT FILLED 51220002 * 51226003 * NOTE - REGISTER 8 CONTAINS THE CSECT01 VALUE 51232003 * 51240001 *********************************************************************** 51250002 SPACE 2 51250303 IEAVGM00 CSECT @Y30APYF 51250603 G4KSRCH1 STM RIN0,RIN15,G4KSAVE SAVE REGS ON ENTRY @Y30APYF 51250903 L RBASE1,BASE101 SET UP ADDRESSABILITY @Y30APYF 51251203 BR RBASE1 GO TO G4KSRCH @Y30APYF 51251503 SPACE 2 @Y30APYF 51252003 IEAVGM01 CSECT @Y30APYF 51254003 SPACE 2 @Y30APYF 51256003 MODID BR=NO @Y30APYF 51258003 SPACE 2 Y02714 51260002 USING G4KSRCH,RBASE1 @Y30APYF 51270003 USING PGTPTE,RPTE Y02714 51300002 USING XPTE,REPTE Y02714 51320002 G4KSRCH TM SPFLAGS,CSA CSA SUBPOOL? @Y30APYF 51330003 BZ G4KSRA NO, NECESSARY LOCKS HELD Y02751 51332002 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 51333003 USING BASE1,RBASE1 @Y30APYF 51333503 BAL RCOMRET1,GTSALLOC YES, GET SALLOC LOCK Y02751 51334002 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 51337003 USING G4KSRCH,RBASE1 @Y30APYF 51338003 G4KSRA BAL RRETURN,FBQSRCH GET STORAGE Y02714 51340002 B SQORLSQ BR IF SATISFIED Y02714 51360003 * 51360103 * THE REQUEST WAS NOT SATISFIED 51361003 * 51362003 TM SPFLAGS,SQA+LSQA SQA OR LSQA REQUEST? Y02714 51363003 BNZ G4KSRB YES, GFRECORE ALREADY CALLED Y02714 51364003 TM CODE1,BOUND PAGE BOUNDARY? 51366003 BO G4KSR1 YES 51367003 C RLENGTH,MAXFQESZ WAS GFRECORE ENTERED? Y02714 51368003 BH G4KSR2 NO 51370003 G4KSRB C RIN15,LARGESTA IS LARGEST AVAILABLE LARGER Y02714 51371003 * THAN THAT JUST RETURNED? 51372003 BNL G4KSR1 NO 51373003 L RIN15,LARGESTA GET LARGEST AVAILABLE 51374003 G4KSR1 LM RIN0,RRETURN,G4KSAVE RESTORE REGS 51375003 B C4(RRETURN) NOT FOUND Y02714 51380002 * 51390003 * IF A VARIABLE REQUEST, GET MAXIMUM AVAILABLE 51391003 * 51392003 G4KSR2 TM CODE1,VARBLE VARIABLE REQUEST? Y02714 51394002 BNO G4KSR1 NO, NO NEED TO CHECK FOR LARGEST 51396002 * AVAILABLE IN FQE 51398402 C RIN15,MAXFQESZ IS LARGEST AVAILABLE GREATER Y02714 51398802 * THAN MAXIMUM FQE SIZE? 51399202 BH G4KSR1 YES, NO NEED FOR FURTHER CHECK 51399601 ST RIN15,LARGEST SAVE LARGEST 4K AVAILABLE 51399701 L RLENGTH,MAXFQESZ GET MAX VALUE FOR FQE SEARCH Y02714 51399802 BAL RCOMRET1,GFRECORE GET LARGEST AVAILABLE IN FQE 51399903 USING G4KULAB,RCOMRET1 @Y30APYF 51403903 G4KULAB B G4KSR3 CORE NOT FOUND - GET LARGEST 51407903 DROP RCOMRET1 51409903 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 51413103 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 51414103 L RIN15,FQELNTH(RFQE) GET VALUE FROM FQE 51417403 B G4KSR1 RETURN WITH LARGEST AVAILABLE 51418403 SPACE 2 51419403 G4KSR3 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 51422403 C RIN15,LARGEST IS THE LENGTH IN THE FQE GREATER 51425403 * THAN THAT IN THE FBQE? @Y30APYF 51428403 BH G4KSR1 YES, USE FQE LENGTH 51431403 * AS LARGEST AVAILABLE 51437201 L RIN15,LARGEST VALUE OF LARGEST FROM FBQE Y02714 51447202 B G4KSR1 RETURN WITH LARGEST AVAILABLE 51449201 * 51449603 * FBQSRCH FOUND ENOUGH FREE SPACE, GET IT INTO A DQE 51450103 * 51450603 SQORLSQ TM SPFLAGS,SQA+LSQA SQA OR LSQA REQUEST? Y02714 51451202 BZ CALLGMC NO, GET A DQE @Z30ENWD 51451603 LA RIN1,DUMYDQE GET DUMMY DQE TO PREVENT Y02714 51452002 B GETDQEP RECURSION THROUGH GETMAINB Y02714 51452402 SPACE 2 51452901 CALLGMC ICM RIN1,MASK1,LDACBSP INDICATE CORRECT SUBPOOL @Z30ENWD 51484303 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 51486303 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 51488303 BAL RRETURN,GETMAINC GET DQE SPACE @Z30ENWD 51490303 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 51492303 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 51494303 GETDQEP L RPREDQE,G4KSAVE+C4 GET PREVIOUS DQE POINTER Y02714 51520002 ST RIN1,DQEPTR(RPREDQE) CHAIN IN DQE Y02714 51560002 ST SEGREG,DQEBLKAD(RIN1) PUT ADDR IN DQE 51580002 ST SIZEREG,DQELNTH(RIN1) PUT LENGTH IN DQE 51590002 LR RPREDQE,RIN1 SAVE DQE ADDRESS 51592002 TM SPFLAGS,SQA SQA REQUEST? Y02714 51592402 BO CRETFQE YES, CREATE FQE Y02714 51592802 TM SPFLAGS,CSA CSA REQUEST? Y02714 51593802 BO SETUPCSA YES, GO SET UP KEY FOR CSA Y02714 51593902 TM SPFLAGS,SWA+AUK SWA OR SP 229, 230? Y02714 51594002 BNZ SETUPREG YES, GO SET UP KEY FOR REGION Y02714 51596002 TM SPFLAGS,LSQA LSQA REQUEST? Y02714 51598902 BO CRSEG YES, CREATE SEGMENT IF NECESS.Y02714 51599002 L RWORK2,LDATCB GET TCB ADDRESS Y02714 51599202 USING TCB,RWORK2 Y02714 51599602 TM TCBFLGS6,TCBRV V=R 51600002 BZ SETUPREG NO, GO SET UP KEY FOR REGION Y02714 51640002 MVI FETCH,ZEROKEY INIT KEY TO 0 @ZA08170 51650040 CH RSPID,H252 SUBPOOL 252 Y02714 51660002 LR RIN15,SIZEREG SAVE SIZE 51680002 BE SKIPKEY YES - TURN OFF FETCH PROTCT @ZA08170 51700040 MVC FETCH,LSPQEKEY GET PROTECT KEY @ZA10820 51730040 DROP RWORK2 Y02714 51762002 OI FETCH,FETCHON SET FETCH PROTECT ON 51770002 SKIPKEY SR RWORK2,RWORK2 @ZA08170 51770440 IC RWORK2,FETCH PICK UP KEY & FETCH PROTECT FOR 51772002 SRL SIZEREG,C12 GET NO. 4K BLOCKS Y02714 51773040 * STORAGE BLOCKS 51774002 SSKLOOP0 LR RADSAV,SEGREG GET ALLOCATED AREA 51780001 SSKLOOP1 LRA RIN1,C0(0,RADSAV) IS FRAME BACKING ALLOC PAGE @ZA08170 51784040 BNZ MTERM028 NO @ZA08170 51788040 CR RADSAV,RIN1 IS PAGE MAPPED 1 TO 1 @ZA08170 51792040 BNE MTERM028 NO @ZA08170 51796040 SSK RWORK2,RADSAV SET STORAGE KEY TO TASK'S PROTECT 51800040 LA RADSAV,C2K(RADSAV) KEY IN ALL ALLOCATED 4K BLOCKS 51820002 SSK RWORK2,RADSAV 51832001 LA RADSAV,C2K(RADSAV) 51834001 BCT SIZEREG,SSKLOOP1 51840001 CH RSPID,H252 SUBPOOL 252 @ZA08170 51843040 BNE SKIPCLR NO, DONT CLEAR AREA @ZA08170 51846040 LR RSPQE,RIN15 SET LENGTH TO BE CLEARED @ZA08170 51847040 LR SIZEREG,SEGREG GET ADDRESS TO BE CLEARED @ZA08170 51852040 SR COMREG,COMREG 0 PADDING, 0 BYTES @ZA08170 51855040 MVCL SIZEREG,RAREG CLEAR AREA ASSIGNED @ZA08170 51860040 SKIPCLR LR SIZEREG,RIN15 RESTORE SIZE @ZA08170 51861040 LR RRETURN,SEGREG START ADDRESS FOR SMF ROUTINE 51880002 ST SIZEREG,SAVESIZE SAVE SIZE 51900001 ST SEGREG,SAVESEG SAVE ADDRESS 51920001 CALLSMF1 L RWORK,AGMSMF SET UP BASE REG & ENTRY POINT Y02714 51940002 BALR RCOMRET1,RWORK GO TO SMF INTERFACE ROUTINE 51950002 L SIZEREG,SAVESIZE RESTORE SIZE Y02714 51960002 L SEGREG,SAVESEG RESTORE ADDRESS 51980001 SR SIZEREG,RLENGTH IS THE AREA 52000001 LTR SIZEREG,SIZEREG THE EXACT SIZE 52020002 BZ ALLOCFD YES 52040001 ICM RIN1,MASK1,LDACBSP INDICATE CORRECT SUBPOOL Y02714 52070002 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52078003 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52086003 BAL RRETURN,GETMAINC GET STORAGE FOR FQE @Z30ENWD 52094003 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52102003 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52110003 ST RIN1,FQEPTR(RPREDQE) CHAIN IN FQE 52140002 ST SIZEREG,FQELNTH(RIN1) PUT LENGTH IN FQE 52160002 MVI FQTYPE(RIN1),REGION INDICATE REGION FQE Y02714 52170002 TM CODE1,BOUND PAGE BOUNDARY? 52172001 BZ HIADDR NO 52174001 LR SIZEREG,SEGREG GET START ADDRESS 52176002 A SIZEREG,SAVESIZE GET HIGH BOUND 52178001 ST SIZEREG,FQAREA(RIN1) HIGH BOUND OF FREE AREA 52178401 B ALLOCFD RETURN - STORAGE FOUND 52178802 SPACE 2 52179201 HIADDR AR SEGREG,SIZEREG HIGH ADD OF FREE SPACE 52180001 ST SEGREG,FQAREA(RIN1) STORE HI ADDR IN FQE 52200002 ALLOCFD LR RFQE,SEGREG SET ADDRESS OF ALLOCATED AREA 52260002 LM RIN0,RIN1,G4KSAVE RESTORE REGISTERS 52280002 LM COMREG,RIN15,G4KSAVE+C12 Y02714 52290002 BR RRETURN RETURN - STORAGE FOUND Y02714 52300002 SPACE 2 52302002 MTERM028 LR RADSAV,RBASE2 SAVE BASEREG ACROSS CALLRTM @ZA08170 52304040 LA RSAVAREA,REGSAVE GET ADDRESS OF SAVEAREA @ZA08170 52304240 CALLRTM TYPE=MEMTERM,COMPCOD=X'028' TERMINATE MEMORY @ZA08170 52304440 SETLOCK RELEASE,TYPE=ALL,RELATED=('ANY GM00 OR USER LOCKS') 52304640 * RELEASE ALL LOCKS @ZA08170 52304840 LR RBASE2,RADSAV RESTORE BASE REG @ZA08170 52305040 BAL RRETURN,FRRDELET DELETE FRR @ZA08170 52305240 L RIN3,CVTPTR GET CVT PTR @ZA08170 52305440 USING CVT,RIN3 @ZA08170 52305640 L RIN15,PSALCCAV GET LCCA PTR @ZA08170 52306040 USING LCCA,RIN15 @ZA08170 52306140 TM LCCADSF2,LCCASRBM SRB MODE? @ZA08170 52306240 BO SRBEXIT YES @ZA08170 52306340 L RIN15,CVT0DS DISPATCHER ENTRY @ZA08170 52306440 BR RIN15 EXIT TO DISPATCHER @ZA08170 52306540 SRBEXIT L RIN15,CVTSRBRT SRB EXIT @ZA08170 52306640 BR RIN15 GO TO SRB EXIT @ZA08170 52306740 DROP RIN3 @ZA08170 52306840 DROP RIN15 @ZA08170 52306940 SPACE 2 Y02714 52310002 CRSEG LR RLENGTH,SIZEREG GET AREA SIZE FOR FQE Y02714 52310102 TM FLAGS,GETMB GETMAINB REQUEST? Y02714 52310402 BZ CRSEG1 NO Y02714 52310802 LRA RWORK2,C0(0,SEGREG) IS SEGMENT VALID Y02714 52311202 BC 11,CRETFQE0 YES, CREATE FQE Y02714 52311602 LR RIN0,SEGREG GET START OF AREA Y02714 52311702 BAL WORK,CRSEGA GO TO CREATE SEGMENT Y02714 52311802 LR RFQE,SEGREG AREA ADDRESS Y02714 52311902 LR RWORK3,SEGREG ALSO NEEDED FOR PGINCORE Y02714 52312302 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52312403 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52312503 USING CRSEG11,WORK @Y30APYF 52312603 BAL WORK,PGINCORE GET REAL PAGE FOR TABLES Y02714 52312703 CRSEG11 B CRSEG0 OBTAINED O. K. Y02714 52313503 DROP WORK @Y30APYF 52313703 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52313803 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52314503 LR RADDRM,RWORK3 FAILED, GET START OF AREA Y02714 52315203 B CRETFQE2 RETURN STORAGE TO FBQE Y02714 52315903 SPACE 2 Y02714 52316303 CRSEG0 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52316803 LR SEGREG,RWORK3 RESTORE AREA ADDRESS Y02714 52317303 LA RFQE,CPAGE-PGTABLEN(0,RFQE) NEW RESERVED AREA Y02714 52317803 ST RFQE,LDARSVPT SAVE FOR LATER PAGE TABLE Y02714 52318303 LA RWORK2,PGTABLEN GET PAGE TABLE SIZE Y02714 52319203 SR RLENGTH,RWORK2 REDUCE FQE SIZE BY THIS SIZE Y02714 52319903 B CRETFQE1 CREATE FQE BELOW RSVD. AREA Y02714 52320603 SPACE 2 Y02714 52321303 CRSEG1 LR RAUB,SEGREG AREA ADDRESS Y02714 52322303 AR RAUB,SIZEREG AREA UPPER BOUND (AUB) Y02714 52323303 LR WORK,RAUB SET TEMP AUB (TAUB) = AUB Y02714 52324902 N WORK,SEGBND ROUND TAUB DOWN TO SEG. BOUND Y02714 52325302 LR RWORK3,WORK SET TEMP ALB (TALB) Y02714 52325502 BCTR RWORK3,0 = TAUB - 1 Y02714 52326003 CR RWORK3,SEGREG TALB > AREA LOWER BOUND (ALB) Y02714 52326103 BNH CRETFQE0 NO, SEGMENT CREATE NOT NEEDED Y02714 52327103 SR R2,R2 INIT SEGMENT COUNT (SC) TO 0 Y02714 52328103 N RWORK3,SEGBND ROUND TALB DOWN TO SEG. BOUND Y02714 52328603 CRSEG3 LRA RIN0,C0(0,RWORK3) IS THIS SEGMENT VALID Y02714 52329103 BC 11,CRSEG5 YES, MUST BE BOTTOM SEGMENT Y02714 52329603 LA R2,C1(0,R2) NO, INCREMENT SC Y02714 52330103 CR RWORK3,SEGREG TALB > ALB Y02714 52331003 BNH CRSEG6 NO, BOTTOM SEGMENT REACHED Y02714 52332303 S RWORK3,SEGMENT DECREMENT TALB BY 1 SEGMENT Y02714 52333003 B CRSEG3 CONTINUE CHECKING Y02714 52333703 SPACE 2 Y02714 52333803 CRSEG5 LTR R2,R2 SC > 0 Y02714 52334803 BZ CRETFQE0 NO, NO INVALID SEGMENTS Y02714 52335303 A RWORK3,SEGMENT INCREMENT TALB BY 1 SEGMENT Y02714 52336303 CRSEG6 LA RIN15,PGTABLEN LENGTH OF PAGE TABLES Y02714 52336903 MR RRETURN,R2 LENGTH NEEDED FOR PAGE TABLES Y02714 52337503 LR RIN1,RAUB GET SIZE AVAILABLE IN TOP Y02714 52338103 SR RIN1,WORK SEGMENT (AUB - TAUB) Y02714 52338703 ST RWORK3,TEMPSAV1 SAVE TALB OVER PGINCORE Y02714 52339303 CR RIN1,RIN15 SIZE AVAIL < SIZE NEEDED? Y02714 52339903 BL CRSEG7 YES, USE RESERVED AREA Y02714 52340503 LR RIN1,RAUB USE TOP OF NEW AREA Y02714 52341103 SR RIN1,RIN15 FOR PAGE TABLES Y02714 52341703 SR RLENGTH,RIN15 REDUCE FQE SIZE Y02714 52342303 LR RWORK3,RIN1 GET PAGE TABLE ADDRESS Y02714 52342903 N RWORK3,BND4K ROUND DOWN TO PAGE BOUNDARY Y02714 52343503 ST SEGREG,TEMPSAV2 SAVE AREA ADDRESS Y02714 52344103 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52344703 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52345303 BAL WORK,PGINCORE GET REAL PAGE FOR TABLES Y02714 52345903 USING CRSEG66,WORK @Y30APYF 52346503 CRSEG66 B CRSEG6A OBTAINED O. K. Y02714 52347103 DROP WORK @Y30APYF 52347703 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52348303 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52348903 L RADDRM,TEMPSAV2 FAILED, GET START OF AREA Y02714 52350503 B CRETFQE2 RETURN STORAGE TO FBQE Y02714 52352303 SPACE 2 Y02714 52354103 CRSEG6A L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52355003 L RWORK3,TEMPSAV1 RESTORE TALB Y02714 52355903 L SEGREG,TEMPSAV2 RESTORE AREA ADDRESS Y02714 52356903 LR RIN0,R2 SEGMENT COUNT Y02714 52359503 SLL RIN0,C8 POSITION TO BYTE 2 Y02714 52360403 LR RFQE,RIN1 SAVE TOP OF FQE Y02714 52362203 SRL RWORK3,C16 GET SEGMENT INDEX FROM TALB Y02714 52364003 OR RIN0,RWORK3 PUT IN BYTE 3 Y02714 52365803 BAL WORK,CRSEGB CREATE NECESSARY SEGMENTS Y02714 52367603 B CRETFQE1 CREATE FQE BELOW PAGE TABLES Y02714 52369403 SPACE 2 Y02714 52371203 CRSEG7 ST WORK,TEMPSAV3 SAVE TAUB Y02714 52373003 LR RIN0,WORK GET TAUB - 1 (AN ADDR IN Y02714 52374003 BCTR RIN0,0 TOP SEGMENT) Y02714 52376603 LR RWORK3,RIN0 SAVE TAUB - 1 FOR PGINCORE Y02714 52377503 BAL WORK,CRSEGA GO CREATE TOP SEGMENT Y02714 52380203 LR RIN1,SEGREG SAVE AREA ADDRESS Y02714 52381103 ST RAUB,TEMPSAV2 SAVE AUB Y02714 52382903 N RWORK3,BND4K ROUND TAUB - 1 DOWN TO PAGE Y02714 52384703 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52386503 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52386803 BAL WORK,PGINCORE GET REAL PAGE FOR TABLES Y02714 52387103 USING CRSEG77,WORK @Y30APYF 52387203 CRSEG77 B CRSEG8 OBTAINED O. K. Y02714 52387703 DROP WORK @Y30APYF 52387903 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52388103 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52388303 LR RADDRM,RIN1 FAILED, GET START OF AREA Y02714 52390103 B CRETFQE2 RETURN STORAGE TO FBQE Y02714 52391103 SPACE 2 Y02714 52393703 CRSEG8 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52394103 LR SEGREG,RIN1 RESTORE AREA ADDRESS Y02714 52394603 L RWORK3,TEMPSAV1 RESTORE TALB Y02714 52396403 L RAUB,TEMPSAV2 RESTORE AUB Y02714 52398203 LA RIN0,PGTABLEN LENGTH OF PAGE TABLES Y02714 52400003 SR RAUB,RIN0 NEW RESERVED AREA Y02714 52402003 ST RAUB,LDARSVPT SAVE FOR LATER PAGE TABLES Y02714 52404003 SR RLENGTH,RIN0 REDUCE FQE SIZE Y02714 52405003 BCTR R2,0 REDUCE SC BY 1 Y02714 52407003 LTR RIN0,R2 ANY SEGMENTS LEFT TO CREATE? Y02714 52408003 LR RFQE,RAUB TOP ADDRESS OF FQE Y02714 52409003 BNP CRETFQE1 NO, CREATE FQE Y02714 52411003 LR R2,RIN0 RESTORE SC Y02714 52413003 L WORK,TEMPSAV3 RESTORE TAUB Y02714 52415003 S WORK,SEGMENT GO DOWN 1 SEGMENT Y02714 52416003 B CRSEG6 GO PROCESS REST OF SEGMENTS Y02714 52418003 SPACE 5 Y02714 52421003 * Y02714 52422003 * SUBROUTINE TO INTERFACE WITH THE RSM CREATE SEGMENT Y02714 52423003 * ROUTINE Y02714 52425003 * Y02714 52427003 SPACE 2 Y02714 52428003 CRSEGA SRL RIN0,C16 GET SEGMENT INDEX Y02714 52430003 LA RIN1,ONESEG GET A ONE IN BYTE 2 Y02714 52432003 OR RIN0,RIN1 SET SEGMENT COUNT TO 1 Y02714 52433003 L RIN1,LDARSVPT RESERVED AREA FOR PAGE TABLES Y02714 52435003 CRSEGB L RIN15,VCRSEG "CREATE SEGMENT" ENTRY ADDRESSY02714 52438003 LA RSAVAREA,REGSAVE POINT TO REG. SAVE AREA Y02714 52439003 BALR RRETURN,RIN15 CREATE SEGMENT Y02714 52440003 L RBASE2,G4KSAVE+C52 RESTORE BASE REGISTER Y02714 52442003 LTR RRETCODE,RRETCODE IS RETURN CODE ZERO Y02714 52444003 BZR WORK YES, RETURN Y02714 52445003 LA RIN0,CRSEGERR INDICATE ERROR IN CREATE SEG. Y02753 52447003 STBRNDX STC RIN0,FRRBRNDX STORE FOR FRR Y02753 52449003 ABEND X'C0D',DUMP,,SYSTEM RECORD ERROR, TERMINATE USER Y02753 52450003 * 52452003 * REQUEST WAS SQA, CHAIN IN AN FQE AND GET A PAGE TO BACK UP 52453003 * THE PAGE JUST GOTTEN FROM THE FBQE 52454003 * 52454503 CRETFQE LR RLENGTH,SIZEREG GET AREA SIZE FOR FQE Y02714 52455003 CRETFQE0 LR RFQE,SEGREG AREA ADDRESS Y02714 52456003 AR RFQE,SIZEREG TOP OF AREA + 1 Y02714 52457003 CRETFQE1 LA RWORK2,FQESLNTH GET FQE LENGTH Y02714 52459003 SR RFQE,RWORK2 START OF FQE Y02714 52461003 ST RFQE,FQEPTR(0,RPREDQE) CHAIN IN FQE Y02714 52462003 LR RWORK3,RFQE GET START OF FQE Y02714 52464003 N RWORK3,BND4K AND ROUND DOWN TO PG BOUNDARY Y02714 52466003 LR RADDR,SEGREG SAVE AREA ADDRESS Y02714 52467003 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52469003 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52469403 BAL WORK,PGINCORE BRING PAGE INTO STORAGE Y02714 52469803 USING CRETFQ11,WORK @Y30APYF 52470203 CRETFQ11 B CRETFQE3 STORAGE WAS AVAILABLE @Y30APYF 52470603 DROP WORK @Y30APYF 52471003 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52471403 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52472003 * STORAGE NOT AVAILABLE, MUST Y02714 52473003 * RESTORE STORAGE TO PQE Y02714 52474003 LR RADDRM,RADDR GET START OF AREA Y02714 52476003 CRETFQE2 L RPQEM,SAVEPQE GET PQE ADDR SAVED IN FBQSRCH Y02714 52478003 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52480003 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52482003 BAL RRETURN,MRELEASE GO RETURN STORAGE TO PQE Y02714 52484003 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52486003 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52488003 MVI OUTSW,REALOUT INDICATE OUT OF REAL Y02714 52490003 L RPREDQE,G4KSAVE+C4 GET PREVIOUS DQE POINTER Y02714 52492003 SR RIN15,RIN15 SET LARGEST AVAIL = 0 Y02714 52494003 ST RIN15,DQEPTR(RPREDQE) CLEAR NEXT DQE POINTER TO Y02714 52496003 * UNCHAIN DUMMY DQE Y02714 52498003 B G4KSR1 RETURN, STORAGE NOT OBTAINED Y02714 52500003 SPACE 2 Y02714 52502003 CRETFQE3 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52503003 SR RWORK2,RWORK2 ZERO NEXT FQE PTR Y02714 52504003 ST RWORK2,FQEPTR(0,RFQE) AND REGION FLAG Y02714 52506003 ST RLENGTH,FQELNTH(0,RFQE) PUT SIZE IN FQE Y02714 52508003 LR SEGREG,RADDR RESTORE AREA ADDRESS Y02714 52510003 TM SPFLAGS,LSQA LSQA REQUEST? Y02714 52512003 BZ ALLOCFD NO, GO FINISH Y02714 52514003 LR RRETURN,SEGREG GET AREA ADDRESS FOR SMF Y02714 52516003 LR RIN15,SIZEREG GET SIZE FOR SMF Y02714 52518003 L RWORK,AGMSMF SET UP BASE REG & ENTRY POINT Y02714 52520003 BALR RCOMRET1,RWORK GO TO SMF INTERFACE ROUTINE Y02714 52522003 LR SEGREG,RRETURN RESTORE AREA ADDRESS Y02714 52524003 B ALLOCFD GO FINISH UP Y02714 52526003 SPACE 2 52528003 SETUPCSA L RIN15,VPFP2 GET FIND PAGE ENTRY THAT Y02714 52540003 ST RIN15,VPFP REQUIRES SALLOC LOCK Y02714 52542003 L R2,PSAAOLD GET CURRENT ASCB Y02714 52544003 USING ASCB,R2 Y02714 52546003 L R2,ASCBRSM GET RSM HEADER ADDRESS Y02714 52548003 DROP R2 Y02714 52550003 L RIN3,CVTPTR GET CVT ADDRESS YO2714 52552003 USING CVT,RIN3 Y02714 52554003 L RIN3,CVTPVTP GET PVT ADDRESS Y02714 52556003 DROP RIN3 Y02714 52558003 B SETUPKEY CONTINUE Y02714 52560003 * 52562003 * CALL FIND PAGE TO PUT KEY INTO XPT 52564003 * 52566003 SETUPREG L RIN15,VPFP1 GET FIND PAGE ENTRY THAT Y02714 52568003 ST RIN15,VPFP REQUIRES LOCAL MEMORY LOCK Y02714 52570003 SETUPKEY ST SIZEREG,SAVESIZE SAVE SIZE Y02714 52572003 SRL SIZEREG,C12 NUMBER OF 4K BLOCKS Y02714 52580002 SR RWORK2,RWORK2 KEY 0, NO FETCH PROTECT 52580402 ST SEGREG,SAVESEG SAVE ADDRESS 52581402 CH RSPID,H252 SUBPOOL 252? Y02714 52582002 BE CALLPFP YES, GO CALL FIND PAGE Y02714 52590002 MVC FETCH,LSPQEKEY GET PROTECT KEY Y02714 52592002 TM SPFLAGS,FPROTECT SHOULD FETCH PROTECT BE SET? Y02714 52592402 BZ GETKEY NO Y02714 52592802 OI FETCH,FETCHON SET FETCH PROTECT ON 52594001 GETKEY IC RWORK2,FETCH GET PROTECT KEY Y02714 52596002 CALLPFP L RIN15,VPFP FIND PAGE Y02714 52696002 LR RIN1,SEGREG START ADDRESS Y02714 52697002 BALR RRETURN,RIN15 GO TO FIND PAGE 52706002 LTR RRETCODE,RRETCODE IS RETURN CODE ZERO Y02714 52716002 BZ SETUPPTE YES, MARK PAGES ASSIGNED Y02714 52726002 LA RIN0,C4 CONSTANT OF 4 Y02714 52736002 CR RRETCODE,RIN0 IS RETURN CODE 4 Y02714 52738002 BNE PFPRC8 NO, ERROR Y02714 52738402 LA RIN1,PGTABLEN YES, GET SPACE FOR PAGE TABLESY02714 52738802 ICM RIN1,MASK1,LDACBSP GET LSQA SUBPOOL Y02714 52739202 LR RIN0,RIN1 SAVE IN CASE OF FREEMAIN Y02714 52739302 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 52739403 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 52739603 BAL RRETURN,GETMAINB GO GET SPACE Y02714 52741803 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 52742503 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 52743203 LRA WORK,C0(0,SEGREG) HAS SEGMENT BECOME VALID Y02714 52743603 BC 11,SEGVALID YES, GO FREE SPACE Y02714 52745603 LR RIN0,SEGREG START ADDRESS Y02714 52748803 SRL RIN0,C16 SEGMENT INDEX Y02714 52751203 LA WORK,ONESEG GET A 1 IN BYTE 2 Y02714 52751603 OR RIN0,WORK SET SEGMENT COUNT TO 1 Y02714 52752603 BAL WORK,CRSEGB GO CREATE SEGMENT Y02714 52753603 B CALLPFP GO GET PAGE TABLE ADDRESSES Y02714 52756303 SPACE 2 Y02714 52757303 PFPRC8 L RRETURN,SAVESEG GET ADDRESS FOR SMF Y02753 52760003 L RIN15,SAVESIZE GET SIZE FOR SMF Y02753 52761003 L RWORK,AGMSMF SET UP BASE REG & ENTRY POINT Y02753 52762003 BALR RCOMRET1,RWORK GO TO SMF INTERFACE ROUTINE Y02753 52763003 * TO GET TCT AND CURRGNTP Y02753 52764003 * UPDATED Y02753 52765003 LA RIN0,FNDPGERR INDICATE FIND PAGE ERROR Y02753 52766003 B STBRNDX GO TERMINATE USER Y02753 52767003 SPACE 2 Y02753 52768003 SETUPPTE LR RPTE,RIN0 SET UP PTE REGISTER Y02714 52769003 ADPAGE A SEGREG,PAGE NEXT PAGE ADDRESS 52770003 OI PGTBITS,PGTPAM MARK PAGE ASSIGNED Y02714 52771003 STC RWORK2,XPTPROT PUT PROTECT KEY IN XPT 52780002 NI XPTFLAGS,ALL-XPTCKF TURN CHANGE KEY BIT OFF @Z40EPYG 52786040 BCT SIZEREG,ENDSEG PROCESS NEXT PAGE Y02714 52800002 L RRETURN,SAVESEG GET ADDRESS FOR SMF 52820001 L RIN15,SAVESIZE GET SIZE FOR SMF 52840001 B CALLSMF1 52860001 SPACE 2 52870001 ENDSEG STH SEGREG,SEGTEST TEST FOR END 52900002 TM SEGTEST,END OF SEGMENT 52920002 BZ CALLPFP YES, CALL FIND PAGE Y02714 52940002 LA REPTE,XPTLEN(REPTE) NO, GET NEXT XPTE Y02714 53100002 LA RPTE,PGTLEN(RPTE) NEXT PTE Y02714 53120002 B ADPAGE RETURN TO MAINSTREAM Y02714 53160002 SPACE 2 Y02714 53210002 SEGVALID LR RRETURN,SEGREG SAVE START ADDRESS Y02714 53220002 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 53221003 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 53222003 BAL RCOMRET1,FMAINB FREE PAGE TABLE SPACE Y02714 53223003 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 53224003 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 53225003 LR SEGREG,RRETURN RESTORE START ADDRESS Y02714 53240002 B CALLPFP TRY AGAIN Y02714 53250002 SPACE 2 53260001 DROP RPTE Y02714 53560002 DROP REPTE 53580001 EJECT 53600001 *********************************************************************** 53600803 * 53601603 * THIS ROUTINE SEARCHES AN FBQE CHAIN FOR 4K MULTIPLES 53602403 * 53603203 * INPUT 53604003 * SIZEREG - LENGTH IN BYTES 53604803 * RRETURN - RETURN ADDRESS 53605603 * OUTPUT 53606403 * SEGREG - ADDRESS OF AREA ASSIGNED 53607203 * RIN15 - LARGEST AVAILABLE IF REQUEST NOT HONORED 53608003 * ALL REMAINING REGISTERS RESTORED 53608803 * 53609203 * NOTE REGISTER 8 CONTAINS THE CSECT01 VALUE 53609603 * 53610003 *********************************************************************** 53613003 SPACE 2 Y02714 53616003 FBQSRCH EQU * 53619003 STM RIN0,RIN15,FBQSAVE SAVE REGISTERS 53622003 SR RWORK2,RWORK2 SET LARGEST AVAILABLE Y02714 53625003 ST RWORK2,LARSOFAR TO ZERO Y02714 53628003 LA RAREG,C4 INITIALIZE TO BACKWARD POINTER 53631003 TM SPFLAGS,SQA+CSA SQA OR CSA SUBPOOL? Y02714 53634003 BNZ GETPQEC YES, CHECK SPACE LEFT Y02714 53640003 TM SPFLAGS,LSQA+SWA+AUK LSQA, SWA OR AUTH U. K. SP? Y02714 53640903 BNZ GETPQEL GET LSQA PQE Y02714 53641803 SR RAREG,RAREG SET TO FORWARD POINTER, FBQE Y02714 53642703 L RWORK2,LDATCB GET TCB ADDRESS Y02714 53643603 USING TCB,RWORK2 Y02714 53644503 L RPQE,TCBPQE GET DUMMY PQE POINTER Y02714 53645403 DROP RWORK2 Y02714 53646303 GETPQE LTR RPQE,RPQE IS THERE A PQE POINTER? Y02714 53647203 BZ RETNOTFD NO, RETURN, STORAGE NOT FOUND Y02714 53648103 LA RWORK3,DUMFBQE ADDR OF MRELEASE DUMMY FBQE Y02714 53649003 L RPQE,PQEFPQE(RPQE) GET ADDRESS OF ACTUAL PQE 53649903 ST RPQE,SAVEPQE SAVE PQE POINTER FOR G4KSRCH Y02714 53650803 L RFBQE,C0(RAREG,RPQE) GET PROPER FBQE 53651703 ANYFBQE CR RFBQE,RPQE ANY FBQES? Y02714 53652603 BE RETNOTFD NO, RETURN, STORAGE NOT FOUND 53653503 TM SPFLAGS,SQA+CSA SQA OR CSA SUBPOOL ? @ZA27466 53654440 BNZ BESTCSA YES, FIND BEST FITTING BLK @ZA27466 53655040 L SEGREG,FBQAREA(0,RFBQE) GET FBQE AREA ADDRESS @ZA27466 53655640 TM SPFLAGS,LSQA+SWA+AUK LSQA, SWA OR AUTH U. K. SP? Y02714 53657103 BZ FBQSPPSP NO, PROBLEM PROGRAM SUBPOOL Y02714 53658003 C SEGREG,CURRGNTP FBQE START BELOW CURRGNTP? Y02714 53658903 BL RETNOTFD YES, STORAGE NOT AVAILABLE Y02714 53660003 CKFBQESZ CLC LARSOFAR,SIZE(RFBQE) LARGEST SO FAR? Y02714 53660903 BNL CHLAST NO 53661803 CR RWORK3,RFBQE IS THIS DUMMY FBQE Y02714 53662703 BE CHLAST YES, CAN'T USE IT Y02714 53663603 TM FLAGS,ERGNRCHD IS V=V REGION IN THIS FBQE? Y02714 53664503 BZ SETLARGS NO, SET LARGEST SO FAR Y02714 53665403 SR RSIZE,SEGREG GET AVAILABLE SPACE IN FBQE Y02714 53666303 C RSIZE,LARSOFAR AVAILABLE SPACE > LARSOFAR Y02714 53667203 BNH RETNOTFD NO, STORAGE NOT AVAILABLE Y02714 53668103 ST RSIZE,LARSOFAR SET LARSOFAR TO AVAIL SPACE Y02714 53669003 CR SIZEREG,RSIZE REQUEST SIZE <= AVAIL SPACE Y02714 53670003 BH RETNOTFD NO, STORAGE NOT AVAILABLE Y02714 53671003 MVC LARSOFAR,SIZE(RFBQE) YES, SET TO FBQE AREA SIZE Y02714 53672003 B USEFBQE USE THIS FBQE Y02714 53673003 SPACE 2 Y02714 53674003 SETLARGS MVC LARSOFAR,SIZE(RFBQE) SAVE LARGEST Y02714 53675003 C SIZEREG,LARSOFAR LARGE ENOUGH? 53676003 BH CHLAST NO 53677003 USEFBQE L RLGSOFAR,LARSOFAR GET BYTES LEFT OVER Y02714 53678003 SR RLGSOFAR,SIZEREG EXACT SIZE? Y02714 53679003 BE DEQUEUE YES - DEQUEUE FBQE 53680003 SAVXCESS ST RLGSOFAR,SIZE(RFBQE) REFLECT REMAINING CORE @ZA27466 53681040 AR SEGREG,RLGSOFAR GET ADDRESS OF AREA TO BE Y02714 53682003 * ASSIGNED IF HIGH 53683003 LTR RAREG,RAREG REQUEST OBTAINED HIGH? 53684003 BNE RETFOUND YES 53685003 SR SEGREG,RLGSOFAR DECREMENT ADDRESS IF LOW 53686003 LR RWORK2,SIZEREG COPY REQUESTED SIZE @ZA27466 53687040 AR RWORK2,SEGREG CALC NEW FREE AREA ADDR @ZA27466 53687540 ST RWORK2,FBQAREA(RFBQE) STORE IT INTO FBQE @ZA27466 53688040 RETFOUND TM SPFLAGS,CSA CSA SUBPOOL? Y02714 53689003 BZ RETFND1 NO Y02714 53690003 TM SPFLAGS,SQA SUBPOOL 227, 228, OR 239 @Y30APYF 53691003 BO RETFND1 YES, SKIP SRM Y02714 53692003 LR RWORK2,SEGREG SAVE AREA ADDRESS Y02714 53693003 LNR RIN0,SIZEREG GET - REQUEST SIZE Y02714 53694003 STM REGB,RIN1,LOCKSAVE SAVE REGS AS IS DONE BY @Y30APYF 53694203 * CODE AT LABEL SRM @Y30APYF 53694403 L REGB,ASRM LOAD UP ITS BASE REG @Y30APYF 53694603 BALR RCOMRET1,REGB TELL SRM, CSA ALLOCATED @Y30APYF 53695003 LR SEGREG,RWORK2 RESTORE AREA ADDRESS Y02714 53745203 RETFND1 NI FLAGS,ALL-VARPASS2-ERGNRCHD RESET FLAGS Y02714 53825203 LM RIN0,RWORK2,FBQSAVE RESTORE Y02714 53905203 LM RLENGTH,RIN15,FBQSAVE+C40 REGS Y02714 53985203 BR RRETURN RETURN - STORAGE FOUND 54065203 SPACE 2 54145203 CHLAST L RFBQE,C0(RAREG,RFBQE) GET NEXT FBQE 54225203 B ANYFBQE CHECK FOR END OF CHAIN Y02714 54305203 SPACE 2 Y02714 54385203 * 54387240 * THIS ROUTINE PERFORMS A BEST FIT SEARCH OF FBQE'S IN @ZA27466 54389240 * ORDER TO SATISFY REQUESTS FOR CSA, OR SQA THAT HAS @ZA27466 54391240 * EXPANDED INTO CSA. FOR REQUESTS OF 4K, FBQE'S ARE @ZA27466 54393240 * SEARCHED DOWN FROM HIGH CSA ADDRESSES. FOR REQUESTS @ZA27466 54395240 * GREATER THAN 4K, FBQE'S ARE SEARCHED UP FROM LOW CSA @ZA27466 54397240 * ADDRESSES. @ZA27466 54399240 * 54401240 SPACE 1 54401840 BESTCSA L REGA,LGPOSNUM GET LARGEST POSITIVE NUMBER @ZA27466 54403240 AREAADDR L SEGREG,FBQAREA(0,RFBQE) GET FBQE AREA ADDRESS @ZA27466 54405240 CLC LARSOFAR,SIZE(RFBQE) LARGEST AREA SO FAR ? @ZA27466 54407240 BNL CHKSIZE NO, DO NOT SAVE IT @ZA27466 54409240 MVC LARSOFAR,SIZE(RFBQE) SAVE NEW LARGEST-SO-FAR @ZA27466 54411240 CHKSIZE C SIZEREG,SIZE(RFBQE) BIG ENOUGH TO FILL REQUEST? @ZA27466 54413240 BH NEXTFBQE NO, GET NEXT FBQE @ZA27466 54415240 CR RWORK3,RFBQE DUMMY FBQE @ZA27466 54417240 BE NEXTFBQE YES, GET NEXT FBQE @ZA27466 54419240 L RIN15,SIZE(RFBQE) GET FREE AREA SIZE @ZA27466 54421240 SR RIN15,SIZEREG CALCULATE EXCESS FREE @ZA27466 54423240 BE DEQUEUE BR IF EXACT FIT @ZA27466 54425240 CR RIN15,REGA CLOSEST SO FAR ? @ZA27466 54427240 BNL NEXTFBQE NO, GET NEXT FBQE @ZA27466 54429240 LR REGB,RFBQE SAVE ADDR CLOSEST FBQE @ZA27466 54431240 LR REGA,RIN15 SAVE CLOSEST EXCESS @ZA27466 54433240 NEXTFBQE L RFBQE,C0(RAREG,RFBQE) GET ADDR NEXT FBQE @ZA27466 54435240 CR RFBQE,RPQE ANY MORE FBQE'S ? @ZA27466 54437240 BNE AREAADDR YES, CHECK IT OUT @ZA27466 54439240 C REGA,LGPOSNUM ANY CLOSE FBQE FOUND ? @ZA27466 54441240 LR RFBQE,REGB GET FBQE ADDRESS @ZA27466 54443240 LR RIN15,REGA GET EXCESS FREE @ZA27466 54445240 L SEGREG,FBQAREA(0,RFBQE) GET FREE AREA ADDRESS @ZA27466 54447240 BNE SAVXCESS BR, CLOSE FBQE FOUND @ZA27466 54449240 SPACE 2 @ZA27466 54451240 RETNOTFD L RIN15,LARSOFAR PICK UP LARGEST AVAILABLE 54465203 NI FLAGS,ALL-ERGNRCHD RESET REGION FLAG Y02714 54545203 LM RIN0,RRETURN,FBQSAVE RESTORE REGS 54625203 B C4(RRETURN) STORAGE NOT FOUND 54705203 SPACE 2 54785203 DEQUEUE LM REGA,REGB,FWDPTR(RFBQE) ELIMINATE 54865203 ST REGA,FWDPTR(REGB) FBQE 54945203 ST REGB,BCKPTR(REGA) FROM QUEUE 55025203 LR RIN1,RFBQE GET ADDRESS TO FREE 55345203 LR RRETURN,SEGREG SAVE ADDRESS OF AREA Y02714 55425203 L RBASE1,BASE100 BASE AS FOR CSECT00 @Y30APYF 55505203 USING BASE1,RBASE1 TELL ASSEMBER @Y30APYF 55585203 BAL RCOMRET1,FMAINC FREEMAIN FBQE @Z30ENWD 55665203 L RBASE1,BASE101 BASE AS FOR CSECT01 @Y30APYF 55745203 USING G4KSRCH,RBASE1 TELL ASSEMBLER @Y30APYF 55825203 LR SEGREG,RRETURN RESTORE ADDRESS OF AREA 55905203 B RETFOUND 55985203 SPACE 2 Y02714 56065203 GETPQEC L RCVT,CVTPTR GET CVT ADDRESS Y02714 56145203 USING CVT,RCVT Y02714 56225203 L RGDA,CVTGDA GET GDA ADDRESS Y02714 56305203 DROP RCVT Y02714 56385203 USING GDA,RGDA Y02714 56465203 TM GDAFLAGS,SQATHRS2 HAS CRITICAL THRESH PASSED? Y02714 56545203 BZ GETPQEC1 NO, GET PQE Y02714 56625203 TM SPFLAGS,SQA SQA? (EXPANSION INTO CSA) Y02714 56705203 BO GETPQEC1 YES, GET CSA PQE Y02714 56785203 L RWORK2,SQASPLFT GET SQA SPACE LEFT Y02714 56865203 C RWORK2,PAGE IS THERE ONLY 1 PAGE? Y02714 56945203 BNH RETNOTFD YES, SAVE IT FOR SQA Y02714 57025203 GETPQEC1 LA RPQE,CSAPQEP-C8 GET CSA DUMMY PQE POINTER Y02714 57105203 DROP RGDA Y02714 57185203 C SIZEREG,PAGE TRYING TO FIND 1 PAGE ? @ZA27466 57205240 BE GETPQE YES, SEARCH FROM TOP OF CSA @ZA27466 57215240 SR RAREG,RAREG NO, SEARCH FROM BOTTOM @ZA27466 57225240 B GETPQE CONTINUE Y02714 57265203 SPACE 2 Y02714 57345203 GETPQEL LA RPQE,ASDPQE-C8 GET A. S. DUMMY PQE POINTER Y02714 57425203 B GETPQE CONTINUE Y02714 57505203 SPACE 2 Y02714 57585203 FBQSPPSP L RSIZE,LDALIMIT GET INSTALLATION REGION LIMIT Y02714 57665203 LTR RSIZE,RSIZE IS THERE ONE Y02714 57745203 BNZ FBQSPP2 YES, GO PROCESS IT Y02714 57825203 L RSIZE,VVREGSZ GET V=V REGION SIZE Y02714 57905203 LTR RSIZE,RSIZE IS ONE GIVEN? Y02714 57985203 BZ CKCRGNTP NO Y02714 58065203 TM CODE1,VARBLE VARIABLE REQUEST? Y02714 58145203 BNO CKCRGNTP NO Y02714 58225203 TM FLAGS,VARPASS2 IS THIS SECOND ATTEMPT? Y02714 58305203 BO CKCRGNTP YES, IGNORE REGION SIZE Y02714 58385203 FBQSPP1 TM FLAGS,ERGNRCHD EXPLICIT REGION SIZE PASSED? Y02714 58465203 BO RETNOTFD YES, STORAGE NOT FOUND Y02714 58545203 A RSIZE,PQEREGN(0,RPQE) GET REGION TOP Y02714 58625203 LR WORK,SEGREG GET FBQE AREA ADDRESS Y02714 58705203 A WORK,SIZE(0,RFBQE) TOP OF FREE AREA Y02714 58785203 CR RSIZE,WORK IS REGION WITHIN FREE AREA? Y02714 58865203 BH CKCRGNTP NO Y02714 58945203 OI FLAGS,ERGNRCHD YES, INDICATE THIS Y02714 59025203 CKCRGNTP C SEGREG,CURRGNTP IS FBQE ABOVE CURRGNTP? Y02714 59105203 BH RETNOTFD YES, CANNOT CONTINUE Y02714 59185203 B CKFBQESZ TRY THIS FBQE Y02714 59265203 SPACE 2 Y02714 59345203 FBQSPP2 L WORK,VVREGSZ GET V=V REGION SIZE Y02714 59425203 LTR WORK,WORK IS ONE GIVEN Y02714 59505203 BZ FBQSPP1 NO Y02714 59585203 TM CODE1,VARBLE VARIABLE REQUEST? Y02714 59665203 BNO FBQSPP1 NO Y02714 59745203 TM FLAGS,VARPASS2 IS THIS SECOND ATTEMPT Y02714 59825203 BO FBQSPP1 YES, IGNORE REGION SIZE Y02714 59905203 CR WORK,RSIZE IS V=V REGION < INST. LIMIT Y02714 59985203 BNL FBQSPP1 NO, LEAVE AS IS Y02714 60065203 LR RSIZE,WORK YES, SET V=V REGION AS LIMIT Y02714 60145203 B FBQSPP1 CONTINUE Y02714 60225203 EJECT 60305203 *********************************************************************** 60345203 * 60385203 * CHECK TO SEE IF SUBPOOLS 227, 228, 239, 245, OR 255 PAGES ARE 60425203 * IN STORAGE, AND IF NOT TRY TO BRING IT IN. KEY IS SET IF 60465203 * PAGE IS NOT ALREADY IN STORAGE. 60555203 * 60555303 * INPUTS 60566003 * RWORK3 - VIRTUAL ADDRESS OF PAGE TO BE CHECKED 60578003 * WORK - RETURN ADDRESS 60589103 * OUTPUT 60596303 * RETURN +0 IF PAGE IS IN STORAGE 60598303 * RETURN +4 IF PAGE CANNOT BE BROUGHT INTO STORAGE 60601203 * (NO REAL STORAGE AVAILABLE) 60601603 * WORK REGISTERS 60602103 * RIN0, RPVT, RWORK2, RCOMRET1, RRETURN, RWORK4, 60602603 * RIN15 60603103 * 60603603 * NOTE REGISTER 8 CONTAIN THE CSECT00 VALUE 60634803 * 60644803 *********************************************************************** 60654803 SPACE 2 60664803 IEAVGM00 CSECT @Y30APYF 60665803 SPACE 2 60666803 PGINCORE L R3,APGINCOR GET ADDRESS OF PGINC01 @YM07648 60667003 BR R3 GO TO PAGE IN CORE ROUTINE @YM07648 60667103 SPACE 2 60667603 IEAVGM01 CSECT @YM07648 60668003 SPACE 2 60668403 USING BASE1,RBASE1 @Y30APYF 60668503 USING PGINC01,R3 60668603 PGINC01 LRA RIN15,C0(RWORK3) IS IT IN STORAGE Y02714 60668703 BZR WORK YES - RETURN Y02714 60668803 LR RWORK2,RPREVFQE SAVE PREVIOUS FQE ADDRESS 60669603 LR RIN1,RWORK3 GET VA FOR SQA/LSQA ALLOCATION 60670003 TM SPFLAGS,LSQA LSQA REQUEST? Y02714 60670603 BO PGINCOR2 YES 60670703 L RIN0,PAGE GET PAGE SIZE Y02714 60670803 LNR RIN0,RIN0 INDICATE GETMAIN Y02714 60673803 DROP R3 DROP ADDRESSABILITY 60675803 STM REGB,RIN1,LOCKSAVE SAVE REGS AS IS DONE BY CODE@Y30APYF 60677303 * AT LABEL SRM @Y30APYF 60678003 L REGB,ASRM LOAD UP ITS BASE REG @Y30APYF 60678103 BALR RCOMRET1,REGB TELL SRM, CSA ALLOCATED @Y30APYF 60678203 PGINCOR1 BAL RCOMRET1,TRNONPVT INHIBIT GETMAINS Y02714 60678303 USING PVT,RPVT REG WAS LOADED BY "TRNONPVT" Y02714 60680403 L RIN15,PVTPSQA GET ENTRY FOR OBTAIN L/SQA PG Y02714 60681403 DROP RPVT Y02714 60698203 * 60729003 BALR RRETURN,RIN15 OBTAIN PAGE FROM RSM ROUTINE Y02714 60759003 * 60799003 USING PVT,RPVT Y02714 60829003 NI PVTFLAG1,ALL-PVTBGMS TURN OFF GETMAIN INHIBITED FLAG 60869003 DROP RPVT Y02714 60899003 USING PGINC01,R3 @YM07648 60939003 BALR R3,0 GET VALUE FOR BASE REG @YM07648 60959003 LA RIN0,*-PGINC01 GET ABSOLUTE VALUE TO CORRECT BASE 60979003 SR R3,RIN0 CORRECT BASE AMOUNT @YM07648 61009003 LR RPREVFQE,RWORK2 RESTORE PREVIOUS FQE ADDRESS 61039003 LTR RIN15,RIN15 PAGE OBTAINED 61079003 BZ PGINCOR3 YES, PAGE IN STORAGE Y02714 61109003 B C4(WORK) RETURN - PAGE NOT IN STORAGE 61149003 SPACE 2 Y02751 61169003 PGINCOR2 BAL RCOMRET1,GTSALLOC GET SALLOC LOCK Y02751 61189003 B PGINCOR1 GO OBTAIN PAGE Y02751 61219003 * 61249003 * KEY ZERO NO FETCH PROTECT HAS BEEN SET BY RSM. MOST REQUESTS 61289003 * FOR CSA ARE FOR NON ZERO KEY STORAGE SO SET KEY FOR ALL CSA 61319003 * REQUESTS. SQA AND LSQA ARE KEY ZERO NO FETCH PROTECT. 61359003 * 61389003 PGINCOR3 TM SPFLAGS,CSA SP OTHER THAN 245 OR 255 @Y30APYF 61429003 BZR WORK NO, RETURN Y02714 61449003 MVC FETCH,LSPQEKEY GET STGKEY @Y30APYF 61469003 TM SPFLAGS,FPROTECT SHOULD F. P. BE SET @Y30APYF 61499003 BZ NOFETCH NO @Y30APYF 61529003 OI FETCH,FETCHON SET F.P. ON @Y30APYF 61569003 NOFETCH IC RWORK2,FETCH LOAD KEY @Y30APYF 61599003 LRA RWORK4,0(0,RWORK3) GET REAL ADDRESS OF BLOCK Y02714 61639003 SSK RWORK2,RWORK4 SET KEY ON FIRST 2K Y02714 61659003 LA RWORK4,C2K(0,RWORK4) POINT TO SECOND 2K Y02714 61679003 SSK RWORK2,RWORK4 SET KEY ON REST OF PAGE Y02714 61709003 BR WORK RETURN Y02714 61739003 SPACE 2 61779003 DROP R3 @YM07648 61809003 EJECT Y02714 61849003 **************************************************************** Y02714 63360002 * Y02714 63370002 * SYSTEM RESOURCES MANAGER (SRM) INTERFACE ROUTINE Y02714 63371002 * Y02714 63470002 * INPUT Y02714 63520002 * RIN0 - SIZE OF SQA OR CSA REQUEST; Y02714 63570002 * NEGATIVE IF GETMAIN, POSITIVE IF Y02714 63620002 * FREEMAIN Y02714 63670002 * RCOMRET1 - RETURN ADDRESS Y02714 63720002 * OUTPUT Y02714 63770002 * SQA SPACE LEFT (SQASPLFT) UPDATED AND Y02714 63820002 * SRM BRANCHED TO IF NECESSARY Y02714 63870002 * 63880003 * NOTE REGISTER 8 CONTAINS EITHER CSECT00 OR Y02714 63890003 * CSECT01 VALUE Y02714 63900003 * Y02714 63920002 **************************************************************** Y02714 64010002 SPACE 2 @Y30APYF 64010603 IEAVGM00 CSECT @Y30APYF 64011303 SPACE 2 Y02714 64012002 SRM STM REGB,RIN1,LOCKSAVE SAVE REGISTERS 11-1 Y02714 64020002 L REGB,ASRM GET ENTRY AND BASE FOR SRM Y02714 64021002 BR REGB GO TO SRM (AT SRMSTART) Y02714 64022002 SPACE 2 Y02714 64022502 IEAVGM01 CSECT Y02714 64023002 SPACE 2 Y02714 64026002 USING SRMSTART,REGB Y02714 64027002 SRMSTART L RIN1,CVTPTR GET CVT POINTER Y02714 64070002 USING CVT,RIN1 Y02714 64120002 L RIN1,CVTGDA GET GDA POINTER Y02714 64170002 USING GDA,RIN1 Y02714 64220002 L RWORK4,SQASPLFT GET SQA SPACE LEFT Y02714 64270002 AR RWORK4,RIN0 ADD REQUEST SIZE Y02714 64320002 * (NEGATIVE IF GETMAIN) Y02714 64370002 ST RWORK4,SQASPLFT SAVE NEW VALUE Y02714 64420002 TM GDAFLAGS,SQATHRS1+SQATHRS2 EITHER THRESHOLD Y02714 64470002 * PREVIOUSLY PASSED? Y02714 64480002 BM SRM3 YES,THRESHOLD 1 PASSED Y02714 64482002 BO SRM4 YES, BOTH THRESHOLDS PASSED Y02714 64484002 C RWORK4,THR1PASD NO, THRESHOLD PASSED NOW? Y02714 64486002 BH SRMRSTRG NO, RESTORE REGS AND RETURN Y02714 64488002 C RWORK4,THR2PASD YES, SECOND THRESHOLD PASSED? Y02714 64488402 BNH SRM1 YES Y02714 64488802 OI GDAFLAGS,SQATHRS1 SET THRESH 1 PASSED Y02714 64489202 LA RIN1,C1 INDICATE FIRST THRESHOLD Y02714 64489602 B SRM2 GO SET UP SRM INTERFACE Y02714 64490902 SPACE 2 Y02714 64496502 SRM1 OI GDAFLAGS,SQATHRS1+SQATHRS2 SET THRESH 1 & 2 PASSEDY02714 64497802 LA RIN1,C2 INDICATE SECOND THRESHOLD Y02714 64499102 SRM2 LR WORK,RBASE2 SAVE BASE Y02714 64503302 LA RSAVAREA,REGSAVE POINT TO REGISTER SAVE AREA Y02714 64503702 SYSEVENT SQALOW,ENTRY=BRANCH NOTIFY SRM Y02714 64503802 LR RBASE2,WORK RESTORE BASE REGISTER Y02714 64503902 B SRMRSTRG GO RESTORE REGS AND RETURN Y02714 64504002 SPACE 2 Y02714 64504302 SRM3 C RWORK4,THR1CLRD THRESHOLD 1 CLEARED? Y02714 64504902 BH SRM5 YES Y02714 64505802 C RWORK4,THR2PASD THRESHOLD 2 PASSED? Y02714 64506702 BH SRMRSTRG NO, RESTORE REGS AND RETURN Y02714 64507602 B SRM1 YES Y02714 64508202 SPACE 2 Y02714 64509502 SRM4 C RWORK4,THR2CLRD THRESHOLD 2 CLEARED? Y02714 64510802 BNH SRMRSTRG NO, RESTORE REGS AND RETURN Y02714 64512102 C RWORK4,THR1CLRD THRESHOLD 1 CLEARED? Y02714 64513402 BH SRM5 YES Y02714 64514702 NI GDAFLAGS,ALL-SQATHRS2 RESET THRESH 2 FLAG Y02714 64516002 LA RIN1,C2 INDICATE SECOND THRESHOLD Y02714 64518002 B SRM6 GO SET UP SRM INTERFACE Y02714 64518502 SPACE 2 Y02714 64519902 SRM5 NI GDAFLAGS,ALL-SQATHRS1-SQATHRS2 RESET THRESH 1 & 2 Y02714 64521202 LA RIN1,C1 INDICATE FIRST THRESHOLD Y02714 64521602 SRM6 LR WORK,RBASE2 SAVE BASE Y02714 64523602 LA RSAVAREA,REGSAVE POINT TO REG. SAVE AREA Y02714 64523702 SYSEVENT SQAOK,ENTRY=BRANCH NOTIFY SRM Y02714 64526702 LR RBASE2,WORK RESTORE BASE REGISTER Y02714 64528702 SPACE 2 Y02714 64530002 SRMRSTRG LM REGB,RIN1,LOCKSAVE RESTORE REGS 11-1 Y02714 64533002 BR RCOMRET1 RETURN Y02714 64536002 SPACE 2 Y02714 64538002 DROP RIN1,REGB Y02714 64538402 EJECT Y02751 64538802 **************************************************************** Y02751 64538902 * Y02751 64542402 * SYSTEM TERMINATION ROUTINE INTERFACE (TO PUT ENTIRE Y02751 64542802 * SYSTEM INTO A WAIT STATE) Y02751 64542902 * Y02751 64543003 * NOTE REGISTER 8 CONTAINS EITHER CSECT00 OR Y02751 64543103 * CSECT01 VALUE Y02751 64543203 * Y02751 64543602 **************************************************************** Y02751 64545002 SPACE 2 Y02751 64547002 USING STERMV,REGB Y02751 64547102 STERMV LA REGB,STERMR MODIFY ADDRESSABILITY Y02751 64547202 USING STERMR,REGB Y02751 64547402 LA RWORK,WSC101 OUT OF VIRTUAL, CODE 101 Y02751 64547502 LA RWORK2,STRVIRT POINT TO "VIRTUAL" FOR MSG Y02751 64547602 B STERM1 CONTINUE Y02751 64547702 SPACE 2 Y02751 64547802 STERMR LA RWORK,WSC102 OUT OF REAL, CODE 102 Y02751 64547902 LA RWORK2,STRREAL POINT TO "REAL" FOR MSG Y02751 64548102 STERM1 L RCVT,CVTPTR POINT TO CVT Y02751 64548602 USING CVT,RCVT Y02751 64548902 L RIN15,CVTRMS POINT TO RMS VECTOR TABLE Y02751 64550902 DROP RCVT Y02751 64551602 USING RVT,RIN15 Y02751 64552002 L RIN15,RVTPTERM TERM. ROUTINE ENTRY ADDRESS Y02751 64552402 DROP RIN15 Y02751 64553202 XC STRLRB(LRBSIZE),STRLRB CLEAR LOGREC RECORD BUFFR Y02751 64553902 ST RWORK,LRBWSC STORE WAIT STATE CODE Y02751 64554302 MVI LRBRCTYP,X'81' SYSTEM TERM. RECORD TYPE Y02751 64554702 MVI LRBRCLEN+C3,LRBSIZE LRB LENGTH Y02751 64555102 LA RIN0,STRWTO ADDRESS OF WTO MSG Y02751 64555502 LRA RIN1,STRLRB ADDRESS OF LRB Y02751 64556202 STM RIN0,RIN1,STRPL PUT IN PARAMETER LIST Y02751 64556602 LRA RIN1,STRPL ADDRESS OF PARM LIST Y02751 64557002 STNSM SEGTEST,B'00000000' NO TRANSLATION OR INTERRUPTS Y02751 64557402 MVC STRVIRT(C7),0(RWORK2) PLACE "VIRTUAL" OR "REAL" Y02751 64557602 * IN MESSAGE Y02751 64557702 BALR RRETURN,RIN15 GO TO SYSTEM TERMINATION Y02751 64557802 * ROUTINE (NO RETURN WILL BE Y02751 64558102 * MADE) Y02751 64558502 SPACE 2 Y02751 64558702 DROP REGB Y02751 64558802 TITLE 'IEAVGM00 OS/VS2 GETMAIN / FREEMAIN SERVICE ROUTINE *64558903 CSECT-IEASMFGF' 64559003 IEASMFGF CSECT 64559202 ENTRY GMSMFCRE 64559502 ENTRY FMSMFCRE 64560002 *********************************************************************** 64563602 * 64567702 * SMF CORE USED ROUTINES 64571802 * 64575902 * CALLED WHEN 4K BLOCKS ARE OBTAINED OR FREED FROM SUBPOOLS OTHER 64580002 * THAN SQA OR CSA. 64600002 * 64610002 *********************************************************************** 64620002 * 64630002 * INPUT - INITIALIZED CORE USED FIELDS IN TCT. 64660002 * FIELDS ARE INITIALIZED BY SCHEDULER. 64670002 * - REG 14 (RBLKAD) BEGINNING ADDRESS OF BLOCK, 64700002 * ASSUMED TO BE A 4K BOUNDARY. 64720002 * - REG 15 (RSIZE) SIZE OF BLOCK, ASSUMED TO BE A 64740002 * 4K MULTIPLE 64760002 * OUTPUT - MODIFIED CORE USED FIELDS IN TCT. 64820001 * 64822003 * NOTE REGISTER 8 CAN CONTAIN EITHER CSECT00 OR CSECT01 64824003 * VALUE 64826003 * 64830002 *********************************************************************** 64840002 * 64880001 * GETMAIN ROUTINE 64900001 * 64920001 * DETERMINE IF THERE IS A TCT ASSOCIATED WITH THIS REQUEST. 64940001 * CONVERT CURRENT ALLOCATED SPACE INTO ALB AND AUB 64960002 * (ALB - LOW ADDRESS OF ALLOCATED CORE) 64980002 * (AUB - HIGH ADDRESS PLUS 1 OF ALLOCATED CORE) 65000002 * DETERMINE FROM WHICH END OF REGION CORE IS GIVEN. 65020001 * UPDATE APPROPRIATE WATER MARK IF NECESSARY. 65040001 * 65090002 *********************************************************************** 65100002 SPACE 2 Y02714 65120002 MODID BR=NO Y02714 65122002 SPACE 2 Y02714 65124002 USING GMSMFCRE,RWORK 65140001 GMSMFCRE TM SPFLAGS,SQA+CSA SQA OR CSA REQUEST? Y02714 65150002 BNZR RCOMRET1 RETURN TO CALLER Y02714 65152002 STM RTCT,RCWRKA,GFSMFSVE SAVE WORK REGISTERS 65160002 LA RCWRK,C0(RSIZE,RBLKAD) DEVELOP AUB Y02714 65194002 L RCWRKA,LDATCB GET TCB ADDRESS Y02714 65196002 USING TCB,RCWRKA Y02714 65198002 TM TCBTCTGF,TCBSMFGF IS SMF RECORDING DISABLED? Y02714 65198402 BZ CKLSQA YES, SKIP SMF RECORDING Y02714 65198802 L RTCT,TCBTCT GET TCT POINTER 65200002 LA RTCT,0(0,RTCT) CLEAR HIGH ORDER FLAG BYTE Y02714 65210002 LTR RTCT,RTCT IS THERE A TCT? 65240002 BNP CKLSQA NO, SKIP SMF RECORDING Y02714 65260002 USING SMFTCT,RTCT 65270001 L RCORE,TCTCRTBL INITIALIZE TCT CORE AREA PTR 65280002 USING TCTCORE,RCORE 65310001 TM SPFLAGS,LSQA+SWA+AUK HIGH END SUBPOOL? Y02714 65312002 BNZ NOTBOT YES Y02714 65314002 C RCWRK,TCTLWM AUB > LWM? Y02714 65316002 BNH CKCURGN NO Y02714 65318002 ST RCWRK,TCTLWM STORE NEW LWM Y02714 65360002 CKCURGN C RCWRK,CURRGNTP HAS CURRGNTP BEEN EXCEEDED? Y02714 65370002 BNH RCEXITA NO Y02714 65372002 ST RCWRK,CURRGNTP YES, SAVE NEW VALUE Y02714 65374002 B RCEXITA Y02714 65540002 SPACE 2 Y02714 65590002 NOTBOT C RBLKAD,TCTHWM IS STORAGE INSIDE HWM Y02714 65720002 BNL RCEXITA BRANCH IF YES Y02714 65740002 ST RBLKAD,TCTHWM STORE NEW HWM Y02714 65750002 RCEXITA LM RTCT,RCWRKA,GFSMFSVE RESTORE REGISTERS 65912002 BR RCOMRET1 RETURN TO CALLER 65914001 SPACE 2 Y02714 65914402 CKLSQA TM SPFLAGS,LSQA+SWA+AUK HIGH END SUBPOOL? Y02714 65914802 BNZ RCEXITA YES, DON'T UPDATE CURRGNTP Y02714 65915202 B CKCURGN NO, CHECK CURRGNTP Y02714 65915602 SPACE 2 Y02714 65915702 DROP RWORK 65916001 EJECT Y02714 65920002 *********************************************************************** 65930002 * 65960001 * FREEMAIN ROUTINE 65980001 * 66000001 * UPDATE CURRGNTP IF NECESSARY. 66060002 * 66070002 *********************************************************************** 66080002 SPACE 2 66100002 USING FMSMFCRE,RDQE 66130001 FMSMFCRE STM RTCT,RCWRKA,GFSMFSVE SAVE WORK REGISTERS Y02714 66140002 LA RCWRK,C0(RBLKAD,RSIZE) DEVELOP AUB 66270002 C RCWRK,CURRGNTP AUB = CURRGNTP? Y02714 66270402 BNE RCEXIT NO, UPDATE NOT NEEDED Y02714 66270802 L RCWRKA,LDATCB GET TCB ADDRESS Y02714 66272002 L REGA,TCBPQE GET REGION DPQE Y02714 66274002 DROP RCWRKA Y02714 66276002 L REGA,PQEFPQE(REGA) GET REGION PQE Y02714 66278002 C REGA,LDASRPQE IS THIS SYSTEM REGION PQE Y02714 66278202 BE RCEXIT YES, DON'T CHANGE CURRGNTP Y02714 66278302 FMSMFMR EQU * MRELEASR ENTRY Y02714 66278402 LR RCWRKA,REGA CURRENT FBQE = REGION PQE Y02714 66279202 FMCHKFBQ L RCWRKA,FWDPTR(RCWRKA) GET FIRST/NEXT FBQE Y02714 66280102 CR REGA,RCWRKA IS THERE ONE? Y02714 66281002 BE RCEXIT NO, FORGET IT Y02714 66281902 L RCWRK,FBQAREA(RCWRKA) GET FLB Y02714 66282802 A RCWRK,SIZE(RCWRKA) GET FUB Y02714 66283702 CR RCWRK,RBLKAD IS FUB > ALB? Y02714 66284802 BNH FMCHKFBQ NO, TRY NEXT FBQE Y02714 66299902 L RCWRK,FBQAREA(RCWRKA) GET FLB Y02714 66309902 ST RCWRK,CURRGNTP STORE NEW CURRGNTP Y02714 66319902 RCEXIT LM RTCT,RCWRKA,GFSMFSVE RESTORE WORK REGISTERS Y02714 66520002 BR RCOMRET1 RETURN 66540002 SPACE 2 Y02714 66542002 DROP RCORE 66550001 DROP RDQE 66552001 TITLE 'IEAVGM00 OS/VS2 GETMAIN / FREEMAIN SERVICE ROUTINE' 66560003 *********************************************************************** 67016702 * 67017001 * REGISTER EQUATES 67019302 * 67021601 *********************************************************************** 67022002 SPACE 2 Y02714 67023602 RIN0 EQU 0 INPUT PARAMETER REGISTER 67023902 RUB EQU 0 DQE & FQE UPPER BOUND REG 67026202 RIN1 EQU 1 PARAMETER LIST POINTER 67028501 RPREVAQE EQU 1 PREV AQE POINTER 67030802 RPREVFQE EQU 1 PREVIOUS FQE POINTER 67033102 RPREVDQE EQU 1 PREVIOUS DQE REG 67035402 REPTE EQU 1 EXTERNAL PAGE TABLE ENTRY REG 67037702 RNEWDQE EQU 1 NEW DQE REG 67060002 RANCHOR EQU 2 ANCHOR FOR CELLS @Z30ENWD 67070003 RAREG EQU 2 LRA REGISTER 67080001 RFQE EQU 2 FQE REG 67120002 RAQE EQU 2 AQE POINTER 67140002 RPREFBQE EQU 2 PREV FBQE REG 67170002 R2 EQU 2 VALIDITY CK RTN NEEDS R2 = 0 Y02714 67174002 ROLDQ EQU 3 USED IN CELL FORMAT @Z30ENWD 67175003 R3 EQU 3 USED AS A BASE REG IN PGINCORE 67177002 COMREG EQU 3 COMPARISON FOR SVC NUMBER 67180001 RADSAV EQU 3 ADDRESS FOR SET STORAGE KEYS 67200002 RCVT EQU 3 CVT REG 67220002 RFBQE EQU 3 FBQE ADDRESS 67240002 RGDA EQU 3 GDA ADDRESS Y02714 67242002 RIN3 EQU 3 CRBRANCH INPUT REGISTER Y02714 67250002 RNEWFQE EQU 3 ADDRESS OF NEW FQE 67260002 RDQE EQU 3 DQE REG 67270002 RPVT EQU 3 PVT REG 67272002 RTCB EQU 4 TCB ADDRESS 67280001 RLDA EQU 4 LDA ADDRESS Y02714 67290002 REG5 EQU 5 WORK REG @Z30ENWD 67292003 RCELLP EQU 5 CELL POINTER FOR FORMAT @Z30ENWD 67301003 RCTR EQU 5 COUNTER TO UPDATE CELL COUNT@Z30ENWD 67310003 PARMREG EQU 5 INPUT PARAMETER SAVE REGISTER 67320002 RERROR EQU 5 ERROR CODE 67340001 RPTE EQU 5 PAGE TABLE ENTRY REG Y02714 67350002 RRB EQU 5 RB REG 67380002 RWORK3 EQU 5 WORK REGISTER 67400002 RMIN EQU 5 FOR VAL CK OF SVC 4, V TYPE @ZA20641 67405040 RSTOP EQU 6 USED IN CELL FORMAT @Z30ENWD 67410003 SVTYPE EQU 6 SVC, KEY, MODE, ENTRY TYPE 67440001 RTCB1 EQU 6 TEMPORARY TCB REGISTER Y02714 67470002 RWORK EQU 6 WORK REGISTER 67480002 SIZEREG EQU 6 BYTES REQUIRED 67500002 RFMRET EQU 6 LIST FREEMAIN RETURN REG 67540002 RSIZEM EQU 6 SIZE REG FOR MRELEASE 67580002 RMAX EQU 6 FOR VAL CK OF SVC 4, V TYPE @ZA20641 67580140 RNEXT EQU 7 USED IN CELL FORMAT @Z30ENWD 67580740 RASCB EQU 7 ASCB ADDRESS Y02714 67581002 RAUB EQU 7 AREA UPPER BOUND REG 67680002 RPQE EQU 7 PQE ADDRESS 67700002 RPQEM EQU 7 PQE REG FOR MRELEASE 67701002 RPRVDQE EQU 7 PREVIOUS DQE FOR GFRECORE Y02714 67701202 RSPQE EQU 7 ADDRESS OF SPQE 67702002 RWORK2 EQU 7 WORK REGISTER 67711002 SAVEPARM EQU 7 PARAMETER LIST POINTER 67712002 RBASE1 EQU 8 FIRST BASE REGISTER Y02714 67740002 INDEX EQU 9 INDEX THROUGH LIST 67780002 SEGREG EQU 9 ADDRESS OF ALLOCATED AREA 67800002 RCOMRET1 EQU 9 RETURN REG 67820001 RADDRM EQU 9 ADDRESS REG FOR MRELEASE 67840002 RLENGTH EQU 10 LENGTH/ADDRESS OF LENGTH LIST 67860001 REGA EQU 10 WORK REG 67900002 RFBQNXT EQU 10 NEXT FBQE REG 67902002 RTCT EQU 10 TCT POINTER 67910002 RCORE EQU 10 CORE AREA POINTER 67912002 RADDR EQU 11 ADDRESS OF ADDRESS LIST 67913002 RCWRK EQU 11 WORK REGISTER 67914002 REGB EQU 11 WORK REGISTER 67920002 RFQESIZE EQU 11 CURRENT FQE SIZE FOR GFRECORE Y02714 67921002 RPREDQE EQU 11 PREVIOUS DQE 67990002 RPRSDQE EQU 11 PREV DQE REG FOR SPFRMAIN 67991002 RBLOCK EQU 12 DUMMY FBQE FOR MRELEASE 67991202 RCWRKA EQU 12 WORK REGISTER 67992002 RRBPRXLN EQU 12 TEMP. USED TO GET RB PREFIX Y02714 68002002 RSPID EQU 12 SPID 68020001 RVALRET EQU 12 RETURN FROM VALIDITY CHECK 68040001 WORK EQU 12 WORK REGISTER 68080002 RBASE2 EQU 13 SECOND BASE REGISTER Y02714 68140002 RFLAGWD EQU 13 FLAGS, SVC #, KEY, & MODE Y02714 68142002 RSAVAREA EQU 13 STANDARD SAVE AREA REGISTER Y02714 68144002 RBLKAD EQU 14 ADDRESS OF BLOCK FROM GET/FREE 68150002 RRETURN EQU 14 RETURN REGISTER 68180002 RWORK4 EQU 14 WORK REGISTER Y02714 68192002 RIN15 EQU 15 BRANCH ENTRY ADDR 68220001 RLGSOFAR EQU 15 LARGEST AVAILABLE (FBQE OR FQE) 68221002 RRETCODE EQU 15 RETURN CODE REGISTER Y02714 68222002 RSIZE EQU 15 SIZE REG 68240002 RVALBASE EQU 15 BASE FOR VALIDITY CHECK Y02714 68250002 TEMPBASE EQU 15 TEMPORARY BASE FOR BRANCH ENTRIES 68270002 EJECT 68280001 *********************************************************************** 68290002 * 68300001 * SYMBOL EQUATES 68320002 * 68340001 *********************************************************************** 68342002 SPACE 2 Y02714 68350002 C0 EQU 0 CONSTANT 68360002 OFF EQU 0 USED TO TURN OFF GMFM SWITCH 68420002 ZEROKEY EQU X'00' 0 KEY NO FETCH PROTECT FOR V=V TASK 68440002 ERR1 EQU 1 CONSTANT @Z30ENWD 68470003 C1 EQU 1 CONSTANT 68504002 TWO EQU 2 PAGE TABLE INDEX 68600002 C2 EQU 2 CONSTANT 68620002 M2 EQU X'02' MASK TO GET SVC 68650002 ERR3 EQU 3 CONSTANT @Z30ENWD 68652003 C3 EQU 3 CONSTANT 68660002 RLB EQU 3 LOWER BOUND OF AREA DESCRIBED BY FQE 68670002 FWBMASK EQU X'03' FULL WORD BOUNDARY MASK @ZA09199 68671040 ERR4 EQU 4 CONSTANT @Z30ENWD 68672003 SV4 EQU 4 SVC 4 68680001 C4 EQU 4 CONSTANT 68700002 MKEY EQU 4 MASK FOR KEY IN REG 15 Y02714 68710002 FOUR EQU 4 WORD LENGTH 68740002 ERR5 EQU 5 CONSTANT @Z30ENWD 68780003 SV5 EQU 5 SVC 5 68820002 ERR6 EQU 6 CONSTANT @Z30ENWD 68822003 C6 EQU 6 CONSTANT @Y30APYF 68830003 C7 EQU 7 CONSTANT 68840002 MASK EQU X'07' ACCESS LAST 3 BYTES OF FULL WORD 68890002 ERR8 EQU 8 CONSTANT @Z30ENWD 68900003 AQESIZE EQU 8 SIZE OF AQE Y02714 68910002 C8 EQU 8 CONSTANT 68920002 MASK1 EQU X'08' MASK TO ACCESS FIRST BYTE 68950002 CODE EQU 8 OFFSET FOR CODE INDIC. IN PARM LIST 69000002 ERR9 EQU 9 CONSTANT @Z30ENWD 69010003 SPIDISP EQU 9 SPID DISPLACEMENT IN PAR LIST 69020002 NOTMIXED EQU 9 NOT MIXED COND CODE FOR TM @ZA20951 69025040 ERRA EQU 10 CONSTANT @Z30ENWD 69030003 SV10 EQU 10 SVC 10 69060002 ERRB EQU 11 CONSTANT @Z30ENWD 69068003 C12 EQU 12 CONSTANT 69084002 ERRD EQU 13 CONSTANT @Z30ENWD 69094003 C16 EQU 16 CONSTANT 69100002 CELLEN EQU 16 LENGTH OF AN INTERNAL CELL @Z30ENWD 69110003 DQESIZE EQU 16 SIZE OF DQE Y02714 69120002 FBQESIZE EQU 16 FBQE SIZE 69140002 SPQESIZE EQU 16 SPQE SIZE Y02714 69150002 SCHEDKEY EQU X'10' SCHEDULER KEY = 1 Y02714 69152002 C20 EQU 20 CONSTANT 69160002 C24 EQU 24 CONSTANT 69180002 C28 EQU 28 CONSTANT 69200002 C32 EQU 32 CONSTANT Y02714 69250002 C36 EQU 36 @Z30ENYF 69270003 C40 EQU 40 SAVE AREA DISPLACEMENT REG 10 Y02714 69290002 C48 EQU 48 SAVE AREA DISPLACEMENT REG 12 Y02714 69295402 C52 EQU 52 SAVE AREA DISPLACEMENT REG 13 Y02714 69299202 C56 EQU 56 SAVE AREA DISPLACEMENT REG 14 69302602 C60 EQU 60 CONSTANT Y02714 69306002 H24 EQU X'24' REASON CODE 1 & MSGLEN 4 69306102 H28 EQU X'28' REASON CODE 1 & MSGLEN 8 Y02714 69306202 H2C EQU X'2C' REASON CODE 1 & MSGLEN 12 69306402 H48 EQU X'48' REASON CODE 2 & MSGLEN 8 Y02714 69309402 H4C EQU X'4C' REASON CODE 2 & MSGLEN 12 69316202 H8C EQU X'8C' REASON CODE 4 & MSGLEN 12 69319602 CX40 EQU X'40' CONSTANT Y02714 69329802 C64 EQU 64 SAVE AREA LENGTH Y02714 69333202 C80 EQU 80 CONSTANT Y02714 69336602 SV120 EQU 120 SVC 120 Y02714 69370002 C128 EQU 128 CONSTANT 69380002 REGION EQU X'80' REGION INDICATOR IN FQE 69390002 CX80 EQU X'80' CONSTANT Y02714 69400002 PGTABLEN EQU 224 LENGTH OF PGT AND XPT Y02714 69430002 C227 EQU 227 SUBPOOL 227 @Y30APYF 69435003 SUPSPLIM EQU 227 LIMIT FOR SUPERVISOR SP @Y30APYF 69440003 C229 EQU 229 SUBPOOL 229 Y02714 69450002 C230 EQU 230 SUBPOOL 230 Y02714 69460002 C233 EQU 233 SUBPOOL 233 Y02714 69490002 C236 EQU 236 SUBPOOL 236 Y02711 69492002 C237 EQU 237 SUBPOOL 237 Y02711 69494002 CBSQA EQU 245 CONTROL BLOCKS IN SQA Y02714 69510002 C245 EQU 245 SUBPOOL 245 69520002 C250 EQU 250 SUBPOOL 250 Y02714 69522002 C252 EQU 252 SUBPOOL 252 Y02714 69530002 C253 EQU 253 SUBPOOL 253 Y02714 69540002 C254 EQU 254 SUBPOOL 254 @ZA29616 69560040 KEY0 EQU X'F0' KEY OF 0 TEST; KEY MASK 69580002 END EQU X'F0' TEST FOR END OF SEGMENT 69600002 LAST EQU X'80' END OF LIST INDICATOR 69620002 CBLSQA EQU 255 CONTROL BLOCKS IN LSQA Y02714 69670002 ALL EQU X'FF' ALL BITS, FOR RESETTING FLAGS Y02714 69700002 ONESEG EQU X'0100' SEGMENT COUNT OF 1 Y02714 69710002 WSC101 EQU X'101' WAIT STATE CODE, NO VIRTUAL Y02751 69720002 WSC102 EQU X'102' WAIT STATE CODE, NO REAL Y02751 69730002 C2K EQU 2048 2K INCREMENT FOR SSK 69740002 C4095 EQU 4095 ONE PAGE - 1 Y02714 69750002 CPAGE EQU 4096 PAGE SIZE Y02714 69750402 TITLE 'IEAVGM00 OS/VS2 GETMAIN / FREEMAIN SERVICE ROUTINE *69756903 CSECT-IEAVGM00' 69757303 IEAVGM00 CSECT @Y30APYF 69763003 *********************************************************************** 69766003 * 69770003 * THESE CONSTANTS ARE ADDRESSED VIA REG 13 FROM ANY OF 69773003 * THE CSECT IN THIS ASSEMBLY 69776003 * 69779003 *********************************************************************** 69782003 SPACE 2 Y02714 69785003 DS 0D 69788003 CELLOW DC F'5' EXPAND POOL BELOW THIS VALUE@Z30ENWD 69791003 CELEXPNL DC F'1024' LENGTH FOR POOL EXPANSION @Z30ENWD 69796003 PAGE DC F'4096' PAGE SIZE 69802002 MAXFQESZ DC F'8176' MAXIMUM FQE SIZE Y02714 69810002 SEGMENT DC F'65536' SEGMENT SIZE Y02714 69820002 BASE100 DC A(BASE1) VALUE FOR BASE REG 8 FOR @Y30APYF 69820203 * CSECT00, ACCESSABLE VIA BASE@Y30APYF 69820503 * REGISTER 13 @Y30APYF 69820803 BASE101 DC A(G4KSRCH) VALUE FOR BASE REG 8 FOR @Y30APYF 69821103 * CSECT01, ACCESSABLE VIA BASE@Y30APYF 69821403 * REGISTER 13 @Y30APYF 69821703 AFMSMF DC A(FMSMFCRE) ENTRY POINT FOR FMSMF INTERFACE 69824002 AGMSMF DC A(GMSMFCRE) ENTRY POINT FOR GMSMF INTERFACE 69826002 ASRM DC A(SRMSTART) SRM ENTRY AND BASE Y02714 69827002 ASTERMR DC A(STERMR) SYS TERM REAL, ENTRY AND BASE Y02751 69828002 ASTERMV DC A(STERMV) SYS TERM VIRT, ENTRY AND BASE Y02751 69829002 APGINCOR DC A(PGINC01) PGINCORE ENTRY AND BASE @YM07648 69829503 GFPART DC V(IEAVPRT0) GET/FREE PART 69830002 VPFP1 DC V(IEAVFP1) FIND PAGE, LOCAL LOCK ENTRY Y02714 69840002 VPFP2 DC V(IEAVFP2) FIND PAGE, SALLOC LOCK ENTRY Y02714 69841202 VCRSEG DC V(IEAVCSEG) CREATE SEGMENT Y02714 69844002 SP245F DC F'245' SUBPOOL 245 (SQA) @Z30ENWD 69844203 SP255F DC F'255' SUBPOOL 255 (LSQA) Y02714 69846002 THR2PASD DC A(2*4096) THRESHOLD 2 PASSED, 2 PAGES Y02714 69846103 THR2CLRD DC A(3*4096) THRESHOLD 2 CLEARED, 3 PAGES Y02714 69851003 THR1PASD DC A(6*4096) THRESHOLD 1 PASSED, 6 PAGES Y02714 69853003 THR1CLRD DC A(7*4096) THRESHOLD 1 CLEARED, 7 PAGES Y02714 69854003 GLSPIDS DC AL1(227,228,231,239,241,245) GLBRANCH SPIDS @Y30APYF 69855003 SP245B DC X'F5' SQA @Z30ENWD 69855603 SP255B DC X'FF' LSQA @Z30ENWD 69856303 DS 0F @Y30APYF 69857003 RCMASK DC X'0000007F' RESET BIT 0 IN RETURN CODE YO2714 69858003 BYTE3MSK DC X'000000FF' MASK FOR BYTE 3 IN REGISTER Y02714 69859003 PGBNDMSK DC X'00000FFF' PAGE BOUNDARY MASK 69860403 CLHIBYTE DC X'00FFFFFF' MASK TO CLEAR HIGH BYTE 69861403 LGPOSNUM DC X'7FFFFFFF' LARGEST POSSIBLE NUMBER Y02714 69863403 CLRHIBIT EQU LGPOSNUM MASK TO CLEAR HIGH BIT Y02714 69864403 KEYMASK DC X'FFF0FFFF' REMOVE MODE FROM KEY Y02714 69865803 SEGBND DC X'FFFF0000' ROUND TO SEGMENT BOUNDARY Y02714 69867803 BND4K DC X'FFFFF000' ROUND TO 4K BOUNDARY 69868803 SETUP DC X'01040A00' BR ENT, LSQA, SVC10, KEY 0, SUP STATE Y02714 69869803 SETUPFMB DC X'05000A00' SETUP REQUEST STATUS FOR Y02714 69870603 * FMAINB; BR ENT & FREEMB, Y02714 69872603 * SVC10, KEY 0, SUP STATE Y02714 69873603 FMPGTBSP DC AL1(CBLSQA),AL3(PGTABLEN) FREEM PG TAB SPID & LEN Y02714 69874603 H8 DC H'8' CONSTANT 69876603 H252 DC H'252' SUBPOOL 252 69878602 STRWTO WTO 'IEA946W NO VIRTUAL STORAGE IS AVAILABLE FOR SQA', *69879003 ROUTCDE=1,DESC=1,MF=L SYSTEM TERMINATION MSG Y02751 69880403 STRVIRT EQU STRWTO+15 START OF WORD "VIRTUAL" IN Y02751 69881403 * MSG, THIS DISPLACEMENT IS Y02751 69882603 * MACRO DEPENDENT Y02751 69883603 STRREAL DC C'REAL ' MAY REPLACE "VIRTUAL" IN MSG Y02751 69885603 EJECT Y02714 69886603 **************************************************************** Y02714 69887603 * Y02714 69888803 * RETURN CODE VERSUS ERROR CODE TABLE. ZERO MEANS Y02714 69890803 * ABEND ONLY. BIT 0 ON MEANS CHECK REASON CODE FOR Y02714 69891803 * SPECIAL CASE. Y02714 69892803 * Y02714 69894003 **************************************************************** Y02714 69896003 SPACE 2 Y02714 69897003 * RETURN CODE ERROR CODE Y02714 69898003 SPACE 1 Y02714 69899003 RCTABLE DC X'08' 1 Y02714 69900703 DC X'00' 2 NOT USED Y02714 69901703 DC X'84' 3 Y02714 69903703 DC X'00' 4 Y02714 69904703 DC X'00' 5 Y02714 69905703 DC X'00' 6 Y02714 69907703 DC X'00' 7 NOT USED Y02714 69908703 DC X'84' 8 Y02714 69910702 DC X'00' 9 Y02714 69912702 DC X'84' 10 Y02714 69913102 DC X'00' 11 Y02714 69913502 DC X'00' 12 NOT USED Y02714 69920102 DC X'04' 13 Y02714 69930102 EJECT Y02714 69932102 IHALDA Y02714 69932502 EJECT Y02714 69932902 *********************************************************************** 69933302 * Y02714 69933402 * THE FOLLOWING STORAGE AREAS WILL ACTUALLY BE LOCATED Y02714 69940002 * IN THE LOCAL DATA AREA (LDA) OF EACH ADDRESS SPACE OR Y02714 69950002 * THE GLOBAL SAVE AREA FOR THE GLBRANCH ENTRY POINT. IF Y02714 70000002 * ANY CHANGE IS MADE IN DISPLACEMENTS, A CORRESPONDING Y02714 70001002 * CHANGE MAY BE REQUIRED IN MODULE IEAVGFRR (GETMAIN/ Y02714 70002002 * FREEMAIN FRR). Y02714 70003002 * Y02714 70010002 *********************************************************************** 70010402 SPACE 2 Y02714 70010802 ORG GMFMWKAR PUT FOLLOWING INTO LDA Y02714 70012002 SPACE 2 Y02714 70018602 * LDARQSTA STATUS OF CURRENT REQUEST Y02714 70018802 * BYTE 0 - FLAGS Y02714 70019202 * BYTE 1 - SUBPOOL FLAGS Y02714 70019602 * BYTE 2 - SVC NUMBER Y02714 70019902 * BYTE 3 - KEY AND MODE Y02714 70023202 SPACE 2 Y02714 70023302 FLAGS EQU LDARQSTA MISC. FLAGS Y02714 70023402 BRENTRY EQU X'01' BRANCH ENTRY Y02714 70023502 GETMB EQU X'02' GETMAINB REQUEST Y02714 70024002 FREEMB EQU X'04' FMAINB OR MRELEASR REQUEST Y02714 70024102 DEFERR10 EQU X'08' DEFERRED ERROR 10 FLAG Y02714 70024402 EXPANSN EQU X'10' SQA OR LSQA EXPANSION Y02714 70024802 VARPASS2 EQU X'20' VARIABLE REQUEST, PASS 2 Y02714 70025202 ERGNRCHD EQU X'40' EXPLICIT V=V REGION REACHED Y02714 70025602 LDAABGM EQU X'80' SP254 REQSTR HAS TCBABGM ON @ZA29616 70025740 SPACE 2 Y02714 70026140 SPFLAGS EQU LDARQSTA+C1 SUBPOOL FLAGS Y02714 70026240 SQA EQU X'01' SQA SUBPOOL Y02714 70026302 CSA EQU X'02' CSA SUBPOOL Y02714 70026802 LSQA EQU X'04' LSQA SUBPOOL Y02714 70027302 SWA EQU X'08' SWA SUBPOOL Y02711 70027802 AUK EQU X'10' AUTHORIZED USER KEY SUBPOOL Y02714 70028302 FPROTECT EQU X'20' FETCH PROTECTED SUBPOOL Y02714 70028802 NEEDAQE EQU X'40' AN AQE IS NEEDED Y02714 70029302 REQ4K EQU X'80' 4096 BYTE REQ FROM SP253/4 @ZA11822 70029740 SPACE 2 Y02714 70030202 SVCBYTE EQU LDARQSTA+C2 SVC NUMBER Y02714 70030402 SPACE 2 Y02714 70031202 MODE EQU LDARQSTA+C3 KEY & MODE Y02714 70034402 SUP EQU X'01' SUPERVISOR MODE (IF ZERO) 70035202 SUBFRMN EQU X'02' SUBPOOL FREEMAIN 70036002 SPACE 2 Y02714 70036602 * 70036802 * THE FOLLOWING FIELDS MUST REMAIN IN THE SAME ORDER 70038202 * AS 1 INSTRUCTION CLEARS THE FIELDS. 70038602 * 70039202 ABNDATA DS F VARIABLE DATA Y02714 70040002 MSGLEN DS X REASON CODE & LNTH OF VAR DATAY02714 70041202 FREESW DS B MULTIPURPOSE SWITCH Y02714 70043202 FREESWM EQU X'80' FREEMAIN IN PROCESS 70043402 INCR EQU X'40' LENGTH HAS BEEN INCREMENTED 70043502 DECR EQU X'20' ADDRESS HAS BEEN DECREMENTED 70043602 NFRSTDQE EQU X'10' NOT FIRST DQE (FOR L/SQA) Y02714 70043702 FQEBELOW EQU X'08' AN FQE WAS BELOW FREED AREA Y02714 70043802 NEEDRLSE EQU X'04' FURTHER PAGE RELEASE NEEDED Y02714 70043902 ABNDATAL EQU *-ABNDATA LENGTH OF FIELDS TO BE CLEARED 70046402 SPACE 2 Y02714 70048402 * LOCKFLAG & FRRBRNDX ARE CLEARED WITH ONE STH, KEEP TOGETHER 70048802 SPACE 1 Y02714 70049202 LOCKFLAG DS B LOCKING FLAGS Y02751 70050402 SALHELD EQU X'01' SALLOC LOCK ALREADY HELD Y02751 70052402 SALOBTND EQU X'02' SALLOC LOCK OBTAINED Y02751 70052802 SPACE 2 Y02714 70053302 FRRBRNDX DS X BRANCH INDEX FOR FRR Y02753 70054902 * EQU 0 UNEXPECTED ERROR, CHECK STATUS FLAGS Y02753 70055002 CLSALFLD EQU 1 SALLOC RELEASE RETURN CODE > 0 Y02753 70055202 CRSEGERR EQU 2 CREATE SEGMENT RETURN CODE > 0 Y02753 70060702 FNDPGERR EQU 3 FIND PAGE RETURN CODE NOT 0 OR 4 Y02753 70062702 GFREFAIL EQU 4 ON L/SQA EXPAN., GFRECORE FAILED Y02753 70067202 GTSALFLD EQU 5 SALLOC OBTAIN RETURN CODE NOT 0 OR 4 Y02753 70069202 PGRLSRC4 EQU 6 PAGE RELEASE RETURN CODE OF 4 Y02753 70078402 SPFMERR EQU 7 SUBPOOL FREEMAIN, AQE AREA NOT IN DQE Y02753 70080402 SPACE 2 Y02753 70084002 REGSAVE DS 18F STANDARD REGISTER SAVE AREA Y02714 70086002 * (72 BYTES), USED FOR Y02714 70088002 * SRM (SYSEVENT) AND RSM Y02714 70088102 REGSVEND EQU * END OF REGISTER SAVE AREA Y02714 70088902 STRPL EQU REGSAVE SYSTEM TERM ROUTINE PARM LIST Y02751 70089002 ORG REGSAVE+C8 RESET INSTRUCTION COUNTER SO Y02714 70089102 * LRB CAN BE ON NEXT AVAILABLE Y02714 70089202 * DOUBLE WORD BOUNDARY IN Y02714 70089302 * REGSAVE Y02714 70089402 STRLRB DS 0D LOGREC RECORD BUFFER Y02751 70089502 LRBRCTYP EQU STRLRB LRB RECORD TYPE Y02751 70089602 LRBWSC EQU STRLRB+C24 LRB WAIT STATE CODE Y02751 70094502 LRBRCLEN EQU STRLRB+C28 LRB RECORD LENGTH Y02751 70096502 LRBSIZE EQU 32 SIZE OF LRB Y02751 70098502 ORG REGSVEND RESTORE INSTRUCTION COUNTER Y02714 70098902 SPACE 2 Y02714 70099902 MSAVE DS 16F SAVE AREA FOR MRELEASE Y02714 70100002 GNOTSAVE DS 16F SAVE AREA USED IN GNOTSAT Y02714 70105002 LOCKSAVE DS 2F GT/CLSALLOC, QFMAINB, AND SRM Y02751 70110002 * SAVE AREA OVERLAPS INTO Y02751 70115002 * GFSMFSVE AND MPTRS Y02751 70116002 GFSMFSVE DS 3F SMF CORE ROUTINES SAVE AREA Y02714 70120002 CSPCKSAV EQU GFSMFSVE SAVE AREA FOR CSPCHK Y02714 70125002 MPTRS DS 2F SAVE PREVIOUS AND NEXT PTRS. Y02714 70130002 DUMYDQE DS 4F DUMMY DQE FOR L/SQA EXPANSION Y02714 70135002 TEMPDQE DS 4F TEMPORARY DQE FOR FMCOMMON Y02714 70140002 DUMFBQE DS 4F DUMMY FBQE FOR MRELEASE Y02714 70145002 SAVEREG1 EQU BRANCHSV+C4 SAVE INPUT REG 1 FOR FREEMAIN Y02714 70150002 RETSAVE EQU BRANCHSV+C56 SAVE RETURN ADDRESS Y02714 70155002 SAV911 DS 3F SAVE REGS 9-11 Y02714 70160002 LASTSAVE DS F SAVE POSSIBLE LAST LIST ENTRY Y02714 70172002 MINMAX DS 2F MAX & MIN LENGTH FOR VARIABLE Y02714 70180002 LASTLSTA DS F LAST LIST ENTRY ADDRESS Y02714 70190002 LSTINDEX DS F INDEX FOR LIST REQUEST Y02714 70200002 FMAREAS DS F PTR TO AREAS TO BE FREEMAINED Y02714 70210002 FRRPARM DS F FRR PARAMETER AREA ADDRESS Y02753 70211002 PARMLDA EQU 0 LDA ADDRESS IN FRR PARM Y02753 70212002 PARMFLG1 EQU 4 FIRST FLAG BYTE IN FRR PARM Y02753 70213002 PARMGLBL EQU X'80' GLOBAL REQUEST (GLBRANCH OR Y02753 70214002 * MRELEASR ON GLOBAL REQUEST) Y02753 70215002 PARMSALO EQU X'40' SALLOC LOCK OBTAINED BY GM/FM Y02753 70215202 PARMVLCK EQU X'20' SVC 4/SVC 5 INTERFACE BEING @ZA20641 70215440 * VALIDITY CHECKED @ZA20641 70215640 SPACE 2 Y02714 70216002 * 70250001 * THE FOLLOWING 3 LINES MUST REMAIN IN THE SPECIFIED ORDER 70252001 * AS 1 INSTRUCTION IS USED TO CLEAR THEM 70254001 * 70256001 CLOPREV DS F PREVIOUS FQE TO CLOSEST Y02714 70260002 CLOSEST DS F CLOSEST IN SIZE FQE Y02714 70270002 LARGESTA DS F LARGEST AVAILABLE Y02714 70280002 SPACE 2 Y02714 70290002 LARGEST DS F LARGEST AVAILABLE FBQE Y02714 70300002 LENSAVE DS F SAVE AREA FOR LENGTH LIST POINTER 70640002 SAVESIZE DS F SIZE OF MULTIPLE OF 4K CORE Y02714 70680002 ENDADD DS F END ADDRESS Y02714 70700002 TEMPSAV1 EQU ENDADD TEMPORARY SAVE AREA 1 Y02714 70710002 STRTADD DS F START ADDRESS Y02714 70720002 TEMPSAV2 EQU STRTADD TEMPORARY SAVE AREA 2 Y02714 70730002 DIFF DS F DIFFERENCE Y02714 70760002 SAVEPQE EQU DIFF SAVE PQE ADDRESS IN FBQSRCH Y02714 70810002 FIXSTART DS F STARTING ADDRESS TO BE CLEAREDY02714 70812002 FIXEND DS F ENDING ADDRESS TO BE CLEARED Y02714 70814002 NOTSATSV DS F LENGTH POINTER USED BY GNOTSATY02714 70816002 NOTSATS1 DS F SAVE LDARQSTA WHEN GNOTSAT IS Y02714 70818002 * DOING A FREEMAIN FOR A LIST Y02714 70818402 SAVESEG DS F ADDRESS OF MULTIPLE OF 4K COREY02714 70840002 LARSOFAR DS F LARGEST AVAILABLE IN FBQE Y02714 70860002 RSTRTADD DS F ROUNDED START ADDRESS Y02714 71360002 TEMPSAV3 EQU RSTRTADD TEMPORARY SAVE AREA 3 Y02714 71370002 RENDADD DS F ROUNDED END ADDRESS Y02714 71380002 VPFP DS F FIND PAGE ADDRESS TO BE USED Y02714 71381002 *********************************************************************** 71430001 * THE FOLLOWING DS'S MUST REMAIN IN THE SAME ORDER AS ONE MOVE * 71440002 * INSTRUCTION IS USED TO SAVE THEM ALL * 71450001 *********************************************************************** 71454001 DQESAVE DS 2F SAVE DQE PTR AND PREV DQE PTR 71460002 FMSAVE DS 1F SAVE RETURN REG FOR FREEMAIN 71470002 PREVFQSV DS 1F SAVE AREA FOR PREVIOUS FQE POINTER 71472002 FQESAVE DS 1F SAVE AREA FOR FQE 71474002 SPQESAVE DS 1F SAVE AREA FOR SPQE 71476002 SVRLB DS F SAVE AREA FOR RLB Y02714 71478002 SVSIZE DS F SAVE AREA FOR ROUNDED SIZE Y02714 71478402 DQESAVE1 DS 2F SAVE DQE INFO WHEN USING FMAINB 71480002 FMSAVE1 DS 1F SAVE RETURN REG WHEN USING FMAINB 71500002 FQESAVE1 DS 1F SAVE FQE INFO WHEN USING FMAINB 71502002 PREVFQS1 DS 1F SAVE PREVIOUS FQE WHEN USING FMAINB 71510002 SPQSAVE1 DS 1F SAVE SPQE WHEN USING FMAINB 71510402 SVRLB1 DS F SAVE RLB FOR FMAINB Y02714 71510802 SVSIZE1 DS F SAVE ROUNDED SIZE FOR FMAINB Y02714 71511202 *********************************************************************** 71512001 SAVSVTSV DS F SAVE LDARQSTA DURING FMAINB Y02714 71514002 FQENXTSV DS F FQE NEXT SAVE AREA Y02714 71520002 OLDFQELN DS F OLD FQE LENGTH Y02714 71560002 NEWFQELN DS F NEW FQE LENGTH Y02714 71580002 RQSTSIZE DS F SAVED SIZE OF ORIGINAL @ZA27672 71600040 * REQUEST FOR MSG IEA700I ON @ZA27672 71610040 * AXX-2 ABENDS. @ZA27672 71620040 SEGTEST DS H AREA TO TEST END OF SEGMENT Y02714 71660002 SPACE 2 Y02714 71710002 CODE1 DS B SAVE AREA FOR OPTION CODE Y02714 71800002 S120FM EQU X'01' SVC 120 FREEMAIN REQUEST Y02714 71802002 S120UNCD EQU X'02' SVC 120 UNCONDITIONAL REQUEST Y02714 71804002 S120PBND EQU X'04' SVC 120 PAGE BOUNDRY REQUEST Y02714 71805002 BOUND EQU X'10' MASK FOR PAGE BOUNDARY 71806002 CONDTNL EQU X'20' CONDITIONAL INDICATOR 71806802 LIST EQU X'C0' LIST INDICATOR (IF MIXED IS LIST) 71807202 LISTVAR EQU X'C0' USED TO CHECK FOR LIST AND VARIABLE 71808002 VARBLE EQU X'C0' VARIABLE TEST INDICATOR 71808102 SPACE 2 Y02714 71812402 CLEARSW DS B CLEARSW FOR GFRECORE Y02714 71814002 CLEARON EQU X'01' FQECPB INDICATOR IS ON IN FQE 71816002 SPACE 2 Y02714 71816402 GMFMSW DS B GM/FM SWITCH FOR MRELEASE Y02714 71840002 GM EQU X'01' INDICATES GM TO BE DONE FOR FBQE 71840402 FM EQU X'02' INDICATES FM TO BE DONE FOR FBQE 71842002 FIRSTSW EQU X'04' FIRST TIME THRU SW FOR MRELEASE 71852002 SPACE 2 Y02714 71860002 FETCH DS B KEY AND FETCH PROTECT Y02714 71890002 FETCHON EQU X'08' FETCH PROTECT ON 71900002 SPACE 2 Y02714 71902002 OUTSW DS X SWITCH FOR OUT OF REAL OR VIRTY02714 71904002 VIRTUAL EQU X'FF' VIRTUAL INDICATOR FOR OUT SWITCH 71906002 REALOUT EQU X'00' REAL INDICATOR FOR OUT SWITCH 71908002 SPACE 2 Y02714 72150002 CODE2 DS B SAVE AREA FOR OPTION CODE Y02714 72152002 SAVFRESW DS B SAVE FREESW DURING FMAINB Y02714 72152402 SPID DS X SPID FOR MRELEASE Y02714 72154002 LSPQEKEY DS X PROTECT KEY FROM CURRENT SPQE Y02714 72156002 RQSTRKEY DS X REQUESTER KEY OR KEY= PARAM. Y02714 72156402 SAVSPID DS X SAVE SPID FOR FREEMAIN Y02714 72156502 SAVSPID2 DS X SAVE SPID FOR MESSAGES @YM07648 72156603 CELLFLGS DS B CONTROL OF INTERNAL CB POOL @Z30ENWD 72156703 LCLEXP EQU X'80' LOCAL POOL EXPANSION REQ'D @Z30ENWD 72158703 GLBLEXP EQU X'40' GLOBAL POOL EXPANSION REQ'D @Z30ENWD 72160703 LCLREQ EQU X'20' LOCAL CELL REQUEST @Z30ENWD 72162703 GNOTCALL EQU X'08' ON =GNOTSAT CALLING GETMAINE@Z30ENWD 72164703 INCELL EQU X'04' ON = IN GETMAINC @Z30ENWD 72166703 INEXPN EQU X'02' ON = IN EXPANSION ROUTINE @Z30ENWD 72168703 INCBBRAN EQU X'01' ON = CBBRANCH WAS ENTRY @Z30ENWD 72170703 EJECT 72177003 IHAGDA Y02714 72180003 EJECT Y02714 72183003 IHALCCA @ZA08170 72184040 EJECT @ZA08170 72185040 IHASPQE INTERNAL 72186003 SPACE 4 72190003 IHAFBQE INTERNAL 72193003 SPACE 4 72196003 IHAFQE INTERNAL 72200001 SPACE 4 72210002 IHAAQE INTERNAL 72220001 SPACE 4 72230002 IHADQE INTERNAL 72240001 SPACE 4 72250002 IHAPQE INTERNAL 72260001 EJECT 72270002 IHAPGTE 72280001 EJECT 72290002 IHAXPTE 72300001 EJECT 72302001 IHAPVT 72304001 EJECT 72306001 IHAPSA Y02714 72307502 EJECT Y02714 72308702 IHAWSAVT CLASS=GLOBAL Y02714 72309102 EJECT Y02714 72309202 IHAASCB Y02714 72309502 EJECT Y02714 72311002 IHARB DSECT=YES Y02714 72312502 EJECT 72314002 CVT SYS=AOS2,OPTIONS=(TSLICE),TSO=YES,DSECT=YES,PREFIX=NO 72315502 EJECT 72318502 IKJTCB 72320001 EJECT 72330001 IEFTCT 72370001 EJECT 72378401 RVT IHARVT Y02751 72378802 EJECT Y02753 72379802 IHAFRRS Y02753 72380802 EJECT 72479101 IHAINF 72529101 SPACE 5 Y02714 72539102 END 72579101