====================================================================
=             Adaptec Ultra320 Family Manager Set                  =
=                                                                  =
=                            README for                            =
=                    The Linux Operating System                    =
====================================================================

The following information is available in this file:

  1. Supported Hardware
  2. Version History
  3. Command Line Options
  4. Additional Notes
  5. Contacting Adaptec


1. Supported Hardware

   The following Adaptec SCSI Host Adapters are supported by this 
   driver set. 

   Ultra320 ASIC              Description
   ----------------------------------------------------------------
   AIC-7901A                  Single Channel 64-bit PCI-X 133MHz to 
                              Ultra320 SCSI ASIC
   AIC-7901B                  Single Channel 64-bit PCI-X 133MHz to 
                              Ultra320 SCSI ASIC with Retained Training
   AIC-7902A4                 Dual Channel 64-bit PCI-X 133MHz to 
                              Ultra320 SCSI ASIC
   AIC-7902B                  Dual Channel 64-bit PCI-X 133MHz to
                              Ultra320 SCSI ASIC with Retained Training

   Ultra320 Adapters          Description                              ASIC
   --------------------------------------------------------------------------
   Adaptec SCSI Card 39320    Dual Channel 64-bit PCI-X 133MHz to   7902A4/7902B
                              Ultra320 SCSI Card (one external 
                              68-pin, two internal 68-pin)
   Adaptec SCSI Card 39320A   Dual Channel 64-bit PCI-X 133MHz to      7902B
                              Ultra320 SCSI Card (one external 
                              68-pin, two internal 68-pin)
   Adaptec SCSI Card 39320D   Dual Channel 64-bit PCI-X 133MHz to      7902A4
                              Ultra320 SCSI Card (two external VHDC
                              and one internal 68-pin)
   Adaptec SCSI Card 39320D   Dual Channel 64-bit PCI-X 133MHz to      7902A4
                              Ultra320 SCSI Card (two external VHDC
                              and one internal 68-pin) based on the
                              AIC-7902B ASIC
   Adaptec SCSI Card 29320    Single Channel 64-bit PCI-X 133MHz to    7901A
                              Ultra320 SCSI Card (one external 
                              68-pin, two internal 68-pin, one
                              internal 50-pin)
   Adaptec SCSI Card 29320A   Single Channel 64-bit PCI-X 133MHz to    7901B
                              Ultra320 SCSI Card (one external 
                              68-pin, two internal 68-pin, one
                              internal 50-pin)
   Adaptec SCSI Card 29320LP  Single Channel 64-bit Low Profile        7901A
                              PCI-X 133MHz to Ultra320 SCSI Card
                              (One external VHDC, one internal
                              68-pin)
   Adaptec SCSI Card 29320ALP Single Channel 64-bit Low Profile        7901B
                              PCI-X 133MHz to Ultra320 SCSI Card
                              (One external VHDC, one internal
                              68-pin)
