code:
Sat May 12 12:00 2001 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.3c
	- Ensure LEDC bit in GPCNTL is cleared when reading the NVRAM.
	  Fix sent by Stig Telfer <stig@api-networks.com>.
	- Backport from SYM-2 the work-around that allows to support
	  hardwares that fail PCI parity checking.
	- Check that we received at least 8 bytes of INQUIRY response
	  for byte 7, that contains device capabilities, to be valid.
	- Define scsi_set_pci_device() as nil for kernel < 2.4.4.
	- + A couple of minor changes.

Sat Apr 7 19:30 2001 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.3b
	- Fix an unaligned LOAD from scripts (was used as dummy read).
	- In ncr_soft_reset(), only try to ABORT the current operation
	  for chips that support SRUN bit in ISTAT1 and if SCRIPTS are
	  currently running, as 896 and 1010 manuals suggest.
	- In the CCB abort path, do not assume that the CCB is currently
	  queued to SCRIPTS. This is not always true, notably after a
	  QUEUE FULL status or when using untagged commands.

Sun Mar 4 18:30 2001 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.3a
	- Fix an issue in the ncr_int_udc() (unexpected disconnect)
	  handling. If the DSA didn't match a CCB, a bad write to
	  memory could happen.

Mon Feb 12 22:30 2001 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.3
	- Support for hppa.
	  Tiny patch sent to me by Robert Hirst.
	- Tiny patch for ia64 sent to me by Pamela Delaney.

Tue Feb 6 13:30 2001 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.3-pre1
	- Call pci_enable_device() as AC wants this to be done.
	- Get both the BAR cookies used by CPU and actual PCI BAR
	  values used from SCRIPTS. Recent PCI chips are able to
	  access themselves using internal cycles, but they compare
	  BAR values to destination address to make decision.
	  Earlier chips simply use PCI transactions to access IO
	  registers from SCRIPTS.
	  The bus_dvma_to_mem() interface that reverses the actual
	  PCI BAR value from the BAR cookie is now useless.
	  This point had been discussed at the list and the solution
	  got approved by PCI code maintainer (Martin Mares).
	- Merge changes for linux-2.4 that declare the host template
	  in the driver object also when the driver is statically
	  linked with the kernel.
	- Increase SCSI message size up to 12 bytes, given that 8
	  bytes was not enough for the PPR message (fix).
	- Add field 'maxoffs_st' (max offset for ST data transfers).
	  The C1010 supports offset 62 in DT mode but only 31 in
	  ST mode, to 2 different values for the max SCSI offset
	  are needed. Replace the obviously wrong masking of the
	  offset against 0x1f for ST mode by a lowering to
	  maxoffs_st of the SCSI offset in ST mode.
	- Refine a work-around for the C1010-66. Revision 1 does
	  not requires extra cycles in DT DATA OUT phase.
	- Add a missing endian-ization (abrt_tbl.addr).
	- Minor clean-up in the np structure for fields accessed
	  from SCRIPTS that requires special alignments.

Sun Sep 24 21:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.2
	- Remove the hack for PPC added in previous driver version.
	- Add FE_DAC feature bit to distinguish between 64 bit PCI
	  addressing (FE_DAC) and 64 bit PCI interface (FE_64BIT).
	- Get rid of the boot command line "ultra:" argument.
	  This parameter wasn't that clever since we can use "sync:"
	  for Ultra/Ultra2 settings, and for Ultra3 we may want to
	  pass PPR options (for now only DT clocking).
	- Add FE_VARCLK feature bit that indicates that SCSI clock
	  frequency may vary depending on board design and thus,
	  the driver should try to evaluate the SCSI clock.
	- Simplify the way the driver determine the SCSI clock:
	  ULTRA3 -> 160 MHz, ULTRA2 -> 80 MHz otherwise 40 MHz.
	  Measure the SCSI clock frequency if FE_VARCLK is set.
	- Remove FE_CLK80 feature bit that got useless.
	- Add support for the SYM53C875A (Pamela Delaney).

Wed Jul 26 23:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.1
	- Provide OpenFirmware path through the proc FS on PPC.
	- Download of on-chip SRAM using memcpy_toio() doesn't work
	  on PPC. Restore previous method (MEMORY MOVE from SCRIPTS).
	- Remove trailing argument #2 from a couple of #undefs.

