Trailing-Edge
-
PDP-10 Archives
-
BB-P363B-SM_1985
-
mcb/cex/cexslt.m11
There are no other files named cexslt.m11 in the archive.
.TITLE CEXSLT - Comm/Exec Support for System Lines
.IDENT /003030/
.ENABL LC
;
; COPYRIGHT (c) 1980, 1981, 1982
; DIGITAL EQUIPMENT CORPORATION
; Maynard, Massachusetts
;
; This software is furnished under a license and may be used
; and copied only in accordance with the terms of such license
; and with the inclusion of the above copyright notice. This
; software or any other copies thereof may not be provided or
; otherwise made available to any other person. No title to
; and ownership of the software is hereby transferred.
;
; The information in this software is subject to change
; without notice and should not be construed as a commitment
; by DIGITAL EQUIPMENT CORPORATION.
;
; DIGITAL assumes no responsibility for the use or reliability
; of its software on equipment which is not supplied by
; DIGITAL.
;
;++
; FACILITY: MCB Communications Executive
;
; FUNCTIONAL ABSTRACT:
;
; This module contains the routines to support
; the DLC and DDM interfaces.
;
; ENVIRONMENT: RSX kernel mode with EIS
;
; AUTHOR: Alan D. Peckham, CREATION DATE: 22-Jan-81
;
; MODIFIED BY:
;
; Alan D. Peckham, 30-Jan-80: VERSION 3.2
; 01 - Merged CEXDLC and CEXDDM modules.
; Support expanded C.SRC and C.DST in CCBSC.
; 02 - Support .CRDSP during process context switch.
; 03 - Correct conditionalized D$$BUG code in $DLCDB and $DDMDB.
;--
.SBTTL DECLARATIONS
;
; INCLUDE FILES:
;
.MCALL CRSH$S
;
; MACROS:
;
.MACRO SLCHK$
.IF NE,D$$BUG
CALL CCBSL
.ENDC
.ENDM SLCHK$
;
; EQUATED SYMBOLS:
;
; None
;
; OWN STORAGE:
;
.GLOBL .SLTNM ; Number of system lines.
.GLOBL .SLTTA ; System line table address
.IIF NE,<Z.DAT-4>,.ERROR Z.DAT; must be third word in PD
.IIF NE,<Z.PIX-4-Z.DAT>,.ERROR Z.PIX; must follow Z.DAT words
.SBTTL $DDAST - Send Asynchronous Notification
;++
; FUNCTIONAL DESCRIPTION:
;
; This routine attempts to allocate a CCB for the DDM and queue
; it to the DLC with an asynchronous status notification.
;
; If the CCB allocation fails, the call returns with a failure
; indication.
;
; The following information will be inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.AST
; C.STS given asynchronous status code
; C.LIX given line index
;
; CALLING SEQUENCE:
;
; CALL $DDAST
;
; INPUT PARAMETERS:
;
; R3 = Asynchronous completion status.
; R2 = line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; C-bit set = Resource allocation failure.
; C-bit clear = Operation successful.
;
; SIDE EFFECTS:
;
; The routine $CCBGT is called.
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DDAST::PLVL$ ; Crash if not at process level.
CALL $CCBGT ; Try to get a CCB
BCS 90$ ; and if successful
MOVB R2,C.LIX(R4) ; then set line index
CLRB C.MOD(R4) ; and no function modifier.
JSR R5,DDMSS ; Queue with status,
.BYTE FC.AST,0 ; AST function and new CCB owner.
90$: RETURN ; Return in shame.
.SBTTL $DDCCP - Control Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Return the given control CCB to the DLC with an
; operation status.
;
; The following information will be inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.CCP
; C.STS given control status code
;
; CALLING SEQUENCE:
;
; CALL $DDCCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
; R3 = Operation completion status.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DDCCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSS ; Queue with status
.BYTE FC.CCP,0 ; and CCP function.
.SBTTL $DDCRA - Kill Receives
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DDM with a request to kill
; all outstanding receives.
;
; The following information will be inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.KIL
; C.MOD FM.CRA
;
; CALLING SEQUENCE:
;
; CALL $DDCRA
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDCRA::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.KIL,FM.CRA ; KIL function and CRA modifier.
.SBTTL $DDGET - Get Characteristics
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DDM with a request to
; get the characteristics of the line.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.CTL
; C.MOD FM.GET
;
; CALLING SEQUENCE:
;
; CALL $DDGET
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDGET::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.CTL,FM.GET ; CTL function and GET modifier.
.SBTTL $DDKCP - Kill Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Return the given ccb to the DLC with an operation status.
;
; The following information is inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.KCP
; C.STS given kill status code
;
; CALLING SEQUENCE:
;
; CALL $DDKCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
; R3 = Operation completion status.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DDKCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSS ; Queue with status
.BYTE FC.KCP,0 ; and KCP function.
.SBTTL $DDKIL - Kill Receives and Transmits
;++
; FUNCTIONAL DESCRIPTION:
;
; The call passes a CCB to the DDM with a request to kill
; all outstanding transmits and receives.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.KIL
; C.MOD FM.KIL
;
; CALLING SEQUENCE:
;
; CALL $DDKIL
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDKIL::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.KIL,FM.KIL ; KIL function and KIL modifier.
.SBTTL $DDMDB - Get DDM Data Base
;++
; FUNCTIONAL DESCRIPTION:
;
; Get access to the DDM data base for a system line.
;
; This call can only be made from the DDM owning the line.
;
; CALLING SEQUENCE:
;
; CALL $DDMDB
;
; INPUT PARAMETERS:
;
; R5 = line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; R5 = address of the DDM data base.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
$DDMDB::PLVL$ ; Crash if not at process level.
PUSH$S R1
MOV R5,R1
DEC R1 ; If line index
.IF NE,D$$BUG
CMP .SLTNM,R1 ; is out of range
BLO 100$ ; then crash.
.IFTF
MUL #L.LEN,R1
ADD .SLTTA,R1
MOVB L.DDM(R1),R1
ASL R1
MOV .PDBVB(R1),R1
.IFT
CMP @.CRPDB,(R1) ; If not owning code
BNE 101$ ; then crash,
.IFTF
MOV .CRPDB,R5 ; otherwise
TST (R5)+
MOV .CRDSP,(R5)+ ; save old context.
MOV .CRDAT+0,(R5)+
MOV .CRDAT+2,(R5)
MOV R1,.CRPDB ; Set new process
TST (R1)+ ; and pick up
MOV (R1)+,.CRDSP ; dispatch address,
MAP$ (R1)
MOV (R1)+,.CRDAT+0 ; bias,
MOV (R1),R5
MOV (R1)+,.CRDAT+2 ; address,
MOVB (R1),.CRPIX ; and index.
POP$S R1
RETURN
.IFT
100$: POP$S R1
CRSH$S LIX ; Invalid line index
101$: POP$S R1
CRSH$S DDO ; DDM data base being accessed by stranger
.ENDC
.SBTTL $DDRCE - Receive Enable
;++
; FUNCTIONAL DESCRIPTION:
;
; This routine is used to return CCB/buffers to the DDM
; after the DLC no longer needs them.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.RCE
; C.MOD FM.DAT
;
; CALLING SEQUENCE:
;
; CALL $DDRCE
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDRCE::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.RCE,FM.DAT ; RCE function and DAT modifier.
.SBTTL $DDRCP - Receive Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Pass the given receive RDB to the DLC with an
; operation status.
;
; The following information is inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.RCP
; C.STS given receive status code
;
; CALLING SEQUENCE:
;
; CALL $DDRCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
; R3 = Operation completion status.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DDRCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSS ; Queue with status
.BYTE FC.RCP,0 ; and RCP function.
.SBTTL $DDSET - Set Characteristics
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DDM with a request to set the
; charactersistics of the line.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.CTL
; C.MOD FM.SET
;
; CALLING SEQUENCE:
;
; CALL $DDSET
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDSET::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.CTL,FM.SET ; CTL function and SET modifier.
.SBTTL $DDSTP - Stop Line
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DDM with a request to stop
; the specified line.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.CTL
; C.MOD FM.STP
;
; CALLING SEQUENCE:
;
; CALL $DDSTP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDSTP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.CTL,FM.STP ; CTL function and STP modifier.
.SBTTL $DDSTR - Start Line
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DDM with a request to start
; the specified line.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.CTL
; C.MOD FM.STR
;
; CALLING SEQUENCE:
;
; CALL $DDSTR
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDSTR::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.CTL,FM.STR ; CTL function and STR modifier.
.SBTTL $DDXCP - Transmit Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Return the given transmit CCB/buffer chain to the DLC
; with an operation status.
;
; The following information is inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.XCP
; C.STS given transmit status code
;
; CALLING SEQUENCE:
;
; CALL $DDXCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
; R3 = Operation completion status.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DDXCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSS ; Queue with status
.BYTE FC.XCP,0 ; and XCP function.
.SBTTL $DDXKL - Kill Transmits
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DDM with a request to kill
; all outstanding transmits.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.KIL
; C.MOD FM.XKL
;
; CALLING SEQUENCE:
;
; CALL $DDXKL
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDXKL::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSM ; Queue with
.BYTE FC.KIL,FM.XKL ; KIL function and XKL modifier.
.SBTTL $DDXME - Transmit Enable
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB/buffer chain to the DDM for transmission.
;
; The following information is inserted into the CCB
; and may be examined by the DDM:
; C.FNC FC.XME
;
; CALLING SEQUENCE:
;
; CALL $DDXME
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DDXME::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DDMSF ; Queue with
.BYTE FC.XME,0 ; XME function.
.SBTTL $DLAST - Send Asynchronous Notification
;++
; FUNCTIONAL DESCRIPTION:
;
; This routine attempts to allocate a CCB for the DLC and
; queue it to the LLC with an asynchronous status notification.
;
; If the CCB allocation fails, the call returns with a failure
; indication.
;
; The following information will be inserted into the CCB and
; may be examined by the LLC:
; C.FNC FC.AST
; C.LIX given line index
; C.PIX 0
; C.STS given asynchronous status code
;
; CALLING SEQUENCE:
;
; CALL $DLAST
;
; INPUT PARAMETERS:
;
; R3 = Asynchronous status code.
; R2 = Line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; C-bit set = Resource allocation failure.
; C-bit clear = Operation succeeded.
;
; SIDE EFFECTS:
;
; The routine $CCBGT is called.
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DLAST::PLVL$ ; Crash if not at process level.
CALL $CCBGT ; Try to get a CCB
BCS 90$ ; and if successful
MOVB R2,C.LIX(R4) ; then set line index
CLRB C.MOD(R4) ; and no function modifier.
JSR R5,DLCSS ; Queue with status,
.BYTE FC.AST,0 ; AST function and new CCB owner.
90$: RETURN ; Return in shame.
.SBTTL $DLCCP - Control Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Return the given control CCB to the LLC with an
; operation status.
;
; The following information will be inserted into the CCB
; and may be examined by the LLC:
; C.FNC FC.CCP
; C.PIX 0
; C.STS given control status code
;
; CALLING SEQUENCE:
;
; CALL $DLCCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
; R3 = Operation completion status code.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DLCCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSS
.BYTE FC.CCP,0
.SBTTL $DLCDB - Get DLC Data Base
;++
; FUNCTIONAL DESCRIPTION:
;
; Get access to the DLC data base for a system line.
;
; This call can only be made from the DLC owning the line.
;
; CALLING SEQUENCE:
;
; CALL $DLCDB
;
; INPUT PARAMETERS:
;
; R5 = line index.
;
; IMPLICIT INPUTS:
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = address of system line table.
;
; IMPLICIT OUTPUTS:
;
; KISAR6 = mapped to the system line table.
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
$DLCDB::PLVL$ ; Crash if not at process level.
PUSH$S R1
MOV R5,R1
DEC R1 ; If line index
.IF NE,D$$BUG
CMP .SLTNM,R1 ; is out of range
BLO 100$ ; then crash.
.IFTF
MUL #L.LEN,R1
ADD .SLTTA,R1
MOVB L.DLC(R1),R1
ASL R1
MOV .PDBVB(R1),R1
.IFT
CMP @.CRPDB,(R1) ; If not owning code
BNE 101$ ; then crash,
.IFTF
MOV .CRPDB,R5 ; otherwise
TST (R5)+
MOV .CRDSP,(R5)+ ; save old context.
MOV .CRDAT+0,(R5)+
MOV .CRDAT+2,(R5)
MOV R1,.CRPDB ; Set new process
TST (R1)+ ; and pick up
MOV (R1)+,.CRDSP ; dispatch address,
MAP$ (R1)
MOV (R1)+,.CRDAT+0 ; bias,
MOV (R1),R5
MOV (R1)+,.CRDAT+2 ; address,
MOVB (R1),.CRPIX ; and index.
POP$S R1
RETURN
.IFT
100$: POP$S R1
CRSH$S LIX ; Invalid line index
101$: POP$S R1
CRSH$S DLO ; DDM data base being accessed by stranger
.ENDC
.SBTTL $DLGET - Get Characteristics
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DLC with a request to get
; the characteristics of the line.
;
; The following information will be inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.CTL
; C.MOD FM.GET
;
; CALLING SEQUENCE:
;
; CALL $DLGET
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DLGET::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSM
.BYTE FC.CTL,FM.GET
.SBTTL $DLRCE - Receive Enable
;++
; FUNCTIONAL DESCRIPTION:
;
; This routine is used to return CCB/buffers to the DDM
; after the LLC no longer needs them.
;
; The following information will be inserted in the CCB
; and may be examined by the DLC:
; C.FNC FC.RCE
;
; CALLING SEQUENCE:
;
; CALL $DLRCE
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DLRCE::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSF
.BYTE FC.RCE,0
.SBTTL $DLRCP - Receive Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Pass the given chain of CCB/buffers to the LLC with the
; given operation status.
;
; The following information will be inserted into the CCB
; and may be examined by the LLC:
; C.FNC FC.RCP
; C.PIX 0
; C.STS given receive status code.
;
; CALLING SEQUENCE:
;
; CALL $DLRCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
; R3 = Operation complete status code.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DLRCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSS
.BYTE FC.RCP,0
.SBTTL $DLSET - Set Characteristics
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DLC with a request to set
; the characteristics of the line.
;
; The following information will be inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.CTL
; C.MOD FM.SET
;
; CALLING SEQUENCE:
;
; CALL $DLSET
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB conatining:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DLSET::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSM
.BYTE FC.CTL,FM.SET
.SBTTL $DLSTP - Stop Line
;++
; FUNCTIONAL DESCRIPTION:
;
; This call passes a CCB to the DLC with a request to stop
; the specified line.
;
; The following information will be inserted into the CCB
; and may be examined by the DLC:
; C.FNC FC.CTL
; C.MOD FM.STP
;
; CALLING SEQUENCE:
;
; CALL $DLSTP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DLSTP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSM
.BYTE FC.CTL,FM.STP
.SBTTL $DLSTR - Start Line
;++
; FUNCTIONAL DESCRIPTION:
;
; The call passes a CCB to the DLC with a request to start
; the specified line.
;
; The following information will be inserted in the CCB
; and may be examined by the DLC:
; C.FNC FC.CTL
; C.MOD FM.STR
;
; CALLING SEQUENCE:
;
; CALL $DLSTR
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DLSTR::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSM
.BYTE FC.CTL,FM.STR
.SBTTL $DLXCP - Transmit Complete
;++
; FUNCTIONAL DESCRIPTION:
;
; Return a given transmit CCB/buffer chain to the LLC
; with an operation status.
;
; The following information will be inserted into the CCB
; and may be examined by the LLC:
; C.FNC FC.XCP
; C.PIX 0
; C.STS given transmit status code.
;
; CALLING SEQUENCE:
;
; CALL $DLXCP
;
; INPUT PARAMETERS:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
; R3 = Operation completion status code.
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Registers R3 and R4 are not preserved.
;--
.PSECT $CODE$,I,RO
$DLXCP::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSS
.BYTE FC.XCP,0
.SBTTL $DLXME - Transmit Enable
;++
; FUNCTIONAL DESCRIPTION:
;
; Pass the given CCB/buffer chain to the DLC for transmission.
;
; The following information will be inserted into the CCB
; and may examined by the DLC:
; C.FNC FC.XME
;
; CALLING SEQUENCE:
;
; R4 = Address of CCB chain, the first containing:
; C.LIX line index.
;
; INPUT PARAMETERS:
;
; None
;
; IMPLICIT INPUTS:
;
; None
;
; OUTPUT PARAMETERS:
;
; None
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; Register R4 is not preserved.
;--
.PSECT $CODE$,I,RO
$DLXME::PLVL$ ; Crash if not at process level.
CCBCK$ ; Verify CCB address.
JSR R5,DLCSF
.BYTE FC.XME,0
.SBTTL DDMSM - Set Function and Modifier
;++
; FUNCTIONAL DESCRIPTION:
;
; Set the following information into the given CCB:
; C.FNC function code
; C.MOD function modifier
; C.SRC source process index
; C.DST destination process index
; C.OWN destination process index (FC.AST only)
;
; CALLING SEQUENCE:
;
; JSR R5,DDMSM
; .BYTE function,modifier
;
; INPUT PARAMETERS:
;
; R5 = function parameter block:
; 0(R5) function code.
; 1(R5) function modifier.
; R4 = address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; On the stack:
; 0(SP) = original contents of R5.
; 2(SP) = return address.
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = original contents of R5.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
DDMSM: SLCHK$ ; Check the line index.
MOVB (R5)+,C.FNC(R4) ; Set function,
MOVB (R5),C.MOD(R4) ; modifier,
JSR R1,CCBSC ; and then do common stuff.
.WORD L.DLC-L.LEN
.SBTTL DDMSS - Set Function and Status
;++
; FUNCTIONAL DESCRIPTION:
;
; Set the following information into the given CCB.
; C.FNC function code
; C.STS completion status
; C.SRC source process index
; C.DST destination process index
; C.OWN destination process index (FC.AST only)
;
; CALLING SEQUENCE:
;
; JSR R5,DDMSS
; .BYTE function,0
;
; INPUT PARAMETERS:
;
; R5 = function parameter block:
; 0(R5) function code.
; 1(R5) (unused)
; R4 = address of CCB containing:
; C.LIX line index.
; R3 = completion status.
;
; IMPLICIT INPUTS:
;
; On the stack:
; 0(SP) = original contents of R5.
; 2(SP) = return address.
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = original contents of R5.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
DDMSS: SLCHK$ ; Check the line index.
MOV R3,C.STS(R4) ; Set status
BR DDMSB ; and go to set function.
.SBTTL DDMSF - Set Function
;++
; FUNCTIONAL DESCRIPTION:
;
; Set the following information into the given CCB.
; C.FNC function code
; C.SRC source process descriptor block
; C.DST destination process descriptor block
; C.OWN destination process index (FC.AST only)
;
; CALLING SEQUENCE:
;
; JSR R5,CCBSF
; .BYTE function,0
;
; INPUT PARAMETERS:
;
; R5 = function parameter block:
; 0(R5) function code.
; 1(R5) (unused)
; R4 = address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; On the stack:
; 0(SP) = original contents of R5.
; 2(SP) = return address.
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = original contents of R5.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
DDMSF: SLCHK$ ; Check the line index.
DDMSB: MOVB (R5)+,C.FNC(R4) ; Set function
JSR R1,CCBSC ; and fall through to common stuff.
.WORD L.DLC-L.LEN
.SBTTL DLCSM - Set Function and Modifier
;++
; FUNCTIONAL DESCRIPTION:
;
; Set the following information into the given CCB:
; C.FNC function code
; C.MOD function modifier
; C.SRC source process index
; C.DST destination process index
; C.OWN destination process index (FC.AST only)
;
; CALLING SEQUENCE:
;
; JSR R5,DLCSM
; .BYTE function,modifier
;
; INPUT PARAMETERS:
;
; R5 = function parameter block:
; 0(R5) function code.
; 1(R5) function modifier.
; R4 = address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; On the stack:
; 0(SP) = original contents of R5.
; 2(SP) = return address.
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = original contents of R5.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
DLCSM: SLCHK$ ; Check the line index.
MOVB (R5)+,C.FNC(R4) ; Set function,
MOVB (R5),C.MOD(R4) ; modifier,
JSR R1,CCBSC ; and then do common stuff.
.WORD L.LLC-L.LEN
.SBTTL DLCSS - Set Function and Status
;++
; FUNCTIONAL DESCRIPTION:
;
; Set the following information into the given CCB.
; C.FNC function code
; C.STS completion status
; C.SRC source process index
; C.DST destination process index
; C.OWN destination process index (FC.AST only)
;
; CALLING SEQUENCE:
;
; JSR R5,DLCSS
; .BYTE function,0
;
; INPUT PARAMETERS:
;
; R5 = function parameter block:
; 0(R5) function code.
; 1(R5) (unused)
; R4 = address of CCB containing:
; C.LIX line index.
; R3 = completion status.
;
; IMPLICIT INPUTS:
;
; On the stack:
; 0(SP) = original contents of R5.
; 2(SP) = return address.
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = original contents of R5.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
DLCSS: SLCHK$ ; Check the line index.
MOV R3,C.STS(R4) ; Set status
BR DLCSB ; and go to set function.
.SBTTL DLCSF - Set Function
;++
; FUNCTIONAL DESCRIPTION:
;
; Set the following information into the given CCB.
; C.FNC function code
; C.SRC source process descriptor block
; C.DST destination process descriptor block
; C.OWN destination process index (FC.AST only)
;
; CALLING SEQUENCE:
;
; JSR R5,DLCSF
; .BYTE function,0
;
; INPUT PARAMETERS:
;
; R5 = function parameter block:
; 0(R5) function code.
; 1(R5) (unused)
; R4 = address of CCB containing:
; C.LIX line index.
;
; IMPLICIT INPUTS:
;
; On the stack:
; 0(SP) = original contents of R5.
; 2(SP) = return address.
;
; .CRPIX = process index of current process.
;
; OUTPUT PARAMETERS:
;
; R5 = original contents of R5.
;
; IMPLICIT OUTPUTS:
;
; None
;
; CONDITION CODES:
;
; None
;
; SIDE EFFECTS:
;
; None
;--
.PSECT $CODE$,I,RO
DLCSF: SLCHK$ ; Check the line index.
DLCSB: MOVB (R5)+,C.FNC(R4) ; Set function
JSR R1,CCBSC ; and then do common stuff.
.WORD L.LLC-L.LEN
;
; Common code for CCBS* routines.
;
CCBSC: PUSH$S (R1) ; Save higher level offset.
MOV .CRPDB,C.SRC(R4) ; This is the source process
CLRB C.PIX(R4) ; and is from system line.
MOVB C.LIX(R4),R1 ; Get LIX
MUL #L.LEN,R1 ; and index into
ADD .SLTTA,R1 ; system line table
ADD (SP)+,R1 ; and then into entry.
MOVB -(R5),R5 ; Get function code
BEQ 10$ ; and if not AST
CMPB #FC.TIM,R5 ; then check if XCP,RCP,KCP,CCP.
BLO 20$ ; If not,
MOVB -2(R1),R5
ASL R5
MOV .PDBVB(R5),C.DST(R4) ; get lower destination
CALL $CCBQL ; and queue to lower process
BR 30$ ; otherwise
10$: MOVB (R1),C.OWN(R4) ; set new CCB owner if AST,
20$: MOVB (R1),R5
ASL R5
MOV .PDBVB(R5),C.DST(R4) ; higher destination,
CALL $CCBQH ; and queue to higher process.
30$: POP$S <R1,R5> ; Recover registers.
CLC
RETURN
.IF NE,D$$BUG
CCBSL: TSTB C.LIX(R4) ; If line index
BLE 100$ ; is
CMPB .SLTNM,C.LIX(R4) ; out of range
BLO 100$ ; then crash.
RETURN
100$: TST (SP)+
POP$S R5
CRSH$S LIX ; Invalid line index
.ENDC
.END