.TITLE UNFULL_AST .IDENT/1.3/ .LIBRARY /MA_Q$DEF:QUEUE.MLB/ .LIST ME QHDDEF MIDDEF HDRDEF MGHDEF NRBDEF BUFDEF NRBID PEXDEF .library /MA_Q:[ROUTE]MA_ROUTER.MLB/ MA_ROUTER_COMMON .NLIST ME ;.begin.doc ************************** begin.doc ; ; .c ;MODULE ; .c ;^&UNFULL_AST\& ; .nf ; .x UNFULL_AST>Defined ; Source:UNFULL_AST.MAR ; Designer :EARL LAKIA ; Author :EARL LAKIA ; Inland Steel ; Process Automation Department ; 3210 Watling St. MS 2-465 ; East Chicago, IN 46312 ; ; Date of last update: 2/25/87 ; Revision level :1.2 ; ; .C ;Formal Parameter List ; Receives: ; ; ASTPRM UNUSED AST PARAMETER ; ; R0 REGISTER ; SAVED R0 FROM AST ; ; R1 REGISTER ; SAVED R1 FROM AST ; ; PC REGISTER ; SAVED PC FROM AST ; ; PSL REGISTER ; SAVED PSL FROM AST ; ; Returns: ; ; Accesses common(s): ; ; .X MA_ROUTER_COMMON>Common ; MA_ROUTER_COMMON MA_ROUTER COMMON PARAMETERS SHARED THROUGHTOUT ; ; Accesses file(s): ; ; Other modules referenced: ; ; .X OPR_FAO_MSG>Referenced ; OPR_FAO_MSG LOG MESSAGE TO CONSOLE ; (found in library:INLAND) ; ; .X PUSH_EVENT_QUE>Referenced ; PUSH_EVENT_QUE USED TO PUSH CONNECT EVENT INTO THE EVENT QUEUE ; .SK ; .fill ; .SK ; Description: ; .sk ; This subroutine is called when a timer expires after a ; remote node has told us that its queue is full. This ; subroutine switches to KERNEL and clears all of the remote ; node full bits for the message ids that we are connected to. The ; flag showing that we are active is set to false. We do not ; want to run unless we actually do have remote nodes with full ; queue conditions. ; end.doc ****************************** end.doc ; ; 2/25/87 E. Lakia (1.2) ; Add support for the version number and flag in the routing ; database header. ; .PSECT MARK_IT,PIC,EXE,CON,LONG,NOWRT ; .PAGE .ENTRY UNFULL_AST,^M ; ; CHANGE MODE TO KERNEL SO CAN ACCESS THE PROTECTED QUEUE ; $CMKRNL_S ROUTIN= 10$ ; JUMP TO KERNAL CODE RET ; ; KERNEL ENRY ; 10$: .WORD ^M<> CLRL QNA_TMO ; SET NO AST PENDING ANYMORE MOVL Q_BLOCK,R8 ; GET EXPANDED REGION ADDRESS MOVL PEX$Q_GSRETADR(R8),R9 MOVL ROUTE_DBS,R3 ; ADDL #20,R3 ; R3= LIST OF NRB OFFSETS 20$: MOVL (R3)+,R0 ; GET AN NRB ADDRESS OR LIST TERMINATOR BNEQ 30$ ; IS IT AT END OF NRB LIST YET RET ; ALL DONE 30$: ADDL ROUTE_DBS,R0 ; RELOCATE NRB OFFSET TO TRUE ADDRESS MOVL NRB$L_IDCNT(R0),R6 ; LOOP FOR NUMBER ID'S ADDL #NRB$L_SIZE,R0 ; POINT TO NRBID LIST AFTER THE NRB ; ; LOOP FOR NUMBER OF MESSAGE IDS ; 40$: MOVL NRBID$L_LHD(R0),R5 ; WAS ID FOUND IN QUEUE DURING INIT BEQL 50$ ; NO, THEN SKIP IT ; BICL #MID$M_RQF,MID$L_STAT(R5) ; MARK AS NOT FULL 50$: ADDL #NRBID$L_SIZE,R0 ; POINT TO NEXT NRBID SOBGTR R6,20$ ; LOOP UNTIL THIS NRB IS DONE BRB 20$ ; LOOP UNTIL ALL NRBS ARE SCANNED .END