COMPPDI 
COMMON
          CTEXT  COMPPDI - PROCESS DISK INFORMATION.
 COMPPDI  SPACE  4,10 
 QUAL$    IF     -DEF,QUAL$,1 
          QUAL   COMPPDI
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 COMPPDI  SPACE  4,10 
***       PDI - PROCESS DISK INFORMATION. 
*         T. J. CALLAGHAN.   83/03/09.
          SPACE  4,10 
**        DIRECT LOCATION ASSIGNMENTS.
  
  
 DF       EQU    FN          DAYFILE FLAGS
 TA       EQU    FN+1        DAYFILE MESSAGE TABLE ADDRESS
 CD       EQU    FN+2        CHANNEL DESCRIPTOR ADDRESS 
 PA       EQU    FN+3        PROCESSOR ADDRESS
 UL       EQU    62 - 66     UNIT LIST (*DDLL* WORD)
 AI       EQU    67          ALGORITHM INDEX
 CCH      SPACE  4,10 
**        CCH - CHECK FOR AND PROCESS CONCURRENT CHANNEL. 
* 
*         ENTRY  (A) = CHANNEL STATE + CHANNEL NUMBER.
*                (CN - CN+4) = *EQDE* WORD FROM EST.
*                (UL - UL+4) = *DDLL* WORD FROM MST.
* 
*         EXIT   (A) = 0 IF NOT CONCURRENT CHANNEL. 
* 
*         USES   T2, T4.
* 
*         CALLS  CCC, FDC, RSE, SDR.
  
  
 CCH      SUBR               ENTRY/EXIT 
          STD    T4 
          LPN    77 
          STM    /COMPSDR/SDRC+2*5+4  SET CHANNEL IN *UTEM* REQUEST 
          LPN    40 
          ZJN    CCHX        IF NOT CONCURRENT CHANNEL
          LDN    ZERL 
          CRM    TCMD,ON
          SBN    1           CLEAR CONTROLLER TABLE 
          CRM    TCMD+3,ON
 CCH1     RJM    CCC         CHECK CONCURRENT CHANNEL CONTROLLER
          NJN    CCH3        IF CONTROLLER ALREADY PROCESSED
*         LDN    0
          STD    T2          SET UNIT COUNT 
          LDC    LFMI+4000
          RJM    SDR         ISSUE LIST FIRMWARE REQUEST
 CCH3     RJM    FDC         FIND NEXT DEVICE ON CHANNEL
          ZJN    CCH1        IF ANOTHER DEVICE FOUND
          LDM    -1,LA       RESTORE ORIGINAL EST ORDINAL 
          STD    T5 
          RJM    RSE         RESTORE OTHER DIRECT CELLS 
          LDN    1
          UJP    CCHX        RETURN 
 CCC      SPACE  4,10 
**        CCC - CHECK IF CONCURRENT CHANNEL CONTROLLER MESSAGE ISSUED.
* 
*         ENTRY  (UL - UL+4) = *DDLL* WORD FROM MST.
* 
*         EXIT   (A) = 0, IF MESSAGE NOT YET ISSUED.
* 
*         USES   T1.
  
  
 CCC      SUBR               ENTRY/EXIT 
          LDD    UL          GET CONTROLLER NUMBER
          SHN    -6 
          LPN    7
          ADC    TCMD 
          STD    T1          FORM TABLE ADDRESS 
          LDI    T1 
          NJN    CCCX        IF CONTROLLER ALREADY PROCESSED
          AOI    T1 
          LDN    0
          UJN    CCCX        RETURN 
 CCM      SPACE  4,10 
**        CCM - CHECK IF CONTROL MODULE MESSAGE ALREADY ISSUED. 
* 
*         ENTRY  (UL - UL+4) = *DDLL* WORD FROM MST.
* 
*         EXIT   (A) = 0, IF MESSAGE NOT YET ISSUED.
* 
*         USES   T1.
  
  
 CCM      SUBR               ENTRY/EXIT 
          LDD    UL 
          SHN    21-0        UNIT LOCATION TO SIGN POSITION 
          LMN    3
          ADN    UL+1        BYTE CONTAINING UNIT NUMBER
          STD    T1 
          SHN    0-21 
          ZJN    CCM1        IF UNIT NUMBER IN LOWER HALF OF BYTE 
          LDI    T1 
          SHN    -11
          UJN    CCM2        CHECK CONTROL MODULE NUMBER IN TABLE 
  
 CCM1     LDI    T1          FETCH UNIT NUMBER
          SHN    -3 
          LPN    7           EXTRACT CONTROL MODULE NUMBER
 CCM2     ADC    TCMD 
          STD    T1          FORM TABLE ADDRESS 
          LDI    T1 
          NJN    CCMX        IF CONTROL MODULE ALREADY PROCESSED
          AOI    T1 
          LDN    0
          UJN    CCMX        RETURN 
 TCMD     SPACE  4,10 
