Trailing-Edge
-
PDP-10 Archives
-
QT020_T20_4.1_6.1_SWSKIT_851021
-
swskit-documentation/ci-info.memos
There is 1 other file named ci-info.memos in the archive. Click here to see a list.
THIS FILE CONTAINS:
------------------
o Description of CI20 support (CI-SUPPORT.TXT)
o KLIPA (CI20) driver description (KLPDES.MEM)
o KLIPA (CI20) driver functional specification (KLPFUN.MEM)
o CI20 architechtural specification (LCG-CI-PORT-ARCHITECTURE.SPC)
CI-SUPPORT.TXT
This is an attempt to describe the specific CI products in release 6.
Included in this description are the appropriate configuration
guidelines and the rationale for any restrictions.
Release 6 of TOPS-20 is the introductory release for the CI
and certain CI products. The significant new features afforded
by this new technology are CFS-20 and HSC-50.
HSC-50 support
The HSC-50 is the corporate CI-based disk controller. Each HSC-50
will support up to twenty-four (24) disks. The supported disk
types are RA81 and RA60 (if available in time for testing and release).
Each disk may be connected to one or two HSC-50 controllers. If
a disk is dual-ported, it will be "owned" by one of the HSC-50s
at any time. That is, even though the disk is connected to two
controllers, it may be accessed by only one of them and therefore
the dual-porting does not enhance throughput but simply
increases availability.
TOPS-20 release 6 will support up to three HSC-50 controllers
and up to sixty-four HSC-based disks. This limitation is
imposed because of the unknown nature of the CI under
extremely heavy demand and because of the limited hardware
available to us during load-test and field-test. If we are
able to conduct measurements that show we could support more
controllers and/or disks, we will consider relaxing this
constraint.
Furthermore, we recommend that as many of the disks as possible
be dual-ported, and therefore that each installation have at
least two HSC-50 controllers. This recommendation reflects
the novelty of the HSC-50 and of the complexity of the hardware,
software and protocols required to support it. We anticipate
that HSC software crashes will be one of the leading causes
of failures (TOPS-20 crashes being the other dominant factor) in
a CI environment, and consequently dual-porting of disks
will ameliorate the lost time from these crashes. Although
an HSC software crash should be infrequent, perhaps two or
three a week, the long reload time for the software (more than
five minutes) and the importance of the disk data dictate
measures to guarantee the availability of the disks. As with
any product, it will become more reliable with time and use. However,
the dual-porting should be an attractive item for our customers
throughout the lifetime of the product.
BOOT will not support CI devices. For this and other reasons we
do not support using HSC-based disks as the public structure.
In particular, specific support in TOPS-20 required to
fully support HSC disks as the public structure is not being done.
Among these tasks are:
1. Making TOPS-20 less dependent on accessing the public
structure so that an HSC crash will be less likely
to crash TOPS-20 (this is particularly important if the
structure is not dual-ported).
2. Insuring that the resident monitor, perhaps with the
aid of BOOT, can reload the KLIPA microcode.
Even if we were to do these tasks, we could still not boot the
system from an HSC disk as BOOT would not support SCA and MSCP.
In general, we feel that the quailty of the product with HSC-based
disks as the public structure is less than desirable and therefore
not to be supported.
CFS-20
CFS-20 is the first stage in TOPS-20 loosely coupled multi-processing.
With this product, one is able to connect two KL-10s to a single
CI so that the KL-10s share a single file system. The file sharing
works in three ways:
1. Disks connected to HSC-50s are directly accessible by
each KL-10 and therefore sharable.
2. Massbuss disks that are ported to each processor are
also sharable.
3. Massbus disks connected to only one of the KL-10s is
sharable by virtue of each of the system's MSCP server.
Each of these will be explored in turn.
Originally, CFS-20 was to support up to four KL-10 processors
in a single configuration. This ambitous goal has been
modified in order to reduce the risks of producing release 6,
both in terms of development time and testing time, and
in hardware resources required to develop the product. Engineering
remains committed to four-processor CFS, however, and every
effort will be made to ensure that the FRS release 6 is capable
of supporting three and four node CFS field-test.
Sharing of HSC disks is straight-forward as the basic product
was designed for just such an application. However, we know very
little about how an HSC behaves when it is serving two (or more)
processors. In particular, TOPS-20's use of "single page requests"
may create unacceptable overhead in the HSC whereas batching
requests into "multi-page" requests may lessen the overhead. It
is unlikely that we will make this determination early enough
to be able to make the appropriate changes to TOPS-20.
A Massbus disk, RP06 or RP07, is shared by connecting it to
both of the CFS systems. Release 6 of TOPS-20 has many improvements
in the handling of dual-ported disks, so that the operation of
this configuration should be relatively smooth. However,
there are some important considerations:
1. TOPS-20 release 6 does not have code to recover
the latency optimization decisions made for dual-ported
disks. Therefore, if a system has decided on a specific request
because it exhibits the least latency, and the other system
intervenes before the transfer is started, the selected transfer
will still be the next one issued to the drive. Therefore,
when the drive is again available to the first system, there
may be considerable latency in completing the request. This
is important for if the committed request is a data transfer
request, and if the drive must perform an "implied seek"
before starting the transfer, the entire Massbuss will be committed
to this transfer during the seek latency time. So, not only
may the throughput of the drive be affected, but all devices
on that Massbus will be implicitly affected. And, of course, the
time lost due to port contention may be significant.
2. Preliminary mesurements for RP07s show that two systems
accessing the same drive achieve a 50% increase in disk
throughput over a single system accessing the drive. However,
the same experiment performed for an RP06 shows a 50%
decrease in disk throughput. If this preliminary data holds
true, dual-porting RP06 drives may reduce the overall IO
efficiency of the systems.
3. We've yet to conduct measurements of channel throughput in
the case of multiple devices, some ported to two system, on the
same Massbus. This is an important datum in the evaluation
of shared Massbus disks.
A Massbus disk may also be shared by using the MSCP server provided
in TOPS-20. The MSCP server implements the passive role of
the MSCP protocol and therefore looks very much like an HSC-50
disk controller to other systems. The MSCP server allows another
KL-10 to access the local disks of a KL-10 system.
In general, we recommend that disks that are to be shared
by the CFS systems be directly accessible to each system. However,
in some cases this is impractical, such as with the disk that
is connected to the RH11. For these devices, the MSCP
server is the only way the drive can be shared.
Also, if one of the ports of a disk drive is broken, the MSCP server
may be used to achieve sharing, at the cost of increased processor
overhead to support the activity.
Using the MSCP server will increase processor load. This self-evident
statement is nonetheless important to note. We've yet to measure
the overhead incurred in using the server, and this must be
done.
The potential benefit of using the server for sharing disks is that
the disk latency algorithms will not be compromised. However,
without comparative measurements of these two costs, we cannot
evaluate the proper configurations.
CFS-20 implements a distributed control scheme. This has a number
of important implications, but the most significant is that
each processor is responsible for managing the data stuctures
on the disk structures it uses. This means that writing files has
implicitly more overhead than reading files, as writing
involves managing the structure bit table (It turns out that
any scheme that allows sharing of structures among processors
would exhibit the same phenomenon, viz. writing incurs
more overhead than reading).
The implication of this aspect of CFS depends a great deal on
the applications that are sharing the structure. Data base
kinds of applications, that is programs that read and write
a common file over a long period of time, may well incur
considerable overhead and a concomitant reduction in disk
throughput. In fact, preliminary measurements of such an application
(PAGES) shows a 30% to 60% reduction in disk bandwidth when writing
to the shared structure.
Applications that are closer to time-sharing use, where files
are written and closed in short interactions, should exhibit
a much lower level of overhead due to write sharing. For example,
our intended use of CFS to share the monitor sources between two
processors should not show a significant reduction in disk
throughput.
The reduction in disk throughput seen in shared write environments
is a combination of port contention, latency increase, and
additional reads and writes of the structure bit table. In fact,
the total IO to the disk is increased, but a significant amount
of the IO is for coordinating control rather than writing data.
Of course, it can rightly be argued that no use of a shared structure
is purely one kind of application or the other. Therefore, it is
unlikely anyone will see the drastic penalties observed with PAGES.
PS: structures are sharable. However, the following caveats
apply:
1. No drive that is part of PS: should be ported
to another system.
2. No files on PS: should be critical to the operation
of any other system. Therefore, the files that
are shared should be ones infrequently needed by
other systems.
The first item derives from the difficulty in performing maintenance
(CHECKD) on PS:. Also, the CFS error recovery schemes assume
that PS: is always accessible, and therefore the techniques
used to prevent uncontrolled sharing of dual-ported Massbus
disks do not apply to PS:. Although there are solutions to these
problems, we will not have time to implement them for release 6.
The second item derives from the importance of PS: to its
"home system". It is foolish to jeopardize the performance of
a system because another one is interfering with swapping.
Also, since PS: drives may not be ported to both systems, if
the home system for a PS: is down, the other system has no
way of accessing the files on that PS:.
CFS-20 will recover from CI failures by "splitting" the system
automatically. This splitting is accomplished by declaring
sharable resources to be unavailable to the system
no longer on the CI. We need to conduct extensive experiments
to insure this works properly.
CFS-20 includes a TOPS-20 to TOPS-20 CI/DECnet product. This
limited-use DECnet product is intended for use in CFS-specific
applications. In particular, we envision CI/DECnet:
1. As the initial, and for now only, IPC mechanism
between the CFS processors. As such, applications
being written for or modified for the CFS environment
will be able to provide inter-process signalling and
coordination via CI/DECnet much as IPCF is used now.
2. As the principal tool for adapting GALAXY to
the CFS environment. Although release 6 will not
provide a single, CFS-wide operator sysytem, CI/DECnet
will allow us to implement such a system.
We anticipate that subsequent releases of TOPS-20 will provide
CFS-wide IPCF and ENQ/DEQ, and therefore applications will
be able to use the conventional inter-process signalling and
coordination now used in TOPS-20.
NOT SUPPORTED or NOT BEING DONE
TOPS-20 release 6 will not support the following:
1. KL-10s and VAX processors on the same CI.
2. HSC-50 tapes (TA78s)
3. Using any of the HSC disks as the public structure.
4. Three and four node CFS
5. Distinguishing disks ported to the RSX20F front-end from
disks ported to other systems. This means that a CI
failure could result in TOPS-20 not being able to proceed
without manual intervention. However, the MBTF of the KLIPA
is expected to be so much greater than thr MBTF of the KL-10
processor, that such a failure seems unlikely.
6. Other LCS features, such as: inter-system IPCF, inter-
system ENQ/DEQ and DBMS support.
SUMMARY
1. HSC-50 disks should be dual-ported
2. RP07 dual-porting seems acceptable, RP06 may not be (RP20 untested).
3. MSCP server use should be limited, but measurements needed.
4. Measurements needed on channel throughput with dual-ported disks.
5. Shared writing of CFS structures needs careful planning.
6. Measurements needed of how an HSC behaves supporting multiple hosts.
7. PS: drives must not be ported to two KL-10s.
8. PS: file sharing should be limited.
9. Fault insertion testing needed.
KLPDES.MEM
1.0 OVERVIEW
The KLIPA driver is the lowest level of support for the
CI-20. The driver is responsible for coordinating all
access to the device and for implementing the queued
interface between the device and the operating system. It
also must provide services for diagnostic functions as well
as for "DMA" functions specified in the SCA layer.
The driver is part of the PHYSIO system. The decision to
place the KLIPA within the bounds of PHYSIO was made in
order to minimize the effort within TOPS-20 to interface to
the KLIPA. The KLIPA is the first device in the PHYSIO
system that is not an RH20 and therefore we will have to
"teach" PHYSIO how to manage such devices. It seemed
appropriate to make this alteration to PHYSIO so that any
other additions to the KL device repertoire will be easily
integrated into the monitor.
This document describes the structure of the KLIPA driver,
the specific services it performs and its relationship to
the other CI-related services and to the monitor in general.
1.1 References
1. PHYKLP functional specification (R60SPC:KLPFUN).
10-AUG-83 (Grant/Miller)
2. LCG CI Port Architecture Specification, 11-July-83
(Keenan)
3. IPA20-L Error Spec, 30-Sept-82 (Holewa)
4. Systems Communication Architecture, 20-July-82
(Strecker)
1.2 Purpose Of This Document
This document describes how PHYKLP implements the services
described in the functional specification [1]. Ideally,
this document is a template for the implementor to follow
and therefore will serve as a "road map" to the code.
Portions of this document will appear as commentary in the
source module so that maintainers will benefit from this
design plan.
Page 2
1.3 Driver Functions
The KLIPA driver is a TOPS-20 device driver. It is
generally a passive service that responds to requests from
higher level components and simply performs the
device-specific operations required by the requests.
Because the KLIPA is a smart and somewhat independent
device, the driver must perform some actions on its own
without being directed by higher-level services. However,
these operations are transparent to the rest of the monitor.
The driver is responsible for maintaining the port-to-port
virtual circuits to other CI drops. That is, the driver
must locate the other CI drops, and negotiate a "three-way
handshake" initialization in order to establish a "reliable
communication path" between the nodes. In support of this
operation, the driver polls the CI drops from time-to-time
to detect any changes to the CI configuration. It turns out
that the other nodes are also polling the CI, and therefore
nodes may recognize one another during either of the polling
actions. Whereas some nodes will only allow the
port-to-port circuit when its poller detects another node (a
la the HSC-50), the TOPS-20 KLIPA driver will cooperate with
any node that wishes to establish a port-to-port circuit.
The only active part of the driver is the polling operation
and the concomitant "virtual circuit initialization"
operation. All other data transfers, including datagrams,
messages and DMA transfers are requested explicitly by SCA.
The interfaces to PHYKLP and SCA are diagrammed below:
+----------+ +--------------+
! SCA ! ! PHYSIO !
+----------! +--------------+
\ ^ config change / poll
\ \ data received / interrupt
DMA \ \ /
messages \ \ /
datagrams \ \--+----------------+</
---> ! PHYKLP !
+-------+--------+
! device interface
+-------+--------+
! IPA20 !
+----------------+
As can be seen, the PHYSIO interface is used only to drive
the interrupts and as a source of polling calls. Unlike
other PHYSIO drivers, PHYKLP is not called by PHYSIO to
perform register reads, register writes and other
"housekeeping" functions. PHYKLP appears to PHYSIO as a
device other than an RH20 and one that is relatively
Page 3
self-contained.
1.4 Driver Components And Data Structures
The driver, PHYKLP, maintains the following structures
. The port control block (PCB). This is a
"communication" area between the KLIPA and the
driver. The PCB contains interlock words, queue
headers and control information necessary for the
KLIPA to monitor protocol. It is described fully in
[2].
. System blocks. A system block is a data structure
describing a node on the CI. Each system block
contains information about the node as well as the
state of the connection between this node and the
remote node. The system block is the fundamental
data structure for maintaining the virtual circuit
between two nodes. There is a unique system block
for each of the nodes on the CI.
The fundamental pieces of the driver are:
. Poller. This is the code that attempts to
recognize new nodes appearing on the CI and to
detect and report path failures in the CI. It is
called as part of the scheduler.
. Interrupt service. This code is called by PHYSIO
when the KLIPA interrupts the monitor. Most of the
real work in the driver happens in the interrupt
service routine, including the crux of the
port-to-port VC initialization. The interrupt
service routine is responsible for detecting device
errors, protocol violations and system errors that
affect the KLIPA.
. Message and datagram transmission. This service
is used by SCA to send messages and datagrams.
. DMA services. These routines are used to create
and validate CI buffers and to provide the software
required portions of the DMA message service.
. diagnostic services. These routines support the
DIAG% and SCS% functions specified for the KLIPA.
The remaining sections of this document will explore each of
the pieces described in the overview as well as provide an
operational description of PHYKLP.
Page 4
2.0 DATA DESCRIPTIONS
2.1 PCB
The PCB, port control block, is the interface communications
region between PHYKLP and the KLIPA. PHYKLP initializes the
PCB and then identifies its physical address to the KLIPA.
The PCB is as follows:
+=======================================================+
.PBBDT | Buffer Descriptor Table Starting Address |
+-------------------------------------------------------+
.PBQEL | Queue Entry Length |
+-------------------------------------------------------+
.PBQ3I | Command Queue 3 Interlock |
+-------------------------------------------------------+
.PBQ3F | Command Queue 3 FLINK |
+-------------------------------------------------------+
.PBQ3B | Command Queue 3 BLINK |
+-------------------------------------------------------+
.PBQ2I | Command Queue 2 Interlock |
+-------------------------------------------------------+
.PBQ2F | Command Queue 2 FLINK |
+-------------------------------------------------------+
.PBQ2B | Command Queue 2 BLINK |
+-------------------------------------------------------+
.PBQ1I | Command Queue 1 Interlock |
+-------------------------------------------------------+
.PBQ1F | Command Queue 1 FLINK |
+-------------------------------------------------------+
.PBQ1B | Command Queue 1 BLINK |
+-------------------------------------------------------+
.PBQ0I | Command Queue 0 Interlock |
+-------------------------------------------------------+
.PBQ0F | Command Queue 0 FLINK |
+-------------------------------------------------------+
.PBQ0B | Command Queue 0 BLINK |
+-------------------------------------------------------+
.PBRQI | Response Queue Interlock |
+-------------------------------------------------------+
.PBRQF | Response Queue FLINK |
+-------------------------------------------------------+
.PBRQB | Response Queue BLINK |
+-------------------------------------------------------+
.PBMFI | Message Free Queue Interlock |
+-------------------------------------------------------+
.PBMFB | Message Free Queue FLINK |
+-------------------------------------------------------+
.PBMFB | Message Free Queue BLINK |
+-------------------------------------------------------+
.PBDFI | Datagram Free Queue Interlock |
+-------------------------------------------------------+
Page 5
.PBDFF | Datagram Free Queue FLINK |
+-------------------------------------------------------+
.PBDFB | Datagram Free Queue BLINK |
+-------------------------------------------------------+
.PBRSV | Reserved to Port |
+-------------------------------------------------------+
.PBER1 | Error Word 1 |
+-------------------------------------------------------+
.PBER2 | Error Word 2 |
+-------------------------------------------------------+
.PBPBA | PCB Base Address |
+-------------------------------------------------------+
.PBPIA | PI Level |
+-------------------------------------------------------+
.PBIVA | Interrupt Vector Assignment |
+-------------------------------------------------------+
.PBCCW | Channel Command Word |
+-------------------------------------------------------+
.PBRSP | Reserved to Port |
+=======================================================+
As can be seen, each of the queues requires three words: an
interlock word, a forward pointer (FLINK) and a back pointer
(BLINK).
All addresses in the PCB, and all addresses given to the
KLIPA are physical memory addresses. This is so because the
KLIPA accesses memory directly over either the E-bus or the
C-bus. If it uses the C-bus, it has no way of performing a
virtual to physical address translation. Consequently, the
monitor must perform this translation in advance of
specifying the address, and it must insure that the
association remains valid until the KLIPA is finished with
the data.
Queue interlock words are conventional "spin locks". That
is, to lock a queue, one simply performs an
AOSE ADD
{lock previously locked, test for timeout}
{lock successfully locked}
and one unlocks a queue by
SETOM ADD
This is easy for the processor, but not so easy for the
KLIPA. In order to assist the KLIPA, a new microcode IOP
function has been added that performs the equivalent of:
AOS EBUS,ADD
That is, the function directs the microcode to increment the
value at ADD and to send the resulting value over the E-bus
to the requesting device. It is then up to the KLIPA to
Page 6
determine if it owns the interlock by examining the result.
PHYKLP's lock procedure includes a "time out" if the lock is
unavailable for a long time. If the spin lock does not
succeed within one second, PHYKLP will consider the KLIPA to
be malfunctioning and reload its microcode.
The PCB is essential to all interactions with the KLIPA.
Therefore, anytime PHYKLP wishes to send a message or
process an interrupt, it must determine the PCB address so
that it can access the appropriate queue or status
information.
In general, the PCB address is passed as an argument to the
inner routines of PHYKLP. This is to allow additional
KLIPAs someday without changing the bulk of PHYKLP. As can
be seen in the next section, the system block associated
with other node points to the appropriate PCB.
2.2 System Blocks
A system block describes the status of another node on the
CI. PHYKLP builds a system block whenever it first
encounters a node. In general, this will be when the poller
receives a valid reply to a "request ID message", but it may
also occur when the other node attempts to begin the
initialization protocol and PHYKLP has not yet noticed the
node. The system block is as follows:
!=======================================================!
.SBANB ! Address of next system block !
!-------------------------------------------------------!
.SBAPB ! Address of associated port control block !
!-------------------------------------------------------!
.SBACD ! Address of associated channel data block !
!-------------------------------------------------------!
.SBVCS ! Path validity info ! Dest vir cir state !
!-------------------------------------------------------!
.SBDSP ! Destination port !
!-------------------------------------------------------!
.SBDRQ ! Datagram return queue header !
!-------------------------------------------------------!
.SBLMB ! Local message buffer header !
!-------------------------------------------------------!
.SBSBI ! Reserved ! SBI of this SB !
!-------------------------------------------------------!
.SBFCB ! Pointer to first connection block !
!-------------------------------------------------------!
.SBLCB ! Pointer to last connection block !
!-------------------------------------------------------!
Page 7
.SBTWQ ! FLINK for SCA work queue !
!-------------------------------------------------------!
.SQBWQ ! BLINK for SCA work queue !
!-------------------------------------------------------!
.SBQOR ! Pointer to queue of outstanding requests !
!-------------------------------------------------------!
.SBDSS \ \
\ Destination system \
\ \
!-------------------------------------------------------!
.SBMMS ! Max mess size (bytes) ! Max DG size (Bytes) !
!-------------------------------------------------------!
.SBDST ! Destination software type !
!-------------------------------------------------------!
.SBDSV ! Destination software version !
!-------------------------------------------------------!
.SBDSE ! Destination software edit level !
!-------------------------------------------------------!
.SBDHT ! Destination hardware type !
!-------------------------------------------------------!
.SBDHV ! Destination hardware version !
!-------------------------------------------------------!
.SBDPC \ \
\ Destination port characteristics \
\ \
!-------------------------------------------------------!
.SBTIM ! TODCLK at last message from this remote !
!-------------------------------------------------------!
.SBFLG ! Flags !
!=======================================================!
As can be seen, the system block contains some fields and
information maintained by SCA alone. That is, this data
structure, although created by PHYKLP, is shared by SCA and
PHYKLP. In effect, this is much like the other PHYSIO data
structures, UDB and CDB, that contain information for
several of the layers.
The fields describing the destination system are acquired
from the "ID request" message exchanged by the ports.
A system block contains all of the information needed for
PHYKLP to correctly process a request from a higher level
service (viz. SCA). In particular, the system block
contains the PCB to be used and the state of the
port-to-port virtual circuit between that system and the
local port. Therefore, each request made by SCA will use
the system block to validate that the operation is legal for
the current virtual circuit state (see section 3.1.2) and
for locating the PCB and its data structures.
Interrupt requests begin with the PCB of the interrupting
KLIPA and then determine the appropriate system block from
the source node address in the received message (see section
3.3). Once the system block is determined, then PHYKLP can
Page 8
validate tha the operation is valid for the current virtual
circuit state.
3.0 PHYKLP DESCRIPTION
3.1 State Representation Of The Driver
3.1.1 Initialization -
The port-to-port VC is opened by means of a "three way
handshake" protocol. Diagrammatically, the protocol looks
like:
(Figure 1)
Notes to figure 1:
The messages, START, STACK and ACK are always to be
sent from the lowest priority command queue (see
6.2.2).
INIT is a holding state. In the case of a
previously known system, INIT will "latch" until SCA
releases it (see KLPOPN call ). In the case of a
newly located node, INIT releases immediately.
Although error detection is not mandatory, it is
recommended in order to avoid unnecessary
interactions with higher-level services.
This protocol insures that the two systems reach the "open"
state at the same time and that they maintain this state
together.
The initialization sequence is begun once PHYKLP recognizes
another node.
3.1.2 Other States -
PHYKLP operates as a state machine. Anytime the local
system wishes to communicate with any system, or the local
system receives data from another system, the state machine
is used to validate the operation and to perform state
transitions and notifications.
In particular, the system block describes the state of the
connection between the local system and the remote system.
Page 9
Any operation has a unique definition for the state in the
system block. Data handling, error handling and calls to
other services are all defined by the current state.
The initialization sequence states and transitions are
defined in figure 1. Table 1 shows the additional
transitions and operations.
Table 1
\
\ EVENT msg datagram send err send err VC closed VC open
S \ rec rec datagram message
T \
A \
T \
E \
ISTRT KLIPA | drop | ignore| NA | NA | tell SCA
error | it | | | |
| | | | |
ASTRT "" | "" | "" | "" | "" | tell SCA
| | | | |
RUN tell SCA| tell SCA| "" | Close VC | tell SCA | NA
| | | goto INIT | goto INIT|
The entries containing "tell SCA" indicate that PHYKLP will
call the appropriate routine in SCA; each of the events
makes use of a unique entry point in SCA.
3.2 Message Handling
The CI supports various types of port-to-port packets.
There is a class of packets directed to SCA defined as
messagess and datagrams. In addition, there are other types
of packets, used for CI housekeeping functions and for
maintenance, that are exchanged by the ports. In fact, the
three initialization messages, START, STACK and ACK are of
this latter class.
All of the housekeeping and maintenance packets are
datagrams. That is, they are handled on a "best effort
delivery" basis. The protocol that uses these packets must
either be tolerant of lost packets or must provide some
other means of guaranteeing no data is lost. The timers
used in the initialization protocol are one example of how a
datagram-based protocol tolerates and recovers from lost
data.
Packets intended for SCA are sent only when a port-to-port
virtual circuit has been established. Until the
Page 10
port-to-port circuit is RUNning, the only data exchanges are
port housekeeping datagrams.
SCA message delivery is guaranteed by the KLIPA. That is,
any SCA message is either correctly delivered, or the
port-to-port circuit is closed. This low-level service
off-loads considerable responsibility from the software
thereby freeing it to provide other, more sophisticated
services.
SCA datagram delivery is not guaranteed (as one might
imagine).
3.2.1 Buffers -
All buffers, datagram and message, are provided by SCA.
PHYKLP has no local buffer pool and takes no responsibility
for acquiring or maintaining buffers.
PHYKLP will enqueue and dequeue buffers, datagram or message
buffers, on request. Only SCA should use these routines as
only SCA should be concerned with CI buffer management.
3.3 Message Formats
The CI portion of a packet looks like:
+-----------------------------------------------+
.PKFLI ! FLINK ! 0
+-----------------------------------------------+
.PKBLI ! BLINK ! 1
+-----------------------------------------------+
.PKRSV ! Reserved for software ! 2
+---------+---------+---------+---------+-------+
.PKSTS !00<--->07!08<--->15!16<--->23!24<--->31!32<->35!
! Status ! Flags ! Opcode ! Port ! MBZ ! 3
+---------+---------+---------+---------+-------+
.PKLEN !00<------------->15!16<--------------------->35!
! PPD byte ! Length of text data ! 4
!-------------------+---------------------------+
! ! 5
! !
! !
! Text !
! !
! ! Queue
! ! Length
Page 11
! ! - 1
+-----------------------------------------------+
The opcode field describes the type of CI message. Packets
intended for SCA are distinguishable from packets used by
the ports.
The information above is called the "PPD header" and is
meant for use by the port and its software driver. SCA has
its own header information that is part of the "text"
carried by the PPD packet.
3.4 Polling
The poller, which is part of the scheduler's context, is
responsible for testing the validity of the port-to-port VC
for each of the known nodes. Part of this testing function
is to implement the "timer" noted in figure 1.
In addition, the poller attempts to "locate" newly "on line"
nodes by periodically sending "request id" messages to any
node not yet identified. This is necessary because the
"request id" message is a datagram, as are all port-to-port
overhead messages, and therefore there is no guarantee when
and if one such message and its repsonse will be
successfully delivered. Therefore, each node on the CI must
continually poll the other nodes in the fervent hope that
one of them will succeed. Although this may sound
hopelessly frustrating, the chances of not succeeding are
actually quite small, and therefore the polling activity is
infrequent. Were it not for the likelihood of losing a
request id or its response, the polling of unknown nodes
could be replaced by the requirement that each newly
activated port simply send each other CI drop a "request
id". This would be sufficient to guarantee complete
connectivity of all CI ports. So much for the ideal world.
The poller's chief testing function is to implement the
timers for the ISTRT and the ASTRT states. In addition to
this, the poller could test the connectivity of the RUN
connections by periodically sending "request id" messages to
these ports as well. However, the SCA idle chatter is a
more inclusive test of port-to-port connectivity and
therefore will be used instead of this more primitive
testing facility.
Page 12
4.0 PHYKLP OPERATION
4.1 Major Interfaces
4.1.1 PHYSIO Interface -
PHYKLP is a device driver. As such, it is called by PHYSIO
to perform device polling and to process interrupts.
The KLIPA does not support "vectored interrupts". PHYSIO
expects its drivers to behave like RH20 channels, and
therefore to request "vectored interrupts". In order to
make all of this balance, the interrupt skip chain for
channel 5 calls directly into PHYKLP when the KLIPA requests
service. PHYKLP then fills in the CDB locations for its
channel (RH slot 7) and calls PHYSIO as if a normal
RH20-style vectored interrupt had occurred. PHYSIO is then
in control of the rest of the interrupt processing.
PHYKLP is defined as a new type of channel controller. As a
result, PHYSIO will acquire some new conventions for
managing controllers other than RH20-style controllers.
The poller is called from PHYSIO's once-a-second routine.
The action of the poller has already been described.
4.1.2 SCA Interface -
SCA relies on PHYKLP to send messages and datagrams. Also,
it requires that PHYKLP be able to establish "named buffers"
for DMA transfers and for PHYKLP to manage the DMA transfer
including notifying SCA of the completion status. Finally,
SCA relies on PHYKLP to inform it of nodes coming on-line or
going off-line.
SCA is responsible for providing message and datagram
buffers sufficient for all of the SCA traffic on the CI. In
particular, SCA cannot rely on the meager number of
datagrams that PHYKLP owns for all of the datagram traffic.
4.2 PHYKLP Structure
Page 13
4.2.1 Initialization -
PHYKLP is initialized by a call to PPDINX. On this call,
PHYKLP constructs the PCB, calls SCA so it may initialize
and create the buffers that PHYKLP needs.
Once SCA has been called, PHYKLP will enable the KLIPA.
4.2.2 CI Configuration -
The CI is "configured" by a combination of interrupt level
and polling activity. The poller continually sends request
ID messages to other CI drops in an effort to locate
previously unknown or not operating nodes.
The result of the polling activity, the ID message, is
received at interrupt level. Once a node is recognized, or
reintialized, the intialization sequence is carried out at
interrupt level.
SC.ONL is called whenever the interrupt level code manages
to create a port-to-port virtual circuit.
The configuration activity is ongoing as the CI
configuration may change at any time.
PHYKLP will establish a VC with another node that it "sees"
for the first time. However, if any existing port-to-port
VC is closed, SCA must call KLPOPN before PHYKLP will
attempt to open, or allow the other node to open, the VC
again. This is provided to allow SCA to clean up its own
data base and to prevent races between incarnations of the
port-to-port VC. The system block for the remote node
indicates whether a VC may be established.
4.2.3 Other Interrupt Activity -
Fig. 2 is a flow chart describing the general flow of the
KLIPA interrupt service.
The interrupt code processes the KLIPA's response queue as
well as detects changes in the device's state. The chief
source of response queue entries is received messages and
datagrams. Any received message must be given to SCA as
PHYKLP has no interest in CI messages.
Datagrams are divided into two classes: CI housekeeping
datagrams and SCA datagrams. PHYKLP distinguishes these
classes by the PPD opcode byte in the received datagram. CI
Page 14
housekeeping datagrams are either intialization datagrams or
maintenance datagrams.
All KLIPA interrupts are processed in the routine KLPINT.
The KLIPA is a standard device in that it has a CONI word
describing the events that promoted the interrupt.
A KLIPA interrupt occurs for one of the following reasons:
1. free queue error
2. response queue available
3. E-bus or M-bus error
4. CRAM parity error
The "normal" case is "response queue available" meaning that
some data has arrived that needs the attention of the
monitor. The other cases are all abnormal conditions that
require special handling.
In all cases, the interrupt entry routine determines the PCB
address for the interrupting device, and loads it into one
of the permanent ACs.
A response is one of the following:
1. A received message or datagram
2. A sent message or datagram that PHYKLP specified
the reponse bit for
3. A sent message or datagram that encountered an
error
4. DMA transfer done
Messsages or datagrams meant for SCA are given directly to
SCA from the KLPINT code. Of course, it is important that
PHYKLP first determine if the port-to-port circuit is
RUNning. If it isn't, then either the KLIPA or the monitor
has made a disasterous error. The port to port curcuit is
validated by finding the system block for the other node and
then checking the virtual circuit state in the system block.
A datagram meant for PHYKLP is one of the "port housekeeping
messages". In general, these will be initialization
messages, but they could be messages generated by PHYKLP
itself to read information from the KLIPA. If the datagram
is an initialization message, then the state description in
Figure 1 applies.
In all cases, table 1 defines the legal operations for data
transmission.
Page 15
All port messages must be sent using the lowest priority
message queue. This is to allow any messages still enqueued
to be processed before any of the VC establishing messages.
If this is not done, then it is possible for the
port-to-port VC to be reestablished before the old message
is processed and therefore the old message will be
erroneously sent. For example, consider the case where SCA
has requested that a message be sent to node A, but the
request is still on the command queue. If node A sends a
START, then the port-to-port VC will be closed. If the
STACK sent in reply is sent at a higher priority than the
queued message, and the ACK in reply is received promptly,
the port-to-port VC could be reestablished before the SCA
message is processed. If this happens, then the KLIPA will
send the message and node A will declare a protocol error
when it receives thereby closing the port-to-port VC.
Although this situation should eventually reach a quiescent
state, much time could pass before the nodes can once again
communicate.
Sending the START, STACK and ACK datagrams at the lowest
priority avoids this unfortunate condition.
4.2.4 Data Services -
The other major portion of PHYKLP is the interfaces for
sending messages and datagrams used by SCA. These are
simply a collection of interfaces that manages the PPD layer
of the packets.
In general, there are buffers owned by SYSAPs that the SYSAP
wants returned when the contents have been transmitted.
This is accomplished by setting the "response bit" in the
packet flag byte. When the data has been sent, the pakcet
will be placed on the response queue and a repsonse queue
available interrupt produced. KLPINT simply informs SCA
that the transmission is complete, and SCA must inform the
appropriate SYSAP. The following cases are known to set the
response bit:
. SCA control messages
. CFS messages
Page 16
4.2.5 Packet Conventions -
As was mentioned earlier, the driver must provide physical
addresses to the KLIPA. Consequently, the link words of
linked structures are physical addresses, not virtual
addresses.
In order to make accessing these structures as simple as
possible, many of the structures contain a word reserved for
use by software. PHYKLP stores the virtual address of the
datum in this word and uses the routines PMOVE and PMOVEM to
reference the physical location.
5.0 ERRORS
Errors are detected at interrupt level. They fall into two
broad categories: transmission errors and device errors.
Each time PHYKLP detects an error, it will either execute a
BUG. or it will explicitly make a SPEAR entry.
5.1 Transmission Errors
Transmission errors occur for following reasons:
1. The port-to-port curcuit is in the wrong state
2. The CI itself is defective
3. The destination port does not ACK the message
It turns out there are other conditions, namely bugs in the
ports, that can appear to be one of these conditions. For
example, a defective collisions avoidance algorithm can
appear to be a defective CI.
A transmission error on a message is a fatal error. That
is, the SCA virtual circuit carrying the message ceases to
be usable. PHYKLP must inform SCA of this condition.
A transmission error on a datagram is not a fatal error. If
the datagram is one of SCA's, then PHYKLP can simply log the
error and not bother notifying SCA. This is acceptable
because datagrams may be lost for many reasons,
transmissions errors being only one of the possible
failures.
A transmission error on an intialization message is of
Page 17
concern to PHYKLP. As noted in Figure 1, errors during
initialization may be ignored and caught as "time out"
conditions. However, to expedite establishing the
port-to-port VC, PHYKLP will detect transmission errors
during initialization and attempt to recover immediately.
In general, a transmission error happens either because the
destination port is not operational (no ACK), or the CI is
defective. The former case is an acceptable failure and
does not require logging or any other special action. The
latter case must be logged and, in addition, PHYKLP will
declare the port-to-port VC down and attempt to initialize
the circuit again. This implies that SCA must be notified
of a "node offline" condition.
5.2 Device Errors
These errors correspond to bits in the device's CONI status
word. Each is detected at interrupt level and handled
immediately.
5.2.1 Free Queue Error -
A free queue error implies that SCA has not provided
sufficient buffering for the KLIPA. Of course a flurry of
activity, such as many nodes coming online at once, can
provoke this error as well.
A free queue error is simply an "data overrun" condition.
It may not indicate a problem with the software or with the
CI, and therefore PHYKLP will simply log the event. If, in
fact, the error resulted in the loss of important data, the
sending system will execute the appropriate recovery (e.g.
close the VC).
5.2.2 CRAM Parity Error -
This means that the KLIPA has halted. Most likely the error
is a result of the UCODE executing a predefined location
that contains a parity error; in other words, it's a
BUGHLT!
PHYKLP will log the error, including the LAR and will
request that the KLIPA microcode be reloaded.
Page 18
5.2.3 Bus Errors -
These are errors that may or may not result in a protocol
error. That is, the data that is lost might be unimportant
(i.e. a datagram).
Since PHYKLP has no way of knowing if any informationw as
lost, it must assume that a bus error is a fatal error and
shut all of the port-to-port VCs.
6.0 OPEN ISSUES
PHYKLP is being written to be initialized during PHYINI as
well as later on the monitor start-up procedure. Once
PHYSIO is modified to allow interrupt handling during
initialization, this feature of PHYKLP will have to be
thoroughly tested.
KLPFUN.MEM
TOPS-20 KLIPA Driver Functional Specification
Arnold Miller
Clair Grant
Version 1.6
December 14, 1983
TOPS-20 KLIPA Driver Functional Specification Page 2
1.0 ARCHITECTURAL POSITION . . . . . . . . . . . . . . . 2
2.0 RELATED STANDARDS AND SPECIFICATIONS . . . . . . . . 3
3.0 TERMINOLOGY . . . . . . . . . . . . . . . . . . . . 3
4.0 KLIPA MICROCODE INTERFACE . . . . . . . . . . . . . 4
5.0 GLOBAL DATA STRUCTURES . . . . . . . . . . . . . . . 5
5.1 Channel Data Block . . . . . . . . . . . . . . . . 5
5.2 Port Control Block . . . . . . . . . . . . . . . . 6
5.3 System Block . . . . . . . . . . . . . . . . . . . 7
6.0 PHYSIO INTERFACE . . . . . . . . . . . . . . . . . . 8
6.1 Initialization . . . . . . . . . . . . . . . . . . 8
6.2 Once-a-second Device Polling . . . . . . . . . . . 9
6.3 Interrupt Service . . . . . . . . . . . . . . . . 9
6.4 Channel Dispatch Vector . . . . . . . . . . . . . 9
7.0 SCAMPI INTERFACE . . . . . . . . . . . . . . . . . 10
7.1 Services Provided For SCAMPI . . . . . . . . . . 11
7.1.1 Port-to-Port Virtual Circuit Maintenance . . . 11
7.1.2 Datagrams . . . . . . . . . . . . . . . . . . 12
7.1.3 Messages . . . . . . . . . . . . . . . . . . . 13
7.1.4 Named Buffers . . . . . . . . . . . . . . . . 14
7.1.5 Get The Local Port's CI Number . . . . . . . . 15
7.1.6 KLIPA Maintenance Support . . . . . . . . . . 15
7.1.7 Callbacks To SCAMPI . . . . . . . . . . . . . 18
7.2 Services Required Of SCAMPI . . . . . . . . . . 18
8.0 DIAGNOSTIC INTERFACE . . . . . . . . . . . . . . . 19
9.0 ERROR PROCESSING . . . . . . . . . . . . . . . . . 19
9.1 CSR Status . . . . . . . . . . . . . . . . . . . 19
9.2 PCB Error Words . . . . . . . . . . . . . . . . 20
9.3 Response Queue Entries . . . . . . . . . . . . . 20
9.4 TOPS-20 Error Reporting . . . . . . . . . . . . 20
9.5 Reloading The KLIPA Microcode . . . . . . . . . 20
10.0 KEY ALGORITHMS . . . . . . . . . . . . . . . . . 20
10.1 KLIPA Initialization . . . . . . . . . . . . . . 21
10.2 Once-a-Second Poller . . . . . . . . . . . . . . 21
10.3 KLIPA Interrupt Service . . . . . . . . . . . . 21
11.0 TESTING . . . . . . . . . . . . . . . . . . . . . 22
TOPS-20 KLIPA Driver Functional Specification Page 3
1.0 ARCHITECTURAL POSITION
PHYKLP.MAC is TOPS-20's port driver for the IPA-20 (KLIPA); thus, it is
the lowest level of software support for the CI-20. It is responsible for
coordinating all operating system access to the KLIPA; it does this by:
1. maintenance of the port-to-port virtual circuits between the local
system and remote systems on the CI
2. providing an interface to the CI services desired by higher level
protocols
The port driver provides a generally passive service that responds to
requests from the higher level protocol module SCAMPI.MAC and performs the
device-specific operations required by the requests. Because the KLIPA is
a smart and somewhat independent device, the driver must perform some
actions on its own without being directed by higher level services.
--------- --------
! DIAG% ! ! SCS% !
--------- --------
! ! User
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! ! Monitor
! ! ----------
! ! ! PHYMVR !--------------------------
! ! ---------- !
! ! ! --------- !
! ! ! ! PAGEM ! ------------ ----------
! ! ! --------- -----------! PHYSIO !
! ! ! ! / ----------
! ! ! ! / / /
-------- ---------- ! ---------- ---------- /
! DIAG ! ! SCSJSY ! ! ! CFSSRV ! ! PHYMSC ! /
-------- ---------- ! ---------- ---------- /
\ \ \ ! / /
\ \ ! ! / --- -----
\ ---------- /
\ ! SCAMPI ! /
\ ---------- /
\ ! /
\ ---------- /
----- ! PHYKLP ! --------
----------
! Monitor
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! Hardware
---------
! IPA20 !
---------
Figure 1 - CI-20 Software Components
TOPS-20 KLIPA Driver Functional Specification Page 4
2.0 RELATED STANDARDS AND SPECIFICATIONS
This document describes, at a functional level, those aspects of the KLIPA
driver not specified in other documents. In order for you to understand
this functional specification, you must be familiar with at least the
terminology, if not the details, of the following:
1. LCG CI Port Architecture Specification, 18-Aug-83 (Dossa/Keenan)
R60SPC:LCG-CI-PORT-ARCHITECTURE.SPC
2. IPA20-L Error Spec, 23-Nov-83 (Holewa)
R60SPC:IPA20-ERROR-SPEC.TXT
3. Systems Communications Architecture, 20-July-82 (Strecker)
R60SPC:SCA-CORP-SPEC.MEM
4. TOPS-20 SCA Functional Specification, 21-Nov-83 (Dunn)
R60SPC:SCAFUN.MEM
5. TOPS-20 System Communication Service Tester, 10-May-83 (Grant)
R60SPC:SCSTST.MEM
6. TOPS-20 Coding Standard, 23-Mar-83 (Murphy)
DOC:CSTAND.MEM
The implementation details of the KLIPA port driver are described in:
TOPS-20 KLIPA Driver Design Specification, 16-Aug-83 (Grant/Miller)
R60SPC:KLPDES.MEM
3.0 TERMINOLOGY
The terms in the following list are defined in an attempt to clarify some
potentially confusing topics discussed in this document.
1. port - an entity connected directly to the CI, capable of
creating/destroying virtual circuits and transmitting packets; it
may not have the ability to provide CI services to high-level
protocols
2. node - an entity on the CI, possibly directly connected, possibly
connected via a port; it provides higher-level protocols with an
interface to the CI
TOPS-20 KLIPA Driver Functional Specification Page 5
3. port-to-port virtual circuit - the logical communications path
between 2 ports
4. packet - a series of bytes (identified as a single entity)
transmitted from one port to another
5. datagram - a packet which is not error controlled, that is, its
delivery is not guaranteed
6. message - a packet whose delivery is guaranteed
7. SCA connection - a logical communications path between 2 SCAs
TOPS-20 KLIPA Driver Functional Specification Page 6
4.0 KLIPA MICROCODE INTERFACE
The complete software/microcode interface is described in [1]. The
following is a brief summary of the interface.
PHYKLP and the port communicate by using a queued protocol whose basic
structure relies on 7 different doubly-linked queues. There are 4 command
queues, a response queue, and 2 free queues (one for datagrams, one for
messages). When PHYKLP wants to give the port a command, it places an
entry on the tail of one of the 4 command queues. The port communicates
with PHYKLP by putting entries on the tail of the response queue.
Both PHYKLP and the port use the free queues as a source of available
buffers and as a repository of processed and discarded buffers.
This queue structure is defined and controlled by the Port Control Block
(PCB), a data structure in the KL's memory. Both PHYKLP and the port
read/write the PCB. The PCB is described in the GLOBAL DATA STRUCTURE
section.
The CI-20 requires special KL10 microcode to allow the port to perform a
read-pause-write increment memory reference. This is used by the port to
interlock the queues in cooperation with AOSNs done by PHYKLP.
The port requires PHYKLP to perform the following initialization functions:
1. create initialize the PCB
2. Put a channel jump word in the EPT
3. Create a CCW in the PCB
4. load the KLIPA microcode
5. Start the KLIPA
The port reports error information by:
1. setting bits in the CSR
2. placing packets on the response queue
3. making entries in the PCB's error words
There may be at most one IPA-20 attached to any given KL-10 and the device
must be located in RH slots 6 and 7. This restriction exists because there
is no way to distinguish a KLIPA from a KLNI and therefore the monitor must
have some a priori knowledge of where a KLIPA, if it exists, will be found.
Aside from this restriction, however, we will make no conscious effort in
the software to preclude multiple KLIPAs attached to a KL-10 in the future.
TOPS-20 KLIPA Driver Functional Specification Page 7
5.0 GLOBAL DATA STRUCTURES
5.1 Channel Data Block
PHYKLP creates and uses a channel data block (CDB), and uses the permanent
AC conventions (P1-P4) used by the rest of the I/O system. There is also
an entry in CHNTAB+7 for the KLIPA. However, the KLIPA has its own channel
type; it is not an RH20. The KLIPA redefines some of the RH20 CDB words;
they are:
CDBFLG==CDBCAD ;FLAGS
CB.DED==1B1 ;PORT IS DEAD
CB.PST==1B2 ;PORT IS STOPPED
CB.VOK==1B3 ;PORT VERSION IS OK (UCODE VERSION WORD)
CDBVER==CDBCAD+1 ;MICROCODE VERSION NUMBER
CDBLG0==CDBCC1 ;LOGOUT WORD 0
CDBLG1==CDBCC2 ;LOGOUT WORD 2
CDBLG2==CDBICR ;LOGOUT WORD 3
CDBQRQ==CDBRST ;NON-0 IF HAD TO REQUEUE A REQUEST
CDBCTR==CDBCL2 ;MONOTONIC NUMBER,,FORK WHICH OWNS COUNTERS
CDBFQE==CDBCL2+1 ;MESSAGE,,DATAGRAM FREE QUEUE ERROR COUNT
CDBECW==CDBCL2+2 ;CCW FROM PCB AT ERROR
The KLIPA defines the device-depenedent words in its CDB as follows:
CDBPCB==CDBDDP ;ADDR OF PCB FOR MSCP CHANS
CDBSBS==CDBDDP+1 ;ADDR OF 1ST SYSTEM BLOCK FOR MSCP CHANS
CDBNOD==CDBDDP+2 ;OUR NODE NUMBER ON THIS PORT (MSCP CHANS)
CDBDGB==CDBDDP+3 ;LOC OF BUFFER FOR DATAGRAMS FOR PORT USE
5.2 Port Control Block
The PCB, officially defined in [1], is created by PHYKLP and is used by the
port and PHYKLP as a communications region.
+-------------------------------------------------------+
0 | Buffer Descriptor Table Starting Address |
+-------------------------------------------------------+
1 | Message Free Queue Entry Length |
+-------------------------------------------------------+
2 | Datagram Free Queue Entry Length |
+-------------------------------------------------------+
3 | Reserved |
+-------------------------------------------------------+
4 | Command Queue 3 Interlock |
+-------------------------------------------------------+
5 | Command Queue 3 FLINK |
+-------------------------------------------------------+
6 | Command Queue 3 BLINK |
+-------------------------------------------------------+
7 | Command Queue 2 Interlock |
TOPS-20 KLIPA Driver Functional Specification Page 8
+-------------------------------------------------------+
8 | Command Queue 2 FLINK |
+-------------------------------------------------------+
9 | Command Queue 2 BLINK |
+-------------------------------------------------------+
10 | Command Queue 1 Interlock |
+-------------------------------------------------------+
11 | Command Queue 1 FLINK |
+-------------------------------------------------------+
12 | Command Queue 1 BLINK |
+-------------------------------------------------------+
13 | Command Queue 0 Interlock |
+-------------------------------------------------------+
14 | Command Queue 0 FLINK |
+-------------------------------------------------------+
15 | Command Queue 0 BLINK |
+-------------------------------------------------------+
16 | Response Queue Interlock |
+-------------------------------------------------------+
17 | Response Queue FLINK |
+-------------------------------------------------------+
18 | Response Queue BLINK |
+-------------------------------------------------------+
19 | Message Free Queue Interlock |
+-------------------------------------------------------+
20 | Message Free Queue FLINK |
+-------------------------------------------------------+
21 | Message Free Queue BLINK |
+-------------------------------------------------------+
22 | Datagram Free Queue Interlock |
+-------------------------------------------------------+
23 | Datagram Free Queue FLINK |
+-------------------------------------------------------+
24 | Datagram Free Queue BLINK |
+-------------------------------------------------------+
25 | Reserved |
+-------------------------------------------------------+
26 | Reserved |
+-------------------------------------------------------+
27 | Reserved |
+-------------------------------------------------------+
28 | Reserved |
+-------------------------------------------------------+
29 | Port Error Word 0 |
+-------------------------------------------------------+
30 | Port Error Word 1 |
+-------------------------------------------------------+
31 | PCB Base Address |
+-------------------------------------------------------+
32 | PI Level |
+-------------------------------------------------------+
33 | Reserved |
+-------------------------------------------------------+
34 | Channel Command Word |
+-------------------------------------------------------+
TOPS-20 KLIPA Driver Functional Specification Page 9
35 | Reserved to Port |
+-------------------------------------------------------+
5.3 System Block
PHYKLP creates a system block (SB) for each node it finds on the CI. The
SB cells are defined as offsets in the device-dependent section of the
controller data block (KDB). A system block is used by both PHYKLP and
SCAMPI and looks like:
!=======================================================!
.SBANB ! Address of next system block !
!-------------------------------------------------------!
.SBAPB ! Address of associated port control block !
!-------------------------------------------------------!
.SBACD ! Address of associated channel data block !
!-------------------------------------------------------!
.SBVCS ! ! Dest vir cir state !
!-------------------------------------------------------!
.SBDSP ! Destination port !
!-------------------------------------------------------!
.SBDRQ ! Datagram return queue header !
!-------------------------------------------------------!
.SBLMB ! Local message buffer header !
!-------------------------------------------------------!
.SBSBI ! Reserved ! SBI of this SB !
!-------------------------------------------------------!
.SBFCB ! Pointer to first connection block !
!-------------------------------------------------------!
.SBLCB ! Pointer to last connection block !
!-------------------------------------------------------!
.SBTWQ ! FLINK for SCA work queue !
!-------------------------------------------------------!
.SQBWQ ! BLINK for SCA work queue !
!-------------------------------------------------------!
.SBQOR ! Pointer to queue of outstanding requests !
!-------------------------------------------------------!
.SBDSS \ \
\ Destination system \
\ \
!-------------------------------------------------------!
.SBMMS ! Max mess size (bytes) ! Max DG size (Bytes) !
!-------------------------------------------------------!
.SBDST ! Destination software type !
!-------------------------------------------------------!
.SBDSV ! Destination software version !
!-------------------------------------------------------!
.SBDSE ! Destination software edit level !
!-------------------------------------------------------!
.SBDHT ! Destination hardware type !
!-------------------------------------------------------!
.SBDHV ! Destination hardware version !
TOPS-20 KLIPA Driver Functional Specification Page 10
!-------------------------------------------------------!
.SBDPC \ \
\ Destination port characteristics \
\ \
!-------------------------------------------------------!
.SBTIM ! TODCLK at last message from this remote !
!-------------------------------------------------------!
.SBFLG ! Flags !
!-------------------------------------------------------!
.SBSST ! Start sequence timer !
!=======================================================!
TOPS-20 KLIPA Driver Functional Specification Page 11
6.0 PHYSIO INTERFACE
PHYKLP is a TOPS-20 device driver. As such, it is called by PHYSIO to
perform channel polling and to process interrupts. PHYKLP does not provide
many of the housekeeping and register operations which PHYSIO uses for
RH20-type devices; such operations are simply not pertinent to KLIPA
devices. Thus, there are few expected calls from PHYSIO to PHYKLP.
6.1 Initialization
PHYKLP's KLPINI routine is called from PHYSIO's PHYINI for channel
initialization. KLPINI does the following:
1. resets the KLIPA
2. creates the channel data block (CDB)
3. fills in CHNTAB
4. sets up time out values for REQUEST-IDs and the START/STACK/ACK
sequence
6.2 Once-a-second Device Polling
The poller, routine KLPCHK, is called by PHYSIO's PHYCHK routine by
dispatching through KLPDSP.
The poller attempts to detect newly on-line nodes by periodically sending
request-id packets to all nodes. This is necessary because the "request
id" packet is a datagram, as are all port-to-port packets, and therefore
there is no guarantee that it will be successfully delivered. Therefore,
each node on the CI must continually poll the other nodes in the fervent
hope that one of them will succeed. Although this may sound hopelessly
frustrating, the chances of not succeeding are actually quite small, and
therefore the polling activity is infrequent.
Once another node responds to a request-id, a three-way-handshake
(START/STACK/ACK) initialization is used to open the port-to-port virtual
circuit. The initialization packets are always sent from the lowest
priority command queue (queue 3) and are timed by the poller. The protocol
insures the two systems reach the open state by mutual agreeement.
6.3 Interrupt Service
The KLIPA does not support vectored interrupts; PHYSIO expects its device
drivers to request vectored interrupts. In order to make all of this
balance, the non-vectored interrupt skip chain will verify that the
interrupt was generated by the KLIPA and then jump to PHYSIO as if a
TOPS-20 KLIPA Driver Functional Specification Page 12
vectored interrupt had occurred. A new channel is defined for the KLIPA so
PHYSIO will not process the KLIPA as a funny RH20 device, but as a unique
entity.
6.4 Channel Dispatch Vector
PHYKLP's channel dispatch vector is as follows:
KLPDSP::JRST KLPINI ;0 - INITIALIZATION
JRST DSPBUG ;1 - STACK SECOND CHANNEL COMMAND
JRST KLPSIO ;2 - START I/O
JRST DSPBUG ;3 - POSITION REQUEST
JRST DSPBUG ;4 - RETURN BEST XFER
JRST KLPINT ;5 - INTERRUPT PROCESSING
JRST KLPCCW ;6 - MAKE CHANNEL XFER WORD
JRST KLPHUN ;7 - TRANSFER HUNG
JRST KLPZAP ;10 - RESET CHANNEL
JRST KLPCHK ;11 - PERIODIC CHECK
JRST KLPEXT ;12 - CHECK UNIT EXISTENCE
JRST KLPCCA ;13 - EXTRACT ADDRESS FROM CCW WORD
PHYKLP's controller/unit dispatch vector is as follows:
KLDSP:: JRST DSPBUG ;0 - INITIALIZATION
JRST DSPBUG ;1 - START I/O
JRST DSPBUG ;2 - HANDLE INTERRUPT
JRST DSPBUG ;3 - ERROR RECOVERY
JRST DSPBUG ;4 - HUNG DEVICE
JRST DSPBUG ;5 - CONVERT BLK # TO CYLINDER/SURF-SEC
JRST DSPBUG ;6 - LATENCY COMPUTATION
JRST DSPBUG ;7 - START POSITIONING
JRST DSPBUG ;10 - ATTENTION INTERRUPT
JRST DSPBUG ;11 - SKIP IF POSITIONING REQUIREDD
JRST DSPBUG ;12 - STACK SECOND TRANSFER COMMAND
JRST KLEXT ;13- CHECK EXISTANCE OF UNIT
RET ;14- CHECK FOR HALTED CONTROLLER
DSPBUG is a BUGHLT. We do not expect to get called from PHYSIO for this
function if the channel is a KLIPA.
TOPS-20 KLIPA Driver Functional Specification Page 13
7.0 SCAMPI INTERFACE
The SCA protocol and its associated terminology are completely described in
[3]. The following is a brief description of the services PHYKLP provides
for SCAMPI to implement the protocol used by SYSAPs.
SCA defines 3 types of data transmissions:
1. messages
2. datagrams
3. named buffers
SCA data transmissions are sent only when a port-to-port virtual circuit
has been established by PHYKLP and an SCA connection has been opened. SCA
relies on PHYKLP to maintain the port-to-port virtual circuits. The states
of a virtual circuit are 1) closed, 2) start-sent, 3) start-received, and
4) open.
SCA message delivery is guaranteed by the KLIPA. That is, any SCA message
is either correctly delivered, or the port-to-port virtual circuit is
closed by PHYKLP and SCA is notified. This low-level, guaranteed service
off-loads considerable responsibility from the higher-level software
thereby freeing it to provide other, more sophisticated services. MSCP and
CFS use the message service.
SCA datagram delivery is not guaranteed so applications using SCA must be
prepared for lost datagrams. When DECnet is implemented on the CI, it will
use the datagram service.
SCA requires PHYKLP to establish named buffers and manage their transfers,
including notifying SCA of the completion status.
SCA relies on PHYKLP to inform it of nodes coming on-line or going
off-line.
Although SCA will test an existing port-to-port virtual circuit with idle
chatter over an SCA connection on that virtual circuit, PHYKLP will still
inform SCA when a virtual circuit must be closed, just in case the timing
is such that PHYKLP detects the problem first.
7.1 Services Provided For SCAMPI
This section lists the routines in PHYKLP which are provided for SCA to
manage use of the CI by SYSAPs.
The following is a list of error codes which may be returned by PHYKLP.
1. KLPX1 - no BHDs available
TOPS-20 KLIPA Driver Functional Specification Page 14
2. KLPX2 - no BSDs available
3. KLPX3 - no datagram buffers available
4. KLPX4 - no message buffers available
5. KLPX5 - KLIPA is not enabled
6. KLPX6 - KLIPA is in maintenance mode
7. KLPX7 - no KLIPA on system
8. KLPX8 - packet is bad
9. KLPX9 - no virtual circuit
10. KLPX10 - don't know our own CI node number
7.1.1 Port-to-Port Virtual Circuit Maintenance -
1. Open a port-to-port virtual circuit
SCA must call KLPOPN for any system block that has previously had
an open VC. Once a virtual circuit is closed, PHYKLP will not
reopen it without a direct request from SCA. This is provided to
allow SCA to clean up its own data base and to prevent races
between incarnations of an open port-to-port VC.
BLCAL. (OPENVC,<SBA>)
ACCEPTS: SBA/ System Block Address
RETURNS: +1 Failed. T1/ error code
+2 Success
Possible errors: KLPX3
2. Close a port-to-port virtual circuit
BLCAL. (CLOSVC,<SBA>)
ACCEPTS: SBA/ System Block Address
RETURNS: +1 Failed. T1/ error code
+2 Success
Possible errors: KLPX3
TOPS-20 KLIPA Driver Functional Specification Page 15
7.1.2 Datagrams -
1. send a datagram
BLCAL. (SNDDG,<SBA,DGA,LEN,FLG,PRI,PATH>)
ACCEPTS: SBA/ System Block Address
DGA/ Datagram Address
LEN/ Length of Datagram
word count if high density
byte count industry compatible
FLG/ Flags
F.RTB ;1 - return buffer to SCA
;0 - return buffer to free Q
F.SPM ;1 - Send in high density mode
;0 - Send in industry compatible mode
PRI/ Priority (command queue number)
PATH/ 0 - KLIPA selects
1 - Path A
2 - Path B
RETURNS: +1 Failed. T1/ error code.
+2 Success
Possible errors: KLPX9
2. link datagram buffers onto the datagram free queue
BLCAL. (LNKDFQ,<SBA,BFA>)
ACCEPTS: SBA/ System Block Address
BFA/ Datagram Buffer Address
RETURNS: +1
3. unlink a datagram buffer from the datagram free queue
BLCAL. (ULNKDG,<SBA>)
ACCEPTS: SBA/ System Block Address
RETURNS: +1 Failed. T1/ error code
+2 Success - T1/ Datagram address
Possible errors: KLPX8
TOPS-20 KLIPA Driver Functional Specification Page 16
7.1.3 Messages -
1. send a message
BLCAL. (SNDMSG,<SBA,MSGA,LEN,FLG,PRI,PATH>)
ACCEPTS: SBA/ System Block Address
MSGA/ Message Address
LEN/ Length of Message
word count if high density
byte count industry compatible
FLG/ Flags
F.RTB ;1 - return buffer to SCA
;0 - return buffer to free Q
F.SPM ;1 - Send in high density mode
;0 - Send in industry compatible mode
PRI/ Priority (command queue number)
PATH/ 0 - KLIPA selects
1 - Path A
2 - Path B
RETURNS: +1 Failed. T1/ error code
+2 Success
Possible errors: KLPX9
2. link message buffers onto the message free queue
BLCAL. (LNKMFQ,<SBA,BFA>)
ACCEPTS: SBA/ System Block Address
BFA/ Message Buffer Address
RETURNS: +1
3. unlink a message buffer from the message free queue
BLCAL. (ULNKMG,<SBA>)
ACCEPTS: SBA/ System Block Address
RETURNS: +1 Failed. T1/ error code
+2 Success - T1/ message address
Possible errors: KLPX8
TOPS-20 KLIPA Driver Functional Specification Page 17
7.1.4 Named Buffers -
1. map buffers
BLCAL. (MAPBUF,<BDA>)
ACCEPTS: BDA/ Buffer Descriptor Address
RETURNS: +1 Failed. T1/ error code
+2 Success T1/ buffer name
Possible errors: KLPX1, KLPX2
The buffer descriptor has the following format:
!=======================================================!
! Address of next buffer descriptor (zero if none) !
!-------------------------------------------------------!
! Length of segment #0 !
!-------------------------------------------------------!
! Address of the segment #0 !
!-------------------------------------------------------!
\ \
\ \
\ segment descriptor pairs \
\ \
\ \
!-------------------------------------------------------!
! Length of buffer segment #n !
!-------------------------------------------------------!
! Address of the segment #n !
!-------------------------------------------------------!
! 0 !
!=======================================================!
2. unmap a buffer
BLCAL. (UMAP,<BNAM>)
ACCEPTS: BNAM/ Buffer Name
RETURNS: +1 Failed. T1/ error code
+2 success
Possible errors:
3. send a buffer
BLCAL. (SNDDAT,<SNAM,RNAM,SBYT,RBYT,CID>)
ACCEPTS: SNAM/ name of send buffer
RNAM/ name of receive buffer
SBYT/ Byte offset into send buffer
RBYT/ Byte offset into receive buffer
CID/ Unique code given back when operation completed
TOPS-20 KLIPA Driver Functional Specification Page 18
RETURNS: +1 Failed. T1/ error code
+2 Success
Possible errors: KLPX9
4. request a buffer
BLCAL. (REQDAT,<SNAM,RNAM,SBYT,RBYT,CID>)
ACCEPTS: SNAM/ name of send buffer
RNAM/ name of receive buffer
SBYT/ Byte offset into send buffer
RBYT/ Byte offset into receive buffer
CID/ Unique code given back when operation completed
Returns: +1 Failed. T1/ error code
+2 Success
Possible errors: KLPX9
7.1.5 Get The Local Port's CI Number -
CALL LOCPRT
RETURNS: +1 Failed. T1/ error code
+2 Success. T1/ our CI port number
Possible errors: KLPX7, KLPX10
7.1.6 KLIPA Maintenance Support - The maintenance functions do not require
an SCA connection.
1. send a RESET or START maintenance packet
BLCAL. (PPDSRS,<SBA,PKA,FUNC>)
ACCEPTS: SBA/ System block address
PKA/ Packet Address
FUNC/ Function Bits ,, Start Address
F.SRS ;1 - start
;0 - reset
F.FRC ;1 - force
;0 - non-force
RETURNS: +1 Failed - T1/ error code
+2 Success
TOPS-20 KLIPA Driver Functional Specification Page 19
Possible errors: KLPX7
2. send maintenance data
BLCAL. (PPDSMD,<SBA,PKA,SNAM,RNAM,SBYT,RBYT,CBACK>)
ACCEPTS: SBA/ System block address
PKA/ Packet Address
SNAM/ name of send buffer
RNAM/ name of receive buffer
SBYT/ Byte offset into send buffer
RBYT/ Byte offset into receive buffer
CBACK/ Callback address
RETURNS: +1 Failed - T1/ error code
+2 Success
Possible errors: KLPX7
3. request maintenance data
BLCAL. (PPDRMD,<SBA,PKA,SNAM,RNAM,SBYT,RBYT,CBACK>)
ACCEPTS: SBA/ System block address
PKA/ Packet Address
SNAM/ name of send buffer
RNAM/ name of receive buffer
SBYT/ Byte offset into send buffer
RBYT/ Byte offset into receive buffer
CBACK/ Callback address
RETURNS: +1 Failed - T1/ error code
+2 Success
Possible errors: KLPX7
4. read port counters
Request the port to return the value of the performance counters.
This is an asynchronous operation; when the reply is received,
PHYKLP will call SCAMPI.
BLCAL. (PPDRPT,<PKA,CID>)
ACCEPTS: PKA/ Packet Address
CID/ Connect ID
RETURNS: +1 Failed. T1/ error code
+2 Success
The following is the format of the counter data:
TOPS-20 KLIPA Driver Functional Specification Page 20
!=======================================================!
\ \
\ Port header \
\ \
!-------------------------------------------------------!
.PCMCV! Microcode version !
!-------------------------------------------------------!
.PCAAC! Path A ACK count !
!-------------------------------------------------------!
.PCANC! Path A NAK count !
!-------------------------------------------------------!
.PCANR! Path A no response count !
!-------------------------------------------------------!
.PCBAC! Path B ACK count !
!-------------------------------------------------------!
.PCBNC! Path B NAK count !
!-------------------------------------------------------!
.PCBNR! Path B no response count !
!-------------------------------------------------------!
.PCDGD! Datagrams discarded !
!-------------------------------------------------------!
.PCPTX! Packets transmitted !
!-------------------------------------------------------!
.PCPRX! Packets received !
!-------------------------------------------------------!
.PCDPT! Designated port !
!-------------------------------------------------------!
\ \
\ Reserved for software \
\ \
!=======================================================!
Possible errors: KLPX7
5. point and/or clear counters
BLCAL. (PPDSPT,<PKA,NODE,CTRS>)
CALL PPDSPT
ACCEPTS: NODE/ CI Node Number (377 for all)
CTRS/ Counter Bit Mask
B0 If on, count ACKs received on Path A.
B1 If on, clear the counter.
B2 If on, count NAKs received on Path A.
B3 If on, clear the counter.
B4 If on, count NO_RSPs received on Path A.
B5 If on, clear the counter.
B6 If on, count ACKs received on Path B.
B7 If on, clear the counter.
B8 If on, count NAKs received on Path B.
B9 If on, clear the counter.
B10 If on, count NO_RSPs received on Path B.
B11 If on, clear the counter.
TOPS-20 KLIPA Driver Functional Specification Page 21
B12 The count of discarded datagrams because
of no DGFree Queue entries.
B13 If on, clear the counter.
B14 Count the packets transmitted to the
designated port.
B15 If on, clear the counter.
B16 Count the packets received from the
designated port.
B17 If on, clear the counter.
RETURNS: +1 Failed. T1/ error code
+2 success
Possible errors: KLPX7
7.1.7 Callbacks To SCAMPI - PHYKLP will call SCAMPI when the following
events occur:
1. port-to-port virtual cirucit opened (SC.ONL)
2. port-to-port virtual cirucit closed (SC.OFL)
3. SCA packet or application (SYSAP) packet arrived (SC.INT)
4. named buffer transfer completed (SC.DMA)
5. port counter read completed (SC.RPC)
6. the port has detected an error (SC.ERR)
7. maintenance data transfer complete (SC.MDC)
7.2 Services Required Of SCAMPI
SCA is responsible for providing PHYKLP with all buffers to be used for CI
message and datagram transmission.
Also, once a port-to-port virtual circuit is closed, SCA must specifically
request opening it again. PHYKLP, will not, on its own, reopen a circuit.
TOPS-20 KLIPA Driver Functional Specification Page 22
8.0 DIAGNOSTIC INTERFACE
The following routines are provided for use by diagnostic functions:
1. start the KLIPA
CALL STRKLP
RETURNS: +1 Failed. T1/ Error code
+2 Success.
Possible errors: KLPX7
2. stop the KLIPA
CALL STPKLP
RETURNS: +1
3. test the CI - send a loopback message to the star coupler
CALL CIONLT
RETURNS: +1 Failed. T1/ error code
+2 Success.
Possible error: KLPNO, KLPMAN, KLPBUF, KLPENA
TOPS-20 KLIPA Driver Functional Specification Page 23
9.0 ERROR PROCESSING
TOPS-20 finds out about errors detected by the port by seeing certain CSR
bits on, examining the error words in the PCB, and finding packets with
errors on the response queue.
9.1 CSR Status
The control and status register (CSR) is used by the port and the software
to communicate with one another. PHYKLP does a CONI KLP,AC to read the
CSR; the complete set of CSR bits is in [1]. There are 5 CSR bits which
indicate errors detected by the port:
CI.CPE ;CRAM PARITY ERROR
CI.MBE ;MBUS ERROR
CI.EPE ;EBUS PARITY ERROR
CI.FQE ;FREE QUEUE ERROR
CI.DPE ;DATA PATH ERROR
The port generates an interrupt whenever it sets one of these bits. Why
the port sets these bits and what is expected of TOPS-20 is described in
[2].
9.2 PCB Error Words
The port places information in the PCB's error words and generates an
interrupt whenever it has problems processing a command queue entry. The
contents of the error words are defined in [1].
9.3 Response Queue Entries
The port generates an interrupt whenever it places a packet on the response
queue and the response queue is empty. When PHYKLP processes a response
queue packet it will check the status field to see if the port has set any
error bits, indicating there was a problem in packet processing or
transmission. These status field bits are defined in [1].
9.4 TOPS-20 Error Reporting
PHYKLP will make ERROR.SYS entries, BUGINF/CHK/HLT, and produce CTY
messages as stated in [2].
TOPS-20 KLIPA Driver Functional Specification Page 24
9.5 Reloading The KLIPA Microcode
Whenever PHYKLP determines that the KLIPA microcode must be reloaded, it
arranges for the program SYSTEM:IPALOD.EXE to be run by Job 0. This
program is run by Job 0 at the earliest opportunity and a message is sent
to the CTY.
IPALOD contains the appropriate KLIPA microcode version and the necessary
code to load the microcode. If there is no file called SYSTEM:IPALOD.EXE,
the KLIPA microcode cannot be reloaded.
TOPS-20 KLIPA Driver Functional Specification Page 25
10.0 KEY ALGORITHMS
10.1 KLIPA Initialization
Immediately after the swappable monitor has been loaded, the routine PPDINX
is called from job 0; it does the following:
1. create and initialize the PCB
2. call SCA's initialization routine
3. stock the datagram and message free queues
4. enable the KLIPA
5. throw away any packets on the queues
6. give the KLIPA its PIA
7. determine the local port number
8. send REQUEST-IDs to the other 15 nodes
9. set SF%KLP in FACTSW indicating KLIPA initialization has completed
This is done in process context (rather than during PHYSIO start-up) so
that any memory management or interrupt processing can happen in a
conducive environment.
NOTE
If we decide to support PS: on CI disks,
initialization will have to take place during
the call to PHYINI and therefore we will have
to redesign some of the implementation.
The processing of response queue packets during initialization is done in
the asynchronous interrupt routine KLPINT and not synchronously within
PPDINX. The one exception to this is the short spin-wait for the response
to the READ-REGISTER commmand in which the port indicates our CI node
number.
10.2 Once-a-Second Poller
The poller, routine KLPCHK, runs in scheduler context as part of PHYSIO's
once-a-second routine. It is responsible for:
1. checking to see that the KLIPA is still running
TOPS-20 KLIPA Driver Functional Specification Page 26
2. verifying that the KLIPA still knows its PIA
3. locating newly on-line nodes
4. checking the paths of open virtual circuits
5. checking the REQUEST-ID timers
6. checking the start sequence timers
The poller is on when TOPS-20 is booted; SCA does not have to start it.
10.3 KLIPA Interrupt Service
All KLIPA interrupts are processed in the routine KLPINT which PHYSIO's
PHYINT routine dispatches to through KLPDSP. A KLIPA interrupt occurs for
one of the following reasons:
1. response queue packet available
2. free queue error
3. E-bus or M-bus error
4. CRAM parity error
5. data path error
6. command queue processing error
The normal case is response-queue-available, meaning some data has arrived
that needs the attention of the port driver. Some arriving packets are for
the port driver itself; thus, PHYKLP processes those and takes the
appropriate action. The other packets are for SCA, so PHYKLP simply calls
SCAMPI to say there is an incoming packet.
The error cases are descibed in the Error Processing section.
TOPS-20 KLIPA Driver Functional Specification Page 27
11.0 TESTING
PHYKLP will be tested by 3 major efforts: DVT (design validation testing),
the SCSTST program, and the PAGES program.
DVT is conducted by hardware engineering and includes a comprehensive fault
insertion effort aimed at validating the operation of the hardware,
microcode and software in the face of failures. This should provide
adequate assurance that PHYKLP's error recovery procedures are functioning
correctly.
SCSTST is a test system developed to test the SCS%, DIAG%, and SCAMPI.
However, as SCAMPI is the only user of PHYKLP, an adequate exerciser for
SCAMPI is also an adequate exerciser for PHYKLP. SCSTST is capable of
testing the major features of PHYKLP and using it in conjunction with fault
insertion procedures should provide a comprehensive test of PHYKLP. To
this end, there will be a standard set of SCSTST test scripts to serve as
regression tests for PHYKLP and the associated hardware and software.
PAGES is a program which does continuous I/O to a file. This will be used
as a major tool in verifying that disk I/O works.
LCG-CI-PORT-ARCHITECTURE.SPC
LCG CI Port Architecture Specification
Sean Keenan
Don Dossa
LSEG
MR1-2/E18
DTN 231-4463
August 1984
Revision 5.7
- 1 -
LCG CI Port Architecture Specification Page 2
1.0 SCOPE . . . . . . . . . . . . . . . . . . . . . . . 4
2.0 REFERENCES . . . . . . . . . . . . . . . . . . . . . 4
3.0 GOALS . . . . . . . . . . . . . . . . . . . . . . . 5
4.0 NOTATIONAL CONVENTIONS . . . . . . . . . . . . . . . 5
5.0 INTRODUCTION . . . . . . . . . . . . . . . . . . . . 6
6.0 ARCHITECTURE OVERVIEW . . . . . . . . . . . . . . . 7
6.1 Port Control Block (PCB) . . . . . . . . . . . . . 7
6.2 States And Programming . . . . . . . . . . . . . 15
6.2.1 Port States . . . . . . . . . . . . . . . . . 15
6.3 Queue Structures . . . . . . . . . . . . . . . . 15
6.4 Port Commands And Responses . . . . . . . . . . 17
6.4.1 Command Processing . . . . . . . . . . . . . . 17
6.4.2 Self Directed Commands . . . . . . . . . . . . 17
6.4.3 Responses . . . . . . . . . . . . . . . . . . 17
7.0 PACKET TRANSMISSION CHARACTERISTICS . . . . . . . 18
7.1 Basic Command Queue Format . . . . . . . . . . . 18
7.2 Datagram Service . . . . . . . . . . . . . . . . 21
7.3 Virtual Circuits . . . . . . . . . . . . . . . . 23
7.4 Path Selection . . . . . . . . . . . . . . . . . 24
8.0 MESSAGE TRANSMISSION . . . . . . . . . . . . . . . 28
9.0 DATA TRANSMISSION . . . . . . . . . . . . . . . . 30
9.1 Buffer Descriptors . . . . . . . . . . . . . . . 30
9.2 Reading Data . . . . . . . . . . . . . . . . . . 35
9.3 Writing Data . . . . . . . . . . . . . . . . . . 41
9.4 Data Formatting Modes . . . . . . . . . . . . . 44
9.4.1 Industry Compatible Mode . . . . . . . . . . . 44
9.4.2 Core Dump Mode . . . . . . . . . . . . . . . . 45
9.4.3 High Density Mode . . . . . . . . . . . . . . 45
10.0 STATUS FIELD . . . . . . . . . . . . . . . . . . . 46
11.0 PORT PERFORMANCE MONITORING . . . . . . . . . . . 50
12.0 MISCELLANEOUS MESSAGES . . . . . . . . . . . . . . 56
12.1 Configuration Information . . . . . . . . . . . 56
12.2 Maintenance Commands . . . . . . . . . . . . . . 58
12.2.1 Resetting Remote Systems . . . . . . . . . . . 59
12.2.2 Starting Remote Systems . . . . . . . . . . . 60
12.2.3 Reading Remote System Memories . . . . . . . . 62
12.2.4 Writing Remote System Memories . . . . . . . . 62
12.2.5 Maintenance Confirmation Packets . . . . . . . 64
12.3 Diagnostic Operation . . . . . . . . . . . . . . 65
12.3.1 Loopback . . . . . . . . . . . . . . . . . . . 65
12.4 Data Buffer Maintenance . . . . . . . . . . . . 67
12.5 Illegal Packets . . . . . . . . . . . . . . . . 68
13.0 PORT REGISTERS . . . . . . . . . . . . . . . . . . 69
13.1 Control And Status Register (CSR) . . . . . . . 69
13.2 Diagnostic Registers . . . . . . . . . . . . . . 70
14.0 PROGRAMMING NOTES . . . . . . . . . . . . . . . . 76
14.1 PORT/PORT DRIVER COMMUNICATION . . . . . . . . . 76
- 2 -
LCG CI Port Architecture Specification Page 3
14.2 LOADING AND DUMPING OF THE PORT . . . . . . . . 78
14.3 Reset . . . . . . . . . . . . . . . . . . . . . 80
14.4 Initialization . . . . . . . . . . . . . . . . . 80
15.0 ERROR CONDITIONS . . . . . . . . . . . . . . . . . 80
16.0 IMPLEMENTED FUNCTIONALITY . . . . . . . . . . . . 82
17.0 OPCODE SUMMARY . . . . . . . . . . . . . . . . . . 83
- 3 -
LCG CI Port Architecture Specification Page 4
1.0 SCOPE
This document describes the architecture of the Computer
Interconnect (CI) as it is implemented on LCG products. Included
in this document is the interface the port provides to the
operating system software.
2.0 REFERENCES
The following is a list of CI-related documents that the
reader is assumed to be familiar with:
1. Computer interconnect Specification. Authors: D. Thompson,
J. Buzinski, J. Hutchinson. This documents describes and
specifies the implementation independent functional
characteristics of the CI. Much of the material for the LCG-CI
specification comes from this document.
2. VAX-11 CI Port Architecture Specification. Authors: W.
Strecker, D. Thompson. This document describes the port/port
driver interface for the CI port interfaced to the VAX family
of processors.
3. CI20 Port Hardware Specification. Author: Elbert Bloom. This
spec contains a full description of the hardware in the KL10 CI
port option. Portions of that document have been reproduced
here.
4. PILA Hardware Specification. Author: Shu-Shia Chow. This
spec describes the register addresses and functions of the
registers on the Packet Buffer and Link modules that can be
accessed via the PLI.
5. KLCI ERROR SPEC. Author: Joe Holewa. This spec describes all
the possible errors detected and generated by the port. It
also defines algorithms for error retry and recovery.
- 4 -
LCG CI Port Architecture Specification Page 5
3.0 GOALS
The LCG ports must provide a mechanism for LCG computers to
interface to the CI bus. This requires that the LCG ports fully
comply with the CI wire architecture specification.
4.0 NOTATIONAL CONVENTIONS
All bit numbers and word offsets in this document are in
decimal. All field values within words are defined in octal. All
bytes are always 8 bits long in this document with the most
significant bit of any byte or field defined to be the left-most
bit. It is also a goal to use the same terminology and definitions
as the VAX CI port architecture spec to avoid confusion.
- 5 -
LCG CI Port Architecture Specification Page 6
5.0 INTRODUCTION
The LCG CI port architecture is the operating system interface
to a Computer Interconnect (CI). The CI is a multi-drop bus used
to closely link computer systems and intelligent mass storage
controllers. Characteristics of the CI include:
1. High bandwith of 70 Megabits/second,
2. Packet oriented transmissions,
3. Low error rates,
4. Immediate acknowledgement of successfully-received packets.
Up to 16 ports may be connected onto a single CI bus.
The following figure shows a number of computers and
intelligent mass storage controllers connected to a CI. A single
CI consists of 2 paths. A single system may be connected to more
than one CI.
CI path A
<-------+---------------+---------------+------------------------->
| | |
| | | CI path B
<---------------+---------------+---------------+----------------->
| | | | | |
| | | | | |
+-----------+ +-----------+ +-----------+
| Port 1 | | Port 2 | | Port 3 |
| | | | | |
+-----------+ +-----------+ +-----------+
| Computer | | Computer | |Controller |
| | | | | |
+-----------+ +-----------+ +-----------+
- 6 -
LCG CI Port Architecture Specification Page 7
6.0 ARCHITECTURE OVERVIEW
The port architecture implemented on LCG computers will comply
with the corporate CI architecture specification electrically at
the physical link level. It will also comply at the data link
level in terms of packet formats, acknowledgements, path selection,
sequentiality of data packets, error reporting and recovery
algorithms, datagram service, and Virtual Circuit service.
The mechanism for the host to communicate with the port is by
use of the queued protocol. The basic data structure of the queued
protocol relies on 7 different doubly-linked queues. The queues
are referred to as Command Queues 0-3, the Response Queue, and two
free queues, the Datagram Free Queue and the Message Free Queue.
When the host wishes to send the port a command, it places an entry
on the tail of one of the four command queues. The port
communicates with the host by linking entries onto the tail of the
response queue. The host processes the response queue entry by
delinking the queue entry from the head of the response queue.
Both the host and port use the free queues as a source of available
queue entries and as a repository of processed and discarded queue
entries. The data structure that ties the queue link words
together is the Port Control Block (PCB).
6.1 Port Control Block (PCB)
The mechanism where the host and the port share the queue
structures is controlled by the Port Control Block. The Port
Control Block is a data structure that exists in the physical
memory space of the host computer. Both the host and the port read
and write the data in the PCB. The PCB contains the link words for
the queues and other control information. There is exactly one
unique PCB for each CI port; the ports may not share PCB's. The
port driver has the responsibility of initializing all entries in
the PCB. All reserved entries must be zero and all of the queue
FLINK and BLINK words must be set to valid values. The format of
the PCB follows:
- 7 -
LCG CI Port Architecture Specification Page 8
PORT CONTROL BLOCK (PCB)
+-------------------------------------------------------+
0 | Buffer Descriptor Table Starting Address |
+-------------------------------------------------------+
1 | Message Free Queue Entry Length |
+-------------------------------------------------------+
2 | Datagram Free Queue Entry Length |
+-------------------------------------------------------+
3 | Reserved |
+-------------------------------------------------------+
4 | Command Queue 3 Interlock |
+-------------------------------------------------------+
5 | Command Queue 3 FLINK |
+-------------------------------------------------------+
6 | Command Queue 3 BLINK |
+-------------------------------------------------------+
7 | Command Queue 2 Interlock |
+-------------------------------------------------------+
8 | Command Queue 2 FLINK |
+-------------------------------------------------------+
9 | Command Queue 2 BLINK |
+-------------------------------------------------------+
10 | Command Queue 1 Interlock |
+-------------------------------------------------------+
11 | Command Queue 1 FLINK |
+-------------------------------------------------------+
12 | Command Queue 1 BLINK |
+-------------------------------------------------------+
13 | Command Queue 0 Interlock |
+-------------------------------------------------------+
14 | Command Queue 0 FLINK |
+-------------------------------------------------------+
15 | Command Queue 0 BLINK |
+-------------------------------------------------------+
16 | Response Queue Interlock |
+-------------------------------------------------------+
17 | Response Queue FLINK |
+-------------------------------------------------------+
18 | Response Queue BLINK |
+-------------------------------------------------------+
19 | Message Free Queue Interlock |
+-------------------------------------------------------+
20 | Message Free Queue FLINK |
+-------------------------------------------------------+
21 | Message Free Queue BLINK |
+-------------------------------------------------------+
- 8 -
LCG CI Port Architecture Specification Page 9
+-------------------------------------------------------+
22 | Datagram Free Queue Interlock |
+-------------------------------------------------------+
23 | Datagram Free Queue FLINK |
+-------------------------------------------------------+
24 | Datagram Free Queue BLINK |
+-------------------------------------------------------+
25 | Reserved |
+-------------------------------------------------------+
26 | Reserved |
+-------------------------------------------------------+
27 | Reserved |
+-------------------------------------------------------+
28 | Reserved |
+-------------------------------------------------------+
29 | Port Error Word 0 |
+-------------------------------------------------------+
30 | Port Error Word 1 |
+-------------------------------------------------------+
31 | Port Error Word 2 |
+-------------------------------------------------------+
32 | Port Error Word 3 |
+-------------------------------------------------------+
33 | Port Error Word 4 |
+-------------------------------------------------------+
34 | PCB Base Address |
+-------------------------------------------------------+
35 | PI Level |
+-------------------------------------------------------+
36 | Channel Logout Word 1 Address |
+-------------------------------------------------------+
37 | Channel Command Word |
+-------------------------------------------------------+
38 | Reserved to Port |
+-------------------------------------------------------+
The Buffer Descriptor Table (BDT) base address contains the
physical address of the first word of the buffer descriptors.
Buffer descriptors contain all of the information necessary to
specify to a port where in the host system's memory a data buffer
is located and what access methods are to be used. Buffer
descriptors are described in detail in a separate section of this
document.
- 9 -
LCG CI Port Architecture Specification Page 10
The CI20 requires special KL10 microcode support to allow the
CI20 to perform a memory increment operation using read-pause-write
memory references. This is needed to allow the port to interlock
the queues.
There is a separate interlock word for each queue. When a
queue is available, the corresponding interlock word has a value of
-1. When either the operating system or the port want to interlock
the queue, they must perform a non-interruptable
increment-store-test operation, such as an AOSE. If the
incremented location has a value of zero, then the queue has been
successfully interlocked and the process may now manipulate the
queues. If the incremented value is greater than zero, then the
queue is not available. The interlock word should not be set back
to zero. When the process is finished with the queues, the
interlock word must be set back to -1 (all ones). This marks the
queue as available. Both the port driver and the port microcode
are responsible for leaving the queues in a well defined state.
Error Words 0,1 (words 29,30) are written by the port when it
encounters fatal errors associated with Queue manipulation. This
error reporting strategy requires the port to write as much
information as possible directly into the host memory. This
approach requires the smallest subset of port hardware and
microcode to be working to report these errors.
The information in these words provides sufficient data for
the port driver to determine the type of error and where the error
occurred. When the error is detected, the port will write the
contents of the Error Words in the PCB, enter the Disabled State,
and generate a host interrupt.
The format of Error Word 0 is:
0 1 2 3 4 5 6 7 11 12 35
+-----+---+-----+-----+-----+-----+-------+---------------------+
| CMD | Q | RSP | DFQ | MFQ | D_L | MBZ | FLINK ADDRESS |
+-----+---+-----+-----+-----+-----+-------+---------------------+
BITS NAME DESCRIPTION
==== ==== ===========
0 CMD Error occurred while touching a command
queue entry. The queue with the error is
in QUEUE.
- 10 -
LCG CI Port Architecture Specification Page 11
1-2 QUEUE This is the command queue that had the
error. These bits are only valid if the
CMD bit is on.
00 = CMD QUEUE 0
01 = CMD QUEUE 1
10 = CMD QUEUE 2
11 = CMD QUEUE 3
3 RSP This bit is on if the error occurred
while the port was attempting to build a
response queue entry.
4 DFQ This bit is on if the error occurred
while the port was touching a command on
the datagram free queue.
5 MFQ This bit is on if the error occurred
while the port was touching a command on
the message free queue.
6 D_L This bit is on if the error occurred
while the port was linking a command to
a queue. This bit is off if the error
occured while the port was delinking a
command from a queue. This bit is valid
only with bits 0,4 and 5.
7-11 MBZ These bits will be zero.
12-35 FLINK ADR This is the address of the FLINK word of
the queue entry in question.
Error Word 1 (word 30) contains the API function word that the
port processor used to access memory when the memory error
occurred. This word is written here in the same format as it
appeared on the EBUS. The format of this word is:
0 2 3 5 6 7 12 13 35
+------+------+---+----+----------------------------+
| Addr | Func | Q | 0 | Physical Address |
| Code | | | | |
+------+------+---+----+----------------------------+
- 11 -
LCG CI Port Architecture Specification Page 12
Error Word 2 (word 31) contains the register data on Transmitter or
Receiver spurious attention. The format of Error Word 2 is:
+--------------------------------+------------------+
|00<-------------------------->27|28<------------>35|
| ZERO | DATA |
+--------------------------------+------------------+
Error Word 3 (word 32) contains the Channel Logout Word 1
written by port on any kind of channel error detected during or
immediatly after, a DMA transfer. The format of Error Word 3 is:
0 01 02 03 04 05-08 09 10 11 12 13 14 35
+-+---+----+---+---+-----+---+-+----+-----+----+----------------------+
|1|MEM|-ADR|-WC|NXM| 0 |LXE|0|LONG|SHORT|OVER| COMMAND LIST POINTER |
| |PE | PE |=0 | | | | | WC | WC |RUN |(ADR OF CURRENT CCW+1)|
+-+---+----+---+---+-----+---+-+----+-----+----+----------------------+
- 12 -
LCG CI Port Architecture Specification Page 13
BITS NAME DESCRIPTION
=== ==== ===========
01 MEM PE Memory Parity Error.
02 -ADR PE Not Address Parity Error.
03 -WC=0 Chan Word Count did not = 0 when chan did
a store to EPT.
04 NXM Chan ref non exist mem.
09 LXE Error detected after port term transfer,
Chan aborts next transfer.
11 LONG WC Port comp Xfer, But word count in CCW
not reached.
12 SHORT WC Chan Xferred data spec by CCW, But port
still has data.
13 OVER RUN If dev read, Port sent data but chan buff
were full.
If dev write, Port req data but chan buff
were empty.
Error Word 4 (word 33) contains Channel Logout Word 2 written by port
on any kind of channel error detected during or immediate after,
DMA transfer. The format of Error Word 4 is:
+--------+------------------+-----------------------------+
|00<-->02|03<------------>13|14<----------------------->35|
| OPCODE |CURRENT WORD COUNT| CURRENT DATA BUFFER ADDRESS|
+--------+------------------+-----------------------------+
Word 34 of the PCB is the address of the first word of the
PCB; the CI20 has no other way of finding the PCB.
Word 35 contains the PI Level that the CI20 is assigned.
Word 36 contains the address of the Channel Logout Word 1.
The Channel Logout Word is used in CBUS Error recovery processing.
- 13 -
LCG CI Port Architecture Specification Page 14
Word 37 is reserved for the Channel Command Word. The port
will write a CCW-style word here when it wishes to transfer data
over the KL10 CBUS. The port driver is responsible for writing a
Channel Jump Word in the appropriate EPT location corresponding to
the RH20 backplane slot where the CI20 is installed.
Word 38 is always reserved to the port microcode for its use;
the port driver should never write this location nor depend upon
its value.
When the CI20 is being initialized, the port driver must set
up the channel to transfer the contents of the PCB into the port.
This is done by setting up a CCW to transfer 3 words (words 34-36
of the PCB) from KL10 memory to the channel. The port will start
the channel and will read the contents of these locations. This
provides the port with the base of the PCB and the current PI
assignment.
It is important to realize that since the port will be using
the channel to transfer large blocks of data, the channel will be
writing logout information into the EPT. An error that the channel
discovers will be reported in the usual manner via the EPT.
- 14 -
LCG CI Port Architecture Specification Page 15
6.2 States And Programming
6.2.1 Port States -
There are 3 defined states in which the port can be. They
are:
1. Uninitialized - The port is not running. This is the power up
state. The port enters this state after a power-on or a master
reset. The port may exit this state only if valid microcode is
loaded into the port and the port clocks are started.
2. Disabled - The port is running, but it is not accepting CI
packets. The port will process entries from the command queues
with opcodes of 200 or greater. This state can only be entered
from the uninitialized state by starting the port microcode
running and setting the Disable bit (Bit 30) in the CSR. The
microcode will put the port into this state and signal it by
setting Disable Complete (Bit 12) in the CSR. The Disabled
state is entered from the Enabled state through a command from
the host to enter this state or when the port microcode detects
a non-recoverable internal port error.
3. Enabled - The port is fully functional; it is processing
commands and CI packets. This is the normal state for the
port. This state can only be entered from the Disabled state
via command from the host (Bit 31 in CSR).
6.3 Queue Structures
There are 7 queues used by the host and port. The four
command queues contain commands for the port that it has not
processed yet; the port will delink and execute queue entries from
the head of these queues. The priority ordering of the command
queues is from Command Queue 3 to Command Queue 0. The port will
examine Command Queue 3 and process all commands on this queue
before moving to a command queue of lower priority. When Command
Queue 3 is empty, the port will examine Command Queue 2 for any
valid commands and process the first command it finds. From this
point on, the port will process a command from a lower priority
queue only after it has determined that no command exists on a
higher priority queue. The port determines that a command has been
placed upon a previously empty command queue by examining a bit in
a control register that is set by the host when it has placed a
- 15 -
LCG CI Port Architecture Specification Page 16
command upon a previously empty command queue. This guarantees
that any command placed on a command queue of higher priority will
be processed before the next command on a lower priority queue.
Similarly, if a response queue entry is required, the port
will place responses onto the tail of the response queue when it
has finished processing either a locally generated or remotely
generated command. The host will process response queue entries by
delinking them from the head of the response queue, processing the
results, and placing the discarded entries on the tail of one of
the free queues. If a response does not have to be generated by
the port, it will place the discarded entry onto the tail of the
free queue. All datagram-class commands and responses use the
Datagram Free Queue as both a source and sink for queue entries.
All commands and responses that are executed under Virtual Circuit
control use the Message Free Queue. The description of Virtual
Circuit commands is covered in a later section.
The general format of a queue entry is:
+-----------------------+
| FLINK | 0
+-----------------------+
| BLINK | 1
+-----------------------+
| Reserved for Software | 2
+-----------------------+
| Command Data | 3
+-----------------------+
| . | 4
| . |
| . | Queue length
| . | -1
+-----------------------+
The length of a queue entry is specified by the host operating
system to the port via words in the Port Control Block. Because
the queue FLINK and BLINK words are interlocked, it is required
that all queue insertions and deletions follow the proper protocol
to avoid race conditions between the port driver and the port
microcode. The reserved for software word is never written by the
port.
- 16 -
LCG CI Port Architecture Specification Page 17
6.4 Port Commands And Responses
6.4.1 Command Processing -
When the port driver places a command upon one of the command
queues, the port microcode will delink the first command in a
particular command queue, process the command, and build a response
if either an error occurred or if the port driver specifically
requested a response packet by setting the Response bit (R bit) in
the FLAGS field.
The PORT field in a command refers to the destination port;
this field will be ignored if the command does not reference a
remote port.
6.4.2 Self Directed Commands -
Commands that have the destination port field equal to the
port's own number will cause the port to perform all of the normal
functions including Virtual Circuit checking, if required by the
packet type. The port will use internal loopback mode on self
directed commands. The port will receive its own message and
process it normally. On LOOPBACK commands, it is necessary for the
port driver to append the 32-bit CRC characters at the end of the
data transfer. In this case, the 4 bytes of CRC must directly
follow the last byte of text, but the 4 CRC characters are not
included in the text byte count specified in datagrams. It must be
recognized that while in internal loopback the port is unable to
receive packets from the CI wire.
6.4.3 Responses -
All locally-generated commands that require a response will
cause the generation of a response packet that will be linked onto
the tail of the response queue. Remotely generated packets will
also cause responses to be generated. This is true for all
datagrams and messages, configuration packets, maintenance packets,
unknown or illegal type packets, and data transmission confirmation
packets.
The port allows the port driver to determine which responses
are generated because of the execution of locally-generated
commands and which response queue entries are generated because of
- 17 -
LCG CI Port Architecture Specification Page 18
reception of packets over the CI wire. All commands which the port
driver builds and the port executes are called locally-generated
commands; the corresponding response queue entries have the
identical opcode and are referred to as locally-generated
responses. Response queue entries which are generated because the
port received a packet over the CI are referred to as
remotely-generated responses. The port will always add a decimal
32 to the value of the opcode field in remotely-generated commands
when building the response queue entry.
In locally-generated responses, the PORT field is not modified
by the port. In remotely-generated responses, the PORT field
contains the port number from which the packet was received.
7.0 PACKET TRANSMISSION CHARACTERISTICS
7.1 Basic Command Queue Format
The basic queue entry format is the same for all command queue
entries. The format of this queue entry follows:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
| | 4
| |
| |
| |
| COMMAND |
| SPECIFIC | Queue
| |Length
| | - 1
+-------------------------------------------------------+
- 18 -
LCG CI Port Architecture Specification Page 19
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:0-7 STATUS These bits must be zero when the port
driver places this command upon the
port's command queue. The port microcode
will report the status of this command
via this field when the port moves this
command to the corresponding response
queue.
3:8-15 FLAGS This field is a collection of bits that
allow command modifiers to be given to
the port. These bits are defined below
for all commands.
3:8 PACKET SIZE This bit defines the base size of the
data packets. If the bit is off, the
base size is 512 bytes; if the bit is
on, the base size is 576 bytes. This bit
definition is only valid for data
packets. Refer to the definition below
if the packet is a datagram or message
packet.
3:8 FORMAT If this bit is off, LCG ports assume the
datagram and message data is packed in
industry compatible mode. If the bit is
on, the data is in high density mode.
This bit definition is only valid for
datagram and message packets; refer to
the above definition for data packets.
3:9-11 M These bits determine the actual size of
the data packets to be sent. The packet
size used = (PACKET SIZE) * (M + 1).
These bits are valid only for data
packets.
3:13-14 PATH SELECT These are the Path Select bits.
PS = 0 => Automatic path selection
PS = 1 => Select path A
PS = 2 => Select path B
PS = 3 => Invalid
- 19 -
LCG CI Port Architecture Specification Page 20
3:15 RESPONSE If this bit is on, the port will always
(R bit) generate a response packet for this
command. If the bit is off, the port
will generate a response only if there
was some error encountered during the
processing of the command.
3:16-23 OPCODE This is the opcode field for the
command. Refer to the individual
commands for details.
3:24-31 PORT This is the source or destination port
number.
3:32-35 MBZ The port expects these bits to always be
zero.
- 20 -
LCG CI Port Architecture Specification Page 21
7.2 Datagram Service
The datagram service supplied by the port microcode provides a
best-effort delivery service of messages from one port to another
port over the CI. The text portion is transmitted over the CI from
left to right within each 36 bit word. The first 2 bytes of text
are stored in the same word as the text length, which is not
transmitted over the CI. These first 2 text bytes are also
transmitted from left to right. All datagrams received over the CI
are also written to host memory from left to right in the order
they are received.
The format of the send datagram command is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------->15|16<------------------------->35|
| TEXT | LENGTH OF TEXT DATA | 4
+-----------------------+-------------------------------+
| | 5
| |
| |
| TEXT |
| |
| | Queue
| | Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 1 octal (SNDDG)
41 octal (DGREC)
- 21 -
LCG CI Port Architecture Specification Page 22
4:00-15 TEXT The left-most byte in this word is the
first text byte to be sent/received over
the CI wire. The number of bytes is
determined from the length field and the
packing format is determined from the
FLAGS field.
4:16-35 LENGTH This 20-bit quantity is the number of
bytes in the message. This number must
be between 0 and the lesser of the
remaining number of bytes in the command
queue entry and 4089. Note that the port
hardware does not currently support
packets of greater than 1017. bytes.
This field is not sent over the CI.
5:0-?? TEXT The remaining text.
At the completion of the send datagram command, the port
microcode will determine if it should build a response queue entry
for this command.
The response is called a Datagram Sent Response (DGSNT). If
the Response bit (R bit) is set in the FLAGS words, the port will
always build a response entry. If the R bit is off for this
particular command, no response will be built unless an error
occurred during the processing or transmission of the packet. Any
error condition always causes the port to build a response packet.
The format of the response packet is similar to the send datagram
packet; the only difference is that the STATUS field is returned
with a non-zero value to indicate the type of failure. Refer to
the section on responses for a detailed description of all of the
allowable values for the STATUS field.
If no response is to be built, the SNDDG command will be
linked onto the tail of the datagram free queue.
A remotely-generated Datagram is a DGREC.
- 22 -
LCG CI Port Architecture Specification Page 23
7.3 Virtual Circuits
A Virtual Circuit is the mechanism that is used to provide a
higher quality delivery service for messages than the datagram
service. Delivery of packets under Virtual Circuit control is
guaranteed to be sequential, error-free, and non-duplicated. The
circuit is constructed of 3 state variables in the sending and
receiving nodes.
Virtual Circuits are maintained on a per-node basis. Each
circuit is independently controlled. Each pair of nodes has a
Virtual Circuit state with respect to each other. The state of the
circuit is determined by three bits internal to the port as
specified by the Set Circuit (SETCKT) Command. These bits are the
circuit state (CST), the sending sequence number (NS) and the
receiving sequence number (NR). The CST bit is set to a one for
each port when the Virtual Circuit is opened between them. NS and
NR are used to guarantee delivery, sequentiality and
non-duplication. The NS is the number of the next packet to be
sent (or the present packet being transmitted). The NR is the
number of the next packet to be received.
When a packet is to be sent under Virtual Circuit control, the
transmitting port first checks to make sure that the Virtual
Circuit is opened between the two ports. If it is not, the packet
will not be sent over the CI wire, but an appropriate error
response will be generated by the port. If the Virtual Circuit is
opened, the transmitting port loads the value of NS into the
defined bit in the FLAGS field. When successful transmission is
determined NS is complemented.
In the receiving node, the state of the Virtual Circuit is
determined by the CST bit, and if the Virtual Circuit is opened
between the two ports, then the value of NS carried in the packet
is compared with the state of the NR bit for the circuit. If they
are equal, the packet is accepted and NR is complemented. If the
values are not equal, the packet is discarded.
The Virtual Circuit will be closed if any transmission fails;
any condition that may result in the disruption of sequentiality
also causes the port to close the Virtual Circuit. In addition, a
port may close a virtual circuit at any time.
The port microcode also maintains the status of the CI paths.
This information is kept with each Virtual Circuit. The port
driver determines the path availability when it establishes a
Virtual Circuit.
- 23 -
LCG CI Port Architecture Specification Page 24
7.4 Path Selection
Because there are normally two paths available on the CI
ports, there is a mechanism to determine on which path a CI packet
should be sent. There are two modes - Select and Automatic.
Select mode is used when the port driver wants a particular path to
be used. Automatic mode is used when the port driver does not care
which path is used. The port microcode will implement a mechanism
in which the port will randomly select a path in the automatic
mode.
The Virtual Circuit state between any two ports is set via the
Set Virtual Circuit (SETCKT) command. The format of the command
is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+------+-----+----+----+------+-------+---------+-------+
| 00 | 01 | 02 | 03 | 04 |05<->06|07<----------->35|
| LDST | CST | NR | NS | LDPS | PS | MBZ | 6
+------+-----+----+----+------+-------+-----------------+
| RESERVED | 7
| FOR | Queue
| RESPONSE |Length
+-------------------------------------------------------+ -1
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 200 octal (SETCKT).
- 24 -
LCG CI Port Architecture Specification Page 25
4-5:0-31 XCT_ID The XCT_ID is a 64-bit, 2 word quantity
that is reserved for use by the port
driver. The port will never modify this
quantity but preserves it so that
response queue entries can be associated
with a particular command.
6:00 LDST If this bit is set, the CST, NR and NS
bits are set according to bits 1-3.
6:01 CST Virtual Circuit State
CST = 0 => Circuit closed.
CST = 1 => Circuit opened.
6:02 NR Receiving Sequence Number
6:03 NS Sending Sequence Number
6:04 LDPS If this bit is set, the Path Select bits
are set according to bits 5-6.
6:5-6 PS Path Select Bits
PS = 0 => Neither path allowed..
PS = 1 => Path A allowed.
PS = 2 => Path B allowed.
PS = 3 => Both paths allowed.
6:7-35 MBZ These bits must always be zero.
- 25 -
LCG CI Port Architecture Specification Page 26
If the R bit is set in the FLAGS field, then the port will
generate a response by moving the SETCKT command queue entry to the
response queue. The port microcode will also return the current
state of the specified Virtual Circuit in word 7 of the packet.
The actual format of the CKTSET command is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+----------+----------+-----------+----------+----------+
|00<---->07|08<---->15|16<----->23|24<---->31|32<---->35| 3
| STATUS | FLAGS | OPCODE | PORT | MBZ |
+----------+----------+-----------+----------+----------+
|00<-------------------------------------->31|32<---->35| 4
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 5
| XCT_ID | MBZ |
+------+-----+----+----+------+-------+------+----------+
| 00 | 01 | 02 | 03 | 04 |05<->06|07<----------->35| 6
| LDST | CST | NR | NS | LDPS | PS | MBZ |
+------+-----+----+----+------+-------+-----------------+
| 00 | 01 | 02 | 03 | 04 |05<->06|07<----------->35| 7
| ZERO | CST | NR | NS | ZERO | PS | MBZ |
+------+-----+----+----+------+-------+-----------------+
| | 8
| RESERVED |
| FOR | Queue
| SOFTWARE |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
7:00 ZERO This bit will be zero.
7:01 CST The current state of the Virtual Circuit
between this port and the port specified
in the PORT field is returned here.
7:02 NR This is the current state of the NR bit.
- 26 -
LCG CI Port Architecture Specification Page 27
7:03 NS This is the current state of the NS bit.
7:04 ZERO This bit will be zero.
7:5-6 PS This is the current state of the paths.
7:7-35 MBZ These bits will be zero.
- 27 -
LCG CI Port Architecture Specification Page 28
8.0 MESSAGE TRANSMISSION
The message mechanism provides highly reliable delivery of
single message packets under Virtual Circuit control. Messages are
of variable length, ranging from 0 to 4089 bytes in textual length.
The maximum size messages that may be sent from one port to another
is determined at a higher level protocol. As with datagrams, the
bytes will be transmitted over the CI from left to right within
each host memory word. The same left to right order will also
apply to all received messages.
To send a message, the port driver places a command upon one
of the command queues in the host memory. The format of the basic
message command (SNDMSG) is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------->15|16<------------------------->35|
| TEXT | LENGTH | 4
+-----------------------+-------------------------------+
| |
| |
| TEXT |
| |
| | Queue
| | Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 2 octal (SNDMSG)(MSGSNT)
42 octal (MSGREC)
- 28 -
LCG CI Port Architecture Specification Page 29
4:00-15 TEXT The left-most byte in this word is the
first text byte to be sent over the CI
wire. The number of bytes is determined
from the length field and the packing
format of either industry compatible or
high density is determined from the
FLAGS field.
4:16-35 LENGTH This 20-bit quantity is the number of
bytes in the message. This number must
be between 0 and the lesser of the
remaining number of bytes in the command
queue entry and 4089. Note that the port
hardware does not currently support
packets of greater than 1017. bytes.
This field is not sent over the CI.
5:0-?? TEXT The remaining text.
The format of the Message Sent (MSGSNT) response is the same
as the SNDMSG command except that the STATUS byte will contain the
result of the command execution. The description of the STATUS
byte contains all of the allowed values for this field.
A remotely-generated response is a MSGREC.
- 29 -
LCG CI Port Architecture Specification Page 30
9.0 DATA TRANSMISSION
Data packets provide a mechanism to allow the CI ports to move
large amounts of data with a minimal amount of port driver
overhead. Data transfers use the Virtual Circuit mechanism to
provide a high quality transmission medium. All data transfers
reference named buffers in hosts' memories. All commands contain
the buffer names of the sending and receiving buffers and offsets
which the ports use to determine where data is read from and
written to. The buffer names and offsets must be agreed upon
between the hosts' port drivers at a higher level of protocol. LCG
hosts must also set up the buffer descriptor chains prior to
transferring data. The Virtual Circuit must also be opened before
the data transfer command is executed by the port.
9.1 Buffer Descriptors
Named memory buffers in the physical address space of the host
computers are described by buffer descriptors. Each buffer
descriptor consists of a header, which uniquely defines a named
memory buffer. Associated with each buffer header descriptor is a
linked chain of buffer segment descriptors, which uniquely define
contiguous segments of the buffer. The buffer header descriptor
and all associated linked buffer segment descriptors constitute a
buffer descriptor.
The buffer descriptors are assembled and inserted into a
Buffer Descriptor Table (BDT) by the port driver. The Buffer
Descriptor Table also resides in the host computer's physical
address space. Since the Buffer Descriptor Table is accessed via
the buffer names, it is not necessary that the entire table be
physically contiguous; the only restriction on the placement of
Buffer Header Descriptors and Buffer Segment Descriptors is that
they must be allocated on 4 word boundaries.
A buffer name is a 32-bit quantity which is passed between
ports via the name fields of the commands and their associated
control packets or data packets. The name fields are supplied and
inserted into the applicable commands by the port drivers. The
port uses the name fields to access the buffer descriptors for
commands which are associated with data transfers between named
buffers.
- 30 -
LCG CI Port Architecture Specification Page 31
The format of a buffer name, as it appears in the host
computer's memory, follows:
00 15 16 31 32 35
+-----------------------+-----------------------+------+
| KEY | INDEX | ZERO |
+-----------------------+-----------------------+------+
The INDEX field is used by the port as a word offset from the
start of the buffer descriptor table to find the buffer header
descriptor for this buffer name. The port will add the contents of
the index field to the contents of word 0 of the PCB. The port
microcode will then compare the KEY field fetched from the BHD with
the KEY field supplied with this buffer name. This is a check on
the value of the INDEX field. If the keys do not match, then the
buffer name received from either a command queue or a packet from
the CI bus is in error and appropriate error processing is
initiated. If the keys do match, the port microcode will continue
processing, knowing that this is the correct BHD to associate with
the supplied buffer name.
Buffer Header Descriptors contain all of the information that
the port microcode needs to find the buffers that contain the data
to transfer over the CI. The BHD contains the start of the buffer
in the host computer's physical address space, its length, some
access control bits, and pointers to buffer segment descriptors
(BSD) which contain further information. Each buffer name has no
more that 1 BHD associated with it and the BHD points to the first
BSD which in turn points to the first physically contiguous segment
of the data buffer. Each succeeding BSD points to another
physically contiguous segment of data. There are as many BSDs as
necessary to completely describe the data buffer. The VALID bit in
the BHD provides a mechanism for the port driver to inform the port
that this BHD and its BSDs are valid and opened. The port will
always assume that each BHD and all BSDs start on 4-word
boundaries; this allows the port to access the data in the most
efficient manner possible.
- 31 -
LCG CI Port Architecture Specification Page 32
The actual format of a BHD is:
BUFFER HEADER DESCRIPTOR
+----------------+-----------------------+--+--+--+--+
|00<---------->15|16<----------------->31|32|33|34|35|
| KEY | MBZ |N |V |E |W | 0
+-------------+--+-----------------------+--+--+--+--+
|00<------->11|12<-------------------------------->35|
| MBZ | FIRST BUFFER SEGMENT DESCRIPTOR ADDR |--+ 1
+-------------+--------------------------------------+ |
|00<---------------------------------------------->35| |
| LENGTH | | 2
+----------------------------------------------------+ |
| RESERVED | | 3
+----------------------------------------------------+ |
V |
V |
V |
V |
BUFFER SEGMENT DESCRIPTOR # 1 |
+-------+-------+-------+----------------------------+ |
|00<->05|06<->07|08<->11|12<---------------------->35|<-+
| MBZ | MODE | MBZ | BUFFER SEGMENT BASE ADDR | 0
|-------+-------+--+----+----------------------------+
|00<------------>11|12<--------------------------->35|
| MBZ | NEXT BUFFER SEGMENT DESCRIPTOR |--+ 1
|------------------+---------------------------------+ |
|00<---------------------------------------------->35| |
| SEGMENT LENGTH | | 2
|----------------------------------------------------+ |
| RESERVED | | 3
+----------------------------------------------------+ |
V |
V |
- 32 -
LCG CI Port Architecture Specification Page 33
V |
V |
BUFFER SEGMENT DESCRIPTOR # n |
+-------+-------+-------+----------------------------+ |
|00<->05|06<->07|08<->11|12<---------------------->35|<-+
| MBZ | MODE | MBZ | BUFFER SEGMENT BASE ADDR | 0
+-------+-------+--+----+----------------------------+
|00<------------>11|12<--------------------------->35|
| MBZ | NEXT BUFFER SEGMENT DESCRIPTOR | 1
|------------------+---------------------------------+
|00<---------------------------------------------->35|
| SEGMENT LENGTH | 2
|----------------------------------------------------+
| RESERVED | 3
+----------------------------------------------------+
BUFFER HEADER DESCRIPTOR FIELD DEFINITIONS
WORD:BITS NAME DESCRIPTION
========= ==== ===========
0:0-15 KEY This is the KEY that the port microcode
compares with the KEY supplied in the
buffer name. These keys must match for
the port to continue processing the
request for this buffer name.
0:16-31 MBZ These bits must be zero.
0:32 NO CLEAR VALID The port driver software must set this
bit if it does not want the port micro-
code to clear the VALID bit.
0:33 VALID The port driver software must set this
bit to declare that this BHD is opened.
Once this bit is set, the port microcode
will assume that no further changes to
this BHD or its associated BSDs will be
made by the port driver software. This
allows the port microcode to internally
cache this data. The VALID bit will be
cleared by the port microcode when the
DMA transfer completes without error.
- 33 -
LCG CI Port Architecture Specification Page 34
0:34 ERROR This bit must be initially cleared by
the port driver software when it marks
the buffer as open by setting the VALID
bit. The port microcode will set this
bit to indicate to the port driver that
an access violation or buffer length
overflow occurred using this BHD or one
of its BSDs.
0:35 WRITABLE This bit is set by the port driver when
the BHD is opened if the port microcode
is allowed to write data into this
buffer.
1:0-11 MBZ These bits must be zero.
1:12-35 BSD ADDRESS This is the address of the first word of
the first buffer segment descriptor
associated with this BHD. This address
is a physical address within the host
computer's memory space.
2:0-35 LENGTH This is the number of 4-bit nibbles that
are to be either read or written by the
port in the buffer.
3:0-35 RESERVED This word is reserved for future use.
- 34 -
LCG CI Port Architecture Specification Page 35
BUFFER SEGMENT DESCRIPTOR FIELD DEFINITIONS
WORD:BITS NAME DESCRIPTION
========= ==== ===========
0:0-5 MBZ This field absolutely MUST be zero; if
this field is not zero, correct
operation of the port cannot be
guaranteed.
0:6-7 MODE This is the data packing mode for this
BSD.
0 => Industry Compatible
1 => Core Dump
2 => High Density
3 => Illegal
0:8-11 MBZ These bits must be zero.
0:12-35 BSD BASE ADDR This field contains the address of the
start of a physically contiguous block
of host memory. This address is the
first word of the data buffer.
1:12-35 NEXT BSD This is the physical address of the
first word of the next BSD. If there are
no more BSDs, this entire word must be
zero.
2:0-35 LENGTH This is the number of 4-bit nibbles that
are to be either read or written by the
port in this segment of the buffer.
3:0-35 RESERVED This word is reserved for future use.
9.2 Reading Data
To read data from a remote host, a host places a special
request packet on the port's command queue. This command packet,
called a request data packet, (REQDAT), contains the buffer names
and offsets of the sending and receiving buffers.
- 35 -
LCG CI Port Architecture Specification Page 36
The format of the Request Data (REQDAT) packet is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+----------+----------+-----------+----------+----------+
|00<---->07|08<---->15|16<----->23|24<---->31|32<---->35|
| STATUS | FLAGS | OPCODE | PORT | MBZ | 3
+----------+----------+-----------+----------+----------+
|00<-------------------------------------->31|32<---->35| 4
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 5
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 6
| XCT_LENGTH | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 7
| SND_NAME | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 8
| SND_OFFSET | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 9
| REC_NAME | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 10
| REC_OFFSET | MBZ |
+--------------------------------------------+----------+
| | 11
| RESERVED |
| FOR | Queue
| SOFTWARE | Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 10 octal for REQDAT0
11 octal for REQDAT1
12 octal for REQDAT2
- 36 -
LCG CI Port Architecture Specification Page 37
4-5:0-31 XCT_ID This 64 bit word is for the port
driver's use; the port will never modify
this word. The contents of this location
are sent on the CI wire to the other
port.
6:0-31 XCT_LENGTH This is the number of 8-bit bytes that
are to be transferred. The actual
transfer may be made up of several data
packets; this length, however, is the
total length of the transfer.
7:0-31 SND_NAME This is the buffer name of the
originating buffer; the data will be
read from this buffer.
8:0-31 SND_OFFSET This is the number of 8-bit bytes,
measured from the first byte of the
buffer pointed to by the BHD, that the
other port will skip over before sending
data bytes to this port. These bytes are
skipped according to the mode specified
by the MODE bits in the first BSD and
any succeeding BSD.
9:0-31 REC_NAME This is the buffer name that the port
will write the data into.
10:0-31 REC_OFFSET This is number of byte positions to skip
in the receiving buffer before the first
byte of data transmitted over the CI
wire is written.
This causes the port to send a Data Request (DATREQ) packet to the
other port. The format of the Data Request (DATREQ) is identical
to the Request Data (REQDAT). The data is returned in as many
packets as necessary by the sending port. After execution, the
REQDAT command is normally placed on the MFree Queue unless:
1. The command fails due to an error or the non-receipt of a CI
ackowledgment packet.
2. A CI path fails but the command succeeds.
3. The R bit is set in the command.
- 37 -
LCG CI Port Architecture Specification Page 38
Upon receipt of a DATREQ packet, the port will build a RETDAT
command from an entry taken from the MFree Queue and may place it
upon Command Queue 2, 1 or 0 depending upon the opcode of the
DATREQ command. The port will put the RETDAT on a command queue
only if there is no internal command queue cache available.
The format of the Return Data (RETDAT) packet is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+----------+----------+-----------+----------+----------+
|00<---->07|08<---->15|16<----->23|24<---->31|32<---->35|
| STATUS | FLAGS | OPCODE | PORT | MBZ | 3
+----------+----------+-----------+----------+----------+
|00<-------------------------------------->31|32<---->35| 4
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 5
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 6
| REC_NAME | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 7
| REC_OFFSET | MBZ |
+--------------------------------------------+----------+
| | 8
| |
| DATA | Packet
| | Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 21 octal for RETDAT
- 38 -
LCG CI Port Architecture Specification Page 39
4-5:0-31 XCT_ID This 64 bit word is for the port
driver's use; the port will never modify
this word. The contents of this location
are sent on the CI wire to the other
port.
9:0-31 REC_NAME This is the buffer name that the port
will write the data into.
10:0-31 REC_OFFSET This is number of byte positions to skip
in the receiving buffer before the first
byte of data transmitted over the CI
wire is written.
The last data packet of the transfer has the Last Packet (LP) flag
set to inform the receiving port that all of the data has been
sent. When the RETDAT command has been executed, it will be
returned to the MFree Queue unless:
1. The command fails due to an error.
2. A CI path fails but the command succeeds.
In these cases a Data Returned (DATRET) response is generated
and placed on the Response Queue by the sending port. The format
of a Data Returned (DATRET) response is identical to a Return Data
(RETDAT) except that no data appears in the command. The port
driver should never build a RETDAT command, but must be able to
tolerate finding a RETDAT command that the port placed upon its
command queue after receiving a DATREQ packet. The port receiving
the data will generate a Data Received (DATREC) response when all
of the data has been received (LP flag set) or an error occurs.
The format of the Data Received Response (DATREC) is:
- 39 -
LCG CI Port Architecture Specification Page 40
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+----------+----------+-----------+----------+----------+
|00<---->07|08<---->15|16<----->23|24<---->31|32<---->35|
| STATUS | FLAGS | OPCODE | PORT | MBZ | 3
+----------+----------+-----------+----------+----------+
|00<-------------------------------------->31|32<---->35| 4
| XCT_ID | MBZ |
+-------------------------------------------------------+
|00<-------------------------------------->31|32<---->35| 5
| XCT_ID | MBZ |
+-------------------------------------------------------+
| | 6
| |
| |
| UNDEFINED | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 61 octal (DATREC).
- 40 -
LCG CI Port Architecture Specification Page 41
9.3 Writing Data
To write data to a remote port, the port driver places a send
data (SNDDAT) command upon the port's command queue. The port will
then access the BHD and associated BSDs, transmitting as many data
packets as necessary to move the data from the sending buffer to
the receiving buffer's port, as designated in the port field of the
command. BHD's and BSD's are discussed earlier. This operation
takes place under Virtual Circuit control; any error causes the
circuit to be closed. After execution, the SNDDAT queue entry is
normally inserted on the MFree Queue but it will be placed on the
Response Queue as a Data Sent (DATSNT) response if one of the
following conditions occurs:
1. The command fails due to an error or non-receipt of a packet
acknowledgement. This closes the Virtual Circuit.
2. A CI path fails but the command succeeds on a retry.
3. The R bit of the command is set.
The format of a Send Data (SNDDAT) and a Data Sent (DATSNT)
are identical to a Request Data (REQDAT) command except that the
opcode is 20 octal.
As data is received, the data is stored by the receiving port.
Upon receipt of a Sent Data packet (SNTDAT) with the last packet
flag set, the receiving port will:
1. Remove an entry from the MFree Queue.
2. Generate a Return Confirm (RETCNF) command.
3. Insert the RETCNF command on Command Queue 3.
When executed a RETCNF sends a confirmation packet to the
initiating port. After execution the RETCNF command is normally
placed on the MFree Queue but it will be placed upon the Response
Queue as a Confirm Returned (CNFRET) Response if:
1. The command fails due to an error or non-receipt of a CI
acknowledgement packet.
- 41 -
LCG CI Port Architecture Specification Page 42
2. A CI path fails but the command succeeds.
If any data packet can not be properly processed by the
receiving port, it will:
1. Close the Virtual Circuit.
2. Remove an entry from the MFree Queue.
3. Build a Confirm Received (CNFREC) response and insert it on the
Response Queue.
The format of the response queue entry for a CNFRET packet is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+----------+----------+-----------+----------+----------+
|00<---->07|08<---->15|16<----->23|24<---->31|32<---->35|
| STATUS | FLAGS | OPCODE | PORT | MBZ | 3
+----------+----------+-----------+----------+----------+
|00<-------------------------------------->31|32<---->35|
| XCT_ID | MBZ | 4
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35|
| XCT_ID | MBZ | 5
+--------------------------------------------+----------+
| | 6
| RESERVED FOR SOFTWARE |
| | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 3 octal (CNFRET).
43 octal (CNFREC).
- 42 -
LCG CI Port Architecture Specification Page 43
4-5:0-31 XCT_ID This is the transaction ID that
accompanied all of the data packets.
This information is for the use of the
port driver.
- 43 -
LCG CI Port Architecture Specification Page 44
9.4 Data Formatting Modes
The KL10 CI port supports 3 data formatting modes. These
modes allow the operating system to specify how the data is packed
in the host's memory on memory read operations and how the port
should write the data into the host's memory on write operations.
These modes are specified in each Buffer Segment Descriptor for
data transfers via named buffers.The three modes are Industry
Compatible, High Density, and Core Dump. The first two of these
modes may also be specified for datagram and message transfers
through the various Send Message and Send Datagram commands. In
all of these modes, the most significant byte is left-justified so
that normal PDP10-style byte pointers may be used to access the
data. Note that it is not trivial to use standard PDP10-style byte
pointers in high density mode. The port will always start reading
or writing data with the most significant byte within the word.
The number of bits within each byte follows the PDP-11 standard.
The detailed descriptions of these packing modes follow.
9.4.1 Industry Compatible Mode -
The following figure illustrates the industry compatible mode
for mapping 8 bit CI bytes into 36 bit KL10 words.
INDUSTRY COMPATIBLE
KL10 WORD
0 7 8 15 16 23 24 31 32 35
+------------+------------+------------+------------+------+
| | | | | |
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | ZERO |
| | | | | |
+------------+------------+------------+------------+------+
7 0 7 0 7 0 7 0
PLI BYTE
- 44 -
LCG CI Port Architecture Specification Page 45
9.4.2 Core Dump Mode -
The following figure illustrates the core dump mode for
mapping 8 bit CI bytes into 36 bit KL10 words. It is important to
note that in core dump mode the high order 4 bits (PLI bits 7 to 4)
of the last byte of each 36 bit word are written to the CI as
zeroes and are read from the CI, but are discarded by the port.
Core Dump BHD'S and BSD's are expected to be in multiples of 10.
even though only 9. are moved for each 36 bit word.
CORE DUMP
KL10 WORD
0 7 8 15 16 23 24 31 32 35
+------------+------------+------------+------------+------+
| | | | | Byte |
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | |
| | | | | 4 |
+------------+------------+------------+------------+------+
7 0 7 0 7 0 7 0 3 0
PLI BYTE
9.4.3 High Density Mode -
The following figure illustrates the high density mode for
mapping 8 bit CI bytes into 36 bit KL10 words. In this mode, it is
important to realize that 9 bytes are packed into 2 36-bit words.
Byte 4 is split across a word boundary; the most significant 4
bits are stored in bits 32-35 of the first word of the pair and the
least significant 4 bits are stored in bits 0-3 of the second word
of the pair. Because of the 4 bits stored in the most significant
position of the second word, the remaining four bytes are stored
right-justified in the second word. Because of this byte-packing
mode, standard PDP10 byte pointers cannot be easily used to access
all of the bytes in the buffer.
- 45 -
LCG CI Port Architecture Specification Page 46
HIGH DENSITY FORMAT
KL10 WORD PAIR
FIRST WORD OF PAIR
0 7 8 15 16 23 24 31 32 35
+------------+------------+------------+------------+------+
| | | | | Byte |
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | |
| | | | | 4 |
+------------+------------+------------+------------+------+
7 0 7 0 7 0 7 0 7 4
PLI BYTE
SECOND WORD OF PAIR
0 3 4 11 12 19 20 27 28 35
+------+------------+------------+------------+------------+
| Byte | | | | |
| | Byte 5 | Byte 6 | Byte 7 | Byte 8 |
| 4 | | | | |
+------+------------+------------+------------+------------+
3 0 7 0 7 0 7 0 7 0
PLI BYTE
10.0 STATUS FIELD
The STATUS field is updated by the port when it builds a
response queue entry. The various valid values of the STATUS field
are defined below. Note that bit 0 of the STATUS field defines the
definition of the remaining bits.
0 1 2 3 4 5 6 7
+-----+------+-----+-----+------+-----+-----+------+
| | | PATH A | PATH B |
| 0 | CLOS | ACK | NAK | NRSP | ACK | NAK | NRSP |
+-----+------+-----+-----+------+-----+-----+------+
- 46 -
LCG CI Port Architecture Specification Page 47
BIT NAME DESCRIPTION
==== ==== ===========
1 CLOS A packet had a retry failure on a path
but was transmitted successfully on the
other path. The path that failed and
the type of failure is indicated in the
Path bits. The indicated path is also
marked as being bad in the VCDT (Virtual
Circuit Descriptor Table).
2 PATH A ACK The packet was ACKed on this path.
3 PATH A NAK The packet was NAKed at least once on
this path.
4 PATH A NRSP The packet received No ReSPonse at least
once on this path.
5 PATH B ACK The packet was ACKed on this path.
6 PATH B NAK The packet was NAKed at least once on
this path.
7 PATH B NRSP The packet received No ReSPonse at least
once on this path.
- 47 -
LCG CI Port Architecture Specification Page 48
0 1 2 3 4 5 6 7
+-----+-----+-----+----+----+----+----+-----+
| 1 | A | B | ERROR TYPE |
+-----+-----+-----+----+----+----+----+-----+
BITS NAME DESCRIPTION
==== ==== ===========
1 PTH_A The error is associated with path A.
2 PTH_B The error is associated with path B.
3-7 ERROR TYPE
NO PATH ERRORS
==============
(402) ERROR = 1 => Access Control violation.
(404) ERROR = 2 => Invalid Buffer Name.
(406) ERROR = 3 => Buffer Length violation.
(410) ERROR = 4 => Packet size violation.
(412) ERROR = 5 => Transmit Buffer Parity Error
(414) ERROR = 6 => Local unrecognized command.
(416) ERROR = 7 => Mover Parity Predictor Error.
(420) ERROR = 10 => Invalid Remote port.
(422) ERROR = 11 => Non-recoverable Long Word
Count error
(424) ERROR = 12 => No legal path.
(426) ERROR = 13 => Command not legal in disabled
state.
(430) ERROR = 14 => PLI data PE in SRC byte.
(432) ERROR = 15 => PLI data PE in OPC byte.
(434) ERROR = 16 => PLI data PE in body.
(436) ERROR = 17 => Port disabled during
processing.
(440) ERROR = 20 => Xmit Buffer Parity Error.
(442) ERROR = 21 => Channel Error.
(444) ERROR = 22 => Spurious Channel Error.
Path B Errors
=============
(502) ERROR = 41 => Remote unrecognized command
(504) ERROR = 42 => Virtual Cicuit closed
(506) ERROR = 43 => Retries Exhausted (NAK)
(510) ERROR = 44 => Retries Exhausted (NRSP)
(512) ERROR = 45 => Transmitter Timeout
- 48 -
LCG CI Port Architecture Specification Page 49
PATH A Errors
=============
(602) ERROR = 101 => Remote unrecognized command
(604) ERROR = 102 => Virtual Cicuit closed
(606) ERROR = 103 => Retries Exhausted (NAK)
(610) ERROR = 104 => Retries Exhausted (NRSP)
(612) ERROR = 105 => Transmitter Timeout
PATHS A,B Errors
================
(704) ERROR = 142 => Virtual Cicuit closed
(706) ERROR = 143 => Retries Exhausted (NAK)
(710) ERROR = 144 => Retries Exhausted (NRSP)
(712) ERROR = 145 => Transmitter Timeout
- 49 -
LCG CI Port Architecture Specification Page 50
11.0 PORT PERFORMANCE MONITORING
The port microcode implements several counters which are under
the control of the port driver. The command queue entry Set
Counters (SETCNT) allows the port driver to point and/or clear the
counters. It also allows the port driver to enable or disable the
event counting. There is a mask that is used to control the
loading and enabling of the various event counters. For each
counter, there are 2 bits in the mask; the first bit enables the
counting of the event, and the second bit controls the clearing of
the event counter. The port driver may instruct the port to count
events for a specified port or a cumulative count for all ports.
The format of the SETCNT command is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-------------------------------------------------------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-------------------------------------------------------+
|00<-------------------->19|20<-------------->31|32<->35|
| MASK | MBZ |THRESH | 6
+-------------------------------------------------------+
|00<----------------------------->23|24<----->31|32<->35|
| MBZ | PORT | MBZ | 7
+-------------------------------------------------------+
| RESERVED |
| FOR |
| SOFTWARE | Queue
| | Length
| | - 1
+-------------------------------------------------------+
- 50 -
LCG CI Port Architecture Specification Page 51
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 201 octal (SETCNT).
6:0-19 MASK This is the 18 bit mask used to control
the enabling and loading of the
counters.
6:0 PTH_A ACK If on, count ACKs received on Path A.
6:1 PTH_A ACKC If on, clear the counter.
6:2 PTH_A NAK If on, count NAKs received on Path A.
6:3 PTH_A NAKC If on, clear the counter.
6:4 PTH_A NRSP If on, count NO_RSPs received on Path A.
6:5 PTH_A NRSPC If on, clear the counter.
6:6 PTH_B ACK If on, count ACKs received on Path B.
6:7 PTH_B ACKC If on, clear the counter.
6:8 PTH_B NAK If on, count NAKs received on Path B.
6:9 PTH_B NAKC If on, clear the counter.
6:10 PTH_B NRSP If on, count NO_RSPs received on Path B.
6:11 PTH_B NRSPC If on, clear the counter.
6:12 DG DISCARDED The count of discarded datagrams because
of no DGFree Queue entries.
6:13 DG DISC CLR If on, clear the counter.
6:14 XMT CNT Count the packets transmitted to the
designated port.
6:15 XMT CLR If on, clear the counter.
6:16 RCV CNT Count the packets received from the
designated port.
6:17 RCV CLR If on, clear the counter.
- 51 -
LCG CI Port Architecture Specification Page 52
6:18 ERR_CNTR_CLR If on, clear all error counters
(see CNTRD response).
6:19 SET_THRESH If on, load Port Recoverable Error
Threshold value.
6:32-35 THRESH_VAL Value to load for Port Recoverable Error
Threshold.
7:24-31 PORT This is the designated port for which
the above counters will be tracked. If
the port value is set to 255, then the
counting will be done for all ports.
If the R (response) bit is set in the Set Counters command
(SETCNT) it will be placed on the Response Queue instead of the
DGFree Queue as a counters Set (CNTSET) command. The format for a
Counters Set (CNTSET) command is identical to the Set Counters
(SETCNT) command.
Every time the port enters the Enabled state, it will clear
all of the counters and set the PORT field to the "all ports"
value. The port driver reads these counters, with a Read Counters
(RDCNT) command. This command will return the information in the
various counters.
- 52 -
LCG CI Port Architecture Specification Page 53
The format of a Read Counters (RDCNT) command is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-------------------------------------------------------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-------------------------------------------------------+
| | 6
| RESERVED |
| FOR | Queue
| SOFTWARE |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 202 octal (RDCNT).
- 53 -
LCG CI Port Architecture Specification Page 54
The port will always generate a Counters Read (CNTRD) response
to the Read Counters (RDCNT) command.
The format of the Counters Read (CNTRD) response is :
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-----------------------------------------------+-------+
| MICROCODE VERSION | 6
+-------------------------------------------------------+
| PATH A ACK COUNT | 7
+-------------------------------------------------------+
| PATH A NAK COUNT | 8
+-------------------------------------------------------+
| PATH A NO RESPONSE COUNT | 9
+-------------------------------------------------------+
| PATH B ACK COUNT | 10
+-------------------------------------------------------+
| PATH B NAK COUNT | 11
+-------------------------------------------------------+
| PATH B NO RESPONSE COUNT | 12
+-------------------------------------------------------+
| DATAGRAMS DISCARDED | 13
+-------------------------------------------------------+
| PACKETS TRANSMITTED | 14
+-------------------------------------------------------+
| PACKETS RECEIVED | 15
+-------------------------------------------------------+
- 54 -
LCG CI Port Architecture Specification Page 55
+-------------------------------+---------------+-------+
|0<-------------------------->23|24<--------->31|32<->35|
| |DESIGNATED PORT| | 16
+--------------------------+----+---------------+-------+
| PACKETS RECEIVED WITH CRC ERRORS | 17
+-------------------------------------------------------+
|0<--------------------->17|18<---------------------->35|
| MOVER PAR PRE ERRORS | CBUS PAR ERRORS | 18
+--------------------------+----------------------------+
|0<--------------------->17|18<---------------------->35|
| REG PLIPE ERRORS | DATA PLIPE ERRORS | 19
+--------------------------+----------------------------+
|0<--------------------->17|18<---------------------->35|
| CHANNEL ERRORS | EBUS PAR ERRORS | 20
+--------------------------+----------------------------+
|0<--------------------->17|18<---------------------->35|
| SPURR CHANNEL ERRORS | CBUS AVAIL TIMEOUTS | 21
+--------------------------+----------------------------+
|0<--------------------->17|18<---------------------->35|
| SPURR RCV ATTENTIONS | SPURR XMIT ATTENTIONS | 22
+--------------------------+----------------------------+
|0<--------------------->17|18<---------------------->35|
| XMIT BUFF PAR ERRORS | TRANSMIT TIMEOUTS | 23
+--------------------------+----------------------------+
| | 24
| RESERVED |
| FOR |
| SOFTWARE | Queue
| | Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:12 ERROR This bit is set if the CNTRD was
generated as a result of a Planned
CRAM Parity Error (see KLCI Error spec).
3:16-23 OPCODE OPCODE = 202 octal (CNTRD).
Words 18-23 are called the Port Recoverable Error Counters.
The errors have a threshold initially set to 5 by the port during
initialization. The threshold can be changed by the port driver
with the SETCNT command. The threshold has a value range of 0-17.
- 55 -
LCG CI Port Architecture Specification Page 56
12.0 MISCELLANEOUS MESSAGES
12.1 Configuration Information
There is also a class of commands called ID commands. The
Request ID (REQID) command enables a host to determine the
configuration of the CI bus. This command generates an ID Request
(IDREQ) packet that is sent to the appropriate CI port. The
receiving port responds with a Send ID (SNDID) packet. A command
is taken from the DGFree Queue and placed on the Response Queue as
a ID Received (IDREC) command. All ID packets are datagram-class
packets. It is illegal for the port driver to place a Send ID
(SNDID) command on the command queue; SNDID packets are generated
by the port microcode only. When the port is in the Enabled state,
it will automatically respond to REQID packets without informing
the port driver.
The format of the REQID command and the IDREQ response is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-----------------------------------------------+-------+
| | 6
| RESERVED |
| FOR | Queue
| SOFTWARE |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 5 octal (REQID)(IDREQ).
- 56 -
LCG CI Port Architecture Specification Page 57
4-5:0-31 XCT_ID Transaction ID for software.
The format of the ID Received (IDREC) response is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+---+-------------------------------+-----------+-------+
| 0 |01<------------------------->25|26<----->31|32<->35|
| D | MUST BE ZERO | PORT TYPE | MBZ | 6
+---+-------------------------------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| CODE REV LEVEL | MBZ | 7
+----------------------------------+------------+-------+
|00<---------------------------->23|24<-------------->35|
| PORT FUNCTIONALITY | MBZ | 8
+--------------------+-------+-----+------------+-------+
|00<-------------->20|21<->22| 23 |24<------>31|32<->35|
| MBZ | STATE |MAINT| RESET PORT | MBZ | 9
+--------------------+-------+-----+------------+-------+
| | 10
| MUST BE ZERO |
| | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 53 octal (IDREC).
4-5:0-31 XCT_ID Transaction ID for software.
- 57 -
LCG CI Port Architecture Specification Page 58
6:0 DUAL The responding port has two paths.
6:1-25 MBZ Must be zero.
6:26-31 PORT TYPE This is the port type. (6 = KL10)
6:32-35 MBZ Must be zero.
7:0-31 CODE REV This is the microcode edit level.
8:0-23 FUNCTIONALITY This is a bit mask describing the
functionality of the originating port.
Refer to the corporate CI spec for the
bit definitions.
9:21-22 PORT STATE 0 => Unitialized
1 => Disabled
2 => Enabled
9:23 MAINTENANCE The port is in the maintenance state.
0 => not in maintenance mode
1 => in maintenance mode
9:24-31 RESET PORT This is the port number of the last port
which sent the port a reset packet. This
will always be our port number.
12.2 Maintenance Commands
The LCG port supports the CI maintenance packets for the
purpose of loading, starting, reading, and writing of other hosts'
memories. All maintenance packets on the CI are given
datagram-class service. Since the LCG CI port is not down-line
loadable and since a remote port may not start or stop LCG host
computers, all those maintenance packets are passed to the port
driver via the Response Queue when they are received over the CI
wire. Maintenance class commands are Reset (SNDRST), Start
(SNDSTRT), Request Maintenance Data (REQMDAT), Send Maintenance
Data (SNDMDAT), and Maintenance Confirm Return (MCNFRET). Because
the LCG CI port does not have a Maintenence state all Maintenence
class commands and responses are always valid.
- 58 -
LCG CI Port Architecture Specification Page 59
12.2.1 Resetting Remote Systems -
The Send Reset (SNDRST) command is used to reset a nodes'
interface and host to a known state (Unitialized/Maintenance) and
to halt the host computers' execution. See the Computer
Interconnect Spec for an explaination of port states.
The format of the Send Reset (SNDRST) command and Reset Sent
(RSTSNT) and Restart Received (RSTREC) responses is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-----------------------------------------------+-------+
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:8 FORCE If this bit is off, the port will
compare the source port number to the
port number stored in the last resetting
port number. If there is a match, the
reset occurs, otherwise the packet is
ignored. If the bit is on, the port
will perform an unconditional reset.
3:16-23 OPCODE OPCODE = 6 octal (SNDRST)(RSTSNT).
46 octal (RSTREC)
- 59 -
LCG CI Port Architecture Specification Page 60
12.2.2 Starting Remote Systems -
A Remote System Start (SNDSTRT) command is sent to ports that
have been stopped by a SNDRST command. The start function will be
performed only if the RSTPORT field of the receiveing port is equal
to the source port number. A node may be started only by the port
that stopped it.
The format of the Send Start (SNDSTRT) command and Start Sent
(STRTSNT) and Start Received (STRTREC) responses is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| START ADDRESS | MBZ | 6
+-----------------------------------------------+-------+
| | 7
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:8 USE DSA If this bit is set, the remote host
should use the default starting address.
3:16-23 OPCODE OPCODE = 7 octal (SNDSTRT)(STRTSNT)
47 octal (STRTREC)
- 60 -
LCG CI Port Architecture Specification Page 61
5-6:0-31 START ADDRESS This is the starting address if the
Default Starting Address bit is not on.
- 61 -
LCG CI Port Architecture Specification Page 62
12.2.3 Reading Remote System Memories -
Remote host system memory may be read via the Request
Maintenance Data (REQMDAT) packet. Data read in this manner is
returned via the Returned Maintenance Data (RETMDAT) packet. The
resulting data will appear in the specified buffer. The receiving
buffer must have a valid buffer name and the BHD and BSDs must be
properly set up as if it were a normal data transfer. Since the
data transfer takes place as a datagram, a Virtual Circuit is not
necessary. Whenever a maintenance data transfer is complete, the
port microcode will build a Maintenance Confirm response on the
response queue. The format of the REQMDAT command queue entry is
the same as a REQDAT command except that the opcode is 16.
12.2.4 Writing Remote System Memories -
The Send Maintenance Data (SNDMDAT) command packet is used to
write a remote host's memory. The length of the data to be sent is
no greater than 512 bytes or 576 bytes, according to the Packing
Size bit in the FLAGS field.
- 62 -
LCG CI Port Architecture Specification Page 63
The format of the SNDMDAT command queue entry is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+----------+----------+-----------+----------+----------+
|00<---->07|08<---->15|16<----->23|24<---->31|32<---->35|
| STATUS | FLAGS | OPCODE | PORT | MBZ | 3
+----------+----------+-----------+----------+----------+
|00<-------------------------------------->31|32<---->35| 4
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 5
| XCT_ID | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 6
| XCT_LENGTH | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 7
| SND_NAME | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 8
| SND_OFFSET | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 9
| REC_NAME | MBZ |
+--------------------------------------------+----------+
|00<-------------------------------------->31|32<---->35| 10
| REC_OFFSET | MBZ |
+--------------------------------------------+----------+
| | 11
| RESERVED |
| FOR | Queue
| SOFTWARE | Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 22 octal (SNTMDAT).
- 63 -
LCG CI Port Architecture Specification Page 64
12.2.5 Maintenance Confirmation Packets -
Whenever a maintenance data read or write is completely
successfully at the remote port, a Maintenance Confirm packet will
be sent back to the originating port. The port microcode will
place this confirmation packet on the tail of the response queue.
The format of the MCNF queue entry is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 4
+-----------------------------------------------+-------+
|00<----------------------------------------->31|32<->35|
| XCT_ID | MBZ | 5
+-----------------------------------------------+-------+
| | 6
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 44 octal (MCNF)
4-5:0-31 XCT_ID This is the transaction ID specified in
the original maintenance read or write
memory command.
- 64 -
LCG CI Port Architecture Specification Page 65
12.3 Diagnostic Operation
12.3.1 Loopback -
There is a special diagnostic command called Send Loopback
(SNDLB). This command is a Datagram class command. This command
along with the IDREQ command are used by ports to verify and
isolate faults in cluster path connections. When a Loopback
Received (LBREC) packet is received it is placed on the Response
Queue even if it is from a port other that itself.
The format of the Send Loopback (SNDLB) command and Loopback
Sent (LBSNT) and Loopback received (LBREC) responses is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+----------++-----------+-------+
|00<---------------------------->19|20<-------------->35|
| MBZ | LENGTH | 4
+----------------------------------+--------------------+
| | 5
| |
| RESERVED FOR SOFTWARE |
| |
| |
+-----------------------------------------------+-------| Queue
|00<----------------------------------------->31|32<->35|Length
| 32 BIT CRC | MBZ | - 1
+-----------------------------------------------+-------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 15 octal (SNDLB).
- 65 -
LCG CI Port Architecture Specification Page 66
4:20-35 LENGTH This is the number of bytes, not
including the 4 bytes of CRC, that are
in the text portion of the LOOPBACK
packet.
??:0-31 32-BIT CRC The software must place the correct
32-bit CRC polynomial as calculated via
the algorithm in the VAX11/780
Architecture Handbook, page 9-13.
- 66 -
LCG CI Port Architecture Specification Page 67
12.4 Data Buffer Maintenance
The operating system requires the ability of flushing any
information cached by the port concerning data buffers that require
closing. The Close Buffer (CLSBUF) command forces the port to
close the data buffer named by clearing the "V" bit in the BHD and
flush any commands that are using that buffer. The commands that
are using the buffer and any subsequent command or packet will be
placed on the response queue with the STATUS field indicating an
error.
The format of the Close Buffer (CLSBUF) command and the Buffer
Closed response (BUFCLS) is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | PORT | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------------------------------->31|32<->35|
| BUFFER NAME | MBZ | 4
+-------------------------------------------------------+
| |
| | Queue
| |length
| | -1
+-------------------------------------------------------+
WORDS:BITES NAME DESCRIPTION
=========== ==== ===========
3:16-23 OPCODE OPCODE = 205 octal (CLSBUF)(BUFCLS)
4 BUFNAM This is the name of the buffer to be
closed. The buffer name is the same format
as is used in named buffer transfers.
See section 9.1 for a description of buffer
names.
- 67 -
LCG CI Port Architecture Specification Page 68
12.5 Illegal Packets
Any packet which is processed while the port is in the enabled
state and is an illegal packet due to either the opcode or some
other field will be treated as a datagram and placed on the host's
response queue. If the packet was locally generated, then the port
microcode will place the response on the tail of the response queue
with the STATUS field indicating a local unrecognized command. If
the packet was received over the CI wire, the STATUS field will be
set to remote unrecognized command. The entire contents of the
packet, up to the specified queue entry length, will be placed on
the response queue. Since this packet is considered to be a
datagram, it is subject to being discarded if there is a lack of
buffer space in the port. Also note that the packet length field
will be filled in by the port just as if it were a regular datagram
packet. The opcode will be unchanged.
- 68 -
LCG CI Port Architecture Specification Page 69
13.0 PORT REGISTERS
13.1 Control And Status Register (CSR)
The Control and Status Register (CSR) is the mechanism used by
the LCG CI port and it's host to communicate with each other. The
CSR is described in a later section and in the CI20 Port
Architecture Spec.
+---+----------------+-----------+ +---+----------------+-----------+
|BIT| BIT DEFINITION | RD/WR | |BIT| BIT DEFINITION | RD/WR |
| | +-----+-----+ | | +-----+-----+
|NO.| |KL10 | PORT| |NO.| |KL10 | PORT|
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|00 |PORT PRESENT | R | H | |18 |CLEAR PORT | W | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|01 |DIAG RQST CSR | R | H | |19 |DIAG TEST EBUF | R/W | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|02 |DIAG CSR CHNG | R/H | H | |20 |DIAG GEN EBUS PE| R/W | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|03 | | * | * | |21 |DIAG SEL LAR | R/W | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|04 |RQST EXAM OR DEP| R/H | R/S | |22 |DIAG SINGLE CYC | R/W | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|05 |RQST INTERRUPT | R/H | R/S | |23 |SPARE | R/W | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|06 |CRAM PARITY ERR | R/C | H | |24 |EBUS PARITY ERR |H/R/C| R |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|07 |MBUS ERROR | R | H | |25 |FREE QUEUE ERR | R/C | R/S |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|08 | | * | * | |26 |DATA PATH ERR | R/C | R/S |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|09 | | * | * | |27 |CMD QUEUE AVAIL | R/S | R/C |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|10 | | * | * | |28 |RSP QUEUE AVAIL | R/C | R/S |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|11 |IDLE LOOP | R | R/W | |29 | | * | * |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|12 |DISABLE COMPLETE| R | R/W | |30 |DISABLE | R/S | R/C |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|13 |ENABLE COMPLETE| R | R/W | |31 |ENABLE | R/S | R/C |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|14 | | * | * | |32 |MPROC RUN | R/W | R/H |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
- 69 -
LCG CI Port Architecture Specification Page 70
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|15 |PORT ID CODE 00 | R | H | |33 |PIA 00 | R/W | R |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|16 |PORT ID CODE 01 | R | H | |34 |PIA 01 | R/W | R |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
|17 |PORT ID CODE 02 | R | H | |35 |PIA 02 | R/W | R |
+---+----------------+-----+-----+ +---+----------------+-----+-----+
"*" indicates that the bit is not defined
"R" indicates that the bit is readable
"W" indicates that the bit is writeable
"C" indicates that the bit may be cleared only as a single bit
"S" indicates that the bit may be set only
"H" indicates that the bit is hardware controlled
13.2 Diagnostic Registers
In order to support the diagnosis of the port, all of the
packet buffer board and link registers are accessable to a
diagnostic program. These registers are accessed via two local
commands, the Read Register (RDREG) and Write Register (WRREG)
commands.
The following are the packet buffer board and link board
register definitions for the CI20.
NUMBER PLI FUNCTION
====== ============
1 Read Receiver Status
2 Reset Xmit Status
3 Read Buffer
4 Enable Link
5 Read Switches
6 Select Buffer
7 Load Xmit Buffer
10 Read Xmit Status
11 Abort Transmitter
12 Set Mode
13 Transmit
14 Read Node Address
15 Disable Link
- 70 -
LCG CI Port Architecture Specification Page 71
16 Release Receiver Buffer
17 Sync
These registers are accessable in all port states except the
uninitialized state. For details as to the format of these
registers, refer to the PILA Hardware Specification by Shu-Shia
Chow Dated 10-Aug-82.
- 71 -
LCG CI Port Architecture Specification Page 72
The format of the RDREG command is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<------------->35|
| MBZ | MBZ | REGISTER | MUST BE ZERO | 4
+-----------+-----------+-----------+-------------------+
| | 5
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 203 octal (RDREG)
4:16-23 REGISTER This is the register to read.
- 72 -
LCG CI Port Architecture Specification Page 73
The format of the Register Read Response (REGRD) follows:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<------------->35|
| DATA | MBZ | REGISTER | MUST BE ZERO | 4
+-----------+-----------+-----------+-------------------+
| | 5
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 203 octal (REGRD).
4:0-7 DATA The data from the specified register is
returned in this field.
4:16-23 REGISTER This is the register that was read.
- 73 -
LCG CI Port Architecture Specification Page 74
To write a packet buffer board or link register, the Write
Register Command (WRREG) is used. The format of this command is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----------------->15|16<----->23|24<----->31|32<->35|
| MBZ | REGISTER | DATA | MBZ | 4
+-----------------------+-----------+-----------+-------+
| | 5
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 204 octal (WRREG)
4:16-23 REGISTER This is the register to write.
4:24-31 DATA The data from this field is written to
the register specified in the Register
field.
- 74 -
LCG CI Port Architecture Specification Page 75
The format of the Register Written Response (REGWR) is:
+-------------------------------------------------------+
| FLINK | 0
+-------------------------------------------------------+
| BLINK | 1
+-------------------------------------------------------+
| RESERVED FOR SOFTWARE | 2
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| STATUS | FLAGS | OPC | MBZ | MBZ | 3
+-----------+-----------+-----------+-----------+-------+
|00<----->07|08<----->15|16<----->23|24<----->31|32<->35|
| MBZ | MBZ | REGISTER | DATA | MBZ | 4
+-----------+-----------+-----------+-----------+-------+
| | 5
| |
| RESERVED FOR SOFTWARE | Queue
| |Length
| | - 1
+-------------------------------------------------------+
WORD:BITS NAME DESCRIPTION
========= ==== ===========
3:16-23 OPCODE OPCODE = 204 octal (REGWR)
4:16-23 REGISTER This is the register that was written.
4:24-31 DATA The data from this field was written to
the register specified in the Register
field.
- 75 -
LCG CI Port Architecture Specification Page 76
14.0 PROGRAMMING NOTES
14.1 PORT/PORT DRIVER COMMUNICATION
The port driver uses KL10 I/O instructions to communicate with
and control the port. Starting, stopping and communicating with
the port is done by the CONI (CONditions In) and CONO (CONditions
Out) instructions. Loading and dumping of the microcode and
manipulation of the port while it is not running is done by the
DATAI (DATA In) and DATAO (DATA Out) instructions.
The CSR (Control and Status Register) is the mechanism used by
the port and the port driver to indicate happenings or events. The
format of the CSR is:
0 1 2 3 4 5 6 7 8 10 12 14 18 20 22 24 26 28 30 32 35
+-+-+-+-+-+-+-+-+----+-+-+-+-+---+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---+
|P|D|C| |R|R|C|M| |I|D|E| |PRT|C|D|D|D|D| |E|F|D|C|R| |D|E|R|PIA|
|P|R|C| |E|I|P|B| |L|C|C| |ID |L|T|E|S|S| |P|Q|P|Q|Q| |I|N|U| |
| |C| | |D| |E|E| | | | | | |R|E|P|L|S| |E|E|E|A|A| |S|A|N| |
+-+-+-+-+-+-+-+-+----+-+-+-+-+---+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---+
BITS NAME DESCRIPTION
==== ==== ===========
0 PORT_PRESENT This bit is a hardware wire which
indicates the presence of a CI20.
1 DIAG_RQST_CSR Diagnostic purposes only.
2 DIAG_CSR_CHNG Diagnostic purposes only.
4 RQST_EXAM_DEP Diagnostic purposes only.
5 RQST_INT Diagnostic purposes only.
6 CRAM_PARITY_ERROR Set by the port hardware when a word
with bad parity is read from the CRAM.
7 MBUS_ERROR Set by the port hardware when more
than 1 driver connected to the MBUS
is detected as being active.
11 IDLE_LOOP Indicates when the microcode is in
the IDLE LOOP.
- 76 -
LCG CI Port Architecture Specification Page 77
12 DISABLE_COMPLETE Indicates the microcode has placed
the port in the Disabled state.
13 ENABLE_COMPLETE Indicates the microcode has placed
the port in the Enabled state.
15-17 PORT_ID A code for the type of port present.
Only 1 code is implemented at this
time (7).
18 CLEAR_PORT When set by the port driver the port
is placed in a RESET state.
19 DIAG_TEST_EBUF Diagnostic purposes only.
20 DIAG_GEN_EBUS_PE Diagnostic purposes only.
21 DIAG_SELECT_LAR Diagnostic purposes. If this bit
is set by the port drivr when the
port is not running a DATAI will
get the contents of the Last Address
Register. The LAR contains the
address of the last microinstruction
executed.
22 DIAG_SINGLE_CYCLE Diagnostic purposes only.
24 EBUS_PARITY_ERROR Set by the hardware when an EBUS
Parity Error is detected by the
port during an examine operation.
25 FREE_QUEUE_ERROR Set by the port microcode when it
detects that the Datagrm or Message
Free Queue in the PCB is empty.
26 DATA_PATH_ERROR Set by the port microcode when it
detects the MVR/FMTR Error Threshold
has been reached.
27 CMD_QUEUE_AVAIL Set by the port driver to indicate
that a command has been placed on a
previously empty Command Queue in
the PCB.
- 77 -
LCG CI Port Architecture Specification Page 78
28 RSP_QUEUE_AVAIL Set by the port microcode when a
command has been placed on the
Response Queue in the PCB and it
was empty.
30 DISABLE Set by the port driver to put the
port into the Disabled state.
31 ENABLE Set by the port driver to put the
port into the Enabled state.
32 MPROC_RUN Set by the port driver to start
the port microcode running.
33-35 PIA These bits are set by the port
driver to indicate what priority
level an interrupt by the port
will be given.
14.2 LOADING AND DUMPING OF THE PORT
The port microcode generates an interrupt when it sets certain
bits in the CSR, A CONI instruction is used by the port driver to
read the contents of the CSR. The CONO instruction is used by the
port driver to write bits 18-35 of the CSR. When the port driver
writes the CSR, bit 2 of the CSR gets set by the port hardware and
is sensed by the port microcode. When the port microcode reads the
CSR bit 2 in the CSR is cleared. Both DATAI and DATAO instructions
have multiple functions with this port. A DATAI with bit 21 of the
CSR set and bit 19 of the CSR not set reads the LAR (Last Address
Register) in the port. The LAR contains the address of the last
micro instruction fetched by the port. The format of the LAR as it
is returned by the DATAI is:
0 1 13 14 15 35
+-+----------------+-+----------------------------------+
|1| LAR |0| -1 |
+-+----------------+-+----------------------------------+
If bit 19 of the CSR is set a DATAI reads the EBUF. The EBUF
is the register in the port that is used to communicate over the
EBUS. The format of the EBUF is:
- 78 -
LCG CI Port Architecture Specification Page 79
0 35
+-------------------------------------------------------+
| EBUF |
+-------------------------------------------------------+
If both bits 19 and 21 of the CSR are not set a DATAI reads
either the right or left half of a microword (see DATAO). The
format of the microword half returned by the DATAI is:
0 5 6 35
+------+------------------------------------------------+
| -1 | BITS 0-29 OR 30-59 OF UWORD |
+------+------------------------------------------------+
A DATAO with bit 19 of the CSR set will write data to the
EBUF. The format of the written data is:
0 35
+-------------------------------------------------------+
| EBUF DATA TO BE WRITTEN |
+-------------------------------------------------------+
A DATAO with bit 19 of the CSR not set will write data to the
right or left half of the microword addressed by the RAR (Ram
Address Register). The format of the data to be written is:
0 5 6 35
+------+------------------------------------------------+
| N/A | BITS 0-29 OR 30-59 OF UWORD |
+------+------------------------------------------------+
- 79 -
LCG CI Port Architecture Specification Page 80
A DATAO with bit 0 of the CSR set and bit 19 of the CSR not
set will be write the RAR. The RAR is used to address the CRAM for
purpose of writing and reading the CRAM. The format of the data to
be written is:
0 1 13 14 15 35
+---+----------------+-+----------------------------------+
|N/A| RAR |L| N/A |
+---+----------------+-+----------------------------------+
If bit 14 is set the operation is performed on the left half
of the microword. If bit 14 is not set the operation is performed
on the right half.
14.3 Reset
When a port reset is issued to a running port, the hardware
will be reset and the port microcode PC will be set to zero so that
the power-up, self-check initialization code can be executed. This
will guarantee that the port will enter a well-defined state after
the reset. It is important to realize that all of the port
registers will be set to the power-up state.
14.4 Initialization
When the port is powered-up, there is no valid microcode in
the CRAM; valid microcode must be loaded and started. During the
initialization, the port microcode will perform a self-check test
and generate a planned CRAM Parity Error if it detects any error
(see KLCI ERROR SPEC). The microcode will also clear all of the
registers.
15.0 ERROR CONDITIONS
The port microcode is capable of retrying many operations that
fail; this allows a large part of the error recovery to be built
into the port microcode and removed from the port driver (see KLCI
ERROR SPEC for definition of errors).
- 80 -
LCG CI Port Architecture Specification Page 81
While the port is waiting for port driver intervention, it
will not be emptying packets out of the receive buffer so packets
may be NAKed and Virtual Circuits closed by other ports during this
time. The class of non-recoverable errors that cause the port to
shut down in this manner are:
1. Inability to get the queue interlock,
2. Non-recoverable internal port error (other than CRAM parity
error),
3. Non-recoverable EBUS/CBUS error.
- 81 -
LCG CI Port Architecture Specification Page 82
16.0 IMPLEMENTED FUNCTIONALITY
The LCG CI ports will support the following packet formats:
1. DG - send/receive
2. MSG - send/receive
3. SNDDAT - send/receive
4. REQDAT - send/receive
5. RETDAT - send/receive
6. REQID/ID - send/receive
7. CNF - send/receive
8. LB - send/receive
9. REQMDAT - send
10. RETMDAT - receive
11. SNDMDAT - send
12. MCNF - send
13. RST - send
14. STRT - send
If the port is in the enabled state, the port will place any
maintenance packet it receives over the CI, except RETMDAT, on the
port driver's response queue.
- 82 -
LCG CI Port Architecture Specification Page 83
17.0 OPCODE SUMMARY
The following is a table of command and local-response opcode
assignments.
COMMAND/RESPONSE CI PACKET DEC OCTAL BINARY
SNDDG/DGSNT DG 1 1 0000 0001
SNDMSG/MSGSNT MSG 2 2 0000 0010
<none>/CNFRET CNF 3 3 0000 0011
REQID/IDREQ IDREQ 5 5 0000 0101
SNDRST/RSTSNT RST 6 6 0000 0110
SNDSTRT/STRTSNT STRT 7 7 0000 0111
REQDAT0/DATREQ0 DATREQ0 8 10 0000 1000
REQDAT1/DATREQ1 DATREQ1 9 11 0000 1001
REQDAT2/DATREQ2 DATREQ2 10 12 0000 1010
SNDLB/LBSNT LB 13 15 0000 1101
REQMDAT/MDATREQ MDATREQ 14 16 0000 1110
SNDDAT/DATSNT SNTDAT 16 20 0001 0000
<none>/DATRET RETDAT 17 21 0001 0001
SNDMDAT/MDATSNT SNTMDAT 18 22 0001 0010
SETCKT/CKTSET <none> 128 200 1000 0000
SETCNT/CNTSET <none> 129 201 1000 0001
RDCNT/CNTRD <none> 130 202 1000 0010
RDREG/REGRD <none> 131 203 1000 0011
WRTREG/REGWRT <none> 132 204 1000 0100
CLSBUF/BUFCLS <none> 133 205 1000 0101
- 83 -
LCG CI Port Architecture Specification Page 84
The following table contains the opcode assignments for
remotely-generated responses.
RESPONSE CI PACKET DEC OCTAL BINARY
DGREC DG 33 41 0010 0001
MSGREC MSG 34 42 0010 0010
CNFREC CNF 35 43 0010 0011
MCNFREC MCNF 36 44 0010 1001
IDREC ID 43 53 0010 1011
LBREC LB 45 55 0010 1101
DATREC RETDAT 49 61 0011 0001
MDATREC RETMDAT 51 63 0011 0011
- 84 -
LCG CI Port Architecture Specification Page Index-1
INDEX
BHD, 30-31, 41, 44, 62 Industry Compatible, 44
BSD, 30-31, 41, 62 Datagram, 17, 21
Buffer Descriptor, 30 Diagnostic Operation, 65
Buffer Descriptor Table
BDT, 9, 30 EPT, 14
Buffer Descriptors, 9 Error Words, 10
Buffer Header Descriptor,
30-31, 41, 44, 62 FLAGS, 19, 23
VALID, 31
Buffer Name, 30, 62 Illegal Packets, 68
Buffer Segment Descriptor, INDEX, 31
30-31, 41, 62 IPA20-L, 10
CCW, 14 KEY, 31
Channel Command Word, 14
CI, 6 Last Packet, 39
Command Loopback, 65
CLSBUF, 67
RDCNT, 52 Maintenance, 17, 58
RDREG, 70 Message, 17, 28
REQDAT, 35
REQID, 56 NR, 23
REQMDAT, 62 NS, 23
SETCKT, 23-24
SETCNT, 50 Opcode, 18
SNDDAT, 41 local, 18
SNDDG, 21 remote, 18
SNDLB, 65
SNDMDAT, 62 Path Selection, 24
SNDMSG, 28 PCB, 13
SNDRST, 59 Port Control Block, 7, 16
SNDSTRT, 60 Port registers
WRREG, 70, 74 CSR, 69
Configuration, 17, 56 Port State, 15, 58, 68
IDREC, 56-57 disabled, 15
REQID, 56 enabled, 15
Confirmation, 41 uninitialized, 15
CST, 23 Programming
CONI, 76
Data, 17, 30 CONO, 76
512, 62 CSR, 76
576, 62 DATAI, 76
Data Buffer Maintenance, 67 DATAO, 76
- 85 -
LCG CI Port Architecture Specification Page Index-2
Data Formats, 44 error conditions, 80
Core Dump, 44-45 initialization, 80
High Density, 44-45 reset, 80
- 86 -
LCG CI Port Architecture Specification Page Index-3
Queues, 10
BLINK, 16
Command, 7, 15, 17
FLINK, 16
Free, 7, 16
Response, 7, 16-17
Self-Directed Commands, 17
Remotely-generated response
CNFREC, 42
DATREC, 39
DGREC, 22
IDREC, 57
LBREC, 65
MSGREC, 29
RSTREC, 59
STRTREC, 60
Response
BUFCLS, 67
CKTSET, 26
CNFRET, 41
CNTRD, 54
CNTSET, 52
DATRET, 39
DATSNT, 41
DGSNT, 22
IDREQ, 56
LBSNT, 65
MCNF, 64
MSGSNT, 29
REGRD, 73
REGWR, 75
RETMDAT, 62
RSTSNT, 59
STRTSNT, 60
Response Bit, 17, 22
STATUS, 46, 68
Virtual Circuit, 16-17, 23
- 87 -