             DaynaPort SCSI/Link: SCSI Command Set
                 Revision 1.20 (16 July 2005)


Copyright 2002-2005 by Roger Burrows.  All Rights Reserved.  Permission
is granted to copy this document providing that no changes are made to
the contents.


LIMITATION OF LIABILITY AND DISCLAIMER OF WARRANTY
--------------------------------------------------
The information cantained in this document is provided "as-is", without
warranty of any kind, expressed or implied, including without limitation
any warranty concerning the accuracy, adequacy, or completeness of such
information or material.  The Author shall not be responsible for any
claims attributable to errors, omissions, or other inaccuracies in the
information or material contained in this document, and in no event
shall the Author be liable for direct, indirect, special, incidental,
or consequential damages arising out of the use of such information or
material.


SCOPE
-----
This document applies to the following hardware devices:
        DaynaPort SCSI/Link-T (Model DP0801)
        DaynaPort SCSI/Link-3 (Model DP0802)
and to the following firmware revisions:
        1.4a
        2.0f
It probably also applies to other firmware revisions; it may also apply
to other Dayna SCSI/Link devices.  Any feedback on this is welcomed.
Please supply any additions or corrections to Roger Burrows
(roger@anodynesoftware.com).


REVISION HISTORY
----------------
Version 1.00 (8/August/2002)
        Original version
Version 1.10 (22/April/2005)
        Added description of 'Set Interface Mode/Set MAC Address' command
Version 1.20 (16/July/2005)
        Corrected description of 'Set Interface Mode/Set MAC Address' command


NOTATION
--------
All numbers are expressed in hexadecimal, unless otherwise noted.


COMMAND SET SUMMARY
-------------------
The following is a partial list of implemented SCSI commands:

        03    Request Sense
        08    Read
        09    Retrieve Statistics
        0a    Write
        0c    Set Interface Mode / Set MAC Address
        0e    Enable/disable Interface
        12    Inquiry

A number of other SCSI commands are implemented, but their usage is
not yet fully known.


Enable/disable Interface (0e)
-----------------------------
Command:  0e 00 00 00 00 XX (XX = 80 or 00)
Function: Enable (80) / disable (00) Ethernet interface
Type:     No data transferred
Notes:    After issuing an Enable, the initiator should avoid sending
          any subsequent commands to the device for approximately 0.5
          seconds


Inquiry (12)
------------
Command:  12 00 00 00 LL 00 (LL is data length)
Function: Perform a standard SCSI Inquiry command: reference the
          SCSI spec for further information
Type:     Input; reference the SCSI spec for the data returned
Notes:    The length is user-selectable to a maximum of 25 (37 decimal)


Read (08)
---------
Command:  08 00 00 LL LL XX (LLLL is data length, XX = c0 or 80)
Function: Read a packet at a time from the device (standard SCSI Read)
Type:     Input; the following data is returned:
          LL LL NN NN NN NN XX XX XX ... CC CC CC CC
where:
          LLLL      is normally the length of the packet (a 2-byte
                    big-endian hex value), including 4 trailing bytes
                    of CRC, but excluding itself and the flag field.
                    See below for special values
          NNNNNNNN  is a 4-byte flag field with the following meanings:
                    FFFFFFFF  a packet has been dropped (?); in this case
                              the length field appears to be always 4000
                    00000010  there are more packets currently available
                              in SCSI/Link memory
                    00000000  this is the last packet
          XX XX ... is the actual packet
          CCCCCCCC  is the CRC

Notes:
 . When all packets have been retrieved successfully, a length field
   of 0000 is returned; however, if a packet has been dropped, the
   SCSI/Link will instead return a non-zero length field with a flag
   of FFFFFFFF when there are no more packets available.  This behaviour
   seems to continue until a disable/enable sequence has been issued.
 . The SCSI/Link apparently has about 6KB buffer space for packets.


Request Sense (03)
------------------
Command:  03 00 00 00 00 00
Function: Perform a standard SCSI Request Sense command
Type:     Input; reference the SCSI spec for the data returned
Notes:
 . This command always transfers exactly 9 bytes of data (note that cdb
   byte 4 is always zero, however).
 . If the sense key is 5, the driver should reinitialise the device via
   a disable/enable sequence; otherwise, it need do nothing.


Retrieve Statistics (09)
------------------------
Command:  09 00 00 00 12 00
Function: Retrieve MAC address and device statistics
Type:     Input; returns 18 (decimal) bytes of data as follows:
           . bytes 0-5:  the current hardware ethernet (MAC) address
           . bytes 6-17: three long word (4-byte) counters (little-endian).
Notes:    The contents of the three longs are typically zero, and their
          usage is unclear; they are suspected to be:
           . long #1: frame alignment errors
           . long #2: CRC errors
           . long #3: frames lost


Set Interface Mode (0c)
-----------------------
Command:  0c 00 00 00 FF 80 (FF = 08 or 04)
Function: Allow interface to receive broadcast messages (FF = 04); the
          function of (FF = 08) is currently unknown.
Type:     No data transferred
Notes:    This command is accepted by firmware 1.4a & 2.0f, but has no
          effect on 2.0f, which is always capable of receiving broadcast
          messages.  In 1.4a, once broadcast mode is set, it remains set
          until the interface is disabled.


Set MAC Address (0c)
--------------------
Command:  0c 00 00 00 FF 40 (FF = 08 or 04)
Function: Set MAC address
Type:     Output; overrides built-in MAC address with user-specified
          6-byte value
Notes:    This command is intended primarily for debugging/test purposes.
          Disabling the interface resets the MAC address to the built-in
          value.


Write (0a)
----------
Command:  0a 00 00 LL LL XX (LLLL is data length, XX = 80 or 00)
Function: Write a packet at a time to the device (standard SCSI Write)
Type:     Output; the format of the data to be sent depends on the value
          of XX, as follows:
           . if XX = 00, LLLL is the packet length, and the data to be sent
             must be an image of the data packet
           . if XX = 80, LLLL is the packet length + 8, and the data to be
             sent is:
               PP PP 00 00 XX XX XX ... 00 00 00 00
             where:
               PPPP      is the actual (2-byte big-endian) packet length
               XX XX ... is the actual packet

========================= END OF DOCUMENT =========================

