README.txt for Taped13.zip
   Tapedrv.exe -- IBM Tape Device Firmware Utility - v1.3

Files
-----
   README.txt    This file
   Tapedrv.txt   Tapedrv documentation
   Tapedrv.exe   Tapedrv executable
   Tapedrv.msg   Tapedrv message file
   Tapedrv.ini   Tapedrv initialization file
   Makefile      Nmake script for building tapedrv.exe
   devioctl.h    NT header file
   ntddscsi.h    NT header file
   Tapedrv.c     Tapedrv source


History
-------
0.0  - Initial pass
0.1  - Second pass
0.2  - Add DOS mode memory usage logging
     - Hide cursor after status and prompt line update
     - Fix command line option character case insensitivity
0.3  - Reduce maximum DOS mode memory requirement by about 12K.
0.4  - Reduce maximum DOS mode memory requirement an additional 15K.
0.5  - Fix "Invalid device request reading drive c" errors during 
       DOS mode program initialization.
0.6  - Fixes for 3502 and 3600 Libraries and the IBM Ultrium-1
0.7  - Add support for device access via NT port driver
0.8  - Fix for HP half-high and Win9x 3600 Library w/ 126I firmware
0.8a - Fix 'tapedrv status /r' broken in v0.8
0.9  - Fix 'tapedrv status /o' broken in v0.8; 5K DOS memory reduction 
1.0  - Debug version (partial non-zero LUN support)
1.1  - Add non-zero LUN support (Use new /z option if LUN0 only is needed);
     - Add "seagate_tr7" UpdateAlgorithm (for STT3401A)
     - Add "quantum_dlt_8k" UpdateAlgorithm (for DLT4000)
     - Add UpdateFlags = "<flagcharacters>" control
1.2  - Fix failure to update Seagate STT3401A TR7 in DOS mode
1.3  - Fix by disabling non-zero LUN scan when LUN0 returns error


Bugs resolved by Tapedrv v0.6
-----------------------------
Bug: Failure to update firmware for an IBM 3600 Library

   The Library rejected firmware image download as it sees 
   incorrect data.  The incorrect data was the result 
   of Tapedrv's failure to skip the 1088 byte header at the 
   beginning of the .FRM firmware file.  In addition, the 
   Library requires that firmware be transferred in 32K blocks 
   (except for the final block which may be shorter).  Lastly, 
   Tapedrv was incorrectly issuing a final Write Buffer with a 
   zero transfer length (appropriate for other devices but not 
   not the 3600 Library).

   The solution was to add support for a new "hp_library" update 
   algorithm in Tapedrv.exe.  In addition, the configuration 
   parameter Tapedrv.ini [3600_library] UpdateAlgorithm = "standard"
   was changed to UpdateAlgorithm = "hp_library".
   The hp_library algorithm validates then skips the .FRM file 
   header, then transfers the firmware image to the library using 
   a block size of 32K.  The final non-zero image transfer is 
   assumed to be the end of firmware download.

   IMPORTANT: Because of firmware issues it is necessary to both 
   power cycle the Library and reboot the host system after firmware 
   update.  HP supplied new C7200_130I.frm (a replacement for 
   the original 3600l_30.frm).

Bug: Failure to update firmware for an IBM Ultrium Drive

   Tapedrv was incorrectly issuing a final Write Buffer with a 
   zero transfer length (appropriate for other devices but not 
   not the 3600 Library).

   The solution was to add support for a new "ibm_ultrium" update 
   algorithm in Tapedrv.exe.  In addition, the configuration 
   parameter Tapedrv.ini [IBM_Ultrium-TD1_SCSI] 
   UpdateAlgorithm = "standard" was changed to UpdateAlgorithm = 
   "ibm_ultrium".  The "ibm_ultrium" algorithm differs from the 
   "standard" in that the image size is verified to be 1MB and 
   the final Write Buffer command transfers data.  That is, the 
   addition Write Buffer with zero length transfer has been 
   removed.

