Document Number: X3T9.2/88-158R1 Date: 29 January 1989 To: X3T9.2 SCSI Committee Members From: Steve Goldman Distributed Processing Technology (DPT) Paul R. Nitza OTL Engineering Subject: Terminate I/O Process Proposal Revision 1 Ref: X3T9.2/88-158R0 Terminate Immediate Proposal Revision 0 X3T9.2/89-007R0 Terminate Immediate with Auto Sense Proposal =============================================================================== 1.0 Overview of the Problem In some computer systems the operating system software uses main memory to cache read/write data when performing block oriented operations on I/O devices. If fact, some studies have shown that this method of caching, at the operating system level, provides better performance than when the data is cached in the I/O device. However, when caching in main memory the host cpu periodically needs to flush (especially if the cache does not perform write through operations) or preload the cache. This operation is easily performed under SCSI using read/write commands. However, the flush or preload operation can be quite lengthy and waiting for the SCSI read/write command to complete could degrade system performance if the OS needs to do a normal I/O operation while the cache operation is in progress. Using the Abort message would stop the read/write, but you loose any data that was transferred during the command. There is no defined mechanism within SCSI for the Initiator to stop an operation and determine how much of the data has been processed before the device actually stopped. 2.0 Terminate I/O Process This document is an updated revision of the original Terminate Immediate proposal combined with some of the features from the Terminate Immediate with Auto Sense proposal. The Report Transfer Length message in the original Terminate Immediate proposal has been removed and the Command Terminated status byte from the Terminate Immediate with Auto Sense proposal has been added. The name has also been changed from Terminate Immediate to Terminate I/O Process, which more accurately describes the function. The Terminate I/O Process proposal solves the above problem by defining a new one byte message, Terminate I/O Process, that stops the current I/O process and sets up the sense information so the initiator can determine the number of bytes or blocks that were processed. The initiator sends this message to the target and waits for the new Command Terminated status byte. After the status has been received and the target has released the bus the initiator can issue a Request Sense command to determine the number of bytes/blocks successfully processed by the target. 3.0 Changes Required for Terminate I/O Process The following pages detail the changes required to the SCSI-2 draft specification to add the Terminate I/O Process function. The changes have been edited into a copy of Rev 6A of the draft spec and each page that changed is attached to this document. Additions to the document are marked with an underline and a change bar in the margin while deletions are marked with overstriked text. This is a complete proposal and shows exactly how the spec would change to add this feature. The following is a list of the changes to the document: Page 5-19: Added the Terminate I/O Process message to the Message Code Table Page 5-25: Added the Command Terminated Status condition to the Initiate Recovery Message. Page 5-32: Added a new section for the Terminate I/O Process message. Page 6-9: Added the Command Terminated status to the Status Byte Code Bit Values table. Page 6-9: Added the Command Terminated Status condition to the Intermediate status section. Page 6-10: Added a new paragraph for the Command Terminated status. Page 6-17: Updated two paragraphs in the Contingent Allegiance section (6.6) to include the Command Terminated status condition. Page 6-17: Updated two paragraphs in the Extended Contingent Allegiance section (6.6) to include the Command Terminated status condition. Page 7-19: Added a new bit to the Standard Inquiry Data Format table which indicates if the target supports the Terminate I/O Process message. Page 7-22: Added a new paragraph for the "TrmImm" Inquiry data bit field. Page 7-44: Added the Command Terminated status to the list a conditions that have valid sense data. Page 7-50: Updated the paragraph which describes error code 70 to include the Command Terminated status. Page 7-53: Updated the No Sense sense key to include the Command Terminated status. Table 5-7: Message Codes ============================================================================== Code Support Message Name Direction Negate ATN Init Targ Before last ACK ------------------------------------------------------------------------------ 06h O M ABORT Out Yes 0Dh O O ABORT TAG Out Yes 0Ch O M BUS DEVICE RESET Out Yes 0Eh O O CLEAR QUEUE Out Yes 00h M M COMMAND COMPLETE In --- 04h O O DISCONNECT In --- 04h O O DISCONNECT Out Yes 80h+ M O IDENTIFY In --- 80h+ M M IDENTIFY Out No 23h O O IGNORE WIDE RESIDUE (Two Bytes) In --- 0Fh O O INITIATE RECOVERY In Out Yes 05h M M INITIATOR DETECTED ERROR Out Yes 0Ah O O LINKED COMMAND COMPLETE In --- 0Bh O O LINKED COMMAND COMPLETE (WITH FLAG) In --- 09h M M MESSAGE PARITY ERROR Out Yes 07h M M MESSAGE REJECT In Out Yes *** O O MODIFY DATA POINTER In --- 08h M M NO OPERATION Out Yes Queue Tag Messages (Two Bytes) 21h O O HEAD OF QUEUE TAG Out No 20h O O MUNDANE QUEUE TAG In Out No 22h O O ORDERED QUEUE TAG Out No 10h O O RELEASE RECOVERY Out Yes 03h O O RESTORE POINTERS In --- 02h O O SAVE DATA POINTER In --- *** O O SYNCHRONOUS DATA TRANSFER REQUEST In Out Yes 11h O O TERMINATE I/O PROCESS Out No *** O O WIDE DATA TRANSFER REQUEST In Out Yes 1112h - 1Fh Reserved 24h - 2FH Reserved for two-byte messages 30h - 7Fh Reserved ============================================================================== Key: M = Mandatory support, O = Optional support. In = Target to initiator, Out = Initiator to target. Yes = Initiator shall negate ATN before last ACK of message. No = Initiator may or may not negate ACK before last ACK of message. (see ATTENTION condition, 5.2.1.) --- = Not Applicable *** = Extended message (see Tables 5-3 and 5-4) 80h+ = Codes 80h through FFh are used for IDENTIFY messages Two-byte messages consist of two consecutive bytes transferred during a MESSAGE phase. The value of the first byte determines which message is to be performed as defined in Table 5-2. The second byte is a parameter byte which is used as defined in the message description (see 5.6). Ignore Description ------ ---------------------------------------------------------------------- 00h Invalid 01h DB(31-24) contained invalid data which the initiator should ignore. 02h DB(31-16) contained invalid data which the initiator should ignore. 03h DB(31-8) contained invalid data which the initiator should ignore. 04h to FFh Reserved IMPLEMENTORS NOTE: Even though a byte may be invalid its corresponding parity bit is valid for the value transferred. 5.6.9. INITIATE RECOVERY A target that supports extended contingent allegiance shall inform the initiator it is entering this condition by sending an INITIATE RECOVERY message immediately following the a CHECK CONDITION or COMMAND TERMINATED status. The extended contingent allegiance condition remains in effect until terminated as described in 6.7. If an asynchronous event occurs, the target may enter an extended contingent allegiance condition by becoming a temporary initiator and sending the INITIATE RECOVERY message following the IDENTIFY message and any queue tag message and before the COMMAND phase of the SEND command that is used to perform the asynchronous event notification (see 6.6). The successful transmission of this message establishes the extended contingent allegiance condition which remains in effect until terminated as described in 6.7. IMPLEMENTORS NOTE: If the target notifies multiple initiators of the asynchronous event, it should include the INITIATE RECOVERY message in only one of the notifications. A MESSAGE REJECT response to an INITIATE RECOVERY message indicates that extended contingent allegiance condition shall not be established. The enabled or disabled state of extended contingent allegiance is not changed by the rejection of an INITIATE RECOVERY message. 5.6.10. INITIATOR DETECTED ERROR This message is sent from an initiator to inform a target that an error has occurred that does not preclude the target from retrying the operation. The source of the error may either be related to previous activities on the SCSI bus or may be internal to the initiator and unrelated to any previous SCSI bus activity. Although present pointer integrity is not assured, a RESTORE POINTERS message or a disconnect followed by a reconnect, shall cause the pointers to be restored to their defined prior state. 5.6.11. LINKED COMMAND COMPLETE This message is sent from a target to an initiator to indicate that the execution of a linked command has completed and that status has been sent. The initiator shall then set the pointers to the initial state for the next linked command. If, following an initiator's responding SDTR message, the target shifts to MESSAGE IN phase and the first message in is MESSAGE REJECT, the implied agreement shall be considered to be negated and both devices shall go to asynchronous data transfer mode for data transfers between the two devices. The implied synchronous agreement shall remain in effect until a BUS DEVICE RESET message is received, until a hard RESET condition occurs, or until one of the two SCSI devices elects to modify the agreement. The default data transfer mode is asynchronous data transfer mode. The default data transfer mode is entered at power on, after a BUS DEVICE RESET message, or after a hard RESET condition. IMPLEMENTORS NOTE: Renegotiation at every selection is not recommended, since a significant performance impact is likely. 5.6.xx. TERMINATE I/O PROCESS [New Section] The TERMINATE I/O PROCESS message is sent from the initiator to the target to advise the target to stop the current I/O process for the I_T_x nexus, without corrupting the medium. Upon successful receipt of this message the target shall stop the current I/O process for the I_T_x nexus as soon as possible and terminate the command with COMMAND TERMINATED status, creating a contingent allegiance condition. The sense key shall be set to NO SENSE and the additional sense code and qualifier shall be set to NO ADDITIONAL SENSE INFORMATION. The TERMINATE I/O PROCESS message shall not effect pending status, data and commands for other queued or executing I/O processes. However, continued execution and terminating status of other I/O processes queued for the I_T_x nexus may be effected by the queue error recovery option specified in the common mode control page (7.5.3). If the I/O process that is being terminated has a data transfer associated with it (i.e., data in or data out phase), the sense information bytes shall be set as follows: (1) If the command transfer, allocation or parameter list length field in the CDB is specified in bytes the sense information bytes shall be set to the difference (residue) between the transfer length and the number of bytes successfully processed (2) If the command transfer length field in the CDB is specified in blocks the sense information bytes shall be set to the first logical block address past the last logical block successfully processed . If the I/O process being terminated has no data transfer associated with it the target shall set the sense information bytes to zero and terminate the I/O process as defined above. When any error condition is detected for an I/O process the target shall ignore any TERMINATE I/O PROCESS messages sent to that I/O process and terminate the I/O process with the correct error status and sense information. If the target completes all processing for a command (i.e., all data has been read, written or processed) and a TERMINATE I/O PROCESS message is received before the I/O process is terminated, the target shall ignore the TERMINATE I/O PROCESS message and terminate the I/O process in the normal manner. If the target receives a TERMINATE I/O PROCESS message before the I/O process has received the command descriptor block (i.e., before the command phase), or the message is issued to an I_T_x nexus that does not have an active or queued I/O process, the target shall set the sense information bytes to zero and terminate the current I/O process as defined above. If the current I/O process is in the command queue (I_T_x nexus for untagged queuing or I_T_x_y nexus for tagged queuing) and has not started execution, the target shall either terminate the current I/O process immediately or disconnect and wait until the command is at the head of the queue (started executing) then terminate the current I/O process. In either case the target shall terminate the I/O process as defined above. If the target does not support this message, or is unable to stop the current I/O process for the I_T_x nexus, it shall respond by sending a MESSAGE REJECT message to the initiator and continuing the current I/O process in a normal manner. IMPLEMENTORS NOTES: (1) The TERMINATE I/O PROCESS message provides a means for the initiator to force the target to reduce the transfer count of the current command to the amount that has already been processed. The initiator can use the sense information to determine the number of bytes or blocks that have been processed. This message will normally be used by the initiator to stop a lengthy read, write or verify operation when a higher priority command must be processed. It is up to the initiator to complete the command that was terminated at a later time, if required. (2) It is permissible for the initiator to select a target that is currently disconnected for the purpose of sending the TERMINATE I/O PROCESS message. 5.6.22 WIDE DATA TRANSFER REQUEST Message Table 5-10: WIDE DATA TRANSFER MESSAGE ============================================================================== Byte | Value | Description | ============================================================================== 0 | 01h | Extended message | -----|---------|-------------------------------------------------------------| 1 | 02h | Extended message length | -----|---------|-------------------------------------------------------------| 2 | 03h | WIDE DATA TRANSFER REQUEST code | -----|---------|-------------------------------------------------------------| 3 | m | Transfer Width (2**m bytes) | ============================================================================== Table 6-7: Status Byte Code Bit Values ============================================================================== Bits of Status Byte ----------------------------- 7 6 5 4 3 2 1 0 Status(es) Represented ------------------------------------------------------------------------------ R R 0 0 0 0 0 R GOOD R R 0 0 0 0 1 R CHECK CONDITION R R 0 0 0 1 0 R CONDITION MET/GOOD R R 0 0 1 0 0 R BUSY R R 0 1 0 0 0 R INTERMEDIATE/GOOD R R 0 1 0 1 0 R INTERMEDIATE/CONDITION MET/GOOD R R 0 1 1 0 0 R RESERVATION CONFLICT R R 1 0 0 0 1 R COMMAND TERMINATED R R 1 0 1 0 0 R QUEUE FULL All Other Codes Reserved ============================================================================== Key: R - Reserved bit A description of the status byte codes is given below. GOOD. This status indicates that the target has successfully completed the command. CHECK CONDITION. Any error, exception, or abnormal condition that causes sense data to be set, shall cause a CHECK CONDITION status. The REQUEST SENSE command should be issued following a CHECK CONDITION status, to determine the nature of the condition. CONDITION MET. The SEARCH DATA commands shall return this status whenever a search condition is satisfied. This status does not break a chain of linked commands. The logical block address of the logical block that satisfies the search may be determined with a REQUEST SENSE command. This status is also returned by the PRE-FETCH command when there is sufficient space in the cache memory for all of the addressed logical blocks. BUSY. The target is busy. This status shall be returned whenever a target is unable to process the command from an otherwise acceptable initiator. BUSY status shall be returned if an untagged command is attempted and the command can not be accepted because the command queue is full. The normal initiator recovery action is to issue the command again at a later time. INTERMEDIATE. This status shall be returned for every command in a series of linked commands (except the last command), unless an error, exception, or abnormal condition causes a CHECK CONDITION status, COMMAND TERMINATED status, or a RESERVATION CONFLICT status to be set. If this status is not returned, the chain of linked commands is broken; no further commands in the series are executed. RESERVATION CONFLICT. This status shall be returned whenever an SCSI device attempts to access a logical unit or an extent within a logical unit that is reserved with a conflicting reservation type for another SCSI device (see RESERVE and RESERVE UNIT commands). The normal initiator recovery action is to issue the command again at a later time. COMMAND TERMINATED. This status shall be returned whenever the target stops the current I/O process after receiving a TERMINATE I/O PROCESS message (5.6.xx). The initiator can determine the number of bytes or blocks that were successfully processed by the target from the information bytes in the sense data. QUEUE FULL. This status shall be implemented if tagged queuing is implemented. This status is returned when an MUNDANE QUEUE TAG, ORDERED QUEUE TAG, or HEAD OF QUEUE TAG message is received and the command can not be accepted because the command queue is full. The command is not executed. 6.4. Command Examples The following sections give examples of typical command processing in the SCSI environment. 6.4.1. Single Command Example A typical operation on the SCSI bus is likely to include a single READ command to a peripheral device. This operation is described in detail starting with a request from the initiator. This example assumes that no linked commands and no malfunctions or errors occur. The initiator has active pointers and a set of stored pointers representing active disconnected SCSI devices (an initiator without disconnect capability does not require stored pointers). The initiator sets up the active pointers for the operation requested, arbitrates for the SCSI bus, and selects the target. Once this process is completed, the target assumes control of the operation. The target obtains the command from the initiator (in this case, a READ command). The target interprets the command and executes it. In this case, the target gets the data from the peripheral device and sends it to the initiator. At the completion of the READ command, the target sends a status byte to the initiator. To end the operation, the target sends a COMMAND COMPLETE message to the initiator. 6.4.2. Disconnect Example In the above single command example, the length of time necessary to obtain the data may require a time-consuming physical seek. In order to improve system throughput, the target may disconnect from the initiator, thereby freeing the SCSI bus to allow other I/O process to occur. The initiator must be be capable of being reselected and of restoring pointers. The target must be capable of arbitration and reselection. After the target has received the READ command (and has determined that there will be a delay), it disconnects by sending a DISCONNECT message and releasing BSY. 6.6. Contingent Allegiance Condition Those targets that do not maintain independent recovery operations, including sense information, for each I_T_L nexus shall implement contingent allegiance. This guarantees that error information is available to an initiator following a CHECK CONDITION or COMMAND TERMINATED status. The contingent allegiance condition shall exist following the return of a CHECK CONDITION or COMMAND TERMINATED status. The contingent allegiance condition shall be preserved for the I_T_L nexus until it is cleared. The contingent allegiance condition shall be cleared upon the generation of a hard reset condition, or by the receipt an ABORT message, a BUS DEVICE RESET message, or any subsequent command for the I_T_L nexus, except a REQUEST SENSE command. The contingent allegiance condition shall be cleared following the return of the REQUEST SENSE data for the I_T_L nexus. While the contingent allegiance condition exists the target shall respond to any other requests for access to the logical unit from another initiator with a BUSY status. Execution of queued commands for the logical unit for which the contingent allegiance condition exists shall be suspended until the contingent allegiance condition is cleared. 6.7. Extended Contingent Allegiance Condition Implementation of extended contingent allegiance is optional. The extended contingent allegiance condition extends the contingent allegiance condition for an I_T_L nexus. This condition is generated by the target sending an INITIATE RECOVERY message to the initiator following a CHECK CONDITION or COMMAND TERMINATED status and prior to the COMMAND COMPLETE message. This condition shall be preserved for the I_T_L nexus until it is cleared by a RELEASE RECOVERY message, an ABORT message, a BUS DEVICE RESET message, or a hard RESET condition. [I deleted an implementors note here that conflicted with the RELEASE RECOVERY message. jbl 12/17/88] While the extended contingent allegiance condition exists the target shall respond to any other requests for access to the logical unit from another initiator with BUSY status. Execution of queued commands for the logical unit for which the extended contingent allegiance condition exists shall be suspended until the RELEASE RECOVERY message is received by the target. IMPLEMENTORS NOTES: (1) It is not required to generate an extended contingent allegiance condition for every CHECK CONDITION or COMMAND TERMINATED status that occurs. Simple errors not requiring an extended recovery may be dealt with by using contingent allegiance protocols. (2) During the existence of the extended contingent allegiance condition, appropriate error recovery sequences may be executed. Such commands can correct data, modify or delete queued commands, perform LOG SENSE commands and obtain diagnostic information. Extended contingent allegiance is recommended for error conditions that may require execution of multiple-step error-recovery protocols without interference from other initiators. The standard INQUIRY data format is shown in Table 7-15. Table 7-15: Standard INQUIRY Data Format ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Peripheral Qualifier | Peripheral Device Type | -----|-----------------------------------------------------------------------| 1 | RMB | Device-Type Qualifier | -----|-----------------------------------------------------------------------| 2 | ISO Version | ECMA Version | ANSI-Approved Version | -----|-----------------------------------------------------------------------| 3 | AENC | TrmIOP | Reserved | Response Data Format | -----|-----------------------------------------------------------------------| 4 | Additional Length (n-4) | -----|-----------------------------------------------------------------------| 5 | Reserved | -----|-----------------------------------------------------------------------| 6 | Reserved | -----|-----------------------------------------------------------------------| 7 | RelAdr | WBus32 | WBus16 | Sync | Linked | Cache | CmdQue | SftRe | -----|-+---------------------------------------------------------------------| 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 to| Vendor-Specific | n | Parameter Bytes | ============================================================================== The asynchronous event notification capability (AENC) bit indicates that the device supports the asynchronous event notification capability as defined in 6.5.5. (1) Processor device-type definition: An AENC bit of one indicates that the processor device is capable of accepting asynchronous event notifications. An AENC bit of zero indicates that the processor device does not support asynchronous event notifications. (2) All other device-types: An AENC bit of one indicates that the device is capable of generating asynchronous event notifications. An AENC bit of zero indicates that the device does not generate asynchronous event notifications. A terminate I/O process (TrmIOP) bit of one indicates that the device supports the TERMINATE I/O PROCESS message as defined in 5.6.xx. A value of zero indicates that the device does not support the TERMINATE I/O PROCESS message. 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. A relative addressing (RelAdr) bit of one indicates that the device supports the relative addressing mode for this logical unit. 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 does not support relative addressing for this logical unit. 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: 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 linked command (Linked) bit of one indicates that the device supports linked commands for this logical unit. A value of zero indicates the device does not support linked commands for this logical unit. 7.2.14. REQUEST SENSE Command Peripheral Device Type: All Operation Code Type: Mandatory Table 7-35: REQUEST SENSE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (03h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Allocation Length | -----|-----------------------------------------------------------------------| 5 | Control Byte | ============================================================================== The REQUEST SENSE command (Table 7-35) requests that the target transfer sense data to the initiator. The sense data shall be valid for CHECK CONDITION or COMMAND TERMINATED status returned on the prior command and may be valid if a bus free error occurred (see 5.1.1) or sense key 0h information is available. This sense data shall be preserved by the target for the initiator until retrieved by the REQUEST SENSE command or until the receipt of any other command for the same logical unit from the initiator that issued the command resulting in the CHECK CONDITION or COMMAND TERMINATED status. Sense data shall be cleared upon receipt of any subsequent command to the logical unit from the initiator receiving the CHECK CONDITION or COMMAND TERMINATED status. IMPLEMENTORS NOTE: Some target controller implementations provide valid sense data at other times than when a CHECK CONDITION or COMMAND TERMINATED status has been reported. For implementations that issue REQUEST SENSE commands at other times than when a CHECK CONDITION or COMMAND TERMINATED status is reported (i.e., sense data polling) a TEST UNIT READY command should be issued prior to issuing a REQUEST SENSE command to ensure sense data is valid. [This note (new in revision 6) has generated a lot of discussion on the SCSI BBS. It seems to imply that all one has to do to get valid sense data is issue a TEST UNIT READY command. This is not true in many implementations. What I thought this note was supposed to say is that in order to ensure the sense data has been updated, one should issue TEST UNIT READY commands between the REQUEST SENSE commands until the CHECK CONDITION status ends. (If the TEST UNIT READY command returns GOOD status, the sense data is not guaranteed to be valid.) jbl 12/30/88] IMPLEMENTORS NOTE: It is recommended that this field relate to the retry count fields specified within the error recovery parameters page of the MODE SELECT command. If the sense key is NOT READY and the SKSV bit is one, the sense-key specific field shall be defined as shown in Table 7-39. These fields are only defined for the FORMAT UNIT command with the Immed bit set to one. Table 7-39: 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 be an based upon the total format operation including any certification or initialization operations. IMPLEMENTORS NOTE: 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 target to assign values to various steps within the process. The granularity of these steps should be small enough to provide reasonable assurances to the initiator that progress is being made. 7.2.14.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 command that returned the CHECK CONDITION or COMMAND TERMINATED status or an unexpected bus free 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 presented. Such commands are associated with use of the immediate bit, with caching, and with multiple command buffering. Table 7-40: Key (0h-7h) Descriptions ============================================================================== Sense Key Description --------- ------------------------------------------------------------------- 0h NO SENSE. Indicates that there is no specific sense key information to be reported for the designated logical unit. This would be the case for a successful command, a command that returned a COMMAND TERMINATED status or a command that received CHECK CONDITION 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 target. 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. 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 target is unable to distinguish between a flaw in the medium and a specific hardware failure (sense key 4h). 4h HARDWARE ERROR. Indicates that the target 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 target detects an invalid parameter in the command descriptor block, then it shall terminate the command without altering the medium. If the target detects an invalid parameter in the additional parameters supplied as data, then the target 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 6.1.3 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. ==============================================================================