TITLE 'IEAVEMS0 - PROLOGUE' 00060002 * /* START OF SPECIFICATIONS **** 00110002 * 00120002 *01* MODULE-NAME = IEAVEMS0 00150002 * 00200002 *02* CSECT-NAME = IEAVEMS0 00250002 * 00300002 *01* DESCRIPTIVE-NAME = MEMORY SWITCH 00350002 * 00400002 *01* COPYRIGHT = NONE 00450002 * 00500002 *01* STATUS = CHANGE LEVEL 0 00550002 * 00600002 *01* FUNCTION = THIS MODULE NOTIFIES THE DISPATCHER THAT IT SHOULD 00650002 * SWITCH INTO ANOTHER ADDRESS SPACE OR START SEARCHING FOR WORK AT 00700002 * THE TOP OF THE ASCB DISPATCHING QUEUE BY MODIFYING THE "PSAANEW" 00710002 * FIELD. WHEN THE INPUT TO THIS MODULE IS AN ASCB ADDRESS, IT 00720002 * SEARCHES FOR THE CPU RUNNING THE LOWEST PRIORITY ADDRESS 00730002 * SPACE AND, IF THE INPUT ASCB IS OF HIGHER PRIORITY, STORES THE 00740002 * INPUT ASCB ADDRESS INTO THE "PSAANEW" FIELD OF THE CHOSEN CPU. 00742002 * WHEN THE INPUT TO THIS MODULE IS ZERO (IN THE INPUT REGISTER - 00744002 * ONE), IT STORES ZEROS INTO THE "PSAANEW" FIELDS OF ALL THE CPU'S. 00744402 * IT THEN SIGNALS THE CPU(S) TO ENTER THE DISPATCHER. WHEN THE 00744802 * DISPATCHER SCANS FOR WORK, THE "PSAANEW" AND "PSAAOLD" FIELDS 00745202 * WILL BE DIFFERENT, AND, IF THERE IS AN ASCB ADDRESS IN "PSAANEW", 00745602 * THE DISPATCHER WILL SWITCH TO THE NEW ADDRESS SPACE. IF THERE IS 00745702 * A ZERO IN "PSAANEW", THE DISPATCHER WILL SCAN FROM THE TOP OF THE 00745802 * ASCB DISPATCHING QUEUE TO FIND THE HIGHEST PRIORITY READY ADDRESS 00745902 * SPACE. 00759402 * 00786502 *02* OPERATION = THIS MODULE USES THE "CPU'S ALIVE" MASK (CSDCPUAL) 00800002 * TO DETERMINE THE CPUS WHICH ARE AVAILABLE TO EXECUTE IN THE 00850002 * ADDRESS SPACE. THE 16-BIT MASK IS LOADED INTO THE HIGH ORDER 00900002 * TWO BYTES OF A REGISTER, AN "ALR" INSTRUCTION IS DONE ON THE 00950002 * REGISTER AND THE CONDITION CODE INIDCATES WHETHER OR NOT THE 00960002 * CPU IS AVAILABLE. THE PCCA VECTOR TABLE IS ALSO SCANNED AT 00962002 * THE SAME TIME AND THE CORRESPONDING ENTRY IS PICKED UP WHEN 00972002 * THE CONDITION CODE INDICATES THAT THERE IS A CPU ALIVE. THE 00982002 * PCCA IS USED TO ADDRESS THE PSA'S OF OTHER CPU'S TO ACCESS THE 00992002 * "PSAANEW" FIELDS. THE SEQUENCE NUMBER OF THE ASCB WHOSE 00994002 * ADDRESS APPEARS IN "PSAANEW" IS COMPARED AGAINST THE SEQUENCE 00996002 * NUMBER OF THE ASCB WHICH WAS INPUT TO MEMORY SWITCH. IF THE 00998002 * SEQUENCE OF "PSAANEW"'S ASCB IS HIGHER THAN THE INPUT ASCB, IT 00998402 * IS OF LOWER PRIORITY AND THEREFORE CAN BE PREEMPTED BY THE NEW 00998802 * ADDRESS SPACE. IF THE CPU CHOSEN TO BE PREEMPTED IS OTHER 00999202 * THAN THE CURRENT CPU ON WHICH MEMORY SWITCH IS RUNNING, THE 00999602 * CPU IS SIGNALLED TO REENTER THE DISPATCHER THROUGH THE IPC 00999702 * FUNCTION. 00999802 * 01000002 *01* NOTES = REGISTER 9 IS USED AS A BASE REGISTER, REGISTER 10 IS 01050002 * USED TO ADDRESS THE CVT, REGISTER 11 IS USED TO ADDRESS THE 01060002 * PCCAVT AND REGISTER 12 IS USED AS THE BASE ADDRESS FOR THE CSD. 01062002 * REGISTERS 2 THROUGH 14 ARE SAVED INTO THE GLOBAL SAVE AREA 01070002 * SET ASIDE FOR MEMORY SWITCH. REGISTERS 0,1 AND 15 ARE NOT 01080002 * RETURNED TO THE CALLER. 01090002 * 01100002 *02* DEPENDENCIES = THE GLOBAL DISPATCHER LOCK MUST BE HELD ON 01150002 * ENTRY TO MEMORY SWITCH BECAUSE THE "PSAANEW" FIELDS ARE 01200002 * CONTROLLED UNDER THE LOCK. 01250002 * 01400002 *03* CHARACTER-CODE-DEPENDENCIES = MEMORY SWITCH IS CHARACTER 01450002 * CODE INDEPENDENT. 01500002 * 01600002 *02* RESTRICTIONS = NONE 01650002 * 01700002 *02* REGISTER-CONVENTIONS = THIS TOPIC IS COVERED UNDER THE SECTION 01800002 * ENTITLED "CSECT - EQUATES". 01850002 * 02000002 *02* PATCH-LABEL = NUCLEUS PATCH AREA 02050002 * 02200002 *01* MODULE-TYPE = PROCEDURE 02250002 * 02350002 *02* PROCESSOR = ASSEMBLER-370R 02400002 * 02450002 *02* MODULE-SIZE = SEE MODULE ESD LISTING FOR SIZE 02500002 * 02650002 *02* ATTRIBUTES = NUCLEUS|DISABLED|ZERO PROTECT KEY|REFRESHABLE| 02700002 * FIXED|SUPERVISOR MODE 02750002 * 02950002 *01* ENTRY-POINT = IEAVEMS0 03000002 * 03250002 *02* PURPOSE = MAIN MEMORY SWITCH ENTRY POINT - ENTERED TO CAUSE 03300002 * THE ROUTINE TO INDICATE A MEMORY SWITCH. 03350002 * 03400002 *02* LINKAGE = REGISTER ONE MAY CONTAIN EITHER AN ASCB ADDRESS, A 03450002 * COMPLEMENTED ASCB ADDRESS OR ZERO. IF REGISTER ONE IS 03500002 * COMPLEMENTED, REGISTER ZERO MUST CONTAIN THE CPU AFFINITY MASK 03550002 * INDICATING THE CPU(S) ON WHICH THIS ADDRESS SPACE IS TO RUN. 03600002 * REGISTER 14 CONTAINS THE RETURN ADDRESS. 03610002 * 03650002 *02* INPUT = NONE OTHER THAN THE REGISTERS LISTED UNDER "LINKAGE". 03700002 * 03750002 *02* OUTPUT = THE "PSAANEW" FIELD(S) MAY BE MODIFIED EITHER TO ZERO 04000002 * OR TO THE ADDRESS OF THE INPUT ASCB. 04050002 * 04100002 *02* REGISTERS-SAVED = 2 - 14 ARE SAVED INTO THE GLOBAL SAVE AREA 04150002 * SET ASIDE FOR MEMORY SWITCH. 04200002 * 04250002 *02* REGISTER-USAGE = REGISTER ZERO MAY CONTAIN THE CPU AFFINITY 04300002 * INDICATOR, REGISTER ONE WILL CONTAIN EITHER AN ASCB ADDRESS OR 04350002 * ZERO, REGISTER NINE IS USED AS A BASE REGISTER, REGISTER TEN 04360002 * IS USED TO ADDRESS THE CVT, REGISTER ELEVEN IS USED TO ADDRESS 04370002 * THE PCCAVT, REGISTER TWELVE IS USED TO ADDRESS THE CSD, 04380002 * REGISTER THIRTEEN IS USED TO KEEP TRACK OF THE REGISTER SAVE 04390002 * AREA ADDRESS, AND THE OTHER REGISTERS ARE USED AS WORK 04392002 * REGISTERS. 04394002 * 04400002 *02* REGISTERS-RESTORED = REGISTERS 2 THROUGH 14. 04450002 * 04550002 *01* ENTRY-POINT = IEAVEMS1 04560002 * 04594002 *02* PURPOSE = THIS ENTRY POINT IS USED BY IPC (SWITCH) FOR THE 04596002 * SOLE PURPOSE OF CAUSING THE CPU TO GO THROUGH THE DISPATCHER. 04598002 * WHEN AN "IPC SWITCH" IS ISSUED ON ONE CPU, THE IPC SERVICE 04598102 * ROUTINE WILL CAUSE AN EXTERNAL INTERRUPT ON THE OTHER CPU. 04598202 * WHEN THE EXTERNAL FLIH IS ENTERED IT WILL PASS CONTROL TO THE 04598302 * IPC RECEIVING ROUTINE WHICH WILL DETERMINE THE TYPE OF 04598402 * FUNCTION REQUESTED AND PASS CONTROL TO ENTRY POINT IEAVEMS1. 04598802 * IEAVEMS1 SIMPLY RETURNS ON REGISTER 14 TO IPC WHICH EXITS 04599202 * THROUGH THE EXTERNAL FLIH WHICH, IN TURN, EXITS TO THE 04599302 * DISPATCHER. THE DISPATCHER WILL THEN CHECK FOR AN ADDRESS 04601202 * SPACE SWITCH INDICATION BY TESTING "PSAANEW" AGAINST 04603202 * "PSAAOLD". 04605502 * 04608202 *02* LINKAGE = IEAVEMS1 IS ENTERED BY A BRANCH AND LINK ON 14,15. 04610502 * IT CLEARS 15 AND BRANCHES IMMEDIATELY BACK ON 14. THE ONLY 04612502 * CALLER OF THIS FUNCTION IS IPC. 04614502 * 04619702 *02* INPUT = REGISTER 14 CONTAINS THE RETURN ADDRESS. 04622002 * 04632602 *02* OUTPUT = REGISTER 15 IS SET TO ZERO. 04633002 * 04633202 *02* REGISTERS-SAVED = NONE 04638802 * 04640802 *02* REGISTER-USAGE = REGISTER 14 IS THE RETURN REGISTER. 04643202 * 04644002 *02* REGISTERS-RESTORED = NONE NEEDED 04644102 * 04644202 *01* EXIT-NORMAL = RETURN TO CALLER ON REGISTER 14. 04644402 * 04800002 *02* CONDITIONS = RETURN TO CALLER ON REGISTER 14. 04850002 * 04950002 *02* OUTPUT = NONE 05000002 * 05050002 *02* RETURN-CODES = NONE 05300002 * 05350002 *01* EXIT-ERROR = NONE 05550002 * 05600002 *01* EXTERNAL-REFERENCES = DEFINED UNDER ROUTINES-CONTROL BLOCKS 06500002 * 06650002 *02* ROUTINES = IEAVERP - TO CAUSE ANOTHER CPU TO ENTER IEAVEMS1 06700002 * WHICH WILL EVENTUALLY CAUSE IT TO ENTER THE DISPATCHER. THE 06750002 * LINKAGE IS GENERATED BY THE "RPSGNL" MACRO AND IS A BALR 14, 06800002 * 15. 06810002 * 06850002 *02* DATA-AREAS = WSAGEMS0 - MEMORY SWITCH REGISTER SAVE AREA. 06900002 * 07150002 *02* CONTROL-BLOCKS = ASCB(R), CVT(R), CSD(R), LCCA(R), PCCA(R), 07200002 * PCCAVT(R), PSA(R/W). 07200402 * 07450002 *01* TABLES = NONE 07500002 * 07550002 *01* MACROS = RPSGNL AND MODID 07700002 * 07850002 *02* SERIALIZATION = THE GLOBAL DISPATCHER LOCK MUST BE HELD ON 07900002 * ENTRY TO MEMORY SWITCH AND IS HELD THROUGHOUT IT'S PROCESSING. 07950002 * 08050002 *01* CHANGE-ACTIVITY = SUPPORT CODES - Y02751,Y02752,Y02715 08100002 * = APARS -OZ30882-WHEN PSAANEW IS ZERO AND REG1 08106040 * IS NON-ZERO, RETURN TO CALLER. 08112040 * -CODE FOR @YM03564 WAS DELETED 08118040 * 08124040 * OZ18849-ISSUE SIGP FOR OTHER PROCESSOR 08130040 * IF INPUT ASCB IS OF HIGHER 08136040 * DISPATCHING PRIORITY. 08142040 * 08150000 *01* MESSAGES = NONE 08300002 * 08350002 *01* ABEND-CODES = NONE 08600002 * 08650002 **** END OF SPECIFICATIONS ***/ 08800002 TITLE 'IEAVEMS0 - CSECT - EQUATES' 09650002 IEAVEMS0 CSECT 09800002 SPACE 4 09850002 */*IEAVEMS0: CHART MEMORY SWITCH */ 09900002 */* HEADER 09950002 */* 10000002 */* 10050002 */* 10100002 */* SECTION: 3.1.8.3 10150002 */* MEMORY SWITCH 10200002 */* PAGE # */ 10250002 */*IEAVEMS0: E ENTRY */ 10300002 SPACE 4 10350002 * REGISTER EQUATES 10400002 R0 EQU 0 INPUT CPU AFFINITY INDICATOR 10450002 R1 EQU 1 INPUT ASCB ADDRESS 10500002 R2 EQU 2 WORK REGISTER 10550002 R3 EQU 3 WORK REGISTER 10600002 R4 EQU 4 WORK REGISTER 10650002 R5 EQU 5 WORK REGISTER 10700002 R6 EQU 6 WORK REGISTER 10750002 R7 EQU 7 WORK REGISTER 10800002 R8 EQU 8 INDEX REGISTER 10850002 R9 EQU 9 BASE REGISTER 10900002 RA EQU 10 CVT ADDRESS REGISTER 10950002 RB EQU 11 PCCA ADDRESS REGISTER 11000002 RC EQU 12 CSD ADDRESS REGISTER 11050002 RD EQU 13 SAVE AREA ADDRESS REGISTER 11100002 RE EQU 14 RETURN ADDRESS REGISTER 11150002 RF EQU 15 REGISTER USED TO ACCESS SAVE AREA 11200002 * MISCELLANEOUS EQUATES 11250002 MSI1 EQU 1 INDEX 1 11300002 MSL0 EQU 0 LENGTH 0 11350002 MSL1 EQU 1 LENGTH 1 11360002 MSL2 EQU 2 LENGTH 2 11400002 MSL4 EQU 4 LENGTH 4 11450002 MSMSK3 EQU 3 MASK 1/2 11500002 MSMSK4 EQU 4 MASK 4 11550002 MSMSK8 EQU 8 MASK 8 11600002 MSMSK12 EQU 12 MASK 8/4 11650002 TITLE 'IEAVEMS0 - MAINLINE CODE' 11700002 USING FLC,R0 FLC/PSA ADDRESSING. 11850002 SPACE 2 11860002 */* D (NO,MS01,YES,) IS THIS A UNIPROCESSOR? */ 11870002 SPACE 2 11880002 L RF,CVTPTR CVT ADDRESS 11890002 USING CVT,RF CVT ADDRESSABILITY 11892002 L RF,CVTCSD CSD ADDRESS 11894002 DROP RF DROP CVT ADDRESSABILITY 11896002 USING CSD,RF CSD ADDRESSABILITY 11898002 CLI CSDCPUOL+MSL1,X'01' TEST FOR ONE CPU 11898402 DROP RF DROP CSD ADDRESSABILITY 11898802 BALR RF,0 ESTABLISH BRANCHING CAPABILITY 11899202 * NOTE: THE BALR INSTRUCTION DOES NOT CHANGE THE CONDITION CODE. 11899602 USING *,RF ESTABLISH MODULE ADDRESSABILITY 11899702 BNE MS01 NOT ONE CPU. GO TO MP SWITCH. 11899802 SPACE 2 11900002 */* D (YES,MS00,NO,) IS INPUT REG 1 EQUAL ZERO? */ 11910002 SPACE 2 11920002 LPR R1,R1 TEST FOR ZERO AND MAKE SURE OF POSI- 11930002 * TIVE ASCB ADDRESS. 11942002 BZ MS00 ZERO. GO TO SET PSAANEW EQUAL ZERO. 11944002 SPACE 2 11946002 */* D (NO,RETURN,YES,) IS INPUT ASCB HIGHER PRIORITY? */ 11948002 SPACE 2 11948402 USING ASCB,R1 ASCB ADDRESSABILITY. 11948802 L RF,PSAANEW CURRENT ASCB TO DISPATCH. 11949202 LTR RF,RF IS PSAANEW ZERO? @ZA30882 11949340 BZR RE YES - RETURN @ZA30882 11949440 DROP RF DROP MODULE ADDRESSABILITY. 11949602 CLC ASCBSEQN(MSL2),ASCBSEQN-ASCB(RF) COMPARE SEQUENCE NBRS. 11949702 BNLR RE HIGH OR EQUAL - RETURN. 11949802 SPACE 2 11949902 */*MS00: P (,RETURN) STORE REGISTER ONE INTO PSAANEW. */ 11953902 SPACE 2 11955902 MS00 DC 0H'0' 11958002 ST R1,PSAANEW SET PSAANEW TO NEW ADDRESS. 11960402 SPACE 2 11960802 */*RETURN: R RETURN */ 11961202 SPACE 2 11961602 BR RE RETURN. 11961702 SPACE 4 11961802 IEAVEMS0 MODID BR=NO MODULE IDENTIFICATION 11961902 EJECT 11962002 */*MS01: P SAVE REGISTERS 2 THROUGH 14 IN WSAC */ @Z40FPXN 11966040 SPACE 2 11970002 MS01 DC 0H'0' 11980002 SPACE 11990002 L RF,PSALCCAV * @Z40FPXN 11991040 USING LCCA,RF * @Z40FPXN 12011040 L RF,LCCACPUS * SAVE @Z40FPXN 12031040 USING WSAC,RF * REGISTERS @Z40FPXN 12051040 L RF,WSACCWSA * @Z40FPXN 12071040 DROP RF * @Z40FPXN 12091040 STM R2,RE,MSL0(RF) * @Z40FPXN 12111040 LR RD,RF * @Z40FPXN 12131040 SPACE 2 12450002 */* P ESTABLISH MODULE BASE - REGISTER 9 */ 12500002 SPACE 2 12550002 BALR R9,R0 BASE 12600002 USING *,R9 REGISTER. 12650002 SPACE 2 12700002 */* P ESTABLISH ADDRESSABILITY TO CVT, PCCAVT AND CSD */ 12750002 SPACE 2 12800002 L RA,FLCCVT CVT ADDRESS 12950002 USING CVT,RA 13000002 SPACE 13050002 L RB,CVTPCCAT PCCA VECTOR TABLE ADDRESS 13100002 SPACE 13150002 L RC,CVTCSD CSD ADDRESS 13200002 USING CSD,RC 13250002 SPACE 13300002 SR R8,R8 CLEAR INDEX REGISTER. 13350002 MST00 DC 0H'0' *** TEST LABEL *** 13400002 SPACE 2 13450002 */* P GET CPU'S ALIVE MASK FROM THE CSD */ 13500002 SPACE 2 13550002 ICM R8,MSMSK12,CSDCPUAL CPU'S ALIVE MASK. 13600002 SPACE 2 13650002 */* D (YES,MS013,NO,MS02) IS INPUT REGISTER ONE ZERO? */ 13700002 SPACE 2 13750002 LTR R1,R1 TEST FOR TYPE OF REQUEST 13800002 BNZ MS02 AN ASCB ADDRESS IS INPUT. GO TO 13850002 * SECTION WHICH HANDLES. 13900002 MST01 DC 0H'0' *** TEST LABEL *** 13950002 B MS013 GO TO BEGIN SCAN. 14000002 SPACE 2 14050002 */*MS012: P INDEX TO NEXT PCCAVT ENTRY */ 14100002 SPACE 2 14150002 MS012 DC 0H'0' ENTER FOR LOOP THROUGH PCCAVT. 14200002 LA RB,MSL4(RB) INDEX TO NEXT PCCAVT ENTRY. 14250002 SPACE 2 14300002 */*MS013: D (CRY,MS015,NCRY,MS012,END,) TEST FOR CPU'S ONLINE */ 14350002 SPACE 2 14400002 MS013 DC 0H'0' BEGIN SCAN ENTER. 14450002 ALR R8,R8 TEST FOR CPU'S ONLINE. 14500002 BC MSMSK3,MS015 CARRY. FOUND ACTIVE CPU. 14550002 MST02 DC 0H'0' *** TEST LABEL *** 14600002 BC MSMSK4,MS012 NO CARRY. NOT ZERO. TRY AGAIN. 14650002 * FALL THROUGH TO MS014 ON NO CARRY, ZERO - NONE LEFT. 14700002 SPACE 2 14750002 */*MS014: P RESTORE REGISTERS 2 THROUGH 14 */ 14800002 SPACE 2 14850002 MS014 DC 0H'0' EXIT POINT. 14900002 LM R2,RE,MSL0(RD) RESTORE REGISTERS. 14950002 MST02A DC 0H'0' *** TEST LABEL *** 15000002 SPACE 2 15050002 */* R RETURN */ 15100002 SPACE 2 15150002 BR RE RETURN. 15200002 SPACE 4 15250002 */*MS015: P GET PCCA ADDRESS FROM PCCAVT */ 15300002 SPACE 2 15350002 MS015 DC 0H'0' ENTER FOR ALIVE CPU. 15400002 L R6,MSL0(RB) GET PCCA ADDRESS FROM PCCAVT. 15450002 SPACE 2 15500002 */* D (NO,MS016,YES,) IS THIS MY CPU? */ 15550002 SPACE 2 15600002 C R6,PSAPCCAV IS THIS MY CPU? 15650002 BNE MS016 NO. GO TO SEE IF SIGP IS NECESSARY. 15700002 MST03 DC 0H'0' *** TEST LABEL *** 15750002 SPACE 2 15800002 */* P (,MS012) SET MY "PSAANEW" TO ZERO */ 15850002 SPACE 2 15900002 L R4,PSAANEW CURRENT VALUE OF 'ANEW' @Z40FPXN 15950040 MST03B CS R4,R1,PSAANEW REPLACE CURR 'ANEW' WITH 0 @Z40FPXN 15960040 BNZ MST03B IF FAILED, TRY AGAIN @Z40FPXN 15970040 B MS012 GO TO TRY NEXT ENTRY. 16000002 SPACE 2 16050002 */*MS016: P GET OTHER CPU'S PSA BASE */ 16100002 SPACE 2 16150002 MS016 DS 0H'0' ENTER FOR CPU OTHER THAN MINE. 16200002 USING PCCA,R6 PCCA ADDRESSING. 16250002 L R5,PCCAPSAV OTHER CPU'S PSA BASE. 16300002 SPACE 2 16350002 */* P STORE ZERO INTO CPU'S "PSAANEW" FIELD */ 16400002 SPACE 2 16450002 MS016A CS RE,R1,PSAANEW-FLC(R5) REPLACE ANEW WITH ZERO @Z40FPXN 16480040 BNZ MS016A IF FAILED, TRY AGAIN @Z40FPXN 16490040 SPACE 2 16550002 */* P GET ADDRESS OF OTHER CPU'S LCCA */ 16600002 SPACE 2 16650002 L R4,PSALCCAV-FLC(R5) LCCA ADDRESS OF OTHER CPU. 16700002 USING LCCA,R4 OTHER CPU'S LCCA ADDRESSING. 16750002 SPACE 2 16800002 */* D (YES,MS012,NO,MS017) IS OTHER CPU IN SRB MODE? */ 16850002 SPACE 2 16900002 TM LCCADSF2,LCCASRBM IS OTHER CPU IN SRB MODE. 16950002 BO MS012 YES. GO TO TRY NEXT PCCAVT ENTRY. 17000002 SPACE 2 17007002 */*MS017: S SWITCH:RPSGNL TO OTHER CPU */ 17100002 SPACE 2 17150002 MS017 DC 0H'0' ENTER FOR SIGP TO OTHER CPU. 17200002 LR R1,R6 PCCA ADDRESS. 17250002 MST03A DC 0H'0' *** TEST LABEL *** 17300002 RPSGNL SWITCH,CPU=(1) SIGNAL OTHER CPU. 17350002 MST04 DC 0H'0' *** TEST LABEL *** 17400002 SPACE 2 17450002 */* P (,MS012) RESET REGISTER ONE TO ZERO */ 17500002 SPACE 2 17550002 SR R1,R1 RESTORE REGISTER ONE. 17600002 B MS012 GO TO TRY NEXT ENTRY. 17650002 EJECT 17700002 */*MS02: D (NO,MS021,YES,) IS CPU AFFINITY SPECIFIED? */ 17750002 SPACE 2 17800002 MS02 DC 0H'0' ENTER FOR ASCB ADDRESS IN REG 1. 17850002 * CONDITION CODE SET BY PREVIOUS LTR BEFORE ENTRY TO MS02. 17900002 BH MS021 R1 IS POSITIVE. NO AFFINITY. BYPASS 17950002 MST05 DC 0H'0' *** TEST LABEL *** 18000002 SPACE 2 18050002 */* P (,MS0215) RECOMPLEMENT ASCB ADDRESS */ 18100002 SPACE 2 18150002 LCR R1,R1 RE-COMPLEMENT REGISTER 1 (ASCB ADDR) 18200002 B MS0215 CONTINUE. 18250002 SPACE 2 18300002 */*MS021: P CLEAR REG 0 TO INDICATE NO AFFINITY */ 18350002 SPACE 2 18400002 MS021 DC 0H'0' 18450002 SR R0,R0 INDICATE NO AFFINITY. 18500002 SPACE 2 18550002 */*MS0215: P (,MS0225) CLEAR WORK REGISTER FOR CHOSEN ASCB */ 18600002 SPACE 2 18650002 MS0215 DC 0H'0' 18700002 SR R7,R7 CLEAR WORK REG FOR CHOSEN ASCB. 18750002 B MS0225 START TO SCAN PCCAVT. 18800002 SPACE 2 18850002 */*MS022: P INDEX TO NEXT PCCAVT ENTRY */ 18900002 SPACE 2 18950002 MS022 DC 0H'0' ENTER FOR LOOP THROUGH PCCAVT. 19000002 LA RB,MSL4(RB) INDEX TO NEXT ENTRY. 19050002 SPACE 2 19100002 */*MS0225: D (CRY,MS023,NCRY,MS022,END,MS030) TEST FOR ALIVE CPU */ 19150002 SPACE 2 19200002 MS0225 DC 0H'0' 19250002 ALR R8,R8 TEST FOR ALIVE CPU. 19300002 BC MSMSK3,MS023 CARRY. ACTIVE CPU FOUND. 19350002 MST06 DC 0H'0' *** TEST LABEL *** 19400002 BC MSMSK4,MS022 NO CARRY. NOT ZERO. TRY AGAIN. 19450002 MST07 DC 0H'0' *** TEST LABEL *** 19500002 B MS030 NO CARRY. ZERO. DONE. 19550002 SPACE 2 19600002 */*MS023: P GET PCCA ADDRES FROM PCCA VECTOR TABLE */ 19650002 SPACE 2 19700002 MS023 DC 0H'0' 19750002 L R6,MSL0(RB) GET PCCA ADDRESS. 19800002 SPACE 2 19850002 */* D (YES,MS024,NO,) IS THIS MY CPU? */ 19900002 SPACE 2 19950002 C R6,PSAPCCAV IS THIS MY CPU? 20000002 BE MS024 YES. GO TO CLEAR PSA BASE. 20050002 MST08 DC 0H'0' *** TEST LABEL *** 20100002 SPACE 2 20150002 */* P (,MS025) GET OTHER CPU'S PSA ADDRESS */ 20200002 SPACE 2 20250002 USING PCCA,R6 PCCA ADDRESSING. 20300002 L R5,PCCAPSAV OTHER CPU'S PSA. 20350002 B MS025 GO TO GET "ANEW". 20400002 SPACE 2 20450002 */*MS024: P CLEAR PSA ADDRESS FOR MY CPU ADDRESSING */ 20500002 SPACE 2 20550002 MS024 DC 0H'0' ENTER FOR MY CPU. 20600002 SR R5,R5 USE BASE ZERO. 20650002 SPACE 2 20700002 */*MS025: P GET "PSAANEW" */ 20750002 SPACE 2 20800002 MS025 DC 0H'0' 20850002 L RF,PSAANEW-FLC(R5) GET ASCB "NEW". 20900002 SPACE 2 20950002 */* D (YES,MS022,NO,) IS IT ZERO? */ 21000002 SPACE 2 21050002 C RF,MSZEROS IS IT ZERO? 21100002 BE MS022 YES. LEAVE IT. TRY NEXT. 21150002 MST09 DC 0H'0' *** TEST LABEL *** 21200002 SPACE 2 21250002 */* D (LO,MS022,HI,MS027,EQU,) TEST "PSAANEW" SEQ VS INPUT SEQ */ 21300002 SPACE 2 21350002 CLC ASCBSEQN-ASCB(MSL2,RF),ASCBSEQN-ASCB(R1) TEST FOR 21400002 * FOUND ASCB SEQN GTR/LESS/EQU 21450002 * TO INPUT ASCB. 21500002 BL MS022 LOWER SEQ. HGHR PRTY. TRY NEXT. 21550002 MST10 DC 0H'0' *** TEST LABEL *** 21600002 BH MS027 HIGHER SEQ. CAN BE PREEMPTED. 21650002 MST11 DC 0H'0' *** TEST LABEL *** 21700002 SPACE 2 21750002 */* P GET LCCA ADDRESS */ 21800002 SPACE 2 21850002 L R4,PSALCCAV-FLC(R5) EQUAL. GET LCCA ADDRESS. 21900002 USING LCCA,R4 LCCA ADDRESSING. 21950002 SPACE 2 22000002 */* D (YES,MS022,NO,MS027) IS EQU PRTY CPU IN SRB MODE? */ 22050002 SPACE 2 22100002 TM LCCADSF2,LCCASRBM IS EQU PRTY ASCB IN SRB MODE. 22150002 BO MS022 YES. GO TO TRY NEXT. 22200002 SPACE 2 22250002 */*MS027: D (NO,MS028,YES,) TEST FOR PREVIOUSLY CHOSEN ASCB */ 22300002 SPACE 2 22350002 MS027 DC 0H'0' 22400002 LTR R7,R7 TEST FOR PREVIOUSLY CHOSEN ASCB. 22450002 BZ MS028 NO. CONTINUE. 22500002 MST12 DC 0H'0' *** TEST LABEL *** 22550002 SPACE 2 22600002 */* D (LOEQ,MS022,HI,MS028) TEST NEW ASCB SEQ VS PREVIOUS ASCB */ 22650002 SPACE 2 22700002 CLC ASCBSEQN-ASCB(MSL2,RF),ASCBSEQN-ASCB(R7) TEST FOR 22750002 * NEW ASCB OF LOWER SEQUENCE. 22800002 BNH MS022 LOWER SEQN. HIGHER PRI. GET NEXT. 22850002 SPACE 2 22900002 */*MS028: D (NO,MS029,YES,) TEST FOR CPU AFFINITY */ 22950002 SPACE 2 23000002 MS028 DC 0H'0' 23050002 LTR R0,R0 TEST FOR CPU AFFINITY. 23100002 BZ MS029 NO. CONTINUE. 23150002 MST13 DC 0H'0' *** TEST LABEL *** 23200002 SPACE 2 23250002 */* P GET CPU AFFINITY MASK FROM THE PCCA */ 23300002 SPACE 2 23350002 LH RE,PCCACAFM GET CPU AFFINITY BIT MASK. 23400002 SPACE 2 23450002 */* D (NO,MS022,YES,MS029) DOES AFFINITY MATCH REG 0? */ 23500002 SPACE 2 23550002 NR RE,R0 TEST FOR AFFINITY. 23600002 BZ MS022 NO. GO TRY NEXT. 23650002 SPACE 2 23700002 */*MS029: P (,MS022) SAVE ASCB AND PCCA ADDRESSES */ 23750002 SPACE 2 23800002 MS029 DC 0H'0' 23850002 LR R7,RF ASCB ADDRESS TO WORK. 23900002 LR R3,R6 PCCA ADDRESS TO SAVE. 23950002 B MS022 GO TO TRY NEXT. 24000002 DROP R4,R6 24050002 SPACE 4 24100002 */*MS030: D (NO,MS031,YES,) HAS A CPU BEEN FOUND? */ 24150002 SPACE 2 24200002 MS030 DC 0H'0' 24250002 LTR R7,R7 HAS A CPU BEEN FOUND. 24300002 BZ MS031 NO. GO TO EXIT. 24350002 MST14 DC 0H'0' *** TEST LABEL *** 24400002 SPACE 2 24450002 */* D (YES,MS0305,NO,) IS IT MY CPU? */ 24500002 SPACE 2 24550002 C R3,PSAPCCAV IS THIS MY CPU? 24600002 BE MS0305 YES. GO TO SAVE ASCB IN MY PSA. 24650002 MST15 DC 0H'0' *** TEST LABEL *** 24700002 SPACE 2 24750002 */* P STORE INPUT ASCB ADDRESS INTO CHOSEN CPU'S PSAANEW FIELD */ 24800002 SPACE 2 24850002 L R5,PCCAPSAV-PCCA(R3) PSA ADDRESS OF FOUND CPU. 24900002 MST15A DC 0H'0' @Z40FPXN 24901040 CS R7,R1,PSAANEW-FLC(R5) UPDATE ANEW WITH NEW ASCB ADDR 24902040 * UNLESS ANEW HAS CHANGED@Z40FPXN 24903040 BZ MST15B UPD WAS SUCCESSFUL @Z40FPXN 24903740 LTR R7,R7 UPD WAS NOT SUCCESSFUL AND 24904440 * HAS ANEW BEEN REPLACED WITH ZEROS? 24906040 * @Z40FPXN 24906540 BZ MS031 YES, EXIT @Z40FPXN 24907040 CLC ASCBSEQN-ASCB(MSL2,R7),ASCBSEQN-ASCB(R1) NO, COMPARE 24908040 * PRIORITY OF NEW ANEW WITH THE ONE 24909040 * YOU WERE GOING TO REPLACE @Z40FPXN 24910140 BH MST15A NEW ANEW IS LOWER, SO TRY AGAIN 24911040 * @Z40FPXN 24911540 MST15B DC 0H'0' @Z40FPXN 24912040 SPACE 2 25000002 */* D (YES,MS031,NO,) IS THE CPU IN SRB MODE? */ 25050002 SPACE 2 25100002 L R4,PSALCCAV-FLC(R5) LCCA ADDRESS. 25150002 TM LCCADSF2-LCCA(R4),LCCASRBM IS CPU IN SRB MODE? 25200002 BO MS031 YES. GO TO EXIT. 25250002 SPACE 2 25257002 */* D (NO,MS031,YES,) IS READY ASCB HIGHER DISP PRTY ? */ 25264040 SPACE 2 25270040 L RE,PSAAOLD-FLC(R5) CURRENT ASCB @Z40FPXN 25276040 CLC ASCBDP-ASCB(MSL1,RE),ASCBDP-ASCB(R1) @ZA18849 25282040 BNL MS031 AOLD HIGHER PRTY, AVOID SIGP @ZA18849 25288040 MST16 DC 0H'0' *** TEST LABEL *** 25300002 SPACE 2 25350002 */* S (,MS031) SWITCH:RPSGNL TO OTHER CPU */ 25400002 SPACE 2 25450002 LR R1,R3 PCCA ADDRESS FOR OTHER CPU. 25500002 MST16A DC 0H'0' *** TEST LABEL *** 25550002 RPSGNL SWITCH,CPU=(1) SIGNAL OTHER CPU. 25600002 MST17 DC 0H'0' *** TEST LABEL *** 25650002 B MS031 GO TO RETURN. 25700002 SPACE 2 25750002 */*MS0305: P STORE INPUT ASCB ADDRESS INTO MY PSAANEW FIELD */ 25800002 SPACE 2 25850002 MS0305 DC 0H'0' ENTER FOR MY CPU. 25900002 CS R7,R1,PSAANEW UPDATE MY ANEW UNLESS 25904040 * IT HAS CHANGED @Z40FPXN 25908040 BZ MS031 UPDATE SUCCESSFUL, EXIT @Z40FPXN 25910040 LTR R7,R7 UPDATE NOT SUCCESSFUL, 25916040 * HAS ANEW BEEN REPLACED WITH 0'S? 25920040 * @Z40FPXN 25922040 BZ MS031 YES, EXIT @Z40FPXN 25924040 CLC ASCBSEQN-ASCB(MSL2,R7),ASCBSEQN-ASCB(R1) NO, COMPARE 25928040 * PRIORITY OF THE NEW 25932040 * ANEW WITH THE ONE 25933040 * YOU WERE GOING TO REPLACE IT WITH 25936040 * @Z40FPXN 25938040 BH MS0305 NEW ANEW IS LOWER IN PRIORITY, SO 25940040 * GO TRY AGAIN @Z40FPXN 25944040 SPACE 2 26000002 */*MS031: P RESTORE REGISTERS 2 THROUGH 14 */ 26050002 SPACE 2 26100002 MS031 DC 0H'0' 26150002 LM R2,RE,MSL0(RD) RESTORE REGISTERS. @Z40FPXN 26200040 MST18 DC 0H'0' *** TEST LABEL *** 26250002 SPACE 2 26300002 */* R RETURN */ 26350002 SPACE 2 26400002 BR RE RETURN 26450002 EJECT 26500002 MSZEROS DC F'0' ZERO 26550002 TITLE 'IEAVEMS0 - IEAVEMS1 ENTRY' 26600002 *********************************************************************** 26650002 * * 26700002 * IEAVEMS1 - ENTERED FROM THE RPSGNL PROCESSOR OF IPC WHEN * 26750002 * THE SWITCH OPTION IS SPECIFIED. THIS ROUTINE RETURNS * 26800002 * DIRECTLY TO IPC VIA A BR 14 FOR THE SOLE PURPOSE OF * 26850002 * RETURNING THROUGH THE EXTERNAL INTERRUPT HANDLER WHICH * 26900002 * IN TURN WILL RETURN THROUGH THE DISPATCHER WHICH WILL * 26950002 * PICK UP THE ADDRESS SPACE SWITCH INDICATION BY TESTING * 27000002 * THE PSAANEW FIELD TO SEE IF IT IS DIFFERENT FROM * 27050002 * PSAAOLD OR HAS BEEN MADE ZERO. * 27100002 * * 27150002 *********************************************************************** 27200002 SPACE 4 27250002 IEAVEMS1 CSECT 27300002 SR RF,RF CLEAR RETURN CODE INDICATION. 27350002 BR RE RETURN. 27400002 SPACE 4 27450002 TITLE 'IEAVEMS0 - LCCA' 27500002 IHALCCA 27550002 TITLE 'IEAVEMS0 - PCCA' 27600002 IHAPCCA 27650002 TITLE 'IEAVEMS0 - WSAVT' 27700002 IHAWSAVT DSECT=YES,CLASS=CPU 27750040 TITLE 'IEAVEMS0 - FLC/PSA' 27800002 IHAPSA 27850002 TITLE 'IEAVEMS0 - PCCA VECTOR TABLE' 27900002 IHAPCCAT 27950002 TITLE 'IEAVEMS0 - CVT' 28000002 CVT DSECT=YES,LIST=YES 28050002 TITLE 'IEAVEMS0 - ASCB' 28100002 IHAASCB 28150002 TITLE 'IEAVEMS0 - CSD' 28200002 IHACSD 28250002 TITLE 'IEAVEMS0 - END' 28300002 */* END */ 28400002 END 28450002