          EJECT
*         CTEXT CTP$DFT_CHECK_DEGRADABLE_CPU
*
*         THIS DECK CONTAINS ROUTINES THAT DETERMINE IF IT IS POSSIBLE TO
*         DEGRADE THE CPU OUT OF THE SYSTEM ON A FATAL CPU ERROR.
 CDC      SPACE  4,10
**        CDC - CHECK DEGRADABLE CPU.
*
*         EXIT   (A) = 0 IF CPU CANNOT BE DEGRADED.
*                OS ACTION CODE SET TO *OSRME* AND *DFT* ACTION SET TO DISABLE
*                THE MEMORY PORT IF THE CPU IS DEGRADABLE.
*
*         USES   T1 - T4.
*
*         CALLS  CNL, IIB.
*
*         MACROS SETDAC, SETOSA.


*         THE CPU IS NOT DEGRADABLE.  SET THE OS ACTION CODE TO SYSTEM STEP.

 CDC2     SETOSA OSSS,OSSS
 CDC3     LDN    0           INDICATE THAT CPU IS NOT DEGRADABLE

 CDC      SUBR               ENTRY/EXIT
          LDN    D8TY        CHECK VERSION
          RJM    IIB
          CRDL   T1
          LDDL   T2
          ADC    -716D+1
          MJN    CDC3        IF THIS VERSION DOES NOT SUPPORT DEGRADING CPUS

*         CHECK IF C170 OS IS RUNNING IN STANDALONE MODE BY CHECKING THE
*         180 OS TYPE IN *D8TY*.

          LDDL   T4
          SHN    -14
          LMN    1
          ZJN    CDC3        IF C170 STANDALONE MODE
 CDC1     RJM    CNL         CHECK NUMBER OF LOGICALLY ON CPUS
          ZJN    CDC2        IF ONLY ONE CPU LOGICALLY ON
          LDM    WARN        CHECK IF POWER WARNING
          NJP    CDC2        IF POWER WARNING

*         THE CPU IS DEGRADABLE.  CHANGE THE DFT ACTION CODE TO DISABLE THE MEMORY
*         PORT AND CHANGE THE OS ACTION CODE TO RECONFIGURE MAINFRAME ELEMENTS.

          LDM    DTLA        GET THE DEGRADE CPU TASK LIST ADDRESS
          STM    DFTA
          SETOSA OSSS,OSRME
          LDDL   BC+BCFLG    CLEAR VALID 170 FLAG
          SCN    BC.FV7+1
          ERRNZ  BC.FV7      CODE ASSUMES BIT 0
          STDL   BC+BCFLG
          LDN    1           INDICATE CPU DEGRADABLE
          LJM    CDCX        RETURN
 CID      SPACE  4,10
**        CID - CHECK IF DISABLE CPU ERROR AND CPU DEGRADABLE.
*
*         ENTRY  (DFTA) = DFT ACTION POINTER.
*
*         CALLS  CDC.


 CID      SUBR               ENTRY/EXIT
          LDM    DFTA        CHECK DFT ACTION
          LMC    DDDC
          NJN    CIDX        IF NOT DISABLE CPU
          RJM    CDC         CHECK DEGRADABLE CPU
          UJN    CIDX        RETURN
 CNL      SPACE  4,10
**        CNL - CHECK NUMBER OF LOGICALLY ON CPUS.
*
*         EXIT   (A) = 0 IF ONLY ONE LOGICALLY ON CPU.
*
*         USES   T5.
*
*         CALLS  FHE, GPS, *ERRH*.


 CNL      SUBR               ENTRY/EXIT
          LDN    0           INITIALIZE NUMBER OF LOGICALLY ON CPUS
          STD    T5
          LDN    PROCID      READ CPU-0 DESCRIPTOR
          RJM    FHE
          MJN    CNL5        IF NOT FOUND
          RJM    GPS         GET PROCESSOR STATUS
          NJN    CNL1        IF CPU NOT ON OR MEMORY PORT DISABLED
          AOD    T5
 CNL1     LDC    PROCID1     READ CPU-1 DESCRIPTOR
          RJM    FHE
          MJN    CNL2        IF NOT PRESENT
          RJM    GPS         GET PROCESSOR STATUS
          NJN    CNL2        IF NOT LOGICALLY ON
          AOD    T5

*         RESET *HBUF* WITH THE DESCRIPTOR OF THE CURRENT CPU.

 CNL2     LDM    CPUO        GET CURRENT CPU NUMBER
          NJN    CNL3        IF NOT CPU 0
          LDN    PROCID      RESET WITH CPU-0 DATA
          UJN    CNL4        CONTINUE

 CNL3     LDC    PROCID1     RESET WITH CPU-1 DATA
 CNL4     RJM    FHE         RESET *HBUF*
          MJN    CNL5        IF NOT FOUND
          SOD    T5          RETURN ZERO IF ONLY ONE LOGICALLY ON CPU
          LJM    CNLX        RETURN

 CNL5     SETDAN (EPUN,DAME)
          LDC    DAME+TDFT   613 - DFT NO DESC IN MRT
          STML   RTP1
          CALL   ERRH
 GPS      SPACE  4,10
**        GPS - GET PROCESSOR STATUS.
*
*         ENTRY  (HBUF) = CPU DESCRIPTOR.
*
*         EXIT   (A) = 0 IF THE CPU IS ON AND THE MEMORY PORT IS ENABLED.
*
*         CALLS  CMP.
*
*         MACROS READMR.


 GPS      SUBR               ENTRY/EXIT
          LDM    HBUF+CPRSTAT  GET CPU STATUS
          LPC    1001
          NJN    GPSX        IF NOT LOGICALLY ON
          READMR RDATA,CMCC,ECMR  READ ENVIRONMENT CONTROL
          RJM    CMP         CHECK MEMORY PORT
          UJN    GPSX        RETURN

*         END CTP$DFT_CHECK_DEGRADABLE_CPU