2. Version History

   3.0	  (December 1st, 2005)
	- Updated driver to use SCSI transport class infrastructure
	- Upported sequencer and core fixes from adaptec released
	  version 2.0.15 of the driver.

   1.3.11 (July 11, 2003)
        - Fix several deadlock issues.
        - Add 29320ALP and 39320B Id's.

   1.3.10 (June 3rd, 2003)
        - Align the SCB_TAG field on a 16byte boundary.  This avoids
          SCB corruption on some PCI-33 busses.
        - Correct non-zero luns on Rev B. hardware.
        - Update for change in 2.5.X SCSI proc FS interface.
        - When negotiation async via an 8bit WDTR message, send
          an SDTR with an offset of 0 to be sure the target
          knows we are async.  This works around a firmware defect
          in the Quantum Atlas 10K.
        - Implement controller suspend and resume.
        - Clear PCI error state during driver attach so that we
          don't disable memory mapped I/O due to a stray write
          by some other driver probe that occurred before we
          claimed the controller.

   1.3.9 (May 22nd, 2003)
        - Fix compiler errors.
        - Remove S/G splitting for segments that cross a 4GB boundary.
          This is guaranteed not to happen in Linux.
        - Add support for scsi_report_device_reset() found in
          2.5.X kernels.
        - Add 7901B support.
        - Simplify handling of the packetized lun Rev A workaround.
        - Correct and simplify handling of the ignore wide residue
          message.  The previous code would fail to report a residual
          if the transaction data length was even and we received
          an IWR message.

   1.3.8 (April 29th, 2003)
        - Fix types accessed via the command line interface code.
        - Perform a few firmware optimizations.
        - Fix "Unexpected PKT busfree" errors.
        - Use a sequencer interrupt to notify the host of
          commands with bad status.  We defer the notification
          until there are no outstanding selections to ensure
          that the host is interrupted for as short a time as
          possible.
        - Remove pre-2.2.X support.
        - Add support for new 2.5.X interrupt API.
        - Correct big-endian architecture support.

   1.3.7 (April 16th, 2003)
        - Use del_timer_sync() to ensure that no timeouts
          are pending during controller shutdown.
        - For pre-2.5.X kernels, carefully adjust our segment
          list size to avoid SCSI malloc pool fragmentation.
        - Cleanup channel display in our /proc output.
        - Workaround duplicate device entries in the mid-layer
          devlice list during add-single-device.

   1.3.6 (March 28th, 2003)
        - Correct a double free in the Domain Validation code.
        - Correct a reference to free'ed memory during controller
          shutdown.
        - Reset the bus on an SE->LVD change.  This is required
          to reset our transceivers.

   1.3.5 (March 24th, 2003)
        - Fix a few register window mode bugs.
        - Include read streaming in the PPR flags we display in
          diagnostics as well as /proc.
        - Add PCI hot plug support for 2.5.X kernels.
        - Correct default precompensation value for RevA hardware.
        - Fix Domain Validation thread shutdown.
        - Add a firmware workaround to make the LED blink
          brighter during packetized operations on the H2A4.
        - Correct /proc display of user read streaming settings.
        - Simplify driver locking by releasing the io_request_lock
          upon driver entry from the mid-layer.
        - Cleanup command line parsing and move much of this code
          to aiclib.

   1.3.4 (February 28th, 2003)
        - Correct a race condition in our error recovery handler.
        - Allow Test Unit Ready commands to take a full 5 seconds
          during Domain Validation.

   1.3.2 (February 19th, 2003)
        - Correct a Rev B. regression due to the GEM318
          compatibility fix included in 1.3.1.
          
   1.3.1 (February 11th, 2003)
        - Add support for the 39320A.
        - Improve recovery for certain PCI-X errors.
        - Fix handling of LQ/DATA/LQ/DATA for the
          same write transaction that can occur without
          interveining training.
        - Correct compatibility issues with the GEM318
          enclosure services device.
        - Correct data corruption issue that occurred under
          high tag depth write loads.
        - Adapt to a change in the 2.5.X daemonize() API.
        - Correct a "Missing case in ahd_handle_scsiint" panic.

   1.3.0 (January 21st, 2003)
        - Full regression testing for all U320 products completed.
        - Added abort and target/lun reset error recovery handler and
          interrupt coalescing.

   1.2.0 (November 14th, 2002)
        - Added support for Domain Validation
        - Add support for the Hewlett-Packard version of the 39320D
          and AIC-7902 adapters.
        Support for previous adapters has not been fully tested and should
        only be used at the customer's own risk.

   1.1.1 (September 24th, 2002)
        - Added support for the Linux 2.5.X kernel series

   1.1.0 (September 17th, 2002)
        - Added support for four additional SCSI products:
          ASC-39320, ASC-29320, ASC-29320LP, AIC-7901.

   1.0.0 (May 30th, 2002)
        - Initial driver release.

   2.1. Software/Hardware Features
        - Support for the SPI-4 "Ultra320" standard:
          - 320MB/s transfer rates
          - Packetized SCSI Protocol at 160MB/s and 320MB/s
          - Quick Arbitration Selection (QAS)
          - Retained Training Information (Rev B. ASIC only)
        - Interrupt Coalessing
        - Initiator Mode (target mode not currently 
          supported)
        - Support for the PCI-X standard up to 133MHz
        - Support for the PCI v2.2 standard
        - Domain Validation

   2.2. Operating System Support:
        - Redhat Linux 7.2, 7.3, 8.0, Advanced Server 2.1
        - SuSE Linux 7.3, 8.0, 8.1, Enterprise Server 7
        - only Intel and AMD x86 supported at this time
        - >4GB memory configurations supported.

     Refer to the User's Guide for more details on this.

