TITLE 'IEAVFP -- FINDPAGE' 00010002 * /* START OF SPECIFICATIONS **** 00050002 * 00100002 *01* MODULE-NAME = IEAVFP 00150002 * 00200002 *02* CSECT-NAME = IEAVFP 00250002 * 00300002 *01* DESCRIPTIVE-NAME = FINDPAGE 00350002 * 00400002 *01* COPYRIGHT = NONE 00450002 * 00500002 *01* STATUS = CHANGE LEVEL 000 00550002 * 00600002 *01* FUNCTION = FINDPAGE IS A SUBROUTINE OF RSM (REAL STORAGE 00650002 * MANAGEMENT) WHICH IS GIVEN A VIRTUAL ADDRESS AS INPUT. THIS 00700002 * MODULE RETURNS THE VIRTUAL ADDRESSES OF THE PAGE AND EXTERNAL 00750002 * PAGE TABLE ENTRIES CORRESPONDING TO THE INPUT ADDRESS PROVIDED 00800002 * THE INPUT VIRTUAL ADDRESS IS CONTAINED IN A VALID SEGMENT OF 00850002 * VIRTUAL STORAGE. 00900002 * 00950002 *02* OPERATION = THIS MODULE MAKES ITS FOOTPRINT IN THE RSM RCA FOR 01000002 * RECOVERY PURPOSES WHEN CALLED AT ENTRY POINT IEAVFP2 01050002 * 01100002 *01* NOTES = 01150002 * 01200002 *02* DEPENDENCIES = FOR ENTRY POINT IEAVFP1 THE LOCAL LOCK MUST BE 01250002 * HELD. FOR ENTRY POINT IEAVFP2 THE SALLOC LOCK MUST BE HELD. 01300002 * THIS MODULE IS INTENDED FOR USE ONLY IN VS2 RELEASE 2 AND WILL 01350002 * RUN ON ANY VS2 RELEASE 2 HARDWARE/SOFTWARE CONFIGURATION. 01400002 * 01450002 *03* CHARACTER-CODE-DEPENDENCIES = NONE 01500002 * 01550002 *02* RESTRICTIONS = THIS PROGRAM RUNS IN SUPERVISOR MODE ONLY. 01600002 * 01650002 *02* REGISTER-CONVENTIONS = REGISTER 12 IS THE BASE REG. REGISTERS 01700002 * 2 AND 3 WILL ALWAYS CONTAIN THE RSM HEADER ADDRESS AND THE PVT 01750002 * ADDRESS RESPECTIVELY. 01800002 * 01850002 *02* PATCH-LABEL = NONE 01900002 * 01950002 *01* MODULE-TYPE = PROCEDURE 02000002 * 02050002 *02* PROCESSOR = ASSEMBLER-370R 02100002 * 02150002 *02* MODULE-SIZE = 300 BYTES 02200002 * 02250002 *02* ATTRIBUTES = NUCLEUS, ZERO PROTECT KEY, REENTERABLE, 02300002 * REFRESHABLE, SUPERVISOR MODE 02350002 * 02400002 *01* ENTRY-POINT = IEAVFP1 02450002 * 02500002 *02* PURPOSE = THIS ENTRY POINT IS USED BY NON-RSM ROUTINES WHEN 02550002 * THEY WISH TO KNOW THE PGTE, XPTE ADDRESSES FOR A VIRTUAL 02600002 * ADDRESS. 02650002 * 02700002 *02* LINKAGE = BALR 02750002 * 02800002 *02* INPUT = 02850002 * LOCKS: LOCAL LOCK MUST BE HELD 02900002 * R0: IRRELEVANT 02950002 * R1: VIRTUAL ADDRESS 03000002 * R2-R13: IRRELEVANT 03050002 * R14: RETURN ADDRESS 03100002 * R15: IRRELEVANT 03150002 * 03200002 *02* OUTPUT = NO STREAM OR LIST OUTPUT 03250002 * 03300002 *02* REGISTERS-SAVED = 2, 3, 10-14 03350002 * 03400002 *02* REGISTERS-RESTORED = 2, 3, 10-14 03450002 * 03500002 *01* EXIT-NORMAL = 03550002 * 03600002 *02* CONDITIONS = THE PGTE, XPTE ADDRESSES HAVE BEEN SUCCESSFULLY 03650002 * CALCULATED. 03700002 * 03750002 *02* OUTPUT = 03800002 * LOCKS: SAME AS AT ENTRY 03850002 * R0: VIRTUAL ADDRESS OF PGTE 03900002 * R1: VIRTUAL ADDRESS OF XPTE 03950002 * R3-R14: UNCHANGED 04000002 * R15: RETURN CODE 04050002 * 04100002 *02* RETURN-CODES = 0 - SUCCESSFULL ADDRESS CALCULATIONS 04150002 * 04200002 *01* EXIT-ERROR = 04250002 * 04300002 *02* CONDITIONS = SUCCESSFULL ADDRESS CALCULATION WAS PROHIBITED 04350002 * EITHER BECAUSE THE INPUT VIRTUAL ADDRESS RESIDES IN AN INVALID 04400002 * SEGMENT FOR WHICH THERE IS NO PGT/XPT OR AN INTERNAL RSM ERROR 04450002 * OCCURRED. 04500002 * 04550002 *02* OUTPUT = 04600002 * LOCKS: SAME AS AT ENTRY 04650002 * R0-R1: UNPREDICTABLE 04700002 * R3-R14: UNCHANGED 04750002 * R15: RETURN CODE 04800002 * 04850002 *02* RETURN-CODES = 04900002 * 4 - THE INPUT VIRTUAL ADDRESS RESIDES IN AN INVALID SEGMENT 04950002 * 8 - AN INTERNAL RSM ERROR WAS DETECTED 05000002 * 05050002 *01* ENTRY-POINT = IEAVFP2 05100002 * 05150002 *02* PURPOSE = THIS ENTRY POINT IS USED ONLY BY OTHER RSM ROUTINES 05200002 * DESIRING PGTE, XPTE ADDRESSES CORRESPONDING TO A VIRTUAL 05250002 * ADDRESS. 05300002 * 05350002 *02* LINKAGE = BALR 05400002 * 05450002 *02* INPUT = 05500002 * LOCKS: SALLOC LOCK MUST BE HELD 05550002 * R0: IRRELEVANT 05600002 * R1: VIRTUAL ADDRESS 05650002 * R2: RSM HEADER ADDRESS 05700002 * R3: PVT ADDRESS 05750002 * R4-R13: IRRELEVANT 05800002 * R14: RETURN ADDRESS 05850002 * R15: IRRELEVANT 05900002 * 05950002 *02* OUTPUT = NO STREAM OR LIST OUTPUT 06000002 * 06050002 *02* REGISTERS-SAVED = 10-14 06100002 * 06150002 *02* REGISTERS-RESTORED = 10-14 06200002 * 06250002 *01* EXIT-NORMAL = 06300002 * 06350002 *02* CONDITIONS = THE PGTE,XPTE ADDRESSES HAVE BEEN SUCCESSFULLY 06400002 * CALCULATED. 06450002 * 06500002 *02* OUTPUT = 06550002 * LOCKS: SAME AS AT ENTRY 06600002 * R0: VIRTUAL ADDRESS OF PGTE 06650002 * R1: VIRTUAL ADDRESS OF XPTE 06700002 * R2-R14: UNCHANGED 06750002 * R15: RETURN CODE 06800002 * 06850002 *02* RETURN-CODES = 0 - SUCCESSFULL ADDRESS CALCULATIONS 06900002 * 06950002 *01* EXIT-ERROR = 07000002 * 07050002 *02* CONDITIONS = SUCCESSFULL ADDRESS CALCULATION WAS PROHIBITED 07100002 * EITHER BCAUSE THE INPUT VIRTUAL ADDRESS RESIDES IN AN INVALID 07150002 * SEGMENT FOR WHICH THERE IS NO PGT/XPT OR AN INTERNAL RSM ERROR 07200002 * OCCURRED. 07250002 * 07300002 *02* OUTPUT = 07350002 * LOCKS: SAME AS AT ENTRY 07400002 * R0-R1: UNPREDICTABLE 07450002 * R2-R14: UNCHANGED 07500002 * R15: RETURN CODE 07550002 * 07600002 *02* RETURN-CODES = 07650002 * 4 - THE INPUT VIRTUAL ADDRESS RESIDES IN AN INVALID SEGMENT 07700002 * 8 - AN INTERNAL RSM ERROR WAS DETECTED 07750002 * 07800002 *01* EXTERNAL-REFERENCES = 07850002 * 07900002 *02* ROUTINES = 07950002 * TRANSLATE REAL TO VIRTUAL (IEAVTRV) 08000002 * TO GET THE VIRTUAL ADDRESS OF THE PAGE TABLE FROM THE 08050002 * REAL ADDRESS OBTAINED FROM A SEGMENT TABLE ENTRY. 08100002 * 08150002 *02* DATA-AREAS = 08200002 * LOCAL WORK SAVE AREA - USED BY IEAVFP1 ENTRY TO SAVE 08250002 * REGISTERS 08300002 * WORK SAVE AREA IN PVT ASSIGNED TO FINDPAGE - 08350002 * USED BY IEAVFP2 ENTRY TO SAVE REGISTERS 08400002 * 08450002 *02* CONTROL-BLOCKS = 08500002 * CVT R 08550002 * ASCB R 08600002 * ASXB R 08650002 * WSAL R 08700002 * PVT R/W 08750002 * RSMHD R 08800002 * SGTE R 08850002 * 08950002 *01* TABLES = NONE 09000002 * 09050002 *01* MACROS = 09100002 * EXECUTABLE MACROS 09150002 * MODID 09200002 * MAPPING MACROS 09250002 * IHAPSA 09300002 * CVT 09350002 * IHAASCB 09400002 * IHAASXB 09450002 * IHAWSAVT 09500002 * IHAPVT 09550002 * IHARSMHD 09600002 * IHASGTE 09650002 * 09850002 *02* SERIALIZATION = NO LOCKS OR ENQ RESOURCES ARE OBTAINED OR 09900002 * RELEASED BY THIS MODULE. 09950002 * 10000002 *01* CHANGE-ACTIVITY = Y02752, Y02753 10050002 * 10100002 *01* MESSAGES = NONE 10150002 * 10200002 *01* ABEND-CODES = NONE 10250002 * 10300002 **** END OF SPECIFICATIONS ***/ 10350002 EJECT 10400002 *********************************************************************** 10450002 * * 10500002 * FINDPAGE * 10550002 * * 10600002 *********************************************************************** 10650002 SPACE 3 10700002 IEAVFP CSECT CSECT FOR FINDPAGE 10750002 *A000000-999999 Y02752 10800002 MODID BRANCH=NO 11050002 ENTRY IEAVFP1,IEAVFP2 ENTRY POINT DECLARATION 11100002 EJECT 11150002 *********************************************************************** 11200002 * * 11250002 * EQUATES FOR REGISTERS AND CONSTANTS * 11300002 * * 11350002 *********************************************************************** 11400002 SPACE 2 11450002 R0 EQU 0 REGISTER 0 11500002 R1 EQU 1 REGISTER 1 11550002 R2 EQU 2 REGISTER 2 11600002 R3 EQU 3 REGISTER 3 11650002 R9 EQU 9 REGISTER 9 11660002 R10 EQU 10 REGISTER 10 11700002 R11 EQU 11 REGISTER 11 11750002 R12 EQU 12 REGISTER 12 11800002 R13 EQU 13 REGISTER 13 11850002 R14 EQU 14 REGISTER 14 11900002 R15 EQU 15 REGISTER 15 11950002 FOUR EQU 4 A RETURN CODE 12000002 EIGHT EQU 8 A RETURN CODE 12050002 SEGEXCP EQU 5 MASK BIT POSITION FOR BAD SEG 12100002 * OR BAD TRANSLATION 12110002 PGTBLLEN EQU 32 LENGTH OF A PAGE TABLE 12150002 EJECT 12200002 *********************************************************************** 12250002 * * 12300002 * THIS IS THE NON-RSM ENTRY POINT. THE LOCAL LOCK MUST BE * 12350002 * HELD BY THE CALLER. REGISTER 1 CONTAINS THE VSA FOR WHICH * 12400002 * THE PGTE ADDRESS IS DESIRED. REGISTER 14 MUST CONTAIN THE * 12450002 * RETURN ADDRESS. UPON RETURN REGISTER 0 WILL CONTAIN THE * 12500002 * PGTE ADDRESS, REGISTER 1 WILL CONTAIN THE XPTE ADDRESS, AND * 12550002 * REGISTER 15 WILL CONTAIN THE RETURN CODE. * 12600002 * * 12650002 *********************************************************************** 12700002 USING PSA,0 PSA ALWAYS ADDRESSABLE 12750002 IEAVFP1 L R15,PSAAOLD ACQUIRE CURRENT ASCB ADDRESS 12800002 USING ASCB,R15 TELL ASSEMBLER ASCB ADDRESSABLE 12850002 L R15,ASCBASXB ACQUIRE ASXB ADDRESS 12900002 USING ASXB,R15 TELL ASSEMBLER ASXB ADDRESSABLE 12950002 L R15,ASXBSPSA ACQUIRE SAVE/WORK VECTOR ADDR'S 13000002 USING WSAL,R15 TELL ASSEMBLER SPSA ADDRESSABLE 13050002 L R15,WSALRSM ACQUIRE ADDRESS OF RSM'S AREA 13100002 STM R2,R3,0(R15) SAVE USERS REGISTERS 13150002 STM R9,R14,8(R15) SAVE USERS REGISTERS 13200002 LR R13,R15 SAVE POINTER TO SAVE AREA 13250002 DROP R15 R15 IS BEING LOST 13300002 L R9,FLCCVT GET CVT POINTER 13350002 USING CVT,R9 TELL ASSEMBLER WE HAVE IT 13400002 L R3,CVTPVTP GET PVT POINTER 13450002 USING PVT,R3 TELL ASSEMBLER WE NOW HAVE PVT 13500002 L R2,PSAAOLD GET CURRENT ASCB ADDRESS 13550002 USING ASCB,R2 TELL ASSEMBLER R2 HAS ASCB ADDR 13600002 L R2,ASCBRSM GET POINTER TO THE RSM HEADER 13650002 USING RSMHD,R2 TELL ASSEMBLER ABOUT IT 13700002 BALR R12,0 SET UP A BASE REGISTER 13750002 DIFFEREN LA R12,RSMADDRY-DIFFEREN(R12) MAKE IT LOOK AS IF WE CAME 13800002 * IN AT SECOND ENTRY POINT 13850002 USING RSMADDRY,R12 TELL ASSEMBLER WE'RE ADDRESSABLE 13900002 * FROM THERE 13950002 BAL R11,MAINLINE CALL FINDPAGE MAINLINE 14000002 LM R2,R3,0(R13) RESTORE USERS REGISTERS 14050002 LM R9,R14,8(R13) RESTORE USERS REGISTERS 14100002 BR R14 RETURN TO CALLER 14150002 EJECT 14200002 *********************************************************************** 14250002 * * 14300002 * THIS IS THE RSM ENTRY POINT. TO ENTER HERE THE SALLOC MUST * 14350002 * BE HELD BY THE CALLER. REGISTER 2 MUST POINT TO THE RSM * 14400002 * HEADER AND REGISTER 3 MUST POINT TO THE PVT. * 14450002 * THE OTHER INPUTS AND OUTPUTS ARE AS ABOVE. * 14500002 * * 14550002 *********************************************************************** 14600002 IEAVFP2 STM R9,R14,PVTWSA14 SAVE USED REGISTERS 14650002 BALR R12,0 SET UP ADDRESSABILITY 14700002 RSMADDRY DS 0H 14750002 L R9,FLCCVT GET CVT ADDR FOR MAINLINE 14760002 BAL R11,MAINLINE CALL MAINLINE ROUTINE 14800002 LM R9,R14,PVTWSA14 RESTORE DESTROYED REGISTERS 15000002 BR R14 RETURN TO CALLER 15050002 EJECT 15100002 *********************************************************************** 15150002 * * 15200002 * THE SETUP FOR RSM AND NON-RSM CALLERS HAS BEEN DONE. * 15250002 * THIS IS THE CODE WHICH ACTUALLY FINDS THE PAGE TABLE ENTRY * 15300002 * * 15350002 *********************************************************************** 15400002 MAINLINE LRA R0,0(R1) SET COND CODE TO SEE IF SEGMENT? 15450002 BC SEGEXCP,RC4 INVALID SEGMENT ENTRY. ERROR 15500002 SRL R1,11 MOVE 2*PAGE NUMBER TO LOW BITS 15600002 L R15,RSMVSTO GET SEGMENT TABLE ADDRESS 15610002 LR R10,R1 SAVE 2*PAGE NUMBER FOR LATER 15650002 SRL R1,3 NOW MOVE SEGMENT NUMBER * 4 TO *15700002 CORRECT BITS 15750002 N R1,MASK1 GET RID OF GARBAGE BITS 15800002 AR R1,R15 POINT TO SGTE 15850002 USING SGTSTE,R1 TELL ASSEMBLER WE POINT TO SGTE 15900002 L R1,SGTSTE GET SGTE INTO REGISTER 15950002 N R1,MASK2 GET RID OF ALL BITS NOT PART OF *16000002 PAGE TABLE ADDRESS 16050002 *********************************************************************** 16100002 * * 16150002 * WE NOW HAVE THE REAL ADDRESS OF THE PAGE TABLE. * 16200002 * TRANSLATE REAL TO VIRTUAL WILL BE CALLED TO CONVERT * 16250002 * THIS ADDRESS TO A VSA THUS GIVING THE VSA OF THE PAGE * 16300002 * TABLE. REG 1 CONTAINS BOTH THE INPUT AND OUTPUT. * 16350002 * * 16400002 *********************************************************************** 16450002 L R15,CVTPTRV GET ENTRY POINT OF TRV 16600002 BALR R14,R15 CALL IT TO CONVERT TO VSA 16650002 LTR R15,R15 GOOD RETURN CODE? 16700002 BNZ RC8 NO... ERROR 16750002 N R10,MASK3 GET RID OF EXTRA BITS IN PAGE # 16800002 LA R0,0(R1,R10) ADDRESS OF PGTE INTO REG 0 16850002 SPACE 16852002 * THE NEXT FOUR INSTRUCTIONS MULTIPLY THE (PAGE NUMBER*2) BY 6 TO 16860002 * GET 12*PAGE NUMBER WHICH IS SAME AS XPTLEN*PAGE NUMBER. 16870002 * NOTE THIS CODE IS DEPENDENT ON THE LENGTH OF THE XPTE NOT CHANGING. 16880002 * NOTE ALSO THAT THESE INSTRUCTIONS ARE FASTER THAN A MULTIPLY. 16890002 ALR R10,R10 2 TIMES (PAGE NUMBER*2) 16892002 LR R14,R10 16894002 ALR R10,R10 4 TIMES (PAGE NUMBER*2) 16896002 ALR R10,R14 6 TIMES (PAGE NUMBER*2) 16898002 LA R1,PGTBLLEN(R1,R10) XPTE ADDRESS INTO R1 17000002 BR R11 RETURN TO CALLER 17050002 EJECT 17100002 *********************************************************************** 17150002 * * 17200002 * ERROR EXITS ARE MADE FROM THIS POINT EITHER BECAUSE THE INPUT * 17250002 * VIRTUAL PAGE WAS IN AN INVALID SEGMENT OR BECAUSE TRANSLATE REAL * 17300002 * TO VIRTUAL RETURNED A BAD RETURN CODE INDICATING AN INTERNAL RSM * 17350002 * PROBLEM. * 17400002 * * 17450002 *********************************************************************** 17500002 SPACE 17550002 RC4 LA R15,FOUR SGTE INVALID ERROR CODE 17600002 BR R11 RETURN TO CALLER 17650002 SPACE 17700002 RC8 LA R15,EIGHT BAD RETURN CODE FROM TRV-BAD ERR 17750002 BR R11 RETURN TO CALLER 17800002 EJECT 17850002 *********************************************************************** 17900002 * * 17950002 * CONSTANTS USED BY FINDPAGE * 18000002 * * 18050002 *********************************************************************** 18100002 SPACE 18150002 DS 0F 18450002 MASK1 DC XL4'000003FC' SEGMENT ENTRY BITS * 4 18500002 MASK2 DC XL4'00FFFFF8' PAGE TABLE ADDRESS BITS 18550002 MASK3 DC XL4'0000001E' PAGE NUMBER BITS * 2 18600002 EJECT 18650002 *********************************************************************** 18700002 * * 18750002 * MAPPING MACROS USED BY FINDPAGE ARE FOLLOWING * 18800002 * * 18850002 *********************************************************************** 18900002 SPACE 3 18950002 CVT DSECT=YES,LIST=NO 19000002 EJECT 19050002 IHAPVT 19100002 EJECT 19150002 IHARSMHD 19200002 EJECT 19250002 IHASGTE 19300002 EJECT 19550002 IHAASCB 19600002 EJECT 19650002 IHAASXB 19700002 EJECT 19750002 IHAPSA 19900002 EJECT 19950002 IHAWSAVT 20000002 EJECT 20050002 */*IEAVFP1: CHART */ 20100002 */* HEADER 20106002 */* SECTION: 3.1.15.9.17.3 IEAVFP--IEA 20112002 */*VFP1 E. P. MODULE DESCRIPTION 20118002 */* CONTR: J.W. MEHL 20124002 */* 09/27/73 20130002 */* MGR: J.E.NICHOLS 20136002 */* PAGE # */ 20142002 */*IEAVFP1: E ENTRY TO FINDPAGE */ 20400002 */* P SAVE USER REGS IN LOCAL SAVE AREA */ 20450002 */* L OBTAIN PVT AND RSM HEADER ADDRESSES */ 20500002 */* S MAINLINE:FIND PAGE TABLE ADDRESSES */ 20550002 */* P RESTORE NON-OUTPUT REGISTERS */ 20600002 */* R RETURN TO CALLER */ 20650002 */*IEAVFP1: END */ 20700002 */*IEAVFP2: CHART */ 20750002 */* HEADER 20800002 */* SECTION: 3.1.15.9.17.3 IEAVFP--IEA 20830002 */*VFP2 E. P. MODULE DESCRIPTION 20860002 */* CONTR: J.W. MEHL 20890002 */* 09/27/73 20920002 */* MGR: J.E.NICHOLS 20950002 */* PAGE # */ 20980002 */*IEAVFP2: E ENTRY TO FINDPAGE FROM RSM */ 21050002 */* P SAVE USERS REGISTERS IN RSMS GLOBAL SAVEAREA */ 21100002 */* S MAINLINE:PERFORM FIND A PAGE FUNCTION */ 21200002 */* P RESTORE NON-OUTPUT REGISTERS */ 21300002 */* R RETURN TO CALLER */ 21350002 */*IEAVFP2: END */ 21400002 */*IEAVFP: CHART */ 21450002 */* HEADER 21456002 */* SECTION: 3.1.15.9.17.3 IEAVFP-- 21462002 */*MAINLINE MODULE DESCRIPTION 21468002 */* CONTR: J.W. MEHL 21474002 */* 09/27/73 21480002 */* MGR: J.E.NICHOLS 21486002 */* PAGE # */ 21492002 */*IEAVFP: E ENTRY TO MAINLINE CODE */ 21750002 */* D (YES,,NO,%A1) IS THE PAGE TABLE AVAILABLE? */ 21800002 */* P DERIVE THE VIRTUAL SGTE ADDR */ 21850002 */* N SEGMENT NUMBER * 4 + VIRTUAL SEGMENT TABLE ORIGIN */ 21900002 */* P ACQUIRE REAL ADDRESS OF PTO FROM SGTE */ 21950002 */* S IEAPTRV:CONVERT PTO TO VIRTUAL ADDR */ 22000002 */* D (YES,,NO,%A2) RETURN CODE = 0? */ 22050002 */* P DERIVE ADDR OF PAGE TABLE ENTRY IN R0 */ 22100002 */* N VIRTUAL PAGE TABLE ORIGIN + 2 * PAGE NUMBER */ 22150002 */* P DERIVE ADDR OF XPTE IN R1 */ 22200002 */* N LENGTH OF XPTE * PAGE NUMBER + PAGE TABLE ORIGIN + 22250002 */*PAGE TABLE LENGTH */ 22300002 */* P RETURN CODE = 0 */ 22350002 */*%A3: R RETURN TO CALLER */ 22400002 */*%A1: P (,%A3) RETURN CODE = 4 */ 22450002 */*%A2: P (,%A3) RETURN CODE = 8 */ 22500002 */*IEAVFP: END */ 22550002 END 22600002