.TITLE FILLSB - FILL IN STATISTICS BLOCK .IDENT "0002" ; ; MODULE: FILES-11 ACTIVITY REPORTING TASK -- FILL STATISTICS BLOCK ; ; VERSION: 0002 ; ; AUTHOR: ANDY PUTNINS ; ; DATE: 20-NOV-78 ; ; MODIFICATIONS: ; 10-APR-79 A. PUTNINS USE NEW DYNAMIC MEMORY FEATURE ; ; PURPOSE: ; THIS ROUTINE FILLS IN THE STATISTICS BLOCKS ALLOCATED AND INITIALIZED ; BY 'GETPRM'. WE RAISE OUR RUN PRIORITY TO ONE GREATER THAN THAT OF THE ; ACP(S) UNDER EXAMINATION, TO PREVENT IT FROM MODIFYING ITS DATA STRUCTURES. ; ; INPUTS: ; 'LH.SB' IS LISTHEAD OF STATISTICS BLOCKS INITIALIZED WITH DEVICE NAME, ; PUD ADDRESS, AND EMPTY ATTRIBUTE LISTHEAD ; 'ACPPRI' CONTAINS ACP RUN PRIORITY ; ; OUTPUTS: ; ALL STATISTICS BLOCKS IN LIST FILLED IN ; 'SCALLO' CONTAINS SCOM NODE COUNT FOR TABULATED DATA STRUCTURES ; ; REGISTER USAGE: ; R0=PUD ENTRY ADDR ; R1=ACP'S ATL ADDR ; R2=VCB ADDR ; R5=CURRENT STATISTICS BLOCK ENTRY ADDR ; .MCALL ALTP$S,.INH0,F11DF$ F11DF$ ;DEFINE ACP DATA STRUCTURE OFFSETS .PAGE .PSECT FILLSB,RO,I FILLSB:: PUSH CLR SCALLO ;CLEAR SCOM USAGE STAT MOV ACPPRI,R0 ;GET ACP RUN PRIORITY... INC R0 ;...PLUS ONE ALTP$S ,R0 ;BLOCK IT MOV #LH.SB,R5 ;STAT BLOCK LISTHEAD ; ; ADVANCE TO NEXT STATISTICS BLOCK ENTRY ; NXTDEV: MOV @R5,R5 ;ADVANCE TO MEXT STATISTICS BLOCK CMP R5,#LH.SB ;END OF LIST? BEQ FCMFRE ;YES ; ; FILL IN STAT BLOCK ENTRY WITH PUD INFO ; MOV P.PUD(R5),R0 ;GET PUD POINTER FROM STAT BLOCK BITB #CH.OFF,U.CH(R0) ;DEVICE OFFLINE? BEQ 10$ ;NO BIS #F.OFF,.SBFLG(R5) ;YES - SET FLAG BR NXTDEV ;AND CONTINUE 10$: BITB #CH.FOR,U.CH(R0) ;IS IT MOUNTED FOREIGN? BEQ 20$ ;NO BIS #F.FOR,.SBFLG(R5) ;YES - SET FLAG BR NXTDEV ;AND CONTINUE 20$: BITB #CH.LAB,U.CH(R0) ;IS VOLUME A LABELED TAPE? BEQ 30$ ;NO BIS #F.TAPE,.SBFLG(R5) ;YES - SET FLAG BR NXTDEV ;AND CONTINUE 30$: TST U.ACP(R0) ;ACP ACTIVE? BEQ NXTDEV ;NO ; ; FIND ATL ENTRY FOR THE ACP OF INTEREST ; .INH0 ;INHIBIT TASK SWITCHING MOV #.ATLLH,R1 ;;GET ATL LIST HEAD ADDR 40$: MOV (R1),R1 ;;GET NEXT ATL ENTRY CMP R1,#.ATLLH ;;END OF LIST? BNE 42$ 41$: CALL ..ENB0 ;;YES - ENABLE TASK SWITCHING BR NXTDEV ; AND FORGET THIS DEVICE 42$: CMP U.ACP(R0),A.TD(R1) ;;STD MATCH? BNE 40$ ;;NO - TRY NEXT ENTRY TST A.HA(R1) ;;ACP IN MEMORY? BEQ 41$ ;;NO - TRY NEXT DEVICE CALL ..ENB0 ;;ENABLE TASK SWITCHING ; ; FILL IN STAT BLOCK ENTRY WITH VCB INFO ; MOV @U.ACP(R0),.ACPNM(R5) ;ACP NAME TO STAT BLOCK MOV U.VA(R0),R2 ;VOLUME CONTROL BLOCK ADDRESS ADD #</8.>,SCALLO ;BUMP COUNT OF SCOM NODES PUSH MOV R2,R0 ;POINT TO VOLUME LABEL IN VCB ADD #V.LABL,R0 MOV R5,R1 ;POINT TO VOLUME LABEL IN STAT BLOCK ADD #.VLAB,R1 MOV R1,P.VLAB(R5) ;SET UP LABEL POINTER IN STAT BLOCK MOV #12.,R3 ;LENGTH 50$: MOVB (R0)+,(R1)+ ;MOVE LABEL TO STAT BLOCK SOB R3,50$ POP MOV V.TRCT(R2),C.TRCT(R5) ;GET TRANSACTION COUNT FROM VCB ; ; COLLECT ACP STATISTICS ; CALL CNTFCB ;COUNT FCB'S BCC 60$ BIS #F.BADF,.SBFLG(R5) ;POINTER ERROR - SET FLAG ; CALL CNTWND ;COUNT WINDOW BLOCKS ; CALL CNTLKB ;COUNT LOCK BLOCKS 60$: JMP NXTDEV ;DO NEXT DEVICE .PAGE ; ; COMPUTE FCPCOM SPACE UTILIZATION ; FCMFRE: MOV .FRLH,R0 ;GET FCPCOM FREE LISTHEAD CLR R1 ;CLEAR TOTAL FREE SPACE COUNTER CLR R2 ;CLEAR LARGEST HOLE COUNTER 10$: ADD 2(R0),R1 ;ADD IN NEW HOLE SIZE CMP 2(R0),R2 ;IS THIS THE LARGEST HOLE SO FAR? BLOS 20$ ;NO - CONTINUE MOV 2(R0),R2 ;YES - GET NEW SIZE 20$: TST (R0) ;DONE? BEQ 30$ ;YES MOV @R0,R0 ;NO - LOOK AT NEXT HOLE BR 10$ ;LOOP TILL DONE 30$: MOV R1,FCFREE ;STORE AWAY RESULTS MOV R2,FCHOLE ; ; COMPUTE TOTAL SIZE OF FCPCOM AND PERCENT UTILIZATION ; MOV #.F1END,R3 ;LAST ADDR IN FCPCOM SUB #.FRLH,R3 ;SUBTRACT FIRST ADDR SUB #4,R3 ;FIRST 2 WORDS ARE FREE SPACE LISTHEAD BLE 40$ ;ERROR IF FCPCOM LENGTH NOT POSITIVE MOV R3,FCSIZE ;SAVE TOTAL LENGTH CLR R2 ;CLEAR HIGH ORDER FOR DIVIDE DIV #100.,R2 ;DIVIDE BY 100. TO YIELD PERCENT BCS 40$ ;DIVIDE BY ZERO? MOV FCSIZE,R1 ;GET TOTAL AGAIN SUB FCFREE,R1 ;COMPUTE USED CLR R0 ;CLEAR HIGH ORDER FOR DIVIDE DIV R2,R0 ;DIVIDE USED BY TOTAL BCS 40$ ;DIVIDE BY ZERO? MOV R0,FCUTIL ;SAVE FCPCOM UTILIZATION BR 50$ 40$: CLR FCSIZE ;ERROR - ZERO TOTAL... CLR FCUTIL ;...AND UTILIZATION 50$: ALTP$S ;RESTORE DEFAULT RUN PRIORITY POP RETURN .END