TITLE ' IEAVLK02 COMMENTARY' 00110002 * /* START OF SPECIFICATIONS **** 00120002 * 00130002 *01* MODULE-NAME = IEAVLK02 00150002 * 00300002 *01* DESCRIPTIVE-NAME = PROGRAM MANAGER RESOURSE MANAGEMENT ROUNTINES 00500002 * 00600002 *01* COPYRIGHT = NONE 00650002 * 00700002 *01* STATUS = VERSION 1 00900002 * 01000002 *01* FUNCTION = CLEANS UP CDE AND ANY ASSOCIATED CORE AT EXIT, DELETE, 01050002 * ABEND, AND EOT. 01100002 * 01150002 *01* NOTES = THE FOLLOWING IS A DESCRIPTION OF THE DEPENDENCIES, 01450002 * CONVENTIONS, AND FUNCTIONS OF IEAVLK02 01460002 * 01500002 *02* DEPENDENCIES = THE LOCAL LOCK MUST BE HELD ON ENTRY TO ALL 01550002 * THREE ENTRY POINTS. 01600002 * 01800002 *03* CHARACTER-CODE-DEPENDENCIES = NONE 01850002 * 01900002 *02* RESTRICTIONS = NONE 02050002 * 02100002 *02* REGISTER-CONVENTIONS = THE REGISTER CONVENTIONS USED BY 02200002 * IEAVLK02 ARE DESCRIBED UNDER THE TOPIC REGISTER EQUATES. 02250002 * 02400002 *02* PATCH-LABEL = THIS MODULE IS RESIDENT NUCLEUS, AND HAS NO 02450002 * PATCH SPACE. 02500002 * 02600002 *01* MODULE-TYPE = MODULE 02650002 * 02750002 *02* PROCESSOR = ASSEMBLER 02800002 * 03150002 *02* MODULE-SIZE = 1108 BYTES 03200002 * 03350002 *02* ATTRIBUTES = REENTERABLE 03400002 * 03650002 *01* ENTRY-POINT = CDHKEEP 03700002 * 03950002 *02* PURPOSE = THIS ENTRY WILL RELEASE THE MODULE, EXTENT LIST, 04000002 * MAJOR CDE AND ASSOCIATED MINORS AS REQUIRED. 04050002 * 04100002 *02* LINKAGE = BRANCH ENTERED - BALR 14,15 04150002 * ENTERED BY DELETE SERVICE ROUTINE 04200002 * ENTERED BY PROGRAM MANAGER EXIT RESOURCE MANAGER (IEAVLK02) 04250002 * 04350002 *02* INPUT = PSW ENABLED, KEY 0, SUPERVISOR STATE, LOCAL LOCK HELD 04400002 * REGISTERS ARE 04450002 * 4 - CURRENT OR TERMINATING TCB ADDRESS 04550002 * 11 - MAJOR CDE 04602002 * 12 - TERMINATING CDE ADDRESS 04610002 * 14 - RETURN ADDRESS 04620002 * 04650002 *02* OUTPUT = NONE 04700002 * 04750002 *02* REGISTERS-SAVED = NONE 04850002 * REGISTERS 5, 11-13 ARE UNCHANGED BY THIS ROUTINE 04860002 * ALL OTHER REGISTERS ARE MODIFIED 04870002 * 04900002 *02* REGISTER-USAGE = SEE REGISTER USAGE AT BEGINNING OF ROUTINE 05000002 * 05100002 *01* ENTRY-POINT = IEAPPGMX 05260002 * 05294002 *02* PURPOSE = THIS ROUTINE FREES PROGRAM MANAGER RESOURCES AT 05296002 * EXIT AND DETERMINES IF A TASK TERMINATION IS IN PROGRESS AND 05298002 * IF SO, FREES ANY LLE'S LEFT ON THE TCBLLE QUEUE, THEIR 05302202 * ASSOCIATED CDE'S AND ITS ASSOCIATED CORE. 05303802 * 05305402 *02* LINKAGE = BRANCH ENTERED BY EXIT (SVC 3) ROUTINE 05307002 * 05313402 *02* INPUT = PSW ENABLED, KEY 0,SUPERVISOR STATE, LOCAL LOCK HELD 05315002 * REGISTERS ARE: 05325002 * REGISTER 5 - TERMINATING RB 05327002 * REGISTER 13 - CALLERS SAVE AREA 05329002 * REGISTER 14 - RETURN ADDRESS 05331002 * 05332602 *02* OUTPUT = NONE 05333002 * 05335002 *02* REGISTERS-SAVED = ALL REGISTERS ARE RETURNED TO THE CALLER 05338802 * EXCEPT 15 WHICH CONTAINS A RETURN CODE 05340802 * 05342802 *02* REGISTER-USAGE = SEE PROLOGUE AT BEGINNING OF ROUTINE 05343202 * 05344002 *01* ENTRY-POINT = IEAPPGMA 05358202 * 05371402 *02* PURPOSE = THIS ROUTINE IS ENTERED TO REMOVE PARTIALLY LOADED 05371802 * PROGRAMS DURING ABEND PROCESSING. THIS ROUTINE IS ENTERED 05371902 * PRIOR TO DUMP (IF REQUESTED) OF CORE. 05372002 * 05372102 *02* LINKAGE = BRANCH ENTERED BY RTM2 VIA BR 14,15 05372202 * 05381102 *02* INPUT = PSW ENABLED, KEY 0, SUPERVISOR STATE, LOCAL LOCK HELD 05381202 * REGISTERS ARE: 05383202 * REGISTER 1 - POINTER TO PARAMETER LIST POINTER 05385202 * REGISTER 13 - CALLERS SAVE AREA 05387202 * REGISTER 14 - RETURN ADDRESS 05389202 * 05390002 *02* OUTPUT = NONE 05390402 * 05390502 *02* REGISTERS-SAVED = CALLERS REGISTERS WILL BE RETURNED EXCEPT 15 05390702 * WHICH WILL CONTAIN A RETURN CODE. 05400702 * 05412502 *02* REGISTER-USAGE = SEE PROLOGUE AT BEGINNING OF ROUTINE 05414502 * 05420402 *01* EXIT-NORMAL = CDHKEEP 05572202 * 05576202 *02* CONDITIONS = RETURN VIA BR 14 TO CALLER. CDE AND ASSOCIATED 05588102 * CORE HAS BEEN FREED. 05600002 * 05650002 *02* OUTPUT = REGISTER 5, 11-13 REMAIN AS ON ENTRY. 05700002 * ALL OTHER REGISTERS ARE UNPREDICTABLE 05710002 * 05750002 *02* RETURN-CODES = NONE 06000002 * 06050002 *01* EXIT-NORMAL = IEAPPGMX 06202002 * 06208402 *02* CONDITIONS = RETURN VIA BR 14 TO CALLER (SVC 3). PROGRAM 06208802 * MANAGER RESOURCES HAVE BEEN FREED. 06209202 * 06209602 *02* OUTPUT = REGISTER 15 CONTAINS A RETURN CODE. 06209702 * ALL OTHER REGISTERS ARE RETURNED TO CALLER 06213702 * 06215602 *02* RETURN-CODES = RETURN CODE 0 = SUCCESSFUL 06216002 * RETURN CODE 4 = FAILED 06218002 * THE ONLY CALLER OF THIS ROUTINE IS SVC 3. 06218402 * 06219902 *01* EXIT-NORMAL = IEAPPGMA 06223402 * 06242002 *02* CONDITIONS = RETURN VIA BR 14 TO CALLER. PARTIALLY LOADED 06244002 * PROGRAMS HAVE BEEN DEQUEUED AND POSSIBLY FREED. 06246002 * 06248002 *02* OUTPUT = REGISTER 15 CONTAINS A RETURN CODE 06248402 * ALL OTHER REGISTERS ARE RETURNED TO THE CALLER. (RTM2) 06248802 * 06249802 *02* RETURN-CODES = RETURN CODE 0 = SUCCESSFULL 06249902 * RETURN CODE 4 = FAILED 06259902 * THE ONLY CALLER OF THIS ROUTINE IS ABEND (RTM2) 06269902 * 06280602 *01* EXTERNAL-REFERENCES = 07233302 * IEAQCS02 - TO RESTART REQUESTS FOR PARTIALLY LOADED ROUTINES 07250002 * IEAQCS03 - TO RESTART REQUESTS FOR SERIALLY REUSABLE ROUTINES 07300002 * WHICH BECAUSE OF EXIT ARE NOW AVAILABLE 07310002 * FRRPGMX - RECOVERY ROUTINE ADDRESS 07320002 * 07350002 *02* ROUTINES = 07400002 * FREEMAIN - TO RELEASE CDE, EXTENT LIST, FETCH WORK AREA, 07450002 * MODULES, LLE 07500002 * POST W/O ECB - TO CAUSE A WAITING RB TO BE MADE READY FOR 07510002 * EITHER REUSABLE ROUTINES WHICH ARE NOW AVAILABLE OR 07520002 * NOT-IN-CORE MODULES WHEN THE REQUESTING TASK IS IN ABEND 07530002 * STATE. 07540002 * 07550002 *02* DATA-AREAS = NO DATA SETS ARE USED BY THIS MODULE 07600002 * A WORKAREA IS PASSED TO IEAVPGMA AS INPUT. THE FORMAT OF THE 07650002 * WORKAREA CAN BE FOUND IN THE PROLOGUE FOR THAT ROUTINE. 07700002 * 07850002 *02* CONTROL-BLOCKS = LLE,CDE,CVT,RB,TCB,SDWA 07900002 * 08150002 *01* TABLES = NONE 08200002 * 08250002 *01* MACROS = SETFRR, SETLOCK, GETMAIN, FREEMAIN, 08400002 * 08550002 *02* SERIALIZATION = LOCAL LOCK HELD THROUGHOUT PROCESS, CMS LOCK 08600002 * OBTAINED FOR LPA QUEUE MANIPULATION 08650002 * 08750002 *01* CHANGE-ACTIVITY = MODULE WRITTEN FOR SUPPORT CODE Y02758 08800002 * @YM06819 - 2/15/74 08820002 * @ZA02733 - RELEASE 2 08825003 * @ZA03243 @ZA03534 @ZA09239 - RELEASE 3 08827003 * @ZA03631 @ZA04838 - RELEASE 4 08840003 * 08850002 *01* MESSAGES = NONE 09000002 * 09250002 *01* ABEND-CODES = NONE 09300002 * 09350002 **** END OF SPECIFICATIONS ***/ 09500002 EJECT 09510002 SPACE 2 09520002 */*IEAVLK02: CHART */ 09522002 */* HEADER 09524002 */* PROGRAM MANAGER 09528402 */* SECTION 3.1.11 09528802 */* RESOURCE MANAGEMENT ROUTINES 09529202 */* PAGE # */ 09529602 SPACE 2 09530002 IEAVLK02 CSECT CSECT NAME **** SINGLE CSECT 09550002 MODID BR=NO 09600002 * ENTRY STATEMENTS 09650002 ENTRY CDHKEEP ENTRY TO FREE RESOURCES 09700002 ENTRY IEAPPGMA ENTRY TO REMOVE NIC PROG. 09750002 ENTRY IEAPPGMX ENTRY FROM EXIT 09850002 ENTRY CDSSNOP ENTRY OF DSS HOOK 09870002 ENTRY FINIS RETRY ENTRY FOR FRR 09872002 ENTRY EOTCHK RETRY ENTRY FOR FRR 09874002 SPACE 1 09880002 EXTRN FRRPGMX ENTRY IN LK03 OF RECOVERY RTN. 09890002 TITLE ' IEAVLK02 REGISTER EQUATES' 09900002 * REGISTER EQUATES 09950002 R0 EQU 0 STANDARD EQUATE 10000002 WKREG0 EQU R0 GENERAL WORK REGISTER 10050002 LNG EQU R0 LENGTH FOR FREEMAIN 10070002 R1 EQU 1 STANDARD EQUATE 10100002 WKREG1 EQU R1 GENERAL WORK REGISTER 10150002 PARMREG EQU R1 INPUT PARAMETER REGISTER 10160002 ADDR EQU R1 ADDRESS FOR FREEMAIN 10180002 R2 EQU 2 STANDARD EQUATE 10200002 WKREG2 EQU R2 GENERAL WORK REGISTER 10250002 * REGISTER 3 EQUATES 10280002 R3 EQU 3 STANDARD EQUATE 10300002 CVTREG EQU R3 REGISTER 3 POINTS TO CVT 10350002 LASTCDER EQU R3 LAST CDE REMOVED @ZA04838 10370003 * REGISTER 4 EQUATES 10400002 R4 EQU 4 CROSS REFERENCE EQUATE 10450002 TCBREG EQU R4 REGISTER 4 POINTS TO THE TCB 10500002 * REGISTER 5 EQUATES 10550002 R5 EQU 5 CROSS REFERENCE EQUATE 10600002 RBREG EQU R5 POINTER TO THE RB 10610002 * REGISTER 6 EQUATES 10650002 R6 EQU 6 CROSS REFERENCE EQUATES 10700002 * REGISTER 7 EQUATES 10750002 R7 EQU 7 CROSS REFERENCE EQUATES 10800002 ASCBREG EQU R7 POINTER TO THE ASCB 10810002 * REGISTER 8 EQUATES 10850002 R8 EQU 8 CROSS REFERENCE EQUATES 10900002 BASEREG EQU R8 BASE REGISTER FOR IEAVLK02 10910002 * REGISTER 9 EQUATES 10950002 R9 EQU 9 CROSS REFERENCE EQUATES 11000002 XLREG EQU R9 POINTER TO THE EXTENT LIST 11010002 NEXT EQU R9 USED FOR LOOP IN RB FIND 11020002 * ROUTINE IN PGMA 11030002 * REGISTER 10 EQUATES 11050002 R10 EQU 10 CROSS REFERENCE EQUATES 11100002 * REGISTER 11 EQUATES 11150002 R11 EQU 11 CROSS REFERENCE EQUATES 11200002 CDEMAJR EQU R11 POINTER TO THE MAJOR CDE 11210002 * REGISTER 12 EQUATES 11250002 R12 EQU 12 CROSS REFERENCE EQUATES 11300002 CDEREG EQU R12 POINTER TO CURRENT CDE 11310002 * REGISTER 13 EQUATES 11350002 R13 EQU 13 CROSS REFERENCE EQUATES 11400002 SAVEREG EQU R13 SAVE AREA REGISTER 11402002 * REGISTER 14 EQUATES 11450002 R14 EQU 14 CROSS REFERENCE EQUATES 11500002 RETURN EQU R14 RETURN REGISTER FOR ENTRY POINTS 11550002 * REGISTER 15 EQUATES 11600002 R15 EQU 15 CROSS REFERENCE EQUATES 11650002 TITLE ' IEAVLK02 CHARACTER AND HEX MASK EQUATES' 11700002 ZERO EQU 0 SYMB DISPL TO BEG OF FIELD 11800002 NULL EQU 0 USED IN ADDRESSIBILITY BALR 11810002 N0 EQU 0 CONSTANT OF ZERO 11810102 WORD1 EQU 0 FIRST WORD OF LIST 11810402 N1 EQU 1 CONSTANT 11810502 N2 EQU 2 USED TO MULTIPLY BY 4 IN SHIFT 11810602 ADDL EQU 3 SIZE OF ADDRESS 11810802 RH EQU 4 RIGHT HALF OF PSW 11812002 N4 EQU 4 CONSTANT TO PICK UP NEXT IN LIST 11812102 WORD EQU 4 SIZE OF ONE WORD 11812402 WORD2 EQU 4 SECOND WORD OF LIST 11814002 NOTZERO EQU 7 NOT EQUAL COMPARES 11820002 MASK EQU 7 ICM 3 ADDR BYTES IN REG @YA00094 11822003 EQUAL EQU 8 EQUAL COMPARES 11830002 N8 EQU 8 NUMERIC VALUE FOR RETURN CODE 11830402 WORD3 EQU 8 THIRD WORD OF LIST 11832002 WORD4 EQU 12 FOURTH WORD OF LIST 11840002 WORD5 EQU 20 FIFTH WORD OF LIST 11842002 N24 EQU 24 USED FOR 3 BYTE SHIFT 11844002 Q250 EQU 250 SUBPOOL 250 (USER 0) 11850002 Q251 EQU 251 SUBPOOL 251 (JPA) 11900002 Q252 EQU 252 SUBPOOL 252 11950002 FETWKSIZ EQU X'604' SIZE OF FETCH WORK AREA 11950402 MAX EQU X'FF' MAXIMUM VALUE 11951202 EJECT 11952002 * MODULE USING STATEMENTS 11960002 USING PSA,0 ADDRESSES LOW CORE 11962002 USING CVT,CVTREG POINTER TO THE CVT 11970002 USING TCB,TCBREG POINTER TO THE TCB 11980002 USING RBSECT,RBREG POINTER TO THE RB 11982002 USING CDENTRY,CDEMAJR POINTER TO THE CDE 11990002 TITLE ' IEAVLK02 - IEAPPGMA ROUTINE' 11994002 SPACE 2 11994402 */* E IEAPPGMA */ 11994502 */* P SET UP ADDRESSIBILITY */ 11994602 SPACE 2 11994802 IEAPPGMA DS 0H ABEND INTERFACE 11996002 STM R14,R12,WORD4(R13) SAVE ABEND REGISTERS 11997102 BALR BASEREG,NULL SET UP ADDRESSIBILITY 11997302 USING *,BASEREG TELL ASSEMBLER 11997502 MODENT DS 0H MOD. ENTRY POINT FOR ADDRESSING 11997702 SPACE 2 12007702 */* P GET POINTER TO PARAMETER LIST */ 12010802 SPACE 2 12011102 L PARMREG,ZERO(PARMREG) GET POINTER TO PARM LIST 12012402 USING RMPL,PARMREG TELL ASSEMBLER ADDRESS 12013502 SPACE 2 12013602 */* P ESTABLISH AND INITIALIZE WORK AREA */ 12013702 SPACE 2 12013902 L R10,RMPLRMWA GET MY WORK AREA ADDR. 12014602 ST R13,ZERO(R10) SAVE ABEND SAVE AREA ADDR. 12015702 LR SAVEREG,PARMREG SAVE PARM. LIST ADDR. 12016802 DROP PARMREG RESET ADDRESSIBILITY 12017902 USING RMPL,SAVEREG TO SAVE REGISTER 12019002 SPACE 2 12021002 */* P SET UP STANDARD REGISTERS R4=TCB, R7=ASCB, R12=CDE */ 12021402 SPACE 2 12023002 L TCBREG,RMPLTCBA GET ABENDING TCB 12023402 L ASCBREG,RMPLASCB GET ASCB FOR THE TCB 12024502 L WKREG2,TCBJSTCB GET JOBSTEP TCB FOR ABEND 12025602 SPACE 2 12026002 */* P SAVE TCB JOB PACK QUEUE POINTER IN WORK AREA */ 12026102 SPACE 2 12026402 LA WKREG2,TCBJPQ-TCB(WKREG2) GET JPQ POINTER 12026702 ST WKREG2,WORD2(R10) SAVE JPQ POINTER 12027802 SPACE 2 12027903 */* D (NO,NORETRY,YES,) RTM PROCESSING FOR RECOVERY RETRY*/ 12028003 SPACE 2 12028103 TM RMPLFLG1,RMPLRCOV RTM IN RETRY PROCESS @YA00094 12028203 BZ NORETRY NO- CONTINUE ABEND TERM @YA00094 12028603 SPACE 2 12028703 */* P OBTAIN PROGRAM MANAGER SVRB ADDR FROM RMPL */ 12028903 */* P OBTAIN POINTER TO CDE */ 12030003 */* D (NO,PGMAEND,YES,) DOES CDE EXIST */ 12032003 SPACE 2 12034003 L RBREG,RMPLRBPA OBTAIN PM SVRB ADDR @YA00094 12036003 SR CDEMAJR,CDEMAJR CLEAR REG FOR INSERT @YA00094 12038003 ICM CDEMAJR,MASK,RBCDE1 DOES CDE EXIST @YA00094 12044303 BZ PGMAEND NO - RETURN @YA00094 12044703 SPACE 2 12044803 */* D (NO,NOFETWK,YES,) HAS FETCH W.A. BEEN OBTAINED*/ 12044903 SPACE 2 12045103 SR R6,R6 CLEAR REG FOR INSERT @YA00094 12045503 ICM R6,MASK,RBCSWRKA FETCH WORK AREA OBTAIND @YA00094 12045603 BZ NOFETWK NO - BYPASS FREEMAIN @YA00094 12045703 SPACE 2 12045803 */* L FREEMAIN: FREE FETCH WORK AREA FROM SP253 (LSQA)*/ 12045903 */* P ZERO FETCH WORK AREA ADDRESS IN RBXSA */ 12046003 SPACE 2 12046103 FREEMAIN RU,LV=FETWKSIZ,SP=253,A=(6),BRANCH=YES @YA00094 12046203 SR R15,R15 INSURE ZEROES IN R15 @YA00094 12046303 ST R15,RBCSWORK CLEAR PTR TO FETCH W.A. @YA00094 12046503 SPACE 2 12046603 */*NOFETWK: P SAVE POINTER TO FIRST RB USING CDE (FROM CDRRBP)*/ 12046703 */* D (NO,LOCSVRB,YES,) PROG MGR SVRB TOP OF WAIT QUEUE */ 12046803 */* D (YES,DEQSVRB,NO,) WAITING FOR FOR MODULE (CDNIC=1)*/ 12046903 SPACE 2 12047003 NOFETWK L WKREG1,CDRRBP SAVE PTR FOR LATER USE @YA00094 12047103 CLC CDRRBP+1(3),RMPLRBPA+1 INPUT SVRB TOP OF QUEUE @YA00094 12047303 BNE LOCSVRB NO - SETUP TO DEQU SVRB @YA00094 12047603 TM CDATTR,CDNIC IS IT ALSO ON NIC QUEUE @YA00094 12048003 BO DEQSVRB YES - DEQ&POST ALL @YA00094 12048403 * WAITING SVRB'S @YA00094 12048503 SPACE 2 12048603 * PROCESS THE SERIAL REUS WAIT QUEUE 12048703 SPACE 2 12048803 */* P DECREMENT CDE USE COUNT BY ONE */ 12048903 SPACE 2 12049003 LH R6,CDUSE GET CDE USE COUNT @YA00094 12049103 BCTR R6,NULL DECREMENT COUNT BY 1 @YA00094 12049803 STH R6,CDUSE AND STORE BACK IN CDE @YA00094 12049903 SPACE 2 12050103 */* D (NO,USENOT0,YES,) USE COUNT = 0 */ 12050203 SPACE 2 12050303 LTR R6,R6 USE COUNT = 0 @YA00094 12050403 BNZ USENOT0 NO - DO NOT FREE CDE @YA00094 12050503 SPACE 2 12050603 */* S (,PGMAEND) CDDESTRY: REMOVE CDE AND ASSOC CORE */ 12050903 SPACE 2 12051403 BAL R6,CDDESTRY FREE CDE AND ASSOC CORE @YA00094 12051503 B PGMAEND RETURN TO CALLER @YA00094 12051803 SPACE 2 12051903 */*USENOT0: P SAVE ADDRESS OF NEXT WAITING RB */ 12054403 SPACE 2 12054503 USENOT0 SR WKREG1,WKREG1 CLEAR REG FOR INSERT @YA00094 12054603 ICM WKREG1,MASK,RBPGMQ1 GET NEXT RB PTR @YA00094 12054703 SPACE 2 12054803 */* P (,POSTNEXT) DEQUE THIS SVRB FR0M CDRBP AND CHAIN NEXT TO HEAD */ 12054903 SPACE 2 12055003 ST WKREG1,CDRRBP PUT NEXT RB AT QUE HEAD @YA00094 12055103 B POSTNEXT POST NXT WAITNG SVRB @YA00094 12055203 SPACE 2 12055303 */*LOCSVRB: D (NO,PGMAEND,YES,) ANY RB'S WAITNG FOR THIS MOD */ 12055403 SPACE 2 12055503 LOCSVRB LTR WKREG1,WKREG1 ANY RB'S WAITING @YA00094 12055603 BZ PGMAEND NO - RETURN @YA00094 12055703 SPACE 2 12055803 */*P GET NEXT WAITNG SVRB */ 12055903 */* D (NO,LOCSVRB,YES,) THIS SVRB EQ INPUT SVRB */ 12056003 SPACE 2 12056103 L RBREG,RBPGMQ-RBSECT(WKREG1) GET NXT RB ON Q @YA00094 12056203 C RBREG,RMPLRBPA THIS RB EQ INPUT RB @YA00094 12056303 BE CHECKNIC DEQUEUE THIS SVRB @YA00094 12056403 LR WKREG1,RBREG POINT TO NEXT RB @YA00094 12056503 B LOCSVRB LOCATE INPUT SVRB ON @YA00094 12056603 * THIS QUEUE @YA00094 12056703 SPACE 2 12056803 */*CHECKNIC: P CLEAR ADDR PORTION OF RBOPSW FOR RTM */ 12056903 */* D (NO,TCBDEQUE,YES,) MODULE IN CORE */ 12057503 */* P (,TCBDEQUE) MOD IS SER REUS - DECREMENT USE COUNT IN CDE*/ 12057603 SPACE 2 12105203 CHECKNIC XC RBOPSW+RH(4),RBOPSW+RH CLEAR RBOPSW+4 FOR RTM @YA00094 12105903 TM CDATTR,CDNIC MODULE IN STORAGE @YA00094 12106403 BO TCBDEQUE NO - DEQUE THE SVRB @YA00094 12106503 * YES - DECREMENT USE @YA00094 12106703 * COUNT OF SER REUS MOD @YA00094 12107503 LH R6,CDUSE GET CDE USE COUNT @YA00094 12108103 BCTR R6,NULL DECREMENT USE COUNT @YA00094 12108903 STH R6,CDUSE AND STORE BACK IN CDE @YA00094 12109603 B TCBDEQUE DEQUEUE THE SVRB @YA00094 12109903 SPACE 2 12110303 */*POSTNEXT: P CLEAR WAIT QUEUE POINTER IN SVRB */ 12111403 SPACE 2 12111803 POSTNEXT XC RBPGMQ1(3),RBPGMQ1 CLEAR QUEUE POINTER @YA00094 12112203 SPACE 2 12112903 */* P PUT ADDRESS OF PGM MGR ENTRY IEAQCS03 IN RBOPSW */ 12113603 SPACE 2 12114403 L R6,AIEAQCS3 GET ENTRY IN PROG MGR @YA00094 12114703 ST R6,RBOPSW+RH-RBSECT(WKREG1) ST IN WAITNG RBOPSW @YA00094 12115103 SPACE 2 12115803 */* P SET UP FOR POST W/O ECB */ 12116303 SPACE 2 12116903 LR R10,WKREG1 ADDR OF RB TO BE POST'D @YA00094 12118003 SR R11,R11 RB IN THIS ADDR SPACE @YA00094 12118303 L CVTREG,CVTPTR GET CVTPTR @YA00094 12118703 L R15,CVT0PT01 GET ADDRESS OF POST RTN @YA00094 12119403 SPACE 2 12119803 */* L POST W/0 ECB - POST WAITING RB */ 12120203 SPACE 2 12120703 BALR RETURN,R15 BRANCH TO POST W/O ECB @YA00094 12121303 SPACE 2 12121703 */* P (,PGMAEND) RETURN TO CALLER */ 12122803 SPACE 2 12123103 B PGMAEND RETURN TO CALLER @YA00094 12123503 SPACE 2 12124603 */*NORETRY: P GET FIRST CDE ON TCBJPQ */ 12125103 SPACE 2 12125603 NORETRY L CDEMAJR,N0(WKREG2) GET JPA QUEUE POINTER @YA00094 12126203 LA CDEMAJR,0(CDEMAJR) CLEAR HIGH ORDER BYTE 12126503 * 12127203 * DO UNTIL END OF QUEUE OR MAJOR NIC FOUND 12127903 * 12128403 SPACE 2 12129003 */*MINLOOP: D (NO,PGMAEND,YES,) ANY CDE'S LEFT ON TCBJPQ */ 12129503 SPACE 2 12130603 MINLOOP LTR CDEMAJR,CDEMAJR ANY CDE'S 12131103 BZ PGMAEND NO- TERMINATE 12131603 SPACE 2 12132303 */* D (YES,NEXTCDE,NO,) CURRENT CDE A MINOR? */ 12132703 SPACE 2 12133403 TM CDATTR,CDMIN CDE A MINOR 12133903 BO NEXTCDE YES- GET NEXT CDE 12134503 SPACE 2 12135003 */* D (NO,TCBTEST,YES,) MAJOR CDE IN CORE? */ 12136003 SPACE 2 12136303 TM CDATTR,CDNIC MAJOR CDE IN CORE 12136703 BO TCBTEST NO- GO TEST TCB = ABENDING TCB 12137503 SPACE 2 12138203 */* D (YES,NEXTCDE,NO,) MAJOR CDE RENT. ? */ 12138403 */* D (YES,SKIPPRB,NO,) MAJOR CDE SER REUS? */ 12138603 */*NEXTCDE: P SAVE PREVIOUS CDE ADDRESS */ 12138903 SPACE 2 12139403 TM CDATTR,CDREN MAJOR CDE REN ? @ZA03631 12139503 BO NEXTCDE YES- GET NEXT CDE @ZA03631 12139603 TM CDATTR,CDSER MAJOR CDE REUS? @ZA03631 12139703 BO SKIPPRB YES- SKIP FIRST PRB @ZA03631 12139803 NEXTCDE ST CDEMAJR,WORD2(R10) SAVE PREVIOUS CDE 12140003 SPACE 2 12140403 */* P (,MINLOOP) GET NEXT CDE (NEW CURRENT) */ 12141103 SPACE 2 12141603 L CDEMAJR,CDCHAIN GET NEXT CDE ON JPQ 12142203 B MINLOOP CONT. SEARCH 12142703 * 12143303 * IF CDE IS NOT IN CORE THEN DO: 12144403 * 12144903 SPACE 2 12145503 */*TCBTEST: P GET FIRST RB FROM TCB (R5=TCBRBP(R4)) */ 12146003 */* P GET FIRST RB FROM CDE (R1=CDRRBP(R11)) */ @ZA03534 12146203 SPACE 2 12146603 TCBTEST EQU * 12146703 LA WKREG1,1 THESE INSTRS. GET LEFT- @ZA09239 12146803 SLL WKREG1,31 MOST BIT ON IN REG 11 @ZA09239 12146903 OR CDEMAJR,WKREG1 TO IND. NO RETRY PATH @ZA09239 12147103 L RBREG,TCBRBP GET FIRST RB FROM TCB @ZA03534 12147403 L WKREG1,CDRRBP GET FIRST RB FROM CDE @ZA03534 12148003 SPACE 2 12148303 */*RBCOMP: D (YES,DEQSVRB,NO,) DOES RB FROM CDE = THIS RB FROM TCB */ 12148503 SPACE 2 12149403 RBCOMP CLM RBREG,MASK,CDRRBP+N1 DOES THE RB FROM THE @ZA03534 12149703 * CDE MATCH A RB ON THE @ZA03534 12150003 * TCB CHAIN? @ZA03534 12150303 BE DEQSVRB YES- GO DEQUE THE SVRB @ZA03534 12150603 SPACE 2 12151503 */* D (YES,CONTSRCH,NO,) THIS RB POINT TO THE TCB? */ 12151803 SPACE 2 12152503 TM RBSTAB2,RBTCBNXT THIS RB POINT TO TCB? @ZA03534 12152703 BO CONTSRCH YES- GO TO CONTINUE @ZA03534 12153103 * SEARCH WITH NEXT RB ON @ZA03534 12153503 * RBPGMQ @ZA03534 12153903 SPACE 2 12155903 */* P (,RBCOMP) GET NEXT RB (R5=RBLINK(R5)) */ 12156203 SPACE 2 12157103 L RBREG,RBLINK GET NEXT RB @ZA03534 12157403 B RBCOMP GO COMPARE WITH CDRRBP @ZA03534 12157903 SPACE 2 12163203 */*DEQSVRB: P SET CDE USE COUNT TO ZERO */ 12164003 */* P CLEAR CDE POINTER IN SVRB AND MARK SVRB AS TYPE 2 FOR ABEND */ 12164803 SPACE 2 12165203 DEQSVRB SR WKREG1,WKREG1 CLEAR REG FOR STORAGE 12165603 STH WKREG1,CDUSE SET CDE USE COUNT TO ZERO 12166603 STCM WKREG1,MASK,RBCDE1 CLEAR CDE POINTER @ZA03243 12166903 NI RBSTAB1,MAX-RBTRSVRB INSURE SVRB RESIDENT M04161 12167303 SPACE 2 12168003 */* P CLEAR RB QUEUE HEAD POINTER */ 12168803 SPACE 2 12169603 ST WKREG1,CDRRBP CLEAR QUEUE HEAD 12170003 * 12170403 * DEQUEUE WAITING RB'S AND ALLOW TO RESTART 12171203 * 12172003 SPACE 2 12172403 */* P SAVE VOLITAL REGISTERS IN WORK AREA (R10-14) */ 12172803 SPACE 2 12173603 L WKREG1,RMPLRMWA GET MY SAVE AREA 12174403 STM R10,R14,WORD3(WKREG1) SAVE VOLITAL REGS 12174803 SPACE 2 12175603 */*CARRYON: P GET RB ON WAIT QUEUE */ 12176003 SPACE 2 12176803 CARRYON L NEXT,RBPGMQ GET NEXT RB ON WAIT QUEUE 12177203 SPACE 2 12177603 */* D (NO,DQEND,YES,) ANY RB'S ON WAIT QUEUE? */ 12178403 SPACE 2 12178903 LTR NEXT,NEXT ANY RB'S WAITING 12179403 BZ DQEND NO- GO TO END 12180103 SPACE 2 12180803 */* P CLEAR THE RB QUEUE FIELD */ 12181603 SPACE 2 12181903 XC RBPGMQ+N1(ADDL),RBPGMQ+N1 CLEAR RB QUEUE POINTER 12182303 SPACE 2 12183003 */* P PUT ADDRESS OF PGM. MGR. ENTRY IEAQCS02 IN RESUME PSW FIELD */ 12183703 */* P CLEAR CDE FIELD AND INSURE SVRB MARKED RESIDENT */ 12184603 SPACE 2 12184903 LR RBREG,NEXT SET FOR NEXT LOOP 12185303 MVC RBOPSW+RH(WORD),AIEAQCS2 PUT PGM.MGR. ADDR. IN PSW 12186003 XC RBCDE1(3),RBCDE1 CLEAR CDE POINTER 12186703 NI RBSTAB1,MAX-RBTRSVRB INSURE SVRB MARKED RESIDENT 12187603 SPACE 2 12187903 */* P SET UP INPUT TO POST W/O ECB */ 12188303 SPACE 2 12189003 LR R10,RBREG INPUT TO POST-10=RB TO BE POSTED 12189703 SR R11,R11 0 INDICATES THIS ADDRESS SPACE 12190403 L CVTREG,CVTPTR GET CVT POINTER 12191103 L R15,CVT0PT01 GET POST ENTRY POINT 12191503 SPACE 2 12192403 */* L POST W/O ECB-- POST THE WAITING RB */ 12192803 SPACE 2 12193603 BALR RETURN,R15 GO TO POST W/O ECB 12194003 SPACE 2 12194403 */* P (,CARRYON) CLEAR CDE POINTER IN RB */ 12195203 SPACE 2 12196003 XC RBCDE+N1(ADDL),RBCDE+N1 CLEAR RB CDE POINTER 12196403 B CARRYON LOOP TO GET NEXT RB 12196803 SPACE 2 12197603 */*DQEND: P RESTORE VOLITAL REGISTERS */ 12198403 SPACE 2 12198803 DQEND L WKREG1,RMPLRMWA GET MY WORK AREA 12199203 LM R10,R14,WORD3(WKREG1) RESTORE VOLITAL REGS 12200003 * 12200803 * GO TO CDDESTRY TO REMOVE CDE AND ASSOCIATED CORE 12201203 * 12201603 SPACE 2 12202403 */* S (,TSTNXTCD) CDDESTRY:REMOVE CDE AND ASSOC. SPACE */ 12203203 SPACE 2 12203603 BAL R6,CDDESTRY GO REMOVE CDE AND ASSOC. CORE 12204003 B TSTNXTCD GET NEXT CDE ON QUEUE AND 12204803 * REPEAT PROCESS 12205603 * 12206003 * END DO GROUP 12206403 * ELSE DO 12207203 * 12208003 SPACE 2 12208503 */*SKIPPRB: P GET FIRST PRB FROM CDE */ 12208703 */* D (NO,NEXTCDE,YES,) RB EXIST? (CDRRBP NOT ZERO)*/ 12208803 */*CONTSRCH: P SAVE CURRENT CDE POINTER IN WORK AREA */ 12209003 SPACE 2 12209603 SKIPPRB L WKREG1,CDRRBP GET FIRST PRB FROM CDE @ZA03631 12210003 LTR WKREG1,WKREG1 RB EXIST? @ZA03631 12210103 BZ NEXTCDE NO- GET NEXT CDE @ZA03631 12210203 CONTSRCH DS 0H 12210403 L R15,RMPLRMWA GET WORK AREA 12210803 ST CDEMAJR,WORD2(R15) SAVE CURRENT CDE POINTER 12211203 SPACE 2 12212003 */*CNTSRCHI: P GET NEXT RB ON CDE QUEUE */ 12212803 SPACE 2 12213203 CNTSRCHI L RBREG,RBPGMQ-RBSECT(WKREG1) GET NEXT RB ON QUEUE 12213603 SPACE 2 12214403 */* D (NO,TSTNXTCD,YES,) ANY MORE RB'S ON WAIT QUEUE? */ 12215203 SPACE 2 12215603 LTR RBREG,RBREG ANY MORE RB'S ON WAIT QUEUE 12216003 BZ TSTNXTCD NO- GET NEXT CDE AND CONT. 12216803 SPACE 2 12217603 */* D (YES,TCBDEQUE,NO,) THIS TCB THE ABENDING TCB? */ 12218003 SPACE 2 12218403 CLM TCBREG,MASK,RBOPSW+5 THIS TCB ABENDING 12219203 BE TCBDEQUE YES-DECHAIN IT 12220003 SPACE 2 12220403 */* P (,CNTSRCHI) GET NEXT RB ON CDE/RB QUEUE */ 12220803 SPACE 2 12221603 LR WKREG1,RBREG GET NEXT RB ON QUEUE 12222403 B CNTSRCHI REPEAT FOR NEXT RB ON WAIT QUEUE 12222803 * UNCHAIN WAITING RB 12223203 SPACE 2 12224003 */*TCBDEQUE: P DEQUEUE WAITING RB AND ZERO POINTER */ 12224803 */* P CLEAR CDE POINTER AND INSURE SVRB MARKED RESIDENT FOR ABEND */ 12225203 */* D (YES,TSTNXTCD,NO,) IS CDE RENT?*/ 12225403 */* D (NO,TSTNXTCD,YES,) IS CDE REUS?*/ 12225603 */* P DECREMENT THE USE COUNT IN THE CDE */ 12225803 SPACE 2 12226003 TCBDEQUE MVC RBPGMQ+N1-RBSECT(ADDL,WKREG1),RBPGMQ+N1 UNHOOK RB 12226403 XC RBPGMQ(WORD),RBPGMQ CLEAR THE WAIT QUE PTR @ZA03534 12226803 XC RBCDE1(3),RBCDE1 CLEAR CDE POINTER M04161 12227203 NI RBSTAB1,MAX-RBTRSVRB INSURE SVRB RESIDENT M04161 12227603 TM CDATTR,CDREN IS CDE RENT? @ZA03631 12227803 BO TSTNXTCD YES- GO FOR NEXT CDE @ZA03631 12228003 TM CDATTR,CDSER IS CDE REUS? @ZA03631 12228203 BZ TSTNXTCD NO- GO FOR NEXT CDE @ZA03631 12228403 LH R6,CDUSE GET CDE USE COUNT AND @ZA03631 12228603 BCTR R6,NULL DECREMENT BY ONE @ZA03631 12228703 STH R6,CDUSE @ZA03631 12228803 * 12228903 * END OF ELSE DO 12229503 * 12229603 SPACE 2 12230003 */*TSTNXTCD: D (YES,PGMAEND,NO,) RTM PROCESSING FOR RECOV. RETRY */ 12230403 */* P RESET STANDARD REGISTERS */ 12231203 SPACE 2 12232003 TSTNXTCD TM RMPLFLG1,RMPLRCOV RTM IN RETRY @YA00094 12232403 BO PGMAEND YES-RESOURCE MGR CMPLETE@YA00094 12232803 SPACE 2 12233603 DS 0H 12234403 L R4,RMPLTCBA RESET TCB ADDRESS 12234803 L R7,RMPLASCB RESET ASCB ADDRESS 12235203 L WKREG1,RMPLRMWA GET MY WORKAREA 12236003 SPACE 2 12236803 */* P (,MINLOOP) GET PREVIOUS AND CURRENT CDE ADDRESSES */ 12237303 SPACE 2 12237803 L CDEREG,WORD2(WKREG1) GET PREVIOUS CDE 12238403 L CDEMAJR,CDCHAIN-CDENTRY(CDEREG) GET NEXT(CURRENT) CDE 12239203 B MINLOOP PROCESS NEXT CDE 12239603 * 12240003 * LAST CDE ON JPQ HAS BEEN PROCESSED 12240803 * 12241603 SPACE 2 12242003 */*PGMAEND: P RE-ESTABLISH CALLERS REGISTERS */ 12242803 SPACE 2 12243203 PGMAEND L WKREG1,RMPLRMWA GET MY WORKAREA 12244003 L R13,ZERO(WKREG1) GET CALLERS SAVEAREA ADDR. 12244403 LM R14,R12,WORD4(R13) RESTORE CALLERS REGS. 12244803 SPACE 2 12245603 */* P SET RETURN CODE = ZERO */ 12246403 SPACE 2 12246803 SR R15,R15 SET 0 RETURN CODE 12247203 SPACE 2 12248003 */* R RETURN R14 */ 12248803 SPACE 2 12249203 BR RETURN RETURN TO CALLER 12249603 DROP SAVEREG DONT NEED PGMA PARM LIST 12250403 TITLE ' IEAVLK02 - IEAPPGMX ROUTINE' 12251203 SPACE 2 12251603 */* E IEAPPGMX */ 12252003 */* P ESTABLISH ADDRESSIBILITY */ 12252803 SPACE 2 12253603 IEAPPGMX DS 0H EXIT INTERFACE 12254003 STM R14,R12,WORD4(R13) SAVE CALLERS REGISTERS 12254403 BALR BASEREG,NULL SET UP ADDRESSIBILITY 12255203 USING *,BASEREG TELL ASSEMBLER 12256003 L BASEREG,AMODENT GET POINTER TO FRONT OF MOD. 12256403 USING MODENT,BASEREG TELL ASSEMBLER 12256803 SPACE 2 12257603 */* L SETFRR-- ESTABLISH RECOVERY ROUTINE */ 12258403 SPACE 2 12258903 SETFRR A,FRRAD=FRREXIT,WRKREGS=(2,3),PARMAD=(2) SET RECOVERY 12259403 ST BASEREG,N4(R2) PUT BASEADDRESS IN PARM AREA 12260003 ST R13,N0(R2) PUT CALLERS REG SAVE IN PARMLST 12260803 LR R13,R2 MOVE PARMLIST POINTER @ZA02733 12261003 L CVTREG,CVTPTR RESET CVT ADDRESS M01976 12261203 SPACE 1 12261603 * DECREMENT CDE USE COUNT FOR EXITING MODULE AND FREE CORE 12262403 * AS REQUIRED. 12263203 SPACE 2 12263603 */*P GET CDE ADDRESS FROM EXITING RB */ 12264003 SPACE 2 12264803 L CDEREG,RBCDE GET EXITING CDE 12265603 LA CDEREG,0(CDEREG) CLEAR HIGH ORDER BYTE 12266003 SPACE 2 12266403 */* D (NO,EOTCHK,YES,) CDE EXIST FOR THIS REQUEST? */ 12267203 SPACE 2 12268003 LTR CDEREG,CDEREG Q. CDE EXIST FOR THIS REQUEST 12268403 BZ EOTCHK A. NO- CHECK FOR END OF TASK 12268803 SPACE 2 12269603 */*GETMAJOR: D (NO,MAJREQ,YES,) EXITING REQUEST FOR MAJOR CDE */ 12270403 SPACE 2 12270803 GETMAJOR LR CDEMAJR,CDEREG PUT CURRENT IN MAJOR REG. 12271203 TM CDATTR-CDENTRY(CDEREG),CDMIN Q. EXITING CDE A MINOR 12272003 BZ MAJREQ A. NO- MAJOR REG SET UP ALREADY 12272603 SPACE 2 12273203 */* P GET MAJOR CDE FOR EXITING REQUEST */ 12273603 SPACE 2 12274603 L CDEMAJR,CDXLMJP-CDENTRY(CDEREG) GET MAJOR CDE 12274803 SPACE 2 12275403 */*MAJREQ: D (NO,JPQMOD,YES,) CDE ON LPA QUEUE? */ 12276003 */* P SAVE REGS 11 - 13 IN FRR PARM LIST AREA */ 12276803 */* L SETLOCK-- GET CMS LOCK */ 12277603 */* P RESTORE REGS 11 - 13 FROM FRR PARM. LIST */ 12278003 */*JPQMOD: P DECREMENT CDE USE COUNT BY ONE */ 12278403 SPACE 2 12279203 MAJREQ TM CDATTR,CDNIP CDE IN LPA TEST @Y04990 12280003 BZ JPQMOD NO- SKIP CMS LOCK OBTAIN @Y04990 12280403 STM R11,R13,N8(R2) SAVE REGS OVER SETLOCK @Y04990 12280803 SETLOCK OBTAIN,TYPE=CMS,MODE=UNCOND, @Y04990X12281603 RELATED=(IEAVLK02,CDHKEEP,EXITSRCH) @Y04990 12282403 LM R11,R13,N8(R2) RESTORE REGS @Y04990 12282803 JPQMOD LH WKREG1,CDUSE GET CDE USE COUNT 12283203 BCTR WKREG1,NULL DECREMENT COUNT BY ONE 12284003 STH WKREG1,CDUSE AND PUT IT BACK IN THE CDE 12284803 * 12285203 * IF ANY RB'S WAITING FOR THIS CDE 12285603 * 12286403 SPACE 2 12287203 */* P GET ADDRESS OF ANY WAITING RB'S */ 12287703 SPACE 2 12288203 L WKREG1,RBPGMQ GET PGM. REQUEST QUEUE 12288803 LA WKREG1,0(WKREG1) CLEAR HIGH ORDER BYTE 12289603 SPACE 2 12290003 */* P PUT WAITING RB'S ADDRESS IN CDE */ 12290403 SPACE 2 12291203 ST WKREG1,CDRRBP PUT QUEUE FIELD IN CDE 12292003 SPACE 2 12292403 */* D (NO,CLEARCDE,YES,) RB'S WAITING TO USE THIS REUS. MOD? */ 12293203 SPACE 2 12293603 LTR WKREG1,WKREG1 Q. REQ. OUTSTANDING FOR THIS CDE 12294403 BZ CLEARCDE A. NO- GO TO CDHKEEP 12294803 * 12295203 * THEN DO: 12296003 * 12296803 SPACE 2 12297203 */* P PUT ADDRES OF PGM. MGR. ENTRY IEAQCS03 IN RESUME PSW */ 12297603 SPACE 2 12298403 L WKREG2,AIEAQCS3 GET ENTRY IN PGM. MGR. 12299203 ST WKREG2,RBOPSW+RH-RBSECT(WKREG1) PUT IN WAITING RB OPSW 12299603 SPACE 2 12300003 */* P SET UP FOR POST W/O ECB */ 12300803 SPACE 2 12301603 LR WKREG2,R13 SAVE SAVE AREA ADDR. OVER POST 12302003 LR R10,WKREG1 ADDRESS OF RB TO BE POSTED 12302403 SR R11,R11 INDICATE RB IN THIS ADDR. SPACE 12303203 L R15,CVT0PT01 GET ADDRESS OF POST RTN. 12304003 SPACE 2 12304403 */* L (,EOTCHK) POST W/O ECB-- POST THE WAITING RB */ 12304803 SPACE 2 12305603 BALR RETURN,R15 GO TO POST W/O ECB 12306403 LR R13,WKREG2 RESTORE REG. SAVED OVER POST 12306803 B EOTCHK RETURN TO CALLER 12307203 * 12308003 * END DO GROUP 12308803 * ELSE DO: 12309303 * 12309803 SPACE 2 12310403 */*CLEARCDE: S CKHKEEPI:FREE CDE AND ANY ASSOC. STORAGE */ 12311203 SPACE 2 12311603 CLEARCDE BAL RETURN,CDHKEEPI GO TO CDHKEEP TO FREE 12312003 * CDE AND ANY CORE NECESSARY 12312803 * NOTE: REGISTERS 3,4,5,7,11,12 ARE ALREADY SET FOR ENTRY 12313603 * 12314003 * IF THIS IS THE LAST RB ON TCB QUEUE (EOT) 12314403 * 12315203 SPACE 2 12316003 */*EOTCHK: P TURN PROGRESS BYTE ZERO ON IN THE FRR PARM LIST*/ @ZA02733 12316203 */* D (NO,FINIS,YES,) IS THIS AN END-OF-TASK REQUEST? */ 12316403 SPACE 2 12316803 EOTCHK MVI FRRPLCK0-FRRPLIST(R13),N1 SET PARM LIST PROGRES @ZA02733 12317003 * BYTE ON @ZA02733 12317203 TM RBSTAB2,RBTCBNXT Q. TCB NEXT INDIC. EOT 12317603 BZ FINIS A. NO- RETURN TO CALLER 12318403 * 12318803 * THEN DO: /* EOT WORK */ 12319203 * 12320003 SPACE 2 12320503 */* P GET ADDRESS OF LLE QUEUE FROM TCB */ 12321003 SPACE 2 12322003 L WKREG2,TCBLLS GET LLE QUEUE POINTER 12322403 SPACE 2 12322803 */* D (NO,FINIS,YES,) ANY LLE'S TO FREE? */ 12323603 SPACE 2 12324403 LTR WKREG2,WKREG2 ANY LLES TO FREE 12324803 BZ FINIS NO- RETURN TO CALLER 12325203 USING LLE,WKREG2 SET UP ADDRESSING 12326003 * 12326803 * DO WHILE LLE'S EXITS 12327203 * 12327603 SPACE 2 12328403 */*LLELOOP: P GET CDE FOR THIS LLE */ 12328903 SPACE 2 12329403 LLELOOP L CDEREG,LLECDPT GET CDE FOR THIS LOAD 12330003 SPACE 2 12330903 */* D (YES,MAJLOAD,NO,) THIS CDE A MAJOR CDE? */ 12331303 SPACE 2 12331803 LR CDEMAJR,CDEREG SET MAJOR CDE UP ALSO 12332703 TM CDATTR-CDENTRY(CDEREG),CDMIN Q. THIS CDE A MINOR 12333103 BZ MAJLOAD A. NO- MAJOR ALREADY SET 12333603 SPACE 2 12334503 */* P GET MAJOR CDE */ 12334903 SPACE 2 12335403 L CDEMAJR,CDXLMJP-CDENTRY(CDEREG) GET MAJOR CDE 12336303 SPACE 2 12336703 */*MAJLOAD: D (NO,JPQMOD1,YES,) CDE ON LPA QUEUE? */ 12337203 */* P SAVE R11 - R13 IN REGS 1,5, AND 15 */ 12338103 */* L SETLOCK-- GET CMS LOCK */ 12338503 */* P RESTORE R11 - R13 FROM SAVE REGS */ 12339403 */*JPQMOD1: P DECREMENT CDE USE COUNT BY LLE USE COUNT */ 12339903 SPACE 2 12340303 MAJLOAD TM CDATTR,CDNIP CDE ON LPA TEST 12340803 BZ JPQMOD1 NO- SKIP GETTING CMS LOCK Y04990 12341703 LR R1,R11 SAVE R13 @Y04990 12342103 LR R5,R12 SAVE R12 @Y04990 12342603 LR R15,R13 SAVE R13 @Y04990 12343503 SETLOCK OBTAIN,TYPE=CMS,MODE=UNCOND, @Y04990X12343903 RELATED=(IEAVLK02,CDHKEEP,EXITSRCH) @Y04990 12344403 LR R11,R1 RESTORE R11 @Y04990 12345303 LR R12,R5 RESTORE R12 @Y04990 12345703 LR R13,R15 RESTORE R13 @Y04990 12346203 JPQMOD1 LH WKREG1,CDUSE GET CDE USE COUNT 12347103 SH WKREG1,LLECOUNT SUBTRACT THE LLE USE COUNT 12347503 STH WKREG1,CDUSE RETURN COUNT TO CDE 12348403 SPACE 2 12348903 */* P SAVE LLE ADDRESS OVER INTERFACE */ 12349403 SPACE 2 12350003 LR RBREG,WKREG2 SAVE LLE OVER INTERFACE 12350703 SPACE 2 12351403 */* S CDHKEEPI:FREE CDE AND ASSOC. STORAGE */ 12351703 SPACE 2 12352103 BAL RETURN,CDHKEEPI GO TO HOUSEKEEPING RTN. 12352803 SPACE 2 12353503 */* P GET NEXT LLE ON QUEUE */ 12354203 SPACE 2 12354903 L WKREG2,LLECHN-LLE(RBREG) GET NEXT LLE ON CHAIN 12355603 SPACE 2 12355903 */* P INSURE ASCB IN R7 FOR FREEMAIN */ 12356303 SPACE 2 12357003 L ASCBREG,PSAAOLD GET CURRENT ASCB ADDR. 12357703 SPACE 2 12358403 */* L FREEMAIN-- FREE THE CURRENT LLE (SP255) */ 12359103 SPACE 2 12359503 FREEMAIN RC,A=(RBREG),LV=LLESIZE,SP=255,BRANCH=YES FREE LLE 12360003 SPACE 2 12360603 */* D (YES,LLELOOP,NO,) ANY MORE LLE'S ON QUEUE? */ 12361203 SPACE 2 12362003 LTR WKREG2,WKREG2 Q. MORE LLE'S 12362503 BNZ LLELOOP A. YES, PROCESS NEXT 12363003 SPACE 2 12364003 */* P GET TERMINATING TCB ADDRESS */ 12364503 SPACE 2 12365003 L TCBREG,PSATOLD GET TCB ADDRESS 12365503 SPACE 2 12366003 */* P CLEAR THE LLE QUEUE HEADER FIELD IN THE TCB */ 12367003 SPACE 2 12367503 ST WKREG2,TCBLLS CLEAR LLE POINTER IN TCB 12368003 DROP WKREG2 12368503 * END DO GROUP 12369203 * ELSE: 12370003 * END ELSE DO GROUP: 12370603 SPACE 2 12371203 */*FINIS: P RESTORE CALLERS SAVE AREA ADDRESS */ @ZA02733 12371503 */* L SETFRR-- REMOVE FRR FROM STACK */ 12371803 SPACE 2 12372403 FINIS L R13,N0(R13) RESTORE SAVE AREA PTR @ZA02733 12372703 SETFRR D,WRKREGS=(2,3) REMOVE RECOVERY RTN 12373603 SPACE 2 12374203 */* P RESTORE CALLERS REGISTERS */ 12374803 SPACE 2 12375403 LM R14,R12,WORD4(R13) RESTORE CALLERS REGS 12376003 SPACE 2 12376603 */* P SET RETURN CODE = ZERO */ 12377203 SPACE 2 12377803 SR R15,R15 INDICATE COMPLETE SUCCESSFULLY 12378403 SPACE 2 12379003 */* R RETURN R14 */ 12379603 SPACE 2 12380203 BR RETURN RETURN TO CALLER 12380803 TITLE ' IEAVLK02 - CDHKEEP ROUTINE' 12381403 SPACE 2 12382003 */* E CDHKEEP */ 12382603 */* P ESTABLISH ADDRESSIBILITY */ 12383203 SPACE 2 12383803 CDHKEEP BALR BASEREG,NULL SET UP ADDRESSIBILITY 12384403 USING *,BASEREG 12385003 L BASEREG,AMODENT GET POINTER TO FRONT OF MOD. 12385603 USING MODENT,BASEREG TELL ASSEMBLER 12386203 SPACE 2 12386803 */*CDHKEEPI: P SAVE RETURN ADDRESS IN UNUSED REGISTER */ 12387403 SPACE 2 12388003 CDHKEEPI LR R6,RETURN SAVE RETURN REGISTER 12388603 SPACE 2 12389203 */* P TURN ON NOT FUNCTIONAL FLAG IN CDE */ 12389803 SPACE 2 12390403 OI CDATTR,CDNFN SET NOT FUNCTIONAL FLAG 12391003 * LOAD/BRANCH COULD CAUSE FLAG NOT 12391603 * SET IN PROGRAM MANAGER 12392203 SPACE 2 12392803 */* P CLEAR HIGH ORDER BYTES OF CDE REGISTERS */ 12393403 SPACE 2 12394003 LA R12,N0(R12) CLEAR HIGH ORDER BYTE OF CDE 12394603 LA CDEMAJR,N0(CDEMAJR) CLEAR HIGH BYTE 12395203 SPACE 2 12395803 */*P GET CDE USE COUNT */ 12396403 SPACE 2 12397003 LH WKREG1,CDUSE GET USE COUNT 12397603 SPACE 2 12398203 */* D (NO,ERROR,YES,) USE COUNT = ZERO? */ 12398803 SPACE 2 12399403 LTR WKREG1,WKREG1 Q. USE COUNT ZERO. 12400002 BNZ ERROR A. NO-RETURN. @Y04990 12450002 SPACE 2 12500002 */* D (YES,LPAONLY,NO,) MODULE IN LPA? */ 12502002 SPACE 2 12510002 TM CDATTR,CDNIP Q. IS MODULE IN CVTQLPAQ 12550002 BO LPAONLY A. YES-SEARCH ONLY LPA AND 12600002 * DO NOT FREE MODULES 12700002 SPACE 2 12710002 */*CDDESTRY: P GET EXTENT LIST ADDRESS */ 12712002 SPACE 2 12720002 CDDESTRY L XLREG,CDXLMJP GET XLTLIST POINTER 12750002 USING XTLST,XLREG POINTER TO EXTENT LIST 12760002 LA XLREG,ZERO(XLREG) CLEAR HIGH ORDER BYTE 12800002 SPACE 2 12810002 */* D (YES,,NO,ORDERCDQ) IS THERE AN EXTENT LIST? */ 12812002 SPACE 2 12820002 LTR XLREG,XLREG Q. IS THERE AN EXTENT LIST 12850002 BZ ORDERCDQ A. NO- DO NOT TRY TO FREE IT 12900002 SPACE 2 12910002 */* P GET LENGTH OF MODULE FROM XL */ 12912002 SPACE 2 12920002 L WKREG2,XTLMSBLA GET LENGTH OF MODULE 12950002 LA WKREG2,ZERO(WKREG2) CLEAR HIGH ORDER BYTE 12960002 SPACE 2 12970002 */* P GET ADDRESS TO BE FREED FROM XL */ 12972002 SPACE 2 12980002 L WKREG1,XTLMSBAA GET ADDRESS TO BE FREED 13000002 SPACE 2 13010002 */* D (NO,ORDERCDQ,YES,) IS EXTENT LIST COMPLETE? */ 13012002 SPACE 2 13020002 LTR WKREG1,WKREG1 Q. IS EXTENT LIST COMPLETE 13050002 * (IF MODULE NIC LIST MAY NOT BE) 13100002 BZ ORDERCDQ A. NO- DO NOT TRY TO FREE MOD. 13150002 SPACE 2 13160002 */* D (NO,NOTSPZ,YES,) SUBPOOL 0 MODULE? */ 13162002 SPACE 2 13170002 TM CDATTR2,CDSPZ Q. SUBPOOL 0 MODULE 13200002 BZ NOTSPZ A. NO- TRY JPA 13250002 SPACE 1 13250402 * SPECIAL CODE TO FREE MULTIPLE EXTENTS FOR OS LOADER SUPPORT 13252002 SPACE 1 13254002 */* P GET NUMBER OF ENTRIES IN XL */ 13256002 SPACE 2 13258002 L R10,XTLNRFAC GET NUMBER OF ENTRIES 13260002 SPACE 2 13312002 */* P CALCULATE ADDRESS OF ADDRESS FIELDS */ 13312402 SPACE 2 13314002 LA R2,XTLMSBLA GET ADDRESS OF SIZE 13317002 DROP XLREG DONT NEED XTLST ANY LONGER 13318002 LR R9,R2 SET UP FOR ADDRESS FIELD 13320002 SLL R10,N2 MULTIPLY BY FOUR M03270 13330002 AR R9,R10 ADDR. IN R9 M03270 13334002 SRL R10,N2 RESET TO COUNT OF ENTRIES M03270 13338002 L ASCBREG,PSAAOLD GET ASCB FOR FREEMAIN 13342002 SPACE 2 13342402 */* FREE: L FREEMAIN-- FREE SEGMENT OF MODULE FROM SUBPOOL 0 */ 13342502 SPACE 2 13342802 FREE L LNG,N0(R2) GET ACTUAL LENGTH 13343202 L ADDR,N0(R9) GET ACTUAL ADDRESS 13343602 FREEMAIN RC,LV=(R0),A=(R1),SP=Q250,BRANCH=YES FREE EXTENT 13344002 SPACE 2 13344402 */* P CALCULATE NEXT LENGTH AND ADDRESS FIELDS */ 13344502 SPACE 2 13344802 LA R2,N4(R2) GET NEXT LENGTH 13346002 LA R9,N4(R9) GET NEXT ADDRESS 13348002 SPACE 2 13348102 */* P DECREMENT NO. OF EXTENTS TO GO BY ONE */ 13358402 */* D (YES,FREE,NO,CDSSNOP) ANY MORE EXTENTS? */ 13368402 SPACE 2 13369102 BCT R10,FREE IF MORE EXTENTS, FREE ONE M03270 13379402 B CDSSNOP GO FREE MODULE 13389702 SPACE 2 13399702 */*NOTSPZ: D (YES,,NO,LPAMOD) MODULE IN SP251? */ 13422202 SPACE 2 13425002 NOTSPZ TM CDATTR,CDJPA Q. MODULE IN 251 13437502 BZ LPAMOD A. NO-SET TO 252 13450002 SPACE 2 13460002 */* P (,FREEMOD) SET SUBPOOL FOR FREEMAIN TO 251 */ 13462002 SPACE 2 13470002 LA WKREG0,Q251 A. YES- SET SUBPOOL TO 251 13500002 B FREEMOD GO FREE MODULE 13550002 SPACE 2 13560002 */*LPAMOD: P SET SUBPOOL FOR FREEMAIN TO 252 */ 13562002 SPACE 2 13570002 LPAMOD LA WKREG0,Q252 SET SUBPOOL FOR FREE TO 252 13600002 SPACE 2 13610002 */*FREEMOD: L FREEMAIN-- FREE MODULE */ 13612002 SPACE 2 13620002 FREEMOD EQU * 13625003 LTR CDEMAJR,CDEMAJR TEST LEFT-MOST BIT FOR @ZA09239 13630003 BNM NOTRM RESOURCE MANAGER ENTRY @ZA09239 13635003 L R7,TCBJSTCB IF YES, SET TCBEOTFM @ZA09239 13637003 OI 276(R7),X'80' IN JOB STEP TCB @ZA09239 13640003 NOTRM L ASCBREG,PSAAOLD GET ASCB FOR GETMAIN @ZA09239 13645003 * 13652002 * FREE MODULE BEING DELETED OR WHICH ISSUED EXIT. 13660002 * MODULE LENGTH AND ADDRESS IS OBTAINED FROM THE EXTENT LIST 13670002 * MODULE SUBPOOL IS DETERMAINED FROM CDE ATTRIBUTES 13680002 * 13690002 FREEMAIN RC,LV=(WKREG2),A=(WKREG1),SP=(WKREG0),BRANCH=YES 13700002 * 13800002 L R7,TCBJSTCB GET POINTER TO JSTCB @ZA09239 13800503 TM 276(R7),X'80' TCBEOTFM TURNED ON? @ZA09239 13801003 BZ NOEOTFM NO. LEAVE IT ALONE. @ZA09239 13802003 LTR CDEMAJR,CDEMAJR TURNED ON BY ME? @ZA09239 13803003 BNM NOEOTFM NO. LEAVE IT ALONE @ZA09239 13804003 XI 276(R7),X'80' YES. TURN IT OFF @ZA09239 13805003 NOEOTFM L ASCBREG,PSAAOLD RESTORE REG 7 @ZA09239 13806003 SPACE 2 13810002 */*CDSSNOP: P DSS HOOK */ 13812002 SPACE 2 13820002 CDSSNOP BCR NULL,NULL DSS HOOK AFTER MODULE IS FREED 13850002 * 13900002 SPACE 2 13910002 */*ORDERCDQ: P GET JOB PACK QUEUE HEADER FROM JSTCB */ 13912002 SPACE 2 13920002 ORDERCDQ LA CDEMAJR,0(CDEMAJR) CLEAR HIGH ORDER BYTE @ZA09239 13930003 L WKREG1,TCBJSTCB GET JOB STEP TCB 13940003 LA WKREG1,TCBJPQ-TCB(WKREG1) GET JOB PACK QUEUE POINTER 14000002 SPACE 2 14010002 */* S (FND,,NOTF,GETOUT) CDESRCH:SEARCH JPQ FOR MODULE */ 14012002 SPACE 2 14020002 BAL RETURN,CDESRCH TEST IF CDE IS ON JPQ 14050002 B GETOUT WAS NOT ON JPQ 14150002 SPACE 2 14160002 */* S (,EXITSRCH) REMOVAL:DEQUEUE CDE */ 14162002 SPACE 2 14170002 BAL RETURN,REMOVAL MOD FOUND, GO DEQUEUE IT 14200002 B EXITSRCH GO TO COMMON TERMINATION CODE 14250002 SPACE 2 14260002 */*LPAONLY: P INITIALIZE REGISTERS FOR LPA SERACH */ 14262002 SPACE 2 14270002 LPAONLY DS 0H SEARCHES LPA FOR MODULE 14300002 L CVTREG,CVTPTR INSURE CVT IN PROPER REG. 14560002 L WKREG1,CVTQLPAQ GET LPAQ POINTER 14570002 SPACE 2 14580002 */* S (FND,,NOTF,ERROR) CDESRCH:SEARCH LPA QUEUE FOR MODULE */ 14582002 SPACE 2 14590002 BAL RETURN,CDESRCH SEARCH LPAQ 14600002 B ERROR IS NOT FOUND ON ANY QUEUE 14700002 SPACE 2 14710002 */* S REMOVAL:DEQUEUE CDE */ 14712002 SPACE 2 14720002 BAL RETURN,REMOVAL REMOVE MAJOR AND MINORS FROM QUE 14750002 SPACE 2 14760002 */* P SAVE VOLITAL REGISTERS OVER SETLOCK */ 14762002 SPACE 2 14770002 LR WKREG1,CDEREG SAVE REGISTER OVER SETLOCK 14800002 LR WKREG0,CDEMAJR SAVE MAJOR CDE OVER SETLOCK 14810002 LR WKREG2,SAVEREG SAVE SAVE AREA OVER SETLOCK 14820002 SPACE 2 14830002 */* L SETLOCK-- RELEASE CMS LOCK */ 14832002 SPACE 2 14840002 SETLOCK RELEASE,TYPE=CMS,RELATED=LPAONLY ROUTINE 14850002 SPACE 2 14860002 */* P RESTORE VOLITAL REGISTERS */ 14862002 SPACE 2 14870002 LR CDEREG,WKREG1 RESTORE SAVED REGISTER 14900002 LR CDEMAJR,WKREG0 RESTORE MAJOR CDE POINTER 14910002 LR SAVEREG,WKREG2 RESTORE SAVE AREA POINTER 14920002 SPACE 2 14930002 */*EXITSRCH: P GET EXTENT LIST (XL) */ 14932002 SPACE 2 14940002 EXITSRCH DS 0H FREES EXTENT LIST, CDE 14950002 L WKREG1,CDXLMJP GET EXTENT LIST 15000002 LA WKREG1,0(WKREG1) CLEAR HIGH BYTE IN CASE 15010002 * FETCH SET IT ON 15020002 SPACE 2 15030002 */* D (NO,CDDMLP,YES,) EXTENT LIST EXIST? */ 15032002 SPACE 2 15040002 LTR WKREG1,WKREG1 Q. EXTENT LIST EXIST 15050002 BZ CDDMLP A. NO- DO NOT TRY TO FREE IT 15100002 SPACE 2 15110002 */* P GET LENGTH OF EXTENT LIST AND ASCB ADDRESS FOR FREEMAIN */ 15112002 SPACE 2 15120002 L ASCBREG,PSAAOLD GET ASCB FOR FREEMAIN 15150002 L WKREG0,XTLLNTH-XTLST(WKREG1) GET LENGTH OF EXTENT LIST 15160002 SPACE 2 15170002 */* L FREEMAIN-- FREE EXTENT LIST FROM SP255 */ 15172002 SPACE 2 15180002 FREEMAIN RC,LV=(WKREG0),A=(WKREG1),SP=255,BRANCH=YES 15200002 SPACE 2 15210002 */*CDDMLP: P GET ASCB ADDRESS FOR FREEMAIN */ 15212002 SPACE 2 15220002 CDDMLP L ASCBREG,PSAAOLD GET ASCB FOR FREEMAIN 15250002 SPACE 2 15260002 */*CDDMLP1: P GET ADDRESS OF NEXT CDE TO BE FREED (N+1) */ 15262002 SPACE 2 15270002 CDDMLP1 L WKREG2,CDCHAIN GET NEXT CDE TO BE FREED 15300002 SPACE 2 15310002 */* L FREEMAIN-- FREE CDE FROM SUBPOOL 255 (LSQA) */ 15312002 */* P NOTE: IF REQ'ST FROM SP255 AND ADDR. IS IN SP245, FREE IS 15318802 */* FROM SQA(245) */ 15319202 SPACE 2 15320002 FREEMAIN RU,LV=CDESIZE,A=(CDEMAJR),SP=255,BRANCH=YES 15350002 SPACE 2 15360002 */* D (YES,,NO,GETOUT) ANY MORE CDE'S TO BE FREED? */ 15362002 SPACE 2 15370002 LTR WKREG2,WKREG2 Q. ANY MORE CDE'S 15400002 BZ GETOUT A. NO-FINISH 15450002 SPACE 2 15460002 */* P (,CDDMLP1) GET NEXT CDE TO FREE IN WORK REG */ 15562002 SPACE 2 15570002 LR CDEMAJR,WKREG2 SET UP TO FREE NEXT MINOR 15600002 B CDDMLP1 LOOP 15650002 SPACE 2 15660002 */*GETOUT: P RESET RETURN REGISTER */ 15662002 SPACE 2 15670002 GETOUT LR RETURN,R6 RESTORE RETURN REGISTER 15700002 SPACE 2 15710002 */* R RETURN R14 */ 15712002 SPACE 2 15720002 BR RETURN EXIT 15750002 TITLE ' IEAVLK02 - CKHKEEP SUBROUTINES' 15760002 * NAME - CDESRCH 15770002 * 15780002 * PURPOSE - THIS SUBROUTINE SEARCHES THE JPQ OR LPQ FOR A SPECIFIED 15790002 * CDE. WHEN FOUND, CONTROL IS RETURNED TO R14+4. IF NOT FOUND, 15794002 * CONTROL IS RETURNED TO R14+0. 15796002 * 15798002 * INPUT - R1 = ADDRESS OF QUEUE TO BE SEARCHED 15798402 * R11 = ADDR. OF MAJOR CDE REQUESTED 15798802 * R14 = RETURN ADDRESS (MUST BE BRANCH TABLE) 15799202 * 15799602 * OUTPUT - R2 = CDE REQUESTED 15799702 * R1 = ADDRESS OF PREVIOUS CDE ON QUEUE 15799802 * ALL OTHER REGISTERS REMAIN AS ON ENTRY 15799902 SPACE 2 15810002 */*CDESRCH: E CDESRCH */ 15820002 */* P GET NEXT CDE */ 15830002 SPACE 2 15832002 CDESRCH DS 0H SEARCH CDE QUEUE FOR ADDRESS 15833302 L WKREG2,CDCHAIN-CDENTRY(WKREG1) GET NEXT CDE 15850002 LA WKREG2,N0(WKREG2) CLEAR HIGH BYTE 15860002 SPACE 2 15870002 */* D (YES,%RET1,NO,) DOES THIS CDE = SUBJ CDE? */ 15872002 SPACE 2 15880002 CR WKREG2,CDEMAJR DOES CDE ON QUEUE = SUBJECT CDE 15900002 BC EQUAL,N4(RETURN) YES- RETURN TO CALLER 15950002 SPACE 2 15960002 */* D (YES,%RET2,NO,) END OF QUEUE? */ 15962002 SPACE 2 15970002 LTR WKREG2,WKREG2 Q. IS THIS END OF QUEUE 16000002 BCR EQUAL,RETURN A. YES-RETURN TO CALLER 16050002 SPACE 2 16052002 */* P (,CDESRCH) SET UP LOOP REGISTER */ 16052402 SPACE 2 16054002 LR WKREG1,WKREG2 UP POINTER TO NEXT CDE 16060002 B CDESRCH A. NO- CONTINUE SEARCH 16100002 SPACE 2 16102002 */*%RET1: R RETURN R14 +4 */ 16102402 */*%RET2: R RETURN R14 */ 16102802 SPACE 2 16104002 EJECT 16110002 * NAME - REMOVAL 16120002 * 16130002 * PURPOSE - THIS ROUTINE REMOVES A GIVEN CDE AND ITS MINORS FROM A 16140002 * CDE QUEUE 16144002 * 16146002 * INPUT - R1 = ADDRESS OF THE PREVIOUS CDE TO THE ONE BEING REMOVED 16148002 * R2 = ADDRESS OF THE MAJOR CDE TO BE REMOVED 16148402 * R14 = RETURN ADDRESS 16148802 * 16149202 * OUTPUT - R3 = ADDRESS OF LAST CDE REMOVED FROM QUEUE 16149603 * R2 = 0 16151603 * ALL OTHER REGISTERS ARE UNCHANGED 16160603 SPACE 2 16162603 */*REMOVAL: E REMOVAL */ 16164603 SPACE 2 16166602 REMOVAL DS 0H DEQUEUES CDE MAJOR AND ITS 16183302 * ASSOCIATED MINORS 16200002 SPACE 2 16210002 */* P SAVE CURRENT CDE (R3=R2) */ 16211003 */* P GET NEXT CDE (R2=CDCHAIN(R2)) */ 16212003 SPACE 2 16220002 LR LASTCDER,WKREG2 SAVE CURRENT CDE TO 0 @ZA04838 16227003 * OUT CDCHAIN OF LAST @ZA04838 16234003 * CDE REMOVED @ZA04838 16241003 L WKREG2,CDCHAIN-CDENTRY(WKREG2) BEGIN SEARCH FOR END 16250002 SPACE 2 16260002 */* D (YES,OCNT,NO,) END OF CDE QUEUE? */ 16262002 SPACE 2 16270002 LTR WKREG2,WKREG2 OF MINOR QUEUE 16300002 BZ OCNT GO DEQUEUE 16350002 SPACE 2 16360002 */* D (YES,REMOVAL,NO,) IS CDE A MINOR? */ 16362002 SPACE 2 16370002 TM CDATTR-CDENTRY(WKREG2),CDMIN Q. MINOR ENTRY 16400002 BO REMOVAL A. YES- CONTINUE SEARCH 16450002 SPACE 2 16460002 */*OCNT: P UPDATE THE CDE QUEUE BY REMOVING MAJOR AND ASSOCIATED MINORS 16462002 */* */ 16464002 */* P ZERO CDCHAIN OF LAST CDE REMOVED */ 16467003 SPACE 2 16470002 OCNT ST WKREG2,CDCHAIN-CDENTRY(WKREG1) UPDATE THE QUEUE BY 16500002 * REMOVING MAJOR AND ALL MINORS 16550002 SR WKREG2,WKREG2 ZERO FOWARD POINTER @ZA04838 16560003 ST WKREG2,CDCHAIN-CDENTRY(LASTCDER) OF THE LAST @ZA04838 16570003 * CDE DEQUEUED FOR @ZA04838 16580003 * CDHKEEPI FREEING CDES @ZA04838 16590003 SPACE 2 16600002 */* R RETURN TO CALLER */ 16602002 SPACE 2 16610002 BR RETURN RETURN TO CALLER 16650002 SPACE 5 16652002 */*ERROR: P SAVE REG 13 OVER INTERFACE */ 16654002 SPACE 2 16656002 ERROR DS 0F 16660002 LR WKREG1,SAVEREG SAVE R13 OVER SETLOCK 16660102 SPACE 2 16660202 */* L SETLOCK-- RELEASE CMS LOCK */ 16661902 SPACE 2 16664802 SETLOCK RELEASE,TYPE=CMS,RELATED=LPAONLY ROUTINE 16666502 SPACE 2 16666902 */* P RESTORE REG 13 */ 16667002 SPACE 2 16667302 LR SAVEREG,WKREG1 RESTORE SAVE AREA REGISTER 16668202 SPACE 2 16668602 */* P (,GETOUT) SET RETURN CODE = 4 */ 16668702 SPACE 2 16669002 LA R15,N4 ERROR RETURN CODE 16669902 B GETOUT ***** ERROR ***** 16671602 SPACE 2 16803302 */* FOOTING 16805302 */* 16807302 */* */ 16809302 */*IEAVLK02: END */ 16811302 TITLE ' IEAVLK02 GENERAL MODULE EQUATES AND CONSTANTS' 16813302 AMODENT DC A(MODENT) USED FOR BASE VALUE 16815302 AIEAQCS2 DC V(IEAQCS02) ENTRY TO PGM. MGR. FOR RESTART 16817302 AIEAQCS3 DC V(IEAQCS03) ENTRY TO PGM. MGR. 16822402 FRREXIT DC A(FRRPGMX) RECOVERY ROUTINE ADDRESS 16872402 EJECT 16872503 FRRPLIST DSECT FRR PARM LIST @ZA02733 16872603 FRRPLWD0 DS 0F WORD ZERO @ZA02733 16872803 FRRPLSAV DS F SAVE AREA ADDRESS @ZA02733 16873003 FRRPLWD1 DS 0F WORD ONE @ZA02733 16873203 FRRPLBAS DS F IEAVLK02 BASE ADDRESS @ZA02733 16873403 FRRPLWD2 DS 0F WORD TWO @ZA02733 16873603 FRRPLR11 DS F GR11 SAVE AREA @ZA02733 16873803 FRRPLWD3 DS 0F WORD THREE @ZA02733 16874003 FRRPLR12 DS F GR12 SAVE AREA @ZA02733 16874203 FRRPLWD4 DS 0F WORD FOUR @ZA02733 16874403 FRRPLR13 DS F GR13 SAVE AREA @ZA02733 16874603 FRRPLWD5 DS 0F WORD FIVE @ZA02733 16874803 FRRPLCHK DS 0F PROGRESS CHECK WORD @ZA02733 16875003 FRRPLCK0 DS B EOTCHK CHECK POINT @ZA02733 16875203 FRRPLCK1 DS B RESERVED @ZA02733 16875403 FRRPLCK2 DS B RESERVED @ZA02733 16875603 FRRPLCK3 DS B RESERVED @ZA02733 16875803 TITLE ' IEAVLK02 MAPPING MACROS' 16876502 IHACDE 16880402 CDEEND EQU * 16884302 CDESIZE EQU CDEEND-CDENTRY SIZE OF CDE 16888202 EJECT 16900002 CVT DSECT=YES,PREFIX=NO 16950002 EJECT 17000002 IHAPSA 17050002 EJECT 17100002 IHAFRRS 17110002 EJECT 17148802 IHALLE 17150002 LLEND EQU * 17200002 LLESIZE EQU LLEND-LLE SIZE OF LLE 17250002 EJECT 17300002 IHARB 17310002 ******************************************************************* 17312002 * 17314002 * REQUEST BLOCK ADDITIONAL LABELS INTERNAL 17316002 * 17318402 ****************************************************************** 17318802 ORG RBEXSAVE MAPPED INTO THE RBEXSAVE AREA 17319202 RBCSEXSA EQU * CONTENTS SUPERVISOR USAGE OF 17319602 * RB EXTENDED SAVE AREA FOR 17319702 * REENTRANT DATA AREA 17319802 RBCSNAME DS CL8 ENTRY POINT NAME CALLER PASSED 17319902 RBCSDE DS 0A ADDRESS OF DE SAVE AREA 17323202 DS C BYTE RESERVED 17325202 RBCSDEA DS AL3 3 BYTE ADDRESS 17325602 RBCSERRA DS F ADDRESS OF ERROR ROUTINE 17326002 RBCSFLG1 DS B FLAG BYTE 17326402 RBCSGSF EQU X'80' GOOD SEARCH INDICATOR 17326502 * ON MEANS IEAVVMSR WAS 17326602 * SUCCESSFUL USED ONLY 17329902 * IEAVLK01 17331902 RBCSSYSR EQU X'40' SYSTEM REQUEST FLAG 17332302 RBCSPARM EQU X'20' PARMATER CHECKING IN PROGRESS 17332702 RBCSERIN EQU X'10' ERROR RETURN WAS REQUESTED 17333102 RBCSABEN EQU X'08' ISSUE 906 ABEND 17333202 RBCSA306 EQU X'04' ISSUE 306 ABEND 17333302 RBCSDCB EQU X'02' DCB SPECIFIED ON INPUT 17341602 RBCSFLG2 DS B RESERVED FLAGS 17343602 RBCSFLG3 DS B RESERVED FLAGS 17345602 RBCSFLG4 DS B RESERVED FLAGS 17347602 RBCSWORK DS 0A ADDRESS OF BLDL FETCH W.A. 17350102 DS C RESERVED BYTE 17361202 RBCSWRKA DS AL3 3 BYTE ADDRESS 17371202 RBCSLLE DS 0A ADDRESS OF LLE DURING LOAD 17371602 DS C RESERVED BYTE 17372002 RBCSLLEA DS AL3 3 BYTE ADDRESS 17372102 RBCSFRRA DS F SAVE AREA FOR RECOVERY RTN. 17372202 * PARM LIST 17373102 RBCSGR15 DS F SAVE AREA FOR REGS 15 TO 1 17373502 RBCSGR0 DS F OVER MODESET MACRO 17373902 RBCSGR1 DS F INTERFACE 17374302 RBCSRESV DS 2F RESERVED FOR FUTURE EXPANSION 17374702 EJECT 17375102 IHARMPL 17383402 EJECT 17394502 IKJTCB 17427802 EJECT 17438902 IHAXTLST 17450002 END 17500002