Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - mcb/drivers/dteini.b16
There are no other files named dteini.b16 in the archive.
module DTEINI (	! DTE20 Driver Initialization
		ident = 'X01070',
		language (bliss16)
		) =
begin

!
!                    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 DTE Driver
!
! ABSTRACT:
!
!	This module contains the DTE driver Initialization routines.
!
! ENVIRONMENT: MCB V3.2
!
! AUTHOR: Alan D. Peckham	CREATION DATE: 13-Jun-81
!
! MODIFIED BY:
!
!	Alan D. Peckham, 13-Jun-81: Version 1
! 01	- Split off from DTENMX module.
! 03	- Fix device register existence checking.
! 04	- Fix for getting device name for NMX functions.
! 05	- Save NMX PIX for later.
! 06	- Support system specific line counters.
! 07	- Zero counters on startup.
!--
!
! INCLUDE FILES:
!

library 'MCBLIB';

library 'XPORTX';

library 'NMXLIB';

library 'DTEDAT';

!
! TABLE OF CONTENTS:
!

linkage
    DTE_CSR_NUM = jsr (register = 0, register = 1);

forward routine
    DTEDBI : novalue,
    DTEDVI,
    DTENMI,
    NXM_CATCHER,
    REGISTER_NXM : DTE_CSR_NUM;

!
! MACROS:
!
!	None
!
! EQUATED SYMBOLS:
!

literal
    TRUE = 1 EQL 1,
    FALSE = 1 EQL 0,
    NO_OPERATION = 0;

!
! OWN STORAGE:
!
!	None
!
! EXTERNAL REFERENCES:
!

external routine
    DTEIN : MCB_INTERRUPT novalue;

external
    MCB$GAW_PROCESS_DATA_BASE : vector [2],
    MCB$GW_PROCESS_HANDLE;

bind
    DB_BIAS = MCB$GAW_PROCESS_DATA_BASE [0];

macro
    GET_DTE_DATA_BASE (NAME) =
	%if %declared (NAME)
	%then map NAME : ref
	%else bind NAME = .MCB$GAW_PROCESS_DATA_BASE [1] :
	%fi block field (D_FIELDS); %;
global routine DTEDBI : novalue =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!	None
!
! IMPLICIT INPUTS:
!	None
!
! IMPLICIT OUTPUTS:
!	None
!
! ROUTINE VALUE:
! COMPLETION CODES:
!	None
!
! SIDE EFFECTS:
!	None
!--

    begin
    GET_DTE_DATA_BASE (DB)
    DB [$SUB_FIELD (D_REGISTER, 0, 0, 5, 0)] = CSTOFF*%upval;
    $NM_TIME (DB [D_TIME_LINE_ZEROED]);
    end;			!of routine DTEDBI
global routine DTEDVI =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!	None
!
! IMPLICIT INPUTS:
!	None
!
! IMPLICIT OUTPUTS:
!	None
!
! ROUTINE VALUE:
! COMPLETION CODES:
!	None
!
! SIDE EFFECTS:
!	None
!--

    begin
    GET_DTE_DATA_BASE (DB)
    DB [D_DEVICE_STATE] = DD_CLEARED;

    if .DB [D_REGISTER] lssa %o'160000'
    then
	begin
	COUNTER_INCREMENT (DB, D_INVALID_CONTROLLER_REGISTER);
	COUNTER_INCREMENT (DB, D_CONFIGURATION_ERRORS);
	return FALSE
	end;

    if REGISTER_NXM ((.DB [D_REGISTER] and not %o'37'), 16)
    then
	begin
	COUNTER_INCREMENT (DB, D_NXM_CONTROLLER_REGISTER);
	COUNTER_INCREMENT (DB, D_CONFIGURATION_ERRORS);
	return FALSE
	end;

    begin

    local
	STATUS;

    STATUS = $MCB_SET_VECTOR (.DB [D_VECTOR], DTEIN, .DB [D_PRIORITY]);

    if not .STATUS
    then
	begin

	selectone .STATUS of
	    set
	    [CE$VEC]:
		COUNTER_INCREMENT (DB, D_INVALID_VECTOR);
	    [CE$VCU]:
		COUNTER_INCREMENT (DB, D_CONFLICTING_VECTOR);
	    [CE$PRI]:
		COUNTER_INCREMENT (DB, D_INVALID_PRIORITY);
	    tes;

	COUNTER_INCREMENT (DB, D_CONFIGURATION_ERRORS);
	return FALSE
	end;

    end;
    DB [D_DEVICE_STATE] = DD_RUNNING;
    TRUE
    end;			!of routine DTEDVI
