WORKING                                                          X3T10
DRAFT                                                             995D


                                                            Revision 6
                                                         21 March 1995


Information technology -
SCSI-3 Primary Commands


Secretariat:
Information Technology Industry Council


This is a draft proposed American National Standard of Accredited
Standards Committee X3.  As such this is not a completed standard.  The
X3T10 Technical Committee may modify this document as a result of
comments received during public review and its approval as a standard. 
Use of the information contained here in is at your own risk.


Permission is granted to members of X3, its technical committees, and
their associated task groups to reproduce this document for the purposes
of X3 standardization activities without further permission, provided
this notice is included.  All other rights are reserved.  Any commercial
or for-profit duplication is strictly prohibited.


ASC X3T10 Technical Editor:     Ralph O. Weber
                                ENDL Associates
                                13 Century Road
                                Nashua, NH  03060-1187
                                USA

                                Telephone:603-883-9274
                                Facsimile:603-594-0647
                                Email:   ROWeber@ACM.org

                                                      Reference number
                                                   ISO/IEC **** : 199x
                                                    ANSI X3.*** - 199x
                                        Printed March, 12, 1995 3:56pm^LPOINTS OF CONTACT:

X3T10 Chair                                  X3T10 Vice-Chair
John B. Lohmeyer                             Lawrence J. Lamers
Symbios Logic Inc.                           Adaptec
1635 Aeroplaza Drive                         691 South Milpitas Blvd.
Colo Spgs, CO 80916                          Milpitas, CA 95035

Tel:   (719) 573-3362                        Tel:   (408) 957-7817
Fax:   (719) 597-8225                        Fax:   (408) 957-7193
Email: john.lohmeyer@hmpd.com                Email: ljlamers@aol.com

X3 Secretariat
Lynn Barra
Administrator Standards Processing
X3 Secretariat                               Telephone: 202-626-5738
1250 Eye Street, NW   Suite 200              Facsimile: 202-638-4922
Washington, DC   20005                       Email: x3sec@itic.nw.dc.us

SCSI Reflector
Internet address for subscription to the SCSI reflector:
                                             scsi-request@wichitaks.nc
                                             r.com
Internet address for distribution via SCSI reflector:
                                             scsi@wichitaks.ncr.com

SCSI Bulletin Board
719-574-0424

Document Distribution
Global Engineering            Telephone: 303-792-2181 or 
15 Inverness Way East                    800-854-7179
Englewood, CO   80112-5704    Facsimile: 303-792-2192


                               ABSTRACT

This standard defines the SCSI commands that are not associated with a
particular device model.  The primary commands may be implemented by any
SCSI device or, in some cases, shall be implemented by all SCSI devices.


                           PATENT STATEMENT

CAUTION: The developers of this standard have requested that holder's of
patents that may be required for the implementation of the standard,
disclose such patents to the publisher.  However, neither the developers
nor the publisher have undertaken a patent search in order to identify
which, if any, patents may apply to this standard.

As of the date of publication of this standard and following calls for
the identification of patents that may be required for the
implementation of the standard, no such claims have been made.  No
further patent search is conducted by the developer or the publisher in
respect to any standard it processes.  No representation is made or
implied that licenses are not required to avoid infringement in the use
of this standard.^L

Contents

                                                                  Page

Contents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  i

Annexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv

Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  v

Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi

Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix

Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi

Revision Information. . . . . . . . . . . . . . . . . . . . . . . .xii

Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

1  Scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1

2  Normative references . . . . . . . . . . . . . . . . . . . . . .  2

3  Definitions, symbols, abbreviations, and conventions . . . . . .  2
  3.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . .  2
  3.2 Symbols and abbreviations . . . . . . . . . . . . . . . . . .  5
  3.3 Conventions . . . . . . . . . . . . . . . . . . . . . . . . .  5

4  General. . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  4.1 The request-response model. . . . . . . . . . . . . . . . . .  6
  4.2 The Command Descriptor Block (CDB). . . . . . . . . . . . . .  6

5  Model for all device types . . . . . . . . . . . . . . . . . . .  9
  5.1 Commands implemented by all SCSI device servers . . . . . . .  9
  5.1.1 Using the INQUIRY command . . . . . . . . . . . . . . . . .  9
  5.1.2 Using the REQUEST SENSE command . . . . . . . . . . . . . . 10
  5.1.3 Using the SEND DIAGNOSTIC command . . . . . . . . . . . . . 10
  5.1.4 Using the TEST UNIT READY command . . . . . . . . . . . . . 10
  5.2 Parameter rounding. . . . . . . . . . . . . . . . . . . . . . 10
  5.3 Reservations. . . . . . . . . . . . . . . . . . . . . . . . . 10
  5.3.1 Reservation conflicts . . . . . . . . . . . . . . . . . . . 11
  5.4 Dual port option. . . . . . . . . . . . . . . . . . . . . . . 12
  5.5 Removeable medium devices with an attached medium changer . . 12

6 Model for processor devices . . . . . . . . . . . . . . . . . . . 12
  6.1 Definitions specific to processor devices . . . . . . . . . . 13
  6.2 Examples of SCSI processor devices. . . . . . . . . . . . . . 14
  6.2.1 Host implementing Asynchronous Event Reporting support. . . 14
  6.2.2 Host-to-host communication, SEND only . . . . . . . . . . . 14
  6.2.3 Host-to-host communication, SEND and RECEIVE. . . . . . . . 14
  6.2.4 Host-to-special-output peripheral . . . . . . . . . . . . . 15
  6.2.5 Host-to-special-input peripheral. . . . . . . . . . . . . . 15

7  Commands for all device types. . . . . . . . . . . . . . . . . . 16
  7.1 CHANGE DEFINITION command . . . . . . . . . . . . . . . . . . 17
  7.2 COMPARE command . . . . . . . . . . . . . . . . . . . . . . . 19
  7.3 COPY command. . . . . . . . . . . . . . . . . . . . . . . . . 20
  7.3.1 Errors detected by the copy manager . . . . . . . . . . . . 22
  7.3.2 Errors detected by a target . . . . . . . . . . . . . . . . 22
  7.3.3 COPY function codes 0Ah and 0Bh . . . . . . . . . . . . . . 23
  7.3.4 COPY function code 0Ch. . . . . . . . . . . . . . . . . . . 24
  7.3.5 COPY function code 0Dh. . . . . . . . . . . . . . . . . . . 26
  7.3.6 COPY function code 0Eh. . . . . . . . . . . . . . . . . . . 27
  7.3.7 Copies with unequal block lengths . . . . . . . . . . . . . 28
  7.4 COPY AND VERIFY command . . . . . . . . . . . . . . . . . . . 29
  7.5 INQUIRY command . . . . . . . . . . . . . . . . . . . . . . . 30
  7.5.1 Standard INQUIRY data . . . . . . . . . . . . . . . . . . . 32
  7.5.2 SIP-specific INQUIRY data . . . . . . . . . . . . . . . . . 36
  7.5.3 Vital product data. . . . . . . . . . . . . . . . . . . . . 37
  7.5.4 Command support data. . . . . . . . . . . . . . . . . . . . 38
  7.6 LOG SELECT command. . . . . . . . . . . . . . . . . . . . . . 39
  7.7 LOG SENSE command . . . . . . . . . . . . . . . . . . . . . . 42
  7.8 MODE SELECT(6) command. . . . . . . . . . . . . . . . . . . . 44
  7.9 MODE SELECT(10) command . . . . . . . . . . . . . . . . . . . 46
  7.10 MODE SENSE(6) command. . . . . . . . . . . . . . . . . . . . 46
  7.10.1 Current values . . . . . . . . . . . . . . . . . . . . . . 48
  7.10.2 Changeable values. . . . . . . . . . . . . . . . . . . . . 48
  7.10.3 Default values . . . . . . . . . . . . . . . . . . . . . . 48
  7.10.4 Saved values . . . . . . . . . . . . . . . . . . . . . . . 48
  7.10.5 Initial responses. . . . . . . . . . . . . . . . . . . . . 48
  7.11 MODE SENSE(10) command . . . . . . . . . . . . . . . . . . . 49
  7.12 MOVE MEDIUM (attached) command . . . . . . . . . . . . . . . 49
  7.13 READ BUFFER command. . . . . . . . . . . . . . . . . . . . . 50
  7.13.1 Combined header and data mode (000b) . . . . . . . . . . . 51
  7.13.2 Vendor-specific mode (001b). . . . . . . . . . . . . . . . 51
  7.13.3 Data mode (010b) . . . . . . . . . . . . . . . . . . . . . 51
  7.13.4 Descriptor mode (011b) . . . . . . . . . . . . . . . . . . 52
  7.14 READ ELEMENT STATUS (attached) command . . . . . . . . . . . 52
  7.15 RECEIVE DIAGNOSTIC RESULTS command . . . . . . . . . . . . . 53
  7.16 RELEASE(6) command . . . . . . . . . . . . . . . . . . . . . 54
  7.16.1 Logical unit release (Mandatory) . . . . . . . . . . . . . 54
  7.16.2 Extent release (Optional). . . . . . . . . . . . . . . . . 54
  7.16.3 Third-party release (Mandatory). . . . . . . . . . . . . . 54
  7.17 RELEASE(10) command. . . . . . . . . . . . . . . . . . . . . 55
  7.18 REQUEST SENSE command. . . . . . . . . . . . . . . . . . . . 56
  7.18.1 Sense-key specific . . . . . . . . . . . . . . . . . . . . 59
  7.18.2 Deferred errors. . . . . . . . . . . . . . . . . . . . . . 61
  7.18.3 Sense key and sense code definitions . . . . . . . . . . . 62
  7.19 RESERVE(6) command . . . . . . . . . . . . . . . . . . . . . 69
  7.19.1 Logical unit reservation (Mandatory) . . . . . . . . . . . 69
  7.19.2 Extent reservation (Optional). . . . . . . . . . . . . . . 70
  7.19.3 Third-party reservation (Mandatory). . . . . . . . . . . . 72
  7.19.4 Superseding reservations (Mandatory) . . . . . . . . . . . 72
  7.20 RESERVE(10) command. . . . . . . . . . . . . . . . . . . . . 73
  7.21 SEND DIAGNOSTIC command. . . . . . . . . . . . . . . . . . . 74
  7.22 TEST UNIT READY Command. . . . . . . . . . . . . . . . . . . 76
  7.23 WRITE BUFFER command . . . . . . . . . . . . . . . . . . . . 77
  7.23.1 Combined header and data mode (000b) . . . . . . . . . . . 78
  7.23.2 Vendor-specific mode (001b). . . . . . . . . . . . . . . . 78
  7.23.3 Data mode (010b) . . . . . . . . . . . . . . . . . . . . . 78
  7.23.4 Download microcode mode (100b) . . . . . . . . . . . . . . 79
  7.23.5 Download microcode and save mode (101b). . . . . . . . . . 79
  7.23.6 Download microcode with offsets (110b) . . . . . . . . . . 79
  7.23.7 Download microcode with offsets and save mode (111b) . . . 80

8 Parameters for all device types . . . . . . . . . . . . . . . . . 81
  8.1 Diagnostic parameters . . . . . . . . . . . . . . . . . . . . 81
  8.1.1 Supported diagnostic pages. . . . . . . . . . . . . . . . . 82
  8.2 Log parameters. . . . . . . . . . . . . . . . . . . . . . . . 83
  8.2.1 Buffer over-run/under-run page. . . . . . . . . . . . . . . 86
  8.2.2 Error counter pages . . . . . . . . . . . . . . . . . . . . 88
  8.2.3 Last n error events page. . . . . . . . . . . . . . . . . . 88
  8.2.4 Non-medium error page . . . . . . . . . . . . . . . . . . . 89
  8.2.5 Supported log pages . . . . . . . . . . . . . . . . . . . . 89
  8.3 Mode parameters . . . . . . . . . . . . . . . . . . . . . . . 89
  8.3.1 Control mode page . . . . . . . . . . . . . . . . . . . . . 93
  8.3.2 Disconnect-reconnect page . . . . . . . . . . . . . . . . . 95
  8.3.3 Informational exceptions control page . . . . . . . . . . . 98
  8.3.4 Peripheral device page. . . . . . . . . . . . . . . . . . .101
  8.4 Vital product data parameters . . . . . . . . . . . . . . . .101
  8.4.1 ASCII implemented operating definition page . . . . . . . .102
  8.4.2 ASCII information page. . . . . . . . . . . . . . . . . . .103
  8.4.3 Implemented operating definition page . . . . . . . . . . .104
  8.4.4 Supported vital product data pages. . . . . . . . . . . . .105
  8.4.5 Unit serial number page . . . . . . . . . . . . . . . . . .105

9 Commands for processor devices. . . . . . . . . . . . . . . . . .106
  9.1 RECEIVE command . . . . . . . . . . . . . . . . . . . . . . .107
  9.2 SEND command. . . . . . . . . . . . . . . . . . . . . . . . .107

10 Parameters for processor devices . . . . . . . . . . . . . . . .108
  10.1 Diagnostic parameters. . . . . . . . . . . . . . . . . . . .108
  10.2 Log parameters . . . . . . . . . . . . . . . . . . . . . . .109
^L

Annexes

                                                                  Page

Annex A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
Procedures for Logging Operations in SCSI . . . . . . . . . . . . .110
A.1 Logging Operations Terminology. . . . . . . . . . . . . . . . .110
A.2 LOG SENSE Command . . . . . . . . . . . . . . . . . . . . . . .111
A.3 Log Select Command. . . . . . . . . . . . . . . . . . . . . . .114
A.4 Exception Conditions During Logging . . . . . . . . . . . . . .117
A.4.1 Pseudocode 1. . . . . . . . . . . . . . . . . . . . . . . . .119
A.4.2 Pseudocode 2. . . . . . . . . . . . . . . . . . . . . . . . .119
A.4.3 Pseudocode 3. . . . . . . . . . . . . . . . . . . . . . . . .120

Annex B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121
Numeric order codes . . . . . . . . . . . . . . . . . . . . . . . .121

Annex C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
Vendor identification . . . . . . . . . . . . . . . . . . . . . . .135
^L

Figures

                                                                  Page
Figure 1 - SCSI-3 document roadmap. . . . . . . . . . . . . . . . .  1
^L

Tables

                                                                  Page
Table 1 - Typical CDB for 6-byte commands . . . . . . . . . . . . .  6
Table 2 - Typical CDB for 10-byte commands. . . . . . . . . . . . .  7
Table 3 - Typical CDB for 12-byte commands. . . . . . . . . . . . .  7
Table 4 - Typical CDB for 16-byte commands. . . . . . . . . . . . .  8
Table 5 - Commands for all device types . . . . . . . . . . . . . . 16
Table 6 - CHANGE DEFINITION command . . . . . . . . . . . . . . . . 17
Table 7 - Definition parameter field. . . . . . . . . . . . . . . . 17
Table 8 - COMPARE command . . . . . . . . . . . . . . . . . . . . . 19
Table 9 - COPY command. . . . . . . . . . . . . . . . . . . . . . . 20
Table 10 - COPY parameter list. . . . . . . . . . . . . . . . . . . 20
Table 11 - COPY function codes. . . . . . . . . . . . . . . . . . . 21
Table 12 - Segment descriptor for COPY function codes 0Ah and 0Bh . 23
Table 13 - Segment descriptor for COPY function code 0Ch. . . . . . 24
Table 14 - Segment descriptor for COPY function code 0Dh. . . . . . 26
Table 15 - Segment descriptor for COPY function code 0Eh. . . . . . 27
Table 16 - Pad and cat bit definition . . . . . . . . . . . . . . . 28
Table 17 - COPY AND VERIFY command. . . . . . . . . . . . . . . . . 29
Table 18 - INQUIRY command. . . . . . . . . . . . . . . . . . . . . 30
Table 19 - Standard INQUIRY data format . . . . . . . . . . . . . . 32
Table 20 - Peripheral qualifier . . . . . . . . . . . . . . . . . . 33
Table 21 - Peripheral device type . . . . . . . . . . . . . . . . . 33
Table 22 - ANSI-approved version. . . . . . . . . . . . . . . . . . 34
Table 23 - SIP-specific INQUIRY data format . . . . . . . . . . . . 36
Table 24 - Maximum logical device configuration table . . . . . . . 37
Table 25 - Command support data format. . . . . . . . . . . . . . . 38
Table 26 - LOG SELECT command . . . . . . . . . . . . . . . . . . . 39
Table 27 - Page control field . . . . . . . . . . . . . . . . . . . 40
Table 28 - LOG SENSE command. . . . . . . . . . . . . . . . . . . . 42
Table 29 - MODE SELECT(6) command . . . . . . . . . . . . . . . . . 44
Table 30 - MODE SELECT(10) command. . . . . . . . . . . . . . . . . 46
Table 31 - MODE SENSE(6) command. . . . . . . . . . . . . . . . . . 46
Table 32 - Page control field . . . . . . . . . . . . . . . . . . . 47
Table 33 - Mode page code usage for all devices . . . . . . . . . . 47
Table 34 - MODE SENSE(10) command . . . . . . . . . . . . . . . . . 49
Table 35 - READ BUFFER command. . . . . . . . . . . . . . . . . . . 50
Table 36 - READ BUFFER mode field . . . . . . . . . . . . . . . . . 50
Table 37 - READ BUFFER header . . . . . . . . . . . . . . . . . . . 51
Table 38 - READ BUFFER descriptor . . . . . . . . . . . . . . . . . 52
Table 39 - Buffer offset boundary . . . . . . . . . . . . . . . . . 52
Table 40 - RECEIVE DIAGNOSTIC RESULTS command . . . . . . . . . . . 53
Table 41 - RELEASE(6) command . . . . . . . . . . . . . . . . . . . 54
Table 42 - RELEASE(10) command. . . . . . . . . . . . . . . . . . . 55
Table 43 - RELEASE(10) parameter list . . . . . . . . . . . . . . . 56
Table 44 - REQUEST SENSE command. . . . . . . . . . . . . . . . . . 56
Table 45 - Error codes 70h and 71h sense data format. . . . . . . . 57
Table 46 - Field pointer bytes. . . . . . . . . . . . . . . . . . . 60
Table 47 - Actual retry count bytes . . . . . . . . . . . . . . . . 60
Table 48 - Progress indication bytes. . . . . . . . . . . . . . . . 60
Table 49 - Sense key descriptions . . . . . . . . . . . . . . . . . 62
Table 50 - ASC and ASCQ assignments . . . . . . . . . . . . . . . . 64
Table 51 - RESERVE(6) command . . . . . . . . . . . . . . . . . . . 69
Table 52 - Data format of extent descriptors. . . . . . . . . . . . 71
Table 53 - Reservation types. . . . . . . . . . . . . . . . . . . . 71
Table 54 - RESERVE(10) command. . . . . . . . . . . . . . . . . . . 73
Table 55 - RESERVE(10) ID & extents parameter list. . . . . . . . . 74
Table 56 - RESERVE(10) ID only parameter list . . . . . . . . . . . 74
Table 57 - SEND DIAGNOSTIC command. . . . . . . . . . . . . . . . . 74
Table 58 - TEST UNIT READY command. . . . . . . . . . . . . . . . . 76
Table 59 - Preferred TEST UNIT READY responses. . . . . . . . . . . 76
Table 60 - WRITE BUFFER command . . . . . . . . . . . . . . . . . . 77
Table 61 - WRITE BUFFER mode field. . . . . . . . . . . . . . . . . 78
Table 62 - Diagnostic page format . . . . . . . . . . . . . . . . . 81
Table 63 - Diagnostic page codes. . . . . . . . . . . . . . . . . . 82
Table 64 - Supported diagnostic pages . . . . . . . . . . . . . . . 82
Table 65 - Log page format. . . . . . . . . . . . . . . . . . . . . 83
Table 66 - Log parameter. . . . . . . . . . . . . . . . . . . . . . 84
Table 67 - Threshold met criteria . . . . . . . . . . . . . . . . . 85
Table 68 - Log page codes . . . . . . . . . . . . . . . . . . . . . 86
Table 69 - Parameter code field for buffer over-run/under-run
  counters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Table 70 - Count basis definition . . . . . . . . . . . . . . . . . 87
Table 71 - Cause field definition . . . . . . . . . . . . . . . . . 87
Table 72 - Parameter codes for error counter pages. . . . . . . . . 88
Table 73 - Non-medium error event parameter codes . . . . . . . . . 89
Table 74 - Supported log pages. . . . . . . . . . . . . . . . . . . 89
Table 75 - Mode parameter list. . . . . . . . . . . . . . . . . . . 90
Table 76 - Mode parameter header(6) . . . . . . . . . . . . . . . . 90
Table 77 - Mode parameter header(10). . . . . . . . . . . . . . . . 90
Table 78 - Mode parameter block descriptor. . . . . . . . . . . . . 91
Table 79 - Mode page format . . . . . . . . . . . . . . . . . . . . 92
Table 80 - Mode page codes. . . . . . . . . . . . . . . . . . . . . 93
Table 81 - Control mode page. . . . . . . . . . . . . . . . . . . . 93
Table 82 - Queue algorithm modifier . . . . . . . . . . . . . . . . 94
Table 83 - Disconnect-reconnect page. . . . . . . . . . . . . . . . 95
Table 84 - Data transfer disconnect control . . . . . . . . . . . . 97
Table 85 - Informational exceptions control page. . . . . . . . . . 98
Table 86 - Method of Reporting Informational Exceptions field . . . 99
Table 87 - Peripheral device page . . . . . . . . . . . . . . . . .101
Table 88 - Interface identifier codes . . . . . . . . . . . . . . .101
Table 89 - Vital product data page codes. . . . . . . . . . . . . .102
Table 90 - ASCII implemented operating definition . . . . . . . . .102
Table 91 - ASCII information page . . . . . . . . . . . . . . . . .103
Table 92 - Implemented operating definition page. . . . . . . . . .104
Table 93 - Supported vital product data pages . . . . . . . . . . .105
Table 94 - Unit serial number page. . . . . . . . . . . . . . . . .105
Table 95 - Commands for processor devices . . . . . . . . . . . . .106
Table 96 - RECEIVE command. . . . . . . . . . . . . . . . . . . . .107
Table 97 - SEND command . . . . . . . . . . . . . . . . . . . . . .107
Table 98 - SEND command - AER data format . . . . . . . . . . . . .108
Table 99 - Processor diagnostic page codes. . . . . . . . . . . . .108
Table 101 - Processor log page codes. . . . . . . . . . . . . . . .109
Table A.1 - LOG SENSE Command CDB fields. . . . . . . . . . . . . .111
Table A.2 - LOG SENSE returned Parameter Values . . . . . . . . . .112
Table A.3 - LOG SENSE save options. . . . . . . . . . . . . . . . .113
Table A.4 - LOG SELECT CDB fields . . . . . . . . . . . . . . . . .114
Table A.5 - LOG SELECT save options . . . . . . . . . . . . . . . .115
Table A.6 - LOG SELECT controller Parameter Values. . . . . . . . .116
Table A.7 - Log Parameter Control Byte saving definitions . . . . .117
Table A.8 - Log Parameter Control Byte updating definitions . . . .118
Table A.9 - Logging Exception Conditions. . . . . . . . . . . . . .119
Table B.1 - ASC and ASCQ assignments. . . . . . . . . . . . . . . .121
Table B.2 - SCSI-3 Operation Codes. . . . . . . . . . . . . . . . .128
Table B.3 - SCSI-3 Log Page Codes . . . . . . . . . . . . . . . . .133
Table B.4 - SCSI-3 Mode Page Codes. . . . . . . . . . . . . . . . .134
Table C.1 - Vendor identification list. . . . . . . . . . . . . . .135
^L

Notes

                                                                  Page
1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
21. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
24. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
28. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
31. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
32. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
33. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
35. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
42. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
43. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
44. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
45. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
46. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
47. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
48. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
49. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
50. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
51. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
52. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
53. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
54. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
55. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
56. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
57. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
^L

Foreword

The SCSI command set is designed to provide efficient peer-to-peer
operation of I/O devices (disks, tapes, printers, etc.) by an operating
system.  The SCSI command set assumes an underlying command-response
protocol.  Action on SCSI commands shall not be deemed completed until
a response is received.  The response shall include a status that
indicates the final disposition of the command.

The SCSI command set provides multiple operating systems concurrent
control over one or more I/O devices.  However, the multiple operating
systems must properly coordinate their actions or data corruption will
result.  Commands that assist with coordination between multiple
operating systems are described in this standard.  However, details of
the coordination are beyond the scope of the SCSI command set.

This standard defines a device model for all SCSI devices.  This
standard defines the SCSI commands that may apply to any device model. 
A few SCSI commands shall be implemented by all SCSI devices.  This
standard defines the SCSI commands that shall be implemented by all SCSI
devices.

The processor device model is defined in this standard.  Some target
SCSI devices may require a host implementation of the processor device
model to support the Asynchronous Event Reporting capability defined in
the SCSI-3 Architecture Model.  The commands that may be implemented by
a SCSI processor device likewise are defined in this standard.

With any technical document there may arise questions of interpretation
as new products are implemented.  The X3 Committee has established
procedures to issue technical opinions concerning the standards
developed by the X3 organization.  These procedures may result in SCSI
Technical Information Bulletins being published by X3.

These Bulletins, while reflecting the opinion of the Technical Committee
that developed the standard, are intended solely as supplementary
information to other users of the standard.  This standard, X3.*** -
199x, as approved through the publication and voting procedures of the
American National Standards Institute, is not altered by these
bulletins.  Any subsequent revision to this standard may or may not
reflect the contents of these Technical Information Bulletins.

Current X3 practice is to make Technical Information Bulletins available
through:

Global Engineering            Telephone: 303-792-2181 or 
15 Inverness Way East                    800-854-7179
Englewood, CO   80112-5704    Facsimile: 303-792-2192
^L

Revision Information

  N.B. This section will be removed from this draft standard before it
  is send to its first formal public review.

This document is a preliminary draft ANSI standard.  The accredited
standards committees X3T9.2 and more recently X3T10 have approved many
working documents that affect the contents of this draft standard.  The
following approved working documents have been fully incorporated in
this draft standard:

X3T9.2/90-062r4   Initiator Control of Reselection Order
X3T9.2/90-048r7   16/32 bit P/Q and L Cables
X3T9.2/90-110r2   Defect List Lengths exceeding 64 Kbytes
X3T9.2/90-119r3   Data Compaction Proposal for Seqential Devices
X3T9.2/90-136r3   Extensions for dual port SCSI
  X3T9.2/90-165   Procedures for Logging Operations in SCSI2
X3T9.2/90-166r1   Initiator Support of Modify Data Pointers Message
X3T9.2/90-168r2   SCSI Function to allow User Friendly Long Busy
X3T9.2/90-184r0   New Additional Sense Code/Qualifiers
X3T9.2/90-201r1   Non-ASCII Characters in Log List Parameters
X3T9.2/91-014r6   Control of SCSI Device Power Consumption
X3T9.2/91-027r1   New Additional Sense Code (5Dh)
X3T9.2/91-071r1   Direct Access Removable Media ASCQ's
X3T9.2/91-106r4   Format Status Log Page
X3T9.2/92-006r1   Enhancement of Command Sets for ... with Medium
                  Changers
X3T9.2/92-046r1   Request for New Additional Sense Codes
X3T9.2/92-111r1   Additional ASC/ASCQ Codes For Data Compression
X3T9.2/92-133r8   Proposal to add a disconnect after command phase ...
X3T9.2/92-134r1   Response to 92-111 (ASC/ASCQ for Data Compression)
X3T9.2/92-141r8   SCSI-3 Queuing Model
X3T9.2/92-162r1   New ASC/ASCQ code to distinguish power on reset
X3T9.2/92-218r1   Master Target Save Disable Bit
X3T9.2/93-032r1   Number of Blocks Field Size Limitation
X3T9.2/93-041r2   SCSI-3 Changes for Dual Port Feature
X3T9.2/93-063r1   Disposition of COPY Function Codes in 90-048r7
X3T9.2/93-145r1   COPY Command Definition for SCSI-3 SPC
 X3T10/94-018r0   Placing the Processor Device Commands in SPC
 X3T10/94-024r5   Error Handling for SCSI Controllers
 X3T10/94-104r4   Proposal for WRITE BUFFER command change for SCSI-3
 X3T10/94-106r3   Reserve & Release in SCSI-3 Primary Commands
 X3T10/94-110r1   Scanner Window Descriptor Bytes Proposal
 X3T10/94-113r3   Summary of the Content of the Proposed ANSI/AIIM MS59
                  Standard
 X3T10/94-146r3   Proposal for FORMAT MEDIUM command for Sequential
                  Access Devices
 X3T10/94-148r1   Request for a New ASC/ASCQ Code
 X3T10/94-176r0   Proposed Change for PORT STATUS Command Operation Code
 X3T10/94-188r9   Proposed INQUIRY command enhancements
 X3T10/94-189r1   Proposed solution for Automatic Clear of ACA
 X3T10/94-190r4   Exception Handling Selection Mode Page
 X3T10/94-244r2   Determining the status of an ongoing operation
 X3T10/95-103r2   Attached Medium Changer Operation Codes
 X3T10/95-133r1   Addition of ASC/ASCQ codes for cleaning cartridges

To the best of the editor's knowledge, all approved documents have been
incorporated in this draft standard.

The printed version of this document uses several formatting tools to
identify changes and editorial questions.  Regrettably, most of this
tools are removed in the plain-text ASCII version of the document.

Change bars in the margin locate substantial technical changes from the
previous revision of this document.  Footnotes clarify the editor's
opinion, give details on areas needing additional work, or callout
questions requiring attention from the X3T10 membership.

The following paragraphs summarize the editing work undertaken for each
revision of this draft standard.  Revisions are listed in reverse
chronological order.  This presumes that most reviewers are interested
in the recent changes in this draft standard.

Revision 6 (21 March 1995)

Remove the PORT STATUS command and change operation code back to 11h,
as agreed at the January Working Group meeting.  Restore the RESERVE
ELEMENT(6) and RELEASE ELEMENT(6) operation codes.  The SMC already
defines these operation codes, since they have different parameter lists
than RESERVE(6) and RELEASE(6).  Also add RESERVE ELEMENT(10) and
RELEASE ELEMENT(10), since the SMC is planning to add them.

Added several new vendor IDs to Annex C.  Restructure Table A.9 to match
the table structure used in the January 1995 revision of the Procedures
for Logging Operations Technical Information Bulletin (X3.131-1994/
TIB-1).  Revise NormACA definition text based on follow-up discussions
at the March Working Group meeting.  Add notes that bus addresses are
protocol-specific, as per a discussion of a SAM review comment at the
March Working Group meeting.

Since revision 5 missed the January mailing, the change bars in revision
6 mark both revision 5 and revision 6 changes.

Revision 5 (30 January 1995)

Removed all previous change bar markings.  Add NormACA definition text
as discussed at the January Working Group meeting and reviewed by George
and Bob.  Copy "parameter rounding" description from SCSI-2 to a new
sub-clause in the "Model for all device types" clause.  The "parameter
rounding" information was to be moved from the SAM to the SPC last fall. 
I simply failed to do it.  Annotated the headers in all the ASC/ASCQ
tables and all Annex B tables with document codes, SBC, SSC, ... SCC.

Updated the vendor id list in Annex C.  There are no change bars marking
changed in the vendor id list.  Change WRITE(10) from Optional to
Mandatory for disks in Table B.2.  This makes table B.2 match SCSI-2
Revision 10K.

Made the approved changes resulting from the comments in document 95-
106r0.  Comments 1, 7, 8, 9, and 13 were rejected by the January 1995
Working Group.  A summary of the Working Group discussion can be found
in the minutes, document 95-129.  Also, I could not reformat Annex A as
suggested in 95-106r0 comment 14 because I could not find an example of
how the TIB was reformatted.

Revision 4 (13 November 1994)

Add numeric value tables to Annex B for mode page codes and log page
codes.  Add several operation codes defined in the SCSI-3 Multi-Media
Commands document to table B.2.  Note: There is a conflicting usage of
operation code B8h.  Both READ ELEMENT STATUS and SET CD-ROM SPEED use
B8h.  This means that no one can build a CD-ROM device with an attached
medium changer.  Update the ASC/ASCQ tables based on the new storage
array device type.  Add the storage array device type to the Peripheral
Device Type list (table 21).  Many of the "storage array" changes are
editorial in nature.  Unapproved document 94-243r0 lists these changes.

Change bars in revision 4 cover both revision 3 changes and revision 4
changes.

Revision 3 (25 September 1994)

Switch the text in the Forward and Introduction sections to match the
contents of these sections in SAM and SPI.  Provide text in the Scope
clause and add the SCSI-3 Roadmap in that clause.  Move details of the
MOVE MEDIUM and READ ELEMENT STATUS commands to the SMC.  Incorporate
remaining approved documents.  Review definitions for correct
relationships to the equivalent SAM (rev 15) definitions.  Try to adjust
pagination so that there is minimal wasted white space.

Tried one more time to SAMinize list item e) in the deferred errors
clause.  I caught lots of flack on this one in July.  So those folks who
care should jump right to clause 7.19.2.

Revision 2 (3 August 1994)

Incorporate comments from electronic mail review, July 1994 Working
Group review, George Penokie, and Bill Dallas.  Mostly, Bill pointed out
to me that the processor device model clauses had not been SAMinized. 
Incorporate new ASC/ASCQ values definitions approved by the July 1994
Plenary.

Revision 1 (16 July 1994)

Typical formats for 6-, 10-, and 12-byte CDBs were copied from the SCSI-
2 standard.  Edits were made to make the usage of terms consistant with
the SAM.  A typical format for a 16-byte CDB was constructed.

Add INQUIRY data from P/Q cable document.  Combined with the
RESERVE/RELEASE work (94-106rx), I believe this completes the SPC
changes resulting from the P/Q cable document (90-048r7).

Incorporated the two dual port documents as best as I can.  The absence
of any SAM definitions for dual port implementations makes this work
somewhat uncertain.  I skipped the RESERVE/RELEASE changes in 90-136r3. 
I will either add those to the next draft of 94-106rx or incorporate
them directly when 94-106r1 is added to this document.

Incorporated the "Procedures for Logging Operations in SCSI2" TIB as an
annex.  Created the "Numeric order codes" annex.  Copied the "Vendor
identification" annex from SCSI-2.

Incorporated all remaining approved working documents in this draft
standard.

Revision 0 (10 May 1994)

Clause 8 of the SCSI-2 standard was copied to Clauses 5 and 6 of this
document.  Edits were made to make the usage of terms consistant with
the SAM.  The approved changes to the COPY command were inserted.  The
revised ASC/ASCQ table was used instead of the SCSI-2 table.  The
definitions and abreviations clauses were created from scratch, using
defintions from the SAM as templates.  Clause 4 was written from
scratch.^L

Introduction

The SCSI-3 Primary Commands (SPC) standard is divided into ten clauses:

  Clause 1 is the scope.

  Clause 2 enumerates the normative references that apply to this
    standard.

  Clause 3 describes the definitions, symbols and abbreviations used in
    this standard.

  Clause 4 describes the conceptual relationship between this document
    and the SCSI-3 Architecture Model.

  Clause 5 describes the command model for all SCSI devices.

  Clause 6 describes the command model for processor type SCSI devices.

  Clause 7 defines the commands that may be implemented by any SCSI
    device.

  Clause 8 defines the parameter data formats that may be implemented by
    any SCSI device. 

  Clause 9 defines the commands that may be implemented by a processor
    type SCSI device.

  Clause 10 defines the parameter data formats that may be implemented
    by a processor type SCSI device. 

The annexes provide information to assist with implementation of the
SCSI-3 Primary Commands standard.  Information that applies across all
the SCSI-3 command standards document also appears in the annexes.
^L
1  Scope

The SCSI-3 family of standards provides for many different types of SCSI
devices (disks, tapes, line printers, scanners, and many more).  This
standard defines a device model that is applicable to all SCSI devices. 
Other SCSI-3 command standards (SBC, SSC, etc.) expand on the general
SCSI device model in way appropriate to specific types of SCSI devices.

This standard also defines the SCSI commands that may apply to any
device model.  A few SCSI commands shall be implemented by all SCSI
devices.  This standard defines the SCSI commands that shall be
implemented by all SCSI devices.

Since a host processor is a part of any SCSI domain, the processor
device model is defined in this standard.  The commands that may be
implemented by a SCSI processor device likewise are defined in this
standard.  Some target SCSI devices may require a host implementation of
the processor device model to support the Asynchronous Event Reporting
capability defined in the SCSI-3 Architecture Model.

Figure 1 shows the relationship of this standard to the other SCSI-3
standards.

+==============================================================================+
|                                                                              |
| +------+ +--------+ +--------+ +--------+ +--------+ +----------+ +--------+ |
| |      | |SCSI-3  | |SCSI-3  | |SCSI-3  | |SCSI-3  | | SCSI-3   | |SCSI-3  | |
| |      | |Block   | |Stream  | |Graphic | |Medium  | |Controller| |Multi-  | |
| |      | |Commands| |Commands| |Commands| |Changer | |Commands  | |Media   | |
| |  A   | | (SBC)  | | (SSC)  | | (SGC)  | |Commands| |  (SCC)   | |Commands| |
| |  r   | +--------+ +--------+ +--------+ | (SMC)  | +----------+ | (MMC)  | |
| |S c M |     |          |          |      +--------+      |       +--------+ |
| |C h o |     |          |          |          |           |           |      |
| |S i d |     +--------------------------------------------------------+      |
| |I t e |                                  |                                  |
| |  e l |                    +-------------------------------+                |
| |3 c   |                    | SCSI-3 Primary Commands (SPC) |                |
| |  t   |                    +-------------------------------+                |
| |  u   |                                  |                                  |
| |  r   |         +------------------------+-------------+                    |
| |  e   |         |            |           |             |                    |
| |      |   +-----------+ +--------+ +----------+ +------------+              |
| |(SAM) |   |  SCSI-3   | | Fiber  | |  Serial  | |  Serial    |              |
| |      |   |Interlocked| |Channel | |   Bus    | |  Storage   |              |
| |      |   | Protocol  | |Protocol| | Protocol | |  Protocol  |              |
| |      |   |   (SIP)   | | (FCP)  | |  (SBP)   | |   (SSP)    |              |
| |      |   +-----------+ +--------+ +----------+ +------------+              |
| |      |         |           |            |             |                    |
| |      |   +-----------+ +--------+ +----------+ +------------+              |
| |      |   |  SCSI-3   | |        | |IEEE P1394| |  Serial    |              |
| |      |   | Parallel  | | Fibre  | |High Perf.| |  Storage   |              |
| |      |   | Interface | |Channel | |Serial Bus| |Architecture|              |
| |      |   |   (SPI)   | |(FC-PH) | | (1394)   | |   (SSA)    |              |
| +------+   +-----------+ +--------+ +----------+ +------------+              |
|                                                                              |
+==============================================================================+
                  Figure 1 - SCSI-3 document roadmap

The roadmap in figure 1 is intended to show the general applicability of
the documents to one another.

The term SCSI is used wherever it is not necessary to distinguish
between the versions of SCSI.  The original Small Computer System
Interface standard X3.131-1986 is referred to herein as SCSI-1.  SCSI-1
was revised resulting in the Small Computer System Interface - 2
(X3.131-1994), referred to herein as SCSI-2.

The term SCSI-3 refers collectively to the following documents that fall
under the jurisdiction of X3T10:

   - SCSI-3 Architecture Model        SAM   [X3T10/994-D]
   - SCSI-3 Block Commands            SBC   [X3T10/996-D]
   - SCSI-3 Stream Commands           SSC   [X3T10/997-D]
   - SCSI-3 Graphics Commands         SGC   [X3T10/998-D]
   - SCSI-3 Medium Changer Commands   SMC   [X3T10/999-D]
   - SCSI-3 Controller Commands       SCC   [X3T10/1047-D]
   - SCSI-3 Multimedia Commands       MMC   [X3T10/1048-D]
   - SCSI-3 Primary Commands          SPC   [X3T10/995-D]
   - SCSI-3 Parallel Interface        SPI   [X3T10/855-D]
   - SCSI-3 Interlocked Protocol      SIP   [X3T10/856-D]
   - SCSI-3 Serial Bus Protocol       SBP   [X3T10/992-D]
   - SCSI-3 Fiber Channel Protocol    FCP   [X3T10/993-D]


2  Normative references

As of this writing, this document contains no normative references other
than references to the other documents known collectively as SCSI-3, see
clause 1.

3  Definitions, symbols, abbreviations, and conventions


3.1 Definitions

3.1.1 application client: An object that is the source of SCSI commands. 
Further definition of an application client can be found in the SCSI-3
Architecture Model (SAM).

3.1.2 attached medium changer: A medium changer that is attached to and
accessed through some other type of SCSI device.  (See clause 5.5.)

3.1.3 asynchronous event reporting: Asynchronous event reporting is used
by a logical unit to signal another SCSI device that an asynchronous
event has occured.  The mechanism by which asynchronous event reporting
works is protocol-specific.  A detailed definition of AER can be found
in the SAM.

3.1.4 auto contingent allegiance: The condition of a task set following
the return of a CHECK CONDITION or COMMAND TERMINATED status.  A
detailed definition of ACA can be found in the SAM.

3.1.5 blocked task: A blocked task is a task that is in the blocked
state, as defined by the SAM.  Tasks become blocked when an auto
contingent allegiance condition occurs.  The blocked state ends when the
ACA condition is cleared.  A detailed definition of the blocked task
state can be found in the SAM.

3.1.6 byte: Indicates an 8-bit construct.

3.1.7 command: A request describing a unit of work to be performed by a
device server.  A detailed definition of a command can be found in the
SAM.

3.1.8 command descriptor block: The structure up to 16 bytes in length
used to communicate commands from an initiator to a target.

3.1.9 copy manager: The device server that receives a COPY, COMPARE or
COPY AND VERIFY command and performs the operation thus requested.

3.1.10 device server: An object within a logical unit that executes SCSI
tasks according to the rules of task management.  A detailed definition
of a device server can be found in the SAM.

3.1.11 device service request: A request, submitted by an application
client, conveying an SCSI command to a device server.  A detailed
definition of a device service request can be found in the SAM.

3.1.12 device service response: The response returned to an application
client by a device server on completion of an SCSI command.  A detailed
definition of a device service response can be found in the SAM.

3.1.13 device type: The type of device (or device model) implemented by
the device server and the target that contains the device server.  This
standard defines one complete device model (the processor device model)
and parts of other device models (the model for all device types). 
Other device models are defined in the other SCSI-3 command sets
standards (SBC, SSC, SGC, SMC, MMC, SCC, etc.).  Since a single target
may contain several device servers, a single target may implement
several device types.

3.1.14 enabled task state: The enabled task state is one of several task
states defined by the SAM.  For the purposes of this standard, the
salient feature of the enabled tast state is that it is the only task
state in which task may make effective progress towards completion.  A
detailed definition of the enabled task state can be found in the SAM.

3.1.15 field: A group of one or more contiguous bits.

3.1.16 hard reset: A target response to a reset event or TARGET RESET
task management function in which the target aborts all I/O processes,
releases all device reservations and resets its operating mode to a
condition similar to that which exists following power-up.  A detailed
definition of hard reset can be found in the SAM.

3.1.17 initiator: An SCSI device containing application clients that
originate device service requests to be processed by a target SCSI
device.  A detailed definition of an initiator can be found in the SAM.

3.1.18 invalid: An illegal (reserved) or unsupported field or code
value.

3.1.19 linked command: One in a series of SCSI commands executed by a
single task, which collectively make up a discrete I/O operation.  A
detailed definition of a linked command can be found in the SAM.

3.1.20 logical unit: An externally addressable entity within a target
that implements an SCSI device model.  A detailed definition of a
logical unit can be found in the SAM.

3.1.21 logical unit identifier: An object that is part of the SAM
definition of a logical unit.  An logical unit identifier uniquely
identifies a logical unit in a SCSI domain.   Detailed definitions of
SCSI domain and logical unit identifier can be found in the SAM.

3.1.22 logical unit number: An encoded 64-bit identifier for a logical
unit.  A detailed definition of a logical unit number can be found in
the SAM.

3.1.23 mandatory: The referenced item is required to claim compliance
with this standard.

3.1.24 media information: Information stored within an SCSI device,
which is non-volatile (retained through a power cycle) and accessible to
an initiator through the execution of SCSI commands.  A detailed
definition of a media information can be found in the SAM.

3.1.25 medium: Most usages of medium in this standard are synonymous
with media information.

3.1.26 medium changer: A medium changer mechanizies the movement of
media to and from the device that records on or reads from the media. 
A detailed definition of a medium changer can be found in the SMC.

3.1.27 one: A true signal value or a true condition of a variable.

3.1.28 optional: The referenced item is not required to claim compliance
with this standard.  Implementation of an optional item must be as
defined in this standard.

3.1.29 page: Several commands use regular parameter structures that are
referred to as pages.  These pages are identified with a value known as
a page code.

3.1.30 protocol-specific: Implementation of the referenced item is
defined by an SCSI-3 protocol standard.  A detailed definition of
protocol-specific can be found in the SAM.

3.1.31 reserved: Identifies bits, fields, and code values that are set
aside for future standardization.

3.1.32 reservation conflict:  A condition in which a command cannot be
processed due to a previously granted reservation (see 5.3).  See clause
5.3.1 for a definition of how reservation conflicts are handled.

3.1.33 SCSI device: A device that is connected to a service delivery
subsystem and supports a SCSI application protocol.  A detailed
definition of an SCSI device can be found in the SAM.

3.1.34 SCSI domain: The interconnection of two or more SCSI devices and
a service delivery subsystem forms a SCSI domain.  A detailed definition
of an SCSI domain can be found in the SAM.

3.1.35 service delivery subsystem: That part of an SCSI I/O system that
transmits service requests to a logical unit and returns logical unit
responses to an initiator.  A detailed definition of a service delivery
subsystem can be found in the SAM.

3.1.36 status: One byte of information sent from a target to an
initiator upon completion of each command.

3.1.37 system: A system is one or more SCSI domains operating as a
single configuration.

3.1.38 target: An SCSI device containing logical units that receive and
execute commands from an initiator.  A detailed definition of a target
can be found in the SAM.

3.1.39 task: An object within a logical unit that represents the work
associated with a command or a group of linked commands.  A detailed
definition of a task can be found in the SAM.

3.1.40 task set: A group of tasks within a target device, whose
interaction is dependent on the queuing and auto contingent allegiance
rules defined in the SAM.

3.1.41 third-party: When used in reference to COPY commands, third-party
means a COPY command issued to one device to perform a copy operation
between two other devices.  When used in reference to RESERVE, or
RELEASE commands, third-party means a reservation made on behalf of
another device (e.g. a processor device requests that a direct-access
device reserve itself for exclusive use by a sequential-access device).

3.1.42 unit attention condition: A state that a logical unit maintains
while it has asynchronous status information that should be reported to
initiators.  A detailed definition of the unit attention condition can
be found in the SAM.

3.1.43 vendor-specific: Something (e.g. a bit, field, code value, etc.)
that is not defined by this standard and may be used differently in
various implementations.

3.1.44 zero: A false signal value or a false condition of a variable.


3.2 Symbols and abbreviations

ACA    Auto Contingent Allegiance (see clause 3.1.4)
AER    Asynchronous Event Reporting (see clause 3.1.3)
CDB    Command Descriptor Block (see clause 3.1.8)
LSB    Least significant bit
LUN    Logical Unit Number (see clause 3.1.22)
MMC    SCSI-3 Multi-Media Commands (see clause 1)
MSB    Most significant bit
SAM    SCSI-3 Architecture Model (see clause 1)
SBC    SCSI-3 Block Commands (see clause 1)
SCC    SCSI-3 Controller Commands (see clause 1)
SCSI   Either SCSI-1, SCSI-2 or SCSI-3.
SCSI-1 The Small Computer System Interface - 1 (ANSI X3.131 : 1986)
SCSI-2 The Small Computer System Interface - 2 (ANSI X3.131 : 1994)
SCSI-3 The family of standards described in clause 1
SGC    SCSI-3 Graphic Commands (see clause 1)
SMC    SCSI-3 Medium Changer Commands (see clause 1)
SPC    SCSI-3 Primary Commands (this document, see clause 1)
SSC    SCSI-3 Stream Commands (see clause 1)
VS     Vendor Specific (see clause 3.1.43)


3.3 Conventions

Certain words and terms used in this standard have a specific meaning
beyond the normal English meaning.  These words and terms are defined
either in clause 3.1 or in the text where they first appear.  Names of
messages, commands, statuses, sense keys, additional sense codes, and
additional sense code qualifiers are in all uppercase (e.g. REQUEST
SENSE).  Lower case is used for words having the normal English meaning.

Fields containing only one bit are usually referred to as the name bit
instead of the name field.

Numbers that are not immediately followed by lower-case b or h are
decimal values.

Numbers immediately followed by lower-case b (xxb) are binary values.

Numbers immediately followed by lower-case h (xxh) are hexadecimal
values.


4  General

This standard defines a device model for all SCSI devices.  This
standard defines the SCSI commands that may apply to any device model. 
A few SCSI commands shall be implemented by all SCSI devices.  This
standard defines the SCSI commands that shall be implemented by all SCSI
devices.

4.1 The request-response model

The SCSI command set assumes an underlying request-response protocol. 
The fundamental properties of the request-response protocol are defined
in the SCSI-3 Architecture Model (SAM).  As per the SAM, the request-
response protocol can be modelled as a procedure call, specifically:

  Service response =  Execute Command (Task Identifier, CDB, [Data-Out
                      buffer], Task attributes, || [Data-In buffer],
                      [Autosense data], [Autosense Return Flag],
                      Status)

The SAM defines all of the inputs and outputs in the procedure call
above.  As they may apply to any SCSI device, this standard defines the
contents of the following procedure inputs and outputs; CDB, Data-Out
buffer, Data-In buffer, and Autosense data.  This standard does not
define all possible instances of these procedure inputs and outputs. 
This standard defines only those instances that may apply to any SCSI
device or to processor type SCSI devices.  Instances of the procedure
inputs and outputs that apply to specific SCSI device models are defined
in the applicable SCSI command standards document (SBC, SSC, SGC, MMC,
SSC, SMC, etc.).

This standard references values returned via the Status output
parameter.  Examples of such status values are CHECK CONDITION and
COMMAND TERMINATED.  Status values are not defined by this standard. 
The SAM defines all Status values.

The entity that makes the procedure call from an initiator is an
application client, as defined by the SAM.  The procedure call's
representation arrives at the target in the form of a device service
request.  The entity that performs the work of the procedure call in a
target is a device server.  A device server is an object within a
logical unit and is defined by the SAM.  

4.2 The Command Descriptor Block (CDB)

A command is communicated by sending a command descriptor block to the
device server.  For several commands, the command descriptor block is
accompanied by a list of parameters in the Data-Out buffer.  See the
specific commands for detailed information.

The command descriptor block shall have an operation code as its first
byte and a control byte as its last byte.  The general structure of the
operation code and control byte are defined in the SAM.

For all commands, if there is an invalid parameter in the command
descriptor block, then the device server shall terminate the command
without altering the medium.

               Table 1 - Typical CDB for 6-byte commands
+======-========-========-========-========-========-========-========-========+
|   Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte  |        |        |        |        |        |        |        |        |
|======+=======================================================================|
| 0    |                           Operation code                              |
|------+-----------------------------------------------------------------------|
| 1    |         Reserved         | (MSB)                                      |
|------+------------------------------                                      ---|
| 2    |                           Logical block address (if required)         |
|------+---                                                                 ---|
| 3    |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
|      |                           Transfer length (if required)               |
| 4    |                           Parameter list length (if required)         |
|      |                           Allocation length (if required)             |
|------+-----------------------------------------------------------------------|
| 5    |                           Control                                     |
+==============================================================================+

              Table 2 - Typical CDB for 10-byte commands
+======-========-========-========-========-========-========-========-========+
|   Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte  |        |        |        |        |        |        |        |        |
|======+=======================================================================|
| 0    |                           Operation code                              |
|------+-----------------------------------------------------------------------|
| 1    |                           Reserved                                    |
|------+-----------------------------------------------------------------------|
| 2    | (MSB)                                                                 |
|------+---                                                                 ---|
| 3    |                                                                       |
|------+---                        Logical block address (if required)      ---|
| 4    |                                                                       |
|------+---                                                                 ---|
| 5    |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
| 6    |                           Reserved                                    |
|------+-----------------------------------------------------------------------|
| 7    | (MSB)                     Transfer length (if required)               |
|------+---                        Parameter list length (if required)      ---|
| 8    |                           Allocation length (if required)       (LSB) |
|------+-----------------------------------------------------------------------|
| 9    |                           Control                                     |
+==============================================================================+


              Table 3 - Typical CDB for 12-byte commands
+======-========-========-========-========-========-========-========-========+
|   Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte  |        |        |        |        |        |        |        |        |
|======+=======================================================================|
| 0    |                           Operation code                              |
|------+-----------------------------------------------------------------------|
| 1    |                           Reserved                                    |
|------+-----------------------------------------------------------------------|
| 2    | (MSB)                                                                 |
|------+---                                                                 ---|
| 3    |                                                                       |
|------+---                        Logical block address (if required)      ---|
| 4    |                                                                       |
|------+---                                                                 ---|
| 5    |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
| 6    | (MSB)                                                                 |
|------+---                                                                 ---|
| 7    |                           Transfer length (if required)               |
|------+---                        Parameter list length (if required)      ---|
| 8    |                           Allocation length (if required)             |
|------+---                                                                 ---|
| 9    |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
|10    |                           Reserved                                    |
|------+-----------------------------------------------------------------------|
|11    |                           Control                                     |
+==============================================================================+


              Table 4 - Typical CDB for 16-byte commands
+======-========-========-========-========-========-========-========-========+
|   Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte  |        |        |        |        |        |        |        |        |
|======+=======================================================================|
| 0    |                           Operation code                              |
|------+-----------------------------------------------------------------------|
| 1    |                           Reserved                                    |
|------+-----------------------------------------------------------------------|
| 2    | (MSB)                                                                 |
|------+---                                                                 ---|
| 3    |                                                                       |
|------+---                        Logical block address (if required)      ---|
| 4    |                                                                       |
|------+---                                                                 ---|
| 5    |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
| 6    | (MSB)                                                                 |
|------+---                                                                 ---|
| 7    |                                                                       |
|------+---                        Additional CDB data (if required)        ---|
| 8    |                                                                       |
|------+---                                                                 ---|
| 9    |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
| 10   | (MSB)                                                                 |
|------+---                                                                 ---|
| 11   |                           Transfer length (if required)               |
|------+---                        Parameter list length (if required)      ---|
| 12   |                           Allocation length (if required)             |
|------+---                                                                 ---|
| 13   |                                                                 (LSB) |
|------+-----------------------------------------------------------------------|
| 14   |                           Reserved                                    |
|------+-----------------------------------------------------------------------|
| 15   |                           Control                                     |
+==============================================================================+


5  Model for all device types

This model describes some of the general characteristics expected of
most SCSI devices.  It is not intended to define any requirements nor is
it intended to alter any requirements defined elsewhere in SCSI-3.  All
SCSI devices shall conform to the SCSI-3 Architecture Model (SAM).

5.1 Commands implemented by all SCSI device servers

This standard defines four commands that all SCSI-3 devices servers
shall implement - INQUIRY, REQUEST SENSE, SEND DIAGNOSTIC, and TEST UNIT
READY.  These commands are used to configure the system, to test
devices, and to return important information concerning errors and
exception conditions.

5.1.1 Using the INQUIRY command

The INQUIRY command may be used by an application client to determine
the configuration of the SCSI bus.  Device servers respond with
information that includes their type and standard level and may include
the vendor's identification, model number and other useful information. 
It is recommended that device servers be capable of returning this
information (or whatever part of it that is available) upon completing
power-on initialization.  A device server may take longer to get certain
portions of this information, especially if it retrieves the information
from the medium.

5.1.2 Using the REQUEST SENSE command

Whenever an ACA condition is established, the application client that
received the error should issue a REQUEST SENSE command to receive the
sense data describing what caused the ACA condition.  If the application
client issues some other command, the sense data is lost.  Some SCSI-3
protocols include provisions for automatic delivery of REQUEST SENSE
data, thus bypassing the need for the REQUEST SENSE command.  Details of
such capabilities are protocol-specific.

5.1.3 Using the SEND DIAGNOSTIC command

The SEND DIAGNOSTIC command provides a means to request that an SCSI
device perform a self test.  While the test is device specific, the
means of requesting the test is standardized.  The response is simply a
GOOD status if all is well or a CHECK CONDITION status if the test
fails.

The SEND DIAGNOSTIC command also provides other powerful features when
used in conjunction with the RECEIVE DIAGNOSTIC RESULTS command, but
this capability is optional.

5.1.4 Using the TEST UNIT READY command

The TEST UNIT READY command is useful in that it allows an application
client to poll a logical unit until it is ready without the need to
allocate space for returned data.  It is especially useful to check the
cartridge status of logical units with removable media.  Device servers
are expected to respond promptly to indicate the current status of the
device (i.e. a device should avoid lengthy disconnections in an attempt
to respond with GOOD status).

5.2 Parameter rounding

Certain parameters sent to a device server with various commands contain
a range of values.  Device servers may choose to implement only selected
values from this range.  When the device server receives a value that it
does not support, it either rejects the command (CHECK CONDITION status
with ILLEGAL REQUEST sense key) or it rounds the value received to a
supported value.  The device server shall reject unsupported values
unless rounding is permitted in the description of the parameter.

Rounding of parameter values, when permitted, shall be performed as
follows -  A device server that receives a parameter value that is not
an exact supported value shall adjust the value to one that it supports
and shall return CHECK CONDITION status with a sense key of RECOVERED
ERROR.  The additional sense code shall be set to ROUNDED PARAMETER. 
The application client is responsible to issue an appropriate command to
learn what value the target has selected.

  NOTE 1 Generally, the device server should adjust maximum-value
  fields down to the next lower supported value than the one specified
  by the application client.  Minimum-value fields should be rounded
  up to the next higher supported value than the one specified by the
  application client.  In some cases, the type of rounding (up or
  down) is explicitly specified in the description of the parameter.

5.3 Reservations

The access enabled or access disabled condition determines when an
application client may store or retrieve user data on all of the medium. 
For random access devices, access to the medium may be restricted to
specified parts of the medium for read operations, write operations, or
both.  These attributes may be controlled by an external mechanism or by
the RESERVE and RELEASE commands.

The RESERVE and RELEASE commands define how different types of
restricted access may be achieved, and to whom the access is restricted. 
This subclause describes the interaction of the application clients on
the initiator that requested the reservation with application clients on
other initiators.

An application client uses reservations to gain a level of exclusivity
in access to all or part of the medium for it's initiator or another
initiator.  Because a device server cannot differentiate between
different application clients running on an initiator, all application
clients on the same initiator have the same access.  When multiple
application clients are accessing a single device server from one
initiator, the burden for coordinating reservations shall fall on the
application clients.  It is expected that the reservation will be
retained until released.  The SCSI device shall ensure that the
initiator with the reservation is able to access the reserved media
within the operating parameters established by the application client.

The clause defining each command's operation shall contain a description
of how that command is affected by reservations.  The affects of
reservations should be bounded by the following basic rules.  Commands
that read or write the medium shall obey the reservation rules described
in clause 7.19.  Commands that retrieve information about the device
server's operating state should be blocked by all reservations, except
extent reservations.  Commands that alter the device server's operating
state should be blocked by all reservations, unless the target maintains
separate state information for each initiator.  Targets that maintain
separate state information for each initiator should allow alteration of
the device server's state when only extent reservations are present.

The INQUIRY and REQUEST SENSE commands shall not be affected by any kind
of reservation.  The RESERVE(6) and RESERVE(10) commands shall be
processed even when reservations are present.  That is, the presence of
reservations shall not block processing of the commands that might
supersede them.  The RELEASE(6) and RELEASE(10) commands shall be
processed even when reservations are present.  That is, the presence of
reservations shall not block processing of the commands that might
release them.

  NOTE 2 The RELEASE(6) and RELEASE(10) commands cannot release
  reservations made from another initiator.  So, eventhough a RELEASE
  command is required to be processed, it may still be effectively a
  NOP.

When a system contains more than one initiator, there should be
agreement among the initiators as to how media are reserved and released
during operations.  Otherwise, an initiator may be locked out of access
to a target in the middle of an operation.  For example, initiator 'A'
has a write operation in progress to a direct-access device which has
data stored in cache memory.  Then, initiator 'B' issues a RESERVE
command to the direct-access device.  As a result, initiator 'A' is
locked out of issuing a SYNCHRONIZE CACHE command to ensure the
integrity of the data.  To prevent this from happening, initiator 'A'
should issue a RESERVE prior to the write command.

5.3.1 Reservation conflicts

A reservation conflict occurs when a device server receives a command
whose processing is prohibited by a reservation for another initiator. 
If a reservation conflict precludes any part of the command, none of the
command shall be performed.  When a reservation conflict is detected,
the device server shall terminate the command that encountered the
reservation conflict with a RESERVATION CONFLICT status.

This standard or a related SCSI-3 standard (SBC, SSC, SMC, SGC, MMC,
SCC, etc.) shall define the conditions that result in RESERVATION
CONFLICT status for each command.  The conditions shall be identified as
part of the command definition for each SCSI command.

5.4 Dual port option

This feature permits an SCSI direct access device to have an additional
SCSI interface port.  Not all protocols (SIP, SBC, SSP, FCP, etc.)
support the dual port option.  Also, details of how the dual port option
is supported are protocol specific.  (See the applicable protocol
standard.)  The device server shall indicate the presence of dual ports
by setting the DualP bit to one in its standard INQUIRY data (see
7.5.1).  When the dual port option is implemented, the PORT STATUS
command shall be supported.

The additional port provides an alternate service delivery subsystem
path through which the device server can be reached.  The alternate
service delivery subsystems usually are disjoint from each other.  In
this configuration, a host computer has separate paths (SCSI host
adaptor, SCSI cable, SCSI connector port on the target) over which it
can reach the device server.

The host computer can use the alternate path to reach the desired device
server if the first path is too busy to get access or if the first path
is not functioning properly.  This can result in increased I/O
performance and/or increased reliability of the overall system.

5.5 Removeable medium devices with an attached medium changer

When a logical unit is served by a medium changer, control over a media
transport element may be effected using medium changer commands sent to
the device server within the logical unit.  This is called an attached
medium changer configuration.  The level of control is not as complete
as would be available if a fully functional medium-changer device were
implemented (see the SCSI-3 Medium Changer Commands a.k.a. SMC). 
However, the amount of control is sufficient for paired device/changer
configurations.

The device server shall indicate its ability to support medium changer
commands by setting the MChngr bit to one in its standard INQUIRY data
(see 7.5.1).  An MChngr bit of one shall indicate that the MOVE MEDIUM
(attached) and READ ELEMENT STATUS (attached) commands are supported by
the device server.  (Definitions of the MOVE MEDIUM (attached) and READ
ELEMENT STATUS (attached) commands can be found in the SMC.)

Only one medium transport element shall be permitted, element 0.  Only
one data transfer element shall be permitted.  Media exchanges shall not
be supported by attached medium changers.  The RESERVE ELEMENT and
RELEASE ELEMENT commands shall not be supported by attached medium
changers.


6 Model for processor devices

The SCSI processor device is a target with the characteristics of a
primary computing device, typically a personal computer, minicomputer,
mainframe computer, or auxiliary computing device or server.  Such a
primary computing device is often called a host.  The processor device
receives or provides packets of data as requested by an application
client.

Some SCSI-3 protocols use the SCSI processor device model as part of
their definition for Asynchronous Event Reporting (AER).  Essentially,
these protocols require the host to function as a processor device
server when the SCSI peripheral device (normally the target) delivers an
asynchronous report.  For these protocols, the implementing of the
processor device model can be thought of as a primary requirement on the
host.  This reasoning is the justification for including the processor
device model in the SCSI-3 Primary Commands standard.  See the
applicable protocol standard (SIP, SBP, FCP, SSP, etc.) for that
protocol's definition for AER support.

In the SCSI processor device, the device server accepts and provides
data packets transferred according to commands from the application
client.  The application client and the processor device server are both
assumed to know the rules by which information is exchanged between
them, how the information is interpreted by the processor device server,
and when it is allowable to exchange the information.  These rules are
not specified by this standard.

The application client requests that the processor device server accept
a packet of data by transmitting a SEND command.  The application client
requests that the processor device server return a packet of data by
transmitting a RECEIVE command.  A COPY command can also be transmitted
to the processor device server to request that it serve as a copy
manager.  The actual data flow can be between the processor device and
another SCSI device or can be between two SCSI devices under control of
the processor device acting as a copy manager.

If a processor device server temporarily has no resource available to
manage a data packet from the application client, has no data packet to
provide to the application client, or has no resources assigned to
perform the operation, the device server may then choose one of the
following responses: 
  a)  Terminate the command with CHECK CONDITION status and the sense
      key NOT READY with the appropriate additional sense code for the
      condition.  This is the appropriate response to a TEST UNIT READY
      command. 
  b)  Delay data transmission until the necessary resource or data
      packet becomes available.
  c)  Terminate the command with BUSY status.

More than one logical unit can be implemented by a processor device.  
Logical units can serve as additional paths to a single resource, and/or
each logical unit can serve as a path to different resources within the
device.  A single logical unit may also serve as a path to multiple
resources if the processor device server can interpret information
within the data packet and route the packet to the appropriate resource. 
If the logical unit addressed by the application client does not have an
available resource or data packet associated with it, the processor
device server may choose to treat the logical unit as an invalid logical
unit (see the SAM) or respond as described in the previous paragraph.

If the processor device server determines that an error or unusual
condition has occurred while performing an operation specified by the
contents of a data packet, the information describing the condition is
normally returned as a part of a data packet.  If the processor device
server determines that an error or unusual condition has occurred while
executing the SCSI command from the application client, the command is
terminated with a CHECK CONDITION and the failures are identified
through the REQUEST SENSE data.

The SCSI processor device is distinguished from a SCSI communications
device by the fact that the primary destination of the data packets is
within the target device.  A SCSI communications device, in contrast,
passes the data on to an ultimate destination outside the target through
a network.  Many types of devices may find it convenient to function as
processor devices if no other suitable SCSI device type exists and if
the packet exchange protocol dictated by the processor device model
meets their functional requirements.  Devices requiring totally
incompatible protocols and command sets should be examined carefully to
ensure that the incompatibilities are based on functional requirements. 
If they are, they should be treated as vendor-unique device types.

6.1 Definitions specific to processor devices

6.1.1 host:  A device with the characteristics of a primary computing
device, typically a personal computer, workstation, minicomputer,
mainframe computer, or auxiliary computing device or server.

6.1.2 data packet:  The data transferred in the Data-In buffer
associated with a RECEIVE command, or during the Data-Out buffer
associated with a SEND command.  A data packet often contains
information at the beginning or end of the packet that describes the
contents of the packet.  A data packet might contain control or status
information for the destination device.

6.1.3 resource:  A part of the device required to operate on or store
the data packet.

6.2 Examples of SCSI processor devices

Several examples of processor device implementations are provided to
clarify the range of utility of the SCSI processor device.

6.2.1 Host implementing Asynchronous Event Reporting support

A host processor, acting as an initiator, enables Asynchronous Event
Reporting (AER) using one or more of the RAERP, UAAERP, or EAERP bits in
the control mode page.  At a later time, the peripheral device, which
normally acts as a target, detects a condition that may be reported
using AER (based on the controls previously set in the control mode
page).  Based on the operating definition for the protocol being used by
the service delivery subsystem, the peripheral device shall use the SEND
command to deliver the asynchronous event report.

The peripheral device application client executes an "Execute Command"
service request for a SEND command.  The transfer data has the format
defined in clause 9.2.  In an exact reversal of its normal role, the
host becomes the recipient of the device service request generated by
the peripheral device.  The host becomes a device server for the SEND
command.  The host receives the transfer data and processes the sense
data (see clause 7.18) embedded in it.

6.2.2 Host-to-host communication, SEND only

A host processor, (host A), takes the initiator role and generates a
device service request for processor device (host B).  The device
service request contains a SEND command and a packet in the Data-Out
buffer.  The SEND command contains an operating system call that
requests data from the available locally to host B.  After performing
the functions required by the data packet, host B assumes the initiator
role and generates a device service request for host A.  The device
service request contains a SEND command and the data requested by host
A in the Data-Out buffer.

For this transaction, host A thus has acted as a primary computer and
host B acts as a specialized data server computer.  Note that the SEND
command is sufficient to perform a complete transaction if both host A
and host B are capable of acting both as initiators and as targets. 
This provides the capability of a high bandwidth inter-communication
among nearby host processors.

6.2.3 Host-to-host communication, SEND and RECEIVE

A host processor (host A) takes the initiator role and generates a
device service request for processor device (host B).  The device
service request contains a SEND command and a packet in the Data-Out
buffer containing instructions about an operation to be performed.  Host
A again takes the initiator role and sends the data to be used by host
B in the operation in a second device service request.  Host A then
assumes that a result will be obtained consistent with rules understood
by both devices.  Host A generates a device service request containing
RECEIVE command and a Data-In buffer to obtain the result from host B. 
If the result is not yet ready, host B may delay data transmission until
the calculation is complete and the requested data packet can be
returned to host A.

  NOTE 3 Host A need not support target mode and host B need not
  support initiator mode to successfully complete this exchange
  between the two devices.

6.2.4 Host-to-special-output peripheral

A special co-processor device which can use the processor device command
set is a high-performance graphics display terminal.  The application
client sends to the display terminal control and data packets that
contain the image to be displayed.  Only the SEND command is required. 
A peripheral failure should be indicated through the normal CHECK
CONDITION / REQUEST SENSE protocol. 

6.2.5 Host-to-special-input peripheral

A second special co-processor device that can use the processor device
command set is a data acquisition subsystem.  Such subsystems may
multiplex and compact streams of data from many sources.  An application
client could control the data acquisition modes and the selection of
data streams by transmitting control packets to the processor device
server using the SEND command.  The application client could then obtain
the acquired data by executing a series of RECEIVE commands.  The data
acquisition device could also serve as an initiator, selecting
peripheral storage devices and storing the compacted acquired data there
for later access directly by the host or through host to host
communication protocols.  A peripheral failure would be indicated
through the normal CHECK CONDITION / REQUEST SENSE protocol.


7  Commands for all device types

The operation codes for commands that apply to all device types are
listed in table 5.

                Table 5 - Commands for all device types
+=====================================-============-======-===========+
|  Command name                       | Operation  | Type | Subclause |
|                                     |   code     |      |           |
|-------------------------------------+------------+------+-----------|
|  CHANGE DEFINITION                  |    40h     |   O  |   7.1     |
|  COMPARE                            |    39h     |   O  |   7.2     |
|  COPY                               |    18h     |   O  |   7.3     |
|  COPY AND VERIFY                    |    3Ah     |   O  |   7.4     |
|  INQUIRY                            |    12h     |   M  |   7.5     |
|  LOG SELECT                         |    4Ch     |   O  |   7.6     |
|  LOG SENSE                          |    4Dh     |   O  |   7.7     |
|  MODE SELECT(6)                     |    15h     |   Z  |   7.8     |
|  MODE SELECT(10)                    |    55h     |   Z  |   7.9     |
|  MODE SENSE(6)                      |    1Ah     |   Z  |   7.10    |
|  MODE SENSE(10)                     |    5Ah     |   Z  |   7.11    |
|  MOVE MEDIUM (attached) [1]         |    A7h     |   Z  |   7.12    |
|  PORT STATUS                        |    1Fh     |   Z  |   7.13    |
|  READ BUFFER                        |    3Ch     |   O  |   7.14    |
|  READ ELEMENT STATUS (attached) [1] |    B4h     |   Z  |   7.15    |
|  RECEIVE DIAGNOSTIC RESULTS         |    1Ch     |   O  |   7.16    |
|  RELEASE(6)                         |    17h     |   Z  |   7.17    |
|  RELEASE(10)                        |    57h     |   Z  |   7.18    |
|  REQUEST SENSE                      |    03h     |   M  |   7.19    |
|  RESERVE(6)                         |    16h     |   Z  |   7.20    |
|  RESERVE(10)                        |    56h     |   Z  |   7.21    |
|  SEND DIAGNOSTIC                    |    1Dh     |   M  |   7.22    |
|  TEST UNIT READY                    |    00h     |   M  |   7.23    |
|  WRITE BUFFER                       |    3Bh     |   O  |   7.24    |
|---------------------------------------------------------------------|
|Key:  M = Command implementation is mandatory.                       |
|      O = Command implementation is optional.                        |
|      Z = Command implementation is device type specific.            |
|---------------------------------------------------------------------|
|Notes:                                                               |
|   [1] The MOVE MEDIUM and READ ELEMENT STATUS operation codes shown |
|       here should be used by devices with attached medium changers. |
|       The SMC defines other operation codes that can be used by     |
|       independent medium changer devices.  However, some older      |
|       devices with attached medium changers use the operation codes |
|       normally reserved for independent medium changers.            |
+=====================================================================+


7.1 CHANGE DEFINITION command

The CHANGE DEFINITION command (see table 6) modifies the operating
definition of the receiving target with respect to commands from the
sending initiator or for all initators.

                  Table 6 - CHANGE DEFINITION command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (40h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                          Reserved                                     |
|-----+-----------------------------------------------------------------------|
| 2   |                  Reserved                                    |  Save  |
|-----+-----------------------------------------------------------------------|
| 3   |Reserved|                  Definition parameter                        |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 8   |                           Parameter data length                       |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a CHANGE DEFINITION command is
received from an initiator other than the one holding a logical unit
reservation.  If any initiator has an extent reservation on a SCSI
device, no other initiator may affect the operating definition of the
initiator holding the reservation by use of the CHANGE DEFINITION
command.  If the SCSI device allows different operating definitions for
each initiator, then there is no conflict.  Otherwise, a reservation
conflict shall occur.

A save control bit (Save) of zero indicates that the target shall not
save the operating definition.  A Save bit of one indicates that the
target shall save the operating definition to non-volatile memory.

The definition parameter field is defined in table 7.

                 Table 7 - Definition parameter field
+============-====================================+
|   Value    |  Meaning of definition parameter   |
|------------+------------------------------------|
|    00h     |  Use current operating definition  |
|    01h     |  SCSI-1 operating definition       |
|    02h     |  CCS operating definition          |
|    03h     |  SCSI-2 operating definition       |
|    04h     |  SCSI-3 operating definition       |
|  05 - 3Eh  |  Reserved                          |
|    3Fh     |  Manufacturer default definition   |
|  40 - 7Fh  |  Vendor-specific                   |
+=================================================+

  NOTE 4 The current operating definition parameter values establish
  operating definitions compatible with the appropriate SCSI
  specification.  Vendor-specific values are available for those
  applications where more complex operation definition changes are
  required.  Definitions supported by an SCSI device are returned in
  the implemented operating definition page (see 8.4.3).

The parameter data length field specifies the length in bytes of the
parameter data that shall be transferred from the application client to
the device server.  A parameter data length of zero indicates that no
data shall be transferred.  This condition shall not be considered as an
error.  Parameter data length values greater than zero indicate the
number of bytes of parameter data that shall be transferred.

The parameter data is vendor-specific.

  NOTE 5 The parameter data may be used to specify a password to
  validate an operating definition change.

The CHANGE DEFINITION command causes one of the operating definition
modifications listed below:
  a)  Change the operating definition of a logical unit relative to the
      initiator that issued the command.  In this case, the target is
      capable of maintaining an unique operating definition for each
      logical unit relative to each initiator in the system.
  b)  Change the operating definition of the target relative to the
      initiator that issued the command.  In this case, the target is
      capable of maintaining a unique operating definition, for each
      initiator in the system, that applies to all logical units in the
      target.
  c)  The operating definition of a logical unit relative to all
      initiators in the system.  In this case, the target is capable of
      maintaining an unique operating definition for each logical unit
      relative to all initiators in the system.
  d)  The operating definition of the target relative to all initiators
      in the system.  In this case, the target is capable of maintaining
      only one operating definition.

  NOTES
  6 This standard does not provide a direct means to determine which
    of the above four methods has been implemented by the target.  An
    indirect means of determining which method is implemented exists
    in that the target is required to inform affected initiators of
    operating definition changes via the unit attention condition.
  7 The final two modifications listed above may result in
    incompatibilities if other initiators are operated below the
    SCSI-3 level.

The operating definition is modified after successful completion of the
command.  A target shall consider the command successfully completed
based on the rules specified in the SAM.  (The SAM definition of command
completion may include protocol-specific effects.)  The application
client should verify the new operating definition by issuing an INQUIRY
command requesting the implemented operating definition page (see
8.4.1). 

It is permissible for an SCSI-3 device that has its definition changed
to an SCSI-1 device to accept a CHANGE DEFINITION command.

  NOTE 8 The method of changing the operating definition is
  implementation dependent.  Some implementations may require that the
  target's operating mode be reinitialized as if a power-up or hard
  reset had occurred.  Other implementations may modify only those
  operating definitions that are affected by the CHANGE DEFINITION
  command.

If the CHANGE DEFINITION command is not executed successfully for any
reason, the operating definition shall remain the same as it was before
the CHANGE DEFINITION command was attempted.  If it is impossible to
return to the previous operating definition, a unit attention condition
shall be generated.

  NOTE 9 The present operating definition of the target may always be
  interrogated through the INQUIRY command.  When an SCSI-3 target has
  its operating definition changed to CCS, SCSI-1 or SCSI-2 certain
  changes are needed to promote compatibility with preexisting SCSI-1
  initiators.  The recommended changes are described in the SCSI-2
  standard.

After a power-on condition or a hard reset condition, the target shall
set its initial operating definition to the last saved value (if saving
is implemented), or its default value (if saving is not implemented).

7.2 COMPARE command

The COMPARE command (see table 8) provides the means to compare data
from one logical unit with another or the same logical unit in a manner
similar to the COPY command.

                       Table 8 - COMPARE command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (39h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                           |  Pad   |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 4   |                           Parameter list length                       |
|-----+---                                                                 ---|
| 5   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 8   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a COMPARE command is received
from an initiator other than the one holding a logical unit reservation. 
The COMPARE command shall be evaluated for extent reservation conflicts
as if the copy master were performing normal read operations even when
a SCSI device is requested to compare with itself.  For example, if a
COMPARE is issued to logical unit 0 that requests the SCSI device to
compare between from logical unit 0 to logical unit 1, access to logical
unit 1 must also be evaluated for conflict.  COMPARE commands shall be
terminated with CHECK CONDITION status and the sense key shall be set to
DATA PROTECT if any part of the compare operation is prohibited by an
extent reservation.

This command functions in the same manner as the COPY command, except
that the data from the source is compared on a byte-by-byte basis with
the data from the destination.  The parameter list transferred to the
target is the same as for the COPY command.  This parameter list
contains the information to identify the logical units involved in the
comparison and the length of the comparison.  (See 7.3 for additional
information about the COPY command.)

If the comparison is unsuccessful, the command shall be terminated with
CHECK CONDITION status and the sense key shall be set to MISCOMPARE. 
The remaining fields in the sense data shall be set as documented in the
COPY command.


7.3 COPY command

The COPY command (see table 9) provides a means to copy data from one
logical unit to another or the same logical unit.  The device server
that receives and performs the COPY command is called the copy manager. 
The copy manager is responsible for copying data from a logical unit
(source device) to a logical unit (destination device).  These logical
units may reside on different SCSI devices or the same SCSI device (in
fact all three may be the same logical unit).  Some device servers that
implement this command may not support copies to or from another SCSI
device, or may not support third party copies (i.e. both the source and
the destination logical units reside on other SCSI devices).

                        Table 9 - COPY command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (18h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                           |  Pad   |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 3   |                           Parameter list length                       |
|-----+---                                                                 ---|
| 4   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a COPY command is received from
an initiator other than the one holding a logical unit reservation.  The
COPY command shall be evaluated for extent reservation conflicts as if
the copy master were performing normal write and read operations even
when a SCSI device is requested to copy to or from itself.  For example,
if a COPY is issued to logical unit 0 that requests the SCSI device to
copy from logical unit 0 to logical unit 1, access to logical unit 1
must also be evaluated for conflict.  COPY commands shall be terminated
with CHECK CONDITION status and the sense key shall be set to DATA
PROTECT if any part of the copy operation is prohibited by an extent
reservation.

The Pad bit (7.3.7) is used in conjunction with the Cat bit (7.3.7) in
the segment descriptors to define what action should be taken when a
segment of the copy does not fit exactly into an integer number of
destination blocks. 

The parameter list length field specifies the length in bytes of the
parameters that shall be contained in the Data-Out buffer.  A parameter
list length of zero indicates that no data shall be transferred.  This
condition shall not be considered as an error.

The COPY parameter list (see table 10) begins with a four-byte header
that contains the COPY function code and priority.  Following the header
is one or more segment descriptors.

                    Table 10 - COPY parameter list
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+============================================+==========================|
| 0   |         COPY function code                 |         Priority         |
|-----+-----------------------------------------------------------------------|
| 1   |                           Vendor-specific                             |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|=====+=======================================================================|
|     |                         Segment descriptor(s)                         |
|=====+=======================================================================|
| 0   |                           Segment descriptor 0                        |
|- - -+---                                                                 ---|
| n   |                     (See specific table for length.)                  |
|-----+-----------------------------------------------------------------------|
|     |                                 .                                     |
|     |                                 .                                     |
|-----+-----------------------------------------------------------------------|
| 0   |                           Segment descriptor x                        |
|- - -+---                                                                 ---|
| n   |                     (See specific table for length.)                  |
+=============================================================================+

The COPY function code field defines a specific format for the segment
descriptors.  The COPY function codes are defined in table 11.  A target
need not support all function codes for its device type.

                    Table 11 - COPY function codes
+===============================================-========-==========-========+
|       Peripheral device type                  |  COPY  | Segment  |        |
|-----------------------------------------------|function|descriptor|        |
| Source                | Destination           |  code  |  table   |Comments|
|-----------------------+-----------------------+--------+----------+--------|
| Block devices         | Stream devices        |   0Ah  |    12    |        |
| (Device types 0,4,5,7)| (Device types 1,2,3,9)|        |          |        |
| Stream devices        | Block devices         |   0Bh  |    12    |(Note 5)|
| (Device types 1,3,9)  | (Device types 0,4,5,7)|        |          |        |
| Block devices         | Block devices         |   0Ch  |    13    |(Note 5)|
| (Device types 0,4,5,7)| (Device types 0,4,5,7)|        |          |        |
| Stream devices        | Stream devices        |   0Dh  |    14    |        |
| (Device types 1,3,9)  | (Device types 1,2,3,9)|        |          |        |
| Sequential-access     | Sequential-access     |   0Eh  |    15    | Image  |
| (Device type 1)       | (Device type 1)       |        |          |  copy  |
|----------------------------------------------------------------------------|
|  NOTES                                                                     |
|   1 COPY function code 0Fh is reserved for future standardization.         |
|   2 COPY function codes 00h - 04h are reserved for use as defined in the   |
|     SCSI-2 Standard.                                                       |
|   3 COPY function codes 05h - 09h are reserved for standardization after   |
|     adoption of the SCSI-3 Standards.                                      |
|   4 COPY function codes 10h - 1Fh are vendor-specific.                     |
|   5 When using the COMPARE command the destination block device may be a   |
|      CD-ROM device or an optical-memory device that uses read-only media.  |
|   6 See 7.5.1 for peripheral device type definitions.                      |
+============================================================================+

The priority field of the COPY parameter list establishes the relative
priority of this COPY command to other commands being executed by the
same device server.  All other commands are assumed to have a priority
of 1.  Priority 0 is the highest priority, with increasing values
indicating lower priorities.

The segment descriptor formats are determined by the COPY function code. 
The segment descriptor format used for block devices (i.e. write-once,
CD-ROM, optical-memory, and direct-access devices) shall be the same. 
The segment descriptor format used for stream devices (i.e. printer,
processor, communications, and sequential-access devices) shall be the
same.  Thus a copy operation from a write-once device to a printer
device uses the same segment descriptor format as a copy operation from
a direct-access device to a sequential-access device (see table 11). 
The segment descriptor formats are described in 7.3.3 through 7.3.6.  A
maximum of 256 segment descriptors are permitted.  The segment
descriptors are identified by ascending numbers beginning with zero.

7.3.1 Errors detected by the copy manager

Two classes of exception conditions may occur during execution of a COPY
command.  The first class consists of those exception conditions
detected by the copy manager.  These conditions include parity errors
while transferring the COPY command and status byte, invalid parameters
in the COPY command, invalid segment descriptors, and inability of the
copy manager to continue operating.  In the event of such an exception
condition, the copy manager shall:
  a)  terminate the COPY command with CHECK CONDITION status.
  b)  set the valid bit in the sense data to one.  The segment number
      shall contain the number of the segment descriptor being processed
      at the time the exception condition is detected.  The sense key
      shall contain the sense key code describing the exception
      condition (i.e. not COPY ABORTED).  The information field shall
      contain the difference between the number of blocks field in the
      segment descriptor being processed at the time of the failure and
      the number of blocks successfully copied.  This number is the
      residue of unprocessed blocks remaining for the segment
      descriptor.

7.3.2 Errors detected by a target

The second class of errors consists of exception conditions detected by
the SCSI device transferring data at the request of a copy manager.  The
copy manager detects exception conditions by receiving CHECK CONDITION
status from one of the SCSI devices it is managing.  It then shall
recover the sense data associated with the exception condition.  After
recovering the sense data, the copy manager shall clear the ACA
associated with the CHECK CONDITION status.

The copy manager may also be the source or destination SCSI device (or
both).  It shall distinguish between a failure of the management of the
COPY and a failure of the data transfer being requested. It shall then
create the appropriate sense data and manage the ACA condition
internally.

After recovering the sense data and clearing the ACA condition
associated with the detected error, the copy manager shall:
  a)  terminate the COPY command with CHECK CONDITION status.
  b)  the valid bit in the sense data shall be set to one.  The segment
      number shall contain the number of the segment descriptor being
      processed at the time the exception condition is detected.  The
      sense key shall be set to COPY ABORTED.  The information field
      shall contain the difference between the number of blocks field in
      the segment descriptor being processed at the time of the failure
      and the number of blocks successfully copied.  This number is the
      residue of unprocessed blocks remaining for the segment
      descriptor.

The first byte of the command-specific information field shall specify
the starting byte number, relative to the first byte of sense data, of
an area that contains (unchanged) the source logical unit's status byte
and sense data.  A zero value indicates that no status byte or sense
data is being returned for the source logical unit.

The second byte of the command-specific information field shall specify
the starting byte number, relative to the first byte of sense data, of
an area that contains (unchanged) the destination logical unit's status
byte and sense data.  A zero value indicates that no status byte or
sense data is being returned for the destination logical unit.

7.3.3 COPY function codes 0Ah and 0Bh

The format for the segment descriptors for COPY transfers between block
and stream devices is specified in table 12.  This format is required
for COPY function codes 0Ah or 0Bh.  The segment descriptor may be
repeated up to 256 times within the parameter list length specified in
the command descriptor block.

   Table 12 - Segment descriptor for COPY function codes 0Ah and 0Bh
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+===================================+========+==========================|
|  0  |    Reserved                       |  Cat   |     Reserved             |
|-----+-----------------------------------------------------------------------|
|  1  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
|  2  | (MSB)                                                                 |
|--- -+---                        Source target identifier                 - -|
|  9  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 10  | (MSB)                                                                 |
|--- -+---                        Source SCSI Logical Unit Number          - -|
| 17  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 18  | (MSB)                                                                 |
|--- -+---                        Destination target identifier            - -|
| 25  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 26  | (MSB)                                                                 |
|--- -+---                        Destination SCSI Logical Unit Number     - -|
| 33  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 34  | (MSB)                                                                 |
|-----+---                        Stream device block length               ---|
| 35  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 36  | (MSB)                                                                 |
|--- -+---                        Block device number of blocks            - -|
| 39  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 40  | (MSB)                                                                 |
|--- -+---                        Block device logical block address       - -|
| 43  |                                                                 (LSB) |
+=============================================================================+

The source target identifier and source SCSI Logical Unit Number fields
specify the SCSI target identifier and logical unit to copy the data
from for this segment of the COPY command.  The destination target
identifier and destination SCSI Logical Unit Number fields specify the
SCSI target identifier and logical unit to copy the data to for this
segment of the COPY command.  Definitions of the format of target
identifiers and Logical Unit Numbers are protocol-specific.  Some device
servers may not support third-party COPY in which the copy manager is
not the source or destination device.  Some device servers only support
COPY within the SCSI device and not to other SCSI devices.  If an
unsupported COPY operation is requested, the command shall be terminated
with CHECK CONDITION status and the sense key shall be set to ILLEGAL
REQUEST with an additional sense code of INVALID FIELD IN PARAMETER LIST
(see 7.3.1).

A catenate (Cat) bit (optional) of one indicates that the copy manager
shall catenate the last source block of a segment with the first source
block of the next segment if the last source block does not end exactly
at the end of the destination block.  The definition of a Cat bit of
zero depends on the setting of the Pad bit in the command descriptor
block (see 7.3.7).

The stream device block-length field specifies the block length to be
used on the stream device logical unit during this segment of the COPY
command.  If the copy manager knows this block length is not supported,
the command shall be terminated with CHECK CONDITION status and the
sense key shall be set to ILLEGAL REQUEST with an additional sense code
of INVALID FIELD IN PARAMETER LIST.  If the block length is found to be
invalid while executing a read or write operation to the stream device,
the command shall be terminated with CHECK CONDITION status and the
sense key shall be set to COPY ABORTED (see 7.3.2).

The block device number of blocks field specifies the number of blocks
in the current segment to be copied.  A value of zero indicates that no
blocks shall be transferred in this segment.

The block device logical block address field specifies the starting
logical block address on the logical unit for this segment.

7.3.4 COPY function code 0Ch

The format for the segment descriptors for COPY transfers among block
devices is specified in table 13.  This format is required for COPY
function code 0Ch.  The segment descriptor may be repeated up to 256
times within the parameter list length specified in the command
descriptor block.

       Table 13 - Segment descriptor for COPY function code 0Ch
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+========+========+==========================|
|  0  | Reserved                 |   DC   |  Cat   | Reserved                 |
|-----+-----------------------------------------------------------------------|
|  1  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
|  2  | (MSB)                                                                 |
|--- -+---                        Source target identifier                 - -|
|  9  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 10  | (MSB)                                                                 |
|--- -+---                        Source SCSI Logical Unit Number          - -|
| 17  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 18  | (MSB)                                                                 |
|--- -+---                        Destination target identifier            - -|
| 25  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 26  | (MSB)                                                                 |
|--- -+---                        Destination SCSI Logical Unit Number     - -|
| 33  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 34  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 35  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 36  | (MSB)                                                                 |
|--- -+---                        Number of blocks                         - -|
| 39  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 40  | (MSB)                                                                 |
|--- -+---                        Source logical block address             - -|
| 43  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 44  | (MSB)                                                                 |
|--- -+---                        Destination logical block address        - -|
| 47  |                                                                 (LSB) |
+=============================================================================+

See 7.3.3 for definitions of the source target identifier, the source
SCSI Logical Unit Number, the destination target identifier, the
destination SCSI Logical Unit Number, and Cat fields.

A destination count (DC) bit of zero indicates that the number of blocks
field refers to the source logical unit.  A DC bit of one indicates that
the number of blocks field refers to the destination logical unit. 

The number of blocks field specifies the number of blocks to be
transferred to or from (depending on the DC bit) the block device during
this segment.  A value of zero indicates that no blocks shall be
transferred.

The source logical block address field specifies the starting logical
block address on the source block device. 

The destination logical block address field specifies the starting
logical block address on the destination block device.

7.3.5 COPY function code 0Dh

The format for the segment descriptors for COPY transfers among stream
devices is specified by table 14.  This format is required for COPY
function code 0Dh.  The segment descriptor may be repeated up to 256
times within the parameter list length specified in the command
descriptor block.

       Table 14 - Segment descriptor for COPY function code 0Dh
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+========+========+==========================|
|  0  | Reserved                 |   DC   |  Cat   | Reserved                 |
|-----+-----------------------------------------------------------------------|
|  1  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
|  2  | (MSB)                                                                 |
|--- -+---                        Source target identifier                 - -|
|  9  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 10  | (MSB)                                                                 |
|--- -+---                        Source SCSI Logical Unit Number          - -|
| 17  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 18  | (MSB)                                                                 |
|--- -+---                        Destination target identifier            - -|
| 25  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 26  | (MSB)                                                                 |
|--- -+---                        Destination SCSI Logical Unit Number     - -|
| 33  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 34  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 35  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 36  | (MSB)                                                                 |
|-----+---                        Source block length                      ---|
| 37  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 38  | (MSB)                                                                 |
|-----+---                        Destination block length                 ---|
| 39  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 40  | (MSB)                                                                 |
|--- -+---                        Number of blocks                         - -|
| 43  |                                                                 (LSB) |
+=============================================================================+

See 7.3.3 for definitions of the source target identifier, the source
SCSI Logical Unit Number, the destination target identifier, the
destination SCSI Logical Unit Number, and Cat fields.

A destination count (DC) bit of zero indicates that the number of blocks
field refers to the source logical unit.  A DC bit of one indicates that
the number of blocks field refers to the destination logical unit. 

The source block length field specifies the block-length of the source
device for this segment of the COPY.  A zero in this field indicates
variable block-length.  For non-zero values, this field shall match the
logical unit's actual block-length. 

If block-length mismatches are detected prior to the beginning of the
read operation by the copy manager, the command shall be terminated with
CHECK CONDITION status.  The sense key shall be set to ILLEGAL REQUEST
and the additional sense code shall be set to INVALID FIELD IN PARAMETER
LIST (see 7.3.1). 

If the mismatches are detected during the read operation by the copy
manager, the command shall be terminated with CHECK CONDITION status. 
The sense key shall be set to COPY ABORTED (see 7.3.2).  The additional
sense code shall be set to INVALID FIELD IN PARAMETER LIST.

The destination block-length field specifies the block length to be used
on the destination logical unit during the COPY.  Destination block
length mismatches are handled in an analogous manner as source block
length mismatches.

The number of blocks field specifies the number of blocks to be
transferred to or from (depending on the DC bit) the device during this
segment.  A value of zero indicates that no blocks shall be transferred.

7.3.6 COPY function code 0Eh

The format for the segment descriptors for image COPY transfers between
sequential-access devices is specified in table 15.  This format is
required for COPY function code 0Eh.  The segment descriptor may be
repeated up to 256 times within the parameter list length specified in
the command descriptor block.

       Table 15 - Segment descriptor for COPY function code 0Eh
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
|  0  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
|  1  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
|  2  | (MSB)                                                                 |
|--- -+---                        Source target identifier                 - -|
|  9  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 10  | (MSB)                                                                 |
|--- -+---                        Source SCSI Logical Unit Number          - -|
| 17  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 18  | (MSB)                                                                 |
|--- -+---                        Destination target identifier            - -|
| 25  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 26  | (MSB)                                                                 |
|--- -+---                        Destination SCSI Logical Unit Number     - -|
| 33  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 34  |                           Count                                       |
|-----+-----------------------------------------------------------------------|
| 35  |                                                                       |
|--- -+---                        Reserved                                 - -|
| 39  |                                                                       |
|-----+-----------------------------------------------------------------------|
| 40  |                                                                       |
|--- -+---                        Vendor-specific                          - -|
| 43  |                                                                       |
+=============================================================================+

See 7.3.3 for definitions of the source target identifier, the source
SCSI Logical Unit Number, the destination target identifier and the
destination SCSI Logical Unit Number.

The image mode COPY command copies an exact image of the source device
medium to the destination device medium, beginning at their current
positions.  The copy function terminates when the source device:
  a)  encounters an end-of-partition as defined by the source device;
  b)  encounters an end-of-data as defined by the source device (i.e.
      BLANK CHECK sense key);
  c)  has copied the number of consecutive filemarks specified in the
      count field from the source device to the destination device;
  d)  has copied the number of consecutive setmarks specified in the
      count field from the source device to the destination device, if
      the RSmk bit in the device configuration page (see SSC) is one. 

A count field of zero indicates that the COPY command shall not
terminate due to any number of consecutive filemarks or setmarks.  Other
error or exception conditions (e.g. early-warning end-of-partition on
the destination device) may cause the COPY command to terminate prior to
completion.  In such cases, it is not possible to calculate a residue,
so the information field in the sense data shall be set to zero.

7.3.7 Copies with unequal block lengths

When copying data between two devices with unequal block lengths, it is
possible for the last source block to not completely fill the last
destination block for one or more segments in the COPY command.  Two
optional bits are defined to assist in controlling the copy manager's
actions in this circumstance.  The Pad bit (in the command descriptor
block) and the Cat bit (in each applicable segment descriptor) are
defined in table 16.

                 Table 16 - Pad and cat bit definition
+=====-=====-=================================================================+
| Pad | Cat | COPY manager's action                                           |
|-----+-----+-----------------------------------------------------------------|
|  0  |  0  | On inexact segments, it is device specific whether the copy     |
|     |     | manager rejects the COPY command with CHECK CONDITION status and|
|     |     | ILLEGAL REQUEST sense key, the copy manager writes or accepts   |
|     |     | short blocks (variable-block mode on sequential-access devices),|
|     |     | or the copy manager adds pad characters (00h) to the destination|
|     |     | block or strips pad characters from the source block.           |
|     |     |                                                                 |
|  1  |  0  | On inexact segments, the copy manager shall add pad characters  |
|     |     | (00h) to the destination block to completely fill the block, or |
|     |     | it shall strip pad characters from the source block, always     |
|     |     | stopping at the end of a complete block.                        |
|     |     |                                                                 |
|  X  |  1  | The copy manager shall always write or read complete blocks.  On|
|     |     | inexact segments, the remainder of the block contains data from |
|     |     | the next segment.  This code is not valid in the last segment of|
|     |     | the COPY command.                                               |
+=============================================================================+

  NOTE 10 Use of pad characters is intended to assist in managing COPY
  commands between devices of different block lengths where partial-
  block residues may occur.  The application client that issued the
  COPY command is responsible for management of these pad areas (i.e.
  remembering where they are).  One possible method is to write the
  COPY parameter list information to the destination medium prior to
  issuing the COPY command for backup and to read this information
  prior to issuing the COPY command for restore.

7.4 COPY AND VERIFY command

The COPY AND VERIFY command (see table 17) performs the same function as
the COPY command, except that a verification of the data written to the
destination logical unit is performed after the data is written.  The
parameter list transferred to the device server is the same as for the
COPY command.  This parameter list contains the information to identify
the logical units involved in the copy and the length of the copy.  See
clause 7.3 for additional information about the COPY command.

                  Table 17 - COPY AND VERIFY command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (3Ah)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                  | BytChk |  Pad   |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 4   |                           Parameter list length                       |
|-----+---                                                                 ---|
| 5   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 8   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a COPY AND VERIFY command is
received from an initiator other than the one holding a logical unit
reservation.  The COPY AND VERIFY command shall be evaluated for extent
reservation conflicts as if the copy master were performing normal write
and read operations even when a SCSI device is requested to copy to or
from itself.  For example, if a COPY is issued to logical unit 0 that
requests the SCSI device to copy from logical unit 0 to logical unit 1,
access to logical unit 1 must also be evaluated for conflict.  COPY AND
VERIFY commands shall be terminated with CHECK CONDITION status and the
sense key shall be set to DATA PROTECT if any part of the copy operation
is prohibited by an extent reservation.

A byte check (BytChk) bit of zero causes a medium verification to be
performed with no data comparison.  A BytChk bit of one causes a byte-
by-byte comparison of data written on the destination medium and the
data transferred from the source medium.  If the comparison is
unsuccessful for any reason, the copy manager shall return CHECK
CONDITION status with the sense key set to MISCOMPARE.  The remaining
fields in the sense data shall be set as documented in the COPY command.


7.5 INQUIRY command

The INQUIRY command (see table 18) requests that information regarding
parameters of the target and its attached peripheral device(s) be sent
to the application client.  Options allow the application client to
request additional information about the target or logical unit (see
7.5.3) and information about SCSI commands supported by the device
server (see :\X.4).

                      Table 18 - INQUIRY command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (12h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                  |  CmdDt |  EVPD  |
|-----+-----------------------------------------------------------------------|
| 2   |                           Page or Operation code                      |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Allocation length                           |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

The INQUIRY command shall not be affected by reservations.

An enable vital product data (EVPD) bit of one specifies that the device
server shall return the optional vital product data specified by the
page code field.  If the target does not support vital product data and
this bit is set to one, the device server shall return CHECK CONDITION
status with the sense key set to ILLEGAL REQUEST and an additional sense
code of INVALID FIELD IN CDB.

A command support data (CmdDt) bit of one specifies that the device
server shall return the optional command support data specified by the
operation code field.  If the device server does not support returning
command data and this bit is set to one, the device server shall return
CHECK CONDITION status with the sense key set to ILLEGAL REQUEST and an
additional sense code of INVALID FIELD IN CDB.  Details of the command
support data can be found in clause 7.5.4.

  NOTE 11 A SCSI-2 device should treat the CmdDt bit as a reserved
  field.  Therefore, a SCSI-2 device that receives an INQUIRY command
  with the CmdDt bit set to one should return a CHECK CONDITION status
  with the sense key set to ILLEGAL REQUEST.

If both the EVPD and CmdDt bits are zero, the device server shall return
the standard INQUIRY data (see clause 7.5.1).  If the page or operation
code field is not zero when both EVPD and CmdDt are zero, the device
server shall return CHECK CONDITION status with the sense key set to
ILLEGAL REQUEST and an additional sense code of INVALID FIELD IN CDB.

If both the EVPD and CmdDt bits are one, the device server shall return
CHECK CONDITION status with the sense key set to ILLEGAL REQUEST and an
additional sense code of INVALID FIELD IN CDB.

When the EVPD bit is one, the page or operation code field specifies
which page of vital product data information the device server shall
return (see 8.4).  When the CmdDt bit is one, the page or operation code
field specifies the SCSI operation code for which device server shall
return command support data (see 7.5.4).

The INQUIRY command shall return CHECK CONDITION status only when the
device server cannot return the requested INQUIRY data. 

  NOTE 12 The INQUIRY data should be returned even though the
  peripheral device may not be ready for other commands.

If an INQUIRY command is received from an initiator with a pending unit
attention condition (i.e. before the target reports CHECK CONDITION
status), the target shall perform the INQUIRY command and shall not
clear the unit attention condition (see the SAM).

  NOTES
  13  The INQUIRY command is typically used by an application client
      after a hard reset or power-up condition to determine the device
      types for system configuration.  To minimize delays after a hard
      reset or power-up condition, the standard INQUIRY data should be
      available without incurring any media access delays.  If the
      device server does store some of the INQUIRY data on the media, it
      may return zeros or ASCII spaces (20h) in those fields until the
      data is available from the media.
  14  The INQUIRY data may change as the target executes its
      initialization sequence or in response to a CHANGE DEFINITION
      command.  For example, the target may contain a minimum command
      set in its non-volatile memory and may load its final firmware
      from the media when it becomes ready.  After the target has loaded
      the firmware, it may support more options and therefore return
      different supported options information in the INQUIRY data.


7.5.1 Standard INQUIRY data

The standard INQUIRY data (see table 19) contains 36 required bytes,
followed by a variable number of vendor-specific parameters.  Bytes 56
through 95, if returned, are reserved for future standardization.

                Table 19 - Standard INQUIRY data format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |  RMB   |                  Device-type modifier                        |
|-----+-----------------------------------------------------------------------|
| 2   |   ISO version   |       ECMA version       |  ANSI-approved version   |
|-----+-----------------+-----------------------------------------------------|
| 3   |  AERC  | TrmTsk | NormACA|Reserved|         Response data format      |
|-----+-----------------------------------------------------------------------|
| 4   |                           Additional length (n-4)                     |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |    Reserved     |  Port  | DualP  | MChngr |     Reserved to SIP      |
|-----+-----------------------------------+--------+--------------------------|
| 7   | RelAdr |     Reserved to SIP      | Linked |TranDis | CmdQue | RsvSIP |
|-----+-----------------------------------------------------------------------|
| 8   | (MSB)                                                                 |
|- - -+- -                        Vendor identification                    - -|
| 15  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 16  | (MSB)                                                                 |
|- - -+- -                        Product identification                   - -|
| 31  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 32  | (MSB)                                                                 |
|- - -+- -                        Product revision level                   - -|
| 35  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 36  |                                                                       |
|- - -+- -                        Vendor-specific                          - -|
| 55  |                                                                       |
|-----+-----------------------------------------------------------------------|
| 56  |                                                                       |
|- - -+- -                        Reserved                                 - -|
| 95  |                                                                       |
|=====+=======================================================================|
|     |                       Vendor-specific parameters                      |
|=====+=======================================================================|
| 96  |                                                                       |
|- - -+- -                        Vendor-specific                          - -|
| n   |                                                                       |
+=============================================================================+

The peripheral qualifier and peripheral device-type fields identify the
device currently connected to the logical unit.  If the target is not
capable of supporting a device on this logical unit, this field shall be
set to 7Fh (peripheral qualifier set to 011b and peripheral device type
set to 1Fh).  The peripheral qualifier is defined in table 20 and the
peripheral device type is defined in table 21.

                    Table 20 - Peripheral qualifier
+=========-===================================================================+
|Qualifier|  Description                                                      |
|---------+-------------------------------------------------------------------|
|   000b  |  The specified peripheral device type is currently connected to   |
|         |  this logical unit.  If the target cannot determine whether or    |
|         |  not a physical device is currently connected, it shall also use  |
|         |  this peripheral qualifier when returning the INQUIRY data.       |
|         |  This peripheral qualifier does not mean that the device is ready |
|         |  for access by the initiator.                                     |
|         |                                                                   |
|   001b  |  The target is capable of supporting the specified peripheral     |
|         |  device type on this logical unit;  however, the physical device  |
|         |  is not currently connected to this logical unit.                 |
|         |                                                                   |
|   010b  |  Reserved                                                         |
|         |                                                                   |
|   011b  |  The target is not capable of supporting a physical device on     |
|         |  this logical unit. For this peripheral qualifier the peripheral  |
|         |  device type shall be set to 1Fh to provide compatibility with    |
|         |  previous versions of SCSI.  All other peripheral device type     |
|         |  values are reserved for this peripheral qualifier.               |
|         |                                                                   |
|   1XXb  |  Vendor-specific                                                  |
+=============================================================================+


                   Table 21 - Peripheral device type
+=============-===============================================================+
|    Code     |  Description                                                  |
|-------------+---------------------------------------------------------------|
|     00h     |  Direct-access device (e.g. magnetic disk)                    |
|     01h     |  Sequential-access device (e.g. magnetic tape)                |
|     02h     |  Printer device                                               |
|     03h     |  Processor device                                             |
|     04h     |  Write-once device (e.g. some optical disks)                  |
|     05h     |  CD-ROM device                                                |
|     06h     |  Scanner device                                               |
|     07h     |  Optical memory device (e.g. some optical disks)              |
|     08h     |  Medium changer device (e.g. jukeboxes)                       |
|     09h     |  Communications device                                        |
|  0Ah - 0Bh  |  Defined by ASC IT8 (Graphic arts pre-press devices)          |
|     0Ch     |  Array controller device (e.g. RAID array controller)         |
|  0Dh - 1Eh  |  Reserved                                                     |
|     1Fh     |  Unknown or no device type                                    |
+=============================================================================+

A removable medium (RMB) bit of zero indicates that the medium is not
removable.  A RMB bit of one indicates that the medium is removable.

The device-type modifier field was defined in SCSI-1 to permit vendor-
specific qualification codes of the device type.  This field is retained
for compatibility with SCSI-1.  Device servers that do not support this
field should return a value of zero.

The usage of non-zero code values in the ISO version and ECMA version
fields are defined by the International Organization for Standardization
and the European Computer Manufacturers Association, respectively.  A
zero code value in these fields shall indicate that the device server
does not claim compliance to the ISO version of SCSI (ISO 9316) or the
ECMA version of SCSI (ECMA-111). It is possible to claim compliance to
more than one of these SCSI standards.

The ANSI-approved version field indicates the implemented version of
this standard and is defined in table 22.

                   Table 22 - ANSI-approved version
+=============-===============================================================+
|    Code     |  Description                                                  |
|-------------+---------------------------------------------------------------|
|      0h     |  The device might or might not comply to an ANSI-approved     |
|             |  standard.                                                    |
|      1h     |  The device complies to ANSI X3.131-1986 (SCSI-1).            |
|      2h     |  The device complies to ANSI X3.131-1994 (SCSI-2).            |
|      3h     |  The device complies to this version of SCSI.  This code is   |
|             |  reserved to designate this standard upon approval by ANSI.   |
|   4h - 7h   |  Reserved                                                     |
+=============================================================================+

The asynchronous event reporting capability (AERC) bit indicates that
the device supports the asynchronous event reporting capability as
defined in the SAM.  The AERC bit is qualified by the peripheral device
type field as follows:
  a)  Processor device-type definition:  An AERC bit of one indicates
      that the processor device is capable of accepting asynchronous
      event reports.  An AERC bit of zero indicates that the processor
      device does not support asynchronous event reports.
  b)  All other device-types:  This bit is reserved.
Details of the asynchronous event reporting support are protocol-
specific.

A terminate task (TrmTsk) bit of one indicates that the device server
supports the TERMINATE TASK task management function as defined in the
SAM.  A value of zero indicates that the device server does not support
the TERMINATE TASK task management function.

The Normal ACA Supported bit (NormACA) of one indicates that the device
server supports setting the NACA bit to one in the Control Byte of the
CDB (as defined in the SAM).  A NormACA bit of zero indicates that the
device server does not support setting the NACA bit to one.

A response data format value of zero indicates the INQUIRY data format
is as specified in SCSI-1.  A response data format value of one
indicates compatibility with some products that were designed prior to
the development of this standard (i.e. CCS).  A response data format
value of two indicates that the data shall be in the format specified in
this standard.  Response data format values greater than two are
reserved.

The additional length field shall specify the length in bytes of the
parameters.  If the allocation length of the command descriptor block is
too small to transfer all of the parameters, the additional length shall
not be adjusted to reflect the truncation.

The Port bit is only defined when the DualP bit is set to one.  A Port
bit of zero shall indicate that the device server received the INQUIRY
command on port A.  A Port bit of one shall indicate that the device
server received the INQUIRY command on port B.  When the DualP bit is
zero, the Port bit also shall be zero.

A Dual Port (DualP) bit of one shall indicate that this is a dual port
device and conforms to the SCSI-3 dual port requirements found in the
various applicable standards.  A value of zero indicates that this
device has a single port and does not implement the dual port
requirements.

A medium changer (MChngr) bit of one indicates that the device is
embedded within or attached to a medium transport element.  See the SMC
for details about medium changers, including defintions of terms.  The
application client may send the MOVE MEDIUM (attached) and READ ELEMENT
STATUS (attached) commands to the device server for the purpose of
controlling the medium transport elements.  The MChngr bit is valid only
when the RMB bit is equal to one.

The Reserved to SIP fields and RsvSIP bit are reserved to the SCSI-3
Interlocked Protocol (SIP).  The specific usages of the Reserved to SIP
fields and bits is defined in clause 7.5.2.  For details on how the
Reserved to SIP fields and bits relate to the SCSI-3 Interlocked
Protocol see the SIP.  SCSI devices that use a protocol other than SIP
shall return zero in all Reserved to SIP fields and bits.

A relative addressing (RelAdr) bit of one indicates that the device
server supports the relative addressing mode.  If this bit is set to
one, the linked command (Linked) bit shall also be set to one; since
relative addressing can only be used with linked commands.  A RelAdr bit
of zero indicates the device server does not support relative
addressing.

A linked command (Linked) bit of one indicates that the device server
supports linked commands.  A value of zero indicates the device server
does not support linked commands.

A command queuing (CmdQue) bit of one indicates that the device supports
tagged command queuing for this logical unit.  A value of zero indicates
the device does not support tagged command queuing for this logical
unit.

ASCII data fields shall contain only graphic codes (i.e. code values 20h
through 7Eh).  Left-aligned fields shall place any unused bytes at the
end of the field (highest offset) and the unused bytes shall be filled
with space characters (20h).  Right-aligned fields shall place any
unused bytes at the start of the field (lowest offset) and the unused
bytes shall be filled with space characters (20h).

The vendor identification field contains eight bytes of ASCII data
identifying the vendor of the product.  The data shall be left aligned
within this field.  

  NOTE 15 It is intended that this field provide a unique vendor
  identification of the manufacturer of the SCSI device.  In the
  absence of a formal registration procedure, X3T10 maintains a list
  of vendor identification codes in use.  Vendors are requested to
  voluntarily submit their identification codes to X3T10 to prevent
  duplication of codes (see annex C).

The product identification field contains sixteen bytes of ASCII data as
defined by the vendor.  The data shall be left-aligned within this
field.

The product revision level field contains four bytes of ASCII data as
defined by the vendor.  The data shall be left-aligned within this field.

7.5.2 SIP-specific INQUIRY data

Portions of bytes 6 and 7 of the standard INQUIRY data shall be reserved
for use by the SCSI-3 Interlocked Protocol.  The format of the SIP-
specific standard INQUIRY data is shown in table 23.  SCSI devices that
use a protocol other than SIP shall return zero in all SIP-specific
standard INQUIRY data fields.

              Table 23 - SIP-specific INQUIRY data format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+============================================+========+========+========|
| 6   |            standard INQUIRY data           |ACKQREQQ| Addr32 | Addr16 |
|-----+--------------------------------------------+--------+--------+--------|
| 7   | StdINQ | WBus32 | WBus16 |  Sync  | StdINQ |TranDis | StdINQ | SftRe  |
+=============================================================================+

The standard INQUIRY data field and StdINQ bits are defined in the
standard INQUIRY data, see clause 7.5.1.

For details on how the SIP-specific bits relate to the SCSI-3
Interlocked Protocol see the SIP.

A ACKQ/REQQ (ACKQREQQ) bit of one indicates that the device supports a
request and acknowledge data transfer handshake on a Q cable.

A wide SCSI address 32 (Addr32) bit of one indicates that the device
supports 32-bit wide SCSI addresses.  A value of zero indicates that the
device does not support 32-bit wide SCSI addresses.

A wide SCSI address 16 (Addr16) bit of one indicates that the device
supports 16-bit wide SCSI addresses.  A value of zero indicates that the
device does not support 16-bit wide SCSI addresses.

  NOTE 16 If the values of both the Addr16 and Addr32 bits are zero,
  the device only supports 8-bit wide SCSI addresses.

A wide bus 32 (Wbus32) bit of one indicates that the device supports 32-
bit wide data transfers.  A value of zero indicates that the device does
not support 32-bit wide data transfers.

A wide bus 16 (Wbus16) bit of one indicates that the device supports 16-
bit wide data transfers.  A value of zero indicates that the device does
not support 16-bit wide data transfers.

  NOTE 17 If the values of both the Wbus16 and Wbus32 bits are zero,
  the device only supports 8-bit wide data transfers.

A synchronous transfer (Sync) bit of one indicates that the device
supports synchronous data transfer.  A value of zero indicates the
device does not support synchronous data transfer.

A transfer disable (TranDis) bit of one indicates that the device
supports the CONTINUE I/O PROCESS and TARGET TRANSFER DISABLE messages. 
A TransDis bit of zero indicates that the device does not support one or
both of these messages (see the SIP).

A soft reset (SftRe) bit of zero indicates that the device responds to
the RESET condition with a hard RESET (see the SAM).  A SftRe bit of one
indicates that the device responds to the RESET condition with the soft
RESET alternative (see the SIP).

         Table 24 - Maximum logical device configuration table
+======================================-======================================+
| ACKQREQQ Addr32 Addr16 Wbus32 Wbus16 | Description                          |
|--------------------------------------+--------------------------------------|
|    0       0      0      0      0    | 8 bit wide data path on a single     |
|                                      | cable with 8 SCSI IDs supported      |
|                                      | (Possible cable connects to this     |
|                                      | device configuration are A and P)    |
|--------------------------------------+--------------------------------------|
|    0       0      0      0      1    | 16 bit wide data path on a single    |
|                                      | cable with 8 SCSI IDs supported      |
|                                      | (The only possible cable connect     |
|                                      | to this device configuration is P)   |
|--------------------------------------+--------------------------------------|
|    0       0      1      0      1    | 16 bit wide data path on a single    |
|                                      | cable with 16 SCSI IDs supported     |
|                                      | (The only possible cable connect     |
|                                      | to this device configuration is P)   |
|--------------------------------------+--------------------------------------|
|    1       0      0      1      0    | 32 bit wide data path on two cables  |
|                                      | with 8 SCSI IDs supported    (The    |
|                                      | only possible cable connects to this |
|                                      | device configuration are P and P/Q)  |
|--------------------------------------+--------------------------------------|
|    1       0      1      1      0    | 32 bit wide data path on two cables  |
|                                      | with 16 SCSI IDs supported   (The    |
|                                      | only possible cable connects to this |
|                                      | device configuration are P and P/Q)  |
|--------------------------------------+--------------------------------------|
|    1       1      0      1      0    | 32 bit wide data path on two cables  |
|                                      | with 32 SCSI IDs supported   (The    |
|                                      | only possible cable connects to this |
|                                      | device configuration are P and P/Q)  |
+=============================================================================+

7.5.3 Vital product data

Implementation of vital product data is optional.  The information
returned consists of configuration data (e.g., vendor identification,
product identification, model, serial number), manufacturing data (e.g.,
plant and date of manufacture), field replaceable unit data and other
vendor- or device-specific data.  

The application client requests the vital product data information by
setting the EVPD bit to one and specifying the page code of the desired
vital product data (see 8.4).  If the target does not implement the
requested page it shall return CHECK CONDITION status.  The a sense key
shall be set to ILLEGAL REQUEST and the additional sense code shall be
set to INVALID FIELD IN CDB.

  NOTES
  18  The device server should have the ability to execute the INQUIRY
      command even when a device error occurs that prohibits normal
      command execution.  In such a case, CHECK CONDITION status should
      be returned for commands other than INQUIRY or REQUEST SENSE.  The
      sense data returned may contain the field replaceable unit code. 
      The vital product data should be obtained for the failing device
      using the INQUIRY command.
  19  This standard defines a format that allows device-independent
      application client software to display the vital product data
      returned by the INQUIRY command.  For example, the application
      client may display the data associated for the field replaceable
      unit returned in the sense data.  The contents of the data may be
      vendor-specific; therefore, it may not be usable without detailed
      information about the device.
  20  This standard does not define the location or method of storing
      the vital product data.  The retrieval of the data may require
      completion of initialization operations within the device that may
      induce delays before the data is available to the application
      client.  Time-critical requirements are an implementation
      consideration and are not addressed in this standard.

7.5.4 Command support data

Implementation of command support data is optional.  The application
client requests the command support data information by setting the
CmdDt bit to one and specifying the SCSI operation code of the desired
CDB.

If the device server implements the requested SCSI operation code, it
shall return the data shown in table 25.  If the device server does not
implement the requested SCSI operation code it shall return the
peripheral qualifier and type byte followed by a byte containing 01h.

                Table 25 - Command support data format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved         |  VSop  | StdOp  | Valid  |
|-----+--------------------------------------------+--------------------------|
| 2   |   ISO version   |       ECMA version       |  ANSI-approved version   |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           CDB size (m - 5)                            |
|-----+-----------------------------------------------------------------------|
| 6   |                                                                       |
|- - -+- -                        CDB usage data                           - -|
| m   |                                                                       |
+=============================================================================+

The peripheral qualifier field and the peripheral device type field are
defined in 7.5.1.

If the Valid bit is one, the remaining data is as defined in this
standard.  If the Valid bit is zero, the remaining data is not present
or undetermined.  One possible reason for the Valid bit being zero is
the device server's inability to retrieve information stored on the
media.

If the operation code being tested is supported as defined in a SCSI
standard, the StdOp bit shall be one, the VSop bit shall be zero, and
the ISO, ECMA and ANSI-approved version fields shall contain standard
INQUIRY data naming the standard that defines the SCSI command. 
(Information about standard INQUIRY data can be found in clause 7.5.1.) 
If the operation code being tested is supported in a vendor-specific
way, the StdOp bit shall be zero, the VSop bit shall be one, and
interpretation of the ISO, ECMA and ANSI-approved version fields by the
application client shall be vendor-specific.  If the operation code
being tested is not supported, both the StdOP and VSop bits shall be
zero.

The CDB size field shall contain the number of bytes in the CDB for the
operation code being tested, and the size of the CDB usage data in the
return data.  The group code field in each operation code defines the
CDB length.  Except for group 6 and group 7 operation codes, CDB lengths
are defined in the SAM.  Where specified, the CDB size field shall
contain the value defined in the SAM for the operation code group being
processed.

  NOTE 21 The CDB size field is provided primarily for the convenience
  of the application client.  In most cases, the size is known from
  the operation code group before the INQUIRY command with CmdDt set
  to one is sent.

The CDB usage data shall contain information about the CDB for the
operation code being tested.  The first byte of the CDB usage data shall
contain the operation code for the operation being tested.  All bytes
except the first byte of the CDB usage data shall contain a usage map
for bits in the CDB for the operation code being tested.

The bits in the usage map shall have a one-for-one correspondence to an
actual CDB for the operation code being tested.  If the device server
evaluates a bit as all or part of a field in the CDB for the operation
code being tested, the usage map shall contain a one in the correspond-
ing bit position.  If the device server ignores a bit in the CDB for the
operation code being tested, the usage map shall contain a zero in the
corresponding bit position.

The usage map bits for a given CDB field shall have the same value. 
Usage map bits for all reserved CDB fields shall be zero.

Thus, the CDB usage bit map for the INQUIRY command for a device server
that implements command support data but not vital product data would
be: 12h, 02h, FFh, 00h, FFh, 07h.  This example assumes that the SAM
defines uses for only the low-order three bits of the Control byte. 
Note that the first byte contains the operation code and the remaining
bytes contain the usage map.


7.6 LOG SELECT command

The LOG SELECT command (see table 26) provides a means for an
application client to manage statistical information maintained by the
device about the device or its logical units.  Device servers that
implement the LOG SELECT command shall also implement the LOG SENSE
command.  Structures in the form of log parameters within log pages are
defined as a way to manage the log data.  The LOG SELECT command
provides for sending zero or more log pages via the Data-Out buffer. 
This standard defines the format of the log pages, but does not define
the exact conditions and events that are logged.

                     Table 26 - LOG SELECT command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (4Ch)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                  |  PCR   |   SP   |
|-----+-----------------------------------------------------------------------|
| 2   |        PC       |         Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   | (MSB)                                                                 |
|-----+---                        Parameter list length                    ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a LOG SELECT command is received
from an initiator other than the one holding a logical unit reservation. 
The LOG SELECT command shall not be affected by extent reservations.

A parameter code reset (PCR) bit of one and a parameter list length of
zero shall cause all implemented parameters to be set to the target-
defined default values (e.g. zero).  If the PCR bit is one and the
parameter list length is greater than zero, the command is terminated
with CHECK CONDITION status.  The sense key shall be set to ILLEGAL
REQUEST and the additional sense code shall be set to INVALID FIELD IN
CDB.  A PCR bit of zero specifies that the log parameters shall not be
reset.

A save parameters (SP) bit of one indicates that after performing the
specified LOG SELECT operation the target shall save to non-volatile
memory all parameters identified as savable by the DS bit in the log
page (see 8.2).  A SP bit of zero specifies that parameters shall not be
saved.

Saving of log parameters is optional and indicated for each log
parameter by the DS bit in the page.  Log parameters also may be saved
at vendor-specific times subject to the TSD bit (see 8.2) in the log
parameter or the GLTSD bit in the control mode page (see clause 8.3.1). 
If the target does not implement saved parameters for any log parameter
and the SP bit is set to one, the command shall be terminated with CHECK
CONDITION status.  The sense key shall be set to ILLEGAL REQUEST, and
the additional sense code set to INVALID FIELD IN CDB. 

It is not an error to set the SP bit to one and to set the DS bit of a
log parameter to one.  In this case, the parameter value for that log
parameter is not saved.

The page control (PC) field defines the type of parameter values to be
selected.  The page control field is defined in table 27.

                     Table 27 - Page control field
   +=======-==============================-==============================+
   | Type  |  LOG SELECT parameter values |  LOG SENSE parameter values  |
   |-------+------------------------------+------------------------------|
   |  00b  |  Current threshold values    |  Threshold values            |
   |  01b  |  Current cumulative values   |  Cumulative values           |
   |  10b  |  Default threshold values    |  Default threshold values    |
   |  11b  |  Default cumulative values   |  Default cumulative values   |
   +=====================================================================+

The current cumulative values may be updated by the target or by the
application client using the LOG SELECT command to reflect the cumula-
tive number of events experienced by the target.  Fields in the para-
meter control byte (8.2) of each log parameter control the updating and
saving of the current cumulative parameters.  

The target shall set the current threshold parameters to the default
threshold values in response to a LOG SELECT command with the PC field
set to 10b and the parameter list length field set to zero.

The target shall set all cumulative parameters to their default values
in response to a LOG SELECT command with the PC field set to 11b and the
parameter list length field set to zero. 

The current threshold value can only be modified by the application
client via the LOG SELECT command.  If the application client attempts
to change current threshold values that are not available or not
implemented for that log parameter, then the device server shall
terminate the LOG SELECT command with CHECK CONDITION status, the sense
key set to ILLEGAL REQUEST, and the additional sense code set to INVALID
FIELD IN PARAMETER LIST.  The saving of current threshold parameters and
the criteria for the current threshold being met are controlled by bits
in the parameter control byte (8.2).

  NOTE 22 Pages or log parameters that are not available may become
  available at some later time (e.g. after the device has become
  ready).

The parameter list length field specifies the length in bytes of the
parameter list that shall be located in the Data-Out buffer.  A para-
meter list length of zero indicates that no pages shall be transferred. 
This condition shall not be considered an error.  If an application
client sends page codes or parameter codes within the parameter list
that are reserved or not implemented by the target, the device server
shall terminate the LOG SELECT command with CHECK CONDITION status.  The
sense key shall be set to ILLEGAL REQUEST and the additional sense code
set to INVALID FIELD IN PARAMETER LIST.

If a parameter list length results in the truncation of any log para-
meter, the device server shall terminate the command with CHECK CONDI-
TION status.  The sense key shall be set to ILLEGAL REQUEST and the
additional sense code set to INVALID FIELD IN CDB. 

The application client should send pages in ascending order by page code
value if the Data-Out buffer contains multiple pages.  If the Data-Out
buffer contains multiple log parameters within a page, they should be
sent in ascending order by parameter code value.  The device server
shall return CHECK CONDITION status if the application client sends
pages out of order or parameter codes out of order.  The sense key shall
be set to ILLEGAL REQUEST and the additional sense code set to INVALID
FIELD IN PARAMETER LIST.

  NOTE 23 Initiators should issue LOG SENSE commands prior to issuing
  LOG SELECT commands to determine supported pages and page lengths.

The target may provide independent sets of log parameters for each
logical unit or for each combination of logical units and initiators. 
If the target does not support independent sets of log parameters and
any log parameters are changed that affect other initiators, then the
target shall generate a unit attention condition for all initiators
except the one that issued the LOG SELECT command (see the SAM).  This
unit attention condition shall be returned with an additional sense code
of LOG PARAMETERS CHANGED.

If an application client sends a log parameter that is not supported by
the target, the device server shall terminate the command with CHECK
CONDITION status, set the sense key to ILLEGAL REQUEST, and set the
additional sense code to INVALID FIELD IN PARAMETER LIST.

Additional information about the LOG SELECT command can be found in
informative annex A.


7.7 LOG SENSE command

The LOG SENSE command (see table 28) provides a means for the applica-
tion client to retrieve statistical or other operational information
maintained by the device about the device or its logical units.  It is
a complementary command to the LOG SELECT command.

                     Table 28 - LOG SENSE command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (4Dh)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                  |  PPC   |    SP  |
|-----+-----------------------------------------------------------------------|
| 2   |        PC        |        Page code                                   |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   | (MSB)                                                                 |
|-----+---                        Parameter pointer                        ---|
| 6   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 7   | (MSB)                                                                 |
|-----+---                        Allocation length                        ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a LOG SENSE command is received
from an initiator other than the one holding a logical unit reservation. 
The LOG SENSE command shall not be affected by extent reservations.

The parameter pointer control (PPC) bit controls the type of parameters
requested from the device server:
  a)  A PPC bit of one indicates that the device server shall return a
      log page with parameter code values that have changed since the
      last LOG SELECT or LOG SENSE command.  The device server shall
      return only those parameter codes following the parameter pointer
      field.
  b)  A PPC bit of zero indicates that the log parameter requested from
      the device server shall begin with the parameter code specified in
      the parameter pointer field and return the number of bytes
      specified by the allocation length field in ascending order of
      parameter codes from the specified log page.  A PPC bit of zero
      and a parameter pointer field of zero shall cause all available
      log parameters for the specified log page to be returned to the
      application client subject to the specified allocation length.

Saving parameters is an optional function of the LOG SENSE command.  If
the target does not implement saving log parameters and if the save
parameters (SP) bit is one, then the device server shall return CHECK
CONDITION status, set the sense key to ILLEGAL REQUEST, and set the
additional sense code to INVALID FIELD IN CDB. 

An SP bit of zero indicates the device server shall perform the speci-
fied LOG SENSE command and shall not save any log parameters.  If saving
log parameters is implemented, an SP bit of one indicates that the
device server shall perform the specified LOG SENSE command and shall
save all log parameters identified as savable by the DS bit (8.2) to a
non-volatile, vendor-specific location. 

The page control (PC) field defines the type of parameter values to be
selected (see 7.6 for the definition of the page control field).  The
parameter values returned by a LOG SENSE command are determined as
follows:
  a)  The specified parameter values at the last update (in response to
      a LOG SELECT or LOG SENSE command or done automatically by the
      target for cumulative values).
  b)  The saved values, if an update has not occurred since the last
      power-on or hard reset condition and saved parameters are
      implemented.
  c)  The default values, if an update has not occurred since the last
      power-on or hard reset condition and saved values are not
      available or not implemented.

The page code field identifies which page of data is being requested
(see 8.2).  If the page code is reserved or not implemented, the device
server shall terminate the command with CHECK CONDITION status.  The
sense key shall be set to ILLEGAL REQUEST with the additional sense code
set to INVALID FIELD IN CDB. 
The parameter pointer field allows the application client to request
parameter data beginning from a specific parameter code to the maximum
allocation length or the maximum parameter code supported by the target,
whichever is less.  If the value of the parameter pointer field is
larger than the largest available parameter code that can be returned by
the target on the specified page, the device server shall terminate the
command with CHECK CONDITION status.  The sense key shall be set to
ILLEGAL REQUEST and the additional sense code shall be set to INVALID
FIELD IN CDB. 

Log parameters within the specified log page shall be transferred in
ascending order according to parameter code.

Additional information about the LOG SENSE command can be found in
informative annex A.


7.8 MODE SELECT(6) command

The MODE SELECT(6) command (see table 29) provides a means for the
application client to specify medium, logical unit, or peripheral device
parameters to the target.  Device servers that implement the MODE SELECT
command shall also implement the MODE SENSE command.  Application
clients should issue MODE SENSE prior to each MODE SELECT to determine
supported pages, page lengths, and other parameters.

                   Table 29 - MODE SELECT(6) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (15h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |         Reserved         |   PF   |         Reserved         |  SP    |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Parameter list length                       |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a MODE SELECT command is
received from an initiator other than the one holding a logical unit
reservation.  If an initiator has an extent reservation on a SCSI
device, and an another initiator sends a MODE SELECT, a reservation
conflict shall occur if the MODE SELECT affects the manner in which
access to an extent reserved by the first initiator is performed.  If
the MODE SELECT does not affect access to the reserved extent, or mode
parameters are saved for each initiator, then a reservation conflict
shall not occur.

If a target supports saved pages, it may save only one copy of the page
for each logical unit and have it apply to all initiators, or it may
save separate copies for each initiator for each logical unit.  Dual
port implementations may save one copy per logical unit and have it
apply to all initiators on both ports or save a separate copy per
logical unit for each initiator on each port.  If separate copies are
saved, the target shall maintain separate current values for each
combination of initiator and logical unit that it detects.  Pages that
are common to all initiators are not required to have multiple copies.

If an application client sends a MODE SELECT command that changes any
parameters applying to other initiators, the target shall generate a
unit attention condition for all initiators except the one that issued
the MODE SELECT command (see the SAM).  The target shall set the
additional sense code to MODE PARAMETERS CHANGED. 

The target may provide for independent sets of parameters for each
attached logical unit or for each combination of logical unit and
initiator.  If independent sets of parameters are implemented, and a
third party reservation is requested, the device server shall transfer
the set of parameters in effect for the application client that sent the
RESERVE command to the parameters used for commands from the third party
device (see 7.19.3).

A page format (PF) bit of zero indicates that the MODE SELECT parameters
are as specified in SCSI-1, (i.e. all parameters after the block
descriptors are vendor-specific).  A PF bit of one indicates that the
MODE SELECT parameters following the header and block descriptor(s) are
structured as pages of related parameters and are as specified in this
standard.

A save pages (SP) bit of zero indicates the device server shall perform
the specified MODE SELECT operation, and shall not save any pages.  An
SP bit of one indicates that the device server shall perform the
specified MODE SELECT operation, and shall save to a non-volatile
vendor-specific location all the savable pages including any sent in the
Data-Out buffer.  The SP bit is optional, even when mode pages are
supported by the target.  Pages that are saved are identified by the
parameter savable bit that is returned in the page header by the MODE
SENSE command (see 8.3).  If the PS bit is set in the MODE SENSE data
then the page shall be savable by issuing a MODE SELECT command with the
SP bit set.  If the target does not implement saved pages and the SP bit
is set to one, the command shall be terminated with CHECK CONDITION
status. The sense key shall be set to ILLEGAL REQUEST, and the
additional sense code set to INVALID FIELD IN CDB.

The parameter list length field specifies the length in bytes of the
mode parameter list that shall be contained in the Data-Out buffer.  A
parameter list length of zero indicates that the Data-Out buffer shall
be empty.  This condition shall not be considered as an error.

The device server shall terminate the command with CHECK CONDITION
status if the parameter list length results in the truncation of any
mode parameter header, mode parameter block descriptor(s), or mode page. 
The sense key shall be set to ILLEGAL REQUEST, and the additional sense
code shall be set to PARAMETER LIST LENGTH ERROR. 

The mode parameter list for the MODE SELECT and MODE SENSE commands is
defined in 8.3.  Parts of each mode parameter list are uniquely defined
for each device-type.  Definitions for the parts of each mode parameter
list that are uniquely for each device-type can be found in the
applicable command standard document (SBC, SSC, SGC, MMC, and SCC).

The device server shall terminate the MODE SELECT command with CHECK
CONDITION status, set the sense key to ILLEGAL REQUEST, set the
additional sense code to INVALID FIELD IN PARAMETER LIST, and  shall not
change any mode parameters for the following conditions:
  a)  If the application client sets any field that is reported as not
      changeable by the device server to a value other than its current
      value.
  b)  If the application client sets any field in the mode parameter
      header or block descriptor(s) to an unsupported value.
  c)  If an application client sends a mode page with a page length not
      equal to the page length returned by the MODE SENSE command for
      that page.
  d)  If the application client sends a unsupported value for a mode
      parameter and rounding is not implemented for that mode parameter.
  e)  If the application client sets any reserved field in the mode
      parameter list to a non-zero value.

If the application client sends a value for a mode parameter that is
outside the range supported by the device server and rounding is
implemented for that mode parameter, the device server may either:
  a)  round the parameter to an acceptable value and terminate the
      command as described in clause 5.2;
  b)  terminate the command with CHECK CONDITION status, the sense key
      set to ILLEGAL REQUEST, and set the additional sense code to
      INVALID FIELD IN PARAMETER LIST.

A device server may alter any mode parameter in any mode page (even
those reported as non-changeable) as a result of changes to other mode
parameters.

The device server validates the non-changeable mode parameters against
the current values that existed for those mode parameters prior to the
MODE SELECT command.

  NOTE 24 If the current values calculated by the device server affect
  the application client's operation, the application client should
  issue a MODE SENSE command after each MODE SELECT command.

7.9 MODE SELECT(10) command

The MODE SELECT(10) command (see table 30) provides a means for the
application client to specify medium, logical unit, or peripheral device
parameters to the target.  See the MODE SELECT(6) command (7.8) for a
description of the fields in this command.  Application clients should
issue MODE SENSE prior to each MODE SELECT to determine supported mode
pages, mode page lengths, and other parameters.  Device servers that
implement the MODE SELECT(10) command shall also implement the MODE
SENSE(10) command.

                  Table 30 - MODE SELECT(10) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (55h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |         Reserved         |   PF   |         Reserved         |  SP    |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   | (MSB)                                                                 |
|-----+---                        Parameter list length                    ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+


7.10 MODE SENSE(6) command

The MODE SENSE(6) command (see table 31) provides a means for a device
server to report parameters to an application client.  It is a
complementary command to the MODE SELECT(6) command. 

                   Table 31 - MODE SENSE(6) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (1Ah)                        |
|-----+-----------------------------------------------------------------------|
| 1   |              Reserved             |   DBD  |         Reserved         |
|-----+-----------------------------------------------------------------------|
| 2   |       PC        |                   Page code                         |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Allocation length                           |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a MODE SENSE command is received
from an initiator other than the one holding a logical unit reservation. 
The MODE SENSE command shall not be affected by extent reservations.

A disable block descriptors (DBD) bit of zero indicates that the device
server may return zero or more block descriptors in the returned MODE
SENSE data (see 8.3), at the device server's discretion.  A DBD bit of
one specifies that the device server shall not return any block
descriptors in the returned MODE SENSE data.

The page control (PC) field defines the type of mode parameter values to
be returned in the mode pages.  The page control field is defined in
table 32.

                     Table 32 - Page control field
+=======-=====================-============+
| Code  |  Type of parameter  | Subclause  |
|-------+---------------------+------------|
|  00b  |  Current values     |   7.10.1   |
|  01b  |  Changeable values  |   7.10.2   |
|  10b  |  Default values     |   7.10.3   |
|  11b  |  Saved values       |   7.10.4   |
+==========================================+

  NOTE 25 The page control field only affects the mode parameters
  within the mode pages, however the PS bit, page code and page length
  fields should return current values since they have no meaning when
  used with other types.  The mode parameter header and mode parameter
  block descriptor should return current values.

The page code specifies which mode page(s) to return.  Mode page code
usage is defined in table 33.

            Table 33 - Mode page code usage for all devices
+=============-==================================================+
|  Page code  |  Description                                     |
|-------------+--------------------------------------------------|
|     00h     |  Vendor-specific (does not require page format)  |
|  01h - 1Fh  |  See specific device-types                       |
|  20h - 3Eh  |  Vendor-specific (page format required)          |
|     3Fh     |  Return all mode pages                           |
+================================================================+

An application client may request any one or all of the supported mode
pages from the device server.  If an application client issues a MODE
SENSE command with a page code value not implemented by the target, the
device server shall return CHECK CONDITION status and shall set the
sense key to ILLEGAL REQUEST and the additional sense code to INVALID
FIELD IN CDB. 

A page code of 3Fh indicates that all mode pages implemented by the
target shall be returned to the application client.  If the mode
parameter list exceeds 256 bytes for a MODE SENSE(6) command or 65 536
bytes for a MODE SENSE(10) command, the device server shall return CHECK
CONDITION status and the sense key shall be set to ILLEGAL REQUEST and
the additional sense code set to INVALID FIELD IN CDB. 

Mode page 00h, if implemented, shall be returned after all other mode
pages.

  NOTES
  26  Mode pages should be returned in ascending page code order
      except for mode page 00h.
  27  If the PC field and the page code field are both set to zero the
      device server should return a mode parameter header and block
      descriptor (if applicable).  This provides for compatibility
      with existing SCSI-1 application clients.

The mode parameter list for all device types for MODE SELECT and MODE
SENSE is defined in 8.3.  Parts of the mode parameter list are
specifically defined for each device type.  Definitions for the parts of
each mode parameter list that are uniquely for each device-type can be
found in the applicable command standard document (SBC, SSC, SGC, MMC,
and SCC).

7.10.1 Current values

A PC field value of 0h requests that the target return the current
values of the mode parameters.  The current values returned are:
  a)  the current values of the mode parameters established by last
      successful MODE SELECT command;
  b)  the saved values of the mode parameters if a MODE SELECT command
      has not successfully completed since the last power-on or hard
      reset condition;
  c)  the default values of the mode parameters, if saved values, are
      not available or not supported.

7.10.2 Changeable values

A PC field value of 1h requests that the device server return a mask
denoting those mode parameters that are changeable.  In the mask, the
fields of the mode parameters that are changeable shall be set to all
one bits and the fields of the mode parameters that are non-changeable
(i.e. defined by the target) shall be set to all zero bits.

  NOTES
  28  An attempt to change a non-changeable mode parameter (via MODE
      SELECT) results in an error condition (see 7.8).
  29  The application client should issue a MODE SENSE command with
      the PC field set to 1h and the page code field set to 3Fh to
      determine which mode pages are supported, which mode parameters
      within the mode pages are changeable, and the supported length
      of each mode page prior to issuing any MODE SELECT commands.

7.10.3 Default values

A PC field value of 2h requests that the device server return the
default values of the mode parameters.  Parameters not supported by the
target shall be set to zero.  Default values should be accessible even
if the device is not ready.

7.10.4 Saved values

A PC field value of 3h requests that the device server return the saved
values of the mode parameters.  Implementation of saved page parameters
is optional.  Mode parameters not supported by the target shall be set
to zero.  If saved values are not implemented, the command shall be
terminated with CHECK CONDITION status, the sense key set to ILLEGAL
REQUEST and the additional sense code set to SAVING PARAMETERS NOT
SUPPORTED.

  NOTE 30 The method of saving parameters is vendor-specific.  The
  parameters are preserved in such a manner that they are retained
  when the device is powered down.  All savable pages can be
  considered saved when a MODE SELECT command issued with the SP bit
  set to one has returned a GOOD status or after the successful
  completion of a FORMAT UNIT command.

7.10.5 Initial responses

After a power-up condition or hard reset condition, the device server
shall respond in the following manner:
  a)  If default values are requested, report the default values.
  b)  If saved values are requested, report valid restored mode
      parameters, or restore the mode parameters and report them.  If
      the saved values of the mode parameters are not able to be
      accessed from the non-volatile vendor-specific location, terminate
      the command with CHECK CONDITION status and set the sense key set
      to NOT READY.  If saved parameters are not implemented respond as
      defined in 7.10.4.
  c)  If current values are requested and the current values of the mode
      parameters have not been sent by the application client (via a
      MODE SELECT command), the device server may return either the
      default or saved values, as defined above.  If current values have
      been sent, the current values shall be reported.


7.11 MODE SENSE(10) command

The MODE SENSE(10) command (see table 34) provides a means for a device
server to report parameters to an application client.  It is a
complementary command to the MODE SELECT(10) command.  Device servers
that implement the MODE SENSE(10) command shall also implement the MODE
SELECT(10) command.  See the MODE SENSE(6) command (7.10) for a
description of the fields in this command.

                   Table 34 - MODE SENSE(10) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (5Ah)                        |
|-----+-----------------------------------------------------------------------|
| 1   |              Reserved             |  DBD   |         Reserved         |
|-----+-----------------------------------------------------------------------|
| 2   |       PC        |                   Page code                         |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   | (MSB)                                                                 |
|-----+---                        Allocation length                        ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+


7.12 MOVE MEDIUM (attached) command

The MOVE MEDIUM (attached) command requests that the device server move
a unit of media from a source element to a destination element.  The
MOVE MEDIUM command is defined in the SCSI-3 Medium Changer Commands
(SMC) standard.

A reservation conflict shall occur when a MOVE MEDIUM (attached) command
is received from an initiator other than the one holding a logical unit
or extent reservation.  The RESERVE ELEMENT and RELEASE ELEMENT commands
shall not be implemented in attached medium changers.

Usually, the MOVE MEDIUM command is sent to a device server that reports
a peripheral device type of medium changer device (08h) in its standard
INQUIRY data (see clause 7.5.1).  However, any SCSI device that supports
an attached medium changer (see clause 5.5) shall set the MChngr bit to
one in its standard INQUIRY data and accept the MOVE MEDIUM (attached)
command.  Some limitations apply to some MOVE MEDIUM (attached) command
fields in the attached medium changer case.  See the SMC for details
about these limitations.


7.13 READ BUFFER command

The READ BUFFER command (see table 35) is used in conjunction with the
WRITE BUFFER command as a diagnostic function for testing memory in the
target SCSI device and the integrity of the service delivery subsystem. 
This command shall not alter the medium.

                    Table 35 - READ BUFFER command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (3Ch)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved         |           Mode           |
|-----+-----------------------------------------------------------------------|
| 2   |                           Buffer ID                                   |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 4   |                           Buffer offset                               |
|-----+---                                                                 ---|
| 5   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 6   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 7   |                           Allocation length                           |
|-----+---                                                                 ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a READ BUFFER command is
received from an initiator other than the one holding a logical unit
reservation.  The READ BUFFER command shall not be affected by extent
reservations.

The function of this command and the meaning of fields within the
command descriptor block depend on the contents of the mode field.  The
mode field is defined in table 36.

                   Table 36 - READ BUFFER mode field
+========-============================-===================+
|  Mode  |  Description               |    Type           |
|--------+----------------------------+-------------------|
|  000b  |  Combined header and data  |  Optional         |
|  001b  |  Vendor-specific           |  Vendor-specific  |
|  010b  |  Data                      |  Optional         |
|  011b  |  Descriptor                |  Optional         |
|  100b  |  Reserved                  |  Reserved         |
|  101b  |  Reserved                  |  Reserved         |
|  110b  |  Reserved                  |  Reserved         |
|  111b  |  Reserved                  |  Reserved         |
+=========================================================+

  NOTE 31 Modes 000b and 001b are included for compatibility with
  products that were designed prior to the generation of this
  standard.  Some products that were designed prior to the generation
  of this standard restrict the available length to 65 535 bytes.

7.13.1 Combined header and data mode (000b)

In this mode, a four-byte header followed by data bytes is returned to
the application client in the Data-In buffer.  The buffer ID and the
buffer offset fields are reserved. 

The four-byte READ BUFFER header (see table 37) is followed by data
bytes from the target's data buffer.

                     Table 37 - READ BUFFER header
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 1   | (MSB)                                                                 |
|- - -+- -                        Buffer capacity                          - -|
| 3   |                                                                 (LSB) |
+=============================================================================+

The buffer capacity field specifies the total number of data bytes
available in the target's data buffer.  This number is not reduced to
reflect the allocation length; nor is it reduced to reflect the actual
number of bytes written using the WRITE BUFFER command.  Following the
READ BUFFER header, the device server shall transfer data from the
target's data buffer.  The device server shall terminate filling the
Data-In buffer when allocation length bytes of header plus data have
been transferred or when all available header and buffer data have been
transferred to the application client, whichever is less.

7.13.2 Vendor-specific mode (001b)

In this mode, the meanings of the buffer ID, buffer offset, and
allocation length fields are not specified by this standard.

7.13.3 Data mode (010b)

In this mode, the Data-In buffer is filled only with target buffer data. 
The buffer ID field identifies a specific buffer within the target from
which data shall be transferred.  The vendor assigns buffer ID codes to
buffers within the target.  Buffer ID zero shall be supported.  If more
than one buffer is supported, additional buffer ID codes shall be
assigned contiguously, beginning with one.  Buffer ID code assignments
for the READ BUFFER command shall be the same as for the WRITE BUFFER
command.  If an unsupported buffer ID code is selected, the device
server shall return CHECK CONDITION status, shall set the sense key to
ILLEGAL REQUEST, and set the additional sense code to ILLEGAL FIELD IN
CDB.

The device server shall terminate filling the Data-In buffer when
allocation length bytes have been transferred or when all the available
data from the buffer has been transferred to the application client,
whichever amount is less.

The buffer offset field contains the byte offset within the specified
buffer from which data shall be transferred.  The application client
should conform to the offset boundary requirements returned in the READ
BUFFER descriptor (see 7.13.4).  If the device server is unable to
accept the specified buffer offset, it shall return CHECK CONDITION
status, shall set the sense key to ILLEGAL REQUEST, and set the
additional sense code to ILLEGAL FIELD IN CDB.

7.13.4 Descriptor mode (011b)

In this mode, a maximum of four bytes of READ BUFFER descriptor
information is returned.  The device server shall return the descriptor
information for the buffer specified by the buffer ID (see the
description of the buffer ID in 7.13.3).  If there is no buffer
associated with the specified buffer ID, the device server shall return
all zeros in the READ BUFFER descriptor.  The buffer offset field is
reserved in this mode.  The allocation length should be set to four or
greater.  The device server shall transfer the lesser of the allocation
length or four bytes of READ BUFFER descriptor.  The READ BUFFER
descriptor is defined as shown in table 38.

                   Table 38 - READ BUFFER descriptor
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Offset boundary                             |
|--- -+-----------------------------------------------------------------------|
| 1   | (MSB)                                                                 |
|- - -+- -                        Buffer capacity                          - -|
| 3   |                                                                 (LSB) |
+=============================================================================+

The offset boundary field returns the boundary alignment within the
selected buffer for subsequent WRITE BUFFER and READ BUFFER commands. 
The value contained in the offset boundary field shall be interpreted as
a power of two.

The value contained in the buffer offset field of subsequent WRITE
BUFFER and READ BUFFER commands should be a multiple of 2**(offset
boundary) as shown in table 39.

                   Table 39 - Buffer offset boundary
+========-====================-==========================================+
|Offset  |                    |                                          |
|boundary| 2**Offset boundary |  Buffer offsets                          |
|--------+--------------------+------------------------------------------|
|   0    |      2**0 = 1      |  Byte boundaries                         |
|   1    |      2**1 = 2      |  Even-byte boundaries                    |
|   2    |      2**2 = 4      |  Four-byte boundaries                    |
|   3    |      2**3 = 8      |  Eight-byte boundaries                   |
|   4    |      2**4 = 16     |  16-byte boundaries                      |
|   .    |          .         |         .                                |
|   .    |          .         |         .                                |
|  FFh   |  Not applicable    |  0 is the only supported buffer offset.  |
+========================================================================+

The buffer capacity field shall return the size of the selected buffer
in bytes.

  NOTE 32 In a multi-tasking system, a buffer may be altered between
  the WRITE BUFFER and READ BUFFER commands by another task.  Buffer
  testing applications may wish to insure that only a single task is
  active.  Use of reservations (to all logical units on the device) or
  linked commands may also be helpful in avoiding buffer alteration
  between these two commands.


7.14 READ ELEMENT STATUS (attached) command

The READ ELEMENT STATUS (attached) command requests that the device
server report the status of its medium changer elements to the
application client.  The READ ELEMENT STATUS (attached) command is
defined in the SCSI-3 Medium Changer Commands (SMC) standard.

A reservation conflict shall occur when a READ ELEMENT STATUS (attached)
command is received from an initiator other than the one holding a
logical unit reservation.  The READ ELEMENT STATUS (attached) command
shall not be affected by extent reservations.  The RESERVE ELEMENT and
RELEASE ELEMENT commands shall not be implemented in attached medium
changers.

Usually, the READ ELEMENT STATUS command is sent to a device server that
reports a peripheral device type of medium changer device (08h) in its
standard INQUIRY data (see clause 7.5.1).  However, any SCSI device that
supports an attached medium changer (see clause 5.5) shall set the
MChngr bit to one in its standard INQUIRY data and accept the READ
ELEMENT STATUS (attached) command.


7.15 RECEIVE DIAGNOSTIC RESULTS command

The RECEIVE DIAGNOSTIC RESULTS command (see table 40) requests analysis
data be sent to the application client after completion of a SEND
DIAGNOSTIC command (see 7.21).  If the target supports the optional page
format, the page code field sent in the previous SEND DIAGNOSTIC command
specifies the format of the returned data. 

             Table 40 - RECEIVE DIAGNOSTIC RESULTS command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (1Ch)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                        Allocation length                        ---|
| 4   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a RECEIVE DIAGNOSTIC RESULTS
command is received from an initiator other than the one holding a
logical unit reservation.  If an initiator has an extent reservation on
a SCSI device, and an another initiator sends a RECEIVE DIAGNOSTIC
RESULTS, a reservation conflict shall occur if the RECEIVE DIAGNOSTIC
RESULTS affects the manner in which access to an extent reserved by the
first initiator is performed.  If the RECEIVE DIAGNOSTIC RESULTS does
not affect access to the reserved extent, then a reservation conflict
shall not occur.

  NOTES
  33  To insure that the diagnostic command information is not
      destroyed by a command sent from another initiator, either the
      SEND DIAGNOSTIC command should either be linked to the RECEIVE
      DIAGNOSTIC RESULTS command or the logical unit should be
      reserved.
  34  Although diagnostic software is generally device-specific, this
      command and the SEND DIAGNOSTIC command provide a means to
      isolate the operating system software from the device-specific
      diagnostic software.  Hence, the operating system can remain
      device-independent.  This also allows diagnostic software to be
      transferred more easily to other operating systems.

See 8.1 for RECEIVE DIAGNOSTIC RESULTS page format definitions.


7.16 RELEASE(6) command

The RELEASE(6) command (see table 41) is used to release a previously
reserved logical unit, or, if the extent release option is implemented,
to release previously reserved extents within a logical unit.

                     Table 41 - RELEASE(6) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (17h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |         Reserved         | 3rdPty | Third party device ID    | Extent |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reservation identification                  |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

The RESERVE and RELEASE commands provide the basic mechanism for
contention resolution in multiple-initiator systems.  A reservation may
only be released by a RELEASE command from the initiator that made it. 
It is not an error for an application client to attempt to release a
reservation that is not currently valid, or is held by an another
initiator.  In this case, the device server shall return GOOD status
without altering any other reservation.

Reservations conflicts shall not occur for the RELEASE command.

7.16.1 Logical unit release (Mandatory)

If the extent bit is zero, this command shall cause the device server to
terminate all non-third-party logical unit and extent reservations that
are active from the initiator to the specified logical unit.  The
reservation ID field in the command descriptor block shall be ignored by
the device server.

7.16.2 Extent release (Optional)

If the extent bit is one and the extent release option is implemented,
this command shall cause any reservation from the requesting initiator
with a matching reservation identification to be terminated.  Other
reservations from the requesting initiator shall remain in effect.

If the extent bit is one and the extent release option is not
implemented, then the RELEASE command shall be terminated with CHECK
CONDITION status and the sense key shall be set to ILLEGAL REQUEST. 
This option shall be implemented if the extent reservation option (see
7.19.2) is implemented.

7.16.3 Third-party release (Mandatory)

Third-party release allows an application client to release a logical
unit or extents within a logical unit that were previously reserved
using third-party reservation (see 7.19.3).  Third-party release shall
be implemented.  It is intended for use in multiple-initiator systems
that use the COPY command.

If the third-party (3rdPty) bit is zero, then a third-party release is
not requested.  If the 3rdPty bit is one then the device server shall
release the specified logical unit or extents, but only if the initiator
ID, 3rdPty bit, and Third party device ID are identical when compared to
the RESERVE command that established the reservation.

In the RELEASE(6) command, the Third party device ID field is restricted
to three bits (values 0 to 7).  If larger Third party device ID values
are required, the RELEASE(10) command shall be used.  Device ID formats
are protocol-specific.

If the 3rdPty bit is one the device server shall not modify the mode
parameters for commands received from the third-party device even if the
target implements the transfer of mode parameters with a third-party
RESERVE command.

  NOTE 35 If a target implements independent storage of mode
  parameters for each initiator, a third-party RESERVE command copies
  the current mode parameters for the initiator that sent the RESERVE
  command to the current mode parameters for the initiator specified
  as the third-party device (usually a copy master device).  A unit
  attention condition notifies the third-party of the changed mode
  parameters due to the reservation.  A successful third-party RELEASE
  command does not return the third-party devices' current mode
  parameters back to their previous values.  The third-party device
  may issue MODE SENSE and MODE SELECT commands to query and modify
  the mode parameters. 


7.17 RELEASE(10) command

The RELEASE(10) command (see table 42) is used to release a previously
reserved logical unit, or, if the extent release option is implemented,
to release previously reserved extents within a logical unit.  This
clause describes only those instances where the RELEASE(10) command
differs from the RELEASE(6) command.  Except for the instances described
in this clause, the RELEASE(10) command shall function exactly like the
RELEASE(6) command (see 7.16).

                    Table 42 - RELEASE(10) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (57h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |         Reserved         | 3rdPty |     Reserved    | LongID | Extent |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reservation identification                  |
|-----+-----------------------------------------------------------------------|
| 3   |                           Third party device ID                       |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   | (MSB)                                                                 |
|-----+--                         Parameter list length                    ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

If the Third party device ID value associated with the reservation
release is smaller than 255, the LongID bit may be zero and the ID value
sent in the CDB.  Device ID formats are protocol-specific.  If the
LongID bit is zero, the Parameter list length field shall be set to
zero.  If the Third party device ID is greater than 255, the LongID bit
shall be one.

If the LongID bit is one, the Parameter list length shall be eight, and
the parameter list shall have the format shown in table 43.  If the
LongID bit is one, the Third party device ID field in the CDB shall be
ignored.  If the LongID bit is one and the Parameter list length is not
eight, the device server shall return a CHECK CONDITION status with a
sense key of ILLEGAL REQUEST.

                 Table 43 - RELEASE(10) parameter list
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   | (MSB)                                                                 |
|- - -+- -                        Third party device ID                    - -|
| 7   |                                                                 (LSB) |
+=============================================================================+


7.18 REQUEST SENSE command

The REQUEST SENSE command (see table 44) requests that the device server
transfer sense data to the application client.

                   Table 44 - REQUEST SENSE command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (03h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Allocation length                           |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

The REQUEST SENSE command shall not be affected by reservations.

Sense data shall be available and cleared under the conditions defined
in the SAM.  If the device server has no other sense data available to
return, it shall return a sense key of NO SENSE and an additional sense
code of NO ADDITIONAL SENSE INFORMATION.

If the device server is in the Standby power condition or Idle power
condition when a REQUEST SENSE command is received and there is no
Automatic Contingent Allegiance, the device server shall return a sense
key of NO SENSE and an additional sense code of LOW POWER CONDITION
ACTIVE.  On completion of the command the logical unit shall return to
same power condition that was active before the REQUEST SENSE command
was received.  Any active power condition timer shall be suspended on
receipt of the REQUEST SENSE command and resumed on completion of the
command.

  NOTE 36 Some target implementations do not update sense data except
  on commands that return CHECK CONDITION or COMMAND TERMINATED
  status.  Thus when polling for a logical unit to become ready, the
  application client should issue TEST UNIT READY commands until GOOD
  status is returned.  If desired, the application client may issue
  REQUEST SENSE commands after the TEST UNIT READY commands that
  return CHECK CONDITION or COMMAND TERMINATED status to obtain the
  sense data.

The device server shall return CHECK CONDITION status for a REQUEST
SENSE command only to report exception conditions specific to the
command itself.  For example:
  a)  A non-zero reserved bit is detected in the command descriptor
      block;
  b)  An unrecovered parity error is detected by the service delivery
      subsystem; 
  c)  A target malfunction that prevents return of the sense data.

If a recovered error occurs during the execution of the REQUEST SENSE
command, the device server shall return the sense data with GOOD status. 
If a device server returns CHECK CONDITION status for a REQUEST SENSE
command, the sense data may be invalid. 

  NOTE 37 The sense data appropriate to the selection of an invalid
  logical unit is defined in the SAM.

Device servers shall be capable of returning eighteen bytes of data in
response to a REQUEST SENSE command.  If the allocation length is
eighteen or greater, and a device server returns less than eighteen
bytes of data, the application client should assume that the bytes not
transferred would have been zeros had the device server returned those
bytes.  Application clients can determine how much sense data has been
returned by examining the allocation length parameter in the command
descriptor block and the additional sense length in the sense data. 
Device servers shall not adjust the additional sense length to reflect
truncation if the allocation length is less than the sense data
available. 

The sense data format for error codes 70h (current errors) and 71h
(deferred errors) are defined in table 45. 

         Table 45 - Error codes 70h and 71h sense data format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+==============================================================|
| 0   | Valid  |                  Error code (70h or 71h)                     |
|-----+-----------------------------------------------------------------------|
| 1   |                           Segment number                              |
|-----+-----------------------------------------------------------------------|
| 2   |Filemark|  EOM   |  ILI   |Reserved|         Sense key                 |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|- - -+- -                        Information                              - -|
| 6   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 7   |                           Additional sense length (n-7)               |
|-----+-----------------------------------------------------------------------|
| 8   | (MSB)                                                                 |
|- - -+- -                        Command-specific information             - -|
| 11  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 12  |                           Additional sense code                       |
|-----+-----------------------------------------------------------------------|
| 13  |                           Additional sense code qualifier             |
|-----+-----------------------------------------------------------------------|
| 14  |                           Field replaceable unit code                 |
|-----+-----------------------------------------------------------------------|
| 15  |  SKSV  |                                                              |
|- - -+---------- -               Sense-key specific                       - -|
| 17  |                                                                       |
|-----+-----------------------------------------------------------------------|
| 18  |                                                                       |
|- - -+- -                        Additional sense bytes                   - -|
| n   |                                                                       |
+=============================================================================+

A valid bit of zero indicates that the information field is not as
defined in this standard.  A valid bit of one indicates the information
field contains valid information as defined in this standard.  Targets
shall implement the valid bit.

Error code values 70h (current errors) and 71h (deferred errors) are
described as part of the deferred errors discussion, in clause 7.18.2. 
 Error code values of 72h to 7Eh are reserved.  Error code 7Fh is for a
vendor-specific sense data format.  Targets shall implement error code
70h; implementation of error code 71h is optional.  Error code values of
00h to 6Fh are not defined by this standard and their use is not
recommended.

The segment number field contains the number of the current segment
descriptor if the REQUEST SENSE command is in response to a COPY,
COMPARE, or COPY AND VERIFY command.  Up to 256 segments are supported,
beginning with segment zero.  

The filemark bit is mandatory for sequential-access devices, and this
bit is reserved for all other device types.  A filemark bit of one
indicates that the current command has read a filemark or setmark.  The
additional sense code field may be used to indicate whether a filemark
or setmark was read.  Reporting of setmarks is optional and indicated by
the Rsmk bit for sequential-access devices in the configuration
parameters page (see the SSC).

The end-of-medium (EOM) bit is mandatory for sequential-access and
printer devices, and this bit is reserved for all other device types. 
An EOM bit of one indicates that an end-of-medium condition (end-of-
partition, beginning-of-partition, out-of-paper, etc.) exists.  For
sequential-access devices, this bit indicates that the unit is at or
past the early-warning if the direction was forward, or that the command
could not be completed because beginning-of-partition was encountered if
the direction was reverse.  (See the SSC.)

An incorrect length indicator (ILI) bit of one usually indicates that
the requested logical block length did not match the logical block
length of the data on the medium.

The sense key, additional sense code and additional sense code qualifier
provide a hierarchy of information.  The intention of the hierarchy is
to provide a top-down approach for an application client to determine
information relating to the error and exception conditions.  The sense
key provides generic categories in which error and exception conditions
can be reported.  Application clients would typically use sense keys for
high level error recovery procedures.  Additional sense codes provide
further detail describing the sense key.  Additional sense code
qualifiers add further detail to the additional sense code.  The
additional sense code and additional sense code qualifier can be used by
application clients where sophisticated error recovery procedures
require detailed information describing the error and exception
conditions.

The sense key field is mandatory and indicates generic information
describing an error or exception condition.  The sense keys are defined
in 7.18.3.

The contents of the information field is device-type or command specific
and is defined within the appropriate standard for the device type or
command of interest.  Targets shall implement the information field. 
Unless specified otherwise, this field contains:
  a)  the unsigned logical block address associated with the sense key,
      for direct-access devices (device type 0), write-once devices
      (device type 4), CD-ROM devices (device type 5), and optical
      memory devices (device type 7).
  b)  the difference (residue) of the requested length minus the actual
      length in either bytes or blocks, as determined by the command,
      for sequential-access devices (device type 1), printer devices
      (device type 2), processor devices (device type 3) and some direct
      access device commands, except as defined for d) below. (Negative
      values are indicated by two's complement notation.)
  c)  the difference (residue) of the requested number of blocks minus
      the actual number of blocks copied or compared for the current
      segment descriptor of a COPY, COMPARE, or COPY AND VERIFY command.
  d)  For sequential-access devices operating in buffered modes 1h or 2h
      that detect an unrecoverable write error when unwritten data
      blocks, filemarks, or setmarks remain in the buffer, the value of
      the information field for all commands shall be:
    1)  the total number of data blocks, filemarks, and setmarks in the
        buffer if the device is in fixed block mode (block length field
        of the MODE SENSE block descriptor is non-zero and the fixed bit
        of the WRITE command is one). 
    2)  the number of bytes in the buffer, including filemarks and
        setmarks, if the device is in variable mode (the fixed bit of
        the WRITE command is zero).   

The additional sense length field indicates the number of additional
sense bytes to follow.  If the allocation length of the command
descriptor block is too small to transfer all of the additional sense
bytes, the additional sense length is not adjusted to reflect the
truncation.

The command-specific information field contains information that depends
on the command that was executed.  Further meaning for this field is
defined within the command description.  The command-specific
information field is mandatory if the target supports any of the
following commands:  COPY, COMPARE, COPY AND VERIFY, SEARCH DATA, and
REASSIGN BLOCKS.

The additional sense code (ASC) field indicates further information
related to the error or exception condition reported in the sense key
field.  Targets shall support the additional sense code field.  Support
of the additional sense codes not explicitly required by this standard
is optional.  A list of additional sense codes is in 7.18.3.  If the
device server does not have further information related to the error or
exception condition, the additional sense code is set to NO ADDITIONAL
SENSE INFORMATION.

The additional sense code qualifier (ASCQ) indicates detailed
information related to the additional sense code.  The additional sense
code qualifier is optional.  If the error or exception condition is
reportable by the device, the value returned shall be as specified in
7.18.3.  If the device server does not have detailed information related
to the error or exception condition, the additional sense code qualifier
is set to zero.

Non-zero values in the field replaceable unit code field are used to
define a device-specific mechanism or unit that has failed.  A value of
zero in this field shall indicate that no specific mechanism or unit has
been identified to have failed or that the data is not available.  The
field replaceable unit code field is optional. The format of this
information is not specified by this standard.  Additional information
about the field replaceable unit may be available in the ASCII
information page (see 8.4.2), if supported by the target. 

The sense-key specific bytes are described in 7.18.1, below.

The additional sense bytes field may contain command specific data,
peripheral device specific data, or vendor-specific data that further
defines the nature of the CHECK CONDITION status.

7.18.1 Sense-key specific

The sense-key specific field as defined by this standard when the value
of the sense-key specific valid (SKSV) bit is one.  The sense-key
specific valid bit and sense-key specific field are optional.  The
definition of this field is determined by the value of the sense key
field.  This field is reserved for sense keys not described below.  An
SKSV value of zero indicates that this field is not as defined by this
standard. 

If the sense key field is set to ILLEGAL REQUEST and the SKSV bit is set
to one, the sense-key specific field shall be as defined as shown in
table 46.  The field pointer field indicates which illegal parameters in
the command descriptor block or the data parameters are in error.

                    Table 46 - Field pointer bytes
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+========+========+========+========+==========================|
| 15  |  SKSV  |  C/D   |Reserved|Reserved|  BPV   |    Bit pointer           |
|-----+-----------------------------------------------------------------------|
| 16  | (MSB)                                                                 |
|-----+---                        Field pointer                            ---|
| 17  |                                                                 (LSB) |
+=============================================================================+

A command data (C/D) bit of one indicates that the illegal parameter is
in the command descriptor block.  A C/D bit of zero indicates that the
illegal parameter is in the data parameters sent by the application
client in the Data-Out buffer.

A bit pointer valid (BPV) bit of zero indicates that the value in the
bit pointer field is not valid.  A BPV bit of one indicates that the bit
pointer field specifies which bit of the byte designated by the field
pointer field is in error.  When a multiple-bit field is in error, the
bit pointer field shall point to the most-significant (left-most) bit of
the field.

The field pointer field indicates which byte of the command descriptor
block or of the parameter data was in error.  Bytes are numbered
starting from zero, as shown in the tables describing the commands and
parameters.  When a multiple-byte field is in error, the pointer shall
point to the most- significant (left-most) byte of the field.

  NOTE 38 Bytes identified as being in error are not necessarily the
  place that has to be changed to correct the problem.

If the sense key is RECOVERED ERROR, HARDWARE ERROR or MEDIUM ERROR and
if the SKSV bit is one, the sense-key specific field shall be as shown
in table 47.

                  Table 47 - Actual retry count bytes
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+==============================================================|
| 15  |  SKSV  |                  Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 16  | (MSB)                                                                 |
|-----+---                        Actual retry count                       ---|
| 17  |                                                                 (LSB) |
+=============================================================================+

The actual retry count field returns implementation-specific information
on the actual number of retries of the recovery algorithm used in
attempting to recover an error or exception condition. 

  NOTE 39 This field should relate to the retry count fields within
  the error recovery page of the MODE SELECT command.

If the sense key is NOT READY or NO SENSE and the SKSV bit is one, the
sense-key specific field shall be as shown in table 48.

                 Table 48 - Progress indication bytes
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+==============================================================|
| 15  |  SKSV  |                  Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 16  | (MSB)                                                                 |
|-----+---                        Progress indication                      ---|
| 17  |                                                                 (LSB) |
+=============================================================================+

The progress indication field is a percent complete indication in which
the returned value is the numerator that has 65536 (10000h) as its
denominator.  The progress indication shall based upon the total format
operation including any certification or initialization operations.

  NOTE 40 It is intended that the progress indication be time related. 
  However, since format time varies with the number of defects
  encountered, etc., it is reasonable for the device server to assign
  values to various steps within the process.  The granularity of
  these steps should be small enough to provide reasonable assurances
  to the application client that progress is being made.

7.18.2 Deferred errors

Error code 70h indicates that the CHECK CONDITION or COMMAND TERMINATED
status returned is the result of an error or exception condition on the
task that returned the CHECK CONDITION or COMMAND TERMINATED status or
a protocol-specific failure condition.  This includes errors generated
during execution of the command by the actual execution process.  It
also includes errors not related to any command that are first observed
during execution of a command.  Examples of this latter type of error
include disk servo-mechanism, off-track errors, and power-up test
errors. 

Error code 71h (deferred error) indicates that the CHECK CONDITION
status returned is the result of an error or exception condition that
occurred during execution of a previous command for which GOOD status
has already been returned.  Such commands are associated with use of the
immediate bit, with some forms of caching, and with multiple command
buffering.  Targets that implement these features are required to
implement deferred error reporting.

The deferred error indication may be sent at a time selected by the
device server through use of the asynchronous event reporting mechanism
(see the SAM), if AER is supported by both the application client and
device server.  

If AER is not supported, the deferred error may be indicated by
returning CHECK CONDITION status to an application client on the
appropriate initiator as described below.  The subsequent execution of
a REQUEST SENSE command shall return the deferred error sense
information.

If task terminates with CHECK CONDITION status and the subsequent sense
data returns a deferred error that task shall not have been executed. 
After the device server detects a deferred error condition, it shall
return a deferred error according to the rules described below: 
  a)  If a deferred error can be recovered with no external system
      intervention, a deferred error indication shall not be posted
      unless required by the error handling parameters of a MODE SELECT
      command.  The occurrence of the error may be logged if statistical
      or error logging is supported.
  b)  If a deferred error can be associated with a causing initiator and
      with a particular function or a particular subset of data, and the
      error is either unrecovered or required to be reported by the mode
      parameters, a deferred error indication shall be returned to an
      application client on the causing initiator.  If an application
      client on an initiator other than the causing initiator attempts
      access to the particular function or subset of data associated
      with the deferred error, a BUSY status shall be returned to that
      application client in response to the command attempting the access.

  NOTE 41 Not all SCSI devices may be sufficiently sophisticated to
  identify the function or data that failed.  Those that cannot should
  treat the error in the following manner.

  c)  If a deferred error cannot be associated with a causing initiator
      or with a particular subset of data, the device server shall
      return a deferred error indication to an application client on
      each initiator.  If multiple deferred errors have accumulated for
      some initiators, only the last error shall be returned.
  d)  If a deferred error cannot be associated with a particular logical
      unit, the device server shall return a deferred error indication
      to an application client associated with any logical unit on the
      appropriate initiator.
  e)  If a task has never entered the enabled task state, and a deferred
      error occurs, the task shall be terminated with CHECK CONDITION
      status and deferred error information posted in the sense data. 
      If a deferred error occurs after a task has entered the enabled
      task state and the task is affected by the error, the task shall
      be terminated by CHECK CONDITION status and the current error
      information shall be returned in the sense data.  In this case, if
      the current error information does not adequately define the
      deferred error condition, a deferred error may be returned after
      the current error information has been recovered.  If a deferred
      error occurs after a task has entered the enabled task state and
      the task completes successfully, the target may choose to return
      the deferred error information after the completion of the current
      command in conjunction with a subsequent command that has not
      started execution.

  NOTE 42 Deferred errors may indicate that an operation was
  unsuccessful long after the command performing the data transfer
  returned GOOD status.  If data that cannot be replicated or
  recovered from other sources is being stored using buffered write
  operations, synchronization commands should be performed before the
  critical data is destroyed in the host initiator.  This is necessary
  to be sure that recovery actions can be taken if deferred errors do
  occur in the storing of the data.  If AER is not implemented, the
  synchronizing process should provide the necessary commands to allow
  returning CHECK CONDITION status and subsequent returning of
  deferred error sense information after all buffered operations are
  guaranteed to be complete.

7.18.3 Sense key and sense code definitions

The sense keys are defined in table 49.

                   Table 49 - Sense key descriptions
+========-====================================================================+
| Sense  |  Description                                                       |
|  key   |                                                                    |
|--------+--------------------------------------------------------------------|
|   0h   |  NO SENSE.  Indicates that there is no specific sense key          |
|        |  information to be reported.  This would be the case for a         |
|        |  successful command or a command that received CHECK CONDITION     |
|        |  or COMMAND TERMINATED status because one of the filemark, EOM,    |
|        |  or ILI bits is set to one.                                        |
|--------+--------------------------------------------------------------------|
|   1h   |  RECOVERED ERROR.  Indicates that the last command completed       |
|        |  successfully with some recovery action performed by the device    |
|        |  server.  Details may be determinable by examining the additional  |
|        |  sense bytes and the information field.  When multiple recovered   |
|        |  errors occur during one command, the choice of which error to     |
|        |  report (first, last, most severe, etc.) is device specific.       |
|--------+--------------------------------------------------------------------|
|   2h   |  NOT READY.  Indicates that the logical unit addressed cannot be   |
|        |  accessed.  Operator intervention may be required to correct this  |
|        |  condition.                                                        |
+=============================================================================+

             Table 49 - Sense key descriptions (continued)
+========-====================================================================+
| Sense  |  Description                                                       |
|  key   |                                                                    |
|--------+--------------------------------------------------------------------|
|   3h   |  MEDIUM ERROR.  Indicates that the command terminated with a non-  |
|        |  recovered error condition that was probably caused by a flaw in   |
|        |  the medium or an error in the recorded data.  This sense key may  |
|        |  also be returned if the device server is unable to distinguish    |
|        |  between a flaw in the medium and a specific hardware failure      |
|        |  (sense key 4h).                                                   |
|--------+--------------------------------------------------------------------|
|   4h   |  HARDWARE ERROR.  Indicates that the device server detected a non- |
|        |  recoverable hardware failure (for example, controller failure,    |
|        |  device failure, parity error, etc.) while performing the command  |
|        |  or during a self test.                                            |
|--------+--------------------------------------------------------------------|
|   5h   |  ILLEGAL REQUEST.  Indicates that there was an illegal parameter   |
|        |  in the command descriptor block or in the additional parameters   |
|        |  supplied as data for some commands (FORMAT UNIT, SEARCH DATA,     |
|        |  etc.).  If the device server detects an invalid parameter in the  |
|        |  command descriptor block, then it shall terminate the command     |
|        |  without altering the medium.  If the device server detects an     |
|        |  invalid parameter in the additional parameters supplied as data,  |
|        |  then the device server may have already altered the medium.       |
|--------+--------------------------------------------------------------------|
|   6h   |  UNIT ATTENTION.  Indicates that the removable medium may have     |
|        |  been changed or the target has been reset.  See the SAM for more  |
|        |  detailed information about the unit attention condition.          |
|--------+--------------------------------------------------------------------|
|   7h   |  DATA PROTECT.  Indicates that a command that reads or writes the  |
|        |  medium was attempted on a block that is protected from this       |
|        |  operation.  The read or write operation is not performed.         |
|--------+--------------------------------------------------------------------|
|   8h   |  BLANK CHECK.  Indicates that a write-once device or a sequential- |
|        |  access device encountered blank medium or format-defined end-of-  |
|        |  data indication while reading or a write-once device encountered  |
|        |  a non-blank medium while writing.                                 |
|--------+--------------------------------------------------------------------|
|   9h   |  VENDOR-SPECIFIC.  This sense key is available for reporting vendor|
|        |  specific conditions.                                              |
|--------+--------------------------------------------------------------------|
|   Ah   |  COPY ABORTED.  Indicates a COPY, COMPARE, or COPY AND VERIFY      |
|        |  command was aborted due to an error condition on the source       |
|        |  device, the destination device, or both.  (See 7.3.2 for          |
|        |  additional information about this sense key.)                     |
|--------+--------------------------------------------------------------------|
|   Bh   |  ABORTED COMMAND.  Indicates that the device server aborted the    |
|        |  command.  The application client may be able to recover by trying |
|        |  the command again.                                                |
|--------+--------------------------------------------------------------------|
|   Ch   |  EQUAL.  Indicates a SEARCH DATA command has satisfied an equal    |
|        |  comparison.                                                       |
|--------+--------------------------------------------------------------------|
|   Dh   |  VOLUME OVERFLOW.  Indicates that a buffered SCSI device has       |
|        |  reached the end-of-partition and data may remain in the buffer    |
|        |  that has not been written to the medium.  One or more RECOVER     |
|        |  BUFFERED DATA command(s) may be issued to read the unwritten data |
|        |  from the buffer.                                                  |
+=============================================================================+

             Table 49 - Sense key descriptions (continued)
+========-====================================================================+
| Sense  |  Description                                                       |
|  key   |                                                                    |
|--------+--------------------------------------------------------------------|
|   Eh   |  MISCOMPARE.  Indicates that the source data did not match the     |
|        |  data read from the medium.                                        |
|--------+--------------------------------------------------------------------|
|   Fh   |  RESERVED.                                                         |
+=============================================================================+

The additional sense codes and additional sense code qualifiers are
defined in table 50.

                  Table 50 - ASC and ASCQ assignments
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA  DESCRIPTION                                           |
| --- ---- -----------  ----------------------------------------------------- |
| 67h  02h           A  ADD LOGICAL UNIT FAILED                               |
| 13h  00h D   W  O     ADDRESS MARK NOT FOUND FOR DATA FIELD                 |
| 12h  00h D   W  O     ADDRESS MARK NOT FOUND FOR ID FIELD                   |
| 67h  06h           A  ATTACHMENT OF LOGICAL UNIT FAILED                     |
| 00h  11h      R       AUDIO PLAY OPERATION IN PROGRESS                      |
| 00h  12h      R       AUDIO PLAY OPERATION PAUSED                           |
| 00h  14h      R       AUDIO PLAY OPERATION STOPPED DUE TO ERROR             |
| 00h  13h      R       AUDIO PLAY OPERATION SUCCESSFULLY COMPLETED           |
| 66h  00h       S      AUTOMATIC DOCUMENT FEEDER COVER UP                    |
| 66h  01h       S      AUTOMATIC DOCUMENT FEEDER LIFT UP                     |
| 00h  04h  T    S      BEGINNING-OF-PARTITION/MEDIUM DETECTED                |
| 0Ch  06h DT  W  O     BLOCK NOT COMPRESSABLE                                |
| 14h  04h  T           BLOCK SEQUENCE ERROR                                  |
| 29h  03h DTLPWRSOMCA  BUS DEVICE RESET FUNCTION OCCURRED                    |
| 11h  0Eh DT  WR O     CANNOT DECOMPRESS USING DECLARED ALGORITHM            |
| 30h  06h DT  W  O     CANNOT FORMAT MEDIUM - INCOMPATIBLE MEDIUM            |
| 30h  02h DT  WR O     CANNOT READ MEDIUM - INCOMPATIBLE FORMAT              |
| 30h  01h DT  WR O     CANNOT READ MEDIUM - UNKNOWN FORMAT                   |
| 30h  05h DT  W  O     CANNOT WRITE MEDIUM - INCOMPATIBLE FORMAT             |
| 30h  04h DT  W  O     CANNOT WRITE MEDIUM - UNKNOWN FORMAT                  |
| 52h  00h  T           CARTRIDGE FAULT                                       |
| 3Fh  02h DTLPWRSOMC   CHANGED OPERATING DEFINITION                          |
| 11h  06h     WR O     CIRC UNRECOVERED ERROR                                |
| 30h  03h DT           CLEANING CARTRIDGE INSTALLED                          |
| 30h  07h DTL WRSOM A  CLEANING FAILURE                                      |
| 00h  17h DTL WRSOM A  CLEANING REQUESTED                                    |
| 4Ah  00h DTLPWRSOMCA  COMMAND PHASE ERROR                                   |
| 2Ch  00h DTLPWRSOMCA  COMMAND SEQUENCE ERROR                                |
| 6Eh  00h           A  COMMAND TO LOGICAL UNIT FAILED                        |
| 2Fh  00h DTLPWRSOMCA  COMMANDS CLEARED BY ANOTHER INITIATOR                 |
| 0Ch  04h DT  W  O     COMPRESSION CHECK MISCOMPARE ERROR                    |
+=============================================================================+

            Table 50 - ASC and ASCQ assignments (continued)
+=============================================================================+
| ASC ASCQ DTLPWRSOMCA  DESCRIPTION                                           |
| --- ---- -----------  ----------------------------------------------------- |
| 67h  00h           A  CONFIGURATION FAILURE                                 |
| 67h  01h           A  CONFIGURATION OF INCAPABLE LOGICAL UNITS FAILED       |
| 2Bh  00h DTLPWRSO C   COPY CANNOT EXECUTE SINCE HOST CANNOT DISCONNECT      |
| 67h  07h           A  CREATION OF LOGICAL UNIT FAILED                       |
| 0Ch  05h DT  W  O     DATA EXPANSION OCCURRED DURING COMPRESSION            |
| 69h  00h           A  DATA LOSS ON LOGICAL UNIT                             |
| 41h  00h D            DATA PATH FAILURE (SHOULD USE 40 NN)                  |
| 4Bh  00h DTLPWRSOMCA  DATA PHASE ERROR                                      |
| 11h  07h     W  O     DATA RE-SYNCHRONIZATION ERROR                         |
| 16h  03h D   W  O     DATA SYNC ERROR - DATA AUTO-REALLOCATED               |
| 16h  01h D   W  O     DATA SYNC ERROR - DATA REWRITTEN                      |
| 16h  04h D   W  O     DATA SYNC ERROR - RECOMMEND REASSIGNMENT              |
| 16h  02h D   W  O     DATA SYNC ERROR - RECOMMEND REWRITE                   |
| 16h  00h D   W  O     DATA SYNCHRONIZATION MARK ERROR                       |
| 11h  0Dh DT  WR O     DE-COMPRESSION CRC ERROR                              |
| 71h  00h  T           DECOMPRESSION EXCEPTION LONG ALGORITHM ID             |
| 70h  NNh  T           DECOMPRESSION EXCEPTION SHORT ALGORITHM ID OF NN      |
| 19h  00h D      O     DEFECT LIST ERROR                                     |
| 19h  03h D      O     DEFECT LIST ERROR IN GROWN LIST                       |
| 19h  02h D      O     DEFECT LIST ERROR IN PRIMARY LIST                     |
| 19h  01h D      O     DEFECT LIST NOT AVAILABLE                             |
| 1Ch  00h D      O     DEFECT LIST NOT FOUND                                 |
| 32h  01h D   W  O     DEFECT LIST UPDATE FAILURE                            |
| 40h  NNh DTLPWRSOMCA  DIAGNOSTIC FAILURE ON COMPONENT NN (80H-FFH)          |
| 66h  02h       S      DOCUMENT JAM IN AUTOMATIC DOCUMENT FEEDER             |
| 66h  03h       S      DOCUMENT MISS FEED AUTOMATIC IN DOCUMENT FEEDER       |
| 63h  00h      R       END OF USER AREA ENCOUNTERED ON THIS TRACK            |
| 00h  05h  T    S      END-OF-DATA DETECTED                                  |
| 14h  03h  T           END-OF-DATA NOT FOUND                                 |
| 00h  02h  T    S      END-OF-PARTITION/MEDIUM DETECTED                      |
| 51h  00h  T     O     ERASE FAILURE                                         |
| 0Ah  00h DTLPWRSOMCA  ERROR LOG OVERFLOW                                    |
| 11h  02h DT  W SO     ERROR TOO LONG TO CORRECT                             |
| 03h  02h  T           EXCESSIVE WRITE ERRORS                                |
| 67h  04h           A  EXCHANGE OF LOGICAL UNIT FAILED                       |
| 3Bh  07h   L          FAILED TO SENSE BOTTOM-OF-FORM                        |
| 3Bh  06h   L          FAILED TO SENSE TOP-OF-FORM                           |
| 5Dh  00h DTLPWRSOMCA  FAILURE PREDICTION THRESHOLD EXCEEDED                 |
| 00h  01h  T           FILEMARK DETECTED                                     |
| 14h  02h  T           FILEMARK OR SETMARK NOT FOUND                         |
| 09h  02h     WR O     FOCUS SERVO FAILURE                                   |
| 31h  01h D L    O     FORMAT COMMAND FAILED                                 |
| 58h  00h        O     GENERATION DOES NOT EXIST                             |
| 1Ch  02h D      O     GROWN DEFECT LIST NOT FOUND                           |
| 09h  04h DT  WR O     HEAD SELECT FAULT                                     |
| 00h  06h DTLPWRSOMCA  I/O PROCESS TERMINATED                                |
| 10h  00h D   W  O     ID CRC OR ECC ERROR                                   |
| 5Eh  03h DTLPWRSO CA  IDLE CONDITION ACTIVATED BY COMMAND                   |
| 5Eh  01h DTLPWRSO CA  IDLE CONDITION ACTIVATED BY TIMER                     |
| 22h  00h D            ILLEGAL FUNCTION (SHOULD USE 20 00, 24 00, OR 26 00)  |
| 64h  00h      R       ILLEGAL MODE FOR THIS TRACK                           |
| 28h  01h DT  WR OM    IMPORT OR EXPORT ELEMENT ACCESSED                     |
| 30h  00h DT  WR OM    INCOMPATIBLE MEDIUM INSTALLED                         |
| 11h  08h  T           INCOMPLETE BLOCK READ                                 |
| 6Ah  00h           A  INFORMATIONAL, REFER TO LOG                           |
| 48h  00h DTLPWRSOMCA  INITIATOR DETECTED ERROR MESSAGE RECEIVED             |
| 3Fh  03h DTLPWRSOMCA  INQUIRY DATA HAS CHANGED                              |
+=============================================================================+

            Table 50 - ASC and ASCQ assignments (continued)
+=============================================================================+
| ASC ASCQ DTLPWRSOMCA  DESCRIPTION                                           |
| --- ---- -----------  ----------------------------------------------------- |
| 44h  00h DTLPWRSOMCA  INTERNAL TARGET FAILURE                               |
| 3Dh  00h DTLPWRSOMCA  INVALID BITS IN IDENTIFY MESSAGE                      |
| 2Ch  02h       S      INVALID COMBINATION OF WINDOWS SPECIFIED              |
| 20h  00h DTLPWRSOMCA  INVALID COMMAND OPERATION CODE                        |
| 21h  01h DT  WR OM    INVALID ELEMENT ADDRESS                               |
| 24h  00h DTLPWRSOMCA  INVALID FIELD IN CDB                                  |
| 26h  00h DTLPWRSOMCA  INVALID FIELD IN PARAMETER LIST                       |
| 49h  00h DTLPWRSOMCA  INVALID MESSAGE ERROR                                 |
| 11h  05h     WR O     L-EC UNCORRECTABLE ERROR                              |
| 60h  00h       S      LAMP FAILURE                                          |
| 5Bh  02h DTLPWRSOM    LOG COUNTER AT MAXIMUM                                |
| 5Bh  00h DTLPWRSOM    LOG EXCEPTION                                         |
| 5Bh  03h DTLPWRSOM    LOG LIST CODES EXHAUSTED                              |
| 2Ah  02h DTL WRSOMCA  LOG PARAMETERS CHANGED                                |
| 21h  00h DT  WR OM    LOGICAL BLOCK ADDRESS OUT OF RANGE                    |
| 08h  00h DTL WRSOMCA  LOGICAL UNIT COMMUNICATION FAILURE                    |
| 08h  02h DTL WRSOMCA  LOGICAL UNIT COMMUNICATION PARITY ERROR               |
| 08h  01h DTL WRSOMCA  LOGICAL UNIT COMMUNICATION TIME-OUT                   |
| 05h  00h DTL WRSOMCA  LOGICAL UNIT DOES NOT RESPOND TO SELECTION            |
| 4Ch  00h DTLPWRSOMCA  LOGICAL UNIT FAILED SELF-CONFIGURATION                |
| 3Eh  01h           A  LOGICAL UNIT FAILURE                                  |
| 3Eh  00h DTLPWRSOMCA  LOGICAL UNIT HAS NOT SELF-CONFIGURED YET              |
| 04h  01h DTLPWRSOMCA  LOGICAL UNIT IS IN PROCESS OF BECOMING READY          |
| 68h  00h           A  LOGICAL UNIT NOT CONFIGURED                           |
| 04h  00h DTLPWRSOMCA  LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE          |
| 04h  04h DTL    O     LOGICAL UNIT NOT READY, FORMAT IN PROGRESS            |
| 04h  02h DTLPWRSOMCA  LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED |
| 04h  03h DTLPWRSOMCA  LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED  |
| 04h  07h DTLPWRSOMCA  LOGICAL UNIT NOT READY, OPERATION IN PROGRESS         |
| 04h  05h           A  LOGICAL UNIT NOT READY, REBUILD IN PROGRESS           |
| 04h  06h           A  LOGICAL UNIT NOT READY, RECALCULATION IN PROGRESS     |
| 25h  00h DTLPWRSOMCA  LOGICAL UNIT NOT SUPPORTED                            |
| 5Eh  00h DTLPWRSO CA  LOW POWER CONDITION ACTIVE                            |
| 15h  01h DTL WRSOM    MECHANICAL POSITIONING ERROR                          |
| 53h  00h DTL WRSOM    MEDIA LOAD OR EJECT FAILED                            |
| 3Bh  0Dh DT  WR OM    MEDIUM DESTINATION ELEMENT FULL                       |
| 31h  00h DT  W  O     MEDIUM FORMAT CORRUPTED                               |
| 3Bh  13h DT  WR OM    MEDIUM MAGAZINE INSERTED                              |
| 3Bh  14h DT  WR OM    MEDIUM MAGAZINE LOCKED                                |
| 3Bh  11h DT  WR OM    MEDIUM MAGAZINE NOT ACCESSIBLE                        |
| 3Bh  12h DT  WR OM    MEDIUM MAGAZINE REMOVED                               |
| 3Bh  15h DT  WR OM    MEDIUM MAGAZINE UNLOCKED                              |
| 3Ah  00h DTL WRSOM    MEDIUM NOT PRESENT                                    |
| 53h  02h DT  WR OM    MEDIUM REMOVAL PREVENTED                              |
| 3Bh  0Eh DT  WR OM    MEDIUM SOURCE ELEMENT EMPTY                           |
| 43h  00h DTLPWRSOMCA  MESSAGE ERROR                                         |
| 3Fh  01h DTLPWRSOMCA  MICROCODE HAS BEEN CHANGED                            |
| 1Dh  00h D   W  O     MISCOMPARE DURING VERIFY OPERATION                    |
| 11h  0Ah DT     O     MISCORRECTED ERROR                                    |
| 2Ah  01h DTL WRSOMCA  MODE PARAMETERS CHANGED                               |
| 67h  03h           A  MODIFICATION OF LOGICAL UNIT FAILED                   |
| 69h  01h           A  MULTIPLE LOGICAL UNIT FAILURES                        |
| 07h  00h DTL WRSOM    MULTIPLE PERIPHERAL DEVICES SELECTED                  |
| 11h  03h DT  W SO     MULTIPLE READ ERRORS                                  |
| 00h  00h DTLPWRSOMCA  NO ADDITIONAL SENSE INFORMATION                       |
| 00h  15h      R       NO CURRENT AUDIO STATUS TO RETURN                     |
| 32h  00h D   W  O     NO DEFECT SPARE LOCATION AVAILABLE                    |
+=============================================================================+

            Table 50 - ASC and ASCQ assignments (continued)
+=============================================================================+
| ASC ASCQ DTLPWRSOMCA  DESCRIPTION                                           |
| --- ---- -----------  ----------------------------------------------------- |
| 11h  09h  T           NO GAP FOUND                                          |
| 01h  00h D   W  O     NO INDEX/SECTOR SIGNAL                                |
| 06h  00h D   WR OM    NO REFERENCE POSITION FOUND                           |
| 02h  00h D   WR OM    NO SEEK COMPLETE                                      |
| 03h  01h  T           NO WRITE CURRENT                                      |
| 28h  00h DTLPWRSOMCA  NOT READY TO READY TRANSITION, MEDIUM MAY HAVE CHANGED|
| 00h  16h DTLPWRSOMCA  OPERATION IN PROGRESS                                 |
| 5Ah  01h DT  WR OM    OPERATOR MEDIUM REMOVAL REQUEST                       |
| 5Ah  00h DTLPWRSOM    OPERATOR REQUEST OR STATE CHANGE INPUT (UNSPECIFIED)  |
| 5Ah  03h DT  W  O     OPERATOR SELECTED WRITE PERMIT                        |
| 5Ah  02h DT  W  O     OPERATOR SELECTED WRITE PROTECT                       |
| 61h  02h       S      OUT OF FOCUS                                          |
| 4Eh  00h DTLPWRSOMCA  OVERLAPPED COMMANDS ATTEMPTED                         |
| 2Dh  00h  T           OVERWRITE ERROR ON UPDATE IN PLACE                    |
| 3Bh  05h   L          PAPER JAM                                             |
| 1Ah  00h DTLPWRSOMCA  PARAMETER LIST LENGTH ERROR                           |
| 26h  01h DTLPWRSOMCA  PARAMETER NOT SUPPORTED                               |
| 26h  02h DTLPWRSOMCA  PARAMETER VALUE INVALID                               |
| 2Ah  00h DTL WRSOMCA  PARAMETERS CHANGED                                    |
| 69h  02h           A  PARITY/DATA MISMATCH                                  |
| 1Fh  00h D      O     PARTIAL DEFECT LIST TRANSFER                          |
| 03h  00h DTL W SO     PERIPHERAL DEVICE WRITE FAULT                         |
| 50h  02h  T           POSITION ERROR RELATED TO TIMING                      |
| 3Bh  0Ch  T    S      POSITION PAST BEGINNING OF MEDIUM                     |
| 3Bh  0Bh       S      POSITION PAST END OF MEDIUM                           |
| 15h  02h DT  WR O     POSITIONING ERROR DETECTED BY READ OF MEDIUM          |
| 29h  01h DTLPWRSOMCA  POWER ON OCCURRED                                     |
| 29h  00h DTLPWRSOMCA  POWER ON, RESET, OR BUS DEVICE RESET OCCURRED         |
| 42h  00h D            POWER-ON OR SELF-TEST FAILURE (SHOULD USE 40 NN)      |
| 1Ch  01h D      O     PRIMARY DEFECT LIST NOT FOUND                         |
| 40h  00h D            RAM FAILURE (SHOULD USE 40 NN)                        |
| 15h  00h DTL WRSOM    RANDOM POSITIONING ERROR                              |
| 3Bh  0Ah       S      READ PAST BEGINNING OF MEDIUM                         |
| 3Bh  09h       S      READ PAST END OF MEDIUM                               |
| 11h  01h DT  W SO     READ RETRIES EXHAUSTED                                |
| 6Ch  00h           A  REBUILD FAILURE OCCURED                               |
| 6Dh  00h           A  RECALCULATE FAILURE OCCURED                           |
| 14h  01h DT  WR O     RECORD NOT FOUND                                      |
| 14h  06h DT  W  O     RECORD NOT FOUND - DATA AUTO-REALLOCATED              |
| 14h  05h DT  W  O     RECORD NOT FOUND - RECOMMEND REASSIGNMENT             |
| 14h  00h DTL WRSO     RECORDED ENTITY NOT FOUND                             |
| 18h  02h D   WR O     RECOVERED DATA - DATA AUTO-REALLOCATED                |
| 18h  05h D   WR O     RECOVERED DATA - RECOMMEND REASSIGNMENT               |
| 18h  06h D   WR O     RECOVERED DATA - RECOMMEND REWRITE                    |
| 17h  05h D   WR O     RECOVERED DATA USING PREVIOUS SECTOR ID               |
| 18h  03h      R       RECOVERED DATA WITH CIRC                              |
| 18h  07h D   W  O     RECOVERED DATA WITH ECC - DATA REWRITTEN              |
| 18h  01h D   WR O     RECOVERED DATA WITH ERROR CORRECTION & RETRIES APPLIED|
| 18h  00h DT  WR O     RECOVERED DATA WITH ERROR CORRECTION APPLIED          |
| 18h  04h      R       RECOVERED DATA WITH L-EC                              |
| 17h  03h DT  WR O     RECOVERED DATA WITH NEGATIVE HEAD OFFSET              |
| 17h  00h DT  WRSO     RECOVERED DATA WITH NO ERROR CORRECTION APPLIED       |
| 17h  02h DT  WR O     RECOVERED DATA WITH POSITIVE HEAD OFFSET              |
| 17h  01h DT  WRSO     RECOVERED DATA WITH RETRIES                           |
| 17h  04h     WR O     RECOVERED DATA WITH RETRIES AND/OR CIRC APPLIED       |
| 17h  06h D   W  O     RECOVERED DATA WITHOUT ECC - DATA AUTO-REALLOCATED    |
| 17h  09h D   W  O     RECOVERED DATA WITHOUT ECC - DATA REWRITTEN           |
+=============================================================================+

            Table 50 - ASC and ASCQ assignments (continued)
+=============================================================================+
| ASC ASCQ DTLPWRSOMCA  DESCRIPTION                                           |
| --- ---- -----------  ----------------------------------------------------- |
| 17h  07h D   W  O     RECOVERED DATA WITHOUT ECC - RECOMMEND REASSIGNMENT   |
| 17h  08h D   W  O     RECOVERED DATA WITHOUT ECC - RECOMMEND REWRITE        |
| 1Eh  00h D   W  O     RECOVERED ID WITH ECC CORRECTION                      |
| 6Bh  01h           A  REDUNDANCY LEVEL GOT BETTER                           |
| 6Bh  02h           A  REDUNDANCY LEVEL GOT WORSE                            |
| 67h  05h           A  REMOVE OF LOGICAL UNIT FAILED                         |
| 3Bh  08h  T           REPOSITION ERROR                                      |
| 36h  00h   L          RIBBON, INK, OR TONER FAILURE                         |
| 37h  00h DTL WRSOMCA  ROUNDED PARAMETER                                     |
| 5Ch  00h D      O     RPL STATUS CHANGE                                     |
| 39h  00h DTL WRSOMCA  SAVING PARAMETERS NOT SUPPORTED                       |
| 62h  00h       S      SCAN HEAD POSITIONING ERROR                           |
| 29h  02h DTLPWRSOMCA  SCSI BUS RESET OCCURRED                               |
| 47h  00h DTLPWRSOMCA  SCSI PARITY ERROR                                     |
| 54h  00h    P         SCSI TO HOST SYSTEM INTERFACE FAILURE                 |
| 45h  00h DTLPWRSOMCA  SELECT OR RESELECT FAILURE                            |
| 3Bh  00h  TL          SEQUENTIAL POSITIONING ERROR                          |
| 00h  03h  T           SETMARK DETECTED                                      |
| 3Bh  04h   L          SLEW FAILURE                                          |
| 09h  03h     WR O     SPINDLE SERVO FAILURE                                 |
| 5Ch  02h D      O     SPINDLES NOT SYNCHRONIZED                             |
| 5Ch  01h D      O     SPINDLES SYNCHRONIZED                                 |
| 5Eh  04h DTLPWRSO CA  STANDBY CONDITION ACTIVATED BY COMMAND                |
| 5Eh  02h DTLPWRSO CA  STANDBY CONDITION ACTIVATED BY TIMER                  |
| 6Bh  00h           A  STATE CHANGE HAS OCCURRED                             |
| 1Bh  00h DTLPWRSOMCA  SYNCHRONOUS DATA TRANSFER ERROR                       |
| 55h  00h    P         SYSTEM RESOURCE FAILURE                               |
| 4Dh  NNh DTLPWRSOMCA  TAGGED OVERLAPPED COMMANDS (NN = QUEUE TAG)           |
| 33h  00h  T           TAPE LENGTH ERROR                                     |
| 3Bh  03h   L          TAPE OR ELECTRONIC VERTICAL FORMS UNIT NOT READY      |
| 3Bh  01h  T           TAPE POSITION ERROR AT BEGINNING-OF-MEDIUM            |
| 3Bh  02h  T           TAPE POSITION ERROR AT END-OF-MEDIUM                  |
| 3Fh  00h DTLPWRSOMCA  TARGET OPERATING CONDITIONS HAVE CHANGED              |
| 5Bh  01h DTLPWRSOM    THRESHOLD CONDITION MET                               |
| 26h  03h DTLPWRSOMCA  THRESHOLD PARAMETERS NOT SUPPORTED                    |
| 3Eh  02h           A  TIMEOUT ON LOGICAL UNIT                               |
| 2Ch  01h       S      TOO MANY WINDOWS SPECIFIED                            |
| 09h  00h DT  WR O     TRACK FOLLOWING ERROR                                 |
| 09h  01h     WR O     TRACKING SERVO FAILURE                                |
| 61h  01h       S      UNABLE TO ACQUIRE VIDEO                               |
| 57h  00h      R       UNABLE TO RECOVER TABLE-OF-CONTENTS                   |
| 53h  01h  T           UNLOAD TAPE FAILURE                                   |
| 11h  00h DT  WRSO     UNRECOVERED READ ERROR                                |
| 11h  04h D   W  O     UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED       |
| 11h  0Bh D   W  O     UNRECOVERED READ ERROR - RECOMMEND REASSIGNMENT       |
| 11h  0Ch D   W  O     UNRECOVERED READ ERROR - RECOMMEND REWRITE THE DATA   |
| 46h  00h DTLPWRSOMC   UNSUCCESSFUL SOFT RESET                               |
| 59h  00h        O     UPDATED BLOCK READ                                    |
| 61h  00h       S      VIDEO ACQUISITION ERROR                               |
| 65h  00h DTLPWRSOMCA  VOLTAGE FAULT                                         |
| 50h  00h  T           WRITE APPEND ERROR                                    |
| 50h  01h  T           WRITE APPEND POSITION ERROR                           |
| 0Ch  00h  T    S      WRITE ERROR                                           |
| 0Ch  02h D   W  O     WRITE ERROR - AUTO REALLOCATION FAILED                |
| 0Ch  03h D   W  O     WRITE ERROR - RECOMMEND REASSIGNMENT                  |
| 0Ch  01h              WRITE ERROR - RECOVERED WITH AUTO REALLOCATION        |
| 27h  00h DT  W  O     WRITE PROTECTED                                       |
+=============================================================================+

            Table 50 - ASC and ASCQ assignments (continued)
+=============================================================================+
| ASC ASCQ DTLPWRSOMCA  DESCRIPTION                                           |
| --- ---- -----------  ----------------------------------------------------- |
| 80h  xxh     \                                                              |
| THROUGH       >       Vendor-specific.                                      |
| FFh  xxh     /                                                              |
|                                                                             |
| xxh  80h     \                                                              |
| THROUGH       >       Vendor-specific QUALIFICATION OF STANDARD ASC.        |
| xxh  FFh     /                                                              |
|                       ALL CODES NOT SHOWN ARE RESERVED.                     |
|-----------------------------------------------------------------------------|
|NOTE - Annex B contains the ASC and ASCQ assignments in numeric order.       |
+=============================================================================+


7.19 RESERVE(6) command

The RESERVE(6) command (see table 51) is used to reserve a logical unit
or, if the extent reservation option is implemented, extents within a
logical unit.

                     Table 51 - RESERVE(6) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (16h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |        Reserved          | 3rdPty | Third party device ID    | Extent |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reservation identification                  |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                        Extent list length                       ---|
| 4   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

The RESERVE and RELEASE commands provide the basic mechanism for
contention resolution in multiple-initiator systems.  The third-party
reservation allows logical units or extents to be reserved for another
specified SCSI device.

If the RESERVE(6) command is implemented, then the RELEASE(6) also shall
be implemented.

7.19.1 Logical unit reservation (Mandatory)

If the extent bit is zero, this command shall request that the entire
logical unit be reserved for the exclusive use of the initiator until
the reservation is superseded by another valid RESERVE command from the
same initiator or until released by a RELEASE command from the same
initiator that made the reservation, by a TARGET RESET task management
function performed by any initiator, by a hard reset condition, or by a
power on cycle.  A logical unit reservation shall not be granted if the
logical unit or any extent is reserved by another initiator.  It shall
be permissible for an initiator to reserve a logical unit that is
currently reserved by that initiator.  If the extent bit is zero, the
reservation identification and the extent list length shall be ignored.

If the logical unit, or any extent within the logical unit is reserved
for another initiator, the device server shall return RESERVATION
CONFLICT status.

After honoring a logical unit reservation, the device server shall check
each newly received command for reservation conflicts.  See clause
5.3.1.

For dual port implementations, devices on the other port (i.e., the port
that does not include the initiator to which the reservation has been
granted) also shall be denied access to the logical unit as described in
the preceding paragraph.

7.19.2 Extent reservation (Optional)

The reservation identification field provides a means for an application
client to identify each extent reservation.  This allows an application
client in a multiple tasking environment, to have multiple reservations
outstanding.  The reservation identification is used in the RELEASE
command to specify which reservation is to be released.  It is also used
in superseding RESERVE commands to specify which reservation is to be
superseded.

If the extent reservation option is implemented, then the extent release
option (see 7.16.2) shall also be implemented.  These options permit
multiple extents within the logical unit to be reserved, each with a
separate reservation type.  (Reservation types are listed in table 53.)

If the extent bit is one, and the extent reservation option is
implemented, then the device server shall process the reservation
request as follows:
  a)  The extent list shall be checked for the number of extents in the
      reservation request.  If the extent list length is zero, no
      current reservations shall be changed, no new reservations shall
      be created, and this condition shall not be treated as an error. 
      If the extent list contains more extents than are supported on the
      logical unit, the command shall be terminated with CHECK CONDITION
      status and the sense key shall be set to ILLEGAL REQUEST.  If the
      extent list contains more extents than are currently available on
      the logical unit, then the device server shall return a
      RESERVATION CONFLICT status. 
  b)  The extent list shall be checked for valid extent logical block
      addresses.  If any logical block address is invalid for this
      logical unit, the command shall be terminated with CHECK CONDITION
      status and the sense key shall be set to ILLEGAL REQUEST.  The
      extent list shall be checked for invalid extent overlaps (as
      defined by reservation type) with other extent descriptors in the
      extent list and if invalid overlaps are found, the command shall
      be terminated with CHECK CONDITION status and the sense key shall
      be set to ILLEGAL REQUEST.
  c)  If the requested reservation does not conflict with an existing
      reservation, the extents specified shall be reserved until
      superseded by another valid RESERVE command from the initiator
      that made the reservation or until released by a RELEASE command
      from the same initiator, by a TARGET RESET task management
      function performed by any initiator, by a hard reset condition, or
      by a power on cycle.  (Clause 7.19.4 describes how reservations
      may be superseded.)  If any of the last three conditions occur, a
      unit attention condition shall be generated.
  d)  If the reservation request conflicts with an existing reservation,
      then the device server shall return a RESERVATION CONFLICT status.

If the extent bit is one, and the extent reservation option is not
implemented, then the RESERVE command shall be rejected with CHECK
CONDITION status and the sense key shall be set to ILLEGAL REQUEST.

The size of the extent list shall be defined by the extent list length
field.  The extent list shall consist of zero or more descriptors as
shown in table 52.  Each extent descriptor defines an extent beginning
at the specified logical block address for the specified number of
blocks.  If the number of blocks is zero, the extent shall begin at the
specified logical block address and continue through the last logical
block address on the logical unit.

             Table 52 - Data format of extent descriptors
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+============================================+========+=================|
| 0   |               Reserved                     | RelAdr | Reservation type|
|-----+-----------------------------------------------------------------------|
| 1   | (MSB)                                                                 |
|- - -+- -                        Number of blocks                         - -|
| 3   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 4   | (MSB)                                                                 |
|- - -+- -                        Logical block address                    - -|
| 7   |                                                                 (LSB) |
+=============================================================================+

The reservation type field shall define the type of reservation in
effect for the extent.  The types of reservation are defined in table
53.

                     Table 53 - Reservation types
+====================-=====================+
| Reservation type   |  Description        |
|--------------------+---------------------|
|        00b         |  Read shared        |
|        01b         |  Write exclusive    |
|        10b         |  Read exclusive     |
|        11b         |  Exclusive access   |
+==========================================+

a)  Read exclusive.  While this reservation is active, no other
    initiator shall be permitted read operations to the indicated
    extent.  This reservation shall not inhibit write operations from
    any initiator or conflict with a write exclusive reservation;
    however, read exclusive, exclusive access, and read shared
    reservations that overlap this extent shall conflict with this
    reservation.

b)  Write exclusive.  While this reservation is active, no other
    initiator shall be permitted write operations to the indicated
    extent.  This reservation shall not inhibit read operations from any
    initiator or conflict with a read exclusive reservation from any
    initiator.  This reservation shall conflict with write exclusive,
    exclusive access, and read shared reservations that overlap this
    extent.

c)  Exclusive access.  While this reservation is active, no other
    initiator shall be permitted any access to the indicated extent. 
    All reservation types that overlap this extent shall conflict with
    this reservation.

d)  Read shared.  While this reservation is active, no write operations
    shall be permitted by any initiator to the indicated extent.  This
    reservation shall not inhibit read operations from any initiator or
    conflict with a read shared reservation.  Read exclusive, write
    exclusive, and exclusive access reservations that overlap with this
    extent shall conflict with this reservation.

If the relative address bit is one, the logical block address in the
extent descriptor shall be treated as a two's complement displacement. 
This displacement shall be added to the logical block address last
accessed on the logical unit to form the logical block address for this
extent.  This feature is only available when linking commands and
requires that a previous command in the linked group has accessed a
logical block on the logical unit; if not, the RESERVE command shall be
terminated with CHECK CONDITION status and the sense key shall be set to
ILLEGAL REQUEST.

If an application client attempts a command to a logical block that has
been reserved and that access is prohibited by the reservation, a
reservation conflict shall occur.  See clause 5.3.1.

7.19.3 Third-party reservation (Mandatory)

The third-party reservation for the RESERVE command allows an
application client to reserve a logical unit or extents within a logical
unit for another SCSI device.  This is intended for use in multiple-
initiator systems that use the COPY command.

If the third-party (3rdPty) bit is zero, then a third-party reservation
is not requested.  If the 3rdPty bit is one then the device server shall
reserve the specified logical unit or extents for the SCSI device
specified in the third-party device ID field.  Device ID formats are
protocol-specific.  The device server shall preserve the reservation
until it is superseded by another valid RESERVE command from the
initiator that made the reservation or until it is released by the same
initiator, by a TARGET RESET task management function performed by any
initiator, a hard reset condition, or by a power on cycle.  The device
server shall ignore any attempt to release the reservation made by any
other initiator.

In the RESERVE(6) command, the Third party device ID field is restricted
to three bits (values 0 to 7).  If larger Third party device ID values
are required, the RESERVE(10) command must be used.

After a third-party reservation has been granted, the initiator that
sent the RESERVE command shall be treated like any other initiator. 
Reservation conflicts shall occur in all cases where another initiator
is not allowed access due to the reservation.

If independent sets of mode parameters are implemented, a third party
reservation shall cause the device server to transfer the set of mode
parameters in effect for the application client that sent the RESERVE
command to the mode parameters used for commands from the third party
device.  Any subsequent command issued by the third-party device shall
be executed according to the mode parameters in effect for the
application client that sent the RESERVE command.

  NOTE 43 This transfer of the mode parameters is applicable to device
  servers that store mode information independently for different
  initiators.  This mechanism allows an application client to set the
  mode parameters of a target for the use of a copy master (i.e. the
  third-party device).  The third-party copy master may subsequently
  issue a MODE SELECT command to modify the mode parameters.

7.19.4 Superseding reservations (Mandatory)

Implementation of superseding reservations is mandatory.  An application
client that holds a current reservation (unit or extent) may modify that
reservation by issuing another RESERVE command (unit or extent) to the
same logical unit.  The superseding RESERVE command shall release the
previous reservation state (unit or extent) when the new reservation
request is granted.  If the superseding reservation is for an extent
reservation and the current reservation is also an extent reservation,
the current extent reservation identification value is used for the
superseding reservation.  The current reservation shall not be modified
if the superseding reservation request cannot be granted.  If the
superseding reservation cannot be granted because of conflicts with a
previous reservation (other than the reservation being superseded), then
the device server shall return RESERVATION CONFLICT status.

  NOTE 44 Superseding reservations allow the SCSI device ID to be
  changed on a reservation using the third-party reservation option. 
  This capability is necessary for certain situations when using
  COMPARE, COPY, and COPY AND VERIFY commands.


7.20 RESERVE(10) command

The RESERVE(10) command (see table 54) is used to reserve a logical unit
or, if the extent reservation option is implemented, extents within a
logical unit.  This clause describes only those instances where the
RESERVE(10) command differs from the RESERVE(6) command.  Except for the
instances described in this clause, the RESERVE(10) command shall
function exactly like the RESERVE(6) command (see 7.19).

                    Table 54 - RESERVE(10) command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (56h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |         Reserved         | 3rdPty |     Reserved    | LongID | Extent |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reservation identification                  |
|-----+-----------------------------------------------------------------------|
| 3   |                           Third party device ID                       |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   | (MSB)                                                                 |
|-----+--                         Parameter list length                    ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

The RESERVE(10) and RELEASE(10) commands provide the basic mechanism for
contention resolution in multiple-initiator systems.  The third-party
reservation allows logical units or extents to be reserved for another
specified SCSI device.

If the RESERVE(10) command is implemented, then the RELEASE(10) also
shall be implemented.

If the Third party device ID value associated with the reservation
release is smaller than 255, the LongID bit may be zero and the ID value
sent in the CDB.  Device ID formats are protocol-specific.  If the Third
party device ID is greater than 255, the LongID bit shall be one.  If
the LongID bit is one, the Third party device ID field in the CDB shall
be ignored.  If the LongID bit is one, the Parameter list length shall
be at least eight.  If the LongID bit is one and the Parameter list
length is less than eight, the device server shall return a CHECK
CONDITION status with a sense key of ILLEGAL REQUEST.

If both the LongID and Extent bits are one, then the parameter list
shall have the format shown in table 55 and the extent list length shall
be the Parameter list length minus eight.

          Table 55 - RESERVE(10) ID & extents parameter list
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   | (MSB)                                                                 |
|- - -+- -                        Third party device ID                    - -|
| 7   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 8   |                                                                       |
|- - -+- -                        Extent descriptors (see table 52)        - -|
| n   |                                                                       |
+=============================================================================+

If the LongID bit is one and the Extent bit is zero, the Parameter list
length shall be eight, and the parameter list shall have the format
shown in table 56.  If the LongID bit is one and the Extent bit is zero
and the Parameter list length is not eight, the device server shall
return a CHECK CONDITION status with a sense key of ILLEGAL REQUEST.

             Table 56 - RESERVE(10) ID only parameter list
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   | (MSB)                                                                 |
|- - -+- -                        Third party device ID                    - -|
| 7   |                                                                 (LSB) |
+=============================================================================+

If the LongID bit is zero, the Parameter list shall be processed as an
extent list (see 7.19.2).


7.21 SEND DIAGNOSTIC command

The SEND DIAGNOSTIC command (see table 57) requests the target to
perform diagnostic operations on itself, on the logical unit, or on
both.  The only mandatory implementation of this command is the self-
test feature with the parameter list length of zero.  Except when the
self-test bit is one, this command is usually followed by a RECEIVE
DIAGNOSTIC RESULTS (clause 7.15) command.

                  Table 57 - SEND DIAGNOSTIC command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (1Dh)                        |
|-----+-----------------------------------------------------------------------|
| 1   | Reserved                 |   PF   |Reserved|SelfTest| DevOfL | UnitOfL|
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                        Parameter list length                    ---|
| 4   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a SEND DIAGNOSTIC command is
received from an initiator other than the one holding a logical unit
reservation.  If an initiator has an extent reservation on a SCSI
device, and an another initiator sends a SEND DIAGNOSTIC, a reservation
conflict shall occur if the SEND DIAGNOSTIC affects the manner in which
access to an extent reserved by the first initiator is performed.  If
the SEND DIAGNOSTIC does not affect access to the reserved extent, then
a reservation conflict shall not occur.

A page format (PF) bit of one specifies that the SEND DIAGNOSTIC
parameters conform to the page structure as specified in this standard. 
The implementation of the PF bit is optional.  See 8.1 for the
definition of diagnostic pages.  A PF bit of zero indicates that the
SEND DIAGNOSTIC parameters are as specified in SCSI-1 (i.e. all
parameters are vendor-specific).

A self-test (SelfTest) bit of one directs the device server to complete
the target's default self-test.  If the self-test successfully passes,
the command shall be terminated with GOOD status; otherwise, the command
shall be terminated with CHECK CONDITION status and the sense key shall
be set to HARDWARE ERROR.

A self-test bit of zero requests that the device server perform the
diagnostic operation specified in the parameter list.  The diagnostic
operation might or might not require the device server to return data
that contains diagnostic results.  If the return of data is not
required, the return of GOOD status indicates successful completion of
the diagnostic operation.  If the return of data is required, the device
server shall either:
  a)  perform the requested diagnostic operation, prepare the data to be
      returned and indicate completion by returning GOOD status.  The
      application client issues a RECEIVE DIAGNOSTIC RESULTS command to
      recover the data;
  b)  accept the parameter list, and if no errors are detected in the
      parameter list, return GOOD status.  The requested diagnostic
      operation and the preparation of the data to be returned are
      performed upon receipt of a RECEIVE DIAGNOSTIC RESULTS command.

The device off-line (DevOfL) and unit off-line (UnitOfL) bits are
generally set by operating system software, while the parameter list is
prepared by diagnostic application software.  These bits grant
permission to perform vendor-specific diagnostic operations on the
target that may be visible to attached initiators.  Thus, by preventing
operations that are not enabled by these bits, the target assists the
operating system in protecting its resources.

A UnitOfL bit of one grants permission to the target to perform
diagnostic operations that may affect the user accessible medium on the
logical unit, e.g. write operations to the user accessible medium, or
repositioning of the medium on sequential access devices.  The
implementation of the UnitOfl bit is optional.  A UnitOfL bit of zero
prohibits any diagnostic operations that may be detected by subsequent
tasks.  

A DevOfl bit of one grants permission to the target to perform
diagnostic operations that may affect all the logical units on a target,
e.g. alteration of reservations, log parameters, or sense data.  The
implementation of the DevOfl bit is optional.  A DevOfL bit of zero
prohibits diagnostic operations that may be detected by subsequent
tasks.

The parameter list length field specifies the length in bytes of the
parameter list that shall be transferred from the application client to
the device server.  A parameter list length of zero indicates that no
data shall be transferred.  This condition shall not be considered an
error.  If the specified parameter list length results in the truncation
of one or more pages (PF bit set to one) the target shall return CHECK
CONDITION status with a sense key of ILLEGAL REQUEST and an additional
sense code of INVALID FIELD IN CDB.  

  NOTE 45 To insure that the diagnostic command information is not
  destroyed by a command sent from another initiator, either the SEND
  DIAGNOSTIC command should be linked to the RECEIVE DIAGNOSTIC
  RESULTS command or the logical unit should be reserved.


7.22 TEST UNIT READY Command

The TEST UNIT READY command (see table 58) provides a means to check if
the logical unit is ready.  This is not a request for a self-test.  If
the logical unit would accept an appropriate medium-access command
without returning CHECK CONDITION status, this command shall return a
GOOD status.  If the logical unit cannot become operational or is in a
state such that an application client action (e.g., START UNIT command)
is required to make the unit ready, the device server shall return CHECK
CONDITION status with a sense key of NOT READY.

                  Table 58 - TEST UNIT READY command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (00h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a TEST UNIT READY command is
received from an initiator other than the one holding a logical unit
reservation.  The TEST UNIT READY command shall not be affected by
extent reservations.

Table 59 defines the preferred responses to the TEST UNIT READY command.
Higher-priority responses (e.g. BUSY or RESERVATION CONFLICT) are also
permitted.

            Table 59 - Preferred TEST UNIT READY responses
+=================-=================-=========================================+
|      Status     |    Sense key    |             ASC and ASCQ                |
|-----------------+-----------------+-----------------------------------------|
| GOOD            | NO SENSE        | NO ADDITIONAL SENSE INFORMATION or      |
|                 |                 |    other valid additional sense code.   |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | ILLEGAL REQUEST | LOGICAL UNIT NOT SUPPORTED              |
|                 |                 |                                         |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | LOGICAL UNIT DOES NOT RESPOND           |
|                 |                 |    TO SELECTION                         |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | MEDIUM NOT PRESENT                      |
|                 |                 |                                         |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | LOGICAL UNIT NOT READY,                 |
|                 |                 |    CAUSE NOT REPORTABLE                 |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | LOGICAL UNIT IS IN PROCESS              |
|                 |                 |    OF BECOMING READY                    |
+=============================================================================+

      Table 59 - Preferred TEST UNIT READY responses (continued)
+=================-=================-=========================================+
|      Status     |    Sense key    |             ASC and ASCQ                |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | LOGICAL UNIT NOT READY,                 |
|                 |                 |    INITIALIZING COMMAND REQUIRED        |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | LOGICAL UNIT NOT READY,                 |
|                 |                 |    MANUAL INTERVENTION REQUIRED         |
|-----------------+-----------------+-----------------------------------------|
| CHECK CONDITION | NOT READY       | LOGICAL UNIT NOT READY,                 |
|                 |                 |    FORMAT IN PROGRESS                   |
+=============================================================================+


7.23 WRITE BUFFER command

The WRITE BUFFER command (see table 60) is used in conjunction with the
READ BUFFER command as a diagnostic function for testing logical unit
memory in the target SCSI device and the integrity of the service
delivery subsystem.  Additional modes are provided for downloading
microcode and for downloading and saving microcode.

                    Table 60 - WRITE BUFFER command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (3Bh)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved         |          Mode            |
|-----+-----------------------------------------------------------------------|
| 2   |                           Buffer ID                                   |
|-----+-----------------------------------------------------------------------|
| 3   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 4   |                           Buffer offset                               |
|-----+---                                                                 ---|
| 5   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 6   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 7   |                           Parameter list length                       |
|-----+---                                                                 ---|
| 8   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 9   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a WRITE BUFFER command is
received from an initiator other than the one holding a logical unit or
extent reservation.

This command shall not alter any medium of the logical unit when the
data mode or the combined header and data mode is specified.  

The function of this command and the meaning of fields within the
command descriptor block depend on the contents of the mode field.  The
mode field is defined in table 61.

                  Table 61 - WRITE BUFFER mode field
+========-===========================================-===================+
|  Mode  |  Description                              |  Implementation   |
|        |                                           |  requirements     |
|--------+-------------------------------------------+-------------------|
|  000b  |  Write combined header and data           |  Optional         |
|  001b  |  Vendor-specific                          |  Vendor-specific  |
|  010b  |  Write data                               |  Optional         |
|  011b  |  Reserved                                 |  Reserved         |
|  100b  |  Download microcode                       |  Optional         |
|  101b  |  Download microcode and save              |  Optional         |
|  110b  |  Download microcode with offsets          |  Optional         |
|  111b  |  Download microcode with offsets and save |  Optional         |
+========================================================================+

  NOTE 46 Modes 000b and 001b are included for compatibility with
  SCSI-1 products that were designed prior to the generation of this
  standard.  These products restrict the maximum transfer length to
  65 535 bytes.

7.23.1 Combined header and data mode (000b)

In this mode, data to be transferred is preceded by a four-byte header. 
The four-byte header consists of all reserved bytes.  The buffer ID and
the buffer offset fields shall be zero.  The parameter list length field
specifies the maximum number of bytes that shall be transferred from the
Data-Out buffer.  This number includes four bytes of header, so the data
length to be stored in the device server's buffer is parameter list
length minus four.  The application client should attempt to ensure that
the parameter list length is not greater than four plus the buffer
capacity (see 7.13.1) that is returned in the header of the READ BUFFER
command (mode 00b).  If the parameter list length exceeds the buffer
capacity device server shall return CHECK CONDITION status and shall set
the sense key to ILLEGAL REQUEST.

7.23.2 Vendor-specific mode (001b)

In this mode, the meaning of the buffer ID, buffer offset, and parameter
list length fields are not specified by this standard.

7.23.3 Data mode (010b)

In this mode, the Data-Out buffer contains buffer data destined for the
logical unit.  The buffer ID field identifies a specific buffer within
the logical unit.  The vendor assigns buffer ID codes to buffers within
the logical unit.  Buffer ID zero shall be supported.  If more than one
buffer is supported, additional buffer ID codes shall be assigned
contiguously, beginning with one.  If an unsupported buffer ID code is
selected, the device server shall return CHECK CONDITION status and
shall set the sense key to ILLEGAL REQUEST with an additional sense code
of INVALID FIELD IN CDB.

Data are written to the logical unit buffer starting at the location
specified by the buffer offset.  The application client should conform
to the offset boundary requirements returned in the READ BUFFER
descriptor.  If the device server is unable to accept the specified
buffer offset, it shall return CHECK CONDITION status and it shall set
the sense key to ILLEGAL REQUEST with an additional sense code of
INVALID FIELD IN CDB.

The parameter list length specifies the maximum number of bytes that
shall be transferred from the Data-Out buffer to be stored in the
specified buffer beginning at the buffer offset.  The application client
should attempt to ensure that the parameter list length plus the buffer
offset does not exceed the capacity of the specified buffer.  (The
capacity of the buffer can be determined by the buffer capacity field in
the READ BUFFER descriptor.)  If the buffer offset and parameter list
length fields specify a transfer that would exceed the buffer capacity,
the device server shall return CHECK CONDITION status and shall set the
sense key to ILLEGAL REQUEST with an additional sense code of INVALID
FIELD IN CDB. 

7.23.4 Download microcode mode (100b)

If the logical unit cannot accept this command because of some device
condition, the device server shall terminate each WRITE BUFFER command
with this mode (100b) with a CHECK CONDITION status, a sense key of
ILLEGAL REQUEST, and shall set the additional sense code to COMMAND
SEQUENCE ERROR.

In this mode, vendor-specific microcode or control information shall be
transferred to the control memory space of the logical unit.  After a
power-cycle or reset, the device operation shall revert to a vendor-
specific condition.  The meanings of the buffer ID, buffer offset, and
parameter list length fields are not specified by this standard and are
not required to be zero-filled.  When the microcode download has
completed successfully the device server shall generate a unit attention
condition for all initiators except the one that issued the WRITE BUFFER
command (see the SAM).  The additional sense code shall be set to
MICROCODE HAS BEEN CHANGED.

7.23.5 Download microcode and save mode (101b)

If the logical unit cannot accept this command because of some device
condition, the device server shall terminate each WRITE BUFFER command
with this mode (101b) with a CHECK CONDITION status, a sense key of
ILLEGAL REQUEST, and shall set the additional sense code to COMMAND
SEQUENCE ERROR.

In this mode, vendor-specific microcode or control information shall be
transferred to the logical unit and, if the WRITE BUFFER command is
completed successfully, also shall be saved in a non-volatile memory
space (semiconductor, disk, or other).  The downloaded code shall then
be effective after each power-cycle and reset until it is supplanted in
another download microcode and save operation.  The meanings of the
buffer ID, buffer offset, and parameter list length fields are not
specified by this standard and are not required to be zero-filled.  When
the download microcode and save command has completed successfully the
device server shall generate a unit attention condition (see the SAM)
for all initiators except the one that issued the WRITE BUFFER command. 
When reporting the unit attention condition, the device server shall set
the additional sense code to MICROCODE HAS BEEN CHANGED.


7.23.6 Download microcode with offsets (110b)

In this mode, the application client may split the transfer of the
vendor-specific microcode or control information over two or more WRITE
BUFFER commands.  If the logical unit cannot accept this command because
of some device condition, the device server shall terminate each WRITE
BUFFER command with this mode (110b) with a CHECK CONDITION status, a
sense key of ILLEGAL REQUEST, and shall set the additional sense code to
COMMAND SEQUENCE ERROR.

If the last WRITE BUFFER command of a set of one or more commands
completes successfully, the microcode or control information shall be
transferred to the control memory space of the logical unit.  After a
power-cycle or reset, the device shall revert to a vendor-specific
condition.  In this mode, the Data-Out buffer contains vendor-specific,
self-describing microcode or control information.

Since the downloaded microcode or control information may be sent using
several commands, when the logical unit detects the last download
microcode with offsets and save mode WRITE BUFFER command has been
received, the device server shall perform any logical unit required
verification of the complete set of downloaded microcode or control
information prior to returning GOOD status for the last command.  After
the last command completes successfully the device server shall generate
a unit attention condition (see the SAM) for all initiators except the
one that issued the set of WRITE BUFFER commands.  When reporting the
unit attention condition, the device server shall set the additional
sense code to MICROCODE HAS BEEN CHANGED.

If the complete set of WRITE BUFFER commands required to effect a
microcode or control information change (one or more commands) are not
received before a reset or power-on cycle occurs, the change shall not
be effective and the microcode or control information is discarded.

The buffer ID field identifies a specific buffer within the logical
unit.  The vendor assigns buffer ID codes to buffers within the logical
unit.  A Buffer ID value of zero shall be supported.  If more than one
buffer is supported, additional buffer ID codes shall be assigned
contiguously, beginning with one.  If an unsupported buffer ID code is
identified, the device server shall return CHECK CONDITION status and
shall set the sense key to ILLEGAL REQUEST with an additional sense code
of INVALID FIELD IN CDB.

The microcode or control information are written to the logical unit
buffer starting at the location specified by the buffer offset.  The
application client shall conform to the offset boundary requirements. 
If the device server is unable to accept the specified buffer offset, it
shall return CHECK CONDITION status and it shall set the sense key to
ILLEGAL REQUEST with an additional sense code of INVALID FIELD IN CDB.

The parameter list length specifies the maximum number of bytes that
shall be present in the Data-Out buffer to be stored in the specified
buffer beginning at the buffer offset.  The application client should
attempt to ensure that the parameter list length plus the buffer offset
does not exceed the capacity of the specified buffer.  (The capacity of
the buffer can be determined by the buffer capacity field in the READ
BUFFER descriptor.)  If the buffer offset and parameter list length
fields specify a transfer that would exceed the buffer capacity, the
device server shall return CHECK CONDITION status and shall set the
sense key to ILLEGAL REQUEST with an additional sense code of INVALID
FIELD IN CDB.

7.23.7 Download microcode with offsets and save mode (111b)

In this mode, the initiator may split the transfer of the vendor-
specific microcode or control information over two or more WRITE BUFFER
commands.  If the logical unit cannot accept this command because of
some device condition,  the device server shall terminate each WRITE
BUFFER command with this mode (111b) with a CHECK CONDITION status, a
sense key of ILLEGAL REQUEST, and shall set the additional sense code to
COMMAND SEQUENCE ERROR.

If the last WRITE BUFFER command of a set of one or more commands
completes successfully, the microcode or control information shall be
saved in a non-volatile memory space (semiconductor, disk, or other).
The saved downloaded microcode or control information shall then be
effective after each power-cycle and reset until it is supplanted by
another download microcode with save operation or download microcode
with offsets and save operation.  In this mode, the Data-Out buffer
contains vendor-specific, self-describing microcode or control
information.

Since the downloaded microcode or control information may be sent using
several commands, when the logical unit detects the last download
microcode with offsets and save mode WRITE BUFFER command has been
received, the device server shall perform any logical unit required
verification of the complete set of downloaded microcode or control
information prior to returning GOOD status for the last command.  After
the last command completes successfully the device server shall generate
a unit attention condition (see the SAM) for all initiators except the
one that issued the set of WRITE BUFFER commands.  When reporting the
unit attention condition, the device server shall set the additional
sense code to MICROCODE HAS BEEN CHANGED.

If the complete set of WRITE BUFFER commands required to effect a
microcode or control information change (one or more commands) are not
received before a reset or power-on cycle occurs, the change shall not
be effective and the microcode or control information is discarded.

The buffer ID field identifies a specific buffer within the logical
unit.  The vendor assigns buffer ID codes to buffers within the logical
unit.  A Buffer ID value of zero shall be supported.  If more than one
buffer is supported, additional buffer ID codes shall be assigned
contiguously, beginning with one.  If an unsupported buffer ID code is
identified, the device server shall return CHECK CONDITION status and
shall set the sense key to ILLEGAL REQUEST with an additional sense code
of INVALID FIELD IN CDB.

The microcode or control information are written to the logical unit
buffer starting at the location specified by the buffer offset.  The
application client shall conform to the offset boundary requirements. 
If the device server is unable to accept the specified buffer offset, it
shall return CHECK CONDITION status and it shall set the sense key to
ILLEGAL REQUEST with an additional sense code of INVALID FIELD IN CDB.

The parameter list length specifies the maximum number of bytes that
shall be present in the Data-Out buffer to be stored in the specified
buffer beginning at the buffer offset.  The application client should
attempt to ensure that the parameter list length plus the buffer offset
does not exceed the capacity of the specified buffer.  (The capacity of
the buffer can be determined by the buffer capacity field in the READ
BUFFER descriptor.)  If the buffer offset and parameter list length
fields specify a transfer that would exceed the buffer capacity, the
device server shall return CHECK CONDITION status and shall set the
sense key to ILLEGAL REQUEST with an additional sense code of INVALID
FIELD IN CDB.


8 Parameters for all device types

8.1 Diagnostic parameters 

This subclause describes the diagnostic page structure and the
diagnostic pages that are applicable to all SCSI devices.  Pages
specific to each device type are described in the command standard
document that applies to that device type (SBC, SSC, SMC, etc.).

A SEND DIAGNOSTIC command with a PF bit of one specifies that the SEND
DIAGNOSTIC parameter list consists of zero or more diagnostic pages and
that the data returned by the subsequent RECEIVE DIAGNOSTIC RESULTS
command shall use the diagnostic page format (see table 62) described in
this standard.

                   Table 62 - Diagnostic page format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Page code                                   |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                        Page length (n-3)                        ---|
| 3   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                        Diagnostic parameters                    - -|
| n   |                                                                       |
+=============================================================================+

Each diagnostic page defines a function or operation that the device
server shall perform.  The page contains a page header followed by the
analysis data that is formatted according to the page code specified in
the previous SEND DIAGNOSTIC command.

Targets that implement diagnostic pages are only required to accept a
single diagnostic page per command.

The page code field identifies which diagnostic page is being sent or
returned.  The page codes are defined in table 63.

                   Table 63 - Diagnostic page codes
+=============-==================================================-============+
|  Page code  |  Description                                     | Subclause  |
|-------------+--------------------------------------------------+------------|
|     00h     |  Supported diagnostics pages                     |   8.1.1    |
|  01h - 3Fh  |  Reserved (for all device type pages)            |            |
|  40h - 7Fh  |  See specific device type for definition         |            |
|  80h - FFh  |  Vendor-specific pages                           |            |
+=============================================================================+

The page length field specifies the length in bytes of the diagnostic
parameters that follow this field.  If the application client sends a
page length that results in the truncation of any parameter, the device
server shall terminate the command with CHECK CONDITION status.  The
sense key shall be set to ILLEGAL REQUEST with the additional sense code
set to INVALID FIELD IN PARAMETER LIST.

The diagnostic parameters are defined for each page code.  The
diagnostic parameters within a page may be defined differently in a SEND
DIAGNOSTIC command than in a RECEIVE DIAGNOSTIC RESULTS command.

8.1.1 Supported diagnostic pages

The supported diagnostics page (see table 64) returns the list of
diagnostic pages implemented by the target.  This page shall be
implemented if the target implements the page format option of the SEND
DIAGNOSTIC and RECEIVE DIAGNOSTIC RESULTS commands.

                 Table 64 - Supported diagnostic pages
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Page code (00h)                             |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                        Page length (n-3)                        ---|
| 3   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                        Supported page list                      - -|
| n   |                                                                       |
+=============================================================================+

The definition of this page for the SEND DIAGNOSTIC command includes
only the first four bytes.  If the page length field is not zero, the
device server shall terminate the SEND DIAGNOSTIC command with CHECK
CONDITION status.  The sense key shall be set to ILLEGAL REQUEST with an
additional sense code of INVALID FIELD IN PARAMETER LIST.  This page
instructs the device server to make available the list of all supported
diagnostic pages to be returned by a subsequent RECEIVE DIAGNOSTIC
RESULTS command. 

The definition of this page for the RECEIVE DIAGNOSTIC RESULTS command
includes the list of diagnostic pages supported by the target.

The page length field specifies the length in bytes of the following
supported page list.

The supported page list field shall contain a list of all diagnostic
page codes implemented by the target in ascending order beginning with
page code 00h.


8.2 Log parameters

This subclause describes the log page structure and the log pages that
are applicable to all SCSI devices.  Pages specific to each device type
are described in the command standard document that applies to that
device type (SBC, SSC, SMC, etc.).  The LOG SELECT command supports the
ability to send zero or more log pages.  The LOG SENSE command returns
a single log page specified in the page code field of the command
descriptor block (see 7.7).

Each log page begins with a four-byte page header followed by zero or
more variable-length log parameters defined for that page.  The log page
format is defined in table 65.

                      Table 65 - Log page format
+=======-========-========-========-========-========-========-========-========+
|    Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte   |        |        |        |        |        |        |        |        |
|=======+=================+=====================================================|
| 0     |    Reserved     |            Page code                                |
|-------+-----------------------------------------------------------------------|
| 1     |                              Reserved                                 |
|-------+-----------------------------------------------------------------------|
| 2     | (MSB)                                                                 |
|-------+---                           Page length (n-3)                     ---|
| 3     |                                                                 (LSB) |
|=======+=======================================================================|
|       |                         Log parameters(s)                             |
|=======+=======================================================================|
| 4     |                              Log parameter (First)                    |
|- --- -+- -                           (Length x)                            - -|
| x+3   |                                                                       |
|-------+-----------------------------------------------------------------------|
|       |                                 .                                     |
|       |                                 .                                     |
|-------+-----------------------------------------------------------------------|
| n-y+1 |                              Log parameter (Last)                     |
|- --- -+- -                           (Length y)                            - -|
| n     |                                                                       |
+===============================================================================+

The page code field identifies which log page is being transferred.  

The page length field specifies the length in bytes of the following log
parameters.  If the application client sends a page length that results
in the truncation of any parameter, the device server shall terminate
the command with CHECK CONDITION status.  The sense key shall be set to
ILLEGAL REQUEST with the additional sense code set to INVALID FIELD IN
PARAMETER LIST.

Most log pages contain one or more special data structures called log
parameters (see table 66).  Log parameters may be data counters that
record a count of a particular event (or events), the circumstances
under which certain operations were performed or log parameters may be
list parameters (strings) which contain a description of a particular
event.

                       Table 66 - Log parameter
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   | (MSB)                                                                 |
|-----+---                        Parameter code                           ---|
| 1   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 2   |   DU   |   DS   |  TSD   |   ETC  |       TMC       |  LBIN  |  LP    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Parameter length (n-3)                      |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                        Parameter value                          - -|
| n   |                                                                       |
+=============================================================================+


Each log parameter begins with a four-byte parameter header followed by
one or more bytes of parameter value data.

The parameter code field identifies the log parameter is being
transferred for that log page.  

The DU, DS, TSD, ETC, TMC, LBIN, and LP fields are collectively referred
to as the parameter control byte.  These fields are described below.

For cumulative log parameter values (indicated by the PC field of the
LOG SELECT and LOG SENSE command descriptor block), the disable update
(DU) bit is defined as follows:
  a)  A zero value indicates that the device server shall update the log
      parameter value to reflect all events that should be noted by that
      parameter.  
  b)  A one value indicates that the device server shall not update the
      log parameter value except in response to a LOG SELECT command
      that specifies a new value for the parameter.

  NOTE 47 When updating cumulative log parameter values, a device
  server may use volatile memory to hold these values until a LOG
  SELECT or LOG SENSE command is received with an SP bit of one (or a
  target-defined event occurs).  Thus the updated cumulative log
  parameter values may be lost if a power cycle occurs.

The DU bit is not defined for threshold values (indicated by the PC
field of the LOG SENSE command descriptor block) nor for list parameters
(indicated by the LP bit).  The device server shall ignore the value of
any DU bits in a LOG SELECT command.

A disable save (DS) bit of zero indicates that the target supports
saving for that log parameter.  The device server shall save the current
cumulative or the current threshold parameter value (depending on the
value in the PC field of the command descriptor block) in response to a
LOG SELECT or LOG SENSE command with an SP bit of one.  A DS bit of one
indicates that the target does not support saving that log parameter in
response to a LOG SELECT or LOG SENSE command with an SP bit of one.

A target save disable (TSD) bit of zero indicates that the target
provides a target-defined method for saving log parameters.  This
implicit saving operation shall be done frequently enough to insure that
the cumulative parameter values retain statistical significance (i.e.
across power cycles).  A TSD bit of one indicates that either the target
does not provide a target-defined method for saving log parameters or
the target-defined method has been disabled individually by an
application client setting the TSD bit to one.  An application client
may disable the target-defined method for saving all log parameters
without changing any TSD bits.  See the GLTSD bit in the control mode
page (see clause 8.3.1).

An enable threshold comparison (ETC) bit of one indicates that a
comparison to the threshold value is performed whenever the cumulative
value is updated.  An ETC bit of zero indicates that a comparison is not
performed.  The value of the ETC bit is the same for cumulative and
threshold parameters.

The threshold met criteria (TMC) field (see table 67) defines the basis
for comparison of the cumulative and threshold values.  The TMC field is
valid only if the ETC bit is one.  The value of the TMC field is the
same for cumulative and threshold parameters.

                   Table 67 - Threshold met criteria
+========-=================================================+
|  Code  |  Basis for comparison                           |
|--------+-------------------------------------------------|
|   00b  |  Every update of the cumulative value           |
|   01b  |  Cumulative value     equal    threshold value  |
|   10b  |  Cumulative value   not equal  threshold value  |
|   11b  |  Cumulative value greater than threshold value  |
+==========================================================+

If the ETC bit is one and the result of the comparison is true, a unit
attention condition shall be generated for all initiators.  When
reporting the unit attention condition, the device server shall set the
sense key to UNIT ATTENTION and set the additional sense code to
THRESHOLD CONDITION MET.

The LBIN bit is is only valid if the LP is one.  If the LP bit is one
and the LBIN bit is zero then the list parameter is a string of ASCII
graphic codes (i.e., code values 20h through 7Eh).  If the LP bit is one
and the LBIN bit is one then the list parameter is a list of binary
information.

The list parameter (LP) bit indicates the format of the log parameter. 
If an application client attempts to set the value of the LP bit to a
value other than the one returned for the same parameter in the LOG
SENSE command, the device server shall terminate the command with CHECK
CONDITION status.  The sense key shall be set to ILLEGAL REQUEST with
the additional sense code set to INVALID FIELD IN PARAMETER LIST.

An LP bit of zero indicates that the parameter is a data counter.  Data
counters are associated with one of more events;  the data counter is
updated whenever one of these events occurs by incrementing of the
counter value.  If each data counter has associated with it a target-
defined maximum value.  Upon reaching this maximum value, the data
counter shall not be incremented (i.e. it does not wrap).  When a data
counter reaches its maximum value, the target shall set the associated
DU bit to one.  If the data counter is at or reaches its maximum value
during the execution of a command, the target shall complete the
command.  If the command completes correctly (except for the data
counter being at its maximum value) and if the RLEC bit of the control
mode page (8.3.1) is set to one; then the device server shall terminate
the command with CHECK CONDITION status and set the sense key to
RECOVERED ERROR with the additional sense code set to LOG COUNTER AT
MAXIMUM.  

An LP bit of one indicates that the parameter is a list parameter.  List
parameters are not counters and thus the ETC and TMC fields shall be set
to zero.

If more than one list parameter is defined in a single log page, the
following rules apply to assigning parameter codes:
  a)  The parameter updated last shall have a higher parameter code than
      the previous parameter, except as defined in rule b).
  b)  When the maximum parameter code value supported by the target is
      reached, the target shall assign the lowest parameter code value
      to the next log parameter (i.e. wrap-around parameter codes).  If
      the associated command completes correctly (except for the
      parameter code being at its maximum value) and if the RLEC bit of
      the control mode page (8.3.1) is set to one; then the device
      server shall terminate the command with CHECK CONDITION status and
      set the sense key to RECOVERED ERROR with the additional sense
      code set to LOG LIST CODES EXHAUSTED.

  NOTE 48 List parameters can be used to store the locations of
  defective blocks in the following manner.  When a defective block is
  identified, a list parameter is updated to reflect the location and
  cause of the defect.  When the next defect is encountered, the list
  parameter with the next higher parameter code is updated to record
  this defect.  The size of the page can be made target specific to
  accommodate memory limitations.  It is recommended that one or more
  data counter parameters be defined for the page to keep track of the
  number of valid list parameters and the parameter code of the
  parameter with the oldest recorded defect.  This technique can be
  adapted to record other types of information.

The parameter length field specifies the length in bytes of the
following parameter value.  If the application client sends a parameter
length value that results in the truncation of the parameter value, the
device server shall terminate the command with CHECK CONDITION status. 
The sense key shall be set to ILLEGAL REQUEST with the additional sense
code set to INVALID FIELD IN PARAMETER LIST.

If the application client sends a log parameter value that is outside
the range supported by the target, and rounding is implemented for that
parameter, the device server may either:
  a)  round to an acceptable value and terminate the command as
      described in clause 5.2; or
  b)  terminate the command with CHECK CONDITION status and set the
      sense key to ILLEGAL REQUEST with the additional sense code set to
      INVALID FIELD IN PARAMETER LIST.

When any counter in a log page reaches its maximum value, incrementing
of all counters in that log page shall cease until reinitialized by the
application client via a LOG SELECT command.  If the RLEC bit of the
control mode page is one, then the device server shall report the
exception condition.

The page code assignments for the log pages are listed in table 68.

                       Table 68 - Log page codes
+=============-==================================================-=============+
|  Page code  |  Description                                     |  Subclause  |
|-------------+--------------------------------------------------+-------------|
|     01h     |  Buffer over-run/under-run page                  |    8.2.1    |
|     03h     |  Error counter page (read) page                  |    8.2.2    |
|     04h     |  Error counter page (read reverse) page          |    8.2.2    |
|     05h     |  Error counter page (verify) page                |    8.2.2    |
|     02h     |  Error counter page (write) page                 |    8.2.2    |
|     07h     |  Last n error events page                        |    8.2.3    |
|     06h     |  Non-medium error page                           |    8.2.4    |
|     00h     |  Supported log pages                             |    8.2.5    |
|  08h - 2Fh  |  Reserved (may be used by specific device types) |             |
|     3Fh     |  Reserved                                        |             |
|  30h - 3Eh  |  Vendor-specific pages                           |             |
+==============================================================================+


8.2.1 Buffer over-run/under-run page

The buffer over-run/under-run page (page code 01h) defines 24 data
counters that may be used to record the number of buffer over-runs or
under-runs for the logical unit.  A target that implements this page may
implement one or more of the defined data counters.  

A buffer over-run or under-run can occur when an initiator does not
transmit data to or from the target's buffer fast enough to keep up with
reading or writing the media.  The cause of this problem is protocol
specific.  A buffer over-run condition can occur during a read operation
when a buffer full condition prevents continued transfer of data from
the media to the buffer.  A buffer under-run condition can occur during
a write operation when a buffer empty condition prevents continued
transfer of data to the media from the buffer.  Most devices incur a
delay at this point while the media is repositioned.

Table 69 defines the parameter code field for the buffer over-run/under-
run counters.

Table 69 - Parameter code field for buffer over-run/under-run counters
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                          Reserved                                     |
|-----+-----------------------------------------------------------------------|
| 1   |      Count basis         |               Cause               |  Type  |
+=============================================================================+

The parameter code field for buffer over-run/under-run counters is a
16-bit value comprised of eight reserved bits, a three-bit count basis
field (see table 70), a four-bit cause field (see table 71), and a one-
bit type field.  These are concatenated to determine the value of the
parameter code for that log parameter.  For example, a counter for
parameter code value of 0023h specifies a count basis of 001b; a cause
of 0001b; and a type of 1b; this counter is incremented once per command
that experiences an over-run due to the SCSI bus being busy.

                   Table 70 - Count basis definition
+=============-========================+
| Count basis |  Description           |
|-------------+------------------------|
|    000b     |  Undefined             |
|    001b     |  Per command           |
|    010b     |  Per failed reconnect  |
|    011b     |  Per unit of time      |
| 100b - 111b |  Reserved              |
+======================================+

The count basis field defines the criteria for incrementing the counter. 
The following criteria are defined.

  NOTE 49 The per unit of time count basis is device type specific. 
  Direct-access devices typically use a latency period (i.e. one
  revolution of the medium) as the unit of time.

The cause field indicates the reason that the over-run or under-run
occurred.  The following causes are defined in table 71.

                   Table 71 - Cause field definition
+============-========================+
|    Cause   |Description             |
|------------+------------------------|
|      0h    |Undefined               |
|      1h    |Bus busy                |
|      2h    |Transfer rate too slow  |
|   3h - Fh  |Reserved                |
+=====================================+

The type field indicates whether the counter records under-runs or over-
runs.  A value of zero specifies a buffer under-run condition and a
value of one specifies a buffer over-run condition.

The counters contain the total number of times buffer over-run or under-
run conditions have occurred since the last time the counter was
cleared.  The counter shall be incremented for each occurrence of an
under-run or over-run condition and can be incremented more than once
for multiple occurrences during the execution of a single command.

8.2.2 Error counter pages

This clause defines the optional error counter pages for write errors
(page code 02h), read errors (page code 03h), read reverse errors (page
code 04h) and verify errors (page code 05h).  The log page format is
defined near the beginning of 8.2.  A page can return one or more log
parameters that record events defined by the parameter codes.

Table 72 defines the parameter codes for the error counter pages. 
Support of each log parameter is optional. 

          Table 72 - Parameter codes for error counter pages
       +=================-==============================================+
       | Parameter code  |  Description                                 |
       |-----------------+----------------------------------------------|
       |     0000h       |  Errors corrected without substantial delay  |
       |     0001h       |  Errors corrected with possible delays       |
       |     0002h       |  Total (e.g. rewrites or rereads)            |
       |     0003h       |  Total errors corrected                      |
       |     0004h       |  Total times correction algorithm processed  |
       |     0005h       |  Total bytes processed                       |
       |     0006h       |  Total uncorrected errors                    |
       |  0007h - 7FFFh  |  Reserved                                    |
       |  8000h - FFFFh  |  Vendor-specific                             |
       +================================================================+

  NOTE 50 The exact definition of the error counters is not part of
  this standard.  These counters should not be used to compare
  products because the products may define errors differently.

8.2.3 Last n error events page

Log page (07h) provides for a number of error-event records using the
list parameter format of the log page.  The number of these error-event
records supported, n, is device-specific.  Each error-event record
contains device-specific diagnostic information for a single error
encountered by the device.  The parameter code associated with error-
event record indicates the relative time at which the error occurred. 
A higher parameter code indicates that the error event occurred later in
time.

The content of the parameter value field of each log parameter is an
ASCII character string which may describe the error event.  The exact
contents of the character string is not defined by this standard.

When the last supported parameter code is used by an error-event record,
the recording on this page of all subsequent error information shall
cease until one or more of the list parameters with the highest
parameter codes have been reinitialized.  If the RLEC bit of the control
mode page (8.3.1) is set to one, the device server shall return CHECK
CONDITION status with the sense key set to RECOVERED ERROR and the
additional sense code set to LOG LIST CODES EXHAUSTED.  Alternatively,
the device server may report this condition via asynchronous event
notification (see the SAM).

8.2.4 Non-medium error page 

This page (page code 06h) provides for summing the occurrences of
recoverable error events other than write, read, or verify failures.  No
discrimination among the various types of events is provided by
parameter code (see table 73).  Vendor-specific discrimination may be
provided through the vendor-specific parameter codes.

           Table 73 - Non-medium error event parameter codes
+=================-==============================================+
| Parameter code  |  Description                                 |
|-----------------+----------------------------------------------|
|      0000h      |  Non-medium error count                      |
|  0001h - 7FFFh  |  Reserved                                    |
|  8000h - FFFFh  |  Vendor-specific error counts                |
+================================================================+


8.2.5 Supported log pages

The supported log page (see table 74) returns the list of log pages
implemented by the target.  Targets that implement the LOG SENSE command
shall implement this log page.

                    Table 74 - Supported log pages
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=================+=====================================================|
| 0   |    Reserved     |        Page code (00h)                              |
|-----+-----------------------------------------------------------------------|
| 1   |                          Reserved                                     |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                       Page length (n-3)                         ---|
| 3   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                       Supported page list                       - -|
| n   |                                                                       |
+=============================================================================+

This page is not defined for the LOG SELECT command.  This log page
returns the list of supported log pages for the specified logical unit.

The page length field specifies the length in bytes of the following
supported page list.

The supported page list field shall contain a list of all log page codes
implemented by the target in ascending order beginning with page code
00h.


8.3 Mode parameters

This subclause describes the block descriptors and the pages used with
MODE SELECT and MODE SENSE commands that are applicable to all SCSI
devices.  Pages specific to each device type are described in the
command standard document that applies to that device type (SBC, SSC,
SMC, etc.).

The mode parameter list shown in table 75 contains a header, followed by
zero or more block descriptors, followed by zero or more variable-length
pages.  Parameter lists are defined for each device type.

                    Table 75 - Mode parameter list
+======-========-========-========-========-========-========-========-========+
|   Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte  |        |        |        |        |        |        |        |        |
|======+=======================================================================|
|0 - n |                        Mode parameter header                          |
|======+=======================================================================|
|0 - n |                        Block descriptor(s)                            |
|======+=======================================================================|
|0 - n |                        Page(s)                                        |
+==============================================================================+

The six-byte command descriptor block parameter header is defined in
table 76.

                  Table 76 - Mode parameter header(6)
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Mode data length                            |
|-----+-----------------------------------------------------------------------|
| 1   |                           Medium type                                 |
|-----+-----------------------------------------------------------------------|
| 2   |                           Device-specific parameter                   |
|-----+-----------------------------------------------------------------------|
| 3   |                           Block descriptor length                     |
+=============================================================================+

The ten-byte command descriptor block parameter header is defined in
table 77.

                 Table 77 - Mode parameter header(10)
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   | (MSB)                                                                 |
|-----+---                        Mode data length                         ---|
| 1   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 2   |                           Medium type                                 |
|-----+-----------------------------------------------------------------------|
| 3   |                           Device-specific parameter                   |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   | (MSB)                                                                 |
|-----+---                        Block descriptor length                  ---|
| 7   |                                                                 (LSB) |
+=============================================================================+

When using the MODE SENSE command, the mode data length field specifies
the length in bytes of the following data that is available to be
transferred.  The mode data length does not include itself.  When using
the MODE SELECT command, this field is reserved.

  NOTE 51 Targets that support more than 256 bytes of block
  descriptors and pages may need to implement ten-byte mode commands. 
  The mode data length field in the six-byte command descriptor block
  header limits the returned data to 256 bytes.

Medium types are unique for each device type.  Refer to the mode
parameters clause of the specific device type command standard (SBC,
SSC, SMC, etc.) for definition of these values.  Some device types
reserve this field.

The device specific parameter is unique for each device type.  Refer to
the mode parameters clause of the specific device type command standard
(SBC, SSC, SMC, etc.) for definition of this field.  Some device types
reserve all or part of this field.

The block descriptor length specifies the length in bytes of all the
block descriptors.  It is equal to the number of block descriptors times
eight, and does not include pages or vendor-specific parameters, if any,
that may follow the last block descriptor.  A block descriptor length of
zero indicates that no block descriptors are included in the mode
parameter list.  This condition shall not be considered an error.

The mode parameter block descriptor is shown in table 78.

              Table 78 - Mode parameter block descriptor
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Density code                                |
|-----+-----------------------------------------------------------------------|
| 1   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 2   |                           Number of blocks                            |
|-----+---                                                                 ---|
| 3   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 6   |                           Block length                                |
|-----+---                                                                 ---|
| 7   |                                                                 (LSB) |
+=============================================================================+

Block descriptors specify some of the medium characteristics for all or
part of a logical unit.  Support for block descriptors is optional. 
Each block descriptor contains a density code field, a number of blocks
field, and a block length field.  Block descriptor values are always
current (i.e. saving is not supported).  A unit attention condition (see
the SAM) shall be generated when any block descriptor values are
changed.

The density code field is unique for each device type.  Refer to the
mode parameters clause of the specific device type command standard
(SBC, SSC, SMC, etc.) for definition of this field.  Some device types
reserve all or part of this field.

The number of blocks field specifies the number of logical blocks on the
medium to which the density code and block length fields apply.  A value
of zero indicates that all of the remaining logical blocks of the
logical unit shall have the medium characteristics specified.  If the
number of blocks field contains FFFFFFh, it shall be interpreted as
meaning that the number of blocks is greater than FFFFFEh.  When the
number of blocks field contains FFFFFFh, the READ CAPACITY command may
be used to determine the actual number of blocks for the device.  (See
the applicable command standard for a definition of the READ CAPACITY
command.)

  NOTES
  52  There may be implicit association between parameters defined in
      the pages and block descriptors.  For direct-access devices, the
      block length affects the optimum values (the values that achieve
      best performance) for the sectors per track, bytes per physical
      sector, track skew factor, and cylinder skew factor fields in
      the format parameters page.  In this case, the target may change
      parameters not explicitly sent with the MODE SELECT command.  A
      subsequent MODE SENSE command would reflect these changes.
  53  The number of remaining logical blocks may be unknown for some
      device types.

The block length specifies the length in bytes of each logical block
described by the block descriptor.  For sequential-access devices, a
block length of zero indicates that the logical block size written to
the medium is specified by the transfer length field in the command
descriptor block (see the SSC)

The mode page format is defined in table 79.

                      Table 79 - Mode page format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+========+=====================================================|
| 0   |   PS   |Reserved|         Page code                                   |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page length (n-1))                          |
|-----+-----------------------------------------------------------------------|
| 2   |                                                                       |
|- - -+ -                         Mode parameters                          - -|
| n   |                                                                       |
+=============================================================================+

Each mode page contains a page code, a page length, and a set of mode
parameters.  The page codes are defined in this subclause and in the
mode parameter sub-clauses for the specific device type (see the SBC,
SSC, SMC, etc.).

When using the MODE SENSE command, a parameters savable (PS) bit of one
indicates that the mode page can be saved by the target in a non-
volatile, vendor-specific location.  A PS bit of zero indicates that the
supported parameters cannot be saved.  When using the MODE SELECT
command, the PS bit is reserved.

The page code field identifies the format and parameters defined for
that mode page.  Some page codes are defined as applying to all device
types and other page codes are defined for the specific device type. 
The page codes that apply to a specific device type are defined in the
command standard for that device type (e.g., the SBC, SSC, SMC, etc.).

When using the MODE SENSE command, if page code 00h (vendor-specific
page) is implemented, the device server shall return that page last in
response to a request to return all pages (page code 3Fh).  When using
the MODE SELECT command, this page should be sent last.

The page length field specifies the length in bytes of the mode
parameters that follow.  If the application client does not set this
value to the value that is returned for the page by the MODE SENSE
command, the device server shall terminate the command with CHECK
CONDITION status.  The sense key shall be set to ILLEGAL REQUEST with
the additional sense code set to INVALID FIELD IN PARAMETER LIST.  The
target is permitted to implement a mode page that is less than the full
page length defined in this standard, provided no field is truncated and
the page length field correctly specifies the actual length implemented.

The mode parameters for each page are defined in the following
subclauses, or in the mode parameters sub-clause of the command standard
for the specific device type (SBC, SSC, SMC, etc.).  Mode parameters not
implemented by the target shall be set to zero.

Table 80 defines the mode pages that are applicable to all device types
that include the MODE SELECT and MODE SENSE commands.

                      Table 80 - Mode page codes
+=============-==================================================-============+
|  Page code  |  Description                                     | Subclause  |
|-------------+--------------------------------------------------+------------|
|     0Ah     |  Control mode page                               |   8.3.1    |
|     02h     |  Disconnect-reconnect page                       |   8.3.2    |
|     1Ch     |  Informational exceptions control page           |   8.3.3    |
|     09h     |  Peripheral device page                          |   8.3.4    |
|     01h     |  (See specific device type)                      |            |
|  03h - 08h  |  (See specific device type)                      |            |
|  0Bh - 1Bh  |  (See specific device type)                      |            |
|  1Dh - 1Fh  |  (See specific device type)                      |            |
|     00h     |  Vendor-specific (does not require page format)  |            |
|  20h - 3Eh  |  Vendor-specific (page format required)          |            |
|     3Fh     |  Return all pages                                |            |
|             |     (valid only for the MODE SENSE command)      |            |
+=============================================================================+


8.3.1 Control mode page

The control mode page (see table 81) provides controls over several
SCSI-3 features that are applicable to all device types such as tagged
queuing, asynchronous event reporting, and error logging.

                     Table 81 - Control mode page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+========+=====================================================|
| 0   |   PS   |Reserved|         Page code (0Ah)                             |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page length (0Ah)                           |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                  | GLTSD  |  RLEC  |
|-----+-----------------------------------------------------+--------+--------|
| 3   |     Queue algorithm modifier      |    Reserved     |  QErr  |  DQue  |
|-----+-----------------------------------+-----------------+--------+--------|
| 4   |Reserved|  RAC   | ByprtM | BybthS |Reserved| RAERP  | UAAERP | EAERP  |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   | (MSB)                                                                 |
|-----+---                        Ready AER holdoff period                 ---|
| 7   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 8   | (MSB)                                                                 |
|-----+---                        Busy timeout period                      ---|
| 9   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 10  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 11  |                           Reserved                                    |
+=============================================================================+

A global logging target save disable (GLTSD) bit of zero allows the
target to provide a target-defined method for saving log parameters.  A
GLTSD bit of one indicates that either the target has disabled the
target-defined method for saving log parameters or when set by the
initiator specifies that the target-defined method shall be disabled.

A report log exception condition (RLEC) bit of one specifies that the
target shall report log exception conditions as described in 8.2.  A
RLEC bit of zero specifies that the target shall not report log
exception conditions.

The queue algorithm modifier field (see table 82) specifies restrictions
on the algorithm used for reordering tasks having the SIMPLE task
attribute.

                  Table 82 - Queue algorithm modifier
+===========-====================================+
|   Value   |  Definition                        |
|-----------+------------------------------------|
|     0h    |  Restricted reordering             |
|     1h    |  Unrestricted reordering allowed   |
|  2h - 7h  |  Reserved                          |
|  8h - Fh  |  Vendor-specific                   |
+================================================+

A value of zero in this field specifies that the device server shall
order the actual execution sequence of tasks having the SIMPLE task
attribute such that data integrity is maintained for that initiator. 
This means that, if the transmission of new service delivery requests is
halted at any time, the final value of all data observable on the medium
shall have exactly the same value as it would have if all the tasks had
been given the ORDERED task attribute.  The restricted reordering value
shall be the default value.

A value of one in this field specifies that the device server may
reorder the actual execution sequence of tasks having the SIMPLE task
attribute in any manner.  Any data integrity exposures related to task
sequence order shall be explicitly handled by the application client
through the selection of appropriate commands and task attributes.

A queue error management (QErr) bit of zero specifies that the blocked
tasks in the task set shall resume after an auto contingent allegiance
condition is cleared (see the SAM for details about blocked tasks and
automatic contingent allegiance).

A QErr bit of one specifies all the blocked tasks in the task set shall
be aborted after an auto contingent allegiance condition is cleared (see
the SAM).  A unit attention condition (see the SAM) shall be generated
for each initiator that had blocked tasks aborted except for the
initiator that generated the auto contingent allegiance condition.  The
device server shall set the additional sense code to COMMANDS CLEARED BY
ANOTHER INITIATOR.

A disable queuing (DQue) bit of zero specifies that tagged queuing shall
be enabled if the device server supports tagged queuing.  A DQue bit of
one specifies that tagged queuing shall be disabled.  Any queued
commands received by the device server shall be aborted.  The method
used to abort queued commands shall be protocol dependent.

The report a check (RAC) bit provides control of reporting long busy
conditions or CHECK CONDITION status.  A RAC bit of one specifies that 
a CHECK CONDITION status should be reported rather than a long busy 
condition (e.g. longer than the Busy Timeout Period).  A RAC bit of 
zero specifies that long busy conditions (e.g. busy condition during 
auto contingence allegiance) may be reported.

The busy timeout period field specifies the maximum time, in 100
milliseconds increments, that the initiator allows for the target to
remain busy for unanticipated conditions which are not a routine part 
of commands from the initiator.  This value may be rounded down as
defined in clause 5.2.  A 0000h value in this field is undefined by this
standard.  An FFFFh value in this field is defined as an unlimited period.

A by port message (ByprtM) bit of one indicates that the TARGET RESET
task management function applies only to the port over which it was
transacted.  When the ByprtM bit equals zero, the TARGET RESET task
management function applies to both ports.

A by both RESET signal (BybthS) bit of one indicates that a reset event
within the service delivery subsystem applies to both ports.  When the
BybthS bit equals zero, a reset event within the service delivery
subsystem applies only to the port over which it was received.

The RAERP, UAAERP, and EAERP bits enable specific events to be reported
via the asynchronous event reporting protocol.  When all three bits are
zero, the target shall not use asynchronous event reporting.  AER is
defined in the SAM.

A ready AER permission (RAERP) bit of one specifies that the device
server may issue an asynchronous event report upon completing its
initialization sequence instead of generating a unit attention
condition.  A RAERP bit of zero specifies that the device server shall
not issue an asynchronous event report upon completing its
initialization sequence.

  NOTE 54 If the device server's default value for the RAERP bit is
  one and it does not implement saved parameters or include a hardware
  switch, then it may not be possible to disable the initialization
  sequence asynchronous event reporting.

A unit attention AER permission (UAAERP) bit of one specifies that the
device server may issue an asynchronous event report instead of creating
a unit attention condition upon detecting an event that would cause a
unit attention condition (other than upon completing an initialization
sequence).  A UAAERP bit of zero specifies that the device server shall
not issue an asynchronous event reporting instead of creating a unit
attention condition.

An error AER permission (EAERP) bit of one specifies that the device
server may issue an asynchronous event report upon detecting a deferred
error condition instead of waiting to report the deferred error on the
next command.  An EAERP bit of zero specifies that the device server
shall not report deferred error conditions via an asynchronous event
reporting.

The ready AER holdoff period field specifies the minimum time in
milliseconds after the target starts its initialization sequence that it
shall delay before attempting to issue an asynchronous event report. 
This value may be rounded up as defined in the clause 5.2.

8.3.2 Disconnect-reconnect page

The disconnect-reconnect page (see table 83) provides the application
client the means to tune the performance of service delivery subsystem. 
The name for this mode page (disconnect-reconnect) comes from the SCSI-2
parallel bus.  This mode page was designed around the parallel bus.  As
a result, the parameters in the disconnect-reconnect mode page are
ideally matched to the mechanisms of the SCSI-3 Interlocked Protocol. 
Likewise, much of the disconnect-reconnect terminology hails from the
parallel bus.  However, many of the disconnect-reconnect mode parameters
can apply to the other SCSI-3 protocols.  A SCSI-3 device based on any
of the protocols (SIP, SBP, FCP, SSP, etc.) may use appropriate
parameters in the disconnect-reconnect mode page.

                 Table 83 - Disconnect-reconnect page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+========+=====================================================|
| 0   |   PS   |Reserved|         Page code (02h)                             |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page length (0Eh)                           |
|-----+-----------------------------------------------------------------------|
| 2   |                           Buffer full ratio                           |
|-----+-----------------------------------------------------------------------|
| 3   |                           Buffer empty ratio                          |
|-----+-----------------------------------------------------------------------|
| 4   | (MSB)                                                                 |
|-----+---                        Bus inactivity limit                     ---|
| 5   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 6   | (MSB)                                                                 |
|-----+---                        Disconnect time limit                    ---|
| 7   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 8   | (MSB)                                                                 |
|-----+---                        Connect time limit                       ---|
| 9   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 10  | (MSB)                                                                 |
|-----+---                        Maximum burst size                       ---|
| 11  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 12  |  EMDP  |          Reserved        |  DImm  |           DTDC           |
|-----+-----------------------------------------------------------------------|
| 13  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 14  |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 15  |                           Reserved                                    |
+=============================================================================+

The buffer full ratio field indicates to the device server, on read
operations, how full the buffer should be prior to attempting to move
data on the interconnect.  Device servers that do not implement the
requested ratio should round down to the nearest implemented ratio as
defined in clause 5.2.

The buffer empty ratio field indicates to the device server, on write
operations, how empty the buffer should be prior to attempting to move
data on the interconnect.  Device servers that do not implement the
requested ratio should round down to the nearest implemented ratio as
defined in clause 5.2.

The buffer full and buffer empty ratios are numerators of a fractional
multiplier that has 256 as its denominator.  A value of zero indicates
that the target determines when to move data on the interconnect
consistent with the disconnect time limit parameter.  These parameters
are advisory to the target.

  NOTE 55 As an example, consider a device server with ten 512-byte
  buffers and a specified buffer full ratio of 3Fh.  The formula is:
  INTEGER((ratio/256)*number of buffers).  Thus INTEGER((3Fh/256)*10)
  = 2.  On read operations, the device server should attempt to move
  data on the interconnect whenever two or more buffers are full.

The bus inactivity limit field indicates the maximum time in 100 us
increments that the target is permitted lockout other uses of the
interconnect without actually moving data.  If the bus inactivity limit
is exceeded the device server shall attempt to interrupt the data moving
operation, within the restrictions placed on it by the application
client.  The contents of the DTDC parameter in this mode page shall be
one such restriction.  This value may be rounded as defined in clause
5.2.  A value of zero indicates that there is no bus inactivity limit.

The disconnect time limit field indicates the minimum time in 100 us
increments that the target shall wait between attempts to move data on
the interconnect.  This value may be rounded as defined in clause 5.2. 
A value of zero indicates that there is no disconnect time limit.

The connect time limit field indicates the maximum time in 100 us
increments that the target is allowed to use the interconnect during a
single data moving operation.  If the connect time limit is exceeded the
device server shall attempt to interrupt the data moving operation,
within the restrictions placed on it by the application client.  The
contents of the DTDC parameter in this mode page shall be one such
restriction.  This value may be rounded as defined in clause 5.2.  A
value of zero indicates that there is no connect time limit.

  NOTE 56 Most packetized and serial protocols do not allow the target
  control over the bus inactivity time limit, disconnect time limit,
  and connect time limit parameters.

The maximum burst size field indicates the maximum amount of data that
the device server shall transfer during a single data moving operation. 
This value is expressed in increments of 512 bytes (e.g. a value of one
means 512 bytes, two means 1024 bytes, etc.).  A value of zero indicates
there is no limit on the amount of data transferred per connection.

The enable modify data pointers (EMDP) bit indicates whether or not the
initiator allows the Modify Data Pointers message to be sent by the
target.  (The Modify Data Pointers message is defined in the SIP.)  If
the EMDP bit is a zero, the target shall not issue the Modify Data
Pointer message.  If the EMDP bit is a one, the target is allowed to
issue Modify Data Pointer messages. 

If the EMDP bit is a one and the initiator responds to a Modify Data
Pointer message with a Message Reject, then the target shall go to the
STATUS phase and send the initiator a CHECK CONDITION.  The sense key
shall be set to ABORTED COMMAND and the sense code shall be set to
INVALID MESSAGE ERROR.

The EMDP bit shall be zero for all devices except those using the SCSI-3
Interlocked Protocol (SIP).

A disconnect immediate (DImm) bit of zero indicates that the target may
disconnect after command phase if it chooses to do so based on its
internal algorithms, the setting of the DiscPriv bit in the IDENTIFY
message and the settings of the other parameters in this mode page.

A disconnect immediate (DImm) bit of one indicates that the target shall
attempt to disconnect immediately after every command phase for those
connections in which disconnections are allowed.

The DImm bit shall be zero for all devices except those using the SCSI-3
Interlocked Protocol (SIP).

The data transfer disconnect control (DTDC) field (see table 84) defines
further restrictions on when a disconnect is permitted.

              Table 84 - Data transfer disconnect control
+=======-=====================================================================+
| DTDC  |  Description                                                        |
|-------+---------------------------------------------------------------------|
| 000b  |  Data transfer disconnect control is not used.  Disconnect is       |
|       |  controlled by the other fields in this page.                       |
| 001b  |  A target shall not attempt to disconnect once the data transfer of |
|       |  a command has started until all data the command is to transfer has|
|       |  been transferred.  The connect time limit and bus inactivity limit |
|       |  are ignored during the data transfer.                              |
| 010b  |  Reserved                                                           |
| 011b  |  A target shall not attempt to disconnect once the data transfer of |
|       |  a command has started, until the command is complete.  The connect |
|       |  time limit and bus inactivity limit are ignored once data transfer |
|       |  has started.                                                       |
| 100b- |                                                                     |
|  111b |  Reserved                                                           |
+=============================================================================+

The DTDC field shall be zero for all devices except those using the
SCSI-3 Interlocked Protocol (SIP).

If DTDC is non-zero and the maximum burst size is non-zero, the device
server shall return CHECK CONDITION status.  The sense key shall be set
to ILLEGAL REQUEST and the additional sense code set to ILLEGAL FIELD IN
PARAMETER LIST.

8.3.3 Informational exceptions control page

The informational exceptions control page (see table 85) defines the
methods used by the target to control the reporting and the operations
of specific informational exception conditions.  This page shall only
apply to informational exceptions that report an additional sense code
of FAILURE PREDICTION THRESHOLD EXCEEDED to the application client.

Informational exception conditions occur as the result of vendor
specific events within a target.  An informational exception condition
may occur asynchronous to any commands issued by an application client.

           Table 85 - Informational exceptions control page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+========+=====================================================|
| 0   |   PS   |Reserved|         Page code (1Ch)                             |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page length (0Eh)                           |
|-----+-----------------------------------------------------------------------|
| 2   |  Perf  |         Reserved         | DExcpt |     Reserved    | LogErr |
|-----+-----------------------------------+-----------------------------------|
| 3   |             Reserved              |               MRIE                |
|-----+-----------------------------------------------------------------------|
| 4   | (MSB)                                                                 |
|- - -+- -                        Interval timer                           - -|
| 7   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 8   | (MSB)                                                                 |
|- - -+- -                        Report count                             - -|
| 11  |                                                                 (LSB) |
+=============================================================================+

The log errors bit (LogErr) of zero indicates that the logging of
informational exception conditions within a target is vendor specific. 
A LogErr bit of one indicates the target shall log informational
exception conditions.

A disable exception control (dexcpt) bit of zero indicates information
exception operations shall be enabled.  The reporting of information
exception conditions when the dexcpt bit is set to zero is determined
from the method of reporting informational exceptions field.  A dexcpt
bit of one indicates the target shall disable all information exception
operations.  The method of reporting informational exceptions field is
ignored when dexcpt is set to one.

A Performance bit (Perf) of zero indicates that informational exception
operations that are the cause of delays are acceptable.  A Perf bit of
one indicates the target shall not cause delays while doing
informational exception operations.  A Perf bit set to one may cause the
target to disable some or all of the informational exceptions
operations, thereby limiting the reporting of informational exception
conditions.

The Method of Reporting Informational Exceptions field (MRIE) indicates
the methods that shall be used by the target to report informational
exception conditions (see table 86).  The priority of reporting multiple
information exceptions is vendor specific.

     Table 86 - Method of Reporting Informational Exceptions field
+=======-=====================================================================+
| MRIE  | Description                                                         |
|-------+---------------------------------------------------------------------|
|  0h   | No reporting of informational exception condition:  This method     |
|       | instructs the target to not report information exception conditions.|
|       |                                                                     |
|  1h   | Asynchronous event reporting:  This method instructs the target to  |
|       | report informational exception conditions by using the rules for    |
|       | asynchronous event reporting as described in the SCSI-3 Architec-   |
|       | ture Model and the relevant Protocol Standard.                      |
|       |                                                                     |
|       | The sense key shall be set to RECOVERED ERROR and the additional    |
|       | sense code shall indicate the cause of the informational exception  |
|       | condition.                                                          |
|       |                                                                     |
|  2h   | Generate unit attention:  This method instructs the target to       |
|       | report informational exception conditions by returning a CHECK      |
|       | CONDITION status on any command.  The sense key shall be set to     |
|       | UNIT ATTENTION and the additional sense code shall indicate the     |
|       | cause of the informational exception condition.                     |
|       |                                                                     |
|       | The command that has the CHECK CONDITION shall not be executed      |
|       | before the informational exception condition is reported.           |
|       |                                                                     |
|  3h   | Conditionally generate recovered error:  This method instructs the  |
|       | target to report informational exception conditions, dependent on   |
|       | the value of the per bit of the error recovery parameters mode page,|
|       | by returning a CHECK CONDITION status on any command.  The sense    |
|       | key shall be set to RECOVERED ERROR and the additional sense code   |
|       | shall indicate the cause of the informational exception condition.  |
|       |                                                                     |
|       | The command that has the CHECK CONDITION shall complete without     |
|       | error before any informational exception condition may be reported. |
+=============================================================================+

     Table 86 - Method of Reporting Informational Exceptions field
(continued)
+=======-=====================================================================+
| MRIE  | Description                                                         |
|-------+---------------------------------------------------------------------|
|  4h   | Unconditionally generate recovered error:  This method instructs    |
|       | the target to report informational exception conditions, regardless |
|       | of the value of the per bit of the error recovery parameters mode   |
|       | page, by returning a CHECK CONDITION status on any command.  The    |
|       | sense key shall be set to RECOVERED ERROR and the additional sense  |
|       | code shall indicate the cause of the informational exception        |
|       | condition.                                                          |
|       |                                                                     |
|       | The command that has the CHECK CONDITION shall complete without     |
|       | error before any informational exception condition may be reported. |
|       |                                                                     |
|  5h   | Generate no sense:  This method instructs the target to report      |
|       | informational exception conditions by returning a CHECK CONDITION   |
|       | status on any command.  The sense key shall be set to NO SENSE and  |
|       | the additional sense code shall indicate the cause of the           |
|       | informational exception condition.                                  |
|       |                                                                     |
|       | The command that has the CHECK CONDITION shall complete without     |
|       | error before any informational exception condition may be reported. |
|       |                                                                     |
|  6h   | Only report informational exception condition on request:  This     |
|       | method instructs the target to preserve the informational excep-    |
|       | tion(s) information.  To find out about information exception       |
|       | conditions the Application Client polls the target by issuing an    |
|       | unsolicited REQUEST SENSE command.  The sense key shall be set to   |
|       | NO SENSE and the additional sense code shall indicate the cause of  |
|       | the informational exception condition.                              |
|       |                                                                     |
| 7h-Bh |  Reserved                                                           |
|       |                                                                     |
| Ch-Fh |  Vendor specific                                                    |
+=============================================================================+

The Interval Timer field indicates the period in 100 millisecond
increments for reporting that a informational exception condition has
occurred.  The target shall not report informational exception
conditions more frequently than the time specified by the Interval Timer
field and as soon as possible after the timer interval has elapsed. 
After the informational exception condition has been reported the
interval timer shall be restarted.  A value of zero in the Interval
Timer field indicates that the target shall only report the
informational exception condition one time.  A value of FFFFFFFFh in the
Interval Timer field shall indicate the timer interval is vendor
specific.

The Report Count field indicates the number of times to report an
informational exception condition to the application client.  A value of
zero in the Report Count field indicates there is no limit on the number
of times the target shall report an informational exception condition.

The maintaining of the Interval Timer and the Report Count fields access
power cycles and/or resets by the target shall be vendor specific.

8.3.4 Peripheral device page

The peripheral device page (see table 87) is used to pass vendor-
specific information between an application client and a device server. 
This standard does not define the format of this data, except to provide
a standard header. 

                   Table 87 - Peripheral device page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+========+=====================================================|
| 0   |   PS   |Reserved|         Page code (09h)                             |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page length (n-1)                           |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                        Interface identifier                     ---|
| 3   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 5   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 6   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 7   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 8   |                                                                       |
|- - -+- -                        Vendor-specific                          - -|
| n   |                                                                       |
+=============================================================================+

Interface identifier codes are defined in the table 88.

                 Table 88 - Interface identifier codes
+=================-======================================-====================+
|                 |                                      |       ANSI         |
|   Code value    |               Interface              | Reference standard |
|-----------------+--------------------------------------+--------------------|
|      0000h      |  Small computer system interface     |  X3.131-1986       |
|      0001h      |  Storage module interface            |  X3.91M-1990       |
|      0002h      |  Enhanced small device interface     |  X3.170A-1991      |
|      0003h      |  Intelligent peripheral interface-2  |  X3.130-1986;      |
|                 |                                      |    X3T9.3/87-002   |
|      0004h      |  Intelligent peripheral interface-3  |  X3.132-1987;      |
|                 |                                      |    X3.147-1988     |
|  0005h - 7FFFh  |  Reserved                            |                    |
|  8000h - FFFFh  |  Vendor-specific                     |                    |
+=============================================================================+


8.4 Vital product data parameters

This clause describes the optional vital product data page structure and
the vital product data pages (see table 89) that are applicable to all
SCSI devices.  These pages are optionally returned by the INQUIRY
command (7.5) and contain vendor-specific product information about a
target or logical unit.  The vital product data may include vendor
identification, product identification, unit serial numbers, device
operating definitions, manufacturing data, field replaceable unit
information, and other vendor-specific information.  This standard
defines the structure of the vital product data, but not the contents.

               Table 89 - Vital product data page codes
+=============-==================================================-============+
|  Page code  |  Description                                     | Subclause  |
|-------------+--------------------------------------------------+------------|
|     82h     |  ASCII implemented operating definition page     |   8.4.1    |
|  01h - 7Fh  |  ASCII information page                          |   8.4.2    |
|     81h     |  Implemented operating definitions page          |   8.4.3    |
|     00h     |  Supported vital product data pages              |   8.4.4    |
|     80h     |  Unit serial number page                         |   8.4.5    |
|  83h - BFh  |  Reserved                                        |            |
|  C0h - FFh  |  Vendor-specific                                 |            |
+=============================================================================+


8.4.1 ASCII implemented operating definition page

The ASCII implemented operation definition page (see table 90) contains
operating definition description data for all operating definitions
implemented by the target.  The contents of this data is not defined by
this standard.

          Table 90 - ASCII implemented operating definition 
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page code (82h)                             |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Page length (n-3)                           |
|-----+-----------------------------------------------------------------------|
| 4   |              ASCII operating definition description length (m-4)      |
|-----+-----------------------------------------------------------------------|
| 5   |                                                                       |
|- - -+- -           ASCII operating definition description data           - -|
| m   |                                                                       |
|-----+-----------------------------------------------------------------------|
| m+1 |                                                                       |
|- - -+- -           Vendor-specific description data                      - -|
| n   |                                                                       |
+=============================================================================+

The peripheral qualifier field and the peripheral device type field are
as defined in 7.5.1.

The page length field specifies the length of the following page data. 
If the allocation length is less than the length of the data to be
returned, the page length shall not be adjusted to reflect the
truncation.

The ASCII operating definition description length field specifies the
length in bytes of the ASCII operating definition description data that
follows.  If the allocation length is less than the length of data to be
returned, the ASCII operating definition description length shall not be
adjusted to reflect the truncation.  A value of zero in this field
indicates that no ASCII operating definition description data is
available.

The ASCII operating definition description data field contains the ASCII
operating definition description data for the device server.  The data
in this field shall be formatted in lines (or character strings).  Each
line shall contain only graphic codes (i.e. code values 20h through 7Eh)
and shall be terminated with a NULL (00h) character. 

8.4.2 ASCII information page

The ASCII information page (see table 91) returns information for the
field replaceable unit code returned in the REQUEST SENSE data (see
7.18).  

                   Table 91 - ASCII information page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page code (01h - 7Fh)                       |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Page length (n-3)                           |
|-----+-----------------------------------------------------------------------|
| 4   |                           ASCII length (m-4)                          |
|-----+-----------------------------------------------------------------------|
| 5   |                                                                       |
|- - -+- -                        ASCII information                        - -|
| m   |                                                                       |
|-----+-----------------------------------------------------------------------|
| m+1 |                                                                       |
|- - -+- -                        Vendor-specific information              - -|
| n   |                                                                       |
+=============================================================================+

The peripheral qualifier field and the peripheral device type field are
defined in 7.5.1.

The page code field contains the same value as in the page code field of
the INQUIRY command descriptor block (see 7.5) and is associated with
the field replaceable unit code returned by the REQUEST SENSE command.

  NOTE 57 The field replaceable unit field in the sense data provides
  for 255 possible codes, while the page code field provides for only
  127 possible codes.  Thus it is not possible to return ASCII
  information pages for the upper code values.

The page length field specifies the length of the following page data. 
If the allocation length of the command descriptor block is too small to
transfer all of the page, the page length shall not be adjusted to
reflect the truncation.

The ASCII length field specifies the length in bytes of the ASCII
information that follows.  If the allocation length is less than the
length of the data to be returned, the ASCII length shall not be
adjusted to reflect the truncation.  A value of zero in this field
indicates that no ASCII information is available for the specified page
code.

The ASCII information field contains ASCII information concerning the
field replaceable unit identified by the page code.  The data in this
field shall be formatted in one or more lines (or character strings). 
Each line shall contain only graphic codes (i.e. code values 20h through
7Eh) and shall be terminated with a NULL (00h) character. 

The contents of the vendor-specific information field is not defined in
this standard.

8.4.3 Implemented operating definition page

The implemented operating definition page (see table 92) defines the
current operating definition, the default operating definition, and the
operating definitions implemented by the target.  These operating
definition values are specified in the CHANGE DEFINITION command (see
7.1).

           Table 92 - Implemented operating definition page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page code (81h)                             |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Page length (n-3)                           |
|-----+-----------------------------------------------------------------------|
| 4   |Reserved|         Current operating definition                         |
|-----+--------+--------------------------------------------------------------|
| 5   | SavImp |         Default operating definition                         |
|-----+--------+--------------------------------------------------------------|
| 6   | SavImp |                                                              |
|-----+---     +         Supported operating definition list               ---|
| n   | SavImp |                                                              |
+=============================================================================+

The peripheral qualifier field and the peripheral device type field are
defined in 7.5.1.

The page length field specifies the length of the following operating
definitions.  If the allocation length of the command descriptor block
is too small to transfer all of the page, the page length shall not be
adjusted to reflect the truncation.

For each operating definition, there is an associated save implemented
(SavImp) bit.  A SavImp bit of zero indicates that the corresponding
operating definition parameter cannot be saved.  A SavImp bit of one
indicates that the corresponding operating definition parameter can be
saved.

All returned operating definitions use the codes defined in table 7. 
The current operating definition field returns the value of the present
operating definition.  If no operating definition is saved, the default
operating definition field returns the value of the operating definition
the target uses when power is applied.  The supported operating
definition list returns one or more operating definitions implemented by
the target.


8.4.4 Supported vital product data pages

The supported vital product data pages are shown in table 93.

             Table 93 - Supported vital product data pages
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page code (00h)                             |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Page length (n-3)                           |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                        Supported page list                      - -|
| n   |                                                                       |
+=============================================================================+

The peripheral qualifier field and the peripheral device type field are
defined in 7.5.1.

The page code field shall be set to the value of the page code field in
the INQUIRY command descriptor block (see 7.5).

The page length field specifies the length of the supported page list. 
If the allocation length is too small to transfer all of the page, the
page length shall not be adjusted to reflect the truncation.

The supported page list field shall contain a list of all vital product
data page codes implemented for the target or logical unit in ascending
order beginning with page code 00h.

8.4.5 Unit serial number page

This page (see table 94) provides a product serial number for the target
or logical unit.

                  Table 94 - Unit serial number page
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Peripheral qualifier     |           Peripheral device type           |
|-----+-----------------------------------------------------------------------|
| 1   |                           Page code (80h)                             |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 3   |                           Page length (n-3)                           |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                        Product serial number                    - -|
| n   |                                                                       |
+=============================================================================+

The peripheral qualifier field and the peripheral device type field are
defined in 7.5.1.

The page length field specifies the length of the product serial number. 
If the allocation length is too small to transfer all of the page, the
page length shall not be adjusted to reflect the truncation.

The product serial number field contains ASCII data that is vendor-
specific. The least significant ASCII character of the serial number
shall appear as the last byte of a successful data transfer.  If the
product serial number is not available, the target shall return ASCII
spaces (20h) in this field. 


9 Commands for processor devices

The commands for processor devices shall be as shown in table 95.

               Table 95 - Commands for processor devices
+=====================================-============-======-===========+
|  Command name                       | Operation  | Type | Subclause |
|                                     |   code     |      |           |
|-------------------------------------+------------+------+-----------|
|  CHANGE DEFINITION                  |    40h     |   O  |   7.1     |
|  COMPARE                            |    39h     |   O  |   7.2     |
|  COPY                               |    18h     |   O  |   7.3     |
|  COPY AND VERIFY                    |    3Ah     |   O  |   7.4     |
|  INQUIRY                            |    12h     |   M  |   7.5     |
|  LOG SELECT                         |    4Ch     |   O  |   7.6     |
|  LOG SENSE                          |    4Dh     |   O  |   7.7     |
|  PORT STATUS                        |    1Fh     |   O  |   7.13    |
|  READ BUFFER                        |    3Ch     |   O  |   7.14    |
|  RECEIVE                            |    08h     |   O  |   9.1     |
|  RECEIVE DIAGNOSTIC RESULTS         |    1Ch     |   O  |   7.16    |
|  RELEASE(6)                         |    17h     |   O  |   7.17    |
|  RELEASE(10)                        |    57h     |   O  |   7.18    |
|  REQUEST SENSE                      |    03h     |   M  |   7.19    |
|  RESERVE(6)                         |    16h     |   O  |   7.20    |
|  RESERVE(10)                        |    56h     |   O  |   7.21    |
|  SEND                               |    0Ah     |   M  |   9.2     |
|  SEND DIAGNOSTIC                    |    1Dh     |   M  |   7.22    |
|  TEST UNIT READY                    |    00h     |   M  |   7.23    |
|  WRITE BUFFER                       |    3Bh     |   O  |   7.24    |
|---------------------------------------------------------------------|
|Key:  M = Command implementation is mandatory.                       |
|      O = Command implementation is optional.                        |
+=====================================================================+

The following operation codes are vendor-specific: 02h, 05h, 06h, 09h,
0Ch, 0Dh, 0Eh, 0Fh, 10h, 11h, 13h, 14h, 19h, C0h through FFh.  All
remaining operation codes for processor devices are reserved for future
standardization.


9.1 RECEIVE command

The RECEIVE command (see table 96) requests that the target transfer
data to the initiator.  The contents of the data are not defined by this
standard.

                      Table 96 - RECEIVE command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (08h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                                    |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 3   |                           Allocation length                           |
|-----+---                                                                 ---|
| 4   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a RECEIVE command is received
from an initiator other than the one holding a logical unit or extent
reservation.

The transfer length specifies the length in bytes of data that shall be
transferred to the Data-In buffer.  A transfer length of zero indicates
that no data shall be sent.  This condition shall not be considered an
error.

9.2 SEND command

The SEND command (see table 97) requests that the target transfer data
from the initiator.

                        Table 97 - SEND command
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Operation code (0Ah)                        |
|-----+-----------------------------------------------------------------------|
| 1   |                           Reserved                           |  AER   |
|-----+-----------------------------------------------------------------------|
| 2   | (MSB)                                                                 |
|-----+---                                                                 ---|
| 3   |                           Transfer length                             |
|-----+---                                                                 ---|
| 4   |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 5   |                           Control                                     |
+=============================================================================+

A reservation conflict shall occur when a SEND command is received from
an initiator other than the one holding a logical unit or extent
reservation.

An asynchronous event reporting (AER) bit of one indicates that the data
to be transferred conforms to AER data format as defined in table 98. 
A SEND command with an AER bit of one shall be only issued to logical
unit zero.  An AER bit of zero indicates that the data to be transferred
are vendor-specific.

The transfer length specifies the length in bytes of data that shall be
transferred from the Data-Out buffer.  A transfer length of zero
indicates that no data shall be sent.  This condition shall not be
considered an error.


               Table 98 - SEND command - AER data format
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
|=====+========+==============================================================|
| 0   | SCSI-3 |                      Reserved                                |
|-----+-----------------------------------------------------------------------|
| 1   |                                                                       |
|- - -+- -                            Reserved                             - -|
| 3   |                                                                       |
|-----+-----------------------------------------------------------------------|
| 4   |                                                                       |
|- - -+- -                            LUN                                  - -|
| 11  |                                                                       |
|-----+-----------------------------------------------------------------------|
| 12  |                               Sense data byte (0)                     |
|- - -+- -                                                                 - -|
| n+12|                               Sense data byte (n)                     |
+=============================================================================+

If the SCSI-3 bit is zero, then the AEN data format (as defined by the
SCSI-2 standard) shall be used.  If the SCSI-3 bit is one, then the AER
data format shown in Table 98 shall be used.

The LUN field shall contain the logical unit number on which the
asynchronous event occurred.  The LUN field shall have the properties
defined by the SAM.

The sense data bytes shall have the format defined in clause 7.18.


10 Parameters for processor devices

10.1 Diagnostic parameters

This subclause defines the descriptors and pages for diagnostic
parameters used with processor devices. 

The diagnostic page codes for processor devices are defined in table 99.

              Table 99 - Processor diagnostic page codes
+=============-==================================================-============+
|  Page code  |  Description                                     | Subclause  |
|-------------+--------------------------------------------------+------------|
|     00h     |  Supported diagnostics pages                     |   8.1.1    |
|  01h - 3Fh  |  Reserved (for all device type pages)            |            |
|  40h - 7Fh  |  See specific device type for definition         |            |
|  80h - FFh  |  Vendor-specific pages                           |            |
+=============================================================================+


10.2 Log parameters

This subclause defines the descriptors and pages for log parameters used
with processor devices.

The log page codes for processor devices are defined in table 101.

                 Table 101 - Processor log page codes
+=============-==================================================-============+
|  Page code  |  Description                                     | Subclause  |
|-------------+--------------------------------------------------+------------|
|     01h     |  Buffer over-run/under-run page                  |   8.2.1    |
|     07h     |  Last n error events page                        |   8.2.3    |
|     06h     |  Non-medium error page                           |   8.2.4    |
|     00h     |  Supported log pages                             |   8.2.5    |
|  02h - 05h  |  Reserved                                        |            |
|  08h - 2Fh  |  Reserved                                        |            |
|     3Fh     |  Reserved                                        |            |
|  30h - 3Eh  |  Vendor-specific pages                           |            |
+=============================================================================+
^L
Annex A
(informative)

Procedures for Logging Operations in SCSI

This annex provides guidance in the use of the LOG SELECT and LOG SENSE
commands defined in clause 7.  This annex does not replace the
descriptions in clause 7 and is not intended to conflict clause 7.  The
purpose of this annex is to provide more information to gain a more
uniform implementation of the SCSI logging functions.

A.1 Logging Operations Terminology

A.1.1 List Parameter:  A Parameter Value that consists of a string of
ASCII graphic codes

A.1.2 Log Page: A page made up of one or more Log Parameters

C\SPC Log Parameter: Log information that is made up of a Parameter
Code, a Parameter Control Byte, and a Parameter Value.

A.1.4 Parameter Code: A unique identifier that is used to distinguish
between the different Log Parameters within a single Log Page.

A.1.5 Parameter Control Byte: Used to tell the device server how to
update, save, use thresholds, determine format, etc. of the Parameter
Value.

A.1.6 Parameter Pointer Field: Contains a Parameter Code

A.1.7 Parameter Value: A counter, cumulative, threshold, or ASCII value

A.1.8 NV: Not Valid

A.1.9 x: The value of the bit or field is not relevant.

A.2 LOG SENSE Command

The LOG SENSE command may be used to do two functions.  One is to allow
the device server to save the Log Parameters in a Log Page to
non-volatile storage.  The other is to allow the application client to
receive the value of the current Log Parameters for a given Log Page.

Table A.1 lists the definitions of the LOG SENSE Command Descriptor
Block (CDB) fields:

               Table A.1 - LOG SENSE Command CDB fields
+=================-===========================================================+
| LOG SENSE CDB   |                                                           |
|     Values      |                                                           |
|                 |                                                           |
| PPC   SP   PC   |                                                           |
| bit  bit  field | Description                                               |
|-----------------+-----------------------------------------------------------|
|  0    -    --   | Indicates that the log parameter requested from the       |
|                 | device server shall begin with the parameter code         |
|                 | specified by the parameter pointer field in ascending     |
|                 | order of parameter codes from the specified log page.     |
|-----------------+-----------------------------------------------------------|
|  1    -    --   | Indicates that the device server shall return a log       |
|                 | page consisting only of the log parameters in which       |
|                 | log parameter value has changed since the last LOG SELECT |
|                 | or LOG SENSE command.  The device server shall return     |
|                 | only those log parameters following the parameter pointer |
|                 | field.                                                    |
|-----------------+-----------------------------------------------------------|
|  -    0    --   | Indicates the device server shall perform the specified   |
|                 | LOG SENSE command and shall not save any log parameters.  |
|-----------------+-----------------------------------------------------------|
|  -    1    --   | Indicates that the device server shall perform the        |
|                 | specified LOG SENSE command and shall save all log        |
|                 | parameter identified as savable by the DS bit to          |
|                 | non-volatile vendor-specific location if allowed.         |
|                 | (See the Table A.3 to determine the interaction between   |
|                 | the SP and DS bits to see what 'allowed' means.)          |
|-----------------+-----------------------------------------------------------|
|  -    -    00   | Indicates the device server shall return Current          |
|                 | Threshold Values.                                         |
|-----------------+-----------------------------------------------------------|
|  -    -    01   | Indicates the device server shall return Current          |
|                 | Cumulative Values.                                        |
|-----------------+-----------------------------------------------------------|
|  -    -    10   | Indicates the device server shall return Default          |
|                 | Threshold Values.                                         |
|-----------------+-----------------------------------------------------------|
|  -    -    11   | Indicates the device server shall return Default          |
|                 | Cumulative Values.                                        |
+=============================================================================+

Table A.2 lists the possible Parameter Values that can be returned by a
LOG SENSE command.

            Table A.2 - LOG SENSE returned Parameter Values
+============-============-===================================================+
|            | Log Page   |                                                   |
|            | Parameter  |                                                   |
| LOG SENSE  | Control    |                                                   |
| CDB Values | Byte Value | Device Server Action                              |
|            |            |                                                   |
| PPC   PC   | LP    LBIN | Parameter Values returned to                      |
| bit  field | bit   bit  | the Application Client                            |
|------------+------------+---------------------------------------------------|
|  0    00   |  0     x   | Returns all Current Threshold Values starting     |
|            |            | with the specified Parameter Pointer.             |
|------------+------------+---------------------------------------------------|
|  0    01   |  0     x   | Returns all Current Cumulative Values starting    |
|            |            | with the specified Parameter Pointer.             |
|------------+------------+---------------------------------------------------|
|  0    10   |  0     x   | Returns all Default Threshold Values starting     |
|            |            | with the specified Parameter Pointer.             |
|------------+------------+---------------------------------------------------|
|  0    11   |  0     x   | Returns all Default Cumulative Values starting    |
|            |            | with the specified Parameter Pointer.             |
|------------+------------+---------------------------------------------------|
|  1    00   |  0     x   | Returns only the Current Threshold Values         |
|            |            | that have changed, starting with the specified    |
|            |            | Parameter Pointer.                                |
|------------+------------+---------------------------------------------------|
|  1    01   |  0     x   | Returns only the Current Cumulative Values        |
|            |            | that have changed, starting with the specified    |
|            |            | Parameter Pointer.                                |
|------------+------------+---------------------------------------------------|
|  1    10   |  0     x   | Returns only the Default Threshold Values         |
|            |            | that have changed, starting with the specified    |
|            |            | Parameter Pointer.                                |
|------------+------------+---------------------------------------------------|
|  1    11   |  0     x   | Returns only the Default Cumulative Values        |
|            |            | that have changed, starting with the specified    |
|            |            | Parameter Pointer.                                |
|------------+------------+---------------------------------------------------|
|  0    xx   |  1     0   | Returns all the List Parameters starting with     |
|            |            | the specified Parameter Pointer.  The List        |
|            |            | Parameters returned are formatted as ASCII        |
|            |            | graphic codes.                                    |
|------------+------------+---------------------------------------------------|
|  1    xx   |  1     0   | Returns only the List Parameters that have        |
|            |            | changed, starting with the specified Parameter    |
|            |            | Pointer.  The List Parameters returned are        |
|            |            | formatted as ASCII graphic codes.                 |
|------------+------------+---------------------------------------------------|
|  0    xx   |  1     1   | Returns all the List Parameters starting with     |
|            |            | the specified Parameter Pointer.  The List        |
|            |            | Parameters returned are formatted in binary.      |
|------------+------------+---------------------------------------------------|
|  1    xx   |  1     1   | Returns only the List Parameters that have        |
|            |            | changed, starting with the specified Parameter    |
|            |            | Pointer.  The List Parameters returned are        |
|            |            | formatted in binary.                              |
+=============================================================================+

Table A.3 lists the possible save options for the LOG SENSE command.

The listed options define the save operations that occur as a direct
result of the LOG SENSE command.  Further save operations are a function
of the TSD bit in the Log Parameter Control Byte.

                  Table A.3 - LOG SENSE save options
+============-==============-=================================================+
|            | Log Page     |                                                 |
|            | Parameter    |                                                 |
| LOG SENSE  | Control      |                                                 |
| CDB Values | Byte Value   |                                                 |
|            |              |                                                 |
| SP    PC   | DS  LP  LBIN |                                                 |
| bit  field | bit bit bit  | Device Server Action                            |
|------------+--------------+-------------------------------------------------|
|  0    xx   |  x   x   x   | Do not save any of the Log Parameters into      |
|            |              | non-volatile storage.                           |
|------------+--------------+-------------------------------------------------|
|  1    00   |  0   0   x   | Save all the Current Threshold Values of the    |
|            |              | selected Log Page into non-volatile storage.    |
|------------+--------------+-------------------------------------------------|
|  1    01   |  0   0   x   | Save all the Current Cumulative Values of the   |
|            |              | selected Log Page into non-volatile storage.    |
|------------+--------------+-------------------------------------------------|
|  1    10   |  0   0   x   | Save all the Default Threshold Values of the    |
|            |              | selected Log Page into non-volatile storage.    |
|------------+--------------+-------------------------------------------------|
|  1    11   |  0   0   x   | Save all the Default Cumulative Values of the   |
|            |              | selected Log Page into non-volatile storage.    |
|------------+--------------+-------------------------------------------------|
|  1    xx   |  0   1   0   | Save all the current List Parameter Values      |
|            |              | of the selected Log Page into non-volatile      |
|            |              | storage.  The List Parameters are formatted     |
|            |              | as ASCII graphic codes.                         |
|------------+--------------+-------------------------------------------------|
|  1    xx   |  0   1   1   | Save all the current List Parameter Values      |
|            |              | of the selected Log Page into non-volatile      |
|            |              | storage.  The List Parameters are formatted     |
|            |              | in binary.                                      |
|------------+--------------+-------------------------------------------------|
|  1    xx   |  1   x   x   | Do not save any of the Log Parameters into      |
|            |              | non-volatile storage.                           |
+=============================================================================+


A.3 Log Select Command

The function of the LOG SELECT command is to allow the application
client a method of sending parameter values to the device server.

Table A.4 lists the definitions of the LOG SELECT Command Descriptor
Block (CDB) fields.

                   Table A.4 - LOG SELECT CDB fields
+============================-================================================+
|   LOG SELECT CDB Values    |                                                |
|                            |                                                |
|                  Parameter |                                                |
| PCR  SP    PC      List    |                                                |
| bit  bit  field   Length   | Description                                    |
|----------------------------+------------------------------------------------|
|   0   -     --       -     | Indicates that the log parameters shall not    |
|                            | be reset.                                      |
|----------------------------+------------------------------------------------|
|   1   x     xx     0000h   | Indicates the device server shall set all      |
|                            | implemented parameter values to the target-    |
|                            | defined default values.                        |
|----------------------------+------------------------------------------------|
|   1   x     xx     GT 0    | This is an illegal condition.                  |
|----------------------------+------------------------------------------------|
|   -   0     --       -     | Indicates the device server shall not save     |
|                            | any of the log parameters.                     |
|----------------------------+------------------------------------------------|
|   -   1     --       -     | Indicates that after performing the specified  |
|                            | LOG SELECT operation the device server shall   |
|                            | save to non-volatile memory all savable log    |
|                            | parameters.  (See Table A.3 to determine the   |
|                            | interaction between the SP and DS bits to see  |
|                            | what 'savable' means.)                         |
|----------------------------+------------------------------------------------|
|   -   -     00       -     | Indicates the application client shall send    |
|                            | Threshold Values.                              |
|----------------------------+------------------------------------------------|
|   -   -     01       -     | Indicates the application client shall send    |
|                            | Cumulative Values.                             |
|----------------------------+------------------------------------------------|
|   -   -     10       -     | Indicates the application client shall send    |
|                            | Default Threshold Values.                      |
|----------------------------+------------------------------------------------|
|   -   -     11       -     | Indicates the application client shall send    |
|                            | Default Cumulative Values.                     |
+=============================================================================+

Table A.5 lists the possible save options for the LOG SELECT command.

All the Log Parameters that are selected for saving shall be saved to
non-volatile storage after the target performs the specified LOG SELECT
operation.  Further save operations are a function of the TSD bit in the
Log Parameter Control Byte.

                  Table A.5 - LOG SELECT save options
+============-==============-=================================================+
|            | Log Page     |                                                 |
|            | Parameter    |                                                 |
| LOG SELECT | Control      |                                                 |
| CDB Values | Byte Value   |                                                 |
|            |              |                                                 |
| SP    PC   | DS  LP  LBIN |                                                 |
| bit  field | bit bit bit  | Device Server Action                            |
|------------+--------------+-------------------------------------------------|
|  0    xx   |  x   x   x   | Do not save any of the Log Parameters into non- |
|            |              | volatile storage.                               |
|------------+--------------+-------------------------------------------------|
|  1    00   |  0   0   x   | Save all the Threshold Values of the selected   |
|            |              | Log Page into non-volatile storage.             |
|------------+--------------+-------------------------------------------------|
|  1    01   |  0   0   x   | Save all the Cumulative Values of the selected  |
|            |              | Log Page into non-volatile storage.             |
|------------+--------------+-------------------------------------------------|
|  1    10   |  0   0   x   | Save all the Default Threshold Values of the    |
|            |              | selected Log Page into non-volatile storage.    |
|------------+--------------+-------------------------------------------------|
|  1    11   |  0   0   x   | Save all the Default Cumulative Values of the   |
|            |              | selected Log Page into non-volatile storage.    |
|------------+--------------+-------------------------------------------------|
|  1    xx   |  0   1   0   | Save all the List Parameter Values of the       |
|            |              | selected Log Page into non-volatile storage.    |
|            |              | The List Parameters are formatted as ASCII      |
|            |              | graphic codes.                                  |
|------------+--------------+-------------------------------------------------|
|  1    xx   |  0   1   1   | Save all the List Parameter Values of the       |
|            |              | selected Log Page into non-volatile storage.    |
|            |              | The List Parameters are formatted in binary.    |
|------------+--------------+-------------------------------------------------|
|  1    xx   |  1   x   x   | Do not save any of the Log Parameters into non- |
|            |              | volatile storage.                               |
+=============================================================================+

Table A.6 lists the possible Parameter Values that can be controlled by
a LOG SELECT command.

          Table A.6 - LOG SELECT controller Parameter Values
+============-============-===================================================+
|            | Log Page   |                                                   |
|            | Parameter  |                                                   |
| LOG SELECT | Control    |                                                   |
| CDB Values | Byte Value | Device Server Action                              |
|            |            |                                                   |
| PC         | LP   LBIN  |                                                   |
| field      | bit  bit   | Updated Parameter Value Usage                     |
|------------+------------+---------------------------------------------------|
|  00        |  0    x    | The Parameter Values for all the Log Parameters   |
|            |            | in the Log Page(s) sent to the device server      |
|            |            | shall be used as Threshold Values, unless the     |
|            |            | LP bit is set.                                    |
|------------+------------+---------------------------------------------------|
|  01        |  0    x    | The Parameter Values for all the Log Parameters   |
|            |            | in the Log Page(s) sent to the device server      |
|            |            | shall be used as Cumulative Values, unless the    |
|            |            | LP bit is set.                                    |
|------------+------------+---------------------------------------------------|
|  10        |  0    x    | The device server shall set the Current Threshold |
|            |            | Values to the Default Threshold Values for all    |
|            |            | the Log Parameters specified in the Log Page(s)   |
|            |            | sent during a LOG SELECT command, unless the LP   |
|            |            | bit is set.                                       |
|------------+------------+---------------------------------------------------|
|  11        |  0    x    | The device server shall set the Current           |
|            |            | Cumulative Values to the Default Cumulative       |
|            |            | Values for all the Log Parameters specified in    |
|            |            | the Log Page(s) sent during a LOG SELECT command, |
|            |            | unless the LP bit is set.                         |
|------------+------------+---------------------------------------------------|
|  xx        |  1    0    | Replace the Current List Parameter with the List  |
|            |            | Parameter sent to the device server.  The List    |
|            |            | Parameters are formatted as ASCII graphic codes.  |
|------------+------------+---------------------------------------------------|
|  xx        |  1    1    | Replace the Current List Parameter with the List  |
|            |            | Parameter sent to the device server.  The List    |
|            |            | Parameters are formatted in binary.               |
+=============================================================================+


A.4 Exception Conditions During Logging

The logging operations can be setup to keep track of many different
things.  What those things are is left up to the imagination of
implementors.  But what should be well defined is how a device server
informs the application client when a log reaches a critical point
thereby creating an exception condition.  What follows is a description
of how the device server shall deal with these exception conditions.

Tables A.7 and A.8 list the definitions of the Parameter Control Byte of
the Log Parameter.  Table A.7 lists Control Byte values that affect
parameter saving.  Table A.8 lists Control Byte values that affect
parameter updating and reporting.

       Table A.7 - Log Parameter Control Byte saving definitions
+====================-===========-============================================+
|                    | Control   |                                            |
| Parameter Control  | Mode Page |                                            |
| Byte values        | (0Ah)     |                                            |
|                    |           |                                            |
| DS   TSD           | GLTSD     |                                            |
| bit  bit           |  bit      | Description                                |
|--------------------+-----------+--------------------------------------------|
|  0    -            |   -       | Indicates that the device server supports  |
|                    |           | saving for of the log parameter.           |
|--------------------+-----------+--------------------------------------------|
|  1    -            |   -       | Indicates that the device server does not  |
|                    |           | support saving of the log parameter in     |
|                    |           | response to a LOG SELECT or LOG SENSE      |
|                    |           | command.                                   |
|--------------------+-----------+--------------------------------------------|
|  -    0            |   0       | Indicates that the device server provides  |
|                    |           | a target-defined method of saving log      |
|                    |           | parameters.                                |
|--------------------+-----------+--------------------------------------------|
|  -    1            |   0       | Indicates that either the device server    |
|                    |           | does not provide a target-defined method   |
|                    |           | for saving log parameters or the target-   |
|                    |           | defined method has been disabled by the    |
|                    |           | application client.                        |
|--------------------+-----------+--------------------------------------------|
|  -    x            |   1       | Indicates that either the device server    |
|                    |           | does not provide a target-defined method   |
|                    |           | for saving log parameters or the target-   |
|                    |           | defined method has been disabled by the    |
|                    |           | application client.                        |
+=============================================================================+

      Table A.8 - Log Parameter Control Byte updating definitions
+===========================-============================================+
| Parameter Control Byte    |                                            |
| values                    |                                            |
|                           |                                            |
| DU   ETC   TMC   LP  LBIN |                                            |
| bit  bit  field  bit bit  | Description                                |
|---------------------------+--------------------------------------------|
|  0    -    --     -   -   | Indicates that the device server shall     |
|                           | update the log parameter value to reflect  |
|                           | all events that should be noted by that    |
|                           | log parameter.                             |
|---------------------------+--------------------------------------------|
|  1    -    --     -   -   | Indicates that the device server shall     |
|                           | not update the log parameter value except  |
|                           | in response to a LOG SELECT command that   |
|                           | specifies a new value the log parameter.   |
|---------------------------+--------------------------------------------|
|  -    0    --     -   -   | Indicates that a comparison between the    |
|                           | threshold value and the cumulative value   |
|                           | is not performed.                          |
|---------------------------+--------------------------------------------|
|  -    1    --     -   -   | Indicates that a comparison to the         |
|                           | threshold value is performed whenever      |
|                           | the cumulative value is updated.           |
|---------------------------+--------------------------------------------|
|  -    -    00     -   -   | Indicates that device server shall inform  |
|                           | the application client on every update to  |
|                           | the cumulative value.                      |
|---------------------------+--------------------------------------------|
|  -    -    01     -   -   | Indicates that device server shall inform  |
|                           | the application client on every time the   |
|                           | cumulative value is equal to the threshold |
|                           | value.                                     |
|---------------------------+--------------------------------------------|
|  -    -    10     -   -   | Indicates that device server shall inform  |
|                           | the application client on every time the   |
|                           | cumulative value is not equal to the       |
|                           | threshold value.                           |
|---------------------------+--------------------------------------------|
|  -    -    11     -   -   | Indicates that device server shall inform  |
|                           | the application client on every time the   |
|                           | cumulative value is greater than the       |
|                           | threshold value.                           |
|---------------------------+--------------------------------------------|
|  -    -    --     0   x   | Indicates that log parameter is a data     |
|                           | counter.                                   |
|---------------------------+--------------------------------------------|
|  -    -    --     1   0   | Indicates that log parameter is a list     |
|                           | parameter and the list parameter is        |
|                           | formatted as ASCII graphic codes.          |
|---------------------------+--------------------------------------------|
|  -    -    --     1   1   | Indicates that log parameter is a list     |
|                           | parameter and the list parameter is        |
|                           | formatted in binary.                       |
+========================================================================+

Table A.9 describes how the target shall deal with exception conditions.

               Table A.9 - Logging Exception Conditions
+======================-=========-============================================+
|                      | Control |                                            |
|                      | Mode    |                                            |
| Log Page Parameter   | Page    |                                            |
| Control Byte values  | (0Ah)   | Device Server Action                       |
|                      |         |                                            |
| DU   ETC   TMC   LP  | RLEC    |                                            |
| bit  bit  field  bit | bit     | Exception Condition Actions                |
|----------------------+---------+--------------------------------------------|
|  x    x    xx     x  |  0      | No logging activities will cause an Auto   |
|                      |         | Contingent Allegiance Condition or a Unit  |
|                      |         | Attention Condition.                       |
|----------------------+---------+--------------------------------------------|
|  x    0   GT 0    1  |  x      | This is an illegal condition.              |
|----------------------+---------+--------------------------------------------|
|  x    1    xx     1  |  x      | This is an illegal condition.              |
|----------------------+---------+--------------------------------------------|
|  0    1    xx     0  |  1      | Follow pseudocode 1 (see clause A.4.1)     |
|----------------------+---------+--------------------------------------------|
|  0    0    NV     0  |  1      | Follow pseudocode 2 (see clause A.4.2)     |
|----------------------+---------+--------------------------------------------|
|  0    0    00     1  |  1      | Follow pseudocode 3 (see clause A.4.3)     |
+=============================================================================+

A.4.1 Pseudocode 1

IF the threshold condition as defined by the TMC field is met:
   a) IF there is an active task
      a) Complete the active task
      b) If an Auto Contingent Allegiance Condition exists wait for it
         to be cleared
      END
   b) Issue a Unit Attention Condition to all Initiators that have set
      the RLEC bit to one
   c) IF the Unit Attention Condition is ignored
      a) Continue normal operations until the threshold condition is met
         again
   END

A.4.2 Pseudocode 2

IF a log counter reaches its maximum value:
   a) Set DU to 1
   b) IF there is no active task
      a) Wait until there is an active task
      END
   c) Complete the active task
   d) IF no Auto Contingent Allegiance Condition exists
      a) Create an Auto Contingent Allegiance Condition with a sense key
         of Recovered Error and an ASCQ of Log Exception, Count At
         Maximum
      END
   e) Wait for the Auto Contingent Allegiance Condition to be cleared
   f) IF the cause of the counter reaching maximum is not cleared by the
      application client
      a) Do not create an Auto Contingent Allegiance Condition and do
         not increment the counter
      END
   END

A.4.3 Pseudocode 3

IF the log of parameters if full:
   a) Place the new log parameter code value into the lowest parameter
      code value position (wrap-around the parameter codes
   b) IF there is no active task
      a) Wait until there is an active task
      END
   c) Complete the active task
   d) IF no Auto Contingent Allegiance Condition exists
      a) Create an Auto Contingent Allegiance Condition with a sense key
         of Recovered Error and an ASCQ of Log Exception, List Codes
         Exhausted
      END
   e) Wait for the Auto Contingent Allegiance Condition to be cleared 
   f) IF the cause of the log of parameters filling is not cleared by the
      application client
      a) Create an Auto Contingent Allegiance Condition every time an
         entry is placed into the log of parameters
      END
   END
^L
Annex B
(informative)

Numeric order codes


This annex contains SCSI-3 additional sense codes and operation codes in
numeric order as a reference.  In the event of a conflict with between
the codes in this annex and the body of this standard, the codes in the
body should be regarded as correct.

Table B.1 is a numerical order listing of the additional sense codes and
the additional sense code qualifiers.

                 Table B.1 - ASC and ASCQ assignments
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  00  00  DTLPWRSOMCA  NO ADDITIONAL SENSE INFORMATION                       |
|  00  01   T           FILEMARK DETECTED                                     |
|  00  02   T    S      END-OF-PARTITION/MEDIUM DETECTED                      |
|  00  03   T           SETMARK DETECTED                                      |
|  00  04   T    S      BEGINNING-OF-PARTITION/MEDIUM DETECTED                |
|  00  05   T    S      END-OF-DATA DETECTED                                  |
|  00  06  DTLPWRSOMCA  I/O PROCESS TERMINATED                                |
|  00  11       R       AUDIO PLAY OPERATION IN PROGRESS                      |
|  00  12       R       AUDIO PLAY OPERATION PAUSED                           |
|  00  13       R       AUDIO PLAY OPERATION SUCCESSFULLY COMPLETED           |
|  00  14       R       AUDIO PLAY OPERATION STOPPED DUE TO ERROR             |
|  00  15       R       NO CURRENT AUDIO STATUS TO RETURN                     |
|  00  16  DTLPWRSOMCA  OPERATION IN PROGRESS                                 |
|  00  17  DTL WRSOM A  CLEANING REQUESTED                                    |
|  01  00  D   W  O     NO INDEX/SECTOR SIGNAL                                |
|  02  00  D   WR OM    NO SEEK COMPLETE                                      |
|  03  00  DTL W SO     PERIPHERAL DEVICE WRITE FAULT                         |
|  03  01   T           NO WRITE CURRENT                                      |
|  03  02   T           EXCESSIVE WRITE ERRORS                                |
|  04  00  DTLPWRSOMCA  LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE          |
|  04  01  DTLPWRSOMCA  LOGICAL UNIT IS IN PROCESS OF BECOMING READY          |
|  04  02  DTLPWRSOMCA  LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED |
|  04  03  DTLPWRSOMCA  LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED  |
|  04  04  DTL    O     LOGICAL UNIT NOT READY, FORMAT IN PROGRESS            |
|  04  05            A  LOGICAL UNIT NOT READY, REBUILD IN PROGRESS           |
|  04  06            A  LOGICAL UNIT NOT READY, RECALCULATION IN PROGRESS     |
|  04  07  DTLPWRSOMCA  LOGICAL UNIT NOT READY, OPERATION IN PROGRESS         |
|  05  00  DTL WRSOMCA  LOGICAL UNIT DOES NOT RESPOND TO SELECTION            |
|  06  00  D   WR OM    NO REFERENCE POSITION FOUND                           |
+=============================================================================+

           Table B.1 - ASC and ASCQ assignments (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  07  00  DTL WRSOM    MULTIPLE PERIPHERAL DEVICES SELECTED                  |
|  08  00  DTL WRSOMCA  LOGICAL UNIT COMMUNICATION FAILURE                    |
|  08  01  DTL WRSOMCA  LOGICAL UNIT COMMUNICATION TIME-OUT                   |
|  08  02  DTL WRSOMCA  LOGICAL UNIT COMMUNICATION PARITY ERROR               |
|  09  00  DT  WR O     TRACK FOLLOWING ERROR                                 |
|  09  01      WR O     TRACKING SERVO FAILURE                                |
|  09  02      WR O     FOCUS SERVO FAILURE                                   |
|  09  03      WR O     SPINDLE SERVO FAILURE                                 |
|  09  04  DT  WR O     HEAD SELECT FAULT                                     |
|  0A  00  DTLPWRSOMCA  ERROR LOG OVERFLOW                                    |
|  0B  00                                                                     |
|  0C  00   T    S      WRITE ERROR                                           |
|  0C  01               WRITE ERROR - RECOVERED WITH AUTO REALLOCATION        |
|  0C  02  D   W  O     WRITE ERROR - AUTO REALLOCATION FAILED                |
|  0C  03  D   W  O     WRITE ERROR - RECOMMEND REASSIGNMENT                  |
|  0C  04  DT  W  O     COMPRESSION CHECK MISCOMPARE ERROR                    |
|  0C  05  DT  W  O     DATA EXPANSION OCCURRED DURING COMPRESSION            |
|  0C  06  DT  W  O     BLOCK NOT COMPRESSABLE                                |
|  0D  00                                                                     |
|  0E  00                                                                     |
|  0F  00                                                                     |
|  10  00  D   W  O     ID CRC OR ECC ERROR                                   |
|  11  00  DT  WRSO     UNRECOVERED READ ERROR                                |
|  11  01  DT  W SO     READ RETRIES EXHAUSTED                                |
|  11  02  DT  W SO     ERROR TOO LONG TO CORRECT                             |
|  11  03  DT  W SO     MULTIPLE READ ERRORS                                  |
|  11  04  D   W  O     UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED       |
|  11  05      WR O     L-EC UNCORRECTABLE ERROR                              |
|  11  06      WR O     CIRC UNRECOVERED ERROR                                |
|  11  07      W  O     DATA RE-SYNCHRONIZATION ERROR                         |
|  11  08   T           INCOMPLETE BLOCK READ                                 |
|  11  09   T           NO GAP FOUND                                          |
|  11  0A  DT     O     MISCORRECTED ERROR                                    |
|  11  0B  D   W  O     UNRECOVERED READ ERROR - RECOMMEND REASSIGNMENT       |
|  11  0C  D   W  O     UNRECOVERED READ ERROR - RECOMMEND REWRITE THE DATA   |
|  11  0D  DT  WR O     DE-COMPRESSION CRC ERROR                              |
|  11  0E  DT  WR O     CANNOT DECOMPRESS USING DECLARED ALGORITHM            |
|  12  00  D   W  O     ADDRESS MARK NOT FOUND FOR ID FIELD                   |
|  13  00  D   W  O     ADDRESS MARK NOT FOUND FOR DATA FIELD                 |
|  14  00  DTL WRSO     RECORDED ENTITY NOT FOUND                             |
|  14  01  DT  WR O     RECORD NOT FOUND                                      |
|  14  02   T           FILEMARK OR SETMARK NOT FOUND                         |
|  14  03   T           END-OF-DATA NOT FOUND                                 |
|  14  04   T           BLOCK SEQUENCE ERROR                                  |
+=============================================================================+

           Table B.1 - ASC and ASCQ assignments (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  14  05  DT  W  O     RECORD NOT FOUND - RECOMMEND REASSIGNMENT             |
|  14  06  DT  W  O     RECORD NOT FOUND - DATA AUTO-REALLOCATED              |
|  15  00  DTL WRSOM    RANDOM POSITIONING ERROR                              |
|  15  01  DTL WRSOM    MECHANICAL POSITIONING ERROR                          |
|  15  02  DT  WR O     POSITIONING ERROR DETECTED BY READ OF MEDIUM          |
|  16  00  D   W  O     DATA SYNCHRONIZATION MARK ERROR                       |
|  16  01  D   W  O     DATA SYNC ERROR - DATA REWRITTEN                      |
|  16  02  D   W  O     DATA SYNC ERROR - RECOMMEND REWRITE                   |
|  16  03  D   W  O     DATA SYNC ERROR - DATA AUTO-REALLOCATED               |
|  16  04  D   W  O     DATA SYNC ERROR - RECOMMEND REASSIGNMENT              |
|  17  00  DT  WRSO     RECOVERED DATA WITH NO ERROR CORRECTION APPLIED       |
|  17  01  DT  WRSO     RECOVERED DATA WITH RETRIES                           |
|  17  02  DT  WR O     RECOVERED DATA WITH POSITIVE HEAD OFFSET              |
|  17  03  DT  WR O     RECOVERED DATA WITH NEGATIVE HEAD OFFSET              |
|  17  04      WR O     RECOVERED DATA WITH RETRIES AND/OR CIRC APPLIED       |
|  17  05  D   WR O     RECOVERED DATA USING PREVIOUS SECTOR ID               |
|  17  06  D   W  O     RECOVERED DATA WITHOUT ECC - DATA AUTO-REALLOCATED    |
|  17  07  D   W  O     RECOVERED DATA WITHOUT ECC - RECOMMEND REASSIGNMENT   |
|  17  08  D   W  O     RECOVERED DATA WITHOUT ECC - RECOMMEND REWRITE        |
|  17  09  D   W  O     RECOVERED DATA WITHOUT ECC - DATA REWRITTEN           |
|  18  00  DT  WR O     RECOVERED DATA WITH ERROR CORRECTION APPLIED          |
|  18  01  D   WR O     RECOVERED DATA WITH ERROR CORRECTION & RETRIES APPLIED|
|  18  02  D   WR O     RECOVERED DATA - DATA AUTO-REALLOCATED                |
|  18  03       R       RECOVERED DATA WITH CIRC                              |
|  18  04       R       RECOVERED DATA WITH L-EC                              |
|  18  05  D   WR O     RECOVERED DATA - RECOMMEND REASSIGNMENT               |
|  18  06  D   WR O     RECOVERED DATA - RECOMMEND REWRITE                    |
|  18  07  D   W  O     RECOVERED DATA WITH ECC - DATA REWRITTEN              |
|  19  00  D      O     DEFECT LIST ERROR                                     |
|  19  01  D      O     DEFECT LIST NOT AVAILABLE                             |
|  19  02  D      O     DEFECT LIST ERROR IN PRIMARY LIST                     |
|  19  03  D      O     DEFECT LIST ERROR IN GROWN LIST                       |
|  1A  00  DTLPWRSOMCA  PARAMETER LIST LENGTH ERROR                           |
|  1B  00  DTLPWRSOMCA  SYNCHRONOUS DATA TRANSFER ERROR                       |
|  1C  00  D      O     DEFECT LIST NOT FOUND                                 |
|  1C  01  D      O     PRIMARY DEFECT LIST NOT FOUND                         |
|  1C  02  D      O     GROWN DEFECT LIST NOT FOUND                           |
|  1D  00  D   W  O     MISCOMPARE DURING VERIFY OPERATION                    |
|  1E  00  D   W  O     RECOVERED ID WITH ECC CORRECTION                      |
|  1F  00  D      O     PARTIAL DEFECT LIST TRANSFER                          |
|  20  00  DTLPWRSOMCA  INVALID COMMAND OPERATION CODE                        |
|  21  00  DT  WR OM    LOGICAL BLOCK ADDRESS OUT OF RANGE                    |
|  21  01  DT  WR OM    INVALID ELEMENT ADDRESS                               |
|  22  00  D            ILLEGAL FUNCTION (SHOULD USE 20 00, 24 00, OR 26 00)  |
|  23  00                                                                     |
+=============================================================================+

           Table B.1 - ASC and ASCQ assignments (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  24  00  DTLPWRSOMCA  INVALID FIELD IN CDB                                  |
|  25  00  DTLPWRSOMCA  LOGICAL UNIT NOT SUPPORTED                            |
|  26  00  DTLPWRSOMCA  INVALID FIELD IN PARAMETER LIST                       |
|  26  01  DTLPWRSOMCA  PARAMETER NOT SUPPORTED                               |
|  26  02  DTLPWRSOMCA  PARAMETER VALUE INVALID                               |
|  26  03  DTLPWRSOMCA  THRESHOLD PARAMETERS NOT SUPPORTED                    |
|  27  00  DT  W  O     WRITE PROTECTED                                       |
|  28  00  DTLPWRSOMCA  NOT READY TO READY TRANSITION, MEDIUM MAY HAVE CHANGED|
|  28  01  DT  WR OM    IMPORT OR EXPORT ELEMENT ACCESSED                     |
|  29  00  DTLPWRSOMCA  POWER ON, RESET, OR BUS DEVICE RESET OCCURRED         |
|  29  01  DTLPWRSOMCA  POWER ON OCCURRED                                     |
|  29  02  DTLPWRSOMCA  SCSI BUS RESET OCCURRED                               |
|  29  03  DTLPWRSOMCA  BUS DEVICE RESET FUNCTION OCCURRED                    |
|  2A  00  DTL WRSOMCA  PARAMETERS CHANGED                                    |
|  2A  01  DTL WRSOMCA  MODE PARAMETERS CHANGED                               |
|  2A  02  DTL WRSOMCA  LOG PARAMETERS CHANGED                                |
|  2B  00  DTLPWRSO C   COPY CANNOT EXECUTE SINCE HOST CANNOT DISCONNECT      |
|  2C  00  DTLPWRSOMCA  COMMAND SEQUENCE ERROR                                |
|  2C  01        S      TOO MANY WINDOWS SPECIFIED                            |
|  2C  02        S      INVALID COMBINATION OF WINDOWS SPECIFIED              |
|  2D  00   T           OVERWRITE ERROR ON UPDATE IN PLACE                    |
|  2E  00                                                                     |
|  2F  00  DTLPWRSOMCA  COMMANDS CLEARED BY ANOTHER INITIATOR                 |
|  30  00  DT  WR OM    INCOMPATIBLE MEDIUM INSTALLED                         |
|  30  01  DT  WR O     CANNOT READ MEDIUM - UNKNOWN FORMAT                   |
|  30  02  DT  WR O     CANNOT READ MEDIUM - INCOMPATIBLE FORMAT              |
|  30  03  DT           CLEANING CARTRIDGE INSTALLED                          |
|  30  04  DT  W  O     CANNOT WRITE MEDIUM - UNKNOWN FORMAT                  |
|  30  05  DT  W  O     CANNOT WRITE MEDIUM - INCOMPATIBLE FORMAT             |
|  30  06  DT  W  O     CANNOT FORMAT MEDIUM - INCOMPATIBLE MEDIUM            |
|  30  07  DTL WRSOM A  CLEANING FAILURE                                      |
|  31  00  DT  W  O     MEDIUM FORMAT CORRUPTED                               |
|  31  01  D L    O     FORMAT COMMAND FAILED                                 |
|  32  00  D   W  O     NO DEFECT SPARE LOCATION AVAILABLE                    |
|  32  01  D   W  O     DEFECT LIST UPDATE FAILURE                            |
|  33  00   T           TAPE LENGTH ERROR                                     |
|  34  00                                                                     |
|  35  00                                                                     |
|  36  00    L          RIBBON, INK, OR TONER FAILURE                         |
|  37  00  DTL WRSOMCA  ROUNDED PARAMETER                                     |
|  38  00                                                                     |
|  39  00  DTL WRSOMCA  SAVING PARAMETERS NOT SUPPORTED                       |
|  3A  00  DTL WRSOM    MEDIUM NOT PRESENT                                    |
|  3B  00   TL          SEQUENTIAL POSITIONING ERROR                          |
|  3B  01   T           TAPE POSITION ERROR AT BEGINNING-OF-MEDIUM            |
+=============================================================================+

           Table B.1 - ASC and ASCQ assignments (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  3B  02   T           TAPE POSITION ERROR AT END-OF-MEDIUM                  |
|  3B  03    L          TAPE OR ELECTRONIC VERTICAL FORMS UNIT NOT READY      |
|  3B  04    L          SLEW FAILURE                                          |
|  3B  05    L          PAPER JAM                                             |
|  3B  06    L          FAILED TO SENSE TOP-OF-FORM                           |
|  3B  07    L          FAILED TO SENSE BOTTOM-OF-FORM                        |
|  3B  08   T           REPOSITION ERROR                                      |
|  3B  09        S      READ PAST END OF MEDIUM                               |
|  3B  0A        S      READ PAST BEGINNING OF MEDIUM                         |
|  3B  0B        S      POSITION PAST END OF MEDIUM                           |
|  3B  0C   T    S      POSITION PAST BEGINNING OF MEDIUM                     |
|  3B  0D  DT  WR OM    MEDIUM DESTINATION ELEMENT FULL                       |
|  3B  0E  DT  WR OM    MEDIUM SOURCE ELEMENT EMPTY                           |
|  3B  11  DT  WR OM    MEDIUM MAGAZINE NOT ACCESSIBLE                        |
|  3B  12  DT  WR OM    MEDIUM MAGAZINE REMOVED                               |
|  3B  13  DT  WR OM    MEDIUM MAGAZINE INSERTED                              |
|  3B  14  DT  WR OM    MEDIUM MAGAZINE LOCKED                                |
|  3B  15  DT  WR OM    MEDIUM MAGAZINE UNLOCKED                              |
|  3C  00                                                                     |
|  3D  00  DTLPWRSOMCA  INVALID BITS IN IDENTIFY MESSAGE                      |
|  3E  00  DTLPWRSOMCA  LOGICAL UNIT HAS NOT SELF-CONFIGURED YET              |
|  3E  01            A  LOGICAL UNIT FAILURE                                  |
|  3E  02            A  TIMEOUT ON LOGICAL UNIT                               |
|  3F  00  DTLPWRSOMCA  TARGET OPERATING CONDITIONS HAVE CHANGED              |
|  3F  01  DTLPWRSOMCA  MICROCODE HAS BEEN CHANGED                            |
|  3F  02  DTLPWRSOMC   CHANGED OPERATING DEFINITION                          |
|  3F  03  DTLPWRSOMCA  INQUIRY DATA HAS CHANGED                              |
|  40  00  D            RAM FAILURE (SHOULD USE 40 NN)                        |
|  40  NN  DTLPWRSOMCA  DIAGNOSTIC FAILURE ON COMPONENT NN (80H-FFH)          |
|  41  00  D            DATA PATH FAILURE (SHOULD USE 40 NN)                  |
|  42  00  D            POWER-ON OR SELF-TEST FAILURE (SHOULD USE 40 NN)      |
|  43  00  DTLPWRSOMCA  MESSAGE ERROR                                         |
|  44  00  DTLPWRSOMCA  INTERNAL TARGET FAILURE                               |
|  45  00  DTLPWRSOMCA  SELECT OR RESELECT FAILURE                            |
|  46  00  DTLPWRSOMC   UNSUCCESSFUL SOFT RESET                               |
|  47  00  DTLPWRSOMCA  SCSI PARITY ERROR                                     |
|  48  00  DTLPWRSOMCA  INITIATOR DETECTED ERROR MESSAGE RECEIVED             |
|  49  00  DTLPWRSOMCA  INVALID MESSAGE ERROR                                 |
|  4A  00  DTLPWRSOMCA  COMMAND PHASE ERROR                                   |
|  4B  00  DTLPWRSOMCA  DATA PHASE ERROR                                      |
|  4C  00  DTLPWRSOMCA  LOGICAL UNIT FAILED SELF-CONFIGURATION                |
|  4D  NN  DTLPWRSOMCA  TAGGED OVERLAPPED COMMANDS (NN = QUEUE TAG)           |
|  4E  00  DTLPWRSOMCA  OVERLAPPED COMMANDS ATTEMPTED                         |
|  4F  00                                                                     |
+=============================================================================+

           Table B.1 - ASC and ASCQ assignments (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  50  00   T           WRITE APPEND ERROR                                    |
|  50  01   T           WRITE APPEND POSITION ERROR                           |
|  50  02   T           POSITION ERROR RELATED TO TIMING                      |
|  51  00   T     O     ERASE FAILURE                                         |
|  52  00   T           CARTRIDGE FAULT                                       |
|  53  00  DTL WRSOM    MEDIA LOAD OR EJECT FAILED                            |
|  53  01   T           UNLOAD TAPE FAILURE                                   |
|  53  02  DT  WR OM    MEDIUM REMOVAL PREVENTED                              |
|  54  00     P         SCSI TO HOST SYSTEM INTERFACE FAILURE                 |
|  55  00     P         SYSTEM RESOURCE FAILURE                               |
|  56  00                                                                     |
|  57  00       R       UNABLE TO RECOVER TABLE-OF-CONTENTS                   |
|  58  00         O     GENERATION DOES NOT EXIST                             |
|  59  00         O     UPDATED BLOCK READ                                    |
|  5A  00  DTLPWRSOM    OPERATOR REQUEST OR STATE CHANGE INPUT (UNSPECIFIED)  |
|  5A  01  DT  WR OM    OPERATOR MEDIUM REMOVAL REQUEST                       |
|  5A  02  DT  W  O     OPERATOR SELECTED WRITE PROTECT                       |
|  5A  03  DT  W  O     OPERATOR SELECTED WRITE PERMIT                        |
|  5B  00  DTLPWRSOM    LOG EXCEPTION                                         |
|  5B  01  DTLPWRSOM    THRESHOLD CONDITION MET                               |
|  5B  02  DTLPWRSOM    LOG COUNTER AT MAXIMUM                                |
|  5B  03  DTLPWRSOM    LOG LIST CODES EXHAUSTED                              |
|  5C  00  D      O     RPL STATUS CHANGE                                     |
|  5C  01  D      O     SPINDLES SYNCHRONIZED                                 |
|  5C  02  D      O     SPINDLES NOT SYNCHRONIZED                             |
|  5D  00  DTLPWRSOMCA  FAILURE PREDICTION THRESHOLD EXCEEDED                 |
|  5E  00  DTLPWRSO CA  LOW POWER CONDITION ACTIVE                            |
|  5E  01  DTLPWRSO CA  IDLE CONDITION ACTIVATED BY TIMER                     |
|  5E  02  DTLPWRSO CA  STANDBY CONDITION ACTIVATED BY TIMER                  |
|  5E  03  DTLPWRSO CA  IDLE CONDITION ACTIVATED BY COMMAND                   |
|  5E  04  DTLPWRSO CA  STANDBY CONDITION ACTIVATED BY COMMAND                |
|  5F  00                                                                     |
|  60  00        S      LAMP FAILURE                                          |
|  61  00        S      VIDEO ACQUISITION ERROR                               |
|  61  01        S      UNABLE TO ACQUIRE VIDEO                               |
|  61  02        S      OUT OF FOCUS                                          |
|  62  00        S      SCAN HEAD POSITIONING ERROR                           |
|  63  00       R       END OF USER AREA ENCOUNTERED ON THIS TRACK            |
|  64  00       R       ILLEGAL MODE FOR THIS TRACK                           |
|  65  00  DTLPWRSOMCA  VOLTAGE FAULT                                         |
|  66  00        S      AUTOMATIC DOCUMENT FEEDER COVER UP                    |
|  66  01        S      AUTOMATIC DOCUMENT FEEDER LIFT UP                     |
|  66  02        S      DOCUMENT JAM IN AUTOMATIC DOCUMENT FEEDER             |
|  66  03        S      DOCUMENT MISS FEED AUTOMATIC IN DOCUMENT FEEDER       |
+=============================================================================+

           Table B.1 - ASC and ASCQ assignments (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                                     |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)                                |
|          . L - PRINTER DEVICE (SSC)                                         |
|          .  P - PROCESSOR DEVICE (SPC)                                      |
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                      |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
| ASC ASCQ DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|  67  00            A  CONFIGURATION FAILURE                                 |
|  67  01            A  CONFIGURATION OF INCAPABLE LOGICAL UNITS FAILED       |
|  67  02            A  ADD LOGICAL UNIT FAILED                               |
|  67  03            A  MODIFICATION OF LOGICAL UNIT FAILED                   |
|  67  04            A  EXCHANGE OF LOGICAL UNIT FAILED                       |
|  67  05            A  REMOVE OF LOGICAL UNIT FAILED                         |
|  67  06            A  ATTACHMENT OF LOGICAL UNIT FAILED                     |
|  67  07            A  CREATION OF LOGICAL UNIT FAILED                       |
|  68  00            A  LOGICAL UNIT NOT CONFIGURED                           |
|  69  00            A  DATA LOSS ON LOGICAL UNIT                             |
|  69  01            A  MULTIPLE LOGICAL UNIT FAILURES                        |
|  69  02            A  PARITY/DATA MISMATCH                                  |
|  6A  00            A  INFORMATIONAL, REFER TO LOG                           |
|  6B  00            A  STATE CHANGE HAS OCCURRED                             |
|  6B  01            A  REDUNDANCY LEVEL GOT BETTER                           |
|  6B  02            A  REDUNDANCY LEVEL GOT WORSE                            |
|  6C  00            A  REBUILD FAILURE OCCURED                               |
|  6D  00            A  RECALCULATE FAILURE OCCURED                           |
|  6E  00            A  COMMAND TO LOGICAL UNIT FAILED                        |
|  6F  00                                                                     |
|  70  NN   T           DECOMPRESSION EXCEPTION SHORT ALGORITHM ID OF NN      |
|  71  00   T           DECOMPRESSION EXCEPTION LONG ALGORITHM ID             |
|  72  00                                                                     |
|  73  00                                                                     |
|  74  00                                                                     |
|  75  00                                                                     |
|  76  00                                                                     |
|  77  00                                                                     |
|  78  00                                                                     |
|  79  00                                                                     |
|  7A  00                                                                     |
|  7B  00                                                                     |
|  7C  00                                                                     |
|  7D  00                                                                     |
|  7E  00                                                                     |
|  7F  00                                                                     |
|                                                                             |
| 80   xx      \                                                              |
| THROUGH       >       Vendor-specific.                                      |
| FF   xx      /                                                              |
|                                                                             |
| xx   80      \                                                              |
| THROUGH       >       Vendor-specific QUALIFICATION OF STANDARD ASC.        |
| xx   FF      /                                                              |
|                       ALL CODES NOT SHOWN ARE RESERVED.                     |
+=============================================================================+

Table B.2 is a numerical order listing of the command operation codes.

                  Table B.2 - SCSI-3 Operation Codes
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                  Device column key  |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)             M = Mandatory      |
|          . L - PRINTER DEVICE (SSC)                      O = Optional       |
|          .  P - PROCESSOR DEVICE (SPC)                   V = Vendor-specific|
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)   R = Reserved       |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
|       OP DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|       00 MMMMMMMMMMM TEST UNIT READY                                        |
|       01  M          REWIND                                                 |
|       01 O V OO OO   REZERO UNIT                                            |
|       02 VVVVVV  V                                                          |
|       03 MMMMMMMMMMM REQUEST SENSE                                          |
|       04 M      O    FORMAT UNIT                                            |
|       04  O          FORMAT MEDIUM                                          |
|       04   O         FORMAT                                                 |
|       05 VMVVVV  V   READ BLOCK LIMITS                                      |
|       06 VVVVVV  V                                                          |
|       07 OVV O  OV   REASSIGN BLOCKS                                        |
|       07         O   INITIALIZE ELEMENT STATUS                              |
|       08 OMV OO OV   READ(06)                                               |
|       08    O        RECEIVE                                                |
|       08          M  GET MESSAGE(06)                                        |
|       09 VVVVVV  V                                                          |
|       0A OM  O  OV   WRITE(06)                                              |
|       0A    M        SEND(06)                                               |
|       0A          M  SEND MESSAGE(06)                                       |
|       0A   M         PRINT                                                  |
|       0B O   OO OV   SEEK(06)                                               |
|       0B   O         SLEW AND PRINT                                         |
|       0C VVVVVV  V                                                          |
|       0D VVVVVV  V                                                          |
|       0E VVVVVV  V                                                          |
|       0F VOVVVV  V   READ REVERSE                                           |
|       10 VM VVV      WRITE FILEMARKS                                        |
|       10   O O       SYNCHRONIZE BUFFER                                     |
|       11 VMVVVV      SPACE                                                  |
|       11 O           PORT STATUS                                            |
|       12 MMMMMMMMMMM INQUIRY                                                |
|       13 VOVVVV      VERIFY(06)                                             |
|       14 VOOVVV      RECOVER BUFFERED DATA                                  |
|       15 OMO OOOOOOO MODE SELECT(06)                                        |
|       16 MMMOMMMM    RESERVE(06)                                            |
|       16         M   RESERVE ELEMENT(06)                                    |
|       17 MMMOMMMM    RELEASE(06)                                            |
|       17         M   RELEASE ELEMENT(06)                                    |
|       18 OOOOOOOO    COPY                                                   |
|       19 VMVVVV      ERASE                                                  |
|       1A OMO OOOOOOO MODE SENSE(06)                                         |
+=============================================================================+

            Table B.2 - SCSI-3 Operation Codes (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                  Device column key  |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)             M = Mandatory      |
|          . L - PRINTER DEVICE (SSC)                      O = Optional       |
|          .  P - PROCESSOR DEVICE (SPC)                   V = Vendor-specific|
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)   R = Reserved       |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
|       OP DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|       1B O   OO O    STOP START UNIT                                        |
|       1B  O          LOAD UNLOAD                                            |
|       1B       O     SCAN                                                   |
|       1B   O         STOP PRINT                                             |
|       1C OOOOOOOOOO  RECEIVE DIAGNOSTIC RESULTS                             |
|       1D MMMMMMMMMMM SEND DIAGNOSTIC                                        |
|       1E OO  OO OO   PREVENT ALLOW MEDIUM REMOVAL                           |
|       1F                                                                    |
|       20 V   VV V                                                           |
|       21 V   VV V                                                           |
|       22 V   VV V                                                           |
|       23 V   VV V                                                           |
|       24 V   VVM     SET WINDOW                                             |
|       25 M   M  M    READ CAPACITY                                          |
|       25      M      READ CD-ROM CAPACITY                                   |
|       25       O     GET WINDOW                                             |
|       26 V   VV                                                             |
|       27 V   VV                                                             |
|       28 M   MMMM    READ(10)                                               |
|       28          O  GET MESSAGE(10)                                        |
|       29 V   VV O    READ GENERATION                                        |
|       2A M   M  M    WRITE(10)                                              |
|       2A       O     SEND(10)                                               |
|       2A          O  SEND MESSAGE(10)                                       |
|       2B O   OO O    SEEK(10)                                               |
|       2B  O          LOCATE                                                 |
|       2B         O   POSITION TO ELEMENT                                    |
|       2C V      O    ERASE(10)                                              |
|       2D V   O  O    READ UPDATED BLOCK                                     |
|       2E O   O  O    WRITE AND VERIFY(10)                                   |
|       2F O   OO O    VERIFY(10)                                             |
|       30 O   OO O    SEARCH DATA HIGH(10)                                   |
|       31 O   OO O    SEARCH DATA EQUAL(10)                                  |
|       31       O     OBJECT POSITION                                        |
|       32 O   OO O    SEARCH DATA LOW(10)                                    |
|       33 O   OO O    SET LIMITS(10)                                         |
|       34 O   OO O    PRE-FETCH                                              |
|       34  O          READ POSITION                                          |
|       34       O     GET DATA BUFFER STATUS                                 |
|       35 O   OO O    SYNCHRONIZE CACHE                                      |
|       36 O   OO O    LOCK UNLOCK CACHE                                      |
|       37 O      O    READ DEFECT DATA(10)                                   |
|       38     O  O    MEDIUM SCAN                                            |
|       39 OOOOOOOO    COMPARE                                                |
|       3A OOOOOOOO    COPY AND VERIFY                                        |
+=============================================================================+

            Table B.2 - SCSI-3 Operation Codes (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                  Device column key  |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)             M = Mandatory      |
|          . L - PRINTER DEVICE (SSC)                      O = Optional       |
|          .  P - PROCESSOR DEVICE (SPC)                   V = Vendor-specific|
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)   R = Reserved       |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
|       OP DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|       3B OOOOOOOOOO  WRITE BUFFER                                           |
|       3C OOOOOOOOOO  READ BUFFER                                            |
|       3D     O  O    UPDATE BLOCK                                           |
|       3E O   OO O    READ LONG                                              |
|       3F O   O  O    WRITE LONG                                             |
|       40 OOOOOOOOOO  CHANGE DEFINITION                                      |
|       41 O           WRITE SAME                                             |
|       42      O      READ SUB-CHANNEL                                       |
|       43      O      READ TOC                                               |
|       44      O      READ HEADER                                            |
|       45      O      PLAY AUDIO(10)                                         |
|       46                                                                    |
|       47      O      PLAY AUDIO MSF                                         |
|       48      O      PLAY AUDIO TRACK INDEX                                 |
|       49      O      PLAY TRACK RELATIVE(10)                                |
|       4A                                                                    |
|       4B      O      PAUSE RESUME                                           |
|       4C OOOOOOOOOOO LOG SELECT                                             |
|       4D OOOOOOOOOOO LOG SENSE                                              |
|       4E      O      STOP PLAY/SCAN                                         |
|       4F                                                                    |
|       50 D           XDWRITE(10) {proposed}                                 |
|       51 D           XPWRITE(10) {proposed}                                 |
|       52 D           XDREAD(10) {proposed}                                  |
|       53                                                                    |
|       54                                                                    |
|       55 OOO OOOOOOO MODE SELECT(10)                                        |
|       56 MMMOMMMM    RESERVE(10)                                            |
|       56         M   RESERVE ELEMENT(10)                                    |
|       57 MMMOMMMM    RELEASE(10)                                            |
|       57         M   RELEASE ELEMENT(10)                                    |
|       58                                                                    |
|       59                                                                    |
|       5A OOO OOOOOOO MODE SENSE(10)                                         |
|       5B                                                                    |
|       5C                                                                    |
|       5D                                                                    |
|       5E                                                                    |
|       5F                                                                    |
|       80 D           XDWRITE(16) {proposed}                                 |
|       81 D           REBUILD(16) {proposed}                                 |
|       82 D           REGENERATE(16) {proposed}                              |
|       83                                                                    |
|       84                                                                    |
|       85                                                                    |
+=============================================================================+

            Table B.2 - SCSI-3 Operation Codes (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                  Device column key  |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)             M = Mandatory      |
|          . L - PRINTER DEVICE (SSC)                      O = Optional       |
|          .  P - PROCESSOR DEVICE (SPC)                   V = Vendor-specific|
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)   R = Reserved       |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
|       OP DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|       86                                                                    |
|       87                                                                    |
|       88                                                                    |
|       89                                                                    |
|       8A                                                                    |
|       8B                                                                    |
|       8C                                                                    |
|       8D                                                                    |
|       8E                                                                    |
|       8F                                                                    |
|       90                                                                    |
|       91                                                                    |
|       92                                                                    |
|       93                                                                    |
|       94                                                                    |
|       95                                                                    |
|       96                                                                    |
|       97                                                                    |
|       98                                                                    |
|       99                                                                    |
|       9A                                                                    |
|       9B                                                                    |
|       9C                                                                    |
|       9D                                                                    |
|       9E                                                                    |
|       9F                                                                    |
|       A0                                                                    |
|       A1                                                                    |
|       A2                                                                    |
|       A3           M MAINTENANCE (IN)                                       |
|       A4           O MAINTENANCE (OUT)                                      |
|       A5  O      M   MOVE MEDIUM                                            |
|       A5      O      PLAY AUDIO(12)                                         |
|       A6         O   EXCHANGE MEDIUM                                        |
|       A7 OO  OO OO   MOVE MEDIUM (attached)                                 |
|       A8     OO O    READ(12)                                               |
|       A8          O  GET MESSAGE(12)                                        |
|       A9      O      PLAY TRACK RELATIVE(12)                                |
|       AA     O  O    WRITE(12)                                              |
|       AA          O  SEND MESSAGE(12)                                       |
|       AB                                                                    |
|       AC        O    ERASE(12)                                              |
|       AD                                                                    |
|       AE     O  O    WRITE AND VERIFY(12)                                   |
|       AF     OO O    VERIFY(12)                                             |
+=============================================================================+

            Table B.2 - SCSI-3 Operation Codes (continued)
+=============================================================================+
|          D - DIRECT ACCESS DEVICE (SBC)                  Device column key  |
|          .T - SEQUENTIAL ACCESS DEVICE (SSC)             M = Mandatory      |
|          . L - PRINTER DEVICE (SSC)                      O = Optional       |
|          .  P - PROCESSOR DEVICE (SPC)                   V = Vendor-specific|
|          .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)   R = Reserved       |
|          .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                           |
|          .  .  S - SCANNER DEVICE (SGC)                                     |
|          .  .  .O - OPTICAL MEMORY DEVICE (SBC)                             |
|          .  .  . M - MEDIA CHANGER DEVICE (SMC)                             |
|          .  .  .  C - COMMUNICATION DEVICE (SSC)                            |
|          .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                           |
|          .  .  .  .                                                         |
|       OP DTLPWRSOMCA Description                                            |
|---------+-----------+-------------------------------------------------------|
|       B0     OO O    SEARCH DATA HIGH(12)                                   |
|       B1     OO O    SEARCH DATA EQUAL(12)                                  |
|       B2     OO O    SEARCH DATA LOW(12)                                    |
|       B3     OO O    SET LIMITS(12)                                         |
|       B4 OO  OO OO   READ ELEMENT STATUS (attached)                         |
|       B5         O   REQUEST VOLUME ELEMENT ADDRESS                         |
|       B6         O   SEND VOLUME TAG                                        |
|       B7        O    READ DEFECT DATA(12)                                   |
|       B8      O      SET CD-ROM SPEED                                       |
|       B8  O      M   READ ELEMENT STATUS                                    |
|       B9      O      READ CD MSF                                            |
|       BA      O      AUDIO SCAN                                             |
|       BA           M REDUNDANCY GROUP (IN)                                  |
|       BB           O REDUNDANCY GROUP (OUT)                                 |
|       BC      O      SEND CD-ROM XA ADPCM DATA                              |
|       BC           M SPARE (IN)                                             |
|       BD      O      PLAY CD-ROM XA(12)                                     |
|       BD           O SPARE (OUT)                                            |
|       BE      O      READ CD                                                |
|       BE           M VOLUME SET (IN)                                        |
|       BF           O VOLUME SET (OUT)                                       |
+=============================================================================+


                   Table B.3 - SCSI-3 Log Page Codes
+=============================================================================+
|         D - DIRECT ACCESS DEVICE (SBC)                                      |
|         .T - SEQUENTIAL ACCESS DEVICE (SSC)                                 |
|         . L - PRINTER DEVICE (SSC)                                          |
|         .  P - PROCESSOR DEVICE (SPC)                                       |
|         .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                       |
|         .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                            |
|         .  .  S - SCANNER DEVICE (SGC)                                      |
|         .  .  .O - OPTICAL MEMORY DEVICE (SBC)                              |
|         .  .  . M - MEDIA CHANGER DEVICE (SMC)                              |
|         .  .  .  C - COMMUNICATION DEVICE (SSC)                             |
|    Log  .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                            |
|    Page .  .  .  .                                                          |
|    Code DTLPWRSOMCA Description                                             |
|--------+-----------+--------------------------------------------------------|
|     00h DTLPWRSOMCA Supported log pages                                     |
|     01h DTLPWRSO CA Buffer over-run/under-run page                          |
|     02h DT  W  O C  Error counter page (write) page                         |
|     03h DT  WRSO C  Error counter page (read) page                          |
|     04h  T       C  Error counter page (read reverse) page                  |
|     05h DT  W  O C  Error counter page (verify) page                        |
|     06h DTLPWRSOMCA Non-medium error page                                   |
|     07h DTLPWRSOMCA Last n error events page                                |
|     08h DT  W  O    Format status page                                      |
|     09h        O    Reserved to the MS59 Standard (contact AIIM C21 comm.)  |
|     0Ah        O    Reserved to the MS59 Standard (contact AIIM C21 comm.)  |
|                                                                             |
|     30h      \                                                              |
| THROUGH       >       Vendor-specific.                                      |
|     3Eh      /                                                              |
|                                                                             |
|                       ALL CODES NOT SHOWN ARE RESERVED.                     |
+=============================================================================+

                  Table B.4 - SCSI-3 Mode Page Codes
+=============================================================================+
|         D - DIRECT ACCESS DEVICE (SBC)                                      |
|         .T - SEQUENTIAL ACCESS DEVICE (SSC)                                 |
|         . L - PRINTER DEVICE (SSC)                                          |
|         .  P - PROCESSOR DEVICE (SPC)                                       |
|         .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)                       |
|         .  . R - READ ONLY (CD-ROM) DEVICE (MMC)                            |
|         .  .  S - SCANNER DEVICE (SGC)                                      |
|         .  .  .O - OPTICAL MEMORY DEVICE (SBC)                              |
|         .  .  . M - MEDIA CHANGER DEVICE (SMC)                              |
|         .  .  .  C - COMMUNICATION DEVICE (SSC)                             |
|    Mode .  .  .  .A - STORAGE ARRAY DEVICE (SCC)                            |
|    Page .  .  .  .                                                          |
|    Code DTLPWRSOMCA Description                                             |
|--------+-----------+--------------------------------------------------------|
|     01h DT  WR O    Read-write error recovery mode page                     |
|     02h DTL WRSO CA Disconnect-reconnect page                               |
|     03h D           Format device mode page                                 |
|     03h   L         Parallel printer interface mode page                    |
|     03h       S     Measurements units mode page                            |
|     04h D           Rigid disk geometry mode page                           |
|     04h   L         Serial printer interface mode page                      |
|     05h D           Flexible disk mode page                                 |
|     05h   L         Printer options mode page                               |
|     06h     W  O    Optical memory mode page                                |
|     07h D   W  O    Verify error recover mode page                          |
|     08h D   WR O    Caching mode page                                       |
|     09h DTL WRSO CA Peripheral device page                                  |
|     0Ah DTL WRSO CA Control mode page                                       |
|     0Bh D   WR O    Medium types supported mode page                        |
|     0Ch D           Notch and partition mode page                           |
|     0Dh D           Power Condition page                                    |
|     0Dh      R      CD-ROM mode page                                        |
|     0Eh      R      CD-ROM audio control mode page                          |
|     0Fh                                                                     |
|     10h D   WR O  A XOR Control mode page {proposed}                        |
|     10h  T          Device configuration mode page                          |
|     11h  T          Medium partition mode page (1)                          |
|     12h  T          Medium partition mode page (2)                          |
|     13h  T          Medium partition mode page (3)                          |
|     14h  T          Medium partition mode page (4)                          |
|     15h                                                                     |
|     16h                                                                     |
|     17h                                                                     |
|     18h                                                                     |
|     19h                                                                     |
|     1Ah                                                                     |
|     1Bh           A LUN mapping mode page                                   |
|     1Ch DTL WRSOMCA Informational exceptions control mode page              |
|     1Dh         M   Transport geometry parameters mode page                 |
|     1Eh         M   Element address assignments mode page                   |
|     1Fh         M   Device capabilities mode page                           |
|                                                                             |
|     3Fh DTL WRSOMCA Return all pages (MODE SENSE only)                      |
|                                                                             |
|     00h               Vendor-specific (does not require page format)        |
|                                                                             |
|     20h      \                                                              |
| THROUGH       >       Vendor-specific (page format required)                |
|     3Eh      /                                                              |
+=============================================================================+
^L
Annex C
(informative)

Vendor identification


This annex contains the list of SCSI-3 vendor identifications (see table
C.1) as of the date of this document.  The purpose of this list is to
help avoid redundant usage of vendor identifications.  Technical
Committee X3T10 of Accredited Standards Committee X3 maintains an
informal list of vendor identifications currently in use.  Please
contact the chairman of X3T10 prior to using a new vendor identification
to avoid conflicts.

                Table C.1 - Vendor identification list
+===========-=================================================================+
|     ID    |                        Organization                             |
|-----------+-----------------------------------------------------------------|
| 3M        | 3M Company                                                      |
| ACL       | Automated Cartridge Librarys, Inc.                              |
| ADAPTEC   | Adaptec                                                         |
| ADSI      | Adaptive Data Systems, Inc. (a Western Digital subsidiary)      |
| ADTX      | ADTX Co., Ltd.                                                  |
| AERONICS  | Aeronics, Inc.                                                  |
| AGFA      | AGFA                                                            |
| AMCODYNE  | Amcodyne                                                        |
| ANAMATIC  | Anamartic Limited (England)                                     |
| ANCOT     | ANCOT Corp.                                                     |
| ANRITSU   | Anritsu Corporation                                             |
| APPLE     | Apple Computer, Inc.                                            |
| ARCHIVE   | Archive                                                         |
| ASACA     | ASACA Corp.                                                     |
| ASPEN     | Aspen Peripherals                                               |
| AST       | AST Research                                                    |
| ASTK      | Alcatel STK A/S                                                 |
| AT&T      | AT&T                                                            |
| ATARI     | Atari Corporation                                               |
| ATG CYG   | ATG Cygnet Inc.                                                 |
| ATTO      | ATTO Technology Inc.                                            |
| ATX       | Alphatronix                                                     |
| AVR       | Advanced Vision Research                                        |
| BALLARD   | Ballard Synergy Corp.                                           |
| BERGSWD   | Berg Software Design                                            |
| BEZIER    | Bezier Systems, Inc.                                            |
| BULL      | Bull Peripherals Corp.                                          |
| BUSLOGIC  | BusLogic Inc.                                                   |
| BoxHill   | Box Hill Systems Corporation                                    |
| CALIPER   | Caliper (California Peripheral Corp.)                           |
| CAST      | Advanced Storage Tech                                           |
| CDC       | Control Data or MPI                                             |
| CDP       | Columbia Data Products                                          |
| CHEROKEE  | Cherokee Data Systems                                           |
| CHINON    | Chinon                                                          |
| CIE&YED   | YE Data, C.Itoh Electric Corp.                                  |
| CIPHER    | Cipher Data Products                                            |
| CIRRUSL   | Cirrus Logic Inc.                                               |
| CMD       | CMD Technology Inc.                                             |
| CNGR SFW  | Congruent Software, Inc.                                        |
| COGITO    | Cogito                                                          |
| COMPORT   | Comport Corp.                                                   |
+=============================================================================+

          Table C.1 - Vendor identification list (continued)
+===========-=================================================================+
|     ID    |                      Organization                               |
|-----------+-----------------------------------------------------------------|
| COMPSIG   | Computer Signal Corporation                                     |
| CONNER    | Conner Peripherals                                              |
| CORE      | Core International, Inc.                                        |
| CPU TECH  | CPU Technology, Inc.                                            |
| CREO      | Creo Products Inc.                                              |
| CROSFLD   | Crosfield Electronics                                           |
| CSM, INC  | Computer SM, Inc.                                               |
| CalComp   | CalComp, A Lockheed Company                                     |
| Ciprico   | Ciprico, Inc.                                                   |
| DATABOOK  | Databook, Inc.                                                  |
| DATACOPY  | Datacopy Corp.                                                  |
| DATAPT    | Datapoint Corp.                                                 |
| DEC       | Digital Equipment (Obsolete: New products use "Digital")        |
| DELPHI    | Delphi Data Div. of Sparks Industries, Inc.                     |
| DENON     | Denon/Nippon Columbia                                           |
| DEST      | DEST Corp.                                                      |
| DGC       | Data General Corp.                                              |
| DIGIDATA  | Digi-Data Corporation                                           |
| DILOG     | Distributed Logic Corp.                                         |
| DISC      | Document Imaging Systems Corp.                                  |
| DPT       | Distributed Processing Technology                               |
| DSM       | Deterner Steuerungs- und Maschinenbau GmbH & Co.                |
| DTC QUME  | Data Technology Qume                                            |
| DXIMAGIN  | DX Imaging                                                      |
| Digital   | Digital Equipment Corporation                                   |
| EMULEX    | Emulex                                                          |
| EPSON     | Epson                                                           |
| EXABYTE   | Exabyte Corp.                                                   |
| FILENET   | FileNet Corp.                                                   |
| FUJI      | Fuji Electric Co., Ltd. (Japan)                                 |
| FUJITSU   | Fujitsu                                                         |
| FUTURED   | Future Domain Corp.                                             |
| GIGATAPE  | GIGATAPE GmbH                                                   |
| GIGATRND  | GigaTrend Incorporated                                          |
| GOULD     | Gould                                                           |
| Gen_Dyn   | General Dynamics                                                |
| Goidelic  | Goidelic Precision, Inc.                                        |
| HITACHI   | Hitachi America Ltd or Nissei Sangyo America Ltd                |
| HONEYWEL  | Honeywell Inc.                                                  |
| HP        | Hewlett Packard                                                 |
| IBM       | International Business Machines                                 |
| ICL       | ICL                                                             |
| IDE       | International Data Engineering, Inc.                            |
| IGR       | Intergraph Corp.                                                |
| IMPLTD    | Integrated Micro Products Ltd.                                  |
| IMPRIMIS  | Imprimis Technology Inc.                                        |
| INSITE    | Insite Peripherals                                              |
| IOC       | I/O Concepts, Inc.                                              |
| IOMEGA    | Iomega                                                          |
| ISi       | Information Storage inc.                                        |
| ITC       | International Tapetronics Corporation                           |
| JPC Inc.  | JPC Inc.                                                        |
| JVC       | JVC Information Products Co.                                    |
| KENNEDY   | Kennedy Company                                                 |
| KODAK     | Eastman Kodak                                                   |
| KONAN     | Konan                                                           |
| KONICA    | Konica Japan                                                    |
+=============================================================================+

          Table C.1 - Vendor identification list (continued)
+===========-=================================================================+
|     ID    |                      Organization                               |
|-----------+-----------------------------------------------------------------|
| LAPINE    | Lapine Technology                                               |
| LASERDRV  | LaserDrive Limited                                              |
| LASERGR   | Lasergraphics, Inc.                                             |
| LION      | Lion Optics Corporation                                         |
| LMS       | Laser Magnetic Storage International Company                    |
| MATSHITA  | Matsushita                                                      |
| MAXTOR    | Maxtor Corp.                                                    |
| MDI       | Micro Design International, Inc.                                |
| MEADE     | Meade Instruments Corporation                                   |
| MELA      | Mitsubishi Electronics America                                  |
| MELCO     | Mitsubishi Electric (Japan)                                     |
| MEMREL    | Memrel Corporation                                              |
| MEMTECH   | MemTech Technology                                              |
| METRUM    | Metrum, Inc.                                                    |
| MICROBTX  | Microbotics Inc.                                                |
| MICROP    | Micropolis                                                      |
| MICROTEK  | Microtek Storage Corp                                           |
| MINSCRIB  | Miniscribe                                                      |
| MITSUMI   | Mitsumi Electric Co., Ltd.                                      |
| MOTOROLA  | Motorola                                                        |
| MST       | Morning Star Technologies, Inc.                                 |
| MaxOptix  | Maxoptix Corp.                                                  |
| Minitech  | Minitech (UK) Limited                                           |
| NAI       | North Atlantic Industries                                       |
| NCL       | NCL America                                                     |
| NCR       | NCR Corporation                                                 |
| NEC       | NEC                                                             |
| NISCA     | NISCA Inc.                                                      |
| NKK       | NKK Corp.                                                       |
| NRC       | Nakamichi Corporation                                           |
| NT        | Northern Telecom                                                |
| NatInst   | National Instruments                                            |
| NatSemi   | National Semiconductor Corp.                                    |
| OCE       | Oce Graphics                                                    |
| OKI       | OKI Electric Industry Co.,Ltd (Japan)                           |
| OMI       | Optical Media International                                     |
| OMNIS     | OMNIS Company (FRANCE)                                          |
| OPTIMEM   | Cipher/Optimem                                                  |
| OPTOTECH  | Optotech                                                        |
| ORCA      | Orca Technology                                                 |
| OSI       | Optical Storage International                                   |
| OTL       | OTL Engineering                                                 |
| PASCOsci  | Pasco Scientific                                                |
| PERTEC    | Pertec Peripherals Corporation                                  |
| PFTI      | Performance Technology Inc.                                     |
| PIONEER   | Pioneer Electronic Corp.                                        |
| PRAIRIE   | PrairieTek                                                      |
| PREPRESS  | PrePRESS Solutions                                              |
| PRESOFT   | PreSoft Architects                                              |
| PRESTON   | Preston Scientific                                              |
| PRIAM     | Priam                                                           |
| PRIMAGFX  | Primagraphics Ltd                                               |
| PTI       | Peripheral Technology Inc.                                      |
| QUALSTAR  | Qualstar                                                        |
| QUANTEL   | Quantel Ltd.                                                    |
| QUANTUM   | Quantum Corp.                                                   |
| R-BYTE    | R-Byte, Inc.                                                    |
| RACALREC  | Racal Recorders                                                 |
+=============================================================================+

          Table C.1 - Vendor identification list (continued)
+===========-=================================================================+
|     ID    |                      Organization                               |
|-----------+-----------------------------------------------------------------|
| RADSTONE  | Radstone Technology                                             |
| RGI       | Raster Graphics, Inc.                                           |
| RICOH     | Ricoh                                                           |
| RODIME    | Rodime                                                          |
| RTI       | Reference Technology                                            |
| SAMSUNG   | Samsung Electronics Co., Ltd.                                   |
| SANKYO    | Sankyo Seiki                                                    |
| SANYO     | SANYO Electric Co., Ltd.                                        |
| SCREEN    | Dainippon Screen Mfg. Co., Ltd.                                 |
| SEAGATE   | Seagate                                                         |
| SEQUOIA   | Sequoia Advanced Technologies, Inc.                             |
| SIEMENS   | Siemens                                                         |
| SII       | Seiko Instruments Inc.                                          |
| SMS       | Scientific Micro Systems/OMTI                                   |
| SNYSIDE   | Sunnyside Computing Inc.                                        |
| SONIC     | Sonic Solutions                                                 |
| SONY      | Sony Corporation Japan                                          |
| SPECTRA   | Spectra Logic, a Division of Western Automation Labs, Inc.      |
| SPERRY    | Sperry (now Unisys Corp.)                                       |
| STK       | Storage Technology Corporation                                  |
| SUMITOMO  | Sumitomo Electric Industries, Ltd.                              |
| SUN       | Sun Microsystems, Inc.                                          |
| SYMBIOS   | Symbios Logic Inc.                                              |
| SYSGEN    | Sysgen                                                          |
| Shinko    | Shinko Electric Co., Ltd.                                       |
| SyQuest   | SyQuest Technology, Inc.                                        |
| T-MITTON  | Transmitton England                                             |
| TALARIS   | Talaris Systems, Inc.                                           |
| TALLGRAS  | Tallgrass Technologies                                          |
| TANDBERG  | Tandberg Data A/S                                               |
| TANDON    | Tandon                                                          |
| TEAC      | TEAC Japan                                                      |
| TECOLOTE  | Tecolote Designs                                                |
| TEGRA     | Tegra Varityper                                                 |
| TENTIME   | Laura Technologies, Inc.                                        |
| TI-DSG    | Texas Instruments                                               |
| TOSHIBA   | Toshiba Japan                                                   |
| Tek       | Tektronix                                                       |
| ULTRA     | UltraStor Corporation                                           |
| UNISYS    | Unisys                                                          |
| USDC      | US Design Corp.                                                 |
| VERBATIM  | Verbatim Corporation                                            |
| VEXCEL    | VEXCEL IMAGING GmbH                                             |
| VRC       | Vermont Research Corp.                                          |
| WANGTEK   | Wangtek                                                         |
| WDIGTL    | Western Digital                                                 |
| WEARNES   | Wearnes Technology Corporation                                  |
| WangDAT   | WangDAT                                                         |
| XEBEC     | Xebec Corporation                                               |
+=============================================================================+
^Z