Failure to update firmware for a DLT7000 with an OML personality 
   within a IBM 3502-R14 (ATL L500) Library

   The DLT7000 rejected the D7L_v105.img (OEM) firmware because 
   it was not OML.  Tapedrv had no way to distinguish whether 
   a Quantum DLT has the OEM (stand alone) or OML (library 
   connected) Firmware Personalities installed. The Firmware 
   Personality is reported in byte 41 of standard Inquiry data
   as a binary value.  Tapedrv v0.5 and earlier have no way to 
   recognize byte 41 of Inquiry data.

   Tapedrv v0.6 has added capability for recognition of binary data in 
   an standard Inquiry data.  This is implemented in Tapedrv.ini by 
   adding a InquiryStdHex parameter to the appropriate 
   [<device_section>].  To tell Tapedrv to recognize the Quantum DLT 
   Firmware Personalities: 
      OEM, use InquiryStdHex = "41:04*"
      OML, use InquiryStdHex = "41:0f*"
      OMX, use InquiryStdHex = "41:12*"

   Since both DLT7000 OEM and OML Firmware Personalities need to be 
   updated, a new [Quantum_DLT7000_OML] section is added to Tapedrv.ini.
   The old [Quantum_DLT7000] section still specifies an OEM personality.
   The new [Quantum_DLT7000_OML] section specifies the OML personality.

   IMPORTANT: You may want examine the following Tapedrv.ini sections 
   and determine whether they need an added InquiryStdHex = "41:04*"
   parameter for detection of the OEM Firmware Personality:
      [Benchmark_DLT1], [Quantum_DLT4000], [Quantum_DLT8000], and
      [Quantum_SuperDLT_SCSI].

Bugs resolved by Tapedrv v0.7
-----------------------------
Bug: When running under Windows NT/2000, Tapedrv reports 
      "Device inaccessible" 
   and fails to update either a tape drive or medium changer 
   when no Class driver is installed.  The "Unknown Medium 
   Changer Device" is not a Class driver.

   To resolve this issue Tapedrv v0.7 uses the SCSI Port driver 
   to access and update tape drives or medium changers for 
   which no Class driver can be found.

Bugs resolved by Tapedrv v0.8
-----------------------------
Bug: Tapedrv fails to update HP Ultrium Half-high firmware 

   The HP Ultrium rejects firmware showing the following error:

      TAPEDRV8570 error: Image offset 0x8e4a0: Writebuffer(Mode=5, 
      addr=0x0008e4a0, length=0) error: Host adapter status 0x11: 
      Select timeout
      An error occurred while downloading firmware.  
      Firmware update failed.
         [Note: This seems to be inappropriate behaviour for an 
         invalid firmware image.  Instead of _not_ responding, the HP 
         should return  CHECK CONDITION, ASC/ASCQ 0x26/0x00: INVALID 
         FIELD IN PARAMETER LIST.]

   This results from incorrect data sent to the tape drive as the 
   because of Tapedrv's failure to skip the 1088 byte header at the 
   beginning of the .FRM firmware file.  

   The solution was to add support for a new "hp_ultrium" update 
   algorithm in Tapedrv.exe.  In addition, the configuration 
   parameter: Tapedrv.ini [HP_Ultrium-1_SCSI_Half_High] 
   UpdateAlgorithm = "standard" was changed to 
   UpdateAlgorithm = "hp_ultrium".
   The hp_ultrium algorithm validates then skips the .FRM file 
   header before transferring the firmware image to the drive.
   If the firmware filename ends with other than the suffix .FRM, 
   the file is treated as a raw binary image.


Bug: When updating IBM 3600 Library firmware on Windows 95/98/ME, 
     the Library becomes an  "HP      DOWNLOAD" device.

   When running Tapedrv v0.7 or earlier to update an IBM 3600 
   Library's firmware from version 126I on a Windows 95/98/ME 
   system, the update process terminates in the middle of the 
   update procedure with a message similar to the following:
   This
      TAPEDRV8570 error: Image offset 0x000bd000: WriteBuffer(mode=4, 
         adrs=0x10000000, length=32768) error:
      Host Adapter error 0x12: DMA overrun/underrun
      An error occurred while downloading firmware.
      Firmware update failed.

   Where, words of significance are "DMA overrun/underrun".

   As a result, of the abnormal update termination, the Library 
   hangs in the middle of the update procedure.  When power 
   cycled, the Library's LCD screen is blank and, at the SCSI 
   BUS interface changes its Inquiry string 
   from: "HP      C7200           126I"
   to:   "HP      DOWNLOAD        B.13"

   [While in this DOWNLOAD state, Library firmware can still 
   be updated using a special version of Tapedrv.ini.]

   This is NOT an issue with 130I firmware.

   To resolve this bug, Tapedrv v0.8 is modified to ignore 
   the "DMA overrun/underrun" error when version 126I, or earlier,
   firmware is present in the device while running on Windows 
   95/98/ME.