global routine DTENMI =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!	None
!
! IMPLICIT INPUTS:
!	None
!
! IMPLICIT OUTPUTS:
!	None
!
! ROUTINE VALUE:
! COMPLETION CODES:
!	None
!
! SIDE EFFECTS:
!	None
!--

    begin
    GET_DTE_DATA_BASE (DB)

    local
	NAME_BUFFER : vector [ch$allocation (17)],
	NMXID,
	NMXPIX;

    bind
	NAME_PTR = ch$ptr (NAME_BUFFER,, 8);

    if not $MCB_GET_PROCESS_HANDLE (%rad50_11 'NMX', NMXPIX) then return FALSE;

    DB [D_NMX_PIX] = .NMXPIX;
    $MCB_GET_DEVICE_NAME (.DB [D_LINE_ENTITY], NAME_PTR);
    NMX$CREATE_LINE (.NMXPIX, NAME_PTR, 0, NMXID);
    NMX$MODIFY_LINE_PROVIDER (.NMXPIX, NAME_PTR,
	.MCB$GW_PROCESS_HANDLE^8 + DTE_K_LINE_PROVIDER,
	DB [D_LINE_ENTITY]);
    NMX$MODIFY_LINE_OWNER (.NMXPIX, NAME_PTR,
	.MCB$GW_PROCESS_HANDLE^8 + DTE_K_LINE_OWNER,
	NMXID);
    NMX$CREATE_CIRCUIT (.NMXPIX, NAME_PTR, 0, NMXID);
    NMX$MODIFY_CIRCUIT_PROVIDER (.NMXPIX, NAME_PTR,
	.MCB$GW_PROCESS_HANDLE^8 + DTE_K_CIRCUIT_PROVIDER,
	DB [D_CIRCUIT_ENTITY]);

    TRUE
    end;			!of routine DTENMI
routine NXM_CATCHER (SIG, MCH, ENB) =

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!	SIG = signal vector address
!	MCH = mechanism vector address
!	ENB = enable vector address
!
! IMPLICIT INPUTS:
!	None
!
! IMPLICIT OUTPUTS:
!	None
!
! ROUTINE VALUE:
! COMPLETION CODES:
!	None
!
! SIDE EFFECTS:
!	None
!--

    begin

    map
	ENB : ref vector,
	MCH : ref vector,
	SIG : ref vector;

    if .SIG [1] neq SS$NXM then return FALSE;

    .ENB [1] = TRUE;
    TRUE
    end;			!of routine NXM_CATCHER
routine REGISTER_NXM

!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
       (CSR : ref vector volatile,
	NUM)
!
! IMPLICIT INPUTS:
!	None
!
! IMPLICIT OUTPUTS:
!	None
!
! ROUTINE VALUE:
	: DTE_CSR_NUM =
!
! SIDE EFFECTS:
!	None
!--

    begin

    local
	FLAG : volatile, %(BLISS initializes to 0 = FALSE)%
	TEMP;

    enable
	NXM_CATCHER (FLAG);

    do
	begin
	TEMP = .CSR [0];
	CSR = CSR [1];
	end
    while (NUM = .NUM - 1) nequ 0;

    .FLAG
    end;			!of routine REGISTER_NXM
end
eludom