Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - mcb/mcb/scsys.req
There are no other files named scsys.req in the archive.
!                    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.

!+
!	*** Start of SCSYS ***
!    System Interface Parameters
!-

%if not %declared (XPO$K_VERSION) %then library 'MCB:XPORTX' %fi;
$show (all);

!+
! Function modifier codes for the System User Interface
!-
literal
    S$CON = 0,				! Connect
    S$ACC = 2,				! Accept
    S$REJ = 4,				! Reject
    S$SND = 6,				! Send data segment
    S$MRQ = 8,				! Data message request
    S$DRQ = 10,				! Data segment request
    S$SNI = 12,				! Send interrupt
    S$IRQ = 14,				! Interrupt request
    S$DIS = 16,				! Disconnect
    S$ABO = 18,				! Abort
    S$GLN = 20,				! Get local node info
    S$CNR = 0,				! Connect received
    S$DAT = 2,				! Return data segment
    S$INT = 4,				! Return interrupt data segment
    S$DSR = 6,				! Disconnect received

    S$XHI = S$GLN,			! Highest XME modifier
    S$RHI = S$DSR;			! Highest RCE modifier

!+
! Miscellaneous Flags/Values
!-
literal
    S$PSEG = 1,				! Segment flow control
    S$PMSG = 2,				! Message flow control

    S$PBOM = 1,				! Beginning of message
    S$PMOM = 2,				! Middle of message
    S$PEOM = 4;				! End of message
!+
! Status codes
!-
literal
    S_EHI = 1,				! Highest code
    S_SSUC = 1,				! Operation successful

    ! The following codes may appear in reject and disconnect data,
    ! but in their positive form.  For the first two values, since
    ! there is no negative zero, a synonym value of 20 is used.
    ! The zero values are seen by SC only.
!   S_ERBO = 0,				! Rejected by object
!   S_EDBO = 0,				! Disconnect by object
    S_ERES = -1,			! Insufficient network resources
    S_EUNN = -2,			! Unrecognized node name
    S_ERNS = -3,			! Remote node shut down
    S_EURO = -4,			! Unrecognized object
    S_EIOF = -5,			! Invalid object name format
    S_EOTB = -6,			! Object too busy
    S_EABS = -7,			! Abort by remote Session Control
    S_EABM = -8,			! Abort by management
    S_EABO = -9,			! Abort by object
    S_EINF = -10,			! Invalid node name format
    S_ELNS = -11,			! Local node shut down
    S_ECBE = -12,			! Connect block format error
    S_EERR = -13,			! General, unspecified error
    S_EIDM = -14,			! Invalid data mode
    S_ELST = -15,			! Data lost   buffer too small
    S_ELWS = -16,			! Link in wrong state
    S_EMTL = -17,			! Message too long
    S_ENSL = -18,			! No such link
    S_EABL = -19,			! Abort by local SC
    S_ERBO = -20,			! Rejected by object
    S_EDBO = -20,			! Disconnect by object
    S_ETMI = -21,			! Too many interrupt messages requested
    S_EACR = -34,			! Access control rejection
    S_ENRO = -38,			! No response from object
    S_ENOF = -38,			! Node or object failed
    S_ENUR = -39,			! Node unreachable
    S_ELO = -39;			! Lowest code
!+
! System Interface Macros
!-
macro		! First, a support macro or two
    $SC$LO_BYTE = 0,0,bits_byte,0 %,

    $SC$HI_BYTE = 0,bits_byte,bits_byte,0 %,

    $SC$QUE (fnc, mdf) =
	%if not %null (fnc) %then $SC$CCB [C_FNC] = fnc; %fi
	%if not %null (mdf) %then $SC$CCB [C_MOD] = mdf; %fi
	LLCRS$ ($SC$CCB) %,

    $SC$CND (val, loc) =
	%if not %null (val) %then loc = val; %fi %,

    $SC$BUF (bias, addr, count) =
	$SC$CND (bias, $SC$CCB [C_BIAS])
	$SC$CND (addr, $SC$CCB [C_ADDR])
	$SC$CND (count, $SC$CCB [C_CNT]) %,

!+
! Structure Access Macros
!-
    $SC_GET_LLA (ccb, lla) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	lla = .$SC$CCB [C_LIX]
	end %,

    $SC_GET_ULA (ccb, ula) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	ula = .$SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)]
	end %,


