TITLE 'IEAVEEXP-THIS IS THE EXIT PROLOGUE' 00226802 * /* START OF SPECIFICATIONS **** 00276802 * 00326802 *01* MODULE-NAME = IEAVEEXP 00326902 * 00335402 *02* CSECT-NAME = IEAVEXPR 00337402 * 00339802 *01* DESCRIPTIVE-NAME = TYPE 1 EXIT/EXIT PROLOGUE 00340202 * 00341002 *01* COPYRIGHT = NONE 00341102 * 00349102 *01* STATUS = VERSION 1 00350702 * 00351502 *01* FUNCTION = SEE ENTRY POINT PURPOSES BELOW 00351902 * 00352102 *02* OPERATION = EXIT PROLOGUE RECEIVES CONTROL VIA A BRANCH FROM 00354202 * AN EXITING SVC ROUTINE . IF THE SVC EXITING WAS A TYPE 1 SVC, 00356202 * THEN THE EXIT PROLOGUE DISABLES THE PSW, CLEARS THE TYPE 1 00358202 * SWITCH, MOVES REGISTERS 0,1,15 TO THE TCB REGISTER SAVE AREA, 00358302 * FREES ALL OF THE LOCKS CURRENTLY HELD, AND IF THE FORCE 00359302 * DISPATCHER SWITCH WAS SET OR IF THE TASK IS NON DISPATCHABLE 00359702 * OR IF THE STAGE III EXIT EFFECTOR SWITCH IS SET, PASSES 00360102 * CONTROL TO THE DISPATCHER. 00360302 * IF NONE OF THE ABOVE CONDITIONS IS TRUE, THE CURRENT TASK 00360502 * IS REDISPATCHED BY EXIT PROLOGUE. 00360702 * 00360902 * IF THE SVC WAS TYPE 2, 3, OR 4 AND THE RB IS NOT THE LAST RB, 00361340 * THE EXIT PROLOGUE MOVES REGISTERS 0,1,15 TO THE TCB, 00363302 * PERFORMS SVRB EXIT FUNCTIONS (MOVE REGS TO TCB, FREE RB, ETC) 00366402 * AND THEN PERFORMS TYPE 1 EXIT FUNCTIONS AS ABOVE. 00366802 * @Z40FPYK 00367040 * IF THE SVC WAS TYPE 6, EXIT PROLOGUE PERFORMS ONLY @Z40FPYK 00367240 * NORMAL TYPE 1 DISPATCHER FUNCTIONS. @Z40FPYK 00367440 * 00367640 *01* NOTES = SEE ENTRY POINT DESCRIPTIONS BELOW 00367840 * 00368002 *02* DEPENDENCIES = 00369002 * 00378740 * 1. THE LOCK MANAGER HAS AN ENTRY THAT WILL FREE THE LOCAL LOCK 00379240 * THE ENTRY IS MADE DISABLED. 00379440 * 2. THE LOCAL LOCK BIT IN THE HEIRARCHY MASK IS BIT 31 AND 00379640 * NOT OTHER BITS IN THE HEIRARCHY MASK WORD WILL BE SET IF ONLY 00379840 * THE LOCAL LOCK IS HELD. 00380040 * 00380240 * 00390502 *02* RESTRICTIONS = NONE 00401002 * 00403002 *02* REGISTER-CONVENTIONS = SEE EQUATE SECTION OF MODULE 00405002 * 00408002 *02* PATCH-LABEL = NONE(NUCLEUS RESIDENT) 00409002 * 00411002 *01* MODULE-TYPE = PROCEDURE 00412002 * 00414002 *02* PROCESSOR = ASSEMBLER 00417002 * 00418802 *02* MODULE-SIZE = REFERENCE ESD LENGTH IN BEGINNING OF MODULE 00418902 * 00421002 *02* ATTRIBUTES = NUCLEUS , ZERO PROTECT KEY,REFRESHABLE, 00423002 * ADDRSPC=FIXED,SUPERVISOR MODE 00426002 * 00427002 *01* ENTRY-POINT = IEAVEXPR 00428002 * 00429002 *02* PURPOSE = THIS ENTRY ROUTINE PROVIDES THE NORMAL TYPE 1 00431802 * EXITING PROCESS FOR TYPE 1S OR WILL PERFORM NORMAL SVC 3 00433502 * PROCESSING FOR NON-TYPE 1S IF NOT LAST RB ON TCB. IN EITHER 00435102 * CASE ALL LOCKS ARE RELEASED THAT ARE CURRENTLY HELD. 00437102 * THIS ENTRY WILL CAUSE THE TASK TO BE REDISPATCHED IF IT IS 00439102 * DISPATCHABLE AND THE STAGE III EXIT EFFECTOR BIT IS NOT SET. 00441102 * THE FORCE DISPATCHER SWITCH IS RESET ON ENTRY 00442102 * 00444002 *02* LINKAGE = SEE INPUT SECTION BELOW 00444102 * 00446202 *02* INPUT = 00448002 * 00462202 *02* OUTPUT = NONE UNIQUE TO THIS ENTRY 00463202 * 00467502 *01* ENTRY-POINT = IEAVEXP1 00469502 * 00471502 *02* PURPOSE = THIS ENTRY PROVIDES SVC ROUTINES THE ABILITY TO 00473502 * ENTER THE DISPATCHER AFTER PERFORMING EXIT FUNCTIONS 00476402 * REGARDLESS OF THE DISPATCHABILITY OF THE CURRENT TASK. 00476602 * OTHERWISE, THE FUNCTION IS IDENTICAL TO IEAVEXPR. 00478502 * THE FORCE DISPATCHER SWITCH IS SET ON ENTRY. 00480502 * 00482502 *01* ENTRY-POINT = IEAVEXSV 00484502 * 00485502 *02* PURPOSE = THIS ENTRY PROVIDES AN INTERFACE TO THE ESR 00487502 * ROUTINE. CALLERS OF THE CALLDISP SVC DESIRE TO 00489502 * ENTER THE DISPATCHER AFTER PERFORMING EXIT FUNCTIONS 00491502 * REGARDLESS OF THE DISPATCHABILITY OF THE CURRENT TASK. 00493502 * OTHERWISE, THE FUNCTION IS IDENTICAL TO IEAVEXPR. 00494502 * THE FORCE DISPATCHER SWITCH IS SET ON ENTRY. 00496502 * 00498502 *01* ENTRY-POINT = IEAVFRLK 00500502 * 00502502 *02* PURPOSE = THIS ENTRY WILL FREE ALL LOCKS HELD BY THE CPU. IT 00503502 * WILL DO THIS WITH THE DISABLED OPTION THROUGH A SPECIFIED 00505502 * PARAMETER. 00507502 * 00509502 *02* LINKAGE = SEE INPUT SECTION BELOW 00510902 * 00514202 *02* INPUT = 00514902 * 00516340 * 00530102 *02* OUTPUT = NONE UNIQUE TO THIS ENTRY 00531102 * 00532102 *01* ENTRY-POINT = EXPEPAT6 @Z40FPYK 00532240 * @Z40FPYK 00532340 *02* PURPOSE = THIS ENTRY IS FOR TYPE 6 SVC RETURN=CALLER @Z40FPYK 00532440 * OPTION. THIS ENTRY IS SOLELY FOR USE BY THE SVC FLIH @Z40FPYK 00532540 * IEAVESVC. @Z40FPYK 00532640 * @Z40FPYK 00532740 *02* LINKAGE = SEE INPUT SECTION BELOW @Z40FPYK 00532840 * @Z40FPYK 00532940 *02* INPUT = REGISTERS ARE REQUIRED TO BE AS FOLLOWS: @Z40FPYK 00533040 * REGISTERS 0-3 =UNUSED @Z40FPYK 00533140 * REGISTER 4 =TCB ADDRESS @Z40FPYK 00533240 * REGISTERS 5-6 =UNUSED @Z40FPYK 00533340 * REGISTER 7 =ASCB ADDRESS @Z40FPYK 00533440 * REGISTERS 9-13=UNUSED @Z40FPYK 00533540 * REGISTER 14 =EPA OF EXIT PROGLOGUE @Z40FPYK 00533640 * REGISTER 15 =UNUSED @Z40FPYK 00533740 * @Z40FPYK 00533840 *02* OUTPUT = NONE UNIQUE TO THIS ENTRY @Z40FPYK 00533940 * @Z40FPYK 00534040 *01* EXIT-NORMAL = IEA0DS 00534402 * 00536702 *02* CONDITIONS = THE TYPE 1 SVC WAS EXITING OR EXIT PROCESSING 00538702 * COMPLETE FOR OTHER SVC TYPES AND ALL NECESSARY 00541202 * CLEAN UP HAS BEEN PERFORMED. EXIT IS TO THE DISPATCHER IF 00541502 * THE FORCE DISPATCHER SWITCH IS SET OR IF THE CURRENT TASK 00543202 * IS NON DISPATCHABLE OR THE STAGE III EXIT EFFECTOR SWITCH IS 00545702 * SET. 00546202 * 00546702 *02* OUTPUT = 00549302 * 00556802 *02* RETURN-CODES = NONE 00557802 * 00560402 *01* EXIT-NORMAL = SVC 3 00561402 * 00564002 *02* CONDITIONS = TO COMPLETE EXITING PROCESSING FOR A NON-TYPE1 00574802 * SVC ROUTINE AND RB IS LAST IN RB CHAIN 00575802 * 00578402 *02* OUTPUT = 00579402 * OUTPUT DATA-NONE 00582002 * OUTPUT REGISTERS-0,1,15 AS PASSED TO EXIT PROLOGUE 00583002 * 00586602 *02* RETURN-CODES = NONE 00587602 * 00588602 *01* EXIT-NORMAL = REDISPATCH CURRENT TASK (SVC CALLER) 00589602 * 00590602 *02* CONDITIONS = SVC ROUTINE HAS COMPLETED EXIT FUNCTIONS 00591602 * (ANY TYPE SVC) AND THE TASK IS DISPATCHABLE 00592802 * AND THE FORCE ENTRY SWITCH IS OFF. 00596402 * 00597402 *02* OUTPUT = 00600002 * OUTPUT DATA = NONE 00600502 * OUTPUT REGISTERS = 0,1,AND 15 AS PASSED TO EXIT PROLOGUE; 00601002 * 2-14 AS IN SVRB FOR 2,3,4 SVCS; AS IN 00601502 * TCB FOR TYPE 1-S. 00602002 * OUTPUT ENVIRONMENT = UNLOCKED, PSW AS IN TOP RB (RBOPSW) 00602302 * 00602602 *01* EXIT-NORMAL = RETURN TO CALLER 00603002 * 00603502 *02* CONDITIONS = IEAVFRLK HAS BEEN ENTERED TO RELEASE ALL LOCKS 00604002 * HELD 00606002 * 00608002 *02* OUTPUT = 00609002 * 00618002 *02* RETURN-CODES = NONE 00620002 * 00621002 *01* EXIT-ERROR = ABEND 0F9 REGISTER 15=4 FOR INVALID SVRB @Z40FPYK 00623040 * 00625002 *01* EXTERNAL-REFERENCES = SEE ROUTINES,DATA AREAS,CONTROL-BLOCKS 00626002 * BELOW 00628002 * 00631002 *02* ROUTINES = 00632002 * LRELEXPR (SETLOCK BRANCH ENTRY TO RELEASE LOCAL LOCK) 00640002 * IEAVESS (STATUS STOP SYNCH ENTRY) 00642002 * FREECELL (FREE SVRB SPACE) 00643002 * FREEMAIN (FREE SVRB SPACE) 00645002 * SCBPURGE (FREE STAE CONTROL BLOCK) 00648002 * GTF (HOOK IEADISP4 FOR EXIT PROLOGUE RE-DISP TASK) 00648302 * TRDISP (TRACE DISPATCH TASK ENTRY) 00648602 * 00649002 *02* DATA-AREAS = INCLUDED IN CONTROL-BLOCKS BELOW 00650002 * PLUS SAVE AREA FROM EXIT IGC003-IEAVEOR 00651002 * 00652002 *02* CONTROL-BLOCKS = 00654002 * 00665002 *01* TABLES = NONE 00666002 * 00667002 *01* MACROS = 00669002 * 00672040 * 00673040 * SETFRR 00675002 * 00676002 *01* CHANGE-ACTIVITY = Y02715,Y02751,Y02752,Z40FPYK 00677040 * 00679002 *01* MESSAGES = NONE 00682002 * 00683002 *01* ABEND-CODES = 0F9 WITH REGISTER 15=4 @Z40FPYK 00684040 * 00685002 **** END OF SPECIFICATIONS ***/ 00686002 IEAVEEXP CSECT 00687002 MODID BR=NO 00688002 SPACE 2 00689002 */*IEAVEEXP: CHART EXIT PROLOG */ 00690002 */* HEADER 00691002 */* 00692002 */* 00693002 */* 00694002 */* SECTION 3.1.8.4 00695002 */* TYPE 1 EXIT/EXIT PROLOG 00696002 */* PAGE # */ 00697002 SPACE 2 00698002 ENTRY IEAVEXPR 00699002 ENTRY IEAVEXP1 00700002 * REGISTER EQUATES 00701002 SWTREG EQU 10 REGISTER FOR ENTRY SWITCH 00702002 BASEREG EQU 9 BASE REGISTER 00703002 EPREG EQU 14 ENTRY POINT ADDRESS 00704002 XTCBREG EQU 4 TCB BASE REGISTER 00705002 ASCBREG EQU 7 ASCB ADDRESS REG 00706002 JRBREG EQU 5 RB ADDR REG 00707002 XCVTR EQU 3 CVT ADDR REG 00708002 DISPRTN EQU 15 DISPATCHER ENTRY REG 00709002 CCABASE EQU 11 LCAA BASE REG 00710002 R2 EQU 2 REGISTER REFERENCE 00711002 R10 EQU 10 REGISTER REFERENCE 00712002 R0 EQU 0 REGISTER REFERENCE 00713002 R1 EQU 1 REGISTER REFERENCE 00714002 R11 EQU 11 REGISTER REFERENCE 00715002 R13 EQU 13 REGISTER REFERENCE 00716002 R15 EQU 15 REGISTER REFERENCE 00717002 WORKREG1 EQU 11 ALL PURPOSE REGISTER 00718002 DISREG EQU 1 DISABLED INDICATOR 00719002 RETREG EQU 14 RETURN ADDRESS 00720002 EPREG2 EQU 15 FREE LOCK ROUTINE ENTRY POINT 00721002 RETURNRG EQU 14 RETURN ADDRESS FROM FREE LOCK 00750002 * ROUTINE @Z40FPYK 00760040 R12 EQU 12 REGISTER 12 @Z40FPYK 00770040 R14 EQU 14 REGISTER 14 @Z40FPYK 00780040 TEMPREG EQU 0 SAVED RETURN ADDRESS REGISTER 00850002 * CONSTANT EQUATES 00900002 C0 EQU 0 CONSTANT VALUE 00950002 C8 EQU 8 CONSTANT 00970002 C1 EQU 1 CONSTANT 00980002 C4 EQU 4 CONSTANT 00990002 REGL214 EQU 52 LENGTH OF BYTES FOR REGS 2-14 00992002 M15 EQU 15 MASK VALUE 01000002 CXFF EQU X'FF' CONSTANT VALUE 01050002 DSTRACEM EQU X'FA' TRACE ENABLED FLAG 01060002 ENABLE EQU X'03' ENABLE MASK 01100002 EXIT EQU 3 SVC 3 EXIT 01150002 M4 EQU 4 MASK VALUE 01200002 LKINDEX1 EQU 600 OFFSET INTO LOCK INT. TABLE 01210002 LKINDEX2 EQU 612 OFFSET INTO LOCK INT. TABLE 01220002 ABENDCND EQU 4 CONDITION CODE FOR 0F9 @Z40FPYK 01220140 * INVALID SVRB ABEND @Z40FPYK 01220240 BADINPUT EQU X'0F9' INVALID SVRB ABEND CODE @Z40FPYK 01220340 EJECT 01220740 ENTRY IEAVEXSV SVC CALLDISP ENTRY 01220802 */*IEAVEXSV: E FORCE DISPATCHER SVC ENTRY*/ 01221202 IEAVEXSV DS 0H CALLDISP SVC ENTRY LABEL 01221602 */*IEAVEXP1: E FORCE DISP ENTRY */ 01222002 IEAVEXP1 DS 0H TESTLABEL 01224002 SPACE 2 01230002 */* P ESTABLISH ADDRESSABILITY */ 01232002 SPACE 2 01246702 USING PSA,0 01250002 BALR BASEREG,C0 GET ENTRY POINT ADDRESS 01300002 USING *,BASEREG 01350002 L BASEREG,ADREXPR GET ADDRESS OF NORM ENTRY+2 01352002 USING IEAVEXPR+2,BASEREG 01352102 SPACE 2 01352402 */* P (,NRMPRO) SET FORCE DISPATCHER SWITCH*/ 01352802 SPACE 2 01353202 L SWTREG,SWFORCE SET FORCE ENTRY SWITCH 01354002 B NRMPRO ENTER MAINLINE CODE 01356002 SPACE 2 01358002 */*IEAVEXPR: E NORMAL PROLOGUE ENTRY*/ 01358402 IEAVEXPR DS 0H TESTLABEL 01360002 SPACE 2 01370002 */* P ESTABLISH ADDRESSABILITY */ 01380002 SPACE 2 01390002 USING PSA,0 01392002 BALR BASEREG,C0 GET ENTRY POINT ADDRESS 01394002 USING IEAVEXPR+2,BASEREG 01396002 */* P RESET FORCE DISPATCHER SWITCH */ 01396402 SLR SWTREG,SWTREG SET REG TO ZERO FOR SWIT 01396802 */*NRMPRO: P ESTAB TCB,RB,ASCB ADDR, SAVE CALLER R15-1 IN TCB */ 01398002 NRMPRO L XTCBREG,PSATOLD GET ADDR OF CURRENT TCB 01398102 USING TCB,XTCBREG 01398202 QJ71 L ASCBREG,PSAAOLD GET ADDR OF CURRENT ASCB 01408602 USING ASCB,ASCBREG 01418602 ST R0,TCBGRS0 SAVE 0 IN TCB 01419102 ST R1,TCBGRS1 SAVE REG 1 FOR USER 01429102 ST R15,TCBGRS15 SAVE 15 IN TCB 01429402 SPACE 2 01460002 */* P RESET NON PREEMPTIBLE TCB BITS */ @Z40FPYK 01470040 SPACE 2 @Z40FPYK 01480040 NI TCBFLGS1,CXFF-TCBNONPR RESET NP TCB CONDITION @Z40FPYK 01490040 SPACE 2 @Z40FPYK 01500040 */* D (NO,TISTY234,YES,) LOCAL LOCK HELD */ 01510002 SPACE 2 01520002 QJ6 SETLOCK TEST,TYPE=LOCAL,BRANCH=(NOTHELD,TISTY234) 01560002 SPACE 2 01570002 */*TYP1TEST: D (YES,,NO,TY234) TYPE 1 SVC EXITING */ 01580002 SPACE 2 01590002 TYP1TEST TM ASCBFLG1,ASCBTYP1 TEST ASCB FOR TYP1 FLAG 01600002 BZ TY234 BR IF NOT TYP1 SVC 01602002 SPACE 2 01604002 */*GOTYP1: P DISABLE */ 01606002 SPACE 2 01608002 GOTYP1 L CCABASE,PSALCCAV GET LCCA VIRTUAL ADDRESS 01608402 USING LCCA,CCABASE 01608802 QJ10 STNSM LCCAPSMK,CXFF-ENABLE DISABLE PSW 01609202 SPACE 2 01609602 */* P RESET TYPE 1 SWITCH */ 01609702 SPACE 2 01609802 NI ASCBFLG1,CXFF-ASCBTYP1 CLEAR TYPE 1 SWIT 01609902 SPACE 2 01613202 */* D (YES,,NO,GORELALL) IS LOCAL LOCK THE ONLY LOCK HELD*/ 01613402 SPACE 2 01613602 * 01613702 * THE HEIRARCHY MASK IS EQUAL F'1' IF ONLY THE LOCAL 01615402 * LOCK IS HELD. 01615602 * 01616602 L R13,PSAHLHI GET HEIRARCHY MASK @YM03564 01617602 BCT R13,GORELALL BRANCH IF MORE THAN LOCA@YM03564 01618602 SPACE 2 01620202 */* S LRELEXPR:DISABLED ENTRY TO RELEASE LOCAL LOCK */ @Z40FPYK 01622240 * THIS IS A SPECIAL LOCK MANAGER DISABLED ENTRY FOR 01623202 * EXIT PROLOGUE. EXIT PROL SETS UP THE BASE FOR THE 01624202 * LOCK MANAGER AND BALR ON REG 11 WITH RET IN 14. 01625202 SPACE 2 01626202 L R13,LLBASE SET BASE FOR LOCK RTN @YM03564 01627202 L R11,LLSENTY SPECIAL ENTRY ADDR @YM03564 01628202 BALR RETREG,R11 LINK THERE @YM03564 01629202 SPACE 2 01630202 */*ALGON: D (YES,GODISP,NO,) FORCE DISPATCHER SWITCH SET */ 01638702 SPACE 2 01643602 ALGON LTR SWTREG,SWTREG TEST SWITCH REG 01643902 BM GODISP GO TO DISPATCHER ENTRY 01647502 SPACE 2 01647802 */*STG3TEST: D (YES,GODISP,NO,) IS STAGE 3 BIT SET IN ASCB ?*/ @Z40FPYK 01648140 * 01648402 * CAN NOT RELY ON INDIVIDUAL SVC ROUTINES TO GET @Z40FPYK 01648740 * TO THE DISPATCHER TO GET IRBS EXECUTED. 01649002 * 01649302 STG3TEST DS 0H @Z40FPYK 01649440 TM ASCBFLG1,ASCBS3S STAGE III BIT ON @YM03356 01649602 BO GODISP YES, GO TO THE DISP @YM03356 01649902 SPACE 2 01650502 */* D (YES,,NO,GODISP) IS TASK DISPATCHABLE */ 01655102 */* N DISPATACHABLE MEANS PRIM. DISP BITS=0 AND RBWCF =0*/ 01657902 SPACE 2 01664002 SLR WORKREG1,WORKREG1 CLEAR FOR TEST 01666002 CH WORKREG1,TCBFLGS4 TEST FOR ANY BITS ON 01668002 BNZ GODISP TO DISP IF ANY PRIM BITS ON 01671002 L JRBREG,TCBRBP GET TOP RB POINTER 01674002 USING RBSECT,JRBREG 01678802 CLI RBWCF,C0 TEST WAIT COUNT FOR ZERO 01681202 BNE GODISP GO TO DISP IF NOT ZERO 01684802 SPACE 2 01688002 */* P SET UP TO REDISPATCH THIS TASK */ 01692002 SPACE 2 01698002 * 01698502 * THINGS THAT EXIT PROLOGUE DOES THAT THE DISP DOES: 01702602 * - MOVE PSW TO LO CORE 01705002 * - TRACE IF ACTIVE 01711602 * - ISSUE HOOK FOR GTF 01712202 * - SET UP FRR STACK 01716602 * - RELOAD GEN PURP REGS 01718702 * - LPSW 01722302 * 01728602 SPACE 2 01729102 */* P MOVE RBOPSW TO LO CORE */ 01732102 SPACE 2 01736102 QJ15 MVC PSAPSWSV(C8),RBOPSW SET LOW CORE PSW IMAGE 01740502 SPACE 2 01743902 */* D (NO,NOTRCE,YES,) TRACE ACTIVE */ 01746902 SPACE 2 01749902 QJ16 L XCVTR,FLCCVT GET CVT ADDRESS 01752902 USING CVT,XCVTR 01755902 CLI CVTTRACE+C1,DSTRACEM IS TRACE ACTIVE 01761902 BNE NOTRCE NO, BYPASS TRACE 01764902 SPACE 2 01767902 */* S TRDISP: TRACE TCB ACTIVITY */ 01770902 SPACE 2 01773902 L R10,DSTRDISP TCB TRACE ENTRY POINT 01776902 L R0,TCBGRS0 GET REG 0 @Z40FPYK 01779940 L R1,TCBGRS1 GET REG 1 @Z40FPYK 01781940 L R15,TCBGRS15 GET REG 15 01785902 Q13 BALR R11,R10 GO TO TRACE OR BR 11 RETURN 01788902 SPACE 2 01793202 */*NOTRCE: S IEADISP4: GTF INTERFACE */ 01796202 * 01799202 */* N USE SPECIAL EXIT PROLOGUE GTF HOOK TO DIFFER. FROM DISP HOOKS*/ 01802202 * 01805202 SPACE 2 01808202 NOTRCE DS 0H TESTING LABEL 01811202 HOOK EID=IEADISP4,TYPE=P TO GTF VIA HOOK 01814202 SPACE 2 01817202 */* P PURGE OLD NORMAL FRR STACK */ 01820202 SPACE 2 01823202 QJ14 SETFRR F,WRKREGS=(R1,R2) FLUSH NORM STACK 01826202 SPACE 2 01829202 */* P RELOAD THE GENERAL PURPOSE REGISTERS */ 01832202 SPACE 2 01835202 LM R0,R15,TCBGRS RELOAD G.P. REGS 01838202 SPACE 2 01841202 */* R LOAD TASKS PSW AND RET TO CALLER */ 01844202 SPACE 2 01847202 Q13Z DS 0H TEST LABEL 01850202 LPSW PSAPSWSV LOAD PSW TO RETURN TO SVC CALLER 01853202 EJECT @Z40FPYK 01856240 */*GORELALL: S (,ALGON) SETLOCK: RELEASE ALL LOCKS DISABLED */ 01859202 SPACE 2 01862202 GORELALL SETLOCK RELEASE,TYPE=ALL,DISABLED,RELATED=(QJ1,'LOCK MAY HAVE *01865202 BEEN OBTAINED BY SVC ROUTINE OR BY SVC FLIH') 01868202 B ALGON BACK TO MAINLINE @YM03564 01871202 SPACE 2 01874202 */*GODISP: R RETURN TO DISPATCHER */ 01877202 SPACE 2 01880202 GODISP L DISPRTN,AIEA0DS GET DISPATCHER ADDRESS 01883202 BR DISPRTN RETURN TO DISPATCHER 01886202 EJECT 01889202 */*TISTY234: S SETLOCK: RELEASE ALL LOCKS NOW HELD*/ 01892202 SPACE 2 01895202 TISTY234 SETLOCK RELEASE,TYPE=SPIN,RELATED=('SVC ROUTINE HAS OBTAINED Lx01898240 OCKS') @Z40FPYK 01900240 SPACE 2 01904202 */* S SETLOCK: OBTAIN LOCAL LOCK */ 01907202 SPACE 2 01910202 QJ1 SETLOCK OBTAIN,TYPE=LOCAL,MODE=UNCOND,RELATED=(QJ9,'RELEASED I*01913202 N TYPE 1 EXIT PROLOGUE') 01916202 SPACE 2 01919202 */*TY234: P SET TYPE ONE SWITCH */ 01922202 SPACE 2 01925202 TY234 OI ASCBFLG1,ASCBTYP1 SETTYPE ONE SWITCH 01928202 SPACE 2 01931202 */* D (YES,GOTOSVC3,NO,) IS THIS THE LAST RB ON CHAIN */ 01934202 SPACE 2 01937202 USING RBSECT,JRBREG 01940202 L JRBREG,TCBRBP GET ADDR OF TOP RB 01943202 TM RBSTAB2,RBTCBNXT TEST IF THIS IS THE LAST ONE 01946202 BO GOTOSVC3 GO TO ISSUE SVC3 IF LAST 01949202 SPACE 2 01952202 */* P SET UP ENVIRONMENTAL REGS */ 01955202 SPACE 2 01958202 L XCVTR,FLCCVT GET ADDR OF CVT 01961202 USING CVT,XCVTR 01964202 SPACE 2 01967202 */* N COMPLETE BARRED STOPS IF PERMITTED */ 01970202 */* D (NO,,YES,CKRBWAIT) ANY OTHER RBATTN SET */ 01973202 SPACE 2 01976202 DROP JRBREG 01979202 LR WORKREG1,JRBREG SET REG 01982202 USING RBSECT,WORKREG1 01985202 CKMRB L WORKREG1,RBLINK GET ADDR OF NEXT IN CHAIN 01988202 TM RBSTAB2,RBATTN TEST FOR ATTN SET 01991202 BO CKRBWAIT BR IF STOPS STILL BARRED 01994202 TM RBSTAB2,RBTCBNXT TEST IF AT LAST RB 01997202 BZ CKMRB BR IF NOT TO GET NEXT BR PTR 02000202 DROP WORKREG1 02003202 USING RBSECT,JRBREG 02006202 */* P RESET TCBATT, PERMIT STOPS AND ATTNS*/ 02009202 SPACE 2 02012202 NI TCBTSFLG,CXFF-TCBATT RESET ATTN BIT TO PERMIT STOPS 02015202 SPACE 2 02018202 */*CKSTPP: D (YES,,NO,CKRBWAIT) ANY STOPS PENDING */ 02021202 SPACE 2 02024202 CKSTPP TM TCBTSFLG,TCBSTPPR CHECK FOR STOPS PENDING 02027202 BZ CKRBWAIT BR IF NONE PENDING 02030202 SPACE 2 02033202 */* P RESET STOP PENDING, MAKE TCB NON-DISP BY STOP*/ 02036202 SPACE 2 02039202 NI TCBTSFLG,CXFF-TCBSTPPR RESET STOP PENDING BIT 02042202 OI TCBNDSP2,TCBSTPP SET SECONDARY BIT TO SAY STOP 02045202 OI TCBFLGS5,TCBPNDSP SET PRIMARY BIT 02048202 SPACE 2 02051202 */* S IEAVESSS: STATUS ENTRY FOR STOP SYNCH */ 02054202 SPACE 2 02057202 L R15,AIEAVESS GET STATUS ENTRY ADDR 02060202 QJ72 BALR RETREG,R15 LINK TO STATUS 02063202 B DECRTCBC GO TO DECR READY TCB COUNT 02066202 SPACE 2 02069202 */*CKRBWAIT: D (YES,,NO,RBDQUE) IS NEXT RB WAITING */ 02072202 SPACE 2 02075202 CKRBWAIT L WORKREG1,RBLINK GET POINTER TO NEXT RB IN CHAIN 02078202 DROP JRBREG 02081202 USING RBSECT,WORKREG1 02084202 CLI RBWCF,C0 IS IT ZERO,IE NOT WAITING 02087202 BZ RBDQUE BR IF NOT WAITING 02090202 DROP WORKREG1 02093202 USING RBSECT,JRBREG 02096202 SPACE 2 02099202 */*DECRTCBC: P DECRMENT COUNT OF READY TCBS IN MEMORY*/ 02102202 SPACE 2 02105202 DECRTCBC L R0,ASCBTCBS GET PRESENT COUNT OF READY TCBS 02108202 DECRTCB0 LR R1,R0 SET TO DECR 02111202 BCTR R1,C0 DECR BY ONE 02114202 QJ2 CS R0,R1,ASCBTCBS CS NEW COUNT 02117202 BNE DECRTCB0 BR TO TRY AGAIN IF DIDNT MAKE IT 02120202 L WORKREG1,RBLINK GET POINTER TO NEXT RB IN CHAIN 02123202 SPACE 2 02126202 */*RBDQUE: P DEQUEUE RB FROM CHAIN */ 02129200 SPACE 2 02132202 RBDQUE ST WORKREG1,TCBRBP SET AS TOP RB ON TCB CHAIN 02135202 */* D (YES,,NO,CKDYN) STAE ISSUED */ 02141202 SPACE 2 02144202 LA R0,RBPRFLNA SET PREFIX CONSTANT 02147202 LR R1,JRBREG SET RB ADDRESS IN R1 02150202 SLR R1,R0 SUBTRACT SIZE OF PREFIX 02153202 TM RBFLAGS1-RBPRFXST(R1),RBSCB CHECK FOR STAE ISSSUED 02156202 BZ CKDYN BRANCH IF NOT 02159202 SPACE 2 02162202 */* S SCBPURGE: PURGE STAE CONTROL BLOCK */ 02165202 SPACE 2 02166240 */* N EXIT PROLOGUE USES EXIT (IGC003) SAVE AREA */ 02168202 SPACE 2 02171202 L R13,ASCBASXB GET ADDR OF ASXB 02174202 L R13,ASXBSPSA-ASXB(,R13) ADDR OF SPSA 02177202 L R13,WSALEXIT-WSAL(,R13) ADDR OF EXIT SAVE AREA 02180202 LR R0,JRBREG SET ADDR OF RB FOR PURGE 02183202 SLR R1,R1 INDICATE NOT XCTL 02186202 L R15,CVTSCBP GET SCBPURGE ENTRY 02189202 QJ73 BALR RETREG,R15 LINK TO PURGE 02192202 EJECT @Z40FPYK 02195240 */*CKDYN: P MOVE REGS 2-14 TO TCB FROM EXITING RB*/ 02216202 SPACE 2 02219202 CKDYN DS 0H 02220240 MVC TCBGRS2(REGL214),RBGRS2 SET TCBREGS AS IN RB SAVE 02222240 SPACE 2 02222740 */* D (YES,,NO,ENDRB) IS RB DYNAMIC; RBFDYN=1 ? */ @ZA09499 02222900 SPACE 2 02224240 USING RBPRFXST,JRBREG @Z40FPYK 02225240 S JRBREG,PRESIZE ALIGN TO START OF SVRB @ZM41810 02226240 TM RBSTAB2,RBFDYN DETERMINE IF RB FREEABLE@Z40FPYK 02227240 BZ ENDRB BRANCH IF NOT @ZA09499 02227700 SPACE 2 02229240 */* D (YES,FREEMSVB,NO,) PGM MGR SVRB ? */ @Z40FPYK 02230240 SPACE 2 02231240 TM RBCDFLGS,RBNOCELL PGM MGR SVRB ? @Z40FPYK 02232240 BO FREEMSVB YES, FREEMAIN THE SVRB @Z40FPYK 02233240 SPACE 2 02240202 */* P SET CONDITIONS IN ORDER TO VALIDITY CHECK SVRB */ @Z40FPYK 02243240 SPACE 2 02246202 L R12,VALSVRB PICK UP SVRB ID @Z40FPYK 02246340 SPACE 2 @Z40FPYK 02246440 */* P ALIGN SVRB TO ID FIELD */ @Z40FPYK 02246540 SPACE 2 @Z40FPYK 02246640 S JRBREG,PREFSIZE ALIGN SVRB TO THE ID @Z40FPYK 02246740 * FIELD FOR VALIDITY @Z40FPYK 02258840 * CHECK @Z40FPYK 02259440 DROP JRBREG @ZM41810 02259740 USING MBCB,JRBREG @Z40FPYK 02260040 SPACE 2 @Z40FPYK 02260640 */* D (YES,,NO,ABEND) IS THE SVRB FROM SVRB POOL ? */ @Z40FPYK 02260940 SPACE 2 @Z40FPYK 02261840 C R12,MBCBID SVRB FROM SVRB POOL ? @Z40FPYK 02262440 BNE ABEND NO, ABEND @Z40FPYK 02262740 SPACE 2 @Z40FPYK 02263640 */* P SET UP FOR CHAINING PROCESS */ @Z40FPYK 02264240 SPACE 2 @Z40FPYK 02264840 L R12,ASCBSVRB GET NEXT SVRB IN CHAIN @Z40FPYK 02265440 L R13,ASCBSYNC SYNCHRONIZATION COUNTER @Z40FPYK 02266040 SPACE 2 @Z40FPYK 02266640 */*FREESVRB: P CHAIN BACKWARD SVRB TO POOL */ @Z40FPYK 02267240 SPACE 2 @Z40FPYK 02267840 FREESVRB DS 0H @Z40FPYK 02268440 ST R12,MBCBLINK CHAIN CURRENT SVRB'S TO @Z40FPYK 02269040 * THIS POOL @Z40FPYK 02269640 SPACE 2 @Z40FPYK 02270240 */* P BUMP SYNCHRONIZATION COUNT */ @Z40FPYK 02270840 SPACE 2 @Z40FPYK 02271440 LA R15,C1(R13) BUMP SYNCHRONIZATION @Z40FPYK 02272040 * COUNTER FOR MP SYSTEMS @Z40FPYK 02272640 SPACE 2 @Z40FPYK 02273240 */* P FREE THE RETURNING SVRB */ @Z40FPYK 02273840 SPACE 2 @Z40FPYK 02274440 LR R14,JRBREG FREE RETURNING RB @Z40FPYK 02275040 SPACE 2 @Z40FPYK 02275640 */* D (YES,GOTYP1,NO,FREESVRB) UPDATE SVRB POOL ? */ @Z40FPYK 02276240 SPACE 2 @Z40FPYK 02276840 CDS R12,R14,ASCBSUPC UPDATE THE SVRB POOL @Z40FPYK 02277440 BE GOTYP1 OK -- YES, PROCESS AS @Z40FPYK 02278040 * A TYPE 1 SVC--SVRB IS @Z40FPYK 02278640 * NOW RETURNED TO POOL @Z40FPYK 02279240 B FREESVRB POOL WAS UPDATED BY @Z40FPYK 02279840 * ANOTHER CPU, TRY @Z40FPYK 02280440 * AGAIN TO RETURN THE @Z40FPYK 02281040 * SVRB TO THE POOL @Z40FPYK 02281640 EJECT @Z40FPYK 02282240 */*FREEMSVB: S (,GOTYP1) FREEMAIN:FREE SVRB */ @Z40FPYK 02294040 SPACE 2 @Z40FPYK 02294640 CNOP 0,8 @Z40FPYK 02295640 FREEMSVB DS 0H @Z40FPYK 02295840 DROP JRBREG @ZM41810 02295940 USING RBPRFXST,JRBREG @ZM41810 02296040 LH R0,RBSIZE GET SIZE OF RB @Z40FPYK 02296240 SLL R0,3 DWORDS TIMES 8 = BYTES @Z40FPYK 02296440 FREEMAIN RC,LV=(0),A=(JRBREG),SP=255,BRANCH=YES @Z40FPYK 02296640 B GOTYP1 BACK TO MAINLINE @Z40FPYK 02296840 SPACE 2 02296900 */*ENDRB: P (,GOTYP1) INDICATE RB COMPLETE; RBFACTV = 0 */ 02297000 SPACE 2 02297200 ENDRB DS 0H @ZA09499 02297400 NI RBSTAB2,CXFF-RBFACTV MARK RB INACTIVE @ZA09499 02297500 B GOTYP1 GOTO DISPATCH TASK @ZA09499 02297600 EJECT @Z40FPYK 02297800 */*ABEND: P SET UP ABEND CODE 0F9 - R15 = 4 */ @Z40FPYK 02298000 SPACE 2 @Z40FPYK 02298100 ABEND DS 0H @Z40FPYK 02298300 LA R1,BADINPUT SET UP ABEND CODE @Z40FPYK 02298400 LA R15,ABENDCND SET UP ABEND CONDITION @Z40FPYK 02299400 SPACE 2 @Z40FPYK 02299500 */* R ABEND 0F9 - R15=4 */ @Z40FPYK 02299600 SPACE 2 @Z40FPYK 02299700 ABEND (1),DUMP,,SYSTEM ABEND CALLER -- INVALID @Z40FPYK 02299800 * SVRB GIVEN AS INPUT @Z40FPYK 02299900 EJECT @Z40FPYK 02300040 */*GOTOSVC3: P RESET TYPE 1 SWIT, SAVE REGS 15-1 */ 02300202 SPACE 2 @Z40FPYK 02300940 DROP JRBREG @Z40FPYK 02301640 USING RBSECT,JRBREG @Z40FPYK 02302340 GOTOSVC3 ST R0,RBGRSAVE SAVE REGISTER 0 @YM02939 02303240 ST R1,RBGRSAVE+C4 SAVE REGISTER 1 @Z40FPYK 02304240 ST R15,RBGRS15 SAVE 15 @YM02039 02306202 SPACE 2 02309202 NI ASCBFLG1,CXFF-ASCBTYP1 RESET TYPE 1 SWITCH 02312202 SPACE 2 02315202 */* S IEAVFRLK: RELEASE ALL LOCKS ENABLED*/ 02318202 SPACE 2 02321202 SLR DISREG,DISREG CLEAR TO SAY ENABLED 02324202 LA EPREG2,IEAVFRLK SET ADDR OF FREELOACK ROUTINE 02327202 BALR RETREG,EPREG2 LINK TO FREE LOCKS 02330202 SPACE 2 02333202 */* P RESTORE REGS 15-1 */ 02336202 SPACE 2 02412002 L R15,RBGRS15 GET SAVED REG 15 @YM02039 02416002 L R0,RBGRSAVE GET SAVED REGISTERS @YM02039 02420040 L R1,RBGRSAVE+C4 ZERO AND ONE @Z40FPYK 02421040 SPACE 2 02423002 */* R ISSUE SVC 3 TO COMPLETE EXIT PROCESSING */ 02426002 SPACE 2 02429002 QJEXIT SVC EXIT GO TO IGC003 THROUGH SVC 02432002 EJECT 02435002 */*IEAVFRLK: E ENTRY IEAVFRLK */ 02438002 SPACE 2 02441002 ENTRY IEAVFRLK 02450002 IEAVFRLK DS 0H 02500002 SPACE 2 02502002 */* P ESTABLISH ADDRESSABILITY */ 02502402 SPACE 2 02504002 DROP BASEREG 02510002 USING *,EPREG2 ESTABLISH ADDRESSABILITY 02550002 SPACE 2 02552002 */* P SAVE RETURN REG */ 02552102 LR TEMPREG,RETREG SAVE RETURN 02552202 */* D (YES,,NO,RELENB) ENABLED FREELOCK */ 02554002 LTR DISREG,DISREG TEST FOR ZERO 02561802 BNZ RELENB BR IF DISABLED RELEASE 02563802 */* S SETLOCK: RELEASE ALL LOCKS ENABLED */ 02565802 QJZ4 SETLOCK RELEASE,TYPE=ALL,RELATED=('ROUTINE CALLER HAS GOTTEN L*02567802 OCKS') 02569802 */*RETR: R RETURN TO CALLER */ 02570202 RETR LR RETREG,TEMPREG RESET RETURN REG 02570602 BR RETREG RETURN 02571002 */* 02571402 */*RELENB: S (,RETR) SETLOCK: RELEASE ALL LOCKS DISABLED */ 02576502 RELENB SETLOCK RELEASE,TYPE=ALL,DISABLED,RELATED=('ROUTINE CALLER HAS*02586502 GOTTEN LOCKS') 02587502 LR RETREG,TEMPREG SET RETURN REG 02589902 BR RETREG RETURN 02590302 EJECT @Z40FPYK 02620340 */*EXPEPAT6: E TYPE 6 SVC ENTRY */ @Z40FPYK 02650340 SPACE 2 @Z40FPYK 02680340 * SPECIAL ENTRY FOR TYPE 6 SVC TO USE COMMON EXIT PROLOGUE @Z40FPYK 02710340 * FUNCTIONS TO RETURN TO THE CALLER OF THE SVC. @Z40FPYK 02740340 SPACE 2 @Z40FPYK 02770340 EXPEPAT6 DS 0H @Z40FPYK 02800340 ENTRY EXPEPAT6 @Z40FPYK 02820340 SPACE 2 @Z40FPYK 02860340 */* P ESTABLISH ADDRESSIBILITY FOR THIS ENTRY POINT */ @Z40FPYK 02890340 SPACE 2 @Z40FPYK 02920340 BALR BASEREG,C0 ESTABLISH ADDR @Z40FPYK 02950340 USING *,BASEREG @Z40FPYK 02980340 L BASEREG,ADREXPR SET UP TO MAINLINE @Z40FPYK 03010340 * EXIT PROLOGUE BASE @Z40FPYK 03040340 USING IEAVEXPR+2,BASEREG @Z40FPYK 03070340 SPACE 2 @Z40FPYK 03100340 */* P (,STG3TEST) GO TEST FOR DISPATCHABILITY */ @Z40FPYK 03130340 SPACE 2 @Z40FPYK 03160340 B STG3TEST TEST FOR DISPATCHABILITY@Z40FPYK 03190340 EJECT @Z40FPYK 03220340 */* FOOTING 03408002 */* 03408402 */* */ 03408802 */*IEAVEEXP: END EXIT PROLOG */ 03409202 SPACE 2 03409602 EXTRN IEA0DS 03550002 DSTRDISP DC V(TRDISP) TASK ENTRY TO TRACE 03560002 LLBASE DC V(LLREL) LOCAL LOCK REL BASE @YM03564 03570002 LLSENTY DC V(LRELEXPR) LOCAL LOCK SPEC ENTRY @YM03564 03580002 AIEA0DS DC A(IEA0DS) DISPATCHER MAIN ENTRY 03600002 AIEAVESS DC V(IEAVESSS) STATUS STOP SYNCH COMP.ENTRY 03602002 ADREXPR DC A(IEAVEXPR+2) EXIT PROLOGUE BASE ADDR 03604002 SWFORCE DC F'-1' SWITCH SETTING 03606002 SPACE 2 @Z40FPYK 03606140 *********************************************************************** 03606240 * * 03606340 * CONSTANTS FOR IEAVEEXP FUNCTION * 03606440 * * 03606540 *********************************************************************** 03606640 SPACE 2 @Z40FPYK 03606740 PREFSIZE DC AL4(MBCBPXLN) SVRB POOL PREFIX @ZM41810 03606840 VALSVRB DC C'SVRB' SVRB VALIDITY CHECK ID @Z40FPYK 03607440 PRESIZE DC AL4(RBPRFLNA) SVRB PREFIX @ZM41810 03607840 EJECT @Z40FPYK 03608240 CVT DSECT=YES 03608640 IHAASXB 03608740 IHAWSAVT 03608802 IHAFRRS 03609202 IHAPSA 03610002 IHALCCA 03620002 IHAASCB 03630002 IKJTCB 03640002 IKJRB 03642002 IHAMBCB @Z40FPYK 03646040 END 03650002