TITLE 'GET CELL ROUTINE --- IEAVGTCL' 00050002 * /* START OF SPECIFICATIONS **** 00050102 * 00060102 *01* MODULE-NAME = IEAVGTCL 00060502 * 00061702 *02* CSECT-NAME = IEAVGTCL 00061802 * 00066402 *01* DESCRIPTIVE-NAME = GET CELL FROM A QUICK-CELL POOL 00068402 * 00070802 *01* COPYRIGHT = NONE 00070902 *01* STATUS = 02.00 -- 2/28/73 00077902 * 00078402 *01* FUNCTION = ALLOCATE A CELL FROM A QUICK-CELL POOL 00078502 * 00079402 *02* OPERATION = USING THE CPID TO IDENTIFY AND LOCATE THE PROPER 00079802 * POOL, THE GET CELL ROUTINE FINDS THE FIRST AVAILABLE CELL IN 00081802 * THE FIRST NON-EMPTY SEGMENT (EXTENT) OF THE POOL. THE CELL 00083802 * THUS FOUND IS SYNCHRONOUSLY DEQUEUED AND TESTES FOR ADDRESS 00084202 * VALIDITY (IS THE ADDRESS IN THE POOL BOUNDS AND ON AN INTEGRAL 00084602 * CELL BOUNDARY?). IF IT PASSES THESE TESTS, IT IS MARKED AS 00085002 * ALLOCATED FROM THIS POOL AND RETURNED TO THE CALLER. 00085402 * 00085602 *01* NOTES = STANDARD LINKAGE CONVENTIONS 00086002 * 00086402 *02* DEPENDENCIES = 370R-MP INSTRUCTION SET (CS AND CDS) 00086502 * 00089902 *03* CHARACTER-CODE-DEPENDENCIES = NONE 00098402 *02* RESTRICTIONS = DESIGN RESTRICTION --- CANNOT USE REGISTERS 5 00106402 * THROUGH 13 INCLUSIVE. 00106802 * 00107202 *02* REGISTER-CONVENTIONS = SEE REGISTER EQUATES AFTER CSECT 00107302 * STATEMENT. 00117302 * 00130902 *02* PATCH-LABEL = NUCLEUS PATCH AREA 00131602 * 00132802 *01* MODULE-TYPE = MACRO-INVOKED PROCESSING SUBROUTINE 00132902 * 00137702 *02* PROCESSOR = ASSEMBLER-370R 00139702 * 00145502 *02* MODULE-SIZE = 380 BYTES 00147502 * 00147802 *02* ATTRIBUTES = REFRESHABLE NUCLEUS 00151302 * 00154902 *01* ENTRY-POINT = IEAVGTCL 00158502 * 00164302 *02* PURPOSE = TO ACQUIRE A CELL FROM A QUICK-CELL POOL. 00164702 * 00165202 *02* LINKAGE = ENTERED VIA BALR 14,15 .... ENTRY SHOULD BE MADE 00165302 * USING THE GETCELL MACRO. 00167302 * 00171102 *02* INPUT = THE MACRO PLACES THE ADDRESS OF THE CVT IN REGISTER 3. 00171502 * REGISTER 0 CONTAINS THE ID OF THE POOL (CPID). 00171902 * 00173302 *02* OUTPUT = NORMAL OUTPUT IS THE ADDRESS OF THE ACQUIRED CELL, 00174202 * AND A CHANGED POOL (PRIOR FIRST CELL REMOVED). SEE THE EXITS 00174602 * FOR SPECIFIC OUTPUT ITEMS. 00174702 * 00175002 *02* REGISTERS-SAVED = NONE ... REGISTERS 1 THROUGH 4 AND 15 00175402 * WILL BE CHANGED 00175802 *02* REGISTER-USAGE = SEE COMMENTS ON REGISTER EQUATES 00176002 * 00181002 *02* REGISTERS-RESTORED = NONE 00181402 *01* EXIT-NORMAL = UNNAMED EXIT POINT 00182702 * 00184302 *02* CONDITIONS = A CELL HAS BEEN ALLOCATED 00184502 * 00185602 *02* OUTPUT = REG 1 = ADDRESS OF ALLOCATED CELL. 00186002 * 00187202 *02* RETURN-CODES = 0 = CELL ALLOCATED 00199202 * 00200002 *01* EXIT-ERROR = GTCERR04 00200602 * 00201602 *02* CONDITIONS = NO AVAILABLE CELLS 00211402 * 00221502 *02* OUTPUT = RETURN CODE 00221802 * 00228602 *02* RETURN-CODES = 4 00229002 * 00232902 *01* EXIT-ERROR = GTCERR08 00233002 * 00233102 *02* CONDITIONS = THE POOL POINTERS TO AVAILABLE CELLS HAVE BEEN 00233202 * DESTROYED. 00233302 * 00233702 *02* OUTPUT = ZEROED DEQUEUE COUNT AND FIRST AVAILABLE CELL POINTER 00233802 * IN THE CPAB. 00234002 * 00235102 *02* RETURN-CODES = 8 00235302 * 00235502 *01* EXIT-ERROR = GTCERR12 00235602 * 00236102 *02* CONDITIONS = THE POOL HAS NEVER BEEN FORMATTED. 00236502 * 00237002 *02* OUTPUT = RETURN CODE. 00237302 * 00237802 *02* RETURN-CODES = 12 00237902 * 00238002 *01* EXIT-ERROR = GTCERR16 00238802 * 00240102 *02* CONDITIONS = THE CPID SPECIFIED HAS NOT BEEN DEFINED TO THE 00240202 * SYSTEM VIA A BLDCPOOL. 00240302 * 00240602 *02* OUTPUT = RETURN CODE 00241002 * 00241802 *02* RETURN-CODES = 16 00242102 * 00243102 *01* EXTERNAL-REFERENCES = CVT, GDA, AND CPAB 00244502 * 00244802 *02* ROUTINES = NONE 00245202 *02* DATA-AREAS = NONE 00246002 *02* CONTROL-BLOCKS = CPAB (CELL POOL ANCHOR BLOCK) - READ AND 00246802 * WRITE. CVT AND GDA - READ ONLY. 00247602 * 00248402 *01* TABLES = NONE 00249202 *01* MACROS = NONE 00250002 *02* SERIALIZATION = THE 'CPABFLGW' FIELD IS USED TO SERIALIZE ALL 00260002 * OPERATIONS ON ANY SINGLE POOL EXTENT, REGARDLESS OF THE TYPE 00262002 * OF OPERATION. THIS FIELD IS MANIPULATED WITH THE 'CS' (COMPARE 00264002 * AND SWAP) INSTRUCTION. ONE BIT IN THIS FIELD, 'DELETELK', IS 00264402 * USED TO INDICATE THAT THE EXTENT IS BEING DELETED FROM THE 00264502 * POOL. IF A DELETE IS OCCURING (THE BIT IS 'ON'), ALL OTHER 00264602 * OPERATIONS ARE PROHIBITED ON THE EXTENT BEING DELETED. IF NO 00266502 * DELETE IS OCCURRING, THE USE COUNT 'CPABUSE#' IS USED TO 00268502 * PREVENT A DELETE FROM STARTING IN THE MIDDLE OF SOME OTHER 00268902 * PROCESS. A NON-ZERO VALUE FOR 'CPABUSE#' WILL PREVENT AN 00269302 * EXTENT FROM BEING DELETED. ONCE THE EXTENT HAS BEEN LOCKED 00269702 * AGAINST DELETES, THE DOUBLE-WORD FIELD CONSISTING OF 00270102 * 'CPABDEQC' AND 'CPABFACP' IS USED TO SERIALIZE THE ACQUISITION 00270202 * AND RELEASE OF CELLS IN THE SINGLE EXTENT. THIS DOUBLE-WORD 00270302 * FIELD IS MANIPULATED WITH THE 'CDS' (COMPARE DOUBLE AND SWAP) 00271402 * INSTRUCTION. 00273402 * 00273502 *01* CHANGE-ACTIVITY = NEW FOR OS/VS2 RELEASE 2. 00273602 * 00274702 *01* MESSAGES = NONE 00275802 *01* ABEND-CODES = NONE 00276902 **** END OF SPECIFICATIONS ***/ 00278002 EJECT 00326902 */*GETCELL: CHART (AMODE) */ 08850002 */* HEADER 08860002 */*DYNAMIC QUICKCELL FUNCTION 08870002 */* GET CELL ROUTINE 08880002 */* 08892002 */* PAGE # */ 08894002 */*IEAVGTCL:1A1 E (,%D1) BRANCH ENTRY */ 08900002 */*%D1:1B1 D (YES,PERMCPID,NO,%DYN) PERMANENT CPID? */ 08950002 */*PERMCPID: P (,GOTCPAB) CALCULATE CPAB OFFSET IN CPAB TABLE */ 09000002 */*%DYN:1B2 D (YES,GTCERR16,NO,%DY2) NULL CPID (=0)? */ 09050002 */*%DY2:1B3 P (,GOTCPAB) CALCULATE CPAB ADDRESS */ 09150002 */*GOTCPAB: D (NO,GTCERR16,YES,GTCRETRY) CPID MATCH ONE IN CPAB?*/ 09200002 */*GTCRETRY:1E1 D (YES,DLCKCHK,NO,GNXTCPAB) ANY CELLS AVAILABLE? */ 09250002 */*DLCKCHK: D (YES,%EXT2,NO,%DLCK) EXTENT BEING DELETED? */ 09260002 */*%DLCK: P (,DEQLOOP) LOCK OUT DELETE (RAISE USE COUNT) */ 09270002 */*DEQLOOP: M (,%ANY) SET UP FOR NEXT CDS TO TAKE CELL */ 09300002 */*%ANY: D (YES,%CDS2,NO,EXTEMPTY) ANY CELLS LEFT IN THE 09360002 */*EXTENT ? */ 09370002 */*%CDS2:1G1 D (YES,%LIM,NO,DEQLOOP) 'CDS' - IS IT MINE? */ 09372002 */*EXTEMPTY: P (,GNXTCPAB) UNLOCK THE EXTENT (LOWER THE USE COUNT) 09380002 */**/ 09390002 */*%LIM:1H1 D (YES,%BDY,NO,GTCERR08) CELL ADDR IN POOL LIMITS? */ 09400002 */*%BDY:1J1 D (YES,%CFREE,NO,GTCERR08) CORRECT CELL BOUNDARY? */ 09450002 */*%CFREE:1K1 D (YES,%TAKE,NO,GTCERR08) IS THE CELL FREE? */ 09500002 */*%TAKE:1K2 P (,%RC0) STORE CPID IN CELL'S LAST WORD */ 09550002 */*%RC0:1K3 R RC=0 -NORMAL- */ 09600002 */*GTCERR08:1H2 M (,%CDS3) SET UP FOR 'CDS' TO INDICATE BAD POOL */ 09650002 */*%CDS3:1J2 D (YES,%RC8,NO,GTCERR08) 'CDS' HAVE I STORED? */ 09700002 */*%RC8:1J3 R RC=8 */ 09750002 */*GTCERR16: R RC=16 */ 09760002 */*GNXTCPAB: D (YES,%NCPAB,NO,%EXT2) ANY OTHER EXTENTS? (CPABE'S)*/ 09800002 */*%NCPAB:1F2 P (,GTCRETRY) GET NEXT CPABE ADDRESS */ 09850002 */*%EXT2:1E4 D (NO,GTCERR04,YES,GTCERR12) UNFORMATTED POOL? */ 09900002 */*GTCERR12: R RC=12 */ 09950002 */*GTCERR04: R RC=4 */ 10050002 */*GETCELL: END */ 10150002 EJECT 10200002 IEAVGTCL CSECT 10250002 CELLLINK EQU 0 CELL LINKAGE POINTER (LAST WORD IN CELL) 10300002 R0 EQU 0 CPID -- INPUT PARAMETER 10350002 R1 EQU 1 CELL ADDRESS -- OUTPUT PARAMETER 10400002 @R2 EQU 2 SCRATCH REGISTER 10450002 @R3 EQU 3 SCRATCH REGISTER 10500002 * ON INPUT, R3 CONTAINS CVT ADDRESS 10550002 R4 EQU 4 CPAB ADDRESS (CALCULATED) 10600002 * NOTE: REGS 5 THROUGH 13 ARE EXPRESSLY FORBIDDEN FOR USE *10610002 BY THIS ROUTINE. 10620002 R14 EQU 14 RETURN ADDRESS 10650002 R15 EQU 15 ENTRY POINT ADDRESS (BASE REGISTER) 10700002 USING IEAVGTCL,R15 10750002 MODID BR=YES 10760002 LTR R4,R0 TEST CPID VALUE AND SET CPAB ADDR. BASE 10800002 BM PERMCPID NEGATIVE, PERMANENT (SYSTEM) CPID 10850002 BZ GTCERR16 NULL (=0), ERROR CONDITION 10900002 ********************************************************************** 10910002 * THE CPID HAS BEEN FOUND TO BE A DYNAMIC POOL ID AND 10950002 * THE ADDRESS OF THE FIRST CPAB IS FOUND FROM THE CPID 11000002 * BY MULTIPLYING IT BY 4. 11050002 * THE CPAB ADDRESS IS TAKEN FROM THE CPID (ALREADY IN REG 4) 11100002 ********************************************************************** 11110002 SLL R4,2 MULTIPLIED BY 4. 11150002 B GOTCPAB RETURN TO COMMON MAINLINE 11200002 SPACE 11250002 ********************************************************************** 11260002 * A PERMANENT (SYSTEM) CPID HAS BEEN PASSED, THE CPAB 11300002 * ADDRESS IS FOUND BY USING THE LOW-ORDER BYTE OF THE 11350002 * ID AS AN INDEX INTO A TABLE OF CPAB'S. THE TABLE IS 11400002 * FOUND FROM THE GLOBAL DATA AREA (GDA), WHOSE ADDRESS 11450002 * IS FOUND IN THE CVT. 11500002 ********************************************************************** 11510002 PERMCPID EQU * 11550002 USING CVT,@R3 11600002 L @R3,CVTGDA GDA ADDRESS 11650002 USING GDA,@R3 11700002 * THE CPID IS ALREADY IN REG 4, LET CPAB ADDRESS = CPID 11800002 N R4,F255 // 256 (MODULO DIVISION) 11850002 SLL R4,5 * 32 (CPAB LENGTH) 11900002 A R4,PFSTCPAB + CPAB TABLE ADDRESS 11950002 ***** NOTE: THIS CALCULATION IS DEPENDENT UPON THE LENGTH OF THE *11960002 CPAB REMAINING AT 32. 11970002 EJECT 12000002 ********************************************************************** 12010002 * COMMON PATH******** AFTER FINDING THE CPAB FOR THE 12050002 * ID GIVEN, CHECK FOR MATCHING CPID'S, AND EMPTY 12100002 * POOLS. 12150002 ********************************************************************** 12160002 GOTCPAB EQU * 12200002 USING CPAB,R4 12250002 C R0,CPABCPID CPID'S MATCH ? 12300002 BNE GTCERR16 NO, ERROR CONDITION 12350002 GTCRETRY EQU * 12352002 L @R3,CPABFACP GET ADDRESS OF FIRST AVAILABLE CELL 12360002 LTR @R3,@R3 IS THIS EXTENT EMPTY? 12370002 BZ GNXTCPAB YES, GET NEXT CPAB ADDRESS 12380002 SPACE 3 14300002 ********************************************************************** 14310002 * NOW THAT AN EXTENT HAS BEEN FOUND THAT HAS AT LEAST ONE 14350002 * AVAILABLE CELL, CHECK TO SEE IF A DELETE IS 14400002 * IN PROCESS TO DETERMINE IF THE CELL SHOULD NOT BE 14450002 * OBTAINED FROM THIS EXTENT. 14500002 ********************************************************************** 14510002 DLCKCHK EQU * 14550002 L @R2,CPABFLGW GET LOCKING FLAGS AND COUNT 14600002 LR @R3,@R2 COPY THEM FOR TESTING 14650002 N @R3,DLFLGOFF TURN OFF DELETE FLAG IN COPY 14700002 CR @R2,@R3 IF THEY ARE THE SAME, THE LOCK 14750002 * WAS ALREADY OFF. 14800002 BNE GTCERR20 OTHERWISE A DELETE IS IN PROCESS 14850002 ***** NOTE **** THIS INSTRUCTION CANNOT BE REPLACED BY A LOAD 14860002 * ADDRESS (LA) BECAUSE THERE IS A SUBPOOL NUMBER IN THE HIGH- 14870002 * ORDER BYTE OF THIS FIELD. 14880002 LR @R3,@R2 NO DELETE GOING ON, LOCK OUT DELETE 14900002 A @R3,F1 BY RAISING THE OPERATION COUNT. 14950002 CS @R2,@R3,CPABFLGW STORE LOCKS IF NOTHING HAS 15000002 * HAPPENED TO CHANGE THE STATUS. 15050002 BNE DLCKCHK STATUS CHANGED, SEE WHY. 15100002 EJECT 15150002 ********************************************************************** 15160002 * NO DELETES ARE IN PROCESS AND DELETE IS LOCKED OUT OF 15200002 * THIS EXTENT, OBTAIN THE CELL FROM THE POOL. 15250002 ********************************************************************** 15260002 DEQLOOP EQU * 15300002 ********* FROM NOW ON, THE CPID IS NOT AVAILABLE IN A 15310002 * REGISTER, AND REGISTER 0 WILL CONTAIN VARYING 15320002 * DATA. 15330002 LM R0,R1,CPABDEQC GET DEQUEUE COUNT AND FIRST 15350002 * AVAILABLE CELL POINTER FROM 15400002 * THE CPAB. 15450002 LTR @R3,R1 COPY FIRST AVAILABLE POINTER 15460002 BZ EXTEMPTY BRANCH IF THE EXTENT HAS GONE EMPTY 15470002 A @R3,CPABCSZE GET LINK POINTER ADDRESS FOR THE 15500002 * CELL BEING TAKEN. 15550002 L @R3,CELLLINK(@R3) REMOVE THE FIRST CELL 15600002 LR @R2,R0 INCREASE THE DEQUEUE COUNT BY 1 15700002 A @R2,F1 15750002 CDS R0,@R2,CPABDEQC DEQUEUE THE CELL FROM THE POOL 15800002 BNE DEQLOOP DEQUEUE FAILED, TRY AGAIN 15850002 SPACE 3 15902002 ********************************************************************** 15902402 * A CELL HAS BEEN OBTAINED FROM THE POOL, NOW CHECK 15904002 * TO SEE THAT IT IS A PROPER CELL. THIS IS DONE BY 15906002 * TESTING ITS BOUNDARIES FOR RESIDENCE INSIDE THE 15908002 * EXTENT FROM WHICH IT WAS OBTAINED, AND BY CHECKING 15908402 * THAT IT STARTS ON AN INTEGRAL BOUNDARY WITHIN ITS 15908502 * EXTENT. 15908902 ********************************************************************** 15909302 C R1,CPABSTAD CHECK CELL AGAINST LOW BOUND 15909402 BL GTCERR08 OUT OF BOUNDS, ERROR CONDITION 15909502 L @R3,CPABCSZE GET CELL LENGTH 15909602 LA @R2,4(@R3,R1) SET UP ADDRESS OF END OF CELL 15909702 C @R2,CPABENAD TEST CELL END AGAINST UPPER BOUND 15909802 BH GTCERR08 OUT OF BOUNDS, ERROR CONDITION 15909902 EJECT 15910002 ********************************************************************** 15912002 * CHECK TO SEE THAT THE CELL IS ON AN INTEGRAL BOUNDARY 15915202 * WITHIN THAT EXTENT. 15915602 ********************************************************************** 15917602 LA R0,4(@R3) R0 = COMPLETE CELL SIZE - LINK 15919902 * WORD LENGTH (4) IS INCLUDED 15921902 LR @R3,R1 TAKE THE CELL ADDRESS AND SUBTRACT 15922302 S @R3,CPABSTAD THE STARTING ADDRESS OF THE POOL, 15922702 BZ SKIPDVD THIS GIVES THE RELATIVE ADDRESS 15923102 * OF THE CELL IN THE POOL. IF 15923202 * IT IS ZERO, SKIP DIVISION. 15923302 SR @R2,@R2 CLEAR FOR DIVISION 15926602 DR @R2,R0 DIVIDE BY CELL LENGTH 15928602 LTR @R2,@R2 IF REMAINDER IS ZERO, CELL IS 15929002 * ON AN INTEGRAL BOUNDARY. 15929402 BNZ GTCERR08 IF NOT, ERROR CONDITION 15929802 SPACE 2 15934802 ********************************************************************** 15942002 * NOW THAT THE CELL HAS BEEN SHOWN TO BE VALID, STORE 15945002 * THE CPID IN IT FOR FUTURE REFERENCE WHEN FREEING THE 15950002 * CELL. 15955002 ********************************************************************** 15957002 SKIPDVD EQU * 15959002 TM CPABFLGS,CPABEXTN IS THIS AN EXTENSION CPAB? 15960002 BZ NOLOAD NO, SKIP ADDRESS LOADING 15965002 L @R3,CPABCPID YES, LOAD THE ADDRESS OF THE FIRST CPAB 15970002 L R0,CPABCPID-CPAB(@R3) GET THE TRUE CPID 15970402 B STORCPID RETURN TO MAINLINE 15971202 SPACE 2 15972002 NOLOAD EQU * 15975002 L R0,CPABCPID GET THE TRUE CPID 15980002 STORCPID EQU * 15982002 L @R3,CPABCSZE GET THE CELL SIZE FROM THE CPAB 15985002 C R0,CELLLINK(@R3,R1) IS THE CELL ALREADY ALLOCATED? 15987002 BE GTCERR08 YES, ERROR, EXTENT DESTROYED 15989002 ST R0,CELLLINK(@R3,R1) STORE THE CPID IN THE CELL 15990002 EJECT 16000002 ********************************************************************** 16010002 * THE CELL HAS BEEN SUCCESSFULLY OBTAINED FROM THE POOL, 16022202 * NOW THE POOL EXTENT MUST BE UNLOCKED TO ALLOW 16072202 * OTHER OPERATIONS. 16122202 ********************************************************************** 16132202 UNLCKLP EQU * 16172202 L @R2,CPABFLGW GET THE LOCKING FLAGS AND USE COUNT 16222202 LR @R3,@R2 COPY THEM 16272202 BCTR @R3,0 REDUCE THE USE COUNT 16322202 CS @R2,@R3,CPABFLGW UNLOCK THE EXTENT 16332202 BNE UNLCKLP FAILED, TRY AGAIN 16342202 SPACE 2 16350002 ********************************************************************** 16400002 * THE CELL HAS BEEN SUCCESSFULLY OBTAINED FROM THE POOL, AND 16650002 * THE POOL IS UNLOCKED, RETURN TO THE USER. 16700002 * REGISTER 1 = ADDRESS OF THE CELL 16710002 * REGISTER 0 = CPID OF THE POOL 16720002 ********************************************************************** 16730002 SR R15,R15 SET RETURN CODE = 0 16750002 BR R14 RETURN TO THE CALLER 16800002 SPACE 2 16802002 ********************************************************************** 16802402 * THE EXTENT HAS BEEN DRAINED OF CELLS BY ONE OR MORE CONCURRENT 16804002 * OPERATIONS, IT MUST BE ABANDONED, BUT FIRST, WE MUST 16806002 * TAKE OFF THE LOCK ON THE POOL EXTENT ( THE USE COUNT). 16810002 ********************************************************************** 16812002 EXTEMPTY EQU * 16820002 L @R2,CPABFLGW GET THE LOCKING FLAGS AND USE COUNT 16830002 LR @R3,@R2 COPY THEM 16840002 BCTR @R3,0 REDUCE THE USE COUNT 16842002 CS @R2,@R3,CPABFLGW UNLOCK THE EXTENT 16844002 BE GNXTCPAB SUCCESS, GET NEXT EXTENT 16844402 B EXTEMPTY FAILED, TRY AGAIN 16846002 EJECT 16850002 ********************************************************************** 16860002 * IF THERE WERE NO FREE CELLS IN THE EXTENT UNDER INVESTIGATION 16900002 * AND THERE ARE MORE EXTENTS TO CHECK, CONTINUE THE SEARCH 16950002 * FOR AN EXTENT IN WHICH THERE IS A FREE CELL. 17000002 ********************************************************************** 17010002 GNXTCPAB EQU * 17050002 CLC CPABNXTP,F0 IS THERE ANOTHER EXTENT? 17052002 BE GTCFMTCK NO, CHECK IF POOL WAS FORMATTED 17054002 L R4,CPABNXTP YES, GET ADDRESS OF NEXT CPAB 17060002 B GTCRETRY AND CONTINUE THE SEARCH 17090002 GTCFMTCK EQU * 17140002 L @R2,CPABSTAD GET POOL START ADDRESS 17260002 LTR @R2,@R2 HAS THE POOL BEEN FORMATTED? 17270002 BZ GTCERR12 NO, ERROR CONDITION 17280002 ********************************************************************** 17280402 * THE POOL IS EMPTY OF CELLS, BUT IT IS FORMATTED, 17282002 * ERROR CODE = 4 17284002 ********************************************************************** 17286002 GTCERR04 EQU * 17290002 SPACE 17290402 ********************************************************************** 17290502 * THE FIRST EXTENT IN WHICH A FREE CELL COULD BE FOUND 17290802 * WAS BEING DELETED, RETURN AN ERROR CODE. 17291202 ********************************************************************** 17291302 GTCERR20 EQU * 17291602 SR R1,R1 ASSURE NO APPARENT ADDR. IS RETURNED 17291702 LA R15,4 SET UP THE NECESSARY RETURN CODE. 17292002 BR R14 RETURN TO CALLER 17294002 EJECT 17300002 ********************************************************************** 17310002 * AN ERROR HAS OCCURRED INDICATING THAT THE EXTENT IS DESTROYED, 17350002 * THE POINTERS IN THE CELL POOL ANCHOR BLOCK MUST BE SET UP TO 17410002 * PREVENT ANY ATTEMPTED GETCELLS FROM THIS EXTENT. THIS IS 17430002 * DONE BY SETTING THE DEQUEUE COUNT AND FIRST CELL POINTER 17440002 * TO ZERO. 17442002 ********************************************************************** 17444002 GTCERR08 EQU * 17450002 LM @R2,@R3,CPABDEQC GET DEQUEUE COUNT AND FIRST 17478402 * AVAILABLE CELL POINTER FROM 17478802 * THE CPAB. 17479202 SR R0,R0 SET UP ZERO VALUES FOR DESTROYED CPAB 17481202 SR R1,R1 THE USER WILL RECEIVE ZEROED PARAMETERS 17483202 CDS @R2,R0,CPABDEQC DEQUEUE THE CELL FROM THE POOL 17485602 BNE GTCERR08 DEQUEUE FAILED, TRY AGAIN 17486002 ********************************************************************** 17486502 * NOW THE POOL EXTENT MUST BE UNLOCKED TO ALLOW 17486602 * OTHER OPERATIONS. 17486702 ********************************************************************** 17491802 EUNLCKLP EQU * 17498002 L @R2,CPABFLGW GET THE LOCKING FLAGS AND USE COUNT 17503202 LR @R3,@R2 COPY THEM 17508402 BCTR @R3,0 REDUCE THE USE COUNT 17513602 CS @R2,@R3,CPABFLGW UNLOCK THE EXTENT 17518802 BNE EUNLCKLP FAILED, TRY AGAIN 17524002 ********************************************************************** 17531202 * RETURN AN ERROR CODE INDICATING THAT THE POOL IS NO LONGER 17534402 * RELIABLE, OR CONTAINS AT LEAST ONE BAD EXTENT. 17539602 ********************************************************************** 17541602 SR R1,R1 ASSURE NO APPARENT ADDR. IS RETURNED 17543602 LA R15,8 SET UP THE REQUIRED RETURN CODE. 17544802 BR R14 RETURN TO THE CALLER. 17550002 SPACE 17600002 ********************************************************************** 17650002 * THIS POOL HAS NOT BEEN FORMATTED, RETURN AN ERROR CODE 17950002 ********************************************************************** 17960002 GTCERR12 EQU * 18000002 SR R1,R1 ASSURE NO APPARENT ADDR. IS RETURNED 18010002 LA R15,12 SET UP THE REQUIRED RETURN CODE. 18050002 BR R14 RETURN TO THE CALLER . 18100002 SPACE 2 18150002 ********************************************************************** 18160002 * AN INVALID CPID HAS BEEN GIVEN, RETURN WITH AN ERROR CODE 18200002 ********************************************************************** 18210002 GTCERR16 EQU * 18250002 SR R1,R1 ASSURE NO APPARENT ADDR. IS RETURNED 18260002 LA R15,16 SET UP THE PROPER RETURN CODE. 18300002 BR R14 RETURN TO THE CALLER. 18350002 EJECT 18400002 ********************************************************************** 18410002 * CONSTANTS REQUIRED BY THE GET CELL SERVICE ROUTINE 18450002 ********************************************************************** 18460002 F255 DC F'255' USED FOR MODULO DIVIDE BY 256 18500002 F0 DC F'0' FIELD USED TO TEST FOR EMPTY QUEUE 18502002 F1 DC F'1' USED TO INCREASE USE COUNT 18510002 DLFLGOFF DC X'FF',AL1(X'FF'-DELETELK),2X'FF' 18600002 SPACE 2 18660002 CVT DSECT 18750002 CVT 18800002 EJECT 18810002 IHAGDA DSECT=YES 18850002 EJECT 18860002 IHACPAB DSECT=YES 18900002 END 19000002