Bug: For a 3600 Library, only 1 of 2 Tape Drives are shown when 
     updating firmware under Windows 2000.

   Under Windows 2000, with _no_ IBM Ultrium tape (class) driver 
   installed, only 1 of the 2 IBM Ultrium drives is found by the 
   Tapedrv v0.7 (and earlier) firmware update program.

   For example, there should actually be two Ultrium tape drives 
   listed on the following screen:

      -------------------------------------------------
      tapedrv -- IBM Tape Device Firmware Utility - v0.7
      Copyright (c) 2000-2001 IBM Corporation
      Press Enter key to end without updating.
      Update pending.                    Update will start in 25 seconds.

      Device Address: Port_Number.Bus_Number/SCSI_Device_ID

                                            Current            Update
      Device                             Ver-               Version
      Address  Device Inquiry            sion  State        Old,New  Status
      -------  ------------------------  ----------------  -----------------
      2.0/2    IBM     ULTRIUM-TD1       0BN1 Out of date  0BN1,16E0 Waiting
      2.0/0    HP      C7200             126I Out of date  126I,130I Waiting
      -------------------------------------------------
      
   Since the second Ultrium drive is not seen, its firmware is 
   not be updated.

   Because of a Windows 2000 device enumeration anomaly, one of 
   the Ultriums is not listed in the registry when a IBM Ultrium 
   (class) driver is _not_ installed.  Tapedrv v0.7 and earlier 
   finds all tape devices by scanning the registry.

   To resolve this issue, Tapedrv v0.8 now scans SCSI port drivers 
   for all "unclaimed" and "claimed" tape devices.  Thus both tape 
   drives are displayed and updated if out-of-date.


Bugs resolved by Tapedrv v1.1
-----------------------------
Bug: Tapedrv fails to update tape devices with non-zero LUNs 

   Tapedrv v0.9 (and earlier) report tape devices with non-zero 
   Logical Unit Numbers (LUNs) as "Unrecognized Device".  This is 
   a particular problem in FibreChannel configurations.

   For example, on the following, the final four devices are erroneously 
   reported as "Unrecognized device" and thus will not receive needed 
   firmware update:

      -------------------------------------------------
      tapedrv -- IBM Tape Device Firmware Utility - v0.9
      Copyright (c) 2000-2001 IBM Corporation
      Press Enter end immediately

      Device Address: Port_Number.Bus_Number/SCSI_Device_ID

                                            Current            Update
      Device                             Ver-               Version
      Address  Device Inquiry            sion  State        Old,New  Status
      -------  ------------------------  ----------------  -----------------
      1.0/6    EXABYTE EXB-89008E000116  V41k Up to date
      4.0/0    IBM     ULTRIUM-TD1       18N2 Up to date
      4.0/0    IBM     ULTRIUM-TD1       12U8 Unrecognized device
      4.0/1    IBM     ULTRIUM-TD1       12U8 Unrecognized device
      4.0/1    IBM     ULTRIUM-TD1       12U8 Unrecognized device
      4.0/1    HP      C7200             130I Unrecognized device
      -------------------------------------------------

   Because of incorrect filtering in Tapedrv v0.9 (and earlier) 
   any device with a non-zero LUN was considered unrecognized.

   To resolve this issue, Tapedrv v1.1 correctly detects  
   devices with non-zero LUNs.  In addition, under DOS as well as
   Windows 95,98,ME, Tapedrv now scans for non-zero LUNs during 
   device detection.  (If necessary, a new /z command line option 
   may be used to restrict detection of only LUN0 devices.)

   Also, v1.1 now shows each device's LUN on the display:

      -------------------------------------------------
      tapedrv -- IBM Tape Device Firmware Utility - v1.1
      Copyright (c) 2000-2002 IBM Corporation
      Press Enter end immediately

      Device Address: Port_Number.Bus_Number/SCSI_Device_ID.Logical_Unit_Number

                                            Current            Update
      Device                             Ver-               Version
      Address  Device Inquiry            sion  State        Old,New  Status
      -------  ------------------------  ----------------  -----------------
      1.0/6.0  EXABYTE EXB-89008E000116  V41k Up to date
      4.0/0.0  IBM     ULTRIUM-TD1       18N2 Up to date
      4.0/0.1  IBM     ULTRIUM-TD1       12U8 Out of date  12U8,18N2 Waiting
      4.0/1.1  IBM     ULTRIUM-TD1       12U8 Out of date  12U8,18N2 Waiting
      4.0/1.2  IBM     ULTRIUM-TD1       12U8 Out of date  12U8,18N2 Waiting
      4.0/1.0  HP      C7200             130I Up to date
      -------------------------------------------------


