TITLE 'PROLOG' 00052002 MACRO 00060002 PROLOG 00100002 TITLE 'PROLOGUE' 00110002 * /* START OF SPECIFICATIONS **** 00112002 * 00114002 *01* MODULE-NAME = IEAVESC0 00116002 * 00118802 *02* CSECT-NAME = IEAVESC1 00119202 * 00119702 *01* DESCRIPTIVE-NAME = SCHEDULE SERVICE ROUTINE 00119802 * 00129902 *01* COPYRIGHT = NONE 00139902 *01* STATUS = VS2, RELEASE 2.0 00146402 * 00146602 *01* FUNCTION = THE FUNCTION OF THIS MODULE IS TO COMPLETE THE 00159902 * SCHEDULING OPERATION INITIATED BY THE SCHEDULE MACRO. IT MOVES 00169902 * SRBS TO THE APPROPRIATE SERVICE PRIORITY LIST (SPL) AT THE 00170302 * SPECIFIED PRIORITY LEVEL. IT ALSO HANDLES OTHER FUNCTIONS 00170702 * INCLUDED IN INTRODUCING DISPATCHABLE WORK INTO THE SYSTEM,WHICH 00171102 * INCLUDES: 00171502 * 1. ALERTING A CPU DISPATCHED TO THE WAIT ADDRESS SPACE THAT 00171602 * THERE IS WORK TO BE DISPATCHED. 00171702 * 2. CALLING THE MEMORY SWITCH ROUTINE WHEN MAKING A SWAPPED-IN 00171802 * ADDRESS SPACE READY. 00173302 * 3. CALLING THE SRM WHEN A SWAPPED-OUT ADDRESS SPACE IS 00175302 * READY. 00177302 * 00177502 *02* OPERATION = 00179002 * GLOBAL SCHEDULE- 00181002 * 1. INPUT SRBS ARE QUEUED TO THE GLOBAL SPL. 00183002 * 2. IF THE WAIT ADDRESS SPACE IS DISPATCHED,THEN EVERY CPU 00183402 * DISPATCHED TO THE WAIT ADDRESS SPACE WILL BE SIGNALLED VIA 00183802 * THE RPSGNL FUNCTION. 00184202 * 00184602 * LOCAL SCHEDULE - 00184702 * 1. INPUT SRBS WILL BE QUEUED TO THE CORRECT LOCAL SPL. 00184802 * 2. IF AN SRB IS BEING SCHEDLED TO AN ADDRESS SPACE THAT IS 00184902 * ON THE IN-CORE QUEUE, THEN MEMORY SWITCH WILL BE INVOKED. 00185302 * 3. IF AN SRB IS BEING SCHEDULED TO A SWAPPED-OUT ADDRESS 00185702 * SPACE, THEN A SYSEVENT WILL BE ISSUED TO NOTIFY THE 00185802 * SRM THAT THE ADDRESS SPACE CAN BE SWAPPED IN. 00185902 * 00186102 * 00186502 *01* NOTES = 00186602 * 00188002 *02* DEPENDENCIES = 00189502 * 1. THE DISPATCHER LOCK MUST BE HELD ON ENTRY 00191502 * 2. THE PSW MUST BE SUPERVISOR STATE,KEY 0 00193502 * 00197002 *03* CHARACTER-CODE-DEPENDENCIES = NONE 00198502 * 00208502 *02* RESTRICTIONS = THIS ROUTINE MAY BE INVOKED BY ONLY THE 00214802 * DISPATCHER. HE MUST OWN THE GLOBAL DISPATCHER LOCK ON ENTRY. 00216802 * 00220702 *02* REGISTER-CONVENTIONS = SEE SEGMENT REGSTERS FOR DESCRIPTION OF 00221102 * REGISTER USAGE. 00221502 * 00222402 *02* PATCH-LABEL = NUCLEUS PATCH AREA 00222502 * 00228502 *01* MODULE-TYPE = PROCEDURE 00228902 * 00229702 *02* PROCESSOR = ASSEMBLER-370R 00230102 * 00237102 *02* MODULE-SIZE = 400 BYTES 00237502 * 00238102 *02* ATTRIBUTES = NUCLEUS ,ZERO PROTECT KEY, REFRESHABLE, 00238202 * SUPERVISOR MODE 00248202 * 00262102 *01* ENTRY-POINT = IEAVESC1 00264102 * 00265502 *02* PURPOSE = SCHEDULE GLOBAL PRIORITY SRBS 00265602 * 00271002 *02* LINKAGE = 00271402 * REGISTER 3 = RETURN ADDRESS TO DISPATCHER 00271802 * REGISTER 4 = ENTRY POINT OF IEAVESC1 00272202 * REGISTER 5 = A QUEUE OF SRBS REMOVED FROM THE GSMQ 00272302 * REGISTER 7 = ADDRESS OF LCCA. 00272402 * 00273602 * UPON RETURN , REGISTERS ARE AS FOLLOWS: 00275602 * R3,R7,R8,R9 = UNCHANGED 00279202 * R1,R1,R4-R6,R10-R15 = VOLATILE 00281202 * 00282002 *02* INPUT = NONE 00282802 * 00283802 *02* OUTPUT = NONE 00285602 * 00286002 *02* REGISTERS-SAVED = NONE 00287802 * 00288502 *02* REGISTER-USAGE = SEE SEGMENT 'REGSTERS' FOR DESCRIPTION OF 00289202 * REGISTER USAGE 00290202 * 00291202 *02* REGISTERS-RESTORED = NONE 00293002 * 00293402 *01* ENTRY-POINT = IEAVESC2 00294602 * 00295702 *02* PURPOSE = SCHEDULES LOCAL SRBS 00296702 * 00297702 *02* LINKAGE = 00299402 * REGISTERS ON ENTRY ARE AS FOLLOWS: 00300002 * R3 = RETURN REGISTER 00301602 * R4 = ENTRY POINT ADDRESS OF IEAVESC2 00302502 * R5 = POINTER TO A QUEUE OF SRBS REMOVED FROM THE LSMQ 00303402 * R7 = ADDRESS OF LCCA. 00304302 * 00305202 * REGISTERS ON RETURN ARE AS FOLLOWS: 00306502 * R3,R7-R9 = UNCHANGED 00307202 * R1,R2,R4-R6,R10-R15 = UNPREDICATABLE 00308002 * 00309002 *02* INPUT = NONE 00310002 * 00311002 *02* OUTPUT = NONE 00312502 * 00313502 *02* REGISTERS-SAVED = NONE 00314502 * 00315502 *02* REGISTER-USAGE = SEE SEGMENT 'REGSTERS' FOR DESCRIPTION 00316502 * 00317502 *02* REGISTERS-RESTORED = NONE 00318502 *01* EXIT-NORMAL = TO CALLER VIA BR 14 00319502 * 00320502 *02* CONDITIONS = 00321502 * 1. DISPATCHER LOCK HELD 00322502 * 2. SUPERVISOR STATE,KEY ZERO 00323502 * 00324502 *02* OUTPUT = SEE LINKAGE SECTION 00325502 * 00328502 *02* RETURN-CODES = NONE 00328902 *01* EXIT-ERROR = ABEND (SVC 13) 00330302 *02* CONDITIONS = IF AN INVALID SRB IS DETECTED, LOCAL SCHEDULE 00331302 * WILL ISSUE A X'C0D' ABEND WHICH WILL RESULT IN SCHEDULE 00332302 * RECOVERY GETTING CONTROL. THE RECOVERY ROUTINE WILL VALIDATE 00333302 * THE SRB QUEUES, REMOVING THE BAD ELEMENT AND RECORDING THE 00334302 * ERROR. THE SYSTEM WILL THEN RETRY THE OPERATION FROM THE 00335302 * DISPATCHER MAIN ENTRY POINT. 00336302 * 00337302 *02* OUTPUT = NONE 00338302 * 00340302 *01* EXTERNAL-REFERENCES = 00353202 * 00354402 *02* ROUTINES = 00354802 * 1. RPSGNL - USED TO SIGNAL CPU DISPATCHED TO WAIT TASK. 00356802 * 2. MEMORY SWITCH (IEAVEMS0) - INFORMS DISPATCHER THAT HIGHER 00358802 * PRIORITY WORK MAY BE AVAILABLE. 00359202 * 3. SYSEVENT - INFORMS SRM THAT A SWAPPED-OUT ADDRESS 00359602 * SPACE MAY HAVE READY WORK. 00360002 * 00360502 *02* DATA-AREAS = NONE 00360902 * 00362902 *02* CONTROL-BLOCKS = 00363202 * WORK SAVE AREA VECTOR TABLE - WSAVT - (R) 00363602 * SERVICE REQUEST BLOCK - SRB - (R/W) 00364002 * SERVICE PRIORITY LIST - SPL - (R/W) 00364402 * PHYSICAL CONFIGURATION COMMUNICATION AREA - PCCA -(R) 00364802 * COMMON SYSTEM DATA AREA - CSD - (R) 00366402 * PREFIXED STORAGE AREA - PSA - (R) 00368402 * ADDRESS SPACE CONTROL BLOCK - ASCB - (R/W) 00370402 * COMMUNICATIONS VECTOR TABLE - CVT - (R) 00370802 * LOGICAL CONFIGURATION COMMUNICATION AREA - LCCA -(R/W) 00371002 * 00371202 *01* TABLES = A 72-BYTE GLOBAL SAVE AREA IS PASSED TO THE SRM 00372802 * FOR THE SYSEVENT INTERFACE. IT IS POINTED TO BY WSAGSCHE. 00374802 * 00377602 *01* MACROS = 00379202 * SYSEVENT 00380802 * RPSGNL 00382402 * 00384002 *02* SERIALIZATION = NO LOCKS OBTAINED, BUT DISPATCHER LOCK IS 00385602 * OBTAINED TO SERIALIZE ON THE SPL AND SERVICE MANAGER QUEUES. 00387202 * 00388802 *01* CHANGE-ACTIVITY = 00390402 * S/D CODES: 00392402 * Y02715 - SERVICE MANAGER SUPPORT 00394402 * Y02751 - SUPERVISOR MP SUPPORT 00394802 * Y02752 - MULTIPLE ADDRESS SPACE SUPPORT 00394902 * 00395202 *01* MESSAGES = NONE 00396802 * 00397202 *01* ABEND-CODES = X'C0D' IS USED TO RECORD AN INVALID SRB 00398402 **** END OF SPECIFICATIONS ***/ 00400002 *********************************************************************** 04960002 * END PROLOG * 04970002 *********************************************************************** 04980002 MEND 05000002 TITLE 'MASKEQUS' 05010002 MACRO 05012002 MASKEQUS 05014002 TITLE 'EQUATES FOR MASKS' 05016002 *********************************************************************** 05020002 * MASKEQUS * 05100002 *********************************************************************** 05102002 * 05150002 * BIT MASKS 05200002 ON EQU X'FF' ON MASK 05210002 * 05250002 * ICM-STCM MASKS 05300002 B4 EQU 1 FOURTH BYTE 05350002 B3 EQU 2 THIRD BYTE 05400002 B2 EQU 4 SECOND BYTE 05450002 B1 EQU 8 FIRST BYTE 05500002 *********************************************************************** 05510002 * END OF MASK EQUATES * 05520002 *********************************************************************** 05530002 MEND 05550002 TITLE 'REGSTERS' 05560002 MACRO 05600002 REGSTERS 05650002 TITLE 'EQUATED REGISTERS' 05660002 *********************************************************************** 05710002 * REGISTER EQUATES * 05720002 *********************************************************************** 05730002 R0 EQU 0 REGISTER 0 05732002 WORKREG1 EQU 1 WORK REGISTER 05734002 R1 EQU 1 REGISTER 1 05740002 PSAPTR1 EQU 1 PSA BASE 05750002 PCCAPTR2 EQU 2 PCCA BASE 05800002 SRBPTR2 EQU 2 SRB BASE 05850002 RETREG3 EQU 3 RETURN REGISTER 05900002 BASEREG4 EQU 4 BASE REGISTER 05950002 HDRREG5 EQU 5 CONTAINS ADDR OF SRB LIST FROM DISPATCHER 06000002 ASCBPTR6 EQU 6 ASCB BASE 06150002 CPUID6 EQU 6 CPU COUNTER 06200002 LCCAPTR7 EQU 7 POINTS TO LCCA 06204002 ZERORGA EQU 10 USED FOR A ZERO COMPARE 06210002 MASKRGA EQU 10 CONTAINS ONLINE MASK 06220002 R13 EQU 13 REGISTER 13 06230002 LEVELRGF EQU 15 POINTS TO PRIORITY LEVEL 06250002 WRKREGF EQU 15 WORK REGISTER 06300002 R15 EQU 15 REGISTER 15 06302002 *********************************************************************** 06310002 * END OF REG EQUATES * 06320002 *********************************************************************** 06330002 MEND 06350002 TITLE 'MAPMACS' 06360002 MACRO 06400002 MAPMACS 06450002 TITLE 'MAPPING MACROS' 06460002 *********************************************************************** 06500002 * MAPPING MACROS * 06510002 *********************************************************************** 06520002 IHAWSAVT CLASS=GLOBAL 06530002 IHASRB 06550002 IHASPL 06600002 IHAPCCA 06650002 IHACSD 06700002 IHAPSA 06750002 IHAASCB 06760002 IHALCCA 06762002 CVT DSECT=YES,LIST=YES 06770002 USING FLC,PSAPTR1 06800002 USING SRBSECT,SRBPTR2 06900002 USING ASCB,ASCBPTR6 06950002 USING LCCA,LCCAPTR7 06960002 MEND 07000002 TITLE 'GLOBAL' 07010002 MACRO 07050002 GLOBAL 07100002 TITLE 'SCHEDULING GLOBAL SRBS' 07110002 *********************************************************************** 07120002 * * 07150002 * GLOBAL- * 07200002 * THIS ROUTINE IS THE MAINLINE CODE FOR SCHEDULING * 07250002 * A GLOBAL PRIORITY SRB. 07300002 * * 07350002 * INPUT- * 07400002 * REGS-SEE PROLOGUE * 07450002 * * 07500002 * FIELDS REF- * 07550002 * SRBFLNK-SRB FORWARD CHAIN FIELD * 07600002 * GLOBAL PRIORITY INDEX TABLE * 07650002 * * 07700002 * OUTPUT- * 07750002 * REGS-SEE PROLOGUE * 07800002 * * 07850002 * FIELDS CHG- * 07900002 * NONE * 07950002 * * 08000002 * SUBROUTINES/LOCAL MACROS- * 08050002 * QSRB- QUEUES AN SRB TO THE SPL * 08100002 * WAKEUP- SEARCHES FOR AND SIGNALS CPUS * 08150002 * DISPATCHED TO THE WAIT ADDRESS SPACE * 08200002 * SYSTEM INTERFACES- * 08250002 * NONE * 08300002 * * 08350002 *********************************************************************** 08360002 */*SCH02: CHART GLOBAL SCHEDULE */ 08361002 */*IEAVESC1: E GLOBAL SCHEDULE */ 08362002 */*GLOOP1: P DEQUEUE THE TOP SRB */ 08364002 */* P JOURNAL REMAINDER OF THE QUEUE */ 08365002 */* P CALCULATE THE PRIORITY OF THE SRB */ 08366002 */* S QSRB:QUEUE THE SRB TO THE SPL */ 08367002 */* D (YES,GLOOP1,NO,) ANY MORE SRB'S ON THE QUEUE? */ 08368002 */* D (NO,NOWAIT,YES,) WAIT ASCB DISPATCHED? */ 08369002 */* S WAKEUP:WAKE UP WAITING CPU'S */ 08370002 */*NOWAIT: R RETURN TO DISPATCHER */ 08371002 */*SCH02: END GLOBAL SCHEDULE */ 08386002 ENTRY IEAVESC1 08392002 IEAVESC1 DS 0H 08400002 USING *,BASEREG4 08450002 LR SRBPTR2,HDRREG5 GET ADDR OF TOP SRB 08500002 GLOOP1 L HDRREG5,SRBFLNK DEQUEUE THE TOP SRB 08550002 ST HDRREG5,LCCASMQJ JOURNAL QUEUE 08560002 SR LEVELRGF,LEVELRGF CLEAR REGISTER 08600002 ICM LEVELRGF,B4,SRBPRIOR GET THE PRIORITY VALUE 08650002 L LEVELRGF,GPIT(LEVELRGF) GET THE ADDRESS OF THE 08700002 * PRIORITY LEVEL 08750002 * QUEUE THE SRB TO THE SPL 08760002 QGLOBL QSRB 1 08770002 LTR SRBPTR2,HDRREG5 TEST FOR SRBS 08850002 BNZ GLOOP1 IF MORE,GO GET THEM 08900002 L ASCBPTR6,WAITASCB GET ADDR OF WAIT ASCB 08950002 TM ASCBCPUS+3,ON ANY CPUS DISPATCHED TO WAIT ASCB ? 09000002 BZ NOWAIT NO,THEN DONT WAKE UP CPUS 09050002 * SEARCH FOR CPUS DISPATCHED TO THE WAIT ADDRESS SPACE 09060002 WAKEUP 09100002 NOWAIT EQU * 09150002 BR RETREG3 RETURN TO DISPATCHER 09200002 *********************************************************************** 09210002 * END GLOBAL * 09220002 *********************************************************************** 09230002 MEND 09250002 TITLE 'LOCAL' 09260002 MACRO 09300002 LOCAL 09350002 *********************************************************************** 09400002 * LOCAL- 09450002 * THIS ROUTINE FINISHES THE SCHEDULING OF LOCAL 09500002 * PRIORITY SRBS. IT IS ENTERED FROM THE DISPATCHER AT ENTRY 09550002 * POINT IEAVESC2. IT MOVES SRBS FROM THE SERVICE MANAGER QUEUE 09600002 * TO THE CORRECT LOCAL SPL. IT WILL ALSO NOTIFY 09610002 * THE SRM WHEN AN SRB IS BEING SCHEDULED TO A 09620002 * SWAPPED OUT ADDRESS SPACE. IT WILL CALL MEMORY SWITCH ON 09630002 * A SCHEDULE TO A SWAPPED IN ADDRESS SPACE. 09640002 * INPUT- 09650002 * REGS-SEE PROLOG 09700002 * 09750002 * FIELDS- 09800002 * SRBFLNK - FIELD USED FOR QUEUEING. 09850002 * SRBPRIOR - INDICATES PRIORITY LEVEL OF SRB. 09900002 * SRBASCB - INDICATES THE ADDRESS SPACE BEING 09950002 * SCHEDULED TO 09970002 * 10050002 * LPIT - LOCAL PRIORITY INDEX TABLE. THIS IS AN 10100002 * INTERNAL TABLE WHICH INDICATES 10110002 * THE OFFSET OF A SPECIFIC PRIORITY LEVEL 10120002 * IN THE LOCAL SPL. 10130002 * ASCBNOQ - WHEN THIS BIT IS ON, THE ASCB IS NOT ON 10150002 * THE IN-CORE QUEUE. MEMORY SWITCH SHOULD NOT 10160002 * BE CALLED. 10170002 * ASCBSPL - CONTAINS THE ADDRESS OF THE LOCAL SPL. 10200002 * ASCBOUT - WHEN FLAG IS ON, A USERRDY SYSEVENT SHOULD BE 10250002 * ISSUED. 10270002 * OUTPUT 10300002 * REGS-SEE PROLGO 10350002 * SUBROUTINE/LOCAL MACROS- 10400002 * QSRB 10450002 * OPTINT 10500002 * MEMSW 10550002 *********************************************************************** 10600002 */*SCH03: CHART LOCAL SCHEDULE */ 10600702 */*IEAVESC2: E LOCAL SCHEDULE */ 10601402 */*LOCAL1: P DEQUEUE THE TOP SRB */ 10603502 */* P JOURNAL REMAINDER OF THE QUEUE */ 10604202 */* P FIND THE CORRECT LSPL */ 10604902 */* P GET ADDRESS OF THE CORRECT PROIRITY LEVEL */ 10605602 */* S QSRB:QUEUE SRB TO LSPL */ 10606302 */* D (NO,LOCAL2,YES,) ADDRESS SPACE SWAPPED OUT? */ 10607002 */* S OPTINT:INTERFACE WITH SRM */ 10607702 */*LOCAL2: D (NO,LOCAL3,YES,) IS ASCB ON IN-CORE QUEUE? */ 10608402 */* S MEMSW:CALL MEMORY SWITCH */ 10610002 */*LOCAL3: D (YES,LOCAL1,NO,) ANY MORE SRB'S? */ 10616002 */* R RETURN TO DISPATCHER */ 10622002 */*SCH03: END LOCAL SCHEDULE */ 10628002 SPACE 3 10634002 ENTRY IEAVESC2 10640002 IEAVESC2 DS 0H 10650002 USING *,BASEREG4 10700002 * X 10702002 L BASEREG4,BASEADDR LOAD BASE ADDRESS 10710002 USING IEAVESC1,BASEREG4 10720002 * DEQUEUE TOP SRB 10900002 LR SRBPTR2,HDRREG5 GET ADDR OF TOP SRB 10950002 LOCAL1 DS 0H 10958002 L ASCBPTR6,SRBASCB GET ASCB ADDRESS 10966002 L WORKREG1,ASCBASCB GET THE ASCB ACRONYM 10974002 C WORKREG1,CHARASCB IS IT VALID ? 10982002 BNE ABND1 IF NOT, CLEAN UP AND RECORD 10990002 L HDRREG5,SRBFLNK POP TOP SRB 11000002 ST HDRREG5,LCCASMQJ JOURNAL QUEUE 11010002 SR LEVELRGF,LEVELRGF CLEAR REG 11050002 ICM LEVELRGF,B4,SRBPRIOR PUT PRIORITY IN LOW ORDER BYTE 11100002 L LEVELRGF,LPIT(LEVELRGF) GET ENTRY IN LPIT 11150002 A LEVELRGF,ASCBSPL GET ADDR OF ENTRY IN LSPL 11250002 * QUEUE THE SRB TO THE LOCAL SPL 11300002 QLOCAL QSRB 2 11350002 * TEST FOR SWAP-OUT 11400002 TM ASCBRCTF,ASCBOUT SHOULD USERRDY BE ISSUED ? 11450002 BNO LOCAL2 NO, THEN SKIP 11500002 * INTERFACE WITH THE SRM 11502002 OPT1 OPTINT 11510002 LOCAL2 TM ASCBDSP1,ASCBNOQ IS ASCB ON THE IN-CORE QUEUE ? 11530002 BO LOCAL3 NO,THEN SKIP MEMSW 11540002 * INTERFACE WITH MEMORY SWITCH 11542002 MS1 MEMSW 11544002 LOCAL3 DS 0H 11546002 * CHECK FOR MORE SRBS 11550002 LTR SRBPTR2,HDRREG5 QUEUE EMPTY ? 11600002 BNZ LOCAL1 NO,THEN LOOP 11650002 BR RETREG3 RETURN TO THE DISPATCHER 11800002 * issue an abeND TO CLEAN UP THE QUEUE AND RECORD THE ERROR 11803002 ABND1 ABEND X'C0D',,,SYSTEM 11806002 *********************************************************************** 11810002 * END LOCAL ROUTINE * 11820002 *********************************************************************** 11830002 MEND 11850002 TITLE 'QSRB' 11860002 MACRO 11900002 &NAME QSRB &A 11950002 *********************************************************************** 12000002 * 12050002 * QSRB ROUTINE 12100002 * FUNCTION- 12150002 * QUEUE THE SRB TO A SPECIFIED LEVEL OF THE SPL. 12200002 * INPUT REGS 12250002 * BASEREG4 (R4) -BASE REGISTER 12300002 * LEVELRGF (R15) -ADDRESS OF ENTRY IN THE SPL. 12350002 * SRBPTR2 (R2) -ADDR OF SRB TO BE ENQUEUED 12400002 * OUTPUT- 12500002 * WORKREG1 (R1) -VOLATILE 12550002 * ZERORGA (R10) -SET TO ZERO 12700002 * FIELDS REF/CHG- 12800002 * SPLFSRB - ADDRESS OF FIRST SRB 12850002 * SPLLSRB - ADDRESS OF LAST SRB 12900002 * SRBFLNK-FORWARD CHAIN FIELD IN SRB 12950002 * 13000002 * SUBROUTINES/LOCAL MACROS-NONE 13050002 * 13100002 *********************************************************************** 13110002 SPACE 3 13130000 */*SCH11: CHART SCHEDULE QSRB */ 13131002 */*QSRB: E QSRB */ 13132002 */* D (NO,NOTFST,YES,) QUEUE EMPTY? */ 13133002 */* P (,ENDNF) STORE SRB ADDRESS INTO SPLFSRB / SPLLSRB */ 13134002 */*NOTFST: P STORE ADDRESS OF SRB INTO SPLLSRB */ 13135002 */* P STORE ADDRESS OF SRB INTO THE LAST SRB */ 13136002 */*ENDNF: P STORE ZERO INTO THE CHAIN OF QUEUED SRB'S */ 13137002 */* R RETURN */ 13138002 */*SCH11: END SCHEDULE QSRB */ 13139002 SPACE 3 13140002 USING SPLENTRY,LEVELRGF 13150002 &NAME SR ZERORGA,ZERORGA CLEAR REG 13200002 C ZERORGA,SPLLSRB QUEUE EMPTY ? 13250002 BNE NOTFST&A NO,THEN BRANCH 13300002 * QUEUE TO AN EMPTY QUEUE 13350002 ST SRBPTR2,SPLFSRB SET FIRST SRB POINTER 13400002 ST SRBPTR2,SPLLSRB SET LAST SRB POINTER 13450002 B ENDNF&A GO TO ENDNF 13500002 * QUEUE TO NON-EMPTY QUEUE 13550002 NOTFST&A L WORKREG1,SPLLSRB GET ADDRESS OF LAST SRB 13600002 ST SRBPTR2,SRBFLNK-SRBSECT(WORKREG1) STORE SRB ADDR IN 13650002 * LAST SRB 13700002 ST SRBPTR2,SPLLSRB STORE ADDRESS OF LAST SRB 13750002 * ZERO SRBFLNK IN LAST SRB 13850002 ENDNF&A ST ZERORGA,SRBFLNK ZERO SRBFLNK 13950002 MEND 14000002 TITLE 'WAKEUP' 14010002 MACRO 14050002 &NAME WAKEUP 14100002 *********************************************************************** 14120002 * WAKEUP- 14150002 * THIS ROUTINE SEARCHES FOR CPUS DISPATCHED TO THE WAIT ASCB. 14200002 * IT SIGNALS THOSE WAITING CPUS,EXCLUSIVE OF THE CURRENT CPU. 14250002 * 14300002 * INPUT 14350002 * REGS-BASEREG4 (R4) 14400002 * FIELDS- 14450002 * CVTPTR-LOC 16-ADDR OF CVT 14500002 * CVTCSD-ADDR OF CSD 14550002 * CVTPCCAT- ADDR OF PCCA VECTOR TABLE 14600002 * CSDCPUAL-THE ALIVE CPU MASK 14750002 * PSACPUPA-PHYSICAL ADDR OF CPU 14800002 * PCCAVT-VECTOR TABLE * 14900002 * PCCAPSAV-VIRTUAL ADDR OF PSA * 14950002 * OUTPUT * 15000002 * R0,R1,R2,R6,R10,R14,R15-VOLATILE * 15050002 * R3-R5,R7-R9,R11-R13- UNCHANGED * 15100002 * SUBROUTINES/MACROS * 15350002 * RPSIG- IS CALLED TO SIGNAL A SPECIFIC CPU TO * 15400002 * GET IT OFF THE WAIT ASCB. IT IS PASSED THE * 15450002 * PCCA ENTRY ADDR AS INPUT. * 15500002 * * 15550002 * SYSTEM INTERFACES-NONE * 15600002 *********************************************************************** 15610002 SPACE 3 15612000 */*SCH12: CHART SCHEDULE WAKEUP */ 15614002 */*WAKEUP: E WAKEUP */ 15616002 */* P GET CPU ALIVE MASK FROM CSD */ 15618002 */* P SET CPUID=0 */ 15620002 */*WKUPL1: D (NO,NOMORE,YES,) ANY MORE CPU'S? */ 15622002 */* D (NO,NOL,YES,) CURRENT CPU IN SCAN ALIVE? */ 15624002 */* D (YES,NOL,NO,) IS IT MY OWN CPU? */ 15626002 */* P GET ADDRESS OF PSA FOR CPU IN SCAN */ 15628002 */* D (NO,NOL,YES,) IS THE CPU WAITING? */ 15630002 */* S RPSIG:SIGNAL THE CPU */ 15632002 */*NOL: P (,WKUPL1) GET NEXT CPU */ 15634002 */*NOMORE: R RETURN */ 15636002 */*SCH12: END SCHEDULE WAKEUP */ 15650002 SPACE 3 15653000 &NAME DS 0H 15656002 USING PCCA,PCCAPTR2 15660002 SR CPUID6,CPUID6 SET COUNTER TO ZERO 15700002 L MASKRGA,CVTPTR GET CVT ADDR 15750002 L MASKRGA,CVTCSD-CVT(MASKRGA) GET CSD ADDR 15800002 L MASKRGA,CSDCPUAL-CSD(MASKRGA) GET ALIVE MASK 15850002 ICM MASKRGA,B3+B4,HW0 ZERO LOW ORDER BYTES 15900002 * START LOOP THROUGH CPUS 15950002 WKUPL1 EQU * 16000002 ALR MASKRGA,MASKRGA EST HI ORDER BIT AND SHIFT LEFT 16050002 BZ NOMORE WHOLE REG IS ZERO,NO MORE ALIVE CPUS 16100002 BM NOL HI ORDER BIT ZERO,NOT ALIVE 16150002 * CPU IS ALIVE 16200002 DROP PSAPTR1 16210002 USING FLC,0 16220002 ONLINE CH CPUID6,PSACPUPA IS IT THIS CPU? 16250002 DROP 0 16254002 USING FLC,PSAPTR1 16260002 BE NOL YES,THEN SKIP 16300002 LR PCCAPTR2,CPUID6 GET CPUID 16350002 SLL PCCAPTR2,2 MULTIPLY BY FOUR 16400002 L WRKREGF,CVTPTR GET CVT ADDR 16450002 L WRKREGF,CVTPCCAT-CVT(WRKREGF) GET ADDR OF PCCAVT 16500002 L PCCAPTR2,0(PCCAPTR2,WRKREGF) GET ADDR OF PCCA 16550002 L PSAPTR1,PCCAPSAV GET ADDR OF PSA 16600002 CLC PSAAOLD,WAITASCB IS IT WAIT ASCB ? 16650002 BNE NOL NO,THEN SKIP 16700002 * SIGNAL THE CPU 16750002 SIGNAL RPSIG 16800002 * GET NEXT CPU 16850002 NOL LA CPUID6,1(CPUID6) ADD ONE TO COUNTER 16900002 B WKUPL1 TRY AGAIN 16950002 NOMORE EQU * NO MORE CPUS 17000002 USING SRBSECT,SRBPTR2 17010002 *********************************************************************** 17020002 * END WAKEUP ROUTINE * 17030002 *********************************************************************** 17042002 MEND 17050002 TITLE 'MEMSW' 17060002 MACRO 17100002 &NAME MEMSW 17150002 *********************************************************************** 17160002 * MEMSW- * 17200002 * THIS ROUTINE INTERFACES WITH MEMORY SWITCH. * 17250002 * SINCE THE SCHEDULING OF THE SRB MAY BE INTRODUCING 17260002 * DISPATCHABLE WORK INTO THE ADDRESS SPACE, MEMORY SWITCH 17270002 * MUST BE INVOKED TO INSURE THAT THE HIGHEST PRIORITY ADDRESS 17280002 * SPACES ARE BEING DISPATCHED. 17290002 * IT RECOGNIZES IF THE SCHEDULED SRB HAS CPU AFFINITY. IF * 17300002 * SO, MEMORY SWITCH IS INFORMED THAT THE NEW WORK MAY ONLY RUN 17350002 * ON THE SPECIFIED CPUS. 17360002 * * 17400002 * INPUT- * 17450002 * REGISTERS * 17500002 * ASCBPTR6 (R6) -CONTAINS ADDR OF READIED ASCB. * 17550002 * BASEREG4 (R4) - BASE REGISTER * 17600002 * SRBPTR2 (R2) - ADDR OF SRB BEING SCHEDULED. 17700002 * FIELDS- * 17850002 * SRBCPAFF-CONTAINS CPU AFFINITY DESCRIPTION * 17900002 * * 17950002 * OUTPUT- * 18000002 * R0,R14,R15,R1-VOLATILE * 18050002 * * 18100002 * SUBROUTINES/MACRO CALLS-NONE * 18200002 * INTERFACES- IEAVEMS0 (MEMORY SWITCH) * 18250002 *********************************************************************** 18260002 SPACE 3 18263000 */*SCH13: CHART SCHEDULE MEMSW */ 18266002 */*MEMSW: E MEMSW */ 18269002 */* P PLACE ASCB ADDRESS IN REG 1 */ 18272002 */* D (NO,NOAFF,YES,) SRB HAS CPU AFFINITY? */ 18275002 */* P PLACE AFFINITY MASK IN REG 0 */ 18278002 */* P COMPLEMENT REG 1 */ 18281002 */*NOAFF: L IEAVEMS0:CALL MEMORY SWITCH */ 18284002 */* R RETURN */ 18287002 */*SCH12: END SCHEDULE MEMSW */ 18290002 SPACE 3 18293002 &NAME LA R1,0(ASCBPTR6) PUT ASCB ADDR IN R1 18300002 CLC SRBCPAFF,HW0 DOES SRB HAVE AFFINITY 18350002 BZ NOAFF NO AFFINITY 18400002 * 18450002 * CPU AFFINITY 18500002 LH R0,SRBCPAFF GET AFFINITY INDICATOR 18550002 LCR R1,R1 COMPLEMENT ASCB ADDRESS 18600002 * 18650002 NOAFF EQU * 18700002 L R15,MSADDR GET ADDR OF IEAVEMS0 18750002 BALR 14,15 CALL IEAVEMS0 18800002 *********************************************************************** 18810002 * END OF MEMSW ROUTINE * 18820002 *********************************************************************** 18830002 MEND 18850002 TITLE 'OPTINT' 18860002 MACRO 18900002 &NAME OPTINT 18950002 *********************************************************************** 18960002 * OPTINT- * 19000002 * THIS ROUTINE INTERFACES WITH SRM. * 19050002 * IT ISSUES THE USERRDY SYSEVENT AND TURNS OFF THE * 19100002 * LONG WAIT FLAG TO INDICATE TO TIMER MANAGER THAT THE * 19150002 * ADDRESS SPACE IS NO LONGER IN LONG WAIT. * 19160002 * * 19200002 * INPUT REGS- * 19250002 * ASCBPTR6 (R6) -ADDR OF ASCB OF A.S. MADE READY * 19300002 * FIELDS REF- * 19400002 * CVTPTR (LOCATION 16) -ADDR OF CVT * 19450002 * CVTOPTE- ADDR OF SYSEVENT BRANCH ENTRY * 19500002 * ASCBASID- ASID FOR ADDRESS SPACE MADE READY * 19550002 * OUTPUT REGS * 19650002 * R0,R1,R13,R14,R15-VOLATILE * 19700002 * FIELDS CHG- * 19800002 * ASCBTMLW- LONG WAIT BIT TURNED OFF * 19850002 *********************************************************************** 19860002 SPACE 3 19861002 */*SCH14: CHART SCHEDULE OPTINT */ 19862002 */*OPTINT: E OPTINT */ 19863002 */* P TURN OFF LONG WAIT INDICATOR ASCBTMLW */ 19864002 */* P PLACE ADDRESS OF SAVE AREA IN RB */ 19865002 */* P PLACE ASID IN REG 0 */ 19866002 */* L SYSEVENT USERRDY,ASID=(0),ENTRY=BRANCH */ 19867002 */* R RETURN */ 19868002 */*SCH14: END SCHEDULE OPTINT */ 19870002 SPACE 3 19880002 * * 19890002 &NAME DS 0H 19920002 L R15,ASCBFW1 GET WORD WITH LONG WAIT BIT 19970002 &NAME.1 LR R13,R15 20020002 N R13,OFFTMLW TURN OFF LONG WAIT BIT 20070002 CS R15,R13,ASCBFW1 STORE BACK IF UNCHANGED 20120002 BNE &NAME.1 IF NOT SUCCESSFUL,TRY AGAIN 20130002 * GET ADDRESS OF SAVE AREA NEEDED FOR SYSEVENT 20140002 L R13,CVTPTR 20150002 L R13,CVTSPSA-CVT(R13) 20150402 L R13,WSAGSCHE-WSAG(R13) 20150802 ICM R0,B3+B4,ASCBASID GET ASID FOR INTERFACE 20151202 SYSEVENT USERRDY,ASID=(0),ENTRY=BRANCH 20151602 *********************************************************************** 20152002 * END OPTINT ROUTINE * 20154002 *********************************************************************** 20156002 MEND 20160002 TITLE 'RPSIG' 20170002 MACRO 20200002 &NAME RPSIG 20250002 *********************************************************************** 20260002 * RPSIG- * 20300002 * THIS ROUTINE CALLS IPC TO SIGNAL THE CPU DISPATCHED * 20350002 * TO THE WAIT TASK. THIS IS DONE TO CAUSE AN EXTERNAL 20400002 * INTERRUPT ON THE CPU IN THE WAIT STATE,THEREBY CAUSING 20450002 * IT TO ENTER THE DISPATCHER. 20460002 * INPUT-REGS- * 20500002 * PCCAPTR2 (R2) -CONTAINS ADDR OF PCCA * 20550002 * FOR CPU BEING SIGNALLED. * 20600002 * FIELDS REF- NONE * 20650002 * OUTPUT REGS * 20750002 * R0,R1,R14,R15-VOLATILE * 20800002 * OTHERS UNCHANGED * 20850002 * SUBROUTINES/LOCAL MACROS-NONE * 20950002 * INTERFACES- * 21050002 * IPC VIA RPSGNL MACRO * 21100002 * * 21150002 *********************************************************************** 21160002 SPACE 3 21165002 */*SCH21: CHART SCHEDULE RPSIG */ 21170002 */*RPSIG: E RPSIG */ 21175002 */* L ISSUE RPSGNL SWITCH TO WAITING CPU */ 21180002 */* R RETURN */ 21185002 */*SCH21: END SCHEDULE RPSIG */ 21190002 SPACE 3 21195002 &NAME RPSGNL SWITCH,CPU=0(PCCAPTR2) 21200002 *********************************************************************** 21210002 * END RPSIG ROUTINE * 21220002 *********************************************************************** 21230002 MEND 21250002 TITLE 'ACONS' 21260002 MACRO 21300002 ACONS 21350002 *********************************************************************** 21360002 * ASSEMBLED CONSTANTS * 21400002 * * 21450002 *********************************************************************** 21460002 FW0 DS 0F FULLWORD OF ZEROES 21500002 HW0 DC H'0' 21550002 DC H'0' 21600002 CHARASCB DC C'ASCB' USED FOR ASCB VALIDITY CHECK 21605002 BASEADDR DC A(IEAVESC1) BASE ADDRESS 21610002 * VCONS 21650002 MSADDR DC V(IEAVEMS0) ADDR OF MEMORY SWITCH ROUTINE 21700002 WAITASCB DC V(IEAWASCB) ADDR OF WAIT ASCB 21710002 * TABLES 21720002 * GLOBAL PRIORITY INDEX TABLE 21730002 GPIT DS 0A 21740002 DC V(IEASMSY) ADDR OF SYSTEM PRIORITY LEVEL 21742002 DC V(IEASMNQ) ADDR OF NONQ PRIORITY LEVEL 21744002 * LOCAL PRIORITY INDEX TABLE 21746002 LPIT DS 0A 21748002 DC A(LSPLSYS-LSPL) OFFSET OF SYSTEM LEVEL 21748402 DC A(LSPLNQ-LSPL) OFFSET OF NONQ LEVEL 21748802 * MISCELLANEOUS 21750002 * THIS WORD IS UESED TO TURN OFF THE LONG WAIT BIT 21752002 OFFTMLW DS 0A 21760002 DC XL2'FFFF' 21770002 DC AL1(255-ASCBTMLW) 21780002 DC XL1'FF' 21790002 MEND 21800002 EJECT 21802002 MACRO 21810002 MAINLINE 21820002 *********************************************************************** 21830002 * THIS IS THE MAINLINE * 21840002 *********************************************************************** 21842002 START 21892002 PROLOG PROLOGUE 21900002 REGSTERS REGISTER EQUATES 21950002 MAPMACS MAPPING MACROS 22000002 MASKEQUS EQUATED CONSTANTS AND MASKS 22050002 IEAVESC0 CSECT 22060002 IEAVESC0 MODID BR=NO 22070002 GLOBAL GLOBAL SCHEDULE ROUTINE 22100002 LOCAL LOCAL SCHEDULE ROUTINE 22150002 ACONS ASSEMBLED CONSTANTS 22200002 MEND 22210002 *********************************************************************** 22212002 * END OF MAINLINE * 22214002 *********************************************************************** 22216002 MAINLINE 22230002 END 22250002 *********************************************************************** 22300002