**        TCMD - TABLE OF CONTROL MODULE ENTRIES. 
* 
*         A ONE BYTE ENTRY EXISTS FOR EACH POSSIBLE CONTROL MODULE.  IT 
*         IS NON-ZERO IF A FIRMWARE REVISION NUMBER MESSAGE HAS ALREADY 
*         BEEN ISSUED FOR THE CORRESPONDING CONTROL MODULE. 
  
 TCMD     BSSZ   10 
 ECD      SPACE  4,10 
***       ECD - ENTER CHANNEL DESCRIPTION IN TABLE. 
* 
*         ENTRY  (A) = CHANNEL DESCRIPTION WORD.
* 
*         EXIT   (A) = CHANNEL STATE + CHANNEL NUMBER.
*                    = 0 IF CHANNEL DESCRIPTOR IN TABLE.
* 
*         USES   T1, T2.
  
  
 ECD2     LDM    TCHD,T1
          NJN    ECD1        IF CHANNEL ALREADY IN TABLE
          LDD    T2 
          STM    TCHD,T1     ENTER DESCRIPTOR IN TABLE
  
 ECD      SUBR               ENTRY/EXIT 
          LPC    7077 
          STD    T2          SAVE CHANNEL STATE AND NUMBER
          LMC    4000 
          STD    T1          EXTRACT CHANNEL NUMBER 
          SHN    -11
          ZJN    ECD2        IF AVAILABLE CHANNEL 
 ECD1     LDN    0
          UJN    ECDX        RETURN 
 TCHD     SPACE  4,10 
**        TCHD - TABLE OF CHANNEL DESCRIPTIONS. 
  
  
 TCHD     BSS    5*CTALL     CHANNEL DESCRIPTORS
 FDC      SPACE  4,10 
**        FDC - FIND NEXT DEVICE ON CHANNEL.
* 
*         ENTRY  (T4) = CHANNEL STATE + CHANNEL NUMBER. 
*                (T5) = EST ORDINAL OF CURRENT DEVICE.
*                (LO) = LAST MASS STORAGE ORDINAL + 1.
* 
*         EXIT   (A) = 0 IF ANOTHER DEVICE FOUND. 
*                (T5) = EST ORDINAL OF NEXT DEVICE. 
* 
*         CALLS  RSE. 
  
  
 FDC2     RJM    RSE         READ EST ENTRY 
          NJN    FDC1        IF DEVICE NOT SELECTED 
          LDN    CN 
          STD    T0 
 FDC3     AOD    T0          ADVANCE CHANNEL BYTE INDEX 
          LMN    CN+3 
          ZJN    FDC1        IF BOTH CHANNELS CHECKED 
          LDI    T0 
          LPC    7077        CHECK CHANNEL + STATE FLAGS
          LMD    T4 
          NJN    FDC3        IF NOT SPECIFIED CHANNEL 
  
 FDC      SUBR               ENTRY/EXIT 
 FDC1     AOD    T5 
          LMD    LO 
          NJN    FDC2        IF MORE MASS STORAGE 
          LDN    1
          UJN    FDCX        RETURN (DEVICE NOT FOUND)
 IME      SPACE  4,20 
