====================================================================
=             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
          device 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 Coalescing
        - 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.
 */
