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 misspelling 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).