**        IME - IDENTIFY MASS STORAGE EQUIPMENT.
* 
*         ENTRY  (A) = DAYFILE FLAG.
*                (LA) = MASS STORAGE IDENT LOAD ADDRESS.
*                (LO) = LAST MASS STORAGE ORDINAL + 1.
* 
*         EXIT   PACK SERIAL NUMBER IDENTIFICATION MESSAGES ISSUED TO 
*                THE ERROR LOG AND/OR BML FOR ALL *LDAM* TYPE MASS
*                STORAGE EQUIPMENTS THAT ARE ON AND AVAILABLE.
*                FIRMWARE REVISION NUMBER IDENTIFICATION MESSAGES 
*                ISSUED TO THE ERROR LOG AND/OR BML FOR ALL CHANNELS
*                ASSOCIATED WITH *LDAM* EQUIPMENTS. 
* 
*         USES   DF.
* 
*         CALLS  PME. 
  
  
 IME      SUBR               ENTRY/EXIT 
          STD    DF 
          LDC    LFR         LIST FIRMWARE REVISION NUMBERS 
          RJM    PME
          LDC    LPS         LIST PACK SERIAL NUMBERS 
          RJM    PME
          UJN    IMEX        EXIT 
 LFR      SPACE  4,25 
**        LFR - LIST FIRMWARE REVISION NUMBERS. 
* 
*         ENTRY  (T5) = ((LA)-1) = EST ORDINAL. 
*                (LA) = PROCESSOR LOAD ADDRESS. 
*                (AI) = ALGORITHM INDEX BYTE FROM *DILL*. 
*                (CN - CN+4) = *EQDE* WORD OF EST ENTRY.
*                (UL - UL+4) = *DDLL* WORD FROM MST.
* 
*         USES   CD, PA, T4.
* 
*         CALLS  CCH, ECD, PDM, *0CI*.
* 
*         MACROS EXECUTE. 
  
  
 LFR      SUBR               ENTRY/EXIT 
          LDD    CN 
          SHN    21-7 
          MJN    LFR1        IF *LDAM* DEVICE 
          LDN    TLFRL       CHECK DEVICE TYPE FOR NON-*LDAM* DEVICE
          STD    T1 
 LFR0     SOD    T1 
          MJN    LFRX        IF FIRMWARE REVISION SHOULD NOT BE LOGGED
          LDD    CN+3 
          LMM    TLFR,T1
          NJN    LFR0        IF DEVICE TYPE DOES NOT MATCH
 LFR1     LDN    CN+1 
          STD    CD          SET CHANNEL DESCRIPTOR ADDRESS 
          LDN    0
          STD    PA 
 LFR2     LDI    CD          ENTER CHANNEL IN TABLE 
          RJM    ECD
          ZJN    LFR4        IF CHANNEL DOWN, IDLE OR ALREADY IN TABLE
          RJM    CCH         CHECK FOR AND PROCESS CONCURRENT CHANNEL 
          NJN    LFR4        IF CONCURRENT CHANNEL
          LDD    PA 
          NJN    LFR3        IF *0CI* LOADED
          EXECUTE  0CI,*
          RJM    EXR         LOAD AND INITIALIZE PROCESSOR
          STD    PA 
 LFR3     LDI    CD          EXTRACT CHANNEL NUMBER 
          LPN    37 
          STD    T4 
          RJM    0,PA        GENERATE MESSAGE 
          MJN    LFR4        IF MASS STORAGE ERROR
          RJM    PDM         ISSUE DAYFILE MESSAGE
 LFR4     AOD    CD 
          LMN    CN+3 
          NJN    LFR2        IF POSSIBLY ANOTHER CHANNEL
          LDD    AI 
          LPN    77 
          SBN    AIIB 
          MJN    LFR5        IF NOT ISMD DEVICE 
          SBN    AIIE-AIIB
          MJN    LFR6        IF ISMD DEVICE 
 LFR5     LJM    LFRX        EXIT 
  
 LFR6     LDD    TH          SELECT CONTROL MODULE IDENTIFICATION 
          RAM    -1,LA
          EXECUTE  0CI,*
          RJM    EXR         LOAD AND INITIALIZE PROCESSOR
          STD    PA 
          LDD    T5          CLEAR FUNCTION CODE
          STM    -1,LA
 LFR7     RJM    CCM
          NJN    LFR10       IF MESSAGE ALREADY ISSUED
          LDN    CN+1 
          STD    CD 
 LFR8     LDI    CD          SELECT CHANNEL 
          LPN    37 
          STD    T4 
          RJM    0,PA 
          PJN    LFR9        IF NO MASS STORAGE ERROR 
          AOD    CD 
          LMN    CN+3 
          NJN    LFR8        IF POSSIBLY ANOTHER CHANNEL
          UJN    LFR10       MOVE TO NEXT UNIT
  
 LFR9     RJM    PDM         ISSUE DAYFILE MESSAGE
 LFR10    SOD    UL 
          PJN    LFR7        IF MORE UNITS
          LJM    LFRX        RETURN 
  
  