3. Command Line Options

        WARNING: ALTERING OR ADDING THESE DRIVER PARAMETERS
                 INCORRECTLY CAN RENDER YOUR SYSTEM INOPERABLE.
                 USE THEM WITH CAUTION. 

   Edit the file "modprobe.conf" in the directory /etc and add/edit a
   line containing 'options aic79xx aic79xx=[command[,command...]]' where
   'command' is one or more of the following:
   -----------------------------------------------------------------
              Option: verbose
          Definition: enable additional informative messages during
                      driver operation.
     Possible Values: This option is a flag
       Default Value: disabled
   -----------------------------------------------------------------
              Option: debug:[value]
          Definition: Enables various levels of debugging information
                      The bit definitions for the debugging mask can
                      be found in drivers/scsi/aic7xxx/aic79xx.h under
                      the "Debug" heading.
     Possible Values: 0x0000 = no debugging, 0xffff = full debugging
       Default Value: 0x0000
   -----------------------------------------------------------------
              Option: no_reset
          Definition: Do not reset the bus during the initial probe
                      phase
     Possible Values: This option is a flag
       Default Value: disabled
   -----------------------------------------------------------------
              Option: extended
          Definition: Force extended translation on the controller
     Possible Values: This option is a flag
       Default Value: disabled
   -----------------------------------------------------------------
              Option: periodic_otag
          Definition: Send an ordered tag periodically to prevent
                      tag starvation.  Needed for some older devices
     Possible Values: This option is a flag
       Default Value: disabled
   -----------------------------------------------------------------
              Option: reverse_scan
          Definition: Probe the scsi bus in reverse order, starting
                      with target 15
     Possible Values: This option is a flag
       Default Value: disabled
   -----------------------------------------------------------------
              Option: global_tag_depth
          Definition: Global tag depth for all targets on all busses.
                      This option sets the default tag depth which
                      may be selectively overridden vi the tag_info
                      option.
     Possible Values: 1 - 253
       Default Value: 32
   -----------------------------------------------------------------
              Option: tag_info:{{value[,value...]}[,{value[,value...]}...]}
          Definition: Set the per-target tagged queue depth on a
                      per controller basis.  Both controllers and targets
                      may be ommitted indicating that they should retain
                      the default tag depth.
            Examples: tag_info:{{16,32,32,64,8,8,,32,32,32,32,32,32,32,32,32}
                        On Controller 0
                          specifies a tag depth of 16 for target 0
                          specifies a tag depth of 64 for target 3
                          specifies a tag depth of 8 for targets 4 and 5
                          leaves target 6 at the default
                          specifies a tag depth of 32 for targets 1,2,7-15
                        All other targets retain the default depth.

                      tag_info:{{},{32,,32}}
                        On Controller 1
                          specifies a tag depth of 32 for targets 0 and 2
                        All other targets retain the default depth.
                        
     Possible Values: 1 - 253
       Default Value: 32
   -----------------------------------------------------------------
              Option: rd_strm: {rd_strm_bitmask[,rd_strm_bitmask...]}
          Definition: Enable read streaming on a per target basis.
                      The rd_strm_bitmask is a 16 bit hex value in which
                      each bit represents a target.  Setting the target's
                      bit to '1' enables read streaming for that
                      target.  Controllers may be ommitted indicating that
                      they should retain the default read streaming setting.
             Example: rd_strm:{0x0041}
                        On Controller 0
                          enables read streaming for targets 0 and 6.
                          disables read streaming for targets 1-5,7-15.
                        All other targets retain the default read
                        streaming setting.
             Example: rd_strm:{0x0023,,0xFFFF}
                        On Controller 0
                          enables read streaming for targets 1,2, and 5.
                          disables read streaming for targets 3,4,6-15.
                        On Controller 2
                          enables read streaming for all targets.
                        All other targets retain the default read
                        streaming setting.
                      
     Possible Values: 0x0000 - 0xffff
       Default Value: 0x0000
   -----------------------------------------------------------------
              Option: dv: {value[,value...]}
          Definition: Set Domain Validation Policy on a per-controller basis.
                      Controllers may be ommitted indicating that
                      they should retain the default read streaming setting.
             Example: dv:{-1,0,,1,1,0}
                        On Controller 0 leave DV at its default setting.
                        On Controller 1 disable DV.
                        Skip configuration on Controller 2.
                        On Controllers 3 and 4 enable DV.
                        On Controller 5 disable DV.

     Possible Values: < 0 Use setting from serial EEPROM.
                      0 Disable DV
                      > 0 Enable DV
       Default Value: DV Serial EEPROM configuration setting.
   -----------------------------------------------------------------
              Option: seltime:[value]
          Definition: Specifies the selection timeout value
     Possible Values: 0 = 256ms, 1 = 128ms, 2 = 64ms, 3 = 32ms
       Default Value: 0
   -----------------------------------------------------------------

   *** The following three options should only be changed at ***
   *** the direction of a technical support representative.  ***

   -----------------------------------------------------------------
              Option: precomp: {value[,value...]}
          Definition: Set IO Cell precompensation value on a per-controller
                      basis.
                      Controllers may be ommitted indicating that
                      they should retain the default precompensation setting.
             Example: precomp:{0x1}
                        On Controller 0 set precompensation to 1.
             Example: precomp:{1,,7}
                        On Controller 0 set precompensation to 1.
                        On Controller 2 set precompensation to 8.
                      
     Possible Values: 0 - 7
       Default Value: Varies based on chip revision
   -----------------------------------------------------------------
              Option: slewrate: {value[,value...]}
          Definition: Set IO Cell slew rate on a per-controller basis.
                      Controllers may be ommitted indicating that
                      they should retain the default slew rate setting.
             Example: slewrate:{0x1}
                        On Controller 0 set slew rate to 1.
             Example: slewrate :{1,,8}
                        On Controller 0 set slew rate to 1.
                        On Controller 2 set slew rate to 8.
                      
     Possible Values: 0 - 15
       Default Value: Varies based on chip revision
   -----------------------------------------------------------------
              Option: amplitude: {value[,value...]}
          Definition: Set IO Cell signal amplitude on a per-controller basis.
                      Controllers may be ommitted indicating that
                      they should retain the default read streaming setting.
             Example: amplitude:{0x1}
                        On Controller 0 set amplitude to 1.
             Example: amplitude :{1,,7}
                        On Controller 0 set amplitude to 1.
                        On Controller 2 set amplitude to 7.
                      
     Possible Values: 1 - 7
       Default Value: Varies based on chip revision
   -----------------------------------------------------------------

   Example: 'options aic79xx aic79xx=verbose,rd_strm:{{0x0041}}'
        enables verbose output in the driver and turns read streaming on
        for targets 0 and 6 of Controller 0.

4. Additional Notes

   4.1. Known/Unresolved or FYI Issues

        * Under SuSE Linux Enterprise 7, the driver may fail to operate
          correctly due to a problem with PCI interrupt routing in the
          Linux kernel.  Please contact SuSE for an updated Linux
          kernel.

   4.2. Third-Party Compatibility Issues

        * Adaptec only supports Ultra320 hard drives running
          the latest firmware available. Please check with
          your hard drive manufacturer to ensure you have the
          latest version.

   4.3. Operating System or Technology Limitations
        
        * PCI Hot Plug is untested and may cause the operating system 
          to stop responding.
        * Luns that are not numbered contiguously starting with 0 might not
          be automatically probed during system startup.  This is a limitation
          of the OS.  Please contact your Linux vendor for instructions on
          manually probing non-contiguous luns.
        * Using the Driver Update Disk version of this package during OS
          installation under RedHat might result in two versions of this
          driver being installed into the system module directory.  This
          might cause problems with the /sbin/mkinitrd program and/or
          other RPM packages that try to install system modules.  The best
          way to correct this once the system is running is to install
          the latest RPM package version of this driver, available from
          http://www.adaptec.com.


5. Adaptec Customer Support

   A Technical Support Identification (TSID) Number is required for 
   Adaptec technical support.
    - The 12-digit TSID can be found on the white barcode-type label
      included inside the box with your product.  The TSID helps us 
      provide more efficient service by accurately identifying your 
      product and support status.

   Support Options
    - Search the Adaptec Support Knowledgebase (ASK) at
      http://ask.adaptec.com for articles, troubleshooting tips, and
      frequently asked questions about your product.
    - For support via Email, submit your question to Adaptec's 
      Technical Support Specialists at http://ask.adaptec.com/.
     
   North America
    - Visit our Web site at http://www.adaptec.com/.
    - For information about Adaptec's support options, call
      408-957-2550, 24 hours a day, 7 days a week.
    - To speak with a Technical Support Specialist,
      * For hardware products, call 408-934-7274,
        Monday to Friday, 3:00 am to 5:00 pm, PDT.
      * For RAID and Fibre Channel products, call 321-207-2000,
        Monday to Friday, 3:00 am to 5:00 pm, PDT.
      To expedite your service, have your computer with you.
    - To order Adaptec products, including accessories and cables,
      call 408-957-7274.  To order cables online go to
      http://www.adaptec.com/buy-cables/.

   Europe
    - Visit our Web site at http://www.adaptec-europe.com/.
    - To speak with a Technical Support Specialist, call, or email,
      * German:  +49 89 4366 5522, Monday-Friday, 9:00-17:00 CET,
        http://ask-de.adaptec.com/.
      * French:  +49 89 4366 5533, Monday-Friday, 9:00-17:00 CET,
	http://ask-fr.adaptec.com/.
      * English: +49 89 4366 5544, Monday-Friday, 9:00-17:00 GMT,
	http://ask.adaptec.com/.
    - You can order Adaptec cables online at
      http://www.adaptec.com/buy-cables/.

   Japan
    - Visit our web site at http://www.adaptec.co.jp/.
    - To speak with a Technical Support Specialist, call 
      +81 3 5308 6120, Monday-Friday, 9:00 a.m. to 12:00 p.m.,
      1:00 p.m. to 6:00 p.m.

-------------------------------------------------------------------
/*
 * Copyright (c) 2003 Adaptec Inc. 691 S. Milpitas Blvd., Milpitas CA 95035 USA.
 * All rights reserved.
 *
 * You are permitted to redistribute, use and modify this README file in whole
 * or in part in conjunction with redistribution of software governed by the
 * General Public License, provided that the following conditions are met:
 * 1. Redistributions of README file must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 * 3. Modifications or new contributions must be attributed in a copyright
 *    notice identifying the author ("Contributor") and added below the
 *    original copyright notice. The copyright notice is for purposes of
 *    identifying contributors and should not be deemed as permission to alter
 *    the permissions given by Adaptec.
 *
 * THIS README FILE IS PROVIDED BY ADAPTEC AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ANY
 * WARRANTIES OF NON-INFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * ADAPTEC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS README
 * FILE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
