* /* START OF SPECIFICATIONS **** 00050040 * 00100040 *01* MODULE NAME = IEAVRT02 00150040 * 00200040 *02* CSECT-NAME = IEAVRT02 00250040 * 00300040 *01* DESCRIPTIVE NAME = TIMER SUPERVISION SETDIE ROUTINE 00350040 * 00400040 *01* COPYRIGHT = NONE 00450040 * 00500040 *01* STATUS = NEW 00550040 * 00600040 *01* FUNCTION = WILL INITIALIZE A SYSTEM PROGRAM SUPPLIED TQE AND 00650040 * ENQUEUE IT UPON THE SYSTEM'S REAL TIME QUEUE. THE TQE 00700040 * WILL HAVE BIT TQEDIE ON TO DISTINGUISH IT FROM STIMER 00750040 * BUILT TQE'S. THE TIMER SUPERVISION SLIH (MODULE 00800040 * IEAVRTI0) WILL RECOGNIZE THESE TQE'S AND GIVE THE 00850040 * SPECIFIED EXIT ROUTINE (CALLED A DIE) CONTROL DIRECTLY 00900040 * 00950040 *02* OPERATION = THE MAIN ENTRY POINT TO THIS MODULE IS IEAVRDIE. 01000040 * WHEN ENTERED, IT WILL SAVE REGISTERS 2 THRU 12 AND 01050040 * 14 IN THE SUPPLIED TQE. FIELDS TQETQE, TQEFLGS, 01100040 * TQEFLGS2, AND TQEFLGS3 ARE THEN INITIALIZED. 01150040 * A STCK CLOCK IS THEN ISSUED AND THIS VALUE IS ADDED 01200040 * TO THE USER'S INTERVAL IN TQEVAL TO GET THE CLOCK 01250040 * COMPARATOR VALUE. NOTE - IF THE STCK IS NOT 01300040 * SUCCESSFUL, ENTRY POINT IEAVROCL IN THIS MODULE 01350040 * WILL BE USED IN AN ATTEMPT TO GET A VALID TOD CLOCK 01400040 * READING FROM ANOTHER CPU THAT MIGHT BE IN THE 01450040 * CONFIGUATION. 01500040 * AFTER TQEVAL IS CALCULATED, THE DISPATCHER 01550040 * LOCK IS UNCONDITIONALLY OBTAINED. THE TQE IS THEN 01600040 * ENQUEUED UPON THE SYSTEM'S REAL TIME QUEUE BY MEANS 01650040 * ON THE TQE ENQUEUE ROUTINE IN MODULE IEAVRTI0. THE 01700040 * DISPATCHER LOCK IS THEN RELEASED IF IT WAS NOT 01750040 * ALREADY HELD BY THE CALLER. RETURN IS THEN MADE TO 01800040 * THE CALLER. 01850040 * 01900040 *01* NOTES = SEE BELOW 01950040 * 02000040 *02* DEPENDENCIES = THE DISPATCHER LOCK IS OBTAINED TO ENQUEUE THE 02050040 * CALLER'S TQE. 02100040 * 02150040 *03* CHARACTER CODE DEPENDENCIES = NONE 02200040 * 02250040 *02* RESTRICTIONS = NONE 02300040 * 02350040 *02* REGISTER CONVENTIONS = REGISTER 1= TQE POINTER (INPUT) 02400040 * REGISTER 1= PCCA POINTER FOR IEAVROCL 02405040 * REGISTER 3= CVT POINTER 02410040 * REGISTER 5= CSD POINTER 02420040 * REGISTER 6= BASE REGISTER FOR SETDIE 02450040 * REGISTER 13= BASE REGISTER FOR IEAVROCL 02460040 * REGISTER 15= RETURN CODE REGISTER 02500040 * 02550040 *02* PATCH LABEL = NONE 02600040 * 02650040 *01* MODULE TYPE = BAL CSECT 02700040 * 02750040 *02* PROCESSOR = ASSEM 02800040 * 02850040 *02* MODULE SIZE = APPROXIMATELY 300 BYTES 02900040 * 02950040 *02* ATTRIBUTES = NUCLEUS 03000040 * SUPERVISOR MODE 03050040 * PROTECT KEY ZERO 03100040 * REFRESHABLE 03150040 * 03200040 *01* ENTRY POINT = IEAVRDIE (FIRST OF THREE) 03250040 * 03300040 *02* PURPOSE = MAIN ENTRY POINT FOR THE SETDIE FUNCTION 03350040 * 03400040 *02* LINKAGE = BRANCH ENTERED BY CALLER. THE ENTRY POINT IS IN 03450040 * FIELD TPCSDIE IN THE TPC. 03500040 * 03550040 *02* INPUT = 1. SUPERVISOR STATE 03600040 * 2. KEY ZERO 03650040 * 3. REGISTER 1 = TQE ADDRESS. THE TQE MUST BE 128 03700040 * BYTES IN SQA. THE USER MUST 03750040 * SUPPLY HIS DIE ADDRESS IN TQEEXIT 03800040 * AND HIS INTERVAL IN TQEVAL. 03850040 * 4. REGISTERS 2 THRU 12 = PARAMATER REGISTERS 03860040 * FOR DIE ENTRY. 03870040 * 5. REGISTER 14= RETURN ADDRESS 03900040 * 03920040 *02* OUTPUT = 1. RETURN CODE IN REGISTER 15 03950040 * 0 = TQE WAS SUCCESSFULLY ENQUEUED 04000040 * 4 = FAILURE - TQE NOT ENQUEUED 04050040 * 04070040 *02* REGISTERS SAVED/RESTORED = REGISTERS 1 THRU 10 04100040 * 04150040 *01* ENTRY POINT = IEAVROCL (SECOND OF THREE) 04200040 * 04250040 *02* PURPOSE = TO OBTAIN THE CORRECT TOD IF THERE EXISTS AT 04300040 * LEAST ONE USABLE TOD CLOCK IN THE SYSTEM. 04350040 * 04400040 *02* LINKAGE = BRANCH ENTERED BY CALLER. THE ENTRY POINT IS IN 04450040 * FEALD TPCOCL IN THE TPC. 04500040 * 04550040 *02* INPUT = 1. SUPERVISOR STATE 04600040 * 2. KEY ZERO 04650040 * 3. REGISTER 11 = ADDRESS OF 8 BYTE STCK AREA. 04700040 * THIS AREA MUST BE ADDRESSABLE 04710040 * FROM ANY MEMORY. 04720040 * 4. REGISTER 14= RETURN ADDRESS 04750040 * 04800040 *02* OUTPUT = TOD CLOCK VALUE IN SUPPLIED AREA IF SUCCESSFUL. 04850040 * ZEROS IN AREA IF NOT SUCCESSFUL. 04900040 * 04950040 *02* REGISTERS SAVED/RESTORED = REGISTERS 4 THRU 11 05000040 * 05050040 *01* ENTRY POINT = IEAVRTAP (THIRD OF THREE) 05100040 * 05150040 *02* PURPOSE = TO CAUSE A CPU TO STORE ITS TOD CLOCK IN 05200040 * RESPONSE TO A REQUEST FROM IEAVROCL. 05250040 * 05300040 *02* LINKAGE = FROM EMERGENCY SIGNAL SLIH VIA IPC REQUEST. 05350040 * 05400040 *02* INPUT = 1. SUPERVISOR STATE 05450040 * 2. KEY 0 05500040 * 3. R1=ADDRESS OF AN 8 BYTE STCK AREA. 05550040 * THIS AREA MUST BE ADDRESSABLE FROM 05560040 * ANY MEMORY. 05570040 * 4. R14=RETURN ADDRESS 05600040 * 5. R15=ENTRY POINT 05620040 * 05650040 *02* OUTPUT = TOD CLOCK VALUE IN SUPPLIED AREA IF SUCCESSFUL. 05700040 * ZEROES IN AREA IF NOT SUCCESSFUL. 05750040 * 05800040 *01* EXIT-NORMAL =ALL THREE ENTRY POINTS RETURN TO THE CALLER VIA 05850040 * THE SUPPLIED RETURN ADDRESS IN REGISTER 14. 05900040 * 05950040 *01* EXIT-ERROR = ALL THREE ENTRY POINTS RETURN TO THE CALLER AS IN 06000040 * THE NORMAL CASE EVEN IF THE REQUESTED FUNCTION 06050040 * COULD NOT BE PERFORMED. AN APPROPRIATE ERROR 06100040 * INDICATOR IS PROVIDED HOWEVER - SEE OUTPUT FOR 06150040 * EACH ENTRY POINT. THERE ARE NO ABEND EXITS. 06200040 * 06250040 *01* EXTERNAL REFERENCES = SEE BELOW 06300040 * 06350040 *02* ROUTINES = 1. LOCK MGR - TO OBTAIN AND RELEASE DISP LOCK 06400040 * 2. IPC - TO SIGNAL OTHER CPUS TO DO STCK 06450040 * 06500040 *02* CTL BLKS = 1. TPC (READ) 06550040 * 2. CVT (READ) 06580040 * 3. PCCAVT (READ) 06610040 * 4. PCCA (READ) 06640040 * 5. TQE (READ/WRITE) 06670040 * 6. CSD (READ) 06700040 * 7. PSA (READ) 06730040 * 06850040 *01* MACROS USED = SEE BELOW 06900040 * 06950040 *02* EXECUTABLE = 1. SETLOCK 07000040 * 2. RISGNL 07050040 * 07100040 *02* NON-EXECUTABL= 1. CVT 07150040 * 2. IHAPCCAT 07200040 * 3. IHAPCCA 07250040 * 4. IEAVVTPC 07300040 * 5. IHATQE 07350040 * 6. IHACSD 07400040 * 7. IHAPSA 07410040 * 8. MODID 07420040 * 07450040 *01* CHANGE ACTIVITY = Z40FPYB 07500040 * 07550040 *01* MESSAGES = NONE 07600040 * 07650040 *01* ABEND CODES = NONE 07700040 * 07750040 **** END OF SPECIFICATIONS ** */ 07800040 EJECT 07850040 *********************************************************************** 07900040 * * 07950040 * START SETDIE SERVICE ROUTINE CSECT * 08000040 * * 08050040 *********************************************************************** 08100040 SPACE 08150040 IEAVRT02 CSECT 08200040 MODID BR=NO 08250040 ENTRY IEAVRDIE MAIN ENTRY POINT TO SETDIE 08300040 ENTRY IEAVROCL ENTRY POINT TO OTHER CLOCK ROUTINE 08350040 SPACE 5 08400040 * *************************************************** 08450040 * * * 08500040 * * REGISTER EQUATES * 08550040 * * * 08600040 * *************************************************** 08650040 SPACE 08700040 R0 EQU 0 WORK REGISTER 08750040 R1 EQU 1 TQE POINTER / PCCA POINTER 08800040 R2 EQU 2 WORK REGISTER 08850040 R3 EQU 3 CVT POINTER 08900040 R4 EQU 4 WORK REGISTER 08950040 R5 EQU 5 CSD POINTER 09000040 R6 EQU 6 BASE REGISTER 09050040 R7 EQU 7 WORK REGISTER 09100040 R8 EQU 8 WORK REGISTER 09150040 R9 EQU 9 WORK REGISTER 09200040 R10 EQU 10 WORK REGISTER 09250040 R11 EQU 11 SETLOCK REGISTER 09300040 R12 EQU 12 SETLOCK REGISTER 09350040 R13 EQU 13 SETLOCK REGISTER 09400040 R14 EQU 14 RETURN ADDRESS REGISTER 09450040 R15 EQU 15 RETURN CODE REGISTER 09550040 SPACE 5 09600040 * *************************************************** 09650040 * * * 09700040 * * MISCELLANEOUS EQUATES * 09750040 * * * 09800040 * *************************************************** 09850040 SPACE 09900040 ZERO EQU 0 ZERO 09950040 TWO EQU 2 TWO 09960040 FOUR EQU 4 FOUR 09970040 SPACE 5 10000040 * *************************************************** 10050040 * * * 10100040 * * USINGS * 10150040 * * * 10200040 * *************************************************** 10250040 SPACE 10300040 USING TQE,R1 R1=TQE ADDRESS ABILITY 10350040 USING CVT,R3 R3=CVT ADDRESSABILITY 10370040 USING CSD,R5 R5=CSD ADDRESSABILITY 10390040 USING BASEDIE,R6 R6=BASE REGISTER FOR EP IEAVRDIE 10430040 USING BASEOCL,R13 R13=BASE REGISTER FOR EP IEAVROCL 10470040 SPACE 5 10650040 * *************************************************** 10700040 * * * 10750040 * * START SETDIE (IEAVRDIE) CODE * 10800040 * * * 10850040 * *************************************************** 10900040 SPACE 10950040 IEAVRDIE STM R2,R12,TQEDREGS SAVE REGS 2-12 FOR ENTRY TO DIE 11000040 ST R14,TQERSAVE SAVE RETURN ADDRESS FOR LATER RETURN 11050040 BALR R6,ZERO SET BASE REGISTER FOR SETDIE 11100040 BASEDIE MVC TQETQE(FOUR),IDTQE INITIALIZE TQE NAME IN TQE 11150040 OI TQEFLGS,TQEOFF+TQETYPE+TQEXITSP INDICATE TQE OFF QUE, 11180040 * REAL TYPE, EXIT SPC. 11250040 OI TQEFLGS2,TQEUSER INDICATE USER TYPE TQE 11300040 OI TQEFLGS3,TQEDIE INDICATE DIE TQE 11350040 STCK TQESTCK GET TIME-OF-DAY FROM TOD CLOCK 11400040 BZ HAVETOD SUCCESSFUL? TO HAVETOD IF YES. 11450040 LA R11,TQESTCK NO - SET STCK AREA PTR FOR IEAVROCL 11458040 LR R7,R1 SAVE TQE POINTER ACROSS IEAVROCL 11466040 BAL R14,IEAVROCL GET TOD FROM OTHER CPU 11474040 LR R1,R7 RESTORE TQE POINTER 11482040 HAVETOD L R3,CVTPTR NOW CHECK CLOCK COMPARATORS 11500040 L R5,CVTCSD SET CSD ADDRESSABILITY 11550040 L R7,CSDGDCC GET COUNT OF USABLE CLK COMPARATORS 11600040 LTR R7,R7 ANY USABLE CLOCK COMPARATORS? 11650040 BNZ LASTCHK YES - CONTINUE AT LASTCHK 11652040 XC TQESTCK(FOUR),TQESTCK NO - INDICATE ERROR 11654040 LASTCHK L R7,TQESTCK FINAL CLOCK TEST.... 11656040 LTR R7,R7 HAVE CORRECT TOD+ CLK COMP AVAIL? 11658040 BNZ CLOCKSOK YES - CONTINUE AT CLOCKSOK 11660040 LA R15,FOUR NO - SET ERROR RETURN CODE TO 4 11662040 LM R2,R12,TQEDREGS RESTORE CALLER'S REGS 2 THRU 12 11664040 L R14,TQERSAVE RESTORE RETURN ADDRESS TO CALLER 11666040 BR R14 ERROR RETURN - RC=4 11668040 CLOCKSOK LM R7,R8,TQEVAL YES, CALCULATE TQEVAL 11750040 AL R8,TQESTCKR TQEVAL= USER INTERVAL + TQESTCK 11800040 BC 12,ADDLEFT DO 11850040 AL R7,KONE DO 11900040 ADDLEFT AL R7,TQESTCKL DO 11950040 STM R7,R8,TQEVAL DO 12000040 GETDISP SETLOCK OBTAIN,TYPE=DISP,MODE=UNCOND,RELATED=(RELDISP) 12050040 LR R7,R13 SAVE SETLOCK RETURN CODE 12100040 L R15,CVTQTE00 GET TQE ENQUEUE ENTRY POINT 12150040 BALR R2,R15 ENQUEUE TQE ONTO REAL TIME QUEUE 12200040 LR R13,R7 RESTORE SETLOCK RETURN CODE 12250040 LM R2,R12,TQEDREGS RESTORE CALLER REGISTERS 2-12 12300040 SR R15,R15 SET UP FOR RETURN CODE ZERO 12320040 L R14,TQERSAVE SAVE RETURN ADDRESS- CAN'T RELY ON 12350040 LTR R13,R13 TQE FIELDS ONCE DISP LK IS RELEASED 12400040 BNZ 0(R14) DID SETDIE GET DISP LK? NO- RETURN 12450040 LR R0,R14 SAVE RET ADDR ACROSS SETLOCK 12460040 RELDISP SETLOCK RELEASE,TYPE=DISP,RELATED=(GETDISP) 12500040 LR R14,R0 SET RETURN ADDRESS 12600040 RETURN BR R14 NORMAL RETURN - RC=0 12650040 SPACE 5 13300040 * *************************************************** 13350040 * * * 13400040 * * IEAVRDIE CONSTANTS * 13450040 * * * 13500040 * *************************************************** 13550040 SPACE 13600040 KONE DC F'1' CONSTANT ONE 13620040 IDTQE DC C' TQE' TQE CONTROL BLOCK ID 13650040 SPACE 5 13800040 * *************************************************** 13850040 * * * 13900040 * * START IEAVROCL CODE * 13950040 * * * 14000040 * *************************************************** 14050040 SPACE 14100040 USING PCCA,R1 14120040 IEAVROCL BALR R13,ZERO SET BASE REGISTER FOR IEAVROCL 14150040 BASEOCL LR R2,R14 SAVE CALLER'S RETURN ADDRESS 14200040 XC 0(8,R11),0(R11) CLEAR STCK AREA 14250040 LA R12,IEAVRTAP SET R12 TO SHOULDER TAP RTN ADDRESS 14300040 L R3,CVTPTR GET CVT ADDRESS 14350040 LH R3,CVTMAXMP GET MAXIMUM NO OF CPU'S LESS ONE 14400040 SLA R3,TWO MULTIPLY BY FOUR TO INDEX PCCAT00P 14450040 NEXTPCCA L R1,CVTPTR GET CVT ADDRESS 14480040 L R1,CVTPCCAT-CVT(0,R1) GET ADDRESS OF PCCAT00P 14550040 L R1,0(R1,R3) GET PCCA ADDRESS 14600040 LTR R1,R1 IS THERE A PCCA FOR THIS SLOT? 14650040 BZ TODTEST NO- GO TO TODTEST 14700040 TM PCCATODE,PCCANUTD YES- IS TOD CLOCK FOR CPU USABLE? 14750040 BNZ TODTEST NO- GO TO TODTEST 14800040 RISGNL SERIAL,CPU=(1),EP=(12),PARM=(11) 14850040 TODTEST SR R1,R1 WAS STCK BY OTHER CPU 14856040 CL R1,0(R11) SUCCESSFUL? 14862040 BZ ENDTEST NO - GO TO ENDTEST 14868040 SR R3,R3 YES - INDICATE END OF SHLDR TAPPING 14874040 ENDTEST LTR R3,R3 END OF SHOULDER TAPPING? 14880040 BZ 0(R2) YES- EXIT TO CALLER 14950040 LA R1,FOUR NO 15150040 SR R3,R1 REDUCE PCCAT00P INDEX BY FOUR AND 15200040 B NEXTPCCA LOOP BACK TO GET NEXT PCCA 15250040 DROP R1 15260040 USING TQE,R1 RESTORE TQE ADDRESSABILITY 15270040 SPACE 5 15300040 * *************************************************** 15350040 * * * 15400040 * * START TAPCLOCK (IEAVRTAP) CODE) * 15450040 * * * 15500040 * *************************************************** 15550040 SPACE 15600040 IEAVRTAP STCK 0(R1) STORE TOD CLOCK INTO SUPPLIED AREA 15650040 BZ 0(R14) RETURN DIRECTLY IF SUCCESSFUL 15700040 XC 0(8,R1),0(R1) CLEAR AREA IF NOT SUCCESSFUL 15750040 BR R14 RETURN 15800040 EJECT 15850040 IHAPSA 15860040 EJECT 15870040 CVT DSECT=YES 15900040 EJECT 15950040 IHAPCCAT 16000040 EJECT 16050040 IHAPCCA 16100040 EJECT 16150040 IHACSD 16200040 EJECT 16250040 IEAVVTPC 16300040 EJECT 16350040 IHATQE 16400040 EJECT 16400540 */*IEAVRT02: CHART (AMODE,AREF)*/ 16401040 */* HEADER 16401540 */* TIMER SUPERVISION 16402040 */* 16402540 */* SETDIE SERVICE ROUTINE 16403040 */* MODULE IEAVRT02 PAGE # */ 16403540 */* E SETDIE (ENTRY POINT IEAVRDIE)*/ 16404040 */* COMMENT (1,3) INPUT- R1=TQE ADDRESS*/ 16404540 */* COMMENT (2,3) R2 THRU R12=PARM REGS*/ 16405040 */* COMMENT (3,3) R14=RETURN ADDRESS */ 16405540 */* COMMENT (4,3) SUPV STATE + KEY 0 */ 16406040 */* COMMENT (12,2) DESTROYS REGS 11 THRU 0*/ 16406540 */* P PUT REGISTERS 2 THRU 12 INTO TQEDREGS*/ 16407040 */* P SAVE CALLER'S RETURN ADDRESS (R14) IN TQERSAVE*/ 16407540 */* P SET BASE REGISTER (SET R6 TO ADDRESS OF BASEDIE)*/ 16407740 */*BASEDIE: P SET TQETQE=TQE SET TQEFLGS= 87 SET TQEFLGS2=40 16408040 */*SET TQEFLGS3=80*/ 16408140 */* COMMENT (2,3) INITIALIZE USER'S TQE*/ 16408540 */* P GET CURRENT TIME OF DAY (STCK INTO TQESTCK)*/ 16409040 */* COMMENT (2,4) NOW GET TOD TO */ 16409540 */* COMMENT (3,4) CALCULATE TQEVAL*/ 16410040 */* D (YES,HAVETOD,NO,) STCK SUCCESSFUL? (CONDITION CODE =0)*/ 16410540 */* P SET R11= ADDRESS OF TQESTCK - NEEDED AS INPUT TO IEAVROCL*/ 16411040 */* P SAVE THE TQE POINTER (SET R7=R1)*/ 16411540 */* S IEAVROCL: DO STCK FROM OTHER CPU IF ANY EXIST*/ 16412040 */* COMMENT (12,3) IF STCK FROM OTHER CPU*/ 16412540 */* COMMENT (13,3) WAS SUCCESSFUL, TQESTCK*/ 16413040 */* COMMENT (14,3) WILL BE NON ZERO*/ 16413540 */* P RESTORE TQE POINTER (SET R1=R7)*/ 16414040 */*HAVETOD: D (YES,LASTCHK,NO,) ANY GOOD CLOCK COMP IN SYS? 16414540 */*(CSDGDCC >0)*/ 16414740 */* P INDICATE NEEDED CLOCK NOT AVAILABLE (SET TQESTCK =0)*/ 16415540 */*LASTCHK: D (YES,CLOCKSOK,NO,) NEEDED CLOCKS AVAILABLE? (TQESTCK 16416040 */*^=0)*/ 16416540 */* P SET RETURN CODE IN R15 TO 4*/ 16417040 */* P RESTORE CALLER'S REGISTERS 2 THRU 12 FROM TQEDREGS*/ 16417540 */* P SET R14=CALLER'S RETURN ADDRESS FROM TQERSAVE*/ 16418040 */* R RETURN TO CALLER VIA R14*/ 16418140 */*CLOCKSOK: P SET TQEVAL TO CLK COMP VALUE OF INTERRUPT (SET 16418540 */*TQEVAL= TQEVAL+TQESTCK)*/ 16419040 */*GETDISP: L SETLOCK: OBTAIN, TYPE=DISP, MODE=UNCOND*/ 16419540 */* P SAVE SETLOCK RETURN CODE (SET R7=R13)*/ 16420040 */* L ENQTQE: ENQUEUE USER'S TQE ONTO REAL TIME QUEUE */ 16420540 */* P RESTORE SETLOCK RETURN CODE (SET R13=R7)*/ 16421040 */* P RESTORE CALLER'S REGISTERS 2 THRU 12 FROM TQEDREGS*/ 16421540 */* COMMENT (1,4) MUST NOW RESTORE INFO*/ 16422040 */* COMMENT (2,4) SAVED IN TQE- ONCE*/ 16422240 */* COMMENT (3,4) ENABLED, INFO IN TQE*/ 16422440 */* COMMENT (4,4) IS NO LONGER STABLE*/ 16423040 */* P SET RETURN CODE IN R15 TO ZERO*/ 16423240 */* P SAVE CALLER'S RETURN ADDRESS IN R14 (SET R14=TQERSAVE)*/ 16423540 */* D (YES,,NO,%SL) CALLER ALREADY OWN DISP LOCK? (R13 NOT ZERO)*/ 16423740 */* R RETURN TO CALLER VIA R14*/ 16423940 */*%SL: P SAVE RETURN ADDRESS ACROSS SETLOCK (R0=R14)*/ 16424140 */*RELDISP: L SETLOCK: RELEASE, TYPE=DISP*/ 16424540 */* COMMENT (1,5) RELEASE OF DISP LOCK*/ 16425040 */* COMMENT (2,5) WILL CAUSE EXTERNAL*/ 16425340 */* COMMENT (3,5) INTERRUPTS TO BE ENB.*/ 16425640 */* COMMENT (12,3) NOTE- SETLOCK DESTROYS*/ 16426540 */* COMMENT (13,3) REGISTERS 11 THRU 14*/ 16427040 */* P RESTORE RETURN ADDRESS IN R14 FROM R0*/ 16428040 */*RETURN: R RETURN TO CALLER VIA R14*/ 16428540 */* E IEAVROCL*/ 16429040 */* COMMENT (1,2) INPUT-R11=POINTER TO STCK*/ 16429540 */* COMMENT (2,2) AREA-DBL WORD ADDRESSABLE*/ 16430040 */* COMMENT (3,2) FROM ANY MEM. R14=RET ADR*/ 16430540 */* COMMENT (12,2) OUTPUT- R4-R11 PRESERVED*/ 16431040 */* COMMENT (13,2) TOD IN AREA IF SUCCESSFUL*/ 16431540 */* COMMENT (14,2) 0 IN AREA IF FAILURE*/ 16432040 */* P SET BASE REGISTER R13*/ 16432540 */* P SAVE RETURN ADDRESS IN R2 (SET R2=R14)*/ 16433040 */* P CLEAR USER SUPPLIED STCK AREA POINTED TO BY R11*/ 16433540 */* COMMENT (12,3) WILL GET PGM CK IF AREA*/ 16434040 */* COMMENT (13,3) NOT IN CALLER'S KEY*/ 16434340 */* P SET R12= ADDR OF TAPCLOCK ROUTINE (FOR INPUT TO RISGNL)*/ 16435040 */* P SET R3=4*(MAX NUMBER OF CPUS -1) (USE CVTMAXMP)*/ 16435540 */*NEXTPCCA: P SET R1= PCCA ADDR (VIA PCCAT00P ENTRY USING R3 AS 16436040 */*INDEX)*/ 16436540 */* D (YES,,NO,TODTEST) ANY PCCA FOR THIS ENTRY? (R1 NOT ZERO)*/ 16437040 */* D (YES,,NO,TODTEST) CPU HAVE A GOOD TOD CLOCK? (PCCANUTD =0)*/ 16437540 */* L RISGNL: SERIAL, CPU=(1), EP=(12), PARM=(11)*/ 16438040 */* COMMENT (1,5) TRY TO GET TOD*/ 16438540 */* COMMENT (2,5) FROM OTHER CPU*/ 16439040 */* COMMENT (12,4) STCK AREA WILL BE NON*/ 16439540 */* COMMENT (13,4) ZERO IF SUCCESSFUL*/ 16439840 */*TODTEST: D (YES,,NO,ENDTEST)GOT TOD? (STCK AREA NOT ZERO)*/ 16440540 */* P INDICATE PROCESSING SHOULD END (SET R3=0)*/ 16441040 */*ENDTEST: D (YES,,NO,%EX) SHOULD PROCESSING END? (R3=0)*/ 16441540 */* R RETURN TO CALLER VIA R2*/ 16442040 */*%EX: P (,NEXTPCCA) ADJUST PCCAT00P INDEX FOR NEXT ENTRY (R3=R3-4)*/ 16442540 */* E TAPCLOCK (ENTRY POINT IEAVRTAP)*/ 16443040 */* COMMENT (1,2) INPUT- R1=STCK AREA ADDR*/ 16443540 */* COMMENT (2,2) R14=RET ADDR, R15=E.P.*/ 16444040 */* COMMENT (3,2) SUPV STATE, KEY ZERO*/ 16444540 */* COMMENT (12,2) OUTPUT- STCK AREA NON*/ 16445040 */* COMMENT (13,2) ZERO IF SUCCESSFUL-*/ 16445540 */* COMMENT (14,2) OTHERWISE ZERO*/ 16446040 */* P STCK INTO SUPPLIED AREA POINTED TO BY R1*/ 16446540 */* D (YES,,NO,%CLR) STCK SUCCESSFUL? (CONDITION CODE = ZERO)*/ 16447040 */* R RETURN TO CALLER VIA R14*/ 16447540 */*%CLR: P INDICATE FAILURE (SET STCK AREA TO ZERO)*/ 16448040 */* R RETURN TO CALLER VIA R14*/ 16448540 */*IEAVRT02: END FL/1 FINISH*/ 16449040 END IEAVRT02 END OF MODULE 16449540