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
	  hardware that fails 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 conditional 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 synchronisation 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 broken. :-)
	  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 information contained in the data manuals is 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 behind 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 unconditionally 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 didn't 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.