Sun Jul 09 16:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.7.0
	- Remove the PROFILE C and SCRIPTS code.
	  This facility was not this useful and thus was not longer
	  desirable given the increasing complexity of the driver code.
	- Merges from FreeBSD sym-1.6.2 driver:
	  * Clarify memory barriers needed by the driver for architectures
	    that implement a weak memory ordering.
	  * Simpler handling of illegal phases and data overrun from
	    SCRIPTS. These errors are now immediately reported to
	    the C code by an interrupt.
	  * Sync the residual handling code with sym-1.6.2 and now
	    report `resid' to user for linux version >= 2.3.99
	- General cleanup:
	  Move definitions for barriers and IO/MMIO operations to the
	  sym53c8xx_defs.h header files. They are now shared by the
	  both drivers.
	  Remove unused options that claimed to optimize for the 896.
	  If fact, they were not this clever. :)
	  Use SCSI_NCR_IOMAPPED instead of NCR_IOMAPPED.
	  Remove a couple of unused fields from data structures.

Thu May 11 12:40 2000 Pam Delaney (pam.delaney@lsil.com)
	* version sym53c8xx-1.6b
	- Merged version.

Mon Apr 24 12:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5m
	- Return value 1 (instead of 0) from the driver setup routine.
	- Do not enable PCI DAC cycles. This just broke support for
	  SYM534C896 on sparc64. Problem fixed by David S. Miller.

Fri Apr 14 9:00 2000 Pam Delaney (pam.delaney@lsil.com)
	* version sym53c8xx-1.6b-9
	- Added 53C1010_66 support.
	- Small fix to integrity checking code.
	- Removed requirement for integrity checking if want to run
	  at ultra 3.

Sat Apr 1  12:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5l
	- Tiny change for __sparc__ appeared in 2.3.99-pre4.1 that
	  applies to cache line size (? Probably from David S Miller).
	- Make sure no data transfer will happen for Scsi_Cmnd requests
	  that supply SCSI_DATA_NONE direction (this avoids some BUG()
	  statement in the PCI code when a data buffer is also supplied).

Sat Mar 11 12:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.6b-5
	- Test against expected data transfer direction from SCRIPTS.
	- Add support for the new dynamic dma mapping kernel interface.
	  Requires Linux-2.3.47 (tested with pre-2.3.47-6).
	  Many thanks to David S. Miller for his preliminary changes
	  that have been useful guidelines.
	- Get data transfer direction from the scsi command structure
	  (Scsi_Cmnd) with kernels that provide this information.

Mon Mar  6 23:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5k
	- Test against expected data transfer direction from SCRIPTS.
	- Revert the change in 'ncr_flush_done_cmds()' but unmap the
	  scsi dma buffer prior to queueing the command to our done
	  list.
	- Miscellaneous (minor) fixes in the code added in driver
	  version 1.5j.

Mon Feb 14 4:00 2000 Pam Delaney (pam.delaney@lsil.com)
 	* version sym53c8xx-pre-1.6b-2.
	- Updated the SCRIPTS error handling of the SWIDE
	  condition - to remove any reads of the sbdl
	  register. Changes needed because the 896 and 1010
	  chips will check parity in some special circumstances.
	  This will cause a parity error interrupt if not in
	  data phase.  Changes based on those made in the
	  FreeBSD driver version 1.3.2.

Sun Feb 20 11:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5j
	- Add support for the new dynamic dma mapping kernel interface.
	  Requires Linux-2.3.47 (tested with pre-2.3.47-6).
	  Many thanks to David S. Miller for his preliminary changes
	  that have been useful guidelines, for having reviewed the
	  code and having tested this driver version on Ultra-Sparc.
	- 2 tiny bugs fixed in the PCI wrapper that provides support
	  for early kernels without pci device structure.
	- Get data transfer direction from the scsi command structure
	  (Scsi_Cmnd) with kernels that provide this information.
	- Fix an old bug that only affected 896 rev. 1 when driver
	  profile support option was set in kernel configuration.

Fri Jan 14 14:00 2000 Pam Delaney (pam.delaney@lsil.com)
 	* version sym53c8xx-pre-1.6b-1.
	- Merge parallel driver series 1.61 and 1.5e

Tue Jan 11 14:00 2000 Pam Delaney (pam.delaney@lsil.com)
	* version sym53c8xx-1.61
	- Added support for mounting disks on wide-narrow-wide
	  scsi configurations.
	- Modified offset to be a maximum of 31 in ST mode,
	  62 in DT mode.
	- Based off of 1.60

Mon Jan 10 10:00 2000 Pam Delaney (pam.delaney@lsil.com)
	* version sym53c8xx-1.60
	- Added capability to use the integrity checking code
	  in the kernel (optional).
	-  Added PPR negotiation.
	- Added support for 53C1010 Ultra 3 part.
	- Based off of 1.5f

Sat Jan 8  22:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5h
	- Add year 2000 copyright.
	- Display correctly bus signals when bus is detected wrong.
	- Some fix for Sparc from DSM that went directly to kernel tree.

Mon Dec 6  22:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5g
	- Change messages written by the driver at initialisation and
	  through the /proc FS (rather cosmetic changes that consist in
	  printing out the PCI bus number and PCI device/function).
	- Ensure the SCRIPTS processor is stopped while calibrating the
	  SCSI clock (the initialisation code has been a bit reworked).
	  Change moved to the FreeBSD sym_hipd driver).
	- Some fixes in the MODIFY_DP/IGN_RESIDUE code and residual
	  calculation (moved from FreeBSD sym_hipd driver).
	- Add NVRAM support for Tekram boards that use 24C16 EEPROM.
	  Code moved from the FreeBSD sym_hipd driver, since it has
	  been that one that got this feature first.
	- Definitely disable overlapped PCI arbitration for all dual
	  function chips, since I cannot make sure for what chip revisions
	  it is actually safe.
	- Add support for the SYM53C1510D (also for ncr53c8xx).
	- Fix up properly the PCI latency timer when needed or asked for.
	- Get rid of the old PCI bios interface, but preserve kernel 2.0
	  compatibility from a simple wrapper.
	- Update the poor Tekram sync factor table.
	- Fix in a tiny 'printk' bug that may oops in case of extended
	  errors (unrecovered parity error, data overrun, etc ...)
	  (Sent by Pamela Delaney from LSILOGIC)
	- Remove the compilation condition about having to acquire the
	  io_request_lock since it seems to be a definite feature now.:)
	- Change get_pages by GetPages since Linux >= 2.3.27 now wants
	  get_pages to ever be used as a kernel symbol (from 2.3.27).
	- proc_dir structure no longer needed for kernel >= 2.3.27.

Sun Oct  3  19:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5f
	- Change the way the driver checks the PCI clock frequency, so
	  that overclocked PCI BUS up to 48 MHz will not be refused.
	  The more the BUS is overclocked, the less the driver will
	  guarantee that its measure of the SCSI clock is correct.
	- Backport some minor improvements of SCRIPTS from the sym_hipd
	  driver.
	- Backport the code rewrite of the START QUEUE dequeuing (on
	  bad scsi status received) from the sym_hipd driver.

Sat Sep 11  11:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5e
	- New linux-2.3.13 __setup scheme support added.
	- Cleanup of the extended error status handling:
	  Use 1 bit per error type.
	- Also save the extended error status prior to auto-sense.
	- Add the FE_DIFF chip feature bit to indicate support of
	  diff probing from GPIO3 (825/825A/876/875).
	- Remove the quirk handling that has been useless since day one.
	- Work-around PCI chips being reported twice on some platforms.
	- Add some redundant PCI reads in order to deal with common
	  bridge misbehaviour regarding posted write flushing.
	- Add some other conditionnal code for people who have to deal
	  with really broken bridges (they will have to edit a source
	  file to try these options).
	- Handle correctly (hopefully) jiffies wrap-around.
	- Restore the entry used to detect 875 until revision 0xff.
	  (I removed it inadvertently, it seems :) )
	- Replace __initfunc() which is deprecated stuff by __init which
	  is not yet so. ;-)
	- Rewrite the MESSAGE IN scripts more generic by using a MOVE
	  table indirect. Extended messages of any size are accepted now.
	  (Size is limited to 8 for now, but a constant is just to be
	  increased if necessary)
	- Fix some bug in the fully untested MDP handling:) and share
	  some code between MDP handling and residual calculation.
	- Calculate the data transfer residual as the 2's complement
	  integer (A positive value in returned on data overrun, and
	  a negative one on underrun).
	- Add support of some 'resource handling' for linux-2.3.13.
	  Basically the BARs have been changed to something more complex
	  in the pci_dev structure.
	- Remove some deprecated code.

Sat Jun  5  11:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5c
	- Do not negotiate on auto-sense if we are currently using 8 bit
	  async transfer for the target.
	- Only check for SISL/RAID on i386 platforms.
	  (A problem has been reported on PPC with that code).
	- On MSG REJECT for a negotiation, the driver attempted to restart
	  the SCRIPT processor when this one was already running.

Sat May 29  12:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5b
	- Force negotiation prior auto-sense.
	  This ensures that the driver will be able to grab the sense data
	  from a device that has received a BUS DEVICE RESET message from
	  another initiator.
	- Complete all disconnected CCBs for a logical UNIT if we are told
	  about a UNIT ATTENTION for a RESET condition by this target.
	- Add the control command 'cleardev' that allows to send a ABORT
	  message to a logical UNIT (for test purpose).

Tue May 25  23:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5a
	- Add support for task abort and bus device reset SCSI message
	  and implement proper synchonisation with SCRIPTS to handle
          correctly task abortion without races.
	- Send an ABORT message (if untagged) or ABORT TAG message (if tagged)
	  when the driver is told to abort a command that is disconnected and
	  complete the command with appropriate error.
	  If the aborted command is not yet started, remove it from the start
	  queue and complete it with error.
	- Add the control command 'resetdev' that allows to send a BUS
	  DEVICE RESET message to a target (for test purpose).
	- Clean-up some unused or useless code.

Fri May 21  23:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.5
	- Add support for CHMOV with Wide controllers.
	- Handling of the SWIDE (low byte residue at the end of a CHMOV
	  in DATA IN phase with WIDE transfer when the byte count gets odd).
	- Handling of the IGNORE WIDE RESIDUE message.
	  Handled from SCRIPTS as possible with some optimizations when both
	  a wide device and the controller are odd at the same time (SWIDE
	  present and IGNORE WIDE RESIDUE message on the BUS at the same time).
	- Check against data OVERRUN/UNDERRUN condition at the end of a data
	  transfer, whatever a SWIDE is present (OVERRUN in DATA IN phase)
	  or the SODL is full (UNDERRUN in DATA out phase).
	- Handling of the MODIFY DATA POINTER message.
	  This one cannot be handled from SCRIPTS, but hopefully it will not
	  happen very often. :)
	- Large rewrite of the SCSI MESSAGE handling.

Sun May 9  11:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.4
	- Support for IMMEDIATE ARBITRATION.
	  See the README file for detailed information about this feature.
	  Requires both a compile option and a boot option.
	- Minor SCRIPTS optimization in reselection pattern for LUN 0.
	- Simpler algorithm to deal with SCSI command starvation.
	  Just use 2 tag counters in flip/flop and switch to the other
	  one every 3 seconds.
	- Do some work in SCRIPTS after the SELECT instruction and prior
	  to testing for a PHASE. SYMBIOS say this feature is working fine.
	  (Btw, only problems with Toshiba 3401B had been reported).
	- Measure the PCI clock speed and do not attach controllers if
	  result is greater than 37 MHz. Since the precision of the
	  algorithm (from Stefan Esser) is better than 2%, this should
	  be fine.
	- Fix the misdetection of SYM53C875E (was detected as a 876).
	- Fix the misdetection of SYM53C810 not A (was detected as a 810A).
	- Support for up to 256 TAGS per LUN (CMD_PER_LUN).
	  Currently limited to 255 due to Linux limitation. :)
	- Support for up to 508 active commands (CAN_QUEUE).
	- Support for the 53C895A by Pamela Delaney <pam.delaney@lsil.com>
	  The 53C895A contains all of the features of the 896 but has only
	  one channel and has a 32 bit PCI bus. It does 64 bit PCI addressing
	  using dual cycle PCI data transfers.
	- Miscellaneous minor fixes.
	- Some additions to the README.ncr53c8xx file.

Tue Apr 15  10:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.3e
	- Support for any number of LUNs (64) (SPI2-compliant).
	  (Btw, this may only be ever useful under linux-2.2 ;-))

Sun Apr 11  10:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.3d
	- Add 'hostid:#id' boot option. This option allows to change the
	  default SCSI id the driver uses for controllers.
	- Make SCRIPTS not use self-mastering for PCI.
	  There were still 2 places the driver used this feature of the
	  53C8XX family.
	- Move some data structures (nvram layouts and driver set-up) to
	  the sym53c8xx_defs.h file. So, the both drivers will share them.
	- Set MAX LUNS to 16 (instead of 8).

Sat Mar 20  21:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.3b
	- Add support for NCR PQS PDS.
	  James Bottomley <James.Bottomley@columbiasc.ncr.com>
	- Allow value 0 for host ID.
	- Support more than 8 controllers (> 40 in fact :-) )
	- Add 'excl=#ioaddr' boot option: exclude controller.
	  (Version 1.3a driver)

Thu Mar 11  23:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.3   (8xx-896 driver bundle)
	- Equivalent changes as ncr53c8xx-3.2 due to the driver bundle.
	  (See Changelog.ncr53c8xx)
	- Do a normal soft reset as first chip reset, since aborting current
	  operation may raise an interrupt we are not able to handle since
	  the interrupt handler is not yet established.

Sat Mar 6  11:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.2b
	- Fix some oooold bug that hangs the bus if a device rejects a
	  negotiation. Btw, the corresponding stuff also needed some cleanup
	  and thus the change is a bit larger than it could have been.
	- Still some typo that made compilation fail for 64 bit (trivial fix).

Sun Feb 21  20:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.2a
	- The rewrite of the interrupt handling broke the SBMC interrupt
	  handling due to a 1 bit mask tiny error. Hopefully fixed.
	- If INQUIRY came from a scatter list, the driver looked into
	  the scatterlist instead of the data.:) Since this should never
	  happen, we just discard the data if use_sg is not zero.

Fri Feb 12  23:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.2
	- Major rewrite of the interrupt handling and recovery stuff for
	  the support of non compliant SCSI removal, insertion and all
	  kinds of screw-up that may happen on the SCSI BUS.
	  Hopefully, the driver is now unbreakable or may-be, it is just
	  quite brocken. :-)
	  Many thanks to Johnson Russel (Symbios) for having responded to
	  my questions and for his interesting advices and comments about
	  support of SCSI hot-plug.
	- Add 'recovery' option to driver set-up.
	- Negotiate SYNC data transfers with CCS devices.
	- Deal correctly with 64 bit PCI address registers on Linux 2.2.
	  Pointed out by Leonard Zubkoff.

Sun Jan 31  18:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.1a
	- Some 896 chip revisions (all for now :-)), may hang-up if the
	  soft reset bit is set at the wrong time while SCRIPTS are running.
	  We need to first abort the current SCRIPTS operation prior to
	  resetting the chip. This fix has been sent to me by SYMBIOS/LSI
	  and I just translated it into ncr53c8xx syntax.
	  Must be considered 100 % trustable, unless I did some mistake
	  when translating it. :-)

Sun Jan 24  18:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.1
	- Major rewrite of the SCSI parity error handling.
	  The informations contained in the data manuals are incomplete about
	  this feature.
	  I asked SYMBIOS about and got in reply the explanations that are
	  _indeed_ missing in the data manuals.
	- Allow to tune request_irq() flags from the boot command line using
	  ncr53c8xx=irqm:??, as follows:
	  a) If bit 0x10 is set in irqm, SA_SHIRQ flag is not used.
	  b) If bit 0x20 is set in irqm, SA_INTERRUPT flag is not used.
	  By default the driver uses both SA_SHIRQ and SA_INTERRUPT.
	  Option 'ncr53c8xx=irqm:0x20' may be used when an IRQ is shared by
	  a 53C8XX adapter and a network board.
	- Fix for 64 bit PCI address register calculation. (Lance Robinson)
	- Fix for big-endian in phase mismatch handling. (Michal Jaegermann)

Fri Jan  1  20:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.0a
	- Waiting list look-up didn't work for the first command of the list.
	  Hopefully fixed, but tested on paper only. ;)
	- Remove the most part of PPC specific code for Linux-2.2.
	  Thanks to Cort.
	- Some other minors changes.

Sat Dec 19  21:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version sym53c8xx-1.0
	- Define some new IO registers for the 896 (istat1, mbox0, mbox1)
	- Revamp slightly the Symbios NVRAM lay-out based on the excerpt of
	  the header file I received from Symbios.
	- Check the PCI bus number for the boot order (Using a fast
	  PCI controller behing a PCI-PCI bridge seems sub-optimal).
	- Disable overlapped PCI arbitration for the 896 revision 1.
	- Reduce a bit the number of IO register reads for phase mismatch
	  by reading DWORDS at a time instead of BYTES.

Thu Dec  3  24:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.18
	- I received this afternoon a 896 from SYMBIOS and started testing
	  the driver with this beast. After having fixed 3 buglets, it worked
	  with all features enabled including the phase mismatch handling
	  from SCRIPTS. Since this feature is not yet tested enough, the
	  boot option 'ncr53c8xx=specf:1' is still required to enable the
	  driver to handle PM from SCRIPTS.

Sun Nov 29  18:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.17
	- The SISL RAID change requires now remap_pci_mem() stuff to be
	  compiled for __i386__ when normal IOs are used.
	- The PCI memory read from SCRIPTS that should ensure ordering
	  was in fact misplaced. BTW, this may explain why broken PCI
	  device drivers regarding ordering are working so well. ;-)
	- Rewrite ncr53c8xx_setup (boot command line options) since the
	  binary code was a bit too bloated in my opinion.
	- Make the code simpler in the wakeup_done routine.

Tue Nov 24  23:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.16
	- Add SCSI_NCR_OPTIMIZE_896_1 compile option and 'optim' boot option.
	  When set, the driver unconditionnaly assumes that the interrupt
	  handler is called for command completion, then clears INTF, scans
	  the done queue and returns if some completed CCB is found. If no
	  completed CCB are found, interrupt handling will proceed normally.
	  With a 896 that handles MA from SCRIPTS, this can be a great win,
	  since the driver will never performs PCI read transactions, but
	  only PCI write transactions that may be posted.
	  If the driver haven't to also raise the SIGP this would be perfect.
	  Even with this penalty, I think that this will work great.
	  Obviously this optimization makes sense only if the IRQ is not
	  shared with another device.
	- Still a buglet in the tags initial settings that needed to be fixed.
	  It was not possible to disable TGQ at system startup for devices
	  that claim TGQ support. The driver used at least 2 for the queue
	  depth but did'nt keep track of user settings for tags depth lower
	  than 2.

Thu Nov 19  23:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.15
	- Add support for hardware LED control of the 896.
	- Ignore chips that are driven by SISL RAID (DAC 960).
	  Change sent by Leonard Zubkoff and slightly reworked.
	- Prevent 810A rev 11 and 860 rev 1 from using cache line based
	  transactions since those early chip revisions may use such on
	  LOAD/STORE instructions (work-around).
	- Remove some useless and bloat code from the pci init stuff.
	- Do not use the readX()/writeX() kernel functions for __i386__,
	  since they perform useless masking operations in order to deal
	  with broken driver in 2.1.X kernel.

Wed Nov 11  10:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.14
	- The driver was unhappy when configured with default_tags > MAX_TAGS
	  Hopefully doubly-fixed.
	- Set PCI_PARITY in PCI_COMMAND register in not set (PCI fix-up).
	- Print out some message if phase mismatch is handled from SCRIPTS.

Sun Nov 1  14H00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.13
	- Some rewrite of the device detection code. This code had been
	  patched too much and needed to be face-lifted a bit.
	  Remove all platform dependent fix-ups that was not needed or
	  conflicted with some other driver code as work-arounds.
	  Reread the NVRAM before the calling of ncr_attach(). This spares
	  stack space and so allows to handle more boards.
	  Handle 64 bit base addresses under linux-2.0.X.
	  Set MASTER bit in PCI COMMAND register if not set.

Wed Oct 30 22H00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.12
	- Damned! I just broke the driver for Alpha by leaving a stale
	  instruction in the source code. Hopefully fixed.
	- Do not set PFEN when it is useless. Doing so we are sure that BOF
	  will be active, since the manual appears to be very unclear on what
	  feature is actually used by the chip when both PFEN and BOF are
	  set.

Sat Oct 24 16H00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.11
	- LOAD/STORE instructions were miscompiled for register offsets
	  beyond 0x7f. This broke accesses to 896' new registers.
	- Disable by default Phase Mismatch handling from SCRIPTS, since
	  current 896 rev.1 seems not to operate safely with the driver
	  when this feature is enabled (and above LOAD/STORE fix applied).
	  I will change the default to 'enabled' when this problem will be
	  solved.
	  Using boot option 'ncr53c8xx=specf:1' enables this feature.
	- Implement a work-around (DEL 472 - ITEM 5) that should allow the
	  driver to safely enable hardware phase mismatch with 896 rev. 1.

Tue Oct 20 22H00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.10
	- Add the 53c876 description to the chip table. This is only useful
	  for printing the right name of the controller.
	- Add additional checking of INQUIRY data:
	  Check INQUIRY data received length is at least 7. Byte 7 of
	  inquiry data contains device features bits and the driver might
	  be confused by garbage. Also check peripheral qualifier.
	- Use a 1,3,5,...MAXTAGS*2+1 tag numbering. Previous driver could
	  use any tag number from 1 to 253 and some non conformant devices
	  might have problems with large tag numbers.
	- Use NAME53C and NAME53C8XX for chip name prefix chip family name.
	  Just give a try using "sym53c" and "sym53c8xx" instead of "ncr53c"
	  and "ncr53c8xx". :-)

Sun Oct 11 17H00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.9
	- DEL-441 Item 2 work-around for the 53c876 rev <= 5 (0x15).
	- Break ncr_scatter() into 2 functions in order to guarantee best
	  possible code optimization for the case we get a scatter list.
	- Add the code intended to support up to 1 tera-byte for 64 bit systems.
	  It is probably too early, but I wanted to complete the thing.

Sat Oct 3 14H00 1998 Gerard Roudier (groudier@club-internet.fr)
	* version pre-sym53c8xx-0.8
	- Do some testing with io_mapped and fix what needed to be so.
	- Wait for SCSI selection to complete or time-out immediately after
	  the chip won arbitration, since executing SCRIPTS while the SCSI
	  core is performing SCSI selection breaks the selection procedure
	  at least for some chip revisions.
	- Interrupt the SCRIPTS if a device does not go to MSG OUT phase after
	  having been selected with ATN. Such a situation is not recoverable,
	  better to fail when we are stuck.


code:
Sat Dec 30 21:30 2000 Gerard Roudier
	* version sym-2.1.0-20001230
	- Initial release of SYM-2.

Mon Jan 08 21:30 2001 Gerard Roudier
	* version sym-2.1.1-20010108
	- Change a couple of defines containing ncr or NCR by their
	  equivalent containing sym or SYM instead.

Sun Jan 14 22:30 2001 Gerard Roudier
	* version sym-2.1.2-20010114
	- Fix a couple of printfs:
	  * Add the target number to the display of transfer parameters.
	  * Make the display of TCQ and queue depth clearer.

Wed Jan 17 23:30 2001 Gerard Roudier
	* version sym-2.1.3-20010117
	- Wrong residual values were returned in some situations.
	  This broke cdrecord with linux-2.4.0, for example.

Sat Jan 20 18:00 2001 Gerard Roudier
	* version sym-2.1.4-20010120
	- Add year 2001 to Copyright.
	- A tiny bug in the dma memory freeing path has been fixed.
	  (Driver unload failed with a bad address reference).

Wed Jan 24 21:00 2001 Gerard Roudier
	* version sym-2.1.5-20010124
	- Make the driver work under Linux-2.4.x when statically linked
	  with the kernel.
	- Check against memory allocation failure for SCRIPTZ and add the
	  missing free of this memory on instance detach.
	- Check against GPIO3 pulled low for HVD controllers (driver did
	  just the opposite).
	  Misdetection of BUS mode was triggered on module reload only,
	  since BIOS settings were trusted instead on first load.

Wed Feb 7 21:00 2001 Gerard Roudier
	* version sym-2.1.6-20010207
	- Call pci_enable_device() as wished by kernel maintainers.
	- Change the sym_queue_scsiio() interface.
	  This is intended to simplify portability.
	- Move the code intended to deal with the dowloading of SCRIPTS
	  from SCRIPTS :) in the patch method (was wrongly placed in
	  the SCRIPTS setup method).
	- Add a missing cpu_to_scr()  (np->abort_tbl.addr)
	- Remove a wrong cpu_to_scr() (np->targtbl_ba)
	- Cleanup a bit the PPR failure recovery code.

Sat Mar 3 21:00 2001 Gerard Roudier
	- Add option SYM_OPT_ANNOUNCE_TRANSFER_RATE and move the
	  corresponding code to file sym_misc.c.
	  Also move the code that sniffes INQUIRY to sym_misc.c.
	  This allows to share the corresponding code with NetBSD
	  without polluating the core driver source (sym_hipd.c).
	- Add optionnal code that handles IO timeouts from the driver.
	  (not used under Linux, but required for NetBSD)
	- Donnot assume any longer that PAGE_SHIFT and PAGE_SIZE are
	  defined at compile time, as at least NetBSD uses variables
	  in memory for that.
	- Refine a work-around for the C1010-33 that consists in
	  disabling internal LOAD/STORE. Was applied up to revision 1.
	  Is now only applied to revision 0.
	- Some code reorganisations due to code moves between files.

Tues Apr 10 21:00 2001 Gerard Roudier
	* version sym-2.1.9-20010412
	- Reset 53C896 and 53C1010 chip according to the manual.
	  (i.e.: set the ABRT bit in ISTAT if SCRIPTS are running)
	- Set #LUN in request sense only if scsi version <= 2 and
	  #LUN <= 7.
	- Set busy_itl in LCB to 1 if the LCB is allocated and a
	  SCSI command is active. This is a simplification.
	- In sym_hcb_free(), do not scan the free_ccbq if no CCBs
	  has been allocated. This fixes a panic if attach failed.
	- Add DT/ST (double/simple transition) in the transfer
	  negotiation announce.
	- Forces the max number of tasks per LUN to at least 64.
	- Use pci_set_dma_mask() for linux-2.4.3 and above.
	- A couple of comments fixes.

Wed May 22:00 2001 Gerard Roudier
	* version sym-2.1.10-20010509
	- Mask GPCNTL against 0x1c (was 0xfc) for the reading of the NVRAM.
	  This ensure LEDC bit will not be set on 896 and later chips.
	  Fix sent by Chip Salzenberg <chip@perlsupport.com>.
	- Define the number of PQS BUSes supported.
	  Fix sent by Stig Telfer <stig@api-networks.com>
	- Miscellaneous common code rearrangements due to NetBSD accel
	  ioctl support, without impact on Linux (hopefully).

Mon July 2 12:00 2001 Gerard Roudier
	* version sym-2.1.11-20010702
	- Add Tekram 390 U2B/U2W SCSI LED handling.
	  Submitted by Chip Salzenberg <chip@valinux.com>
	- Add call to scsi_set_pci_device() for kernels >= 2.4.4.
	- Check pci dma mapping failures and complete the IO with some
	  error when such mapping fails.
	- Fill in instance->max_cmd_len for kernels > 2.4.0.
	- A couple of tiny fixes ...

Sun Sep 9 18:00 2001 Gerard Roudier
	* version sym-2.1.12-20010909
	- Change my email address.
	- Add infrastructure for the forthcoming 64 bit DMA addressing support.
	  (Based on PCI 64 bit patch from David S. Miller)
	- Donnot use anymore vm_offset_t type.

Sat Sep 15 20:00 2001 Gerard Roudier
	* version sym-2.1.13-20010916
	- Add support for 64 bit DMA addressing using segment registers.
	  16 registers for up to 4 GB x 16 -> 64 GB.

Sat Sep 22 12:00 2001 Gerard Roudier
	* version sym-2.1.14-20010922
	- Complete rewrite of the eh handling. The driver is now using a
	  semaphore in order to behave synchronously as required by the eh
	  threads. A timer is also used to prevent from waiting indefinitely.

Sun Sep 30 17:00 2001 Gerard Roudier
	* version sym-2.1.15-20010930
	- Include <linux/module.h> unconditionnaly as expected by latest
	  kernels.
	- Use del_timer_sync() for recent kernels to kill the driver timer
	  on module release.

Sun Oct 28 15:00 2001 Gerard Roudier
	* version sym-2.1.16-20011028
	- Slightly simplify driver configuration.
	- Prepare a new patch against linux-2.4.13.

Sat Nov 17 10:00 2001 Gerard Roudier
	* version sym-2.1.17
	- Fix a couple of gcc/gcc3 warnings.
	- Allocate separately from the HCB the array for CCBs hashed by DSA.
	  All driver memory allocations are now not greater than 1 PAGE
	  even on PPC64 / 4KB PAGE surprising setup.

Sat Dec 01 18:00 2001 Gerard Roudier
	* version sym-2.1.17a
	- Use u_long instead of U32 for the IO base cookie. This is more
	  consistent with what archs are expecting.
	- Use MMIO per default for Power PC instead of some fake normal IO,
	  as Paul Mackerras stated that MMIO works fine now on this arch.

repo_name: angery/linux


code:
.. SPDX-License-Identifier: GPL-2.0

===================================
The BusLogic FlashPoint SCSI Driver
===================================

The BusLogic FlashPoint SCSI Host Adapters are now fully supported on Linux.
The upgrade program described below has been officially terminated effective
31 March 1997 since it is no longer needed.

::

  	  MYLEX INTRODUCES LINUX OPERATING SYSTEM SUPPORT FOR ITS
  	      BUSLOGIC FLASHPOINT LINE OF SCSI HOST ADAPTERS

  FREMONT, CA, -- October 8, 1996 -- Mylex Corporation has expanded Linux
  operating system support to its BusLogic brand of FlashPoint Ultra SCSI
  host adapters.  All of BusLogic's other SCSI host adapters, including the
  MultiMaster line, currently support the Linux operating system.  Linux
  drivers and information will be available on October 15th at
  http://sourceforge.net/projects/dandelion/.

  "Mylex is committed to supporting the Linux community," says Peter Shambora,
  vice president of marketing for Mylex.  "We have supported Linux driver
  development and provided technical support for our host adapters for several
  years, and are pleased to now make our FlashPoint products available to this
  user base."

The Linux Operating System
==========================

Linux is a freely-distributed implementation of UNIX for Intel x86, Sun
SPARC, SGI MIPS, Motorola 68k, Digital Alpha AXP and Motorola PowerPC
machines.  It supports a wide range of software, including the X Window
System, Emacs, and TCP/IP networking.  Further information is available at
http://www.linux.org and http://www.ssc.com/.

FlashPoint Host Adapters
========================

The FlashPoint family of Ultra SCSI host adapters, designed for workstation
and file server environments, are available in narrow, wide, dual channel,
and dual channel wide versions.  These adapters feature SeqEngine
automation technology, which minimizes SCSI command overhead and reduces
the number of interrupts generated to the CPU.

About Mylex
===========

Mylex Corporation (NASDAQ/NM SYMBOL: MYLX), founded in 1983, is a leading
producer of RAID technology and network management products.  The company
produces high performance disk array (RAID) controllers, and complementary
computer products for network servers, mass storage systems, workstations
and system boards.  Through its wide range of RAID controllers and its
BusLogic line of Ultra SCSI host adapter products, Mylex provides enabling
intelligent I/O technologies that increase network management control,
enhance CPU utilization, optimize I/O performance, and ensure data security
and availability.  Products are sold globally through a network of OEMs,
major distributors, VARs, and system integrators.  Mylex Corporation is
headquartered at 34551 Ardenwood Blvd., Fremont, CA.

Contact:
========

::

  Peter Shambora
  Vice President of Marketing
  Mylex Corp.
  510/796-6100
  peters@mylex.com

::

			       ANNOUNCEMENT
	       BusLogic FlashPoint LT/BT-948 Upgrade Program
			      1 February 1996

			  ADDITIONAL ANNOUNCEMENT
	       BusLogic FlashPoint LW/BT-958 Upgrade Program
			       14 June 1996

  Ever since its introduction last October, the BusLogic FlashPoint LT has
  been problematic for members of the Linux community, in that no Linux
  drivers have been available for this new Ultra SCSI product.  Despite its
  officially being positioned as a desktop workstation product, and not being
  particularly well suited for a high performance multitasking operating
  system like Linux, the FlashPoint LT has been touted by computer system
  vendors as the latest thing, and has been sold even on many of their high
  end systems, to the exclusion of the older MultiMaster products.  This has
  caused grief for many people who inadvertently purchased a system expecting
  that all BusLogic SCSI Host Adapters were supported by Linux, only to
  discover that the FlashPoint was not supported and would not be for quite
  some time, if ever.

  After this problem was identified, BusLogic contacted its major OEM
  customers to make sure the BT-946C/956C MultiMaster cards would still be
  made available, and that Linux users who mistakenly ordered systems with
  the FlashPoint would be able to upgrade to the BT-946C.  While this helped
  many purchasers of new systems, it was only a partial solution to the
  overall problem of FlashPoint support for Linux users.  It did nothing to
  assist the people who initially purchased a FlashPoint for a supported
  operating system and then later decided to run Linux, or those who had
  ended up with a FlashPoint LT, believing it was supported, and were unable
  to return it.

  In the middle of December, I asked to meet with BusLogic's senior
  management to discuss the issues related to Linux and free software support
  for the FlashPoint.  Rumors of varying accuracy had been circulating
  publicly about BusLogic's attitude toward the Linux community, and I felt
  it was best that these issues be addressed directly.  I sent an email
  message after 11pm one evening, and the meeting took place the next
  afternoon.  Unfortunately, corporate wheels sometimes grind slowly,
  especially when a company is being acquired, and so it's taken until now
  before the details were completely determined and a public statement could
  be made.

  BusLogic is not prepared at this time to release the information necessary
  for third parties to write drivers for the FlashPoint.  The only existing
  FlashPoint drivers have been written directly by BusLogic Engineering, and
  there is no FlashPoint documentation sufficiently detailed to allow outside
  developers to write a driver without substantial assistance.  While there
  are people at BusLogic who would rather not release the details of the
  FlashPoint architecture at all, that debate has not yet been settled either
  way.  In any event, even if documentation were available today it would
  take quite a while for a usable driver to be written, especially since I'm
  not convinced that the effort required would be worthwhile.

  However, BusLogic does remain committed to providing a high performance
  SCSI solution for the Linux community, and does not want to see anyone left
  unable to run Linux because they have a Flashpoint LT.  Therefore, BusLogic
  has put in place a direct upgrade program to allow any Linux user worldwide
  to trade in their FlashPoint LT for the new BT-948 MultiMaster PCI Ultra
  SCSI Host Adapter.  The BT-948 is the Ultra SCSI successor to the BT-946C
  and has all the best features of both the BT-946C and FlashPoint LT,
  including smart termination and a flash PROM for easy firmware updates, and
  is of course compatible with the present Linux driver.  The price for this
  upgrade has been set at US $45 plus shipping and handling, and the upgrade
  program will be administered through BusLogic Technical Support, which can
  be reached by electronic mail at techsup@buslogic.com, by Voice at +1 408
  654-0760, or by FAX at +1 408 492-1542.

  As of 14 June 1996, the original BusLogic FlashPoint LT to BT-948 upgrade
  program has now been extended to encompass the FlashPoint LW Wide Ultra
  SCSI Host Adapter.  Any Linux user worldwide may trade in their FlashPoint
  LW (BT-950) for a BT-958 MultiMaster PCI Ultra SCSI Host Adapter.  The
  price for this upgrade has been set at US $65 plus shipping and handling.

  I was a beta test site for the BT-948/958, and versions 1.2.1 and 1.3.1 of
  my BusLogic driver already included latent support for the BT-948/958.
  Additional cosmetic support for the Ultra SCSI MultiMaster cards was added
  subsequent releases.  As a result of this cooperative testing process,
  several firmware bugs were found and corrected.  My heavily loaded Linux
  test system provided an ideal environment for testing error recovery
  processes that are much more rarely exercised in production systems, but
  are crucial to overall system stability.  It was especially convenient
  being able to work directly with their firmware engineer in demonstrating
  the problems under control of the firmware debugging environment; things
  sure have come a long way since the last time I worked on firmware for an
  embedded system.  I am presently working on some performance testing and
  expect to have some data to report in the not too distant future.

  BusLogic asked me to send this announcement since a large percentage of the
  questions regarding support for the FlashPoint have either been sent to me
  directly via email, or have appeared in the Linux newsgroups in which I
  participate.  To summarize, BusLogic is offering Linux users an upgrade
  from the unsupported FlashPoint LT (BT-930) to the supported BT-948 for US
  $45 plus shipping and handling, or from the unsupported FlashPoint LW
  (BT-950) to the supported BT-958 for $65 plus shipping and handling.
  Contact BusLogic Technical Support at techsup@buslogic.com or +1 408
  654-0760 to take advantage of their offer.

  		Leonard N. Zubkoff
  		lnz@dandelion.com


code:
                     FlashPoint Driver Developer's Kit
                                Version 1.0

                   Copyright 1995-1996 by Mylex Corporation
                            All Rights Reserved

This program is free software; you may redistribute and/or modify it under
the terms of either:

    a) the GNU General Public License as published by the Free Software
    Foundation; either version 2, or (at your option) any later version,

    or

    b) the "BSD-style License" included below.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See either the GNU General Public
License or the BSD-style License below for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA.

The BSD-style License is as follows:

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain this LICENSE.FlashPoint
   file, without modification, this list of conditions, and the following
   disclaimer.  The following copyright notice must appear immediately at
   the beginning of all source files:

        Copyright 1995-1996 by Mylex Corporation.  All Rights Reserved

        This file is available under both the GNU General Public License
        and a BSD-style copyright; see LICENSE.FlashPoint for details.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

3. The name of Mylex Corporation may not be used to endorse or promote
   products derived from this software without specific prior written
   permission.

THIS SOFTWARE IS PROVIDED BY MYLEX CORP. ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
NO EVENT SHALL THE AUTHOR 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 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.


code:
.. SPDX-License-Identifier: GPL-2.0

=========================================
WorkBiT NinjaSCSI-3/32Bi driver for Linux
=========================================

1. Comment
==========

This is Workbit corp.'s(http://www.workbit.co.jp/) NinjaSCSI-3
for Linux.

2. My Linux environment
=======================

:Linux kernel: 2.4.7 / 2.2.19
:pcmcia-cs:    3.1.27
:gcc:          gcc-2.95.4
:PC card:      I-O data PCSC-F (NinjaSCSI-3),
               I-O data CBSC-II in 16 bit mode (NinjaSCSI-32Bi)
:SCSI device:  I-O data CDPS-PX24 (CD-ROM drive),
               Media Intelligent MMO-640GT (Optical disk drive)

3. Install
==========

(a) Check your PC card is true "NinjaSCSI-3" card.

    If you installed pcmcia-cs already, pcmcia reports your card as UNKNOWN
    card, and write ["WBT", "NinjaSCSI-3", "R1.0"] or some other string to
    your console or log file.

    You can also use "cardctl" program (this program is in pcmcia-cs source
    code) to get more info.

    ::

	# cat /var/log/messages
	...
	Jan  2 03:45:06 lindberg cardmgr[78]: unsupported card in socket 1
	Jan  2 03:45:06 lindberg cardmgr[78]:   product info: "WBT", "NinjaSCSI-3", "R1.0"
	...
	# cardctl ident
	Socket 0:
	  no product info available
	Socket 1:
	  product info: "IO DATA", "CBSC16       ", "1"

(b) Get the Linux kernel source, and extract it to /usr/src.
    Because the NinjaSCSI driver requires some SCSI header files in Linux
    kernel source, I recommend rebuilding your kernel; this eliminates
    some versioning problems.

    ::

	$ cd /usr/src
	$ tar -zxvf linux-x.x.x.tar.gz
	$ cd linux
	$ make config
	...

(c) If you use this driver with Kernel 2.2, unpack pcmcia-cs in some directory
    and make & install. This driver requires the pcmcia-cs header file.

    ::

	$ cd /usr/src
	$ tar zxvf cs-pcmcia-cs-3.x.x.tar.gz
	...

(d) Extract this driver's archive somewhere, and edit Makefile, then do make::

	$ tar -zxvf nsp_cs-x.x.tar.gz
	$ cd nsp_cs-x.x
	$ emacs Makefile
	...
	$ make

(e) Copy nsp_cs.ko to suitable place, like /lib/modules/<Kernel version>/pcmcia/ .

(f) Add these lines to /etc/pcmcia/config .

    If you use pcmcia-cs-3.1.8 or later, we can use "nsp_cs.conf" file.
    So, you don't need to edit file. Just copy to /etc/pcmcia/ .

    ::

	device "nsp_cs"
	  class "scsi" module "nsp_cs"

	card "WorkBit NinjaSCSI-3"
	  version "WBT", "NinjaSCSI-3", "R1.0"
	  bind "nsp_cs"

	card "WorkBit NinjaSCSI-32Bi (16bit)"
	  version "WORKBIT", "UltraNinja-16", "1"
	  bind "nsp_cs"

	# OEM
	card "WorkBit NinjaSCSI-32Bi (16bit) / IO-DATA"
	  version "IO DATA", "CBSC16       ", "1"
	  bind "nsp_cs"

	# OEM
	card "WorkBit NinjaSCSI-32Bi (16bit) / KME-1"
	  version "KME    ", "SCSI-CARD-001", "1"
	  bind "nsp_cs"
	card "WorkBit NinjaSCSI-32Bi (16bit) / KME-2"
	  version "KME    ", "SCSI-CARD-002", "1"
	  bind "nsp_cs"
	card "WorkBit NinjaSCSI-32Bi (16bit) / KME-3"
	  version "KME    ", "SCSI-CARD-003", "1"
	  bind "nsp_cs"
	card "WorkBit NinjaSCSI-32Bi (16bit) / KME-4"
	  version "KME    ", "SCSI-CARD-004", "1"
	  bind "nsp_cs"

(f) Start (or restart) pcmcia-cs::

	# /etc/rc.d/rc.pcmcia start        (BSD style)

    or::

	# /etc/init.d/pcmcia start         (SYSV style)

4. History
==========

See README.nin_cs .

5. Caution
==========

If you eject card when doing some operation for your SCSI device or suspend
your computer, you encount some *BAD* error like disk crash.

It works good when I using this driver right way. But I'm not guarantee
your data. Please backup your data when you use this driver.

6. Known Bugs
=============

In 2.4 kernel, you can't use 640MB Optical disk. This error comes from
high level SCSI driver.

7. Testing
==========

Please send me some reports(bug reports etc..) of this software.
When you send report, please tell me these or more.

	- card name
	- kernel version
	- your SCSI device name(hard drive, CD-ROM, etc...)

8. Copyright
============

 See GPL.

2001/08/08 yokota@netlab.is.tsukuba.ac.jp <YOKOTA Hiroshi>


code:
.. SPDX-License-Identifier: GPL-2.0

=====================
AdvanSys Driver Notes
=====================

AdvanSys (Advanced System Products, Inc.) manufactures the following
RISC-based, Bus-Mastering, Fast (10 Mhz) and Ultra (20 Mhz) Narrow
(8-bit transfer) SCSI Host Adapters for the ISA, EISA, VL, and PCI
buses and RISC-based, Bus-Mastering, Ultra (20 Mhz) Wide (16-bit
transfer) SCSI Host Adapters for the PCI bus.

The CDB counts below indicate the number of SCSI CDB (Command
Descriptor Block) requests that can be stored in the RISC chip
cache and board LRAM. A CDB is a single SCSI command. The driver
detect routine will display the number of CDBs available for each
adapter detected. The number of CDBs used by the driver can be
lowered in the BIOS by changing the 'Host Queue Size' adapter setting.

Laptop Products:
  - ABP-480 - Bus-Master CardBus (16 CDB)

Connectivity Products:
   - ABP510/5150 - Bus-Master ISA (240 CDB)
   - ABP5140 - Bus-Master ISA PnP (16 CDB)
   - ABP5142 - Bus-Master ISA PnP with floppy (16 CDB)
   - ABP902/3902 - Bus-Master PCI (16 CDB)
   - ABP3905 - Bus-Master PCI (16 CDB)
   - ABP915 - Bus-Master PCI (16 CDB)
   - ABP920 - Bus-Master PCI (16 CDB)
   - ABP3922 - Bus-Master PCI (16 CDB)
   - ABP3925 - Bus-Master PCI (16 CDB)
   - ABP930 - Bus-Master PCI (16 CDB)
   - ABP930U - Bus-Master PCI Ultra (16 CDB)
   - ABP930UA - Bus-Master PCI Ultra (16 CDB)
   - ABP960 - Bus-Master PCI MAC/PC (16 CDB)
   - ABP960U - Bus-Master PCI MAC/PC Ultra (16 CDB)

Single Channel Products:
   - ABP542 - Bus-Master ISA with floppy (240 CDB)
   - ABP742 - Bus-Master EISA (240 CDB)
   - ABP842 - Bus-Master VL (240 CDB)
   - ABP940 - Bus-Master PCI (240 CDB)
   - ABP940U - Bus-Master PCI Ultra (240 CDB)
   - ABP940UA/3940UA - Bus-Master PCI Ultra (240 CDB)
   - ABP970 - Bus-Master PCI MAC/PC (240 CDB)
   - ABP970U - Bus-Master PCI MAC/PC Ultra (240 CDB)
   - ABP3960UA - Bus-Master PCI MAC/PC Ultra (240 CDB)
   - ABP940UW/3940UW - Bus-Master PCI Ultra-Wide (253 CDB)
   - ABP970UW - Bus-Master PCI MAC/PC Ultra-Wide (253 CDB)
   - ABP3940U2W - Bus-Master PCI LVD/Ultra2-Wide (253 CDB)

Multi-Channel Products:
   - ABP752 - Dual Channel Bus-Master EISA (240 CDB Per Channel)
   - ABP852 - Dual Channel Bus-Master VL (240 CDB Per Channel)
   - ABP950 - Dual Channel Bus-Master PCI (240 CDB Per Channel)
   - ABP950UW - Dual Channel Bus-Master PCI Ultra-Wide (253 CDB Per Channel)
   - ABP980 - Four Channel Bus-Master PCI (240 CDB Per Channel)
   - ABP980U - Four Channel Bus-Master PCI Ultra (240 CDB Per Channel)
   - ABP980UA/3980UA - Four Channel Bus-Master PCI Ultra (16 CDB Per Chan.)
   - ABP3950U2W - Bus-Master PCI LVD/Ultra2-Wide and Ultra-Wide (253 CDB)
   - ABP3950U3W - Bus-Master PCI Dual LVD2/Ultra3-Wide (253 CDB)

Driver Compile Time Options and Debugging
=========================================

The following constants can be defined in the source file.

1. ADVANSYS_ASSERT - Enable driver assertions (Def: Enabled)

   Enabling this option adds assertion logic statements to the
   driver. If an assertion fails a message will be displayed to
   the console, but the system will continue to operate. Any
   assertions encountered should be reported to the person
   responsible for the driver. Assertion statements may proactively
   detect problems with the driver and facilitate fixing these
   problems. Enabling assertions will add a small overhead to the
   execution of the driver.

2. ADVANSYS_DEBUG - Enable driver debugging (Def: Disabled)

   Enabling this option adds tracing functions to the driver and the
   ability to set a driver tracing level at boot time.  This option is
   very useful for debugging the driver, but it will add to the size
   of the driver execution image and add overhead to the execution of
   the driver.

   The amount of debugging output can be controlled with the global
   variable 'asc_dbglvl'. The higher the number the more output. By
   default the debug level is 0.

   If the driver is loaded at boot time and the LILO Driver Option
   is included in the system, the debug level can be changed by
   specifying a 5th (ASC_NUM_IOPORT_PROBE + 1) I/O Port. The
   first three hex digits of the pseudo I/O Port must be set to
   'deb' and the fourth hex digit specifies the debug level: 0 - F.
   The following command line will look for an adapter at 0x330
   and set the debug level to 2::

      linux advansys=0x330,0,0,0,0xdeb2

   If the driver is built as a loadable module this variable can be
   defined when the driver is loaded. The following insmod command
   will set the debug level to one::

      insmod advansys.o asc_dbglvl=1

   Debugging Message Levels:

      ==== ==================
      0    Errors Only
      1    High-Level Tracing
      2-N  Verbose Tracing
      ==== ==================

   To enable debug output to console, please make sure that:

   a. System and kernel logging is enabled (syslogd, klogd running).
   b. Kernel messages are routed to console output. Check
      /etc/syslog.conf for an entry similar to this::

           kern.*                  /dev/console

   c. klogd is started with the appropriate -c parameter
      (e.g. klogd -c 8)

   This will cause printk() messages to be displayed on the
   current console. Refer to the klogd(8) and syslogd(8) man pages
   for details.

   Alternatively you can enable printk() to console with this
   program. However, this is not the 'official' way to do this.

   Debug output is logged in /var/log/messages.

   ::

     main()
     {
             syscall(103, 7, 0, 0);
     }

   Increasing LOG_BUF_LEN in kernel/printk.c to something like
   40960 allows more debug messages to be buffered in the kernel
   and written to the console or log file.

3. ADVANSYS_STATS - Enable statistics (Def: Enabled)

   Enabling this option adds statistics collection and display
   through /proc to the driver. The information is useful for
   monitoring driver and device performance. It will add to the
   size of the driver execution image and add minor overhead to
   the execution of the driver.

   Statistics are maintained on a per adapter basis. Driver entry
   point call counts and transfer size counts are maintained.
   Statistics are only available for kernels greater than or equal
   to v1.3.0 with the CONFIG_PROC_FS (/proc) file system configured.

   AdvanSys SCSI adapter files have the following path name format::

      /proc/scsi/advansys/{0,1,2,3,...}

   This information can be displayed with cat. For example::

      cat /proc/scsi/advansys/0

   When ADVANSYS_STATS is not defined the AdvanSys /proc files only
   contain adapter and device configuration information.

Driver LILO Option
==================

If init/main.c is modified as described in the 'Directions for Adding
the AdvanSys Driver to Linux' section (B.4.) above, the driver will
recognize the 'advansys' LILO command line and /etc/lilo.conf option.
This option can be used to either disable I/O port scanning or to limit
scanning to 1 - 4 I/O ports. Regardless of the option setting EISA and
PCI boards will still be searched for and detected. This option only
affects searching for ISA and VL boards.

Examples:
  1. Eliminate I/O port scanning:

     boot::

	linux advansys=

     or::

	boot: linux advansys=0x0

  2. Limit I/O port scanning to one I/O port:

     boot::

	linux advansys=0x110

  3. Limit I/O port scanning to four I/O ports:

     boot::

	linux advansys=0x110,0x210,0x230,0x330

For a loadable module the same effect can be achieved by setting
the 'asc_iopflag' variable and 'asc_ioport' array when loading
the driver, e.g.::

      insmod advansys.o asc_iopflag=1 asc_ioport=0x110,0x330

If ADVANSYS_DEBUG is defined a 5th (ASC_NUM_IOPORT_PROBE + 1)
I/O Port may be added to specify the driver debug level. Refer to
the 'Driver Compile Time Options and Debugging' section above for
more information.

Credits (Chronological Order)
=============================

Bob Frey <bfrey@turbolinux.com.cn> wrote the AdvanSys SCSI driver
and maintained it up to 3.3F. He continues to answer questions
and help maintain the driver.

Nathan Hartwell <mage@cdc3.cdc.net> provided the directions and
basis for the Linux v1.3.X changes which were included in the
1.2 release.

Thomas E Zerucha <zerucha@shell.portal.com> pointed out a bug
in advansys_biosparam() which was fixed in the 1.3 release.

Erik Ratcliffe <erik@caldera.com> has done testing of the
AdvanSys driver in the Caldera releases.

Rik van Riel <H.H.vanRiel@fys.ruu.nl> provided a patch to
AscWaitTixISRDone() which he found necessary to make the
driver work with a SCSI-1 disk.

Mark Moran <mmoran@mmoran.com> has helped test Ultra-Wide
support in the 3.1A driver.

Doug Gilbert <dgilbert@interlog.com> has made changes and
suggestions to improve the driver and done a lot of testing.

Ken Mort <ken@mort.net> reported a DEBUG compile bug fixed
in 3.2K.

Tom Rini <trini@kernel.crashing.org> provided the CONFIG_ISA
patch and helped with PowerPC wide and narrow board support.

Philip Blundell <philb@gnu.org> provided an
advansys_interrupts_enabled patch.

Dave Jones <dave@denial.force9.co.uk> reported the compiler
warnings generated when CONFIG_PROC_FS was not defined in
the 3.2M driver.

Jerry Quinn <jlquinn@us.ibm.com> fixed PowerPC support (endian
problems) for wide cards.

Bryan Henderson <bryanh@giraffe-data.com> helped debug narrow
card error handling.

Manuel Veloso <veloso@pobox.com> worked hard on PowerPC narrow
board support and fixed a bug in AscGetEEPConfig().

Arnaldo Carvalho de Melo <acme@conectiva.com.br> made
save_flags/restore_flags changes.

Andy Kellner <AKellner@connectcom.net> continued the Advansys SCSI
driver development for ConnectCom (Version > 3.3F).

Ken Witherow for extensive testing during the development of version 3.4.


code:
.. SPDX-License-Identifier: GPL-2.0
.. include:: <isonum.txt>

=====================================================
Adaptec AHA-1520/1522 SCSI driver for Linux (aha152x)
=====================================================

Copyright |copy| 1993-1999 Jürgen Fischer <fischer@norbit.de>

TC1550 patches by Luuk van Dijk (ldz@xs4all.nl)

In Revision 2 the driver was modified a lot (especially the
bottom-half handler complete()).

The driver is much cleaner now, has support for the new
error handling code in 2.3, produced less cpu load (much
less polling loops), has slightly higher throughput (at
least on my ancient test box; a i486/33Mhz/20MB).

Configuration Arguments
=======================

============  ========================================  ======================
IOPORT        base io address                           (0x340/0x140)
IRQ           interrupt level                           (9-12; default 11)
SCSI_ID       scsi id of controller                     (0-7; default 7)
RECONNECT     allow targets to disconnect from the bus  (0/1; default 1 [on])
PARITY        enable parity checking                    (0/1; default 1 [on])
SYNCHRONOUS   enable synchronous transfers              (0/1; default 1 [on])
DELAY:        bus reset delay                           (default 100)
EXT_TRANS:    enable extended translation               (0/1: default 0 [off])
              (see NOTES)
============  ========================================  ======================

Compile Time Configuration
==========================

(go into AHA152X in drivers/scsi/Makefile):

- DAUTOCONF
    use configuration the controller reports (AHA-152x only)

- DSKIP_BIOSTEST
    Don't test for BIOS signature (AHA-1510 or disabled BIOS)

- DSETUP0="{ IOPORT, IRQ, SCSI_ID, RECONNECT, PARITY, SYNCHRONOUS, DELAY, EXT_TRANS }"
    override for the first controller

- DSETUP1="{ IOPORT, IRQ, SCSI_ID, RECONNECT, PARITY, SYNCHRONOUS, DELAY, EXT_TRANS }"
    override for the second controller

- DAHA152X_DEBUG
    enable debugging output

- DAHA152X_STAT
    enable some statistics

LILO Command Line Options
=========================

 ::

    aha152x=<IOPORT>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>[,<SYNCHRONOUS>[,<DELAY> [,<EXT_TRANS]]]]]]]

 The normal configuration can be overridden by specifying a command line.
 When you do this, the BIOS test is skipped. Entered values have to be
 valid (known).  Don't use values that aren't supported under normal
 operation.  If you think that you need other values: contact me.
 For two controllers use the aha152x statement twice.

Symbols for Module Configuration
================================

Choose from 2 alternatives:

1. specify everything (old)::

    aha152x=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS

  configuration override for first controller

  ::

    aha152x1=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS

  configuration override for second controller

2. specify only what you need to (irq or io is required; new)

io=IOPORT0[,IOPORT1]
  IOPORT for first and second controller

irq=IRQ0[,IRQ1]
  IRQ for first and second controller

scsiid=SCSIID0[,SCSIID1]
  SCSIID for first and second controller

reconnect=RECONNECT0[,RECONNECT1]
  allow targets to disconnect for first and second controller

parity=PAR0[PAR1]
  use parity for first and second controller

sync=SYNCHRONOUS0[,SYNCHRONOUS1]
  enable synchronous transfers for first and second controller

delay=DELAY0[,DELAY1]
  reset DELAY for first and second controller

exttrans=EXTTRANS0[,EXTTRANS1]
  enable extended translation for first and second controller

If you use both alternatives the first will be taken.

Notes on EXT_TRANS
==================

SCSI uses block numbers to address blocks/sectors on a device.
The BIOS uses a cylinder/head/sector addressing scheme (C/H/S)
scheme instead.  DOS expects a BIOS or driver that understands this
C/H/S addressing.

The number of cylinders/heads/sectors is called geometry and is required
as base for requests in C/H/S addressing.  SCSI only knows about the
total capacity of disks in blocks (sectors).

Therefore the SCSI BIOS/DOS driver has to calculate a logical/virtual
geometry just to be able to support that addressing scheme.  The geometry
returned by the SCSI BIOS is a pure calculation and has nothing to
do with the real/physical geometry of the disk (which is usually
irrelevant anyway).

Basically this has no impact at all on Linux, because it also uses block
instead of C/H/S addressing.  Unfortunately C/H/S addressing is also used
in the partition table and therefore every operating system has to know
the right geometry to be able to interpret it.

Moreover there are certain limitations to the C/H/S addressing scheme,
namely the address space is limited to up to 255 heads, up to 63 sectors
and a maximum of 1023 cylinders.

The AHA-1522 BIOS calculates the geometry by fixing the number of heads
to 64, the number of sectors to 32 and by calculating the number of
cylinders by dividing the capacity reported by the disk by 64*32 (1 MB).
This is considered to be the default translation.

With respect to the limit of 1023 cylinders using C/H/S you can only
address the first GB of your disk in the partition table.  Therefore
BIOSes of some newer controllers based on the AIC-6260/6360 support
extended translation.  This means that the BIOS uses 255 for heads,
63 for sectors and then divides the capacity of the disk by 255*63
(about 8 MB), as soon it sees a disk greater than 1 GB.  That results
in a maximum of about 8 GB addressable diskspace in the partition table
(but there are already bigger disks out there today).

To make it even more complicated the translation mode might/might
not be configurable in certain BIOS setups.

This driver does some more or less failsafe guessing to get the
geometry right in most cases:

- for disks<1GB: use default translation (C/32/64)

- for disks>1GB:

  - take current geometry from the partition table
    (using scsicam_bios_param and accept only 'valid' geometries,
    ie. either (C/32/64) or (C/63/255)).  This can be extended translation
    even if it's not enabled in the driver.

  - if that fails, take extended translation if enabled by override,
    kernel or module parameter, otherwise take default translation and
    ask the user for verification.  This might on not yet partitioned
    disks.

References Used
===============

 "AIC-6260 SCSI Chip Specification", Adaptec Corporation.

 "SCSI COMPUTER SYSTEM INTERFACE - 2 (SCSI-2)", X3T9.2/86-109 rev. 10h

 "Writing a SCSI device driver for Linux", Rik Faith (faith@cs.unc.edu)

 "Kernel Hacker's Guide", Michael K. Johnson (johnsonm@sunsite.unc.edu)

 "Adaptec 1520/1522 User's Guide", Adaptec Corporation.

 Michael K. Johnson (johnsonm@sunsite.unc.edu)

 Drew Eckhardt (drew@cs.colorado.edu)

 Eric Youngdale (eric@andante.org)

 special thanks to Eric Youngdale for the free(!) supplying the
 documentation on the chip.


code:
.. SPDX-License-Identifier: GPL-2.0
.. include:: <isonum.txt>

===================================
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.

   Put a .conf file in the /etc/modprobe.d/ directory and add/edit a
   line containing ``options aic79xx aic79xx=[command[,command...]]`` where
   ``command`` is one or more of the following:

verbose
    :Definition: enable additional informative messages during driver operation.
    :Possible Values: This option is a flag
    :Default Value: disabled

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

no_reset
    :Definition: Do not reset the bus during the initial probe
                 phase
    :Possible Values: This option is a flag
    :Default Value: disabled

extended
    :Definition: Force extended translation on the controller
    :Possible Values: This option is a flag
    :Default Value: disabled

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

reverse_scan
    :Definition: Probe the scsi bus in reverse order, starting with target 15
    :Possible Values: This option is a flag
    :Default Value: disabled

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

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 omitted indicating that they should retain
                 the default tag depth.

    :Possible Values: 1 - 253
    :Default Value: 32

    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.

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 omitted indicating that
		 they should retain the default read streaming setting.

    Examples:

	    ::

		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.

	    ::

		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

dv: {value[,value...]}
    :Definition: Set Domain Validation Policy on a per-controller basis.
                 Controllers may be omitted indicating that
                 they should retain the default read streaming setting.

     :Possible Values:

		      ==== ===============================
		       < 0 Use setting from serial EEPROM.
                         0 Disable DV
		       > 0 Enable DV
		      ==== ===============================

    :Default Value: DV Serial EEPROM configuration 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.

seltime:[value]
    :Definition: Specifies the selection timeout value
    :Possible Values: 0 = 256ms, 1 = 128ms, 2 = 64ms, 3 = 32ms
    :Default Value: 0

.. Warning:

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

precomp: {value[,value...]}
    :Definition: Set IO Cell precompensation value on a per-controller basis.
                 Controllers may be omitted indicating that
                 they should retain the default precompensation setting.

    :Possible Values: 0 - 7
    :Default Value: Varies based on chip revision

    Examples:

	::

	    precomp:{0x1}

	On Controller 0 set precompensation to 1.

	::

	    precomp:{1,,7}

	- On Controller 0 set precompensation to 1.
	- On Controller 2 set precompensation to 8.

slewrate: {value[,value...]}
    :Definition: Set IO Cell slew rate on a per-controller basis.
                      Controllers may be omitted indicating that
                      they should retain the default slew rate setting.

    :Possible Values: 0 - 15
    :Default Value: Varies based on chip revision

    Examples:

	::

	    slewrate:{0x1}

	- On Controller 0 set slew rate to 1.

	::

	    slewrate :{1,,8}

	- On Controller 0 set slew rate to 1.
	- On Controller 2 set slew rate to 8.

amplitude: {value[,value...]}
    :Definition: Set IO Cell signal amplitude on a per-controller basis.
                 Controllers may be omitted indicating that
                 they should retain the default read streaming setting.

    :Possible Values: 1 - 7
    :Default Value: Varies based on chip revision

    Examples:

    ::

	amplitude:{0x1}

    On Controller 0 set amplitude to 1.

    ::

	amplitude :{1,,7}

    - On Controller 0 set amplitude to 1.
    - On Controller 2 set amplitude to 7.

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.com/en-US/_common/world_index.
    - 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 |copy| 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.