*         TLFR - NON-*LDAM* DEVICES FOR WHICH TO LIST FIRMWARE REVISION.
  
 TLFR     BSS    0
          CON    2RDN        9853 (XMD) 
          CON    2REA        5832 (1X SSD)
          CON    2REB        5832 (2X SSD)
          CON    2REC        5833 (1X SABRE)
          CON    2RED        5833 (1XP SABRE) 
          CON    2REE        5833 (2X SABRE)
          CON    2REF        5833 (2XP SABRE) 
          CON    2REG        5838 (1X ELITE)
          CON    2REH        5838 (1XP ELITE) 
          CON    2REI        5838 (2X ELITE)
          CON    2REJ        5838 (2XP ELITE) 
          CON    2REK        5838 (3XP ELITE) 
          CON    2REL        5838 (4X ELITE)
          CON    2REM        5833 (3XP SABRE) 
          CON    2REN        5833 (4X SABRE)
          CON    2REO        47444 (1X 3.5IN) 
          CON    2REP        47444 (1XP 3.5IN)
          CON    2RES        47444 (2X 3.5IN) 
          CON    2REU        47444 (2XP 3.5IN)
          CON    2REV        47444 (3XP 3.5IN)
          CON    2REW        47444 (4X 3.5IN) 
  
 TLFRL    EQU    *-TLFR      LENGTH OF TABLE
 LPS      SPACE  4,20 
**        LPS - LIST PACK SERIAL NUMBERS. 
* 
*         ENTRY  (T5) = ((LA)-1) = EST ORDINAL. 
*                (LA) = PROCESSOR LOAD ADDRESS. 
*                (CN - CN+4) = *EQDE* WORD OF EST ENTRY.
*                (UL - UL+4) = *DDLL* WORD FROM MST.
* 
*         USES   CD, PA, T2, UL, CN+2.
* 
*         CALLS  PDM, SDR, *0PI*. 
* 
*         MARCOS EXECUTE. 
  
  
 LPS5     LDD    UL          SET UNIT COUNT 
          LPN    7
          STD    T2 
          LDN    LDIF        SET LIST UNIQUE ID FLAG
          RJM    SDR
  
 LPS      SUBR               ENTRY/EXIT 
          LDD    CN 
          LPC    102
          NJN    LPSX        IF UNAVAILABLE, OFF OR DOWN
          LDN    CN 
          STD    CD 
 LPS1     AOD    CD          ADVANCE CHANNEL BYTE ADDRESS 
          LMN    CN+3 
          ZJN    LPSX        IF END OF CHANNELS 
          LDI    CD 
          SHN    21-13
          PJN    LPS1        IF NO CHANNEL
          SHN    21-11-21+13
          MJN    LPS1        IF CHANNEL IS DOWN OR IDLE 
          SHN    21-5-21+11 
          MJN    LPS5        IF CONCURRENT CHANNEL
          LDD    CN 
          SHN    21-7 
          PJN    LPS5        IF NOT *LDAM* DEVICE 
          LDN    0
          STD    CN+2 
          EXECUTE  0PI,*
          RJM    EXR         LOAD AND INITIALIZE PROCESSOR
          STD    PA 
 LPS2     LDD    CN+2        GET MESSAGE FOR A LOGICAL UNIT 
          RJM    0,PA 
          ZJN    LPS3        IF MASS STORAGE ERROR
          RJM    PDM         PROCESS DAYFILE MESSAGE
 LPS3     AOD    CN+2        ADVANCE LOGICAL UNIT 
          SOD    UL          DECREMENT LOGICAL UNIT COUNT 
          PJN    LPS2        IF MORE LOGICAL UNITS
          LJM    LPSX        RETURN 
 PME      SPACE  4,15 
