          CTEXT  CTP$MR PROTOCOL PROCESS.
          SPACE  4,10
*         COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
          SPACE  4,10
***       CTP$MR_PROTOCOL_PROCESS.
*         G. J. FALCONER.    87/08/25.
          SPACE  4,10
***       THIS DECK FORMS THE MAIN PROCESSING OF MAINTENANCE CHANNEL
*         OPERATIONS. THIS DECK HOUSES *CLI*, *CMI*, *CMO*, *RME*, *SLI*,
*         *FMN*, *SMI*, *RMR*.
 CLI      SPACE  4,10
**        CLI - CLEAR LONG TERM INTERLOCK.
*
*         ENTRY  (LOCK) = 0 IF LONG TERM INTERLOCK IS CLEAR.
*                       = 1 IF LONG TERM INTERLOCK IS SET.
*
*         EXIT   LONG TERM INTERLOCK ON THE MAINTENANCE CHANNEL
*                IS CLEARED.
*                TO *FMN* IF LONG TERM INTERLOCK WAS NOT SET.


 CLI1     CCF    *,MR        RELEASE CHANNEL

 CLI      SUBR               ENTRY/EXIT
          SOM    LOCK
          ZJN    CLI1        IF INTERLOCK WAS SET
          LDN    DAMI-DANE   604 - CH17 INTERLOCK ERROR
          UJN    FMN         PROCESS FATAL MAINTENANCE ERROR
 CMI      SPACE  4,10
**        CMI - CLEAR MAINTENANCE INTERLOCK.
*
*         ENTRY  (LOCK) = 0 IF LONG TERM INTERLOCK IS CLEAR.
*                       = 1 IF LONG TERM INTERLOCK IS SET.
*
*         EXIT   MAINTENANCE CHANNEL RELEASED (UNLESS LONG
*                TERM INTERLOCK WAS SET).
*                LOWER 12 BITS OF A RESTORED IF NO ERROR.
*                TO *RME* TO RETRY IF PARITY ERRORS PRESENT ON READ.
*                TO *FMN* IF NON-READ CHANNEL PARITY ERRORS PRESENT.


 CMI1     NJN    CMI2        IF LONG TERM INTERLOCK SET
          CCF    *,MR        RELEASE CHANNEL
 CMI2     LDC    **          RESTORE (A)
 CMIA     EQU    *-1

 CMI      SUBR               ENTRY/EXIT
          STM    CMIA
          LDM    LOCK

*         THERE MUST BE AT LEAST A 3 MICROSECOND DELAY BETWEEN THE
*         LAST I/O OPERATION PERFORMED ON CH 17 AND THE DCN.

          DCN*   MR+40       ENSURE MAINTENANCE CHANNEL INACTIVE
          CFM    CMI1,MR     IF ERROR FLAG CLEAR
*         UJN    CMO         CHECK MAINTENANCE REGISTER OPERATION

          ERRNZ  *-CMO       CODE ASSUMES CMO FOLLOWS CMI
 CMO      SPACE  4,10
**        CMO - CHECK MAINTENANCE REGISTER OPERATION.
*
*         ENTRY  PARITY ERROR HAS OCCURRED ON MAINTENANCE CHANNEL.
*                (SMIB) = LAST FUNCTION.
*
*         EXIT   TO *RME* TO SEE IF OPERATION MAY BE RETRIED ON A READ.
*                TO *FMN* TO HANDLE NON-RETRIABLE ERROR.


 CMO      BSS    0           ENTRY
          LDML   SMIB        CHECK TYPE OF LAST FUNCTION
          LPC    0#F0
          LMC    MRRD
          ZJP    RME         IF RETRY-ABLE MAINTENANCE ERROR
          LDN    DAMP-DANE   603 - CH17 PARITY ERROR
*         UJP    FMN         PROCESS FATAL MAINTENANCE ERROR
 FMN      SPACE  4,10
**        FMN - PROCESS FATAL MAINTENANCE REGISTER NON-RETRYABLE ERROR.
*
*         ENTRY  (A) = ANALYSIS CODE - 600(16).
*
*         EXIT   TO EXIT ADDRESS IF SUPPLIED.


 FMN      ADC    DANE        REMOVE BIAS
          STML   MRFE        SAVE ANALYSIS CODE
          LJM    *
 MRFN     EQU    *-1         FATAL ERROR EXIT ADDRESS
 SLI      SPACE  4,10
**        SLI - SET LONG TERM INTERLOCK.
*
*         ENTRY  (LOCK) = 0.
*
*         EXIT   MAINTENANCE CHANNEL FLAG SET.
*                (LOCK) = 1.
*                TO *FMN* IF LONG TERM INTERLOCK CONFLICT
*
*         CALLS  SMI.


 SLI      SUBR               ENTRY/EXIT
          RJM    SMI         GET INTERLOCK ON CHANNEL
          AOM    LOCK
          SBN    1
          ZJN    SLIX        IF INTERLOCK JUST SET
          CCF    *,MR        RELEASE CHANNEL
          LDN    DAMI-DANE   604 - CH17 INTERLOCK ERROR
 SLI1     UJN    FMN         PROCESS FATAL MAINTENANCE ERROR
 SMI      SPACE  4,10
**        SMI - SET MAINTENANCE INTERLOCK.
*
*         EXIT   MAINTENANCE CHANNEL OBTAINED.
*                WAIT FOREVER FOR CHANNEL FLAG TO CLEAR.
*                TO *FMN* IF CHANNEL ACTIVE.


 SMI3     SCF    SMI3,MR     IF MAINTENANCE CHANNEL NOT AVAILABLE

 SMI4     AJM    SMI1,MR     IF CHANNEL ACTIVE
          LDML   SMIB        RESTORE FUNCTION

 SMI      SUBR               ENTRY/EXIT
          STML   SMIB        SAVE FUNCTION
          LDC    5           SET RETRY COUNT
 SMIA     EQU    *-1
          STM    RMEA
          LDC    **
 LOCK     EQU    *-1
          NJN    SMI4        IF LONG TERM INTERLOCK SET
          UJN    SMI3        ATTEMPT INTERLOCK

 SMI1     LDN    DAMA-DANE   605 - CH17 ACTIVE
 SMI2     UJN    SLI1        PROCESS FATAL MAINTENANCE ERROR

 SMIB     CON    0
 RTRY     EQU    SMI4        RETRY ADDRESS
          QUAL   CTIMPP
 RMR      SPACE  4,10
**        RMR - READ MAINTENANCE REGISTER.
*
*         ENTRY  (A) = ELEMENT CODE.
*                (RN) = REGISTER NUMBER.
*                *RDATA - RDATA+7* NEEDS TO BE DEFINED.
*
*         EXIT   (RDATA - RDATA+7) IS REGISTER DATA IN BYTE FORMAT.
*                (A) = BYTE 7 OF REGISTER.


 RMR      SUBR               ENTRY/EXIT
          STD    EC          SAVE ELEMENT CODE
          READMR RDATA       READ REGISTER INTO RDATA
          LDM    RDATA+7     GET BYTE 7 OF REGISTER
          UJN    RMRX        RETURN

          QUAL   *
 RMR      EQU    /CTIMPP/RMR
          SPACE  4,10
          ENDX