!+
! Interface Macros
!-
    $SC_ABORT (ccb, pix, ula, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$ABO)
	end %,

    $SC_ACCEPT (ccb, pix, lla, ula, flg, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$CND (flg, $SC$CCB [$sub_field (C_PRM1, $SC$HI_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$ACC)
	end %,

    $SC_CONNECT (ccb, pix, ula, flg, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$CND (flg, $SC$CCB [$sub_field (C_PRM1, $SC$HI_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$CON)
	end %,

    $SC_CONNECT_RECEIVED (ccb, ula, sts) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$CND (sts, $SC$CCB [C_STS])
	$SC$QUE (FC_RCE)
	end %,

    $SC_DATA_SEGMENT_RETURN (ccb) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$QUE (FC_RCE)
	end %,

    $SC_DATA_MESSAGE_REQUEST (ccb, pix, lla, ula, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$MRQ)
	end %,

    $SC_DATA_SEGMENT_REQUEST (ccb, pix, lla, ula, num) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$CND (num, $SC$CCB [$sub_field (C_PRM1, $SC$HI_BYTE)])
	$SC$QUE (FC_XME, S$DRQ)
	end %,

    $SC_DATA_SEGMENT_TRANSMIT (ccb, pix, lla, ula, flg, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$CND (flg, $SC$CCB [$sub_field (C_PRM1, $SC$HI_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$SND)
	end %,

    $SC_DISCONNECT (ccb, pix, lla, ula, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$DIS)
	end %,

    $SC_DISCONNECTED (ccb) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$QUE (FC_RCE)
	end %,

    $SC_INTERRUPT_REQUEST (ccb, pix, lla, ula, num) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$CND (num, $SC$CCB [$sub_field (C_PRM1, $SC$HI_BYTE)])
	$SC$QUE (FC_XME, S$IRQ)
	end %,

    $SC_INTERRUPT_RETURN (ccb) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$QUE (FC_RCE)
	end %,

    $SC_INTERRUPT_TRANSMIT (ccb, pix, lla, ula, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (ula, $SC$CCB [$sub_field (C_PRM1, $SC$LO_BYTE)])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$SNI)
	end %,

    $SC_LOCAL_NODE_INFO (ccb, pix, flg, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (flg, $SC$CCB [C_PRM1])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$GLN)
	end %,

    $SC_REJECT (ccb, pix, lla, rej, buf) =
	begin
	bind $SC$CCB = ccb: block field (C_FIELDS);
	$SC$CND (pix, $SC$CCB [C_PIX])
	$SC$CND (lla, $SC$CCB [C_LIX])
	$SC$CND (rej, $SC$CCB [C_PRM2])
	$SC$BUF (%remove (buf))
	$SC$QUE (FC_XME, S$REJ)
	end %;
!+
! Field mapping for the Connect Block
!-
$field CB_FIELDS =
    set
    CB_NODE = [$byte_string (6)],	! Destination node name

    CB_DFMT = [$byte], 			! Destination object format
    CB_DOBJ = [$byte],			!      "        "    type
    CB_DST = [$byte_string (18)],	!      "        "    descriptor

    CB_SFMT = [$byte], 			! Source object format
    CB_SOBJ = [$byte], 			!   "      "    type
    CB_SRC = [$byte_string (18)],	!   "      "    descriptor

    CB_RQDL = [$short_integer],		! Requester ID length
    CB_RQID = [$byte_string (16)],	!     "      "

    CB_PASL = [$short_integer],		! Password length
    CB_PASW = [$byte_string (8)],	!     "

    CB_ACTL = [$short_integer],		! Accounting data length
    CB_ACNT = [$byte_string (16)],	!     "       "

    CB_OPDL = [$short_integer],		! Optional data length
    CB_OPTD = [$byte_string (16)],	!     "     "
    CB_ENDD = [$sub_block (0)],		! End marker

    $overlay (CB_DST)			! Format 1
	CB_DPL1 = [$short_integer],	! Destination process name length
	CB_DPR1 = [$byte_string (16)], 	!      "         "     "
    $continue

    $overlay(CB_DST)			! Format 2
	CB_DGRP = [$short_integer],	! Destination group code
	CB_DUSR = [$short_integer],	!      "      user   "
	CB_DPL2 = [$short_integer],	!      "      process name length
	CB_DPR2 = [$byte_string (12)], 	!      "         "     "
    $continue

    $overlay(CB_SRC)			! Format 1
	CB_SPL1 = [$short_integer],	! Source process name length
	CB_SPR1 = [$byte_string (16)], 	!   "       "     "
    $continue

    $overlay(CB_SRC)			! Format 2
	CB_SGRP = [$short_integer],	! Source group code
	CB_SUSR = [$short_integer],	!   "    user   "
	CB_SPL2 = [$short_integer],	!   "    process name length
	CB_SPR2 = [$byte_string (12)]	!   "       "     "
    $continue
    tes;

literal
    CB_SIZE = $field_set_size;
!+
! Field mapping for either source or destination sub_blocks
!-
$field CBSD_FIELDS =
    set
    CB_FMT = [$byte],			! Format
    CB_OBJ = [$byte],			! Object type
    CB_DES = [$byte_string (18)],	! Descriptor

    $overlay (CB_DES)			! Format #1
	CB_LEN = [$short_integer],
	CB_NAM = [$byte_string (16)],
    $continue

    $overlay (CB_DES)			! Format #2
	CB_GRP = [$short_integer],
	CB_USR = [$short_integer],
	CB_LN2 = [$short_integer],
	CB_NM2 = [$byte_string (12)]
    $continue
    tes;


!+
!	*** End of SCSYS ***
!-