Sat May 12 12:00 2001 Gerard Roudier (groudier@club-internet.fr)
	* version ncr53c8xx-3.4.3b
	- Ensure LEDC bit in GPCNTL is cleared when reading the NVRAM.
	  Fix sent by Stig Telfer <stig@api-networks.com>.
	- Define scsi_set_pci_device() as nil for kernel < 2.4.4.

Mon Feb 12 22:30 2001 Gerard Roudier (groudier@club-internet.fr)
	* version ncr53c8xx-3.4.3
	- Call pci_enable_device() as AC wants this to be done.
	- Get both the BAR cookies actual and PCI BAR values.
	  (see Changelog.sym53c8xx rev. 1.7.3 for details)
	- 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.

Sun Sep 24 21:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version ncr53c8xx-3.4.2
	- See Changelog.sym53c8xx, driver version 1.7.2.

Wed Jul 26 23:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version ncr53c8xx-3.4.1
	- Provide OpenFirmware path through the proc FS on PPC.
	- Remove trailing argument #2 from a couple of #undefs.

Sun Jul 09 16:30 2000 Gerard Roudier (groudier@club-internet.fr)
	* version ncr53c8xx-3.4.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.
	- 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.
	  Use SCSI_NCR_IOMAPPED instead of NCR_IOMAPPED.

Thu May 11   12:30 2000 Pam Delaney (pam.delaney@lsil.com)
	* revision 3.3b
 
Mon Apr 24 12:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2i
	- Return value 1 (instead of 0) from the driver setup routine.
	- Let the driver also attach controllers that have been set to 
	  OFF in the NVRAM as it did prior to revision 3.2g.

