ASMB,R * * NAME: ID.43 * SOURCE: 92070-18096 * RELOC: 92070-16096 * PGMR: C.H.W. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * * NAM ID.43,0 92070-16096 REV.1941 800324 * ENT PI.43,ID.43,$PIFT ENT $$POW,$.POW * EXT $IOTI,$LIST,$POWF EXT $NAME,$MESS,$IOCX EXT $IFTA,$IFT#,$DVTA,$DVT# EXT $MPTF,$MPFN,$Q.PV,$TIME SUP * * * * THIS IS THE RTE-L POWER FAIL AUTO RESTART ROUTINE. * * ID.43 REQUIRES AN IFT ENTRY: * 04,ID.43 * * ID.43 REQUIRES AN INTERRUPT ENTRY: * 04,ENT,PI.43 * * * * IT WORKS AS FOLLOWS: * * ON POWER FAILURE: * 1. LEVEL 2 (POWER-FAIL) & LEVEL 3 INTERRUPTS ARE DISABLED * 2. ALL REGISTERS ARE SAVED, ALSO RETURN ADDRESS * 3. THE DRIVER WAITS FOR POWER TO BE RESTORED (HLT 4). * * ON POWER UP: * 1. THE CURRENT SYSTEM TIME IS SAVED (THIS WILL BE THE * TIME OF POWER FAILURE). * 2. THE CLOCK IS RESTARTED * 3. THE IFT FOR THE POWER-FAIL DRIVER IS QUEUED ON THE * SYSTEM "PRIVILEGED DONE QUEUE" AND IFT7(15) IS SET * SO ID.43 WILL BE REENTERED FROM THE SYSTEM ON A * CONTINUATION. * 4. LEVEL 2 & 3 INTERRUPTS ARE REENABLED AND A RETURN WITH * REGISTERS RESTORED IS MADE TO THE POINT OF THE * POWER FAIL INTERRUPT. * * * ON THE FOLLOWING CONTINUATION ENTRY THE FOLLOWING ACTION IS * TAKEN: * * 1. THE PHYSICAL DRIVER FOR EACH IFT ENTRY IS CALLED (USING * "$POWF" IN IOC) FOR A POWER-FAILURE. * 2. EACH DVT ENTRY WHICH IS BUSY WITH A REQUEST HAS IT'S * "P"-BIT CHECKED. IF SET, AND A LOGICAL DRIVER EXISTS, * IT IS CALLED FOR A POWER-FAIL. * * SOME DEVICES WILL BE REPORTED DOWN IF THEIR POWER * WAS ALSO CUT E.G. MAGTAPE, DISC. THESE DEVICES * MAY BE UPPED BY THEIR DRIVERS WHEN THEY * COME BACK ON LINE E.G. THE DISC. * * 3. IF THE DEVICE IS DOWN THE SYSTEM UP PROCESSOR WILL * BE CALLED TO UP THE DEVICE. THIS WILL CAUSE * THE DOWNED DEVICES TO HAVE NEW MESSAGES POSTED * ON THE SYSTEM TTY. * * 4. THE PROGRAM "AUTOR" IS CHECKED, AND IF DORMANT, IT IS * SCHEDULED AND PASSED THE TIME OF THE LATEST POWER-FAIL. * IF IT IS NON-DORMANT, IT IS ABORTED WITH A "$MESS" CALL * AND ID.43 PUTS ITSELF IN THE TIME LIST FOR 100 MSECS. * WHEN ID.43 IS REENTERED ON A TIMEOUT, IT RETRIES TO * SCHEDULE AUTOR (UP TO 100 TIMES). * (THE ABORT IS TO ALLOW FOR MOMENTARY POWER UPS.) * AUTOR SHOULD TAKE WHATEVER ACTION IS NEEDED TO * BRING UP THE SYSTEM IN TERMS OF ENABLING TERMINALS - * COMMUNICATION LINES ETC. * * * NOTE THE FOLLOWING: * THE 21-L PROCESSOR ALLOWS 10 MILLISECONDS OF POWER-DOWN * PROCESSING FOLLOWING THE DOWN INTERRUPT, THEREFORE THIS * DRIVER ACTUALLY DISABLES THE P.F. INTERRUPT DURING CRITICAL * PORTIONS OF PROCESSING TO SIMPLIFY P.F. REENTRANCE AVOIDANCE * TECHNIQUES WHICH WERE PREVALENT IN PREVIOUS RTE P.F. DRIVERS * * THE POWER-FAIL IFT IS ALWAYS CREATED WITH "M" SET SO THAT * ONLY ID.43 ITSELF WILL PLACE THE IFT IN THE TIME-LIST USING * THE IOC "IOTI" ROUTINE. HED POWER UP/DOWN ENTRY POINT/ DOWN CODE. PI.43 NOP POWER UP/DOWN ENTRY CLC 4 DISABLE LEVEL 2 & 3 INTERRUPTS SFC 4 UP? JMP UP YES, GO RESTORE MACHINE STATE * * DOWN ROUTINE * STA ASAVE SAVE A-REG. LIA 0 STA IMASK SAVE INTERRUPT MASK LIA 2 SFS 2 SKIP IF GLOBAL REG DISABLED IOR BIT15 BIT15=1 WHEN ENABLED CLC 0,C DO CRS, INITIALIZE/STOP ALL I/O CLC 4 & LEAVE P.F. INTERRUPT OFF STA GLOBL SAVE GLOBAL REGISTER STB BSAVE SAVE B-REG ERA,ALS SOC SET LEAST BIT OF A IF OVERFLOW INA WAS SET, SIGN = E REG STA EOSAV SAVE E/O LDA PI.43 SAVE INTERRUPT STA PSAVE LOCATION CLA CPA SWTCH LAST A DOWN? JMP HALT YES! 2 SUCCESSIVE DOWNS BUY THE FARM STA SWTCH INDICATE LAST WAS SUCCESSFUL DOWN * * WAIT FOR POWER-UP, IF POWER GOES ALL THE WAY DOWN, "UP" * WILL BE REENTERED BY INTERRUPT. WAIT SFS 4 JMP *-1 HED POWER UP ROUTINE UP LDA SWTCH SZA LAST A DOWN? JMP HALT NO! 2 SUCCESSIVE UP'S * LDA TIME+2 IF TIME IN HAND SZA THEN DO NOT JMP NIXTM SAVE IT AGAIN * DLD $TIME GET THE TIME OF DAY DST TIME AND SAVE IT LDA $TIME+2 GET ADDRESS STA TIME+2 * NIXTM STC 6 START TBG LDA STC7 INSTRUCTION TO ENABLE M.P. LDB $MPTF GET SYSTEM MEMORY PROTECT FLAG CCE,SZB DID P.F. COME WHILE IN THE SYSTEM LDA STC4 YES, LEAVE MEMORY PROTECT DISABLED STA SWTCH * * NOW ENTER THE POWER-FAIL IFT ON THE PRIVILEGED DONE QUEUE * SO THAT THE SYSTEM WILL REENTER ID.43 ON A NORMAL CONTINUATION * JSB ONPRV SEE IF ALREADY ON PRIV QUEUE JMP REGUP IT IS, DON'T LINK IT TO ITSELF LDA $Q.PV HEAD OF PRIVILEGED DONE QUEUE STB $Q.PV PUT P.F. IFT AT HEAD (LIFO) STA 1,I ADB N1 POINT TO IFT7 LDA 1,I RAL,ERA SET BIT 15 STA 1,I FORCING CONTINUATION RETURN * REGUP LDA EOSAV RESTORE THE REGISTERS CLO SLA,ELA STO * LDA IMASK OTA 0 RESTORE INTERRUPT MASK LDA GLOBL OTA 2,C RESTORE/ENABLE GLOBAL REG SSA,RSS WAS IT DISABLED? STF 2 YES LDA $MPFN OTA 7 RESTORE THE FENCE LDA ASAVE LDB BSAVE STF 0 STC4 STC 4 ENABLE LEVEL 2 & 3 INTERRUPTS SWTCH STC 7 ENABLE M.P. UNLESS IN SYSTEM JMP PSAVE,I RETURN TO POINT OF INTERRUPT * SPC 3 STC7 STC 7 ASAVE NOP BSAVE NOP EOSAV NOP IMASK NOP GLOBL NOP * .2 DEC 2 .3 DEC 3 .6 DEC 6 .7 DEC 7 .12 DEC 12 .20 DEC 20 .22 DEC 22 BIT15 OCT 100000 N1 DEC -1 N10 DEC -10 N100 DEC -100 B177 OCT 177 B777 OCT 777 * IDSGA NOP NCNT NOP TRIES NOP ABFLG NOP PSAVE DEF HALT P-REG SAVE (HLT DEF IF HALTED) TIME DEC 0,0,0 TIME SAVE LOCATION ON UP ATIME DEC 0,0,0 TIME TO PASS TO "AUTOR" $PIFT NOP * HALT HLT 4,C JMP *-1 HED NON-PRIVILEGED POWERFAIL PHYSICAL DRIVER * ID.43 NOP CPA .3 ENTERED ON TIMEOUT? JMP SCHED YES, RETRY AUTOR SCHEDULE CPA .2 CONTINUE? JMP CONT YES CLA ISZ ID.43 GET OUT IMMEDIATELY JMP ID.43,I PHY CONTINUE EXIT * * JUST POWER-UP'ED, PERFORM POWER-FAIL ENTRY TO DRIVERS * CONT LDA $IFT# # OF IFTS IN SYSTEM LDB $IFTA ADDRESS OF IFTS CMA,CCE,RSS DVRPF CMA,CLE STA NCNT - # OF TABLE ENTRIES -1 * DVRNX ISZ NCNT MORE ENTRIES? JMP DCALL YES * LDA $DVT# # OF DVTS LDB $DVTA ADDR OF DVTS SEZ ALREADY DID DVTS? JMP DVRPF NO, GO DO THEM * * ALL I/O REQUEST RECOVERY IS COMPLETED * LDA N100 STA TRIES TRY UP TO 100 TIMES TO SCHED AUTOR * SCHED JSB $NAME GET ID SEG ADDR OF "AUTOR" DEF AUTOR SZB,RSS IS IT IN SYSTEM? JMP $IOCX NO, DONE CCE,SZA IS IT DORMANT? JMP AUTBZ NO STB IDSGA SAVE AUTOR ID SEG ADDR * DISABLE ANY P.F. INTERRUPT TIL AUTOR IS SCHEDULED CLC 4 LDB ABFLG STA ABFLG FLG THAT AUTOR WAS DORMANT SZB DID LAST AUTOR RUN FINISH? JMP TPASS NO, KEEP TIME IN HAND * LAST AUTOR SCHEDULE COMPLETED, SO LATEST TIME OF * POWER-FAIL ("TIME") CAN NOW BE PASSED LDA TIME STA ATIME LDA TIME+1 STA ATIME+1 LDA TIME+2 STA ATIME+2 STB TIME+2 "UP" CAN NOW SAVE TIME OF NEXT P.F. * * NOW SCHEDULE AUTOR & PASS THE TIME OF POWER-FAIL TPASS LDB IDSGA LDA ATIME INB STA 1,I INB STB NXADR DLD ATIME+1 DST * PASS 2ND & 3RD TIME WORDS NXADR EQU *-1 * LDB IDSGA JSB $LIST SCHEDULE AUTOR OCT 60 RENBL STC 4 REENABLE POWER-FAIL INTERRUPTS JMP $IOCX EXIT * * AUTOR NON-DORMANT, ABORT IT ONCE & KEEP TRYING TO SCHEDULE * IT FOR 10 SECONDS AT 100 MILLISECOND INTERVALS. AUTBZ ISZ TRIES CCE,RSS * TRIED 100 TIMES WITHOUT SUCCESS, SO LEAVE JMP $IOCX * LDA N10 100 MSEC DELAY LDB $PIFT P.F. IFT ADDR JSB $IOTI PUT IFT IN TIME-LIST * CCA CPA ABFLG ALREADY ABORTED IT? JMP $IOCX YES STA ABFLG NO, SET FLAG THAT WE DID ABORT LDA DOF LDB .12 JSB $MESS "OFF,AUTOR,FL" JMP $IOCX SHOULDN'T GET HERE * * PROCESS IFTS/DVTS FOR POWER-FAIL * DCALL STB NXADR SAVE ADDR OF NEXT IFT CLC 4 DISABLE LEVEL 2&3 INTERRUPTS JSB ONPRV SEE IF ANOTHER P.F. OCCURRED JMP RENBL IT HAS! GET OUT IMMEDIATELY STC 4 REENABLE LEVEL 2 & 3 INTERRUPTS LDB NXADR SEZ,RSS DOING DVT'S? JMP DCAL5 YES CPB $PIFT IS THIS THE P.F. IFT? RSS YES, DON'T CALL OURSELF * CALL I/O SYSTEM TO DO DRIVER POWER-FAIL ENTRY JSB $POWF E=1 IF IFTS, 0 IF DVTS LDB NXADR ADB .6 POINT TO IFT 7 LDA 1,I GET LENGTH OF CONTIGUOUS AUX. AREA AND B777 IN BITS 8-0 ADB 0 ADD TO POINTER CCE,INB JMP DVRNX ITERATE * DCAL5 JSB $POWF DO DEVICE DRIVER POWER-FAIL LDB NXADR ADB .20 LDB 1,I LSR 9 RIGHT JUSTIFY DVTP SIZE ADB .22 ADD DVT SIZE ADB NXADR POINT TO NEXT DVT CLE JMP DVRNX * * SUBROUTINE TO DETERMINE IF POWER-FAIL IFT IS ON THE * "PRIVILEGED DONE QUEUE". IF IT IS, A POWER-FAILURE * HAS OCCURED SINCE THE LAST ENTRY INTO THE ID.43 NON- * PRIVILEGED CONTINUATOR SECTION. * ONPRV NOP LDB $PIFT ADDR OF P.F. IFT SZB,RSS DOES IFT EXIST? JMP HALT NO, WE'RE OUT OF LUCK ADB .7 POINT TO IFT EXTENSION * CHECK TO SEE IF POWER-FAIL IFT ALREADY ON PRIV. DONE QUEUE LDA $Q.PV HEAD OF PRIVILEGED DONE QUEUE CPA 1 IS THIS THE P.F. IFT? JMP ONPRV,I YES, ON QUEUE, DO RTN+1 LDA 0,I GET NEXT SZA MORE? JMP *-4 YES ISZ ONPRV DO RTN+2 JMP ONPRV,I * DOF DEF *+1 ASC 2,OFF, AUTOR ASC 4,AUTOR,FL * $$POW EQU * $.POW DEC 0 * END