**        PME - PROCESS MASS STORAGE EQUIPMENT. 
* 
*         ENTRY  (A) = PROCESSOR ADDRESS. 
*                (LA) = MASS STORAGE IDENT LOAD ADDRESS.
*                (LO) = LAST MASS STORAGE ORDINAL + 1.
* 
*         USES   T1, T5.
* 
*         CALLS  LFR, LPS, RSE. 
* 
*         MACROS SFA. 
  
  
 PME4     AOM    -1,LA       ADVANCE EQUIPMENT NUMBER 
          STD    T5 
          LMD    LO 
          NJN    PME1        IF MORE EQUIPMENT TO CHECK 
  
 PME      SUBR               ENTRY/EXIT 
          STM    PMEB 
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    T5 
          STM    -1,LA
 PME1     RJM    RSE         READ EST ENTRY 
          STD    T1 
          NJN    PME4        IF DEVICE NOT SELECTED 
 PME2     LDM    PMEC,T1
          LMD    CN+3 
          ZJN    PME4        IF EXCLUDED DEVICE TYPE
          AOD    T1 
          LMN    PMECL
          NJN    PME2        IF NOT END OF LIST 
  
          RJM    *           EXECUTE PROCESSOR
 PMEB     EQU    *-1
          UJN    PME4        PROCESS NEXT EQUIPMENT 
  
  
 PMEC     BSS    0           LIST OF EXCLUDED DEVICE TYPES
          CON    2RDE 
          CON    2RDP 
          CON    2RDV 
          CON    2RDW 
 PMECL    EQU    *-PMEC      LENGTH OF LIST 
 PDM      SPACE  4,15 
**        PDM - PROCESS DAYFILE MESSAGE.
* 
*         ENTRY  (A) = 6/BL, 12/TA. 
*                      BL = BML MESSAGE LENGTH. 
*                      TA = DAYFILE MESSAGE TABLE ADDRESS.
*                (DF) BIT 0 SET IF ISSUE MESSAGE TO ERRLOG. 
*                     BIT 1 SET IF ISSUE MESSAGE TO BML.
* 
*         EXIT   MESSAGE ISSUED TO ERRLOG AND/OR BML. 
* 
*         USES   TA, CM - CM+4. 
* 
*         CALLS  DFM. 
  
  
 PDM      SUBR               ENTRY/EXIT 
          STD    TA 
          SHN    -14
          STD    CM+1        SET BML MESSAGE LENGTH 
          LDD    DF 
          SHN    21-1 
          PJN    PDM1        IF BML MESSAGE NOT WANTED
          LDC    BMLN 
          LMM    1,TA 
          RJM    DFM
 PDM1     LDD    DF 
          LPN    1
          ZJN    PDMX        IF ERRLOG MESSAGE NOT WANTED 
          SHN    16-0 
          ERRNZ  ERLN-40000  CODE DEPENDS ON VALUE
          LMI    TA 
          RJM    DFM
          UJN    PDMX        RETURN 
 RSE      SPACE  4,10 
**        RSE - READ SELECT EST ENTRY.
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF DEVICE SELECTED.
*                (AI) = ALGORITHM INDEX.
*                (CN - CN+4) = EST ENTRY. 
*                (UL - UL+4) = *DDLL* WORD OF MST.
* 
*         MACROS SFA. 
  
  
 RSE1     LDN    1           INDICATE DEVICE NOT SELECTED 
  
 RSE      SUBR               ENTRY/EXIT 
          SFA    EST,T5 
          ADK    EQDE        FETCH EST ENTRY
          CRD    CN 
          LDD    CN          CHECK DEVICE TYPE
          SHN    21-13
          PJN    RSE1        IF NOT MASS STORAGE
          SHN    13-21
          LPN    3           CHECK DEVICE STATE 
          LMN    3
          ZJN    RSE1        IF DEVICE DOWN 
          LDD    CN+4 
          SHN    3
          ADN    DILL        GET ALGORITHM INDEX FROM MST 
          CRD    AI-4 
          ADN    DDLL-DILL   READ UNIT LIST 
          CRD    UL 
          LDD    UL          SET UNIT COUNT AND CONTROLLER NUMBER 
          SCN    70 
          STD    UL 
          LPC    2000        CHECK FOR *NULL EQUIPMENT* BIT 
          UJP    RSEX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
*CALL     COMPSDR 
 COMPPDI  SPACE  4,10 
          IF     -DEF,QUAL$ 
          QUAL   *
 IME      EQU    /COMPPDI/IME 
          ENDIF 
          ENDX
