TITLE 'IEAVERES-RESTART FIRST LEVEL INTERRUPT HANDLER' 00415102 * /* START OF SPECIFICATIONS **** 00419102 * 00419502 *01* MODULE-NAME = IEAVERES 00419902 * 00420802 *02* CSECT-NAME = IEAVERES 00420902 * 00431502 *01* DESCRIPTIVE-NAME = RESTART FIRST LEVEL INTERRUPT HANDLER 00433502 * 00437502 *01* COPYRIGHT = NONE 00437902 * 00442702 *01* STATUS = VERSION 1 00444302 * 00444502 *01* FUNCTION = SEE ENTRY POINT PURPOSES BELOW 00444602 * 00448602 *02* OPERATION = THE RESTART FLIH RECEIVES CONTROL WHEN THE RESTART 00449002 * KEY IS HIT BY THE OPERATOR OR A RESTART SIGP IS ISSUED. THE 00449402 * GENERAL REGISTERS OF THE INTERRUPTED PROGRAM ARE SAVED IN A 00449802 * LCCA AREA, AND THE OLD PSW IS MOVED TO ANOTHER LOCATION IN 00450202 * THEPSA. THE FLIH DETERMINES IF CONTROL IS TO BE PASSED TO 00453302 * DYNAMIC SUPPORT SYSTEM (DSS), RECOVERY TERMINATION MANAGER 00455302 * (RTM), OR THE INTERRUPTION IS TO BE IGNORED (IF THE RESTART 00456402 * RESOURCE IS ALREADY OWNED) AND EXITS ACCORDINGLY.DSS WILL 00458600 * NO LONGER BE INITIALIZED. THE RESTART FLIH WILL NOT ROUTE 00459600 * CONTROL TO DSS SINCE IT IS NOT SUPPORTED FOR SU7. @ZM43089 00460600 * 00464502 *01* NOTES = SEE ENTRY POINT DESCRIPTIONS BELOW 00471902 * 00472002 *02* DEPENDENCIES = 00474602 * rtm(restart entry): 00476502 * 1. ALL STATUS SAVING NECESSARY OTHER THAN THE GENERAL 00478402 * REGISTERS WILL BE DONE BY RTM. 00480302 * 2. RTM WILL CLEAR THE RESTART RECURSION BYTE 00482202 * 00484102 * DSS(IQARIH00 ENTRY): 00486002 * 1. DSS WILL CLEAR THE RECURSION BYTE AND RESTORE THE FRR STACK 00487902 * (EXCEPT WHEN CONTROL IS TO BE PASSED TO RTM THROUGH THE FLIH). 00489802 * 2. IF CONTROL IS TO BE PASSED TO RTM, DSS WILL RE-ENTER THE 00490802 * THE RESTART FLIH AT RESDSSNO WITH THE REGISTERS THE SAME 00491802 * AS WHEN THE FLIH PASSED CONTROL TO DSS. IN ADDITION, RTM MUST 00493802 * OWN THE RESTART LOCK WORD. 00494802 * 00495802 *03* CHARACTER-CODE-DEPENDENCIES = NONE 00498202 * 00499302 *02* RESTRICTIONS = NONE 00501302 * 00502302 *02* REGISTER-CONVENTIONS = SEE EQUATE SECTION OF MODULE 00504802 * 00506802 *02* PATCH-LABEL = NONE (NUCLEUS RESIDENT) 00508802 *01* MODULE-TYPE = PROCEDURE 00511402 * 00515102 *02* PROCESSOR = ASSEMBLER 00515502 * 00517502 *02* MODULE-SIZE = REFERENCE ESD LENGTH AT BEGINNING OF MODULE 00520202 * 00521302 *02* ATTRIBUTES = NUCLEUS ,ZERO PROTECT KEY,DISABLED,REFRESHABLE, 00523302 * ADDRSPC=FIXED,SUPERVISOR MODE 00525302 * 00527702 *01* ENTRY-POINT = IEAVRSTR 00527802 * 00529702 *02* PURPOSE = THIS IS THE ENTRY TAKEN ON A RESTART INTERRUPT. ITS 00531602 * FUNCTION IS TO SAVE THE GENERAL REGISTERS IN THE LCCA, AND 00533502 * ROUTE CONTROL. THE RESTART FLIH PASSES CONTROL TO DSS IF IT 00535402 * IS MONITORING THE SYSTEM, OR TO RTM IF DSS IS NOT ACTIVE. 00537302 * 00539202 *02* LINKAGE = SEE INPUT SECTION BELOW 00541102 * 00543102 *02* INPUT = 00545502 * INPUT ENVIRONMENT: 00546602 * STATE-DISABLED,SUPERVISOR 00548602 * KEY-0 00549902 * LOCKS REQUIRED-NONE 00550902 * INPUT DATA: 00551902 * ALL CONTROL BLOCKS LISTED BELOW 00555802 * INPUT REGISTERS: 00557802 * NONE 00559902 * 00561902 *02* OUTPUT = NONE UNIQUE TO THIS ENTRY 00563702 * 00564702 *01* 1. EXIT-NORMAL = RTM(RESTART) 00565702 * 00567402 *02* CONDITIONS = RTM IS ENTERED TO PROCESS THE RESTART INTERRUPT 00568402 * AFTER GENERAL REGISTERS HAVE BEEN SAVED, THE PSW MOVED, AND 00569402 * THE RESTART RESOURCE ACQUIRED FOR RTM. 00570402 * 00571402 *02* OUTPUT = 00572402 * OUTPUT DATA-LCCARSGR CONTAINS GENERAL REGS 00576802 * PSARPSW CONTAINS THE PSW 00578402 * CURRENT FRR STACK = RESTORED 00580402 * RESTART RECURSION BYTE SET 00581402 * RESTART LOCK WORD HELD BY RTM 00582402 * NO OTHER OUTPUT 00585302 * 00585702 *02* RETURN CODES = NONE 00587302 * 00589002 *01* 2. EXIT-NORMAL = DSS(IQARIH00) 00591002 * 00593002 *02* CONDITIONS = DSS IS ENTERED TO MONITOR THE RESTART INTERRUPT 00595002 * AFTER GENERAL REGISTERS HAVE BEEN SAVED AND THE PSW MOVED. 00596002 * 00598702 *02* OUTPUT = 00601002 * OUTPUT DATA-LCCARSGR CONTAINS GENERAL REGS 00603002 * PSARPSW CONTAINS THE PSW 00605002 * CURRENT FRR STACK = RESTART FLIH 00606002 * RESTART RECURSION BYTE SET 00607002 * RESTART LOCK WORD HELD BY DSS 00607402 * NO OTHER OUTPUT 00609002 * 00611002 *02* RETURN-CODES = NONE 00613002 * 00615002 *01* EXIT-ERROR = NONE 00617002 * 00619002 *01* EXTERNAL-REFERENCES = SEE ROUTINES,DATA AREAS,CONTROL-BLOCKS 00621002 * BELOW 00623002 * 00624002 *02* ROUTINES = RTM(RESTART) 00625002 * DSS(IQARIH00) 00627002 * 00629002 *02* DATA-AREAS = ALL INCLUDED IN CONTROL-BLOCKS BELOW 00631002 * 00633002 *02* CONTROL-BLOCKS = 00635002 * PSA R/W 00637502 * LCCA R/W 00637602 * CVT R/W 00638602 * 00639602 *01* TABLES = NONE 00640602 * 00641602 *01* MACROS = CALLRTM 00642602 * 00643602 *02* SERIALIZATION = DISABLE 00644602 * 00645602 *01* CHANGE-ACTIVITY = Y02715,Y02751,Y02752 00646602 * 00647602 *01* MESSAGES = NONE 00648602 * 00649602 *01* ABEND-CODES = NONE 00650602 * 00651602 **** END OF SPECIFICATIONS ***/ 00652602 EJECT 00653602 IEAVERES CSECT 00654602 MODID BR=NO 00655602 SPACE 2 00656602 */*IEAVERES: CHART RESTART FLIH */ 00657602 */* HEADER 00658602 */* 00659602 */* 00680702 */* 00690702 */* SECTION 3.1.8.3 00700702 */* RESTART FLIH 00710702 */* PAGE # */ 00720702 */*IEAVRSTR: E IEAVRSTR */ 00723102 SPACE 2 00724002 ENTRY IEAVRSTR 00734002 IEAVRSTR DS 0H 00767002 *********************************************************************** 00810002 * * 00820002 * EQUATES * 00840002 * * 00842002 *********************************************************************** 00844002 R0 EQU 0 GENERAL REG 0 00846002 R1 EQU 1 GENERAL REG 1 00848002 R5 EQU 5 GENERAL REGISTER 5 00858003 R6 EQU 6 GENERAL REGISTER 6 00868003 R9 EQU 9 GENERAL REG 9 00899902 R14 EQU 14 GENERAL REG 14 00941902 R15 EQU 15 GENERAL REG 15 00943902 CVTBASE EQU 7 BASE FOR CVT DSECT 00945902 TEMP EQU 8 TEMPORARY WORK REGISTER 00946702 LCCABASE EQU 8 BASE FOR LCCA DSECT 00947902 RESTWD EQU 3 RESTART WORD CONTROLS RESOURCE 00948302 RRSTWD EQU 4 RIGHT HALF OF RESTART WORD 00948702 OWNER EQU 2 CURRENT OWNER OF RESTART RESOURCE 00949102 RECURON EQU X'FF' MASK FOR PSARECUR BIT ON 00963202 ZERO EQU X'00' MASK FOR PSARECUR BIT OFF 00966502 MRIGHT EQU B'0011' MASK FOR RIGHT HALF OF RESTART WORD 00978502 FMASK EQU B'0001' MASK FOR F IN RESTART WORD ID FIELD 00980502 SIXTN EQU 16 CONSTANT VALUE 00980902 CX04 EQU X'04' MASK TO ENABLE FOR DAT @YM08516 00981303 CXE0 EQU X'E0' DISABLE SWITCH SET ON @YM08516 00981903 C4 EQU 4 CONSTANT VALUE @YM08516 00982503 L4 EQU 4 LENGTH VALUE @YM08516 00983103 L8 EQU 8 LENGTH VALUE @YM08516 00983703 L24 EQU 24 LENGTH VALUE 00984703 *********************************************************************** 00985103 * * 00993003 * IEAVERES MAINLINE * 00993203 * * 00994803 *********************************************************************** 00995703 USING PSA,0 00996203 USING CVT,CVTBASE 00996803 SPACE 2 00998003 */* P SAVE A REG IN PSA FOR TEMPORARY ADDRESSABILITY */ 00999003 SPACE 2 01000203 ST TEMP,PSARSREG SAVE REG IN PSA 01000803 BALR TEMP,0 ESTABLISH ADDRESSABILITY 01001503 USING *,TEMP 01002803 SPACE 2 01003403 */* PSACHK: D (YES,RECURCHK,NO,) IS PSA REFRESH DISABLED? */ 01004703 SPACE 2 01005303 PSACHK DS 0H 01005903 TM PSADSSFL,CXE0 IS PSA REF DISABLED? @YM08516 01006703 BM RECURCHK @YM08516 01007703 SPACE 2 01008803 */* D (NO,RECURCHK,YES,NPSWREF) DAMAGE TO NPSW'S? */ 01009603 SPACE 2 01010403 CLC FLCENPSW(L8),EXTNPSWD VERIFY EXT NPSW @YM08516 01011203 BNE NPSWREF @YM08516 01012003 CLC FLCINPSW(L8),IONPSWD VERIFY I/O NPSW @YM08516 01012803 BNE NPSWREF @YM08516 01013603 CLC FLCSNPSW(L8),SVCNPSWD VERIFY SVC NPSW @YM08516 01014403 BNE NPSWREF @YM08516 01015203 CLC FLCPNPSW(L8),PCNPSWD VERIFY PC NPSW @YM08516 01016003 BE RECURCHK @YM08516 01016803 SPACE 2 01018003 */*NPSWREF: P REFRESH NPSW'S */ 01018803 SPACE 2 01019603 NPSWREF MVC FLCENPSW(L24),EXTNPSWD REFRESH THE PSW'S @YM08516 01021003 MVC FLCINPSW(L8),IONPSWD @YM08516 01022003 MVC FLCCVT(L4),ADDRCVT REFRESH CVT ADDRESS @YM08516 01022803 EJECT 01023603 */*RECURCHK: D (NO,PSACHK,YES,) RESTART RECURSION BYTE ON? */ 01024203 SPACE 2 01025403 RECURCHK DS 0H 01026303 CLI PSARECUR,ZERO IS RESTART FLIH RECURSION BYTE ON? 01027203 BE NORECUR IF NOT, CONTINUE 01027803 SPACE 2 01028403 */* P RESTORE REGISTER */ 01029203 SPACE 2 01030103 L TEMP,PSARSREG RESTORE REGISTER USED 01031003 SPACE 2 01032003 */* R LPSW FROM RESTART OPSW */ 01032903 SPACE 2 01033903 LPSW FLCROPSW IF ALREADY ON, IGNORE INTERUPT 01034603 EJECT 01036003 * 01040203 * NOTE: THERE IS A SEQUENCE PROBLEM 01040903 * IN FLIPPING THE FRR STACK AND 01041803 * SETTING THE RECURSION INDICATOR. 01042703 * 01043703 * A)SET BYTE AND FLIP STACK -- IF 01045203 * RECOVERY IS INITIATED IN BETWEEN 01045703 * FRR WILL NEVER GET TO THE RESTART 01046603 * STACK TO CLEAR THE RECURSION BYTE 01047803 * THUS RESTART WILL BE DISABLED 01048703 * UNTIL NEXT IPL. 01049503 * 01050403 * B)FLIP STACK AND SET BYTE -- IF 01051303 * RESTART IS HIT IN BETWEEN, THE 01052203 * STACK MAY BE SET TWICE 01052803 * 01053503 SPACE 2 01055103 */*NORECUR: P FRR STACK = RESTART STACK */ 01055803 SPACE 2 01056503 NORECUR L TEMP,PSACSTK STORE CURRENT FRR IN RES FRR SA 01057403 ST TEMP,PSARSAV 01058403 L TEMP,PSARSTK MAKE RESTART FRR CURRENT 01059503 ST TEMP,PSACSTK 01060403 DROP TEMP 01061303 SPACE 2 01062203 */* P TURN ON RECURSION BIT */ 01063103 SPACE 2 01064003 OI PSARECUR,RECURON SET RES FLIH RECUR BIT ON 01064903 SPACE 2 01065803 */* P SAVE GP REGS IN LCCA */ 01066703 SPACE 2 01067603 USING LCCA,LCCABASE 01068503 L LCCABASE,PSALCCAV GET VIRTUAL ADDR OF LCCA 01069203 STM R0,R15,LCCARSGR SAVE ALL REGS IN LCCARSGR 01070003 SPACE 2 01071003 */* P ESTABLISH ADDRESSABILITY */ 01072003 SPACE 2 01073003 BALR 9,0 ESTABLISH ADDRESSABILITY 01074003 USING *,9 REG 9 IS BASE REG 01074503 L R1,PSARSREG GET INITIALLY SAVED REG 01075003 ST R1,LCCARSGR+32 SAVE IT IN LCCA SAVE AREA 01076003 SPACE 2 01077003 */* P SAVE RESTART OPSW IN PSA */ 01078003 SPACE 2 01079003 MVC PSARSPSW(8),FLCROPSW SAVE RESTART OPSW IN PSA 01080003 SPACE 2 01081003 */* P PUT CPUID IN LEFT HALF OF MODEL RESTART WORD */ 01082003 SPACE 2 01083003 L CVTBASE,FLCCVT BASE FOR CVT FROM LOC 16 IN FLC 01083503 MVC FLCTRACE,CVTTRCA REFRESH TRACE TABLE HEADER @YA02352 01083703 LH RESTWD,PSACPULA GET LOGICAL CPU ID 01084003 SLL RESTWD,SIXTN SHIFT TO LEFT HALF OF RES WD 01085003 SPACE 2 01086003 */* D (NO,RESDSSNO,YES,) IS DSS ACTIVE? */ 01087003 SPACE 2 01088003 CLI CVTDSSAC,ZERO CHECK IF DSS ACTIVE 01089003 BE RESDSSNO DSS NOT ACTIVE 01090003 SPACE 2 01091003 */* P CONSTRUCT DSS RESTART WORD */ 01092003 SPACE 2 01092503 O RESTWD,X00DF PUT DSS ID IN RIGHT HALF RESTART WORD 01093003 SPACE 2 01094003 */* P (SUCC,DSSEXIT,UNSC,) CS ON DSS RESTART WORD */ 01095003 SPACE 2 01096003 SR OWNER,OWNER CLEAR OWNER REGISTER 01097003 * COMPARE AND SWAP DSS RESTART WORD 01098003 * TO ONE IN CVT 01099003 CS OWNER,RESTWD,CVTRSTWD 01100003 BZ DSSEXIT SUCCESS -- CONTROL PASED TO DSS 01101003 SPACE 2 01101503 */* D (NO,IGNORE,YES,) RTM OR DSS ALREADY OWNS RESTART? */ 01102003 SPACE 2 01103003 CLM OWNER,FMASK,RF+1 CHECK IF DSS OR RTM IS THE OWNER 01104003 BNE IGNORE IF NOT, IGNORE THE INTERRUPT 01105003 SPACE 2 01106003 */*DSSEXIT: R PASS CONTROL TO DSS */ 01107003 SPACE 2 01108003 DSSEXIT L R15,DSSEP SUCCESS -- CONTROL PASSED TO DSS 01109003 BALR R14,R15 RETURN ADDR IN REG 14 01110003 SPACE 2 01110903 */*RESDSSNO: D (YES,,NO,RTMEXIT) DSS TO BE INITIALIZED? */ 01111803 SPACE 2 01112703 ENTRY RESDSSNO 01113603 RESDSSNO NOPR R0 DSS NOT ACTIVE 01114502 CLI PSADSSGO,ZERO CHECK IF FLIH SHOULD INITIALIZE DSS 01114903 BE RTMEXIT IF NOT, PASS CONTROL TO RTM @ZA14259 01115700 SPACE 2 01116603 */*DSSGO: P CONSTRUCT DSS RESTART WORD */ 01118103 SPACE 2 01119003 DSSGO ICM RESTWD,MRIGHT,DF PUT DSS ID IN RIGHT HALF RESTART WORD 01119903 SR OWNER,OWNER CLEAR THE OWNER REGISTER 01120803 SPACE 2 01121703 */* P (SUCC,DSSEXIT,UNSC,) CS ON DSS RESTART WORD */ 01122603 SPACE 2 01123503 CS OWNER,RESTWD,CVTRSTWD 01124403 * COMPARE AND SWAP DSS RESTART WORD 01125303 * TO THE ONE IN CVT 01126203 BZ DSSEXIT SUCCESS -- PASS CONTROL TO DSS 01127103 SPACE 2 01128003 */*RTMEXIT: P CONSTRUCT RTM RESTART WORD */ 01128903 SPACE 2 01129803 RTMEXIT ICM RESTWD,MRIGHT,RF PUT RTM ID IN RIGHT HALF RESTART WORD 01130703 SPACE 2 01131603 */* P (SUCC,RESRTMXT,UNSC,) CS ON RTM RESTART WORD */ 01132502 SPACE 2 01149002 SR OWNER,OWNER CLEAR THE OWNER REGISTER 01164102 * COMPARE AND SWAP RTM RESTART WORD 01179202 * TO ONE IN CVT 01194302 CS OWNER,RESTWD,CVTRSTWD 01209402 BZ RESRTMXT SUCCESS -- CONTROL PASSED TO RTM 01224502 SPACE 2 01234502 */* D (NO,IGNORE,YES,) DOES RTM OWN RESTART ALREADY? */ 01234902 SPACE 2 01236502 CLM OWNER,MRIGHT,RF CHECK IF RTM ALREADY OWNS RESTART 01239602 BNE IGNORE IF NOT,IGNORE INTERRUPT 01254702 SPACE 2 01264702 */* P UPDATE CPUID IN RESTART WORD */ 01265102 SPACE 2 01266702 ST RESTWD,CVTRSTWD IF SO, UPDATE CPU ID IN RESTART WORD 01269802 SPACE 2 01279802 */*RESRTMXT: P RESTORE FRR STACK */ 01280202 SPACE 2 01281802 RESRTMXT MVC PSACSTK(4),PSARSAV RESTORE FRR STACK 01284902 SPACE 2 01294902 */* L () CALL RTM(RESTART) */ 01295302 SPACE 2 01296902 * PROCEED TO RTM TO INITIATE THE 01300002 CALLRTM TYPE=RESTART RECOVERY PROCESS 01315102 SPACE 2 01491202 */*IGNORE: P RESTORE GENERAL REGISTERS */ 01491602 SPACE 2 01493202 IGNORE DS 0H TEST LABEL 01495202 LM R0,R15,LCCARSGR RESTORE GP REGISTERS FROM LCCA 01496302 ST R9,PSARSREG SAVE A REG IN PSA 01511402 SPACE 2 01521402 */* P RESTORE FRR STACK */ 01521802 SPACE 2 01523402 L R9,PSARSAV OBTAIN OLD CURRENT FRR 01526502 ST R9,PSACSTK RESTORE TO CURRENT FRR 01541602 L R9,PSARSREG RESTORE THE REGISTER FROM PSA 01556702 SPACE 2 01566702 */* P TURN OFF RECURSION BYTE */ 01567102 SPACE 2 01568702 NI PSARECUR,ZERO TURN OFF RES FLIH RECUR BYTE 01571802 SPACE 2 01581802 */* R LPSW FROM RESTART OPSW */ 01582202 SPACE 2 01583802 LPSW PSARSPSW RETURN VIA LPSW FROM RES OLD PSW 01586902 SPACE 2 01596902 */* FOOTING 01597302 */* 01597702 */* */ 01598102 */*IEAVERES: END RESTART FLIH */ 01598502 SPACE 2 01598902 *********************************************************************** 01602002 * * 01604002 * CONSTANTS AND STORAGE * 01606002 * * 01608002 *********************************************************************** 01608402 EXTRN IQARIH00 DSS ENTRY POINT 01608902 DSSEP DC V(IQARIH00) 01609202 RF DC CL2'RF' RTM ID FOR RESTART WORD 01609602 X00DF DS 0F ALLIGN TO FULL WORD 01616002 DC H'00' 01618002 DF DC CL2'DF' DSS ID FOR RESTART WORD 01620002 DS 0F ALLIGN TO FULL WORD @YM08516 01620503 EXTRN IEACVT 01620603 ADDRCVT DC V(IEACVT) ADDRESS OF CVT @YM08516 01620703 EXTNPSWD DC XL4'040C0000' 01621003 AIEAQEX DC V(IEAQEX00) 01627003 SVCNPSWD DC XL4'040C0000' 01633003 AIEAQSC DC V(IEAQSC00) 01639003 PCNPSWD DC XL4'000C0000' 01645003 AIEAQPK DC V(IEAQPK00) 01651003 IONPSWD DC XL4'040C0000' 01657003 AIEAQIO DC V(IEAQIO00) 01663003 TITLE 'IEAVERES- PSA MAPPING' 01670002 IHAPSA 01709902 TITLE 'IEAVERES- LCCA DSECT MAPPING' 01711902 IHALCCA 01719902 TITLE 'IEAVERES- CVT DSECT MAPPING' 01721902 CVT DSECT=YES,PREFIX=NO,LIST=YES 01729902 END 01749902