Sat Apr 1  12:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2h
	- Fix a compilation problem on Alpha introduced in version 3.2g.
          (`port' changed to `base_io').
	- Move from `sym' to this driver a tiny change for __sparc__ 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).

Thu Mar 16   9:30 2000 Pam Delaney (pam.delaney@lsil.com)
	* revision 3.3b-3
 	- Added exclusion for the 53C1010 and 53C1010_66 chips
	  to the driver (change to sym53c8xx_comm.h).

Mon March 6  23:15 2000 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2g
	- Add the file sym53c8xx_comm.h that collects code that should 
	  be shared by sym53c8xx and ncr53c8xx drivers. For now, it is  
	  a header file that is only included by the ncr53c8xx driver, 
	  but things will be cleaned up later. This code addresses 
	  notably:
	  * Chip detection and PCI related initialisations
	  * NVRAM detection and reading
	  * DMA mapping
	  * Boot setup command
	  * And some other ...
	- Add support for the new dynamic dma mapping kernel interface.
	  Requires Linux-2.3.47 (tested with pre-2.3.47-6).
	- Get data transfer direction from the scsi command structure 
	  (Scsi_Cmnd) when this information is available.

Mon March 6  23:15 2000 Gerard Roudier (groudier@club-internet.fr)
        * revision 3.2g
        - Add the file sym53c8xx_comm.h that collects code that should
          be shared by sym53c8xx and ncr53c8xx drivers. For now, it is
          a header file that is only included by the ncr53c8xx driver,
          but things will be cleaned up later. This code addresses
          notably:
          * Chip detection and PCI related initialisations
          * NVRAM detection and reading
          * DMA mapping
          * Boot setup command
          * And some other ...
        - Add support for the new dynamic dma mapping kernel interface.
          Requires Linux-2.3.47 (tested with pre-2.3.47-6).
        - Get data transfer direction from the scsi command structure
          (Scsi_Cmnd) when this information is available.

Fri Jan 14 14:00 2000 Pam Delaney (pam.delaney@lsil.com)
	* revision pre-3.3b-1
	- Merge parallel driver series 3.31 and 3.2e 

Tue Jan 11 14:00 2000 Pam Delaney (pam.delaney@lsil.com)
	* revision 3.31
	- Added support for mounting disks on wide-narrow-wide
	  scsi configurations.  
	- Built off of version 3.30

Mon Jan 10 13:30 2000 Pam Delaney (pam.delaney@lsil.com)
	* revision 3.30
	- Added capability to use the integrity checking code
	  in the kernel (optional).
	- Disabled support for the 53C1010.
	- Built off of version 3.2c

Sat Jan 8  22:00 2000 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2e
	- Add year 2000 copyright.
	- Display correctly bus signals when bus is detected wrong.
	- Remove the dead code that broke driver 3.2d.

Mon Dec 6  22:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2d
	- 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 device/function).
	- Get rid of the old PCI bios interface, but preserve kernel 2.0 
	  compatibility from a simple wrapper.
	- Remove the compilation condition about having to acquire the 
	  io_request_lock since it seems to be a definite feature now.:)
	- proc_dir structure no longer needed for kernel >= 2.3.27.
	- Change the driver detection code by the sym53c8xx one, modulo 
	  some minor changes. The driver can now attach any number of 
	  controllers (>40) and does no longer hoger stack space at 
	  initialisation.
	- 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.
	- Update the poor Tekram sync factor table.
	- Remove the compilation condition about having to acquire the 
	  io_request_lock since it seems to be a definite feature now.:)
	- proc_dir structure no longer needed for kernel >= 2.3.27.

Sat Sep 11  18:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2c
	- 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. ;-)
	- 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 May 10  11:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision pre-3.2b-1
	- 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.

Sun Apr 11  10:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2a
	- Add 'hostid:#id' boot option. This option allows to change the 
	  default SCSI id the driver uses for controllers.
	- Remove nvram layouts and driver set-up structures from the C source,
	  and use the one defined in sym53c8xx_defs.h file.
	  (shared by both drivers).
	- Set for now MAX LUNS to 16 (instead of 8).

Thu Mar 11  23:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.2	  (8xx-896 driver bundle)
	- Only define the host template in ncr53c8xx.h and include the 
	  sym53c8xx_defs.h file.
	- Declare static all symbols that do not need to be visible from 
	  outside the driver code.
	- Add 'excl' boot command option that allows to pass to the driver 
	  io address of devices not to attach.
	- Add info() function called from the host template to print 
	  driver/host information.
	- Minor documentation additions.

Sat Mar 6  11:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1h
	- 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  14:00 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1g
	- Deal correctly with 64 bit PCI address registers on Linux 2.2.
	  Pointed out by Leonard Zubkoff.
	- Allow to tune request_irq() flags from the boot command line using 
	  ncr53c8xx=irqm:??, as follows:
	  a) If bit 0x10 is set in irqm, IRQF_SHARED flag is not used.
	  b) If bit 0x20 is set in irqm, IRQF_DISABLED flag is not used.
	  By default the driver uses both IRQF_SHARED and IRQF_DISABLED.
	  Option 'ncr53c8xx=irqm:0x20' may be used when an IRQ is shared by 
	  a 53C8XX adapter and a network board.
	- Tiny mispelling fixed (ABORT instead of ABRT). Was fortunately 
	  harmless.
	- Negotiate SYNC data transfers with CCS devices.

Sat Jan 16  17:30 1999 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1f
	- Some PCI fix-ups not needed any more for PPC (from Cort).
	- Cache line size set to 16 DWORDS for Sparc   (from DSM).
	- Waiting list look-up didn't work for the first command of the list.
	- Remove 2 useless lines of code.

Sun Dec 13  18:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1e
	- Same work-around as for the 53c876 rev <= 0x15 for 53c896 rev 1:
	  Disable overlapped arbitration. This will not make difference 
	  since the chip has on-chip RAM.

Thu Nov 26  22:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1d
	- The SISL RAID change requires now remap_pci_mem() stuff to be 
	  compiled for __i386__ when normal IOs are used.
	- Minor spelling fixes in doc files.

Sat Nov 21  18:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1c
	- Ignore chips that are driven by SISL RAID (DAC 960).
	  Change sent by Leonard Zubkoff and slightly reworked.
	- 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.

Wed Nov 11  10:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1b
	- The driver was unhappy when configured with default_tags > MAX_TAGS
	  Hopefully doubly-fixed.
	- Update the Configure.help driver section that speaks of TAGS.

Wed Oct 21 21:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.1a
	- Changes from Eddie Dost for Sparc and Alpha:
	  ioremap/iounmap support for Sparc.
	  pcivtophys changed to bus_dvma_to_phys.
	- Add the 53c876 description to the chip table. This is only useful 
	  for printing the right name of the controller.
	- DEL-441 Item 2 work-around for the 53c876 rev <= 5 (0x15).
	- 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.
	- Cleanup of the SCSI tasks management:
	  Remove the special case for 32 tags. Now the driver only uses the 
	  scheme that allows up to 64 tags per LUN.
	  Merge some code from the 896 driver.
	  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.
	- 'no_sync' changed to 'no_disc' in the README file. This is an old 
	  and trivial mistake that seems to demonstrate the README file is 
	  not often read. :)

Sun Oct  4 14:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0i
	- Cosmetic changes for sparc (but not for the driver) that needs  
	  __irq_itoa() to be used for printed IRQ value to be understandable.
	- Some problems with the driver that didn't occur using driver 2.5f 
	  were due to a SCSI selection problem triggered by a clearly 
	  documented feature that in fact seems not to work: (53C8XX chips  
	  are claimed by the manuals to be able to execute SCSI scripts just 
	  after abitration while the SCSI core is performing SCSI selection).
	  This optimization is broken and has been removed.
	- Some broken scsi devices are confused when a negotiation is started 
	  on a LUN that does not correspond to a real device. According to 
	  SCSI specs, this is a device firmware bug. This has been worked 
	  around by only starting negotiation if the LUN has previously be 
	  used for at least 1 successful SCSI command.
	- The 'last message sent' printed out on M_REJECT message reception 
	  was read from the SFBR i/o register after the previous message had 
	  been sent. 
	  This was not correct and affects all previous driver versions and 
	  the original FreeBSD one as well. The SCSI scripts has been fixed 
	  so that it now provides the right information to the C code.

Sat Jul 18 13:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0g
	- Preliminary fixes for Big Endian (sent by Eddie C. Dost).
	  Big Endian architectures should work again with the driver.
	  Eddie's patch has been partially applied since current 2.1.109 
	  does not have all the Sparc changes of the vger tree.
	- Use of BITS_PER_LONG instead of (~0UL == 0xffffffffUL) has fixed
	  the problem observed when the driver was compiled using EGCS or 
	  PGCC.

Mon Jul 13 20:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0f
	- Some spelling fixes.
	- linux/config.h misplaced in ncr53c8xx.h
	- MODULE_PARM stuff added for linux 2.1.
	- check INQUIRY response data format is exactly 2. 
	- use BITS_PER_LONG if defined. 

Sun Jun 28 12:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0e
	- Some cleanup, spelling fixes, version checks, documentations 
	  changes, etc ...

Sat Jun 20 20:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0c
	- Add a boot setup option that allows to set up device queue depths 
	  at boot-up. This option is very useful since Linux does not 
	  allow to change scsi device queue depth once the system has been 
	  booted up.

Sun Jun 15 23:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0a
	- Support for up to 64 TAGS per LUN.
	- Rewrite the TARGET vs LUN capabilities management.
	  CmdQueue is now handled as a LUN capability as it shall be.
	  This also fixes a bug triggered when disabling tagged command 
	  queuing for a device that had this feature enabled.
	- Remove the ncr_opennings() stuff that was useless under Linux 
	  and hard to understand to me.
	- Add "setverbose" procfs driver command. It allows to tune 
	  verbose level after boot-up. Setting this level to zero, for 
	  example avoid flooding the syslog file.
	- Add KERN_XXX to some printk's.

Tue Jun 10 23:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 3.0
	- Linux config changes for 2.0.34:
	  Remove NVRAM detection config option. This option is now enabled 
	  by default but can be disabled by editing the driver header file.
	  Add a PROFILE config option.
	- Update Configure.help
	- Add calls to new function mdelay() for milli-seconds delay if 
	  kernel version >= 2.1.105.
	- Replace all printf(s) by printk(s). After all, the ncr53c8xx is 
	  a driver for Linux.
	- Perform auto-sense on COMMAND TERMINATED. Not sure it is useful.
	- Some other minor changes.

Tue Jun 4 23:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6n
	- Code cleanup and simplification:
	  Remove kernel 1.2.X and 1.3.X support.
	  Remove the _old_ target capabilities table.
	  Remove the error recovery code that have'nt been really useful.
	  Use a single alignment boundary (CACHE_LINE_SIZE) for data 
	  structures.
	- Several aggressive SCRIPTS optimizations and changes:
	  Reselect SCRIPTS code rewritten.
	  Support for selection/reselection without ATN.
	  And some others.
	- Miscallaneous changes in the C code:
	  Count actual number of CCB queued to the controller (future use).
	  Lots of other minor changes.

Wed May 13 20:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6m
	- Problem of missed SCSI bus reset with the 53C895 fixed by 
	  Richard Waltham. The 53C895 needs about 650 us for the bus 
	  mode to settle. Delays used while resetting the controller 
	  and the bus have been adjusted. Thanks Richard!
	- Some simplification for 64 bit arch done ccb address testing.
	- Add a check of the MSG_OUT phase after Selection with ATN.
	- The new tagged queue stuff seems ok, so some informationnal 
	  message have been conditionned by verbose >= 3.
	- Donnot reset if a SBMC interrupt reports the same bus mode.
	- Print out the whole driver set-up. Some options were missing and 
	  the print statement was misplaced for modules.
	- Ignore a SCSI parity interrupt if the chip is not connected to 
	  the SCSI bus.

Sat May 1 16:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6l
	- Add CCB done queue support for Alpha and perhaps some other 
	  architectures.
	- Add some barriers to enforce memory ordering for x86 and 
	  Alpha architectures.
	- Fix something that looks like an old bug in the nego SIR 
	  interrupt code in case of negotiation failure.

Sat Apr 25 21:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6k
	- Remove all accesses to the on-chip RAM from the C code:
	  Use SCRIPTS to load the on-chip RAM.
	  Use SCRIPTS to repair the start queue on selection timeout.
	  Use the copy of script in main memory to calculate the chip 
	  context on phase mismatch.
	- The above allows now to use the on-chip RAM without requiring 
	  to get access to the on-chip RAM from the C code. This makes 
	  on-chip RAM useable for linux-1.2.13 and for Linux-Alpha for 
	  instance.
	- Some simplifications and cleanups in the SCRIPTS and C code.
	- Buglet fixed in parity error recovery SCRIPTS (never tested).
	- Minor updates in README.ncr53c8xx.

Wed Apr 15 21:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6j
	- Incorporate changes from linux-2.1.95 ncr53c8xx driver version.
	- Add SMP support for linux-2.1.95 and above.
	- Fix a bug when QUEUE FULL is returned and no commands are 
	  disconnected. This happens with Atlas I / L912 and may happen 
	  with Atlas II / LXY4.
	- Nail another one on CHECK condition when requeuing the command 
	  for auto-sense.
	- Call scsi_done() for all completed commands after interrupt 
	  handling.
	- Increase the done queue to 24 entries.

Sat Apr 4 20:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6i
	- CTEST0 is used by the 53C885 for Power Management and 
	  priority setting between the 2 functions.
	  Use SDID instead as actual target number. Just have had to 
	  overwrite it with SSID on reselection.
	- Split DATA_IN and DATA_OUT scripts into 2 sub-scripts.
	  64 segments are moved from on-chip RAM scripts.
	  If more segments, a script in main memory is used for the 
	  additional segments.
	- Since the SCRIPTS processor continues SCRIPTS execution after 
	  having won arbitration, do some stuff prior to testing any SCSI 
	  phase on reselection. This should have the vertue to process 
	  scripts in parallel with the SCSI core performing selection.
	- Increase the done queue to 12 entries.

Sun Mar 29 12:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6h
	- Some fixes.

Tue Mar 26 23:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6g
	- New done queue. 8 entries by default (6 always useable).
	  Can be increased if needed.
	- Resources management using doubly linked queues.
	- New auto-sense and QUEUE FULL handling that does not need to 
	  stall the NCR queue any more.
	- New CCB starvation avoiding algorithm.
	- Prepare CCBs for SCSI commands that cannot be queued, instead of 
	  inserting these commands into the waiting list. The waiting list 
	  is now only used while resetting and when memory for CCBs is not 
	  yet available?

Sun Feb 8 22:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6f
	- Some fixes in order to really support the 53C895, at least with 
	  FAST-20 devices.
	- Heavy changes in the target/lun resources management to allow 
	  the scripts to jump directly to the CCB on reselection instead 
	  of walking on the lun CCBs list. Up to 32 tags per lun are now 
	  supported without script processor and PCI traffic overhead.

Sun Jan 11 22:00 1998 Gerard Roudier (groudier@club-internet.fr)
	* revision 2.6d
	- new (different ?) implementation of the start queue:
          Use a simple CALL to a launch script in the CCB.
	- implement a minimal done queue (1 entry :-) ).
          this avoid scanning all CCBs on INT FLY (Only scan all CCBs, on 
          overflow). Hit ratio is better than 99.9 % on my system, so no 
          need to have a larger done queue.
	- generalization of the restart of CCB on special condition as 
          Abort, QUEUE FULL, CHECK CONDITION.
          This has been called 'silly scheduler'.
	- make all the profiling code conditionned by a config option.
	  This spare some PCI traffic and C code when this feature is not 
          needed.
	- handle more cleanly the situation where direction is unknown.
	  The pointers patching is now performed by the SCRIPTS processor.
	- remove some useless scripts instructions.

	Ported from driver 2.5 series:
        ------------------------------
	- Use FAST-5 instead of SLOW for slow scsi devices according to 
	  new SPI-2 draft.
	- Make some changes in order to accommodate with 875 rev <= 3 
	  device errata listing 397. Minor consequences are:
	  . Leave use of PCI Write and Invalidate under user control.
	    Now, by default the driver does not enable PCI MWI and option
	    'specf:y' is required in order to enable this feature.
	  . Memory Read Line is not enabled for 875 and 875-like chips.
	  . Programmed burst length set to 64 DWORDS (instead of 128).
	    (Note: SYMBIOS uses 32 DWORDS for the SDMS BIOS)
	- Add 'buschk' boot option.
	  This option enables checking of SCSI BUS data lines after SCSI 
	  RESET (set by default). (Submitted by Richard Waltham).
	- Update the README file.
	- Dispatch CONDITION MET and RESERVATION CONFLICT scsi status 
	  as OK driver status.
	- Update the README file and the Symbios NVRAM format definition 
	  with removable media flags values (available with SDMS 4.09).
	- Several PCI configuration registers fix-ups for powerpc.
	  (Patch sent by Cort).
