Trailing-Edge
-
PDP-10 Archives
-
TOPS-20_V6.1_DECnetSrc_7-23-85
-
mcb/xpt/xpefwd.lst
There is 1 other file named xpefwd.lst in the archive. Click here to see a list.
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 1
30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (1)
; 0001 module XPEFWD (
; 0002 IDENT = 'X01150'
; 0003 ) =
; 0004 begin
; 0005
; 0006 !
; 0007 ! COPYRIGHT (c) 1980, 1981, 1982
; 0008 ! DIGITAL EQUIPMENT CORPORATION
; 0009 ! Maynard, Massachusetts
; 0010 !
; 0011 ! This software is furnished under a license and may be used
; 0012 ! and copied only in accordance with the terms of such license
; 0013 ! and with the inclusion of the above copyright notice. This
; 0014 ! software or any other copies thereof may not be provided or
; 0015 ! otherwise made available to any other person. No title to
; 0016 ! and ownership of the software is hereby transferred.
; 0017 !
; 0018 ! The information in this software is subject to change
; 0019 ! without notice and should not be construed as a commitment
; 0020 ! by DIGITAL EQUIPMENT CORPORATION.
; 0021 !
; 0022 ! DIGITAL assumes no responsibility for the use or reliability
; 0023 ! of its software on equipment which is not supplied by
; 0024 ! DIGITAL.
; 0025 !
; 0026
; 0027 !++
; 0028 ! FACILITY: Transport
; 0029 !
; 0030 ! ABSTRACT:
; 0031 !
; 0032 ! Transport forwarding module: Forwards packets to other MCB
; 0033 ! routines, and terminates packets which are not to be forwarded.
; 0034 !
; 0035 ! ENVIRONMENT: MCB
; 0036 !
; 0037 ! AUTHOR: L. Webber , CREATION DATE: 23-Oct-79
; 0038 !
; 0039 ! MODIFIED BY:
; 0040 !
; 0041 ! L. Webber, 23-Oct-79 : VERSION 1.00
; 0042 !
; 0043 ! 1.01 L. Webber, 20-Dec-79
; 0044 ! MCB interface modifications
; 0045 !
; 0046 ! 1.02 L. Webber, 30-Jun-80
; 0047 ! Modify to use MCBLIB macros
; 0048 !
; 0049 ! 1.03 A. Peckham, 15-Oct-80
; 0050 ! Take advantage of new function modifiers.
; 0051 !
; 0052 ! 1.04 L. Webber, 17-Nov-80
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 2
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (1)
; 0053 ! Decrement ECL quota when queuing a message to ECL.
; 0054 !
; 0055 ! 1.05 L. Webber, 11-Dec-80
; 0056 ! Modify to support MCB 3.1
; 0057 !
; 0058 ! 1.06 L. Webber, 10-Feb-81
; 0059 ! Change from XPTFWD to XPEFWD; all entries are now CALL$
; 0060 ! so they may be CALL$E'd. All entries now have a "_"
; 0061 ! in front of them, as: _TERMINATE.
; 0062 !
; 0063 ! 1.07 L. Webber, 18-Feb-81
; 0064 ! Fix maintenance of INPUTquota.
; 0065 ! Add debugging code to maintain a count of DLL receive buffers
; 0066 ! outstanding to Transport.
; 0067 !
; 0068 ! 1.08 L. Webber, 16-Mar-81
; 0069 ! Fix _TERMINATE to call UNSPAWN to clean up a spawned CCB.
; 0070 !
; 0071 ! 1.09 L. Webber, 4-Jun-81
; 0072 ! Fix ECLFWD not to set C_LIN.
; 0073 !
; 0074 ! 1.10 L. Webber, 25-Jun-81
; 0075 ! Have FORWARDER check for negative as well as zero values of the
; 0076 ! line quota (this is to accomodate some "high-priority" messages).
; 0077 !
; 0078 ! 1.11 L. Webber, 26-Jun-81
; 0079 ! Fix _TERMINATE to get rid of Transport's own (usually XCP) CCB.
; 0080 !
; 0081 ! 1.12 L. Webber, 20-Jul-81
; 0082 ! Modify _TERMINATE not to adjust input count when terminating a DC we
; 0083 ! sent (it was already adjusted when the DC was sent).
; 0084 !
; 0085 ! 1.13 A. Peckham, 19-Sep-81
; 0086 ! Change CSBRT$ call to $MCB_RETURN_CCB_AND_BUFFER.
; 0087 !
; 0088 ! 1.14 L. Webber, 23-Feb-82
; 0089 ! Add DLLquota maintanance.
; 0090 !
; 0091 ! 1.15 A. Peckham, 22-Apr-82
; 0092 ! Eliminate GETLINE references.
; 0093 !
; 0094 !--
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 3
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (2)
; 0095
; 0096 !
; 0097 ! INCLUDE FILES:
; 0098 !
; 0099
; 0100 require 'XPTMAC';
; 0198
; 0199 !
; 0200 ! TABLE OF CONTENTS
; 0201 !
; 0202
; 0203 forward routine
; 0204 _SNDBUF: CALL$ novalue,
; 0205 _FORWARDER: CALL$,
; 0206 DLL_Q: novalue,
; 0207 _ECLFWD: CALL$,
; 0208 _TERMINATE: CALL$ novalue;
; 0209
; 0210 !
; 0211 ! MACROS:
; 0212 !
; 0213
; 0214 !
; 0215 ! EQUATED SYMBOLS:
; 0216 !
; 0217
; 0218 !
; 0219 ! OWN STORAGE:
; 0220 !
; 0221
; 0222 !
; 0223 ! EXTERNAL REFERENCES:
; 0224 !
; 0225
; 0226 external routine
; 0227 UNSPAWN: novalue;
; 0228
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 4
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (3)
; 0229
; 0230 global
; 0231 routine _SNDBUF (LINEb,CCB): CALL$ novalue =
; 0232
; 0233 !++
; 0234 ! FUNCTIONAL DESCRIPTION:
; 0235 !
; 0236 ! This routine is called to unconditionally forward a packet to the
; 0237 ! Transport Line Interface Layer. If the packet cannot be sent, it
; 0238 ! will be discarded.
; 0239 !
; 0240 ! FORMAL PARAMETERS
; 0241 !
; 0242 ! LINEb The data base of the output line on which it is
; 0243 ! to be forwarded.
; 0244 ! CCB The CCB for the packet to be forwarded; the packet is assumed
; 0245 ! to be an unpaired SDB which belongs to Transport.
; 0246 !
; 0247 ! IMPLICIT INPUTS
; 0248 !
; 0249 ! LINEstate
; 0250 !
; 0251 ! ROUTINE VALUE:
; 0252 ! COMPLETION CODES:
; 0253 !
; 0254 ! NONE.
; 0255 !
; 0256 ! SIDE EFFECTS:
; 0257 !
; 0258 ! NONE.
; 0259 !
; 0260 !--
; 0261
; 0262 begin
; 0263 map CCB: ref block field (C_XPT_fields);
; 0264 require 'XPTSYM';
; 0301
; 0302 !
; 0303 ! Make sure the output line is up
; 0304 !
; 0305
; 0306 if ((.CCB[C_XPT_TYPE] neq INITcode)!Buffer is not from Line Support
; 0307 and (.LINEstate neq RU)) ! and line is not in "run" state:
; 0308 then $MCB_RETURN_CCB_AND_BUFFER(.CCB[C_XPT_ALLOCATION],.CCB) ! get rid of CCB/buffer
; 0309
; 0310 !
; 0311 ! OK - now send out the packet
; 0312 !
; 0313
; 0314 else DLL_Q(.CCB,.LINEb);
; 0315 end; !End of _SNDBUF
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 5
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (3)
.TITLE XPEFWD
.IDENT /X01150/
.GLOBL UNSPAWN, .CRDAT, $CBBRT
.SBTTL .SNDBUF
000000 .PSECT $CODE$, RO
000000 016504 000004 .SNDBUF::
U.1: MOV 4(R5),R4 ; CCB(.AP.),* 0306
000004 126427 000032 000002 CMPB 32(R4),#2
000012 001411 BEQ 1$
000014 127527 000002 000010 CMPB @2(R5),#10 ; LINEB(.AP.),* 0307
000022 001405 BEQ 1$
000024 016401 000034 MOV 34(R4),R1 ; 0308
000030 004767 000000G JSR PC,$CBBRT
000034 000207 RTS PC ; 0306
000036 010446 1$: MOV R4,-(SP) ; 0314
000040 016546 000002 MOV 2(R5),-(SP) ; LINEB(.AP.),*
000044 004767 000000V JSR PC,U.3
000050 022626 CMP (SP)+,(SP)+
000052 000207 RTS PC ; 0231
; Routine Size: 22 words, Routine Base: $CODE$ + 0000
; Maximum stack depth per invocation: 3 words
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 6
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (4)
; 0316
; 0317 global
; 0318 routine _FORWARDER (CCB,OLINE): CALL$ =
; 0319
; 0320 !++
; 0321 ! FUNCTIONAL DESCRIPTION:
; 0322 !
; 0323 ! This routine is called to conditionally forward a packet to the
; 0324 ! Transport Line Interface Layer. If the packet cannot be forwarded
; 0325 ! because of unreachability or congestion, the packet is returned
; 0326 ! to the caller with an error code.
; 0327 !
; 0328 ! FORMAL PARAMETERS
; 0329 !
; 0330 ! CCB Spawned CCB for packet to be forwarded.
; 0331 ! OLINE Channel number for output line.
; 0332 !
; 0333 ! IMPLICIT INPUTS
; 0334 !
; 0335 ! LINEstate
; 0336 !
; 0337 ! ROUTINE VALUE: "Success", "unreachable", or "congestion"
; 0338 ! COMPLETION CODES:
; 0339 !
; 0340 ! CS_SUC Success: packet has been forwarded.
; 0341 ! CE_DIS Unreachable destination: packet is rejected.
; 0342 ! CE_RTE Congestion: packet is rejected.
; 0343 !
; 0344 ! SIDE EFFECTS:
; 0345 !
; 0346 ! NONE.
; 0347 !
; 0348 !--
; 0349
; 0350 begin
; 0351 map CCB: ref block field (C_XPT_fields);
; 0352 local LINEb;
; 0353 require 'XPTSYM';
; 0390
; 0391 !
; 0392 ! Make sure the output line is up
; 0393 !
; 0394
; 0395 LINEb = $XPT_GET_LINE_DB(.OLINE); ! Address line data base entry
; 0396 if .LINEstate neq RU then !Output line is not in "run" state:
; 0397 return (CE_DIS) ! reject the packet
; 0398
; 0399 !
; 0400 ! Check the output quota
; 0401 !
; 0402
; 0403 else if .LINEquota leq 0 then !Quota exhausted:
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 7
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (4)
; 0404 return (CE_RTE) ! reject the packet
; 0405
; 0406 !
; 0407 ! OK - send out the packet
; 0408 !
; 0409
; 0410 else begin
; 0411 LINEquota = .LINEquota - 1; !Decrement the quota
; 0412 CCB[C_XPT_TYPE] = FWDcode; !Set buffer type
; 0413 DLL_Q (.CCB,.LINEb); !Queue up the packet
; 0414 return (CS_SUC) !Return "success"
; 0415 end
; 0416 end; !End of _FORWARDER
.GLOBL GTLINE
.SBTTL .FORWARDER
000000 016500 000004 .FORWARDER::
U.2: MOV 4(R5),R0 ; OLINE(.AP.),* 0395
000004 004767 000000G JSR PC,GTLINE
000010 010001 MOV R0,R1 ; *,LINEB
000012 121127 000010 CMPB (R1),#10 ; LINEB,* 0396
000016 001403 BEQ 1$
000020 012700 177520 MOV #-260,R0
000024 000207 RTS PC
000026 012700 000036 1$: MOV #36,R0 ; 0403
000032 060100 ADD R1,R0 ; LINEB,*
000034 105710 TSTB (R0)
000036 003003 BGT 2$
000040 012700 177730 MOV #-50,R0
000044 000207 RTS PC
000046 105310 2$: DECB (R0) ; 0411
000050 016500 000002 MOV 2(R5),R0 ; CCB(.AP.),* 0412
000054 112760 000004 000032 MOVB #4,32(R0)
000062 010046 MOV R0,-(SP) ; 0413
000064 010146 MOV R1,-(SP) ; LINEB,*
000066 004767 000000V JSR PC,U.3
000072 022626 CMP (SP)+,(SP)+ ; 0410
000074 012700 000001 MOV #1,R0 ; 0403
000100 000207 RTS PC ; 0318
; Routine Size: 33 words, Routine Base: $CODE$ + 0054
; Maximum stack depth per invocation: 3 words
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 8
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (5)
; 0417
; 0418 routine DLL_Q (CCB,LINEb): novalue =
; 0419
; 0420 !++
; 0421 ! FUNCTIONAL DESCRIPTION:
; 0422 !
; 0423 ! Queues a packet CCB to the Transport Line Interface Layer.
; 0424 !
; 0425 ! FORMAL PARAMETERS
; 0426 !
; 0427 ! CCB CCB to be queued
; 0428 ! LINEb Output line data base
; 0429 !
; 0430 ! IMPLICIT INPUTS
; 0431 !
; 0432 ! NONE.
; 0433 !
; 0434 ! ROUTINE VALUE:
; 0435 ! COMPLETION CODES:
; 0436 !
; 0437 ! NONE.
; 0438 !
; 0439 ! SIDE EFFECTS:
; 0440 !
; 0441 ! NONE.
; 0442 !
; 0443 !--
; 0444
; 0445 begin
; 0446 map CCB: ref block field (C_XPT_fields);
; 0447 require 'XPTSYM';
; 0484
; 0485 CCB[C_HANDLE] = .TLIhandle; ! Move in destination = TLI
; 0486 CCB[C_FNC] = FC_XME; ! Function is "transmit enable"
; 0487 CCB[C_MOD] = TM_DAT; ! with a side of "data"
; 0488 $MCB_SCHEDULE_CCB(.CCB); ! Send the buffer
; 0489 end; !End of DLL_Q
.GLOBL $SCHED
.SBTTL DLL.Q
000000 010446 ; DLL.Q
U.3: MOV R4,-(SP) ; 0418
000002 016604 000006 MOV 6(SP),R4 ; CCB,* 0485
000006 016600 000004 MOV 4(SP),R0 ; LINEB,*
000012 016064 000030 000010 MOV 30(R0),10(R4)
000020 112764 000002 000012 MOVB #2,12(R4) ; 0486
000026 105064 000013 CLRB 13(R4) ; 0487
000032 004767 000000G JSR PC,$SCHED ; 0488
000036 012604 MOV (SP)+,R4 ; 0418
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 9
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (5)
000040 000207 RTS PC
; Routine Size: 17 words, Routine Base: $CODE$ + 0156
; Maximum stack depth per invocation: 2 words
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 10
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (6)
; 0490
; 0491 global
; 0492 routine _ECLFWD (CCB,SOURCE,DEST,RTS): CALL$ =
; 0493
; 0494 !++
; 0495 ! FUNCTIONAL DESCRIPTION:
; 0496 !
; 0497 ! This routine is called to conditionally forward a packet to a
; 0498 ! Transport user. If the packet cannot be forwarded because of
; 0499 ! congestion, the packet is returned to the caller with an error
; 0500 ! code.
; 0501 !
; 0502 ! FORMAL PARAMETERS
; 0503 !
; 0504 ! CCB CCB for packet to be forwarded.
; 0505 ! SOURCE Source node address
; 0506 ! DEST Destination node address
; 0507 ! RTS "Return to sender" flag to be passed to user.
; 0508 !
; 0509 ! IMPLICIT INPUTS
; 0510 !
; 0511 ! ECLquota
; 0512 !
; 0513 ! ROUTINE VALUE: "Success" or "congestion"
; 0514 ! COMPLETION CODES:
; 0515 !
; 0516 ! CS_SUC Success: packet has been forwarded to user.
; 0517 ! CE_RTE Congestion: packet is rejected.
; 0518 !
; 0519 ! SIDE EFFECTS:
; 0520 !
; 0521 ! NONE.
; 0522 !
; 0523 !--
; 0524
; 0525 begin
; 0526 map CCB: ref block field (C_XPT_fields);
; 0527 require 'XPTSYM';
; 0564 local CCB_P: ref block field(C_FIELDS);
; 0565
; 0566 !
; 0567 ! Check the ECL quota
; 0568 !
; 0569
; 0570 if .ECLquota eql 0 then !Quota exhausted:
; 0571 return (CE_RTE) ! return "congestion"
; 0572 else ECLquota = .ECLquota - 1; !Otherwise - decrement
; 0573
; 0574 !
; 0575 ! OK - forward to user
; 0576 !
; 0577
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 11
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (6)
; 0578 CCB[C_FNC] = FC_RCP; !Function is "receive complete"
; 0579 CCB[C_MOD] = XM_DAT; !Modifier is "data message"
; 0580 CCB[C_XPT_SOURCE] = .SOURCE; ! and source node address
; 0581 CCB[C_XPT_DESTINATION] = .DEST; ! and destination node address
; 0582 CCB[C_STS] = (if .RTS then CE_DIS !Status = "return to sender"
; 0583 else CS_SUC); ! or "regular packet"
; 0584 begin
; 0585 local NODEb: ref NODEblock;
; 0586 NODEb = $XPT_GET_NODE_DB(.DEST);
; 0587 CCB[C_PIX] = .User; !Move in destination PIX
; 0588 end;
; 0589 $MCB_SCHEDULE_CCB (.CCB); !Queue to the destination process
; 0590 return(CS_SUC) !Return "success"
; 0591 end; !End of _ECLFWD
.GLOBL GTNODE
.SBTTL .ECLFWD
000000 016700 000002G .ECLFWD::
U.4: MOV .CRDAT+2,R0 ; 0570
000004 062700 000102 ADD #102,R0
000010 105710 TSTB (R0)
000012 001003 BNE 1$
000014 012700 177730 MOV #-50,R0 ; 0571
000020 000207 RTS PC
000022 105310 1$: DECB (R0) ; 0572
000024 016504 000002 MOV 2(R5),R4 ; CCB(.AP.),* 0578
000030 112764 000016 000012 MOVB #16,12(R4)
000036 105064 000013 CLRB 13(R4) ; 0579
000042 016564 000004 000024 MOV 4(R5),24(R4) ; SOURCE(.AP.),* 0580
000050 016564 000006 000026 MOV 6(R5),26(R4) ; DEST(.AP.),* 0581
000056 032765 000001 000010 BIT #1,10(R5) ; *,RTS(.AP.) 0582
000064 001403 BEQ 2$
000066 012700 177520 MOV #-260,R0
000072 000402 BR 3$
000074 012700 000001 2$: MOV #1,R0
000100 010064 000014 3$: MOV R0,14(R4)
000104 016500 000006 MOV 6(R5),R0 ; DEST(.AP.),* 0586
000110 004767 000000G JSR PC,GTNODE
000114 111064 000011 MOVB (R0),11(R4) ; NODEB,* 0587
000120 004767 000000G JSR PC,$SCHED ; 0589
000124 012700 000001 MOV #1,R0 ; 0525
000130 000207 RTS PC ; 0492
; Routine Size: 45 words, Routine Base: $CODE$ + 0220
; Maximum stack depth per invocation: 1 word
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 12
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (7)
; 0592
; 0593 global
; 0594 routine _TERMINATE (CCB,CODE): CALL$ novalue =
; 0595
; 0596 !++
; 0597 ! FUNCTIONAL DESCRIPTION:
; 0598 !
; 0599 ! This routine is called to "terminate" a CCB or spawned/pass-through
; 0600 ! CCB pair. "Termination" consists of releasing the spawned CCB and its
; 0601 ! SDB (if either exist) and returning the pass-through CCB to its owning
; 0602 ! process with a specified success or error code.
; 0603 !
; 0604 ! FORMAL PARAMETERS
; 0605 !
; 0606 ! CCB First or only CCB to terminate.
; 0607 ! CODE Success/failure code to return to the originating process.
; 0608 ! This value is only used if the originating process is a
; 0609 ! Transport user; if the terminated CCB is sent back to the
; 0610 ! Data Link Layer, no status is returned.
; 0611 !
; 0612 ! IMPLICIT INPUTS
; 0613 !
; 0614 ! NONE.
; 0615 !
; 0616 ! ROUTINE VALUE:
; 0617 ! COMPLETION CODES:
; 0618 !
; 0619 ! NONE.
; 0620 !
; 0621 ! SIDE EFFECTS:
; 0622 !
; 0623 ! NONE.
; 0624 !
; 0625 !--
; 0626
; 0627 begin
; 0628 map CCB: ref block field (C_XPT_fields);
; 0629 local LINEb;
; 0630 require 'XPTSYM';
; 0667 local ADJ;
; 0668 local CCB_P: ref block field(C_XPT_fields);
; 0669
; 0670 !
; 0671 ! Process spawned CCB if any
; 0672 !
; 0673
; 0674 if ((.CCB[C_OWN] eql PD_XPT) and !Parameter
; 0675 (.CCB[C_STK] neq 0)) then begin ! is a
; 0676 CCB_P = .CCB[C_STK]; ! spawned CCB:
; 0677 UNSPAWN(.CCB); ! clean it up
; 0678 end
; 0679 else CCB_P = .CCB; !Parameter is pass-through CCB
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 13
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (7)
; 0680
; 0681 !
; 0682 ! Return pass-through CCB to a Transport user
; 0683 !
; 0684
; 0685 if .CCB_P[C_FNC] eql FC_XME then begin
; 0686 INPUTquota = .INPUTquota + 1; !Increase admission quota
; 0687 CCB_P[C_FNC] = FC_XCP; !Function = "transmit complete"
; 0688 CCB_P[C_STS] = .CODE; !Move in success/failure code
; 0689 LLCRS$ (.CCB_P); !Return CCB to user
; 0690 end
; 0691
; 0692 !
; 0693 ! Return pass-through CCB to the Transport Line Interface Layer
; 0694 !
; 0695
; 0696 else if .CCB_P[C_FNC] eql FC_RCP then begin
; 0697 LINEb = $XPT_GET_LINE_DB(.CCB_P[C_LIX]); ! Address line data base entry
; 0698 if .CCB[C_XPT_TYPE] neq NOcode then
; 0699 begin !Decrement receive
; 0700 INPUTcount = .INPUTcount - 1; ! buffer count
; 0701 DLLquota = .DLLquota + 1; ! and global quota
; 0702 end;
; 0703 CCB_P[C_FNC] = FC_RCE; !Function = "receive enable"
; 0704 LLCRS$ (.CCB_P); !Queue CCB back to DLL
; 0705 end
; 0706
; 0707 !
; 0708 ! Return our own CCB to the pool
; 0709 !
; 0710
; 0711 else if .CCB_P[C_OWN] eql PD_XPT
; 0712 then begin
; 0713 if .CCB_P[C_XPT_ALLOCATION] neq 0
; 0714 then begin
; 0715 MAP$(.CCB_P[C_BIAS]);
; 0716 $MCB_RETURN_BUFFER(.CCB_P[C_XPT_ALLOCATION],.CCB_P[C_ADDR]);
; 0717 end;
; 0718 $MCB_RETURN_CCB(.CCB_P);
; 0719 end
; 0720
; 0721 !
; 0722 !
; 0723 ! How did we get here?
; 0724 !
; 0725
; 0726 else BPT(XPT$_IFC,CCB_P[C_FNC]);
; 0727
; 0728 end; !End of _TERMINATE
.GLOBL KISAR6, $CORRT, $CCBRT
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 14
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (7)
.SBTTL .TERMINATE
000000 016501 000002 .TERMINATE::
U.5: MOV 2(R5),R1 ; CCB(.AP.),* 0674
000004 016700 000002G MOV .CRDAT+2,R0
000010 126160 000006 000004 CMPB 6(R1),4(R0)
000016 001012 BNE 1$
000020 005761 000004 TST 4(R1) ; 0675
000024 001407 BEQ 1$
000026 016102 000004 MOV 4(R1),R2 ; *,CCB.P 0676
000032 010146 MOV R1,-(SP) ; 0677
000034 004767 000000G JSR PC,UNSPAWN
000040 005726 TST (SP)+ ; 0675
000042 000401 BR 2$ ; 0674
000044 010102 1$: MOV R1,R2 ; *,CCB.P 0679
000046 012703 000012 2$: MOV #12,R3 ; 0685
000052 060203 ADD R2,R3 ; CCB.P,*
000054 121327 000002 CMPB (R3),#2
000060 001012 BNE 3$
000062 016700 000002G MOV .CRDAT+2,R0
000066 105260 000104 INCB 104(R0) ; 0686
000072 112713 000014 MOVB #14,(R3) ; 0687
000076 016562 000004 000014 MOV 4(R5),14(R2) ; CODE(.AP.),*(CCB.P) 0688
000104 000424 BR 5$ ; 0689
000106 121327 000016 3$: CMPB (R3),#16 ; 0696
000112 001025 BNE 6$
000114 005000 CLR R0 ; 0697
000116 156200 000010 BISB 10(R2),R0 ; *(CCB.P),*
000122 004767 000000G JSR PC,GTLINE
000126 126127 000032 000006 CMPB 32(R1),#6 ; 0698
000134 001406 BEQ 4$
000136 105360 000043 DECB 43(R0) ; *(LINEB) 0700
000142 016700 000002G MOV .CRDAT+2,R0
000146 105260 000035 INCB 35(R0) ; 0701
000152 112713 000004 4$: MOVB #4,(R3) ; 0703
000156 010204 5$: MOV R2,R4 ; CCB.P,* 0704
000160 004767 000000G JSR PC,$SCHED
000164 000207 RTS PC ; 0696
000166 016700 000002G 6$: MOV .CRDAT+2,R0 ; 0711
000172 126260 000006 000004 CMPB 6(R2),4(R0) ; *(CCB.P),*
000200 001016 BNE 8$
000202 016201 000034 MOV 34(R2),R1 ; *(CCB.P),* 0713
000206 001407 BEQ 7$
000210 016267 000016 000000G MOV 16(R2),KISAR6 ; *(CCB.P),* 0715
000216 016200 000020 MOV 20(R2),R0 ; *(CCB.P),* 0716
000222 004767 000000G JSR PC,$CORRT
000226 010204 7$: MOV R2,R4 ; CCB.P,* 0718
000230 004767 000000G JSR PC,$CCBRT
000234 000207 RTS PC ; 0711
000236 010346 8$: MOV R3,-(SP) ; 0726
000240 012746 100022 MOV #-77756,-(SP)
XPEFWD 25-Jan-1983 09:56:56 TOPS-20 Bliss-16 2A(530) Page 15
X01150 30-Dec-1982 21:20:19 NETPKG:<XPT>XPEFWD.BLI.8 (7)
000244 012746 000002 MOV #2,-(SP)
000250 004767 000000G JSR PC,$IGNAL
000254 062706 000006 ADD #6,SP
000260 000207 RTS PC ; 0594
; Routine Size: 89 words, Routine Base: $CODE$ + 0352
; Maximum stack depth per invocation: 4 words
; 0729 end !End of Module XPEFWD
; 0730 eludom
; OTS external references
.GLOBL $IGNAL
; PSECT SUMMARY
;
; Psect Name Words Attributes
; $CODE$ 206 RO , I , LCL, REL, CON
; LIBRARY STATISTICS
;
; -------- Symbols -------- Blocks
; File Total Loaded Percent Read
;
; NETPKG:<MCB>XPORTX.L16.15 599 0 0 0
; NETPKG:<MCB>MCBLIB.L16.15 372 37 9 0
; NETPKG:<MCB>NMXLIB.L16.13 200 0 0 0
; NETPKG:<XPT>XPTLIB.L16.3 510 166 32 0
; Size: 206 code + 0 data words
; Run Time: 00:05.5
; Elapsed Time: 00:18.1
; Memory Used: 38 pages
; Compilation Complete
ADDRESS 152+ 154+ 155+ 157+ 158+ 160+ 161+ 167+ 168+ 171+ 172+ 173+
ADJ 667
BPT 181+# 193+# 726
BUFCHK 185+ 186+# 195+ 196+#
CALL$ 204 205 207 208 231# 318# 492# 594#
CCB 231 263 306 308 314 318 351 412# 413 418 446 485#
486# 487# 488 492 526 578# 579# 580# 581# 582# 587# 589
594 628 674 675 676 677 679 698
CCB_P 564 668 676# 679# 685 687# 688# 689 696 697 703# 704
711 713 715 716 718 726
CE_DIS 397 582
CE_RTE 404 571
CHKBUF 188+* 189+
CS_SUC 414 583 590
C_ADDR 716
C_BIAS 715
C_FIELDS 564
C_FNC 486 578 685 687 696 703 726
C_HANDLE 485
C_LIX 697
C_MOD 487 579
C_OWN 674 711
C_PIX 587
C_STK 675 676
C_STS 582 688
C_XPT_ALLOCATION 308 713 716
C_XPT_DESTINATION 581
C_XPT_FIELDS 263 351 446 526 628 668
C_XPT_SOURCE 580
C_XPT_TYPE 306 412 698
DEST 492 581 586
DLLQUOTA 701#
DLL_Q 206 314 413 418*
ECLQUOTA 570 572#
FC_RCE 703
FC_RCP 578 696
FC_XCP 687
FC_XME 486 685
FWDCODE 412
GETQ 152+#
GETW 131+# 154+ 155+
I 176+ 178+
INITCODE 306
INPUTCOUNT 700#
INPUTQUOTA 686#
J 176+ 178+
LINEBLOCK 291+ 380+ 474+ 554+ 657+
LINEB 231 289+ 291+ 314 352 378+ 380+ 395# 413 418 472+ 474+
552+ 554+ 629 655+ 657+ 697#
LINEQUOTA 403 411#
LINESTATE 307 396
LLCRS$ 689 704
M 176+ 177+
MAP$ 715
MATRIX 176+# 178+
MCB$GAW_PROCESS_DATA_BASE 294+ 295+ 298+ 383+ 384+ 387+ 477+ 478+ 481+ 557+ 558+ 561+
660+ 661+ 664+
N 176+ 177+
NL 176+ 178+
NODEBLOCK 286+ 375+ 469+ 549+ 585 652+
NODEB 284+ 286+ 373+ 375+ 467+ 469+ 547+ 549+ 585 586# 650+ 652+
NOP 193+ 194+ 196+
NO_LINEB 290+ 379+ 473+ 553+ 656+
NO_NODEB 285+ 374+ 468+ 548+ 651+
OLINE 318 395
PD_XPT 674 711
PTR 131+ 134+ 135+ 138+ 141+ 142+ 148+ 149+ 152+ 154+ 155+ 157+
160+ 161+ 162+ 163+ 167+ 168+
PUTQ 157+#
PUTW 138+# 167+ 168+
RTS 492 582
RU 307 396
TLIHANDLE 485
TM_DAT 487
UNIT 176+# 177+ 178+
UNSPAWN 227* 677
USER 587
VALUE 138+ 139+ 141+ 142+ 147+
X 133+ 134+# 135+# 136+ 146+ 147+# 148+ 149+
XM_DAT 579
XPEFWD 1#
XPT$_IFC 726
XPTDBBLOCK 300+ 389+ 483+ 563+ 666+
XPTDB 297+ 298+# 299+ 386+ 387+# 388+ 480+ 481+# 482+ 560+ 561+# 562+
663+ 664+# 665+
ZEROQ 171+#
_ECLFWD 207 492*
_FORWARDER 205 318*
_SNDBUF 204 231*
_TERMINATE 208 594*
$MCB_RETURN_BUFFER 716
$MCB_RETURN_CCB_AND_BUFFER 308
$MCB_RETURN_CCB 718
$MCB_SCHEDULE_CCB 488 589
$XPT_GET_LINE_DB 395 697
$XPT_GET_NODE_DB 586
%CTCE 139+ 158+
%REMAINING 183+