2 active pointers, 3 saved pointers – Seagate Ultra 320 User Manual

Page 124

Advertising
background image

110

Parallel SCSI Interface Product Manual, Rev. A

• Active pointers (one set per initiator only).
• Saved pointers (one or more sets per initiator, up to fifteen sets total).

The use of these two types of pointers is described in the following paragraphs.

5.5.2

Active pointers

Active pointers represent the current state of the interface between the initiator and the target that the initiator
is currently connected to and servicing. The pointers for the current task remain in the initiator Active Pointer
registers from the time they are put there after the completion of all activities associated with the previous task,
until the logic of the Initiator dictates a new task shall be executed. Normally, successful receipt by the initiator
of good status associated with the current task triggers the initiator to insert a new set of the three Active point-
ers for the next task. The initiator does not wait for the TASK COMPLETE message before deciding whether to
retry the Active task or transfer in new task pointers. If the current task was never satisfactorily completed, the
initiator logic may dictate that some special response action be taken, such as restoring the values in the
Active pointer registers to their beginning values so the current task can be restarted (see note following). The
initiator may choose to send a command such as a REQUEST SENSE command to the target, or the initiator
could ignore the unsatisfactorily completed task and start the next originally scheduled task.

Note.

For example, if the drive detects a parity error in the data out from the current command, it sends the
RESTORE POINTERS message to the initiator. In this case, the Restore Pointers request causes the
initiator to restore as the active pointers the values existing at the beginning of the current task so the
current task can be resent. The “beginning” pointer values point to the first byte of the current task
(very likely a command descriptor block), the first byte of the area set aside for status to be returned
and the first byte of the area set aside for data associated with the current task. (See Section 4.3.14 for
a detailed description of operations resulting from the RESTORE POINTERS message).

5.5.3

Saved pointers

Saved pointers point to initiator storage locations where command, status and data information are stored for a
task that was saved at some point in the past. There is one set of saved pointers for the current task for each
target on the interface bus that is currently active (whether or not it is currently connected to the initiator). The
saved command pointer always points to the first byte of the Command Descriptor Block (see Section 7.2) for
the “current” task for each target, the saved status pointer always points to the first byte of the area used for the
status associated with the command, and the saved data pointer points to some location (not necessarily the
beginning) in the area used for data associated with the command. When a SCSI target port disconnects the
initiator saves the current pointers. Before a SCSI target port disconnects it may send a SAVE DATA POINT-
ERS message to the initiator, which copies the data pointer that is for the current command for that target into
the location set aside for the target’s saved pointers. When a SCSI target port reconnects, the initiator performs
a restore pointers operation that copies the saved pointers for the reconnected target into the initiator current
pointer registers so that the current command for that target may continue its operation from where it left off
before disconnecting. If the target had sent a Save Data Pointer message previously, the current data pointer
points to the place in the data store area where operations left off. The data pointer otherwise points to the
beginning of the data area, unless the data pointers were modified by a MODIFY DATA POINTERS message
from the target prior to disconnecting. The MODIFY DATA POINTERS message adds a value to the data
pointer that allows data to be taken, upon reconnection, from a location before or after the last byte transferred
location.

Since the data pointer value may be modified by the target before the task ends, it should not be used to test
for actual transfer length, because the value may no longer be valid for that purpose.

Advertising