TITLE 'IEAVELCR-LOW CORE REFRESH ROUTINE' 00000402 * /* START OF SPECIFICATIONS **** 00004402 * MODULE NAME= IEAVELCR 00008402 * 00008502 * CSECT NAME= IEAVELCR 00008702 * 00009002 * DESCRIPTIVE NAME= LOW-CORE, COMMON AREA REFRESH ROUTINE 00009302 * 00009602 * COPYRIGHT= NONE 00009902 * 00010202 * STATUS= VERSION 1 00010502 * 00010802 * FUNCTION= 00011102 * THE LOW-CORE, COMMON AREA REFRESH ROUTINE HAS THE 00011402 * CAPABILITY OF REFRESHING SYSTEM AND CPU VCONS, AND 00011702 * GLOBAL AND CPU AREAS WHOSE VALUES HAVE BEEN DUPLEXED AT 00012002 * SYSTEM OR CPU INITIALIZATION TIME. CURRENTLY, THE 00012302 * FIELDS LISTED BELOW IN THE OUTPUT SECTION WILL BE 00012602 * REFRESHED. 00012902 * 00013202 * OPERATION= 00013502 * 00013802 * IEAVELCR ENTRY= 00014102 * SAVE ALL REGISTERS; 00014402 * DO FOR ALL VCON VALUES; 00014702 * IF VCONS ARE VALID 00015002 * THEN 00015302 * REFRESH VALUE FROM VCON; 00015602 * ELSE 00015902 * REFRESH VCONS FROM VALUE; 00016202 * END; 00016502 * DO FOR ALL DUPLEXED VALUES; 00016802 * IF DUPLEXES ARE VALID 00017102 * THEN 00017402 * REFRESH VALUE FROM DUPLEX; 00017502 * ELSE 00017802 * REFRESH DUPLEXES FROM VALUES; 00018102 * END; 00018402 * GO TO SETLOCK ROUTINE (IEAVELKR); 00018702 * 00019002 * NOTES= SERIALIZATION IS NOT REQUIRED ON THE DUPLEXED AREAS 00019302 * AS LONG AS MULTI-CYCLE INSTRUCTIONS ARE NOT USED TO 00019602 * UPDATE THESE AREAS. 00019902 * 00020202 * ALSO SEE ENTRY POINT DESCRIPTIONS BELOW 00020502 * 00020802 * DEPENDENCIES= 00021102 * 00021402 * RTM= 00021702 * 1. REGISTER 15 CAN BE DESTROYED ACROSS 00022002 * INTERFACE. 00022302 * 2. RTM MUST SUPPLY RECURSION LOGIC SUCH THAT 00022602 * THIS ROUTINE IS NOT RECURSIVELY ENTERED. 00022902 * 00023202 * NIP0 AND NIP09= 00023502 * 1. THE HIGH ORDER BIT (BIT 0) OF ALL DUPLEXED 00023802 * VALUES IN THE AREA GSDA MUST BE SET ON 00024102 * WHEN THE VALUE IS PLACED IN THIS AREA. 00024402 * 00024702 * NIP0= 00025002 * 00025302 * 00025602 * 1. THE FOLLOWING FIELDS MUST BE DUPLEXED BY 00025902 * NIP0 INTO THE AREA GSDA= 00026202 * CVTASVT CVTCSD 00026502 * CVTPCCAT CVTLCCAT 00026802 * CVTGDA 00027102 * 2. THE FIELD CVTGSDA MUST BE INITIALIZED BY 00027402 * NIP0 AND THE HIGH ORDER BIT OF THIS FIELD BE 00027702 * SET AFTER ITS INITIALIZATION. 00028002 * NIP09= 00028302 * 1. THE FOLLOWING FIELDS MUST BE DUPLEXED BY 00028602 * MEMORY REQUEST INTO THE AREA GSDA= 00028902 * ASVTMAX (MAXUSER) 00029202 * 00029502 * CHARACTER CODE DEPENDENCIES= NONE 00029802 * 00030102 * RESTRICTIONS= NONE 00030402 * 00030702 * REGISTER CONVENTIONS= REFERENCE EQUATE SECTION OF 00031002 * MODULE. 00031302 * 00031602 * MODULE TYPE= PROCEDURE 00031902 * 00032202 * PROCESSOR= ASSEMBLER 00032502 * 00032802 * MODULE SIZE= REFERENCE ESD LENGTH AT BEGINNING OF MODULE 00033102 * 00033402 * ATTRIBUTES= NUCLEUS 00033702 * ZERO PROTECT KEY 00034002 * DISABLED 00034302 * REFRESHABLE 00034602 * ADDRESS SPACE = FIXED 00034902 * SUPERVISOR MODE 00035202 * 00035502 * ENTRY POINT= IEAVELCR 00035802 * 00036102 * PURPOSE= THIS IS THE ONLY ENTRY TO THE LOW-CORE REFRESH 00036402 * ROUTINE. IT WILL REFRESH SYSTEM AND CPU 00036702 * VCONS, AND GLOBAL AND CPU AREAS WHOSE VALUES 00037002 * HAVE BEEN DUPLEXED AT SYSTEM OR CPU 00037302 * INITIALIZATION TIME. 00037602 * 00037902 * LINKAGE= SEE INPUT SECTION BELOW 00038202 * 00038502 * INPUT= 00038802 * 00039102 * ENVIRONMENT= DISABLED 00039402 * SUPERVISOR STATE 00039702 * KEY 0 00040002 * NO LOCKS REQUIRED 00040302 * 00040602 * DATA= GSDA CONTROL BLOCK 00040902 * 00041202 * REGISTERS= 14 = RETURN ADDRESS 00041502 * 15 = ENTRY POINT ADDRESS 00041802 * ALL OTHERS IRRELEVANT 00042102 * 00042402 * OUTPUT= SEE EXIT -- NORMAL 00042702 * 00043002 * REGISTERS SAVED= ALL SAVED EXCEPT 15 00043302 * 00043602 * 00043902 * 00044202 * REGISTERS USED= ALL 00044502 * 00044802 * REGISTERS RESTORED= NONE 00045102 * 00045402 * EXIT -- NORMAL= SETLOCK VERIFICATION (IEAVELKR) 00045702 * 00046002 * CONDITIONS= EXIT WILL ALWAYS BE TO SETLOCK 00046302 * 00046602 * OUTPUT= 00046902 * DATA= THIS ROUTINE WILL REFRESH THE FOLLOWING 00047202 * FIELDS= 00047502 * CVTTCBP CVTASCBH CVT0EF00 CVTEXPRO 00047802 * CVT0VL00 CVTGSMQ CVTLSMQ 00048102 * CVT0DS CVTGSPL CVTABEND CVTGLMN 00048402 * CVT0VL01 CVTIPCDS CVTGETCL CVTIPCRI 00048702 * CVTFRECL CVTIPCRP CVTCRMN CVTRMBR 00049002 * CVTGMBR CVTLFRM CVTOPTE CVTSPSA 00049302 * CVTASVT CVTCSD CVTPCCAT CVTLCCAT 00049602 * CVTGDA ASVTMAXU 00049902 * 00050202 * REGISTERS= 00050502 * 13-ADDRESS OF RTM'S SAVED REGISTERS 00050802 * 15-SETLOCK RECOVERY ADDRESS(IEAVELKR) 00051102 * 00051402 * RETURN CODE= NONE 00051702 * 00052002 * EXIT -- ERROR= NONE 00052302 * 00052602 * EXTERNAL REFERENCES= 00052902 * 00053202 * ROUTINES= IEAVELKR = SETLOCK'S REPAIR ROUTINE IS 00053502 * BRANCHED TO AS THE NEXT STEP OF THE REPAIR 00053802 * ROUTINE. 00054102 * 00054402 * DATA AREAS= NONE 00054702 * 00055002 * CONTROL BLOCKS= GSDA R/W 00055302 * CVT R/W 00055602 * ASVT R/W 00055902 * LCCA R 00056202 * WSAC R 00056502 * 00056802 * TABLES= INTERNAL VCON TABLE AND INTERNAL OFFSET TABLES 00057102 * 00057402 * MACROS= NONE 00057702 * 00058002 * SERIALIZATION= DISABLE 00058302 * 00058602 * MESSAGES= NONE 00058902 * 00059202 * ABEND CODES= NONE 00059502 * 00060002 **** END OF SPECIFICATIONS ***/ 00062002 */*IEAVELCR: CHART LOW CORE REFRESH */ 00065002 */* HEADER 00070002 */* 00080002 */* 00090002 */* 00100002 */* SECTION 3.1.8 00113002 */* LOW CORE REFRESH 00120002 */* PAGE # */ 00122002 */*IEAVELCR: E IEAVELCR */ 00124002 SPACE 2 00127002 IEAVELCR CSECT 00134002 USING PSA,0 00142002 USING CVT,TARGREG 00150002 USING GSDA,REFRREG 00200002 USING ASVT,ASVTREG 00250002 * EQUATE SECTION 00260002 R0 EQU 0 REGISTER 0 00270002 TARGREG EQU 2 ADDRESS OF TARGET AREA 00280002 REFRREG EQU 3 ADDRESS OF DUPLEX AREA 00290002 INDEXREG EQU 4 ADDRESS OF OFFSET 00292002 COUNTREG EQU 5 NUMBER IN AREA TO BE DUPLEXED 00294002 ASVTREG EQU 6 ADDRESS OF ASVT 00296002 BASEREG EQU 9 BASE REGISTER 00298002 WORKREG EQU 10 GENERAL WORK REG 00298402 WORKREG2 EQU 11 GENERAL WORK REG 00299202 WORKREG3 EQU 12 GENERAL WORK REG 00299602 R13 EQU 13 REGISTER 13 00299702 R14 EQU 14 REGISTER 14 00299802 R15 EQU 15 REGISTER 15 00299902 * VALUE SECTION 00316602 ZERO EQU 0 DISPLACEMENT VALUE 00326602 ONE EQU 1 DISPLACEMENT VALUE 00328602 TWO EQU 2 DISPLACEMENT VALUE 00330602 FOUR EQU 4 DISPLACEMENT VALUE 00332602 HIGHON EQU 8 MASK VALUE 00333002 SPACE 2 00333102 */* P SAVE RTM'S REGS IN SAVE AREA */ 00333202 SPACE 2 00333302 L R15,PSALCCAV GET LCCA ADDRESS 00341302 L R15,LCCACPUS-LCCA(R15) GET WSAC ADDRESS 00350002 L R15,WSACRRSA-WSAC(R15) GET SAVE AREA ADDRESS 00400002 STM R0,R15,ZERO(R15) SAVE RTM REGISTERS 00450002 SPACE 2 00460002 */* P ESTABLISH ADDRESSABILITY */ 00470002 SPACE 2 00480002 BALR BASEREG,ZERO ESTABLISH 00500002 USING *,BASEREG ADDRESSABILITY 00550002 LR R13,R15 PUT SAVE AREA ADDRESS IN 13 00650002 SPACE 2 00660002 */* P SET UP FOR SUBROUTINE TO REFRESH VCONS */ 00670002 SPACE 2 00680002 * VCON REFRESH ROUTINE 00700002 L TARGREG,FLCCVT GET CVT ADDRESS 00750002 LA REFRREG,VCONTAB GET ADDR OF VCON TABLE 00800002 LA INDEXREG,VINDXTAB GET ADDR OF INDEX TAB FOR VCONS 00850002 LA COUNTREG,VCVTIND GET NUMBER OF ENTRIES 00900002 SPACE 2 00910002 */* S REFRESH:GO TO INTERNAL REFRESH ROUTINE */ 00920002 SPACE 2 00930002 BAL R14,REFRESH GO TO REFRESH SUBROUTINE 00950002 SPACE 2 00950502 */* D (NO,EXIT,YES,) GSDA POINTER OK? */ 00951002 SPACE 2 00951502 L TARGREG,FLCCVT GET CVT ADDRESS 00952002 L REFRREG,CVTGSDA GET GSDA ADDRESS 00960002 LTR REFRREG,REFRREG IS HIGH BIT ON,ON IF VALID 00970002 BNM EXIT IF NOT ON FINISHED 00980002 SPACE 2 00985002 */* P SET UP TO REFRESH CVT FROM GSDA */ 00990002 SPACE 2 00995002 LA INDEXREG,GINDXTAB GET ADDR OF INDEX TAB FOR DUP 01000002 LA COUNTREG,GSDA001N GET NUMBER OF ENTRIES 01100002 SPACE 2 01120002 */* S REFRESH:GO TO INTERNAL REFRESH SUBROUTINE */ 01140002 SPACE 2 01160002 BAL R14,REFRESH GO TO REFRESH SUBROUTINE 01200002 SPACE 2 01205002 */* D (NO,BACKREF,YES,) IS DUPLEX MAXUSER VALID? */ 01210002 */* P REFRESH ASVTMAXU FROM GSDAMAXU */ 01212002 SPACE 2 01215002 L REFRREG,CVTGSDA GET GSDA ADDRESS 01220002 L ASVTREG,CVTASVT GET ASVT ADDRESS 01250002 TM GSDAMAX,GSDAMAXB IS DUPLEXED VALUE VALID 01300002 BNO BACKREF IF NOT REFR DUPLEX 01350002 SPACE 2 01380002 */*EXIT: P GET SETLOCK REPAIR RTN ADDRESS */ 01410002 SPACE 2 01440002 LH WORKREG,GSDAMAXU GET GOOD VALUE 01500002 ST WORKREG,ASVTMAXU STORE IN ASVT FIELD 01550002 EXIT L R14,LOCKADDR GET LOCK REPAIR RTN ADDRESS 01600002 SPACE 2 01610002 */* P (,FINI) EXIT FROM ROUTINE */ 01620002 SPACE 2 01630002 BR R14 GO TO SETLOCK ROUTINE 01650002 SPACE 2 01660002 */*BACKREF: P (,EXIT) REFRESH GSDAMAXU FROM ASVTMAXU */ 01670002 SPACE 2 01680002 BACKREF LH WORKREG,ASVTMAXU+TWO GET GOOD VALUE 01700002 ICM WORKREG,HIGHON,HBITON SET HIGH BIT 01720002 ST WORKREG,GSDAMAX STORE GOOD DUPLEX VALUE 01750002 B EXIT FINISHED 01950002 */*FINI: R END THIS ROUTINE */ 01960002 SPACE 2 01970002 */*REFRESH: E INTERNAL REFRESH ROUTINE */ 01980002 SPACE 2 01990002 REFRESH DS 0H 02000002 SLR WORKREG,WORKREG CLEAR REG 02050002 SPACE 2 02060002 */*NEXTENT: D (YES,FINI2,NO,) HAVE ALL BEEN REFRESHED? */ 02070002 SPACE 2 02080002 NEXTENT CR WORKREG,COUNTREG ARE WE FINISHED 02100002 BNLR R14 IF SO,RETURN 02150002 SPACE 2 02160002 */* D (NO,REFDUP,YES,) IS DUPLEX VALUE VALID? */ 02170002 SPACE 2 02180002 L WORKREG3,ZERO(REFRREG) GET DUPLEX VALUE 02200002 LTR WORKREG3,WORKREG3 IS DUPLEX VALID VALUE 02250002 BNM REFDUP IF NOT,REFRESH DUPLEX 02300002 SPACE 2 02310002 */* P REFRESH VALUE FROM DUPLEX */ 02320002 SPACE 2 02330002 LA WORKREG3,ZERO(WORKREG3) CLEAR HIGH BIT 02350002 LH WORKREG2,ZERO(INDEXREG) GET OFFSET VALUE 02400002 ST WORKREG3,ZERO(WORKREG2,TARGREG) PUT INTO AREA 02450002 SPACE 2 02460002 */*LOOPINC: P (,NEXTENT) INCREMENT COUNTER AND OFFSETS */ 02470002 SPACE 2 02480002 LOOPINC LA WORKREG,ONE(WORKREG) INCREMENT COUNTER 02500002 LA INDEXREG,TWO(INDEXREG) GET ADDRESS OF NEXT OFFSET 02550002 LA REFRREG,FOUR(REFRREG) GET ADDRESS OF NEXT VALUE 02600002 B NEXTENT LOOP 02650002 SPACE 2 02660002 */*REFDUP: P (,LOOPINC) REFRESH DUPLEX FROM VALUE */ 02670002 SPACE 2 02680002 REFDUP LH WORKREG2,ZERO(INDEXREG) GET INDEX VALUE 02700002 L WORKREG2,ZERO(WORKREG2,TARGREG) GET TRUE VALUE 02750002 ICM WORKREG2,HIGHON,HBITON 02800002 ST WORKREG2,ZERO(REFRREG) UPDATE DUPLEX AREA 02850002 B LOOPINC GO TO NEXT ENTRY 02900002 SPACE 2 02901002 */*FINI2: R END REFRESH ROUTINE */ 02902002 SPACE 2 02903002 */*IEAVELCR: END LOW CORE REFRESH */ 02904002 SPACE 2 02905002 LOCKADDR DC V(IEAVELKR) ADDR OF SETLOCK REPAIR RTN 02910002 VCONTAB EQU * START VCON TABLE 02950002 DC X'80' SET HIGH BIT ON 02960002 VIPCDS DC VL3(IEAVEDR) ADDR OF DIRECT SIGNAL 03000002 DC X'80' SET HIGH BIT ON 03010002 VIPCRI DC VL3(IEAVERI) ADDR OF REMOTE IMMEDIATE 03050002 DC X'80' SET HIGH BIT ON 03060002 VIPCRP DC VL3(IEAVERP) ADDR OF REMOTE PENDABLE 03100002 DC X'80' SET HIGH BIT ON 03120002 VLFRM DC VL3(FMBRANCH) LIST FORM FREEMAIN BRANCH ENTRY 03150002 DC X'80' SET HIGH BIT ON 03160002 VRMBR DC VL3(RMBRANCH) ADDR OF REGMAIN BRANCH ENTRY 03200002 DC X'80' SET HIGH BIT ON 03210002 VTCBP DC VL3(IEATCBP) ADDRESS OF NEXT AND CURRENT TCBS 03250002 DC X'80' SET HIGH BIT ON 03260002 V0EF00 DC VL3(IEA0EF00) ADDR OF STAGE 2 EXIT EFFECTORS 03300002 DC X'80' SET HIGH BIT ON 03310002 V0VL00 DC VL3(IEA0VL00) ADDR OF VALIDITY CHECK ROUTINE 03350002 DC X'80' SET HIGH BIT ON 03360002 VODS DC VL3(IEA0DS) ADDR OF MAIN DISPATCHER ENTRY 03400002 DC X'80' SET HIGH BIT ON 03410002 VABEND DC VL3(IEABEND) ADDR OF SECONDARY CVT 03450002 DC X'80' SET HIGH BIT ON 03460002 V0VL01 DC VL3(IEA0VL01) ADDR OF VALIDITY CHECK RTN 2 03500002 DC X'80' SET HIGH BIT ON 03510002 VGETCL DC VL3(IEAVGTCL) ADDR OF GETCELL RTN 03550002 DC X'80' SET HIGH BIT ON 03560002 VFRECL DC VL3(IEAVFRCL) ADDR OF FREECELL RTN 03600002 DC X'80' SET HIGH BIT ON 03610002 VCRMN DC VL3(CRBRANCH) ADDR OF SVC 120 BRANCH ENTRY 03650002 DC X'80' SET HIGH BIT ON 03660002 VOPTE DC VL3(IRARMI00) ADDR OF SYSEVENT 03700002 DC X'80' SET HIGH BIT ON 03710002 VASCBH DC VL3(IEAMASCB) HEAD OF ASCB QUEUE 03750002 DC X'80' SET HIGH BIT ON 03760002 VEXPRO DC VL3(IEAVEXPR) ADDR OF EXIT PROLOGUE 03800002 DC X'80' SET HIGH BIT ON 03810002 VGSMQ DC VL3(IEAGSMQ) ADDR OF GLOBAL SERVICE MANAGER Q 03850002 DC X'80' SET HIGH BIT ON 03860002 VLSMQ DC VL3(IEALSMQ) ADDR OF LOCAL SERVICE MANAGER Q 03900002 DC X'80' SET HIGH BIT ON 03910002 VGSPL DC VL3(IEAGSPL) ADDR OF GLOBAL SER. PRIOR. LIST 03950002 DC X'80' SET HIGH BIT ON 03960002 VGLMN DC VL3(GLBRANCH) GLOBAL ENTRY TO GETMAIN/FREEMAIN 04000002 DC X'80' SET HIGH BIT ON 04010002 VSPSA DC VL3(IEAVGWSA) ADDR OF GLOBAL WORK/SAVE AREAS 04050002 DC X'80' SET HIGH BIT ON 04060002 VGMBR DC VL3(GMBRANCH) LIST FORM GETMAIN BRANCH ENTRY 04100002 VCONTEND EQU * END VCON TABLE 04150002 VCVTIND EQU (VCONTEND-VCONTAB)/4 NUMBER OF VCONS REFRESHED 04200002 VINDXTAB EQU * START OFFSET TABLE FOR VCONS 04250002 DC AL2(CVTIPCDS-CVT) OFFSET FOR CVTIPCDS 04300002 DC AL2(CVTIPCRI-CVT) OFFSET FOR CVTIPCRI 04350002 DC AL2(CVTIPCRP-CVT) OFFSET FOR CVTIPCRP 04400002 DC AL2(CVTLFRM-CVT) OFFSET FOR CVTLFRM 04450002 DC AL2(CVTRMBR-CVT) OFFSET FOR CVTRMBR 04500002 DC AL2(CVTTCBP-CVT) OFFSET FOR CVTTCBP 04550002 DC AL2(CVT0EF00-CVT) OFFSET FOR CVT0EF00 04600002 DC AL2(CVT0VL00-CVT) OFFSET FOR CVT0VL00 04650002 DC AL2(CVT0DS-CVT) OFFSET FOR CVT0DS 04700002 DC AL2(CVTABEND-CVT) OFFSET FOR CVTABEND 04750002 DC AL2(CVT0VL01-CVT) OFFSET FOR CVT0VL01 04800002 DC AL2(CVTGETCL-CVT) OFFSET FOR CVTGETCL 04850002 DC AL2(CVTFRECL-CVT) OFFSET FOR CVTFRECL 04900002 DC AL2(CVTCRMN-CVT) OFFSET FOR CVTCRMN 04950002 DC AL2(CVTOPTE-CVT) OFFSET FOR CVTOPTE 05000002 DC AL2(CVTASCBH-CVT) OFFSET FOR CVTASCBH 05050002 DC AL2(CVTEXPRO-CVT) OFFSET FOR CVTEXPRO 05100002 DC AL2(CVTGSMQ-CVT) OFFSET FOR CVTGSMQ 05150002 DC AL2(CVTLSMQ-CVT) OFFSET FOR CVTLSMQ 05200002 DC AL2(CVTGSPL-CVT) OFFSET FOR CVTGSPL 05250002 DC AL2(CVTGLMN-CVT) OFFSET FOR CVTGLMN 05300002 DC AL2(CVTSPSA-CVT) OFFSET FOR CVTSPSA 05350002 DC AL2(CVTGMBR-CVT) OFFSET FOR CVTGMBR 05400002 GINDXTAB EQU * START OFFSET TABLE FOR GSDA 05450002 DC AL2(CVTASVT-CVT) OFFSET FOR CVTASVT 05500002 DC AL2(CVTPCCAT-CVT) OFFSET FOR CVTPCCT 05550002 DC AL2(CVTGDA-CVT) OFFSET FOR CVTGDA 05600002 DC AL2(CVTCSD-CVT) OFFSET FOR CVTCSD 05650002 DC AL2(CVTLCCAT-CVT) OFFSET FOR CVTLCCT 05700002 HBITON DC X'80' HIGH BIT ON FOR DUPLEX REFRESH 05750002 IHAGSDA 05800002 IHAASVT 05850002 IHALCCA 05900002 IHAPSA 05950002 IHAWSAVT DSECT=YES,CLASS=CPU 06000002 CVT DSECT=YES 06050002 END 06100002