9. Sequential-Access Devices 9.1. Sequential-Access Device Model 9.1.1. Physical Elements Sequential-access devices (called devices below) optimize their use in storing or retrieving user data in a sequential manner. Since access is sequential, position changes typically take a long time, when compared to direct-access devices. Sequential-access devices are usually tape devices. The remainder of this description is from the point of view of a tape device; however, other implementations are not precluded. The recording medium for tape devices consists of various widths and lengths of a flexible substrate coated with a semi-permanent magnetic material. The recording medium may be wound onto single reels or encapsulated into cartridges containing both a supply reel and a take-up reel. Several American National Standards exist covering the construction of reels and cartridges for interchange as well as recording techniques for many of the format or density combinations. A complete unit composed of the recording medium and its physical carrier (e.g., reel, cartridge, cassette) is called a volume. Volumes have an attribute of being mounted or demounted on a suitable transport mechanism. Mounted is the state of a volume when the device is physically capable of executing commands that cause the the medium to be moved. A volume is demounted when it is being loaded, threaded, unloaded, unthreaded, or when not attached to the device. Ready is the state of the device when medium access and non-medium access commands can be executed. The device is not ready when no volume is mounted or, from the initiator's perspective, whenever all medium access commands report CHECK CONDITION status and a NOT READY sense key. Some devices may have a separate switch function which places the device in a not ready state even when a volume is mounted. The write enabled or write protected state determines when an initiator may write information on a volume. This attribute is usually controlled by the user of the volume through manual intervention (e.g., thumbwheel switch). The recording medium has two physical attributes called beginning-of-medium (BOM) and end-of-medium (EOM). Beginning-of-medium is at the end of the medium that is attached to the take-up reel. End-of-medium is at the end of the medium that is attached to the supply reel. In some cases, the medium is permanently affixed to one or both of the reel hubs. As shown in Figure 9-1, the entire physical length of medium is not usable for recording data. For most volumes, a length of the medium is reserved before the beginning-of-medium and after the end-of-medium position. This is done to provide sufficient tape wraps onto the reel hub(s) and to ensure that recording starts in an undamaged section of the medium. BOM EOM ============================================================================== ---------------------------------------------------------- Reserved ----------Usable------------------------------------------ Reserved Medium --------------------------Recording----------------------- Medium Area --------------------------------------------Zone---------- Area ---------------------------------------------------------- ============================================================================== <--- Take-up Hub Supply Hub ---> Figure 9-1: Typical Volume Layout 9.1.2. Data Storage Characteristics The position on the medium where a pattern of recorded signal may be written by one write component is called a track (Figure 9-2). A device may write or read from one or more tracks at a time, depending on the format. BOM EOM ============================================================================== Track 1 ---------------------------------------------------------- Track 2 ---------------------------------------------------------- ::: ---------------------------------------------------------- Track n-1 ---------------------------------------------------------- Track n ---------------------------------------------------------- ============================================================================== Figure 9-2: Typical Medium Track Layout On a new volume, recording of one or more tracks begins after mounting the volume and moving from beginning-of-medium toward end-of-medium. The number of tracks written at one time is called a track group (TrkGrp). For recorded volumes, reading in the forward direction follows the same course of tracks as when writing. If not all tracks are recorded at the same time, and the device reverses direction when approaching end-of-medium and begins writing on remaining tracks, the recording method is called serpentine. For serpentine devices that record only one track at a time, each physical track represents one track group (Figure 9-3). BOM EOM ============================================================================== Track 1 --------------------------------------------------------> TrkGrp 1 Track 2 <-------------------------------------------------------- TrkGrp 2 ::: --------------------------------------------------------> ::: ::: <-------------------------------------------------------- ::: Track n --------------------------------------------------------- TrkGrp n ============================================================================== Figure 9-3: Serpentine Recording Example Some multi-track devices have only one track group, using a parallel storage format that supports the simultaneous recording of all available tracks (Figure 9-4). BOM EOM ============================================================================== Track 1 -------------------------------------------------------->\ Track 2 --------------------------------------------------------> \ ::: --------------------------------------------------------> >TrkGrp1 ::: --------------------------------------------------------> / Track n -------------------------------------------------------->/ ============================================================================== Figure 9-4: Parallel Recording Example The serpentine and parallel recording formats shown in the previous examples define tracks as longitudinal patterns of recorded information. One other storage format used by some devices records tracks diagonally across the medium. This recording technique is known as helical scan (Figure 9-5). ============================================================================== BOM / / / / / / / / / / / / / / / / / / / / / / / / / / EOM / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Track 1 -->/ / / / / / / / / / / / / / / / / / / / / / / / / /<-- Track n ============================================================================== Figure 9-5: Helical Scan Recording Example For most recording formats, an area at beginning-of-medium contains a format identification in the form of a tone burst or some other recognizable pattern. User data is not recorded in this area. The format identification is an attribute of a volume used for interchange purposes and is defined in applicable standards. When writing, the initiator needs an indication that it is approaching the end of the permissible recording area. This position, called early-warning (EW), is typically reported to the initiator at a position early enough for the device to write any buffered data to the medium while still leaving enough room for additional recorded labels or filemarks. Some American National Standards include physical requirements for a marker placed on the medium to be detected by the device as early-warning (Figure 9-6). BOM EW EOM -------------------------------->--------> Figure 9-6: Early-Warning Example For devices which implement large data buffers, the early-warning position defined by a physical marker may be too close to the end of the recording region to permit emptying the data buffer(s). For these devices, a logical concept of early-warning is often used to signal the initiator at an appropriate location prior to the physical marker. 9.1.3. Partitions within a Volume Another attribute of a volume is called a partition. Partitions consist of one or more non-overlapped mini-volumes, each with its own beginning and ending points, occupying a single physical volume. Each partition (x) within a volume has a defined beginning-of-partition (BOP x), an early-warning position (EW x), and an end-of-partition (EOP x). All volumes have a minimum of one partition called partition zero, the default data partition. For devices which support only one partition, the beginning-of-partition zero (BOP 0) may be equivalent to the beginning-of- medium and the end-of-partition zero (EOP 0) may be equivalent to the end-of- medium. When a volume is mounted, it is logically positioned to beginning of the default data partition (BOP 0). When a REWIND command is received in any partition (x), the device positions to the beginning-of-partition (BOP x). Partitions on a volume do not need to be recorded in any defined order, nor do all partition numbers in a sequence need to be present on a volume. It is sufficient for a device to be able to locate a partition, given its code value, or determine that it does not exist on the volume. For interchange, information about which partitions are present on a volume may be stored on the volume in a device-defined area (possibly unavailable to the initiator) or the information may be an intrinsic attribute of the device implementation. Figure 9-7 shows a possible partition implementation for a four-track serpentine recording device, assuming that each track group defines a partition. BOM EOM ============================================================================== TrkGrp1 BOP0 ----------------------------------------------->EW0-----> EOP0 TrkGrp2 EOP1 <-----EW1<----------------------------------------------- BOP1 TrkGrp3 BOP2 ----------------------------------------------->EW2-----> EOP2 TrkGrp4 EOP3 <-----EW3<----------------------------------------------- BOP3 ============================================================================== Figure 9-7: Partitioning Example - One Partition per Track Group Another possible partition implementation for this four-track serpentine recording device is shown in Figure 9-8, using two track groups to define each partition. BOM EOM ============================================================================== TrkGrp1 BOP0 --------------------------------------------------------> TrkGrp2 EOP0 <-----EW0<----------------------------------------------- TrkGrp3 BOP1 --------------------------------------------------------> TrkGrp4 EOP1 <-----EW1<----------------------------------------------- ============================================================================== Figure 9-8: Partitioning Example - One Partition per Two Track Groups The previous examples show the beginning and ending points for a partition aligned with physical bounds of the medium. This is not a mandatory requirement for partitioning; it is sufficient for a device to be able to locate to and stay in any partition bounded by a BOP x and EOP x. In this case, a recorded mark or some other device-recognizable attribute could be used to delineate the partitions. Figure 9-9 shows a possible two-partition implementation for a device with only one track group. BOM EOM ============================================================================== --------->------->----------------------------->--------> --------->------->----------------------------->--------> TrkGrp1 BOP0 --------->EW0---->EOP0/BOP1-------------------->EW1-----> EOP1 --------->------->----------------------------->--------> --------->------->----------------------------->--------> ============================================================================== Figure 9-9: Partitioning Example - Two Partitions per Track Group Three methods are defined in the MODE SENSE and MODE SELECT commands for managing partitions; each method is progressively more difficult to implement and manage: (1) device-defined fixed locations; (2) device-defined based on an initiator supplied number of partitions and a device specific allocation algorithm; and, (3) definition by name and capacity by an initiator. 9.1.4. Logical Elements within a Partition The area between BOP x and EOP x on a typical recorded volume contains at least two types of initiator accessible elements, data blocks and tape marks. These elements are controlled and transferred between the initiator and the medium using READ, READ REVERSE, WRITE, and WRITE FILEMARKS commands. A unit of data supplied or requested by an initiator is called a logical block. Logical blocks are stored according to the specifications of the format for the volume and may be recorded as one or more physical blocks on the medium. When the physical block and the logical block are not recorded in a one-to-one relationship, it is the responsibility of the device to perform all blocking, de-blocking, padding, stripping, splitting or rebuilding of the logical data block(s) sent by an initiator. Filemarks are special recorded elements containing no user data. The filemark format is defined in some American National Standards. Initiators traditionally use filemarks to separate user data from labels and logical groupings of data from each other. Since some format standards do not define an explicit end-of-data (EOD), host software has often used conventions with filemarks to represent an EOD indication. At least one American National Standard specifically defines filemark use for this purpose. In some implementations, the device's EOD definition may be specified the initiator using the MODE SELECT command. A setmark is another type of special recorded element containing no user data, providing a segmentation scheme hierarchically superior to filemarks. This level of segmentation is useful for some high capacity storage devices to provide concise addressing and fast positioning to specific sets of data within a partition. In some implementations, the detection and reporting of setmarks may be controlled by the initiator using the MODE SELECT command. Inter-block gaps, the gaps between blocks, filemarks, and setmarks, are introduced on the medium at the time a block or mark is written without explicit action by the initiator. Minimum and maximum lengths for inter-block gaps are defined in some American National Standards. In some devices, the length of inter-block gaps may be selected by the initiator using the MODE SELECT command while in other devices the gaps are fixed and non-changeable. In addition to blocks, filemarks, and setmarks, erase gaps may be recorded on the medium through use of the ERASE command or device-initiated error recovery actions. Although explicitly recorded on the medium, there is normally no distinction between two contiguous erase gaps. An erase gap may be a length of erased medium or a recorded pattern not distinguishable as a block or mark. Minimum and maximum lengths for erase gaps are defined in some American National Standards while some devices may have no implementation of an erase gap. After writing data from BOP x, the medium is considered to be a contiguous grouping of blocks, filemarks, setmarks, and gaps. Certain American National Standards define gap lengths which, if exceeded, are to be considered as having reached blank medium. Depending on the format, this blank medium may be treated as an end-of-data indication, an error recovery area, or an unrecoverable medium error causing an interchange error. Unrecorded volumes (new or erased) may exhibit blank medium characteristics if an attempt is made to read or space the volume before data has been written. A sequential-access device may be capable of supporting fixed or variable length blocks. The concept of fixed or variable mode for writing and reading blocks only indicates the method by which the initiator specifies the size of a logical block for transfer and not the method of recording physical blocks on the medium. However, a device that supports only fixed-length physical blocks may only be capable of supporting logical blocks of the same length. The length of a logical block is always described in bytes. The length of a physical block may or may not be recorded as an exact byte count, depending on the format. 9.1.5. Data Buffering A device may contain a temporary storage area capable of holding one or more logical blocks - a data buffer. A device data buffer may include any combination of blocks, filemarks, and setmarks in the process of being written to the medium, or it may contain read-ahead data blocks transferred from the medium. A device with a data buffer may be capable of operating in either a buffered mode or an unbuffered mode. A device with no data buffer operates only in unbuffered mode. Either term is only applicable to the manner in which the device manages information to be written to the medium. Buffered mode is not applicable during read commands, regardless of whether read data p asses through a data buffer. A device operating in buffered mode may return GOOD status for write operations when all write data has been successfully transferred from the initiator into the device data buffer. For devices operating in unbuffered mode, GOOD status is not returned until all requested data, filemarks, or setmarks are successfully recorded on the medium. When issuing a buffered WRITE FILEMARKS command with the immediate bit set to one, GOOD status is returned as soon as the command is validated. A WRITE FILEMARKS command with the immediate bit set to zero causes any buffered blocks, filemarks, and setmarks to be written to the medium. Upon successful completion of this process, which is called a synchronize operation, no blocks, filemarks, or setmarks remain in the data buffer which have not been written to the medium. A synchronize operation has no effect on a data buffer which contains only read-ahead data or write data which has already been successfully written to the medium. Should an unrecoverable write error occur while in buffered mode, the device generates an error condition to the current active command. If no command is active, the error may be reported on the next applicable operation as a deferred error (see 7.2.14.2). For some implementations, asynchronous event notification (AEN) or extended contingent allegiance (ECA) may be required. Refer to 6.5.5 and 6.7 for descriptions of AEN and ECA protocol. The READ POSITION command may be used to determine the number and storage space of buffered blocks not written before the unrecoverable error was encountered. A device with read-ahead data blocks in the data buffer does not report an unrecovered read error until the data block in error is requested by an initiator. 9.1.6. Recorded Object Descriptors (Block Identifiers) Some recording formats specify that recorded objects (blocks, filemarks, and setmarks) have identifiers included in the recorded information to help determine write sequence and also to help detect device positioning errors. The identifier values are unique within a partition and may be unique within a volume. The use of the term block identifier may imply some arithmetic sequence applied to the assignment of recorded objects. The block identifier assignment algorithm may be defined in an applicable format standard. For some pre-formatted volumes, the identifiers are associated with physical blocks. In variable-length implementations, the identifier can be associated with a physical block when the logical block and the physical block have a one-to-one relationship on the medium. Some formats may carry both physical and logical block identifiers recorded on the medium. When a logical block is split over more than one physical block, or multiple logical blocks are concatenated to form a physical block, the logical block identifier and the physical block identifier are not the same. Filemarks and setmarks may or may not have recorded identifiers, but if identifiers are used in the format, then each mark is assigned a value even if it is not explicitly recorded. The READ POSITION and LOCATE commands use four-byte fields to hold these format dependent identifiers. For some implementations, this value may correspond to a real physical location; however, it is sufficient for the device to map the identifier to a value representing the unique recorded object. With this capability, the READ POSITION command may be used to report a device-defined block identifier and the initiator may use this value with a LOCATE command to position to the same location at some future time (provided the volume has not been rewritten in the interim). 9.1.7. Direction and Position Definitions For sequential-access devices, positioning has the connotation of logically being in, at, before, or after some defined place within a volume. This definition means the position is capable of being repeated under the same circumstances. The orientation of usage for the four words (in, at, before, or after) is in one direction, from BOP x toward EOP x. All positioning defined below is worded from this perspective. Devices without buffers have some physical position which relates to these logical positions. However, these definitions do not require the medium to have a physical position equivalent to the logical position unless explicitly stated. The forward direction is defined as logically progressing from BOP x toward EOP x. The reverse direction is defined as logically progressing from EOP x toward BOP x. In serpentine devices, the logical forward or reverse direction has an alternating relationship to the physical motion of the medium. The concept of being "in" some position means not being outside a defined region. The definition allows the position to be on the boundary of a defined region. When a volume is first mounted, the logical position is always at the beginning of the default data partition (BOP0). Whenever a volume is mounted and the medium motion is stopped, the position is in some partition. While moving between partitions, there is no stable position. The concept of being "at" some position indicates being positioned to a logical or physical extremity of a partition. A sequential-access device may be positioned at beginning-of-medium, at BOP x, at end-of-data (EOD), at EOP x, or at end-of-medium (EOM), since these are stable positions at extremities of a partition. The concept of being "before" some position indicates that there is some element (data block, filemark, setmark, or other defined point) which may be encountered when moving toward EOP x, if the proper commands are issued. Being positioned before a particular data block means that if the device receives a valid READ command, the data block is transferred to the initiator. This position may also be before EW x and EOP x, since these are defined points within any partition. However, if data has not been written to the end-of-partition, these points may not be accessible by the initiator. The concept of being "after" some position indicates that there is some element (data block, filemark, setmark, or other defined point) on the BOP x side of the current position which may be encountered if the proper commands are issued. When a READ command for a single data block has been successfully executed, the logical position is after the transferred data block. 9.1.8. Error Reporting If any of the following conditions occur during the execution of a command the target shall return CHECK CONDITION status. The appropriate sense key and additional sense code should be set. The following table illustrates some error conditions and the applicable sense keys. The table does not provide an exhaustive enumeration of all conditions that may cause the CHECK CONDITION status. Condition Sense Key ---------------------------------------------------- --------------- Invalid logical block address ILLEGAL REQUEST Unsupported option requested ILLEGAL REQUEST Target reset or medium change since last command from this initiator UNIT ATTENTION Self diagnostic failed HARDWARE ERROR Unrecovered read error MEDIUM ERROR HARDWARE ERROR Recovered read or write error RECOVERED ERROR Overrun or other error that might be resolved by repeating the command ABORTED COMMAND Attempt a WRITE, READ, READ REVERSE, VERIFY, or ILLEGAL REQUEST RECOVER BUFFERED DATA command with the fixed bit set to zero and variable block mode is not supported Attempt a WRITE, READ, READ REVERSE, VERIFY, or ILLEGAL REQUEST RECOVER BUFFERED DATA command with a fixed bit of zero and requested block length is not supported Attempt a WRITE, READ, READ REVERSE, VERIFY, or ILLEGAL REQUEST RECOVER BUFFERED DATA command with a fixed bit of one and MODE SENSE block length set to zero Attempt to execute an erase or write-type operation DATA PROTECT on write protected medium Deferred write error MEDIUM ERROR VOLUME OVERFLOW In the case of an unrecovered read or write error, if the read-write error recovery page (9.3.3.4) is implemented, the current values specify the target error recovery criteria. If this page is not implemented, the error recovery is vendor specific. In the case of an unrecovered read error, if the fixed bit is one, the valid bit shall be set to one and the information field shall be set to the requested transfer length minus the actual number of blocks read (not including the unrecovered block). If the fixed bit is zero, the valid bit shall be set to one and the information field shall be set to the requested transfer length. Upon termination, the logical position shall be after the unrecovered block. In the case of an unrecovered write error, if unbuffered mode is selected and the fixed bit is set to one, the valid bit shall be set to one and the information field shall be set to the requested transfer length minus the actual number of blocks written. If unbuffered mode is selected and the fixed bit is set to zero, the information field shall be set to the requested transfer length. In the case of an unrecovered write error or a deferred write error, if buffered mode is selected and the fixed bit is one, the valid bit shall be set to one and the information field shall be set to the total number of blocks, filemarks, and setmarks not written (the number of blocks not transferred from the initiator plus the number of blocks, filemarks, and setmarks remaining in the target's buffer). If buffered mode is selected and the fixed bit is zero, the information field shall be set to the total number of bytes, filemarks, and setmarks not written (the number of bytes not transferred from the initiator plus the number of bytes, filemarks, and setmarks remaining in the target's buffer). In both cases, the value in the information field may exceed the transfer length. In the case of an unrecovered write error or a deferred write error, if buffered mode 1h is selected, the error shall be reported to the first initiator issuing a command (other than INQUIRY or REQUEST SENSE) or the first initiator responding to asynchronous event notification. If buffered mode 2h is selected, the error shall be reported to the initiator with unwritten data in the buffer. 9.2. Command Descriptions for Sequential-Access Devices The commands for sequential-access devices shall be as shown in Table 9-1. Table 9-1: Commands for Sequential-Access Devices ============================================================================== Operation Command Name Code Type Section ------------------------------------------------------------------------------ CHANGE DEFINITION 40h O 7.2.1 COMPARE 39h O 7.2.2 COPY 18h O 7.2.3 COPY AND VERIFY 3Ah O 7.2.4 ERASE 19h M 9.2.1 INQUIRY 12h M 7.2.5 LOAD UNLOAD 1Bh O 9.2.2 LOCATE 2Bh O 9.2.3 LOG SELECT 4Ch O 7.2.6 LOG SENSE 4Dh O 7.2.7 MODE SELECT(6) 15h M 7.2.8 MODE SELECT(10) 55h O 7.2.9 MODE SENSE(6) 1Ah M 7.2.10 MODE SENSE(10) 5Ah O 7.2.11 PREVENT ALLOW MEDIUM REMOVAL 1Eh O 8.2.4 READ 08h M 9.2.4 READ BLOCK LIMITS 05h M 9.2.5 READ BUFFER 3Ch O 7.2.12 READ POSITION 34h O 9.2.6 READ REVERSE 0Fh O 9.2.7 RECEIVE DIAGNOSTIC RESULTS 1Ch O 7.2.13 RECOVER BUFFERED DATA 14h O 9.2.8 RELEASE UNIT 17h M 9.2.9 REQUEST SENSE 03h M 7.2.14 RESERVE UNIT 16h M 9.2.10 REWIND 01h M 9.2.11 SEND DIAGNOSTIC 1Dh M 7.2.15 SPACE 11h M 9.2.12 TEST UNIT READY 00h M 7.2.16 VERIFY 13h O 9.2.13 WRITE 0Ah M 9.2.14 WRITE BUFFER 3Bh O 7.2.17 WRITE FILEMARKS 10h M 9.2.15 ============================================================================== Key: M = Command implementation is mandatory. O = Command implementation is optional. The following command codes are vendor specific: 02h, 06h, 07h, 09h, 0Ch, 0Dh, 0Eh. All other command codes for sequential-access devices are reserved for future standardization. 9.2.1. ERASE Command Table 9-2: ERASE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (19h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | Immed | Long | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The ERASE command (Table 9-2) causes part or all of the medium to be erased beginning at the current position on the logical unit. As used here, "erased" means either the medium shall be erased or a pattern shall be written on the medium that appears as a gap to the target. An immediate (Immed) bit of zero indicates that the target shall not return status until the erase operation has completed. An Immed bit of one indicates that the target shall return status as soon as the command has been validated. If CHECK CONDITION status is returned for an ERASE command with an Immed bit of one, the erase operation shall not be performed. A long bit of one indicates that all remaining medium in the current partition shall be erased beginning at the current logical position. If the Immed bit is one, the target shall return status as soon as all buffered commands have completed execution and the command descriptor block of the ERASE command has been validated. The logical position following an ERASE command with a long bit of one is not specified by this standard. IMPLEMENTORS NOTE: Some targets may reject an ERASE command with the long bit set to one if the logical unit is not at beginning-of-partition. A long bit of zero specifies an erase gap defined by the gap size field in the device configuration page (9.3.3.1). If the gap size is zero or the field is not supported, a device defined erase gap operation shall be performed. If the Immed bit is one, the target shall return status as soon as the command descriptor block has been validated. Erase gaps may be used in host controlled error recovery or "update in place" applications. If the logical unit encounters early-warning during an ERASE command, and any buffered data, filemarks, or setmarks remain to be written, the target action shall be as defined for the early-warning condition of the WRITE command (9.2.14). If the long bit is zero, the erase operation shall terminate with CHECK CONDITION status and return sense data as defined for the WRITE command. Any buffered erases are not reported as part of the information field. 9.2.2. LOAD UNLOAD Command Table 9-3: LOAD UNLOAD Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (1Bh) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | Immed | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | EOT | Re-Ten | Load | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The LOAD UNLOAD command (Table 9-3) requests that the target enable or disable the logical unit for further operations. This command may also be used to request a re-tension function. Prior to performing the load or unload operation, the target shall ensure that all buffered data, filemarks, and setmarks have been transferred to the medium. An immediate (Immed) bit of zero indicates that the target shall not return status until the load or unload operation has completed. An Immed bit of one indicates that the target shall return status as soon as all buffered commands have completed execution and the command descriptor block of the LOAD UNLOAD command has been validated. If CHECK CONDITION status is returned for a LOAD UNLOAD command with an Immed bit of one, the load or unload operation shall not be performed. IMPLEMENTORS NOTE: For compatibility with devices implemented prior to this version of the standard, a WRITE FILEMARKS command with an Immed bit of zero should be used to ensure that all buffered data, filemarks, or setmarks have been transferred to the medium prior to issuing a LOAD UNLOAD command with an Immed bit of one. An end-of-tape (EOT) bit of one indicates that an unload operation (load bit set to zero) shall position the medium at end-of-medium for removal from the device. An EOT bit of zero indicates that an unload operation shall position the medium at beginning-of-medium for removal from the device. An EOT bit of one and a load bit of one shall cause the target to return CHECK CONDITION status and the sense key shall be set to ILLEGAL REQUEST in the sense data. A re-tension (Re-Ten) bit of one indicates that the medium on the logical unit shall be correctly tensioned. Implementation of the re-tension function is device specific. If the load bit is set to one, the medium in the logical unit shall be loaded and positioned to the beginning-of-partition zero. If the load bit is zero, the medium in the logical unit shall be positioned for removal at the extreme position along the medium specified by the EOT bit. Following successful completion of an unload operation, the target shall return CHECK CONDITION status with the sense key set to NOT READY for all subsequent medium-access commands until a new volume is mounted or a load operation is successfully completed. When operating in buffered mode 1h or 2h (see 9.3.3), the target shall discard any unwritten buffered data after the LOAD UNLOAD command is validated if the previous command was terminated with CHECK CONDITION status and the device is unable to continue successfully writing. 9.2.3. LOCATE Command Table 9-4: LOCATE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (2Bh) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | BT | CP | Immed | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | (MSB) | -----|--- ---| 4 | | -----|--- Block Address ---| 5 | | -----|--- ---| 6 | (LSB) | -----|-----------------------------------------------------------------------| 7 | Reserved | -----|-----------------------------------------------------------------------| 8 | Partition | -----|-----------------------------------------------------------------------| 9 | Control | ============================================================================== LOCATE command (Table 9-4) causes the target to position the logical unit to the specified block address in a specified partition. Upon completion, the logical position shall be before the specified location. Prior to performing the locate operation, the target shall ensure that all buffered data, filemarks, and setmarks have been transferred to the medium. A block address type (BT) bit of one indicates the value in the block address field shall be interpreted as a device-specific value. A BT bit of zero indicates the value in the block address field shall be interpreted as an SCSI logical block address. A change partition (CP) bit of one indicates that a change to the partition specified in the partition field is to occur prior to positioning to the block specified in the block address field. A CP bit of zero indicates no partition change is to be made and the partition field is to be ignored. An immediate (Immed) bit of zero indicates that the target shall not return status until the locate operation has completed. An Immed bit of one indicates that the target shall return status as soon as all buffered commands have completed execution and the command descriptor block of the LOCATE command has been validated. If CHECK CONDITION status is returned for a LOCATE command with an Immed bit of one, the locate operation shall not be performed. The block address field specifies the block address to which the target shall position the medium based on the current setting of the BT bit. The partition field specifies which partition to select if the CP bit is one. Refer to the sequential-access device model (9.1.3) and the medium partition pages (9.3.3.2 and 9.3.3.3) for additional information about partitioning. 9.2.4. READ Command Table 9-5: READ Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (08h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | SILI | Fixed | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Transfer Length | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The READ command (Table 9-6) requests that the target transfer one or more block(s) of data to the initiator beginning with the next block on the logical unit. The fixed bit specifies whether fixed-length or variable-length blocks are to be transferred. Refer to the READ BLOCK LIMITS command (9.2.5) for additional information about fixed and variable block mode. If the fixed bit is one, the transfer length specifies the number of fixed- length blocks to be transferred, using the current block length reported in the mode parameters block descriptor (7.3.3). If the fixed bit is zero, a variable-length block is requested with the transfer length specifying the maximum number of bytes allocated for the returned data. A successful READ command with a fixed bit of one shall transfer the requested transfer length times the current block length in bytes to the initiator. A successful READ command with a fixed bit of zero shall transfer the requested transfer length in bytes to the initiator. Upon completion, the logical position shall be after the last block transferred (end-of-partition side). If the suppress incorrect length indicator (SILI) bit is one and the fixed bit is zero, the target shall: (1) report CHECK CONDITION status for an incorrect length condition only if the overlength condition exists (see 9.4) and the block length field in the mode parameter block descriptor is nonzero (see 7.3.3) (2) not report CHECK CONDITION status if the only error is the underlength condition (see 9.4), or if the only error is the overlength condition and the block length field of the mode parameters block descriptor is zero. IMPLEMENTORS NOTE: Since the residue information normally provided in the information field of the sense data may not be available when the SILI bit is set, other methods for determining the actual block length should be used (e.g., including length information in the data block). If the SILI bit is one and the fixed bit is one, the target shall terminate the command with CHECK CONDITION status and the sense key shall be set to ILLEGAL REQUEST with an additional sense code of INVALID FIELD IN CDB. If the SILI bit is zero and an incorrect length block is read, CHECK CONDITION status shall be returned and the ILI and valid bits shall be set to one in the sense data. Upon termination, the logical position shall be after the incorrect length block (end-of-partition side). If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks read (not including the incorrect length block). If the fixed bit is zero, the information field shall be set to the requested transfer length minus the actual block length. Targets that do not support negative values shall set the information field to zero if the overlength condition exists (see 9.4). IMPLEMENTORS NOTE: In the above case with the fixed bit of one, only the position of the incorrect-length logical block can be determined from the sense data. The actual length of the incorrect block is not reported. Other means may be used to determine its actual length (e.g., read it again with the fixed bit set to zero). A transfer length of zero indicates that no data shall be transferred. This condition shall not be considered an error and the logical position shall not be changed. If the logical unit encounters a filemark during a READ command, CHECK CONDITION status shall be returned and the filemark and valid bits shall be set to one in the sense data. The sense key shall be set to NO SENSE or RECOVERED ERROR, as appropriate. Upon termination, the logical position shall be after the filemark (end-of-partition side). If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks read (not including the filemark). If the fixed bit is zero, the information field shall be set to the requested transfer length. If the logical unit encounters a setmark during a READ command and the RSmk bit is set to one in the device configuration page (9.3.3.1), CHECK CONDITION status shall be returned and the filemark and valid bits shall be set to one in the sense data. The sense key shall be set to NO SENSE or RECOVERED ERROR, as appropriate, and the additional sense code shall be set to SETMARK DETECTED. Upon termination, the logical position shall be after the setmark (end-of-partition side). If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks read (not including the setmark). If the fixed bit is zero, the information field shall be set to the requested transfer length. The target shall not return CHECK CONDITION when a setmark is encountered if the RSmk bit is set to zero or if this option is not supported. If the logical unit encounters early-warning during a READ command and the REW bit is set to one in the device configuration page (see 9.3.3.1), CHECK CONDITION status shall be returned upon completion of the current block. The sense key shall be set to NO SENSE or RECOVERED ERROR, as appropriate. The EOM and valid bits shall be set to one in the sense data. Upon termination, the logical position shall be after the last block transferred (end-of- partition side). If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks read. If the fixed bit is zero, the information field shall be set to the requested transfer length minus the actual block length. The target shall not return CHECK CONDITION status when early-warning is encountered if the REW bit is zero or if the REW option is not supported. IMPLEMENTORS NOTE: A REW bit of one is not recommended for most system applications since read data may be present after early-warning. If the logical unit encounters end-of-data during a READ command, CHECK CONDITION status shall be returned, the sense key shall be set to BLANK CHECK, and the valid bit shall be set to one in the sense data. If end-of-data is encountered at or after early-warning, the EOM bit shall also be set to one. Upon termination, the logical position shall be after the last recorded logical block (end-of-partition side). If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks read. If the fixed bit is zero, the information field shall be set to the requested transfer length. If the logical unit encounters end-of-partition during a READ command, CHECK CONDITION status shall be returned, the sense key shall be set to MEDIUM ERROR, and the EOM and valid bits shall be set to one in the sense data. The medium position following this condition is not defined. If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks read. If the fixed bit is zero, the information field shall be set to the requested transfer length. 9.2.5. READ BLOCK LIMITS Command Table 9-6: READ BLOCK LIMITS Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (05h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The READ BLOCK LIMITS command (Table 9-6) requests that the logical unit's block length limits capability be returned. The READ BLOCK LIMITS data shown in Table 9-7 shall be returned during the DATA IN phase of the command. Table 9-7: READ BLOCK LIMITS Data ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Reserved | -----|-----------------------------------------------------------------------| 1 | (MSB) | -----|--- ---| 2 | Maximum Block Length Limit | -----|--- ---| 3 | (LSB) | -----|-----------------------------------------------------------------------| 4 | (MSB) | -----|--- Minimum Block Length Limit ---| 5 | (LSB) | ============================================================================== If the maximum block length limit equals the minimum block length limit, the logical unit supports the transfer of data in the fixed-block mode only, with the block length equal to the given limit. In this case the fixed bit shall be set to one in the WRITE and READ commands If the maximum block length limit is not equal to the minimum block length limit, the logical unit supports the transfer of data in either fixed-block or variable-block modes, with the block length constrained between the given limits in either mode. The transfer mode is controlled by the fixed bit in the WRITE or READ commands. If the maximum block limit is zero a maximum block length is not specified. 9.2.6. READ POSITION Command Table 9-8: READ POSITION Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (34h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | BT | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Reserved | -----|-----------------------------------------------------------------------| 6 | Reserved | -----|-----------------------------------------------------------------------| 7 | Reserved | -----|-----------------------------------------------------------------------| 8 | Reserved | -----|-----------------------------------------------------------------------| 9 | Control | ============================================================================== The READ POSITION command (Table 9-8) reports the current position of the logical unit and any data blocks in the buffer. No medium movement shall occur as a result of the command. A block address type (BT) bit of one requests the target to return its current first block location and last block location as a device-specific value. A BT bit of zero requests the target to return the first block location and the last block location as an SCSI logical block address (relative to a partition). If the logical unit is not capable of reporting block locations, the BPU bit shall be set to one in the returned data. Support for this option of the READ POSITION command is indicated by a BIS bit set to one in the device configuration page (9.3.3.1). The READ POSITION data shown in Table 9-9 shall be returned during the DATA IN phase of the command. Table 9-9: READ POSITION Data Format ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | BOP | EOP | Reserved | BPU | Reserved | -----|-----------------------------------------------------------------------| 1 | Partition Number | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | (MSB) | - - -|- - First Block Location - -| 7 | (LSB) | -----|-----------------------------------------------------------------------| 8 | (MSB) | - - -|- - Last Block Location - -| 11 | (LSB) | -----|-----------------------------------------------------------------------| 12 | Reserved | -----|-----------------------------------------------------------------------| 13 | (MSB) | - - -|- - Number of Blocks in Buffer - -| 15 | (LSB) | -----|-----------------------------------------------------------------------| 16 | (MSB) | - - -|- - Number of Bytes in Buffer - -| 19 | (LSB) | ============================================================================== A beginning of partition (BOP) bit of one indicates that the logical unit is at the beginning-of-partition in the current partition. A BOP bit of zero indicates that the current logical position is not at the beginning-of- partition. An end of partition (EOP) bit of one indicates that the logical unit is positioned between early-warning and end-of-partition in the current partition. An EOP bit of zero indicates that the current logical position is not between early-warning and end-of-partition. IMPLEMENTORS NOTE: The BOP and EOP indications are not necessarily a result of a physical tape marker (e.g., reflective marker). A block position unknown (BPU) bit of one indicates that the first and last block locations are not known or cannot be obtained. A BPU bit of zero indicates that the first and last block location fields contain valid position information. The partition number field reports the partition number for the current logical position. If the logical unit only supports one partition for the medium, this field shall be set to zero. The first block location field indicates the block address associated with the current logical position. The value shall indicate the block address of the next data block to be transferred between the initiator and the target if a READ or WRITE command is issued. The last block location field indicates the block address associated with the next block to be transferred from the buffer to the medium. The value shall indicate the block address of the next data block to be transferred between the buffer and the medium. If the buffer does not contain a whole block of data or is empty, the value reported for the last block location shall be equal to the value reported for the first block location. IMPLEMENTORS NOTE: The information provided by the first and last block location fields can be used in conjunction with the LOCATE command to position the medium at the appropriate logical block on another device in the case of unrecoverable errors on the first device. The number of blocks in buffer field indicates the number of data blocks in the target's buffer that have not been written to the medium. The number of bytes in buffer field indicates the total number of data bytes in the target's buffer that have not been written to the medium. 9.2.7. READ REVERSE Command Table 9-10: READ REVERSE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (0Fh) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | SILI | Fixed | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Transfer Length | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The READ REVERSE command (Table 9-10) requests that the target transfer one or more block(s) of data to the initiator beginning at the current position on the logical unit. The execution of this command is similar to the READ command except that medium motion is in the reverse direction. All block(s), and the byte(s) within the block(s), are transferred in the reverse order. The order of bits within each byte shall not be changed. Upon completion of a READ REVERSE command, the logical position shall be before the last block transferred (beginning-of-partition side). Refer to the READ command (9.2.4) for a description of the fixed bit, the SILI bit, the transfer length field, and any associated error conditions. Filemarks, setmarks, incorrect length blocks, and unrecovered read errors are handled the same as in the READ command, except that upon termination the logical position shall be before the filemark, setmark, incorrect length block, or unrecovered block (beginning-of-partition side). If the logical unit encounters beginning-of-partition during a READ REVERSE command, CHECK CONDITION status shall be returned and the EOM and valid bits shall be set to one in the sense data. The sense key shall be set to NO SENSE or RECOVERED ERROR, as appropriate. If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks transferred. If the fixed bit is zero, the information field shall be set to the requested transfer length. 9.2.8. RECOVER BUFFERED DATA Command Table 9-11: RECOVER BUFFERED DATA Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (14h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | SILI | Fixed | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Transfer Length | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The RECOVER BUFFERED DATA command (Table 9-11) is used to recover data that has been transferred to the target's buffer but has not been successfully written to the medium. It is normally used to recover from error or exception conditions that make it impossible to write the buffered data to the medium. One or more RECOVER BUFFERED DATA commands may be required to recover all unwritten buffered data. The execution of this command is similar to the READ command except that the data is transferred from the target's buffer instead of the medium. The order in which block(s) are transferred is defined by the RBO bit in the device configuration page (9.3.3.1). If the RBO bit is not implemented, block(s) are transferred in the same order they would have been transferred to the medium. Refer to the READ command (9.2.4) for a description of the fixed bit, the SILI bit, the transfer length field, and any associated error conditions. If the fixed bit is zero, no more than the requested transfer length shall be transferred to the initiator. If the requested transfer length is smaller than the actual length of the logical block to be recovered, only the requested transfer length shall be transferred to the initiator and the remaining data for the current logical block shall be discarded. IMPLEMENTORS NOTE: During recovery operations involving unknown block sizes, the initiator should select the maximum block length supported by the target to ensure that all buffered data will be transferred. If a buffered filemark is encountered during a RECOVER BUFFERED DATA command, CHECK CONDITION status shall be returned, the sense key shall be set to NO SENSE, and the filemark and valid bits shall be set to one in the sense data. Upon termination, the logical position shall be after the filemark. If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks transferred (not including the filemark). If the fixed bit is zero, the information field shall be set to the requested transfer length. If a buffered setmark is encountered during a RECOVER BUFFERED DATA command and the RSmk bit is set to one in the device configuration page (9.3.3.1), CHECK CONDITION status shall be returned and the filemark and valid bits shall be set to one in the sense data. The sense key shall be set to NO SENSE and the additional sense code shall be set to SETMARK DETECTED. Upon termination, the logical position shall be after the setmark. If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks transferred (not including the setmark). If the fixed bit is zero, the information field shall be set to the requested transfer length. The target shall not return CHECK CONDITION when a setmark is encountered if the RSmk bit is zero or if this option is not supported. If an attempt is made to recover more logical blocks of data than are contained in the target's buffer, CHECK CONDITION status shall be returned, the sense key shall be set to NO SENSE, and the EOM and valid bits shall be set to one in the sense data. If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks transferred. If the fixed bit is zero, the information field shall be set to the requested transfer length. 9.2.9. RELEASE UNIT Command Table 9-12: RELEASE UNIT Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (17h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | 3rdPty | Third Party Device ID |Reserved| -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The RESERVE UNIT and RELEASE UNIT commands provide the basic mechanism for contention resolution in multiple-initiator systems. The RELEASE UNIT command (Table 9-12) is used to release previously reserved logical units for the requesting initiator, or if it is a third-party release, to another specified SCSI device. If a valid reservation exists for the I_T_L nexus, the target shall release the reservation and return GOOD status. It is not an error to attempt to release a reservation that is not currently valid. In this case, the target shall return GOOD status without altering any other reservation. 9.2.9.1. Third-Party Release Third-party release allows an initiator to release a logical unit that was previously reserved using a third-party reservation (see 9.2.10.1). If the third party (3rdPty) bit is zero, then a third-party release is not requested. If the 3rdPty bit is one, and if the reservation was made using a third-party reservation by the initiator that is requesting the release for the same SCSI device as specified in the third-party device ID, then the target shall release the reservation. If the 3rdPty bit is one, the target 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 UNIT command. IMPLEMENTORS NOTE: When a target implements independent storage of mode parameters for each initiator, a third-party RESERVE UNIT command effects a transfer of the current mode parameters. Those set up by the initiator of the RESERVE UNIT are to be set as the mode parameters used for commands from the third-party device (usually a copy master device). A unit attention condition notifies the third-party device of the changed mode parameters. A successful third-party RELEASE UNIT command leaves the transferred parameters intact. The third-party device can issue MODE SENSE and MODE SELECT commands to query and modify the mode parameters. 9.2.10. RESERVE UNIT Command Table 9-13: RESERVE UNIT Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (16h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | 3rdPty | Third Party Device ID |Reserved| -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The RESERVE UNIT and RELEASE UNIT commands provide the basic mechanism for contention resolution in multiple-initiator systems. The RESERVE UNIT command (Table 9-13) is used to reserve logical units for the exclusive use of the requesting initiator, or if it is a third-party reservation, to another specified SCSI device. This command requests that the entire logical unit be reserved for the exclusive use of the initiator until the reservation is superseded by another valid RESERVE UNIT command from the initiator that made the reservation or until released by a RELEASE UNIT command from the same initiator that made the reservation, by a BUS DEVICE RESET message from any initiator, by a hard reset condition, or by a power on cycle. The reservation shall not be granted if the logical unit 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 logical unit is reserved for another initiator, the target shall return RESERVATION CONFLICT status. If, after honoring the reservation, any other initiator attempts to perform any command on the reserved logical unit other than an INQUIRY, REQUEST SENSE, ALLOW MEDIUM REMOVAL, RESERVE, or a RELEASE UNIT command, the command shall be rejected with RESERVATION CONFLICT status. 9.2.10.1. Third-Party Reservation Third-party reservation allows an initiator to reserve 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, a third-party reservation is not requested. If the 3rdPty bit is one the target shall reserve the logical unit for the SCSI device specified in the third-party device ID field. The target shall preserve the reservation until it is superseded by another valid RESERVE UNIT command from the initiator that made the reservation or until it is released by the same initiator, by a BUS DEVICE RESET message from any initiator, or a hard reset condition. The target shall ignore any attempt to release the reservation made by any other initiator. If independent sets of parameters are implemented, a third party reservation shall cause the target to transfer the set of parameters in effect for the initiator of the RESERVE command to the parameters used for commands from the third party device. Any subsequent command issued by the third-party device is executed according to the mode parameters in effect for the initiator that sent the RESERVE command. If independent sets of parameters are implemented, a third party reservation shall cause the target to transfer the set of parameters in effect for the initiator of the RESERVE command to the parameters used for commands from the third party device. Any subsequent command issued by the third-party device is executed according to the mode parameters in effect for the initiator that sent the RESERVE command. IMPLEMENTORS NOTE: This transfer of the mode parameters is applicable to target devices which store mode information independently for different initiators. This mechanism allows an initiator 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. 9.2.10.2. Superseding Reservations An initiator that currently has a logical unit reserved may modify the current reservation by issuing another RESERVE UNIT command to the same logical unit. The superseding reservation shall release the current reservation if the superseding reservation request is granted. 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 current reservation), then the target shall return RESERVATION CONFLICT status. IMPLEMENTORS NOTE: 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. 9.2.11. REWIND Command Table 9-14: REWIND Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (01h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | Immed | -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The REWIND command (Table 9-14) causes the target to position the logical unit to the beginning-of-partition in the current partition. Prior to performing the rewind operation, the target shall ensure that all buffered data, filemarks, and setmarks have been transferred to the medium. An immediate (Immed) bit of zero indicates that the target shall not return status until the rewind operation has completed. An Immed bit of one indicates that the target shall return status as soon as all buffered commands have completed execution and the command descriptor block of the REWIND command has been validated. If CHECK CONDITION status is returned for a REWIND command with an Immed bit of one, the rewind operation shall not be performed. IMPLEMENTORS NOTE: For compatibility with devices implemented prior to this standard, it is suggested that a WRITE FILEMARKS command with an Immed bit of zero be used to ensure that all buffered data, filemarks, or setmarks have been transferred to the medium before issuing a REWIND command with an Immed bit of one. When operating in buffered mode 1h or 2h (see 9.3.3), the target shall discard any unwritten buffered data after the REWIND command is validated if the previous command was terminated with CHECK CONDITION status and the device is unable to continue successfully writing. 9.2.12. SPACE Command Table 9-15: SPACE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation (11h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | Code | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Count | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The SPACE command (Table 9-15) provides a variety of positioning functions that are determined by the code and count. Both forward and reverse positioning are provided, although some targets may only support a subset of this command. If an initiator requests an unsupported function, the command shall be terminated with CHECK CONDITION status and the sense key shall be set to ILLEGAL REQUEST. The code is defined as follows: Code Description Support --------- -------------------- --------- 000b Blocks Mandatory 001b Filemarks Mandatory 010b Sequential Filemarks Optional 011b End-of-Data Optional 100b Setmarks Optional 101b Sequential Setmarks Optional 110b-111b Reserved When spacing over blocks, filemarks, or setmarks, the count field specifies the number of blocks, filemarks, or setmarks to be spaced over in the current partition. A positive value N in the count field shall cause forward positioning (toward end-of-partition) over N blocks, filemarks, or setmarks ending on the end-of-partition side of the last block, filemark, or setmark. A zero value in the count field shall cause no change of logical position. A negative value -N (two's complement notation) in the count field shall cause reverse positioning (toward beginning-of-partition) over N blocks, filemarks, or setmarks ending on the beginning-of-partition side of the last block, filemark, or setmark. Support of spacing in the reverse direction is optional. If a filemark is encountered while spacing over blocks, the command shall be terminated. The logical position shall be on the end-of-partition side of the filemark if movement was in the forward direction and on the beginning-of- partition side of the filemark if movement was in the reverse direction. CHECK CONDITION status shall be returned to the initiator, the sense key shall be set to NO SENSE, and the filemark and valid bits shall be set to one in the sense data. The information field shall be set to the requested count minus the actual number of blocks spaced over (not including the filemark). If a setmark is encountered while spacing over blocks or filemarks and the RSmk bit is set to one in the device configuration page (9.3.3.1), the command shall be terminated, CHECK CONDITION status shall be returned to the initiator, and the filemark and valid bits shall be set to one in the sense data. The sense key shall be set to NO SENSE and the additional sense code shall be set to SETMARK DETECTED. The information field shall be set to the requested count minus the actual number of blocks or filemarks spaced over (not including the setmark). The logical position shall be on the end-of- partition side of the setmark if movement was in the forward direction and on the beginning-of-partition side of the setmark if movement was in the reverse direction. The target shall not return CHECK CONDITION status when a setmark is encountered if the RSmk bit is set to zero or if this option is not supported. If early-warning is encountered while spacing over blocks, filemarks, or setmarks and the REW bit is set to one in the device configuration page (9.3.3.1), CHECK CONDITION status shall be returned, the sense key shall be set to NO SENSE, and the EOM and valid bits shall be set to one in the sense data. The information field shall be set to the requested count minus the actual number of blocks, filemarks, or setmarks spaced over as defined by the code value. If the REW bit is zero or the option is not supported by the target, the target shall not report CHECK CONDITION status at the early- warning point. IMPLEMENTORS NOTE: Setting the REW bit is not recommended for most system applications since data may be present after early-warning. If end-of-data is encountered while spacing over blocks, filemarks, or setmarks, CHECK CONDITION status shall be returned, the sense key shall be set to BLANK CHECK, and the valid bit shall be set to one in the sense data. Additionally, the EOM bit shall be set to one if end-of-data is encountered at or after early-warning. The information field shall be set to the requested count minus the actual number of blocks, filemarks, or setmarks spaced over as defined by the code value. If the end-of-partition is encountered while spacing forward over blocks, filemarks, or setmarks, CHECK CONDITION status shall be returned, the sense key shall be set to MEDIUM ERROR, the EOM bit shall be set to one, and the valid bit shall be set to one. The information field shall be set to the requested count minus the actual number of blocks, filemarks, or setmarks spaced over as defined by the code value. If beginning-of-partition is encountered while spacing over blocks, filemarks, or setmarks in the reverse direction, the target shall return CHECK CONDITION status and shall set the sense key to NO SENSE. The EOM and valid bits shall be set to one, and the information field set to the total number of blocks, filemarks, or setmarks not spaced over (the requested number of blocks, filemarks, or setmarks minus the actual number of blocks, filemarks, or setmarks spaced over). When spacing over sequential filemarks (or setmarks), the count field is interpreted as follows: (1) A positive value N shall cause forward movement to the first occurrence of N or more consecutive filemarks (or setmarks) being logically positioned after the Nth filemark (or setmark). (2) A zero value shall cause no change in the logical position. (3) A negative value -N (2's complement notation) shall cause reverse movement to the first occurrence of N or more consecutive filemarks (or setmarks) being logically positioned on the beginning-of-partition side of the Nth filemark (or setmark). If a setmark is encountered while spacing to sequential filemarks and the RSmk bit is set to one in the device configuration page (9.3.3.1), CHECK CONDITION status shall be returned, the filemark bit shall be set to one, and the valid bit shall be set to zero. The sense key shall be set to NO SENSE and the additional sense code shall be set to SETMARK DETECTED. The target shall not return CHECK CONDITION status when a setmark is encountered if the RSmk bit is set to zero or if this option is not supported. If end-of-partition is encountered while spacing to sequential filemarks or setmarks, CHECK CONDITION status shall be returned, the sense key shall be set to MEDIUM ERROR, the EOM bit shall be set to one, and the valid bit shall be set to zero. If end-of-data is encountered while spacing to sequential filemarks or setmarks, CHECK CONDITION status shall be returned, the sense key shall be set to BLANK CHECK, and the valid bit shall be set to zero. Additionally, the EOM bit shall be set to one if end-of-data is encountered at or after early- warning. When spacing to end-of-data, the count field is ignored. Upon successful completion, the medium shall be positioned such that a subsequent write operation would append to the last logically recorded information. If end-of-partition is encountered while spacing to end-of-data, CHECK CONDITION status shall be returned, the sense key shall be set to MEDIUM ERROR, the EOM bit shall be set to one, and the valid bit shall be set to zero. 9.2.13. VERIFY Command Table 9-16: VERIFY Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (13h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | Immed | BytCmp | Fixed | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Verification Length | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The VERIFY command (Table 9-16) requests that the target verify one or more block(s) beginning with the next block on the logical unit. An immediate (Immed) bit of zero indicates that the command shall not return status until the verify operation has completed. An Immed bit of one indicates that status shall be returned as soon as the command descriptor block has been validated (but after the data transfer from the initiator, if the BytCmp bit is one). IMPLEMENTORS NOTE: In order to ensure that no errors are lost, the initiator should set the Immed bit to zero on the last VERIFY command when issuing a series of VERIFY commands. A byte compare (BytCmp) bit of zero indicates that the verification shall be simply a medium verification (e.g., CRC, ECC). No data shall be transferred between the initiator and target. A BytCmp bit of one indicates that the target shall perform a byte-by-byte compare of the data on the medium and the data transferred from the initiator during the DATA OUT phase of the VERIFY command. Data shall be transferred from the initiator to the target as in a WRITE command. If the BytCmp bit is one and the byte compare option is not supported, the target shall terminate the command with CHECK CONDITION status and the sense key shall be set to ILLEGAL REQUEST. The verification length specifies the amount of data to verify, in blocks or bytes, as indicated by the fixed bit. Refer to the READ command (9.2.4) for a description of the fixed bit and any associated error conditions. When the verification length is zero, no data shall be verified and the current logical position shall not be changed. This condition shall not be considered as an error. The VERIFY command shall terminate when the verification length has been satisfied, when an incorrect length block is encountered, when a filemark is encountered, when a setmark is encountered (if the RSmk bit is one in the device configuration page, 9.3.3.1), when end-of-data is encountered, when the end-of-partition is encountered, when early-warning is encountered (if the REW bit is one in the device configuration page, 9.3.3.1), or when an unrecoverable read error is encountered. The status and sense data for each of these conditions are handled in the same manner as in the READ command (9.2.4). Upon successful completion of a VERIFY command, the logical position shall be after the last block verified. If the data does not compare (BytCmp bit of one), the command shall terminate with CHECK CONDITION status, the valid bit shall be set to one, and the sense key shall be set to MISCOMPARE. If the fixed bit is one, the information field shall be set to the requested verification length minus the actual number of blocks successfully verified. If the fixed bit is zero, the information field shall be set to the requested verification length minus the actual number of bytes successfully verified. This number may be larger than the requested verification length if the error occurred on a previous VERIFY command with an Immed bit of one. Upon termination, the medium shall be positioned after the block containing the miscompare (end-of-partition side). 9.2.14. WRITE Command Table 9-17: WRITE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (0Ah) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | Fixed | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Transfer Length | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The WRITE command (Table 9-17) requests that the target write the data that is transferred from the initiator to the current position on the logical unit. The fixed bit specifies whether fixed-length or variable-length blocks are to be transferred. See the READ BLOCK LIMITS command (9.2.5) for additional information about fixed and variable block mode. If the fixed bit is one, the transfer length specifies the number of fixed- length blocks to be transferred, using the current block length reported in the mode parameter block descriptor (7.3.3). If the fixed bit is zero, a single block is transferred with the transfer length specifying the block length in bytes. If the transfer length is zero, no data shall be transferred and the current position on the logical unit shall not be changed. This condition shall not be considered an error. A WRITE command may be buffered or unbuffered, as indicated by the buffered mode field of the mode parameter header (9.3.3). For unbuffered operation (buffered mode 0h), the target shall not return GOOD status until all data block(s) are successfully written to the medium. For buffered operation (buffered mode 1h or 2h), the target may return GOOD status as soon as all data block(s) are successfully transferred to the target's buffer. IMPLEMENTORS NOTE: For compatibility with devices implemented prior to this version of the standard, a WRITE FILEMARKS command with the Immed bit set to zero should be issued when completing a buffered write operation to ensure that all buffered data, filemarks, and setmarks are written to the medium. If the logical unit encounters early-warning during a WRITE command, an attempt to finish writing any data may be made, as determined by the current settings of the REW and SEW bits in the device configuration page (9.3.3.1). The command shall terminate with CHECK CONDITION status and the EOM and valid bits shall be set to one in the sense data. If all data that is to be written is successfully transferred to the medium, the sense key shall be set to NO SENSE or RECOVERED ERROR, as appropriate. If any data that is to be written cannot be transferred to the medium when early-warning is encountered, the sense key shall be set to VOLUME OVERFLOW. The information field shall be defined as follows: (1) If unbuffered mode is reported in the mode parameter header and the fixed bit is set to one, the information field shall be set to the requested transfer length minus the actual number of blocks written. (2) If unbuffered mode is reported and the fixed bit is set to zero, the information field shall be set to the requested transfer length. (3) If buffered mode is reported in the mode parameter header and the fixed bit is set to one, the information field shall be set to the total number of blocks, filemarks, and setmarks not written (the number of blocks not transferred from the initiator plus the number of blocks, filemarks, and setmarks remaining in the target's buffer). Note that the value in the information field may exceed the transfer length. (4) If buffered mode is reported and the fixed bit is set to zero, the information field shall be set to the total number of bytes, filemarks, and setmarks not written (the number of bytes not transferred from the initiator plus the number of bytes, filemarks, and setmarks remaining in the target's buffer). Note that the value in the information field may exceed the transfer length. IMPLEMENTORS NOTE: The target should ensure that some additional data can be written to the medium (e.g., labels, filemarks, or setmarks) after the first early-warning indication has been returned to the initiator. If a WRITE command is received while the logical unit is positioned between early-warning and end-of-partition, the target shall return CHECK CONDITION status after attempting to perform the command. The EOM and valid bits shall be set to one in the sense data. If all data that is to be written is successfully transferred to the medium, the information field shall be set to zero. If any data that is to be written is not transferred to the medium prior to encountering end-of-partition, the sense key shall be set to VOLUME OVERFLOW and the information field shall be defined as follows: (1) If the fixed bit is one, the information field shall be set to the requested transfer length minus the actual number of blocks written to the medium. (2) If the fixed bit is zero, the information field shall be set to the requested transfer length. IMPLEMENTORS NOTE: In some systems it is important to recognize an error if end-of-partition is encountered during execution of a WRITE command, without regard for whether all data that is to be written is successfully transferred to the medium. By its definition, the VOLUME OVERFLOW sense key may always validly be returned if end-of-partition is encountered while writing, and such usage is recommended. Reporting the MEDIUM ERROR sense key, as was done in some SCSI-1 implementations, may cause confusion as to whether there was really defective medium encountered during execution of the last write command. 9.2.15. WRITE FILEMARKS Command Table 9-18: WRITE FILEMARKS Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (10h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | Reserved | WSmk | Immed | -----|-----------------------------------------------------------------------| 2 | (MSB) | -----|--- ---| 3 | Transfer Length | -----|--- ---| 4 | (LSB) | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The WRITE FILEMARKS command (Table 9-18) requests that the target write the specified number of filemarks or setmarks to the current position on the logical unit. If the Write Setmark (WSmk) bit is one, the transfer length specifies the number of setmarks to be written. If the WSmk bit is zero, the transfer length specifies the number of filemarks to be written. An immediate (Immed) bit of one indicates that the target shall return status as soon as the command descriptor block has been validated. An Immed bit of one is only valid if buffered mode is reported in the mode parameter header (9.3.3). An Immed bit of zero indicates that the target shall not return status until the write operation has completed. Any buffered data, filemarks, and setmarks shall be written to the medium prior to completing the command. IMPLEMENTORS NOTE: Upon completion of any buffered write operation, the initiator can issue a WRITE FILEMARKS command with the Immed bit set to zero and the transfer length field set to zero to ensure that all buffered data, filemarks, and setmarks are successfully written to the medium. If the logical unit encounters early-warning during a WRITE FILEMARKS command, an attempt to finish writing any buffered data, filemarks, or setmarks may be made, as determined by the current settings of the REW and SEW bits in the device configuration page (9.3.3.1). The command shall terminate with CHECK CONDITION status and the EOM and valid bits shall be set to one in the sense data. If all buffered data, filemarks, and setmarks are successfully transferred to the medium, the sense key shall be set to NO SENSE or RECOVERED ERROR, as appropriate. If any buffered data, filemarks, or setmarks to be written are not transferred to the medium when early-warning is encountered, the sense key shall be set to VOLUME OVERFLOW. The information field shall be defined as follows: (1) If unbuffered mode is reported in the mode parameter header, the information field shall be set to the requested transfer length minus the actual number of filemarks or setmarks written. (2) If buffered mode is reported in the mode parameter header and the buffered data was written in variable block mode (see 9.2.14), the information field shall be set to the total number of bytes, filemarks, and setmarks not written (the number of filemarks or setmarks not transferred from the initiator plus the number of bytes, filemarks and setmarks remaining in the target's buffer). Note that it is possible for the value in the information field to exceed the transfer length. (3) If buffered mode is reported and the buffered data was written in fixed block mode (see 9.2.14), the information field shall be set to the total number of blocks, filemarks, and setmarks not written (the number filemarks or setmarks not transferred from the initiator plus the number of blocks, filemarks, and setmarks remaining in the target's buffer). Note that it is possible for the value in the information field to exceed the transfer length. IMPLEMENTORS NOTE: The target should ensure that some additional data can be written to the medium (e.g., labels, filemarks, or setmarks) after the first early-warning indication has been returned to the initiator. If a WRITE FILEMARKS command is received while the logical unit is positioned between early-warning and end-of-partition, the target shall return CHECK CONDITION status after attempting to perform the command. The EOM and valid bits shall be set to one in the sense data. If all filemarks or setmarks to be written are successfully transferred to the medium, the information field shall be set to zero. If any filemarks or setmarks to be written are not transferred to the medium prior to encountering end-of- partition, the sense key shall be set to VOLUME OVERFLOW and the information field shall be set to the requested transfer length minus the actual number of filemarks or setmarks written to the medium. 9.3. Parameters for Sequential-Access Devices 9.3.1. Diagnostic Parameters This section defines the descriptors and pages for diagnostic parameters used with sequential-access devices. The diagnostic page codes for sequential-access devices are defined in Table 9-19. Table 9-19: Diagnostic Page Codes ============================================================================== Page Code Description Section ------------------------------------------------------------------------------ 00h Supported Diagnostic Pages 7.3.1.1 01h - 3Fh Reserved (for all device type pages) 40h - 7Fh Reserved 80h - FFh Vendor-specific pages ============================================================================== 9.3.2. Log Parameters This section defines the descriptors and pages for log parameters used with sequential-access devices. The log page codes for sequential-access devices are defined in Table 9-20. Table 9-20: Log Page Codes ============================================================================== Page Code Description Section ------------------------------------------------------------------------------ 01h Buffer Over-Run/Under-Run Page 7.3.2.1 02h Error Counter Page (Write) Page 7.3.2.2 03h Error Counter Page (Read) Page 7.3.2.2 04h Error Counter Page (Read Reverse) Page 7.3.2.2 05h Error Counter Page (Verify) Page 7.3.2.2 07h Last n Error Events Page 7.3.2.3 06h Non-Media Error Page 7.3.2.4 00h Supported Log Pages 7.3.2.5 08h - 2Fh Reserved 3Fh Reserved 30h - 3Eh Vendor Specific ============================================================================== 9.3.3. Mode Parameters This section defines the descriptors and pages for mode parameters used with sequential-access devices. The mode parameter list, including the mode parameter header and mode block descriptor, are described in 7.3.3. The medium-type code field in the mode parameter header is reserved for sequential-access devices. The device-specific parameter byte of the mode parameter header (see Tables 7-61 and 7-62) is defined in Table 9-21 for sequential-access devices. Table 9-21: Device-Specific Parameter ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ============================================================================== | WP | Buffered Mode | Speed | ============================================================================== For the MODE SENSE command, a write protect (WP) bit of zero indicates that the medium is write enabled. A WP bit of one indicates that the medium is write protected. For the MODE SELECT command, this field is ignored. Values for the buffered mode field are defined as follows: 0h The target shall not report GOOD status on write commands until the data blocks are actually written on the medium. 1h The target may report GOOD status on write commands as soon as all the data specified in the write command has been transferred to the target's buffer. One or more blocks may be buffered prior to writing the block(s) to the medium. 2h The target may report GOOD status on write commands as soon as: (1) All the data specified in the write command has been successfully transferred to the target's buffer, and (2) All buffered data from different initiators has been successfully written to the medium. 3h - 7h Reserved Values for the speed field shall be assigned as follows: 0h Default (Use the peripheral device's default speed). 1h Use the peripheral device's lowest speed. 2h - Fh Use increasing peripheral device speeds. For the MODE SELECT command, the density code field of the sequential-access device block descriptor (7.3.3) indicates the density selected by the initiator for use in subsequent read and write operations. For devices capable of automatic density recognition, the density code selected by the initiator may be overridden by the target for a subsequent read operation if the selected value does not match the current recorded density of the medium. If the MODE SELECT command specifies the default density code the device selects the actual density code to be used in a vendor specific manner. The value is expected to be the principal density code (or an optimal density code). For the MODE SENSE command, the density code field reflects the current operating density of the device. If a current operating density has not been selected, either because no medium is installed or because the density of the installed medium has not been determined, the density code field should be set to the principal density code value. The principal density code is the highest density code supported, the optimal density code supported, or the most common density code supported. In some devices, the principal density code value returned in response to a MODE SENSE command may change dynamically to match the most recently selected density. The density code value returned in response to a MODE SENSE command shall be as described below: (1) Following a UNIT ATTENTION condition for a power on or hard reset condition, while not ready, the target shall report the principal density. (2) Following a UNIT ATTENTION condition for a not-ready-to-ready transition, the target shall: (a) report the principal density if no attempt has been made by the target to determine the density. (b) report the principal density if the target cannot automatically determine the density from the medium. (c) report the current medium density if the target can determine the density from the medium. (3) Following a successful read operation at or after beginning-of-medium, the target shall report a density code value reflecting the recorded density of the medium. For some implementations, the target may automatically determine this value from the medium. For devices not capable of automatic density determination, the principal density is reported if the density code value is not provided by the preceding MODE SELECT command. (4) Following an unsuccessful read operation or a successful write operation, while at beginning-of-partition, the target shall: (a) report a density code value as described for item (2) if a previous MODE SELECT command has not established a density code for the currently mounted volume. (b) report a density code value as provided by the last successful MODE SELECT command for the currently mounted volume. (5) Following a successful unload operation the target shall report the most recent density code value as determined by items (2) through (4) above. Table 9-22 lists the sequential-access device density codes Table 9-22: Sequential-Access Density Codes ============================================================================== Code Value Density ---------- ------------------------------------------------------------------ 00h Default density (MODE SELECT command only) Magnetic Tapes Width Density mm (Inch) Tracks bpmm bpi Code Type Reference Note ---------- ------ ------------ ---- ---- ------------ ---- 01h 12.7 (0.5) 9 32 (800) NRZI R X3.22-1983 2 02h 12.7 (0.5) 9 63 (1600) PE R X3.39-1986 2 03h 12.7 (0.5) 9 246 (6250) GCR R X3.54-1986 2 04h 6.3 (0.25) 4/9 315 (8000) GCR C X3.136-1986 1,3 05h 6.3 (0.25) 4/9 315 (8000) GCR C X3.136-1986 1 06h 12.7 (0.5) 9 126 (3200) PE R X3.157-1987 2,4 07h 6.3 (0.25) 4 252 (6400) IMFM C X3.116-1986 1 08h 3.81 (0.15) 4 315 (8000) GCR CS X3.158-1987 1,4 09h 12.7 (0.5) 18 1491 (37871) GCR C X3B5/87-099 2,4 0Ah 12.7 (0.5) 22 262 (6667) MFM C X3B5/86-199 1,4 0Bh 6.3 (0.25) 4 63 (1600) PE C X3.56-1986 1 0Ch 12.7 (0.5) 24 500 (12690) GCR C HI-TC1 1,6 0Dh 12.7 (0.5) 24 999 (25380) GCR C HI-TC2 1,6 0Eh Reserved for ECMA 0Fh 6.3 (0.25) 15 394 (10000) GCR C QIC-120 1,6 10h 6.3 (0.25) 18 394 (10000) GCR C QIC-150 1,6 11h 6.3 (0.25) 26 630 (16000) GCR C QIC-320 1,6 12h 6.3 (0.25) 30 2034 (51667) RLL C QIC-1350 1,6 13h 3.81 (0.15) 1 2400 (61000) DDS CS X3B5/88-185A 5 14h 8.00 (0.315) 1 2126 (54000) CS X3B5/88-036 5 15h - 7Eh Reserved 7Fh No change from previous density (NO-OP) 7 80h - FFh Vendor unique ============================================================================== Key: Code Type -------------------------------------------- ----------------------- NRZI Non Return to Zero, change on ones R Reel-to-Reel GCR Group Code Recording C Cartridge PE Phase Encoded CS Cassette IMFM Inverted Modified Frequency Modulation MFM Modified Frequency Modulation DDS DAT Data Storage RLL Run Length Limited NOTES: (1) Serial Recorded. (2) Parallel Recorded. (3) Old format known as QIC-11. (4) See Appendix D for additional standards information. (5) Helical Scan (6) This is not an American National Standard. The reference is based on an industry standard definition of the media format. (7) This density code value is defined for the MODE SELECT command and shall not be returned by the MODE SENSE command. The mode page codes for sequential-access devices are defined in Table 9-23. Table 9-23: Mode Page Codes ============================================================================== Page Code Description Section ------------------------------------------------------------------------------ 0Ah Control Mode Page 7.3.3.1 10h Device Configuration Page 9.3.3.1 02h Disconnect-Reconnect Page 7.3.3.2 11h Medium Partition Page(1) 9.3.3.2 12h Medium Partition Page(2) 9.3.3.3 13h Medium Partition Page(3) 9.3.3.3 14h Medium Partition Page(4) 9.3.3.3 09h Peripheral Device Page 7.3.3.3 01h Read-Write Error Recovery Page 9.3.3.4 00h Vendor specific (does not require page format) 7.3.3 03h - 08h Reserved 0Bh - 10h Reserved 15h - 3Eh Vendor Specific (page format required) 3Fh Returns all pages (valid only for the MODE SENSE command) ============================================================================== 9.3.3.1. Device Configuration Page Table 9-24: Device Configuration Page ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | PS |Reserved| Page Code (10h) | -----|-----------------------------------------------------------------------| 1 | Page Length (0Eh) | -----|-----------------------------------------------------------------------| 2 |Reserved| CAP | CAF | Active Format | -----|-----------------------------------------------------------------------| 3 | Active Partition | -----|-----------------------------------------------------------------------| 4 | Write Buffer Full Ratio | -----|-----------------------------------------------------------------------| 5 | Read Buffer Empty Ratio | -----|-----------------------------------------------------------------------| 6 | (MSB) | -----|--- Write Delay Time ---| 7 | (LSB) | -----|-----------------------------------------------------------------------| 8 | DBR | BIS | RSmk | AVC | SOCF | RBO | REW | -----|-----------------------------------------------------------------------| 9 | Gap Size | -----|-----------------------------------------------------------------------| 10 | EOD Defined | EEG | SEW | Reserved | -----|-----------------------------------------------------------------------| 11 | (MSB) | -----|--- ---| 12 | Buffer Size at Early Warning | -----|--- ---| 13 | (LSB) | -----|-----------------------------------------------------------------------| 14 | Select Data Compression Algorithm | -----|-----------------------------------------------------------------------| 15 | Reserved | ============================================================================== This page (Table 9-24) is used to specify the appropriate sequential-access device configuration. A change active partition (CAP) bit of one indicates that the logical partition is to be changed to the one specified by the active partition field. A CAP bit of zero indicates no partition change is specified. A change active format (CAF) bit of one indicates that the active format is to be changed to the value specified in the active format field. A CAF bit of zero indicates no active format change is specified. For some devices, the format may only be changed when the logical unit is at beginning-of-partition. The active format field indicates which recording format is in use for the selected density code when reading or writing data on a logical unit. The value of the active format field is vendor specific. The active partition field indicates the current logical partition number in use on the medium. The write buffer full ratio, on WRITE commands, indicates to the target how full the buffer shall be before writing data to the medium. A value of zero indicates that the value is not specified. The read buffer empty ratio, on READ commands, indicates to the target how empty the buffer shall be before retrieving additional data from the medium. A value of zero indicates that the value is not specified. The write delay time indicates the maximum time, in 100 millisecond increments, that the target should wait before any buffered data that is to be written, is forced to the medium after the last buffered WRITE command that did not cause the buffer to exceed the buffer full ratio. A value of zero indicates that the target shall never force buffered data to the medium under these conditions. A data buffer recovery (DBR) bit of one indicates that the target supports data buffer recovery using the RECOVER BUFFERED DATA command. A DBR bit of zero indicates that the target does not support data buffer recovery. This bit is target-defined. A block identifiers supported (BIS) bit of zero indicates that block IDs are not supported in the format written on the medium. A BIS bit of one indicates that the format on the medium has recorded information about the block IDs relative to a partition. This bit is target-defined. A report setmarks (RSmk) bit of one indicates that the target shall recognize and report setmarks during appropriate read or space operations. A RSmk bit of zero indicates that the target shall not report setmarks. The automatic velocity control (AVC) bit of one, indicates that the device shall select the speed (if the device supports more than one speed) based on the data transfer rate that should optimize streaming activity and minimize medium repositioning. An AVC bit of zero indicates the speed chosen should be the device's default speed. A stop on consecutive filemarks (SOCF) field of 00b indicates that the device shall pre-read data from the medium in buffered mode to the limits of the buffer capacity without regard for filemarks. This implies that the device can differentiate between data blocks and filemarks in the buffer. Values 01b, 10b, and 11b specify that the device shall terminate the pre-read operation if 1, 2, or 3 consecutive filemarks are detected, respectively. If the RSmk bit is one, the target shall interpret this field as stop on consecutive setmarks. A recover buffer order (RBO) bit of one indicates that data blocks shall be returned from the target's buffer on a RECOVERED BUFFERED DATA command in LIFO order (last-in-first-out) from which they were written to the buffer. A RBO bit of zero indicates data blocks shall be returned in FIFO (first-in-first- out) order. A report early-warning (REW) bit of zero indicates that the target shall not report the early-warning condition for read operations and it shall report early-warning at or before any medium-defined early-warning position during write operations. A REW bit of one indicates that the target shall return CHECK CONDITION status with the EOM bit set in the sense data when the early-warning position is encountered during read and write operations. If the REW bit is one and the SEW bit is zero, the target shall return CHECK CONDITION status with the sense key set to VOLUME OVERFLOW when early-warning is encountered during write operations. IMPLEMENTORS NOTE: A REW bit of one is intended for compatibility with those systems using old tape formats that require an early-warning indication during read operations. Other systems should set this bit to zero to avoid potential data loss when interchanging tapes between peripheral devices. The GapSize field value determines the size of the inter-block gap when writing data. A value of 00h specifies the device's defined gap size. A value of 01h specifies a device defined gap size sufficiently long to support update-in-place. Values of 02h through 0Fh are multipliers on the device's defined gap size. Values 10h through 7Fh are reserved. Values 80h through FFh are vendor specific. The end-of-data (EOD) defined field indicates which format type the logical unit shall use to detect and generate the EOD area. The types of EOD formats are specified below: Value Description --------- ----------------------------------------------- 000b Logical unit's default EOD definition 001b Format-defined erased area of medium 010b As specified in the SOCF field 011b EOD recognition and generation is not supported 100b-111b Reserved An enable EOD generation (EEG) bit set to one indicates that the logical unit shall generate the appropriate EOD area, as determined by the EOD defined field. A value of zero indicates that EOD generation is disabled. IMPLEMENTORS NOTE: Some logical units may not generate EOD at the completion of any write-type operation. The synchronize at early-warning (SEW) bit set to one indicates that the target shall cause any buffered write data, filemarks, or setmarks to be transferred to the medium when early-warning is encountered. A value of zero indicates that the target shall retain any unwritten buffered data, filemarks, or setmarks in the buffer when early-warning is encountered (see the WRITE command, 9.2.14, and the WRITE FILEMARKS command, 9.2.15). The buffer size at early-warning field indicates the value, in bytes, to which the target shall reduce its logical buffer size when writing. The target should reduce the buffer size only when the logical unit is positioned between its early-warning and end-of-partition. A value of zero indicates that the implementation of this function is device specific. NOTE: The intent is to prevent the loss of data by limiting the size of the buffer when near the end-of-partition. The select data compression algorithm field set to 00h indicates that the target shall not use a compression algorithm on any data sent to it prior to writing the data to the medium. A value of 01h indicates that the data to be written shall be compressed using the target's default compression algorithm. Values 02h through 7Fh are reserved. Values 80h through FFh are vendor specific. 9.3.3.2. Medium Partition Page(1) Table 9-25: Medium Partition Page(1) ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | PS |Reserved| Page Code (11h) | -----|-----------------------------------------------------------------------| 1 | Page Length (n-1) | -----|-----------------------------------------------------------------------| 2 | Maximum Additional Partitions | -----|-----------------------------------------------------------------------| 3 | Additional Partitions Defined | -----|-----------------------------------------------------------------------| 4 | FDP | SDP | IDP | PSUM | Reserved | -----|-----------------------------------------------------------------------| 5 | Medium Format Recognition | -----|-----------------------------------------------------------------------| 6 | Reserved | -----|-----------------------------------------------------------------------| 7 | Reserved | ============================================================================== 8 - n| Partition Size Descriptor(s) | ============================================================================== 0 | (MSB) | -----|--- Partition Size ---| 1 | (LSB) | ============================================================================== This page (Table 9-25) is used to specify the first group of medium partitions. Additional groups are specified in medium partition pages(2-4). The maximum additional partitions field is a target-defined value indicating the maximum number of additional partitions supported by the logical unit. A value of zero indicates that no value is specified. The additional partitions defined field specifies the number of additional partitions to be defined for a volume when the SDP or IDP bit is set to one. The maximum value allowed is the value returned in the maximum additional partitions field. A fixed data partitions (FDP) bit of one indicates that the device assigns partitions based on its fixed definition of partitions. Setting this bit to one may only be valid at beginning-of-partition and is mutually exclusive with the SDP and IDP bits. A select data partitions (SDP) bit of one indicates that the device is to partition the medium into the the number of partitions as specified by the additional partitions defined field using partition sizes defined by the device. Setting this bit to one may only be valid at beginning-of-partition and it is mutually exclusive with the FDP and IDP fields. An initiator-defined partitions (IDP) bit of one indicates that the initiator is defining the number and size of the data partitions using the additional partitions defined field and the partition size descriptors. Setting this bit to one may only be valid at beginning-of-partition and is mutually exclusive with the FDP and SDP fields. IMPLEMENTORS NOTE: Since defining partitions may require re-formatting the medium for some implementations, an implicit write to the medium may occur as a result of a MODE SELECT command that supplies any of these parameters. Partition size unit of measure (PSUM) field defines the units in which the partition size descriptors select the partition size. The values 00b, 01b, and 10b define the units as bytes, kilobytes, and megabytes, respectively. The value 11b is reserved. The medium format recognition field is a target-defined value indicating the device's capability to automatically identify the medium format and partition information when reading an unknown volume. Values for the medium format recognition field shall be assigned as follows: 00h Logical unit is incapable of format or partition recognition. 01h Logical unit is capable of format recognition only. 02h Logical unit is capable of partition recognition only. 03h Logical unit is capable of format and partition recognition. 04h-FFh Reserved. IMPLEMENTORS NOTE: If a target indicates that it is not capable of medium format recognition, the initiator must supply all necessary parameters for the device to identify the specific format. The value in this field may be different following a medium change. Partition size descriptors define the size of the respective partitions in the units specified in the PSUM field. Up to 64 partitions may be defined using this page. If additional partitions need to be defined, up to 64 partitions can be defined in each of the medium partition pages(2-4) defined in 9.3.3.3. 9.3.3.3. Medium Partition Page(2-4) Table 9-26: Medium Partition Page(2-4) ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | PS |Reserved| Page Code (p) | -----|-----------------------------------------------------------------------| 1 | Page Length (n-1) | ============================================================================== 2 - n| Partition Size Descriptor(s) | ============================================================================== 0 | (MSB) | -----|--- Partition Size ---| 1 | (LSB) | ============================================================================== The medium partition pages (Table 9-26) are used to specify additional groups of medium partitions. The first group is specified in the medium partition page(1) (see 9.3.3.2). The additional page codes (p) defined for partition size definition are 12h, 13h, and 14h. Up to a maximum of 64 partitions can be defined in each of these pages. The partition size is defined by the value of the partition size field. The units of size used by the partition size field is specified in the PSUM field of the medium partition page(1) (9.3.3.2). IMPLEMENTORS NOTE: Since defining partitions may require re-formatting the medium for some implementations, an implicit write to the medium may occur as a result of a MODE SELECT command that supplies these parameters. 9.3.3.4. Read-Write Error Recovery Page Table 9-27: Read-Write Error Recovery Page ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | PS |Reserved| Page Code (01h) | -----|-----------------------------------------------------------------------| 1 | Page Length (0Ah) | -----|-----------------------------------------------------------------------| 2 |Reserved|Reserved| TB |Reserved| EER | PER | DTE | DCR | -----|-----------------------------------------------------------------------| 3 | Read Retry Count | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Reserved | -----|-----------------------------------------------------------------------| 6 | Reserved | -----|-----------------------------------------------------------------------| 7 | Reserved | -----|-----------------------------------------------------------------------| 8 | Write Retry Count | -----|-----------------------------------------------------------------------| 9 | Reserved | -----|-----------------------------------------------------------------------| 10 | Reserved | -----|-----------------------------------------------------------------------| 11 | Reserved | ============================================================================== The read-write error recovery page (Table 9-27) specifies the error recovery and reporting parameters that the target shall use when transferring data between the initiator and the medium. These parameters only apply to read- write errors and do not affect message system retries or positioning error recovery procedures. NOTE: The parameters in this page also apply to verify operations. A transfer block (TB) bit of one indicates that a data block that is not recoverable within the specified recovery limits shall be transferred to the initiator before CHECK CONDITION status is returned. A TB bit of zero indicates that the unrecoverable data block shall not be transferred to the initiator. Data blocks that can be recovered within the recovery limits are always transferred, regardless of the value of the TB bit. An enable early recovery (EER) bit of one indicates that the target shall use the most expedient error recovery algorithm (e.g., attempt error correction prior to retries). An EER bit of zero indicates that the target shall use the most deliberate error recovery algorithm, within the limits established by the other error recovery parameters (e.g., attempt to recover the block error-free prior to using error correction). A post error (PER) bit of one indicates that the target shall return CHECK CONDITION status to report recovered errors. A PER bit of zero indicates that the target shall not report errors recovered within the limits established by the error recovery parameters. If this bit is zero, the DTE bit must also be set to zero. A disable transfer on error (DTE) bit of one indicates that the target shall terminate the data transfer after a recovered read-write error occurs. All data from the recovered block shall be transferred prior to terminating the read-write operation. A DTE bit of zero indicates that the target shall not terminate the transfer for errors recovered within the limits established by the read-write error recovery parameters. A disable correction (DCR) bit of one indicates that the target shall not use error correction codes during error recovery. A DCR bit of zero allows the use of error correction codes for error recovery. The read retry count specifies the number of times that the target should attempt its recovery algorithm during a read operation before an unrecoverable error is reported. A read retry count of zero indicates that the target shall not use its recovery algorithm during read operations. The write retry count specifies the number of times that the target should attempt its recovery algorithm during a write operation before an unrecoverable error is reported. A write retry count of zero indicates that the target shall not use its recovery algorithm during write operations. 9.4. Glossary for Sequential Access Devices beginning-of-partition. The position at the beginning of the permissible recording region of a partition. If only one partition is defined, this position is typically equivalent to the beginning-of-medium. beginning-of-medium. The extreme position along the medium in the direction away from the supply reel which can be accessed by the device. buffered mode. A mode of data transfer in write operations which facilitates tape streaming (9.1.5), as reported in the mode parameter header device- specific parameter (9.3.3). early-warning. A physical mark or device computed position near but logically before the end-of-partition (independent of physical direction). See the REW bit in the device configuration page in 9.3.3.1. end-of-data. End of data in a partition is denoted in format-specific manner. See the EOD defined field in the device configuration page in 9.3.3.1. end-of-medium. The extreme position along the medium in the direction away from the take-up reel which can be accessed by the device. This position may be accessed by devices that support the LOAD UNLOAD command with the EOT bit set to one. end-of-partition. The position at the end of the permissible recording region of a partition. filemark. A special recorded element within a partition, containing no user data, which provides a segmentation scheme. overlength. The incorrect length condition that exists after executing a read command when the the length of the actual block read exceeds the requested transfer length in the command descriptor block. partition. The entire usable region of recording and reading paths in a volume or in a portion of a volume, defined in a device-specific manner. If there is more than one partition, they shall be numbered starting with zero (i.e., beginning-of-partition-zero). setmark. A special recorded element within a partition, containing no user data, which provides a segmentation scheme hierarchically superior to filemarks for use in addressing or fast positioning on high capacity storage devices. spacing. The act of positioning the medium on a sequential access device. underlength. The incorrect length condition that exists after executing a read command when the requested transfer length in the command descriptor block exceeds the length of the actual block read. volume. A recording medium together with its physical carrier.