Bugs resolved by Tapedrv v1.2
-----------------------------
Bug: Tapedrv fails to update Seagate STT3401A Travan TR7 in DOS mode

   While updating a Seagate STT3401A Travan TR7 in DOS mode, the 
   following error message is reported:

      TAPEDRV8330 error: Tape device is not responding:
      Host adapter status 0x0d: CDB rejected via MESSAGE REJECT
      Firmware update not started.

   This was the result of an incorrect error checking algorithm 
   in the DOS mode built in ATAPI driver.

   To resolve this issue, Tapedrv v1.2 uses a corrected error 
   checking algorithm.


Bugs resolved by Tapedrv v1.3
-----------------------------
Bug: Tapedrv delays more than minute when enumerating tape devices

   In DOS and Windows 95, 98, Me, Tapedrv v1.1, and v1.2 may 
   exhibit poor performance while enumerating tape devices.  
   Tapedrv enumerates (scans the SCSI bus for) tape devices 
   shortly after it begins execution.  Time consumed can be 
   more than a minute.

   Poor performance was the result of continuing to enumerate 
   non-zero LUNs (Logical Unit Numbers) after LUN0 reported 
   an error.

   To resolve this issue, Tapedrv v1.3 discontinues 
   enumeration of non-zero LUNs when LUN 0 returns an error 
   for a given controller and SCSI target ID.  
   This change does not effect Windows NT, 2000, XP, under 
   which Tapedrv reads and uses the results of SCSI enumeration 
   already performed by the operating system.


Library reboot
--------------
Both the 3600 and 8502 libraries need to be rebooted if the 
Library firmware is updated.
For autoupdate, Library devices are moved to the end of the 
list of devices displayed on the screen.  This reordering 
may reduce the requirement to reboot between Drive and 
Library update for the 3502. However, whenever Library 
firmware is updated, a Library power cycle as well as a 
host system reboot is recommended.

Known Issues
------------
- Firmware update fails for DLT7000 Drive in an 3502-R14 Library
  when a tape is present in the drive.  Customers need to be 
  instructed to eject any tapes, if present in tape drives, into 
  storage slots.
  If the message 
    "TAPEDRV8360 error: Timeout waiting device to become stable"
  is seen, try inserting a tape in the left most storage slot.


DOS Memory Requirement
----------------------
   Tapedrv v0.6 has the following DOS mode memory requirement:
   363K for Seagate Travan drives,
   337K for Seagate DDS-1 and DDS-2 with 256K EEPROM, and
    97K for all other drives.


Installation
------------
   To install copy the files Tapedrv.exe, Tapedrv.msg, and Tapedrv.ini, 
   from the .zip file to a test directory.  For example:
      \tapedrv\Tapedrv.exe
      \tapedrv\Tapedrv.msg
      \tapedrv\Tapedrv.ini


Usage Hints
-----------
   To run the status simulation, use a command similar to: 
      \tapedrv\tapedrv statussim [/r] [/o outfile]

   To run the autoupdate simulation, use a command similar to: 
      \tapedrv\tapedrv autosim 

   For any of the commands status, statussim, autoupdate, autosim, ÿa 
   log file may optionally be created by adding a /l <logfile> 
   parameter.

   Once firmware files are accumulated in a directory (e.g., 
   \FIRMWARE), re-run the autoupdate commands, using a commands 
   similar to: 
      \tapedrv\tapedrv autosim /p \FIRMWARE
      \tapedrv\tapedrv autoupdate /p \FIRMWARE
      \tapedrv\tapedrv inick /p \FIRMWARE


